diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/dist/1.0.0/objectivity.WordCloud.mpk b/dist/1.0.0/objectivity.WordCloud.mpk new file mode 100644 index 0000000..83c2176 Binary files /dev/null and b/dist/1.0.0/objectivity.WordCloud.mpk differ diff --git a/dist/1.0.1/objectivity.WordCloud.mpk b/dist/1.0.1/objectivity.WordCloud.mpk new file mode 100644 index 0000000..656c575 Binary files /dev/null and b/dist/1.0.1/objectivity.WordCloud.mpk differ diff --git a/dist/tmp/widgets/WordCloud.xml b/dist/tmp/widgets/WordCloud.xml new file mode 100644 index 0000000..60728b6 --- /dev/null +++ b/dist/tmp/widgets/WordCloud.xml @@ -0,0 +1,46 @@ + + + Word Cloud + Show word cloud based on react-d3-cloud + + + + + Data source + The list of objects to be used for rendering in the WordCloud, should contain a text attribute and a numeric attribute. + + + Text attribute + Text attribute + + + + + + Int attribute + Int attribute + + + + + + + + On click + This action will be called once user clicks on the word. + + + + + Chosen word + This attribute stores the clicked word + + + + + + + \ No newline at end of file diff --git a/dist/tmp/widgets/objectivity/wordcloud/WordCloud.js b/dist/tmp/widgets/objectivity/wordcloud/WordCloud.js new file mode 100644 index 0000000..0a3f020 --- /dev/null +++ b/dist/tmp/widgets/objectivity/wordcloud/WordCloud.js @@ -0,0 +1,25514 @@ + +(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document); +define(['react'], (function (React$3) { 'use strict'; + + + + function ___$insertStyle(css) { + if (!css || typeof window === 'undefined') { + return; + } + const style = document.createElement('style'); + style.setAttribute('type', 'text/css'); + style.innerHTML = css; + document.head.appendChild(style); + return css; + } + + function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + + var React__default = /*#__PURE__*/_interopDefaultLegacy(React$3); + + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + var check = function (it) { + return it && it.Math == Math && it; + }; // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 + + + var global$R = // eslint-disable-next-line es/no-global-this -- safe + check(typeof globalThis == 'object' && globalThis) || check(typeof window == 'object' && window) || // eslint-disable-next-line no-restricted-globals -- safe + check(typeof self == 'object' && self) || check(typeof commonjsGlobal == 'object' && commonjsGlobal) || // eslint-disable-next-line no-new-func -- fallback + function () { + return this; + }() || Function('return this')(); + + var objectGetOwnPropertyDescriptor = {}; + + var fails$15 = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } + }; + + var fails$14 = fails$15; // Detect IE8's incomplete defineProperty implementation + + + var descriptors = !fails$14(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty({}, 1, { + get: function () { + return 7; + } + })[1] != 7; + }); + + var objectPropertyIsEnumerable = {}; + + var $propertyIsEnumerable$1 = {}.propertyIsEnumerable; // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + + var getOwnPropertyDescriptor$9 = Object.getOwnPropertyDescriptor; // Nashorn ~ JDK8 bug + + var NASHORN_BUG = getOwnPropertyDescriptor$9 && !$propertyIsEnumerable$1.call({ + 1: 2 + }, 1); // `Object.prototype.propertyIsEnumerable` method implementation + // https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable + + objectPropertyIsEnumerable.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor$9(this, V); + return !!descriptor && descriptor.enumerable; + } : $propertyIsEnumerable$1; + + var createPropertyDescriptor$9 = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; + }; + + var toString$u = {}.toString; + + var classofRaw$1 = function (it) { + return toString$u.call(it).slice(8, -1); + }; + + var fails$13 = fails$15; + + var classof$d = classofRaw$1; + + var split = ''.split; // fallback for non-array-like ES3 and non-enumerable old V8 strings + + var indexedObject = fails$13(function () { + // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 + // eslint-disable-next-line no-prototype-builtins -- safe + return !Object('z').propertyIsEnumerable(0); + }) ? function (it) { + return classof$d(it) == 'String' ? split.call(it, '') : Object(it); + } : Object; + + // `RequireObjectCoercible` abstract operation + // https://tc39.es/ecma262/#sec-requireobjectcoercible + var requireObjectCoercible$j = function (it) { + if (it == undefined) throw TypeError("Can't call method on " + it); + return it; + }; + + // toObject with fallback for non-array-like ES3 strings + var IndexedObject$6 = indexedObject; + + var requireObjectCoercible$i = requireObjectCoercible$j; + + var toIndexedObject$d = function (it) { + return IndexedObject$6(requireObjectCoercible$i(it)); + }; + + // `IsCallable` abstract operation + // https://tc39.es/ecma262/#sec-iscallable + var isCallable$z = function (argument) { + return typeof argument === 'function'; + }; + + var isCallable$y = isCallable$z; + + var isObject$C = function (it) { + return typeof it === 'object' ? it !== null : isCallable$y(it); + }; + + var global$Q = global$R; + + var isCallable$x = isCallable$z; + + var aFunction = function (argument) { + return isCallable$x(argument) ? argument : undefined; + }; + + var getBuiltIn$y = function (namespace, method) { + return arguments.length < 2 ? aFunction(global$Q[namespace]) : global$Q[namespace] && global$Q[namespace][method]; + }; + + var getBuiltIn$x = getBuiltIn$y; + + var engineUserAgent = getBuiltIn$x('navigator', 'userAgent') || ''; + + var global$P = global$R; + + var userAgent$7 = engineUserAgent; + + var process$4 = global$P.process; + var Deno = global$P.Deno; + var versions = process$4 && process$4.versions || Deno && Deno.version; + var v8 = versions && versions.v8; + var match, version; + + if (v8) { + match = v8.split('.'); + version = match[0] < 4 ? 1 : match[0] + match[1]; + } else if (userAgent$7) { + match = userAgent$7.match(/Edge\/(\d+)/); + + if (!match || match[1] >= 74) { + match = userAgent$7.match(/Chrome\/(\d+)/); + if (match) version = match[1]; + } + } + + var engineV8Version = version && +version; + + /* eslint-disable es/no-symbol -- required for testing */ + + var V8_VERSION$3 = engineV8Version; + + var fails$12 = fails$15; // eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing + + + var nativeSymbol$1 = !!Object.getOwnPropertySymbols && !fails$12(function () { + var symbol = Symbol(); // Chrome 38 Symbol has incorrect toString conversion + // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances + + return !String(symbol) || !(Object(symbol) instanceof Symbol) || // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances + !Symbol.sham && V8_VERSION$3 && V8_VERSION$3 < 41; + }); + + /* eslint-disable es/no-symbol -- required for testing */ + + var NATIVE_SYMBOL$2 = nativeSymbol$1; + + var useSymbolAsUid = NATIVE_SYMBOL$2 && !Symbol.sham && typeof Symbol.iterator == 'symbol'; + + var isCallable$w = isCallable$z; + + var getBuiltIn$w = getBuiltIn$y; + + var USE_SYMBOL_AS_UID$1 = useSymbolAsUid; + + var isSymbol$5 = USE_SYMBOL_AS_UID$1 ? function (it) { + return typeof it == 'symbol'; + } : function (it) { + var $Symbol = getBuiltIn$w('Symbol'); + return isCallable$w($Symbol) && Object(it) instanceof $Symbol; + }; + + var tryToString$3 = function (argument) { + try { + return String(argument); + } catch (error) { + return 'Object'; + } + }; + + var isCallable$v = isCallable$z; + + var tryToString$2 = tryToString$3; // `Assert: IsCallable(argument) is true` + + + var aCallable$Q = function (argument) { + if (isCallable$v(argument)) return argument; + throw TypeError(tryToString$2(argument) + ' is not a function'); + }; + + var aCallable$P = aCallable$Q; // `GetMethod` abstract operation + // https://tc39.es/ecma262/#sec-getmethod + + + var getMethod$h = function (V, P) { + var func = V[P]; + return func == null ? undefined : aCallable$P(func); + }; + + var isCallable$u = isCallable$z; + + var isObject$B = isObject$C; // `OrdinaryToPrimitive` abstract operation + // https://tc39.es/ecma262/#sec-ordinarytoprimitive + + + var ordinaryToPrimitive$2 = function (input, pref) { + var fn, val; + if (pref === 'string' && isCallable$u(fn = input.toString) && !isObject$B(val = fn.call(input))) return val; + if (isCallable$u(fn = input.valueOf) && !isObject$B(val = fn.call(input))) return val; + if (pref !== 'string' && isCallable$u(fn = input.toString) && !isObject$B(val = fn.call(input))) return val; + throw TypeError("Can't convert object to primitive value"); + }; + + var shared$7 = {exports: {}}; + + var isPure = false; + + var global$O = global$R; + + var setGlobal$3 = function (key, value) { + try { + // eslint-disable-next-line es/no-object-defineproperty -- safe + Object.defineProperty(global$O, key, { + value: value, + configurable: true, + writable: true + }); + } catch (error) { + global$O[key] = value; + } + + return value; + }; + + var global$N = global$R; + + var setGlobal$2 = setGlobal$3; + + var SHARED = '__core-js_shared__'; + var store$5 = global$N[SHARED] || setGlobal$2(SHARED, {}); + var sharedStore = store$5; + + var store$4 = sharedStore; + + (shared$7.exports = function (key, value) { + return store$4[key] || (store$4[key] = value !== undefined ? value : {}); + })('versions', []).push({ + version: '3.18.3', + mode: 'global', + copyright: '© 2021 Denis Pushkarev (zloirock.ru)' + }); + + var requireObjectCoercible$h = requireObjectCoercible$j; // `ToObject` abstract operation + // https://tc39.es/ecma262/#sec-toobject + + + var toObject$A = function (argument) { + return Object(requireObjectCoercible$h(argument)); + }; + + var toObject$z = toObject$A; + + var hasOwnProperty$1 = {}.hasOwnProperty; // `HasOwnProperty` abstract operation + // https://tc39.es/ecma262/#sec-hasownproperty + + var hasOwnProperty_1 = Object.hasOwn || function hasOwn(it, key) { + return hasOwnProperty$1.call(toObject$z(it), key); + }; + + var id$2 = 0; + var postfix = Math.random(); + + var uid$5 = function (key) { + return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id$2 + postfix).toString(36); + }; + + var global$M = global$R; + + var shared$6 = shared$7.exports; + + var hasOwn$o = hasOwnProperty_1; + + var uid$4 = uid$5; + + var NATIVE_SYMBOL$1 = nativeSymbol$1; + + var USE_SYMBOL_AS_UID = useSymbolAsUid; + + var WellKnownSymbolsStore$1 = shared$6('wks'); + var Symbol$3 = global$M.Symbol; + var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol$3 : Symbol$3 && Symbol$3.withoutSetter || uid$4; + + var wellKnownSymbol$G = function (name) { + if (!hasOwn$o(WellKnownSymbolsStore$1, name) || !(NATIVE_SYMBOL$1 || typeof WellKnownSymbolsStore$1[name] == 'string')) { + if (NATIVE_SYMBOL$1 && hasOwn$o(Symbol$3, name)) { + WellKnownSymbolsStore$1[name] = Symbol$3[name]; + } else { + WellKnownSymbolsStore$1[name] = createWellKnownSymbol('Symbol.' + name); + } + } + + return WellKnownSymbolsStore$1[name]; + }; + + var isObject$A = isObject$C; + + var isSymbol$4 = isSymbol$5; + + var getMethod$g = getMethod$h; + + var ordinaryToPrimitive$1 = ordinaryToPrimitive$2; + + var wellKnownSymbol$F = wellKnownSymbol$G; + + var TO_PRIMITIVE$2 = wellKnownSymbol$F('toPrimitive'); // `ToPrimitive` abstract operation + // https://tc39.es/ecma262/#sec-toprimitive + + var toPrimitive$3 = function (input, pref) { + if (!isObject$A(input) || isSymbol$4(input)) return input; + var exoticToPrim = getMethod$g(input, TO_PRIMITIVE$2); + var result; + + if (exoticToPrim) { + if (pref === undefined) pref = 'default'; + result = exoticToPrim.call(input, pref); + if (!isObject$A(result) || isSymbol$4(result)) return result; + throw TypeError("Can't convert object to primitive value"); + } + + if (pref === undefined) pref = 'number'; + return ordinaryToPrimitive$1(input, pref); + }; + + var toPrimitive$2 = toPrimitive$3; + + var isSymbol$3 = isSymbol$5; // `ToPropertyKey` abstract operation + // https://tc39.es/ecma262/#sec-topropertykey + + + var toPropertyKey$9 = function (argument) { + var key = toPrimitive$2(argument, 'string'); + return isSymbol$3(key) ? key : String(key); + }; + + var global$L = global$R; + + var isObject$z = isObject$C; + + var document$3 = global$L.document; // typeof document.createElement is 'object' in old IE + + var EXISTS$1 = isObject$z(document$3) && isObject$z(document$3.createElement); + + var documentCreateElement$2 = function (it) { + return EXISTS$1 ? document$3.createElement(it) : {}; + }; + + var DESCRIPTORS$A = descriptors; + + var fails$11 = fails$15; + + var createElement$1 = documentCreateElement$2; // Thank's IE8 for his funny defineProperty + + + var ie8DomDefine = !DESCRIPTORS$A && !fails$11(function () { + // eslint-disable-next-line es/no-object-defineproperty -- requied for testing + return Object.defineProperty(createElement$1('div'), 'a', { + get: function () { + return 7; + } + }).a != 7; + }); + + var DESCRIPTORS$z = descriptors; + + var propertyIsEnumerableModule$2 = objectPropertyIsEnumerable; + + var createPropertyDescriptor$8 = createPropertyDescriptor$9; + + var toIndexedObject$c = toIndexedObject$d; + + var toPropertyKey$8 = toPropertyKey$9; + + var hasOwn$n = hasOwnProperty_1; + + var IE8_DOM_DEFINE$1 = ie8DomDefine; // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + + + var $getOwnPropertyDescriptor$1 = Object.getOwnPropertyDescriptor; // `Object.getOwnPropertyDescriptor` method + // https://tc39.es/ecma262/#sec-object.getownpropertydescriptor + + objectGetOwnPropertyDescriptor.f = DESCRIPTORS$z ? $getOwnPropertyDescriptor$1 : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject$c(O); + P = toPropertyKey$8(P); + if (IE8_DOM_DEFINE$1) try { + return $getOwnPropertyDescriptor$1(O, P); + } catch (error) { + /* empty */ + } + if (hasOwn$n(O, P)) return createPropertyDescriptor$8(!propertyIsEnumerableModule$2.f.call(O, P), O[P]); + }; + + var objectDefineProperty = {}; + + var isObject$y = isObject$C; // `Assert: Type(argument) is Object` + + + var anObject$1C = function (argument) { + if (isObject$y(argument)) return argument; + throw TypeError(String(argument) + ' is not an object'); + }; + + var DESCRIPTORS$y = descriptors; + + var IE8_DOM_DEFINE = ie8DomDefine; + + var anObject$1B = anObject$1C; + + var toPropertyKey$7 = toPropertyKey$9; // eslint-disable-next-line es/no-object-defineproperty -- safe + + + var $defineProperty$1 = Object.defineProperty; // `Object.defineProperty` method + // https://tc39.es/ecma262/#sec-object.defineproperty + + objectDefineProperty.f = DESCRIPTORS$y ? $defineProperty$1 : function defineProperty(O, P, Attributes) { + anObject$1B(O); + P = toPropertyKey$7(P); + anObject$1B(Attributes); + if (IE8_DOM_DEFINE) try { + return $defineProperty$1(O, P, Attributes); + } catch (error) { + /* empty */ + } + if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; + }; + + var DESCRIPTORS$x = descriptors; + + var definePropertyModule$c = objectDefineProperty; + + var createPropertyDescriptor$7 = createPropertyDescriptor$9; + + var createNonEnumerableProperty$h = DESCRIPTORS$x ? function (object, key, value) { + return definePropertyModule$c.f(object, key, createPropertyDescriptor$7(1, value)); + } : function (object, key, value) { + object[key] = value; + return object; + }; + + var redefine$l = {exports: {}}; + + var isCallable$t = isCallable$z; + + var store$3 = sharedStore; + + var functionToString = Function.toString; // this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper + + if (!isCallable$t(store$3.inspectSource)) { + store$3.inspectSource = function (it) { + return functionToString.call(it); + }; + } + + var inspectSource$4 = store$3.inspectSource; + + var global$K = global$R; + + var isCallable$s = isCallable$z; + + var inspectSource$3 = inspectSource$4; + + var WeakMap$3 = global$K.WeakMap; + var nativeWeakMap = isCallable$s(WeakMap$3) && /native code/.test(inspectSource$3(WeakMap$3)); + + var shared$5 = shared$7.exports; + + var uid$3 = uid$5; + + var keys$3 = shared$5('keys'); + + var sharedKey$4 = function (key) { + return keys$3[key] || (keys$3[key] = uid$3(key)); + }; + + var hiddenKeys$6 = {}; + + var NATIVE_WEAK_MAP$1 = nativeWeakMap; + + var global$J = global$R; + + var isObject$x = isObject$C; + + var createNonEnumerableProperty$g = createNonEnumerableProperty$h; + + var hasOwn$m = hasOwnProperty_1; + + var shared$4 = sharedStore; + + var sharedKey$3 = sharedKey$4; + + var hiddenKeys$5 = hiddenKeys$6; + + var OBJECT_ALREADY_INITIALIZED = 'Object already initialized'; + var WeakMap$2 = global$J.WeakMap; + var set$4, get$3, has$2; + + var enforce = function (it) { + return has$2(it) ? get$3(it) : set$4(it, {}); + }; + + var getterFor = function (TYPE) { + return function (it) { + var state; + + if (!isObject$x(it) || (state = get$3(it)).type !== TYPE) { + throw TypeError('Incompatible receiver, ' + TYPE + ' required'); + } + + return state; + }; + }; + + if (NATIVE_WEAK_MAP$1 || shared$4.state) { + var store$2 = shared$4.state || (shared$4.state = new WeakMap$2()); + var wmget = store$2.get; + var wmhas = store$2.has; + var wmset = store$2.set; + + set$4 = function (it, metadata) { + if (wmhas.call(store$2, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + wmset.call(store$2, it, metadata); + return metadata; + }; + + get$3 = function (it) { + return wmget.call(store$2, it) || {}; + }; + + has$2 = function (it) { + return wmhas.call(store$2, it); + }; + } else { + var STATE = sharedKey$3('state'); + hiddenKeys$5[STATE] = true; + + set$4 = function (it, metadata) { + if (hasOwn$m(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + createNonEnumerableProperty$g(it, STATE, metadata); + return metadata; + }; + + get$3 = function (it) { + return hasOwn$m(it, STATE) ? it[STATE] : {}; + }; + + has$2 = function (it) { + return hasOwn$m(it, STATE); + }; + } + + var internalState = { + set: set$4, + get: get$3, + has: has$2, + enforce: enforce, + getterFor: getterFor + }; + + var DESCRIPTORS$w = descriptors; + + var hasOwn$l = hasOwnProperty_1; + + var FunctionPrototype$2 = Function.prototype; // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + + var getDescriptor = DESCRIPTORS$w && Object.getOwnPropertyDescriptor; + var EXISTS = hasOwn$l(FunctionPrototype$2, 'name'); // additional protection from minified / mangled / dropped function names + + var PROPER = EXISTS && function something() { + /* empty */ + }.name === 'something'; + + var CONFIGURABLE = EXISTS && (!DESCRIPTORS$w || DESCRIPTORS$w && getDescriptor(FunctionPrototype$2, 'name').configurable); + var functionName = { + EXISTS: EXISTS, + PROPER: PROPER, + CONFIGURABLE: CONFIGURABLE + }; + + var global$I = global$R; + + var isCallable$r = isCallable$z; + + var hasOwn$k = hasOwnProperty_1; + + var createNonEnumerableProperty$f = createNonEnumerableProperty$h; + + var setGlobal$1 = setGlobal$3; + + var inspectSource$2 = inspectSource$4; + + var InternalStateModule$j = internalState; + + var CONFIGURABLE_FUNCTION_NAME$2 = functionName.CONFIGURABLE; + + var getInternalState$i = InternalStateModule$j.get; + var enforceInternalState$1 = InternalStateModule$j.enforce; + var TEMPLATE = String(String).split('String'); + (redefine$l.exports = function (O, key, value, options) { + var unsafe = options ? !!options.unsafe : false; + var simple = options ? !!options.enumerable : false; + var noTargetGet = options ? !!options.noTargetGet : false; + var name = options && options.name !== undefined ? options.name : key; + var state; + + if (isCallable$r(value)) { + if (String(name).slice(0, 7) === 'Symbol(') { + name = '[' + String(name).replace(/^Symbol\(([^)]*)\)/, '$1') + ']'; + } + + if (!hasOwn$k(value, 'name') || CONFIGURABLE_FUNCTION_NAME$2 && value.name !== name) { + createNonEnumerableProperty$f(value, 'name', name); + } + + state = enforceInternalState$1(value); + + if (!state.source) { + state.source = TEMPLATE.join(typeof name == 'string' ? name : ''); + } + } + + if (O === global$I) { + if (simple) O[key] = value;else setGlobal$1(key, value); + return; + } else if (!unsafe) { + delete O[key]; + } else if (!noTargetGet && O[key]) { + simple = true; + } + + if (simple) O[key] = value;else createNonEnumerableProperty$f(O, key, value); // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative + })(Function.prototype, 'toString', function toString() { + return isCallable$r(this) && getInternalState$i(this).source || inspectSource$2(this); + }); + + var objectGetOwnPropertyNames = {}; + + var ceil$2 = Math.ceil; + var floor$a = Math.floor; // `ToIntegerOrInfinity` abstract operation + // https://tc39.es/ecma262/#sec-tointegerorinfinity + + var toIntegerOrInfinity$i = function (argument) { + var number = +argument; // eslint-disable-next-line no-self-compare -- safe + + return number !== number || number === 0 ? 0 : (number > 0 ? floor$a : ceil$2)(number); + }; + + var toIntegerOrInfinity$h = toIntegerOrInfinity$i; + + var max$6 = Math.max; + var min$a = Math.min; // Helper for a popular repeating case of the spec: + // Let integer be ? ToInteger(index). + // If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). + + var toAbsoluteIndex$8 = function (index, length) { + var integer = toIntegerOrInfinity$h(index); + return integer < 0 ? max$6(integer + length, 0) : min$a(integer, length); + }; + + var toIntegerOrInfinity$g = toIntegerOrInfinity$i; + + var min$9 = Math.min; // `ToLength` abstract operation + // https://tc39.es/ecma262/#sec-tolength + + var toLength$d = function (argument) { + return argument > 0 ? min$9(toIntegerOrInfinity$g(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 + }; + + var toLength$c = toLength$d; // `LengthOfArrayLike` abstract operation + // https://tc39.es/ecma262/#sec-lengthofarraylike + + + var lengthOfArrayLike$q = function (obj) { + return toLength$c(obj.length); + }; + + var toIndexedObject$b = toIndexedObject$d; + + var toAbsoluteIndex$7 = toAbsoluteIndex$8; + + var lengthOfArrayLike$p = lengthOfArrayLike$q; // `Array.prototype.{ indexOf, includes }` methods implementation + + + var createMethod$8 = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIndexedObject$b($this); + var length = lengthOfArrayLike$p(O); + var index = toAbsoluteIndex$7(fromIndex, length); + var value; // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare -- NaN check + + if (IS_INCLUDES && el != el) while (length > index) { + value = O[index++]; // eslint-disable-next-line no-self-compare -- NaN check + + if (value != value) return true; // Array#indexOf ignores holes, Array#includes - not + } else for (; length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; + } + return !IS_INCLUDES && -1; + }; + }; + + var arrayIncludes = { + // `Array.prototype.includes` method + // https://tc39.es/ecma262/#sec-array.prototype.includes + includes: createMethod$8(true), + // `Array.prototype.indexOf` method + // https://tc39.es/ecma262/#sec-array.prototype.indexof + indexOf: createMethod$8(false) + }; + + var hasOwn$j = hasOwnProperty_1; + + var toIndexedObject$a = toIndexedObject$d; + + var indexOf = arrayIncludes.indexOf; + + var hiddenKeys$4 = hiddenKeys$6; + + var objectKeysInternal = function (object, names) { + var O = toIndexedObject$a(object); + var i = 0; + var result = []; + var key; + + for (key in O) !hasOwn$j(hiddenKeys$4, key) && hasOwn$j(O, key) && result.push(key); // Don't enum bug & hidden keys + + + while (names.length > i) if (hasOwn$j(O, key = names[i++])) { + ~indexOf(result, key) || result.push(key); + } + + return result; + }; + + // IE8- don't enum bug keys + var enumBugKeys$3 = ['constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf']; + + var internalObjectKeys$1 = objectKeysInternal; + + var enumBugKeys$2 = enumBugKeys$3; + + var hiddenKeys$3 = enumBugKeys$2.concat('length', 'prototype'); // `Object.getOwnPropertyNames` method + // https://tc39.es/ecma262/#sec-object.getownpropertynames + // eslint-disable-next-line es/no-object-getownpropertynames -- safe + + objectGetOwnPropertyNames.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys$1(O, hiddenKeys$3); + }; + + var objectGetOwnPropertySymbols = {}; + + // eslint-disable-next-line es/no-object-getownpropertysymbols -- safe + objectGetOwnPropertySymbols.f = Object.getOwnPropertySymbols; + + var getBuiltIn$v = getBuiltIn$y; + + var getOwnPropertyNamesModule$2 = objectGetOwnPropertyNames; + + var getOwnPropertySymbolsModule$2 = objectGetOwnPropertySymbols; + + var anObject$1A = anObject$1C; // all object keys, includes non-enumerable and symbols + + + var ownKeys$3 = getBuiltIn$v('Reflect', 'ownKeys') || function ownKeys(it) { + var keys = getOwnPropertyNamesModule$2.f(anObject$1A(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule$2.f; + return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys; + }; + + var hasOwn$i = hasOwnProperty_1; + + var ownKeys$2 = ownKeys$3; + + var getOwnPropertyDescriptorModule$6 = objectGetOwnPropertyDescriptor; + + var definePropertyModule$b = objectDefineProperty; + + var copyConstructorProperties$3 = function (target, source) { + var keys = ownKeys$2(source); + var defineProperty = definePropertyModule$b.f; + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule$6.f; + + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!hasOwn$i(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + }; + + var fails$10 = fails$15; + + var isCallable$q = isCallable$z; + + var replacement = /#|\.prototype\./; + + var isForced$5 = function (feature, detection) { + var value = data[normalize$1(feature)]; + return value == POLYFILL ? true : value == NATIVE ? false : isCallable$q(detection) ? fails$10(detection) : !!detection; + }; + + var normalize$1 = isForced$5.normalize = function (string) { + return String(string).replace(replacement, '.').toLowerCase(); + }; + + var data = isForced$5.data = {}; + var NATIVE = isForced$5.NATIVE = 'N'; + var POLYFILL = isForced$5.POLYFILL = 'P'; + var isForced_1 = isForced$5; + + var global$H = global$R; + + var getOwnPropertyDescriptor$8 = objectGetOwnPropertyDescriptor.f; + + var createNonEnumerableProperty$e = createNonEnumerableProperty$h; + + var redefine$k = redefine$l.exports; + + var setGlobal = setGlobal$3; + + var copyConstructorProperties$2 = copyConstructorProperties$3; + + var isForced$4 = isForced_1; + /* + options.target - name of the target object + options.global - target is the global object + options.stat - export as static methods of target + options.proto - export as prototype methods of target + options.real - real prototype method for the `pure` version + options.forced - export even if the native feature is available + options.bind - bind methods to the target, required for the `pure` version + options.wrap - wrap constructors to preventing global pollution, required for the `pure` version + options.unsafe - use the simple assignment of property instead of delete + defineProperty + options.sham - add a flag to not completely full polyfills + options.enumerable - export as enumerable property + options.noTargetGet - prevent calling a getter on target + options.name - the .name of the function if it does not match the key + */ + + + var _export = function (options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + + if (GLOBAL) { + target = global$H; + } else if (STATIC) { + target = global$H[TARGET] || setGlobal(TARGET, {}); + } else { + target = (global$H[TARGET] || {}).prototype; + } + + if (target) for (key in source) { + sourceProperty = source[key]; + + if (options.noTargetGet) { + descriptor = getOwnPropertyDescriptor$8(target, key); + targetProperty = descriptor && descriptor.value; + } else targetProperty = target[key]; + + FORCED = isForced$4(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); // contained in target + + if (!FORCED && targetProperty !== undefined) { + if (typeof sourceProperty === typeof targetProperty) continue; + copyConstructorProperties$2(sourceProperty, targetProperty); + } // add a flag to not completely full polyfills + + + if (options.sham || targetProperty && targetProperty.sham) { + createNonEnumerableProperty$e(sourceProperty, 'sham', true); + } // extend global + + + redefine$k(target, key, sourceProperty, options); + } + }; + + var classof$c = classofRaw$1; // `IsArray` abstract operation + // https://tc39.es/ecma262/#sec-isarray + // eslint-disable-next-line es/no-array-isarray -- safe + + + var isArray$8 = Array.isArray || function isArray(argument) { + return classof$c(argument) == 'Array'; + }; + + var wellKnownSymbol$E = wellKnownSymbol$G; + + var TO_STRING_TAG$8 = wellKnownSymbol$E('toStringTag'); + var test$2 = {}; + test$2[TO_STRING_TAG$8] = 'z'; + var toStringTagSupport = String(test$2) === '[object z]'; + + var TO_STRING_TAG_SUPPORT$2 = toStringTagSupport; + + var isCallable$p = isCallable$z; + + var classofRaw = classofRaw$1; + + var wellKnownSymbol$D = wellKnownSymbol$G; + + var TO_STRING_TAG$7 = wellKnownSymbol$D('toStringTag'); // ES3 wrong here + + var CORRECT_ARGUMENTS = classofRaw(function () { + return arguments; + }()) == 'Arguments'; // fallback for IE11 Script Access Denied error + + var tryGet = function (it, key) { + try { + return it[key]; + } catch (error) { + /* empty */ + } + }; // getting tag from ES6+ `Object.prototype.toString` + + + var classof$b = TO_STRING_TAG_SUPPORT$2 ? classofRaw : function (it) { + var O, tag, result; + return it === undefined ? 'Undefined' : it === null ? 'Null' // @@toStringTag case + : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG$7)) == 'string' ? tag // builtinTag case + : CORRECT_ARGUMENTS ? classofRaw(O) // ES3 arguments fallback + : (result = classofRaw(O)) == 'Object' && isCallable$p(O.callee) ? 'Arguments' : result; + }; + + var classof$a = classof$b; + + var toString$t = function (argument) { + if (classof$a(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string'); + return String(argument); + }; + + var internalObjectKeys = objectKeysInternal; + + var enumBugKeys$1 = enumBugKeys$3; // `Object.keys` method + // https://tc39.es/ecma262/#sec-object.keys + // eslint-disable-next-line es/no-object-keys -- safe + + + var objectKeys$5 = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys$1); + }; + + var DESCRIPTORS$v = descriptors; + + var definePropertyModule$a = objectDefineProperty; + + var anObject$1z = anObject$1C; + + var objectKeys$4 = objectKeys$5; // `Object.defineProperties` method + // https://tc39.es/ecma262/#sec-object.defineproperties + // eslint-disable-next-line es/no-object-defineproperties -- safe + + + var objectDefineProperties = DESCRIPTORS$v ? Object.defineProperties : function defineProperties(O, Properties) { + anObject$1z(O); + var keys = objectKeys$4(Properties); + var length = keys.length; + var index = 0; + var key; + + while (length > index) definePropertyModule$a.f(O, key = keys[index++], Properties[key]); + + return O; + }; + + var getBuiltIn$u = getBuiltIn$y; + + var html$2 = getBuiltIn$u('document', 'documentElement'); + + /* global ActiveXObject -- old IE, WSH */ + + var anObject$1y = anObject$1C; + + var defineProperties$3 = objectDefineProperties; + + var enumBugKeys = enumBugKeys$3; + + var hiddenKeys$2 = hiddenKeys$6; + + var html$1 = html$2; + + var documentCreateElement$1 = documentCreateElement$2; + + var sharedKey$2 = sharedKey$4; + + var GT = '>'; + var LT = '<'; + var PROTOTYPE$2 = 'prototype'; + var SCRIPT = 'script'; + var IE_PROTO$1 = sharedKey$2('IE_PROTO'); + + var EmptyConstructor = function () { + /* empty */ + }; + + var scriptTag = function (content) { + return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; + }; // Create object with fake `null` prototype: use ActiveX Object with cleared prototype + + + var NullProtoObjectViaActiveX = function (activeXDocument) { + activeXDocument.write(scriptTag('')); + activeXDocument.close(); + var temp = activeXDocument.parentWindow.Object; + activeXDocument = null; // avoid memory leak + + return temp; + }; // Create object with fake `null` prototype: use iframe Object with cleared prototype + + + var NullProtoObjectViaIFrame = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = documentCreateElement$1('iframe'); + var JS = 'java' + SCRIPT + ':'; + var iframeDocument; + iframe.style.display = 'none'; + html$1.appendChild(iframe); // https://github.com/zloirock/core-js/issues/475 + + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag('document.F=Object')); + iframeDocument.close(); + return iframeDocument.F; + }; // Check for document.domain and active x support + // No need to use active x approach when document.domain is not set + // see https://github.com/es-shims/es5-shim/issues/150 + // variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 + // avoid IE GC bug + + + var activeXDocument; + + var NullProtoObject = function () { + try { + activeXDocument = new ActiveXObject('htmlfile'); + } catch (error) { + /* ignore */ + } + + NullProtoObject = typeof document != 'undefined' ? document.domain && activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) // old IE + : NullProtoObjectViaIFrame() : NullProtoObjectViaActiveX(activeXDocument); // WSH + + var length = enumBugKeys.length; + + while (length--) delete NullProtoObject[PROTOTYPE$2][enumBugKeys[length]]; + + return NullProtoObject(); + }; + + hiddenKeys$2[IE_PROTO$1] = true; // `Object.create` method + // https://tc39.es/ecma262/#sec-object.create + + var objectCreate$1 = Object.create || function create(O, Properties) { + var result; + + if (O !== null) { + EmptyConstructor[PROTOTYPE$2] = anObject$1y(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE$2] = null; // add "__proto__" for Object.getPrototypeOf polyfill + + result[IE_PROTO$1] = O; + } else result = NullProtoObject(); + + return Properties === undefined ? result : defineProperties$3(result, Properties); + }; + + var objectGetOwnPropertyNamesExternal = {}; + + /* eslint-disable es/no-object-getownpropertynames -- safe */ + + var toIndexedObject$9 = toIndexedObject$d; + + var $getOwnPropertyNames$1 = objectGetOwnPropertyNames.f; + + var toString$s = {}.toString; + var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : []; + + var getWindowNames = function (it) { + try { + return $getOwnPropertyNames$1(it); + } catch (error) { + return windowNames.slice(); + } + }; // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window + + + objectGetOwnPropertyNamesExternal.f = function getOwnPropertyNames(it) { + return windowNames && toString$s.call(it) == '[object Window]' ? getWindowNames(it) : $getOwnPropertyNames$1(toIndexedObject$9(it)); + }; + + var wellKnownSymbolWrapped = {}; + + var wellKnownSymbol$C = wellKnownSymbol$G; + + wellKnownSymbolWrapped.f = wellKnownSymbol$C; + + var global$G = global$R; + + var path$1 = global$G; + + var path = path$1; + + var hasOwn$h = hasOwnProperty_1; + + var wrappedWellKnownSymbolModule$1 = wellKnownSymbolWrapped; + + var defineProperty$g = objectDefineProperty.f; + + var defineWellKnownSymbol$l = function (NAME) { + var Symbol = path.Symbol || (path.Symbol = {}); + if (!hasOwn$h(Symbol, NAME)) defineProperty$g(Symbol, NAME, { + value: wrappedWellKnownSymbolModule$1.f(NAME) + }); + }; + + var defineProperty$f = objectDefineProperty.f; + + var hasOwn$g = hasOwnProperty_1; + + var wellKnownSymbol$B = wellKnownSymbol$G; + + var TO_STRING_TAG$6 = wellKnownSymbol$B('toStringTag'); + + var setToStringTag$b = function (it, TAG, STATIC) { + if (it && !hasOwn$g(it = STATIC ? it : it.prototype, TO_STRING_TAG$6)) { + defineProperty$f(it, TO_STRING_TAG$6, { + configurable: true, + value: TAG + }); + } + }; + + var aCallable$O = aCallable$Q; // optional / simple context binding + + + var functionBindContext = function (fn, that, length) { + aCallable$O(fn); + if (that === undefined) return fn; + + switch (length) { + case 0: + return function () { + return fn.call(that); + }; + + case 1: + return function (a) { + return fn.call(that, a); + }; + + case 2: + return function (a, b) { + return fn.call(that, a, b); + }; + + case 3: + return function (a, b, c) { + return fn.call(that, a, b, c); + }; + } + + return function () { + return fn.apply(that, arguments); + }; + }; + + var fails$$ = fails$15; + + var isCallable$o = isCallable$z; + + var classof$9 = classof$b; + + var getBuiltIn$t = getBuiltIn$y; + + var inspectSource$1 = inspectSource$4; + + var empty$1 = []; + var construct$1 = getBuiltIn$t('Reflect', 'construct'); + var constructorRegExp = /^\s*(?:class|function)\b/; + var exec$1 = constructorRegExp.exec; + var INCORRECT_TO_STRING = !constructorRegExp.exec(function () { + /* empty */ + }); + + var isConstructorModern = function (argument) { + if (!isCallable$o(argument)) return false; + + try { + construct$1(Object, empty$1, argument); + return true; + } catch (error) { + return false; + } + }; + + var isConstructorLegacy = function (argument) { + if (!isCallable$o(argument)) return false; + + switch (classof$9(argument)) { + case 'AsyncFunction': + case 'GeneratorFunction': + case 'AsyncGeneratorFunction': + return false; + // we can't check .prototype since constructors produced by .bind haven't it + } + + return INCORRECT_TO_STRING || !!exec$1.call(constructorRegExp, inspectSource$1(argument)); + }; // `IsConstructor` abstract operation + // https://tc39.es/ecma262/#sec-isconstructor + + + var isConstructor$7 = !construct$1 || fails$$(function () { + var called; + return isConstructorModern(isConstructorModern.call) || !isConstructorModern(Object) || !isConstructorModern(function () { + called = true; + }) || called; + }) ? isConstructorLegacy : isConstructorModern; + + var isArray$7 = isArray$8; + + var isConstructor$6 = isConstructor$7; + + var isObject$w = isObject$C; + + var wellKnownSymbol$A = wellKnownSymbol$G; + + var SPECIES$6 = wellKnownSymbol$A('species'); // a part of `ArraySpeciesCreate` abstract operation + // https://tc39.es/ecma262/#sec-arrayspeciescreate + + var arraySpeciesConstructor$2 = function (originalArray) { + var C; + + if (isArray$7(originalArray)) { + C = originalArray.constructor; // cross-realm fallback + + if (isConstructor$6(C) && (C === Array || isArray$7(C.prototype))) C = undefined;else if (isObject$w(C)) { + C = C[SPECIES$6]; + if (C === null) C = undefined; + } + } + + return C === undefined ? Array : C; + }; + + var arraySpeciesConstructor$1 = arraySpeciesConstructor$2; // `ArraySpeciesCreate` abstract operation + // https://tc39.es/ecma262/#sec-arrayspeciescreate + + + var arraySpeciesCreate$6 = function (originalArray, length) { + return new (arraySpeciesConstructor$1(originalArray))(length === 0 ? 0 : length); + }; + + var bind$q = functionBindContext; + + var IndexedObject$5 = indexedObject; + + var toObject$y = toObject$A; + + var lengthOfArrayLike$o = lengthOfArrayLike$q; + + var arraySpeciesCreate$5 = arraySpeciesCreate$6; + + var push$4 = [].push; // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation + + var createMethod$7 = function (TYPE) { + var IS_MAP = TYPE == 1; + var IS_FILTER = TYPE == 2; + var IS_SOME = TYPE == 3; + var IS_EVERY = TYPE == 4; + var IS_FIND_INDEX = TYPE == 6; + var IS_FILTER_REJECT = TYPE == 7; + var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; + return function ($this, callbackfn, that, specificCreate) { + var O = toObject$y($this); + var self = IndexedObject$5(O); + var boundFunction = bind$q(callbackfn, that, 3); + var length = lengthOfArrayLike$o(self); + var index = 0; + var create = specificCreate || arraySpeciesCreate$5; + var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined; + var value, result; + + for (; length > index; index++) if (NO_HOLES || index in self) { + value = self[index]; + result = boundFunction(value, index, O); + + if (TYPE) { + if (IS_MAP) target[index] = result; // map + else if (result) switch (TYPE) { + case 3: + return true; + // some + + case 5: + return value; + // find + + case 6: + return index; + // findIndex + + case 2: + push$4.call(target, value); + // filter + } else switch (TYPE) { + case 4: + return false; + // every + + case 7: + push$4.call(target, value); + // filterReject + } + } + } + + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; + }; + }; + + var arrayIteration = { + // `Array.prototype.forEach` method + // https://tc39.es/ecma262/#sec-array.prototype.foreach + forEach: createMethod$7(0), + // `Array.prototype.map` method + // https://tc39.es/ecma262/#sec-array.prototype.map + map: createMethod$7(1), + // `Array.prototype.filter` method + // https://tc39.es/ecma262/#sec-array.prototype.filter + filter: createMethod$7(2), + // `Array.prototype.some` method + // https://tc39.es/ecma262/#sec-array.prototype.some + some: createMethod$7(3), + // `Array.prototype.every` method + // https://tc39.es/ecma262/#sec-array.prototype.every + every: createMethod$7(4), + // `Array.prototype.find` method + // https://tc39.es/ecma262/#sec-array.prototype.find + find: createMethod$7(5), + // `Array.prototype.findIndex` method + // https://tc39.es/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod$7(6), + // `Array.prototype.filterReject` method + // https://github.com/tc39/proposal-array-filtering + filterReject: createMethod$7(7) + }; + + var $$4i = _export; + + var global$F = global$R; + + var getBuiltIn$s = getBuiltIn$y; + + var DESCRIPTORS$u = descriptors; + + var NATIVE_SYMBOL = nativeSymbol$1; + + var fails$_ = fails$15; + + var hasOwn$f = hasOwnProperty_1; + + var isArray$6 = isArray$8; + + var isCallable$n = isCallable$z; + + var isObject$v = isObject$C; + + var isSymbol$2 = isSymbol$5; + + var anObject$1x = anObject$1C; + + var toObject$x = toObject$A; + + var toIndexedObject$8 = toIndexedObject$d; + + var toPropertyKey$6 = toPropertyKey$9; + + var $toString$3 = toString$t; + + var createPropertyDescriptor$6 = createPropertyDescriptor$9; + + var nativeObjectCreate = objectCreate$1; + + var objectKeys$3 = objectKeys$5; + + var getOwnPropertyNamesModule$1 = objectGetOwnPropertyNames; + + var getOwnPropertyNamesExternal = objectGetOwnPropertyNamesExternal; + + var getOwnPropertySymbolsModule$1 = objectGetOwnPropertySymbols; + + var getOwnPropertyDescriptorModule$5 = objectGetOwnPropertyDescriptor; + + var definePropertyModule$9 = objectDefineProperty; + + var propertyIsEnumerableModule$1 = objectPropertyIsEnumerable; + + var redefine$j = redefine$l.exports; + + var shared$3 = shared$7.exports; + + var sharedKey$1 = sharedKey$4; + + var hiddenKeys$1 = hiddenKeys$6; + + var uid$2 = uid$5; + + var wellKnownSymbol$z = wellKnownSymbol$G; + + var wrappedWellKnownSymbolModule = wellKnownSymbolWrapped; + + var defineWellKnownSymbol$k = defineWellKnownSymbol$l; + + var setToStringTag$a = setToStringTag$b; + + var InternalStateModule$i = internalState; + + var $forEach$3 = arrayIteration.forEach; + + var HIDDEN = sharedKey$1('hidden'); + var SYMBOL = 'Symbol'; + var PROTOTYPE$1 = 'prototype'; + var TO_PRIMITIVE$1 = wellKnownSymbol$z('toPrimitive'); + var setInternalState$i = InternalStateModule$i.set; + var getInternalState$h = InternalStateModule$i.getterFor(SYMBOL); + var ObjectPrototype$3 = Object[PROTOTYPE$1]; + var $Symbol = global$F.Symbol; + var $stringify$1 = getBuiltIn$s('JSON', 'stringify'); + var nativeGetOwnPropertyDescriptor$2 = getOwnPropertyDescriptorModule$5.f; + var nativeDefineProperty$1 = definePropertyModule$9.f; + var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f; + var nativePropertyIsEnumerable = propertyIsEnumerableModule$1.f; + var AllSymbols = shared$3('symbols'); + var ObjectPrototypeSymbols = shared$3('op-symbols'); + var StringToSymbolRegistry = shared$3('string-to-symbol-registry'); + var SymbolToStringRegistry = shared$3('symbol-to-string-registry'); + var WellKnownSymbolsStore = shared$3('wks'); + var QObject = global$F.QObject; // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173 + + var USE_SETTER = !QObject || !QObject[PROTOTYPE$1] || !QObject[PROTOTYPE$1].findChild; // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 + + var setSymbolDescriptor = DESCRIPTORS$u && fails$_(function () { + return nativeObjectCreate(nativeDefineProperty$1({}, 'a', { + get: function () { + return nativeDefineProperty$1(this, 'a', { + value: 7 + }).a; + } + })).a != 7; + }) ? function (O, P, Attributes) { + var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor$2(ObjectPrototype$3, P); + if (ObjectPrototypeDescriptor) delete ObjectPrototype$3[P]; + nativeDefineProperty$1(O, P, Attributes); + + if (ObjectPrototypeDescriptor && O !== ObjectPrototype$3) { + nativeDefineProperty$1(ObjectPrototype$3, P, ObjectPrototypeDescriptor); + } + } : nativeDefineProperty$1; + + var wrap$1 = function (tag, description) { + var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE$1]); + setInternalState$i(symbol, { + type: SYMBOL, + tag: tag, + description: description + }); + if (!DESCRIPTORS$u) symbol.description = description; + return symbol; + }; + + var $defineProperty = function defineProperty(O, P, Attributes) { + if (O === ObjectPrototype$3) $defineProperty(ObjectPrototypeSymbols, P, Attributes); + anObject$1x(O); + var key = toPropertyKey$6(P); + anObject$1x(Attributes); + + if (hasOwn$f(AllSymbols, key)) { + if (!Attributes.enumerable) { + if (!hasOwn$f(O, HIDDEN)) nativeDefineProperty$1(O, HIDDEN, createPropertyDescriptor$6(1, {})); + O[HIDDEN][key] = true; + } else { + if (hasOwn$f(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false; + Attributes = nativeObjectCreate(Attributes, { + enumerable: createPropertyDescriptor$6(0, false) + }); + } + + return setSymbolDescriptor(O, key, Attributes); + } + + return nativeDefineProperty$1(O, key, Attributes); + }; + + var $defineProperties = function defineProperties(O, Properties) { + anObject$1x(O); + var properties = toIndexedObject$8(Properties); + var keys = objectKeys$3(properties).concat($getOwnPropertySymbols(properties)); + $forEach$3(keys, function (key) { + if (!DESCRIPTORS$u || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]); + }); + return O; + }; + + var $create = function create(O, Properties) { + return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties); + }; + + var $propertyIsEnumerable = function propertyIsEnumerable(V) { + var P = toPropertyKey$6(V); + var enumerable = nativePropertyIsEnumerable.call(this, P); + if (this === ObjectPrototype$3 && hasOwn$f(AllSymbols, P) && !hasOwn$f(ObjectPrototypeSymbols, P)) return false; + return enumerable || !hasOwn$f(this, P) || !hasOwn$f(AllSymbols, P) || hasOwn$f(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true; + }; + + var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) { + var it = toIndexedObject$8(O); + var key = toPropertyKey$6(P); + if (it === ObjectPrototype$3 && hasOwn$f(AllSymbols, key) && !hasOwn$f(ObjectPrototypeSymbols, key)) return; + var descriptor = nativeGetOwnPropertyDescriptor$2(it, key); + + if (descriptor && hasOwn$f(AllSymbols, key) && !(hasOwn$f(it, HIDDEN) && it[HIDDEN][key])) { + descriptor.enumerable = true; + } + + return descriptor; + }; + + var $getOwnPropertyNames = function getOwnPropertyNames(O) { + var names = nativeGetOwnPropertyNames(toIndexedObject$8(O)); + var result = []; + $forEach$3(names, function (key) { + if (!hasOwn$f(AllSymbols, key) && !hasOwn$f(hiddenKeys$1, key)) result.push(key); + }); + return result; + }; + + var $getOwnPropertySymbols = function getOwnPropertySymbols(O) { + var IS_OBJECT_PROTOTYPE = O === ObjectPrototype$3; + var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject$8(O)); + var result = []; + $forEach$3(names, function (key) { + if (hasOwn$f(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn$f(ObjectPrototype$3, key))) { + result.push(AllSymbols[key]); + } + }); + return result; + }; // `Symbol` constructor + // https://tc39.es/ecma262/#sec-symbol-constructor + + + if (!NATIVE_SYMBOL) { + $Symbol = function Symbol() { + if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor'); + var description = !arguments.length || arguments[0] === undefined ? undefined : $toString$3(arguments[0]); + var tag = uid$2(description); + + var setter = function (value) { + if (this === ObjectPrototype$3) setter.call(ObjectPrototypeSymbols, value); + if (hasOwn$f(this, HIDDEN) && hasOwn$f(this[HIDDEN], tag)) this[HIDDEN][tag] = false; + setSymbolDescriptor(this, tag, createPropertyDescriptor$6(1, value)); + }; + + if (DESCRIPTORS$u && USE_SETTER) setSymbolDescriptor(ObjectPrototype$3, tag, { + configurable: true, + set: setter + }); + return wrap$1(tag, description); + }; + + redefine$j($Symbol[PROTOTYPE$1], 'toString', function toString() { + return getInternalState$h(this).tag; + }); + redefine$j($Symbol, 'withoutSetter', function (description) { + return wrap$1(uid$2(description), description); + }); + propertyIsEnumerableModule$1.f = $propertyIsEnumerable; + definePropertyModule$9.f = $defineProperty; + getOwnPropertyDescriptorModule$5.f = $getOwnPropertyDescriptor; + getOwnPropertyNamesModule$1.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames; + getOwnPropertySymbolsModule$1.f = $getOwnPropertySymbols; + + wrappedWellKnownSymbolModule.f = function (name) { + return wrap$1(wellKnownSymbol$z(name), name); + }; + + if (DESCRIPTORS$u) { + // https://github.com/tc39/proposal-Symbol-description + nativeDefineProperty$1($Symbol[PROTOTYPE$1], 'description', { + configurable: true, + get: function description() { + return getInternalState$h(this).description; + } + }); + + { + redefine$j(ObjectPrototype$3, 'propertyIsEnumerable', $propertyIsEnumerable, { + unsafe: true + }); + } + } + } + + $$4i({ + global: true, + wrap: true, + forced: !NATIVE_SYMBOL, + sham: !NATIVE_SYMBOL + }, { + Symbol: $Symbol + }); + $forEach$3(objectKeys$3(WellKnownSymbolsStore), function (name) { + defineWellKnownSymbol$k(name); + }); + $$4i({ + target: SYMBOL, + stat: true, + forced: !NATIVE_SYMBOL + }, { + // `Symbol.for` method + // https://tc39.es/ecma262/#sec-symbol.for + 'for': function (key) { + var string = $toString$3(key); + if (hasOwn$f(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string]; + var symbol = $Symbol(string); + StringToSymbolRegistry[string] = symbol; + SymbolToStringRegistry[symbol] = string; + return symbol; + }, + // `Symbol.keyFor` method + // https://tc39.es/ecma262/#sec-symbol.keyfor + keyFor: function keyFor(sym) { + if (!isSymbol$2(sym)) throw TypeError(sym + ' is not a symbol'); + if (hasOwn$f(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym]; + }, + useSetter: function () { + USE_SETTER = true; + }, + useSimple: function () { + USE_SETTER = false; + } + }); + $$4i({ + target: 'Object', + stat: true, + forced: !NATIVE_SYMBOL, + sham: !DESCRIPTORS$u + }, { + // `Object.create` method + // https://tc39.es/ecma262/#sec-object.create + create: $create, + // `Object.defineProperty` method + // https://tc39.es/ecma262/#sec-object.defineproperty + defineProperty: $defineProperty, + // `Object.defineProperties` method + // https://tc39.es/ecma262/#sec-object.defineproperties + defineProperties: $defineProperties, + // `Object.getOwnPropertyDescriptor` method + // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors + getOwnPropertyDescriptor: $getOwnPropertyDescriptor + }); + $$4i({ + target: 'Object', + stat: true, + forced: !NATIVE_SYMBOL + }, { + // `Object.getOwnPropertyNames` method + // https://tc39.es/ecma262/#sec-object.getownpropertynames + getOwnPropertyNames: $getOwnPropertyNames, + // `Object.getOwnPropertySymbols` method + // https://tc39.es/ecma262/#sec-object.getownpropertysymbols + getOwnPropertySymbols: $getOwnPropertySymbols + }); // Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives + // https://bugs.chromium.org/p/v8/issues/detail?id=3443 + + $$4i({ + target: 'Object', + stat: true, + forced: fails$_(function () { + getOwnPropertySymbolsModule$1.f(1); + }) + }, { + getOwnPropertySymbols: function getOwnPropertySymbols(it) { + return getOwnPropertySymbolsModule$1.f(toObject$x(it)); + } + }); // `JSON.stringify` method behavior with symbols + // https://tc39.es/ecma262/#sec-json.stringify + + if ($stringify$1) { + var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails$_(function () { + var symbol = $Symbol(); // MS Edge converts symbol values to JSON as {} + + return $stringify$1([symbol]) != '[null]' // WebKit converts symbol values to JSON as null + || $stringify$1({ + a: symbol + }) != '{}' // V8 throws on boxed symbols + || $stringify$1(Object(symbol)) != '{}'; + }); + $$4i({ + target: 'JSON', + stat: true, + forced: FORCED_JSON_STRINGIFY + }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + stringify: function stringify(it, replacer, space) { + var args = [it]; + var index = 1; + var $replacer; + + while (arguments.length > index) args.push(arguments[index++]); + + $replacer = replacer; + if (!isObject$v(replacer) && it === undefined || isSymbol$2(it)) return; // IE8 returns string on undefined + + if (!isArray$6(replacer)) replacer = function (key, value) { + if (isCallable$n($replacer)) value = $replacer.call(this, key, value); + if (!isSymbol$2(value)) return value; + }; + args[1] = replacer; + return $stringify$1.apply(null, args); + } + }); + } // `Symbol.prototype[@@toPrimitive]` method + // https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive + + + if (!$Symbol[PROTOTYPE$1][TO_PRIMITIVE$1]) { + var valueOf$1 = $Symbol[PROTOTYPE$1].valueOf; + redefine$j($Symbol[PROTOTYPE$1], TO_PRIMITIVE$1, function () { + return valueOf$1.apply(this, arguments); + }); + } // `Symbol.prototype[@@toStringTag]` property + // https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag + + + setToStringTag$a($Symbol, SYMBOL); + hiddenKeys$1[HIDDEN] = true; + + var $$4h = _export; + + var DESCRIPTORS$t = descriptors; + + var global$E = global$R; + + var hasOwn$e = hasOwnProperty_1; + + var isCallable$m = isCallable$z; + + var isObject$u = isObject$C; + + var defineProperty$e = objectDefineProperty.f; + + var copyConstructorProperties$1 = copyConstructorProperties$3; + + var NativeSymbol = global$E.Symbol; + + if (DESCRIPTORS$t && isCallable$m(NativeSymbol) && (!('description' in NativeSymbol.prototype) || // Safari 12 bug + NativeSymbol().description !== undefined)) { + var EmptyStringDescriptionStore = {}; // wrap Symbol constructor for correct work with undefined description + + var SymbolWrapper = function Symbol() { + var description = arguments.length < 1 || arguments[0] === undefined ? undefined : String(arguments[0]); + var result = this instanceof SymbolWrapper ? new NativeSymbol(description) // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)' + : description === undefined ? NativeSymbol() : NativeSymbol(description); + if (description === '') EmptyStringDescriptionStore[result] = true; + return result; + }; + + copyConstructorProperties$1(SymbolWrapper, NativeSymbol); + var symbolPrototype = SymbolWrapper.prototype = NativeSymbol.prototype; + symbolPrototype.constructor = SymbolWrapper; + var symbolToString = symbolPrototype.toString; + var nativeSymbol = String(NativeSymbol('test')) == 'Symbol(test)'; + var regexp = /^Symbol\((.*)\)[^)]+$/; + defineProperty$e(symbolPrototype, 'description', { + configurable: true, + get: function description() { + var symbol = isObject$u(this) ? this.valueOf() : this; + var string = symbolToString.call(symbol); + if (hasOwn$e(EmptyStringDescriptionStore, symbol)) return ''; + var desc = nativeSymbol ? string.slice(7, -1) : string.replace(regexp, '$1'); + return desc === '' ? undefined : desc; + } + }); + $$4h({ + global: true, + forced: true + }, { + Symbol: SymbolWrapper + }); + } + + var defineWellKnownSymbol$j = defineWellKnownSymbol$l; // `Symbol.asyncIterator` well-known symbol + // https://tc39.es/ecma262/#sec-symbol.asynciterator + + + defineWellKnownSymbol$j('asyncIterator'); + + var defineWellKnownSymbol$i = defineWellKnownSymbol$l; // `Symbol.hasInstance` well-known symbol + // https://tc39.es/ecma262/#sec-symbol.hasinstance + + + defineWellKnownSymbol$i('hasInstance'); + + var defineWellKnownSymbol$h = defineWellKnownSymbol$l; // `Symbol.isConcatSpreadable` well-known symbol + // https://tc39.es/ecma262/#sec-symbol.isconcatspreadable + + + defineWellKnownSymbol$h('isConcatSpreadable'); + + var defineWellKnownSymbol$g = defineWellKnownSymbol$l; // `Symbol.iterator` well-known symbol + // https://tc39.es/ecma262/#sec-symbol.iterator + + + defineWellKnownSymbol$g('iterator'); + + var defineWellKnownSymbol$f = defineWellKnownSymbol$l; // `Symbol.match` well-known symbol + // https://tc39.es/ecma262/#sec-symbol.match + + + defineWellKnownSymbol$f('match'); + + var defineWellKnownSymbol$e = defineWellKnownSymbol$l; // `Symbol.matchAll` well-known symbol + // https://tc39.es/ecma262/#sec-symbol.matchall + + + defineWellKnownSymbol$e('matchAll'); + + var defineWellKnownSymbol$d = defineWellKnownSymbol$l; // `Symbol.replace` well-known symbol + // https://tc39.es/ecma262/#sec-symbol.replace + + + defineWellKnownSymbol$d('replace'); + + var defineWellKnownSymbol$c = defineWellKnownSymbol$l; // `Symbol.search` well-known symbol + // https://tc39.es/ecma262/#sec-symbol.search + + + defineWellKnownSymbol$c('search'); + + var defineWellKnownSymbol$b = defineWellKnownSymbol$l; // `Symbol.species` well-known symbol + // https://tc39.es/ecma262/#sec-symbol.species + + + defineWellKnownSymbol$b('species'); + + var defineWellKnownSymbol$a = defineWellKnownSymbol$l; // `Symbol.split` well-known symbol + // https://tc39.es/ecma262/#sec-symbol.split + + + defineWellKnownSymbol$a('split'); + + var defineWellKnownSymbol$9 = defineWellKnownSymbol$l; // `Symbol.toPrimitive` well-known symbol + // https://tc39.es/ecma262/#sec-symbol.toprimitive + + + defineWellKnownSymbol$9('toPrimitive'); + + var defineWellKnownSymbol$8 = defineWellKnownSymbol$l; // `Symbol.toStringTag` well-known symbol + // https://tc39.es/ecma262/#sec-symbol.tostringtag + + + defineWellKnownSymbol$8('toStringTag'); + + var defineWellKnownSymbol$7 = defineWellKnownSymbol$l; // `Symbol.unscopables` well-known symbol + // https://tc39.es/ecma262/#sec-symbol.unscopables + + + defineWellKnownSymbol$7('unscopables'); + + var fails$Z = fails$15; + + var correctPrototypeGetter = !fails$Z(function () { + function F() { + /* empty */ + } + + F.prototype.constructor = null; // eslint-disable-next-line es/no-object-getprototypeof -- required for testing + + return Object.getPrototypeOf(new F()) !== F.prototype; + }); + + var hasOwn$d = hasOwnProperty_1; + + var isCallable$l = isCallable$z; + + var toObject$w = toObject$A; + + var sharedKey = sharedKey$4; + + var CORRECT_PROTOTYPE_GETTER$2 = correctPrototypeGetter; + + var IE_PROTO = sharedKey('IE_PROTO'); + var ObjectPrototype$2 = Object.prototype; // `Object.getPrototypeOf` method + // https://tc39.es/ecma262/#sec-object.getprototypeof + // eslint-disable-next-line es/no-object-getprototypeof -- safe + + var objectGetPrototypeOf$1 = CORRECT_PROTOTYPE_GETTER$2 ? Object.getPrototypeOf : function (O) { + var object = toObject$w(O); + if (hasOwn$d(object, IE_PROTO)) return object[IE_PROTO]; + var constructor = object.constructor; + + if (isCallable$l(constructor) && object instanceof constructor) { + return constructor.prototype; + } + + return object instanceof Object ? ObjectPrototype$2 : null; + }; + + var isCallable$k = isCallable$z; + + var aPossiblePrototype$2 = function (argument) { + if (typeof argument === 'object' || isCallable$k(argument)) return argument; + throw TypeError("Can't set " + String(argument) + ' as a prototype'); + }; + + /* eslint-disable no-proto -- safe */ + + var anObject$1w = anObject$1C; + + var aPossiblePrototype$1 = aPossiblePrototype$2; // `Object.setPrototypeOf` method + // https://tc39.es/ecma262/#sec-object.setprototypeof + // Works with __proto__ only. Old v8 can't work with null proto objects. + // eslint-disable-next-line es/no-object-setprototypeof -- safe + + + var objectSetPrototypeOf$1 = Object.setPrototypeOf || ('__proto__' in {} ? function () { + var CORRECT_SETTER = false; + var test = {}; + var setter; + + try { + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set; + setter.call(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { + /* empty */ + } + + return function setPrototypeOf(O, proto) { + anObject$1w(O); + aPossiblePrototype$1(proto); + if (CORRECT_SETTER) setter.call(O, proto);else O.__proto__ = proto; + return O; + }; + }() : undefined); + + var isObject$t = isObject$C; + + var createNonEnumerableProperty$d = createNonEnumerableProperty$h; // `InstallErrorCause` abstract operation + // https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause + + + var installErrorCause$1 = function (O, options) { + if (isObject$t(options) && 'cause' in options) { + createNonEnumerableProperty$d(O, 'cause', options.cause); + } + }; + + var iterators = {}; + + var wellKnownSymbol$y = wellKnownSymbol$G; + + var Iterators$4 = iterators; + + var ITERATOR$a = wellKnownSymbol$y('iterator'); + var ArrayPrototype$2 = Array.prototype; // check on default Array iterator + + var isArrayIteratorMethod$3 = function (it) { + return it !== undefined && (Iterators$4.Array === it || ArrayPrototype$2[ITERATOR$a] === it); + }; + + var classof$8 = classof$b; + + var getMethod$f = getMethod$h; + + var Iterators$3 = iterators; + + var wellKnownSymbol$x = wellKnownSymbol$G; + + var ITERATOR$9 = wellKnownSymbol$x('iterator'); + + var getIteratorMethod$9 = function (it) { + if (it != undefined) return getMethod$f(it, ITERATOR$9) || getMethod$f(it, '@@iterator') || Iterators$3[classof$8(it)]; + }; + + var aCallable$N = aCallable$Q; + + var anObject$1v = anObject$1C; + + var getIteratorMethod$8 = getIteratorMethod$9; + + var getIterator$b = function (argument, usingIterator) { + var iteratorMethod = arguments.length < 2 ? getIteratorMethod$8(argument) : usingIterator; + if (aCallable$N(iteratorMethod)) return anObject$1v(iteratorMethod.call(argument)); + throw TypeError(String(argument) + ' is not iterable'); + }; + + var anObject$1u = anObject$1C; + + var getMethod$e = getMethod$h; + + var iteratorClose$4 = function (iterator, kind, value) { + var innerResult, innerError; + anObject$1u(iterator); + + try { + innerResult = getMethod$e(iterator, 'return'); + + if (!innerResult) { + if (kind === 'throw') throw value; + return value; + } + + innerResult = innerResult.call(iterator); + } catch (error) { + innerError = true; + innerResult = error; + } + + if (kind === 'throw') throw value; + if (innerError) throw innerResult; + anObject$1u(innerResult); + return value; + }; + + var anObject$1t = anObject$1C; + + var isArrayIteratorMethod$2 = isArrayIteratorMethod$3; + + var lengthOfArrayLike$n = lengthOfArrayLike$q; + + var bind$p = functionBindContext; + + var getIterator$a = getIterator$b; + + var getIteratorMethod$7 = getIteratorMethod$9; + + var iteratorClose$3 = iteratorClose$4; + + var Result = function (stopped, result) { + this.stopped = stopped; + this.result = result; + }; + + var iterate$I = function (iterable, unboundFunction, options) { + var that = options && options.that; + var AS_ENTRIES = !!(options && options.AS_ENTRIES); + var IS_ITERATOR = !!(options && options.IS_ITERATOR); + var INTERRUPTED = !!(options && options.INTERRUPTED); + var fn = bind$p(unboundFunction, that, 1 + AS_ENTRIES + INTERRUPTED); + var iterator, iterFn, index, length, result, next, step; + + var stop = function (condition) { + if (iterator) iteratorClose$3(iterator, 'normal', condition); + return new Result(true, condition); + }; + + var callFn = function (value) { + if (AS_ENTRIES) { + anObject$1t(value); + return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]); + } + + return INTERRUPTED ? fn(value, stop) : fn(value); + }; + + if (IS_ITERATOR) { + iterator = iterable; + } else { + iterFn = getIteratorMethod$7(iterable); + if (!iterFn) throw TypeError(String(iterable) + ' is not iterable'); // optimisation for array iterators + + if (isArrayIteratorMethod$2(iterFn)) { + for (index = 0, length = lengthOfArrayLike$n(iterable); length > index; index++) { + result = callFn(iterable[index]); + if (result && result instanceof Result) return result; + } + + return new Result(false); + } + + iterator = getIterator$a(iterable, iterFn); + } + + next = iterator.next; + + while (!(step = next.call(iterator)).done) { + try { + result = callFn(step.value); + } catch (error) { + iteratorClose$3(iterator, 'throw', error); + } + + if (typeof result == 'object' && result && result instanceof Result) return result; + } + + return new Result(false); + }; + + var $$4g = _export; + + var getPrototypeOf$e = objectGetPrototypeOf$1; + + var setPrototypeOf$7 = objectSetPrototypeOf$1; + + var copyConstructorProperties = copyConstructorProperties$3; + + var create$d = objectCreate$1; + + var createNonEnumerableProperty$c = createNonEnumerableProperty$h; + + var createPropertyDescriptor$5 = createPropertyDescriptor$9; + + var installErrorCause = installErrorCause$1; + + var iterate$H = iterate$I; + + var toString$r = toString$t; + + var $AggregateError = function AggregateError(errors, message + /* , options */ + ) { + var that = this; + var options = arguments.length > 2 ? arguments[2] : undefined; + if (!(that instanceof $AggregateError)) return new $AggregateError(errors, message, options); + + if (setPrototypeOf$7) { + // eslint-disable-next-line unicorn/error-message -- expected + that = setPrototypeOf$7(new Error(undefined), getPrototypeOf$e(that)); + } + + if (message !== undefined) createNonEnumerableProperty$c(that, 'message', toString$r(message)); + installErrorCause(that, options); + var errorsArray = []; + iterate$H(errors, errorsArray.push, { + that: errorsArray + }); + createNonEnumerableProperty$c(that, 'errors', errorsArray); + return that; + }; + + if (setPrototypeOf$7) setPrototypeOf$7($AggregateError, Error);else copyConstructorProperties($AggregateError, Error); + $AggregateError.prototype = create$d(Error.prototype, { + constructor: createPropertyDescriptor$5(1, $AggregateError), + message: createPropertyDescriptor$5(1, ''), + name: createPropertyDescriptor$5(1, 'AggregateError') + }); // `AggregateError` constructor + // https://tc39.es/ecma262/#sec-aggregate-error-constructor + + $$4g({ + global: true + }, { + AggregateError: $AggregateError + }); + + var wellKnownSymbol$w = wellKnownSymbol$G; + + var create$c = objectCreate$1; + + var definePropertyModule$8 = objectDefineProperty; + + var UNSCOPABLES = wellKnownSymbol$w('unscopables'); + var ArrayPrototype$1 = Array.prototype; // Array.prototype[@@unscopables] + // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables + + if (ArrayPrototype$1[UNSCOPABLES] == undefined) { + definePropertyModule$8.f(ArrayPrototype$1, UNSCOPABLES, { + configurable: true, + value: create$c(null) + }); + } // add a key to Array.prototype[@@unscopables] + + + var addToUnscopables$h = function (key) { + ArrayPrototype$1[UNSCOPABLES][key] = true; + }; + + var $$4f = _export; + + var toObject$v = toObject$A; + + var lengthOfArrayLike$m = lengthOfArrayLike$q; + + var toIntegerOrInfinity$f = toIntegerOrInfinity$i; + + var addToUnscopables$g = addToUnscopables$h; // `Array.prototype.at` method + // https://github.com/tc39/proposal-relative-indexing-method + + + $$4f({ + target: 'Array', + proto: true + }, { + at: function at(index) { + var O = toObject$v(this); + var len = lengthOfArrayLike$m(O); + var relativeIndex = toIntegerOrInfinity$f(index); + var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex; + return k < 0 || k >= len ? undefined : O[k]; + } + }); + addToUnscopables$g('at'); + + var toPropertyKey$5 = toPropertyKey$9; + + var definePropertyModule$7 = objectDefineProperty; + + var createPropertyDescriptor$4 = createPropertyDescriptor$9; + + var createProperty$7 = function (object, key, value) { + var propertyKey = toPropertyKey$5(key); + if (propertyKey in object) definePropertyModule$7.f(object, propertyKey, createPropertyDescriptor$4(0, value));else object[propertyKey] = value; + }; + + var fails$Y = fails$15; + + var wellKnownSymbol$v = wellKnownSymbol$G; + + var V8_VERSION$2 = engineV8Version; + + var SPECIES$5 = wellKnownSymbol$v('species'); + + var arrayMethodHasSpeciesSupport$5 = function (METHOD_NAME) { + // We can't use this feature detection in V8 since it causes + // deoptimization and serious performance degradation + // https://github.com/zloirock/core-js/issues/677 + return V8_VERSION$2 >= 51 || !fails$Y(function () { + var array = []; + var constructor = array.constructor = {}; + + constructor[SPECIES$5] = function () { + return { + foo: 1 + }; + }; + + return array[METHOD_NAME](Boolean).foo !== 1; + }); + }; + + var $$4e = _export; + + var fails$X = fails$15; + + var isArray$5 = isArray$8; + + var isObject$s = isObject$C; + + var toObject$u = toObject$A; + + var lengthOfArrayLike$l = lengthOfArrayLike$q; + + var createProperty$6 = createProperty$7; + + var arraySpeciesCreate$4 = arraySpeciesCreate$6; + + var arrayMethodHasSpeciesSupport$4 = arrayMethodHasSpeciesSupport$5; + + var wellKnownSymbol$u = wellKnownSymbol$G; + + var V8_VERSION$1 = engineV8Version; + + var IS_CONCAT_SPREADABLE = wellKnownSymbol$u('isConcatSpreadable'); + var MAX_SAFE_INTEGER$2 = 0x1FFFFFFFFFFFFF; + var MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded'; // We can't use this feature detection in V8 since it causes + // deoptimization and serious performance degradation + // https://github.com/zloirock/core-js/issues/679 + + var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION$1 >= 51 || !fails$X(function () { + var array = []; + array[IS_CONCAT_SPREADABLE] = false; + return array.concat()[0] !== array; + }); + var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport$4('concat'); + + var isConcatSpreadable = function (O) { + if (!isObject$s(O)) return false; + var spreadable = O[IS_CONCAT_SPREADABLE]; + return spreadable !== undefined ? !!spreadable : isArray$5(O); + }; + + var FORCED$u = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT; // `Array.prototype.concat` method + // https://tc39.es/ecma262/#sec-array.prototype.concat + // with adding support of @@isConcatSpreadable and @@species + + $$4e({ + target: 'Array', + proto: true, + forced: FORCED$u + }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + concat: function concat(arg) { + var O = toObject$u(this); + var A = arraySpeciesCreate$4(O, 0); + var n = 0; + var i, k, length, len, E; + + for (i = -1, length = arguments.length; i < length; i++) { + E = i === -1 ? O : arguments[i]; + + if (isConcatSpreadable(E)) { + len = lengthOfArrayLike$l(E); + if (n + len > MAX_SAFE_INTEGER$2) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED); + + for (k = 0; k < len; k++, n++) if (k in E) createProperty$6(A, n, E[k]); + } else { + if (n >= MAX_SAFE_INTEGER$2) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED); + createProperty$6(A, n++, E); + } + } + + A.length = n; + return A; + } + }); + + var toObject$t = toObject$A; + + var toAbsoluteIndex$6 = toAbsoluteIndex$8; + + var lengthOfArrayLike$k = lengthOfArrayLike$q; + + var min$8 = Math.min; // `Array.prototype.copyWithin` method implementation + // https://tc39.es/ecma262/#sec-array.prototype.copywithin + // eslint-disable-next-line es/no-array-prototype-copywithin -- safe + + var arrayCopyWithin = [].copyWithin || function copyWithin(target + /* = 0 */ + , start + /* = 0, end = @length */ + ) { + var O = toObject$t(this); + var len = lengthOfArrayLike$k(O); + var to = toAbsoluteIndex$6(target, len); + var from = toAbsoluteIndex$6(start, len); + var end = arguments.length > 2 ? arguments[2] : undefined; + var count = min$8((end === undefined ? len : toAbsoluteIndex$6(end, len)) - from, len - to); + var inc = 1; + + if (from < to && to < from + count) { + inc = -1; + from += count - 1; + to += count - 1; + } + + while (count-- > 0) { + if (from in O) O[to] = O[from];else delete O[to]; + to += inc; + from += inc; + } + + return O; + }; + + var $$4d = _export; + + var copyWithin = arrayCopyWithin; + + var addToUnscopables$f = addToUnscopables$h; // `Array.prototype.copyWithin` method + // https://tc39.es/ecma262/#sec-array.prototype.copywithin + + + $$4d({ + target: 'Array', + proto: true + }, { + copyWithin: copyWithin + }); // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables + + addToUnscopables$f('copyWithin'); + + var fails$W = fails$15; + + var arrayMethodIsStrict$9 = function (METHOD_NAME, argument) { + var method = [][METHOD_NAME]; + return !!method && fails$W(function () { + // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing + method.call(null, argument || function () { + throw 1; + }, 1); + }); + }; + + var $$4c = _export; + + var $every$2 = arrayIteration.every; + + var arrayMethodIsStrict$8 = arrayMethodIsStrict$9; + + var STRICT_METHOD$8 = arrayMethodIsStrict$8('every'); // `Array.prototype.every` method + // https://tc39.es/ecma262/#sec-array.prototype.every + + $$4c({ + target: 'Array', + proto: true, + forced: !STRICT_METHOD$8 + }, { + every: function every(callbackfn + /* , thisArg */ + ) { + return $every$2(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + var toObject$s = toObject$A; + + var toAbsoluteIndex$5 = toAbsoluteIndex$8; + + var lengthOfArrayLike$j = lengthOfArrayLike$q; // `Array.prototype.fill` method implementation + // https://tc39.es/ecma262/#sec-array.prototype.fill + + + var arrayFill$1 = function fill(value + /* , start = 0, end = @length */ + ) { + var O = toObject$s(this); + var length = lengthOfArrayLike$j(O); + var argumentsLength = arguments.length; + var index = toAbsoluteIndex$5(argumentsLength > 1 ? arguments[1] : undefined, length); + var end = argumentsLength > 2 ? arguments[2] : undefined; + var endPos = end === undefined ? length : toAbsoluteIndex$5(end, length); + + while (endPos > index) O[index++] = value; + + return O; + }; + + var $$4b = _export; + + var fill = arrayFill$1; + + var addToUnscopables$e = addToUnscopables$h; // `Array.prototype.fill` method + // https://tc39.es/ecma262/#sec-array.prototype.fill + + + $$4b({ + target: 'Array', + proto: true + }, { + fill: fill + }); // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables + + addToUnscopables$e('fill'); + + var $$4a = _export; + + var $filter$1 = arrayIteration.filter; + + var arrayMethodHasSpeciesSupport$3 = arrayMethodHasSpeciesSupport$5; + + var HAS_SPECIES_SUPPORT$3 = arrayMethodHasSpeciesSupport$3('filter'); // `Array.prototype.filter` method + // https://tc39.es/ecma262/#sec-array.prototype.filter + // with adding support of @@species + + $$4a({ + target: 'Array', + proto: true, + forced: !HAS_SPECIES_SUPPORT$3 + }, { + filter: function filter(callbackfn + /* , thisArg */ + ) { + return $filter$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + var $$49 = _export; + + var $find$2 = arrayIteration.find; + + var addToUnscopables$d = addToUnscopables$h; + + var FIND = 'find'; + var SKIPS_HOLES$1 = true; // Shouldn't skip holes + + if (FIND in []) Array(1)[FIND](function () { + SKIPS_HOLES$1 = false; + }); // `Array.prototype.find` method + // https://tc39.es/ecma262/#sec-array.prototype.find + + $$49({ + target: 'Array', + proto: true, + forced: SKIPS_HOLES$1 + }, { + find: function find(callbackfn + /* , that = undefined */ + ) { + return $find$2(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables + + addToUnscopables$d(FIND); + + var $$48 = _export; + + var $findIndex$1 = arrayIteration.findIndex; + + var addToUnscopables$c = addToUnscopables$h; + + var FIND_INDEX = 'findIndex'; + var SKIPS_HOLES = true; // Shouldn't skip holes + + if (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { + SKIPS_HOLES = false; + }); // `Array.prototype.findIndex` method + // https://tc39.es/ecma262/#sec-array.prototype.findindex + + $$48({ + target: 'Array', + proto: true, + forced: SKIPS_HOLES + }, { + findIndex: function findIndex(callbackfn + /* , that = undefined */ + ) { + return $findIndex$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables + + addToUnscopables$c(FIND_INDEX); + + var isArray$4 = isArray$8; + + var lengthOfArrayLike$i = lengthOfArrayLike$q; + + var bind$o = functionBindContext; // `FlattenIntoArray` abstract operation + // https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray + + + var flattenIntoArray$2 = function (target, original, source, sourceLen, start, depth, mapper, thisArg) { + var targetIndex = start; + var sourceIndex = 0; + var mapFn = mapper ? bind$o(mapper, thisArg, 3) : false; + var element, elementLen; + + while (sourceIndex < sourceLen) { + if (sourceIndex in source) { + element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex]; + + if (depth > 0 && isArray$4(element)) { + elementLen = lengthOfArrayLike$i(element); + targetIndex = flattenIntoArray$2(target, original, element, elementLen, targetIndex, depth - 1) - 1; + } else { + if (targetIndex >= 0x1FFFFFFFFFFFFF) throw TypeError('Exceed the acceptable array length'); + target[targetIndex] = element; + } + + targetIndex++; + } + + sourceIndex++; + } + + return targetIndex; + }; + + var flattenIntoArray_1 = flattenIntoArray$2; + + var $$47 = _export; + + var flattenIntoArray$1 = flattenIntoArray_1; + + var toObject$r = toObject$A; + + var lengthOfArrayLike$h = lengthOfArrayLike$q; + + var toIntegerOrInfinity$e = toIntegerOrInfinity$i; + + var arraySpeciesCreate$3 = arraySpeciesCreate$6; // `Array.prototype.flat` method + // https://tc39.es/ecma262/#sec-array.prototype.flat + + + $$47({ + target: 'Array', + proto: true + }, { + flat: function flat() { + var depthArg = arguments.length ? arguments[0] : undefined; + var O = toObject$r(this); + var sourceLen = lengthOfArrayLike$h(O); + var A = arraySpeciesCreate$3(O, 0); + A.length = flattenIntoArray$1(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toIntegerOrInfinity$e(depthArg)); + return A; + } + }); + + var $$46 = _export; + + var flattenIntoArray = flattenIntoArray_1; + + var aCallable$M = aCallable$Q; + + var toObject$q = toObject$A; + + var lengthOfArrayLike$g = lengthOfArrayLike$q; + + var arraySpeciesCreate$2 = arraySpeciesCreate$6; // `Array.prototype.flatMap` method + // https://tc39.es/ecma262/#sec-array.prototype.flatmap + + + $$46({ + target: 'Array', + proto: true + }, { + flatMap: function flatMap(callbackfn + /* , thisArg */ + ) { + var O = toObject$q(this); + var sourceLen = lengthOfArrayLike$g(O); + var A; + aCallable$M(callbackfn); + A = arraySpeciesCreate$2(O, 0); + A.length = flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + return A; + } + }); + + var $forEach$2 = arrayIteration.forEach; + + var arrayMethodIsStrict$7 = arrayMethodIsStrict$9; + + var STRICT_METHOD$7 = arrayMethodIsStrict$7('forEach'); // `Array.prototype.forEach` method implementation + // https://tc39.es/ecma262/#sec-array.prototype.foreach + + var arrayForEach = !STRICT_METHOD$7 ? function forEach(callbackfn + /* , thisArg */ + ) { + return $forEach$2(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); // eslint-disable-next-line es/no-array-prototype-foreach -- safe + } : [].forEach; + + var $$45 = _export; + + var forEach$2 = arrayForEach; // `Array.prototype.forEach` method + // https://tc39.es/ecma262/#sec-array.prototype.foreach + // eslint-disable-next-line es/no-array-prototype-foreach -- safe + + + $$45({ + target: 'Array', + proto: true, + forced: [].forEach != forEach$2 + }, { + forEach: forEach$2 + }); + + var anObject$1s = anObject$1C; + + var iteratorClose$2 = iteratorClose$4; // call something on iterator step with safe closing on error + + + var callWithSafeIterationClosing$3 = function (iterator, fn, value, ENTRIES) { + try { + return ENTRIES ? fn(anObject$1s(value)[0], value[1]) : fn(value); + } catch (error) { + iteratorClose$2(iterator, 'throw', error); + } + }; + + var bind$n = functionBindContext; + + var toObject$p = toObject$A; + + var callWithSafeIterationClosing$2 = callWithSafeIterationClosing$3; + + var isArrayIteratorMethod$1 = isArrayIteratorMethod$3; + + var isConstructor$5 = isConstructor$7; + + var lengthOfArrayLike$f = lengthOfArrayLike$q; + + var createProperty$5 = createProperty$7; + + var getIterator$9 = getIterator$b; + + var getIteratorMethod$6 = getIteratorMethod$9; // `Array.from` method implementation + // https://tc39.es/ecma262/#sec-array.from + + + var arrayFrom$1 = function from(arrayLike + /* , mapfn = undefined, thisArg = undefined */ + ) { + var O = toObject$p(arrayLike); + var IS_CONSTRUCTOR = isConstructor$5(this); + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : undefined; + var mapping = mapfn !== undefined; + if (mapping) mapfn = bind$n(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2); + var iteratorMethod = getIteratorMethod$6(O); + var index = 0; + var length, result, step, iterator, next, value; // if the target is not iterable or it's an array with the default iterator - use a simple case + + if (iteratorMethod && !(this == Array && isArrayIteratorMethod$1(iteratorMethod))) { + iterator = getIterator$9(O, iteratorMethod); + next = iterator.next; + result = IS_CONSTRUCTOR ? new this() : []; + + for (; !(step = next.call(iterator)).done; index++) { + value = mapping ? callWithSafeIterationClosing$2(iterator, mapfn, [step.value, index], true) : step.value; + createProperty$5(result, index, value); + } + } else { + length = lengthOfArrayLike$f(O); + result = IS_CONSTRUCTOR ? new this(length) : Array(length); + + for (; length > index; index++) { + value = mapping ? mapfn(O[index], index) : O[index]; + createProperty$5(result, index, value); + } + } + + result.length = index; + return result; + }; + + var wellKnownSymbol$t = wellKnownSymbol$G; + + var ITERATOR$8 = wellKnownSymbol$t('iterator'); + var SAFE_CLOSING = false; + + try { + var called = 0; + var iteratorWithReturn = { + next: function () { + return { + done: !!called++ + }; + }, + 'return': function () { + SAFE_CLOSING = true; + } + }; + + iteratorWithReturn[ITERATOR$8] = function () { + return this; + }; // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing + + + Array.from(iteratorWithReturn, function () { + throw 2; + }); + } catch (error) { + /* empty */ + } + + var checkCorrectnessOfIteration$4 = function (exec, SKIP_CLOSING) { + if (!SKIP_CLOSING && !SAFE_CLOSING) return false; + var ITERATION_SUPPORT = false; + + try { + var object = {}; + + object[ITERATOR$8] = function () { + return { + next: function () { + return { + done: ITERATION_SUPPORT = true + }; + } + }; + }; + + exec(object); + } catch (error) { + /* empty */ + } + + return ITERATION_SUPPORT; + }; + + var $$44 = _export; + + var from$5 = arrayFrom$1; + + var checkCorrectnessOfIteration$3 = checkCorrectnessOfIteration$4; + + var INCORRECT_ITERATION$1 = !checkCorrectnessOfIteration$3(function (iterable) { + // eslint-disable-next-line es/no-array-from -- required for testing + Array.from(iterable); + }); // `Array.from` method + // https://tc39.es/ecma262/#sec-array.from + + $$44({ + target: 'Array', + stat: true, + forced: INCORRECT_ITERATION$1 + }, { + from: from$5 + }); + + var $$43 = _export; + + var $includes$1 = arrayIncludes.includes; + + var addToUnscopables$b = addToUnscopables$h; // `Array.prototype.includes` method + // https://tc39.es/ecma262/#sec-array.prototype.includes + + + $$43({ + target: 'Array', + proto: true + }, { + includes: function includes(el + /* , fromIndex = 0 */ + ) { + return $includes$1(this, el, arguments.length > 1 ? arguments[1] : undefined); + } + }); // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables + + addToUnscopables$b('includes'); + + /* eslint-disable es/no-array-prototype-indexof -- required for testing */ + + var $$42 = _export; + + var $indexOf$1 = arrayIncludes.indexOf; + + var arrayMethodIsStrict$6 = arrayMethodIsStrict$9; + + var nativeIndexOf = [].indexOf; + var NEGATIVE_ZERO$1 = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0; + var STRICT_METHOD$6 = arrayMethodIsStrict$6('indexOf'); // `Array.prototype.indexOf` method + // https://tc39.es/ecma262/#sec-array.prototype.indexof + + $$42({ + target: 'Array', + proto: true, + forced: NEGATIVE_ZERO$1 || !STRICT_METHOD$6 + }, { + indexOf: function indexOf(searchElement + /* , fromIndex = 0 */ + ) { + return NEGATIVE_ZERO$1 // convert -0 to +0 + ? nativeIndexOf.apply(this, arguments) || 0 : $indexOf$1(this, searchElement, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + var $$41 = _export; + + var isArray$3 = isArray$8; // `Array.isArray` method + // https://tc39.es/ecma262/#sec-array.isarray + + + $$41({ + target: 'Array', + stat: true + }, { + isArray: isArray$3 + }); + + var fails$V = fails$15; + + var isCallable$j = isCallable$z; + + var getPrototypeOf$d = objectGetPrototypeOf$1; + + var redefine$i = redefine$l.exports; + + var wellKnownSymbol$s = wellKnownSymbol$G; + + var ITERATOR$7 = wellKnownSymbol$s('iterator'); + var BUGGY_SAFARI_ITERATORS$1 = false; // `%IteratorPrototype%` object + // https://tc39.es/ecma262/#sec-%iteratorprototype%-object + + var IteratorPrototype$5, PrototypeOfArrayIteratorPrototype, arrayIterator$1; + /* eslint-disable es/no-array-prototype-keys -- safe */ + + if ([].keys) { + arrayIterator$1 = [].keys(); // Safari 8 has buggy iterators w/o `next` + + if (!('next' in arrayIterator$1)) BUGGY_SAFARI_ITERATORS$1 = true;else { + PrototypeOfArrayIteratorPrototype = getPrototypeOf$d(getPrototypeOf$d(arrayIterator$1)); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype$5 = PrototypeOfArrayIteratorPrototype; + } + } + + var NEW_ITERATOR_PROTOTYPE = IteratorPrototype$5 == undefined || fails$V(function () { + var test = {}; // FF44- legacy iterators case + + return IteratorPrototype$5[ITERATOR$7].call(test) !== test; + }); + if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype$5 = {}; // `%IteratorPrototype%[@@iterator]()` method + // https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator + + if (!isCallable$j(IteratorPrototype$5[ITERATOR$7])) { + redefine$i(IteratorPrototype$5, ITERATOR$7, function () { + return this; + }); + } + + var iteratorsCore = { + IteratorPrototype: IteratorPrototype$5, + BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS$1 + }; + + var IteratorPrototype$4 = iteratorsCore.IteratorPrototype; + + var create$b = objectCreate$1; + + var createPropertyDescriptor$3 = createPropertyDescriptor$9; + + var setToStringTag$9 = setToStringTag$b; + + var Iterators$2 = iterators; + + var returnThis$1 = function () { + return this; + }; + + var createIteratorConstructor$7 = function (IteratorConstructor, NAME, next) { + var TO_STRING_TAG = NAME + ' Iterator'; + IteratorConstructor.prototype = create$b(IteratorPrototype$4, { + next: createPropertyDescriptor$3(1, next) + }); + setToStringTag$9(IteratorConstructor, TO_STRING_TAG, false); + Iterators$2[TO_STRING_TAG] = returnThis$1; + return IteratorConstructor; + }; + + var $$40 = _export; + + var FunctionName$1 = functionName; + + var isCallable$i = isCallable$z; + + var createIteratorConstructor$6 = createIteratorConstructor$7; + + var getPrototypeOf$c = objectGetPrototypeOf$1; + + var setPrototypeOf$6 = objectSetPrototypeOf$1; + + var setToStringTag$8 = setToStringTag$b; + + var createNonEnumerableProperty$b = createNonEnumerableProperty$h; + + var redefine$h = redefine$l.exports; + + var wellKnownSymbol$r = wellKnownSymbol$G; + + var Iterators$1 = iterators; + + var IteratorsCore = iteratorsCore; + + var PROPER_FUNCTION_NAME$4 = FunctionName$1.PROPER; + var CONFIGURABLE_FUNCTION_NAME$1 = FunctionName$1.CONFIGURABLE; + var IteratorPrototype$3 = IteratorsCore.IteratorPrototype; + var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; + var ITERATOR$6 = wellKnownSymbol$r('iterator'); + var KEYS = 'keys'; + var VALUES = 'values'; + var ENTRIES = 'entries'; + + var returnThis = function () { + return this; + }; + + var defineIterator$3 = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { + createIteratorConstructor$6(IteratorConstructor, NAME, next); + + var getIterationMethod = function (KIND) { + if (KIND === DEFAULT && defaultIterator) return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND]; + + switch (KIND) { + case KEYS: + return function keys() { + return new IteratorConstructor(this, KIND); + }; + + case VALUES: + return function values() { + return new IteratorConstructor(this, KIND); + }; + + case ENTRIES: + return function entries() { + return new IteratorConstructor(this, KIND); + }; + } + + return function () { + return new IteratorConstructor(this); + }; + }; + + var TO_STRING_TAG = NAME + ' Iterator'; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = IterablePrototype[ITERATOR$6] || IterablePrototype['@@iterator'] || DEFAULT && IterablePrototype[DEFAULT]; + var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); + var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; // fix native + + if (anyNativeIterator) { + CurrentIteratorPrototype = getPrototypeOf$c(anyNativeIterator.call(new Iterable())); + + if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { + if (getPrototypeOf$c(CurrentIteratorPrototype) !== IteratorPrototype$3) { + if (setPrototypeOf$6) { + setPrototypeOf$6(CurrentIteratorPrototype, IteratorPrototype$3); + } else if (!isCallable$i(CurrentIteratorPrototype[ITERATOR$6])) { + redefine$h(CurrentIteratorPrototype, ITERATOR$6, returnThis); + } + } // Set @@toStringTag to native iterators + + + setToStringTag$8(CurrentIteratorPrototype, TO_STRING_TAG, true); + } + } // fix Array.prototype.{ values, @@iterator }.name in V8 / FF + + + if (PROPER_FUNCTION_NAME$4 && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) { + if (CONFIGURABLE_FUNCTION_NAME$1) { + createNonEnumerableProperty$b(IterablePrototype, 'name', VALUES); + } else { + INCORRECT_VALUES_NAME = true; + + defaultIterator = function values() { + return nativeIterator.call(this); + }; + } + } // export additional methods + + + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) for (KEY in methods) { + if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { + redefine$h(IterablePrototype, KEY, methods[KEY]); + } + } else $$40({ + target: NAME, + proto: true, + forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME + }, methods); + } // define iterator + + + if (IterablePrototype[ITERATOR$6] !== defaultIterator) { + redefine$h(IterablePrototype, ITERATOR$6, defaultIterator, { + name: DEFAULT + }); + } + + Iterators$1[NAME] = defaultIterator; + return methods; + }; + + var toIndexedObject$7 = toIndexedObject$d; + + var addToUnscopables$a = addToUnscopables$h; + + var Iterators = iterators; + + var InternalStateModule$h = internalState; + + var defineIterator$2 = defineIterator$3; + + var ARRAY_ITERATOR = 'Array Iterator'; + var setInternalState$h = InternalStateModule$h.set; + var getInternalState$g = InternalStateModule$h.getterFor(ARRAY_ITERATOR); // `Array.prototype.entries` method + // https://tc39.es/ecma262/#sec-array.prototype.entries + // `Array.prototype.keys` method + // https://tc39.es/ecma262/#sec-array.prototype.keys + // `Array.prototype.values` method + // https://tc39.es/ecma262/#sec-array.prototype.values + // `Array.prototype[@@iterator]` method + // https://tc39.es/ecma262/#sec-array.prototype-@@iterator + // `CreateArrayIterator` internal method + // https://tc39.es/ecma262/#sec-createarrayiterator + + var es_array_iterator = defineIterator$2(Array, 'Array', function (iterated, kind) { + setInternalState$h(this, { + type: ARRAY_ITERATOR, + target: toIndexedObject$7(iterated), + // target + index: 0, + // next index + kind: kind // kind + + }); // `%ArrayIteratorPrototype%.next` method + // https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next + }, function () { + var state = getInternalState$g(this); + var target = state.target; + var kind = state.kind; + var index = state.index++; + + if (!target || index >= target.length) { + state.target = undefined; + return { + value: undefined, + done: true + }; + } + + if (kind == 'keys') return { + value: index, + done: false + }; + if (kind == 'values') return { + value: target[index], + done: false + }; + return { + value: [index, target[index]], + done: false + }; + }, 'values'); // argumentsList[@@iterator] is %ArrayProto_values% + // https://tc39.es/ecma262/#sec-createunmappedargumentsobject + // https://tc39.es/ecma262/#sec-createmappedargumentsobject + + Iterators.Arguments = Iterators.Array; // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables + + addToUnscopables$a('keys'); + addToUnscopables$a('values'); + addToUnscopables$a('entries'); + + var $$3$ = _export; + + var IndexedObject$4 = indexedObject; + + var toIndexedObject$6 = toIndexedObject$d; + + var arrayMethodIsStrict$5 = arrayMethodIsStrict$9; + + var nativeJoin = [].join; + var ES3_STRINGS = IndexedObject$4 != Object; + var STRICT_METHOD$5 = arrayMethodIsStrict$5('join', ','); // `Array.prototype.join` method + // https://tc39.es/ecma262/#sec-array.prototype.join + + $$3$({ + target: 'Array', + proto: true, + forced: ES3_STRINGS || !STRICT_METHOD$5 + }, { + join: function join(separator) { + return nativeJoin.call(toIndexedObject$6(this), separator === undefined ? ',' : separator); + } + }); + + /* eslint-disable es/no-array-prototype-lastindexof -- safe */ + + var toIndexedObject$5 = toIndexedObject$d; + + var toIntegerOrInfinity$d = toIntegerOrInfinity$i; + + var lengthOfArrayLike$e = lengthOfArrayLike$q; + + var arrayMethodIsStrict$4 = arrayMethodIsStrict$9; + + var min$7 = Math.min; + var $lastIndexOf$1 = [].lastIndexOf; + var NEGATIVE_ZERO = !!$lastIndexOf$1 && 1 / [1].lastIndexOf(1, -0) < 0; + var STRICT_METHOD$4 = arrayMethodIsStrict$4('lastIndexOf'); + var FORCED$t = NEGATIVE_ZERO || !STRICT_METHOD$4; // `Array.prototype.lastIndexOf` method implementation + // https://tc39.es/ecma262/#sec-array.prototype.lastindexof + + var arrayLastIndexOf = FORCED$t ? function lastIndexOf(searchElement + /* , fromIndex = @[*-1] */ + ) { + // convert -0 to +0 + if (NEGATIVE_ZERO) return $lastIndexOf$1.apply(this, arguments) || 0; + var O = toIndexedObject$5(this); + var length = lengthOfArrayLike$e(O); + var index = length - 1; + if (arguments.length > 1) index = min$7(index, toIntegerOrInfinity$d(arguments[1])); + if (index < 0) index = length + index; + + for (; index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0; + + return -1; + } : $lastIndexOf$1; + + var $$3_ = _export; + + var lastIndexOf = arrayLastIndexOf; // `Array.prototype.lastIndexOf` method + // https://tc39.es/ecma262/#sec-array.prototype.lastindexof + // eslint-disable-next-line es/no-array-prototype-lastindexof -- required for testing + + + $$3_({ + target: 'Array', + proto: true, + forced: lastIndexOf !== [].lastIndexOf + }, { + lastIndexOf: lastIndexOf + }); + + var $$3Z = _export; + + var $map$1 = arrayIteration.map; + + var arrayMethodHasSpeciesSupport$2 = arrayMethodHasSpeciesSupport$5; + + var HAS_SPECIES_SUPPORT$2 = arrayMethodHasSpeciesSupport$2('map'); // `Array.prototype.map` method + // https://tc39.es/ecma262/#sec-array.prototype.map + // with adding support of @@species + + $$3Z({ + target: 'Array', + proto: true, + forced: !HAS_SPECIES_SUPPORT$2 + }, { + map: function map(callbackfn + /* , thisArg */ + ) { + return $map$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + var $$3Y = _export; + + var fails$U = fails$15; + + var isConstructor$4 = isConstructor$7; + + var createProperty$4 = createProperty$7; + + var ISNT_GENERIC = fails$U(function () { + function F() { + /* empty */ + } // eslint-disable-next-line es/no-array-of -- required for testing + + + return !(Array.of.call(F) instanceof F); + }); // `Array.of` method + // https://tc39.es/ecma262/#sec-array.of + // WebKit Array.of isn't generic + + $$3Y({ + target: 'Array', + stat: true, + forced: ISNT_GENERIC + }, { + of: function of() { + var index = 0; + var argumentsLength = arguments.length; + var result = new (isConstructor$4(this) ? this : Array)(argumentsLength); + + while (argumentsLength > index) createProperty$4(result, index, arguments[index++]); + + result.length = argumentsLength; + return result; + } + }); + + var aCallable$L = aCallable$Q; + + var toObject$o = toObject$A; + + var IndexedObject$3 = indexedObject; + + var lengthOfArrayLike$d = lengthOfArrayLike$q; // `Array.prototype.{ reduce, reduceRight }` methods implementation + + + var createMethod$6 = function (IS_RIGHT) { + return function (that, callbackfn, argumentsLength, memo) { + aCallable$L(callbackfn); + var O = toObject$o(that); + var self = IndexedObject$3(O); + var length = lengthOfArrayLike$d(O); + var index = IS_RIGHT ? length - 1 : 0; + var i = IS_RIGHT ? -1 : 1; + if (argumentsLength < 2) while (true) { + if (index in self) { + memo = self[index]; + index += i; + break; + } + + index += i; + + if (IS_RIGHT ? index < 0 : length <= index) { + throw TypeError('Reduce of empty array with no initial value'); + } + } + + for (; IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) { + memo = callbackfn(memo, self[index], index, O); + } + + return memo; + }; + }; + + var arrayReduce = { + // `Array.prototype.reduce` method + // https://tc39.es/ecma262/#sec-array.prototype.reduce + left: createMethod$6(false), + // `Array.prototype.reduceRight` method + // https://tc39.es/ecma262/#sec-array.prototype.reduceright + right: createMethod$6(true) + }; + + var classof$7 = classofRaw$1; + + var global$D = global$R; + + var engineIsNode = classof$7(global$D.process) == 'process'; + + var $$3X = _export; + + var $reduce$1 = arrayReduce.left; + + var arrayMethodIsStrict$3 = arrayMethodIsStrict$9; + + var CHROME_VERSION$1 = engineV8Version; + + var IS_NODE$5 = engineIsNode; + + var STRICT_METHOD$3 = arrayMethodIsStrict$3('reduce'); // Chrome 80-82 has a critical bug + // https://bugs.chromium.org/p/chromium/issues/detail?id=1049982 + + var CHROME_BUG$1 = !IS_NODE$5 && CHROME_VERSION$1 > 79 && CHROME_VERSION$1 < 83; // `Array.prototype.reduce` method + // https://tc39.es/ecma262/#sec-array.prototype.reduce + + $$3X({ + target: 'Array', + proto: true, + forced: !STRICT_METHOD$3 || CHROME_BUG$1 + }, { + reduce: function reduce(callbackfn + /* , initialValue */ + ) { + return $reduce$1(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + var $$3W = _export; + + var $reduceRight$1 = arrayReduce.right; + + var arrayMethodIsStrict$2 = arrayMethodIsStrict$9; + + var CHROME_VERSION = engineV8Version; + + var IS_NODE$4 = engineIsNode; + + var STRICT_METHOD$2 = arrayMethodIsStrict$2('reduceRight'); // Chrome 80-82 has a critical bug + // https://bugs.chromium.org/p/chromium/issues/detail?id=1049982 + + var CHROME_BUG = !IS_NODE$4 && CHROME_VERSION > 79 && CHROME_VERSION < 83; // `Array.prototype.reduceRight` method + // https://tc39.es/ecma262/#sec-array.prototype.reduceright + + $$3W({ + target: 'Array', + proto: true, + forced: !STRICT_METHOD$2 || CHROME_BUG + }, { + reduceRight: function reduceRight(callbackfn + /* , initialValue */ + ) { + return $reduceRight$1(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + var $$3V = _export; + + var isArray$2 = isArray$8; + + var nativeReverse = [].reverse; + var test$1 = [1, 2]; // `Array.prototype.reverse` method + // https://tc39.es/ecma262/#sec-array.prototype.reverse + // fix for Safari 12.0 bug + // https://bugs.webkit.org/show_bug.cgi?id=188794 + + $$3V({ + target: 'Array', + proto: true, + forced: String(test$1) === String(test$1.reverse()) + }, { + reverse: function reverse() { + // eslint-disable-next-line no-self-assign -- dirty hack + if (isArray$2(this)) this.length = this.length; + return nativeReverse.call(this); + } + }); + + var $$3U = _export; + + var isArray$1 = isArray$8; + + var isConstructor$3 = isConstructor$7; + + var isObject$r = isObject$C; + + var toAbsoluteIndex$4 = toAbsoluteIndex$8; + + var lengthOfArrayLike$c = lengthOfArrayLike$q; + + var toIndexedObject$4 = toIndexedObject$d; + + var createProperty$3 = createProperty$7; + + var wellKnownSymbol$q = wellKnownSymbol$G; + + var arrayMethodHasSpeciesSupport$1 = arrayMethodHasSpeciesSupport$5; + + var HAS_SPECIES_SUPPORT$1 = arrayMethodHasSpeciesSupport$1('slice'); + var SPECIES$4 = wellKnownSymbol$q('species'); + var nativeSlice = [].slice; + var max$5 = Math.max; // `Array.prototype.slice` method + // https://tc39.es/ecma262/#sec-array.prototype.slice + // fallback for not array-like ES3 strings and DOM objects + + $$3U({ + target: 'Array', + proto: true, + forced: !HAS_SPECIES_SUPPORT$1 + }, { + slice: function slice(start, end) { + var O = toIndexedObject$4(this); + var length = lengthOfArrayLike$c(O); + var k = toAbsoluteIndex$4(start, length); + var fin = toAbsoluteIndex$4(end === undefined ? length : end, length); // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible + + var Constructor, result, n; + + if (isArray$1(O)) { + Constructor = O.constructor; // cross-realm fallback + + if (isConstructor$3(Constructor) && (Constructor === Array || isArray$1(Constructor.prototype))) { + Constructor = undefined; + } else if (isObject$r(Constructor)) { + Constructor = Constructor[SPECIES$4]; + if (Constructor === null) Constructor = undefined; + } + + if (Constructor === Array || Constructor === undefined) { + return nativeSlice.call(O, k, fin); + } + } + + result = new (Constructor === undefined ? Array : Constructor)(max$5(fin - k, 0)); + + for (n = 0; k < fin; k++, n++) if (k in O) createProperty$3(result, n, O[k]); + + result.length = n; + return result; + } + }); + + var $$3T = _export; + + var $some$2 = arrayIteration.some; + + var arrayMethodIsStrict$1 = arrayMethodIsStrict$9; + + var STRICT_METHOD$1 = arrayMethodIsStrict$1('some'); // `Array.prototype.some` method + // https://tc39.es/ecma262/#sec-array.prototype.some + + $$3T({ + target: 'Array', + proto: true, + forced: !STRICT_METHOD$1 + }, { + some: function some(callbackfn + /* , thisArg */ + ) { + return $some$2(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + // TODO: use something more complex like timsort? + var floor$9 = Math.floor; + + var mergeSort = function (array, comparefn) { + var length = array.length; + var middle = floor$9(length / 2); + return length < 8 ? insertionSort(array, comparefn) : merge(mergeSort(array.slice(0, middle), comparefn), mergeSort(array.slice(middle), comparefn), comparefn); + }; + + var insertionSort = function (array, comparefn) { + var length = array.length; + var i = 1; + var element, j; + + while (i < length) { + j = i; + element = array[i]; + + while (j && comparefn(array[j - 1], element) > 0) { + array[j] = array[--j]; + } + + if (j !== i++) array[j] = element; + } + + return array; + }; + + var merge = function (left, right, comparefn) { + var llength = left.length; + var rlength = right.length; + var lindex = 0; + var rindex = 0; + var result = []; + + while (lindex < llength || rindex < rlength) { + if (lindex < llength && rindex < rlength) { + result.push(comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]); + } else { + result.push(lindex < llength ? left[lindex++] : right[rindex++]); + } + } + + return result; + }; + + var arraySort = mergeSort; + + var userAgent$6 = engineUserAgent; + + var firefox = userAgent$6.match(/firefox\/(\d+)/i); + var engineFfVersion = !!firefox && +firefox[1]; + + var UA = engineUserAgent; + + var engineIsIeOrEdge = /MSIE|Trident/.test(UA); + + var userAgent$5 = engineUserAgent; + + var webkit = userAgent$5.match(/AppleWebKit\/(\d+)\./); + var engineWebkitVersion = !!webkit && +webkit[1]; + + var $$3S = _export; + + var aCallable$K = aCallable$Q; + + var toObject$n = toObject$A; + + var lengthOfArrayLike$b = lengthOfArrayLike$q; + + var toString$q = toString$t; + + var fails$T = fails$15; + + var internalSort$1 = arraySort; + + var arrayMethodIsStrict = arrayMethodIsStrict$9; + + var FF$1 = engineFfVersion; + + var IE_OR_EDGE$1 = engineIsIeOrEdge; + + var V8$1 = engineV8Version; + + var WEBKIT$2 = engineWebkitVersion; + + var test = []; + var nativeSort$1 = test.sort; // IE8- + + var FAILS_ON_UNDEFINED = fails$T(function () { + test.sort(undefined); + }); // V8 bug + + var FAILS_ON_NULL = fails$T(function () { + test.sort(null); + }); // Old WebKit + + var STRICT_METHOD = arrayMethodIsStrict('sort'); + var STABLE_SORT$1 = !fails$T(function () { + // feature detection can be too slow, so check engines versions + if (V8$1) return V8$1 < 70; + if (FF$1 && FF$1 > 3) return; + if (IE_OR_EDGE$1) return true; + if (WEBKIT$2) return WEBKIT$2 < 603; + var result = ''; + var code, chr, value, index; // generate an array with more 512 elements (Chakra and old V8 fails only in this case) + + for (code = 65; code < 76; code++) { + chr = String.fromCharCode(code); + + switch (code) { + case 66: + case 69: + case 70: + case 72: + value = 3; + break; + + case 68: + case 71: + value = 4; + break; + + default: + value = 2; + } + + for (index = 0; index < 47; index++) { + test.push({ + k: chr + index, + v: value + }); + } + } + + test.sort(function (a, b) { + return b.v - a.v; + }); + + for (index = 0; index < test.length; index++) { + chr = test[index].k.charAt(0); + if (result.charAt(result.length - 1) !== chr) result += chr; + } + + return result !== 'DGBEFHACIJK'; + }); + var FORCED$s = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT$1; + + var getSortCompare$1 = function (comparefn) { + return function (x, y) { + if (y === undefined) return -1; + if (x === undefined) return 1; + if (comparefn !== undefined) return +comparefn(x, y) || 0; + return toString$q(x) > toString$q(y) ? 1 : -1; + }; + }; // `Array.prototype.sort` method + // https://tc39.es/ecma262/#sec-array.prototype.sort + + + $$3S({ + target: 'Array', + proto: true, + forced: FORCED$s + }, { + sort: function sort(comparefn) { + if (comparefn !== undefined) aCallable$K(comparefn); + var array = toObject$n(this); + if (STABLE_SORT$1) return comparefn === undefined ? nativeSort$1.call(array) : nativeSort$1.call(array, comparefn); + var items = []; + var arrayLength = lengthOfArrayLike$b(array); + var itemsLength, index; + + for (index = 0; index < arrayLength; index++) { + if (index in array) items.push(array[index]); + } + + items = internalSort$1(items, getSortCompare$1(comparefn)); + itemsLength = items.length; + index = 0; + + while (index < itemsLength) array[index] = items[index++]; + + while (index < arrayLength) delete array[index++]; + + return array; + } + }); + + var getBuiltIn$r = getBuiltIn$y; + + var definePropertyModule$6 = objectDefineProperty; + + var wellKnownSymbol$p = wellKnownSymbol$G; + + var DESCRIPTORS$s = descriptors; + + var SPECIES$3 = wellKnownSymbol$p('species'); + + var setSpecies$7 = function (CONSTRUCTOR_NAME) { + var Constructor = getBuiltIn$r(CONSTRUCTOR_NAME); + var defineProperty = definePropertyModule$6.f; + + if (DESCRIPTORS$s && Constructor && !Constructor[SPECIES$3]) { + defineProperty(Constructor, SPECIES$3, { + configurable: true, + get: function () { + return this; + } + }); + } + }; + + var setSpecies$6 = setSpecies$7; // `Array[@@species]` getter + // https://tc39.es/ecma262/#sec-get-array-@@species + + + setSpecies$6('Array'); + + var $$3R = _export; + + var toAbsoluteIndex$3 = toAbsoluteIndex$8; + + var toIntegerOrInfinity$c = toIntegerOrInfinity$i; + + var lengthOfArrayLike$a = lengthOfArrayLike$q; + + var toObject$m = toObject$A; + + var arraySpeciesCreate$1 = arraySpeciesCreate$6; + + var createProperty$2 = createProperty$7; + + var arrayMethodHasSpeciesSupport = arrayMethodHasSpeciesSupport$5; + + var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice'); + var max$4 = Math.max; + var min$6 = Math.min; + var MAX_SAFE_INTEGER$1 = 0x1FFFFFFFFFFFFF; + var MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded'; // `Array.prototype.splice` method + // https://tc39.es/ecma262/#sec-array.prototype.splice + // with adding support of @@species + + $$3R({ + target: 'Array', + proto: true, + forced: !HAS_SPECIES_SUPPORT + }, { + splice: function splice(start, deleteCount + /* , ...items */ + ) { + var O = toObject$m(this); + var len = lengthOfArrayLike$a(O); + var actualStart = toAbsoluteIndex$3(start, len); + var argumentsLength = arguments.length; + var insertCount, actualDeleteCount, A, k, from, to; + + if (argumentsLength === 0) { + insertCount = actualDeleteCount = 0; + } else if (argumentsLength === 1) { + insertCount = 0; + actualDeleteCount = len - actualStart; + } else { + insertCount = argumentsLength - 2; + actualDeleteCount = min$6(max$4(toIntegerOrInfinity$c(deleteCount), 0), len - actualStart); + } + + if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER$1) { + throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED); + } + + A = arraySpeciesCreate$1(O, actualDeleteCount); + + for (k = 0; k < actualDeleteCount; k++) { + from = actualStart + k; + if (from in O) createProperty$2(A, k, O[from]); + } + + A.length = actualDeleteCount; + + if (insertCount < actualDeleteCount) { + for (k = actualStart; k < len - actualDeleteCount; k++) { + from = k + actualDeleteCount; + to = k + insertCount; + if (from in O) O[to] = O[from];else delete O[to]; + } + + for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1]; + } else if (insertCount > actualDeleteCount) { + for (k = len - actualDeleteCount; k > actualStart; k--) { + from = k + actualDeleteCount - 1; + to = k + insertCount - 1; + if (from in O) O[to] = O[from];else delete O[to]; + } + } + + for (k = 0; k < insertCount; k++) { + O[k + actualStart] = arguments[k + 2]; + } + + O.length = len - actualDeleteCount + insertCount; + return A; + } + }); + + // this method was added to unscopables after implementation + // in popular engines, so it's moved to a separate module + var addToUnscopables$9 = addToUnscopables$h; // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables + + + addToUnscopables$9('flat'); + + // this method was added to unscopables after implementation + // in popular engines, so it's moved to a separate module + var addToUnscopables$8 = addToUnscopables$h; // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables + + + addToUnscopables$8('flatMap'); + + // eslint-disable-next-line es/no-typed-arrays -- safe + var arrayBufferNative = typeof ArrayBuffer !== 'undefined' && typeof DataView !== 'undefined'; + + var redefine$g = redefine$l.exports; + + var redefineAll$a = function (target, src, options) { + for (var key in src) redefine$g(target, key, src[key], options); + + return target; + }; + + var anInstance$b = function (it, Constructor, name) { + if (it instanceof Constructor) return it; + throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation'); + }; + + var toIntegerOrInfinity$b = toIntegerOrInfinity$i; + + var toLength$b = toLength$d; // `ToIndex` abstract operation + // https://tc39.es/ecma262/#sec-toindex + + + var toIndex$2 = function (it) { + if (it === undefined) return 0; + var number = toIntegerOrInfinity$b(it); + var length = toLength$b(number); + if (number !== length) throw RangeError('Wrong length or index'); + return length; + }; + + // IEEE754 conversions based on https://github.com/feross/ieee754 + var abs$7 = Math.abs; + var pow$4 = Math.pow; + var floor$8 = Math.floor; + var log$8 = Math.log; + var LN2$2 = Math.LN2; + + var pack = function (number, mantissaLength, bytes) { + var buffer = new Array(bytes); + var exponentLength = bytes * 8 - mantissaLength - 1; + var eMax = (1 << exponentLength) - 1; + var eBias = eMax >> 1; + var rt = mantissaLength === 23 ? pow$4(2, -24) - pow$4(2, -77) : 0; + var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0; + var index = 0; + var exponent, mantissa, c; + number = abs$7(number); // eslint-disable-next-line no-self-compare -- NaN check + + if (number != number || number === Infinity) { + // eslint-disable-next-line no-self-compare -- NaN check + mantissa = number != number ? 1 : 0; + exponent = eMax; + } else { + exponent = floor$8(log$8(number) / LN2$2); + + if (number * (c = pow$4(2, -exponent)) < 1) { + exponent--; + c *= 2; + } + + if (exponent + eBias >= 1) { + number += rt / c; + } else { + number += rt * pow$4(2, 1 - eBias); + } + + if (number * c >= 2) { + exponent++; + c /= 2; + } + + if (exponent + eBias >= eMax) { + mantissa = 0; + exponent = eMax; + } else if (exponent + eBias >= 1) { + mantissa = (number * c - 1) * pow$4(2, mantissaLength); + exponent = exponent + eBias; + } else { + mantissa = number * pow$4(2, eBias - 1) * pow$4(2, mantissaLength); + exponent = 0; + } + } + + for (; mantissaLength >= 8; buffer[index++] = mantissa & 255, mantissa /= 256, mantissaLength -= 8); + + exponent = exponent << mantissaLength | mantissa; + exponentLength += mantissaLength; + + for (; exponentLength > 0; buffer[index++] = exponent & 255, exponent /= 256, exponentLength -= 8); + + buffer[--index] |= sign * 128; + return buffer; + }; + + var unpack = function (buffer, mantissaLength) { + var bytes = buffer.length; + var exponentLength = bytes * 8 - mantissaLength - 1; + var eMax = (1 << exponentLength) - 1; + var eBias = eMax >> 1; + var nBits = exponentLength - 7; + var index = bytes - 1; + var sign = buffer[index--]; + var exponent = sign & 127; + var mantissa; + sign >>= 7; + + for (; nBits > 0; exponent = exponent * 256 + buffer[index], index--, nBits -= 8); + + mantissa = exponent & (1 << -nBits) - 1; + exponent >>= -nBits; + nBits += mantissaLength; + + for (; nBits > 0; mantissa = mantissa * 256 + buffer[index], index--, nBits -= 8); + + if (exponent === 0) { + exponent = 1 - eBias; + } else if (exponent === eMax) { + return mantissa ? NaN : sign ? -Infinity : Infinity; + } else { + mantissa = mantissa + pow$4(2, mantissaLength); + exponent = exponent - eBias; + } + + return (sign ? -1 : 1) * mantissa * pow$4(2, exponent - mantissaLength); + }; + + var ieee754 = { + pack: pack, + unpack: unpack + }; + + var global$C = global$R; + + var DESCRIPTORS$r = descriptors; + + var NATIVE_ARRAY_BUFFER$2 = arrayBufferNative; + + var FunctionName = functionName; + + var createNonEnumerableProperty$a = createNonEnumerableProperty$h; + + var redefineAll$9 = redefineAll$a; + + var fails$S = fails$15; + + var anInstance$a = anInstance$b; + + var toIntegerOrInfinity$a = toIntegerOrInfinity$i; + + var toLength$a = toLength$d; + + var toIndex$1 = toIndex$2; + + var IEEE754 = ieee754; + + var getPrototypeOf$b = objectGetPrototypeOf$1; + + var setPrototypeOf$5 = objectSetPrototypeOf$1; + + var getOwnPropertyNames$5 = objectGetOwnPropertyNames.f; + + var defineProperty$d = objectDefineProperty.f; + + var arrayFill = arrayFill$1; + + var setToStringTag$7 = setToStringTag$b; + + var InternalStateModule$g = internalState; + + var PROPER_FUNCTION_NAME$3 = FunctionName.PROPER; + var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE; + var getInternalState$f = InternalStateModule$g.get; + var setInternalState$g = InternalStateModule$g.set; + var ARRAY_BUFFER$1 = 'ArrayBuffer'; + var DATA_VIEW = 'DataView'; + var PROTOTYPE = 'prototype'; + var WRONG_LENGTH$1 = 'Wrong length'; + var WRONG_INDEX = 'Wrong index'; + var NativeArrayBuffer$1 = global$C[ARRAY_BUFFER$1]; + var $ArrayBuffer = NativeArrayBuffer$1; + var $DataView = global$C[DATA_VIEW]; + var $DataViewPrototype = $DataView && $DataView[PROTOTYPE]; + var ObjectPrototype$1 = Object.prototype; + var RangeError$2 = global$C.RangeError; + var packIEEE754 = IEEE754.pack; + var unpackIEEE754 = IEEE754.unpack; + + var packInt8 = function (number) { + return [number & 0xFF]; + }; + + var packInt16 = function (number) { + return [number & 0xFF, number >> 8 & 0xFF]; + }; + + var packInt32 = function (number) { + return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF]; + }; + + var unpackInt32 = function (buffer) { + return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0]; + }; + + var packFloat32 = function (number) { + return packIEEE754(number, 23, 4); + }; + + var packFloat64 = function (number) { + return packIEEE754(number, 52, 8); + }; + + var addGetter$1 = function (Constructor, key) { + defineProperty$d(Constructor[PROTOTYPE], key, { + get: function () { + return getInternalState$f(this)[key]; + } + }); + }; + + var get$2 = function (view, count, index, isLittleEndian) { + var intIndex = toIndex$1(index); + var store = getInternalState$f(view); + if (intIndex + count > store.byteLength) throw RangeError$2(WRONG_INDEX); + var bytes = getInternalState$f(store.buffer).bytes; + var start = intIndex + store.byteOffset; + var pack = bytes.slice(start, start + count); + return isLittleEndian ? pack : pack.reverse(); + }; + + var set$3 = function (view, count, index, conversion, value, isLittleEndian) { + var intIndex = toIndex$1(index); + var store = getInternalState$f(view); + if (intIndex + count > store.byteLength) throw RangeError$2(WRONG_INDEX); + var bytes = getInternalState$f(store.buffer).bytes; + var start = intIndex + store.byteOffset; + var pack = conversion(+value); + + for (var i = 0; i < count; i++) bytes[start + i] = pack[isLittleEndian ? i : count - i - 1]; + }; + + if (!NATIVE_ARRAY_BUFFER$2) { + $ArrayBuffer = function ArrayBuffer(length) { + anInstance$a(this, $ArrayBuffer, ARRAY_BUFFER$1); + var byteLength = toIndex$1(length); + setInternalState$g(this, { + bytes: arrayFill.call(new Array(byteLength), 0), + byteLength: byteLength + }); + if (!DESCRIPTORS$r) this.byteLength = byteLength; + }; + + $DataView = function DataView(buffer, byteOffset, byteLength) { + anInstance$a(this, $DataView, DATA_VIEW); + anInstance$a(buffer, $ArrayBuffer, DATA_VIEW); + var bufferLength = getInternalState$f(buffer).byteLength; + var offset = toIntegerOrInfinity$a(byteOffset); + if (offset < 0 || offset > bufferLength) throw RangeError$2('Wrong offset'); + byteLength = byteLength === undefined ? bufferLength - offset : toLength$a(byteLength); + if (offset + byteLength > bufferLength) throw RangeError$2(WRONG_LENGTH$1); + setInternalState$g(this, { + buffer: buffer, + byteLength: byteLength, + byteOffset: offset + }); + + if (!DESCRIPTORS$r) { + this.buffer = buffer; + this.byteLength = byteLength; + this.byteOffset = offset; + } + }; + + if (DESCRIPTORS$r) { + addGetter$1($ArrayBuffer, 'byteLength'); + addGetter$1($DataView, 'buffer'); + addGetter$1($DataView, 'byteLength'); + addGetter$1($DataView, 'byteOffset'); + } + + redefineAll$9($DataView[PROTOTYPE], { + getInt8: function getInt8(byteOffset) { + return get$2(this, 1, byteOffset)[0] << 24 >> 24; + }, + getUint8: function getUint8(byteOffset) { + return get$2(this, 1, byteOffset)[0]; + }, + getInt16: function getInt16(byteOffset + /* , littleEndian */ + ) { + var bytes = get$2(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined); + return (bytes[1] << 8 | bytes[0]) << 16 >> 16; + }, + getUint16: function getUint16(byteOffset + /* , littleEndian */ + ) { + var bytes = get$2(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined); + return bytes[1] << 8 | bytes[0]; + }, + getInt32: function getInt32(byteOffset + /* , littleEndian */ + ) { + return unpackInt32(get$2(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)); + }, + getUint32: function getUint32(byteOffset + /* , littleEndian */ + ) { + return unpackInt32(get$2(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)) >>> 0; + }, + getFloat32: function getFloat32(byteOffset + /* , littleEndian */ + ) { + return unpackIEEE754(get$2(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 23); + }, + getFloat64: function getFloat64(byteOffset + /* , littleEndian */ + ) { + return unpackIEEE754(get$2(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 52); + }, + setInt8: function setInt8(byteOffset, value) { + set$3(this, 1, byteOffset, packInt8, value); + }, + setUint8: function setUint8(byteOffset, value) { + set$3(this, 1, byteOffset, packInt8, value); + }, + setInt16: function setInt16(byteOffset, value + /* , littleEndian */ + ) { + set$3(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined); + }, + setUint16: function setUint16(byteOffset, value + /* , littleEndian */ + ) { + set$3(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined); + }, + setInt32: function setInt32(byteOffset, value + /* , littleEndian */ + ) { + set$3(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined); + }, + setUint32: function setUint32(byteOffset, value + /* , littleEndian */ + ) { + set$3(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined); + }, + setFloat32: function setFloat32(byteOffset, value + /* , littleEndian */ + ) { + set$3(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : undefined); + }, + setFloat64: function setFloat64(byteOffset, value + /* , littleEndian */ + ) { + set$3(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : undefined); + } + }); + } else { + var INCORRECT_ARRAY_BUFFER_NAME = PROPER_FUNCTION_NAME$3 && NativeArrayBuffer$1.name !== ARRAY_BUFFER$1; + /* eslint-disable no-new -- required for testing */ + + if (!fails$S(function () { + NativeArrayBuffer$1(1); + }) || !fails$S(function () { + new NativeArrayBuffer$1(-1); + }) || fails$S(function () { + new NativeArrayBuffer$1(); + new NativeArrayBuffer$1(1.5); + new NativeArrayBuffer$1(NaN); + return INCORRECT_ARRAY_BUFFER_NAME && !CONFIGURABLE_FUNCTION_NAME; + })) { + /* eslint-enable no-new -- required for testing */ + $ArrayBuffer = function ArrayBuffer(length) { + anInstance$a(this, $ArrayBuffer); + return new NativeArrayBuffer$1(toIndex$1(length)); + }; + + var ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE] = NativeArrayBuffer$1[PROTOTYPE]; + + for (var keys$2 = getOwnPropertyNames$5(NativeArrayBuffer$1), j$1 = 0, key$1; keys$2.length > j$1;) { + if (!((key$1 = keys$2[j$1++]) in $ArrayBuffer)) { + createNonEnumerableProperty$a($ArrayBuffer, key$1, NativeArrayBuffer$1[key$1]); + } + } + + ArrayBufferPrototype.constructor = $ArrayBuffer; + } else if (INCORRECT_ARRAY_BUFFER_NAME && CONFIGURABLE_FUNCTION_NAME) { + createNonEnumerableProperty$a(NativeArrayBuffer$1, 'name', ARRAY_BUFFER$1); + } // WebKit bug - the same parent prototype for typed arrays and data view + + + if (setPrototypeOf$5 && getPrototypeOf$b($DataViewPrototype) !== ObjectPrototype$1) { + setPrototypeOf$5($DataViewPrototype, ObjectPrototype$1); + } // iOS Safari 7.x bug + + + var testView = new $DataView(new $ArrayBuffer(2)); + var $setInt8 = $DataViewPrototype.setInt8; + testView.setInt8(0, 2147483648); + testView.setInt8(1, 2147483649); + if (testView.getInt8(0) || !testView.getInt8(1)) redefineAll$9($DataViewPrototype, { + setInt8: function setInt8(byteOffset, value) { + $setInt8.call(this, byteOffset, value << 24 >> 24); + }, + setUint8: function setUint8(byteOffset, value) { + $setInt8.call(this, byteOffset, value << 24 >> 24); + } + }, { + unsafe: true + }); + } + + setToStringTag$7($ArrayBuffer, ARRAY_BUFFER$1); + setToStringTag$7($DataView, DATA_VIEW); + var arrayBuffer = { + ArrayBuffer: $ArrayBuffer, + DataView: $DataView + }; + + var $$3Q = _export; + + var global$B = global$R; + + var arrayBufferModule = arrayBuffer; + + var setSpecies$5 = setSpecies$7; + + var ARRAY_BUFFER = 'ArrayBuffer'; + var ArrayBuffer$4 = arrayBufferModule[ARRAY_BUFFER]; + var NativeArrayBuffer = global$B[ARRAY_BUFFER]; // `ArrayBuffer` constructor + // https://tc39.es/ecma262/#sec-arraybuffer-constructor + + $$3Q({ + global: true, + forced: NativeArrayBuffer !== ArrayBuffer$4 + }, { + ArrayBuffer: ArrayBuffer$4 + }); + setSpecies$5(ARRAY_BUFFER); + + var NATIVE_ARRAY_BUFFER$1 = arrayBufferNative; + + var DESCRIPTORS$q = descriptors; + + var global$A = global$R; + + var isCallable$h = isCallable$z; + + var isObject$q = isObject$C; + + var hasOwn$c = hasOwnProperty_1; + + var classof$6 = classof$b; + + var tryToString$1 = tryToString$3; + + var createNonEnumerableProperty$9 = createNonEnumerableProperty$h; + + var redefine$f = redefine$l.exports; + + var defineProperty$c = objectDefineProperty.f; + + var getPrototypeOf$a = objectGetPrototypeOf$1; + + var setPrototypeOf$4 = objectSetPrototypeOf$1; + + var wellKnownSymbol$o = wellKnownSymbol$G; + + var uid$1 = uid$5; + + var Int8Array$3 = global$A.Int8Array; + var Int8ArrayPrototype = Int8Array$3 && Int8Array$3.prototype; + var Uint8ClampedArray = global$A.Uint8ClampedArray; + var Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype; + var TypedArray$1 = Int8Array$3 && getPrototypeOf$a(Int8Array$3); + var TypedArrayPrototype$1 = Int8ArrayPrototype && getPrototypeOf$a(Int8ArrayPrototype); + var ObjectPrototype = Object.prototype; + var isPrototypeOf$2 = ObjectPrototype.isPrototypeOf; + var TO_STRING_TAG$5 = wellKnownSymbol$o('toStringTag'); + var TYPED_ARRAY_TAG$1 = uid$1('TYPED_ARRAY_TAG'); + var TYPED_ARRAY_CONSTRUCTOR$2 = uid$1('TYPED_ARRAY_CONSTRUCTOR'); // Fixing native typed arrays in Opera Presto crashes the browser, see #595 + + var NATIVE_ARRAY_BUFFER_VIEWS$3 = NATIVE_ARRAY_BUFFER$1 && !!setPrototypeOf$4 && classof$6(global$A.opera) !== 'Opera'; + var TYPED_ARRAY_TAG_REQIRED = false; + var NAME$1, Constructor, Prototype; + var TypedArrayConstructorsList = { + Int8Array: 1, + Uint8Array: 1, + Uint8ClampedArray: 1, + Int16Array: 2, + Uint16Array: 2, + Int32Array: 4, + Uint32Array: 4, + Float32Array: 4, + Float64Array: 8 + }; + var BigIntArrayConstructorsList = { + BigInt64Array: 8, + BigUint64Array: 8 + }; + + var isView = function isView(it) { + if (!isObject$q(it)) return false; + var klass = classof$6(it); + return klass === 'DataView' || hasOwn$c(TypedArrayConstructorsList, klass) || hasOwn$c(BigIntArrayConstructorsList, klass); + }; + + var isTypedArray$1 = function (it) { + if (!isObject$q(it)) return false; + var klass = classof$6(it); + return hasOwn$c(TypedArrayConstructorsList, klass) || hasOwn$c(BigIntArrayConstructorsList, klass); + }; + + var aTypedArray$t = function (it) { + if (isTypedArray$1(it)) return it; + throw TypeError('Target is not a typed array'); + }; + + var aTypedArrayConstructor$5 = function (C) { + if (isCallable$h(C) && (!setPrototypeOf$4 || isPrototypeOf$2.call(TypedArray$1, C))) return C; + throw TypeError(tryToString$1(C) + ' is not a typed array constructor'); + }; + + var exportTypedArrayMethod$u = function (KEY, property, forced) { + if (!DESCRIPTORS$q) return; + if (forced) for (var ARRAY in TypedArrayConstructorsList) { + var TypedArrayConstructor = global$A[ARRAY]; + if (TypedArrayConstructor && hasOwn$c(TypedArrayConstructor.prototype, KEY)) try { + delete TypedArrayConstructor.prototype[KEY]; + } catch (error) { + /* empty */ + } + } + + if (!TypedArrayPrototype$1[KEY] || forced) { + redefine$f(TypedArrayPrototype$1, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS$3 && Int8ArrayPrototype[KEY] || property); + } + }; + + var exportTypedArrayStaticMethod$3 = function (KEY, property, forced) { + var ARRAY, TypedArrayConstructor; + if (!DESCRIPTORS$q) return; + + if (setPrototypeOf$4) { + if (forced) for (ARRAY in TypedArrayConstructorsList) { + TypedArrayConstructor = global$A[ARRAY]; + if (TypedArrayConstructor && hasOwn$c(TypedArrayConstructor, KEY)) try { + delete TypedArrayConstructor[KEY]; + } catch (error) { + /* empty */ + } + } + + if (!TypedArray$1[KEY] || forced) { + // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable + try { + return redefine$f(TypedArray$1, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS$3 && TypedArray$1[KEY] || property); + } catch (error) { + /* empty */ + } + } else return; + } + + for (ARRAY in TypedArrayConstructorsList) { + TypedArrayConstructor = global$A[ARRAY]; + + if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) { + redefine$f(TypedArrayConstructor, KEY, property); + } + } + }; + + for (NAME$1 in TypedArrayConstructorsList) { + Constructor = global$A[NAME$1]; + Prototype = Constructor && Constructor.prototype; + if (Prototype) createNonEnumerableProperty$9(Prototype, TYPED_ARRAY_CONSTRUCTOR$2, Constructor);else NATIVE_ARRAY_BUFFER_VIEWS$3 = false; + } + + for (NAME$1 in BigIntArrayConstructorsList) { + Constructor = global$A[NAME$1]; + Prototype = Constructor && Constructor.prototype; + if (Prototype) createNonEnumerableProperty$9(Prototype, TYPED_ARRAY_CONSTRUCTOR$2, Constructor); + } // WebKit bug - typed arrays constructors prototype is Object.prototype + + + if (!NATIVE_ARRAY_BUFFER_VIEWS$3 || !isCallable$h(TypedArray$1) || TypedArray$1 === Function.prototype) { + // eslint-disable-next-line no-shadow -- safe + TypedArray$1 = function TypedArray() { + throw TypeError('Incorrect invocation'); + }; + + if (NATIVE_ARRAY_BUFFER_VIEWS$3) for (NAME$1 in TypedArrayConstructorsList) { + if (global$A[NAME$1]) setPrototypeOf$4(global$A[NAME$1], TypedArray$1); + } + } + + if (!NATIVE_ARRAY_BUFFER_VIEWS$3 || !TypedArrayPrototype$1 || TypedArrayPrototype$1 === ObjectPrototype) { + TypedArrayPrototype$1 = TypedArray$1.prototype; + if (NATIVE_ARRAY_BUFFER_VIEWS$3) for (NAME$1 in TypedArrayConstructorsList) { + if (global$A[NAME$1]) setPrototypeOf$4(global$A[NAME$1].prototype, TypedArrayPrototype$1); + } + } // WebKit bug - one more object in Uint8ClampedArray prototype chain + + + if (NATIVE_ARRAY_BUFFER_VIEWS$3 && getPrototypeOf$a(Uint8ClampedArrayPrototype) !== TypedArrayPrototype$1) { + setPrototypeOf$4(Uint8ClampedArrayPrototype, TypedArrayPrototype$1); + } + + if (DESCRIPTORS$q && !hasOwn$c(TypedArrayPrototype$1, TO_STRING_TAG$5)) { + TYPED_ARRAY_TAG_REQIRED = true; + defineProperty$c(TypedArrayPrototype$1, TO_STRING_TAG$5, { + get: function () { + return isObject$q(this) ? this[TYPED_ARRAY_TAG$1] : undefined; + } + }); + + for (NAME$1 in TypedArrayConstructorsList) if (global$A[NAME$1]) { + createNonEnumerableProperty$9(global$A[NAME$1], TYPED_ARRAY_TAG$1, NAME$1); + } + } + + var arrayBufferViewCore = { + NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS$3, + TYPED_ARRAY_CONSTRUCTOR: TYPED_ARRAY_CONSTRUCTOR$2, + TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQIRED && TYPED_ARRAY_TAG$1, + aTypedArray: aTypedArray$t, + aTypedArrayConstructor: aTypedArrayConstructor$5, + exportTypedArrayMethod: exportTypedArrayMethod$u, + exportTypedArrayStaticMethod: exportTypedArrayStaticMethod$3, + isView: isView, + isTypedArray: isTypedArray$1, + TypedArray: TypedArray$1, + TypedArrayPrototype: TypedArrayPrototype$1 + }; + + var $$3P = _export; + + var ArrayBufferViewCore$x = arrayBufferViewCore; + + var NATIVE_ARRAY_BUFFER_VIEWS$2 = ArrayBufferViewCore$x.NATIVE_ARRAY_BUFFER_VIEWS; // `ArrayBuffer.isView` method + // https://tc39.es/ecma262/#sec-arraybuffer.isview + + $$3P({ + target: 'ArrayBuffer', + stat: true, + forced: !NATIVE_ARRAY_BUFFER_VIEWS$2 + }, { + isView: ArrayBufferViewCore$x.isView + }); + + var isConstructor$2 = isConstructor$7; + + var tryToString = tryToString$3; // `Assert: IsConstructor(argument) is true` + + + var aConstructor$5 = function (argument) { + if (isConstructor$2(argument)) return argument; + throw TypeError(tryToString(argument) + ' is not a constructor'); + }; + + var anObject$1r = anObject$1C; + + var aConstructor$4 = aConstructor$5; + + var wellKnownSymbol$n = wellKnownSymbol$G; + + var SPECIES$2 = wellKnownSymbol$n('species'); // `SpeciesConstructor` abstract operation + // https://tc39.es/ecma262/#sec-speciesconstructor + + var speciesConstructor$f = function (O, defaultConstructor) { + var C = anObject$1r(O).constructor; + var S; + return C === undefined || (S = anObject$1r(C)[SPECIES$2]) == undefined ? defaultConstructor : aConstructor$4(S); + }; + + var $$3O = _export; + + var fails$R = fails$15; + + var ArrayBufferModule$2 = arrayBuffer; + + var anObject$1q = anObject$1C; + + var toAbsoluteIndex$2 = toAbsoluteIndex$8; + + var toLength$9 = toLength$d; + + var speciesConstructor$e = speciesConstructor$f; + + var ArrayBuffer$3 = ArrayBufferModule$2.ArrayBuffer; + var DataView$2 = ArrayBufferModule$2.DataView; + var nativeArrayBufferSlice = ArrayBuffer$3.prototype.slice; + var INCORRECT_SLICE = fails$R(function () { + return !new ArrayBuffer$3(2).slice(1, undefined).byteLength; + }); // `ArrayBuffer.prototype.slice` method + // https://tc39.es/ecma262/#sec-arraybuffer.prototype.slice + + $$3O({ + target: 'ArrayBuffer', + proto: true, + unsafe: true, + forced: INCORRECT_SLICE + }, { + slice: function slice(start, end) { + if (nativeArrayBufferSlice !== undefined && end === undefined) { + return nativeArrayBufferSlice.call(anObject$1q(this), start); // FF fix + } + + var length = anObject$1q(this).byteLength; + var first = toAbsoluteIndex$2(start, length); + var fin = toAbsoluteIndex$2(end === undefined ? length : end, length); + var result = new (speciesConstructor$e(this, ArrayBuffer$3))(toLength$9(fin - first)); + var viewSource = new DataView$2(this); + var viewTarget = new DataView$2(result); + var index = 0; + + while (first < fin) { + viewTarget.setUint8(index++, viewSource.getUint8(first++)); + } + + return result; + } + }); + + var $$3N = _export; + + var ArrayBufferModule$1 = arrayBuffer; + + var NATIVE_ARRAY_BUFFER = arrayBufferNative; // `DataView` constructor + // https://tc39.es/ecma262/#sec-dataview-constructor + + + $$3N({ + global: true, + forced: !NATIVE_ARRAY_BUFFER + }, { + DataView: ArrayBufferModule$1.DataView + }); + + var $$3M = _export; + + var fails$Q = fails$15; + + var FORCED$r = fails$Q(function () { + return new Date(16e11).getYear() !== 120; + }); + var getFullYear = Date.prototype.getFullYear; // `Date.prototype.getYear` method + // https://tc39.es/ecma262/#sec-date.prototype.getyear + + $$3M({ + target: 'Date', + proto: true, + forced: FORCED$r + }, { + getYear: function getYear() { + return getFullYear.call(this) - 1900; + } + }); + + var $$3L = _export; // `Date.now` method + // https://tc39.es/ecma262/#sec-date.now + + + $$3L({ + target: 'Date', + stat: true + }, { + now: function now() { + return new Date().getTime(); + } + }); + + var $$3K = _export; + + var toIntegerOrInfinity$9 = toIntegerOrInfinity$i; + + var getTime$2 = Date.prototype.getTime; + var setFullYear = Date.prototype.setFullYear; // `Date.prototype.setYear` method + // https://tc39.es/ecma262/#sec-date.prototype.setyear + + $$3K({ + target: 'Date', + proto: true + }, { + setYear: function setYear(year) { + // validate + getTime$2.call(this); + var yi = toIntegerOrInfinity$9(year); + var yyyy = 0 <= yi && yi <= 99 ? yi + 1900 : yi; + return setFullYear.call(this, yyyy); + } + }); + + var $$3J = _export; // `Date.prototype.toGMTString` method + // https://tc39.es/ecma262/#sec-date.prototype.togmtstring + + + $$3J({ + target: 'Date', + proto: true + }, { + toGMTString: Date.prototype.toUTCString + }); + + var toIntegerOrInfinity$8 = toIntegerOrInfinity$i; + + var toString$p = toString$t; + + var requireObjectCoercible$g = requireObjectCoercible$j; // `String.prototype.repeat` method implementation + // https://tc39.es/ecma262/#sec-string.prototype.repeat + + + var stringRepeat = function repeat(count) { + var str = toString$p(requireObjectCoercible$g(this)); + var result = ''; + var n = toIntegerOrInfinity$8(count); + if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions'); + + for (; n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str; + + return result; + }; + + // https://github.com/tc39/proposal-string-pad-start-end + var toLength$8 = toLength$d; + + var toString$o = toString$t; + + var repeat$2 = stringRepeat; + + var requireObjectCoercible$f = requireObjectCoercible$j; + + var ceil$1 = Math.ceil; // `String.prototype.{ padStart, padEnd }` methods implementation + + var createMethod$5 = function (IS_END) { + return function ($this, maxLength, fillString) { + var S = toString$o(requireObjectCoercible$f($this)); + var intMaxLength = toLength$8(maxLength); + var stringLength = S.length; + var fillStr = fillString === undefined ? ' ' : toString$o(fillString); + var fillLen, stringFiller; + if (intMaxLength <= stringLength || fillStr == '') return S; + fillLen = intMaxLength - stringLength; + stringFiller = repeat$2.call(fillStr, ceil$1(fillLen / fillStr.length)); + if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen); + return IS_END ? S + stringFiller : stringFiller + S; + }; + }; + + var stringPad = { + // `String.prototype.padStart` method + // https://tc39.es/ecma262/#sec-string.prototype.padstart + start: createMethod$5(false), + // `String.prototype.padEnd` method + // https://tc39.es/ecma262/#sec-string.prototype.padend + end: createMethod$5(true) + }; + + var fails$P = fails$15; + + var padStart = stringPad.start; + + var abs$6 = Math.abs; + var DatePrototype$2 = Date.prototype; + var getTime$1 = DatePrototype$2.getTime; + var nativeDateToISOString = DatePrototype$2.toISOString; // `Date.prototype.toISOString` method implementation + // https://tc39.es/ecma262/#sec-date.prototype.toisostring + // PhantomJS / old WebKit fails here: + + var dateToIsoString = fails$P(function () { + return nativeDateToISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z'; + }) || !fails$P(function () { + nativeDateToISOString.call(new Date(NaN)); + }) ? function toISOString() { + if (!isFinite(getTime$1.call(this))) throw RangeError('Invalid time value'); + var date = this; + var year = date.getUTCFullYear(); + var milliseconds = date.getUTCMilliseconds(); + var sign = year < 0 ? '-' : year > 9999 ? '+' : ''; + return sign + padStart(abs$6(year), sign ? 6 : 4, 0) + '-' + padStart(date.getUTCMonth() + 1, 2, 0) + '-' + padStart(date.getUTCDate(), 2, 0) + 'T' + padStart(date.getUTCHours(), 2, 0) + ':' + padStart(date.getUTCMinutes(), 2, 0) + ':' + padStart(date.getUTCSeconds(), 2, 0) + '.' + padStart(milliseconds, 3, 0) + 'Z'; + } : nativeDateToISOString; + + var $$3I = _export; + + var toISOString = dateToIsoString; // `Date.prototype.toISOString` method + // https://tc39.es/ecma262/#sec-date.prototype.toisostring + // PhantomJS / old WebKit has a broken implementations + + + $$3I({ + target: 'Date', + proto: true, + forced: Date.prototype.toISOString !== toISOString + }, { + toISOString: toISOString + }); + + var $$3H = _export; + + var fails$O = fails$15; + + var toObject$l = toObject$A; + + var toPrimitive$1 = toPrimitive$3; + + var FORCED$q = fails$O(function () { + return new Date(NaN).toJSON() !== null || Date.prototype.toJSON.call({ + toISOString: function () { + return 1; + } + }) !== 1; + }); // `Date.prototype.toJSON` method + // https://tc39.es/ecma262/#sec-date.prototype.tojson + + $$3H({ + target: 'Date', + proto: true, + forced: FORCED$q + }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + toJSON: function toJSON(key) { + var O = toObject$l(this); + var pv = toPrimitive$1(O, 'number'); + return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString(); + } + }); + + var anObject$1p = anObject$1C; + + var ordinaryToPrimitive = ordinaryToPrimitive$2; // `Date.prototype[@@toPrimitive](hint)` method implementation + // https://tc39.es/ecma262/#sec-date.prototype-@@toprimitive + + + var dateToPrimitive$1 = function (hint) { + anObject$1p(this); + if (hint === 'string' || hint === 'default') hint = 'string';else if (hint !== 'number') throw TypeError('Incorrect hint'); + return ordinaryToPrimitive(this, hint); + }; + + var redefine$e = redefine$l.exports; + + var dateToPrimitive = dateToPrimitive$1; + + var wellKnownSymbol$m = wellKnownSymbol$G; + + var TO_PRIMITIVE = wellKnownSymbol$m('toPrimitive'); + var DatePrototype$1 = Date.prototype; // `Date.prototype[@@toPrimitive]` method + // https://tc39.es/ecma262/#sec-date.prototype-@@toprimitive + + if (!(TO_PRIMITIVE in DatePrototype$1)) { + redefine$e(DatePrototype$1, TO_PRIMITIVE, dateToPrimitive); + } + + var redefine$d = redefine$l.exports; + + var DatePrototype = Date.prototype; + var INVALID_DATE = 'Invalid Date'; + var TO_STRING$1 = 'toString'; + var nativeDateToString = DatePrototype[TO_STRING$1]; + var getTime = DatePrototype.getTime; // `Date.prototype.toString` method + // https://tc39.es/ecma262/#sec-date.prototype.tostring + + if (String(new Date(NaN)) != INVALID_DATE) { + redefine$d(DatePrototype, TO_STRING$1, function toString() { + var value = getTime.call(this); // eslint-disable-next-line no-self-compare -- NaN check + + return value === value ? nativeDateToString.call(this) : INVALID_DATE; + }); + } + + var $$3G = _export; + + var toString$n = toString$t; + + var raw = /[\w*+\-./@]/; + + var hex$1 = function (code, length) { + var result = code.toString(16); + + while (result.length < length) result = '0' + result; + + return result; + }; // `escape` method + // https://tc39.es/ecma262/#sec-escape-string + + + $$3G({ + global: true + }, { + escape: function escape(string) { + var str = toString$n(string); + var result = ''; + var length = str.length; + var index = 0; + var chr, code; + + while (index < length) { + chr = str.charAt(index++); + + if (raw.test(chr)) { + result += chr; + } else { + code = chr.charCodeAt(0); + + if (code < 256) { + result += '%' + hex$1(code, 2); + } else { + result += '%u' + hex$1(code, 4).toUpperCase(); + } + } + } + + return result; + } + }); + + var aCallable$J = aCallable$Q; + + var isObject$p = isObject$C; + + var slice$2 = [].slice; + var factories = {}; + + var construct = function (C, argsLength, args) { + if (!(argsLength in factories)) { + for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']'; // eslint-disable-next-line no-new-func -- we have no proper alternatives, IE8- only + + + factories[argsLength] = Function('C,a', 'return new C(' + list.join(',') + ')'); + } + + return factories[argsLength](C, args); + }; // `Function.prototype.bind` method implementation + // https://tc39.es/ecma262/#sec-function.prototype.bind + + + var functionBind = Function.bind || function bind(that + /* , ...args */ + ) { + var fn = aCallable$J(this); + var partArgs = slice$2.call(arguments, 1); + + var boundFunction = function bound() { + var args = partArgs.concat(slice$2.call(arguments)); + return this instanceof boundFunction ? construct(fn, args.length, args) : fn.apply(that, args); + }; + + if (isObject$p(fn.prototype)) boundFunction.prototype = fn.prototype; + return boundFunction; + }; + + var $$3F = _export; + + var bind$m = functionBind; // `Function.prototype.bind` method + // https://tc39.es/ecma262/#sec-function.prototype.bind + + + $$3F({ + target: 'Function', + proto: true + }, { + bind: bind$m + }); + + var isCallable$g = isCallable$z; + + var isObject$o = isObject$C; + + var definePropertyModule$5 = objectDefineProperty; + + var getPrototypeOf$9 = objectGetPrototypeOf$1; + + var wellKnownSymbol$l = wellKnownSymbol$G; + + var HAS_INSTANCE = wellKnownSymbol$l('hasInstance'); + var FunctionPrototype$1 = Function.prototype; // `Function.prototype[@@hasInstance]` method + // https://tc39.es/ecma262/#sec-function.prototype-@@hasinstance + + if (!(HAS_INSTANCE in FunctionPrototype$1)) { + definePropertyModule$5.f(FunctionPrototype$1, HAS_INSTANCE, { + value: function (O) { + if (!isCallable$g(this) || !isObject$o(O)) return false; + if (!isObject$o(this.prototype)) return O instanceof this; // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this: + + while (O = getPrototypeOf$9(O)) if (this.prototype === O) return true; + + return false; + } + }); + } + + var DESCRIPTORS$p = descriptors; + + var FUNCTION_NAME_EXISTS = functionName.EXISTS; + + var defineProperty$b = objectDefineProperty.f; + + var FunctionPrototype = Function.prototype; + var FunctionPrototypeToString = FunctionPrototype.toString; + var nameRE = /^\s*function ([^ (]*)/; + var NAME = 'name'; // Function instances `.name` property + // https://tc39.es/ecma262/#sec-function-instances-name + + if (DESCRIPTORS$p && !FUNCTION_NAME_EXISTS) { + defineProperty$b(FunctionPrototype, NAME, { + configurable: true, + get: function () { + try { + return FunctionPrototypeToString.call(this).match(nameRE)[1]; + } catch (error) { + return ''; + } + } + }); + } + + var $$3E = _export; + + var global$z = global$R; // `globalThis` object + // https://tc39.es/ecma262/#sec-globalthis + + + $$3E({ + global: true + }, { + globalThis: global$z + }); + + var $$3D = _export; + + var getBuiltIn$q = getBuiltIn$y; + + var fails$N = fails$15; + + var $stringify = getBuiltIn$q('JSON', 'stringify'); + var re = /[\uD800-\uDFFF]/g; + var low = /^[\uD800-\uDBFF]$/; + var hi = /^[\uDC00-\uDFFF]$/; + + var fix = function (match, offset, string) { + var prev = string.charAt(offset - 1); + var next = string.charAt(offset + 1); + + if (low.test(match) && !hi.test(next) || hi.test(match) && !low.test(prev)) { + return '\\u' + match.charCodeAt(0).toString(16); + } + + return match; + }; + + var FORCED$p = fails$N(function () { + return $stringify('\uDF06\uD834') !== '"\\udf06\\ud834"' || $stringify('\uDEAD') !== '"\\udead"'; + }); + + if ($stringify) { + // `JSON.stringify` method + // https://tc39.es/ecma262/#sec-json.stringify + // https://github.com/tc39/proposal-well-formed-stringify + $$3D({ + target: 'JSON', + stat: true, + forced: FORCED$p + }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + stringify: function stringify(it, replacer, space) { + var result = $stringify.apply(null, arguments); + return typeof result == 'string' ? result.replace(re, fix) : result; + } + }); + } + + var global$y = global$R; + + var setToStringTag$6 = setToStringTag$b; // JSON[@@toStringTag] property + // https://tc39.es/ecma262/#sec-json-@@tostringtag + + + setToStringTag$6(global$y.JSON, 'JSON', true); + + var internalMetadata = {exports: {}}; + + var fails$M = fails$15; + + var freezing = !fails$M(function () { + // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing + return Object.isExtensible(Object.preventExtensions({})); + }); + + var $$3C = _export; + + var hiddenKeys = hiddenKeys$6; + + var isObject$n = isObject$C; + + var hasOwn$b = hasOwnProperty_1; + + var defineProperty$a = objectDefineProperty.f; + + var getOwnPropertyNamesModule = objectGetOwnPropertyNames; + + var getOwnPropertyNamesExternalModule = objectGetOwnPropertyNamesExternal; + + var uid = uid$5; + + var FREEZING$4 = freezing; + + var REQUIRED = false; + var METADATA = uid('meta'); + var id$1 = 0; // eslint-disable-next-line es/no-object-isextensible -- safe + + var isExtensible$1 = Object.isExtensible || function () { + return true; + }; + + var setMetadata = function (it) { + defineProperty$a(it, METADATA, { + value: { + objectID: 'O' + id$1++, + // object ID + weakData: {} // weak collections IDs + + } + }); + }; + + var fastKey$1 = function (it, create) { + // return a primitive with prefix + if (!isObject$n(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; + + if (!hasOwn$b(it, METADATA)) { + // can't set metadata to uncaught frozen object + if (!isExtensible$1(it)) return 'F'; // not necessary to add metadata + + if (!create) return 'E'; // add missing metadata + + setMetadata(it); // return object ID + } + + return it[METADATA].objectID; + }; + + var getWeakData$1 = function (it, create) { + if (!hasOwn$b(it, METADATA)) { + // can't set metadata to uncaught frozen object + if (!isExtensible$1(it)) return true; // not necessary to add metadata + + if (!create) return false; // add missing metadata + + setMetadata(it); // return the store of weak collections IDs + } + + return it[METADATA].weakData; + }; // add metadata on freeze-family methods calling + + + var onFreeze$3 = function (it) { + if (FREEZING$4 && REQUIRED && isExtensible$1(it) && !hasOwn$b(it, METADATA)) setMetadata(it); + return it; + }; + + var enable = function () { + meta.enable = function () { + /* empty */ + }; + + REQUIRED = true; + var getOwnPropertyNames = getOwnPropertyNamesModule.f; + var splice = [].splice; + var test = {}; + test[METADATA] = 1; // prevent exposing of metadata key + + if (getOwnPropertyNames(test).length) { + getOwnPropertyNamesModule.f = function (it) { + var result = getOwnPropertyNames(it); + + for (var i = 0, length = result.length; i < length; i++) { + if (result[i] === METADATA) { + splice.call(result, i, 1); + break; + } + } + + return result; + }; + + $$3C({ + target: 'Object', + stat: true, + forced: true + }, { + getOwnPropertyNames: getOwnPropertyNamesExternalModule.f + }); + } + }; + + var meta = internalMetadata.exports = { + enable: enable, + fastKey: fastKey$1, + getWeakData: getWeakData$1, + onFreeze: onFreeze$3 + }; + hiddenKeys[METADATA] = true; + + var isCallable$f = isCallable$z; + + var isObject$m = isObject$C; + + var setPrototypeOf$3 = objectSetPrototypeOf$1; // makes subclassing work correct for wrapped built-ins + + + var inheritIfRequired$4 = function ($this, dummy, Wrapper) { + var NewTarget, NewTargetPrototype; + if ( // it can work only with native `setPrototypeOf` + setPrototypeOf$3 && // we haven't completely correct pre-ES6 way for getting `new.target`, so use this + isCallable$f(NewTarget = dummy.constructor) && NewTarget !== Wrapper && isObject$m(NewTargetPrototype = NewTarget.prototype) && NewTargetPrototype !== Wrapper.prototype) setPrototypeOf$3($this, NewTargetPrototype); + return $this; + }; + + var $$3B = _export; + + var global$x = global$R; + + var isForced$3 = isForced_1; + + var redefine$c = redefine$l.exports; + + var InternalMetadataModule$1 = internalMetadata.exports; + + var iterate$G = iterate$I; + + var anInstance$9 = anInstance$b; + + var isCallable$e = isCallable$z; + + var isObject$l = isObject$C; + + var fails$L = fails$15; + + var checkCorrectnessOfIteration$2 = checkCorrectnessOfIteration$4; + + var setToStringTag$5 = setToStringTag$b; + + var inheritIfRequired$3 = inheritIfRequired$4; + + var collection$4 = function (CONSTRUCTOR_NAME, wrapper, common) { + var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1; + var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1; + var ADDER = IS_MAP ? 'set' : 'add'; + var NativeConstructor = global$x[CONSTRUCTOR_NAME]; + var NativePrototype = NativeConstructor && NativeConstructor.prototype; + var Constructor = NativeConstructor; + var exported = {}; + + var fixMethod = function (KEY) { + var nativeMethod = NativePrototype[KEY]; + redefine$c(NativePrototype, KEY, KEY == 'add' ? function add(value) { + nativeMethod.call(this, value === 0 ? 0 : value); + return this; + } : KEY == 'delete' ? function (key) { + return IS_WEAK && !isObject$l(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key); + } : KEY == 'get' ? function get(key) { + return IS_WEAK && !isObject$l(key) ? undefined : nativeMethod.call(this, key === 0 ? 0 : key); + } : KEY == 'has' ? function has(key) { + return IS_WEAK && !isObject$l(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key); + } : function set(key, value) { + nativeMethod.call(this, key === 0 ? 0 : key, value); + return this; + }); + }; + + var REPLACE = isForced$3(CONSTRUCTOR_NAME, !isCallable$e(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails$L(function () { + new NativeConstructor().entries().next(); + }))); + + if (REPLACE) { + // create collection constructor + Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER); + InternalMetadataModule$1.enable(); + } else if (isForced$3(CONSTRUCTOR_NAME, true)) { + var instance = new Constructor(); // early implementations not supports chaining + + var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance; // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false + + var THROWS_ON_PRIMITIVES = fails$L(function () { + instance.has(1); + }); // most early implementations doesn't supports iterables, most modern - not close it correctly + // eslint-disable-next-line no-new -- required for testing + + var ACCEPT_ITERABLES = checkCorrectnessOfIteration$2(function (iterable) { + new NativeConstructor(iterable); + }); // for early implementations -0 and +0 not the same + + var BUGGY_ZERO = !IS_WEAK && fails$L(function () { + // V8 ~ Chromium 42- fails only with 5+ elements + var $instance = new NativeConstructor(); + var index = 5; + + while (index--) $instance[ADDER](index, index); + + return !$instance.has(-0); + }); + + if (!ACCEPT_ITERABLES) { + Constructor = wrapper(function (dummy, iterable) { + anInstance$9(dummy, Constructor, CONSTRUCTOR_NAME); + var that = inheritIfRequired$3(new NativeConstructor(), dummy, Constructor); + if (iterable != undefined) iterate$G(iterable, that[ADDER], { + that: that, + AS_ENTRIES: IS_MAP + }); + return that; + }); + Constructor.prototype = NativePrototype; + NativePrototype.constructor = Constructor; + } + + if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) { + fixMethod('delete'); + fixMethod('has'); + IS_MAP && fixMethod('get'); + } + + if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER); // weak collections should not contains .clear method + + if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear; + } + + exported[CONSTRUCTOR_NAME] = Constructor; + $$3B({ + global: true, + forced: Constructor != NativeConstructor + }, exported); + setToStringTag$5(Constructor, CONSTRUCTOR_NAME); + if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP); + return Constructor; + }; + + var defineProperty$9 = objectDefineProperty.f; + + var create$a = objectCreate$1; + + var redefineAll$8 = redefineAll$a; + + var bind$l = functionBindContext; + + var anInstance$8 = anInstance$b; + + var iterate$F = iterate$I; + + var defineIterator$1 = defineIterator$3; + + var setSpecies$4 = setSpecies$7; + + var DESCRIPTORS$o = descriptors; + + var fastKey = internalMetadata.exports.fastKey; + + var InternalStateModule$f = internalState; + + var setInternalState$f = InternalStateModule$f.set; + var internalStateGetterFor$1 = InternalStateModule$f.getterFor; + var collectionStrong$2 = { + getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) { + var C = wrapper(function (that, iterable) { + anInstance$8(that, C, CONSTRUCTOR_NAME); + setInternalState$f(that, { + type: CONSTRUCTOR_NAME, + index: create$a(null), + first: undefined, + last: undefined, + size: 0 + }); + if (!DESCRIPTORS$o) that.size = 0; + if (iterable != undefined) iterate$F(iterable, that[ADDER], { + that: that, + AS_ENTRIES: IS_MAP + }); + }); + var getInternalState = internalStateGetterFor$1(CONSTRUCTOR_NAME); + + var define = function (that, key, value) { + var state = getInternalState(that); + var entry = getEntry(that, key); + var previous, index; // change existing entry + + if (entry) { + entry.value = value; // create new entry + } else { + state.last = entry = { + index: index = fastKey(key, true), + key: key, + value: value, + previous: previous = state.last, + next: undefined, + removed: false + }; + if (!state.first) state.first = entry; + if (previous) previous.next = entry; + if (DESCRIPTORS$o) state.size++;else that.size++; // add to index + + if (index !== 'F') state.index[index] = entry; + } + + return that; + }; + + var getEntry = function (that, key) { + var state = getInternalState(that); // fast case + + var index = fastKey(key); + var entry; + if (index !== 'F') return state.index[index]; // frozen object case + + for (entry = state.first; entry; entry = entry.next) { + if (entry.key == key) return entry; + } + }; + + redefineAll$8(C.prototype, { + // `{ Map, Set }.prototype.clear()` methods + // https://tc39.es/ecma262/#sec-map.prototype.clear + // https://tc39.es/ecma262/#sec-set.prototype.clear + clear: function clear() { + var that = this; + var state = getInternalState(that); + var data = state.index; + var entry = state.first; + + while (entry) { + entry.removed = true; + if (entry.previous) entry.previous = entry.previous.next = undefined; + delete data[entry.index]; + entry = entry.next; + } + + state.first = state.last = undefined; + if (DESCRIPTORS$o) state.size = 0;else that.size = 0; + }, + // `{ Map, Set }.prototype.delete(key)` methods + // https://tc39.es/ecma262/#sec-map.prototype.delete + // https://tc39.es/ecma262/#sec-set.prototype.delete + 'delete': function (key) { + var that = this; + var state = getInternalState(that); + var entry = getEntry(that, key); + + if (entry) { + var next = entry.next; + var prev = entry.previous; + delete state.index[entry.index]; + entry.removed = true; + if (prev) prev.next = next; + if (next) next.previous = prev; + if (state.first == entry) state.first = next; + if (state.last == entry) state.last = prev; + if (DESCRIPTORS$o) state.size--;else that.size--; + } + + return !!entry; + }, + // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods + // https://tc39.es/ecma262/#sec-map.prototype.foreach + // https://tc39.es/ecma262/#sec-set.prototype.foreach + forEach: function forEach(callbackfn + /* , that = undefined */ + ) { + var state = getInternalState(this); + var boundFunction = bind$l(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + var entry; + + while (entry = entry ? entry.next : state.first) { + boundFunction(entry.value, entry.key, this); // revert to the last existing entry + + while (entry && entry.removed) entry = entry.previous; + } + }, + // `{ Map, Set}.prototype.has(key)` methods + // https://tc39.es/ecma262/#sec-map.prototype.has + // https://tc39.es/ecma262/#sec-set.prototype.has + has: function has(key) { + return !!getEntry(this, key); + } + }); + redefineAll$8(C.prototype, IS_MAP ? { + // `Map.prototype.get(key)` method + // https://tc39.es/ecma262/#sec-map.prototype.get + get: function get(key) { + var entry = getEntry(this, key); + return entry && entry.value; + }, + // `Map.prototype.set(key, value)` method + // https://tc39.es/ecma262/#sec-map.prototype.set + set: function set(key, value) { + return define(this, key === 0 ? 0 : key, value); + } + } : { + // `Set.prototype.add(value)` method + // https://tc39.es/ecma262/#sec-set.prototype.add + add: function add(value) { + return define(this, value = value === 0 ? 0 : value, value); + } + }); + if (DESCRIPTORS$o) defineProperty$9(C.prototype, 'size', { + get: function () { + return getInternalState(this).size; + } + }); + return C; + }, + setStrong: function (C, CONSTRUCTOR_NAME, IS_MAP) { + var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator'; + var getInternalCollectionState = internalStateGetterFor$1(CONSTRUCTOR_NAME); + var getInternalIteratorState = internalStateGetterFor$1(ITERATOR_NAME); // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods + // https://tc39.es/ecma262/#sec-map.prototype.entries + // https://tc39.es/ecma262/#sec-map.prototype.keys + // https://tc39.es/ecma262/#sec-map.prototype.values + // https://tc39.es/ecma262/#sec-map.prototype-@@iterator + // https://tc39.es/ecma262/#sec-set.prototype.entries + // https://tc39.es/ecma262/#sec-set.prototype.keys + // https://tc39.es/ecma262/#sec-set.prototype.values + // https://tc39.es/ecma262/#sec-set.prototype-@@iterator + + defineIterator$1(C, CONSTRUCTOR_NAME, function (iterated, kind) { + setInternalState$f(this, { + type: ITERATOR_NAME, + target: iterated, + state: getInternalCollectionState(iterated), + kind: kind, + last: undefined + }); + }, function () { + var state = getInternalIteratorState(this); + var kind = state.kind; + var entry = state.last; // revert to the last existing entry + + while (entry && entry.removed) entry = entry.previous; // get next entry + + + if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) { + // or finish the iteration + state.target = undefined; + return { + value: undefined, + done: true + }; + } // return step by kind + + + if (kind == 'keys') return { + value: entry.key, + done: false + }; + if (kind == 'values') return { + value: entry.value, + done: false + }; + return { + value: [entry.key, entry.value], + done: false + }; + }, IS_MAP ? 'entries' : 'values', !IS_MAP, true); // `{ Map, Set }.prototype[@@species]` accessors + // https://tc39.es/ecma262/#sec-get-map-@@species + // https://tc39.es/ecma262/#sec-get-set-@@species + + setSpecies$4(CONSTRUCTOR_NAME); + } + }; + + var collection$3 = collection$4; + + var collectionStrong$1 = collectionStrong$2; // `Map` constructor + // https://tc39.es/ecma262/#sec-map-objects + + + var es_map = collection$3('Map', function (init) { + return function Map() { + return init(this, arguments.length ? arguments[0] : undefined); + }; + }, collectionStrong$1); + + var log$7 = Math.log; // `Math.log1p` method implementation + // https://tc39.es/ecma262/#sec-math.log1p + // eslint-disable-next-line es/no-math-log1p -- safe + + var mathLog1p = Math.log1p || function log1p(x) { + return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : log$7(1 + x); + }; + + var $$3A = _export; + + var log1p$1 = mathLog1p; // eslint-disable-next-line es/no-math-acosh -- required for testing + + + var $acosh = Math.acosh; + var log$6 = Math.log; + var sqrt$2 = Math.sqrt; + var LN2$1 = Math.LN2; + var FORCED$o = !$acosh // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509 + || Math.floor($acosh(Number.MAX_VALUE)) != 710 // Tor Browser bug: Math.acosh(Infinity) -> NaN + || $acosh(Infinity) != Infinity; // `Math.acosh` method + // https://tc39.es/ecma262/#sec-math.acosh + + $$3A({ + target: 'Math', + stat: true, + forced: FORCED$o + }, { + acosh: function acosh(x) { + return (x = +x) < 1 ? NaN : x > 94906265.62425156 ? log$6(x) + LN2$1 : log1p$1(x - 1 + sqrt$2(x - 1) * sqrt$2(x + 1)); + } + }); + + var $$3z = _export; // eslint-disable-next-line es/no-math-asinh -- required for testing + + + var $asinh = Math.asinh; + var log$5 = Math.log; + var sqrt$1 = Math.sqrt; + + function asinh(x) { + return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : log$5(x + sqrt$1(x * x + 1)); + } // `Math.asinh` method + // https://tc39.es/ecma262/#sec-math.asinh + // Tor Browser bug: Math.asinh(0) -> -0 + + + $$3z({ + target: 'Math', + stat: true, + forced: !($asinh && 1 / $asinh(0) > 0) + }, { + asinh: asinh + }); + + var $$3y = _export; // eslint-disable-next-line es/no-math-atanh -- required for testing + + + var $atanh = Math.atanh; + var log$4 = Math.log; // `Math.atanh` method + // https://tc39.es/ecma262/#sec-math.atanh + // Tor Browser bug: Math.atanh(-0) -> 0 + + $$3y({ + target: 'Math', + stat: true, + forced: !($atanh && 1 / $atanh(-0) < 0) + }, { + atanh: function atanh(x) { + return (x = +x) == 0 ? x : log$4((1 + x) / (1 - x)) / 2; + } + }); + + // `Math.sign` method implementation + // https://tc39.es/ecma262/#sec-math.sign + // eslint-disable-next-line es/no-math-sign -- safe + var mathSign = Math.sign || function sign(x) { + // eslint-disable-next-line no-self-compare -- NaN check + return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1; + }; + + var $$3x = _export; + + var sign$2 = mathSign; + + var abs$5 = Math.abs; + var pow$3 = Math.pow; // `Math.cbrt` method + // https://tc39.es/ecma262/#sec-math.cbrt + + $$3x({ + target: 'Math', + stat: true + }, { + cbrt: function cbrt(x) { + return sign$2(x = +x) * pow$3(abs$5(x), 1 / 3); + } + }); + + var $$3w = _export; + + var floor$7 = Math.floor; + var log$3 = Math.log; + var LOG2E = Math.LOG2E; // `Math.clz32` method + // https://tc39.es/ecma262/#sec-math.clz32 + + $$3w({ + target: 'Math', + stat: true + }, { + clz32: function clz32(x) { + return (x >>>= 0) ? 31 - floor$7(log$3(x + 0.5) * LOG2E) : 32; + } + }); + + // eslint-disable-next-line es/no-math-expm1 -- safe + var $expm1 = Math.expm1; + var exp$2 = Math.exp; // `Math.expm1` method implementation + // https://tc39.es/ecma262/#sec-math.expm1 + + var mathExpm1 = !$expm1 // Old FF bug + || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168 // Tor Browser bug + || $expm1(-2e-17) != -2e-17 ? function expm1(x) { + return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : exp$2(x) - 1; + } : $expm1; + + var $$3v = _export; + + var expm1$3 = mathExpm1; // eslint-disable-next-line es/no-math-cosh -- required for testing + + + var $cosh = Math.cosh; + var abs$4 = Math.abs; + var E$1 = Math.E; // `Math.cosh` method + // https://tc39.es/ecma262/#sec-math.cosh + + $$3v({ + target: 'Math', + stat: true, + forced: !$cosh || $cosh(710) === Infinity + }, { + cosh: function cosh(x) { + var t = expm1$3(abs$4(x) - 1) + 1; + return (t + 1 / (t * E$1 * E$1)) * (E$1 / 2); + } + }); + + var $$3u = _export; + + var expm1$2 = mathExpm1; // `Math.expm1` method + // https://tc39.es/ecma262/#sec-math.expm1 + // eslint-disable-next-line es/no-math-expm1 -- required for testing + + + $$3u({ + target: 'Math', + stat: true, + forced: expm1$2 != Math.expm1 + }, { + expm1: expm1$2 + }); + + var sign$1 = mathSign; + + var abs$3 = Math.abs; + var pow$2 = Math.pow; + var EPSILON = pow$2(2, -52); + var EPSILON32 = pow$2(2, -23); + var MAX32 = pow$2(2, 127) * (2 - EPSILON32); + var MIN32 = pow$2(2, -126); + + var roundTiesToEven = function (n) { + return n + 1 / EPSILON - 1 / EPSILON; + }; // `Math.fround` method implementation + // https://tc39.es/ecma262/#sec-math.fround + // eslint-disable-next-line es/no-math-fround -- safe + + + var mathFround = Math.fround || function fround(x) { + var $abs = abs$3(x); + var $sign = sign$1(x); + var a, result; + if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32; + a = (1 + EPSILON32 / EPSILON) * $abs; + result = a - (a - $abs); // eslint-disable-next-line no-self-compare -- NaN check + + if (result > MAX32 || result != result) return $sign * Infinity; + return $sign * result; + }; + + var $$3t = _export; + + var fround$1 = mathFround; // `Math.fround` method + // https://tc39.es/ecma262/#sec-math.fround + + + $$3t({ + target: 'Math', + stat: true + }, { + fround: fround$1 + }); + + var $$3s = _export; // eslint-disable-next-line es/no-math-hypot -- required for testing + + + var $hypot = Math.hypot; + var abs$2 = Math.abs; + var sqrt = Math.sqrt; // Chrome 77 bug + // https://bugs.chromium.org/p/v8/issues/detail?id=9546 + + var BUGGY = !!$hypot && $hypot(Infinity, NaN) !== Infinity; // `Math.hypot` method + // https://tc39.es/ecma262/#sec-math.hypot + + $$3s({ + target: 'Math', + stat: true, + forced: BUGGY + }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + hypot: function hypot(value1, value2) { + var sum = 0; + var i = 0; + var aLen = arguments.length; + var larg = 0; + var arg, div; + + while (i < aLen) { + arg = abs$2(arguments[i++]); + + if (larg < arg) { + div = larg / arg; + sum = sum * div * div + 1; + larg = arg; + } else if (arg > 0) { + div = arg / larg; + sum += div * div; + } else sum += arg; + } + + return larg === Infinity ? Infinity : larg * sqrt(sum); + } + }); + + var $$3r = _export; + + var fails$K = fails$15; // eslint-disable-next-line es/no-math-imul -- required for testing + + + var $imul = Math.imul; + var FORCED$n = fails$K(function () { + return $imul(0xFFFFFFFF, 5) != -5 || $imul.length != 2; + }); // `Math.imul` method + // https://tc39.es/ecma262/#sec-math.imul + // some WebKit versions fails with big numbers, some has wrong arity + + $$3r({ + target: 'Math', + stat: true, + forced: FORCED$n + }, { + imul: function imul(x, y) { + var UINT16 = 0xFFFF; + var xn = +x; + var yn = +y; + var xl = UINT16 & xn; + var yl = UINT16 & yn; + return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0); + } + }); + + var $$3q = _export; + + var log$2 = Math.log; + var LOG10E = Math.LOG10E; // `Math.log10` method + // https://tc39.es/ecma262/#sec-math.log10 + + $$3q({ + target: 'Math', + stat: true + }, { + log10: function log10(x) { + return log$2(x) * LOG10E; + } + }); + + var $$3p = _export; + + var log1p = mathLog1p; // `Math.log1p` method + // https://tc39.es/ecma262/#sec-math.log1p + + + $$3p({ + target: 'Math', + stat: true + }, { + log1p: log1p + }); + + var $$3o = _export; + + var log$1 = Math.log; + var LN2 = Math.LN2; // `Math.log2` method + // https://tc39.es/ecma262/#sec-math.log2 + + $$3o({ + target: 'Math', + stat: true + }, { + log2: function log2(x) { + return log$1(x) / LN2; + } + }); + + var $$3n = _export; + + var sign = mathSign; // `Math.sign` method + // https://tc39.es/ecma262/#sec-math.sign + + + $$3n({ + target: 'Math', + stat: true + }, { + sign: sign + }); + + var $$3m = _export; + + var fails$J = fails$15; + + var expm1$1 = mathExpm1; + + var abs$1 = Math.abs; + var exp$1 = Math.exp; + var E = Math.E; + var FORCED$m = fails$J(function () { + // eslint-disable-next-line es/no-math-sinh -- required for testing + return Math.sinh(-2e-17) != -2e-17; + }); // `Math.sinh` method + // https://tc39.es/ecma262/#sec-math.sinh + // V8 near Chromium 38 has a problem with very small numbers + + $$3m({ + target: 'Math', + stat: true, + forced: FORCED$m + }, { + sinh: function sinh(x) { + return abs$1(x = +x) < 1 ? (expm1$1(x) - expm1$1(-x)) / 2 : (exp$1(x - 1) - exp$1(-x - 1)) * (E / 2); + } + }); + + var $$3l = _export; + + var expm1 = mathExpm1; + + var exp = Math.exp; // `Math.tanh` method + // https://tc39.es/ecma262/#sec-math.tanh + + $$3l({ + target: 'Math', + stat: true + }, { + tanh: function tanh(x) { + var a = expm1(x = +x); + var b = expm1(-x); + return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x)); + } + }); + + var setToStringTag$4 = setToStringTag$b; // Math[@@toStringTag] property + // https://tc39.es/ecma262/#sec-math-@@tostringtag + + + setToStringTag$4(Math, 'Math', true); + + var $$3k = _export; + + var ceil = Math.ceil; + var floor$6 = Math.floor; // `Math.trunc` method + // https://tc39.es/ecma262/#sec-math.trunc + + $$3k({ + target: 'Math', + stat: true + }, { + trunc: function trunc(it) { + return (it > 0 ? floor$6 : ceil)(it); + } + }); + + var valueOf = 1.0.valueOf; // `thisNumberValue` abstract operation + // https://tc39.es/ecma262/#sec-thisnumbervalue + + var thisNumberValue$3 = function (value) { + return valueOf.call(value); + }; + + // a string of all valid unicode whitespaces + var whitespaces$4 = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002' + '\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'; + + var requireObjectCoercible$e = requireObjectCoercible$j; + + var toString$m = toString$t; + + var whitespaces$3 = whitespaces$4; + + var whitespace = '[' + whitespaces$3 + ']'; + var ltrim = RegExp('^' + whitespace + whitespace + '*'); + var rtrim = RegExp(whitespace + whitespace + '*$'); // `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation + + var createMethod$4 = function (TYPE) { + return function ($this) { + var string = toString$m(requireObjectCoercible$e($this)); + if (TYPE & 1) string = string.replace(ltrim, ''); + if (TYPE & 2) string = string.replace(rtrim, ''); + return string; + }; + }; + + var stringTrim = { + // `String.prototype.{ trimLeft, trimStart }` methods + // https://tc39.es/ecma262/#sec-string.prototype.trimstart + start: createMethod$4(1), + // `String.prototype.{ trimRight, trimEnd }` methods + // https://tc39.es/ecma262/#sec-string.prototype.trimend + end: createMethod$4(2), + // `String.prototype.trim` method + // https://tc39.es/ecma262/#sec-string.prototype.trim + trim: createMethod$4(3) + }; + + var DESCRIPTORS$n = descriptors; + + var global$w = global$R; + + var isForced$2 = isForced_1; + + var redefine$b = redefine$l.exports; + + var hasOwn$a = hasOwnProperty_1; + + var inheritIfRequired$2 = inheritIfRequired$4; + + var isSymbol$1 = isSymbol$5; + + var toPrimitive = toPrimitive$3; + + var fails$I = fails$15; + + var getOwnPropertyNames$4 = objectGetOwnPropertyNames.f; + + var getOwnPropertyDescriptor$7 = objectGetOwnPropertyDescriptor.f; + + var defineProperty$8 = objectDefineProperty.f; + + var thisNumberValue$2 = thisNumberValue$3; + + var trim$3 = stringTrim.trim; + + var NUMBER = 'Number'; + var NativeNumber = global$w[NUMBER]; + var NumberPrototype = NativeNumber.prototype; // `ToNumeric` abstract operation + // https://tc39.es/ecma262/#sec-tonumeric + + var toNumeric = function (value) { + var primValue = toPrimitive(value, 'number'); + return typeof primValue === 'bigint' ? primValue : toNumber(primValue); + }; // `ToNumber` abstract operation + // https://tc39.es/ecma262/#sec-tonumber + + + var toNumber = function (argument) { + var it = toPrimitive(argument, 'number'); + var first, third, radix, maxCode, digits, length, index, code; + if (isSymbol$1(it)) throw TypeError('Cannot convert a Symbol value to a number'); + + if (typeof it == 'string' && it.length > 2) { + it = trim$3(it); + first = it.charCodeAt(0); + + if (first === 43 || first === 45) { + third = it.charCodeAt(2); + if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix + } else if (first === 48) { + switch (it.charCodeAt(1)) { + case 66: + case 98: + radix = 2; + maxCode = 49; + break; + // fast equal of /^0b[01]+$/i + + case 79: + case 111: + radix = 8; + maxCode = 55; + break; + // fast equal of /^0o[0-7]+$/i + + default: + return +it; + } + + digits = it.slice(2); + length = digits.length; + + for (index = 0; index < length; index++) { + code = digits.charCodeAt(index); // parseInt parses a string to a first unavailable symbol + // but ToNumber should return NaN if a string contains unavailable symbols + + if (code < 48 || code > maxCode) return NaN; + } + + return parseInt(digits, radix); + } + } + + return +it; + }; // `Number` constructor + // https://tc39.es/ecma262/#sec-number-constructor + + + if (isForced$2(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) { + var NumberWrapper = function Number(value) { + var n = arguments.length < 1 ? 0 : NativeNumber(toNumeric(value)); + var dummy = this; // check on 1..constructor(foo) case + + return dummy instanceof NumberWrapper && fails$I(function () { + thisNumberValue$2(dummy); + }) ? inheritIfRequired$2(Object(n), dummy, NumberWrapper) : n; + }; + + for (var keys$1 = DESCRIPTORS$n ? getOwnPropertyNames$4(NativeNumber) : ( // ES3: + 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' + // ES2015 (in case, if modules with ES2015 Number statics required before): + 'EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,' + // ESNext + 'fromString,range').split(','), j = 0, key; keys$1.length > j; j++) { + if (hasOwn$a(NativeNumber, key = keys$1[j]) && !hasOwn$a(NumberWrapper, key)) { + defineProperty$8(NumberWrapper, key, getOwnPropertyDescriptor$7(NativeNumber, key)); + } + } + + NumberWrapper.prototype = NumberPrototype; + NumberPrototype.constructor = NumberWrapper; + redefine$b(global$w, NUMBER, NumberWrapper); + } + + var $$3j = _export; // `Number.EPSILON` constant + // https://tc39.es/ecma262/#sec-number.epsilon + + + $$3j({ + target: 'Number', + stat: true + }, { + EPSILON: Math.pow(2, -52) + }); + + var global$v = global$R; + + var globalIsFinite = global$v.isFinite; // `Number.isFinite` method + // https://tc39.es/ecma262/#sec-number.isfinite + // eslint-disable-next-line es/no-number-isfinite -- safe + + var numberIsFinite$2 = Number.isFinite || function isFinite(it) { + return typeof it == 'number' && globalIsFinite(it); + }; + + var $$3i = _export; + + var numberIsFinite$1 = numberIsFinite$2; // `Number.isFinite` method + // https://tc39.es/ecma262/#sec-number.isfinite + + + $$3i({ + target: 'Number', + stat: true + }, { + isFinite: numberIsFinite$1 + }); + + var isObject$k = isObject$C; + + var floor$5 = Math.floor; // `IsIntegralNumber` abstract operation + // https://tc39.es/ecma262/#sec-isintegralnumber + // eslint-disable-next-line es/no-number-isinteger -- safe + + var isIntegralNumber$3 = Number.isInteger || function isInteger(it) { + return !isObject$k(it) && isFinite(it) && floor$5(it) === it; + }; + + var $$3h = _export; + + var isIntegralNumber$2 = isIntegralNumber$3; // `Number.isInteger` method + // https://tc39.es/ecma262/#sec-number.isinteger + + + $$3h({ + target: 'Number', + stat: true + }, { + isInteger: isIntegralNumber$2 + }); + + var $$3g = _export; // `Number.isNaN` method + // https://tc39.es/ecma262/#sec-number.isnan + + + $$3g({ + target: 'Number', + stat: true + }, { + isNaN: function isNaN(number) { + // eslint-disable-next-line no-self-compare -- NaN check + return number != number; + } + }); + + var $$3f = _export; + + var isIntegralNumber$1 = isIntegralNumber$3; + + var abs = Math.abs; // `Number.isSafeInteger` method + // https://tc39.es/ecma262/#sec-number.issafeinteger + + $$3f({ + target: 'Number', + stat: true + }, { + isSafeInteger: function isSafeInteger(number) { + return isIntegralNumber$1(number) && abs(number) <= 0x1FFFFFFFFFFFFF; + } + }); + + var $$3e = _export; // `Number.MAX_SAFE_INTEGER` constant + // https://tc39.es/ecma262/#sec-number.max_safe_integer + + + $$3e({ + target: 'Number', + stat: true + }, { + MAX_SAFE_INTEGER: 0x1FFFFFFFFFFFFF + }); + + var $$3d = _export; // `Number.MIN_SAFE_INTEGER` constant + // https://tc39.es/ecma262/#sec-number.min_safe_integer + + + $$3d({ + target: 'Number', + stat: true + }, { + MIN_SAFE_INTEGER: -0x1FFFFFFFFFFFFF + }); + + var global$u = global$R; + + var fails$H = fails$15; + + var toString$l = toString$t; + + var trim$2 = stringTrim.trim; + + var whitespaces$2 = whitespaces$4; + + var $parseFloat$1 = global$u.parseFloat; + var Symbol$2 = global$u.Symbol; + var ITERATOR$5 = Symbol$2 && Symbol$2.iterator; + var FORCED$l = 1 / $parseFloat$1(whitespaces$2 + '-0') !== -Infinity // MS Edge 18- broken with boxed symbols + || ITERATOR$5 && !fails$H(function () { + $parseFloat$1(Object(ITERATOR$5)); + }); // `parseFloat` method + // https://tc39.es/ecma262/#sec-parsefloat-string + + var numberParseFloat = FORCED$l ? function parseFloat(string) { + var trimmedString = trim$2(toString$l(string)); + var result = $parseFloat$1(trimmedString); + return result === 0 && trimmedString.charAt(0) == '-' ? -0 : result; + } : $parseFloat$1; + + var $$3c = _export; + + var parseFloat$1 = numberParseFloat; // `Number.parseFloat` method + // https://tc39.es/ecma262/#sec-number.parseFloat + // eslint-disable-next-line es/no-number-parsefloat -- required for testing + + + $$3c({ + target: 'Number', + stat: true, + forced: Number.parseFloat != parseFloat$1 + }, { + parseFloat: parseFloat$1 + }); + + var global$t = global$R; + + var fails$G = fails$15; + + var toString$k = toString$t; + + var trim$1 = stringTrim.trim; + + var whitespaces$1 = whitespaces$4; + + var $parseInt$1 = global$t.parseInt; + var Symbol$1 = global$t.Symbol; + var ITERATOR$4 = Symbol$1 && Symbol$1.iterator; + var hex = /^[+-]?0x/i; + var FORCED$k = $parseInt$1(whitespaces$1 + '08') !== 8 || $parseInt$1(whitespaces$1 + '0x16') !== 22 // MS Edge 18- broken with boxed symbols + || ITERATOR$4 && !fails$G(function () { + $parseInt$1(Object(ITERATOR$4)); + }); // `parseInt` method + // https://tc39.es/ecma262/#sec-parseint-string-radix + + var numberParseInt = FORCED$k ? function parseInt(string, radix) { + var S = trim$1(toString$k(string)); + return $parseInt$1(S, radix >>> 0 || (hex.test(S) ? 16 : 10)); + } : $parseInt$1; + + var $$3b = _export; + + var parseInt$2 = numberParseInt; // `Number.parseInt` method + // https://tc39.es/ecma262/#sec-number.parseint + // eslint-disable-next-line es/no-number-parseint -- required for testing + + + $$3b({ + target: 'Number', + stat: true, + forced: Number.parseInt != parseInt$2 + }, { + parseInt: parseInt$2 + }); + + var $$3a = _export; + + var toIntegerOrInfinity$7 = toIntegerOrInfinity$i; + + var thisNumberValue$1 = thisNumberValue$3; + + var repeat$1 = stringRepeat; + + var fails$F = fails$15; + + var nativeToFixed = 1.0.toFixed; + var floor$4 = Math.floor; + + var pow$1 = function (x, n, acc) { + return n === 0 ? acc : n % 2 === 1 ? pow$1(x, n - 1, acc * x) : pow$1(x * x, n / 2, acc); + }; + + var log = function (x) { + var n = 0; + var x2 = x; + + while (x2 >= 4096) { + n += 12; + x2 /= 4096; + } + + while (x2 >= 2) { + n += 1; + x2 /= 2; + } + + return n; + }; + + var multiply = function (data, n, c) { + var index = -1; + var c2 = c; + + while (++index < 6) { + c2 += n * data[index]; + data[index] = c2 % 1e7; + c2 = floor$4(c2 / 1e7); + } + }; + + var divide = function (data, n) { + var index = 6; + var c = 0; + + while (--index >= 0) { + c += data[index]; + data[index] = floor$4(c / n); + c = c % n * 1e7; + } + }; + + var dataToString = function (data) { + var index = 6; + var s = ''; + + while (--index >= 0) { + if (s !== '' || index === 0 || data[index] !== 0) { + var t = String(data[index]); + s = s === '' ? t : s + repeat$1.call('0', 7 - t.length) + t; + } + } + + return s; + }; + + var FORCED$j = nativeToFixed && (0.00008.toFixed(3) !== '0.000' || 0.9.toFixed(0) !== '1' || 1.255.toFixed(2) !== '1.25' || 1000000000000000128.0.toFixed(0) !== '1000000000000000128') || !fails$F(function () { + // V8 ~ Android 4.3- + nativeToFixed.call({}); + }); // `Number.prototype.toFixed` method + // https://tc39.es/ecma262/#sec-number.prototype.tofixed + + $$3a({ + target: 'Number', + proto: true, + forced: FORCED$j + }, { + toFixed: function toFixed(fractionDigits) { + var number = thisNumberValue$1(this); + var fractDigits = toIntegerOrInfinity$7(fractionDigits); + var data = [0, 0, 0, 0, 0, 0]; + var sign = ''; + var result = '0'; + var e, z, j, k; + if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits'); // eslint-disable-next-line no-self-compare -- NaN check + + if (number != number) return 'NaN'; + if (number <= -1e21 || number >= 1e21) return String(number); + + if (number < 0) { + sign = '-'; + number = -number; + } + + if (number > 1e-21) { + e = log(number * pow$1(2, 69, 1)) - 69; + z = e < 0 ? number * pow$1(2, -e, 1) : number / pow$1(2, e, 1); + z *= 0x10000000000000; + e = 52 - e; + + if (e > 0) { + multiply(data, 0, z); + j = fractDigits; + + while (j >= 7) { + multiply(data, 1e7, 0); + j -= 7; + } + + multiply(data, pow$1(10, j, 1), 0); + j = e - 1; + + while (j >= 23) { + divide(data, 1 << 23); + j -= 23; + } + + divide(data, 1 << j); + multiply(data, 1, 1); + divide(data, 2); + result = dataToString(data); + } else { + multiply(data, 0, z); + multiply(data, 1 << -e, 0); + result = dataToString(data) + repeat$1.call('0', fractDigits); + } + } + + if (fractDigits > 0) { + k = result.length; + result = sign + (k <= fractDigits ? '0.' + repeat$1.call('0', fractDigits - k) + result : result.slice(0, k - fractDigits) + '.' + result.slice(k - fractDigits)); + } else { + result = sign + result; + } + + return result; + } + }); + + var $$39 = _export; + + var fails$E = fails$15; + + var thisNumberValue = thisNumberValue$3; + + var nativeToPrecision = 1.0.toPrecision; + var FORCED$i = fails$E(function () { + // IE7- + return nativeToPrecision.call(1, undefined) !== '1'; + }) || !fails$E(function () { + // V8 ~ Android 4.3- + nativeToPrecision.call({}); + }); // `Number.prototype.toPrecision` method + // https://tc39.es/ecma262/#sec-number.prototype.toprecision + + $$39({ + target: 'Number', + proto: true, + forced: FORCED$i + }, { + toPrecision: function toPrecision(precision) { + return precision === undefined ? nativeToPrecision.call(thisNumberValue(this)) : nativeToPrecision.call(thisNumberValue(this), precision); + } + }); + + var DESCRIPTORS$m = descriptors; + + var fails$D = fails$15; + + var objectKeys$2 = objectKeys$5; + + var getOwnPropertySymbolsModule = objectGetOwnPropertySymbols; + + var propertyIsEnumerableModule = objectPropertyIsEnumerable; + + var toObject$k = toObject$A; + + var IndexedObject$2 = indexedObject; // eslint-disable-next-line es/no-object-assign -- safe + + + var $assign = Object.assign; // eslint-disable-next-line es/no-object-defineproperty -- required for testing + + var defineProperty$7 = Object.defineProperty; // `Object.assign` method + // https://tc39.es/ecma262/#sec-object.assign + + var objectAssign$1 = !$assign || fails$D(function () { + // should have correct order of operations (Edge bug) + if (DESCRIPTORS$m && $assign({ + b: 1 + }, $assign(defineProperty$7({}, 'a', { + enumerable: true, + get: function () { + defineProperty$7(this, 'b', { + value: 3, + enumerable: false + }); + } + }), { + b: 2 + })).b !== 1) return true; // should work with symbols and should have deterministic property order (V8 bug) + + var A = {}; + var B = {}; // eslint-disable-next-line es/no-symbol -- safe + + var symbol = Symbol(); + var alphabet = 'abcdefghijklmnopqrst'; + A[symbol] = 7; + alphabet.split('').forEach(function (chr) { + B[chr] = chr; + }); + return $assign({}, A)[symbol] != 7 || objectKeys$2($assign({}, B)).join('') != alphabet; + }) ? function assign(target, source) { + // eslint-disable-line no-unused-vars -- required for `.length` + var T = toObject$k(target); + var argumentsLength = arguments.length; + var index = 1; + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + var propertyIsEnumerable = propertyIsEnumerableModule.f; + + while (argumentsLength > index) { + var S = IndexedObject$2(arguments[index++]); + var keys = getOwnPropertySymbols ? objectKeys$2(S).concat(getOwnPropertySymbols(S)) : objectKeys$2(S); + var length = keys.length; + var j = 0; + var key; + + while (length > j) { + key = keys[j++]; + if (!DESCRIPTORS$m || propertyIsEnumerable.call(S, key)) T[key] = S[key]; + } + } + + return T; + } : $assign; + + var $$38 = _export; + + var assign$4 = objectAssign$1; // `Object.assign` method + // https://tc39.es/ecma262/#sec-object.assign + // eslint-disable-next-line es/no-object-assign -- required for testing + + + $$38({ + target: 'Object', + stat: true, + forced: Object.assign !== assign$4 + }, { + assign: assign$4 + }); + + var $$37 = _export; + + var DESCRIPTORS$l = descriptors; + + var create$9 = objectCreate$1; // `Object.create` method + // https://tc39.es/ecma262/#sec-object.create + + + $$37({ + target: 'Object', + stat: true, + sham: !DESCRIPTORS$l + }, { + create: create$9 + }); + + var global$s = global$R; + + var fails$C = fails$15; + + var WEBKIT$1 = engineWebkitVersion; // Forced replacement object prototype accessors methods + + + var objectPrototypeAccessorsForced = !fails$C(function () { + // This feature detection crashes old WebKit + // https://github.com/zloirock/core-js/issues/232 + if (WEBKIT$1 && WEBKIT$1 < 535) return; + var key = Math.random(); // In FF throws only define methods + // eslint-disable-next-line no-undef, no-useless-call -- required for testing + + __defineSetter__.call(null, key, function () { + /* empty */ + }); + + delete global$s[key]; + }); + + var $$36 = _export; + + var DESCRIPTORS$k = descriptors; + + var FORCED$h = objectPrototypeAccessorsForced; + + var aCallable$I = aCallable$Q; + + var toObject$j = toObject$A; + + var definePropertyModule$4 = objectDefineProperty; // `Object.prototype.__defineGetter__` method + // https://tc39.es/ecma262/#sec-object.prototype.__defineGetter__ + + + if (DESCRIPTORS$k) { + $$36({ + target: 'Object', + proto: true, + forced: FORCED$h + }, { + __defineGetter__: function __defineGetter__(P, getter) { + definePropertyModule$4.f(toObject$j(this), P, { + get: aCallable$I(getter), + enumerable: true, + configurable: true + }); + } + }); + } + + var $$35 = _export; + + var DESCRIPTORS$j = descriptors; + + var defineProperties$2 = objectDefineProperties; // `Object.defineProperties` method + // https://tc39.es/ecma262/#sec-object.defineproperties + + + $$35({ + target: 'Object', + stat: true, + forced: !DESCRIPTORS$j, + sham: !DESCRIPTORS$j + }, { + defineProperties: defineProperties$2 + }); + + var $$34 = _export; + + var DESCRIPTORS$i = descriptors; + + var objectDefinePropertyModile = objectDefineProperty; // `Object.defineProperty` method + // https://tc39.es/ecma262/#sec-object.defineproperty + + + $$34({ + target: 'Object', + stat: true, + forced: !DESCRIPTORS$i, + sham: !DESCRIPTORS$i + }, { + defineProperty: objectDefinePropertyModile.f + }); + + var $$33 = _export; + + var DESCRIPTORS$h = descriptors; + + var FORCED$g = objectPrototypeAccessorsForced; + + var aCallable$H = aCallable$Q; + + var toObject$i = toObject$A; + + var definePropertyModule$3 = objectDefineProperty; // `Object.prototype.__defineSetter__` method + // https://tc39.es/ecma262/#sec-object.prototype.__defineSetter__ + + + if (DESCRIPTORS$h) { + $$33({ + target: 'Object', + proto: true, + forced: FORCED$g + }, { + __defineSetter__: function __defineSetter__(P, setter) { + definePropertyModule$3.f(toObject$i(this), P, { + set: aCallable$H(setter), + enumerable: true, + configurable: true + }); + } + }); + } + + var DESCRIPTORS$g = descriptors; + + var objectKeys$1 = objectKeys$5; + + var toIndexedObject$3 = toIndexedObject$d; + + var propertyIsEnumerable = objectPropertyIsEnumerable.f; // `Object.{ entries, values }` methods implementation + + + var createMethod$3 = function (TO_ENTRIES) { + return function (it) { + var O = toIndexedObject$3(it); + var keys = objectKeys$1(O); + var length = keys.length; + var i = 0; + var result = []; + var key; + + while (length > i) { + key = keys[i++]; + + if (!DESCRIPTORS$g || propertyIsEnumerable.call(O, key)) { + result.push(TO_ENTRIES ? [key, O[key]] : O[key]); + } + } + + return result; + }; + }; + + var objectToArray = { + // `Object.entries` method + // https://tc39.es/ecma262/#sec-object.entries + entries: createMethod$3(true), + // `Object.values` method + // https://tc39.es/ecma262/#sec-object.values + values: createMethod$3(false) + }; + + var $$32 = _export; + + var $entries = objectToArray.entries; // `Object.entries` method + // https://tc39.es/ecma262/#sec-object.entries + + + $$32({ + target: 'Object', + stat: true + }, { + entries: function entries(O) { + return $entries(O); + } + }); + + var $$31 = _export; + + var FREEZING$3 = freezing; + + var fails$B = fails$15; + + var isObject$j = isObject$C; + + var onFreeze$2 = internalMetadata.exports.onFreeze; // eslint-disable-next-line es/no-object-freeze -- safe + + + var $freeze = Object.freeze; + var FAILS_ON_PRIMITIVES$9 = fails$B(function () { + $freeze(1); + }); // `Object.freeze` method + // https://tc39.es/ecma262/#sec-object.freeze + + $$31({ + target: 'Object', + stat: true, + forced: FAILS_ON_PRIMITIVES$9, + sham: !FREEZING$3 + }, { + freeze: function freeze(it) { + return $freeze && isObject$j(it) ? $freeze(onFreeze$2(it)) : it; + } + }); + + var $$30 = _export; + + var iterate$E = iterate$I; + + var createProperty$1 = createProperty$7; // `Object.fromEntries` method + // https://github.com/tc39/proposal-object-from-entries + + + $$30({ + target: 'Object', + stat: true + }, { + fromEntries: function fromEntries(iterable) { + var obj = {}; + iterate$E(iterable, function (k, v) { + createProperty$1(obj, k, v); + }, { + AS_ENTRIES: true + }); + return obj; + } + }); + + var $$2$ = _export; + + var fails$A = fails$15; + + var toIndexedObject$2 = toIndexedObject$d; + + var nativeGetOwnPropertyDescriptor$1 = objectGetOwnPropertyDescriptor.f; + + var DESCRIPTORS$f = descriptors; + + var FAILS_ON_PRIMITIVES$8 = fails$A(function () { + nativeGetOwnPropertyDescriptor$1(1); + }); + var FORCED$f = !DESCRIPTORS$f || FAILS_ON_PRIMITIVES$8; // `Object.getOwnPropertyDescriptor` method + // https://tc39.es/ecma262/#sec-object.getownpropertydescriptor + + $$2$({ + target: 'Object', + stat: true, + forced: FORCED$f, + sham: !DESCRIPTORS$f + }, { + getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) { + return nativeGetOwnPropertyDescriptor$1(toIndexedObject$2(it), key); + } + }); + + var $$2_ = _export; + + var DESCRIPTORS$e = descriptors; + + var ownKeys$1 = ownKeys$3; + + var toIndexedObject$1 = toIndexedObject$d; + + var getOwnPropertyDescriptorModule$4 = objectGetOwnPropertyDescriptor; + + var createProperty = createProperty$7; // `Object.getOwnPropertyDescriptors` method + // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors + + + $$2_({ + target: 'Object', + stat: true, + sham: !DESCRIPTORS$e + }, { + getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) { + var O = toIndexedObject$1(object); + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule$4.f; + var keys = ownKeys$1(O); + var result = {}; + var index = 0; + var key, descriptor; + + while (keys.length > index) { + descriptor = getOwnPropertyDescriptor(O, key = keys[index++]); + if (descriptor !== undefined) createProperty(result, key, descriptor); + } + + return result; + } + }); + + var $$2Z = _export; + + var fails$z = fails$15; + + var getOwnPropertyNames$3 = objectGetOwnPropertyNamesExternal.f; // eslint-disable-next-line es/no-object-getownpropertynames -- required for testing + + + var FAILS_ON_PRIMITIVES$7 = fails$z(function () { + return !Object.getOwnPropertyNames(1); + }); // `Object.getOwnPropertyNames` method + // https://tc39.es/ecma262/#sec-object.getownpropertynames + + $$2Z({ + target: 'Object', + stat: true, + forced: FAILS_ON_PRIMITIVES$7 + }, { + getOwnPropertyNames: getOwnPropertyNames$3 + }); + + var $$2Y = _export; + + var fails$y = fails$15; + + var toObject$h = toObject$A; + + var nativeGetPrototypeOf = objectGetPrototypeOf$1; + + var CORRECT_PROTOTYPE_GETTER$1 = correctPrototypeGetter; + + var FAILS_ON_PRIMITIVES$6 = fails$y(function () { + nativeGetPrototypeOf(1); + }); // `Object.getPrototypeOf` method + // https://tc39.es/ecma262/#sec-object.getprototypeof + + $$2Y({ + target: 'Object', + stat: true, + forced: FAILS_ON_PRIMITIVES$6, + sham: !CORRECT_PROTOTYPE_GETTER$1 + }, { + getPrototypeOf: function getPrototypeOf(it) { + return nativeGetPrototypeOf(toObject$h(it)); + } + }); + + var $$2X = _export; + + var hasOwn$9 = hasOwnProperty_1; // `Object.hasOwn` method + // https://github.com/tc39/proposal-accessible-object-hasownproperty + + + $$2X({ + target: 'Object', + stat: true + }, { + hasOwn: hasOwn$9 + }); + + // `SameValue` abstract operation + // https://tc39.es/ecma262/#sec-samevalue + // eslint-disable-next-line es/no-object-is -- safe + var sameValue$1 = Object.is || function is(x, y) { + // eslint-disable-next-line no-self-compare -- NaN check + return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y; + }; + + var $$2W = _export; + + var is = sameValue$1; // `Object.is` method + // https://tc39.es/ecma262/#sec-object.is + + + $$2W({ + target: 'Object', + stat: true + }, { + is: is + }); + + var $$2V = _export; + + var fails$x = fails$15; + + var isObject$i = isObject$C; // eslint-disable-next-line es/no-object-isextensible -- safe + + + var $isExtensible = Object.isExtensible; + var FAILS_ON_PRIMITIVES$5 = fails$x(function () { + $isExtensible(1); + }); // `Object.isExtensible` method + // https://tc39.es/ecma262/#sec-object.isextensible + + $$2V({ + target: 'Object', + stat: true, + forced: FAILS_ON_PRIMITIVES$5 + }, { + isExtensible: function isExtensible(it) { + return isObject$i(it) ? $isExtensible ? $isExtensible(it) : true : false; + } + }); + + var $$2U = _export; + + var fails$w = fails$15; + + var isObject$h = isObject$C; // eslint-disable-next-line es/no-object-isfrozen -- safe + + + var $isFrozen = Object.isFrozen; + var FAILS_ON_PRIMITIVES$4 = fails$w(function () { + $isFrozen(1); + }); // `Object.isFrozen` method + // https://tc39.es/ecma262/#sec-object.isfrozen + + $$2U({ + target: 'Object', + stat: true, + forced: FAILS_ON_PRIMITIVES$4 + }, { + isFrozen: function isFrozen(it) { + return isObject$h(it) ? $isFrozen ? $isFrozen(it) : false : true; + } + }); + + var $$2T = _export; + + var fails$v = fails$15; + + var isObject$g = isObject$C; // eslint-disable-next-line es/no-object-issealed -- safe + + + var $isSealed = Object.isSealed; + var FAILS_ON_PRIMITIVES$3 = fails$v(function () { + $isSealed(1); + }); // `Object.isSealed` method + // https://tc39.es/ecma262/#sec-object.issealed + + $$2T({ + target: 'Object', + stat: true, + forced: FAILS_ON_PRIMITIVES$3 + }, { + isSealed: function isSealed(it) { + return isObject$g(it) ? $isSealed ? $isSealed(it) : false : true; + } + }); + + var $$2S = _export; + + var toObject$g = toObject$A; + + var nativeKeys = objectKeys$5; + + var fails$u = fails$15; + + var FAILS_ON_PRIMITIVES$2 = fails$u(function () { + nativeKeys(1); + }); // `Object.keys` method + // https://tc39.es/ecma262/#sec-object.keys + + $$2S({ + target: 'Object', + stat: true, + forced: FAILS_ON_PRIMITIVES$2 + }, { + keys: function keys(it) { + return nativeKeys(toObject$g(it)); + } + }); + + var $$2R = _export; + + var DESCRIPTORS$d = descriptors; + + var FORCED$e = objectPrototypeAccessorsForced; + + var toObject$f = toObject$A; + + var toPropertyKey$4 = toPropertyKey$9; + + var getPrototypeOf$8 = objectGetPrototypeOf$1; + + var getOwnPropertyDescriptor$6 = objectGetOwnPropertyDescriptor.f; // `Object.prototype.__lookupGetter__` method + // https://tc39.es/ecma262/#sec-object.prototype.__lookupGetter__ + + + if (DESCRIPTORS$d) { + $$2R({ + target: 'Object', + proto: true, + forced: FORCED$e + }, { + __lookupGetter__: function __lookupGetter__(P) { + var O = toObject$f(this); + var key = toPropertyKey$4(P); + var desc; + + do { + if (desc = getOwnPropertyDescriptor$6(O, key)) return desc.get; + } while (O = getPrototypeOf$8(O)); + } + }); + } + + var $$2Q = _export; + + var DESCRIPTORS$c = descriptors; + + var FORCED$d = objectPrototypeAccessorsForced; + + var toObject$e = toObject$A; + + var toPropertyKey$3 = toPropertyKey$9; + + var getPrototypeOf$7 = objectGetPrototypeOf$1; + + var getOwnPropertyDescriptor$5 = objectGetOwnPropertyDescriptor.f; // `Object.prototype.__lookupSetter__` method + // https://tc39.es/ecma262/#sec-object.prototype.__lookupSetter__ + + + if (DESCRIPTORS$c) { + $$2Q({ + target: 'Object', + proto: true, + forced: FORCED$d + }, { + __lookupSetter__: function __lookupSetter__(P) { + var O = toObject$e(this); + var key = toPropertyKey$3(P); + var desc; + + do { + if (desc = getOwnPropertyDescriptor$5(O, key)) return desc.set; + } while (O = getPrototypeOf$7(O)); + } + }); + } + + var $$2P = _export; + + var isObject$f = isObject$C; + + var onFreeze$1 = internalMetadata.exports.onFreeze; + + var FREEZING$2 = freezing; + + var fails$t = fails$15; // eslint-disable-next-line es/no-object-preventextensions -- safe + + + var $preventExtensions = Object.preventExtensions; + var FAILS_ON_PRIMITIVES$1 = fails$t(function () { + $preventExtensions(1); + }); // `Object.preventExtensions` method + // https://tc39.es/ecma262/#sec-object.preventextensions + + $$2P({ + target: 'Object', + stat: true, + forced: FAILS_ON_PRIMITIVES$1, + sham: !FREEZING$2 + }, { + preventExtensions: function preventExtensions(it) { + return $preventExtensions && isObject$f(it) ? $preventExtensions(onFreeze$1(it)) : it; + } + }); + + var $$2O = _export; + + var isObject$e = isObject$C; + + var onFreeze = internalMetadata.exports.onFreeze; + + var FREEZING$1 = freezing; + + var fails$s = fails$15; // eslint-disable-next-line es/no-object-seal -- safe + + + var $seal = Object.seal; + var FAILS_ON_PRIMITIVES = fails$s(function () { + $seal(1); + }); // `Object.seal` method + // https://tc39.es/ecma262/#sec-object.seal + + $$2O({ + target: 'Object', + stat: true, + forced: FAILS_ON_PRIMITIVES, + sham: !FREEZING$1 + }, { + seal: function seal(it) { + return $seal && isObject$e(it) ? $seal(onFreeze(it)) : it; + } + }); + + var $$2N = _export; + + var setPrototypeOf$2 = objectSetPrototypeOf$1; // `Object.setPrototypeOf` method + // https://tc39.es/ecma262/#sec-object.setprototypeof + + + $$2N({ + target: 'Object', + stat: true + }, { + setPrototypeOf: setPrototypeOf$2 + }); + + var TO_STRING_TAG_SUPPORT$1 = toStringTagSupport; + + var classof$5 = classof$b; // `Object.prototype.toString` method implementation + // https://tc39.es/ecma262/#sec-object.prototype.tostring + + + var objectToString = TO_STRING_TAG_SUPPORT$1 ? {}.toString : function toString() { + return '[object ' + classof$5(this) + ']'; + }; + + var TO_STRING_TAG_SUPPORT = toStringTagSupport; + + var redefine$a = redefine$l.exports; + + var toString$j = objectToString; // `Object.prototype.toString` method + // https://tc39.es/ecma262/#sec-object.prototype.tostring + + + if (!TO_STRING_TAG_SUPPORT) { + redefine$a(Object.prototype, 'toString', toString$j, { + unsafe: true + }); + } + + var $$2M = _export; + + var $values = objectToArray.values; // `Object.values` method + // https://tc39.es/ecma262/#sec-object.values + + + $$2M({ + target: 'Object', + stat: true + }, { + values: function values(O) { + return $values(O); + } + }); + + var $$2L = _export; + + var $parseFloat = numberParseFloat; // `parseFloat` method + // https://tc39.es/ecma262/#sec-parsefloat-string + + + $$2L({ + global: true, + forced: parseFloat != $parseFloat + }, { + parseFloat: $parseFloat + }); + + var $$2K = _export; + + var $parseInt = numberParseInt; // `parseInt` method + // https://tc39.es/ecma262/#sec-parseint-string-radix + + + $$2K({ + global: true, + forced: parseInt != $parseInt + }, { + parseInt: $parseInt + }); + + var global$r = global$R; + + var nativePromiseConstructor = global$r.Promise; + + var userAgent$4 = engineUserAgent; + + var engineIsIos = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent$4); + + var global$q = global$R; + + var isCallable$d = isCallable$z; + + var fails$r = fails$15; + + var bind$k = functionBindContext; + + var html = html$2; + + var createElement = documentCreateElement$2; + + var IS_IOS$1 = engineIsIos; + + var IS_NODE$3 = engineIsNode; + + var set$2 = global$q.setImmediate; + var clear = global$q.clearImmediate; + var process$3 = global$q.process; + var MessageChannel = global$q.MessageChannel; + var Dispatch$1 = global$q.Dispatch; + var counter = 0; + var queue = {}; + var ONREADYSTATECHANGE = 'onreadystatechange'; + var location$1, defer, channel, port; + + try { + // Deno throws a ReferenceError on `location` access without `--location` flag + location$1 = global$q.location; + } catch (error) { + /* empty */ + } + + var run = function (id) { + // eslint-disable-next-line no-prototype-builtins -- safe + if (queue.hasOwnProperty(id)) { + var fn = queue[id]; + delete queue[id]; + fn(); + } + }; + + var runner = function (id) { + return function () { + run(id); + }; + }; + + var listener = function (event) { + run(event.data); + }; + + var post = function (id) { + // old engines have not location.origin + global$q.postMessage(String(id), location$1.protocol + '//' + location$1.host); + }; // Node.js 0.9+ & IE10+ has setImmediate, otherwise: + + + if (!set$2 || !clear) { + set$2 = function setImmediate(fn) { + var args = []; + var argumentsLength = arguments.length; + var i = 1; + + while (argumentsLength > i) args.push(arguments[i++]); + + queue[++counter] = function () { + // eslint-disable-next-line no-new-func -- spec requirement + (isCallable$d(fn) ? fn : Function(fn)).apply(undefined, args); + }; + + defer(counter); + return counter; + }; + + clear = function clearImmediate(id) { + delete queue[id]; + }; // Node.js 0.8- + + + if (IS_NODE$3) { + defer = function (id) { + process$3.nextTick(runner(id)); + }; // Sphere (JS game engine) Dispatch API + + } else if (Dispatch$1 && Dispatch$1.now) { + defer = function (id) { + Dispatch$1.now(runner(id)); + }; // Browsers with MessageChannel, includes WebWorkers + // except iOS - https://github.com/zloirock/core-js/issues/624 + + } else if (MessageChannel && !IS_IOS$1) { + channel = new MessageChannel(); + port = channel.port2; + channel.port1.onmessage = listener; + defer = bind$k(port.postMessage, port, 1); // Browsers with postMessage, skip WebWorkers + // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' + } else if (global$q.addEventListener && isCallable$d(global$q.postMessage) && !global$q.importScripts && location$1 && location$1.protocol !== 'file:' && !fails$r(post)) { + defer = post; + global$q.addEventListener('message', listener, false); // IE8- + } else if (ONREADYSTATECHANGE in createElement('script')) { + defer = function (id) { + html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () { + html.removeChild(this); + run(id); + }; + }; // Rest old browsers + + } else { + defer = function (id) { + setTimeout(runner(id), 0); + }; + } + } + + var task$2 = { + set: set$2, + clear: clear + }; + + var userAgent$3 = engineUserAgent; + + var global$p = global$R; + + var engineIsIosPebble = /ipad|iphone|ipod/i.test(userAgent$3) && global$p.Pebble !== undefined; + + var userAgent$2 = engineUserAgent; + + var engineIsWebosWebkit = /web0s(?!.*chrome)/i.test(userAgent$2); + + var global$o = global$R; + + var getOwnPropertyDescriptor$4 = objectGetOwnPropertyDescriptor.f; + + var macrotask = task$2.set; + + var IS_IOS = engineIsIos; + + var IS_IOS_PEBBLE = engineIsIosPebble; + + var IS_WEBOS_WEBKIT = engineIsWebosWebkit; + + var IS_NODE$2 = engineIsNode; + + var MutationObserver = global$o.MutationObserver || global$o.WebKitMutationObserver; + var document$2 = global$o.document; + var process$2 = global$o.process; + var Promise$4 = global$o.Promise; // Node.js 11 shows ExperimentalWarning on getting `queueMicrotask` + + var queueMicrotaskDescriptor = getOwnPropertyDescriptor$4(global$o, 'queueMicrotask'); + var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value; + var flush, head, last, notify$1, toggle, node, promise, then; // modern engines have queueMicrotask method + + if (!queueMicrotask) { + flush = function () { + var parent, fn; + if (IS_NODE$2 && (parent = process$2.domain)) parent.exit(); + + while (head) { + fn = head.fn; + head = head.next; + + try { + fn(); + } catch (error) { + if (head) notify$1();else last = undefined; + throw error; + } + } + + last = undefined; + if (parent) parent.enter(); + }; // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339 + // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898 + + + if (!IS_IOS && !IS_NODE$2 && !IS_WEBOS_WEBKIT && MutationObserver && document$2) { + toggle = true; + node = document$2.createTextNode(''); + new MutationObserver(flush).observe(node, { + characterData: true + }); + + notify$1 = function () { + node.data = toggle = !toggle; + }; // environments with maybe non-completely correct, but existent Promise + + } else if (!IS_IOS_PEBBLE && Promise$4 && Promise$4.resolve) { + // Promise.resolve without an argument throws an error in LG WebOS 2 + promise = Promise$4.resolve(undefined); // workaround of WebKit ~ iOS Safari 10.1 bug + + promise.constructor = Promise$4; + then = promise.then; + + notify$1 = function () { + then.call(promise, flush); + }; // Node.js without promises + + } else if (IS_NODE$2) { + notify$1 = function () { + process$2.nextTick(flush); + }; // for other environments - macrotask based on: + // - setImmediate + // - MessageChannel + // - window.postMessag + // - onreadystatechange + // - setTimeout + + } else { + notify$1 = function () { + // strange IE + webpack dev server bug - use .call(global) + macrotask.call(global$o, flush); + }; + } + } + + var microtask$2 = queueMicrotask || function (fn) { + var task = { + fn: fn, + next: undefined + }; + if (last) last.next = task; + + if (!head) { + head = task; + notify$1(); + } + + last = task; + }; + + var newPromiseCapability$2 = {}; + + var aCallable$G = aCallable$Q; + + var PromiseCapability = function (C) { + var resolve, reject; + this.promise = new C(function ($$resolve, $$reject) { + if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); + resolve = $$resolve; + reject = $$reject; + }); + this.resolve = aCallable$G(resolve); + this.reject = aCallable$G(reject); + }; // `NewPromiseCapability` abstract operation + // https://tc39.es/ecma262/#sec-newpromisecapability + + + newPromiseCapability$2.f = function (C) { + return new PromiseCapability(C); + }; + + var anObject$1o = anObject$1C; + + var isObject$d = isObject$C; + + var newPromiseCapability$1 = newPromiseCapability$2; + + var promiseResolve$2 = function (C, x) { + anObject$1o(C); + if (isObject$d(x) && x.constructor === C) return x; + var promiseCapability = newPromiseCapability$1.f(C); + var resolve = promiseCapability.resolve; + resolve(x); + return promiseCapability.promise; + }; + + var global$n = global$R; + + var hostReportErrors$2 = function (a, b) { + var console = global$n.console; + + if (console && console.error) { + arguments.length === 1 ? console.error(a) : console.error(a, b); + } + }; + + var perform$4 = function (exec) { + try { + return { + error: false, + value: exec() + }; + } catch (error) { + return { + error: true, + value: error + }; + } + }; + + var engineIsBrowser = typeof window == 'object'; + + var $$2J = _export; + + var global$m = global$R; + + var getBuiltIn$p = getBuiltIn$y; + + var NativePromise$1 = nativePromiseConstructor; + + var redefine$9 = redefine$l.exports; + + var redefineAll$7 = redefineAll$a; + + var setPrototypeOf$1 = objectSetPrototypeOf$1; + + var setToStringTag$3 = setToStringTag$b; + + var setSpecies$3 = setSpecies$7; + + var aCallable$F = aCallable$Q; + + var isCallable$c = isCallable$z; + + var isObject$c = isObject$C; + + var anInstance$7 = anInstance$b; + + var inspectSource = inspectSource$4; + + var iterate$D = iterate$I; + + var checkCorrectnessOfIteration$1 = checkCorrectnessOfIteration$4; + + var speciesConstructor$d = speciesConstructor$f; + + var task$1 = task$2.set; + + var microtask$1 = microtask$2; + + var promiseResolve$1 = promiseResolve$2; + + var hostReportErrors$1 = hostReportErrors$2; + + var newPromiseCapabilityModule$3 = newPromiseCapability$2; + + var perform$3 = perform$4; + + var InternalStateModule$e = internalState; + + var isForced$1 = isForced_1; + + var wellKnownSymbol$k = wellKnownSymbol$G; + + var IS_BROWSER = engineIsBrowser; + + var IS_NODE$1 = engineIsNode; + + var V8_VERSION = engineV8Version; + + var SPECIES$1 = wellKnownSymbol$k('species'); + var PROMISE = 'Promise'; + var getInternalState$e = InternalStateModule$e.get; + var setInternalState$e = InternalStateModule$e.set; + var getInternalPromiseState = InternalStateModule$e.getterFor(PROMISE); + var NativePromisePrototype = NativePromise$1 && NativePromise$1.prototype; + var PromiseConstructor = NativePromise$1; + var PromiseConstructorPrototype = NativePromisePrototype; + var TypeError$1 = global$m.TypeError; + var document$1 = global$m.document; + var process$1 = global$m.process; + var newPromiseCapability = newPromiseCapabilityModule$3.f; + var newGenericPromiseCapability = newPromiseCapability; + var DISPATCH_EVENT = !!(document$1 && document$1.createEvent && global$m.dispatchEvent); + var NATIVE_REJECTION_EVENT = isCallable$c(global$m.PromiseRejectionEvent); + var UNHANDLED_REJECTION = 'unhandledrejection'; + var REJECTION_HANDLED = 'rejectionhandled'; + var PENDING = 0; + var FULFILLED = 1; + var REJECTED = 2; + var HANDLED = 1; + var UNHANDLED = 2; + var SUBCLASSING = false; + var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen; + var FORCED$c = isForced$1(PROMISE, function () { + var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(PromiseConstructor); + var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(PromiseConstructor); // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables + // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 + // We can't detect it synchronously, so just check versions + + if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true; // We need Promise#finally in the pure version for preventing prototype pollution + // deoptimization and performance degradation + // https://github.com/zloirock/core-js/issues/679 + + if (V8_VERSION >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) return false; // Detect correctness of subclassing with @@species support + + var promise = new PromiseConstructor(function (resolve) { + resolve(1); + }); + + var FakePromise = function (exec) { + exec(function () { + /* empty */ + }, function () { + /* empty */ + }); + }; + + var constructor = promise.constructor = {}; + constructor[SPECIES$1] = FakePromise; + SUBCLASSING = promise.then(function () { + /* empty */ + }) instanceof FakePromise; + if (!SUBCLASSING) return true; // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test + + return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_REJECTION_EVENT; + }); + var INCORRECT_ITERATION = FORCED$c || !checkCorrectnessOfIteration$1(function (iterable) { + PromiseConstructor.all(iterable)['catch'](function () { + /* empty */ + }); + }); // helpers + + var isThenable = function (it) { + var then; + return isObject$c(it) && isCallable$c(then = it.then) ? then : false; + }; + + var notify = function (state, isReject) { + if (state.notified) return; + state.notified = true; + var chain = state.reactions; + microtask$1(function () { + var value = state.value; + var ok = state.state == FULFILLED; + var index = 0; // variable length - can't use forEach + + while (chain.length > index) { + var reaction = chain[index++]; + var handler = ok ? reaction.ok : reaction.fail; + var resolve = reaction.resolve; + var reject = reaction.reject; + var domain = reaction.domain; + var result, then, exited; + + try { + if (handler) { + if (!ok) { + if (state.rejection === UNHANDLED) onHandleUnhandled(state); + state.rejection = HANDLED; + } + + if (handler === true) result = value;else { + if (domain) domain.enter(); + result = handler(value); // can throw + + if (domain) { + domain.exit(); + exited = true; + } + } + + if (result === reaction.promise) { + reject(TypeError$1('Promise-chain cycle')); + } else if (then = isThenable(result)) { + then.call(result, resolve, reject); + } else resolve(result); + } else reject(value); + } catch (error) { + if (domain && !exited) domain.exit(); + reject(error); + } + } + + state.reactions = []; + state.notified = false; + if (isReject && !state.rejection) onUnhandled(state); + }); + }; + + var dispatchEvent$1 = function (name, promise, reason) { + var event, handler; + + if (DISPATCH_EVENT) { + event = document$1.createEvent('Event'); + event.promise = promise; + event.reason = reason; + event.initEvent(name, false, true); + global$m.dispatchEvent(event); + } else event = { + promise: promise, + reason: reason + }; + + if (!NATIVE_REJECTION_EVENT && (handler = global$m['on' + name])) handler(event);else if (name === UNHANDLED_REJECTION) hostReportErrors$1('Unhandled promise rejection', reason); + }; + + var onUnhandled = function (state) { + task$1.call(global$m, function () { + var promise = state.facade; + var value = state.value; + var IS_UNHANDLED = isUnhandled(state); + var result; + + if (IS_UNHANDLED) { + result = perform$3(function () { + if (IS_NODE$1) { + process$1.emit('unhandledRejection', value, promise); + } else dispatchEvent$1(UNHANDLED_REJECTION, promise, value); + }); // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should + + state.rejection = IS_NODE$1 || isUnhandled(state) ? UNHANDLED : HANDLED; + if (result.error) throw result.value; + } + }); + }; + + var isUnhandled = function (state) { + return state.rejection !== HANDLED && !state.parent; + }; + + var onHandleUnhandled = function (state) { + task$1.call(global$m, function () { + var promise = state.facade; + + if (IS_NODE$1) { + process$1.emit('rejectionHandled', promise); + } else dispatchEvent$1(REJECTION_HANDLED, promise, state.value); + }); + }; + + var bind$j = function (fn, state, unwrap) { + return function (value) { + fn(state, value, unwrap); + }; + }; + + var internalReject = function (state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + state.value = value; + state.state = REJECTED; + notify(state, true); + }; + + var internalResolve = function (state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + + try { + if (state.facade === value) throw TypeError$1("Promise can't be resolved itself"); + var then = isThenable(value); + + if (then) { + microtask$1(function () { + var wrapper = { + done: false + }; + + try { + then.call(value, bind$j(internalResolve, wrapper, state), bind$j(internalReject, wrapper, state)); + } catch (error) { + internalReject(wrapper, error, state); + } + }); + } else { + state.value = value; + state.state = FULFILLED; + notify(state, false); + } + } catch (error) { + internalReject({ + done: false + }, error, state); + } + }; // constructor polyfill + + + if (FORCED$c) { + // 25.4.3.1 Promise(executor) + PromiseConstructor = function Promise(executor) { + anInstance$7(this, PromiseConstructor, PROMISE); + aCallable$F(executor); + Internal.call(this); + var state = getInternalState$e(this); + + try { + executor(bind$j(internalResolve, state), bind$j(internalReject, state)); + } catch (error) { + internalReject(state, error); + } + }; + + PromiseConstructorPrototype = PromiseConstructor.prototype; // eslint-disable-next-line no-unused-vars -- required for `.length` + + Internal = function Promise(executor) { + setInternalState$e(this, { + type: PROMISE, + done: false, + notified: false, + parent: false, + reactions: [], + rejection: false, + state: PENDING, + value: undefined + }); + }; + + Internal.prototype = redefineAll$7(PromiseConstructorPrototype, { + // `Promise.prototype.then` method + // https://tc39.es/ecma262/#sec-promise.prototype.then + then: function then(onFulfilled, onRejected) { + var state = getInternalPromiseState(this); + var reaction = newPromiseCapability(speciesConstructor$d(this, PromiseConstructor)); + reaction.ok = isCallable$c(onFulfilled) ? onFulfilled : true; + reaction.fail = isCallable$c(onRejected) && onRejected; + reaction.domain = IS_NODE$1 ? process$1.domain : undefined; + state.parent = true; + state.reactions.push(reaction); + if (state.state != PENDING) notify(state, false); + return reaction.promise; + }, + // `Promise.prototype.catch` method + // https://tc39.es/ecma262/#sec-promise.prototype.catch + 'catch': function (onRejected) { + return this.then(undefined, onRejected); + } + }); + + OwnPromiseCapability = function () { + var promise = new Internal(); + var state = getInternalState$e(promise); + this.promise = promise; + this.resolve = bind$j(internalResolve, state); + this.reject = bind$j(internalReject, state); + }; + + newPromiseCapabilityModule$3.f = newPromiseCapability = function (C) { + return C === PromiseConstructor || C === PromiseWrapper ? new OwnPromiseCapability(C) : newGenericPromiseCapability(C); + }; + + if (isCallable$c(NativePromise$1) && NativePromisePrototype !== Object.prototype) { + nativeThen = NativePromisePrototype.then; + + if (!SUBCLASSING) { + // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs + redefine$9(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) { + var that = this; + return new PromiseConstructor(function (resolve, reject) { + nativeThen.call(that, resolve, reject); + }).then(onFulfilled, onRejected); // https://github.com/zloirock/core-js/issues/640 + }, { + unsafe: true + }); // makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then` + + redefine$9(NativePromisePrototype, 'catch', PromiseConstructorPrototype['catch'], { + unsafe: true + }); + } // make `.constructor === Promise` work for native promise-based APIs + + + try { + delete NativePromisePrototype.constructor; + } catch (error) { + /* empty */ + } // make `instanceof Promise` work for native promise-based APIs + + + if (setPrototypeOf$1) { + setPrototypeOf$1(NativePromisePrototype, PromiseConstructorPrototype); + } + } + } + + $$2J({ + global: true, + wrap: true, + forced: FORCED$c + }, { + Promise: PromiseConstructor + }); + setToStringTag$3(PromiseConstructor, PROMISE, false); + setSpecies$3(PROMISE); + PromiseWrapper = getBuiltIn$p(PROMISE); // statics + + $$2J({ + target: PROMISE, + stat: true, + forced: FORCED$c + }, { + // `Promise.reject` method + // https://tc39.es/ecma262/#sec-promise.reject + reject: function reject(r) { + var capability = newPromiseCapability(this); + capability.reject.call(undefined, r); + return capability.promise; + } + }); + $$2J({ + target: PROMISE, + stat: true, + forced: FORCED$c + }, { + // `Promise.resolve` method + // https://tc39.es/ecma262/#sec-promise.resolve + resolve: function resolve(x) { + return promiseResolve$1(this, x); + } + }); + $$2J({ + target: PROMISE, + stat: true, + forced: INCORRECT_ITERATION + }, { + // `Promise.all` method + // https://tc39.es/ecma262/#sec-promise.all + all: function all(iterable) { + var C = this; + var capability = newPromiseCapability(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform$3(function () { + var $promiseResolve = aCallable$F(C.resolve); + var values = []; + var counter = 0; + var remaining = 1; + iterate$D(iterable, function (promise) { + var index = counter++; + var alreadyCalled = false; + values.push(undefined); + remaining++; + $promiseResolve.call(C, promise).then(function (value) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = value; + --remaining || resolve(values); + }, reject); + }); + --remaining || resolve(values); + }); + if (result.error) reject(result.value); + return capability.promise; + }, + // `Promise.race` method + // https://tc39.es/ecma262/#sec-promise.race + race: function race(iterable) { + var C = this; + var capability = newPromiseCapability(C); + var reject = capability.reject; + var result = perform$3(function () { + var $promiseResolve = aCallable$F(C.resolve); + iterate$D(iterable, function (promise) { + $promiseResolve.call(C, promise).then(capability.resolve, reject); + }); + }); + if (result.error) reject(result.value); + return capability.promise; + } + }); + + var $$2I = _export; + + var aCallable$E = aCallable$Q; + + var newPromiseCapabilityModule$2 = newPromiseCapability$2; + + var perform$2 = perform$4; + + var iterate$C = iterate$I; // `Promise.allSettled` method + // https://tc39.es/ecma262/#sec-promise.allsettled + + + $$2I({ + target: 'Promise', + stat: true + }, { + allSettled: function allSettled(iterable) { + var C = this; + var capability = newPromiseCapabilityModule$2.f(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform$2(function () { + var promiseResolve = aCallable$E(C.resolve); + var values = []; + var counter = 0; + var remaining = 1; + iterate$C(iterable, function (promise) { + var index = counter++; + var alreadyCalled = false; + values.push(undefined); + remaining++; + promiseResolve.call(C, promise).then(function (value) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = { + status: 'fulfilled', + value: value + }; + --remaining || resolve(values); + }, function (error) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = { + status: 'rejected', + reason: error + }; + --remaining || resolve(values); + }); + }); + --remaining || resolve(values); + }); + if (result.error) reject(result.value); + return capability.promise; + } + }); + + var $$2H = _export; + + var aCallable$D = aCallable$Q; + + var getBuiltIn$o = getBuiltIn$y; + + var newPromiseCapabilityModule$1 = newPromiseCapability$2; + + var perform$1 = perform$4; + + var iterate$B = iterate$I; + + var PROMISE_ANY_ERROR = 'No one promise resolved'; // `Promise.any` method + // https://tc39.es/ecma262/#sec-promise.any + + $$2H({ + target: 'Promise', + stat: true + }, { + any: function any(iterable) { + var C = this; + var capability = newPromiseCapabilityModule$1.f(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform$1(function () { + var promiseResolve = aCallable$D(C.resolve); + var errors = []; + var counter = 0; + var remaining = 1; + var alreadyResolved = false; + iterate$B(iterable, function (promise) { + var index = counter++; + var alreadyRejected = false; + errors.push(undefined); + remaining++; + promiseResolve.call(C, promise).then(function (value) { + if (alreadyRejected || alreadyResolved) return; + alreadyResolved = true; + resolve(value); + }, function (error) { + if (alreadyRejected || alreadyResolved) return; + alreadyRejected = true; + errors[index] = error; + --remaining || reject(new (getBuiltIn$o('AggregateError'))(errors, PROMISE_ANY_ERROR)); + }); + }); + --remaining || reject(new (getBuiltIn$o('AggregateError'))(errors, PROMISE_ANY_ERROR)); + }); + if (result.error) reject(result.value); + return capability.promise; + } + }); + + var $$2G = _export; + + var NativePromise = nativePromiseConstructor; + + var fails$q = fails$15; + + var getBuiltIn$n = getBuiltIn$y; + + var isCallable$b = isCallable$z; + + var speciesConstructor$c = speciesConstructor$f; + + var promiseResolve = promiseResolve$2; + + var redefine$8 = redefine$l.exports; // Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829 + + + var NON_GENERIC = !!NativePromise && fails$q(function () { + NativePromise.prototype['finally'].call({ + then: function () { + /* empty */ + } + }, function () { + /* empty */ + }); + }); // `Promise.prototype.finally` method + // https://tc39.es/ecma262/#sec-promise.prototype.finally + + $$2G({ + target: 'Promise', + proto: true, + real: true, + forced: NON_GENERIC + }, { + 'finally': function (onFinally) { + var C = speciesConstructor$c(this, getBuiltIn$n('Promise')); + var isFunction = isCallable$b(onFinally); + return this.then(isFunction ? function (x) { + return promiseResolve(C, onFinally()).then(function () { + return x; + }); + } : onFinally, isFunction ? function (e) { + return promiseResolve(C, onFinally()).then(function () { + throw e; + }); + } : onFinally); + } + }); // makes sure that native promise-based APIs `Promise#finally` properly works with patched `Promise#then` + + if (isCallable$b(NativePromise)) { + var method = getBuiltIn$n('Promise').prototype['finally']; + + if (NativePromise.prototype['finally'] !== method) { + redefine$8(NativePromise.prototype, 'finally', method, { + unsafe: true + }); + } + } + + var $$2F = _export; + + var getBuiltIn$m = getBuiltIn$y; + + var aCallable$C = aCallable$Q; + + var anObject$1n = anObject$1C; + + var fails$p = fails$15; + + var nativeApply = getBuiltIn$m('Reflect', 'apply'); + var functionApply = Function.apply; // MS Edge argumentsList argument is optional + + var OPTIONAL_ARGUMENTS_LIST = !fails$p(function () { + nativeApply(function () { + /* empty */ + }); + }); // `Reflect.apply` method + // https://tc39.es/ecma262/#sec-reflect.apply + + $$2F({ + target: 'Reflect', + stat: true, + forced: OPTIONAL_ARGUMENTS_LIST + }, { + apply: function apply(target, thisArgument, argumentsList) { + aCallable$C(target); + anObject$1n(argumentsList); + return nativeApply ? nativeApply(target, thisArgument, argumentsList) : functionApply.call(target, thisArgument, argumentsList); + } + }); + + var $$2E = _export; + + var getBuiltIn$l = getBuiltIn$y; + + var aConstructor$3 = aConstructor$5; + + var anObject$1m = anObject$1C; + + var isObject$b = isObject$C; + + var create$8 = objectCreate$1; + + var bind$i = functionBind; + + var fails$o = fails$15; + + var nativeConstruct = getBuiltIn$l('Reflect', 'construct'); // `Reflect.construct` method + // https://tc39.es/ecma262/#sec-reflect.construct + // MS Edge supports only 2 arguments and argumentsList argument is optional + // FF Nightly sets third argument as `new.target`, but does not create `this` from it + + var NEW_TARGET_BUG = fails$o(function () { + function F() { + /* empty */ + } + + return !(nativeConstruct(function () { + /* empty */ + }, [], F) instanceof F); + }); + var ARGS_BUG = !fails$o(function () { + nativeConstruct(function () { + /* empty */ + }); + }); + var FORCED$b = NEW_TARGET_BUG || ARGS_BUG; + $$2E({ + target: 'Reflect', + stat: true, + forced: FORCED$b, + sham: FORCED$b + }, { + construct: function construct(Target, args + /* , newTarget */ + ) { + aConstructor$3(Target); + anObject$1m(args); + var newTarget = arguments.length < 3 ? Target : aConstructor$3(arguments[2]); + if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget); + + if (Target == newTarget) { + // w/o altered newTarget, optimization for 0-4 arguments + switch (args.length) { + case 0: + return new Target(); + + case 1: + return new Target(args[0]); + + case 2: + return new Target(args[0], args[1]); + + case 3: + return new Target(args[0], args[1], args[2]); + + case 4: + return new Target(args[0], args[1], args[2], args[3]); + } // w/o altered newTarget, lot of arguments case + + + var $args = [null]; + $args.push.apply($args, args); + return new (bind$i.apply(Target, $args))(); + } // with altered newTarget, not support built-in constructors + + + var proto = newTarget.prototype; + var instance = create$8(isObject$b(proto) ? proto : Object.prototype); + var result = Function.apply.call(Target, instance, args); + return isObject$b(result) ? result : instance; + } + }); + + var $$2D = _export; + + var DESCRIPTORS$b = descriptors; + + var anObject$1l = anObject$1C; + + var toPropertyKey$2 = toPropertyKey$9; + + var definePropertyModule$2 = objectDefineProperty; + + var fails$n = fails$15; // MS Edge has broken Reflect.defineProperty - throwing instead of returning false + + + var ERROR_INSTEAD_OF_FALSE = fails$n(function () { + // eslint-disable-next-line es/no-reflect -- required for testing + Reflect.defineProperty(definePropertyModule$2.f({}, 1, { + value: 1 + }), 1, { + value: 2 + }); + }); // `Reflect.defineProperty` method + // https://tc39.es/ecma262/#sec-reflect.defineproperty + + $$2D({ + target: 'Reflect', + stat: true, + forced: ERROR_INSTEAD_OF_FALSE, + sham: !DESCRIPTORS$b + }, { + defineProperty: function defineProperty(target, propertyKey, attributes) { + anObject$1l(target); + var key = toPropertyKey$2(propertyKey); + anObject$1l(attributes); + + try { + definePropertyModule$2.f(target, key, attributes); + return true; + } catch (error) { + return false; + } + } + }); + + var $$2C = _export; + + var anObject$1k = anObject$1C; + + var getOwnPropertyDescriptor$3 = objectGetOwnPropertyDescriptor.f; // `Reflect.deleteProperty` method + // https://tc39.es/ecma262/#sec-reflect.deleteproperty + + + $$2C({ + target: 'Reflect', + stat: true + }, { + deleteProperty: function deleteProperty(target, propertyKey) { + var descriptor = getOwnPropertyDescriptor$3(anObject$1k(target), propertyKey); + return descriptor && !descriptor.configurable ? false : delete target[propertyKey]; + } + }); + + var hasOwn$8 = hasOwnProperty_1; + + var isDataDescriptor$2 = function (descriptor) { + return descriptor !== undefined && (hasOwn$8(descriptor, 'value') || hasOwn$8(descriptor, 'writable')); + }; + + var $$2B = _export; + + var isObject$a = isObject$C; + + var anObject$1j = anObject$1C; + + var isDataDescriptor$1 = isDataDescriptor$2; + + var getOwnPropertyDescriptorModule$3 = objectGetOwnPropertyDescriptor; + + var getPrototypeOf$6 = objectGetPrototypeOf$1; // `Reflect.get` method + // https://tc39.es/ecma262/#sec-reflect.get + + + function get$1(target, propertyKey + /* , receiver */ + ) { + var receiver = arguments.length < 3 ? target : arguments[2]; + var descriptor, prototype; + if (anObject$1j(target) === receiver) return target[propertyKey]; + descriptor = getOwnPropertyDescriptorModule$3.f(target, propertyKey); + if (descriptor) return isDataDescriptor$1(descriptor) ? descriptor.value : descriptor.get === undefined ? undefined : descriptor.get.call(receiver); + if (isObject$a(prototype = getPrototypeOf$6(target))) return get$1(prototype, propertyKey, receiver); + } + + $$2B({ + target: 'Reflect', + stat: true + }, { + get: get$1 + }); + + var $$2A = _export; + + var DESCRIPTORS$a = descriptors; + + var anObject$1i = anObject$1C; + + var getOwnPropertyDescriptorModule$2 = objectGetOwnPropertyDescriptor; // `Reflect.getOwnPropertyDescriptor` method + // https://tc39.es/ecma262/#sec-reflect.getownpropertydescriptor + + + $$2A({ + target: 'Reflect', + stat: true, + sham: !DESCRIPTORS$a + }, { + getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) { + return getOwnPropertyDescriptorModule$2.f(anObject$1i(target), propertyKey); + } + }); + + var $$2z = _export; + + var anObject$1h = anObject$1C; + + var objectGetPrototypeOf = objectGetPrototypeOf$1; + + var CORRECT_PROTOTYPE_GETTER = correctPrototypeGetter; // `Reflect.getPrototypeOf` method + // https://tc39.es/ecma262/#sec-reflect.getprototypeof + + + $$2z({ + target: 'Reflect', + stat: true, + sham: !CORRECT_PROTOTYPE_GETTER + }, { + getPrototypeOf: function getPrototypeOf(target) { + return objectGetPrototypeOf(anObject$1h(target)); + } + }); + + var $$2y = _export; // `Reflect.has` method + // https://tc39.es/ecma262/#sec-reflect.has + + + $$2y({ + target: 'Reflect', + stat: true + }, { + has: function has(target, propertyKey) { + return propertyKey in target; + } + }); + + var $$2x = _export; + + var anObject$1g = anObject$1C; // eslint-disable-next-line es/no-object-isextensible -- safe + + + var objectIsExtensible = Object.isExtensible; // `Reflect.isExtensible` method + // https://tc39.es/ecma262/#sec-reflect.isextensible + + $$2x({ + target: 'Reflect', + stat: true + }, { + isExtensible: function isExtensible(target) { + anObject$1g(target); + return objectIsExtensible ? objectIsExtensible(target) : true; + } + }); + + var $$2w = _export; + + var ownKeys = ownKeys$3; // `Reflect.ownKeys` method + // https://tc39.es/ecma262/#sec-reflect.ownkeys + + + $$2w({ + target: 'Reflect', + stat: true + }, { + ownKeys: ownKeys + }); + + var $$2v = _export; + + var getBuiltIn$k = getBuiltIn$y; + + var anObject$1f = anObject$1C; + + var FREEZING = freezing; // `Reflect.preventExtensions` method + // https://tc39.es/ecma262/#sec-reflect.preventextensions + + + $$2v({ + target: 'Reflect', + stat: true, + sham: !FREEZING + }, { + preventExtensions: function preventExtensions(target) { + anObject$1f(target); + + try { + var objectPreventExtensions = getBuiltIn$k('Object', 'preventExtensions'); + if (objectPreventExtensions) objectPreventExtensions(target); + return true; + } catch (error) { + return false; + } + } + }); + + var $$2u = _export; + + var anObject$1e = anObject$1C; + + var isObject$9 = isObject$C; + + var isDataDescriptor = isDataDescriptor$2; + + var fails$m = fails$15; + + var definePropertyModule$1 = objectDefineProperty; + + var getOwnPropertyDescriptorModule$1 = objectGetOwnPropertyDescriptor; + + var getPrototypeOf$5 = objectGetPrototypeOf$1; + + var createPropertyDescriptor$2 = createPropertyDescriptor$9; // `Reflect.set` method + // https://tc39.es/ecma262/#sec-reflect.set + + + function set$1(target, propertyKey, V + /* , receiver */ + ) { + var receiver = arguments.length < 4 ? target : arguments[3]; + var ownDescriptor = getOwnPropertyDescriptorModule$1.f(anObject$1e(target), propertyKey); + var existingDescriptor, prototype, setter; + + if (!ownDescriptor) { + if (isObject$9(prototype = getPrototypeOf$5(target))) { + return set$1(prototype, propertyKey, V, receiver); + } + + ownDescriptor = createPropertyDescriptor$2(0); + } + + if (isDataDescriptor(ownDescriptor)) { + if (ownDescriptor.writable === false || !isObject$9(receiver)) return false; + + if (existingDescriptor = getOwnPropertyDescriptorModule$1.f(receiver, propertyKey)) { + if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false; + existingDescriptor.value = V; + definePropertyModule$1.f(receiver, propertyKey, existingDescriptor); + } else definePropertyModule$1.f(receiver, propertyKey, createPropertyDescriptor$2(0, V)); + } else { + setter = ownDescriptor.set; + if (setter === undefined) return false; + setter.call(receiver, V); + } + + return true; + } // MS Edge 17-18 Reflect.set allows setting the property to object + // with non-writable property on the prototype + + + var MS_EDGE_BUG = fails$m(function () { + var Constructor = function () { + /* empty */ + }; + + var object = definePropertyModule$1.f(new Constructor(), 'a', { + configurable: true + }); // eslint-disable-next-line es/no-reflect -- required for testing + + return Reflect.set(Constructor.prototype, 'a', 1, object) !== false; + }); + $$2u({ + target: 'Reflect', + stat: true, + forced: MS_EDGE_BUG + }, { + set: set$1 + }); + + var $$2t = _export; + + var anObject$1d = anObject$1C; + + var aPossiblePrototype = aPossiblePrototype$2; + + var objectSetPrototypeOf = objectSetPrototypeOf$1; // `Reflect.setPrototypeOf` method + // https://tc39.es/ecma262/#sec-reflect.setprototypeof + + + if (objectSetPrototypeOf) $$2t({ + target: 'Reflect', + stat: true + }, { + setPrototypeOf: function setPrototypeOf(target, proto) { + anObject$1d(target); + aPossiblePrototype(proto); + + try { + objectSetPrototypeOf(target, proto); + return true; + } catch (error) { + return false; + } + } + }); + + var $$2s = _export; + + var global$l = global$R; + + var setToStringTag$2 = setToStringTag$b; + + $$2s({ + global: true + }, { + Reflect: {} + }); // Reflect[@@toStringTag] property + // https://tc39.es/ecma262/#sec-reflect-@@tostringtag + + setToStringTag$2(global$l.Reflect, 'Reflect', true); + + var isObject$8 = isObject$C; + + var classof$4 = classofRaw$1; + + var wellKnownSymbol$j = wellKnownSymbol$G; + + var MATCH$2 = wellKnownSymbol$j('match'); // `IsRegExp` abstract operation + // https://tc39.es/ecma262/#sec-isregexp + + var isRegexp = function (it) { + var isRegExp; + return isObject$8(it) && ((isRegExp = it[MATCH$2]) !== undefined ? !!isRegExp : classof$4(it) == 'RegExp'); + }; + + var anObject$1c = anObject$1C; // `RegExp.prototype.flags` getter implementation + // https://tc39.es/ecma262/#sec-get-regexp.prototype.flags + + + var regexpFlags$1 = function () { + var that = anObject$1c(this); + var result = ''; + if (that.global) result += 'g'; + if (that.ignoreCase) result += 'i'; + if (that.multiline) result += 'm'; + if (that.dotAll) result += 's'; + if (that.unicode) result += 'u'; + if (that.sticky) result += 'y'; + return result; + }; + + var regexpStickyHelpers = {}; + + var fails$l = fails$15; + + var global$k = global$R; // babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError + + + var $RegExp$2 = global$k.RegExp; + regexpStickyHelpers.UNSUPPORTED_Y = fails$l(function () { + var re = $RegExp$2('a', 'y'); + re.lastIndex = 2; + return re.exec('abcd') != null; + }); + regexpStickyHelpers.BROKEN_CARET = fails$l(function () { + // https://bugzilla.mozilla.org/show_bug.cgi?id=773687 + var re = $RegExp$2('^r', 'gy'); + re.lastIndex = 2; + return re.exec('str') != null; + }); + + var fails$k = fails$15; + + var global$j = global$R; // babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError + + + var $RegExp$1 = global$j.RegExp; + var regexpUnsupportedDotAll = fails$k(function () { + var re = $RegExp$1('.', 's'); + return !(re.dotAll && re.exec('\n') && re.flags === 's'); + }); + + var fails$j = fails$15; + + var global$i = global$R; // babel-minify and Closure Compiler transpiles RegExp('(?b)', 'g') -> /(?b)/g and it causes SyntaxError + + + var $RegExp = global$i.RegExp; + var regexpUnsupportedNcg = fails$j(function () { + var re = $RegExp('(?b)', 'g'); + return re.exec('b').groups.a !== 'b' || 'b'.replace(re, '$c') !== 'bc'; + }); + + var DESCRIPTORS$9 = descriptors; + + var global$h = global$R; + + var isForced = isForced_1; + + var inheritIfRequired$1 = inheritIfRequired$4; + + var createNonEnumerableProperty$8 = createNonEnumerableProperty$h; + + var defineProperty$6 = objectDefineProperty.f; + + var getOwnPropertyNames$2 = objectGetOwnPropertyNames.f; + + var isRegExp$4 = isRegexp; + + var toString$i = toString$t; + + var getFlags = regexpFlags$1; + + var stickyHelpers$2 = regexpStickyHelpers; + + var redefine$7 = redefine$l.exports; + + var fails$i = fails$15; + + var hasOwn$7 = hasOwnProperty_1; + + var enforceInternalState = internalState.enforce; + + var setSpecies$2 = setSpecies$7; + + var wellKnownSymbol$i = wellKnownSymbol$G; + + var UNSUPPORTED_DOT_ALL$2 = regexpUnsupportedDotAll; + + var UNSUPPORTED_NCG$1 = regexpUnsupportedNcg; + + var MATCH$1 = wellKnownSymbol$i('match'); + var NativeRegExp = global$h.RegExp; + var RegExpPrototype$6 = NativeRegExp.prototype; // TODO: Use only propper RegExpIdentifierName + + var IS_NCG = /^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/; + var re1 = /a/g; + var re2 = /a/g; // "new" should create a new object, old webkit bug + + var CORRECT_NEW = new NativeRegExp(re1) !== re1; + var UNSUPPORTED_Y$3 = stickyHelpers$2.UNSUPPORTED_Y; + var BASE_FORCED = DESCRIPTORS$9 && (!CORRECT_NEW || UNSUPPORTED_Y$3 || UNSUPPORTED_DOT_ALL$2 || UNSUPPORTED_NCG$1 || fails$i(function () { + re2[MATCH$1] = false; // RegExp constructor can alter flags and IsRegExp works correct with @@match + + return NativeRegExp(re1) != re1 || NativeRegExp(re2) == re2 || NativeRegExp(re1, 'i') != '/a/i'; + })); + + var handleDotAll = function (string) { + var length = string.length; + var index = 0; + var result = ''; + var brackets = false; + var chr; + + for (; index <= length; index++) { + chr = string.charAt(index); + + if (chr === '\\') { + result += chr + string.charAt(++index); + continue; + } + + if (!brackets && chr === '.') { + result += '[\\s\\S]'; + } else { + if (chr === '[') { + brackets = true; + } else if (chr === ']') { + brackets = false; + } + + result += chr; + } + } + + return result; + }; + + var handleNCG = function (string) { + var length = string.length; + var index = 0; + var result = ''; + var named = []; + var names = {}; + var brackets = false; + var ncg = false; + var groupid = 0; + var groupname = ''; + var chr; + + for (; index <= length; index++) { + chr = string.charAt(index); + + if (chr === '\\') { + chr = chr + string.charAt(++index); + } else if (chr === ']') { + brackets = false; + } else if (!brackets) switch (true) { + case chr === '[': + brackets = true; + break; + + case chr === '(': + if (IS_NCG.test(string.slice(index + 1))) { + index += 2; + ncg = true; + } + + result += chr; + groupid++; + continue; + + case chr === '>' && ncg: + if (groupname === '' || hasOwn$7(names, groupname)) { + throw new SyntaxError('Invalid capture group name'); + } + + names[groupname] = true; + named.push([groupname, groupid]); + ncg = false; + groupname = ''; + continue; + } + + if (ncg) groupname += chr;else result += chr; + } + + return [result, named]; + }; // `RegExp` constructor + // https://tc39.es/ecma262/#sec-regexp-constructor + + + if (isForced('RegExp', BASE_FORCED)) { + var RegExpWrapper = function RegExp(pattern, flags) { + var thisIsRegExp = this instanceof RegExpWrapper; + var patternIsRegExp = isRegExp$4(pattern); + var flagsAreUndefined = flags === undefined; + var groups = []; + var rawPattern = pattern; + var rawFlags, dotAll, sticky, handled, result, state; + + if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) { + return pattern; + } + + if (patternIsRegExp || pattern instanceof RegExpWrapper) { + pattern = pattern.source; + if (flagsAreUndefined) flags = 'flags' in rawPattern ? rawPattern.flags : getFlags.call(rawPattern); + } + + pattern = pattern === undefined ? '' : toString$i(pattern); + flags = flags === undefined ? '' : toString$i(flags); + rawPattern = pattern; + + if (UNSUPPORTED_DOT_ALL$2 && 'dotAll' in re1) { + dotAll = !!flags && flags.indexOf('s') > -1; + if (dotAll) flags = flags.replace(/s/g, ''); + } + + rawFlags = flags; + + if (UNSUPPORTED_Y$3 && 'sticky' in re1) { + sticky = !!flags && flags.indexOf('y') > -1; + if (sticky) flags = flags.replace(/y/g, ''); + } + + if (UNSUPPORTED_NCG$1) { + handled = handleNCG(pattern); + pattern = handled[0]; + groups = handled[1]; + } + + result = inheritIfRequired$1(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype$6, RegExpWrapper); + + if (dotAll || sticky || groups.length) { + state = enforceInternalState(result); + + if (dotAll) { + state.dotAll = true; + state.raw = RegExpWrapper(handleDotAll(pattern), rawFlags); + } + + if (sticky) state.sticky = true; + if (groups.length) state.groups = groups; + } + + if (pattern !== rawPattern) try { + // fails in old engines, but we have no alternatives for unsupported regex syntax + createNonEnumerableProperty$8(result, 'source', rawPattern === '' ? '(?:)' : rawPattern); + } catch (error) { + /* empty */ + } + return result; + }; + + var proxy = function (key) { + key in RegExpWrapper || defineProperty$6(RegExpWrapper, key, { + configurable: true, + get: function () { + return NativeRegExp[key]; + }, + set: function (it) { + NativeRegExp[key] = it; + } + }); + }; + + for (var keys = getOwnPropertyNames$2(NativeRegExp), index = 0; keys.length > index;) { + proxy(keys[index++]); + } + + RegExpPrototype$6.constructor = RegExpWrapper; + RegExpWrapper.prototype = RegExpPrototype$6; + redefine$7(global$h, 'RegExp', RegExpWrapper); + } // https://tc39.es/ecma262/#sec-get-regexp-@@species + + + setSpecies$2('RegExp'); + + var DESCRIPTORS$8 = descriptors; + + var UNSUPPORTED_DOT_ALL$1 = regexpUnsupportedDotAll; + + var defineProperty$5 = objectDefineProperty.f; + + var getInternalState$d = internalState.get; + + var RegExpPrototype$5 = RegExp.prototype; // `RegExp.prototype.dotAll` getter + // https://tc39.es/ecma262/#sec-get-regexp.prototype.dotall + + if (DESCRIPTORS$8 && UNSUPPORTED_DOT_ALL$1) { + defineProperty$5(RegExpPrototype$5, 'dotAll', { + configurable: true, + get: function () { + if (this === RegExpPrototype$5) return undefined; // We can't use InternalStateModule.getterFor because + // we don't add metadata for regexps created by a literal. + + if (this instanceof RegExp) { + return !!getInternalState$d(this).dotAll; + } + + throw TypeError('Incompatible receiver, RegExp required'); + } + }); + } + + /* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */ + + /* eslint-disable regexp/no-useless-quantifier -- testing */ + + var toString$h = toString$t; + + var regexpFlags = regexpFlags$1; + + var stickyHelpers$1 = regexpStickyHelpers; + + var shared$2 = shared$7.exports; + + var create$7 = objectCreate$1; + + var getInternalState$c = internalState.get; + + var UNSUPPORTED_DOT_ALL = regexpUnsupportedDotAll; + + var UNSUPPORTED_NCG = regexpUnsupportedNcg; + + var nativeExec = RegExp.prototype.exec; + var nativeReplace = shared$2('native-string-replace', String.prototype.replace); + var patchedExec = nativeExec; + + var UPDATES_LAST_INDEX_WRONG = function () { + var re1 = /a/; + var re2 = /b*/g; + nativeExec.call(re1, 'a'); + nativeExec.call(re2, 'a'); + return re1.lastIndex !== 0 || re2.lastIndex !== 0; + }(); + + var UNSUPPORTED_Y$2 = stickyHelpers$1.UNSUPPORTED_Y || stickyHelpers$1.BROKEN_CARET; // nonparticipating capturing group, copied from es5-shim's String#split patch. + + var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; + var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y$2 || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG; + + if (PATCH) { + // eslint-disable-next-line max-statements -- TODO + patchedExec = function exec(string) { + var re = this; + var state = getInternalState$c(re); + var str = toString$h(string); + var raw = state.raw; + var result, reCopy, lastIndex, match, i, object, group; + + if (raw) { + raw.lastIndex = re.lastIndex; + result = patchedExec.call(raw, str); + re.lastIndex = raw.lastIndex; + return result; + } + + var groups = state.groups; + var sticky = UNSUPPORTED_Y$2 && re.sticky; + var flags = regexpFlags.call(re); + var source = re.source; + var charsAdded = 0; + var strCopy = str; + + if (sticky) { + flags = flags.replace('y', ''); + + if (flags.indexOf('g') === -1) { + flags += 'g'; + } + + strCopy = str.slice(re.lastIndex); // Support anchored sticky behavior. + + if (re.lastIndex > 0 && (!re.multiline || re.multiline && str.charAt(re.lastIndex - 1) !== '\n')) { + source = '(?: ' + source + ')'; + strCopy = ' ' + strCopy; + charsAdded++; + } // ^(? + rx + ) is needed, in combination with some str slicing, to + // simulate the 'y' flag. + + + reCopy = new RegExp('^(?:' + source + ')', flags); + } + + if (NPCG_INCLUDED) { + reCopy = new RegExp('^' + source + '$(?!\\s)', flags); + } + + if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex; + match = nativeExec.call(sticky ? reCopy : re, strCopy); + + if (sticky) { + if (match) { + match.input = match.input.slice(charsAdded); + match[0] = match[0].slice(charsAdded); + match.index = re.lastIndex; + re.lastIndex += match[0].length; + } else re.lastIndex = 0; + } else if (UPDATES_LAST_INDEX_WRONG && match) { + re.lastIndex = re.global ? match.index + match[0].length : lastIndex; + } + + if (NPCG_INCLUDED && match && match.length > 1) { + // Fix browsers whose `exec` methods don't consistently return `undefined` + // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/ + nativeReplace.call(match[0], reCopy, function () { + for (i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === undefined) match[i] = undefined; + } + }); + } + + if (match && groups) { + match.groups = object = create$7(null); + + for (i = 0; i < groups.length; i++) { + group = groups[i]; + object[group[0]] = match[group[1]]; + } + } + + return match; + }; + } + + var regexpExec$3 = patchedExec; + + var $$2r = _export; + + var exec = regexpExec$3; // `RegExp.prototype.exec` method + // https://tc39.es/ecma262/#sec-regexp.prototype.exec + + + $$2r({ + target: 'RegExp', + proto: true, + forced: /./.exec !== exec + }, { + exec: exec + }); + + var DESCRIPTORS$7 = descriptors; + + var objectDefinePropertyModule = objectDefineProperty; + + var regExpFlags = regexpFlags$1; + + var fails$h = fails$15; + + var FORCED$a = DESCRIPTORS$7 && fails$h(function () { + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + return Object.getOwnPropertyDescriptor(RegExp.prototype, 'flags').get.call({ + dotAll: true, + sticky: true + }) !== 'sy'; + }); // `RegExp.prototype.flags` getter + // https://tc39.es/ecma262/#sec-get-regexp.prototype.flags + + if (FORCED$a) objectDefinePropertyModule.f(RegExp.prototype, 'flags', { + configurable: true, + get: regExpFlags + }); + + var DESCRIPTORS$6 = descriptors; + + var UNSUPPORTED_Y$1 = regexpStickyHelpers.UNSUPPORTED_Y; + + var defineProperty$4 = objectDefineProperty.f; + + var getInternalState$b = internalState.get; + + var RegExpPrototype$4 = RegExp.prototype; // `RegExp.prototype.sticky` getter + // https://tc39.es/ecma262/#sec-get-regexp.prototype.sticky + + if (DESCRIPTORS$6 && UNSUPPORTED_Y$1) { + defineProperty$4(RegExpPrototype$4, 'sticky', { + configurable: true, + get: function () { + if (this === RegExpPrototype$4) return undefined; // We can't use InternalStateModule.getterFor because + // we don't add metadata for regexps created by a literal. + + if (this instanceof RegExp) { + return !!getInternalState$b(this).sticky; + } + + throw TypeError('Incompatible receiver, RegExp required'); + } + }); + } + + var $$2q = _export; + + var isCallable$a = isCallable$z; + + var isObject$7 = isObject$C; + + var DELEGATES_TO_EXEC = function () { + var execCalled = false; + var re = /[ac]/; + + re.exec = function () { + execCalled = true; + return /./.exec.apply(this, arguments); + }; + + return re.test('abc') === true && execCalled; + }(); + + var nativeTest = /./.test; // `RegExp.prototype.test` method + // https://tc39.es/ecma262/#sec-regexp.prototype.test + + $$2q({ + target: 'RegExp', + proto: true, + forced: !DELEGATES_TO_EXEC + }, { + test: function (str) { + var exec = this.exec; + if (!isCallable$a(exec)) return nativeTest.call(this, str); + var result = exec.call(this, str); + + if (result !== null && !isObject$7(result)) { + throw new Error('RegExp exec method returned something other than an Object or null'); + } + + return !!result; + } + }); + + var PROPER_FUNCTION_NAME$2 = functionName.PROPER; + + var redefine$6 = redefine$l.exports; + + var anObject$1b = anObject$1C; + + var $toString$2 = toString$t; + + var fails$g = fails$15; + + var flags = regexpFlags$1; + + var TO_STRING = 'toString'; + var RegExpPrototype$3 = RegExp.prototype; + var nativeToString = RegExpPrototype$3[TO_STRING]; + var NOT_GENERIC = fails$g(function () { + return nativeToString.call({ + source: 'a', + flags: 'b' + }) != '/a/b'; + }); // FF44- RegExp#toString has a wrong name + + var INCORRECT_NAME = PROPER_FUNCTION_NAME$2 && nativeToString.name != TO_STRING; // `RegExp.prototype.toString` method + // https://tc39.es/ecma262/#sec-regexp.prototype.tostring + + if (NOT_GENERIC || INCORRECT_NAME) { + redefine$6(RegExp.prototype, TO_STRING, function toString() { + var R = anObject$1b(this); + var p = $toString$2(R.source); + var rf = R.flags; + var f = $toString$2(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype$3) ? flags.call(R) : rf); + return '/' + p + '/' + f; + }, { + unsafe: true + }); + } + + var collection$2 = collection$4; + + var collectionStrong = collectionStrong$2; // `Set` constructor + // https://tc39.es/ecma262/#sec-set-objects + + + var es_set = collection$2('Set', function (init) { + return function Set() { + return init(this, arguments.length ? arguments[0] : undefined); + }; + }, collectionStrong); + + var $$2p = _export; + + var requireObjectCoercible$d = requireObjectCoercible$j; + + var toIntegerOrInfinity$6 = toIntegerOrInfinity$i; + + var toString$g = toString$t; + + var fails$f = fails$15; + + var FORCED$9 = fails$f(function () { + return '𠮷'.at(0) !== '\uD842'; + }); // `String.prototype.at` method + // https://github.com/tc39/proposal-relative-indexing-method + + $$2p({ + target: 'String', + proto: true, + forced: FORCED$9 + }, { + at: function at(index) { + var S = toString$g(requireObjectCoercible$d(this)); + var len = S.length; + var relativeIndex = toIntegerOrInfinity$6(index); + var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex; + return k < 0 || k >= len ? undefined : S.charAt(k); + } + }); + + var toIntegerOrInfinity$5 = toIntegerOrInfinity$i; + + var toString$f = toString$t; + + var requireObjectCoercible$c = requireObjectCoercible$j; + + var createMethod$2 = function (CONVERT_TO_STRING) { + return function ($this, pos) { + var S = toString$f(requireObjectCoercible$c($this)); + var position = toIntegerOrInfinity$5(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; + first = S.charCodeAt(position); + return first < 0xD800 || first > 0xDBFF || position + 1 === size || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF ? CONVERT_TO_STRING ? S.charAt(position) : first : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; + }; + }; + + var stringMultibyte = { + // `String.prototype.codePointAt` method + // https://tc39.es/ecma262/#sec-string.prototype.codepointat + codeAt: createMethod$2(false), + // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + charAt: createMethod$2(true) + }; + + var $$2o = _export; + + var codeAt$2 = stringMultibyte.codeAt; // `String.prototype.codePointAt` method + // https://tc39.es/ecma262/#sec-string.prototype.codepointat + + + $$2o({ + target: 'String', + proto: true + }, { + codePointAt: function codePointAt(pos) { + return codeAt$2(this, pos); + } + }); + + var isRegExp$3 = isRegexp; + + var notARegexp = function (it) { + if (isRegExp$3(it)) { + throw TypeError("The method doesn't accept regular expressions"); + } + + return it; + }; + + var wellKnownSymbol$h = wellKnownSymbol$G; + + var MATCH = wellKnownSymbol$h('match'); + + var correctIsRegexpLogic = function (METHOD_NAME) { + var regexp = /./; + + try { + '/./'[METHOD_NAME](regexp); + } catch (error1) { + try { + regexp[MATCH] = false; + return '/./'[METHOD_NAME](regexp); + } catch (error2) { + /* empty */ + } + } + + return false; + }; + + var $$2n = _export; + + var getOwnPropertyDescriptor$2 = objectGetOwnPropertyDescriptor.f; + + var toLength$7 = toLength$d; + + var toString$e = toString$t; + + var notARegExp$2 = notARegexp; + + var requireObjectCoercible$b = requireObjectCoercible$j; + + var correctIsRegExpLogic$2 = correctIsRegexpLogic; + + + var $endsWith = ''.endsWith; + var min$5 = Math.min; + var CORRECT_IS_REGEXP_LOGIC$1 = correctIsRegExpLogic$2('endsWith'); // https://github.com/zloirock/core-js/pull/702 + + var MDN_POLYFILL_BUG$1 = !CORRECT_IS_REGEXP_LOGIC$1 && !!function () { + var descriptor = getOwnPropertyDescriptor$2(String.prototype, 'endsWith'); + return descriptor && !descriptor.writable; + }(); // `String.prototype.endsWith` method + // https://tc39.es/ecma262/#sec-string.prototype.endswith + + $$2n({ + target: 'String', + proto: true, + forced: !MDN_POLYFILL_BUG$1 && !CORRECT_IS_REGEXP_LOGIC$1 + }, { + endsWith: function endsWith(searchString + /* , endPosition = @length */ + ) { + var that = toString$e(requireObjectCoercible$b(this)); + notARegExp$2(searchString); + var endPosition = arguments.length > 1 ? arguments[1] : undefined; + var len = that.length; + var end = endPosition === undefined ? len : min$5(toLength$7(endPosition), len); + var search = toString$e(searchString); + return $endsWith ? $endsWith.call(that, search, end) : that.slice(end - search.length, end) === search; + } + }); + + var $$2m = _export; + + var toAbsoluteIndex$1 = toAbsoluteIndex$8; + + var fromCharCode$1 = String.fromCharCode; // eslint-disable-next-line es/no-string-fromcodepoint -- required for testing + + var $fromCodePoint = String.fromCodePoint; // length should be 1, old FF problem + + var INCORRECT_LENGTH = !!$fromCodePoint && $fromCodePoint.length != 1; // `String.fromCodePoint` method + // https://tc39.es/ecma262/#sec-string.fromcodepoint + + $$2m({ + target: 'String', + stat: true, + forced: INCORRECT_LENGTH + }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + fromCodePoint: function fromCodePoint(x) { + var elements = []; + var length = arguments.length; + var i = 0; + var code; + + while (length > i) { + code = +arguments[i++]; + if (toAbsoluteIndex$1(code, 0x10FFFF) !== code) throw RangeError(code + ' is not a valid code point'); + elements.push(code < 0x10000 ? fromCharCode$1(code) : fromCharCode$1(((code -= 0x10000) >> 10) + 0xD800, code % 0x400 + 0xDC00)); + } + + return elements.join(''); + } + }); + + var $$2l = _export; + + var notARegExp$1 = notARegexp; + + var requireObjectCoercible$a = requireObjectCoercible$j; + + var toString$d = toString$t; + + var correctIsRegExpLogic$1 = correctIsRegexpLogic; // `String.prototype.includes` method + // https://tc39.es/ecma262/#sec-string.prototype.includes + + + $$2l({ + target: 'String', + proto: true, + forced: !correctIsRegExpLogic$1('includes') + }, { + includes: function includes(searchString + /* , position = 0 */ + ) { + return !!~toString$d(requireObjectCoercible$a(this)).indexOf(toString$d(notARegExp$1(searchString)), arguments.length > 1 ? arguments[1] : undefined); + } + }); + + var charAt$3 = stringMultibyte.charAt; + + var toString$c = toString$t; + + var InternalStateModule$d = internalState; + + var defineIterator = defineIterator$3; + + var STRING_ITERATOR$1 = 'String Iterator'; + var setInternalState$d = InternalStateModule$d.set; + var getInternalState$a = InternalStateModule$d.getterFor(STRING_ITERATOR$1); // `String.prototype[@@iterator]` method + // https://tc39.es/ecma262/#sec-string.prototype-@@iterator + + defineIterator(String, 'String', function (iterated) { + setInternalState$d(this, { + type: STRING_ITERATOR$1, + string: toString$c(iterated), + index: 0 + }); // `%StringIteratorPrototype%.next` method + // https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next + }, function next() { + var state = getInternalState$a(this); + var string = state.string; + var index = state.index; + var point; + if (index >= string.length) return { + value: undefined, + done: true + }; + point = charAt$3(string, index); + state.index += point.length; + return { + value: point, + done: false + }; + }); + + var redefine$5 = redefine$l.exports; + + var regexpExec$2 = regexpExec$3; + + var fails$e = fails$15; + + var wellKnownSymbol$g = wellKnownSymbol$G; + + var createNonEnumerableProperty$7 = createNonEnumerableProperty$h; + + var SPECIES = wellKnownSymbol$g('species'); + var RegExpPrototype$2 = RegExp.prototype; + + var fixRegexpWellKnownSymbolLogic = function (KEY, exec, FORCED, SHAM) { + var SYMBOL = wellKnownSymbol$g(KEY); + var DELEGATES_TO_SYMBOL = !fails$e(function () { + // String methods call symbol-named RegEp methods + var O = {}; + + O[SYMBOL] = function () { + return 7; + }; + + return ''[KEY](O) != 7; + }); + var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails$e(function () { + // Symbol-named RegExp methods call .exec + var execCalled = false; + var re = /a/; + + if (KEY === 'split') { + // We can't use real regex here since it causes deoptimization + // and serious performance degradation in V8 + // https://github.com/zloirock/core-js/issues/306 + re = {}; // RegExp[@@split] doesn't call the regex's exec method, but first creates + // a new one. We need to return the patched regex when creating the new one. + + re.constructor = {}; + + re.constructor[SPECIES] = function () { + return re; + }; + + re.flags = ''; + re[SYMBOL] = /./[SYMBOL]; + } + + re.exec = function () { + execCalled = true; + return null; + }; + + re[SYMBOL](''); + return !execCalled; + }); + + if (!DELEGATES_TO_SYMBOL || !DELEGATES_TO_EXEC || FORCED) { + var nativeRegExpMethod = /./[SYMBOL]; + var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) { + var $exec = regexp.exec; + + if ($exec === regexpExec$2 || $exec === RegExpPrototype$2.exec) { + if (DELEGATES_TO_SYMBOL && !forceStringMethod) { + // The native String method already delegates to @@method (this + // polyfilled function), leasing to infinite recursion. + // We avoid it by directly calling the native @@method method. + return { + done: true, + value: nativeRegExpMethod.call(regexp, str, arg2) + }; + } + + return { + done: true, + value: nativeMethod.call(str, regexp, arg2) + }; + } + + return { + done: false + }; + }); + redefine$5(String.prototype, KEY, methods[0]); + redefine$5(RegExpPrototype$2, SYMBOL, methods[1]); + } + + if (SHAM) createNonEnumerableProperty$7(RegExpPrototype$2[SYMBOL], 'sham', true); + }; + + var charAt$2 = stringMultibyte.charAt; // `AdvanceStringIndex` abstract operation + // https://tc39.es/ecma262/#sec-advancestringindex + + + var advanceStringIndex$4 = function (S, index, unicode) { + return index + (unicode ? charAt$2(S, index).length : 1); + }; + + var anObject$1a = anObject$1C; + + var isCallable$9 = isCallable$z; + + var classof$3 = classofRaw$1; + + var regexpExec$1 = regexpExec$3; // `RegExpExec` abstract operation + // https://tc39.es/ecma262/#sec-regexpexec + + + var regexpExecAbstract = function (R, S) { + var exec = R.exec; + + if (isCallable$9(exec)) { + var result = exec.call(R, S); + if (result !== null) anObject$1a(result); + return result; + } + + if (classof$3(R) === 'RegExp') return regexpExec$1.call(R, S); + throw TypeError('RegExp#exec called on incompatible receiver'); + }; + + var fixRegExpWellKnownSymbolLogic$3 = fixRegexpWellKnownSymbolLogic; + + var anObject$19 = anObject$1C; + + var toLength$6 = toLength$d; + + var toString$b = toString$t; + + var requireObjectCoercible$9 = requireObjectCoercible$j; + + var getMethod$d = getMethod$h; + + var advanceStringIndex$3 = advanceStringIndex$4; + + var regExpExec$3 = regexpExecAbstract; // @@match logic + + + fixRegExpWellKnownSymbolLogic$3('match', function (MATCH, nativeMatch, maybeCallNative) { + return [// `String.prototype.match` method + // https://tc39.es/ecma262/#sec-string.prototype.match + function match(regexp) { + var O = requireObjectCoercible$9(this); + var matcher = regexp == undefined ? undefined : getMethod$d(regexp, MATCH); + return matcher ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](toString$b(O)); + }, // `RegExp.prototype[@@match]` method + // https://tc39.es/ecma262/#sec-regexp.prototype-@@match + function (string) { + var rx = anObject$19(this); + var S = toString$b(string); + var res = maybeCallNative(nativeMatch, rx, S); + if (res.done) return res.value; + if (!rx.global) return regExpExec$3(rx, S); + var fullUnicode = rx.unicode; + rx.lastIndex = 0; + var A = []; + var n = 0; + var result; + + while ((result = regExpExec$3(rx, S)) !== null) { + var matchStr = toString$b(result[0]); + A[n] = matchStr; + if (matchStr === '') rx.lastIndex = advanceStringIndex$3(S, toLength$6(rx.lastIndex), fullUnicode); + n++; + } + + return n === 0 ? null : A; + }]; + }); + + /* eslint-disable es/no-string-prototype-matchall -- safe */ + + var $$2k = _export; + + var createIteratorConstructor$5 = createIteratorConstructor$7; + + var requireObjectCoercible$8 = requireObjectCoercible$j; + + var toLength$5 = toLength$d; + + var toString$a = toString$t; + + var anObject$18 = anObject$1C; + + var classof$2 = classofRaw$1; + + var isRegExp$2 = isRegexp; + + var getRegExpFlags$1 = regexpFlags$1; + + var getMethod$c = getMethod$h; + + var redefine$4 = redefine$l.exports; + + var fails$d = fails$15; + + var wellKnownSymbol$f = wellKnownSymbol$G; + + var speciesConstructor$b = speciesConstructor$f; + + var advanceStringIndex$2 = advanceStringIndex$4; + + var regExpExec$2 = regexpExecAbstract; + + var InternalStateModule$c = internalState; + + var IS_PURE$D = isPure; + + var MATCH_ALL = wellKnownSymbol$f('matchAll'); + var REGEXP_STRING = 'RegExp String'; + var REGEXP_STRING_ITERATOR = REGEXP_STRING + ' Iterator'; + var setInternalState$c = InternalStateModule$c.set; + var getInternalState$9 = InternalStateModule$c.getterFor(REGEXP_STRING_ITERATOR); + var RegExpPrototype$1 = RegExp.prototype; + var nativeMatchAll = ''.matchAll; + var WORKS_WITH_NON_GLOBAL_REGEX = !!nativeMatchAll && !fails$d(function () { + 'a'.matchAll(/./); + }); // eslint-disable-next-line max-len -- ignore + + var $RegExpStringIterator = createIteratorConstructor$5(function RegExpStringIterator(regexp, string, global, fullUnicode) { + setInternalState$c(this, { + type: REGEXP_STRING_ITERATOR, + regexp: regexp, + string: string, + global: global, + unicode: fullUnicode, + done: false + }); + }, REGEXP_STRING, function next() { + var state = getInternalState$9(this); + if (state.done) return { + value: undefined, + done: true + }; + var R = state.regexp; + var S = state.string; + var match = regExpExec$2(R, S); + if (match === null) return { + value: undefined, + done: state.done = true + }; + + if (state.global) { + if (toString$a(match[0]) === '') R.lastIndex = advanceStringIndex$2(S, toLength$5(R.lastIndex), state.unicode); + return { + value: match, + done: false + }; + } + + state.done = true; + return { + value: match, + done: false + }; + }); + + var $matchAll = function (string) { + var R = anObject$18(this); + var S = toString$a(string); + var C, flagsValue, flags, matcher, global, fullUnicode; + C = speciesConstructor$b(R, RegExp); + flagsValue = R.flags; + + if (flagsValue === undefined && R instanceof RegExp && !('flags' in RegExpPrototype$1)) { + flagsValue = getRegExpFlags$1.call(R); + } + + flags = flagsValue === undefined ? '' : toString$a(flagsValue); + matcher = new C(C === RegExp ? R.source : R, flags); + global = !!~flags.indexOf('g'); + fullUnicode = !!~flags.indexOf('u'); + matcher.lastIndex = toLength$5(R.lastIndex); + return new $RegExpStringIterator(matcher, S, global, fullUnicode); + }; // `String.prototype.matchAll` method + // https://tc39.es/ecma262/#sec-string.prototype.matchall + + + $$2k({ + target: 'String', + proto: true, + forced: WORKS_WITH_NON_GLOBAL_REGEX + }, { + matchAll: function matchAll(regexp) { + var O = requireObjectCoercible$8(this); + var flags, S, matcher, rx; + + if (regexp != null) { + if (isRegExp$2(regexp)) { + flags = toString$a(requireObjectCoercible$8('flags' in RegExpPrototype$1 ? regexp.flags : getRegExpFlags$1.call(regexp))); + if (!~flags.indexOf('g')) throw TypeError('`.matchAll` does not allow non-global regexes'); + } + + if (WORKS_WITH_NON_GLOBAL_REGEX) return nativeMatchAll.apply(O, arguments); + matcher = getMethod$c(regexp, MATCH_ALL); + if (matcher === undefined && IS_PURE$D && classof$2(regexp) == 'RegExp') matcher = $matchAll; + if (matcher) return matcher.call(regexp, O); + } else if (WORKS_WITH_NON_GLOBAL_REGEX) return nativeMatchAll.apply(O, arguments); + + S = toString$a(O); + rx = new RegExp(regexp, 'g'); + return rx[MATCH_ALL](S); + } + }); + MATCH_ALL in RegExpPrototype$1 || redefine$4(RegExpPrototype$1, MATCH_ALL, $matchAll); + + // https://github.com/zloirock/core-js/issues/280 + var userAgent$1 = engineUserAgent; + + var stringPadWebkitBug = /Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(userAgent$1); + + var $$2j = _export; + + var $padEnd = stringPad.end; + + var WEBKIT_BUG$1 = stringPadWebkitBug; // `String.prototype.padEnd` method + // https://tc39.es/ecma262/#sec-string.prototype.padend + + + $$2j({ + target: 'String', + proto: true, + forced: WEBKIT_BUG$1 + }, { + padEnd: function padEnd(maxLength + /* , fillString = ' ' */ + ) { + return $padEnd(this, maxLength, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + var $$2i = _export; + + var $padStart = stringPad.start; + + var WEBKIT_BUG = stringPadWebkitBug; // `String.prototype.padStart` method + // https://tc39.es/ecma262/#sec-string.prototype.padstart + + + $$2i({ + target: 'String', + proto: true, + forced: WEBKIT_BUG + }, { + padStart: function padStart(maxLength + /* , fillString = ' ' */ + ) { + return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + var $$2h = _export; + + var toIndexedObject = toIndexedObject$d; + + var toObject$d = toObject$A; + + var toString$9 = toString$t; + + var lengthOfArrayLike$9 = lengthOfArrayLike$q; + + var ArrayPrototype = Array.prototype; + var push$3 = ArrayPrototype.push; + var join = ArrayPrototype.join; // `String.raw` method + // https://tc39.es/ecma262/#sec-string.raw + + $$2h({ + target: 'String', + stat: true + }, { + raw: function raw(template) { + var rawTemplate = toIndexedObject(toObject$d(template).raw); + var literalSegments = lengthOfArrayLike$9(rawTemplate); + var argumentsLength = arguments.length; + var elements = []; + var i = 0; + + while (literalSegments > i) { + push$3.call(elements, toString$9(rawTemplate[i++])); + if (i === literalSegments) return join.call(elements, ''); + if (i < argumentsLength) push$3.call(elements, toString$9(arguments[i])); + } + } + }); + + var $$2g = _export; + + var repeat = stringRepeat; // `String.prototype.repeat` method + // https://tc39.es/ecma262/#sec-string.prototype.repeat + + + $$2g({ + target: 'String', + proto: true + }, { + repeat: repeat + }); + + var toObject$c = toObject$A; + + var floor$3 = Math.floor; + var replace$1 = ''.replace; + var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d{1,2}|<[^>]*>)/g; + var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d{1,2})/g; // `GetSubstitution` abstract operation + // https://tc39.es/ecma262/#sec-getsubstitution + + var getSubstitution$2 = function (matched, str, position, captures, namedCaptures, replacement) { + var tailPos = position + matched.length; + var m = captures.length; + var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED; + + if (namedCaptures !== undefined) { + namedCaptures = toObject$c(namedCaptures); + symbols = SUBSTITUTION_SYMBOLS; + } + + return replace$1.call(replacement, symbols, function (match, ch) { + var capture; + + switch (ch.charAt(0)) { + case '$': + return '$'; + + case '&': + return matched; + + case '`': + return str.slice(0, position); + + case "'": + return str.slice(tailPos); + + case '<': + capture = namedCaptures[ch.slice(1, -1)]; + break; + + default: + // \d\d? + var n = +ch; + if (n === 0) return match; + + if (n > m) { + var f = floor$3(n / 10); + if (f === 0) return match; + if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1); + return match; + } + + capture = captures[n - 1]; + } + + return capture === undefined ? '' : capture; + }); + }; + + var fixRegExpWellKnownSymbolLogic$2 = fixRegexpWellKnownSymbolLogic; + + var fails$c = fails$15; + + var anObject$17 = anObject$1C; + + var isCallable$8 = isCallable$z; + + var toIntegerOrInfinity$4 = toIntegerOrInfinity$i; + + var toLength$4 = toLength$d; + + var toString$8 = toString$t; + + var requireObjectCoercible$7 = requireObjectCoercible$j; + + var advanceStringIndex$1 = advanceStringIndex$4; + + var getMethod$b = getMethod$h; + + var getSubstitution$1 = getSubstitution$2; + + var regExpExec$1 = regexpExecAbstract; + + var wellKnownSymbol$e = wellKnownSymbol$G; + + var REPLACE$1 = wellKnownSymbol$e('replace'); + var max$3 = Math.max; + var min$4 = Math.min; + + var maybeToString = function (it) { + return it === undefined ? it : String(it); + }; // IE <= 11 replaces $0 with the whole match, as if it was $& + // https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0 + + + var REPLACE_KEEPS_$0 = function () { + // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing + return 'a'.replace(/./, '$0') === '$0'; + }(); // Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string + + + var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = function () { + if (/./[REPLACE$1]) { + return /./[REPLACE$1]('a', '$0') === ''; + } + + return false; + }(); + + var REPLACE_SUPPORTS_NAMED_GROUPS = !fails$c(function () { + var re = /./; + + re.exec = function () { + var result = []; + result.groups = { + a: '7' + }; + return result; + }; // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive + + + return ''.replace(re, '$') !== '7'; + }); // @@replace logic + + fixRegExpWellKnownSymbolLogic$2('replace', function (_, nativeReplace, maybeCallNative) { + var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0'; + return [// `String.prototype.replace` method + // https://tc39.es/ecma262/#sec-string.prototype.replace + function replace(searchValue, replaceValue) { + var O = requireObjectCoercible$7(this); + var replacer = searchValue == undefined ? undefined : getMethod$b(searchValue, REPLACE$1); + return replacer ? replacer.call(searchValue, O, replaceValue) : nativeReplace.call(toString$8(O), searchValue, replaceValue); + }, // `RegExp.prototype[@@replace]` method + // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace + function (string, replaceValue) { + var rx = anObject$17(this); + var S = toString$8(string); + + if (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1 && replaceValue.indexOf('$<') === -1) { + var res = maybeCallNative(nativeReplace, rx, S, replaceValue); + if (res.done) return res.value; + } + + var functionalReplace = isCallable$8(replaceValue); + if (!functionalReplace) replaceValue = toString$8(replaceValue); + var global = rx.global; + + if (global) { + var fullUnicode = rx.unicode; + rx.lastIndex = 0; + } + + var results = []; + + while (true) { + var result = regExpExec$1(rx, S); + if (result === null) break; + results.push(result); + if (!global) break; + var matchStr = toString$8(result[0]); + if (matchStr === '') rx.lastIndex = advanceStringIndex$1(S, toLength$4(rx.lastIndex), fullUnicode); + } + + var accumulatedResult = ''; + var nextSourcePosition = 0; + + for (var i = 0; i < results.length; i++) { + result = results[i]; + var matched = toString$8(result[0]); + var position = max$3(min$4(toIntegerOrInfinity$4(result.index), S.length), 0); + var captures = []; // NOTE: This is equivalent to + // captures = result.slice(1).map(maybeToString) + // but for some reason `nativeSlice.call(result, 1, result.length)` (called in + // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and + // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it. + + for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j])); + + var namedCaptures = result.groups; + + if (functionalReplace) { + var replacerArgs = [matched].concat(captures, position, S); + if (namedCaptures !== undefined) replacerArgs.push(namedCaptures); + var replacement = toString$8(replaceValue.apply(undefined, replacerArgs)); + } else { + replacement = getSubstitution$1(matched, S, position, captures, namedCaptures, replaceValue); + } + + if (position >= nextSourcePosition) { + accumulatedResult += S.slice(nextSourcePosition, position) + replacement; + nextSourcePosition = position + matched.length; + } + } + + return accumulatedResult + S.slice(nextSourcePosition); + }]; + }, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE); + + var $$2f = _export; + + var requireObjectCoercible$6 = requireObjectCoercible$j; + + var isCallable$7 = isCallable$z; + + var isRegExp$1 = isRegexp; + + var toString$7 = toString$t; + + var getMethod$a = getMethod$h; + + var getRegExpFlags = regexpFlags$1; + + var getSubstitution = getSubstitution$2; + + var wellKnownSymbol$d = wellKnownSymbol$G; + + var REPLACE = wellKnownSymbol$d('replace'); + var RegExpPrototype = RegExp.prototype; + var max$2 = Math.max; + + var stringIndexOf = function (string, searchValue, fromIndex) { + if (fromIndex > string.length) return -1; + if (searchValue === '') return fromIndex; + return string.indexOf(searchValue, fromIndex); + }; // `String.prototype.replaceAll` method + // https://tc39.es/ecma262/#sec-string.prototype.replaceall + + + $$2f({ + target: 'String', + proto: true + }, { + replaceAll: function replaceAll(searchValue, replaceValue) { + var O = requireObjectCoercible$6(this); + var IS_REG_EXP, flags, replacer, string, searchString, functionalReplace, searchLength, advanceBy, replacement; + var position = 0; + var endOfLastMatch = 0; + var result = ''; + + if (searchValue != null) { + IS_REG_EXP = isRegExp$1(searchValue); + + if (IS_REG_EXP) { + flags = toString$7(requireObjectCoercible$6('flags' in RegExpPrototype ? searchValue.flags : getRegExpFlags.call(searchValue))); + if (!~flags.indexOf('g')) throw TypeError('`.replaceAll` does not allow non-global regexes'); + } + + replacer = getMethod$a(searchValue, REPLACE); + + if (replacer) { + return replacer.call(searchValue, O, replaceValue); + } + } + + string = toString$7(O); + searchString = toString$7(searchValue); + functionalReplace = isCallable$7(replaceValue); + if (!functionalReplace) replaceValue = toString$7(replaceValue); + searchLength = searchString.length; + advanceBy = max$2(1, searchLength); + position = stringIndexOf(string, searchString, 0); + + while (position !== -1) { + if (functionalReplace) { + replacement = toString$7(replaceValue(searchString, position, string)); + } else { + replacement = getSubstitution(searchString, string, position, [], undefined, replaceValue); + } + + result += string.slice(endOfLastMatch, position) + replacement; + endOfLastMatch = position + searchLength; + position = stringIndexOf(string, searchString, position + advanceBy); + } + + if (endOfLastMatch < string.length) { + result += string.slice(endOfLastMatch); + } + + return result; + } + }); + + var fixRegExpWellKnownSymbolLogic$1 = fixRegexpWellKnownSymbolLogic; + + var anObject$16 = anObject$1C; + + var requireObjectCoercible$5 = requireObjectCoercible$j; + + var sameValue = sameValue$1; + + var toString$6 = toString$t; + + var getMethod$9 = getMethod$h; + + var regExpExec = regexpExecAbstract; // @@search logic + + + fixRegExpWellKnownSymbolLogic$1('search', function (SEARCH, nativeSearch, maybeCallNative) { + return [// `String.prototype.search` method + // https://tc39.es/ecma262/#sec-string.prototype.search + function search(regexp) { + var O = requireObjectCoercible$5(this); + var searcher = regexp == undefined ? undefined : getMethod$9(regexp, SEARCH); + return searcher ? searcher.call(regexp, O) : new RegExp(regexp)[SEARCH](toString$6(O)); + }, // `RegExp.prototype[@@search]` method + // https://tc39.es/ecma262/#sec-regexp.prototype-@@search + function (string) { + var rx = anObject$16(this); + var S = toString$6(string); + var res = maybeCallNative(nativeSearch, rx, S); + if (res.done) return res.value; + var previousLastIndex = rx.lastIndex; + if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0; + var result = regExpExec(rx, S); + if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex; + return result === null ? -1 : result.index; + }]; + }); + + var fixRegExpWellKnownSymbolLogic = fixRegexpWellKnownSymbolLogic; + + var isRegExp = isRegexp; + + var anObject$15 = anObject$1C; + + var requireObjectCoercible$4 = requireObjectCoercible$j; + + var speciesConstructor$a = speciesConstructor$f; + + var advanceStringIndex = advanceStringIndex$4; + + var toLength$3 = toLength$d; + + var toString$5 = toString$t; + + var getMethod$8 = getMethod$h; + + var callRegExpExec = regexpExecAbstract; + + var regexpExec = regexpExec$3; + + var stickyHelpers = regexpStickyHelpers; + + var fails$b = fails$15; + + var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y; + var arrayPush = [].push; + var min$3 = Math.min; + var MAX_UINT32 = 0xFFFFFFFF; // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec + // Weex JS has frozen built-in prototypes, so use try / catch wrapper + + var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails$b(function () { + // eslint-disable-next-line regexp/no-empty-group -- required for testing + var re = /(?:)/; + var originalExec = re.exec; + + re.exec = function () { + return originalExec.apply(this, arguments); + }; + + var result = 'ab'.split(re); + return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b'; + }); // @@split logic + + fixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) { + var internalSplit; + + if ('abbc'.split(/(b)*/)[1] == 'c' || // eslint-disable-next-line regexp/no-empty-group -- required for testing + 'test'.split(/(?:)/, -1).length != 4 || 'ab'.split(/(?:ab)*/).length != 2 || '.'.split(/(.?)(.?)/).length != 4 || // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing + '.'.split(/()()/).length > 1 || ''.split(/.?/).length) { + // based on es5-shim implementation, need to rework it + internalSplit = function (separator, limit) { + var string = toString$5(requireObjectCoercible$4(this)); + var lim = limit === undefined ? MAX_UINT32 : limit >>> 0; + if (lim === 0) return []; + if (separator === undefined) return [string]; // If `separator` is not a regex, use native split + + if (!isRegExp(separator)) { + return nativeSplit.call(string, separator, lim); + } + + var output = []; + var flags = (separator.ignoreCase ? 'i' : '') + (separator.multiline ? 'm' : '') + (separator.unicode ? 'u' : '') + (separator.sticky ? 'y' : ''); + var lastLastIndex = 0; // Make `global` and avoid `lastIndex` issues by working with a copy + + var separatorCopy = new RegExp(separator.source, flags + 'g'); + var match, lastIndex, lastLength; + + while (match = regexpExec.call(separatorCopy, string)) { + lastIndex = separatorCopy.lastIndex; + + if (lastIndex > lastLastIndex) { + output.push(string.slice(lastLastIndex, match.index)); + if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1)); + lastLength = match[0].length; + lastLastIndex = lastIndex; + if (output.length >= lim) break; + } + + if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop + } + + if (lastLastIndex === string.length) { + if (lastLength || !separatorCopy.test('')) output.push(''); + } else output.push(string.slice(lastLastIndex)); + + return output.length > lim ? output.slice(0, lim) : output; + }; // Chakra, V8 + + } else if ('0'.split(undefined, 0).length) { + internalSplit = function (separator, limit) { + return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit); + }; + } else internalSplit = nativeSplit; + + return [// `String.prototype.split` method + // https://tc39.es/ecma262/#sec-string.prototype.split + function split(separator, limit) { + var O = requireObjectCoercible$4(this); + var splitter = separator == undefined ? undefined : getMethod$8(separator, SPLIT); + return splitter ? splitter.call(separator, O, limit) : internalSplit.call(toString$5(O), separator, limit); + }, // `RegExp.prototype[@@split]` method + // https://tc39.es/ecma262/#sec-regexp.prototype-@@split + // + // NOTE: This cannot be properly polyfilled in engines that don't support + // the 'y' flag. + function (string, limit) { + var rx = anObject$15(this); + var S = toString$5(string); + var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit); + if (res.done) return res.value; + var C = speciesConstructor$a(rx, RegExp); + var unicodeMatching = rx.unicode; + var flags = (rx.ignoreCase ? 'i' : '') + (rx.multiline ? 'm' : '') + (rx.unicode ? 'u' : '') + (UNSUPPORTED_Y ? 'g' : 'y'); // ^(? + rx + ) is needed, in combination with some S slicing, to + // simulate the 'y' flag. + + var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags); + var lim = limit === undefined ? MAX_UINT32 : limit >>> 0; + if (lim === 0) return []; + if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : []; + var p = 0; + var q = 0; + var A = []; + + while (q < S.length) { + splitter.lastIndex = UNSUPPORTED_Y ? 0 : q; + var z = callRegExpExec(splitter, UNSUPPORTED_Y ? S.slice(q) : S); + var e; + + if (z === null || (e = min$3(toLength$3(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p) { + q = advanceStringIndex(S, q, unicodeMatching); + } else { + A.push(S.slice(p, q)); + if (A.length === lim) return A; + + for (var i = 1; i <= z.length - 1; i++) { + A.push(z[i]); + if (A.length === lim) return A; + } + + q = p = e; + } + } + + A.push(S.slice(p)); + return A; + }]; + }, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y); + + var $$2e = _export; + + var getOwnPropertyDescriptor$1 = objectGetOwnPropertyDescriptor.f; + + var toLength$2 = toLength$d; + + var toString$4 = toString$t; + + var notARegExp = notARegexp; + + var requireObjectCoercible$3 = requireObjectCoercible$j; + + var correctIsRegExpLogic = correctIsRegexpLogic; + + + var $startsWith = ''.startsWith; + var min$2 = Math.min; + var CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('startsWith'); // https://github.com/zloirock/core-js/pull/702 + + var MDN_POLYFILL_BUG = !CORRECT_IS_REGEXP_LOGIC && !!function () { + var descriptor = getOwnPropertyDescriptor$1(String.prototype, 'startsWith'); + return descriptor && !descriptor.writable; + }(); // `String.prototype.startsWith` method + // https://tc39.es/ecma262/#sec-string.prototype.startswith + + $$2e({ + target: 'String', + proto: true, + forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC + }, { + startsWith: function startsWith(searchString + /* , position = 0 */ + ) { + var that = toString$4(requireObjectCoercible$3(this)); + notARegExp(searchString); + var index = toLength$2(min$2(arguments.length > 1 ? arguments[1] : undefined, that.length)); + var search = toString$4(searchString); + return $startsWith ? $startsWith.call(that, search, index) : that.slice(index, index + search.length) === search; + } + }); + + var $$2d = _export; + + var requireObjectCoercible$2 = requireObjectCoercible$j; + + var toIntegerOrInfinity$3 = toIntegerOrInfinity$i; + + var toString$3 = toString$t; + + var slice$1 = ''.slice; + var max$1 = Math.max; + var min$1 = Math.min; // eslint-disable-next-line unicorn/prefer-string-slice -- required for testing + + var FORCED$8 = !''.substr || 'ab'.substr(-1) !== 'b'; // `String.prototype.substr` method + // https://tc39.es/ecma262/#sec-string.prototype.substr + + $$2d({ + target: 'String', + proto: true, + forced: FORCED$8 + }, { + substr: function substr(start, length) { + var that = toString$3(requireObjectCoercible$2(this)); + var size = that.length; + var intStart = toIntegerOrInfinity$3(start); + var intLength, intEnd; + if (intStart === Infinity) intStart = 0; + if (intStart < 0) intStart = max$1(size + intStart, 0); + intLength = length === undefined ? size : toIntegerOrInfinity$3(length); + if (intLength <= 0 || intLength === Infinity) return ''; + intEnd = min$1(intStart + intLength, size); + return intStart >= intEnd ? '' : slice$1.call(that, intStart, intEnd); + } + }); + + var PROPER_FUNCTION_NAME$1 = functionName.PROPER; + + var fails$a = fails$15; + + var whitespaces = whitespaces$4; + + var non = '\u200B\u0085\u180E'; // check that a method works with the correct list + // of whitespaces and has a correct name + + var stringTrimForced = function (METHOD_NAME) { + return fails$a(function () { + return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() !== non || PROPER_FUNCTION_NAME$1 && whitespaces[METHOD_NAME].name !== METHOD_NAME; + }); + }; + + var $$2c = _export; + + var $trim = stringTrim.trim; + + var forcedStringTrimMethod$2 = stringTrimForced; // `String.prototype.trim` method + // https://tc39.es/ecma262/#sec-string.prototype.trim + + + $$2c({ + target: 'String', + proto: true, + forced: forcedStringTrimMethod$2('trim') + }, { + trim: function trim() { + return $trim(this); + } + }); + + var $$2b = _export; + + var $trimEnd = stringTrim.end; + + var forcedStringTrimMethod$1 = stringTrimForced; + + var FORCED$7 = forcedStringTrimMethod$1('trimEnd'); + var trimEnd = FORCED$7 ? function trimEnd() { + return $trimEnd(this); // eslint-disable-next-line es/no-string-prototype-trimstart-trimend -- safe + } : ''.trimEnd; // `String.prototype.{ trimEnd, trimRight }` methods + // https://tc39.es/ecma262/#sec-string.prototype.trimend + // https://tc39.es/ecma262/#String.prototype.trimright + + $$2b({ + target: 'String', + proto: true, + name: 'trimEnd', + forced: FORCED$7 + }, { + trimEnd: trimEnd, + trimRight: trimEnd + }); + + var $$2a = _export; + + var $trimStart = stringTrim.start; + + var forcedStringTrimMethod = stringTrimForced; + + var FORCED$6 = forcedStringTrimMethod('trimStart'); + var trimStart = FORCED$6 ? function trimStart() { + return $trimStart(this); // eslint-disable-next-line es/no-string-prototype-trimstart-trimend -- safe + } : ''.trimStart; // `String.prototype.{ trimStart, trimLeft }` methods + // https://tc39.es/ecma262/#sec-string.prototype.trimstart + // https://tc39.es/ecma262/#String.prototype.trimleft + + $$2a({ + target: 'String', + proto: true, + name: 'trimStart', + forced: FORCED$6 + }, { + trimStart: trimStart, + trimLeft: trimStart + }); + + var requireObjectCoercible$1 = requireObjectCoercible$j; + + var toString$2 = toString$t; + + var quot = /"/g; // `CreateHTML` abstract operation + // https://tc39.es/ecma262/#sec-createhtml + + var createHtml = function (string, tag, attribute, value) { + var S = toString$2(requireObjectCoercible$1(string)); + var p1 = '<' + tag; + if (attribute !== '') p1 += ' ' + attribute + '="' + toString$2(value).replace(quot, '"') + '"'; + return p1 + '>' + S + ''; + }; + + var fails$9 = fails$15; // check the existence of a method, lowercase + // of a tag and escaping quotes in arguments + + + var stringHtmlForced = function (METHOD_NAME) { + return fails$9(function () { + var test = ''[METHOD_NAME]('"'); + return test !== test.toLowerCase() || test.split('"').length > 3; + }); + }; + + var $$29 = _export; + + var createHTML$c = createHtml; + + var forcedStringHTMLMethod$c = stringHtmlForced; // `String.prototype.anchor` method + // https://tc39.es/ecma262/#sec-string.prototype.anchor + + + $$29({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod$c('anchor') + }, { + anchor: function anchor(name) { + return createHTML$c(this, 'a', 'name', name); + } + }); + + var $$28 = _export; + + var createHTML$b = createHtml; + + var forcedStringHTMLMethod$b = stringHtmlForced; // `String.prototype.big` method + // https://tc39.es/ecma262/#sec-string.prototype.big + + + $$28({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod$b('big') + }, { + big: function big() { + return createHTML$b(this, 'big', '', ''); + } + }); + + var $$27 = _export; + + var createHTML$a = createHtml; + + var forcedStringHTMLMethod$a = stringHtmlForced; // `String.prototype.blink` method + // https://tc39.es/ecma262/#sec-string.prototype.blink + + + $$27({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod$a('blink') + }, { + blink: function blink() { + return createHTML$a(this, 'blink', '', ''); + } + }); + + var $$26 = _export; + + var createHTML$9 = createHtml; + + var forcedStringHTMLMethod$9 = stringHtmlForced; // `String.prototype.bold` method + // https://tc39.es/ecma262/#sec-string.prototype.bold + + + $$26({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod$9('bold') + }, { + bold: function bold() { + return createHTML$9(this, 'b', '', ''); + } + }); + + var $$25 = _export; + + var createHTML$8 = createHtml; + + var forcedStringHTMLMethod$8 = stringHtmlForced; // `String.prototype.fixed` method + // https://tc39.es/ecma262/#sec-string.prototype.fixed + + + $$25({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod$8('fixed') + }, { + fixed: function fixed() { + return createHTML$8(this, 'tt', '', ''); + } + }); + + var $$24 = _export; + + var createHTML$7 = createHtml; + + var forcedStringHTMLMethod$7 = stringHtmlForced; // `String.prototype.fontcolor` method + // https://tc39.es/ecma262/#sec-string.prototype.fontcolor + + + $$24({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod$7('fontcolor') + }, { + fontcolor: function fontcolor(color) { + return createHTML$7(this, 'font', 'color', color); + } + }); + + var $$23 = _export; + + var createHTML$6 = createHtml; + + var forcedStringHTMLMethod$6 = stringHtmlForced; // `String.prototype.fontsize` method + // https://tc39.es/ecma262/#sec-string.prototype.fontsize + + + $$23({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod$6('fontsize') + }, { + fontsize: function fontsize(size) { + return createHTML$6(this, 'font', 'size', size); + } + }); + + var $$22 = _export; + + var createHTML$5 = createHtml; + + var forcedStringHTMLMethod$5 = stringHtmlForced; // `String.prototype.italics` method + // https://tc39.es/ecma262/#sec-string.prototype.italics + + + $$22({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod$5('italics') + }, { + italics: function italics() { + return createHTML$5(this, 'i', '', ''); + } + }); + + var $$21 = _export; + + var createHTML$4 = createHtml; + + var forcedStringHTMLMethod$4 = stringHtmlForced; // `String.prototype.link` method + // https://tc39.es/ecma262/#sec-string.prototype.link + + + $$21({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod$4('link') + }, { + link: function link(url) { + return createHTML$4(this, 'a', 'href', url); + } + }); + + var $$20 = _export; + + var createHTML$3 = createHtml; + + var forcedStringHTMLMethod$3 = stringHtmlForced; // `String.prototype.small` method + // https://tc39.es/ecma262/#sec-string.prototype.small + + + $$20({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod$3('small') + }, { + small: function small() { + return createHTML$3(this, 'small', '', ''); + } + }); + + var $$1$ = _export; + + var createHTML$2 = createHtml; + + var forcedStringHTMLMethod$2 = stringHtmlForced; // `String.prototype.strike` method + // https://tc39.es/ecma262/#sec-string.prototype.strike + + + $$1$({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod$2('strike') + }, { + strike: function strike() { + return createHTML$2(this, 'strike', '', ''); + } + }); + + var $$1_ = _export; + + var createHTML$1 = createHtml; + + var forcedStringHTMLMethod$1 = stringHtmlForced; // `String.prototype.sub` method + // https://tc39.es/ecma262/#sec-string.prototype.sub + + + $$1_({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod$1('sub') + }, { + sub: function sub() { + return createHTML$1(this, 'sub', '', ''); + } + }); + + var $$1Z = _export; + + var createHTML = createHtml; + + var forcedStringHTMLMethod = stringHtmlForced; // `String.prototype.sup` method + // https://tc39.es/ecma262/#sec-string.prototype.sup + + + $$1Z({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod('sup') + }, { + sup: function sup() { + return createHTML(this, 'sup', '', ''); + } + }); + + var typedArrayConstructor = {exports: {}}; + + /* eslint-disable no-new -- required for testing */ + + var global$g = global$R; + + var fails$8 = fails$15; + + var checkCorrectnessOfIteration = checkCorrectnessOfIteration$4; + + var NATIVE_ARRAY_BUFFER_VIEWS$1 = arrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS; + + var ArrayBuffer$2 = global$g.ArrayBuffer; + var Int8Array$2 = global$g.Int8Array; + var typedArrayConstructorsRequireWrappers = !NATIVE_ARRAY_BUFFER_VIEWS$1 || !fails$8(function () { + Int8Array$2(1); + }) || !fails$8(function () { + new Int8Array$2(-1); + }) || !checkCorrectnessOfIteration(function (iterable) { + new Int8Array$2(); + new Int8Array$2(null); + new Int8Array$2(1.5); + new Int8Array$2(iterable); + }, true) || fails$8(function () { + // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill + return new Int8Array$2(new ArrayBuffer$2(2), 1, undefined).length !== 1; + }); + + var toIntegerOrInfinity$2 = toIntegerOrInfinity$i; + + var toPositiveInteger$5 = function (it) { + var result = toIntegerOrInfinity$2(it); + if (result < 0) throw RangeError("The argument can't be less than 0"); + return result; + }; + + var toPositiveInteger$4 = toPositiveInteger$5; + + var toOffset$2 = function (it, BYTES) { + var offset = toPositiveInteger$4(it); + if (offset % BYTES) throw RangeError('Wrong offset'); + return offset; + }; + + var aConstructor$2 = aConstructor$5; + + var toObject$b = toObject$A; + + var lengthOfArrayLike$8 = lengthOfArrayLike$q; + + var getIterator$8 = getIterator$b; + + var getIteratorMethod$5 = getIteratorMethod$9; + + var isArrayIteratorMethod = isArrayIteratorMethod$3; + + var bind$h = functionBindContext; + + var aTypedArrayConstructor$4 = arrayBufferViewCore.aTypedArrayConstructor; + + var typedArrayFrom$2 = function from(source + /* , mapfn, thisArg */ + ) { + var C = aConstructor$2(this); + var O = toObject$b(source); + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : undefined; + var mapping = mapfn !== undefined; + var iteratorMethod = getIteratorMethod$5(O); + var i, length, result, step, iterator, next; + + if (iteratorMethod && !isArrayIteratorMethod(iteratorMethod)) { + iterator = getIterator$8(O, iteratorMethod); + next = iterator.next; + O = []; + + while (!(step = next.call(iterator)).done) { + O.push(step.value); + } + } + + if (mapping && argumentsLength > 2) { + mapfn = bind$h(mapfn, arguments[2], 2); + } + + length = lengthOfArrayLike$8(O); + result = new (aTypedArrayConstructor$4(C))(length); + + for (i = 0; length > i; i++) { + result[i] = mapping ? mapfn(O[i], i) : O[i]; + } + + return result; + }; + + var $$1Y = _export; + + var global$f = global$R; + + var DESCRIPTORS$5 = descriptors; + + var TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS$3 = typedArrayConstructorsRequireWrappers; + + var ArrayBufferViewCore$w = arrayBufferViewCore; + + var ArrayBufferModule = arrayBuffer; + + var anInstance$6 = anInstance$b; + + var createPropertyDescriptor$1 = createPropertyDescriptor$9; + + var createNonEnumerableProperty$6 = createNonEnumerableProperty$h; + + var isIntegralNumber = isIntegralNumber$3; + + var toLength$1 = toLength$d; + + var toIndex = toIndex$2; + + var toOffset$1 = toOffset$2; + + var toPropertyKey$1 = toPropertyKey$9; + + var hasOwn$6 = hasOwnProperty_1; + + var classof$1 = classof$b; + + var isObject$6 = isObject$C; + + var isSymbol = isSymbol$5; + + var create$6 = objectCreate$1; + + var setPrototypeOf = objectSetPrototypeOf$1; + + var getOwnPropertyNames$1 = objectGetOwnPropertyNames.f; + + var typedArrayFrom$1 = typedArrayFrom$2; + + var forEach$1 = arrayIteration.forEach; + + var setSpecies$1 = setSpecies$7; + + var definePropertyModule = objectDefineProperty; + + var getOwnPropertyDescriptorModule = objectGetOwnPropertyDescriptor; + + var InternalStateModule$b = internalState; + + var inheritIfRequired = inheritIfRequired$4; + + var getInternalState$8 = InternalStateModule$b.get; + var setInternalState$b = InternalStateModule$b.set; + var nativeDefineProperty = definePropertyModule.f; + var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + var round = Math.round; + var RangeError$1 = global$f.RangeError; + var ArrayBuffer$1 = ArrayBufferModule.ArrayBuffer; + var DataView$1 = ArrayBufferModule.DataView; + var NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore$w.NATIVE_ARRAY_BUFFER_VIEWS; + var TYPED_ARRAY_CONSTRUCTOR$1 = ArrayBufferViewCore$w.TYPED_ARRAY_CONSTRUCTOR; + var TYPED_ARRAY_TAG = ArrayBufferViewCore$w.TYPED_ARRAY_TAG; + var TypedArray = ArrayBufferViewCore$w.TypedArray; + var TypedArrayPrototype = ArrayBufferViewCore$w.TypedArrayPrototype; + var aTypedArrayConstructor$3 = ArrayBufferViewCore$w.aTypedArrayConstructor; + var isTypedArray = ArrayBufferViewCore$w.isTypedArray; + var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT'; + var WRONG_LENGTH = 'Wrong length'; + + var fromList = function (C, list) { + var index = 0; + var length = list.length; + var result = new (aTypedArrayConstructor$3(C))(length); + + while (length > index) result[index] = list[index++]; + + return result; + }; + + var addGetter = function (it, key) { + nativeDefineProperty(it, key, { + get: function () { + return getInternalState$8(this)[key]; + } + }); + }; + + var isArrayBuffer = function (it) { + var klass; + return it instanceof ArrayBuffer$1 || (klass = classof$1(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer'; + }; + + var isTypedArrayIndex = function (target, key) { + return isTypedArray(target) && !isSymbol(key) && key in target && isIntegralNumber(+key) && key >= 0; + }; + + var wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) { + key = toPropertyKey$1(key); + return isTypedArrayIndex(target, key) ? createPropertyDescriptor$1(2, target[key]) : nativeGetOwnPropertyDescriptor(target, key); + }; + + var wrappedDefineProperty = function defineProperty(target, key, descriptor) { + key = toPropertyKey$1(key); + + if (isTypedArrayIndex(target, key) && isObject$6(descriptor) && hasOwn$6(descriptor, 'value') && !hasOwn$6(descriptor, 'get') && !hasOwn$6(descriptor, 'set') // TODO: add validation descriptor w/o calling accessors + && !descriptor.configurable && (!hasOwn$6(descriptor, 'writable') || descriptor.writable) && (!hasOwn$6(descriptor, 'enumerable') || descriptor.enumerable)) { + target[key] = descriptor.value; + return target; + } + + return nativeDefineProperty(target, key, descriptor); + }; + + if (DESCRIPTORS$5) { + if (!NATIVE_ARRAY_BUFFER_VIEWS) { + getOwnPropertyDescriptorModule.f = wrappedGetOwnPropertyDescriptor; + definePropertyModule.f = wrappedDefineProperty; + addGetter(TypedArrayPrototype, 'buffer'); + addGetter(TypedArrayPrototype, 'byteOffset'); + addGetter(TypedArrayPrototype, 'byteLength'); + addGetter(TypedArrayPrototype, 'length'); + } + + $$1Y({ + target: 'Object', + stat: true, + forced: !NATIVE_ARRAY_BUFFER_VIEWS + }, { + getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor, + defineProperty: wrappedDefineProperty + }); + + typedArrayConstructor.exports = function (TYPE, wrapper, CLAMPED) { + var BYTES = TYPE.match(/\d+$/)[0] / 8; + var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array'; + var GETTER = 'get' + TYPE; + var SETTER = 'set' + TYPE; + var NativeTypedArrayConstructor = global$f[CONSTRUCTOR_NAME]; + var TypedArrayConstructor = NativeTypedArrayConstructor; + var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype; + var exported = {}; + + var getter = function (that, index) { + var data = getInternalState$8(that); + return data.view[GETTER](index * BYTES + data.byteOffset, true); + }; + + var setter = function (that, index, value) { + var data = getInternalState$8(that); + if (CLAMPED) value = (value = round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF; + data.view[SETTER](index * BYTES + data.byteOffset, value, true); + }; + + var addElement = function (that, index) { + nativeDefineProperty(that, index, { + get: function () { + return getter(this, index); + }, + set: function (value) { + return setter(this, index, value); + }, + enumerable: true + }); + }; + + if (!NATIVE_ARRAY_BUFFER_VIEWS) { + TypedArrayConstructor = wrapper(function (that, data, offset, $length) { + anInstance$6(that, TypedArrayConstructor, CONSTRUCTOR_NAME); + var index = 0; + var byteOffset = 0; + var buffer, byteLength, length; + + if (!isObject$6(data)) { + length = toIndex(data); + byteLength = length * BYTES; + buffer = new ArrayBuffer$1(byteLength); + } else if (isArrayBuffer(data)) { + buffer = data; + byteOffset = toOffset$1(offset, BYTES); + var $len = data.byteLength; + + if ($length === undefined) { + if ($len % BYTES) throw RangeError$1(WRONG_LENGTH); + byteLength = $len - byteOffset; + if (byteLength < 0) throw RangeError$1(WRONG_LENGTH); + } else { + byteLength = toLength$1($length) * BYTES; + if (byteLength + byteOffset > $len) throw RangeError$1(WRONG_LENGTH); + } + + length = byteLength / BYTES; + } else if (isTypedArray(data)) { + return fromList(TypedArrayConstructor, data); + } else { + return typedArrayFrom$1.call(TypedArrayConstructor, data); + } + + setInternalState$b(that, { + buffer: buffer, + byteOffset: byteOffset, + byteLength: byteLength, + length: length, + view: new DataView$1(buffer) + }); + + while (index < length) addElement(that, index++); + }); + if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray); + TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create$6(TypedArrayPrototype); + } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS$3) { + TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) { + anInstance$6(dummy, TypedArrayConstructor, CONSTRUCTOR_NAME); + return inheritIfRequired(function () { + if (!isObject$6(data)) return new NativeTypedArrayConstructor(toIndex(data)); + if (isArrayBuffer(data)) return $length !== undefined ? new NativeTypedArrayConstructor(data, toOffset$1(typedArrayOffset, BYTES), $length) : typedArrayOffset !== undefined ? new NativeTypedArrayConstructor(data, toOffset$1(typedArrayOffset, BYTES)) : new NativeTypedArrayConstructor(data); + if (isTypedArray(data)) return fromList(TypedArrayConstructor, data); + return typedArrayFrom$1.call(TypedArrayConstructor, data); + }(), dummy, TypedArrayConstructor); + }); + if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray); + forEach$1(getOwnPropertyNames$1(NativeTypedArrayConstructor), function (key) { + if (!(key in TypedArrayConstructor)) { + createNonEnumerableProperty$6(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]); + } + }); + TypedArrayConstructor.prototype = TypedArrayConstructorPrototype; + } + + if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) { + createNonEnumerableProperty$6(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor); + } + + createNonEnumerableProperty$6(TypedArrayConstructorPrototype, TYPED_ARRAY_CONSTRUCTOR$1, TypedArrayConstructor); + + if (TYPED_ARRAY_TAG) { + createNonEnumerableProperty$6(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME); + } + + exported[CONSTRUCTOR_NAME] = TypedArrayConstructor; + $$1Y({ + global: true, + forced: TypedArrayConstructor != NativeTypedArrayConstructor, + sham: !NATIVE_ARRAY_BUFFER_VIEWS + }, exported); + + if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) { + createNonEnumerableProperty$6(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES); + } + + if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) { + createNonEnumerableProperty$6(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES); + } + + setSpecies$1(CONSTRUCTOR_NAME); + }; + } else typedArrayConstructor.exports = function () { + /* empty */ + }; + + var createTypedArrayConstructor$8 = typedArrayConstructor.exports; // `Float32Array` constructor + // https://tc39.es/ecma262/#sec-typedarray-objects + + + createTypedArrayConstructor$8('Float32', function (init) { + return function Float32Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; + }); + + var createTypedArrayConstructor$7 = typedArrayConstructor.exports; // `Float64Array` constructor + // https://tc39.es/ecma262/#sec-typedarray-objects + + + createTypedArrayConstructor$7('Float64', function (init) { + return function Float64Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; + }); + + var createTypedArrayConstructor$6 = typedArrayConstructor.exports; // `Int8Array` constructor + // https://tc39.es/ecma262/#sec-typedarray-objects + + + createTypedArrayConstructor$6('Int8', function (init) { + return function Int8Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; + }); + + var createTypedArrayConstructor$5 = typedArrayConstructor.exports; // `Int16Array` constructor + // https://tc39.es/ecma262/#sec-typedarray-objects + + + createTypedArrayConstructor$5('Int16', function (init) { + return function Int16Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; + }); + + var createTypedArrayConstructor$4 = typedArrayConstructor.exports; // `Int32Array` constructor + // https://tc39.es/ecma262/#sec-typedarray-objects + + + createTypedArrayConstructor$4('Int32', function (init) { + return function Int32Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; + }); + + var createTypedArrayConstructor$3 = typedArrayConstructor.exports; // `Uint8Array` constructor + // https://tc39.es/ecma262/#sec-typedarray-objects + + + createTypedArrayConstructor$3('Uint8', function (init) { + return function Uint8Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; + }); + + var createTypedArrayConstructor$2 = typedArrayConstructor.exports; // `Uint8ClampedArray` constructor + // https://tc39.es/ecma262/#sec-typedarray-objects + + + createTypedArrayConstructor$2('Uint8', function (init) { + return function Uint8ClampedArray(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; + }, true); + + var createTypedArrayConstructor$1 = typedArrayConstructor.exports; // `Uint16Array` constructor + // https://tc39.es/ecma262/#sec-typedarray-objects + + + createTypedArrayConstructor$1('Uint16', function (init) { + return function Uint16Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; + }); + + var createTypedArrayConstructor = typedArrayConstructor.exports; // `Uint32Array` constructor + // https://tc39.es/ecma262/#sec-typedarray-objects + + + createTypedArrayConstructor('Uint32', function (init) { + return function Uint32Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; + }); + + var ArrayBufferViewCore$v = arrayBufferViewCore; + + var lengthOfArrayLike$7 = lengthOfArrayLike$q; + + var toIntegerOrInfinity$1 = toIntegerOrInfinity$i; + + var aTypedArray$s = ArrayBufferViewCore$v.aTypedArray; + var exportTypedArrayMethod$t = ArrayBufferViewCore$v.exportTypedArrayMethod; // `%TypedArray%.prototype.at` method + // https://github.com/tc39/proposal-relative-indexing-method + + exportTypedArrayMethod$t('at', function at(index) { + var O = aTypedArray$s(this); + var len = lengthOfArrayLike$7(O); + var relativeIndex = toIntegerOrInfinity$1(index); + var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex; + return k < 0 || k >= len ? undefined : O[k]; + }); + + var ArrayBufferViewCore$u = arrayBufferViewCore; + + var $copyWithin = arrayCopyWithin; + + var aTypedArray$r = ArrayBufferViewCore$u.aTypedArray; + var exportTypedArrayMethod$s = ArrayBufferViewCore$u.exportTypedArrayMethod; // `%TypedArray%.prototype.copyWithin` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.copywithin + + exportTypedArrayMethod$s('copyWithin', function copyWithin(target, start + /* , end */ + ) { + return $copyWithin.call(aTypedArray$r(this), target, start, arguments.length > 2 ? arguments[2] : undefined); + }); + + var ArrayBufferViewCore$t = arrayBufferViewCore; + + var $every$1 = arrayIteration.every; + + var aTypedArray$q = ArrayBufferViewCore$t.aTypedArray; + var exportTypedArrayMethod$r = ArrayBufferViewCore$t.exportTypedArrayMethod; // `%TypedArray%.prototype.every` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.every + + exportTypedArrayMethod$r('every', function every(callbackfn + /* , thisArg */ + ) { + return $every$1(aTypedArray$q(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + }); + + var ArrayBufferViewCore$s = arrayBufferViewCore; + + var $fill = arrayFill$1; + + var aTypedArray$p = ArrayBufferViewCore$s.aTypedArray; + var exportTypedArrayMethod$q = ArrayBufferViewCore$s.exportTypedArrayMethod; // `%TypedArray%.prototype.fill` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill + // eslint-disable-next-line no-unused-vars -- required for `.length` + + exportTypedArrayMethod$q('fill', function fill(value + /* , start, end */ + ) { + return $fill.apply(aTypedArray$p(this), arguments); + }); + + var arrayFromConstructorAndList$3 = function (Constructor, list) { + var index = 0; + var length = list.length; + var result = new Constructor(length); + + while (length > index) result[index] = list[index++]; + + return result; + }; + + var ArrayBufferViewCore$r = arrayBufferViewCore; + + var speciesConstructor$9 = speciesConstructor$f; + + var TYPED_ARRAY_CONSTRUCTOR = ArrayBufferViewCore$r.TYPED_ARRAY_CONSTRUCTOR; + var aTypedArrayConstructor$2 = ArrayBufferViewCore$r.aTypedArrayConstructor; // a part of `TypedArraySpeciesCreate` abstract operation + // https://tc39.es/ecma262/#typedarray-species-create + + var typedArraySpeciesConstructor$5 = function (originalArray) { + return aTypedArrayConstructor$2(speciesConstructor$9(originalArray, originalArray[TYPED_ARRAY_CONSTRUCTOR])); + }; + + var arrayFromConstructorAndList$2 = arrayFromConstructorAndList$3; + + var typedArraySpeciesConstructor$4 = typedArraySpeciesConstructor$5; + + var typedArrayFromSpeciesAndList = function (instance, list) { + return arrayFromConstructorAndList$2(typedArraySpeciesConstructor$4(instance), list); + }; + + var ArrayBufferViewCore$q = arrayBufferViewCore; + + var $filter = arrayIteration.filter; + + var fromSpeciesAndList$3 = typedArrayFromSpeciesAndList; + + var aTypedArray$o = ArrayBufferViewCore$q.aTypedArray; + var exportTypedArrayMethod$p = ArrayBufferViewCore$q.exportTypedArrayMethod; // `%TypedArray%.prototype.filter` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.filter + + exportTypedArrayMethod$p('filter', function filter(callbackfn + /* , thisArg */ + ) { + var list = $filter(aTypedArray$o(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + return fromSpeciesAndList$3(this, list); + }); + + var ArrayBufferViewCore$p = arrayBufferViewCore; + + var $find$1 = arrayIteration.find; + + var aTypedArray$n = ArrayBufferViewCore$p.aTypedArray; + var exportTypedArrayMethod$o = ArrayBufferViewCore$p.exportTypedArrayMethod; // `%TypedArray%.prototype.find` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.find + + exportTypedArrayMethod$o('find', function find(predicate + /* , thisArg */ + ) { + return $find$1(aTypedArray$n(this), predicate, arguments.length > 1 ? arguments[1] : undefined); + }); + + var ArrayBufferViewCore$o = arrayBufferViewCore; + + var $findIndex = arrayIteration.findIndex; + + var aTypedArray$m = ArrayBufferViewCore$o.aTypedArray; + var exportTypedArrayMethod$n = ArrayBufferViewCore$o.exportTypedArrayMethod; // `%TypedArray%.prototype.findIndex` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.findindex + + exportTypedArrayMethod$n('findIndex', function findIndex(predicate + /* , thisArg */ + ) { + return $findIndex(aTypedArray$m(this), predicate, arguments.length > 1 ? arguments[1] : undefined); + }); + + var ArrayBufferViewCore$n = arrayBufferViewCore; + + var $forEach$1 = arrayIteration.forEach; + + var aTypedArray$l = ArrayBufferViewCore$n.aTypedArray; + var exportTypedArrayMethod$m = ArrayBufferViewCore$n.exportTypedArrayMethod; // `%TypedArray%.prototype.forEach` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.foreach + + exportTypedArrayMethod$m('forEach', function forEach(callbackfn + /* , thisArg */ + ) { + $forEach$1(aTypedArray$l(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + }); + + var TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS$2 = typedArrayConstructorsRequireWrappers; + + var exportTypedArrayStaticMethod$2 = arrayBufferViewCore.exportTypedArrayStaticMethod; + + var typedArrayFrom = typedArrayFrom$2; // `%TypedArray%.from` method + // https://tc39.es/ecma262/#sec-%typedarray%.from + + + exportTypedArrayStaticMethod$2('from', typedArrayFrom, TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS$2); + + var ArrayBufferViewCore$m = arrayBufferViewCore; + + var $includes = arrayIncludes.includes; + + var aTypedArray$k = ArrayBufferViewCore$m.aTypedArray; + var exportTypedArrayMethod$l = ArrayBufferViewCore$m.exportTypedArrayMethod; // `%TypedArray%.prototype.includes` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.includes + + exportTypedArrayMethod$l('includes', function includes(searchElement + /* , fromIndex */ + ) { + return $includes(aTypedArray$k(this), searchElement, arguments.length > 1 ? arguments[1] : undefined); + }); + + var ArrayBufferViewCore$l = arrayBufferViewCore; + + var $indexOf = arrayIncludes.indexOf; + + var aTypedArray$j = ArrayBufferViewCore$l.aTypedArray; + var exportTypedArrayMethod$k = ArrayBufferViewCore$l.exportTypedArrayMethod; // `%TypedArray%.prototype.indexOf` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.indexof + + exportTypedArrayMethod$k('indexOf', function indexOf(searchElement + /* , fromIndex */ + ) { + return $indexOf(aTypedArray$j(this), searchElement, arguments.length > 1 ? arguments[1] : undefined); + }); + + var global$e = global$R; + + var PROPER_FUNCTION_NAME = functionName.PROPER; + + var ArrayBufferViewCore$k = arrayBufferViewCore; + + var ArrayIterators = es_array_iterator; + + var wellKnownSymbol$c = wellKnownSymbol$G; + + var ITERATOR$3 = wellKnownSymbol$c('iterator'); + var Uint8Array$1 = global$e.Uint8Array; + var arrayValues = ArrayIterators.values; + var arrayKeys = ArrayIterators.keys; + var arrayEntries = ArrayIterators.entries; + var aTypedArray$i = ArrayBufferViewCore$k.aTypedArray; + var exportTypedArrayMethod$j = ArrayBufferViewCore$k.exportTypedArrayMethod; + var nativeTypedArrayIterator = Uint8Array$1 && Uint8Array$1.prototype[ITERATOR$3]; + var PROPER_ARRAY_VALUES_NAME = !!nativeTypedArrayIterator && nativeTypedArrayIterator.name === 'values'; + + var typedArrayValues = function values() { + return arrayValues.call(aTypedArray$i(this)); + }; // `%TypedArray%.prototype.entries` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries + + + exportTypedArrayMethod$j('entries', function entries() { + return arrayEntries.call(aTypedArray$i(this)); + }); // `%TypedArray%.prototype.keys` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.keys + + exportTypedArrayMethod$j('keys', function keys() { + return arrayKeys.call(aTypedArray$i(this)); + }); // `%TypedArray%.prototype.values` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.values + + exportTypedArrayMethod$j('values', typedArrayValues, PROPER_FUNCTION_NAME && !PROPER_ARRAY_VALUES_NAME); // `%TypedArray%.prototype[@@iterator]` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype-@@iterator + + exportTypedArrayMethod$j(ITERATOR$3, typedArrayValues, PROPER_FUNCTION_NAME && !PROPER_ARRAY_VALUES_NAME); + + var ArrayBufferViewCore$j = arrayBufferViewCore; + + var aTypedArray$h = ArrayBufferViewCore$j.aTypedArray; + var exportTypedArrayMethod$i = ArrayBufferViewCore$j.exportTypedArrayMethod; + var $join = [].join; // `%TypedArray%.prototype.join` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.join + // eslint-disable-next-line no-unused-vars -- required for `.length` + + exportTypedArrayMethod$i('join', function join(separator) { + return $join.apply(aTypedArray$h(this), arguments); + }); + + var ArrayBufferViewCore$i = arrayBufferViewCore; + + var $lastIndexOf = arrayLastIndexOf; + + var aTypedArray$g = ArrayBufferViewCore$i.aTypedArray; + var exportTypedArrayMethod$h = ArrayBufferViewCore$i.exportTypedArrayMethod; // `%TypedArray%.prototype.lastIndexOf` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.lastindexof + // eslint-disable-next-line no-unused-vars -- required for `.length` + + exportTypedArrayMethod$h('lastIndexOf', function lastIndexOf(searchElement + /* , fromIndex */ + ) { + return $lastIndexOf.apply(aTypedArray$g(this), arguments); + }); + + var ArrayBufferViewCore$h = arrayBufferViewCore; + + var $map = arrayIteration.map; + + var typedArraySpeciesConstructor$3 = typedArraySpeciesConstructor$5; + + var aTypedArray$f = ArrayBufferViewCore$h.aTypedArray; + var exportTypedArrayMethod$g = ArrayBufferViewCore$h.exportTypedArrayMethod; // `%TypedArray%.prototype.map` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.map + + exportTypedArrayMethod$g('map', function map(mapfn + /* , thisArg */ + ) { + return $map(aTypedArray$f(this), mapfn, arguments.length > 1 ? arguments[1] : undefined, function (O, length) { + return new (typedArraySpeciesConstructor$3(O))(length); + }); + }); + + var ArrayBufferViewCore$g = arrayBufferViewCore; + + var TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS$1 = typedArrayConstructorsRequireWrappers; + + var aTypedArrayConstructor$1 = ArrayBufferViewCore$g.aTypedArrayConstructor; + var exportTypedArrayStaticMethod$1 = ArrayBufferViewCore$g.exportTypedArrayStaticMethod; // `%TypedArray%.of` method + // https://tc39.es/ecma262/#sec-%typedarray%.of + + exportTypedArrayStaticMethod$1('of', function of() { + var index = 0; + var length = arguments.length; + var result = new (aTypedArrayConstructor$1(this))(length); + + while (length > index) result[index] = arguments[index++]; + + return result; + }, TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS$1); + + var ArrayBufferViewCore$f = arrayBufferViewCore; + + var $reduce = arrayReduce.left; + + var aTypedArray$e = ArrayBufferViewCore$f.aTypedArray; + var exportTypedArrayMethod$f = ArrayBufferViewCore$f.exportTypedArrayMethod; // `%TypedArray%.prototype.reduce` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduce + + exportTypedArrayMethod$f('reduce', function reduce(callbackfn + /* , initialValue */ + ) { + return $reduce(aTypedArray$e(this), callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined); + }); + + var ArrayBufferViewCore$e = arrayBufferViewCore; + + var $reduceRight = arrayReduce.right; + + var aTypedArray$d = ArrayBufferViewCore$e.aTypedArray; + var exportTypedArrayMethod$e = ArrayBufferViewCore$e.exportTypedArrayMethod; // `%TypedArray%.prototype.reduceRicht` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduceright + + exportTypedArrayMethod$e('reduceRight', function reduceRight(callbackfn + /* , initialValue */ + ) { + return $reduceRight(aTypedArray$d(this), callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined); + }); + + var ArrayBufferViewCore$d = arrayBufferViewCore; + + var aTypedArray$c = ArrayBufferViewCore$d.aTypedArray; + var exportTypedArrayMethod$d = ArrayBufferViewCore$d.exportTypedArrayMethod; + var floor$2 = Math.floor; // `%TypedArray%.prototype.reverse` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.reverse + + exportTypedArrayMethod$d('reverse', function reverse() { + var that = this; + var length = aTypedArray$c(that).length; + var middle = floor$2(length / 2); + var index = 0; + var value; + + while (index < middle) { + value = that[index]; + that[index++] = that[--length]; + that[length] = value; + } + + return that; + }); + + var ArrayBufferViewCore$c = arrayBufferViewCore; + + var lengthOfArrayLike$6 = lengthOfArrayLike$q; + + var toOffset = toOffset$2; + + var toObject$a = toObject$A; + + var fails$7 = fails$15; + + var aTypedArray$b = ArrayBufferViewCore$c.aTypedArray; + var exportTypedArrayMethod$c = ArrayBufferViewCore$c.exportTypedArrayMethod; + var FORCED$5 = fails$7(function () { + // eslint-disable-next-line es/no-typed-arrays -- required for testing + new Int8Array(1).set({}); + }); // `%TypedArray%.prototype.set` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.set + + exportTypedArrayMethod$c('set', function set(arrayLike + /* , offset */ + ) { + aTypedArray$b(this); + var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1); + var length = this.length; + var src = toObject$a(arrayLike); + var len = lengthOfArrayLike$6(src); + var index = 0; + if (len + offset > length) throw RangeError('Wrong length'); + + while (index < len) this[offset + index] = src[index++]; + }, FORCED$5); + + var ArrayBufferViewCore$b = arrayBufferViewCore; + + var typedArraySpeciesConstructor$2 = typedArraySpeciesConstructor$5; + + var fails$6 = fails$15; + + var aTypedArray$a = ArrayBufferViewCore$b.aTypedArray; + var exportTypedArrayMethod$b = ArrayBufferViewCore$b.exportTypedArrayMethod; + var $slice$1 = [].slice; + var FORCED$4 = fails$6(function () { + // eslint-disable-next-line es/no-typed-arrays -- required for testing + new Int8Array(1).slice(); + }); // `%TypedArray%.prototype.slice` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice + + exportTypedArrayMethod$b('slice', function slice(start, end) { + var list = $slice$1.call(aTypedArray$a(this), start, end); + var C = typedArraySpeciesConstructor$2(this); + var index = 0; + var length = list.length; + var result = new C(length); + + while (length > index) result[index] = list[index++]; + + return result; + }, FORCED$4); + + var ArrayBufferViewCore$a = arrayBufferViewCore; + + var $some$1 = arrayIteration.some; + + var aTypedArray$9 = ArrayBufferViewCore$a.aTypedArray; + var exportTypedArrayMethod$a = ArrayBufferViewCore$a.exportTypedArrayMethod; // `%TypedArray%.prototype.some` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.some + + exportTypedArrayMethod$a('some', function some(callbackfn + /* , thisArg */ + ) { + return $some$1(aTypedArray$9(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + }); + + var ArrayBufferViewCore$9 = arrayBufferViewCore; + + var global$d = global$R; + + var fails$5 = fails$15; + + var aCallable$B = aCallable$Q; + + var lengthOfArrayLike$5 = lengthOfArrayLike$q; + + var internalSort = arraySort; + + var FF = engineFfVersion; + + var IE_OR_EDGE = engineIsIeOrEdge; + + var V8 = engineV8Version; + + var WEBKIT = engineWebkitVersion; + + var aTypedArray$8 = ArrayBufferViewCore$9.aTypedArray; + var exportTypedArrayMethod$9 = ArrayBufferViewCore$9.exportTypedArrayMethod; + var Uint16Array = global$d.Uint16Array; + var nativeSort = Uint16Array && Uint16Array.prototype.sort; // WebKit + + var ACCEPT_INCORRECT_ARGUMENTS = !!nativeSort && !fails$5(function () { + var array = new Uint16Array(2); + array.sort(null); + array.sort({}); + }); + var STABLE_SORT = !!nativeSort && !fails$5(function () { + // feature detection can be too slow, so check engines versions + if (V8) return V8 < 74; + if (FF) return FF < 67; + if (IE_OR_EDGE) return true; + if (WEBKIT) return WEBKIT < 602; + var array = new Uint16Array(516); + var expected = Array(516); + var index, mod; + + for (index = 0; index < 516; index++) { + mod = index % 4; + array[index] = 515 - index; + expected[index] = index - 2 * mod + 3; + } + + array.sort(function (a, b) { + return (a / 4 | 0) - (b / 4 | 0); + }); + + for (index = 0; index < 516; index++) { + if (array[index] !== expected[index]) return true; + } + }); + + var getSortCompare = function (comparefn) { + return function (x, y) { + if (comparefn !== undefined) return +comparefn(x, y) || 0; // eslint-disable-next-line no-self-compare -- NaN check + + if (y !== y) return -1; // eslint-disable-next-line no-self-compare -- NaN check + + if (x !== x) return 1; + if (x === 0 && y === 0) return 1 / x > 0 && 1 / y < 0 ? 1 : -1; + return x > y; + }; + }; // `%TypedArray%.prototype.sort` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort + + + exportTypedArrayMethod$9('sort', function sort(comparefn) { + var array = this; + if (comparefn !== undefined) aCallable$B(comparefn); + if (STABLE_SORT) return nativeSort.call(array, comparefn); + aTypedArray$8(array); + var arrayLength = lengthOfArrayLike$5(array); + var items = Array(arrayLength); + var index; + + for (index = 0; index < arrayLength; index++) { + items[index] = array[index]; + } + + items = internalSort(array, getSortCompare(comparefn)); + + for (index = 0; index < arrayLength; index++) { + array[index] = items[index]; + } + + return array; + }, !STABLE_SORT || ACCEPT_INCORRECT_ARGUMENTS); + + var ArrayBufferViewCore$8 = arrayBufferViewCore; + + var toLength = toLength$d; + + var toAbsoluteIndex = toAbsoluteIndex$8; + + var typedArraySpeciesConstructor$1 = typedArraySpeciesConstructor$5; + + var aTypedArray$7 = ArrayBufferViewCore$8.aTypedArray; + var exportTypedArrayMethod$8 = ArrayBufferViewCore$8.exportTypedArrayMethod; // `%TypedArray%.prototype.subarray` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.subarray + + exportTypedArrayMethod$8('subarray', function subarray(begin, end) { + var O = aTypedArray$7(this); + var length = O.length; + var beginIndex = toAbsoluteIndex(begin, length); + var C = typedArraySpeciesConstructor$1(O); + return new C(O.buffer, O.byteOffset + beginIndex * O.BYTES_PER_ELEMENT, toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - beginIndex)); + }); + + var global$c = global$R; + + var ArrayBufferViewCore$7 = arrayBufferViewCore; + + var fails$4 = fails$15; + + var Int8Array$1 = global$c.Int8Array; + var aTypedArray$6 = ArrayBufferViewCore$7.aTypedArray; + var exportTypedArrayMethod$7 = ArrayBufferViewCore$7.exportTypedArrayMethod; + var $toLocaleString = [].toLocaleString; + var $slice = [].slice; // iOS Safari 6.x fails here + + var TO_LOCALE_STRING_BUG = !!Int8Array$1 && fails$4(function () { + $toLocaleString.call(new Int8Array$1(1)); + }); + var FORCED$3 = fails$4(function () { + return [1, 2].toLocaleString() != new Int8Array$1([1, 2]).toLocaleString(); + }) || !fails$4(function () { + Int8Array$1.prototype.toLocaleString.call([1, 2]); + }); // `%TypedArray%.prototype.toLocaleString` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.tolocalestring + + exportTypedArrayMethod$7('toLocaleString', function toLocaleString() { + return $toLocaleString.apply(TO_LOCALE_STRING_BUG ? $slice.call(aTypedArray$6(this)) : aTypedArray$6(this), arguments); + }, FORCED$3); + + var exportTypedArrayMethod$6 = arrayBufferViewCore.exportTypedArrayMethod; + + var fails$3 = fails$15; + + var global$b = global$R; + + var Uint8Array = global$b.Uint8Array; + var Uint8ArrayPrototype = Uint8Array && Uint8Array.prototype || {}; + var arrayToString = [].toString; + var arrayJoin = [].join; + + if (fails$3(function () { + arrayToString.call({}); + })) { + arrayToString = function toString() { + return arrayJoin.call(this); + }; + } + + var IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString; // `%TypedArray%.prototype.toString` method + // https://tc39.es/ecma262/#sec-%typedarray%.prototype.tostring + + exportTypedArrayMethod$6('toString', arrayToString, IS_NOT_ARRAY_METHOD); + + var $$1X = _export; + + var toString$1 = toString$t; + + var fromCharCode = String.fromCharCode; + var hex2 = /^[\da-f]{2}$/i; + var hex4 = /^[\da-f]{4}$/i; // `unescape` method + // https://tc39.es/ecma262/#sec-unescape-string + + $$1X({ + global: true + }, { + unescape: function unescape(string) { + var str = toString$1(string); + var result = ''; + var length = str.length; + var index = 0; + var chr, slice; + + while (index < length) { + chr = str.charAt(index++); + + if (chr === '%') { + if (str.charAt(index) === 'u') { + slice = str.slice(index + 1, index + 5); + + if (hex4.test(slice)) { + result += fromCharCode(parseInt(slice, 16)); + index += 5; + continue; + } + } else { + slice = str.slice(index, index + 2); + + if (hex2.test(slice)) { + result += fromCharCode(parseInt(slice, 16)); + index += 2; + continue; + } + } + } + + result += chr; + } + + return result; + } + }); + + var es_weakMap = {exports: {}}; + + var redefineAll$6 = redefineAll$a; + + var getWeakData = internalMetadata.exports.getWeakData; + + var anObject$14 = anObject$1C; + + var isObject$5 = isObject$C; + + var anInstance$5 = anInstance$b; + + var iterate$A = iterate$I; + + var ArrayIterationModule = arrayIteration; + + var hasOwn$5 = hasOwnProperty_1; + + var InternalStateModule$a = internalState; + + var setInternalState$a = InternalStateModule$a.set; + var internalStateGetterFor = InternalStateModule$a.getterFor; + var find$2 = ArrayIterationModule.find; + var findIndex = ArrayIterationModule.findIndex; + var id = 0; // fallback for uncaught frozen keys + + var uncaughtFrozenStore = function (store) { + return store.frozen || (store.frozen = new UncaughtFrozenStore()); + }; + + var UncaughtFrozenStore = function () { + this.entries = []; + }; + + var findUncaughtFrozen = function (store, key) { + return find$2(store.entries, function (it) { + return it[0] === key; + }); + }; + + UncaughtFrozenStore.prototype = { + get: function (key) { + var entry = findUncaughtFrozen(this, key); + if (entry) return entry[1]; + }, + has: function (key) { + return !!findUncaughtFrozen(this, key); + }, + set: function (key, value) { + var entry = findUncaughtFrozen(this, key); + if (entry) entry[1] = value;else this.entries.push([key, value]); + }, + 'delete': function (key) { + var index = findIndex(this.entries, function (it) { + return it[0] === key; + }); + if (~index) this.entries.splice(index, 1); + return !!~index; + } + }; + var collectionWeak$2 = { + getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) { + var C = wrapper(function (that, iterable) { + anInstance$5(that, C, CONSTRUCTOR_NAME); + setInternalState$a(that, { + type: CONSTRUCTOR_NAME, + id: id++, + frozen: undefined + }); + if (iterable != undefined) iterate$A(iterable, that[ADDER], { + that: that, + AS_ENTRIES: IS_MAP + }); + }); + var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); + + var define = function (that, key, value) { + var state = getInternalState(that); + var data = getWeakData(anObject$14(key), true); + if (data === true) uncaughtFrozenStore(state).set(key, value);else data[state.id] = value; + return that; + }; + + redefineAll$6(C.prototype, { + // `{ WeakMap, WeakSet }.prototype.delete(key)` methods + // https://tc39.es/ecma262/#sec-weakmap.prototype.delete + // https://tc39.es/ecma262/#sec-weakset.prototype.delete + 'delete': function (key) { + var state = getInternalState(this); + if (!isObject$5(key)) return false; + var data = getWeakData(key); + if (data === true) return uncaughtFrozenStore(state)['delete'](key); + return data && hasOwn$5(data, state.id) && delete data[state.id]; + }, + // `{ WeakMap, WeakSet }.prototype.has(key)` methods + // https://tc39.es/ecma262/#sec-weakmap.prototype.has + // https://tc39.es/ecma262/#sec-weakset.prototype.has + has: function has(key) { + var state = getInternalState(this); + if (!isObject$5(key)) return false; + var data = getWeakData(key); + if (data === true) return uncaughtFrozenStore(state).has(key); + return data && hasOwn$5(data, state.id); + } + }); + redefineAll$6(C.prototype, IS_MAP ? { + // `WeakMap.prototype.get(key)` method + // https://tc39.es/ecma262/#sec-weakmap.prototype.get + get: function get(key) { + var state = getInternalState(this); + + if (isObject$5(key)) { + var data = getWeakData(key); + if (data === true) return uncaughtFrozenStore(state).get(key); + return data ? data[state.id] : undefined; + } + }, + // `WeakMap.prototype.set(key, value)` method + // https://tc39.es/ecma262/#sec-weakmap.prototype.set + set: function set(key, value) { + return define(this, key, value); + } + } : { + // `WeakSet.prototype.add(value)` method + // https://tc39.es/ecma262/#sec-weakset.prototype.add + add: function add(value) { + return define(this, value, true); + } + }); + return C; + } + }; + + var global$a = global$R; + + var redefineAll$5 = redefineAll$a; + + var InternalMetadataModule = internalMetadata.exports; + + var collection$1 = collection$4; + + var collectionWeak$1 = collectionWeak$2; + + var isObject$4 = isObject$C; + + var enforceIternalState = internalState.enforce; + + var NATIVE_WEAK_MAP = nativeWeakMap; + + var IS_IE11 = !global$a.ActiveXObject && 'ActiveXObject' in global$a; // eslint-disable-next-line es/no-object-isextensible -- safe + + var isExtensible = Object.isExtensible; + var InternalWeakMap; + + var wrapper = function (init) { + return function WeakMap() { + return init(this, arguments.length ? arguments[0] : undefined); + }; + }; // `WeakMap` constructor + // https://tc39.es/ecma262/#sec-weakmap-constructor + + + var $WeakMap = es_weakMap.exports = collection$1('WeakMap', wrapper, collectionWeak$1); // IE11 WeakMap frozen keys fix + // We can't use feature detection because it crash some old IE builds + // https://github.com/zloirock/core-js/issues/485 + + if (NATIVE_WEAK_MAP && IS_IE11) { + InternalWeakMap = collectionWeak$1.getConstructor(wrapper, 'WeakMap', true); + InternalMetadataModule.enable(); + var WeakMapPrototype = $WeakMap.prototype; + var nativeDelete = WeakMapPrototype['delete']; + var nativeHas = WeakMapPrototype.has; + var nativeGet = WeakMapPrototype.get; + var nativeSet = WeakMapPrototype.set; + redefineAll$5(WeakMapPrototype, { + 'delete': function (key) { + if (isObject$4(key) && !isExtensible(key)) { + var state = enforceIternalState(this); + if (!state.frozen) state.frozen = new InternalWeakMap(); + return nativeDelete.call(this, key) || state.frozen['delete'](key); + } + + return nativeDelete.call(this, key); + }, + has: function has(key) { + if (isObject$4(key) && !isExtensible(key)) { + var state = enforceIternalState(this); + if (!state.frozen) state.frozen = new InternalWeakMap(); + return nativeHas.call(this, key) || state.frozen.has(key); + } + + return nativeHas.call(this, key); + }, + get: function get(key) { + if (isObject$4(key) && !isExtensible(key)) { + var state = enforceIternalState(this); + if (!state.frozen) state.frozen = new InternalWeakMap(); + return nativeHas.call(this, key) ? nativeGet.call(this, key) : state.frozen.get(key); + } + + return nativeGet.call(this, key); + }, + set: function set(key, value) { + if (isObject$4(key) && !isExtensible(key)) { + var state = enforceIternalState(this); + if (!state.frozen) state.frozen = new InternalWeakMap(); + nativeHas.call(this, key) ? nativeSet.call(this, key, value) : state.frozen.set(key, value); + } else nativeSet.call(this, key, value); + + return this; + } + }); + } + + var collection = collection$4; + + var collectionWeak = collectionWeak$2; // `WeakSet` constructor + // https://tc39.es/ecma262/#sec-weakset-constructor + + + collection('WeakSet', function (init) { + return function WeakSet() { + return init(this, arguments.length ? arguments[0] : undefined); + }; + }, collectionWeak); + + var global$9 = global$R; + + var shared$1 = sharedStore; + + var isCallable$6 = isCallable$z; + + var getPrototypeOf$4 = objectGetPrototypeOf$1; + + var redefine$3 = redefine$l.exports; + + var wellKnownSymbol$b = wellKnownSymbol$G; + + var USE_FUNCTION_CONSTRUCTOR = 'USE_FUNCTION_CONSTRUCTOR'; + var ASYNC_ITERATOR$3 = wellKnownSymbol$b('asyncIterator'); + var AsyncIterator = global$9.AsyncIterator; + var PassedAsyncIteratorPrototype = shared$1.AsyncIteratorPrototype; + var AsyncIteratorPrototype$4, prototype; + + if (PassedAsyncIteratorPrototype) { + AsyncIteratorPrototype$4 = PassedAsyncIteratorPrototype; + } else if (isCallable$6(AsyncIterator)) { + AsyncIteratorPrototype$4 = AsyncIterator.prototype; + } else if (shared$1[USE_FUNCTION_CONSTRUCTOR] || global$9[USE_FUNCTION_CONSTRUCTOR]) { + try { + // eslint-disable-next-line no-new-func -- we have no alternatives without usage of modern syntax + prototype = getPrototypeOf$4(getPrototypeOf$4(getPrototypeOf$4(Function('return async function*(){}()')()))); + if (getPrototypeOf$4(prototype) === Object.prototype) AsyncIteratorPrototype$4 = prototype; + } catch (error) { + /* empty */ + } + } + + if (!AsyncIteratorPrototype$4) AsyncIteratorPrototype$4 = {}; + + if (!isCallable$6(AsyncIteratorPrototype$4[ASYNC_ITERATOR$3])) { + redefine$3(AsyncIteratorPrototype$4, ASYNC_ITERATOR$3, function () { + return this; + }); + } + + var asyncIteratorPrototype = AsyncIteratorPrototype$4; + + var anObject$13 = anObject$1C; + + var create$5 = objectCreate$1; + + var getMethod$7 = getMethod$h; + + var redefineAll$4 = redefineAll$a; + + var InternalStateModule$9 = internalState; + + var getBuiltIn$j = getBuiltIn$y; + + var AsyncIteratorPrototype$3 = asyncIteratorPrototype; + + var Promise$3 = getBuiltIn$j('Promise'); + var setInternalState$9 = InternalStateModule$9.set; + var getInternalState$7 = InternalStateModule$9.get; + + var asyncFromSyncIteratorContinuation = function (result, resolve, reject) { + var done = result.done; + Promise$3.resolve(result.value).then(function (value) { + resolve({ + done: done, + value: value + }); + }, reject); + }; + + var AsyncFromSyncIterator$3 = function AsyncIterator(iterator) { + setInternalState$9(this, { + iterator: anObject$13(iterator), + next: iterator.next + }); + }; + + AsyncFromSyncIterator$3.prototype = redefineAll$4(create$5(AsyncIteratorPrototype$3), { + next: function next(arg) { + var state = getInternalState$7(this); + var hasArg = !!arguments.length; + return new Promise$3(function (resolve, reject) { + var result = anObject$13(state.next.apply(state.iterator, hasArg ? [arg] : [])); + asyncFromSyncIteratorContinuation(result, resolve, reject); + }); + }, + 'return': function (arg) { + var iterator = getInternalState$7(this).iterator; + var hasArg = !!arguments.length; + return new Promise$3(function (resolve, reject) { + var $return = getMethod$7(iterator, 'return'); + if ($return === undefined) return resolve({ + done: true, + value: arg + }); + var result = anObject$13($return.apply(iterator, hasArg ? [arg] : [])); + asyncFromSyncIteratorContinuation(result, resolve, reject); + }); + }, + 'throw': function (arg) { + var iterator = getInternalState$7(this).iterator; + var hasArg = !!arguments.length; + return new Promise$3(function (resolve, reject) { + var $throw = getMethod$7(iterator, 'throw'); + if ($throw === undefined) return reject(arg); + var result = anObject$13($throw.apply(iterator, hasArg ? [arg] : [])); + asyncFromSyncIteratorContinuation(result, resolve, reject); + }); + } + }); + var asyncFromSyncIterator = AsyncFromSyncIterator$3; + + var AsyncFromSyncIterator$2 = asyncFromSyncIterator; + + var anObject$12 = anObject$1C; + + var getIterator$7 = getIterator$b; + + var getMethod$6 = getMethod$h; + + var wellKnownSymbol$a = wellKnownSymbol$G; + + var ASYNC_ITERATOR$2 = wellKnownSymbol$a('asyncIterator'); + + var getAsyncIterator$3 = function (it, usingIterator) { + var method = arguments.length < 2 ? getMethod$6(it, ASYNC_ITERATOR$2) : usingIterator; + return method ? anObject$12(method.call(it)) : new AsyncFromSyncIterator$2(getIterator$7(it)); + }; + + var global$8 = global$R; + + var entryVirtual = function (CONSTRUCTOR) { + return global$8[CONSTRUCTOR].prototype; + }; + + // https://github.com/tc39/proposal-array-from-async + + var aCallable$A = aCallable$Q; + + var anObject$11 = anObject$1C; + + var getBuiltIn$i = getBuiltIn$y; + + var getMethod$5 = getMethod$h; + + var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; + + var createMethod$1 = function (TYPE) { + var IS_TO_ARRAY = TYPE == 0; + var IS_FOR_EACH = TYPE == 1; + var IS_EVERY = TYPE == 2; + var IS_SOME = TYPE == 3; + return function (iterator, fn, target) { + anObject$11(iterator); + var Promise = getBuiltIn$i('Promise'); + var next = aCallable$A(iterator.next); + var index = 0; + var MAPPING = fn !== undefined; + if (MAPPING || !IS_TO_ARRAY) aCallable$A(fn); + return new Promise(function (resolve, reject) { + var closeIteration = function (method, argument) { + try { + var returnMethod = getMethod$5(iterator, 'return'); + + if (returnMethod) { + return Promise.resolve(returnMethod.call(iterator)).then(function () { + method(argument); + }, function (error) { + reject(error); + }); + } + } catch (error2) { + return reject(error2); + } + + method(argument); + }; + + var onError = function (error) { + closeIteration(reject, error); + }; + + var loop = function () { + try { + if (IS_TO_ARRAY && index > MAX_SAFE_INTEGER && MAPPING) { + throw TypeError('The allowed number of iterations has been exceeded'); + } + + Promise.resolve(anObject$11(next.call(iterator))).then(function (step) { + try { + if (anObject$11(step).done) { + if (IS_TO_ARRAY) { + target.length = index; + resolve(target); + } else resolve(IS_SOME ? false : IS_EVERY || undefined); + } else { + var value = step.value; + + if (MAPPING) { + Promise.resolve(IS_TO_ARRAY ? fn(value, index) : fn(value)).then(function (result) { + if (IS_FOR_EACH) { + loop(); + } else if (IS_EVERY) { + result ? loop() : closeIteration(resolve, false); + } else if (IS_TO_ARRAY) { + target[index++] = result; + loop(); + } else { + result ? closeIteration(resolve, IS_SOME || value) : loop(); + } + }, onError); + } else { + target[index++] = value; + loop(); + } + } + } catch (error) { + onError(error); + } + }, onError); + } catch (error2) { + onError(error2); + } + }; + + loop(); + }); + }; + }; + + var asyncIteratorIteration = { + toArray: createMethod$1(0), + forEach: createMethod$1(1), + every: createMethod$1(2), + some: createMethod$1(3), + find: createMethod$1(4) + }; + + var bind$g = functionBindContext; + + var toObject$9 = toObject$A; + + var isConstructor$1 = isConstructor$7; + + var getAsyncIterator$2 = getAsyncIterator$3; + + var getIterator$6 = getIterator$b; + + var getIteratorMethod$4 = getIteratorMethod$9; + + var getMethod$4 = getMethod$h; + + var getVirtual = entryVirtual; + + var getBuiltIn$h = getBuiltIn$y; + + var wellKnownSymbol$9 = wellKnownSymbol$G; + + var AsyncFromSyncIterator$1 = asyncFromSyncIterator; + + var toArray = asyncIteratorIteration.toArray; + + var ASYNC_ITERATOR$1 = wellKnownSymbol$9('asyncIterator'); + var arrayIterator = getVirtual('Array').values; // `Array.fromAsync` method implementation + // https://github.com/tc39/proposal-array-from-async + + var arrayFromAsync$1 = function fromAsync(asyncItems + /* , mapfn = undefined, thisArg = undefined */ + ) { + var C = this; + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : undefined; + var thisArg = argumentsLength > 2 ? arguments[2] : undefined; + return new (getBuiltIn$h('Promise'))(function (resolve) { + var O = toObject$9(asyncItems); + if (mapfn !== undefined) mapfn = bind$g(mapfn, thisArg, 2); + var usingAsyncIterator = getMethod$4(O, ASYNC_ITERATOR$1); + var usingSyncIterator = usingAsyncIterator ? undefined : getIteratorMethod$4(O) || arrayIterator; + var A = isConstructor$1(C) ? new C() : []; + var iterator = usingAsyncIterator ? getAsyncIterator$2(O, usingAsyncIterator) : new AsyncFromSyncIterator$1(getIterator$6(O, usingSyncIterator)); + resolve(toArray(iterator, mapfn, A)); + }); + }; + + var $$1W = _export; + + var fromAsync = arrayFromAsync$1; // `Array.fromAsync` method + // https://github.com/tc39/proposal-array-from-async + + + $$1W({ + target: 'Array', + stat: true + }, { + fromAsync: fromAsync + }); + + var $$1V = _export; + + var $filterReject$3 = arrayIteration.filterReject; + + var addToUnscopables$7 = addToUnscopables$h; // `Array.prototype.filterOut` method + // https://github.com/tc39/proposal-array-filtering + + + $$1V({ + target: 'Array', + proto: true + }, { + filterOut: function filterOut(callbackfn + /* , thisArg */ + ) { + return $filterReject$3(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + addToUnscopables$7('filterOut'); + + var $$1U = _export; + + var $filterReject$2 = arrayIteration.filterReject; + + var addToUnscopables$6 = addToUnscopables$h; // `Array.prototype.filterReject` method + // https://github.com/tc39/proposal-array-filtering + + + $$1U({ + target: 'Array', + proto: true + }, { + filterReject: function filterReject(callbackfn + /* , thisArg */ + ) { + return $filterReject$2(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + addToUnscopables$6('filterReject'); + + var bind$f = functionBindContext; + + var IndexedObject$1 = indexedObject; + + var toObject$8 = toObject$A; + + var lengthOfArrayLike$4 = lengthOfArrayLike$q; // `Array.prototype.{ findLast, findLastIndex }` methods implementation + + + var createMethod = function (TYPE) { + var IS_FIND_LAST_INDEX = TYPE == 1; + return function ($this, callbackfn, that) { + var O = toObject$8($this); + var self = IndexedObject$1(O); + var boundFunction = bind$f(callbackfn, that, 3); + var index = lengthOfArrayLike$4(self); + var value, result; + + while (index-- > 0) { + value = self[index]; + result = boundFunction(value, index, O); + if (result) switch (TYPE) { + case 0: + return value; + // findLast + + case 1: + return index; + // findLastIndex + } + } + + return IS_FIND_LAST_INDEX ? -1 : undefined; + }; + }; + + var arrayIterationFromLast = { + // `Array.prototype.findLast` method + // https://github.com/tc39/proposal-array-find-from-last + findLast: createMethod(0), + // `Array.prototype.findLastIndex` method + // https://github.com/tc39/proposal-array-find-from-last + findLastIndex: createMethod(1) + }; + + var $$1T = _export; + + var $findLast$1 = arrayIterationFromLast.findLast; + + var addToUnscopables$5 = addToUnscopables$h; // `Array.prototype.findLast` method + // https://github.com/tc39/proposal-array-find-from-last + + + $$1T({ + target: 'Array', + proto: true + }, { + findLast: function findLast(callbackfn + /* , that = undefined */ + ) { + return $findLast$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + addToUnscopables$5('findLast'); + + var $$1S = _export; + + var $findLastIndex$1 = arrayIterationFromLast.findLastIndex; + + var addToUnscopables$4 = addToUnscopables$h; // `Array.prototype.findLastIndex` method + // https://github.com/tc39/proposal-array-find-from-last + + + $$1S({ + target: 'Array', + proto: true + }, { + findLastIndex: function findLastIndex(callbackfn + /* , that = undefined */ + ) { + return $findLastIndex$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } + }); + addToUnscopables$4('findLastIndex'); + + var bind$e = functionBindContext; + + var IndexedObject = indexedObject; + + var toObject$7 = toObject$A; + + var toPropertyKey = toPropertyKey$9; + + var lengthOfArrayLike$3 = lengthOfArrayLike$q; + + var objectCreate = objectCreate$1; + + var arrayFromConstructorAndList$1 = arrayFromConstructorAndList$3; + + var push$2 = [].push; + + var arrayGroupBy = function ($this, callbackfn, that, specificConstructor) { + var O = toObject$7($this); + var self = IndexedObject(O); + var boundFunction = bind$e(callbackfn, that, 3); + var target = objectCreate(null); + var length = lengthOfArrayLike$3(self); + var index = 0; + var Constructor, key, value; + + for (; length > index; index++) { + value = self[index]; + key = toPropertyKey(boundFunction(value, index, O)); // in some IE10 builds, `hasOwnProperty` returns incorrect result on integer keys + // but since it's a `null` prototype object, we can safely use `in` + + if (key in target) push$2.call(target[key], value);else target[key] = [value]; + } + + if (specificConstructor) { + Constructor = specificConstructor(O); + + if (Constructor !== Array) { + for (key in target) target[key] = arrayFromConstructorAndList$1(Constructor, target[key]); + } + } + + return target; + }; + + var $$1R = _export; + + var $groupBy$1 = arrayGroupBy; + + var arraySpeciesConstructor = arraySpeciesConstructor$2; + + var addToUnscopables$3 = addToUnscopables$h; // `Array.prototype.groupBy` method + // https://github.com/tc39/proposal-array-grouping + + + $$1R({ + target: 'Array', + proto: true + }, { + groupBy: function groupBy(callbackfn + /* , thisArg */ + ) { + var thisArg = arguments.length > 1 ? arguments[1] : undefined; + return $groupBy$1(this, callbackfn, thisArg, arraySpeciesConstructor); + } + }); + addToUnscopables$3('groupBy'); + + var $$1Q = _export; + + var isArray = isArray$8; // eslint-disable-next-line es/no-object-isfrozen -- safe + + + var isFrozen = Object.isFrozen; + + var isFrozenStringArray = function (array, allowUndefined) { + if (!isFrozen || !isArray(array) || !isFrozen(array)) return false; + var index = 0; + var length = array.length; + var element; + + while (index < length) { + element = array[index++]; + + if (!(typeof element === 'string' || allowUndefined && typeof element === 'undefined')) { + return false; + } + } + + return length !== 0; + }; // `Array.isTemplateObject` method + // https://github.com/tc39/proposal-array-is-template-object + + + $$1Q({ + target: 'Array', + stat: true + }, { + isTemplateObject: function isTemplateObject(value) { + if (!isFrozenStringArray(value, true)) return false; + var raw = value.raw; + if (raw.length !== value.length || !isFrozenStringArray(raw, false)) return false; + return true; + } + }); + + var DESCRIPTORS$4 = descriptors; + + var addToUnscopables$2 = addToUnscopables$h; + + var toObject$6 = toObject$A; + + var lengthOfArrayLike$2 = lengthOfArrayLike$q; + + var defineProperty$3 = objectDefineProperty.f; // `Array.prototype.lastIndex` getter + // https://github.com/keithamus/proposal-array-last + + + if (DESCRIPTORS$4 && !('lastIndex' in [])) { + defineProperty$3(Array.prototype, 'lastIndex', { + configurable: true, + get: function lastIndex() { + var O = toObject$6(this); + var len = lengthOfArrayLike$2(O); + return len == 0 ? 0 : len - 1; + } + }); + addToUnscopables$2('lastIndex'); + } + + var DESCRIPTORS$3 = descriptors; + + var addToUnscopables$1 = addToUnscopables$h; + + var toObject$5 = toObject$A; + + var lengthOfArrayLike$1 = lengthOfArrayLike$q; + + var defineProperty$2 = objectDefineProperty.f; // `Array.prototype.lastIndex` accessor + // https://github.com/keithamus/proposal-array-last + + + if (DESCRIPTORS$3 && !('lastItem' in [])) { + defineProperty$2(Array.prototype, 'lastItem', { + configurable: true, + get: function lastItem() { + var O = toObject$5(this); + var len = lengthOfArrayLike$1(O); + return len == 0 ? undefined : O[len - 1]; + }, + set: function lastItem(value) { + var O = toObject$5(this); + var len = lengthOfArrayLike$1(O); + return O[len == 0 ? 0 : len - 1] = value; + } + }); + addToUnscopables$1('lastItem'); + } + + var aCallable$z = aCallable$Q; + + var lengthOfArrayLike = lengthOfArrayLike$q; + + var toObject$4 = toObject$A; + + var getBuiltIn$g = getBuiltIn$y; + + var arraySpeciesCreate = arraySpeciesCreate$6; + + var push$1 = [].push; // `Array.prototype.uniqueBy` method + // https://github.com/tc39/proposal-array-unique + + var arrayUniqueBy$1 = function uniqueBy(resolver) { + var that = toObject$4(this); + var length = lengthOfArrayLike(that); + var result = arraySpeciesCreate(that, 0); + var Map = getBuiltIn$g('Map'); + var map = new Map(); + var resolverFunction, index, item, key; + if (resolver != null) resolverFunction = aCallable$z(resolver);else resolverFunction = function (value) { + return value; + }; + + for (index = 0; index < length; index++) { + item = that[index]; + key = resolverFunction(item); + if (!map.has(key)) map.set(key, item); + } + + map.forEach(function (value) { + push$1.call(result, value); + }); + return result; + }; + + var $$1P = _export; + + var addToUnscopables = addToUnscopables$h; + + var uniqueBy = arrayUniqueBy$1; // `Array.prototype.uniqueBy` method + // https://github.com/tc39/proposal-array-unique + + + $$1P({ + target: 'Array', + proto: true + }, { + uniqueBy: uniqueBy + }); + addToUnscopables('uniqueBy'); + + var $$1O = _export; + + var anInstance$4 = anInstance$b; + + var createNonEnumerableProperty$5 = createNonEnumerableProperty$h; + + var hasOwn$4 = hasOwnProperty_1; + + var wellKnownSymbol$8 = wellKnownSymbol$G; + + var AsyncIteratorPrototype$2 = asyncIteratorPrototype; + + var IS_PURE$C = isPure; + + var TO_STRING_TAG$4 = wellKnownSymbol$8('toStringTag'); + + var AsyncIteratorConstructor = function AsyncIterator() { + anInstance$4(this, AsyncIteratorConstructor); + }; + + AsyncIteratorConstructor.prototype = AsyncIteratorPrototype$2; + + if (!hasOwn$4(AsyncIteratorPrototype$2, TO_STRING_TAG$4)) { + createNonEnumerableProperty$5(AsyncIteratorPrototype$2, TO_STRING_TAG$4, 'AsyncIterator'); + } + + if (!hasOwn$4(AsyncIteratorPrototype$2, 'constructor') || AsyncIteratorPrototype$2.constructor === Object) { + createNonEnumerableProperty$5(AsyncIteratorPrototype$2, 'constructor', AsyncIteratorConstructor); + } + + $$1O({ + global: true, + forced: IS_PURE$C + }, { + AsyncIterator: AsyncIteratorConstructor + }); + + var aCallable$y = aCallable$Q; + + var anObject$10 = anObject$1C; + + var create$4 = objectCreate$1; + + var createNonEnumerableProperty$4 = createNonEnumerableProperty$h; + + var redefineAll$3 = redefineAll$a; + + var wellKnownSymbol$7 = wellKnownSymbol$G; + + var InternalStateModule$8 = internalState; + + var getBuiltIn$f = getBuiltIn$y; + + var getMethod$3 = getMethod$h; + + var AsyncIteratorPrototype$1 = asyncIteratorPrototype; + + var Promise$2 = getBuiltIn$f('Promise'); + var setInternalState$8 = InternalStateModule$8.set; + var getInternalState$6 = InternalStateModule$8.get; + var TO_STRING_TAG$3 = wellKnownSymbol$7('toStringTag'); + + var asyncIteratorCreateProxy = function (nextHandler, IS_ITERATOR) { + var AsyncIteratorProxy = function AsyncIterator(state) { + state.next = aCallable$y(state.iterator.next); + state.done = false; + state.ignoreArgument = !IS_ITERATOR; + setInternalState$8(this, state); + }; + + AsyncIteratorProxy.prototype = redefineAll$3(create$4(AsyncIteratorPrototype$1), { + next: function next(arg) { + var that = this; + var hasArgument = !!arguments.length; + return new Promise$2(function (resolve) { + var state = getInternalState$6(that); + var args = hasArgument ? [state.ignoreArgument ? undefined : arg] : IS_ITERATOR ? [] : [undefined]; + state.ignoreArgument = false; + resolve(state.done ? { + done: true, + value: undefined + } : anObject$10(nextHandler.call(state, Promise$2, args))); + }); + }, + 'return': function (value) { + var that = this; + return new Promise$2(function (resolve, reject) { + var state = getInternalState$6(that); + var iterator = state.iterator; + state.done = true; + var $$return = getMethod$3(iterator, 'return'); + if ($$return === undefined) return resolve({ + done: true, + value: value + }); + Promise$2.resolve($$return.call(iterator, value)).then(function (result) { + anObject$10(result); + resolve({ + done: true, + value: value + }); + }, reject); + }); + }, + 'throw': function (value) { + var that = this; + return new Promise$2(function (resolve, reject) { + var state = getInternalState$6(that); + var iterator = state.iterator; + state.done = true; + var $$throw = getMethod$3(iterator, 'throw'); + if ($$throw === undefined) return reject(value); + resolve($$throw.call(iterator, value)); + }); + } + }); + + if (!IS_ITERATOR) { + createNonEnumerableProperty$4(AsyncIteratorProxy.prototype, TO_STRING_TAG$3, 'Generator'); + } + + return AsyncIteratorProxy; + }; + + var $$1N = _export; + + var anObject$$ = anObject$1C; + + var createAsyncIteratorProxy$6 = asyncIteratorCreateProxy; + + var AsyncIteratorProxy$6 = createAsyncIteratorProxy$6(function (Promise, args) { + var state = this; + var iterator = state.iterator; + return Promise.resolve(anObject$$(state.next.apply(iterator, args))).then(function (step) { + if (anObject$$(step).done) { + state.done = true; + return { + done: true, + value: undefined + }; + } + + return { + done: false, + value: [state.index++, step.value] + }; + }); + }); + $$1N({ + target: 'AsyncIterator', + proto: true, + real: true + }, { + asIndexedPairs: function asIndexedPairs() { + return new AsyncIteratorProxy$6({ + iterator: anObject$$(this), + index: 0 + }); + } + }); + + var $$1M = _export; + + var anObject$_ = anObject$1C; + + var toPositiveInteger$3 = toPositiveInteger$5; + + var createAsyncIteratorProxy$5 = asyncIteratorCreateProxy; + + var AsyncIteratorProxy$5 = createAsyncIteratorProxy$5(function (Promise, args) { + var state = this; + return new Promise(function (resolve, reject) { + var loop = function () { + try { + Promise.resolve(anObject$_(state.next.apply(state.iterator, state.remaining ? [] : args))).then(function (step) { + try { + if (anObject$_(step).done) { + state.done = true; + resolve({ + done: true, + value: undefined + }); + } else if (state.remaining) { + state.remaining--; + loop(); + } else resolve({ + done: false, + value: step.value + }); + } catch (err) { + reject(err); + } + }, reject); + } catch (error) { + reject(error); + } + }; + + loop(); + }); + }); + $$1M({ + target: 'AsyncIterator', + proto: true, + real: true + }, { + drop: function drop(limit) { + return new AsyncIteratorProxy$5({ + iterator: anObject$_(this), + remaining: toPositiveInteger$3(limit) + }); + } + }); + + var $$1L = _export; + + var $every = asyncIteratorIteration.every; + + $$1L({ + target: 'AsyncIterator', + proto: true, + real: true + }, { + every: function every(fn) { + return $every(this, fn); + } + }); + + var $$1K = _export; + + var aCallable$x = aCallable$Q; + + var anObject$Z = anObject$1C; + + var createAsyncIteratorProxy$4 = asyncIteratorCreateProxy; + + var AsyncIteratorProxy$4 = createAsyncIteratorProxy$4(function (Promise, args) { + var state = this; + var filterer = state.filterer; + return new Promise(function (resolve, reject) { + var loop = function () { + try { + Promise.resolve(anObject$Z(state.next.apply(state.iterator, args))).then(function (step) { + try { + if (anObject$Z(step).done) { + state.done = true; + resolve({ + done: true, + value: undefined + }); + } else { + var value = step.value; + Promise.resolve(filterer(value)).then(function (selected) { + selected ? resolve({ + done: false, + value: value + }) : loop(); + }, reject); + } + } catch (err) { + reject(err); + } + }, reject); + } catch (error) { + reject(error); + } + }; + + loop(); + }); + }); + $$1K({ + target: 'AsyncIterator', + proto: true, + real: true + }, { + filter: function filter(filterer) { + return new AsyncIteratorProxy$4({ + iterator: anObject$Z(this), + filterer: aCallable$x(filterer) + }); + } + }); + + var $$1J = _export; + + var $find = asyncIteratorIteration.find; + + $$1J({ + target: 'AsyncIterator', + proto: true, + real: true + }, { + find: function find(fn) { + return $find(this, fn); + } + }); + + var $$1I = _export; + + var aCallable$w = aCallable$Q; + + var anObject$Y = anObject$1C; + + var createAsyncIteratorProxy$3 = asyncIteratorCreateProxy; + + var getAsyncIterator$1 = getAsyncIterator$3; + + var AsyncIteratorProxy$3 = createAsyncIteratorProxy$3(function (Promise) { + var state = this; + var mapper = state.mapper; + var innerIterator; + return new Promise(function (resolve, reject) { + var outerLoop = function () { + try { + Promise.resolve(anObject$Y(state.next.call(state.iterator))).then(function (step) { + try { + if (anObject$Y(step).done) { + state.done = true; + resolve({ + done: true, + value: undefined + }); + } else { + Promise.resolve(mapper(step.value)).then(function (mapped) { + try { + state.innerIterator = innerIterator = getAsyncIterator$1(mapped); + state.innerNext = aCallable$w(innerIterator.next); + return innerLoop(); + } catch (error2) { + reject(error2); + } + }, reject); + } + } catch (error1) { + reject(error1); + } + }, reject); + } catch (error) { + reject(error); + } + }; + + var innerLoop = function () { + if (innerIterator = state.innerIterator) { + try { + Promise.resolve(anObject$Y(state.innerNext.call(innerIterator))).then(function (result) { + try { + if (anObject$Y(result).done) { + state.innerIterator = state.innerNext = null; + outerLoop(); + } else resolve({ + done: false, + value: result.value + }); + } catch (error1) { + reject(error1); + } + }, reject); + } catch (error) { + reject(error); + } + } else outerLoop(); + }; + + innerLoop(); + }); + }); + $$1I({ + target: 'AsyncIterator', + proto: true, + real: true + }, { + flatMap: function flatMap(mapper) { + return new AsyncIteratorProxy$3({ + iterator: anObject$Y(this), + mapper: aCallable$w(mapper), + innerIterator: null, + innerNext: null + }); + } + }); + + var $$1H = _export; + + var $forEach = asyncIteratorIteration.forEach; + + $$1H({ + target: 'AsyncIterator', + proto: true, + real: true + }, { + forEach: function forEach(fn) { + return $forEach(this, fn); + } + }); + + // https://github.com/tc39/proposal-iterator-helpers + var $$1G = _export; + + var anObject$X = anObject$1C; + + var toObject$3 = toObject$A; + + var AsyncIteratorPrototype = asyncIteratorPrototype; + + var createAsyncIteratorProxy$2 = asyncIteratorCreateProxy; + + var getAsyncIterator = getAsyncIterator$3; + + var getIterator$5 = getIterator$b; + + var getIteratorMethod$3 = getIteratorMethod$9; + + var getMethod$2 = getMethod$h; + + var wellKnownSymbol$6 = wellKnownSymbol$G; + + var AsyncFromSyncIterator = asyncFromSyncIterator; + + var ASYNC_ITERATOR = wellKnownSymbol$6('asyncIterator'); + var isPrototypeOf$1 = {}.isPrototypeOf; + var AsyncIteratorProxy$2 = createAsyncIteratorProxy$2(function (Promise, args) { + return anObject$X(this.next.apply(this.iterator, args)); + }, true); + $$1G({ + target: 'AsyncIterator', + stat: true + }, { + from: function from(O) { + var object = toObject$3(O); + var usingIterator = getMethod$2(object, ASYNC_ITERATOR); + var iterator; + + if (usingIterator) { + iterator = getAsyncIterator(object, usingIterator); + if (isPrototypeOf$1.call(AsyncIteratorPrototype, iterator)) return iterator; + } + + if (iterator === undefined) { + usingIterator = getIteratorMethod$3(object); + if (usingIterator) return new AsyncFromSyncIterator(getIterator$5(object, usingIterator)); + } + + return new AsyncIteratorProxy$2({ + iterator: iterator !== undefined ? iterator : object + }); + } + }); + + var $$1F = _export; + + var aCallable$v = aCallable$Q; + + var anObject$W = anObject$1C; + + var createAsyncIteratorProxy$1 = asyncIteratorCreateProxy; + + var AsyncIteratorProxy$1 = createAsyncIteratorProxy$1(function (Promise, args) { + var state = this; + var mapper = state.mapper; + return Promise.resolve(anObject$W(state.next.apply(state.iterator, args))).then(function (step) { + if (anObject$W(step).done) { + state.done = true; + return { + done: true, + value: undefined + }; + } + + return Promise.resolve(mapper(step.value)).then(function (value) { + return { + done: false, + value: value + }; + }); + }); + }); + $$1F({ + target: 'AsyncIterator', + proto: true, + real: true + }, { + map: function map(mapper) { + return new AsyncIteratorProxy$1({ + iterator: anObject$W(this), + mapper: aCallable$v(mapper) + }); + } + }); + + var $$1E = _export; + + var aCallable$u = aCallable$Q; + + var anObject$V = anObject$1C; + + var getBuiltIn$e = getBuiltIn$y; + + var Promise$1 = getBuiltIn$e('Promise'); + $$1E({ + target: 'AsyncIterator', + proto: true, + real: true + }, { + reduce: function reduce(reducer + /* , initialValue */ + ) { + var iterator = anObject$V(this); + var next = aCallable$u(iterator.next); + var noInitial = arguments.length < 2; + var accumulator = noInitial ? undefined : arguments[1]; + aCallable$u(reducer); + return new Promise$1(function (resolve, reject) { + var loop = function () { + try { + Promise$1.resolve(anObject$V(next.call(iterator))).then(function (step) { + try { + if (anObject$V(step).done) { + noInitial ? reject(TypeError('Reduce of empty iterator with no initial value')) : resolve(accumulator); + } else { + var value = step.value; + + if (noInitial) { + noInitial = false; + accumulator = value; + loop(); + } else { + Promise$1.resolve(reducer(accumulator, value)).then(function (result) { + accumulator = result; + loop(); + }, reject); + } + } + } catch (err) { + reject(err); + } + }, reject); + } catch (error) { + reject(error); + } + }; + + loop(); + }); + } + }); + + var $$1D = _export; + + var $some = asyncIteratorIteration.some; + + $$1D({ + target: 'AsyncIterator', + proto: true, + real: true + }, { + some: function some(fn) { + return $some(this, fn); + } + }); + + var $$1C = _export; + + var anObject$U = anObject$1C; + + var toPositiveInteger$2 = toPositiveInteger$5; + + var createAsyncIteratorProxy = asyncIteratorCreateProxy; + + var AsyncIteratorProxy = createAsyncIteratorProxy(function (Promise, args) { + var iterator = this.iterator; + var returnMethod, result; + + if (!this.remaining--) { + result = { + done: true, + value: undefined + }; + this.done = true; + returnMethod = iterator['return']; + + if (returnMethod !== undefined) { + return Promise.resolve(returnMethod.call(iterator)).then(function () { + return result; + }); + } + + return result; + } + + return this.next.apply(iterator, args); + }); + $$1C({ + target: 'AsyncIterator', + proto: true, + real: true + }, { + take: function take(limit) { + return new AsyncIteratorProxy({ + iterator: anObject$U(this), + remaining: toPositiveInteger$2(limit) + }); + } + }); + + var $$1B = _export; + + var $toArray = asyncIteratorIteration.toArray; + + $$1B({ + target: 'AsyncIterator', + proto: true, + real: true + }, { + toArray: function toArray() { + return $toArray(this, undefined, []); + } + }); + + var InternalStateModule$7 = internalState; + + var createIteratorConstructor$4 = createIteratorConstructor$7; + + var isObject$3 = isObject$C; + + var defineProperties$1 = objectDefineProperties; + + var DESCRIPTORS$2 = descriptors; + + var INCORRECT_RANGE = 'Incorrect Number.range arguments'; + var NUMERIC_RANGE_ITERATOR = 'NumericRangeIterator'; + var setInternalState$7 = InternalStateModule$7.set; + var getInternalState$5 = InternalStateModule$7.getterFor(NUMERIC_RANGE_ITERATOR); + var $RangeIterator = createIteratorConstructor$4(function NumericRangeIterator(start, end, option, type, zero, one) { + if (typeof start != type || end !== Infinity && end !== -Infinity && typeof end != type) { + throw new TypeError(INCORRECT_RANGE); + } + + if (start === Infinity || start === -Infinity) { + throw new RangeError(INCORRECT_RANGE); + } + + var ifIncrease = end > start; + var inclusiveEnd = false; + var step; + + if (option === undefined) { + step = undefined; + } else if (isObject$3(option)) { + step = option.step; + inclusiveEnd = !!option.inclusive; + } else if (typeof option == type) { + step = option; + } else { + throw new TypeError(INCORRECT_RANGE); + } + + if (step == null) { + step = ifIncrease ? one : -one; + } + + if (typeof step != type) { + throw new TypeError(INCORRECT_RANGE); + } + + if (step === Infinity || step === -Infinity || step === zero && start !== end) { + throw new RangeError(INCORRECT_RANGE); + } // eslint-disable-next-line no-self-compare -- NaN check + + + var hitsEnd = start != start || end != end || step != step || end > start !== step > zero; + setInternalState$7(this, { + type: NUMERIC_RANGE_ITERATOR, + start: start, + end: end, + step: step, + inclusiveEnd: inclusiveEnd, + hitsEnd: hitsEnd, + currentCount: zero, + zero: zero + }); + + if (!DESCRIPTORS$2) { + this.start = start; + this.end = end; + this.step = step; + this.inclusive = inclusiveEnd; + } + }, NUMERIC_RANGE_ITERATOR, function next() { + var state = getInternalState$5(this); + if (state.hitsEnd) return { + value: undefined, + done: true + }; + var start = state.start; + var end = state.end; + var step = state.step; + var currentYieldingValue = start + step * state.currentCount++; + if (currentYieldingValue === end) state.hitsEnd = true; + var inclusiveEnd = state.inclusiveEnd; + var endCondition; + + if (end > start) { + endCondition = inclusiveEnd ? currentYieldingValue > end : currentYieldingValue >= end; + } else { + endCondition = inclusiveEnd ? end > currentYieldingValue : end >= currentYieldingValue; + } + + if (endCondition) { + return { + value: undefined, + done: state.hitsEnd = true + }; + } + + return { + value: currentYieldingValue, + done: false + }; + }); + + var getter = function (fn) { + return { + get: fn, + set: function () { + /* empty */ + }, + configurable: true, + enumerable: false + }; + }; + + if (DESCRIPTORS$2) { + defineProperties$1($RangeIterator.prototype, { + start: getter(function () { + return getInternalState$5(this).start; + }), + end: getter(function () { + return getInternalState$5(this).end; + }), + inclusive: getter(function () { + return getInternalState$5(this).inclusiveEnd; + }), + step: getter(function () { + return getInternalState$5(this).step; + }) + }); + } + + var numericRangeIterator = $RangeIterator; + + /* eslint-disable es/no-bigint -- safe */ + + var $$1A = _export; + + var NumericRangeIterator$1 = numericRangeIterator; // `BigInt.range` method + // https://github.com/tc39/proposal-Number.range + + + if (typeof BigInt == 'function') { + $$1A({ + target: 'BigInt', + stat: true + }, { + range: function range(start, end, option) { + return new NumericRangeIterator$1(start, end, option, 'bigint', BigInt(0), BigInt(1)); + } + }); + } + + // TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env` + var Map$2 = es_map; + + var WeakMap$1 = es_weakMap.exports; + + var create$3 = objectCreate$1; + + var isObject$2 = isObject$C; + + var Node = function () { + // keys + this.object = null; + this.symbol = null; // child nodes + + this.primitives = null; + this.objectsByIndex = create$3(null); + }; + + Node.prototype.get = function (key, initializer) { + return this[key] || (this[key] = initializer()); + }; + + Node.prototype.next = function (i, it, IS_OBJECT) { + var store = IS_OBJECT ? this.objectsByIndex[i] || (this.objectsByIndex[i] = new WeakMap$1()) : this.primitives || (this.primitives = new Map$2()); + var entry = store.get(it); + if (!entry) store.set(it, entry = new Node()); + return entry; + }; + + var root$1 = new Node(); + + var compositeKey = function () { + var active = root$1; + var length = arguments.length; + var i, it; // for prevent leaking, start from objects + + for (i = 0; i < length; i++) { + if (isObject$2(it = arguments[i])) active = active.next(i, it, true); + } + + if (this === Object && active === root$1) throw TypeError('Composite keys must contain a non-primitive component'); + + for (i = 0; i < length; i++) { + if (!isObject$2(it = arguments[i])) active = active.next(i, it, false); + } + + return active; + }; + + var $$1z = _export; + + var getCompositeKeyNode$1 = compositeKey; + + var getBuiltIn$d = getBuiltIn$y; + + var create$2 = objectCreate$1; + + var initializer = function () { + var freeze = getBuiltIn$d('Object', 'freeze'); + return freeze ? freeze(create$2(null)) : create$2(null); + }; // https://github.com/tc39/proposal-richer-keys/tree/master/compositeKey + + + $$1z({ + global: true + }, { + compositeKey: function compositeKey() { + return getCompositeKeyNode$1.apply(Object, arguments).get('object', initializer); + } + }); + + var $$1y = _export; + + var getCompositeKeyNode = compositeKey; + + var getBuiltIn$c = getBuiltIn$y; // https://github.com/tc39/proposal-richer-keys/tree/master/compositeKey + + + $$1y({ + global: true + }, { + compositeSymbol: function compositeSymbol() { + if (arguments.length === 1 && typeof arguments[0] === 'string') return getBuiltIn$c('Symbol')['for'](arguments[0]); + return getCompositeKeyNode.apply(null, arguments).get('symbol', getBuiltIn$c('Symbol')); + } + }); + + var $$1x = _export; + + var global$7 = global$R; + + var anInstance$3 = anInstance$b; + + var isCallable$5 = isCallable$z; + + var createNonEnumerableProperty$3 = createNonEnumerableProperty$h; + + var fails$2 = fails$15; + + var hasOwn$3 = hasOwnProperty_1; + + var wellKnownSymbol$5 = wellKnownSymbol$G; + + var IteratorPrototype$2 = iteratorsCore.IteratorPrototype; + + var TO_STRING_TAG$2 = wellKnownSymbol$5('toStringTag'); + var NativeIterator = global$7.Iterator; // FF56- have non-standard global helper `Iterator` + + var FORCED$2 = !isCallable$5(NativeIterator) || NativeIterator.prototype !== IteratorPrototype$2 // FF44- non-standard `Iterator` passes previous tests + || !fails$2(function () { + NativeIterator({}); + }); + + var IteratorConstructor = function Iterator() { + anInstance$3(this, IteratorConstructor); + }; + + if (!hasOwn$3(IteratorPrototype$2, TO_STRING_TAG$2)) { + createNonEnumerableProperty$3(IteratorPrototype$2, TO_STRING_TAG$2, 'Iterator'); + } + + if (FORCED$2 || !hasOwn$3(IteratorPrototype$2, 'constructor') || IteratorPrototype$2.constructor === Object) { + createNonEnumerableProperty$3(IteratorPrototype$2, 'constructor', IteratorConstructor); + } + + IteratorConstructor.prototype = IteratorPrototype$2; + $$1x({ + global: true, + forced: FORCED$2 + }, { + Iterator: IteratorConstructor + }); + + var aCallable$t = aCallable$Q; + + var anObject$T = anObject$1C; + + var create$1 = objectCreate$1; + + var createNonEnumerableProperty$2 = createNonEnumerableProperty$h; + + var redefineAll$2 = redefineAll$a; + + var wellKnownSymbol$4 = wellKnownSymbol$G; + + var InternalStateModule$6 = internalState; + + var getMethod$1 = getMethod$h; + + var IteratorPrototype$1 = iteratorsCore.IteratorPrototype; + + var setInternalState$6 = InternalStateModule$6.set; + var getInternalState$4 = InternalStateModule$6.get; + var TO_STRING_TAG$1 = wellKnownSymbol$4('toStringTag'); + + var iteratorCreateProxy = function (nextHandler, IS_ITERATOR) { + var IteratorProxy = function Iterator(state) { + state.next = aCallable$t(state.iterator.next); + state.done = false; + state.ignoreArg = !IS_ITERATOR; + setInternalState$6(this, state); + }; + + IteratorProxy.prototype = redefineAll$2(create$1(IteratorPrototype$1), { + next: function next(arg) { + var state = getInternalState$4(this); + var args = arguments.length ? [state.ignoreArg ? undefined : arg] : IS_ITERATOR ? [] : [undefined]; + state.ignoreArg = false; + var result = state.done ? undefined : nextHandler.call(state, args); + return { + done: state.done, + value: result + }; + }, + 'return': function (value) { + var state = getInternalState$4(this); + var iterator = state.iterator; + state.done = true; + var $$return = getMethod$1(iterator, 'return'); + return { + done: true, + value: $$return ? anObject$T($$return.call(iterator, value)).value : value + }; + }, + 'throw': function (value) { + var state = getInternalState$4(this); + var iterator = state.iterator; + state.done = true; + var $$throw = getMethod$1(iterator, 'throw'); + if ($$throw) return $$throw.call(iterator, value); + throw value; + } + }); + + if (!IS_ITERATOR) { + createNonEnumerableProperty$2(IteratorProxy.prototype, TO_STRING_TAG$1, 'Generator'); + } + + return IteratorProxy; + }; + + var $$1w = _export; + + var anObject$S = anObject$1C; + + var createIteratorProxy$6 = iteratorCreateProxy; + + var IteratorProxy$6 = createIteratorProxy$6(function (args) { + var result = anObject$S(this.next.apply(this.iterator, args)); + var done = this.done = !!result.done; + if (!done) return [this.index++, result.value]; + }); + $$1w({ + target: 'Iterator', + proto: true, + real: true + }, { + asIndexedPairs: function asIndexedPairs() { + return new IteratorProxy$6({ + iterator: anObject$S(this), + index: 0 + }); + } + }); + + var $$1v = _export; + + var anObject$R = anObject$1C; + + var toPositiveInteger$1 = toPositiveInteger$5; + + var createIteratorProxy$5 = iteratorCreateProxy; + + var IteratorProxy$5 = createIteratorProxy$5(function (args) { + var iterator = this.iterator; + var next = this.next; + var result, done; + + while (this.remaining) { + this.remaining--; + result = anObject$R(next.call(iterator)); + done = this.done = !!result.done; + if (done) return; + } + + result = anObject$R(next.apply(iterator, args)); + done = this.done = !!result.done; + if (!done) return result.value; + }); + $$1v({ + target: 'Iterator', + proto: true, + real: true + }, { + drop: function drop(limit) { + return new IteratorProxy$5({ + iterator: anObject$R(this), + remaining: toPositiveInteger$1(limit) + }); + } + }); + + var $$1u = _export; + + var iterate$z = iterate$I; + + var aCallable$s = aCallable$Q; + + var anObject$Q = anObject$1C; + + $$1u({ + target: 'Iterator', + proto: true, + real: true + }, { + every: function every(fn) { + anObject$Q(this); + aCallable$s(fn); + return !iterate$z(this, function (value, stop) { + if (!fn(value)) return stop(); + }, { + IS_ITERATOR: true, + INTERRUPTED: true + }).stopped; + } + }); + + var $$1t = _export; + + var aCallable$r = aCallable$Q; + + var anObject$P = anObject$1C; + + var createIteratorProxy$4 = iteratorCreateProxy; + + var callWithSafeIterationClosing$1 = callWithSafeIterationClosing$3; + + var IteratorProxy$4 = createIteratorProxy$4(function (args) { + var iterator = this.iterator; + var filterer = this.filterer; + var next = this.next; + var result, done, value; + + while (true) { + result = anObject$P(next.apply(iterator, args)); + done = this.done = !!result.done; + if (done) return; + value = result.value; + if (callWithSafeIterationClosing$1(iterator, filterer, value)) return value; + } + }); + $$1t({ + target: 'Iterator', + proto: true, + real: true + }, { + filter: function filter(filterer) { + return new IteratorProxy$4({ + iterator: anObject$P(this), + filterer: aCallable$r(filterer) + }); + } + }); + + var $$1s = _export; + + var iterate$y = iterate$I; + + var aCallable$q = aCallable$Q; + + var anObject$O = anObject$1C; + + $$1s({ + target: 'Iterator', + proto: true, + real: true + }, { + find: function find(fn) { + anObject$O(this); + aCallable$q(fn); + return iterate$y(this, function (value, stop) { + if (fn(value)) return stop(value); + }, { + IS_ITERATOR: true, + INTERRUPTED: true + }).result; + } + }); + + var $$1r = _export; + + var aCallable$p = aCallable$Q; + + var anObject$N = anObject$1C; + + var getIteratorMethod$2 = getIteratorMethod$9; + + var createIteratorProxy$3 = iteratorCreateProxy; + + var iteratorClose$1 = iteratorClose$4; + + var IteratorProxy$3 = createIteratorProxy$3(function () { + var iterator = this.iterator; + var mapper = this.mapper; + var result, mapped, iteratorMethod, innerIterator; + + while (true) { + try { + if (innerIterator = this.innerIterator) { + result = anObject$N(this.innerNext.call(innerIterator)); + if (!result.done) return result.value; + this.innerIterator = this.innerNext = null; + } + + result = anObject$N(this.next.call(iterator)); + if (this.done = !!result.done) return; + mapped = mapper(result.value); + iteratorMethod = getIteratorMethod$2(mapped); + + if (!iteratorMethod) { + throw TypeError('.flatMap callback should return an iterable object'); + } + + this.innerIterator = innerIterator = anObject$N(iteratorMethod.call(mapped)); + this.innerNext = aCallable$p(innerIterator.next); + } catch (error) { + iteratorClose$1(iterator, 'throw', error); + } + } + }); + $$1r({ + target: 'Iterator', + proto: true, + real: true + }, { + flatMap: function flatMap(mapper) { + return new IteratorProxy$3({ + iterator: anObject$N(this), + mapper: aCallable$p(mapper), + innerIterator: null, + innerNext: null + }); + } + }); + + var $$1q = _export; + + var iterate$x = iterate$I; + + var anObject$M = anObject$1C; + + $$1q({ + target: 'Iterator', + proto: true, + real: true + }, { + forEach: function forEach(fn) { + iterate$x(anObject$M(this), fn, { + IS_ITERATOR: true + }); + } + }); + + // https://github.com/tc39/proposal-iterator-helpers + var $$1p = _export; + + var anObject$L = anObject$1C; + + var toObject$2 = toObject$A; + + var IteratorPrototype = iteratorsCore.IteratorPrototype; + + var createIteratorProxy$2 = iteratorCreateProxy; + + var getIterator$4 = getIterator$b; + + var getIteratorMethod$1 = getIteratorMethod$9; + + var isPrototypeOf = {}.isPrototypeOf; + var IteratorProxy$2 = createIteratorProxy$2(function (args) { + var result = anObject$L(this.next.apply(this.iterator, args)); + var done = this.done = !!result.done; + if (!done) return result.value; + }, true); + $$1p({ + target: 'Iterator', + stat: true + }, { + from: function from(O) { + var object = toObject$2(O); + var usingIterator = getIteratorMethod$1(object); + var iterator; + + if (usingIterator) { + iterator = getIterator$4(object, usingIterator); + if (isPrototypeOf.call(IteratorPrototype, iterator)) return iterator; + } else { + iterator = object; + } + + return new IteratorProxy$2({ + iterator: iterator + }); + } + }); + + var $$1o = _export; + + var aCallable$o = aCallable$Q; + + var anObject$K = anObject$1C; + + var createIteratorProxy$1 = iteratorCreateProxy; + + var callWithSafeIterationClosing = callWithSafeIterationClosing$3; + + var IteratorProxy$1 = createIteratorProxy$1(function (args) { + var iterator = this.iterator; + var result = anObject$K(this.next.apply(iterator, args)); + var done = this.done = !!result.done; + if (!done) return callWithSafeIterationClosing(iterator, this.mapper, result.value); + }); + $$1o({ + target: 'Iterator', + proto: true, + real: true + }, { + map: function map(mapper) { + return new IteratorProxy$1({ + iterator: anObject$K(this), + mapper: aCallable$o(mapper) + }); + } + }); + + var $$1n = _export; + + var iterate$w = iterate$I; + + var aCallable$n = aCallable$Q; + + var anObject$J = anObject$1C; + + $$1n({ + target: 'Iterator', + proto: true, + real: true + }, { + reduce: function reduce(reducer + /* , initialValue */ + ) { + anObject$J(this); + aCallable$n(reducer); + var noInitial = arguments.length < 2; + var accumulator = noInitial ? undefined : arguments[1]; + iterate$w(this, function (value) { + if (noInitial) { + noInitial = false; + accumulator = value; + } else { + accumulator = reducer(accumulator, value); + } + }, { + IS_ITERATOR: true + }); + if (noInitial) throw TypeError('Reduce of empty iterator with no initial value'); + return accumulator; + } + }); + + var $$1m = _export; + + var iterate$v = iterate$I; + + var aCallable$m = aCallable$Q; + + var anObject$I = anObject$1C; + + $$1m({ + target: 'Iterator', + proto: true, + real: true + }, { + some: function some(fn) { + anObject$I(this); + aCallable$m(fn); + return iterate$v(this, function (value, stop) { + if (fn(value)) return stop(); + }, { + IS_ITERATOR: true, + INTERRUPTED: true + }).stopped; + } + }); + + var $$1l = _export; + + var anObject$H = anObject$1C; + + var toPositiveInteger = toPositiveInteger$5; + + var createIteratorProxy = iteratorCreateProxy; + + var iteratorClose = iteratorClose$4; + + var IteratorProxy = createIteratorProxy(function (args) { + var iterator = this.iterator; + + if (!this.remaining--) { + this.done = true; + return iteratorClose(iterator, 'normal', undefined); + } + + var result = anObject$H(this.next.apply(iterator, args)); + var done = this.done = !!result.done; + if (!done) return result.value; + }); + $$1l({ + target: 'Iterator', + proto: true, + real: true + }, { + take: function take(limit) { + return new IteratorProxy({ + iterator: anObject$H(this), + remaining: toPositiveInteger(limit) + }); + } + }); + + var $$1k = _export; + + var iterate$u = iterate$I; + + var anObject$G = anObject$1C; + + var push = [].push; + $$1k({ + target: 'Iterator', + proto: true, + real: true + }, { + toArray: function toArray() { + var result = []; + iterate$u(anObject$G(this), push, { + that: result, + IS_ITERATOR: true + }); + return result; + } + }); + + var aCallable$l = aCallable$Q; + + var anObject$F = anObject$1C; // https://github.com/tc39/collection-methods + + + var collectionDeleteAll$4 = function () { + var collection = anObject$F(this); + var remover = aCallable$l(collection['delete']); + var allDeleted = true; + var wasDeleted; + + for (var k = 0, len = arguments.length; k < len; k++) { + wasDeleted = remover.call(collection, arguments[k]); + allDeleted = allDeleted && wasDeleted; + } + + return !!allDeleted; + }; + + var $$1j = _export; + + var IS_PURE$B = isPure; + + var collectionDeleteAll$3 = collectionDeleteAll$4; // `Map.prototype.deleteAll` method + // https://github.com/tc39/proposal-collection-methods + + + $$1j({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$B + }, { + deleteAll: function deleteAll() { + return collectionDeleteAll$3.apply(this, arguments); + } + }); + + var anObject$E = anObject$1C; // `Map.prototype.emplace` method + // https://github.com/thumbsupep/proposal-upsert + + + var mapEmplace = function emplace(key, handler) { + var map = anObject$E(this); + var value = map.has(key) && 'update' in handler ? handler.update(map.get(key), key, map) : handler.insert(key, map); + map.set(key, value); + return value; + }; + + var $$1i = _export; + + var IS_PURE$A = isPure; + + var $emplace$1 = mapEmplace; // `Map.prototype.emplace` method + // https://github.com/thumbsupep/proposal-upsert + + + $$1i({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$A + }, { + emplace: $emplace$1 + }); + + var getMapIterator$a = function (it) { + // eslint-disable-next-line es/no-map -- safe + return Map.prototype.entries.call(it); + }; + + var $$1h = _export; + + var IS_PURE$z = isPure; + + var anObject$D = anObject$1C; + + var bind$d = functionBindContext; + + var getMapIterator$9 = getMapIterator$a; + + var iterate$t = iterate$I; // `Map.prototype.every` method + // https://github.com/tc39/proposal-collection-methods + + + $$1h({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$z + }, { + every: function every(callbackfn + /* , thisArg */ + ) { + var map = anObject$D(this); + var iterator = getMapIterator$9(map); + var boundFunction = bind$d(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + return !iterate$t(iterator, function (key, value, stop) { + if (!boundFunction(value, key, map)) return stop(); + }, { + AS_ENTRIES: true, + IS_ITERATOR: true, + INTERRUPTED: true + }).stopped; + } + }); + + var $$1g = _export; + + var IS_PURE$y = isPure; + + var getBuiltIn$b = getBuiltIn$y; + + var aCallable$k = aCallable$Q; + + var anObject$C = anObject$1C; + + var bind$c = functionBindContext; + + var speciesConstructor$8 = speciesConstructor$f; + + var getMapIterator$8 = getMapIterator$a; + + var iterate$s = iterate$I; // `Map.prototype.filter` method + // https://github.com/tc39/proposal-collection-methods + + + $$1g({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$y + }, { + filter: function filter(callbackfn + /* , thisArg */ + ) { + var map = anObject$C(this); + var iterator = getMapIterator$8(map); + var boundFunction = bind$c(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + var newMap = new (speciesConstructor$8(map, getBuiltIn$b('Map')))(); + var setter = aCallable$k(newMap.set); + iterate$s(iterator, function (key, value) { + if (boundFunction(value, key, map)) setter.call(newMap, key, value); + }, { + AS_ENTRIES: true, + IS_ITERATOR: true + }); + return newMap; + } + }); + + var $$1f = _export; + + var IS_PURE$x = isPure; + + var anObject$B = anObject$1C; + + var bind$b = functionBindContext; + + var getMapIterator$7 = getMapIterator$a; + + var iterate$r = iterate$I; // `Map.prototype.find` method + // https://github.com/tc39/proposal-collection-methods + + + $$1f({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$x + }, { + find: function find(callbackfn + /* , thisArg */ + ) { + var map = anObject$B(this); + var iterator = getMapIterator$7(map); + var boundFunction = bind$b(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + return iterate$r(iterator, function (key, value, stop) { + if (boundFunction(value, key, map)) return stop(value); + }, { + AS_ENTRIES: true, + IS_ITERATOR: true, + INTERRUPTED: true + }).result; + } + }); + + var $$1e = _export; + + var IS_PURE$w = isPure; + + var anObject$A = anObject$1C; + + var bind$a = functionBindContext; + + var getMapIterator$6 = getMapIterator$a; + + var iterate$q = iterate$I; // `Map.prototype.findKey` method + // https://github.com/tc39/proposal-collection-methods + + + $$1e({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$w + }, { + findKey: function findKey(callbackfn + /* , thisArg */ + ) { + var map = anObject$A(this); + var iterator = getMapIterator$6(map); + var boundFunction = bind$a(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + return iterate$q(iterator, function (key, value, stop) { + if (boundFunction(value, key, map)) return stop(key); + }, { + AS_ENTRIES: true, + IS_ITERATOR: true, + INTERRUPTED: true + }).result; + } + }); + + var aCallable$j = aCallable$Q; + + var aConstructor$1 = aConstructor$5; + + var bind$9 = functionBindContext; + + var iterate$p = iterate$I; + + var collectionFrom = function from(source + /* , mapFn, thisArg */ + ) { + var length = arguments.length; + var mapFn = length > 1 ? arguments[1] : undefined; + var mapping, array, n, boundFunction; + aConstructor$1(this); + mapping = mapFn !== undefined; + if (mapping) aCallable$j(mapFn); + if (source == undefined) return new this(); + array = []; + + if (mapping) { + n = 0; + boundFunction = bind$9(mapFn, length > 2 ? arguments[2] : undefined, 2); + iterate$p(source, function (nextItem) { + array.push(boundFunction(nextItem, n++)); + }); + } else { + iterate$p(source, array.push, { + that: array + }); + } + + return new this(array); + }; + + var $$1d = _export; + + var from$4 = collectionFrom; // `Map.from` method + // https://tc39.github.io/proposal-setmap-offrom/#sec-map.from + + + $$1d({ + target: 'Map', + stat: true + }, { + from: from$4 + }); + + var $$1c = _export; + + var aCallable$i = aCallable$Q; + + var getIterator$3 = getIterator$b; + + var iterate$o = iterate$I; // `Map.groupBy` method + // https://github.com/tc39/proposal-collection-methods + + + $$1c({ + target: 'Map', + stat: true + }, { + groupBy: function groupBy(iterable, keyDerivative) { + aCallable$i(keyDerivative); + var iterator = getIterator$3(iterable); + var newMap = new this(); + var has = aCallable$i(newMap.has); + var get = aCallable$i(newMap.get); + var set = aCallable$i(newMap.set); + iterate$o(iterator, function (element) { + var derivedKey = keyDerivative(element); + if (!has.call(newMap, derivedKey)) set.call(newMap, derivedKey, [element]);else get.call(newMap, derivedKey).push(element); + }, { + IS_ITERATOR: true + }); + return newMap; + } + }); + + // `SameValueZero` abstract operation + // https://tc39.es/ecma262/#sec-samevaluezero + var sameValueZero$1 = function (x, y) { + // eslint-disable-next-line no-self-compare -- NaN check + return x === y || x != x && y != y; + }; + + var $$1b = _export; + + var IS_PURE$v = isPure; + + var anObject$z = anObject$1C; + + var getMapIterator$5 = getMapIterator$a; + + var sameValueZero = sameValueZero$1; + + var iterate$n = iterate$I; // `Map.prototype.includes` method + // https://github.com/tc39/proposal-collection-methods + + + $$1b({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$v + }, { + includes: function includes(searchElement) { + return iterate$n(getMapIterator$5(anObject$z(this)), function (key, value, stop) { + if (sameValueZero(value, searchElement)) return stop(); + }, { + AS_ENTRIES: true, + IS_ITERATOR: true, + INTERRUPTED: true + }).stopped; + } + }); + + var $$1a = _export; + + var iterate$m = iterate$I; + + var aCallable$h = aCallable$Q; // `Map.keyBy` method + // https://github.com/tc39/proposal-collection-methods + + + $$1a({ + target: 'Map', + stat: true + }, { + keyBy: function keyBy(iterable, keyDerivative) { + var newMap = new this(); + aCallable$h(keyDerivative); + var setter = aCallable$h(newMap.set); + iterate$m(iterable, function (element) { + setter.call(newMap, keyDerivative(element), element); + }); + return newMap; + } + }); + + var $$19 = _export; + + var IS_PURE$u = isPure; + + var anObject$y = anObject$1C; + + var getMapIterator$4 = getMapIterator$a; + + var iterate$l = iterate$I; // `Map.prototype.keyOf` method + // https://github.com/tc39/proposal-collection-methods + + + $$19({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$u + }, { + keyOf: function keyOf(searchElement) { + return iterate$l(getMapIterator$4(anObject$y(this)), function (key, value, stop) { + if (value === searchElement) return stop(key); + }, { + AS_ENTRIES: true, + IS_ITERATOR: true, + INTERRUPTED: true + }).result; + } + }); + + var $$18 = _export; + + var IS_PURE$t = isPure; + + var getBuiltIn$a = getBuiltIn$y; + + var aCallable$g = aCallable$Q; + + var anObject$x = anObject$1C; + + var bind$8 = functionBindContext; + + var speciesConstructor$7 = speciesConstructor$f; + + var getMapIterator$3 = getMapIterator$a; + + var iterate$k = iterate$I; // `Map.prototype.mapKeys` method + // https://github.com/tc39/proposal-collection-methods + + + $$18({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$t + }, { + mapKeys: function mapKeys(callbackfn + /* , thisArg */ + ) { + var map = anObject$x(this); + var iterator = getMapIterator$3(map); + var boundFunction = bind$8(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + var newMap = new (speciesConstructor$7(map, getBuiltIn$a('Map')))(); + var setter = aCallable$g(newMap.set); + iterate$k(iterator, function (key, value) { + setter.call(newMap, boundFunction(value, key, map), value); + }, { + AS_ENTRIES: true, + IS_ITERATOR: true + }); + return newMap; + } + }); + + var $$17 = _export; + + var IS_PURE$s = isPure; + + var getBuiltIn$9 = getBuiltIn$y; + + var aCallable$f = aCallable$Q; + + var anObject$w = anObject$1C; + + var bind$7 = functionBindContext; + + var speciesConstructor$6 = speciesConstructor$f; + + var getMapIterator$2 = getMapIterator$a; + + var iterate$j = iterate$I; // `Map.prototype.mapValues` method + // https://github.com/tc39/proposal-collection-methods + + + $$17({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$s + }, { + mapValues: function mapValues(callbackfn + /* , thisArg */ + ) { + var map = anObject$w(this); + var iterator = getMapIterator$2(map); + var boundFunction = bind$7(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + var newMap = new (speciesConstructor$6(map, getBuiltIn$9('Map')))(); + var setter = aCallable$f(newMap.set); + iterate$j(iterator, function (key, value) { + setter.call(newMap, key, boundFunction(value, key, map)); + }, { + AS_ENTRIES: true, + IS_ITERATOR: true + }); + return newMap; + } + }); + + var $$16 = _export; + + var IS_PURE$r = isPure; + + var aCallable$e = aCallable$Q; + + var anObject$v = anObject$1C; + + var iterate$i = iterate$I; // `Map.prototype.merge` method + // https://github.com/tc39/proposal-collection-methods + + + $$16({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$r + }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + merge: function merge(iterable + /* ...iterbles */ + ) { + var map = anObject$v(this); + var setter = aCallable$e(map.set); + var argumentsLength = arguments.length; + var i = 0; + + while (i < argumentsLength) { + iterate$i(arguments[i++], setter, { + that: map, + AS_ENTRIES: true + }); + } + + return map; + } + }); + + var collectionOf = function of() { + var length = arguments.length; + var A = new Array(length); + + while (length--) A[length] = arguments[length]; + + return new this(A); + }; + + var $$15 = _export; + + var of$3 = collectionOf; // `Map.of` method + // https://tc39.github.io/proposal-setmap-offrom/#sec-map.of + + + $$15({ + target: 'Map', + stat: true + }, { + of: of$3 + }); + + var $$14 = _export; + + var IS_PURE$q = isPure; + + var anObject$u = anObject$1C; + + var aCallable$d = aCallable$Q; + + var getMapIterator$1 = getMapIterator$a; + + var iterate$h = iterate$I; // `Map.prototype.reduce` method + // https://github.com/tc39/proposal-collection-methods + + + $$14({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$q + }, { + reduce: function reduce(callbackfn + /* , initialValue */ + ) { + var map = anObject$u(this); + var iterator = getMapIterator$1(map); + var noInitial = arguments.length < 2; + var accumulator = noInitial ? undefined : arguments[1]; + aCallable$d(callbackfn); + iterate$h(iterator, function (key, value) { + if (noInitial) { + noInitial = false; + accumulator = value; + } else { + accumulator = callbackfn(accumulator, value, key, map); + } + }, { + AS_ENTRIES: true, + IS_ITERATOR: true + }); + if (noInitial) throw TypeError('Reduce of empty map with no initial value'); + return accumulator; + } + }); + + var $$13 = _export; + + var IS_PURE$p = isPure; + + var anObject$t = anObject$1C; + + var bind$6 = functionBindContext; + + var getMapIterator = getMapIterator$a; + + var iterate$g = iterate$I; // `Set.prototype.some` method + // https://github.com/tc39/proposal-collection-methods + + + $$13({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$p + }, { + some: function some(callbackfn + /* , thisArg */ + ) { + var map = anObject$t(this); + var iterator = getMapIterator(map); + var boundFunction = bind$6(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + return iterate$g(iterator, function (key, value, stop) { + if (boundFunction(value, key, map)) return stop(); + }, { + AS_ENTRIES: true, + IS_ITERATOR: true, + INTERRUPTED: true + }).stopped; + } + }); + + var $$12 = _export; + + var IS_PURE$o = isPure; + + var anObject$s = anObject$1C; + + var aCallable$c = aCallable$Q; // `Set.prototype.update` method + // https://github.com/tc39/proposal-collection-methods + + + $$12({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$o + }, { + update: function update(key, callback + /* , thunk */ + ) { + var map = anObject$s(this); + var length = arguments.length; + aCallable$c(callback); + var isPresentInMap = map.has(key); + + if (!isPresentInMap && length < 3) { + throw TypeError('Updating absent value'); + } + + var value = isPresentInMap ? map.get(key) : aCallable$c(length > 2 ? arguments[2] : undefined)(key, map); + map.set(key, callback(value, key, map)); + return map; + } + }); + + var isCallable$4 = isCallable$z; + + var anObject$r = anObject$1C; // `Map.prototype.upsert` method + // https://github.com/thumbsupep/proposal-upsert + + + var mapUpsert = function upsert(key, updateFn + /* , insertFn */ + ) { + var map = anObject$r(this); + var insertFn = arguments.length > 2 ? arguments[2] : undefined; + var value; + + if (!isCallable$4(updateFn) && !isCallable$4(insertFn)) { + throw TypeError('At least one callback required'); + } + + if (map.has(key)) { + value = map.get(key); + + if (isCallable$4(updateFn)) { + value = updateFn(value); + map.set(key, value); + } + } else if (isCallable$4(insertFn)) { + value = insertFn(); + map.set(key, value); + } + + return value; + }; + + var $$11 = _export; + + var IS_PURE$n = isPure; + + var $upsert$2 = mapUpsert; // `Map.prototype.updateOrInsert` method (replaced by `Map.prototype.emplace`) + // https://github.com/thumbsupep/proposal-upsert + + + $$11({ + target: 'Map', + proto: true, + real: true, + name: 'upsert', + forced: IS_PURE$n + }, { + updateOrInsert: $upsert$2 + }); + + var $$10 = _export; + + var IS_PURE$m = isPure; + + var $upsert$1 = mapUpsert; // `Map.prototype.upsert` method (replaced by `Map.prototype.emplace`) + // https://github.com/thumbsupep/proposal-upsert + + + $$10({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$m + }, { + upsert: $upsert$1 + }); + + var $$$ = _export; + + var min = Math.min; + var max = Math.max; // `Math.clamp` method + // https://rwaldron.github.io/proposal-math-extensions/ + + $$$({ + target: 'Math', + stat: true + }, { + clamp: function clamp(x, lower, upper) { + return min(upper, max(lower, x)); + } + }); + + var $$_ = _export; // `Math.DEG_PER_RAD` constant + // https://rwaldron.github.io/proposal-math-extensions/ + + + $$_({ + target: 'Math', + stat: true + }, { + DEG_PER_RAD: Math.PI / 180 + }); + + var $$Z = _export; + + var RAD_PER_DEG = 180 / Math.PI; // `Math.degrees` method + // https://rwaldron.github.io/proposal-math-extensions/ + + $$Z({ + target: 'Math', + stat: true + }, { + degrees: function degrees(radians) { + return radians * RAD_PER_DEG; + } + }); + + // `Math.scale` method implementation + // https://rwaldron.github.io/proposal-math-extensions/ + var mathScale = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) { + if (arguments.length === 0 + /* eslint-disable no-self-compare -- NaN check */ + || x != x || inLow != inLow || inHigh != inHigh || outLow != outLow || outHigh != outHigh + /* eslint-enable no-self-compare -- NaN check */ + ) return NaN; + if (x === Infinity || x === -Infinity) return x; + return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow; + }; + + var $$Y = _export; + + var scale$1 = mathScale; + + var fround = mathFround; // `Math.fscale` method + // https://rwaldron.github.io/proposal-math-extensions/ + + + $$Y({ + target: 'Math', + stat: true + }, { + fscale: function fscale(x, inLow, inHigh, outLow, outHigh) { + return fround(scale$1(x, inLow, inHigh, outLow, outHigh)); + } + }); + + var $$X = _export; // `Math.iaddh` method + // https://gist.github.com/BrendanEich/4294d5c212a6d2254703 + // TODO: Remove from `core-js@4` + + + $$X({ + target: 'Math', + stat: true + }, { + iaddh: function iaddh(x0, x1, y0, y1) { + var $x0 = x0 >>> 0; + var $x1 = x1 >>> 0; + var $y0 = y0 >>> 0; + return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0; + } + }); + + var $$W = _export; // `Math.imulh` method + // https://gist.github.com/BrendanEich/4294d5c212a6d2254703 + // TODO: Remove from `core-js@4` + + + $$W({ + target: 'Math', + stat: true + }, { + imulh: function imulh(u, v) { + var UINT16 = 0xFFFF; + var $u = +u; + var $v = +v; + var u0 = $u & UINT16; + var v0 = $v & UINT16; + var u1 = $u >> 16; + var v1 = $v >> 16; + var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16); + return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16); + } + }); + + var $$V = _export; // `Math.isubh` method + // https://gist.github.com/BrendanEich/4294d5c212a6d2254703 + // TODO: Remove from `core-js@4` + + + $$V({ + target: 'Math', + stat: true + }, { + isubh: function isubh(x0, x1, y0, y1) { + var $x0 = x0 >>> 0; + var $x1 = x1 >>> 0; + var $y0 = y0 >>> 0; + return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0; + } + }); + + var $$U = _export; // `Math.RAD_PER_DEG` constant + // https://rwaldron.github.io/proposal-math-extensions/ + + + $$U({ + target: 'Math', + stat: true + }, { + RAD_PER_DEG: 180 / Math.PI + }); + + var $$T = _export; + + var DEG_PER_RAD = Math.PI / 180; // `Math.radians` method + // https://rwaldron.github.io/proposal-math-extensions/ + + $$T({ + target: 'Math', + stat: true + }, { + radians: function radians(degrees) { + return degrees * DEG_PER_RAD; + } + }); + + var $$S = _export; + + var scale = mathScale; // `Math.scale` method + // https://rwaldron.github.io/proposal-math-extensions/ + + + $$S({ + target: 'Math', + stat: true + }, { + scale: scale + }); + + var $$R = _export; + + var anObject$q = anObject$1C; + + var numberIsFinite = numberIsFinite$2; + + var createIteratorConstructor$3 = createIteratorConstructor$7; + + var InternalStateModule$5 = internalState; + + var SEEDED_RANDOM = 'Seeded Random'; + var SEEDED_RANDOM_GENERATOR = SEEDED_RANDOM + ' Generator'; + var setInternalState$5 = InternalStateModule$5.set; + var getInternalState$3 = InternalStateModule$5.getterFor(SEEDED_RANDOM_GENERATOR); + var SEED_TYPE_ERROR = 'Math.seededPRNG() argument should have a "seed" field with a finite value.'; + var $SeededRandomGenerator = createIteratorConstructor$3(function SeededRandomGenerator(seed) { + setInternalState$5(this, { + type: SEEDED_RANDOM_GENERATOR, + seed: seed % 2147483647 + }); + }, SEEDED_RANDOM, function next() { + var state = getInternalState$3(this); + var seed = state.seed = (state.seed * 1103515245 + 12345) % 2147483647; + return { + value: (seed & 1073741823) / 1073741823, + done: false + }; + }); // `Math.seededPRNG` method + // https://github.com/tc39/proposal-seeded-random + // based on https://github.com/tc39/proposal-seeded-random/blob/78b8258835b57fc2100d076151ab506bc3202ae6/demo.html + + $$R({ + target: 'Math', + stat: true, + forced: true + }, { + seededPRNG: function seededPRNG(it) { + var seed = anObject$q(it).seed; + if (!numberIsFinite(seed)) throw TypeError(SEED_TYPE_ERROR); + return new $SeededRandomGenerator(seed); + } + }); + + var $$Q = _export; // `Math.signbit` method + // https://github.com/tc39/proposal-Math.signbit + + + $$Q({ + target: 'Math', + stat: true + }, { + signbit: function signbit(x) { + return (x = +x) == x && x == 0 ? 1 / x == -Infinity : x < 0; + } + }); + + var $$P = _export; // `Math.umulh` method + // https://gist.github.com/BrendanEich/4294d5c212a6d2254703 + // TODO: Remove from `core-js@4` + + + $$P({ + target: 'Math', + stat: true + }, { + umulh: function umulh(u, v) { + var UINT16 = 0xFFFF; + var $u = +u; + var $v = +v; + var u0 = $u & UINT16; + var v0 = $v & UINT16; + var u1 = $u >>> 16; + var v1 = $v >>> 16; + var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16); + return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16); + } + }); + + var $$O = _export; + + var toIntegerOrInfinity = toIntegerOrInfinity$i; + + var parseInt$1 = numberParseInt; + + var INVALID_NUMBER_REPRESENTATION = 'Invalid number representation'; + var INVALID_RADIX = 'Invalid radix'; + var valid = /^[\da-z]+$/; // `Number.fromString` method + // https://github.com/tc39/proposal-number-fromstring + + $$O({ + target: 'Number', + stat: true + }, { + fromString: function fromString(string, radix) { + var sign = 1; + var R, mathNum; + if (typeof string != 'string') throw TypeError(INVALID_NUMBER_REPRESENTATION); + if (!string.length) throw SyntaxError(INVALID_NUMBER_REPRESENTATION); + + if (string.charAt(0) == '-') { + sign = -1; + string = string.slice(1); + if (!string.length) throw SyntaxError(INVALID_NUMBER_REPRESENTATION); + } + + R = radix === undefined ? 10 : toIntegerOrInfinity(radix); + if (R < 2 || R > 36) throw RangeError(INVALID_RADIX); + + if (!valid.test(string) || (mathNum = parseInt$1(string, R)).toString(R) !== string) { + throw SyntaxError(INVALID_NUMBER_REPRESENTATION); + } + + return sign * mathNum; + } + }); + + var $$N = _export; + + var NumericRangeIterator = numericRangeIterator; // `Number.range` method + // https://github.com/tc39/proposal-Number.range + + + $$N({ + target: 'Number', + stat: true + }, { + range: function range(start, end, option) { + return new NumericRangeIterator(start, end, option, 'number', 0, 1); + } + }); + + var InternalStateModule$4 = internalState; + + var createIteratorConstructor$2 = createIteratorConstructor$7; + + var hasOwn$2 = hasOwnProperty_1; + + var objectKeys = objectKeys$5; + + var toObject$1 = toObject$A; + + var OBJECT_ITERATOR = 'Object Iterator'; + var setInternalState$4 = InternalStateModule$4.set; + var getInternalState$2 = InternalStateModule$4.getterFor(OBJECT_ITERATOR); + var objectIterator = createIteratorConstructor$2(function ObjectIterator(source, mode) { + var object = toObject$1(source); + setInternalState$4(this, { + type: OBJECT_ITERATOR, + mode: mode, + object: object, + keys: objectKeys(object), + index: 0 + }); + }, 'Object', function next() { + var state = getInternalState$2(this); + var keys = state.keys; + + while (true) { + if (keys === null || state.index >= keys.length) { + state.object = state.keys = null; + return { + value: undefined, + done: true + }; + } + + var key = keys[state.index++]; + var object = state.object; + if (!hasOwn$2(object, key)) continue; + + switch (state.mode) { + case 'keys': + return { + value: key, + done: false + }; + + case 'values': + return { + value: object[key], + done: false + }; + } + /* entries */ + + + return { + value: [key, object[key]], + done: false + }; + } + }); + + var $$M = _export; + + var ObjectIterator$2 = objectIterator; // `Object.iterateEntries` method + // https://github.com/tc39/proposal-object-iteration + + + $$M({ + target: 'Object', + stat: true + }, { + iterateEntries: function iterateEntries(object) { + return new ObjectIterator$2(object, 'entries'); + } + }); + + var $$L = _export; + + var ObjectIterator$1 = objectIterator; // `Object.iterateKeys` method + // https://github.com/tc39/proposal-object-iteration + + + $$L({ + target: 'Object', + stat: true + }, { + iterateKeys: function iterateKeys(object) { + return new ObjectIterator$1(object, 'keys'); + } + }); + + var $$K = _export; + + var ObjectIterator = objectIterator; // `Object.iterateValues` method + // https://github.com/tc39/proposal-object-iteration + + + $$K({ + target: 'Object', + stat: true + }, { + iterateValues: function iterateValues(object) { + return new ObjectIterator(object, 'values'); + } + }); + + var $$J = _export; + + var DESCRIPTORS$1 = descriptors; + + var setSpecies = setSpecies$7; + + var aCallable$b = aCallable$Q; + + var isCallable$3 = isCallable$z; + + var isConstructor = isConstructor$7; + + var anObject$p = anObject$1C; + + var isObject$1 = isObject$C; + + var anInstance$2 = anInstance$b; + + var defineProperty$1 = objectDefineProperty.f; + + var redefine$2 = redefine$l.exports; + + var redefineAll$1 = redefineAll$a; + + var getIterator$2 = getIterator$b; + + var getMethod = getMethod$h; + + var iterate$f = iterate$I; + + var hostReportErrors = hostReportErrors$2; + + var wellKnownSymbol$3 = wellKnownSymbol$G; + + var InternalStateModule$3 = internalState; + + var OBSERVABLE = wellKnownSymbol$3('observable'); + var getInternalState$1 = InternalStateModule$3.get; + var setInternalState$3 = InternalStateModule$3.set; + + var cleanupSubscription = function (subscriptionState) { + var cleanup = subscriptionState.cleanup; + + if (cleanup) { + subscriptionState.cleanup = undefined; + + try { + cleanup(); + } catch (error) { + hostReportErrors(error); + } + } + }; + + var subscriptionClosed = function (subscriptionState) { + return subscriptionState.observer === undefined; + }; + + var close = function (subscriptionState) { + var subscription = subscriptionState.facade; + + if (!DESCRIPTORS$1) { + subscription.closed = true; + var subscriptionObserver = subscriptionState.subscriptionObserver; + if (subscriptionObserver) subscriptionObserver.closed = true; + } + + subscriptionState.observer = undefined; + }; + + var Subscription = function (observer, subscriber) { + var subscriptionState = setInternalState$3(this, { + cleanup: undefined, + observer: anObject$p(observer), + subscriptionObserver: undefined + }); + var start; + if (!DESCRIPTORS$1) this.closed = false; + + try { + if (start = getMethod(observer, 'start')) start.call(observer, this); + } catch (error) { + hostReportErrors(error); + } + + if (subscriptionClosed(subscriptionState)) return; + var subscriptionObserver = subscriptionState.subscriptionObserver = new SubscriptionObserver(this); + + try { + var cleanup = subscriber(subscriptionObserver); + var subscription = cleanup; + if (cleanup != null) subscriptionState.cleanup = isCallable$3(cleanup.unsubscribe) ? function () { + subscription.unsubscribe(); + } : aCallable$b(cleanup); + } catch (error) { + subscriptionObserver.error(error); + return; + } + + if (subscriptionClosed(subscriptionState)) cleanupSubscription(subscriptionState); + }; + + Subscription.prototype = redefineAll$1({}, { + unsubscribe: function unsubscribe() { + var subscriptionState = getInternalState$1(this); + + if (!subscriptionClosed(subscriptionState)) { + close(subscriptionState); + cleanupSubscription(subscriptionState); + } + } + }); + if (DESCRIPTORS$1) defineProperty$1(Subscription.prototype, 'closed', { + configurable: true, + get: function () { + return subscriptionClosed(getInternalState$1(this)); + } + }); + + var SubscriptionObserver = function (subscription) { + setInternalState$3(this, { + subscription: subscription + }); + if (!DESCRIPTORS$1) this.closed = false; + }; + + SubscriptionObserver.prototype = redefineAll$1({}, { + next: function next(value) { + var subscriptionState = getInternalState$1(getInternalState$1(this).subscription); + + if (!subscriptionClosed(subscriptionState)) { + var observer = subscriptionState.observer; + + try { + var nextMethod = getMethod(observer, 'next'); + if (nextMethod) nextMethod.call(observer, value); + } catch (error) { + hostReportErrors(error); + } + } + }, + error: function error(value) { + var subscriptionState = getInternalState$1(getInternalState$1(this).subscription); + + if (!subscriptionClosed(subscriptionState)) { + var observer = subscriptionState.observer; + close(subscriptionState); + + try { + var errorMethod = getMethod(observer, 'error'); + if (errorMethod) errorMethod.call(observer, value);else hostReportErrors(value); + } catch (err) { + hostReportErrors(err); + } + + cleanupSubscription(subscriptionState); + } + }, + complete: function complete() { + var subscriptionState = getInternalState$1(getInternalState$1(this).subscription); + + if (!subscriptionClosed(subscriptionState)) { + var observer = subscriptionState.observer; + close(subscriptionState); + + try { + var completeMethod = getMethod(observer, 'complete'); + if (completeMethod) completeMethod.call(observer); + } catch (error) { + hostReportErrors(error); + } + + cleanupSubscription(subscriptionState); + } + } + }); + if (DESCRIPTORS$1) defineProperty$1(SubscriptionObserver.prototype, 'closed', { + configurable: true, + get: function () { + return subscriptionClosed(getInternalState$1(getInternalState$1(this).subscription)); + } + }); + + var $Observable = function Observable(subscriber) { + anInstance$2(this, $Observable, 'Observable'); + setInternalState$3(this, { + subscriber: aCallable$b(subscriber) + }); + }; + + redefineAll$1($Observable.prototype, { + subscribe: function subscribe(observer) { + var length = arguments.length; + return new Subscription(isCallable$3(observer) ? { + next: observer, + error: length > 1 ? arguments[1] : undefined, + complete: length > 2 ? arguments[2] : undefined + } : isObject$1(observer) ? observer : {}, getInternalState$1(this).subscriber); + } + }); + redefineAll$1($Observable, { + from: function from(x) { + var C = isConstructor(this) ? this : $Observable; + var observableMethod = getMethod(anObject$p(x), OBSERVABLE); + + if (observableMethod) { + var observable = anObject$p(observableMethod.call(x)); + return observable.constructor === C ? observable : new C(function (observer) { + return observable.subscribe(observer); + }); + } + + var iterator = getIterator$2(x); + return new C(function (observer) { + iterate$f(iterator, function (it, stop) { + observer.next(it); + if (observer.closed) return stop(); + }, { + IS_ITERATOR: true, + INTERRUPTED: true + }); + observer.complete(); + }); + }, + of: function of() { + var C = isConstructor(this) ? this : $Observable; + var length = arguments.length; + var items = new Array(length); + var index = 0; + + while (index < length) items[index] = arguments[index++]; + + return new C(function (observer) { + for (var i = 0; i < length; i++) { + observer.next(items[i]); + if (observer.closed) return; + } + + observer.complete(); + }); + } + }); + redefine$2($Observable.prototype, OBSERVABLE, function () { + return this; + }); + $$J({ + global: true + }, { + Observable: $Observable + }); + setSpecies('Observable'); + + var $$I = _export; + + var newPromiseCapabilityModule = newPromiseCapability$2; + + var perform = perform$4; // `Promise.try` method + // https://github.com/tc39/proposal-promise-try + + + $$I({ + target: 'Promise', + stat: true + }, { + 'try': function (callbackfn) { + var promiseCapability = newPromiseCapabilityModule.f(this); + var result = perform(callbackfn); + (result.error ? promiseCapability.reject : promiseCapability.resolve)(result.value); + return promiseCapability.promise; + } + }); + + // TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env` + var Map$1 = es_map; + + var WeakMap = es_weakMap.exports; + + var shared = shared$7.exports; + + var metadata = shared('metadata'); + var store$1 = metadata.store || (metadata.store = new WeakMap()); + + var getOrCreateMetadataMap$1 = function (target, targetKey, create) { + var targetMetadata = store$1.get(target); + + if (!targetMetadata) { + if (!create) return; + store$1.set(target, targetMetadata = new Map$1()); + } + + var keyMetadata = targetMetadata.get(targetKey); + + if (!keyMetadata) { + if (!create) return; + targetMetadata.set(targetKey, keyMetadata = new Map$1()); + } + + return keyMetadata; + }; + + var ordinaryHasOwnMetadata$3 = function (MetadataKey, O, P) { + var metadataMap = getOrCreateMetadataMap$1(O, P, false); + return metadataMap === undefined ? false : metadataMap.has(MetadataKey); + }; + + var ordinaryGetOwnMetadata$2 = function (MetadataKey, O, P) { + var metadataMap = getOrCreateMetadataMap$1(O, P, false); + return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey); + }; + + var ordinaryDefineOwnMetadata$2 = function (MetadataKey, MetadataValue, O, P) { + getOrCreateMetadataMap$1(O, P, true).set(MetadataKey, MetadataValue); + }; + + var ordinaryOwnMetadataKeys$2 = function (target, targetKey) { + var metadataMap = getOrCreateMetadataMap$1(target, targetKey, false); + var keys = []; + if (metadataMap) metadataMap.forEach(function (_, key) { + keys.push(key); + }); + return keys; + }; + + var toMetadataKey$9 = function (it) { + return it === undefined || typeof it == 'symbol' ? it : String(it); + }; + + var reflectMetadata = { + store: store$1, + getMap: getOrCreateMetadataMap$1, + has: ordinaryHasOwnMetadata$3, + get: ordinaryGetOwnMetadata$2, + set: ordinaryDefineOwnMetadata$2, + keys: ordinaryOwnMetadataKeys$2, + toKey: toMetadataKey$9 + }; + + var $$H = _export; + + var ReflectMetadataModule$8 = reflectMetadata; + + var anObject$o = anObject$1C; + + var toMetadataKey$8 = ReflectMetadataModule$8.toKey; + var ordinaryDefineOwnMetadata$1 = ReflectMetadataModule$8.set; // `Reflect.defineMetadata` method + // https://github.com/rbuckton/reflect-metadata + + $$H({ + target: 'Reflect', + stat: true + }, { + defineMetadata: function defineMetadata(metadataKey, metadataValue, target + /* , targetKey */ + ) { + var targetKey = arguments.length < 4 ? undefined : toMetadataKey$8(arguments[3]); + ordinaryDefineOwnMetadata$1(metadataKey, metadataValue, anObject$o(target), targetKey); + } + }); + + var $$G = _export; + + var ReflectMetadataModule$7 = reflectMetadata; + + var anObject$n = anObject$1C; + + var toMetadataKey$7 = ReflectMetadataModule$7.toKey; + var getOrCreateMetadataMap = ReflectMetadataModule$7.getMap; + var store = ReflectMetadataModule$7.store; // `Reflect.deleteMetadata` method + // https://github.com/rbuckton/reflect-metadata + + $$G({ + target: 'Reflect', + stat: true + }, { + deleteMetadata: function deleteMetadata(metadataKey, target + /* , targetKey */ + ) { + var targetKey = arguments.length < 3 ? undefined : toMetadataKey$7(arguments[2]); + var metadataMap = getOrCreateMetadataMap(anObject$n(target), targetKey, false); + if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false; + if (metadataMap.size) return true; + var targetMetadata = store.get(target); + targetMetadata['delete'](targetKey); + return !!targetMetadata.size || store['delete'](target); + } + }); + + var $$F = _export; + + var ReflectMetadataModule$6 = reflectMetadata; + + var anObject$m = anObject$1C; + + var getPrototypeOf$3 = objectGetPrototypeOf$1; + + var ordinaryHasOwnMetadata$2 = ReflectMetadataModule$6.has; + var ordinaryGetOwnMetadata$1 = ReflectMetadataModule$6.get; + var toMetadataKey$6 = ReflectMetadataModule$6.toKey; + + var ordinaryGetMetadata = function (MetadataKey, O, P) { + var hasOwn = ordinaryHasOwnMetadata$2(MetadataKey, O, P); + if (hasOwn) return ordinaryGetOwnMetadata$1(MetadataKey, O, P); + var parent = getPrototypeOf$3(O); + return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined; + }; // `Reflect.getMetadata` method + // https://github.com/rbuckton/reflect-metadata + + + $$F({ + target: 'Reflect', + stat: true + }, { + getMetadata: function getMetadata(metadataKey, target + /* , targetKey */ + ) { + var targetKey = arguments.length < 3 ? undefined : toMetadataKey$6(arguments[2]); + return ordinaryGetMetadata(metadataKey, anObject$m(target), targetKey); + } + }); + + var $$E = _export; // TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env` + + + var Set$1 = es_set; + + var ReflectMetadataModule$5 = reflectMetadata; + + var anObject$l = anObject$1C; + + var getPrototypeOf$2 = objectGetPrototypeOf$1; + + var iterate$e = iterate$I; + + var ordinaryOwnMetadataKeys$1 = ReflectMetadataModule$5.keys; + var toMetadataKey$5 = ReflectMetadataModule$5.toKey; + + var from$3 = function (iter) { + var result = []; + iterate$e(iter, result.push, { + that: result + }); + return result; + }; + + var ordinaryMetadataKeys = function (O, P) { + var oKeys = ordinaryOwnMetadataKeys$1(O, P); + var parent = getPrototypeOf$2(O); + if (parent === null) return oKeys; + var pKeys = ordinaryMetadataKeys(parent, P); + return pKeys.length ? oKeys.length ? from$3(new Set$1(oKeys.concat(pKeys))) : pKeys : oKeys; + }; // `Reflect.getMetadataKeys` method + // https://github.com/rbuckton/reflect-metadata + + + $$E({ + target: 'Reflect', + stat: true + }, { + getMetadataKeys: function getMetadataKeys(target + /* , targetKey */ + ) { + var targetKey = arguments.length < 2 ? undefined : toMetadataKey$5(arguments[1]); + return ordinaryMetadataKeys(anObject$l(target), targetKey); + } + }); + + var $$D = _export; + + var ReflectMetadataModule$4 = reflectMetadata; + + var anObject$k = anObject$1C; + + var ordinaryGetOwnMetadata = ReflectMetadataModule$4.get; + var toMetadataKey$4 = ReflectMetadataModule$4.toKey; // `Reflect.getOwnMetadata` method + // https://github.com/rbuckton/reflect-metadata + + $$D({ + target: 'Reflect', + stat: true + }, { + getOwnMetadata: function getOwnMetadata(metadataKey, target + /* , targetKey */ + ) { + var targetKey = arguments.length < 3 ? undefined : toMetadataKey$4(arguments[2]); + return ordinaryGetOwnMetadata(metadataKey, anObject$k(target), targetKey); + } + }); + + var $$C = _export; + + var ReflectMetadataModule$3 = reflectMetadata; + + var anObject$j = anObject$1C; + + var ordinaryOwnMetadataKeys = ReflectMetadataModule$3.keys; + var toMetadataKey$3 = ReflectMetadataModule$3.toKey; // `Reflect.getOwnMetadataKeys` method + // https://github.com/rbuckton/reflect-metadata + + $$C({ + target: 'Reflect', + stat: true + }, { + getOwnMetadataKeys: function getOwnMetadataKeys(target + /* , targetKey */ + ) { + var targetKey = arguments.length < 2 ? undefined : toMetadataKey$3(arguments[1]); + return ordinaryOwnMetadataKeys(anObject$j(target), targetKey); + } + }); + + var $$B = _export; + + var ReflectMetadataModule$2 = reflectMetadata; + + var anObject$i = anObject$1C; + + var getPrototypeOf$1 = objectGetPrototypeOf$1; + + var ordinaryHasOwnMetadata$1 = ReflectMetadataModule$2.has; + var toMetadataKey$2 = ReflectMetadataModule$2.toKey; + + var ordinaryHasMetadata = function (MetadataKey, O, P) { + var hasOwn = ordinaryHasOwnMetadata$1(MetadataKey, O, P); + if (hasOwn) return true; + var parent = getPrototypeOf$1(O); + return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false; + }; // `Reflect.hasMetadata` method + // https://github.com/rbuckton/reflect-metadata + + + $$B({ + target: 'Reflect', + stat: true + }, { + hasMetadata: function hasMetadata(metadataKey, target + /* , targetKey */ + ) { + var targetKey = arguments.length < 3 ? undefined : toMetadataKey$2(arguments[2]); + return ordinaryHasMetadata(metadataKey, anObject$i(target), targetKey); + } + }); + + var $$A = _export; + + var ReflectMetadataModule$1 = reflectMetadata; + + var anObject$h = anObject$1C; + + var ordinaryHasOwnMetadata = ReflectMetadataModule$1.has; + var toMetadataKey$1 = ReflectMetadataModule$1.toKey; // `Reflect.hasOwnMetadata` method + // https://github.com/rbuckton/reflect-metadata + + $$A({ + target: 'Reflect', + stat: true + }, { + hasOwnMetadata: function hasOwnMetadata(metadataKey, target + /* , targetKey */ + ) { + var targetKey = arguments.length < 3 ? undefined : toMetadataKey$1(arguments[2]); + return ordinaryHasOwnMetadata(metadataKey, anObject$h(target), targetKey); + } + }); + + var $$z = _export; + + var ReflectMetadataModule = reflectMetadata; + + var anObject$g = anObject$1C; + + var toMetadataKey = ReflectMetadataModule.toKey; + var ordinaryDefineOwnMetadata = ReflectMetadataModule.set; // `Reflect.metadata` method + // https://github.com/rbuckton/reflect-metadata + + $$z({ + target: 'Reflect', + stat: true + }, { + metadata: function metadata(metadataKey, metadataValue) { + return function decorator(target, key) { + ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject$g(target), toMetadataKey(key)); + }; + } + }); + + var aCallable$a = aCallable$Q; + + var anObject$f = anObject$1C; // https://github.com/tc39/collection-methods + + + var collectionAddAll$2 = function () { + var set = anObject$f(this); + var adder = aCallable$a(set.add); + + for (var k = 0, len = arguments.length; k < len; k++) { + adder.call(set, arguments[k]); + } + + return set; + }; + + var $$y = _export; + + var IS_PURE$l = isPure; + + var collectionAddAll$1 = collectionAddAll$2; // `Set.prototype.addAll` method + // https://github.com/tc39/proposal-collection-methods + + + $$y({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$l + }, { + addAll: function addAll() { + return collectionAddAll$1.apply(this, arguments); + } + }); + + var $$x = _export; + + var IS_PURE$k = isPure; + + var collectionDeleteAll$2 = collectionDeleteAll$4; // `Set.prototype.deleteAll` method + // https://github.com/tc39/proposal-collection-methods + + + $$x({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$k + }, { + deleteAll: function deleteAll() { + return collectionDeleteAll$2.apply(this, arguments); + } + }); + + var $$w = _export; + + var IS_PURE$j = isPure; + + var getBuiltIn$8 = getBuiltIn$y; + + var aCallable$9 = aCallable$Q; + + var anObject$e = anObject$1C; + + var speciesConstructor$5 = speciesConstructor$f; + + var iterate$d = iterate$I; // `Set.prototype.difference` method + // https://github.com/tc39/proposal-set-methods + + + $$w({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$j + }, { + difference: function difference(iterable) { + var set = anObject$e(this); + var newSet = new (speciesConstructor$5(set, getBuiltIn$8('Set')))(set); + var remover = aCallable$9(newSet['delete']); + iterate$d(iterable, function (value) { + remover.call(newSet, value); + }); + return newSet; + } + }); + + var getSetIterator$7 = function (it) { + // eslint-disable-next-line es/no-set -- safe + return Set.prototype.values.call(it); + }; + + var $$v = _export; + + var IS_PURE$i = isPure; + + var anObject$d = anObject$1C; + + var bind$5 = functionBindContext; + + var getSetIterator$6 = getSetIterator$7; + + var iterate$c = iterate$I; // `Set.prototype.every` method + // https://github.com/tc39/proposal-collection-methods + + + $$v({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$i + }, { + every: function every(callbackfn + /* , thisArg */ + ) { + var set = anObject$d(this); + var iterator = getSetIterator$6(set); + var boundFunction = bind$5(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + return !iterate$c(iterator, function (value, stop) { + if (!boundFunction(value, value, set)) return stop(); + }, { + IS_ITERATOR: true, + INTERRUPTED: true + }).stopped; + } + }); + + var $$u = _export; + + var IS_PURE$h = isPure; + + var getBuiltIn$7 = getBuiltIn$y; + + var aCallable$8 = aCallable$Q; + + var anObject$c = anObject$1C; + + var bind$4 = functionBindContext; + + var speciesConstructor$4 = speciesConstructor$f; + + var getSetIterator$5 = getSetIterator$7; + + var iterate$b = iterate$I; // `Set.prototype.filter` method + // https://github.com/tc39/proposal-collection-methods + + + $$u({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$h + }, { + filter: function filter(callbackfn + /* , thisArg */ + ) { + var set = anObject$c(this); + var iterator = getSetIterator$5(set); + var boundFunction = bind$4(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + var newSet = new (speciesConstructor$4(set, getBuiltIn$7('Set')))(); + var adder = aCallable$8(newSet.add); + iterate$b(iterator, function (value) { + if (boundFunction(value, value, set)) adder.call(newSet, value); + }, { + IS_ITERATOR: true + }); + return newSet; + } + }); + + var $$t = _export; + + var IS_PURE$g = isPure; + + var anObject$b = anObject$1C; + + var bind$3 = functionBindContext; + + var getSetIterator$4 = getSetIterator$7; + + var iterate$a = iterate$I; // `Set.prototype.find` method + // https://github.com/tc39/proposal-collection-methods + + + $$t({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$g + }, { + find: function find(callbackfn + /* , thisArg */ + ) { + var set = anObject$b(this); + var iterator = getSetIterator$4(set); + var boundFunction = bind$3(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + return iterate$a(iterator, function (value, stop) { + if (boundFunction(value, value, set)) return stop(value); + }, { + IS_ITERATOR: true, + INTERRUPTED: true + }).result; + } + }); + + var $$s = _export; + + var from$2 = collectionFrom; // `Set.from` method + // https://tc39.github.io/proposal-setmap-offrom/#sec-set.from + + + $$s({ + target: 'Set', + stat: true + }, { + from: from$2 + }); + + var $$r = _export; + + var IS_PURE$f = isPure; + + var getBuiltIn$6 = getBuiltIn$y; + + var aCallable$7 = aCallable$Q; + + var anObject$a = anObject$1C; + + var speciesConstructor$3 = speciesConstructor$f; + + var iterate$9 = iterate$I; // `Set.prototype.intersection` method + // https://github.com/tc39/proposal-set-methods + + + $$r({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$f + }, { + intersection: function intersection(iterable) { + var set = anObject$a(this); + var newSet = new (speciesConstructor$3(set, getBuiltIn$6('Set')))(); + var hasCheck = aCallable$7(set.has); + var adder = aCallable$7(newSet.add); + iterate$9(iterable, function (value) { + if (hasCheck.call(set, value)) adder.call(newSet, value); + }); + return newSet; + } + }); + + var $$q = _export; + + var IS_PURE$e = isPure; + + var aCallable$6 = aCallable$Q; + + var anObject$9 = anObject$1C; + + var iterate$8 = iterate$I; // `Set.prototype.isDisjointFrom` method + // https://tc39.github.io/proposal-set-methods/#Set.prototype.isDisjointFrom + + + $$q({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$e + }, { + isDisjointFrom: function isDisjointFrom(iterable) { + var set = anObject$9(this); + var hasCheck = aCallable$6(set.has); + return !iterate$8(iterable, function (value, stop) { + if (hasCheck.call(set, value) === true) return stop(); + }, { + INTERRUPTED: true + }).stopped; + } + }); + + var $$p = _export; + + var IS_PURE$d = isPure; + + var getBuiltIn$5 = getBuiltIn$y; + + var aCallable$5 = aCallable$Q; + + var isCallable$2 = isCallable$z; + + var anObject$8 = anObject$1C; + + var getIterator$1 = getIterator$b; + + var iterate$7 = iterate$I; // `Set.prototype.isSubsetOf` method + // https://tc39.github.io/proposal-set-methods/#Set.prototype.isSubsetOf + + + $$p({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$d + }, { + isSubsetOf: function isSubsetOf(iterable) { + var iterator = getIterator$1(this); + var otherSet = anObject$8(iterable); + var hasCheck = otherSet.has; + + if (!isCallable$2(hasCheck)) { + otherSet = new (getBuiltIn$5('Set'))(iterable); + hasCheck = aCallable$5(otherSet.has); + } + + return !iterate$7(iterator, function (value, stop) { + if (hasCheck.call(otherSet, value) === false) return stop(); + }, { + IS_ITERATOR: true, + INTERRUPTED: true + }).stopped; + } + }); + + var $$o = _export; + + var IS_PURE$c = isPure; + + var aCallable$4 = aCallable$Q; + + var anObject$7 = anObject$1C; + + var iterate$6 = iterate$I; // `Set.prototype.isSupersetOf` method + // https://tc39.github.io/proposal-set-methods/#Set.prototype.isSupersetOf + + + $$o({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$c + }, { + isSupersetOf: function isSupersetOf(iterable) { + var set = anObject$7(this); + var hasCheck = aCallable$4(set.has); + return !iterate$6(iterable, function (value, stop) { + if (hasCheck.call(set, value) === false) return stop(); + }, { + INTERRUPTED: true + }).stopped; + } + }); + + var $$n = _export; + + var IS_PURE$b = isPure; + + var anObject$6 = anObject$1C; + + var getSetIterator$3 = getSetIterator$7; + + var iterate$5 = iterate$I; // `Set.prototype.join` method + // https://github.com/tc39/proposal-collection-methods + + + $$n({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$b + }, { + join: function join(separator) { + var set = anObject$6(this); + var iterator = getSetIterator$3(set); + var sep = separator === undefined ? ',' : String(separator); + var result = []; + iterate$5(iterator, result.push, { + that: result, + IS_ITERATOR: true + }); + return result.join(sep); + } + }); + + var $$m = _export; + + var IS_PURE$a = isPure; + + var getBuiltIn$4 = getBuiltIn$y; + + var aCallable$3 = aCallable$Q; + + var anObject$5 = anObject$1C; + + var bind$2 = functionBindContext; + + var speciesConstructor$2 = speciesConstructor$f; + + var getSetIterator$2 = getSetIterator$7; + + var iterate$4 = iterate$I; // `Set.prototype.map` method + // https://github.com/tc39/proposal-collection-methods + + + $$m({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$a + }, { + map: function map(callbackfn + /* , thisArg */ + ) { + var set = anObject$5(this); + var iterator = getSetIterator$2(set); + var boundFunction = bind$2(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + var newSet = new (speciesConstructor$2(set, getBuiltIn$4('Set')))(); + var adder = aCallable$3(newSet.add); + iterate$4(iterator, function (value) { + adder.call(newSet, boundFunction(value, value, set)); + }, { + IS_ITERATOR: true + }); + return newSet; + } + }); + + var $$l = _export; + + var of$2 = collectionOf; // `Set.of` method + // https://tc39.github.io/proposal-setmap-offrom/#sec-set.of + + + $$l({ + target: 'Set', + stat: true + }, { + of: of$2 + }); + + var $$k = _export; + + var IS_PURE$9 = isPure; + + var aCallable$2 = aCallable$Q; + + var anObject$4 = anObject$1C; + + var getSetIterator$1 = getSetIterator$7; + + var iterate$3 = iterate$I; // `Set.prototype.reduce` method + // https://github.com/tc39/proposal-collection-methods + + + $$k({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$9 + }, { + reduce: function reduce(callbackfn + /* , initialValue */ + ) { + var set = anObject$4(this); + var iterator = getSetIterator$1(set); + var noInitial = arguments.length < 2; + var accumulator = noInitial ? undefined : arguments[1]; + aCallable$2(callbackfn); + iterate$3(iterator, function (value) { + if (noInitial) { + noInitial = false; + accumulator = value; + } else { + accumulator = callbackfn(accumulator, value, value, set); + } + }, { + IS_ITERATOR: true + }); + if (noInitial) throw TypeError('Reduce of empty set with no initial value'); + return accumulator; + } + }); + + var $$j = _export; + + var IS_PURE$8 = isPure; + + var anObject$3 = anObject$1C; + + var bind$1 = functionBindContext; + + var getSetIterator = getSetIterator$7; + + var iterate$2 = iterate$I; // `Set.prototype.some` method + // https://github.com/tc39/proposal-collection-methods + + + $$j({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$8 + }, { + some: function some(callbackfn + /* , thisArg */ + ) { + var set = anObject$3(this); + var iterator = getSetIterator(set); + var boundFunction = bind$1(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + return iterate$2(iterator, function (value, stop) { + if (boundFunction(value, value, set)) return stop(); + }, { + IS_ITERATOR: true, + INTERRUPTED: true + }).stopped; + } + }); + + var $$i = _export; + + var IS_PURE$7 = isPure; + + var getBuiltIn$3 = getBuiltIn$y; + + var aCallable$1 = aCallable$Q; + + var anObject$2 = anObject$1C; + + var speciesConstructor$1 = speciesConstructor$f; + + var iterate$1 = iterate$I; // `Set.prototype.symmetricDifference` method + // https://github.com/tc39/proposal-set-methods + + + $$i({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$7 + }, { + symmetricDifference: function symmetricDifference(iterable) { + var set = anObject$2(this); + var newSet = new (speciesConstructor$1(set, getBuiltIn$3('Set')))(set); + var remover = aCallable$1(newSet['delete']); + var adder = aCallable$1(newSet.add); + iterate$1(iterable, function (value) { + remover.call(newSet, value) || adder.call(newSet, value); + }); + return newSet; + } + }); + + var $$h = _export; + + var IS_PURE$6 = isPure; + + var getBuiltIn$2 = getBuiltIn$y; + + var aCallable = aCallable$Q; + + var anObject$1 = anObject$1C; + + var speciesConstructor = speciesConstructor$f; + + var iterate = iterate$I; // `Set.prototype.union` method + // https://github.com/tc39/proposal-set-methods + + + $$h({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$6 + }, { + union: function union(iterable) { + var set = anObject$1(this); + var newSet = new (speciesConstructor(set, getBuiltIn$2('Set')))(set); + iterate(iterable, aCallable(newSet.add), { + that: newSet + }); + return newSet; + } + }); + + var $$g = _export; + + var charAt$1 = stringMultibyte.charAt; + + var fails$1 = fails$15; + + var FORCED$1 = fails$1(function () { + return '𠮷'.at(0) !== '𠮷'; + }); // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + + $$g({ + target: 'String', + proto: true, + forced: FORCED$1 + }, { + at: function at(pos) { + return charAt$1(this, pos); + } + }); + + var $$f = _export; + + var createIteratorConstructor$1 = createIteratorConstructor$7; + + var requireObjectCoercible = requireObjectCoercible$j; + + var toString = toString$t; + + var InternalStateModule$2 = internalState; + + var StringMultibyteModule = stringMultibyte; + + var codeAt$1 = StringMultibyteModule.codeAt; + var charAt = StringMultibyteModule.charAt; + var STRING_ITERATOR = 'String Iterator'; + var setInternalState$2 = InternalStateModule$2.set; + var getInternalState = InternalStateModule$2.getterFor(STRING_ITERATOR); // TODO: unify with String#@@iterator + + var $StringIterator = createIteratorConstructor$1(function StringIterator(string) { + setInternalState$2(this, { + type: STRING_ITERATOR, + string: string, + index: 0 + }); + }, 'String', function next() { + var state = getInternalState(this); + var string = state.string; + var index = state.index; + var point; + if (index >= string.length) return { + value: undefined, + done: true + }; + point = charAt(string, index); + state.index += point.length; + return { + value: { + codePoint: codeAt$1(point, 0), + position: index + }, + done: false + }; + }); // `String.prototype.codePoints` method + // https://github.com/tc39/proposal-string-prototype-codepoints + + $$f({ + target: 'String', + proto: true + }, { + codePoints: function codePoints() { + return new $StringIterator(toString(requireObjectCoercible(this))); + } + }); + + var defineWellKnownSymbol$6 = defineWellKnownSymbol$l; // `Symbol.asyncDispose` well-known symbol + // https://github.com/tc39/proposal-using-statement + + + defineWellKnownSymbol$6('asyncDispose'); + + var defineWellKnownSymbol$5 = defineWellKnownSymbol$l; // `Symbol.dispose` well-known symbol + // https://github.com/tc39/proposal-using-statement + + + defineWellKnownSymbol$5('dispose'); + + var defineWellKnownSymbol$4 = defineWellKnownSymbol$l; // `Symbol.matcher` well-known symbol + // https://github.com/tc39/proposal-pattern-matching + + + defineWellKnownSymbol$4('matcher'); + + var defineWellKnownSymbol$3 = defineWellKnownSymbol$l; // `Symbol.metadata` well-known symbol + // https://github.com/tc39/proposal-decorators + + + defineWellKnownSymbol$3('metadata'); + + var defineWellKnownSymbol$2 = defineWellKnownSymbol$l; // `Symbol.observable` well-known symbol + // https://github.com/tc39/proposal-observable + + + defineWellKnownSymbol$2('observable'); + + // TODO: remove from `core-js@4` + var defineWellKnownSymbol$1 = defineWellKnownSymbol$l; // `Symbol.patternMatch` well-known symbol + // https://github.com/tc39/proposal-pattern-matching + + + defineWellKnownSymbol$1('patternMatch'); + + // TODO: remove from `core-js@4` + var defineWellKnownSymbol = defineWellKnownSymbol$l; + + defineWellKnownSymbol('replaceAll'); + + var getBuiltIn$1 = getBuiltIn$y; + + var aConstructor = aConstructor$5; + + var arrayFromAsync = arrayFromAsync$1; + + var TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = typedArrayConstructorsRequireWrappers; + + var ArrayBufferViewCore$6 = arrayBufferViewCore; + + var arrayFromConstructorAndList = arrayFromConstructorAndList$3; + + var aTypedArrayConstructor = ArrayBufferViewCore$6.aTypedArrayConstructor; + var exportTypedArrayStaticMethod = ArrayBufferViewCore$6.exportTypedArrayStaticMethod; // `%TypedArray%.fromAsync` method + // https://github.com/tc39/proposal-array-from-async + // eslint-disable-next-line -- required for .length + + exportTypedArrayStaticMethod('fromAsync', function fromAsync(asyncItems + /* , mapfn = undefined, thisArg = undefined */ + ) { + var C = this; + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : undefined; + var thisArg = argumentsLength > 2 ? arguments[2] : undefined; + return new (getBuiltIn$1('Promise'))(function (resolve) { + aConstructor(C); + resolve(arrayFromAsync(asyncItems, mapfn, thisArg)); + }).then(function (list) { + return arrayFromConstructorAndList(aTypedArrayConstructor(C), list); + }); + }, TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS); + + var ArrayBufferViewCore$5 = arrayBufferViewCore; + + var $filterReject$1 = arrayIteration.filterReject; + + var fromSpeciesAndList$2 = typedArrayFromSpeciesAndList; + + var aTypedArray$5 = ArrayBufferViewCore$5.aTypedArray; + var exportTypedArrayMethod$5 = ArrayBufferViewCore$5.exportTypedArrayMethod; // `%TypedArray%.prototype.filterOut` method + // https://github.com/tc39/proposal-array-filtering + + exportTypedArrayMethod$5('filterOut', function filterOut(callbackfn + /* , thisArg */ + ) { + var list = $filterReject$1(aTypedArray$5(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + return fromSpeciesAndList$2(this, list); + }); + + var ArrayBufferViewCore$4 = arrayBufferViewCore; + + var $filterReject = arrayIteration.filterReject; + + var fromSpeciesAndList$1 = typedArrayFromSpeciesAndList; + + var aTypedArray$4 = ArrayBufferViewCore$4.aTypedArray; + var exportTypedArrayMethod$4 = ArrayBufferViewCore$4.exportTypedArrayMethod; // `%TypedArray%.prototype.filterReject` method + // https://github.com/tc39/proposal-array-filtering + + exportTypedArrayMethod$4('filterReject', function filterReject(callbackfn + /* , thisArg */ + ) { + var list = $filterReject(aTypedArray$4(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + return fromSpeciesAndList$1(this, list); + }); + + var ArrayBufferViewCore$3 = arrayBufferViewCore; + + var $findLast = arrayIterationFromLast.findLast; + + var aTypedArray$3 = ArrayBufferViewCore$3.aTypedArray; + var exportTypedArrayMethod$3 = ArrayBufferViewCore$3.exportTypedArrayMethod; // `%TypedArray%.prototype.findLast` method + // https://github.com/tc39/proposal-array-find-from-last + + exportTypedArrayMethod$3('findLast', function findLast(predicate + /* , thisArg */ + ) { + return $findLast(aTypedArray$3(this), predicate, arguments.length > 1 ? arguments[1] : undefined); + }); + + var ArrayBufferViewCore$2 = arrayBufferViewCore; + + var $findLastIndex = arrayIterationFromLast.findLastIndex; + + var aTypedArray$2 = ArrayBufferViewCore$2.aTypedArray; + var exportTypedArrayMethod$2 = ArrayBufferViewCore$2.exportTypedArrayMethod; // `%TypedArray%.prototype.findLastIndex` method + // https://github.com/tc39/proposal-array-find-from-last + + exportTypedArrayMethod$2('findLastIndex', function findLastIndex(predicate + /* , thisArg */ + ) { + return $findLastIndex(aTypedArray$2(this), predicate, arguments.length > 1 ? arguments[1] : undefined); + }); + + var ArrayBufferViewCore$1 = arrayBufferViewCore; + + var $groupBy = arrayGroupBy; + + var typedArraySpeciesConstructor = typedArraySpeciesConstructor$5; + + var aTypedArray$1 = ArrayBufferViewCore$1.aTypedArray; + var exportTypedArrayMethod$1 = ArrayBufferViewCore$1.exportTypedArrayMethod; // `%TypedArray%.prototype.groupBy` method + // https://github.com/tc39/proposal-array-grouping + + exportTypedArrayMethod$1('groupBy', function groupBy(callbackfn + /* , thisArg */ + ) { + var thisArg = arguments.length > 1 ? arguments[1] : undefined; + return $groupBy(aTypedArray$1(this), callbackfn, thisArg, typedArraySpeciesConstructor); + }); + + var ArrayBufferViewCore = arrayBufferViewCore; + + var arrayUniqueBy = arrayUniqueBy$1; + + var fromSpeciesAndList = typedArrayFromSpeciesAndList; + + var aTypedArray = ArrayBufferViewCore.aTypedArray; + var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod; // `%TypedArray%.prototype.uniqueBy` method + // https://github.com/tc39/proposal-array-unique + + exportTypedArrayMethod('uniqueBy', function uniqueBy(resolver) { + return fromSpeciesAndList(this, arrayUniqueBy.call(aTypedArray(this), resolver)); + }); + + var $$e = _export; + + var IS_PURE$5 = isPure; + + var collectionDeleteAll$1 = collectionDeleteAll$4; // `WeakMap.prototype.deleteAll` method + // https://github.com/tc39/proposal-collection-methods + + + $$e({ + target: 'WeakMap', + proto: true, + real: true, + forced: IS_PURE$5 + }, { + deleteAll: function deleteAll() { + return collectionDeleteAll$1.apply(this, arguments); + } + }); + + var $$d = _export; + + var from$1 = collectionFrom; // `WeakMap.from` method + // https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from + + + $$d({ + target: 'WeakMap', + stat: true + }, { + from: from$1 + }); + + var $$c = _export; + + var of$1 = collectionOf; // `WeakMap.of` method + // https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of + + + $$c({ + target: 'WeakMap', + stat: true + }, { + of: of$1 + }); + + var $$b = _export; + + var IS_PURE$4 = isPure; + + var $emplace = mapEmplace; // `WeakMap.prototype.emplace` method + // https://github.com/tc39/proposal-upsert + + + $$b({ + target: 'WeakMap', + proto: true, + real: true, + forced: IS_PURE$4 + }, { + emplace: $emplace + }); + + var $$a = _export; + + var IS_PURE$3 = isPure; + + var $upsert = mapUpsert; // `WeakMap.prototype.upsert` method (replaced by `WeakMap.prototype.emplace`) + // https://github.com/tc39/proposal-upsert + + + $$a({ + target: 'WeakMap', + proto: true, + real: true, + forced: IS_PURE$3 + }, { + upsert: $upsert + }); + + var $$9 = _export; + + var IS_PURE$2 = isPure; + + var collectionAddAll = collectionAddAll$2; // `WeakSet.prototype.addAll` method + // https://github.com/tc39/proposal-collection-methods + + + $$9({ + target: 'WeakSet', + proto: true, + real: true, + forced: IS_PURE$2 + }, { + addAll: function addAll() { + return collectionAddAll.apply(this, arguments); + } + }); + + var $$8 = _export; + + var IS_PURE$1 = isPure; + + var collectionDeleteAll = collectionDeleteAll$4; // `WeakSet.prototype.deleteAll` method + // https://github.com/tc39/proposal-collection-methods + + + $$8({ + target: 'WeakSet', + proto: true, + real: true, + forced: IS_PURE$1 + }, { + deleteAll: function deleteAll() { + return collectionDeleteAll.apply(this, arguments); + } + }); + + var $$7 = _export; + + var from = collectionFrom; // `WeakSet.from` method + // https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from + + + $$7({ + target: 'WeakSet', + stat: true + }, { + from: from + }); + + var $$6 = _export; + + var of = collectionOf; // `WeakSet.of` method + // https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of + + + $$6({ + target: 'WeakSet', + stat: true + }, { + of: of + }); + + // iterable DOM collections + // flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods + var domIterables = { + CSSRuleList: 0, + CSSStyleDeclaration: 0, + CSSValueList: 0, + ClientRectList: 0, + DOMRectList: 0, + DOMStringList: 0, + DOMTokenList: 1, + DataTransferItemList: 0, + FileList: 0, + HTMLAllCollection: 0, + HTMLCollection: 0, + HTMLFormElement: 0, + HTMLSelectElement: 0, + MediaList: 0, + MimeTypeArray: 0, + NamedNodeMap: 0, + NodeList: 1, + PaintRequestList: 0, + Plugin: 0, + PluginArray: 0, + SVGLengthList: 0, + SVGNumberList: 0, + SVGPathSegList: 0, + SVGPointList: 0, + SVGStringList: 0, + SVGTransformList: 0, + SourceBufferList: 0, + StyleSheetList: 0, + TextTrackCueList: 0, + TextTrackList: 0, + TouchList: 0 + }; + + // in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList` + var documentCreateElement = documentCreateElement$2; + + var classList$1 = documentCreateElement('span').classList; + var DOMTokenListPrototype$2 = classList$1 && classList$1.constructor && classList$1.constructor.prototype; + var domTokenListPrototype = DOMTokenListPrototype$2 === Object.prototype ? undefined : DOMTokenListPrototype$2; + + var global$6 = global$R; + + var DOMIterables$1 = domIterables; + + var DOMTokenListPrototype$1 = domTokenListPrototype; + + var forEach = arrayForEach; + + var createNonEnumerableProperty$1 = createNonEnumerableProperty$h; + + var handlePrototype$1 = function (CollectionPrototype) { + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try { + createNonEnumerableProperty$1(CollectionPrototype, 'forEach', forEach); + } catch (error) { + CollectionPrototype.forEach = forEach; + } + }; + + for (var COLLECTION_NAME$1 in DOMIterables$1) { + if (DOMIterables$1[COLLECTION_NAME$1]) { + handlePrototype$1(global$6[COLLECTION_NAME$1] && global$6[COLLECTION_NAME$1].prototype); + } + } + + handlePrototype$1(DOMTokenListPrototype$1); + + var global$5 = global$R; + + var DOMIterables = domIterables; + + var DOMTokenListPrototype = domTokenListPrototype; + + var ArrayIteratorMethods = es_array_iterator; + + var createNonEnumerableProperty = createNonEnumerableProperty$h; + + var wellKnownSymbol$2 = wellKnownSymbol$G; + + var ITERATOR$2 = wellKnownSymbol$2('iterator'); + var TO_STRING_TAG = wellKnownSymbol$2('toStringTag'); + var ArrayValues = ArrayIteratorMethods.values; + + var handlePrototype = function (CollectionPrototype, COLLECTION_NAME) { + if (CollectionPrototype) { + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype[ITERATOR$2] !== ArrayValues) try { + createNonEnumerableProperty(CollectionPrototype, ITERATOR$2, ArrayValues); + } catch (error) { + CollectionPrototype[ITERATOR$2] = ArrayValues; + } + + if (!CollectionPrototype[TO_STRING_TAG]) { + createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME); + } + + if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) { + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try { + createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]); + } catch (error) { + CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME]; + } + } + } + }; + + for (var COLLECTION_NAME in DOMIterables) { + handlePrototype(global$5[COLLECTION_NAME] && global$5[COLLECTION_NAME].prototype, COLLECTION_NAME); + } + + handlePrototype(DOMTokenListPrototype, 'DOMTokenList'); + + var $$5 = _export; + + var global$4 = global$R; + + var task = task$2; + + var FORCED = !global$4.setImmediate || !global$4.clearImmediate; // http://w3c.github.io/setImmediate/ + + $$5({ + global: true, + bind: true, + enumerable: true, + forced: FORCED + }, { + // `setImmediate` method + // http://w3c.github.io/setImmediate/#si-setImmediate + setImmediate: task.set, + // `clearImmediate` method + // http://w3c.github.io/setImmediate/#si-clearImmediate + clearImmediate: task.clear + }); + + var $$4 = _export; + + var global$3 = global$R; + + var microtask = microtask$2; + + var IS_NODE = engineIsNode; + + var process = global$3.process; // `queueMicrotask` method + // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-queuemicrotask + + $$4({ + global: true, + enumerable: true, + noTargetGet: true + }, { + queueMicrotask: function queueMicrotask(fn) { + var domain = IS_NODE && process.domain; + microtask(domain ? domain.bind(fn) : fn); + } + }); + + var $$3 = _export; + + var global$2 = global$R; + + var isCallable$1 = isCallable$z; + + var userAgent = engineUserAgent; + + var slice = [].slice; + var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check + + var wrap = function (scheduler) { + return function (handler, timeout + /* , ...arguments */ + ) { + var boundArgs = arguments.length > 2; + var args = boundArgs ? slice.call(arguments, 2) : undefined; + return scheduler(boundArgs ? function () { + // eslint-disable-next-line no-new-func -- spec requirement + (isCallable$1(handler) ? handler : Function(handler)).apply(this, args); + } : handler, timeout); + }; + }; // ie9- setTimeout & setInterval additional parameters fix + // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers + + + $$3({ + global: true, + bind: true, + forced: MSIE + }, { + // `setTimeout` method + // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout + setTimeout: wrap(global$2.setTimeout), + // `setInterval` method + // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval + setInterval: wrap(global$2.setInterval) + }); + + var fails = fails$15; + + var wellKnownSymbol$1 = wellKnownSymbol$G; + + var IS_PURE = isPure; + + var ITERATOR$1 = wellKnownSymbol$1('iterator'); + var nativeUrl = !fails(function () { + var url = new URL('b?a=1&b=2&c=3', 'http://a'); + var searchParams = url.searchParams; + var result = ''; + url.pathname = 'c%20d'; + searchParams.forEach(function (value, key) { + searchParams['delete']('b'); + result += key + value; + }); + return IS_PURE && !url.toJSON || !searchParams.sort || url.href !== 'http://a/c%20d?a=1&c=3' || searchParams.get('c') !== '3' || String(new URLSearchParams('?a=1')) !== 'a=1' || !searchParams[ITERATOR$1] // throws in Edge + || new URL('https://a@b').username !== 'a' || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b' // not punycoded in Edge + || new URL('http://тест').host !== 'xn--e1aybc' // not escaped in Chrome 62- + || new URL('http://a#б').hash !== '#%D0%B1' // fails in Chrome 66- + || result !== 'a1c3' // throws in Safari + || new URL('http://x', undefined).host !== 'x'; + }); + + var maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 + + var base = 36; + var tMin = 1; + var tMax = 26; + var skew = 38; + var damp = 700; + var initialBias = 72; + var initialN = 128; // 0x80 + + var delimiter = '-'; // '\x2D' + + var regexNonASCII = /[^\0-\u007E]/; // non-ASCII chars + + var regexSeparators = /[.\u3002\uFF0E\uFF61]/g; // RFC 3490 separators + + var OVERFLOW_ERROR = 'Overflow: input needs wider integers to process'; + var baseMinusTMin = base - tMin; + var floor$1 = Math.floor; + var stringFromCharCode = String.fromCharCode; + /** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + */ + + var ucs2decode = function (string) { + var output = []; + var counter = 0; + var length = string.length; + + while (counter < length) { + var value = string.charCodeAt(counter++); + + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // It's a high surrogate, and there is a next character. + var extra = string.charCodeAt(counter++); + + if ((extra & 0xFC00) == 0xDC00) { + // Low surrogate. + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // It's an unmatched surrogate; only append this code unit, in case the + // next code unit is the high surrogate of a surrogate pair. + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + + return output; + }; + /** + * Converts a digit/integer into a basic code point. + */ + + + var digitToBasic = function (digit) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26); + }; + /** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + */ + + + var adapt = function (delta, numPoints, firstTime) { + var k = 0; + delta = firstTime ? floor$1(delta / damp) : delta >> 1; + delta += floor$1(delta / numPoints); + + for (; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor$1(delta / baseMinusTMin); + } + + return floor$1(k + (baseMinusTMin + 1) * delta / (delta + skew)); + }; + /** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + */ + // eslint-disable-next-line max-statements -- TODO + + + var encode = function (input) { + var output = []; // Convert the input in UCS-2 to an array of Unicode code points. + + input = ucs2decode(input); // Cache the length. + + var inputLength = input.length; // Initialize the state. + + var n = initialN; + var delta = 0; + var bias = initialBias; + var i, currentValue; // Handle the basic code points. + + for (i = 0; i < input.length; i++) { + currentValue = input[i]; + + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + var basicLength = output.length; // number of basic code points. + + var handledCPCount = basicLength; // number of code points that have been handled; + // Finish the basic string with a delimiter unless it's empty. + + if (basicLength) { + output.push(delimiter); + } // Main encoding loop: + + + while (handledCPCount < inputLength) { + // All non-basic code points < n have been handled already. Find the next larger one: + var m = maxInt; + + for (i = 0; i < input.length; i++) { + currentValue = input[i]; + + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } // Increase `delta` enough to advance the decoder's state to , but guard against overflow. + + + var handledCPCountPlusOne = handledCPCount + 1; + + if (m - n > floor$1((maxInt - delta) / handledCPCountPlusOne)) { + throw RangeError(OVERFLOW_ERROR); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (i = 0; i < input.length; i++) { + currentValue = input[i]; + + if (currentValue < n && ++delta > maxInt) { + throw RangeError(OVERFLOW_ERROR); + } + + if (currentValue == n) { + // Represent delta as a generalized variable-length integer. + var q = delta; + + for (var k = base;; k += base) { + var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; + if (q < t) break; + var qMinusT = q - t; + var baseMinusT = base - t; + output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT))); + q = floor$1(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + } + + return output.join(''); + }; + + var stringPunycodeToAscii = function (input) { + var encoded = []; + var labels = input.toLowerCase().replace(regexSeparators, '\u002E').split('.'); + var i, label; + + for (i = 0; i < labels.length; i++) { + label = labels[i]; + encoded.push(regexNonASCII.test(label) ? 'xn--' + encode(label) : label); + } + + return encoded.join('.'); + }; + + var $$2 = _export; + + var getBuiltIn = getBuiltIn$y; + + var USE_NATIVE_URL$1 = nativeUrl; + + var redefine$1 = redefine$l.exports; + + var redefineAll = redefineAll$a; + + var setToStringTag$1 = setToStringTag$b; + + var createIteratorConstructor = createIteratorConstructor$7; + + var InternalStateModule$1 = internalState; + + var anInstance$1 = anInstance$b; + + var isCallable = isCallable$z; + + var hasOwn$1 = hasOwnProperty_1; + + var bind = functionBindContext; + + var classof = classof$b; + + var anObject = anObject$1C; + + var isObject = isObject$C; + + var $toString$1 = toString$t; + + var create = objectCreate$1; + + var createPropertyDescriptor = createPropertyDescriptor$9; + + var getIterator = getIterator$b; + + var getIteratorMethod = getIteratorMethod$9; + + var wellKnownSymbol = wellKnownSymbol$G; + + var nativeFetch = getBuiltIn('fetch'); + var NativeRequest = getBuiltIn('Request'); + var RequestPrototype = NativeRequest && NativeRequest.prototype; + var Headers = getBuiltIn('Headers'); + var ITERATOR = wellKnownSymbol('iterator'); + var URL_SEARCH_PARAMS = 'URLSearchParams'; + var URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator'; + var setInternalState$1 = InternalStateModule$1.set; + var getInternalParamsState = InternalStateModule$1.getterFor(URL_SEARCH_PARAMS); + var getInternalIteratorState = InternalStateModule$1.getterFor(URL_SEARCH_PARAMS_ITERATOR); + var plus = /\+/g; + var sequences = Array(4); + + var percentSequence = function (bytes) { + return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\da-f]{2}){' + bytes + '})', 'gi')); + }; + + var percentDecode = function (sequence) { + try { + return decodeURIComponent(sequence); + } catch (error) { + return sequence; + } + }; + + var deserialize = function (it) { + var result = it.replace(plus, ' '); + var bytes = 4; + + try { + return decodeURIComponent(result); + } catch (error) { + while (bytes) { + result = result.replace(percentSequence(bytes--), percentDecode); + } + + return result; + } + }; + + var find$1 = /[!'()~]|%20/g; + var replace = { + '!': '%21', + "'": '%27', + '(': '%28', + ')': '%29', + '~': '%7E', + '%20': '+' + }; + + var replacer = function (match) { + return replace[match]; + }; + + var serialize = function (it) { + return encodeURIComponent(it).replace(find$1, replacer); + }; + + var parseSearchParams = function (result, query) { + if (query) { + var attributes = query.split('&'); + var index = 0; + var attribute, entry; + + while (index < attributes.length) { + attribute = attributes[index++]; + + if (attribute.length) { + entry = attribute.split('='); + result.push({ + key: deserialize(entry.shift()), + value: deserialize(entry.join('=')) + }); + } + } + } + }; + + var updateSearchParams = function (query) { + this.entries.length = 0; + parseSearchParams(this.entries, query); + }; + + var validateArgumentsLength = function (passed, required) { + if (passed < required) throw TypeError('Not enough arguments'); + }; + + var URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) { + setInternalState$1(this, { + type: URL_SEARCH_PARAMS_ITERATOR, + iterator: getIterator(getInternalParamsState(params).entries), + kind: kind + }); + }, 'Iterator', function next() { + var state = getInternalIteratorState(this); + var kind = state.kind; + var step = state.iterator.next(); + var entry = step.value; + + if (!step.done) { + step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value]; + } + + return step; + }); // `URLSearchParams` constructor + // https://url.spec.whatwg.org/#interface-urlsearchparams + + var URLSearchParamsConstructor = function URLSearchParams() { + anInstance$1(this, URLSearchParamsConstructor, URL_SEARCH_PARAMS); + var init = arguments.length > 0 ? arguments[0] : undefined; + var that = this; + var entries = []; + var iteratorMethod, iterator, next, step, entryIterator, entryNext, first, second, key; + setInternalState$1(that, { + type: URL_SEARCH_PARAMS, + entries: entries, + updateURL: function () { + /* empty */ + }, + updateSearchParams: updateSearchParams + }); + + if (init !== undefined) { + if (isObject(init)) { + iteratorMethod = getIteratorMethod(init); + + if (iteratorMethod) { + iterator = getIterator(init, iteratorMethod); + next = iterator.next; + + while (!(step = next.call(iterator)).done) { + entryIterator = getIterator(anObject(step.value)); + entryNext = entryIterator.next; + if ((first = entryNext.call(entryIterator)).done || (second = entryNext.call(entryIterator)).done || !entryNext.call(entryIterator).done) throw TypeError('Expected sequence with length 2'); + entries.push({ + key: $toString$1(first.value), + value: $toString$1(second.value) + }); + } + } else for (key in init) if (hasOwn$1(init, key)) entries.push({ + key: key, + value: $toString$1(init[key]) + }); + } else { + parseSearchParams(entries, typeof init === 'string' ? init.charAt(0) === '?' ? init.slice(1) : init : $toString$1(init)); + } + } + }; + + var URLSearchParamsPrototype = URLSearchParamsConstructor.prototype; + redefineAll(URLSearchParamsPrototype, { + // `URLSearchParams.prototype.append` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-append + append: function append(name, value) { + validateArgumentsLength(arguments.length, 2); + var state = getInternalParamsState(this); + state.entries.push({ + key: $toString$1(name), + value: $toString$1(value) + }); + state.updateURL(); + }, + // `URLSearchParams.prototype.delete` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-delete + 'delete': function (name) { + validateArgumentsLength(arguments.length, 1); + var state = getInternalParamsState(this); + var entries = state.entries; + var key = $toString$1(name); + var index = 0; + + while (index < entries.length) { + if (entries[index].key === key) entries.splice(index, 1);else index++; + } + + state.updateURL(); + }, + // `URLSearchParams.prototype.get` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-get + get: function get(name) { + validateArgumentsLength(arguments.length, 1); + var entries = getInternalParamsState(this).entries; + var key = $toString$1(name); + var index = 0; + + for (; index < entries.length; index++) { + if (entries[index].key === key) return entries[index].value; + } + + return null; + }, + // `URLSearchParams.prototype.getAll` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-getall + getAll: function getAll(name) { + validateArgumentsLength(arguments.length, 1); + var entries = getInternalParamsState(this).entries; + var key = $toString$1(name); + var result = []; + var index = 0; + + for (; index < entries.length; index++) { + if (entries[index].key === key) result.push(entries[index].value); + } + + return result; + }, + // `URLSearchParams.prototype.has` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-has + has: function has(name) { + validateArgumentsLength(arguments.length, 1); + var entries = getInternalParamsState(this).entries; + var key = $toString$1(name); + var index = 0; + + while (index < entries.length) { + if (entries[index++].key === key) return true; + } + + return false; + }, + // `URLSearchParams.prototype.set` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-set + set: function set(name, value) { + validateArgumentsLength(arguments.length, 1); + var state = getInternalParamsState(this); + var entries = state.entries; + var found = false; + var key = $toString$1(name); + var val = $toString$1(value); + var index = 0; + var entry; + + for (; index < entries.length; index++) { + entry = entries[index]; + + if (entry.key === key) { + if (found) entries.splice(index--, 1);else { + found = true; + entry.value = val; + } + } + } + + if (!found) entries.push({ + key: key, + value: val + }); + state.updateURL(); + }, + // `URLSearchParams.prototype.sort` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-sort + sort: function sort() { + var state = getInternalParamsState(this); + var entries = state.entries; // Array#sort is not stable in some engines + + var slice = entries.slice(); + var entry, entriesIndex, sliceIndex; + entries.length = 0; + + for (sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) { + entry = slice[sliceIndex]; + + for (entriesIndex = 0; entriesIndex < sliceIndex; entriesIndex++) { + if (entries[entriesIndex].key > entry.key) { + entries.splice(entriesIndex, 0, entry); + break; + } + } + + if (entriesIndex === sliceIndex) entries.push(entry); + } + + state.updateURL(); + }, + // `URLSearchParams.prototype.forEach` method + forEach: function forEach(callback + /* , thisArg */ + ) { + var entries = getInternalParamsState(this).entries; + var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined, 3); + var index = 0; + var entry; + + while (index < entries.length) { + entry = entries[index++]; + boundFunction(entry.value, entry.key, this); + } + }, + // `URLSearchParams.prototype.keys` method + keys: function keys() { + return new URLSearchParamsIterator(this, 'keys'); + }, + // `URLSearchParams.prototype.values` method + values: function values() { + return new URLSearchParamsIterator(this, 'values'); + }, + // `URLSearchParams.prototype.entries` method + entries: function entries() { + return new URLSearchParamsIterator(this, 'entries'); + } + }, { + enumerable: true + }); // `URLSearchParams.prototype[@@iterator]` method + + redefine$1(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries, { + name: 'entries' + }); // `URLSearchParams.prototype.toString` method + // https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior + + redefine$1(URLSearchParamsPrototype, 'toString', function toString() { + var entries = getInternalParamsState(this).entries; + var result = []; + var index = 0; + var entry; + + while (index < entries.length) { + entry = entries[index++]; + result.push(serialize(entry.key) + '=' + serialize(entry.value)); + } + + return result.join('&'); + }, { + enumerable: true + }); + setToStringTag$1(URLSearchParamsConstructor, URL_SEARCH_PARAMS); + $$2({ + global: true, + forced: !USE_NATIVE_URL$1 + }, { + URLSearchParams: URLSearchParamsConstructor + }); // Wrap `fetch` and `Request` for correct work with polyfilled `URLSearchParams` + + if (!USE_NATIVE_URL$1 && isCallable(Headers)) { + var wrapRequestOptions = function (init) { + if (isObject(init)) { + var body = init.body; + var headers; + + if (classof(body) === URL_SEARCH_PARAMS) { + headers = init.headers ? new Headers(init.headers) : new Headers(); + + if (!headers.has('content-type')) { + headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8'); + } + + return create(init, { + body: createPropertyDescriptor(0, String(body)), + headers: createPropertyDescriptor(0, headers) + }); + } + } + + return init; + }; + + if (isCallable(nativeFetch)) { + $$2({ + global: true, + enumerable: true, + forced: true + }, { + fetch: function fetch(input + /* , init */ + ) { + return nativeFetch(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {}); + } + }); + } + + if (isCallable(NativeRequest)) { + var RequestConstructor = function Request(input + /* , init */ + ) { + anInstance$1(this, RequestConstructor, 'Request'); + return new NativeRequest(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {}); + }; + + RequestPrototype.constructor = RequestConstructor; + RequestConstructor.prototype = RequestPrototype; + $$2({ + global: true, + forced: true + }, { + Request: RequestConstructor + }); + } + } + + var web_urlSearchParams = { + URLSearchParams: URLSearchParamsConstructor, + getState: getInternalParamsState + }; + + var $$1 = _export; + + var DESCRIPTORS = descriptors; + + var USE_NATIVE_URL = nativeUrl; + + var global$1 = global$R; + + var defineProperties = objectDefineProperties; + + var redefine = redefine$l.exports; + + var anInstance = anInstance$b; + + var hasOwn = hasOwnProperty_1; + + var assign$3 = objectAssign$1; + + var arrayFrom = arrayFrom$1; + + var codeAt = stringMultibyte.codeAt; + + var toASCII = stringPunycodeToAscii; + + var $toString = toString$t; + + var setToStringTag = setToStringTag$b; + + var URLSearchParamsModule = web_urlSearchParams; + + var InternalStateModule = internalState; + + var NativeURL = global$1.URL; + var URLSearchParams$1 = URLSearchParamsModule.URLSearchParams; + var getInternalSearchParamsState = URLSearchParamsModule.getState; + var setInternalState = InternalStateModule.set; + var getInternalURLState = InternalStateModule.getterFor('URL'); + var floor = Math.floor; + var pow = Math.pow; + var INVALID_AUTHORITY = 'Invalid authority'; + var INVALID_SCHEME = 'Invalid scheme'; + var INVALID_HOST = 'Invalid host'; + var INVALID_PORT = 'Invalid port'; + var ALPHA = /[a-z]/i; // eslint-disable-next-line regexp/no-obscure-range -- safe + + var ALPHANUMERIC = /[\d+-.a-z]/i; + var DIGIT = /\d/; + var HEX_START = /^0x/i; + var OCT = /^[0-7]+$/; + var DEC = /^\d+$/; + var HEX = /^[\da-f]+$/i; + /* eslint-disable regexp/no-control-character -- safe */ + + var FORBIDDEN_HOST_CODE_POINT = /[\0\t\n\r #%/:<>?@[\\\]^|]/; + var FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\0\t\n\r #/:<>?@[\\\]^|]/; + var LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\u0000-\u0020]+|[\u0000-\u0020]+$/g; + var TAB_AND_NEW_LINE = /[\t\n\r]/g; + /* eslint-enable regexp/no-control-character -- safe */ + + var EOF; + + var parseHost = function (url, input) { + var result, codePoints, index; + + if (input.charAt(0) == '[') { + if (input.charAt(input.length - 1) != ']') return INVALID_HOST; + result = parseIPv6(input.slice(1, -1)); + if (!result) return INVALID_HOST; + url.host = result; // opaque host + } else if (!isSpecial(url)) { + if (FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(input)) return INVALID_HOST; + result = ''; + codePoints = arrayFrom(input); + + for (index = 0; index < codePoints.length; index++) { + result += percentEncode(codePoints[index], C0ControlPercentEncodeSet); + } + + url.host = result; + } else { + input = toASCII(input); + if (FORBIDDEN_HOST_CODE_POINT.test(input)) return INVALID_HOST; + result = parseIPv4(input); + if (result === null) return INVALID_HOST; + url.host = result; + } + }; + + var parseIPv4 = function (input) { + var parts = input.split('.'); + var partsLength, numbers, index, part, radix, number, ipv4; + + if (parts.length && parts[parts.length - 1] == '') { + parts.pop(); + } + + partsLength = parts.length; + if (partsLength > 4) return input; + numbers = []; + + for (index = 0; index < partsLength; index++) { + part = parts[index]; + if (part == '') return input; + radix = 10; + + if (part.length > 1 && part.charAt(0) == '0') { + radix = HEX_START.test(part) ? 16 : 8; + part = part.slice(radix == 8 ? 1 : 2); + } + + if (part === '') { + number = 0; + } else { + if (!(radix == 10 ? DEC : radix == 8 ? OCT : HEX).test(part)) return input; + number = parseInt(part, radix); + } + + numbers.push(number); + } + + for (index = 0; index < partsLength; index++) { + number = numbers[index]; + + if (index == partsLength - 1) { + if (number >= pow(256, 5 - partsLength)) return null; + } else if (number > 255) return null; + } + + ipv4 = numbers.pop(); + + for (index = 0; index < numbers.length; index++) { + ipv4 += numbers[index] * pow(256, 3 - index); + } + + return ipv4; + }; // eslint-disable-next-line max-statements -- TODO + + + var parseIPv6 = function (input) { + var address = [0, 0, 0, 0, 0, 0, 0, 0]; + var pieceIndex = 0; + var compress = null; + var pointer = 0; + var value, length, numbersSeen, ipv4Piece, number, swaps, swap; + + var chr = function () { + return input.charAt(pointer); + }; + + if (chr() == ':') { + if (input.charAt(1) != ':') return; + pointer += 2; + pieceIndex++; + compress = pieceIndex; + } + + while (chr()) { + if (pieceIndex == 8) return; + + if (chr() == ':') { + if (compress !== null) return; + pointer++; + pieceIndex++; + compress = pieceIndex; + continue; + } + + value = length = 0; + + while (length < 4 && HEX.test(chr())) { + value = value * 16 + parseInt(chr(), 16); + pointer++; + length++; + } + + if (chr() == '.') { + if (length == 0) return; + pointer -= length; + if (pieceIndex > 6) return; + numbersSeen = 0; + + while (chr()) { + ipv4Piece = null; + + if (numbersSeen > 0) { + if (chr() == '.' && numbersSeen < 4) pointer++;else return; + } + + if (!DIGIT.test(chr())) return; + + while (DIGIT.test(chr())) { + number = parseInt(chr(), 10); + if (ipv4Piece === null) ipv4Piece = number;else if (ipv4Piece == 0) return;else ipv4Piece = ipv4Piece * 10 + number; + if (ipv4Piece > 255) return; + pointer++; + } + + address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece; + numbersSeen++; + if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++; + } + + if (numbersSeen != 4) return; + break; + } else if (chr() == ':') { + pointer++; + if (!chr()) return; + } else if (chr()) return; + + address[pieceIndex++] = value; + } + + if (compress !== null) { + swaps = pieceIndex - compress; + pieceIndex = 7; + + while (pieceIndex != 0 && swaps > 0) { + swap = address[pieceIndex]; + address[pieceIndex--] = address[compress + swaps - 1]; + address[compress + --swaps] = swap; + } + } else if (pieceIndex != 8) return; + + return address; + }; + + var findLongestZeroSequence = function (ipv6) { + var maxIndex = null; + var maxLength = 1; + var currStart = null; + var currLength = 0; + var index = 0; + + for (; index < 8; index++) { + if (ipv6[index] !== 0) { + if (currLength > maxLength) { + maxIndex = currStart; + maxLength = currLength; + } + + currStart = null; + currLength = 0; + } else { + if (currStart === null) currStart = index; + ++currLength; + } + } + + if (currLength > maxLength) { + maxIndex = currStart; + maxLength = currLength; + } + + return maxIndex; + }; + + var serializeHost = function (host) { + var result, index, compress, ignore0; // ipv4 + + if (typeof host == 'number') { + result = []; + + for (index = 0; index < 4; index++) { + result.unshift(host % 256); + host = floor(host / 256); + } + + return result.join('.'); // ipv6 + } else if (typeof host == 'object') { + result = ''; + compress = findLongestZeroSequence(host); + + for (index = 0; index < 8; index++) { + if (ignore0 && host[index] === 0) continue; + if (ignore0) ignore0 = false; + + if (compress === index) { + result += index ? ':' : '::'; + ignore0 = true; + } else { + result += host[index].toString(16); + if (index < 7) result += ':'; + } + } + + return '[' + result + ']'; + } + + return host; + }; + + var C0ControlPercentEncodeSet = {}; + var fragmentPercentEncodeSet = assign$3({}, C0ControlPercentEncodeSet, { + ' ': 1, + '"': 1, + '<': 1, + '>': 1, + '`': 1 + }); + var pathPercentEncodeSet = assign$3({}, fragmentPercentEncodeSet, { + '#': 1, + '?': 1, + '{': 1, + '}': 1 + }); + var userinfoPercentEncodeSet = assign$3({}, pathPercentEncodeSet, { + '/': 1, + ':': 1, + ';': 1, + '=': 1, + '@': 1, + '[': 1, + '\\': 1, + ']': 1, + '^': 1, + '|': 1 + }); + + var percentEncode = function (chr, set) { + var code = codeAt(chr, 0); + return code > 0x20 && code < 0x7F && !hasOwn(set, chr) ? chr : encodeURIComponent(chr); + }; + + var specialSchemes = { + ftp: 21, + file: null, + http: 80, + https: 443, + ws: 80, + wss: 443 + }; + + var isSpecial = function (url) { + return hasOwn(specialSchemes, url.scheme); + }; + + var includesCredentials = function (url) { + return url.username != '' || url.password != ''; + }; + + var cannotHaveUsernamePasswordPort = function (url) { + return !url.host || url.cannotBeABaseURL || url.scheme == 'file'; + }; + + var isWindowsDriveLetter = function (string, normalized) { + var second; + return string.length == 2 && ALPHA.test(string.charAt(0)) && ((second = string.charAt(1)) == ':' || !normalized && second == '|'); + }; + + var startsWithWindowsDriveLetter = function (string) { + var third; + return string.length > 1 && isWindowsDriveLetter(string.slice(0, 2)) && (string.length == 2 || (third = string.charAt(2)) === '/' || third === '\\' || third === '?' || third === '#'); + }; + + var shortenURLsPath = function (url) { + var path = url.path; + var pathSize = path.length; + + if (pathSize && (url.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) { + path.pop(); + } + }; + + var isSingleDot = function (segment) { + return segment === '.' || segment.toLowerCase() === '%2e'; + }; + + var isDoubleDot = function (segment) { + segment = segment.toLowerCase(); + return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e'; + }; // States: + + + var SCHEME_START = {}; + var SCHEME = {}; + var NO_SCHEME = {}; + var SPECIAL_RELATIVE_OR_AUTHORITY = {}; + var PATH_OR_AUTHORITY = {}; + var RELATIVE = {}; + var RELATIVE_SLASH = {}; + var SPECIAL_AUTHORITY_SLASHES = {}; + var SPECIAL_AUTHORITY_IGNORE_SLASHES = {}; + var AUTHORITY = {}; + var HOST = {}; + var HOSTNAME = {}; + var PORT = {}; + var FILE = {}; + var FILE_SLASH = {}; + var FILE_HOST = {}; + var PATH_START = {}; + var PATH = {}; + var CANNOT_BE_A_BASE_URL_PATH = {}; + var QUERY = {}; + var FRAGMENT = {}; // eslint-disable-next-line max-statements -- TODO + + var parseURL = function (url, input, stateOverride, base) { + var state = stateOverride || SCHEME_START; + var pointer = 0; + var buffer = ''; + var seenAt = false; + var seenBracket = false; + var seenPasswordToken = false; + var codePoints, chr, bufferCodePoints, failure; + + if (!stateOverride) { + url.scheme = ''; + url.username = ''; + url.password = ''; + url.host = null; + url.port = null; + url.path = []; + url.query = null; + url.fragment = null; + url.cannotBeABaseURL = false; + input = input.replace(LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, ''); + } + + input = input.replace(TAB_AND_NEW_LINE, ''); + codePoints = arrayFrom(input); + + while (pointer <= codePoints.length) { + chr = codePoints[pointer]; + + switch (state) { + case SCHEME_START: + if (chr && ALPHA.test(chr)) { + buffer += chr.toLowerCase(); + state = SCHEME; + } else if (!stateOverride) { + state = NO_SCHEME; + continue; + } else return INVALID_SCHEME; + + break; + + case SCHEME: + if (chr && (ALPHANUMERIC.test(chr) || chr == '+' || chr == '-' || chr == '.')) { + buffer += chr.toLowerCase(); + } else if (chr == ':') { + if (stateOverride && (isSpecial(url) != hasOwn(specialSchemes, buffer) || buffer == 'file' && (includesCredentials(url) || url.port !== null) || url.scheme == 'file' && !url.host)) return; + url.scheme = buffer; + + if (stateOverride) { + if (isSpecial(url) && specialSchemes[url.scheme] == url.port) url.port = null; + return; + } + + buffer = ''; + + if (url.scheme == 'file') { + state = FILE; + } else if (isSpecial(url) && base && base.scheme == url.scheme) { + state = SPECIAL_RELATIVE_OR_AUTHORITY; + } else if (isSpecial(url)) { + state = SPECIAL_AUTHORITY_SLASHES; + } else if (codePoints[pointer + 1] == '/') { + state = PATH_OR_AUTHORITY; + pointer++; + } else { + url.cannotBeABaseURL = true; + url.path.push(''); + state = CANNOT_BE_A_BASE_URL_PATH; + } + } else if (!stateOverride) { + buffer = ''; + state = NO_SCHEME; + pointer = 0; + continue; + } else return INVALID_SCHEME; + + break; + + case NO_SCHEME: + if (!base || base.cannotBeABaseURL && chr != '#') return INVALID_SCHEME; + + if (base.cannotBeABaseURL && chr == '#') { + url.scheme = base.scheme; + url.path = base.path.slice(); + url.query = base.query; + url.fragment = ''; + url.cannotBeABaseURL = true; + state = FRAGMENT; + break; + } + + state = base.scheme == 'file' ? FILE : RELATIVE; + continue; + + case SPECIAL_RELATIVE_OR_AUTHORITY: + if (chr == '/' && codePoints[pointer + 1] == '/') { + state = SPECIAL_AUTHORITY_IGNORE_SLASHES; + pointer++; + } else { + state = RELATIVE; + continue; + } + + break; + + case PATH_OR_AUTHORITY: + if (chr == '/') { + state = AUTHORITY; + break; + } else { + state = PATH; + continue; + } + + case RELATIVE: + url.scheme = base.scheme; + + if (chr == EOF) { + url.username = base.username; + url.password = base.password; + url.host = base.host; + url.port = base.port; + url.path = base.path.slice(); + url.query = base.query; + } else if (chr == '/' || chr == '\\' && isSpecial(url)) { + state = RELATIVE_SLASH; + } else if (chr == '?') { + url.username = base.username; + url.password = base.password; + url.host = base.host; + url.port = base.port; + url.path = base.path.slice(); + url.query = ''; + state = QUERY; + } else if (chr == '#') { + url.username = base.username; + url.password = base.password; + url.host = base.host; + url.port = base.port; + url.path = base.path.slice(); + url.query = base.query; + url.fragment = ''; + state = FRAGMENT; + } else { + url.username = base.username; + url.password = base.password; + url.host = base.host; + url.port = base.port; + url.path = base.path.slice(); + url.path.pop(); + state = PATH; + continue; + } + + break; + + case RELATIVE_SLASH: + if (isSpecial(url) && (chr == '/' || chr == '\\')) { + state = SPECIAL_AUTHORITY_IGNORE_SLASHES; + } else if (chr == '/') { + state = AUTHORITY; + } else { + url.username = base.username; + url.password = base.password; + url.host = base.host; + url.port = base.port; + state = PATH; + continue; + } + + break; + + case SPECIAL_AUTHORITY_SLASHES: + state = SPECIAL_AUTHORITY_IGNORE_SLASHES; + if (chr != '/' || buffer.charAt(pointer + 1) != '/') continue; + pointer++; + break; + + case SPECIAL_AUTHORITY_IGNORE_SLASHES: + if (chr != '/' && chr != '\\') { + state = AUTHORITY; + continue; + } + + break; + + case AUTHORITY: + if (chr == '@') { + if (seenAt) buffer = '%40' + buffer; + seenAt = true; + bufferCodePoints = arrayFrom(buffer); + + for (var i = 0; i < bufferCodePoints.length; i++) { + var codePoint = bufferCodePoints[i]; + + if (codePoint == ':' && !seenPasswordToken) { + seenPasswordToken = true; + continue; + } + + var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet); + if (seenPasswordToken) url.password += encodedCodePoints;else url.username += encodedCodePoints; + } + + buffer = ''; + } else if (chr == EOF || chr == '/' || chr == '?' || chr == '#' || chr == '\\' && isSpecial(url)) { + if (seenAt && buffer == '') return INVALID_AUTHORITY; + pointer -= arrayFrom(buffer).length + 1; + buffer = ''; + state = HOST; + } else buffer += chr; + + break; + + case HOST: + case HOSTNAME: + if (stateOverride && url.scheme == 'file') { + state = FILE_HOST; + continue; + } else if (chr == ':' && !seenBracket) { + if (buffer == '') return INVALID_HOST; + failure = parseHost(url, buffer); + if (failure) return failure; + buffer = ''; + state = PORT; + if (stateOverride == HOSTNAME) return; + } else if (chr == EOF || chr == '/' || chr == '?' || chr == '#' || chr == '\\' && isSpecial(url)) { + if (isSpecial(url) && buffer == '') return INVALID_HOST; + if (stateOverride && buffer == '' && (includesCredentials(url) || url.port !== null)) return; + failure = parseHost(url, buffer); + if (failure) return failure; + buffer = ''; + state = PATH_START; + if (stateOverride) return; + continue; + } else { + if (chr == '[') seenBracket = true;else if (chr == ']') seenBracket = false; + buffer += chr; + } + + break; + + case PORT: + if (DIGIT.test(chr)) { + buffer += chr; + } else if (chr == EOF || chr == '/' || chr == '?' || chr == '#' || chr == '\\' && isSpecial(url) || stateOverride) { + if (buffer != '') { + var port = parseInt(buffer, 10); + if (port > 0xFFFF) return INVALID_PORT; + url.port = isSpecial(url) && port === specialSchemes[url.scheme] ? null : port; + buffer = ''; + } + + if (stateOverride) return; + state = PATH_START; + continue; + } else return INVALID_PORT; + + break; + + case FILE: + url.scheme = 'file'; + if (chr == '/' || chr == '\\') state = FILE_SLASH;else if (base && base.scheme == 'file') { + if (chr == EOF) { + url.host = base.host; + url.path = base.path.slice(); + url.query = base.query; + } else if (chr == '?') { + url.host = base.host; + url.path = base.path.slice(); + url.query = ''; + state = QUERY; + } else if (chr == '#') { + url.host = base.host; + url.path = base.path.slice(); + url.query = base.query; + url.fragment = ''; + state = FRAGMENT; + } else { + if (!startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) { + url.host = base.host; + url.path = base.path.slice(); + shortenURLsPath(url); + } + + state = PATH; + continue; + } + } else { + state = PATH; + continue; + } + break; + + case FILE_SLASH: + if (chr == '/' || chr == '\\') { + state = FILE_HOST; + break; + } + + if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) { + if (isWindowsDriveLetter(base.path[0], true)) url.path.push(base.path[0]);else url.host = base.host; + } + + state = PATH; + continue; + + case FILE_HOST: + if (chr == EOF || chr == '/' || chr == '\\' || chr == '?' || chr == '#') { + if (!stateOverride && isWindowsDriveLetter(buffer)) { + state = PATH; + } else if (buffer == '') { + url.host = ''; + if (stateOverride) return; + state = PATH_START; + } else { + failure = parseHost(url, buffer); + if (failure) return failure; + if (url.host == 'localhost') url.host = ''; + if (stateOverride) return; + buffer = ''; + state = PATH_START; + } + + continue; + } else buffer += chr; + + break; + + case PATH_START: + if (isSpecial(url)) { + state = PATH; + if (chr != '/' && chr != '\\') continue; + } else if (!stateOverride && chr == '?') { + url.query = ''; + state = QUERY; + } else if (!stateOverride && chr == '#') { + url.fragment = ''; + state = FRAGMENT; + } else if (chr != EOF) { + state = PATH; + if (chr != '/') continue; + } + + break; + + case PATH: + if (chr == EOF || chr == '/' || chr == '\\' && isSpecial(url) || !stateOverride && (chr == '?' || chr == '#')) { + if (isDoubleDot(buffer)) { + shortenURLsPath(url); + + if (chr != '/' && !(chr == '\\' && isSpecial(url))) { + url.path.push(''); + } + } else if (isSingleDot(buffer)) { + if (chr != '/' && !(chr == '\\' && isSpecial(url))) { + url.path.push(''); + } + } else { + if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) { + if (url.host) url.host = ''; + buffer = buffer.charAt(0) + ':'; // normalize windows drive letter + } + + url.path.push(buffer); + } + + buffer = ''; + + if (url.scheme == 'file' && (chr == EOF || chr == '?' || chr == '#')) { + while (url.path.length > 1 && url.path[0] === '') { + url.path.shift(); + } + } + + if (chr == '?') { + url.query = ''; + state = QUERY; + } else if (chr == '#') { + url.fragment = ''; + state = FRAGMENT; + } + } else { + buffer += percentEncode(chr, pathPercentEncodeSet); + } + + break; + + case CANNOT_BE_A_BASE_URL_PATH: + if (chr == '?') { + url.query = ''; + state = QUERY; + } else if (chr == '#') { + url.fragment = ''; + state = FRAGMENT; + } else if (chr != EOF) { + url.path[0] += percentEncode(chr, C0ControlPercentEncodeSet); + } + + break; + + case QUERY: + if (!stateOverride && chr == '#') { + url.fragment = ''; + state = FRAGMENT; + } else if (chr != EOF) { + if (chr == "'" && isSpecial(url)) url.query += '%27';else if (chr == '#') url.query += '%23';else url.query += percentEncode(chr, C0ControlPercentEncodeSet); + } + + break; + + case FRAGMENT: + if (chr != EOF) url.fragment += percentEncode(chr, fragmentPercentEncodeSet); + break; + } + + pointer++; + } + }; // `URL` constructor + // https://url.spec.whatwg.org/#url-class + + + var URLConstructor = function URL(url + /* , base */ + ) { + var that = anInstance(this, URLConstructor, 'URL'); + var base = arguments.length > 1 ? arguments[1] : undefined; + var urlString = $toString(url); + var state = setInternalState(that, { + type: 'URL' + }); + var baseState, failure; + + if (base !== undefined) { + if (base instanceof URLConstructor) baseState = getInternalURLState(base);else { + failure = parseURL(baseState = {}, $toString(base)); + if (failure) throw TypeError(failure); + } + } + + failure = parseURL(state, urlString, null, baseState); + if (failure) throw TypeError(failure); + var searchParams = state.searchParams = new URLSearchParams$1(); + var searchParamsState = getInternalSearchParamsState(searchParams); + searchParamsState.updateSearchParams(state.query); + + searchParamsState.updateURL = function () { + state.query = String(searchParams) || null; + }; + + if (!DESCRIPTORS) { + that.href = serializeURL.call(that); + that.origin = getOrigin.call(that); + that.protocol = getProtocol.call(that); + that.username = getUsername.call(that); + that.password = getPassword.call(that); + that.host = getHost.call(that); + that.hostname = getHostname.call(that); + that.port = getPort.call(that); + that.pathname = getPathname.call(that); + that.search = getSearch.call(that); + that.searchParams = getSearchParams.call(that); + that.hash = getHash.call(that); + } + }; + + var URLPrototype = URLConstructor.prototype; + + var serializeURL = function () { + var url = getInternalURLState(this); + var scheme = url.scheme; + var username = url.username; + var password = url.password; + var host = url.host; + var port = url.port; + var path = url.path; + var query = url.query; + var fragment = url.fragment; + var output = scheme + ':'; + + if (host !== null) { + output += '//'; + + if (includesCredentials(url)) { + output += username + (password ? ':' + password : '') + '@'; + } + + output += serializeHost(host); + if (port !== null) output += ':' + port; + } else if (scheme == 'file') output += '//'; + + output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : ''; + if (query !== null) output += '?' + query; + if (fragment !== null) output += '#' + fragment; + return output; + }; + + var getOrigin = function () { + var url = getInternalURLState(this); + var scheme = url.scheme; + var port = url.port; + if (scheme == 'blob') try { + return new URLConstructor(scheme.path[0]).origin; + } catch (error) { + return 'null'; + } + if (scheme == 'file' || !isSpecial(url)) return 'null'; + return scheme + '://' + serializeHost(url.host) + (port !== null ? ':' + port : ''); + }; + + var getProtocol = function () { + return getInternalURLState(this).scheme + ':'; + }; + + var getUsername = function () { + return getInternalURLState(this).username; + }; + + var getPassword = function () { + return getInternalURLState(this).password; + }; + + var getHost = function () { + var url = getInternalURLState(this); + var host = url.host; + var port = url.port; + return host === null ? '' : port === null ? serializeHost(host) : serializeHost(host) + ':' + port; + }; + + var getHostname = function () { + var host = getInternalURLState(this).host; + return host === null ? '' : serializeHost(host); + }; + + var getPort = function () { + var port = getInternalURLState(this).port; + return port === null ? '' : String(port); + }; + + var getPathname = function () { + var url = getInternalURLState(this); + var path = url.path; + return url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : ''; + }; + + var getSearch = function () { + var query = getInternalURLState(this).query; + return query ? '?' + query : ''; + }; + + var getSearchParams = function () { + return getInternalURLState(this).searchParams; + }; + + var getHash = function () { + var fragment = getInternalURLState(this).fragment; + return fragment ? '#' + fragment : ''; + }; + + var accessorDescriptor = function (getter, setter) { + return { + get: getter, + set: setter, + configurable: true, + enumerable: true + }; + }; + + if (DESCRIPTORS) { + defineProperties(URLPrototype, { + // `URL.prototype.href` accessors pair + // https://url.spec.whatwg.org/#dom-url-href + href: accessorDescriptor(serializeURL, function (href) { + var url = getInternalURLState(this); + var urlString = $toString(href); + var failure = parseURL(url, urlString); + if (failure) throw TypeError(failure); + getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query); + }), + // `URL.prototype.origin` getter + // https://url.spec.whatwg.org/#dom-url-origin + origin: accessorDescriptor(getOrigin), + // `URL.prototype.protocol` accessors pair + // https://url.spec.whatwg.org/#dom-url-protocol + protocol: accessorDescriptor(getProtocol, function (protocol) { + var url = getInternalURLState(this); + parseURL(url, $toString(protocol) + ':', SCHEME_START); + }), + // `URL.prototype.username` accessors pair + // https://url.spec.whatwg.org/#dom-url-username + username: accessorDescriptor(getUsername, function (username) { + var url = getInternalURLState(this); + var codePoints = arrayFrom($toString(username)); + if (cannotHaveUsernamePasswordPort(url)) return; + url.username = ''; + + for (var i = 0; i < codePoints.length; i++) { + url.username += percentEncode(codePoints[i], userinfoPercentEncodeSet); + } + }), + // `URL.prototype.password` accessors pair + // https://url.spec.whatwg.org/#dom-url-password + password: accessorDescriptor(getPassword, function (password) { + var url = getInternalURLState(this); + var codePoints = arrayFrom($toString(password)); + if (cannotHaveUsernamePasswordPort(url)) return; + url.password = ''; + + for (var i = 0; i < codePoints.length; i++) { + url.password += percentEncode(codePoints[i], userinfoPercentEncodeSet); + } + }), + // `URL.prototype.host` accessors pair + // https://url.spec.whatwg.org/#dom-url-host + host: accessorDescriptor(getHost, function (host) { + var url = getInternalURLState(this); + if (url.cannotBeABaseURL) return; + parseURL(url, $toString(host), HOST); + }), + // `URL.prototype.hostname` accessors pair + // https://url.spec.whatwg.org/#dom-url-hostname + hostname: accessorDescriptor(getHostname, function (hostname) { + var url = getInternalURLState(this); + if (url.cannotBeABaseURL) return; + parseURL(url, $toString(hostname), HOSTNAME); + }), + // `URL.prototype.port` accessors pair + // https://url.spec.whatwg.org/#dom-url-port + port: accessorDescriptor(getPort, function (port) { + var url = getInternalURLState(this); + if (cannotHaveUsernamePasswordPort(url)) return; + port = $toString(port); + if (port == '') url.port = null;else parseURL(url, port, PORT); + }), + // `URL.prototype.pathname` accessors pair + // https://url.spec.whatwg.org/#dom-url-pathname + pathname: accessorDescriptor(getPathname, function (pathname) { + var url = getInternalURLState(this); + if (url.cannotBeABaseURL) return; + url.path = []; + parseURL(url, $toString(pathname), PATH_START); + }), + // `URL.prototype.search` accessors pair + // https://url.spec.whatwg.org/#dom-url-search + search: accessorDescriptor(getSearch, function (search) { + var url = getInternalURLState(this); + search = $toString(search); + + if (search == '') { + url.query = null; + } else { + if ('?' == search.charAt(0)) search = search.slice(1); + url.query = ''; + parseURL(url, search, QUERY); + } + + getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query); + }), + // `URL.prototype.searchParams` getter + // https://url.spec.whatwg.org/#dom-url-searchparams + searchParams: accessorDescriptor(getSearchParams), + // `URL.prototype.hash` accessors pair + // https://url.spec.whatwg.org/#dom-url-hash + hash: accessorDescriptor(getHash, function (hash) { + var url = getInternalURLState(this); + hash = $toString(hash); + + if (hash == '') { + url.fragment = null; + return; + } + + if ('#' == hash.charAt(0)) hash = hash.slice(1); + url.fragment = ''; + parseURL(url, hash, FRAGMENT); + }) + }); + } // `URL.prototype.toJSON` method + // https://url.spec.whatwg.org/#dom-url-tojson + + + redefine(URLPrototype, 'toJSON', function toJSON() { + return serializeURL.call(this); + }, { + enumerable: true + }); // `URL.prototype.toString` method + // https://url.spec.whatwg.org/#URL-stringification-behavior + + redefine(URLPrototype, 'toString', function toString() { + return serializeURL.call(this); + }, { + enumerable: true + }); + + if (NativeURL) { + var nativeCreateObjectURL = NativeURL.createObjectURL; + var nativeRevokeObjectURL = NativeURL.revokeObjectURL; // `URL.createObjectURL` method + // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL + // eslint-disable-next-line no-unused-vars -- required for `.length` + + if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', function createObjectURL(blob) { + return nativeCreateObjectURL.apply(NativeURL, arguments); + }); // `URL.revokeObjectURL` method + // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL + // eslint-disable-next-line no-unused-vars -- required for `.length` + + if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', function revokeObjectURL(url) { + return nativeRevokeObjectURL.apply(NativeURL, arguments); + }); + } + + setToStringTag(URLConstructor, 'URL'); + $$1({ + global: true, + forced: !USE_NATIVE_URL, + sham: !DESCRIPTORS + }, { + URL: URLConstructor + }); + + var $ = _export; // `URL.prototype.toJSON` method + // https://url.spec.whatwg.org/#dom-url-tojson + + + $({ + target: 'URL', + proto: true, + enumerable: true + }, { + toJSON: function toJSON() { + return URL.prototype.toString.call(this); + } + }); + + var propTypes = {exports: {}}; + + var reactIs$1 = {exports: {}}; + + var reactIs_development = {}; + + /** @license React v16.13.1 + * react-is.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + { + (function () { + // nor polyfill, then a plain number is used for performance. + + var hasSymbol = typeof Symbol === 'function' && Symbol.for; + var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7; + var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca; + var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb; + var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc; + var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2; + var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd; + var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary + // (unstable) APIs that have been removed. Can we remove the symbols? + + var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf; + var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf; + var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0; + var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1; + var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8; + var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3; + var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4; + var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9; + var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5; + var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6; + var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7; + + function isValidElementType(type) { + return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill. + type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE); + } + + function typeOf(object) { + if (typeof object === 'object' && object !== null) { + var $$typeof = object.$$typeof; + + switch ($$typeof) { + case REACT_ELEMENT_TYPE: + var type = object.type; + + switch (type) { + case REACT_ASYNC_MODE_TYPE: + case REACT_CONCURRENT_MODE_TYPE: + case REACT_FRAGMENT_TYPE: + case REACT_PROFILER_TYPE: + case REACT_STRICT_MODE_TYPE: + case REACT_SUSPENSE_TYPE: + return type; + + default: + var $$typeofType = type && type.$$typeof; + + switch ($$typeofType) { + case REACT_CONTEXT_TYPE: + case REACT_FORWARD_REF_TYPE: + case REACT_LAZY_TYPE: + case REACT_MEMO_TYPE: + case REACT_PROVIDER_TYPE: + return $$typeofType; + + default: + return $$typeof; + } + + } + + case REACT_PORTAL_TYPE: + return $$typeof; + } + } + + return undefined; + } // AsyncMode is deprecated along with isAsyncMode + + + var AsyncMode = REACT_ASYNC_MODE_TYPE; + var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE; + var ContextConsumer = REACT_CONTEXT_TYPE; + var ContextProvider = REACT_PROVIDER_TYPE; + var Element = REACT_ELEMENT_TYPE; + var ForwardRef = REACT_FORWARD_REF_TYPE; + var Fragment = REACT_FRAGMENT_TYPE; + var Lazy = REACT_LAZY_TYPE; + var Memo = REACT_MEMO_TYPE; + var Portal = REACT_PORTAL_TYPE; + var Profiler = REACT_PROFILER_TYPE; + var StrictMode = REACT_STRICT_MODE_TYPE; + var Suspense = REACT_SUSPENSE_TYPE; + var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated + + function isAsyncMode(object) { + { + if (!hasWarnedAboutDeprecatedIsAsyncMode) { + hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint + + console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.'); + } + } + return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE; + } + + function isConcurrentMode(object) { + return typeOf(object) === REACT_CONCURRENT_MODE_TYPE; + } + + function isContextConsumer(object) { + return typeOf(object) === REACT_CONTEXT_TYPE; + } + + function isContextProvider(object) { + return typeOf(object) === REACT_PROVIDER_TYPE; + } + + function isElement(object) { + return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; + } + + function isForwardRef(object) { + return typeOf(object) === REACT_FORWARD_REF_TYPE; + } + + function isFragment(object) { + return typeOf(object) === REACT_FRAGMENT_TYPE; + } + + function isLazy(object) { + return typeOf(object) === REACT_LAZY_TYPE; + } + + function isMemo(object) { + return typeOf(object) === REACT_MEMO_TYPE; + } + + function isPortal(object) { + return typeOf(object) === REACT_PORTAL_TYPE; + } + + function isProfiler(object) { + return typeOf(object) === REACT_PROFILER_TYPE; + } + + function isStrictMode(object) { + return typeOf(object) === REACT_STRICT_MODE_TYPE; + } + + function isSuspense(object) { + return typeOf(object) === REACT_SUSPENSE_TYPE; + } + + reactIs_development.AsyncMode = AsyncMode; + reactIs_development.ConcurrentMode = ConcurrentMode; + reactIs_development.ContextConsumer = ContextConsumer; + reactIs_development.ContextProvider = ContextProvider; + reactIs_development.Element = Element; + reactIs_development.ForwardRef = ForwardRef; + reactIs_development.Fragment = Fragment; + reactIs_development.Lazy = Lazy; + reactIs_development.Memo = Memo; + reactIs_development.Portal = Portal; + reactIs_development.Profiler = Profiler; + reactIs_development.StrictMode = StrictMode; + reactIs_development.Suspense = Suspense; + reactIs_development.isAsyncMode = isAsyncMode; + reactIs_development.isConcurrentMode = isConcurrentMode; + reactIs_development.isContextConsumer = isContextConsumer; + reactIs_development.isContextProvider = isContextProvider; + reactIs_development.isElement = isElement; + reactIs_development.isForwardRef = isForwardRef; + reactIs_development.isFragment = isFragment; + reactIs_development.isLazy = isLazy; + reactIs_development.isMemo = isMemo; + reactIs_development.isPortal = isPortal; + reactIs_development.isProfiler = isProfiler; + reactIs_development.isStrictMode = isStrictMode; + reactIs_development.isSuspense = isSuspense; + reactIs_development.isValidElementType = isValidElementType; + reactIs_development.typeOf = typeOf; + })(); + } + + { + reactIs$1.exports = reactIs_development; + } + + /* + object-assign + (c) Sindre Sorhus + @license MIT + */ + /* eslint-disable no-unused-vars */ + + var getOwnPropertySymbols$1 = Object.getOwnPropertySymbols; + var hasOwnProperty = Object.prototype.hasOwnProperty; + var propIsEnumerable = Object.prototype.propertyIsEnumerable; + + function toObject(val) { + if (val === null || val === undefined) { + throw new TypeError('Object.assign cannot be called with null or undefined'); + } + + return Object(val); + } + + function shouldUseNative() { + try { + if (!Object.assign) { + return false; + } // Detect buggy property enumeration order in older V8 versions. + // https://bugs.chromium.org/p/v8/issues/detail?id=4118 + + + var test1 = new String('abc'); // eslint-disable-line no-new-wrappers + + test1[5] = 'de'; + + if (Object.getOwnPropertyNames(test1)[0] === '5') { + return false; + } // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + + + var test2 = {}; + + for (var i = 0; i < 10; i++) { + test2['_' + String.fromCharCode(i)] = i; + } + + var order2 = Object.getOwnPropertyNames(test2).map(function (n) { + return test2[n]; + }); + + if (order2.join('') !== '0123456789') { + return false; + } // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + + + var test3 = {}; + 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { + test3[letter] = letter; + }); + + if (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') { + return false; + } + + return true; + } catch (err) { + // We don't expect any of the above to throw, but better to be safe. + return false; + } + } + + var objectAssign = shouldUseNative() ? Object.assign : function (target, source) { + var from; + var to = toObject(target); + var symbols; + + for (var s = 1; s < arguments.length; s++) { + from = Object(arguments[s]); + + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + + if (getOwnPropertySymbols$1) { + symbols = getOwnPropertySymbols$1(from); + + for (var i = 0; i < symbols.length; i++) { + if (propIsEnumerable.call(from, symbols[i])) { + to[symbols[i]] = from[symbols[i]]; + } + } + } + } + + return to; + }; + + /** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + var ReactPropTypesSecret$2 = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; + var ReactPropTypesSecret_1 = ReactPropTypesSecret$2; + + /** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + var printWarning$2 = function () {}; + + { + var ReactPropTypesSecret$1 = ReactPropTypesSecret_1; + + var loggedTypeFailures = {}; + var has$1 = Function.call.bind(Object.prototype.hasOwnProperty); + + printWarning$2 = function (text) { + var message = 'Warning: ' + text; + + if (typeof console !== 'undefined') { + console.error(message); + } + + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + }; + } + /** + * Assert that the values match with the type specs. + * Error messages are memorized and will only be shown once. + * + * @param {object} typeSpecs Map of name to a ReactPropType + * @param {object} values Runtime values that need to be type-checked + * @param {string} location e.g. "prop", "context", "child context" + * @param {string} componentName Name of the component for error messages. + * @param {?Function} getStack Returns the component stack. + * @private + */ + + + function checkPropTypes$1(typeSpecs, values, location, componentName, getStack) { + { + for (var typeSpecName in typeSpecs) { + if (has$1(typeSpecs, typeSpecName)) { + var error; // Prop type validation may throw. In case they do, we don't want to + // fail the render phase where it didn't fail before. So we log it. + // After these have been cleaned up, we'll let them throw. + + try { + // This is intentionally an invariant that gets caught. It's the same + // behavior as without this statement except with a better message. + if (typeof typeSpecs[typeSpecName] !== 'function') { + var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.'); + err.name = 'Invariant Violation'; + throw err; + } + + error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret$1); + } catch (ex) { + error = ex; + } + + if (error && !(error instanceof Error)) { + printWarning$2((componentName || 'React class') + ': type specification of ' + location + ' `' + typeSpecName + '` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).'); + } + + if (error instanceof Error && !(error.message in loggedTypeFailures)) { + // Only monitor this failure once because there tends to be a lot of the + // same error. + loggedTypeFailures[error.message] = true; + var stack = getStack ? getStack() : ''; + printWarning$2('Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')); + } + } + } + } + } + /** + * Resets warning cache when testing. + * + * @private + */ + + + checkPropTypes$1.resetWarningCache = function () { + { + loggedTypeFailures = {}; + } + }; + + var checkPropTypes_1 = checkPropTypes$1; + + /** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + var ReactIs$1 = reactIs$1.exports; + + var assign$2 = objectAssign; + + var ReactPropTypesSecret = ReactPropTypesSecret_1; + + var checkPropTypes = checkPropTypes_1; + + var has = Function.call.bind(Object.prototype.hasOwnProperty); + + var printWarning$1 = function () {}; + + { + printWarning$1 = function (text) { + var message = 'Warning: ' + text; + + if (typeof console !== 'undefined') { + console.error(message); + } + + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + }; + } + + function emptyFunctionThatReturnsNull() { + return null; + } + + var factoryWithTypeCheckers = function (isValidElement, throwOnDirectAccess) { + /* global Symbol */ + var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; + var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec. + + /** + * Returns the iterator method function contained on the iterable object. + * + * Be sure to invoke the function with the iterable as context: + * + * var iteratorFn = getIteratorFn(myIterable); + * if (iteratorFn) { + * var iterator = iteratorFn.call(myIterable); + * ... + * } + * + * @param {?object} maybeIterable + * @return {?function} + */ + + function getIteratorFn(maybeIterable) { + var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]); + + if (typeof iteratorFn === 'function') { + return iteratorFn; + } + } + /** + * Collection of methods that allow declaration and validation of props that are + * supplied to React components. Example usage: + * + * var Props = require('ReactPropTypes'); + * var MyArticle = React.createClass({ + * propTypes: { + * // An optional string prop named "description". + * description: Props.string, + * + * // A required enum prop named "category". + * category: Props.oneOf(['News','Photos']).isRequired, + * + * // A prop named "dialog" that requires an instance of Dialog. + * dialog: Props.instanceOf(Dialog).isRequired + * }, + * render: function() { ... } + * }); + * + * A more formal specification of how these methods are used: + * + * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...) + * decl := ReactPropTypes.{type}(.isRequired)? + * + * Each and every declaration produces a function with the same signature. This + * allows the creation of custom validation functions. For example: + * + * var MyLink = React.createClass({ + * propTypes: { + * // An optional string or URI prop named "href". + * href: function(props, propName, componentName) { + * var propValue = props[propName]; + * if (propValue != null && typeof propValue !== 'string' && + * !(propValue instanceof URI)) { + * return new Error( + * 'Expected a string or an URI for ' + propName + ' in ' + + * componentName + * ); + * } + * } + * }, + * render: function() {...} + * }); + * + * @internal + */ + + + var ANONYMOUS = '<>'; // Important! + // Keep this list in sync with production version in `./factoryWithThrowingShims.js`. + + var ReactPropTypes = { + array: createPrimitiveTypeChecker('array'), + bool: createPrimitiveTypeChecker('boolean'), + func: createPrimitiveTypeChecker('function'), + number: createPrimitiveTypeChecker('number'), + object: createPrimitiveTypeChecker('object'), + string: createPrimitiveTypeChecker('string'), + symbol: createPrimitiveTypeChecker('symbol'), + any: createAnyTypeChecker(), + arrayOf: createArrayOfTypeChecker, + element: createElementTypeChecker(), + elementType: createElementTypeTypeChecker(), + instanceOf: createInstanceTypeChecker, + node: createNodeChecker(), + objectOf: createObjectOfTypeChecker, + oneOf: createEnumTypeChecker, + oneOfType: createUnionTypeChecker, + shape: createShapeTypeChecker, + exact: createStrictShapeTypeChecker + }; + /** + * inlined Object.is polyfill to avoid requiring consumers ship their own + * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is + */ + + /*eslint-disable no-self-compare*/ + + function is(x, y) { + // SameValue algorithm + if (x === y) { + // Steps 1-5, 7-10 + // Steps 6.b-6.e: +0 != -0 + return x !== 0 || 1 / x === 1 / y; + } else { + // Step 6.a: NaN == NaN + return x !== x && y !== y; + } + } + /*eslint-enable no-self-compare*/ + + /** + * We use an Error-like object for backward compatibility as people may call + * PropTypes directly and inspect their output. However, we don't use real + * Errors anymore. We don't inspect their stack anyway, and creating them + * is prohibitively expensive if they are created too often, such as what + * happens in oneOfType() for any type before the one that matched. + */ + + + function PropTypeError(message) { + this.message = message; + this.stack = ''; + } // Make `instanceof Error` still work for returned errors. + + + PropTypeError.prototype = Error.prototype; + + function createChainableTypeChecker(validate) { + { + var manualPropTypeCallCache = {}; + var manualPropTypeWarningCount = 0; + } + + function checkType(isRequired, props, propName, componentName, location, propFullName, secret) { + componentName = componentName || ANONYMOUS; + propFullName = propFullName || propName; + + if (secret !== ReactPropTypesSecret) { + if (throwOnDirectAccess) { + // New behavior only for users of `prop-types` package + var err = new Error('Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use `PropTypes.checkPropTypes()` to call them. ' + 'Read more at http://fb.me/use-check-prop-types'); + err.name = 'Invariant Violation'; + throw err; + } else if (typeof console !== 'undefined') { + // Old behavior for people using React.PropTypes + var cacheKey = componentName + ':' + propName; + + if (!manualPropTypeCallCache[cacheKey] && // Avoid spamming the console because they are often not actionable except for lib authors + manualPropTypeWarningCount < 3) { + printWarning$1('You are manually calling a React.PropTypes validation ' + 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' + 'and will throw in the standalone `prop-types` package. ' + 'You may be seeing this warning due to a third-party PropTypes ' + 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'); + manualPropTypeCallCache[cacheKey] = true; + manualPropTypeWarningCount++; + } + } + } + + if (props[propName] == null) { + if (isRequired) { + if (props[propName] === null) { + return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.')); + } + + return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.')); + } + + return null; + } else { + return validate(props, propName, componentName, location, propFullName); + } + } + + var chainedCheckType = checkType.bind(null, false); + chainedCheckType.isRequired = checkType.bind(null, true); + return chainedCheckType; + } + + function createPrimitiveTypeChecker(expectedType) { + function validate(props, propName, componentName, location, propFullName, secret) { + var propValue = props[propName]; + var propType = getPropType(propValue); + + if (propType !== expectedType) { + // `propValue` being instance of, say, date/regexp, pass the 'object' + // check, but we can offer a more precise error message here rather than + // 'of type `object`'. + var preciseType = getPreciseType(propValue); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.')); + } + + return null; + } + + return createChainableTypeChecker(validate); + } + + function createAnyTypeChecker() { + return createChainableTypeChecker(emptyFunctionThatReturnsNull); + } + + function createArrayOfTypeChecker(typeChecker) { + function validate(props, propName, componentName, location, propFullName) { + if (typeof typeChecker !== 'function') { + return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.'); + } + + var propValue = props[propName]; + + if (!Array.isArray(propValue)) { + var propType = getPropType(propValue); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.')); + } + + for (var i = 0; i < propValue.length; i++) { + var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret); + + if (error instanceof Error) { + return error; + } + } + + return null; + } + + return createChainableTypeChecker(validate); + } + + function createElementTypeChecker() { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + + if (!isValidElement(propValue)) { + var propType = getPropType(propValue); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.')); + } + + return null; + } + + return createChainableTypeChecker(validate); + } + + function createElementTypeTypeChecker() { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + + if (!ReactIs$1.isValidElementType(propValue)) { + var propType = getPropType(propValue); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.')); + } + + return null; + } + + return createChainableTypeChecker(validate); + } + + function createInstanceTypeChecker(expectedClass) { + function validate(props, propName, componentName, location, propFullName) { + if (!(props[propName] instanceof expectedClass)) { + var expectedClassName = expectedClass.name || ANONYMOUS; + var actualClassName = getClassName(props[propName]); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.')); + } + + return null; + } + + return createChainableTypeChecker(validate); + } + + function createEnumTypeChecker(expectedValues) { + if (!Array.isArray(expectedValues)) { + { + if (arguments.length > 1) { + printWarning$1('Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' + 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'); + } else { + printWarning$1('Invalid argument supplied to oneOf, expected an array.'); + } + } + + return emptyFunctionThatReturnsNull; + } + + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + + for (var i = 0; i < expectedValues.length; i++) { + if (is(propValue, expectedValues[i])) { + return null; + } + } + + var valuesString = JSON.stringify(expectedValues, function replacer(key, value) { + var type = getPreciseType(value); + + if (type === 'symbol') { + return String(value); + } + + return value; + }); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.')); + } + + return createChainableTypeChecker(validate); + } + + function createObjectOfTypeChecker(typeChecker) { + function validate(props, propName, componentName, location, propFullName) { + if (typeof typeChecker !== 'function') { + return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.'); + } + + var propValue = props[propName]; + var propType = getPropType(propValue); + + if (propType !== 'object') { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.')); + } + + for (var key in propValue) { + if (has(propValue, key)) { + var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); + + if (error instanceof Error) { + return error; + } + } + } + + return null; + } + + return createChainableTypeChecker(validate); + } + + function createUnionTypeChecker(arrayOfTypeCheckers) { + if (!Array.isArray(arrayOfTypeCheckers)) { + printWarning$1('Invalid argument supplied to oneOfType, expected an instance of array.') ; + return emptyFunctionThatReturnsNull; + } + + for (var i = 0; i < arrayOfTypeCheckers.length; i++) { + var checker = arrayOfTypeCheckers[i]; + + if (typeof checker !== 'function') { + printWarning$1('Invalid argument supplied to oneOfType. Expected an array of check functions, but ' + 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'); + return emptyFunctionThatReturnsNull; + } + } + + function validate(props, propName, componentName, location, propFullName) { + for (var i = 0; i < arrayOfTypeCheckers.length; i++) { + var checker = arrayOfTypeCheckers[i]; + + if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) { + return null; + } + } + + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.')); + } + + return createChainableTypeChecker(validate); + } + + function createNodeChecker() { + function validate(props, propName, componentName, location, propFullName) { + if (!isNode(props[propName])) { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.')); + } + + return null; + } + + return createChainableTypeChecker(validate); + } + + function createShapeTypeChecker(shapeTypes) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + var propType = getPropType(propValue); + + if (propType !== 'object') { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); + } + + for (var key in shapeTypes) { + var checker = shapeTypes[key]; + + if (!checker) { + continue; + } + + var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); + + if (error) { + return error; + } + } + + return null; + } + + return createChainableTypeChecker(validate); + } + + function createStrictShapeTypeChecker(shapeTypes) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + var propType = getPropType(propValue); + + if (propType !== 'object') { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); + } // We need to check all keys in case some are required but missing from + // props. + + + var allKeys = assign$2({}, props[propName], shapeTypes); + + for (var key in allKeys) { + var checker = shapeTypes[key]; + + if (!checker) { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' + '\nBad object: ' + JSON.stringify(props[propName], null, ' ') + '\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')); + } + + var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); + + if (error) { + return error; + } + } + + return null; + } + + return createChainableTypeChecker(validate); + } + + function isNode(propValue) { + switch (typeof propValue) { + case 'number': + case 'string': + case 'undefined': + return true; + + case 'boolean': + return !propValue; + + case 'object': + if (Array.isArray(propValue)) { + return propValue.every(isNode); + } + + if (propValue === null || isValidElement(propValue)) { + return true; + } + + var iteratorFn = getIteratorFn(propValue); + + if (iteratorFn) { + var iterator = iteratorFn.call(propValue); + var step; + + if (iteratorFn !== propValue.entries) { + while (!(step = iterator.next()).done) { + if (!isNode(step.value)) { + return false; + } + } + } else { + // Iterator will provide entry [k,v] tuples rather than values. + while (!(step = iterator.next()).done) { + var entry = step.value; + + if (entry) { + if (!isNode(entry[1])) { + return false; + } + } + } + } + } else { + return false; + } + + return true; + + default: + return false; + } + } + + function isSymbol(propType, propValue) { + // Native Symbol. + if (propType === 'symbol') { + return true; + } // falsy value can't be a Symbol + + + if (!propValue) { + return false; + } // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol' + + + if (propValue['@@toStringTag'] === 'Symbol') { + return true; + } // Fallback for non-spec compliant Symbols which are polyfilled. + + + if (typeof Symbol === 'function' && propValue instanceof Symbol) { + return true; + } + + return false; + } // Equivalent of `typeof` but with special handling for array and regexp. + + + function getPropType(propValue) { + var propType = typeof propValue; + + if (Array.isArray(propValue)) { + return 'array'; + } + + if (propValue instanceof RegExp) { + // Old webkits (at least until Android 4.0) return 'function' rather than + // 'object' for typeof a RegExp. We'll normalize this here so that /bla/ + // passes PropTypes.object. + return 'object'; + } + + if (isSymbol(propType, propValue)) { + return 'symbol'; + } + + return propType; + } // This handles more types than `getPropType`. Only used for error messages. + // See `createPrimitiveTypeChecker`. + + + function getPreciseType(propValue) { + if (typeof propValue === 'undefined' || propValue === null) { + return '' + propValue; + } + + var propType = getPropType(propValue); + + if (propType === 'object') { + if (propValue instanceof Date) { + return 'date'; + } else if (propValue instanceof RegExp) { + return 'regexp'; + } + } + + return propType; + } // Returns a string that is postfixed to a warning about an invalid type. + // For example, "undefined" or "of type array" + + + function getPostfixForTypeWarning(value) { + var type = getPreciseType(value); + + switch (type) { + case 'array': + case 'object': + return 'an ' + type; + + case 'boolean': + case 'date': + case 'regexp': + return 'a ' + type; + + default: + return type; + } + } // Returns class name of the object, if any. + + + function getClassName(propValue) { + if (!propValue.constructor || !propValue.constructor.name) { + return ANONYMOUS; + } + + return propValue.constructor.name; + } + + ReactPropTypes.checkPropTypes = checkPropTypes; + ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache; + ReactPropTypes.PropTypes = ReactPropTypes; + return ReactPropTypes; + }; + + /** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + + { + var ReactIs = reactIs$1.exports; // By explicitly using `prop-types` you are opting into new development behavior. + // http://fb.me/prop-types-in-prod + + + var throwOnDirectAccess = true; + propTypes.exports = factoryWithTypeCheckers(ReactIs.isElement, throwOnDirectAccess); + } + + var _pt = propTypes.exports; + + var lib = {}; + + /*:: type Attr = { [key: string]: string | number } */ + + /*:: type Opts = { preserveNumbers: ?boolean } */ + + /* + + style-attr + ==== + + Very simple parsing and stringifying of style attributes. + + `parse` + ---- + + Convert a style attribute string to an object. + + */ + + /*:: declare function parse (raw: string, opts: ?Opts): Attr */ + function parse(raw, opts) { + opts = opts || {}; + var preserveNumbers = opts.preserveNumbers; + + var trim = function (s) { + return s.trim(); + }; + + var obj = {}; + getKeyValueChunks(raw).map(trim).filter(Boolean).forEach(function (item) { + // split with `.indexOf` rather than `.split` because the value may also contain colons. + var pos = item.indexOf(':'); + var key = item.substr(0, pos).trim(); + var val = item.substr(pos + 1).trim(); + + if (preserveNumbers && isNumeric(val)) { + val = Number(val); + } + + obj[key] = val; + }); + return obj; + } + /* + + `isNumeric` + ---- + + Check if a value is numeric. + Via: https://stackoverflow.com/a/1830844/9324 + + */ + + /*:: declare function isNumeric (n: any): boolean */ + + + function isNumeric(n) { + return !isNaN(parseFloat(n)) && isFinite(n); + } + /* + + `getKeyValueChunks` + ---- + + Split a string into chunks matching `: ` + + */ + + /*:: declare function getKeyValueChunks (raw: string): Array */ + + + function getKeyValueChunks(raw) { + var chunks = []; + var offset = 0; + var sep = ';'; + var hasUnclosedUrl = /url\([^\)]+$/; + var chunk = ''; + var nextSplit; + + while (offset < raw.length) { + nextSplit = raw.indexOf(sep, offset); + + if (nextSplit === -1) { + nextSplit = raw.length; + } + + chunk += raw.substring(offset, nextSplit); // data URIs can contain semicolons, so make sure we get the whole thing + + if (hasUnclosedUrl.test(chunk)) { + chunk += ';'; + offset = nextSplit + 1; + continue; + } + + chunks.push(chunk); + chunk = ''; + offset = nextSplit + 1; + } + + return chunks; + } + /* + + `stringify` + ---- + + Convert an object into an attribute string + + */ + + /*:: declare function stringify (obj: Attr): string */ + + + function stringify(obj) { + return Object.keys(obj).map(function (key) { + return key + ':' + obj[key]; + }).join(';'); + } + /* + + `normalize` + ---- + + Normalize an attribute string (eg. collapse duplicates) + + */ + + /*:: declare function normalize (str: string, opts: ?Opts): string */ + + + function normalize(str, opts) { + return stringify(parse(str, opts)); + } + + lib.parse = parse; + lib.stringify = stringify; + lib.normalize = normalize; + + var util$2 = {exports: {}}; + + /** + * attr fix for old ie + * @author yiminghe@gmail.com + */ + + var R_BOOLEAN = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + R_FOCUSABLE = /^(?:button|input|object|select|textarea)$/i, + R_CLICKABLE = /^a(?:rea)?$/i, + R_INVALID_CHAR = /:|^on/; + var attrFix = {}, + propFix, + attrHooks = { + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + tabindex: { + get: function (el) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + var attributeNode = el.getAttributeNode('tabindex'); + return attributeNode && attributeNode.specified ? parseInt(attributeNode.value, 10) : R_FOCUSABLE.test(el.nodeName) || R_CLICKABLE.test(el.nodeName) && el.href ? 0 : undefined; + } + } + }, + boolHook = { + get: function (elem, name) { + // 转发到 prop 方法 + return elem[propFix[name] || name] ? // 根据 w3c attribute , true 时返回属性名字符串 + name.toLowerCase() : undefined; + } + }, + attrNodeHook = {}; + attrHooks.style = { + get: function (el) { + return el.style.cssText; + } + }; + propFix = { + hidefocus: 'hideFocus', + tabindex: 'tabIndex', + readonly: 'readOnly', + 'for': 'htmlFor', + 'class': 'className', + maxlength: 'maxLength', + cellspacing: 'cellSpacing', + cellpadding: 'cellPadding', + rowspan: 'rowSpan', + colspan: 'colSpan', + usemap: 'useMap', + frameborder: 'frameBorder', + contenteditable: 'contentEditable' + }; + var ua = typeof navigator !== 'undefined' ? navigator.userAgent : ''; + var doc = typeof document !== 'undefined' ? document : {}; + + function numberify(s) { + var c = 0; // convert '1.2.3.4' to 1.234 + + return parseFloat(s.replace(/\./g, function () { + return c++ === 0 ? '.' : ''; + })); + } + + function ieVersion() { + var m, v; + + if ((m = ua.match(/MSIE ([^;]*)|Trident.*; rv(?:\s|:)?([0-9.]+)/)) && (v = m[1] || m[2])) { + return doc.documentMode || numberify(v); + } + } + + function mix(s, t) { + for (var p in t) { + s[p] = t[p]; + } + } + + function each(arr, fn) { + var i = 0, + l = arr.length; + + for (; i < l; i++) { + if (fn(arr[i], i) === false) { + break; + } + } + } + + var ie = ieVersion(); + + if (ie && ie < 8) { + attrHooks.style.set = function (el, val) { + el.style.cssText = val; + }; // get attribute value from attribute node for ie + + + mix(attrNodeHook, { + get: function (elem, name) { + var ret = elem.getAttributeNode(name); // Return undefined if attribute node specified by user + + return ret && ( // fix #100 + ret.specified || ret.nodeValue) ? ret.nodeValue : undefined; + } + }); // ie6,7 不区分 attribute 与 property + + mix(attrFix, propFix); // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + + attrHooks.tabIndex = attrHooks.tabindex; // 不光是 href, src, 还有 rowspan 等非 mapping 属性,也需要用第 2 个参数来获取原始值 + // 注意 colSpan rowSpan 已经由 propFix 转为大写 + + each(['href', 'src', 'width', 'height', 'colSpan', 'rowSpan'], function (name) { + attrHooks[name] = { + get: function (elem) { + var ret = elem.getAttribute(name, 2); + return ret === null ? undefined : ret; + } + }; + }); + attrHooks.placeholder = { + get: function (elem, name) { + return elem[name] || attrNodeHook.get(elem, name); + } + }; + } + + if (ie) { + var hrefFix = attrHooks.href = attrHooks.href || {}; + + hrefFix.set = function (el, val, name) { + var childNodes = el.childNodes, + b, + len = childNodes.length, + allText = len > 0; + + for (len = len - 1; len >= 0; len--) { + if (childNodes[len].nodeType !== 3) { + allText = 0; + } + } + + if (allText) { + b = el.ownerDocument.createElement('b'); + b.style.display = 'none'; + el.appendChild(b); + } + + el.setAttribute(name, '' + val); + + if (b) { + el.removeChild(b); + } + }; + } + + var RE_TRIM = /^[\s\xa0]+|[\s\xa0]+$/g, + trim = String.prototype.trim; + var SPACE = ' '; + var getElementsByTagName; + + getElementsByTagName = function (name, context) { + return context.getElementsByTagName(name); + }; + + if (doc.createElement) { + var div = doc.createElement('div'); + div.appendChild(document.createComment('')); + + if (div.getElementsByTagName('*').length) { + getElementsByTagName = function (name, context) { + var nodes = context.getElementsByTagName(name), + needsFilter = name === '*'; // + + if (needsFilter || typeof nodes.length !== 'number') { + var ret = [], + i = 0, + el; + + while (el = nodes[i++]) { + if (!needsFilter || el.nodeType === 1) { + ret.push(el); + } + } + + return ret; + } else { + return nodes; + } + }; + } + } + + var compareNodeOrder = 'sourceIndex' in (doc && doc.documentElement || {}) ? function (a, b) { + return a.sourceIndex - b.sourceIndex; + } : function (a, b) { + if (!a.compareDocumentPosition || !b.compareDocumentPosition) { + return a.compareDocumentPosition ? -1 : 1; + } + + var bit = a.compareDocumentPosition(b) & 4; + return bit ? -1 : 1; + }; + var util$1 = util$2.exports = { + ie: ie, + unique: function () { + var hasDuplicate, + baseHasDuplicate = true; // Here we check if the JavaScript engine is using some sort of + // optimization where it does not always call our comparison + // function. If that is the case, discard the hasDuplicate value. + // Thus far that includes Google Chrome. + + [0, 0].sort(function () { + baseHasDuplicate = false; + return 0; + }); + + function sortOrder(a, b) { + if (a === b) { + hasDuplicate = true; + return 0; + } + + return compareNodeOrder(a, b); + } // 排序去重 + + + return function (elements) { + hasDuplicate = baseHasDuplicate; + elements.sort(sortOrder); + + if (hasDuplicate) { + var i = 1, + len = elements.length; + + while (i < len) { + if (elements[i] === elements[i - 1]) { + elements.splice(i, 1); + --len; + } else { + i++; + } + } + } + + return elements; + }; + }(), + getElementsByTagName: getElementsByTagName, + getSimpleAttr: function (el, name) { + var ret = el && el.getAttributeNode(name); + + if (ret && ret.specified) { + return 'value' in ret ? ret.value : ret.nodeValue; + } + + return undefined; + }, + contains: ie ? function (a, b) { + if (a.nodeType === 9) { + a = a.documentElement; + } // !a.contains => a===document || text + // 注意原生 contains 判断时 a===b 也返回 true + + + b = b.parentNode; + + if (a === b) { + return true; + } // when b is document, a.contains(b) 不支持的接口 in ie + + + if (b && b.nodeType === 1) { + return a.contains && a.contains(b); + } else { + return false; + } + } : function (a, b) { + return !!(a.compareDocumentPosition(b) & 16); + }, + isTag: function (el, value) { + return value === '*' || el.nodeName.toLowerCase() === value.toLowerCase(); + }, + hasSingleClass: function (el, cls) { + // consider xml + // https://github.com/kissyteam/kissy/issues/532 + var className = el && util$1.getSimpleAttr(el, 'class'); + return className && (className = className.replace(/[\r\t\n]/g, SPACE)) && (SPACE + className + SPACE).indexOf(SPACE + cls + SPACE) > -1; + }, + startsWith: function (str, prefix) { + return str.lastIndexOf(prefix, 0) === 0; + }, + endsWith: function (str, suffix) { + var ind = str.length - suffix.length; + return ind >= 0 && str.indexOf(suffix, ind) === ind; + }, + trim: trim ? function (str) { + return str == null ? '' : trim.call(str); + } : function (str) { + return str == null ? '' : (str + '').replace(RE_TRIM, ''); + }, + attr: function (el, name) { + var attrNormalizer, ret; // scrollLeft + + name = name.toLowerCase(); // custom attrs + + name = attrFix[name] || name; + + if (R_BOOLEAN.test(name)) { + attrNormalizer = boolHook; + } else if (R_INVALID_CHAR.test(name)) { + // only old ie? + attrNormalizer = attrNodeHook; + } else { + attrNormalizer = attrHooks[name]; + } + + if (el && el.nodeType === 1) { + // browsers index elements by id/name on forms, give priority to attributes. + if (el.nodeName.toLowerCase() === 'form') { + attrNormalizer = attrNodeHook; + } + + if (attrNormalizer && attrNormalizer.get) { + return attrNormalizer.get(el, name); + } + + ret = el.getAttribute(name); + + if (ret === '') { + var attrNode = el.getAttributeNode(name); + + if (!attrNode || !attrNode.specified) { + return undefined; + } + } // standard browser non-existing attribute return null + // ie<8 will return undefined , because it return property + // so norm to undefined + + + return ret === null ? undefined : ret; + } + } + }; + + var parser$1 = {exports: {}}; + + /* + Generated by kison.*/ + + (function (module) { + var parser = function (undefined$1) { + /*jshint quotmark:false, loopfunc:true, indent:false, unused:false, asi:true, boss:true*/ + + /* Generated by kison */ + var parser = {}, + GrammarConst = { + 'SHIFT_TYPE': 1, + 'REDUCE_TYPE': 2, + 'ACCEPT_TYPE': 0, + 'TYPE_INDEX': 0, + 'PRODUCTION_INDEX': 1, + 'TO_INDEX': 2 + }; + /*jslint quotmark: false*/ + + function mix(to, from) { + for (var f in from) { + to[f] = from[f]; + } + } + + function isArray(obj) { + return '[object Array]' === Object.prototype.toString.call(obj); + } + + function each(object, fn, context) { + if (object) { + var key, + val, + length, + i = 0; + context = context || null; + + if (!isArray(object)) { + for (key in object) { + // can not use hasOwnProperty + if (fn.call(context, object[key], key, object) === false) { + break; + } + } + } else { + length = object.length; + + for (val = object[0]; i < length; val = object[++i]) { + if (fn.call(context, val, i, object) === false) { + break; + } + } + } + } + } + + function inArray(item, arr) { + for (var i = 0, l = arr.length; i < l; i++) { + if (arr[i] === item) { + return true; + } + } + + return false; + } + + var Lexer = function Lexer(cfg) { + var self = this; + /* + lex rules. + @type {Object[]} + @example + [ + { + regexp:'\\w+', + state:['xx'], + token:'c', + // this => lex + action:function(){} + } + ] + */ + + self.rules = []; + mix(self, cfg); + /* + Input languages + @type {String} + */ + + self.resetInput(self.input); + }; + + Lexer.prototype = { + 'resetInput': function (input) { + mix(this, { + input: input, + matched: '', + stateStack: [Lexer.STATIC.INITIAL], + match: '', + text: '', + firstLine: 1, + lineNumber: 1, + lastLine: 1, + firstColumn: 1, + lastColumn: 1 + }); + }, + 'getCurrentRules': function () { + var self = this, + currentState = self.stateStack[self.stateStack.length - 1], + rules = []; //#JSCOVERAGE_IF + + if (self.mapState) { + currentState = self.mapState(currentState); + } + + each(self.rules, function (r) { + var state = r.state || r[3]; + + if (!state) { + if (currentState === Lexer.STATIC.INITIAL) { + rules.push(r); + } + } else if (inArray(currentState, state)) { + rules.push(r); + } + }); + return rules; + }, + 'pushState': function (state) { + this.stateStack.push(state); + }, + 'popState': function (num) { + num = num || 1; + var ret; + + while (num--) { + ret = this.stateStack.pop(); + } + + return ret; + }, + 'showDebugInfo': function () { + var self = this, + DEBUG_CONTEXT_LIMIT = Lexer.STATIC.DEBUG_CONTEXT_LIMIT, + matched = self.matched, + match = self.match, + input = self.input; + matched = matched.slice(0, matched.length - match.length); //#JSCOVERAGE_IF 0 + + var past = (matched.length > DEBUG_CONTEXT_LIMIT ? '...' : '') + matched.slice(0 - DEBUG_CONTEXT_LIMIT).replace(/\n/, ' '), + next = match + input; //#JSCOVERAGE_ENDIF + + next = next.slice(0, DEBUG_CONTEXT_LIMIT) + (next.length > DEBUG_CONTEXT_LIMIT ? '...' : ''); + return past + next + '\n' + new Array(past.length + 1).join('-') + '^'; + }, + 'mapSymbol': function mapSymbolForCodeGen(t) { + return this.symbolMap[t]; + }, + 'mapReverseSymbol': function (rs) { + var self = this, + symbolMap = self.symbolMap, + i, + reverseSymbolMap = self.reverseSymbolMap; + + if (!reverseSymbolMap && symbolMap) { + reverseSymbolMap = self.reverseSymbolMap = {}; + + for (i in symbolMap) { + reverseSymbolMap[symbolMap[i]] = i; + } + } //#JSCOVERAGE_IF + + + if (reverseSymbolMap) { + return reverseSymbolMap[rs]; + } else { + return rs; + } + }, + 'lex': function () { + var self = this, + input = self.input, + i, + rule, + m, + ret, + lines, + rules = self.getCurrentRules(); + self.match = self.text = ''; + + if (!input) { + return self.mapSymbol(Lexer.STATIC.END_TAG); + } + + for (i = 0; i < rules.length; i++) { + rule = rules[i]; //#JSCOVERAGE_IF 0 + + var regexp = rule.regexp || rule[1], + token = rule.token || rule[0], + action = rule.action || rule[2] || undefined$1; //#JSCOVERAGE_ENDIF + + if (m = input.match(regexp)) { + lines = m[0].match(/\n.*/g); + + if (lines) { + self.lineNumber += lines.length; + } + + mix(self, { + firstLine: self.lastLine, + lastLine: self.lineNumber + 1, + firstColumn: self.lastColumn, + lastColumn: lines ? lines[lines.length - 1].length - 1 : self.lastColumn + m[0].length + }); + var match; // for error report + + match = self.match = m[0]; // all matches + + self.matches = m; // may change by user + + self.text = match; // matched content utils now + + self.matched += match; + ret = action && action.call(self); + + if (ret === undefined$1) { + ret = token; + } else { + ret = self.mapSymbol(ret); + } + + input = input.slice(match.length); + self.input = input; + + if (ret) { + return ret; + } else { + // ignore + return self.lex(); + } + } + } + } + }; + Lexer.STATIC = { + 'INITIAL': 'I', + 'DEBUG_CONTEXT_LIMIT': 20, + 'END_TAG': '$EOF' + }; + var lexer = new Lexer({ + 'rules': [['b', /^\[(?:[\t\r\n\f\x20]*)/, function () { + this.text = this.yy.trim(this.text); + }], ['c', /^(?:[\t\r\n\f\x20]*)\]/, function () { + this.text = this.yy.trim(this.text); + }], ['d', /^(?:[\t\r\n\f\x20]*)~=(?:[\t\r\n\f\x20]*)/, function () { + this.text = this.yy.trim(this.text); + }], ['e', /^(?:[\t\r\n\f\x20]*)\|=(?:[\t\r\n\f\x20]*)/, function () { + this.text = this.yy.trim(this.text); + }], ['f', /^(?:[\t\r\n\f\x20]*)\^=(?:[\t\r\n\f\x20]*)/, function () { + this.text = this.yy.trim(this.text); + }], ['g', /^(?:[\t\r\n\f\x20]*)\$=(?:[\t\r\n\f\x20]*)/, function () { + this.text = this.yy.trim(this.text); + }], ['h', /^(?:[\t\r\n\f\x20]*)\*=(?:[\t\r\n\f\x20]*)/, function () { + this.text = this.yy.trim(this.text); + }], ['i', /^(?:[\t\r\n\f\x20]*)\=(?:[\t\r\n\f\x20]*)/, function () { + this.text = this.yy.trim(this.text); + }], ['j', /^(?:(?:[\w]|[^\x00-\xa0]|(?:\\[^\n\r\f0-9a-f]))(?:[\w\d-]|[^\x00-\xa0]|(?:\\[^\n\r\f0-9a-f]))*)\(/, function () { + this.text = this.yy.trim(this.text).slice(0, -1); + this.pushState('fn'); + }], ['k', /^[^\)]*/, function () { + this.popState(); + }, ['fn']], ['l', /^(?:[\t\r\n\f\x20]*)\)/, function () { + this.text = this.yy.trim(this.text); + }], ['m', /^:not\((?:[\t\r\n\f\x20]*)/i, function () { + this.text = this.yy.trim(this.text); + }], ['n', /^(?:(?:[\w]|[^\x00-\xa0]|(?:\\[^\n\r\f0-9a-f]))(?:[\w\d-]|[^\x00-\xa0]|(?:\\[^\n\r\f0-9a-f]))*)/, function () { + this.text = this.yy.unEscape(this.text); + }], ['o', /^"(\\"|[^"])*"/, function () { + this.text = this.yy.unEscapeStr(this.text); + }], ['o', /^'(\\'|[^'])*'/, function () { + this.text = this.yy.unEscapeStr(this.text); + }], ['p', /^#(?:(?:[\w\d-]|[^\x00-\xa0]|(?:\\[^\n\r\f0-9a-f]))+)/, function () { + this.text = this.yy.unEscape(this.text.slice(1)); + }], ['q', /^\.(?:(?:[\w]|[^\x00-\xa0]|(?:\\[^\n\r\f0-9a-f]))(?:[\w\d-]|[^\x00-\xa0]|(?:\\[^\n\r\f0-9a-f]))*)/, function () { + this.text = this.yy.unEscape(this.text.slice(1)); + }], ['r', /^(?:[\t\r\n\f\x20]*),(?:[\t\r\n\f\x20]*)/, function () { + this.text = this.yy.trim(this.text); + }], ['s', /^::?/, 0], ['t', /^(?:[\t\r\n\f\x20]*)\+(?:[\t\r\n\f\x20]*)/, function () { + this.text = this.yy.trim(this.text); + }], ['u', /^(?:[\t\r\n\f\x20]*)>(?:[\t\r\n\f\x20]*)/, function () { + this.text = this.yy.trim(this.text); + }], ['v', /^(?:[\t\r\n\f\x20]*)~(?:[\t\r\n\f\x20]*)/, function () { + this.text = this.yy.trim(this.text); + }], ['w', /^\*/, 0], ['x', /^(?:[\t\r\n\f\x20]+)/, 0], ['y', /^./, 0]] + }); + parser.lexer = lexer; + lexer.symbolMap = { + '$EOF': 'a', + 'LEFT_BRACKET': 'b', + 'RIGHT_BRACKET': 'c', + 'INCLUDES': 'd', + 'DASH_MATCH': 'e', + 'PREFIX_MATCH': 'f', + 'SUFFIX_MATCH': 'g', + 'SUBSTRING_MATCH': 'h', + 'ALL_MATCH': 'i', + 'FUNCTION': 'j', + 'PARAMETER': 'k', + 'RIGHT_PARENTHESES': 'l', + 'NOT': 'm', + 'IDENT': 'n', + 'STRING': 'o', + 'HASH': 'p', + 'CLASS': 'q', + 'COMMA': 'r', + 'COLON': 's', + 'PLUS': 't', + 'GREATER': 'u', + 'TILDE': 'v', + 'UNIVERSAL': 'w', + 'S': 'x', + 'INVALID': 'y', + '$START': 'z', + 'selectors_group': 'aa', + 'selector': 'ab', + 'simple_selector_sequence': 'ac', + 'combinator': 'ad', + 'type_selector': 'ae', + 'id_selector': 'af', + 'class_selector': 'ag', + 'attrib_match': 'ah', + 'attrib': 'ai', + 'attrib_val': 'aj', + 'pseudo': 'ak', + 'negation': 'al', + 'negation_arg': 'am', + 'suffix_selector': 'an', + 'suffix_selectors': 'ao' + }; + parser.productions = [['z', ['aa']], ['aa', ['ab'], function () { + return [this.$1]; + }], ['aa', ['aa', 'r', 'ab'], function () { + this.$1.push(this.$3); + }], ['ab', ['ac']], ['ab', ['ab', 'ad', 'ac'], function () { + // LinkedList + this.$1.nextCombinator = this.$3.prevCombinator = this.$2; + var order; + order = this.$1.order = this.$1.order || 0; + this.$3.order = order + 1; + this.$3.prev = this.$1; + this.$1.next = this.$3; + return this.$3; + }], ['ad', ['t']], ['ad', ['u']], ['ad', ['v']], ['ad', ['x'], function () { + return ' '; + }], ['ae', ['n'], function () { + return { + t: 'tag', + value: this.$1 + }; + }], ['ae', ['w'], function () { + return { + t: 'tag', + value: this.$1 + }; + }], ['af', ['p'], function () { + return { + t: 'id', + value: this.$1 + }; + }], ['ag', ['q'], function () { + return { + t: 'cls', + value: this.$1 + }; + }], ['ah', ['f']], ['ah', ['g']], ['ah', ['h']], ['ah', ['i']], ['ah', ['d']], ['ah', ['e']], ['ai', ['b', 'n', 'c'], function () { + return { + t: 'attrib', + value: { + ident: this.$2 + } + }; + }], ['aj', ['n']], ['aj', ['o']], ['ai', ['b', 'n', 'ah', 'aj', 'c'], function () { + return { + t: 'attrib', + value: { + ident: this.$2, + match: this.$3, + value: this.$4 + } + }; + }], ['ak', ['s', 'j', 'k', 'l'], function () { + return { + t: 'pseudo', + value: { + fn: this.$2.toLowerCase(), + param: this.$3 + } + }; + }], ['ak', ['s', 'n'], function () { + return { + t: 'pseudo', + value: { + ident: this.$2.toLowerCase() + } + }; + }], ['al', ['m', 'am', 'l'], function () { + return { + t: 'pseudo', + value: { + fn: 'not', + param: this.$2 + } + }; + }], ['am', ['ae']], ['am', ['af']], ['am', ['ag']], ['am', ['ai']], ['am', ['ak']], ['an', ['af']], ['an', ['ag']], ['an', ['ai']], ['an', ['ak']], ['an', ['al']], ['ao', ['an'], function () { + return [this.$1]; + }], ['ao', ['ao', 'an'], function () { + this.$1.push(this.$2); + }], ['ac', ['ae']], ['ac', ['ao'], function () { + return { + suffix: this.$1 + }; + }], ['ac', ['ae', 'ao'], function () { + return { + t: 'tag', + value: this.$1.value, + suffix: this.$2 + }; + }]]; + parser.table = { + 'gotos': { + '0': { + 'aa': 8, + 'ab': 9, + 'ae': 10, + 'af': 11, + 'ag': 12, + 'ai': 13, + 'ak': 14, + 'al': 15, + 'an': 16, + 'ao': 17, + 'ac': 18 + }, + '2': { + 'ae': 20, + 'af': 21, + 'ag': 22, + 'ai': 23, + 'ak': 24, + 'am': 25 + }, + '9': { + 'ad': 33 + }, + '10': { + 'af': 11, + 'ag': 12, + 'ai': 13, + 'ak': 14, + 'al': 15, + 'an': 16, + 'ao': 34 + }, + '17': { + 'af': 11, + 'ag': 12, + 'ai': 13, + 'ak': 14, + 'al': 15, + 'an': 35 + }, + '19': { + 'ah': 43 + }, + '28': { + 'ab': 46, + 'ae': 10, + 'af': 11, + 'ag': 12, + 'ai': 13, + 'ak': 14, + 'al': 15, + 'an': 16, + 'ao': 17, + 'ac': 18 + }, + '33': { + 'ae': 10, + 'af': 11, + 'ag': 12, + 'ai': 13, + 'ak': 14, + 'al': 15, + 'an': 16, + 'ao': 17, + 'ac': 47 + }, + '34': { + 'af': 11, + 'ag': 12, + 'ai': 13, + 'ak': 14, + 'al': 15, + 'an': 35 + }, + '43': { + 'aj': 50 + }, + '46': { + 'ad': 33 + } + }, + 'action': { + '0': { + 'b': [1, undefined$1, 1], + 'm': [1, undefined$1, 2], + 'n': [1, undefined$1, 3], + 'p': [1, undefined$1, 4], + 'q': [1, undefined$1, 5], + 's': [1, undefined$1, 6], + 'w': [1, undefined$1, 7] + }, + '1': { + 'n': [1, undefined$1, 19] + }, + '2': { + 'b': [1, undefined$1, 1], + 'n': [1, undefined$1, 3], + 'p': [1, undefined$1, 4], + 'q': [1, undefined$1, 5], + 's': [1, undefined$1, 6], + 'w': [1, undefined$1, 7] + }, + '3': { + 'a': [2, 9], + 'r': [2, 9], + 't': [2, 9], + 'u': [2, 9], + 'v': [2, 9], + 'x': [2, 9], + 'p': [2, 9], + 'q': [2, 9], + 'b': [2, 9], + 's': [2, 9], + 'm': [2, 9], + 'l': [2, 9] + }, + '4': { + 'a': [2, 11], + 'r': [2, 11], + 't': [2, 11], + 'u': [2, 11], + 'v': [2, 11], + 'x': [2, 11], + 'p': [2, 11], + 'q': [2, 11], + 'b': [2, 11], + 's': [2, 11], + 'm': [2, 11], + 'l': [2, 11] + }, + '5': { + 'a': [2, 12], + 'r': [2, 12], + 't': [2, 12], + 'u': [2, 12], + 'v': [2, 12], + 'x': [2, 12], + 'p': [2, 12], + 'q': [2, 12], + 'b': [2, 12], + 's': [2, 12], + 'm': [2, 12], + 'l': [2, 12] + }, + '6': { + 'j': [1, undefined$1, 26], + 'n': [1, undefined$1, 27] + }, + '7': { + 'a': [2, 10], + 'r': [2, 10], + 't': [2, 10], + 'u': [2, 10], + 'v': [2, 10], + 'x': [2, 10], + 'p': [2, 10], + 'q': [2, 10], + 'b': [2, 10], + 's': [2, 10], + 'm': [2, 10], + 'l': [2, 10] + }, + '8': { + 'a': [0], + 'r': [1, undefined$1, 28] + }, + '9': { + 'a': [2, 1], + 'r': [2, 1], + 't': [1, undefined$1, 29], + 'u': [1, undefined$1, 30], + 'v': [1, undefined$1, 31], + 'x': [1, undefined$1, 32] + }, + '10': { + 'a': [2, 38], + 'r': [2, 38], + 't': [2, 38], + 'u': [2, 38], + 'v': [2, 38], + 'x': [2, 38], + 'b': [1, undefined$1, 1], + 'm': [1, undefined$1, 2], + 'p': [1, undefined$1, 4], + 'q': [1, undefined$1, 5], + 's': [1, undefined$1, 6] + }, + '11': { + 'a': [2, 31], + 'r': [2, 31], + 't': [2, 31], + 'u': [2, 31], + 'v': [2, 31], + 'x': [2, 31], + 'p': [2, 31], + 'q': [2, 31], + 'b': [2, 31], + 's': [2, 31], + 'm': [2, 31] + }, + '12': { + 'a': [2, 32], + 'r': [2, 32], + 't': [2, 32], + 'u': [2, 32], + 'v': [2, 32], + 'x': [2, 32], + 'p': [2, 32], + 'q': [2, 32], + 'b': [2, 32], + 's': [2, 32], + 'm': [2, 32] + }, + '13': { + 'a': [2, 33], + 'r': [2, 33], + 't': [2, 33], + 'u': [2, 33], + 'v': [2, 33], + 'x': [2, 33], + 'p': [2, 33], + 'q': [2, 33], + 'b': [2, 33], + 's': [2, 33], + 'm': [2, 33] + }, + '14': { + 'a': [2, 34], + 'r': [2, 34], + 't': [2, 34], + 'u': [2, 34], + 'v': [2, 34], + 'x': [2, 34], + 'p': [2, 34], + 'q': [2, 34], + 'b': [2, 34], + 's': [2, 34], + 'm': [2, 34] + }, + '15': { + 'a': [2, 35], + 'r': [2, 35], + 't': [2, 35], + 'u': [2, 35], + 'v': [2, 35], + 'x': [2, 35], + 'p': [2, 35], + 'q': [2, 35], + 'b': [2, 35], + 's': [2, 35], + 'm': [2, 35] + }, + '16': { + 'a': [2, 36], + 'r': [2, 36], + 't': [2, 36], + 'u': [2, 36], + 'v': [2, 36], + 'x': [2, 36], + 'p': [2, 36], + 'q': [2, 36], + 'b': [2, 36], + 's': [2, 36], + 'm': [2, 36] + }, + '17': { + 'a': [2, 39], + 'r': [2, 39], + 't': [2, 39], + 'u': [2, 39], + 'v': [2, 39], + 'x': [2, 39], + 'b': [1, undefined$1, 1], + 'm': [1, undefined$1, 2], + 'p': [1, undefined$1, 4], + 'q': [1, undefined$1, 5], + 's': [1, undefined$1, 6] + }, + '18': { + 'a': [2, 3], + 'r': [2, 3], + 't': [2, 3], + 'u': [2, 3], + 'v': [2, 3], + 'x': [2, 3] + }, + '19': { + 'c': [1, undefined$1, 36], + 'd': [1, undefined$1, 37], + 'e': [1, undefined$1, 38], + 'f': [1, undefined$1, 39], + 'g': [1, undefined$1, 40], + 'h': [1, undefined$1, 41], + 'i': [1, undefined$1, 42] + }, + '20': { + 'l': [2, 26] + }, + '21': { + 'l': [2, 27] + }, + '22': { + 'l': [2, 28] + }, + '23': { + 'l': [2, 29] + }, + '24': { + 'l': [2, 30] + }, + '25': { + 'l': [1, undefined$1, 44] + }, + '26': { + 'k': [1, undefined$1, 45] + }, + '27': { + 'a': [2, 24], + 'r': [2, 24], + 't': [2, 24], + 'u': [2, 24], + 'v': [2, 24], + 'x': [2, 24], + 'p': [2, 24], + 'q': [2, 24], + 'b': [2, 24], + 's': [2, 24], + 'm': [2, 24], + 'l': [2, 24] + }, + '28': { + 'b': [1, undefined$1, 1], + 'm': [1, undefined$1, 2], + 'n': [1, undefined$1, 3], + 'p': [1, undefined$1, 4], + 'q': [1, undefined$1, 5], + 's': [1, undefined$1, 6], + 'w': [1, undefined$1, 7] + }, + '29': { + 'n': [2, 5], + 'w': [2, 5], + 'p': [2, 5], + 'q': [2, 5], + 'b': [2, 5], + 's': [2, 5], + 'm': [2, 5] + }, + '30': { + 'n': [2, 6], + 'w': [2, 6], + 'p': [2, 6], + 'q': [2, 6], + 'b': [2, 6], + 's': [2, 6], + 'm': [2, 6] + }, + '31': { + 'n': [2, 7], + 'w': [2, 7], + 'p': [2, 7], + 'q': [2, 7], + 'b': [2, 7], + 's': [2, 7], + 'm': [2, 7] + }, + '32': { + 'n': [2, 8], + 'w': [2, 8], + 'p': [2, 8], + 'q': [2, 8], + 'b': [2, 8], + 's': [2, 8], + 'm': [2, 8] + }, + '33': { + 'b': [1, undefined$1, 1], + 'm': [1, undefined$1, 2], + 'n': [1, undefined$1, 3], + 'p': [1, undefined$1, 4], + 'q': [1, undefined$1, 5], + 's': [1, undefined$1, 6], + 'w': [1, undefined$1, 7] + }, + '34': { + 'a': [2, 40], + 'r': [2, 40], + 't': [2, 40], + 'u': [2, 40], + 'v': [2, 40], + 'x': [2, 40], + 'b': [1, undefined$1, 1], + 'm': [1, undefined$1, 2], + 'p': [1, undefined$1, 4], + 'q': [1, undefined$1, 5], + 's': [1, undefined$1, 6] + }, + '35': { + 'a': [2, 37], + 'r': [2, 37], + 't': [2, 37], + 'u': [2, 37], + 'v': [2, 37], + 'x': [2, 37], + 'p': [2, 37], + 'q': [2, 37], + 'b': [2, 37], + 's': [2, 37], + 'm': [2, 37] + }, + '36': { + 'a': [2, 19], + 'r': [2, 19], + 't': [2, 19], + 'u': [2, 19], + 'v': [2, 19], + 'x': [2, 19], + 'p': [2, 19], + 'q': [2, 19], + 'b': [2, 19], + 's': [2, 19], + 'm': [2, 19], + 'l': [2, 19] + }, + '37': { + 'n': [2, 17], + 'o': [2, 17] + }, + '38': { + 'n': [2, 18], + 'o': [2, 18] + }, + '39': { + 'n': [2, 13], + 'o': [2, 13] + }, + '40': { + 'n': [2, 14], + 'o': [2, 14] + }, + '41': { + 'n': [2, 15], + 'o': [2, 15] + }, + '42': { + 'n': [2, 16], + 'o': [2, 16] + }, + '43': { + 'n': [1, undefined$1, 48], + 'o': [1, undefined$1, 49] + }, + '44': { + 'a': [2, 25], + 'r': [2, 25], + 't': [2, 25], + 'u': [2, 25], + 'v': [2, 25], + 'x': [2, 25], + 'p': [2, 25], + 'q': [2, 25], + 'b': [2, 25], + 's': [2, 25], + 'm': [2, 25] + }, + '45': { + 'l': [1, undefined$1, 51] + }, + '46': { + 'a': [2, 2], + 'r': [2, 2], + 't': [1, undefined$1, 29], + 'u': [1, undefined$1, 30], + 'v': [1, undefined$1, 31], + 'x': [1, undefined$1, 32] + }, + '47': { + 'a': [2, 4], + 'r': [2, 4], + 't': [2, 4], + 'u': [2, 4], + 'v': [2, 4], + 'x': [2, 4] + }, + '48': { + 'c': [2, 20] + }, + '49': { + 'c': [2, 21] + }, + '50': { + 'c': [1, undefined$1, 52] + }, + '51': { + 'a': [2, 23], + 'r': [2, 23], + 't': [2, 23], + 'u': [2, 23], + 'v': [2, 23], + 'x': [2, 23], + 'p': [2, 23], + 'q': [2, 23], + 'b': [2, 23], + 's': [2, 23], + 'm': [2, 23], + 'l': [2, 23] + }, + '52': { + 'a': [2, 22], + 'r': [2, 22], + 't': [2, 22], + 'u': [2, 22], + 'v': [2, 22], + 'x': [2, 22], + 'p': [2, 22], + 'q': [2, 22], + 'b': [2, 22], + 's': [2, 22], + 'm': [2, 22], + 'l': [2, 22] + } + } + }; + + parser.parse = function parse(input, filename) { + var self = this, + lexer = self.lexer, + state, + symbol, + action, + table = self.table, + gotos = table.gotos, + tableAction = table.action, + productions = self.productions, + valueStack = [null], + // for debug info + prefix = filename ? 'in file: ' + filename + ' ' : '', + stack = [0]; + lexer.resetInput(input); + + while (1) { + // retrieve state number from top of stack + state = stack[stack.length - 1]; + + if (!symbol) { + symbol = lexer.lex(); + } + + if (symbol) { + // read action for current state and first input + action = tableAction[state] && tableAction[state][symbol]; + } else { + action = null; + } + + if (!action) { + var expected = [], + error; //#JSCOVERAGE_IF + + if (tableAction[state]) { + for (var symbolForState in tableAction[state]) { + expected.push(self.lexer.mapReverseSymbol(symbolForState)); + } + } + + error = prefix + 'syntax error at line ' + lexer.lineNumber + ':\n' + lexer.showDebugInfo() + '\n' + 'expect ' + expected.join(', '); + throw new Error(error); + } + + switch (action[GrammarConst.TYPE_INDEX]) { + case GrammarConst.SHIFT_TYPE: + stack.push(symbol); + valueStack.push(lexer.text); // push state + + stack.push(action[GrammarConst.TO_INDEX]); // allow to read more + + symbol = null; + break; + + case GrammarConst.REDUCE_TYPE: + var production = productions[action[GrammarConst.PRODUCTION_INDEX]], + reducedSymbol = production.symbol || production[0], + reducedAction = production.action || production[2], + reducedRhs = production.rhs || production[1], + len = reducedRhs.length, + i = 0, + ret, + $$ = valueStack[valueStack.length - len]; // default to $$ = $1 + + ret = undefined$1; + self.$$ = $$; + + for (; i < len; i++) { + self['$' + (len - i)] = valueStack[valueStack.length - 1 - i]; + } + + if (reducedAction) { + ret = reducedAction.call(self); + } + + if (ret !== undefined$1) { + $$ = ret; + } else { + $$ = self.$$; + } + + stack = stack.slice(0, -1 * len * 2); + valueStack = valueStack.slice(0, -1 * len); + stack.push(reducedSymbol); + valueStack.push($$); + var newState = gotos[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + + case GrammarConst.ACCEPT_TYPE: + return $$; + } + } + }; + + return parser; + }(); + + { + module.exports = parser; + } + }(parser$1)); + + /** + * @ignore + * css3 selector engine for ie6-8 + * @author yiminghe@gmail.com + */ + + var util = util$2.exports; + + var parser = parser$1.exports; + + var EXPANDO_SELECTOR_KEY = '_ks_data_selector_id_', + caches = {}, + isContextXML, + uuid = 0, + subMatchesCache = {}, + getAttr = function (el, name) { + if (isContextXML) { + return util.getSimpleAttr(el, name); + } else { + return util.attr(el, name); + } + }, + hasSingleClass = util.hasSingleClass, + isTag = util.isTag, + aNPlusB = /^(([+-]?(?:\d+)?)?n)?([+-]?\d+)?$/; // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + + + var unescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g, + unescapeFn = function (_, escaped) { + var high = '0x' + escaped - 0x10000; // NaN means non-codepoint + + return isNaN(high) ? escaped : // BMP codepoint + high < 0 ? String.fromCharCode(high + 0x10000) : // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00); + }; + + var matchExpr; + var pseudoFnExpr = { + 'nth-child': function (el, param) { + var ab = getAb(param), + a = ab.a, + b = ab.b; + + if (a === 0 && b === 0) { + return 0; + } + + var index = 0, + parent = el.parentNode; + + if (parent) { + var childNodes = parent.childNodes, + count = 0, + child, + ret, + len = childNodes.length; + + for (; count < len; count++) { + child = childNodes[count]; + + if (child.nodeType === 1) { + index++; + ret = matchIndexByAb(index, a, b, child === el); + + if (ret !== undefined) { + return ret; + } + } + } + } + + return 0; + }, + 'nth-last-child': function (el, param) { + var ab = getAb(param), + a = ab.a, + b = ab.b; + + if (a === 0 && b === 0) { + return 0; + } + + var index = 0, + parent = el.parentNode; + + if (parent) { + var childNodes = parent.childNodes, + len = childNodes.length, + count = len - 1, + child, + ret; + + for (; count >= 0; count--) { + child = childNodes[count]; + + if (child.nodeType === 1) { + index++; + ret = matchIndexByAb(index, a, b, child === el); + + if (ret !== undefined) { + return ret; + } + } + } + } + + return 0; + }, + 'nth-of-type': function (el, param) { + var ab = getAb(param), + a = ab.a, + b = ab.b; + + if (a === 0 && b === 0) { + return 0; + } + + var index = 0, + parent = el.parentNode; + + if (parent) { + var childNodes = parent.childNodes, + elType = el.tagName, + count = 0, + child, + ret, + len = childNodes.length; + + for (; count < len; count++) { + child = childNodes[count]; + + if (child.tagName === elType) { + index++; + ret = matchIndexByAb(index, a, b, child === el); + + if (ret !== undefined) { + return ret; + } + } + } + } + + return 0; + }, + 'nth-last-of-type': function (el, param) { + var ab = getAb(param), + a = ab.a, + b = ab.b; + + if (a === 0 && b === 0) { + return 0; + } + + var index = 0, + parent = el.parentNode; + + if (parent) { + var childNodes = parent.childNodes, + len = childNodes.length, + elType = el.tagName, + count = len - 1, + child, + ret; + + for (; count >= 0; count--) { + child = childNodes[count]; + + if (child.tagName === elType) { + index++; + ret = matchIndexByAb(index, a, b, child === el); + + if (ret !== undefined) { + return ret; + } + } + } + } + + return 0; + }, + lang: function (el, lang) { + var elLang; + lang = unEscape(lang.toLowerCase()); + + do { + if (elLang = isContextXML ? el.getAttribute('xml:lang') || el.getAttribute('lang') : el.lang) { + elLang = elLang.toLowerCase(); + return elLang === lang || elLang.indexOf(lang + '-') === 0; + } + } while ((el = el.parentNode) && el.nodeType === 1); + + return false; + }, + not: function (el, negationArg) { + return !matchExpr[negationArg.t](el, negationArg.value); + } + }; + var pseudoIdentExpr = { + empty: function (el) { + var childNodes = el.childNodes, + index = 0, + len = childNodes.length - 1, + child, + nodeType; + + for (; index < len; index++) { + child = childNodes[index]; + nodeType = child.nodeType; // only element nodes and content nodes + // (such as Dom [Dom-LEVEL-3-CORE] text nodes, + // CDATA nodes, and entity references + + if (nodeType === 1 || nodeType === 3 || nodeType === 4 || nodeType === 5) { + return 0; + } + } + + return 1; + }, + root: function (el) { + if (el.nodeType === 9) { + return true; + } + + return el.ownerDocument && el === el.ownerDocument.documentElement; + }, + 'first-child': function (el) { + return pseudoFnExpr['nth-child'](el, 1); + }, + 'last-child': function (el) { + return pseudoFnExpr['nth-last-child'](el, 1); + }, + 'first-of-type': function (el) { + return pseudoFnExpr['nth-of-type'](el, 1); + }, + 'last-of-type': function (el) { + return pseudoFnExpr['nth-last-of-type'](el, 1); + }, + 'only-child': function (el) { + return pseudoIdentExpr['first-child'](el) && pseudoIdentExpr['last-child'](el); + }, + 'only-of-type': function (el) { + return pseudoIdentExpr['first-of-type'](el) && pseudoIdentExpr['last-of-type'](el); + }, + focus: function (el) { + var doc = el.ownerDocument; + return doc && el === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(el.type || el.href || el.tabIndex >= 0); + }, + target: function (el) { + var hash = location.hash; + return hash && hash.slice(1) === getAttr(el, 'id'); + }, + enabled: function (el) { + return !el.disabled; + }, + disabled: function (el) { + return el.disabled; + }, + checked: function (el) { + var nodeName = el.nodeName.toLowerCase(); + return nodeName === 'input' && el.checked || nodeName === 'option' && el.selected; + } + }; + var attributeExpr = { + '~=': function (elValue, value) { + if (!value || value.indexOf(' ') > -1) { + return 0; + } + + return (' ' + elValue + ' ').indexOf(' ' + value + ' ') !== -1; + }, + '|=': function (elValue, value) { + return (' ' + elValue).indexOf(' ' + value + '-') !== -1; + }, + '^=': function (elValue, value) { + return value && util.startsWith(elValue, value); + }, + '$=': function (elValue, value) { + return value && util.endsWith(elValue, value); + }, + '*=': function (elValue, value) { + return value && elValue.indexOf(value) !== -1; + }, + '=': function (elValue, value) { + return elValue === value; + } + }; + var relativeExpr = { + '>': { + dir: 'parentNode', + immediate: 1 + }, + ' ': { + dir: 'parentNode' + }, + '+': { + dir: 'previousSibling', + immediate: 1 + }, + '~': { + dir: 'previousSibling' + } + }; + matchExpr = { + tag: isTag, + cls: hasSingleClass, + id: function (el, value) { + return getAttr(el, 'id') === value; + }, + attrib: function (el, value) { + var name = value.ident; + + if (!isContextXML) { + name = name.toLowerCase(); + } + + var elValue = getAttr(el, name); + var match = value.match; + + if (!match && elValue !== undefined) { + return 1; + } else if (match) { + if (elValue === undefined) { + return 0; + } + + var matchFn = attributeExpr[match]; + + if (matchFn) { + return matchFn(elValue + '', value.value + ''); + } + } + + return 0; + }, + pseudo: function (el, value) { + var fn, fnStr, ident; + + if (fnStr = value.fn) { + if (!(fn = pseudoFnExpr[fnStr])) { + throw new SyntaxError('Syntax error: not support pseudo: ' + fnStr); + } + + return fn(el, value.param); + } + + if (ident = value.ident) { + if (!pseudoIdentExpr[ident]) { + throw new SyntaxError('Syntax error: not support pseudo: ' + ident); + } + + return pseudoIdentExpr[ident](el); + } + + return 0; + } + }; + + function unEscape(str) { + return str.replace(unescape, unescapeFn); + } + + parser.lexer.yy = { + trim: util.trim, + unEscape: unEscape, + unEscapeStr: function (str) { + return this.unEscape(str.slice(1, -1)); + } + }; + + function resetStatus() { + subMatchesCache = {}; + } + + function dir(el, direction) { + do { + el = el[direction]; + } while (el && el.nodeType !== 1); + + return el; + } + + function getAb(param) { + var a = 0, + match, + b = 0; + + if (typeof param === 'number') { + b = param; + } else if (param === 'odd') { + a = 2; + b = 1; + } else if (param === 'even') { + a = 2; + b = 0; + } else if (match = param.replace(/\s/g, '').match(aNPlusB)) { + if (match[1]) { + a = parseInt(match[2], 10); + + if (isNaN(a)) { + if (match[2] === '-') { + a = -1; + } else { + a = 1; + } + } + } else { + a = 0; + } + + b = parseInt(match[3], 10) || 0; + } + + return { + a: a, + b: b + }; + } + + function matchIndexByAb(index, a, b, eq) { + if (a === 0) { + if (index === b) { + return eq; + } + } else { + if ((index - b) / a >= 0 && (index - b) % a === 0 && eq) { + return 1; + } + } + + return undefined; + } + + function isXML(elem) { + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName.toLowerCase() !== 'html' : false; + } + + function matches(str, seeds) { + return select$1(str, null, seeds); + } + + function singleMatch(el, match) { + if (!match) { + return true; + } + + if (!el) { + return false; + } + + if (el.nodeType === 9) { + return false; + } + + var matched = 1, + matchSuffix = match.suffix, + matchSuffixLen, + matchSuffixIndex; + + if (match.t === 'tag') { + matched &= matchExpr.tag(el, match.value); + } + + if (matched && matchSuffix) { + matchSuffixLen = matchSuffix.length; + matchSuffixIndex = 0; + + for (; matched && matchSuffixIndex < matchSuffixLen; matchSuffixIndex++) { + var singleMatchSuffix = matchSuffix[matchSuffixIndex], + singleMatchSuffixType = singleMatchSuffix.t; + + if (matchExpr[singleMatchSuffixType]) { + matched &= matchExpr[singleMatchSuffixType](el, singleMatchSuffix.value); + } + } + } + + return matched; + } // match by adjacent immediate single selector match + + + function matchImmediate(el, match) { + var matched = 1, + startEl = el, + relativeOp, + startMatch = match; + + do { + matched &= singleMatch(el, match); + + if (matched) { + // advance + match = match && match.prev; + + if (!match) { + return true; + } + + relativeOp = relativeExpr[match.nextCombinator]; + el = dir(el, relativeOp.dir); + + if (!relativeOp.immediate) { + return { + // advance for non-immediate + el: el, + match: match + }; + } + } else { + relativeOp = relativeExpr[match.nextCombinator]; + + if (relativeOp.immediate) { + // retreat but advance startEl + return { + el: dir(startEl, relativeExpr[startMatch.nextCombinator].dir), + match: startMatch + }; + } else { + // advance (before immediate match + jump unmatched) + return { + el: el && dir(el, relativeOp.dir), + match: match + }; + } + } + } while (el); // only occur when match immediate + + + return { + el: dir(startEl, relativeExpr[startMatch.nextCombinator].dir), + match: startMatch + }; + } // find fixed part, fixed with seeds + + + function findFixedMatchFromHead(el, head) { + var relativeOp, + cur = head; + + do { + if (!singleMatch(el, cur)) { + return null; + } + + cur = cur.prev; + + if (!cur) { + return true; + } + + relativeOp = relativeExpr[cur.nextCombinator]; + el = dir(el, relativeOp.dir); + } while (el && relativeOp.immediate); + + if (!el) { + return null; + } + + return { + el: el, + match: cur + }; + } + + function genId(el) { + var selectorId; + + if (isContextXML) { + if (!(selectorId = el.getAttribute(EXPANDO_SELECTOR_KEY))) { + el.setAttribute(EXPANDO_SELECTOR_KEY, selectorId = +new Date() + '_' + ++uuid); + } + } else { + if (!(selectorId = el[EXPANDO_SELECTOR_KEY])) { + selectorId = el[EXPANDO_SELECTOR_KEY] = +new Date() + '_' + ++uuid; + } + } + + return selectorId; + } + + function matchSub(el, match) { + var selectorId = genId(el), + matchKey; + matchKey = selectorId + '_' + (match.order || 0); + + if (matchKey in subMatchesCache) { + return subMatchesCache[matchKey]; + } + + subMatchesCache[matchKey] = matchSubInternal(el, match); + return subMatchesCache[matchKey]; + } // recursive match by sub selector string from right to left + // grouped by immediate selectors + + + function matchSubInternal(el, match) { + var matchImmediateRet = matchImmediate(el, match); + + if (matchImmediateRet === true) { + return true; + } else { + el = matchImmediateRet.el; + match = matchImmediateRet.match; + + while (el) { + if (matchSub(el, match)) { + return true; + } + + el = dir(el, relativeExpr[match.nextCombinator].dir); + } + + return false; + } + } + + function select$1(str, context, seeds) { + if (!caches[str]) { + caches[str] = parser.parse(str); + } + + var selector = caches[str], + groupIndex = 0, + groupLen = selector.length, + contextDocument, + group, + ret = []; + + if (seeds) { + context = context || seeds[0].ownerDocument; + } + + contextDocument = context && context.ownerDocument || typeof document !== 'undefined' && document; + + if (context && context.nodeType === 9 && !contextDocument) { + contextDocument = context; + } + + context = context || contextDocument; + isContextXML = isXML(context); + + for (; groupIndex < groupLen; groupIndex++) { + resetStatus(); + group = selector[groupIndex]; + var suffix = group.suffix, + suffixIndex, + suffixLen, + seedsIndex, + mySeeds = seeds, + seedsLen, + id = null; + + if (!mySeeds) { + if (suffix && !isContextXML) { + suffixIndex = 0; + suffixLen = suffix.length; + + for (; suffixIndex < suffixLen; suffixIndex++) { + var singleSuffix = suffix[suffixIndex]; + + if (singleSuffix.t === 'id') { + id = singleSuffix.value; + break; + } + } + } + + if (id) { + // http://yiminghe.github.io/lab/playground/fragment-selector/selector.html + var doesNotHasById = !context.getElementById, + contextInDom = util.contains(contextDocument, context), + tmp = doesNotHasById ? contextInDom ? contextDocument.getElementById(id) : null : context.getElementById(id); // id bug + // https://github.com/kissyteam/kissy/issues/67 + + if (!tmp && doesNotHasById || tmp && getAttr(tmp, 'id') !== id) { + var tmps = util.getElementsByTagName('*', context), + tmpLen = tmps.length, + tmpI = 0; + + for (; tmpI < tmpLen; tmpI++) { + tmp = tmps[tmpI]; + + if (getAttr(tmp, 'id') === id) { + mySeeds = [tmp]; + break; + } + } + + if (tmpI === tmpLen) { + mySeeds = []; + } + } else { + if (contextInDom && tmp && context !== contextDocument) { + tmp = util.contains(context, tmp) ? tmp : null; + } + + mySeeds = tmp ? [tmp] : []; + } + } else { + mySeeds = util.getElementsByTagName(group.value || '*', context); + } + } + + seedsIndex = 0; + seedsLen = mySeeds.length; + + if (!seedsLen) { + continue; + } + + for (; seedsIndex < seedsLen; seedsIndex++) { + var seed = mySeeds[seedsIndex]; + var matchHead = findFixedMatchFromHead(seed, group); + + if (matchHead === true) { + ret.push(seed); + } else if (matchHead) { + if (matchSub(matchHead.el, matchHead.match)) { + ret.push(seed); + } + } + } + } + + if (groupLen > 1) { + ret = util.unique(ret); + } + + return ret; + } + + var querySelector$1 = select$1; + + select$1.parse = function (str) { + return parser.parse(str); + }; + + select$1.matches = matches; + select$1.util = util; + select$1.version = '@VERSION@'; + + var querySelector = querySelector$1; + + var hyphenExpression = /-+([a-z])/gi; + + function upperCaseFirstMatch(match, c, offset) { + if (offset !== 0) { + return c.toUpperCase(); + } else { + return c; + } + } + + function camelCase$2(str) { + var camelCased = str.replace(hyphenExpression, upperCaseFirstMatch); + hyphenExpression.lastIndex = 0; + return camelCased; + } + + var camelCase_1 = camelCase$2; + + function isString$1(value) { + return typeof value === 'string'; + } + + var isString_1 = isString$1; + + function isUndefined$1(value) { + return typeof value === 'undefined'; + } + + var isUndefined_1 = isUndefined$1; + + function assign$1(dest) { + var args = arguments; + var source; + + for (var i = 1; i < args.length; i++) { + source = args[i]; + + for (var key in source) { + dest[key] = source[key]; + } + } + + return dest; + } + + var assign_1 = assign$1; + + function mapValues$2(source, fn) { + var destination = {}; + + for (var key in source) { + if (source.hasOwnProperty(key)) { + destination[key] = fn(source[key]); + } + } + + return destination; + } + + var mapValues_1 = mapValues$2; + + var camelCase$1 = camelCase_1; + + function styleCamelCase$1(name) { + var camel = camelCase$1(name); // Detect if the style property is already camelCased + // To not convert Webkit*, Moz* and O* to lowercase + + if (camel.charAt(0).toUpperCase() === name.charAt(0)) { + return name.charAt(0) + camel.slice(1); + } + + if (name.charAt(0) === '-') { + return camel.indexOf('ms') === 0 ? camel : camel.charAt(0).toUpperCase() + camel.slice(1); + } else { + return camel; + } + } + + var styleCamelCase_1 = styleCamelCase$1; + + var React$2 = require('react'); + + var styleAttr = lib; + + var querySelectorAll = querySelector; + + var camelCase = camelCase_1; + + var isString = isString_1; + + var isUndefined = isUndefined_1; + + var assign = assign_1; + + var mapValues$1 = mapValues_1; + + var styleCamelCase = styleCamelCase_1; + + function element$1() { + function Element(nodeName, parentNode) { + this.nodeName = nodeName; + this.parentNode = parentNode; + this.childNodes = []; + this.eventListeners = {}; + this.text = ''; + var self = this; + var props = this.props = { + ref: function (component) { + self.component = component; + }, + style: { + setProperty: function (name, value) { + props.style[styleCamelCase(name)] = value; + }, + getProperty: function (name) { + return props.style[styleCamelCase(name)] || ''; + }, + getPropertyValue: function (name) { + return props.style.getProperty(name); + }, + removeProperty: function (name) { + delete props.style[styleCamelCase(name)]; + } + } + }; + this.style = props.style; + } + + Element.ELEMENT_NODE = 1; + Element.DOCUMENT_POSITION_DISCONNECTED = 1; + Element.DOCUMENT_POSITION_PRECEDING = 2; + Element.DOCUMENT_POSITION_FOLLOWING = 4; + Element.DOCUMENT_POSITION_CONTAINS = 8; + Element.DOCUMENT_POSITION_CONTAINED_BY = 16; + Element.prototype.nodeType = 1; // This was easy to do with Vim. + // Just saying. + + Element.prototype.eventNameMappings = { + 'blur': 'onBlur', + 'change': 'onChange', + 'click': 'onClick', + 'contextmenu': 'onContextMenu', + 'copy': 'onCopy', + 'cut': 'onCut', + 'doubleclick': 'onDoubleClick', + 'drag': 'onDrag', + 'dragend': 'onDragEnd', + 'dragenter': 'onDragEnter', + 'dragexit': 'onDragExit', + 'dragleave': 'onDragLeave', + 'dragover': 'onDragOver', + 'dragstart': 'onDragStart', + 'drop': 'onDrop', + 'error': 'onError', + 'focus': 'onFocus', + 'input': 'onInput', + 'keydown': 'onKeyDown', + 'keypress': 'onKeyPress', + 'keyup': 'onKeyUp', + 'load': 'onLoad', + 'mousedown': 'onMouseDown', + 'mouseenter': 'onMouseEnter', + 'mouseleave': 'onMouseLeave', + 'mousemove': 'onMouseMove', + 'mouseout': 'onMouseOut', + 'mouseover': 'onMouseOver', + 'mouseup': 'onMouseUp', + 'paste': 'onPaste', + 'scroll': 'onScroll', + 'submit': 'onSubmit', + 'touchcancel': 'onTouchCancel', + 'touchend': 'onTouchEnd', + 'touchmove': 'onTouchMove', + 'touchstart': 'onTouchStart', + 'wheel': 'onWheel' + }; + Element.prototype.skipNameTransformationExpressions = [/^data-/, /^aria-/]; + Element.prototype.attributeNameMappings = { + 'class': 'className' + }; + + Element.prototype.attributeToPropName = function (name) { + var skipTransformMatches = this.skipNameTransformationExpressions.map(function (expr) { + return expr.test(name); + }); + + if (skipTransformMatches.some(Boolean)) { + return name; + } else { + return this.attributeNameMappings[name] || camelCase(name); + } + }; + + Element.prototype.setAttribute = function (name, value) { + if (name === 'style' && isString(value)) { + var styles = styleAttr.parse(value); + + for (var key in styles) { + this.style.setProperty(key, styles[key]); + } + } else { + this.props[this.attributeToPropName(name)] = value; + } + }; + + Element.prototype.getAttribute = function (name) { + return this.props[this.attributeToPropName(name)]; + }; + + Element.prototype.getAttributeNode = function (name) { + var value = this.getAttribute(name); + + if (!isUndefined(value)) { + return { + value: value, + specified: true + }; + } + }; + + Element.prototype.removeAttribute = function (name) { + delete this.props[this.attributeToPropName(name)]; + }; + + Element.prototype.eventToPropName = function (name) { + return this.eventNameMappings[name] || name; + }; + + Element.prototype.addEventListener = function (name, fn) { + var prop = this.eventToPropName(name); + this.eventListeners[prop] = this.eventListeners[prop] || []; + this.eventListeners[prop].push(fn); + }; + + Element.prototype.removeEventListener = function (name, fn) { + var listeners = this.eventListeners[this.eventToPropName(name)]; + + if (listeners) { + var match = listeners.indexOf(fn); + + if (match !== -1) { + listeners.splice(match, 1); + } + } + }; + + Element.prototype.appendChild = function (el) { + if (el instanceof Element) { + el.parentNode = this; + } + + this.childNodes.push(el); + return el; + }; + + Element.prototype.insertBefore = function (el, before) { + var index = this.childNodes.indexOf(before); + el.parentNode = this; + + if (index !== -1) { + this.childNodes.splice(index, 0, el); + } else { + this.childNodes.push(el); + } + + return el; + }; + + Element.prototype.removeChild = function (child) { + var target = this.childNodes.indexOf(child); + this.childNodes.splice(target, 1); + }; + + Element.prototype.querySelector = function () { + return this.querySelectorAll.apply(this, arguments)[0] || null; + }; + + Element.prototype.querySelectorAll = function (selector) { + if (!selector) { + throw new Error('Not enough arguments'); + } + + return querySelectorAll(selector, this); + }; + + Element.prototype.getElementsByTagName = function (nodeName) { + var children = this.children; + + if (children.length === 0) { + return []; + } else { + var matches; + + if (nodeName !== '*') { + matches = children.filter(function (el) { + return el.nodeName === nodeName; + }); + } else { + matches = children; + } + + var childMatches = children.map(function (el) { + return el.getElementsByTagName(nodeName); + }); + return matches.concat.apply(matches, childMatches); + } + }; + + Element.prototype.getElementById = function (id) { + var children = this.children; + + if (children.length === 0) { + return null; + } else { + var match = children.filter(function (el) { + return el.getAttribute('id') === id; + })[0]; + + if (match) { + return match; + } else { + var childMatches = children.map(function (el) { + return el.getElementById(id); + }); + return childMatches.filter(function (match) { + return match !== null; + })[0] || null; + } + } + }; + + Element.prototype.getBoundingClientRect = function () { + if (!this.component) { + return undefined; + } + + return this.component.getBoundingClientRect(); + }; + + Element.prototype.cloneNode = function (deep) { + // if deep is not provided, it default to true + if (deep === undefined) { + deep = true; + } + + var el = new Element(this.nodeName, this.parentNode); // copy nodeType + + if (this.nodeType) { + el.nodeType = this.nodeType; + } + + var k; // copy the props + + for (k in this.props) { + if (this.props.hasOwnProperty(k) && k !== 'ref' && k !== 'style') { + el.props[k] = this.props[k]; + } + } // copy the styles + + + for (k in this.style) { + if (this.style.hasOwnProperty(k) && ['setProperty', 'getProperty', 'getPropertyValue', 'removeProperty'].indexOf(k) === -1) { + el.style[k] = this.style[k]; + } + } + + if (deep) { + el.childNodes = this.childNodes.map(function (childEl) { + if (!childEl.nodeType) { + // It's a React element, let React clone it + return React$2.cloneElement(childEl); + } // either Element or true dom element + + + childEl = childEl.cloneNode(true); // if a faux dom element, modify parentNode + + if (childEl instanceof Element) { + childEl.parentNode = el; + } + + return childEl; + }); + } + + return el; + }; + + Element.prototype.toReact = function (index) { + index = index || 0; + var props = assign({}, this.props); + props.style = assign({}, props.style); + var originalElement = this; + + function uniqueKey() { + return 'faux-dom-' + index; + } + + if (isUndefined(props.key)) { + props.key = uniqueKey(); + } + + delete props.style.setProperty; + delete props.style.getProperty; + delete props.style.getPropertyValue; + delete props.style.removeProperty; + assign(props, mapValues$1(this.eventListeners, function (listeners) { + return function (syntheticEvent) { + var event; + + if (syntheticEvent) { + event = syntheticEvent.nativeEvent; + event.syntheticEvent = syntheticEvent; + } + + mapValues$1(listeners, function (listener) { + listener.call(originalElement, event); + }); + }; + })); + return React$2.createElement(this.nodeName, props, this.text || this.children.map(function (el, i) { + if (el instanceof Element) { + return el.toReact(i); + } else { + return el; + } + })); + }; + + Element.prototype.compareDocumentPosition = function (other) { + function getFirstNodeByOrder(nodes, nodeOne, nodeTwo) { + return nodes.reduce(function (result, node) { + if (result !== false) { + return result; + } else if (node === nodeOne) { + return nodeOne; + } else if (node === nodeTwo) { + return nodeTwo; + } else if (node.childNodes) { + return getFirstNodeByOrder(node.childNodes, nodeOne, nodeTwo); + } else { + return false; + } + }, false); + } + + function isAncestor(source, target) { + while (target.parentNode) { + target = target.parentNode; + + if (target === source) { + return true; + } + } + + return false; + } + + function eitherContains(left, right) { + return isAncestor(left, right) ? Element.DOCUMENT_POSITION_CONTAINED_BY + Element.DOCUMENT_POSITION_FOLLOWING : isAncestor(right, left) ? Element.DOCUMENT_POSITION_CONTAINS + Element.DOCUMENT_POSITION_PRECEDING : false; + } + + function getRootNode(node) { + while (node.parentNode) { + node = node.parentNode; + } + + return node; + } + + if (this === other) { + return 0; + } + + var referenceRoot = getRootNode(this); + var otherRoot = getRootNode(other); + + if (referenceRoot !== otherRoot) { + return Element.DOCUMENT_POSITION_DISCONNECTED; + } + + var result = eitherContains(this, other); + + if (result) { + return result; + } + + var first = getFirstNodeByOrder([referenceRoot], this, other); + return first === this ? Element.DOCUMENT_POSITION_FOLLOWING : first === other ? Element.DOCUMENT_POSITION_PRECEDING : Element.DOCUMENT_POSITION_DISCONNECTED; + }; + + Object.defineProperties(Element.prototype, { + nextSibling: { + get: function () { + var siblings = this.parentNode.children; + var me = siblings.indexOf(this); + return siblings[me + 1]; + } + }, + previousSibling: { + get: function () { + var siblings = this.parentNode.children; + var me = siblings.indexOf(this); + return siblings[me - 1]; + } + }, + innerHTML: { + get: function () { + return this.text; + }, + set: function (text) { + this.text = text; + } + }, + textContent: { + get: function () { + return this.text; + }, + set: function (text) { + this.text = text; + } + }, + children: { + get: function () { + // So far nodes created by this library are all of nodeType 1 (elements), + // but this could change in the future. + return this.childNodes.filter(function (el) { + if (!el.nodeType) { + // It's a React element, we always add it + return true; + } // It's a HTML node. We want to filter to have only nodes with type 1 + + + return el.nodeType === 1; + }); + } + } + }); // These NS methods are called by things like D3 if it spots a namespace. + // Like xlink:href. I don't care about namespaces, so these functions have NS aliases created. + + var namespaceMethods = ['setAttribute', 'getAttribute', 'getAttributeNode', 'removeAttribute', 'getElementsByTagName', 'getElementById']; + namespaceMethods.forEach(function (name) { + var fn = Element.prototype[name]; + + Element.prototype[name + 'NS'] = function () { + return fn.apply(this, Array.prototype.slice.call(arguments, 1)); + }; + }); + return Element; + } + + var _element = element$1; + + function window$2() { + var Window = { + getComputedStyle: function (node) { + return { + getPropertyValue: node.style.getProperty + }; + } + }; + return Window; + } + + var _window = window$2; + + /** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + + var _assign = objectAssign; // -- Inlined from fbjs -- + + + var emptyObject = {}; + + { + Object.freeze(emptyObject); + } + + var validateFormat = function validateFormat(format) {}; + + { + validateFormat = function validateFormat(format) { + if (format === undefined) { + throw new Error('invariant requires an error message argument'); + } + }; + } + + function _invariant(condition, format, a, b, c, d, e, f) { + validateFormat(format); + + if (!condition) { + var error; + + if (format === undefined) { + error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.'); + } else { + var args = [a, b, c, d, e, f]; + var argIndex = 0; + error = new Error(format.replace(/%s/g, function () { + return args[argIndex++]; + })); + error.name = 'Invariant Violation'; + } + + error.framesToPop = 1; // we don't care about invariant's own frame + + throw error; + } + } + + var warning = function () {}; + + { + var printWarning = function printWarning(format) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + var argIndex = 0; + var message = 'Warning: ' + format.replace(/%s/g, function () { + return args[argIndex++]; + }); + + if (typeof console !== 'undefined') { + console.error(message); + } + + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + }; + + warning = function warning(condition, format) { + if (format === undefined) { + throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument'); + } + + if (format.indexOf('Failed Composite propType: ') === 0) { + return; // Ignore CompositeComponent proptype check. + } + + if (!condition) { + for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { + args[_key2 - 2] = arguments[_key2]; + } + + printWarning.apply(undefined, [format].concat(args)); + } + }; + } // /-- Inlined from fbjs -- + + + var MIXINS_KEY = 'mixins'; // Helper function to allow the creation of anonymous functions which do not + // have .name set to the name of the variable being assigned to. + + function identity(fn) { + return fn; + } + + var ReactPropTypeLocationNames; + + { + ReactPropTypeLocationNames = { + prop: 'prop', + context: 'context', + childContext: 'child context' + }; + } + + function factory$3(ReactComponent, isValidElement, ReactNoopUpdateQueue) { + /** + * Policies that describe methods in `ReactClassInterface`. + */ + var injectedMixins = []; + /** + * Composite components are higher-level components that compose other composite + * or host components. + * + * To create a new type of `ReactClass`, pass a specification of + * your new class to `React.createClass`. The only requirement of your class + * specification is that you implement a `render` method. + * + * var MyComponent = React.createClass({ + * render: function() { + * return
Hello World
; + * } + * }); + * + * The class specification supports a specific protocol of methods that have + * special meaning (e.g. `render`). See `ReactClassInterface` for + * more the comprehensive protocol. Any other properties and methods in the + * class specification will be available on the prototype. + * + * @interface ReactClassInterface + * @internal + */ + + var ReactClassInterface = { + /** + * An array of Mixin objects to include when defining your component. + * + * @type {array} + * @optional + */ + mixins: 'DEFINE_MANY', + + /** + * An object containing properties and methods that should be defined on + * the component's constructor instead of its prototype (static methods). + * + * @type {object} + * @optional + */ + statics: 'DEFINE_MANY', + + /** + * Definition of prop types for this component. + * + * @type {object} + * @optional + */ + propTypes: 'DEFINE_MANY', + + /** + * Definition of context types for this component. + * + * @type {object} + * @optional + */ + contextTypes: 'DEFINE_MANY', + + /** + * Definition of context types this component sets for its children. + * + * @type {object} + * @optional + */ + childContextTypes: 'DEFINE_MANY', + // ==== Definition methods ==== + + /** + * Invoked when the component is mounted. Values in the mapping will be set on + * `this.props` if that prop is not specified (i.e. using an `in` check). + * + * This method is invoked before `getInitialState` and therefore cannot rely + * on `this.state` or use `this.setState`. + * + * @return {object} + * @optional + */ + getDefaultProps: 'DEFINE_MANY_MERGED', + + /** + * Invoked once before the component is mounted. The return value will be used + * as the initial value of `this.state`. + * + * getInitialState: function() { + * return { + * isOn: false, + * fooBaz: new BazFoo() + * } + * } + * + * @return {object} + * @optional + */ + getInitialState: 'DEFINE_MANY_MERGED', + + /** + * @return {object} + * @optional + */ + getChildContext: 'DEFINE_MANY_MERGED', + + /** + * Uses props from `this.props` and state from `this.state` to render the + * structure of the component. + * + * No guarantees are made about when or how often this method is invoked, so + * it must not have side effects. + * + * render: function() { + * var name = this.props.name; + * return
Hello, {name}!
; + * } + * + * @return {ReactComponent} + * @required + */ + render: 'DEFINE_ONCE', + // ==== Delegate methods ==== + + /** + * Invoked when the component is initially created and about to be mounted. + * This may have side effects, but any external subscriptions or data created + * by this method must be cleaned up in `componentWillUnmount`. + * + * @optional + */ + componentWillMount: 'DEFINE_MANY', + + /** + * Invoked when the component has been mounted and has a DOM representation. + * However, there is no guarantee that the DOM node is in the document. + * + * Use this as an opportunity to operate on the DOM when the component has + * been mounted (initialized and rendered) for the first time. + * + * @param {DOMElement} rootNode DOM element representing the component. + * @optional + */ + componentDidMount: 'DEFINE_MANY', + + /** + * Invoked before the component receives new props. + * + * Use this as an opportunity to react to a prop transition by updating the + * state using `this.setState`. Current props are accessed via `this.props`. + * + * componentWillReceiveProps: function(nextProps, nextContext) { + * this.setState({ + * likesIncreasing: nextProps.likeCount > this.props.likeCount + * }); + * } + * + * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop + * transition may cause a state change, but the opposite is not true. If you + * need it, you are probably looking for `componentWillUpdate`. + * + * @param {object} nextProps + * @optional + */ + componentWillReceiveProps: 'DEFINE_MANY', + + /** + * Invoked while deciding if the component should be updated as a result of + * receiving new props, state and/or context. + * + * Use this as an opportunity to `return false` when you're certain that the + * transition to the new props/state/context will not require a component + * update. + * + * shouldComponentUpdate: function(nextProps, nextState, nextContext) { + * return !equal(nextProps, this.props) || + * !equal(nextState, this.state) || + * !equal(nextContext, this.context); + * } + * + * @param {object} nextProps + * @param {?object} nextState + * @param {?object} nextContext + * @return {boolean} True if the component should update. + * @optional + */ + shouldComponentUpdate: 'DEFINE_ONCE', + + /** + * Invoked when the component is about to update due to a transition from + * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState` + * and `nextContext`. + * + * Use this as an opportunity to perform preparation before an update occurs. + * + * NOTE: You **cannot** use `this.setState()` in this method. + * + * @param {object} nextProps + * @param {?object} nextState + * @param {?object} nextContext + * @param {ReactReconcileTransaction} transaction + * @optional + */ + componentWillUpdate: 'DEFINE_MANY', + + /** + * Invoked when the component's DOM representation has been updated. + * + * Use this as an opportunity to operate on the DOM when the component has + * been updated. + * + * @param {object} prevProps + * @param {?object} prevState + * @param {?object} prevContext + * @param {DOMElement} rootNode DOM element representing the component. + * @optional + */ + componentDidUpdate: 'DEFINE_MANY', + + /** + * Invoked when the component is about to be removed from its parent and have + * its DOM representation destroyed. + * + * Use this as an opportunity to deallocate any external resources. + * + * NOTE: There is no `componentDidUnmount` since your component will have been + * destroyed by that point. + * + * @optional + */ + componentWillUnmount: 'DEFINE_MANY', + + /** + * Replacement for (deprecated) `componentWillMount`. + * + * @optional + */ + UNSAFE_componentWillMount: 'DEFINE_MANY', + + /** + * Replacement for (deprecated) `componentWillReceiveProps`. + * + * @optional + */ + UNSAFE_componentWillReceiveProps: 'DEFINE_MANY', + + /** + * Replacement for (deprecated) `componentWillUpdate`. + * + * @optional + */ + UNSAFE_componentWillUpdate: 'DEFINE_MANY', + // ==== Advanced methods ==== + + /** + * Updates the component's currently mounted DOM representation. + * + * By default, this implements React's rendering and reconciliation algorithm. + * Sophisticated clients may wish to override this. + * + * @param {ReactReconcileTransaction} transaction + * @internal + * @overridable + */ + updateComponent: 'OVERRIDE_BASE' + }; + /** + * Similar to ReactClassInterface but for static methods. + */ + + var ReactClassStaticInterface = { + /** + * This method is invoked after a component is instantiated and when it + * receives new props. Return an object to update state in response to + * prop changes. Return null to indicate no change to state. + * + * If an object is returned, its keys will be merged into the existing state. + * + * @return {object || null} + * @optional + */ + getDerivedStateFromProps: 'DEFINE_MANY_MERGED' + }; + /** + * Mapping from class specification keys to special processing functions. + * + * Although these are declared like instance properties in the specification + * when defining classes using `React.createClass`, they are actually static + * and are accessible on the constructor instead of the prototype. Despite + * being static, they must be defined outside of the "statics" key under + * which all other static methods are defined. + */ + + var RESERVED_SPEC_KEYS = { + displayName: function (Constructor, displayName) { + Constructor.displayName = displayName; + }, + mixins: function (Constructor, mixins) { + if (mixins) { + for (var i = 0; i < mixins.length; i++) { + mixSpecIntoComponent(Constructor, mixins[i]); + } + } + }, + childContextTypes: function (Constructor, childContextTypes) { + { + validateTypeDef(Constructor, childContextTypes, 'childContext'); + } + + Constructor.childContextTypes = _assign({}, Constructor.childContextTypes, childContextTypes); + }, + contextTypes: function (Constructor, contextTypes) { + { + validateTypeDef(Constructor, contextTypes, 'context'); + } + + Constructor.contextTypes = _assign({}, Constructor.contextTypes, contextTypes); + }, + + /** + * Special case getDefaultProps which should move into statics but requires + * automatic merging. + */ + getDefaultProps: function (Constructor, getDefaultProps) { + if (Constructor.getDefaultProps) { + Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps, getDefaultProps); + } else { + Constructor.getDefaultProps = getDefaultProps; + } + }, + propTypes: function (Constructor, propTypes) { + { + validateTypeDef(Constructor, propTypes, 'prop'); + } + + Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes); + }, + statics: function (Constructor, statics) { + mixStaticSpecIntoComponent(Constructor, statics); + }, + autobind: function () {} + }; + + function validateTypeDef(Constructor, typeDef, location) { + for (var propName in typeDef) { + if (typeDef.hasOwnProperty(propName)) { + // use a warning instead of an _invariant so components + // don't show up in prod but only in __DEV__ + { + warning(typeof typeDef[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', Constructor.displayName || 'ReactClass', ReactPropTypeLocationNames[location], propName); + } + } + } + } + + function validateMethodOverride(isAlreadyDefined, name) { + var specPolicy = ReactClassInterface.hasOwnProperty(name) ? ReactClassInterface[name] : null; // Disallow overriding of base class methods unless explicitly allowed. + + if (ReactClassMixin.hasOwnProperty(name)) { + _invariant(specPolicy === 'OVERRIDE_BASE', 'ReactClassInterface: You are attempting to override ' + '`%s` from your class specification. Ensure that your method names ' + 'do not overlap with React methods.', name); + } // Disallow defining methods more than once unless explicitly allowed. + + + if (isAlreadyDefined) { + _invariant(specPolicy === 'DEFINE_MANY' || specPolicy === 'DEFINE_MANY_MERGED', 'ReactClassInterface: You are attempting to define ' + '`%s` on your component more than once. This conflict may be due ' + 'to a mixin.', name); + } + } + /** + * Mixin helper which handles policy validation and reserved + * specification keys when building React classes. + */ + + + function mixSpecIntoComponent(Constructor, spec) { + if (!spec) { + { + var typeofSpec = typeof spec; + var isMixinValid = typeofSpec === 'object' && spec !== null; + + { + warning(isMixinValid, "%s: You're attempting to include a mixin that is either null " + 'or not an object. Check the mixins included by the component, ' + 'as well as any mixins they include themselves. ' + 'Expected object but got %s.', Constructor.displayName || 'ReactClass', spec === null ? null : typeofSpec); + } + } + + return; + } + + _invariant(typeof spec !== 'function', "ReactClass: You're attempting to " + 'use a component class or function as a mixin. Instead, just use a ' + 'regular object.'); + + _invariant(!isValidElement(spec), "ReactClass: You're attempting to " + 'use a component as a mixin. Instead, just use a regular object.'); + + var proto = Constructor.prototype; + var autoBindPairs = proto.__reactAutoBindPairs; // By handling mixins before any other properties, we ensure the same + // chaining order is applied to methods with DEFINE_MANY policy, whether + // mixins are listed before or after these methods in the spec. + + if (spec.hasOwnProperty(MIXINS_KEY)) { + RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins); + } + + for (var name in spec) { + if (!spec.hasOwnProperty(name)) { + continue; + } + + if (name === MIXINS_KEY) { + // We have already handled mixins in a special case above. + continue; + } + + var property = spec[name]; + var isAlreadyDefined = proto.hasOwnProperty(name); + validateMethodOverride(isAlreadyDefined, name); + + if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) { + RESERVED_SPEC_KEYS[name](Constructor, property); + } else { + // Setup methods on prototype: + // The following member methods should not be automatically bound: + // 1. Expected ReactClass methods (in the "interface"). + // 2. Overridden methods (that were mixed in). + var isReactClassMethod = ReactClassInterface.hasOwnProperty(name); + var isFunction = typeof property === 'function'; + var shouldAutoBind = isFunction && !isReactClassMethod && !isAlreadyDefined && spec.autobind !== false; + + if (shouldAutoBind) { + autoBindPairs.push(name, property); + proto[name] = property; + } else { + if (isAlreadyDefined) { + var specPolicy = ReactClassInterface[name]; // These cases should already be caught by validateMethodOverride. + + _invariant(isReactClassMethod && (specPolicy === 'DEFINE_MANY_MERGED' || specPolicy === 'DEFINE_MANY'), 'ReactClass: Unexpected spec policy %s for key %s ' + 'when mixing in component specs.', specPolicy, name); // For methods which are defined more than once, call the existing + // methods before calling the new property, merging if appropriate. + + + if (specPolicy === 'DEFINE_MANY_MERGED') { + proto[name] = createMergedResultFunction(proto[name], property); + } else if (specPolicy === 'DEFINE_MANY') { + proto[name] = createChainedFunction(proto[name], property); + } + } else { + proto[name] = property; + + { + // Add verbose displayName to the function, which helps when looking + // at profiling tools. + if (typeof property === 'function' && spec.displayName) { + proto[name].displayName = spec.displayName + '_' + name; + } + } + } + } + } + } + } + + function mixStaticSpecIntoComponent(Constructor, statics) { + if (!statics) { + return; + } + + for (var name in statics) { + var property = statics[name]; + + if (!statics.hasOwnProperty(name)) { + continue; + } + + var isReserved = (name in RESERVED_SPEC_KEYS); + + _invariant(!isReserved, 'ReactClass: You are attempting to define a reserved ' + 'property, `%s`, that shouldn\'t be on the "statics" key. Define it ' + 'as an instance property instead; it will still be accessible on the ' + 'constructor.', name); + + var isAlreadyDefined = (name in Constructor); + + if (isAlreadyDefined) { + var specPolicy = ReactClassStaticInterface.hasOwnProperty(name) ? ReactClassStaticInterface[name] : null; + + _invariant(specPolicy === 'DEFINE_MANY_MERGED', 'ReactClass: You are attempting to define ' + '`%s` on your component more than once. This conflict may be ' + 'due to a mixin.', name); + + Constructor[name] = createMergedResultFunction(Constructor[name], property); + return; + } + + Constructor[name] = property; + } + } + /** + * Merge two objects, but throw if both contain the same key. + * + * @param {object} one The first object, which is mutated. + * @param {object} two The second object + * @return {object} one after it has been mutated to contain everything in two. + */ + + + function mergeIntoWithNoDuplicateKeys(one, two) { + _invariant(one && two && typeof one === 'object' && typeof two === 'object', 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.'); + + for (var key in two) { + if (two.hasOwnProperty(key)) { + _invariant(one[key] === undefined, 'mergeIntoWithNoDuplicateKeys(): ' + 'Tried to merge two objects with the same key: `%s`. This conflict ' + 'may be due to a mixin; in particular, this may be caused by two ' + 'getInitialState() or getDefaultProps() methods returning objects ' + 'with clashing keys.', key); + + one[key] = two[key]; + } + } + + return one; + } + /** + * Creates a function that invokes two functions and merges their return values. + * + * @param {function} one Function to invoke first. + * @param {function} two Function to invoke second. + * @return {function} Function that invokes the two argument functions. + * @private + */ + + + function createMergedResultFunction(one, two) { + return function mergedResult() { + var a = one.apply(this, arguments); + var b = two.apply(this, arguments); + + if (a == null) { + return b; + } else if (b == null) { + return a; + } + + var c = {}; + mergeIntoWithNoDuplicateKeys(c, a); + mergeIntoWithNoDuplicateKeys(c, b); + return c; + }; + } + /** + * Creates a function that invokes two functions and ignores their return vales. + * + * @param {function} one Function to invoke first. + * @param {function} two Function to invoke second. + * @return {function} Function that invokes the two argument functions. + * @private + */ + + + function createChainedFunction(one, two) { + return function chainedFunction() { + one.apply(this, arguments); + two.apply(this, arguments); + }; + } + /** + * Binds a method to the component. + * + * @param {object} component Component whose method is going to be bound. + * @param {function} method Method to be bound. + * @return {function} The bound method. + */ + + + function bindAutoBindMethod(component, method) { + var boundMethod = method.bind(component); + + { + boundMethod.__reactBoundContext = component; + boundMethod.__reactBoundMethod = method; + boundMethod.__reactBoundArguments = null; + var componentName = component.constructor.displayName; + var _bind = boundMethod.bind; + + boundMethod.bind = function (newThis) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } // User is trying to bind() an autobound method; we effectively will + // ignore the value of "this" that the user is trying to use, so + // let's warn. + + + if (newThis !== component && newThis !== null) { + { + warning(false, 'bind(): React component methods may only be bound to the ' + 'component instance. See %s', componentName); + } + } else if (!args.length) { + { + warning(false, 'bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See %s', componentName); + } + + return boundMethod; + } + + var reboundMethod = _bind.apply(boundMethod, arguments); + + reboundMethod.__reactBoundContext = component; + reboundMethod.__reactBoundMethod = method; + reboundMethod.__reactBoundArguments = args; + return reboundMethod; + }; + } + + return boundMethod; + } + /** + * Binds all auto-bound methods in a component. + * + * @param {object} component Component whose method is going to be bound. + */ + + + function bindAutoBindMethods(component) { + var pairs = component.__reactAutoBindPairs; + + for (var i = 0; i < pairs.length; i += 2) { + var autoBindKey = pairs[i]; + var method = pairs[i + 1]; + component[autoBindKey] = bindAutoBindMethod(component, method); + } + } + + var IsMountedPreMixin = { + componentDidMount: function () { + this.__isMounted = true; + } + }; + var IsMountedPostMixin = { + componentWillUnmount: function () { + this.__isMounted = false; + } + }; + /** + * Add more to the ReactClass base class. These are all legacy features and + * therefore not already part of the modern ReactComponent. + */ + + var ReactClassMixin = { + /** + * TODO: This will be deprecated because state should always keep a consistent + * type signature and the only use case for this, is to avoid that. + */ + replaceState: function (newState, callback) { + this.updater.enqueueReplaceState(this, newState, callback); + }, + + /** + * Checks whether or not this composite component is mounted. + * @return {boolean} True if mounted, false otherwise. + * @protected + * @final + */ + isMounted: function () { + { + warning(this.__didWarnIsMounted, '%s: isMounted is deprecated. Instead, make sure to clean up ' + 'subscriptions and pending requests in componentWillUnmount to ' + 'prevent memory leaks.', this.constructor && this.constructor.displayName || this.name || 'Component'); + this.__didWarnIsMounted = true; + } + + return !!this.__isMounted; + } + }; + + var ReactClassComponent = function () {}; + + _assign(ReactClassComponent.prototype, ReactComponent.prototype, ReactClassMixin); + /** + * Creates a composite component class given a class specification. + * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass + * + * @param {object} spec Class specification (which must define `render`). + * @return {function} Component constructor function. + * @public + */ + + + function createClass(spec) { + // To keep our warnings more understandable, we'll use a little hack here to + // ensure that Constructor.name !== 'Constructor'. This makes sure we don't + // unnecessarily identify a class without displayName as 'Constructor'. + var Constructor = identity(function (props, context, updater) { + // This constructor gets overridden by mocks. The argument is used + // by mocks to assert on what gets mounted. + { + warning(this instanceof Constructor, 'Something is calling a React component directly. Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory'); + } // Wire up auto-binding + + + if (this.__reactAutoBindPairs.length) { + bindAutoBindMethods(this); + } + + this.props = props; + this.context = context; + this.refs = emptyObject; + this.updater = updater || ReactNoopUpdateQueue; + this.state = null; // ReactClasses doesn't have constructors. Instead, they use the + // getInitialState and componentWillMount methods for initialization. + + var initialState = this.getInitialState ? this.getInitialState() : null; + + { + // We allow auto-mocks to proceed as if they're returning null. + if (initialState === undefined && this.getInitialState._isMockFunction) { + // This is probably bad practice. Consider warning here and + // deprecating this convenience. + initialState = null; + } + } + + _invariant(typeof initialState === 'object' && !Array.isArray(initialState), '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent'); + + this.state = initialState; + }); + Constructor.prototype = new ReactClassComponent(); + Constructor.prototype.constructor = Constructor; + Constructor.prototype.__reactAutoBindPairs = []; + injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor)); + mixSpecIntoComponent(Constructor, IsMountedPreMixin); + mixSpecIntoComponent(Constructor, spec); + mixSpecIntoComponent(Constructor, IsMountedPostMixin); // Initialize the defaultProps property after all mixins have been merged. + + if (Constructor.getDefaultProps) { + Constructor.defaultProps = Constructor.getDefaultProps(); + } + + { + // This is a tag to indicate that the use of these method names is ok, + // since it's used with createClass. If it's not, then it's likely a + // mistake so we'll warn you to use the static property, property + // initializer or constructor respectively. + if (Constructor.getDefaultProps) { + Constructor.getDefaultProps.isReactClassApproved = {}; + } + + if (Constructor.prototype.getInitialState) { + Constructor.prototype.getInitialState.isReactClassApproved = {}; + } + } + + _invariant(Constructor.prototype.render, 'createClass(...): Class specification must implement a `render` method.'); + + { + warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component'); + warning(!Constructor.prototype.componentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', spec.displayName || 'A component'); + warning(!Constructor.prototype.UNSAFE_componentWillRecieveProps, '%s has a method called UNSAFE_componentWillRecieveProps(). ' + 'Did you mean UNSAFE_componentWillReceiveProps()?', spec.displayName || 'A component'); + } // Reduce time spent doing lookups by setting these on the prototype. + + + for (var methodName in ReactClassInterface) { + if (!Constructor.prototype[methodName]) { + Constructor.prototype[methodName] = null; + } + } + + return Constructor; + } + + return createClass; + } + + var factory_1$1 = factory$3; + + /** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + + var React$1 = require('react'); + + var factory$2 = factory_1$1; + + if (typeof React$1 === 'undefined') { + throw Error('create-react-class could not find the React object. If you are using script tags, ' + 'make sure that React is being loaded before create-react-class.'); + } // Hack to grab NoopUpdateQueue from isomorphic React + + + var ReactNoopUpdateQueue = new React$1.Component().updater; + var createReactClass$1 = factory$2(React$1.Component, React$1.isValidElement, ReactNoopUpdateQueue); + + var reactIs = reactIs$1.exports; + /** + * Copyright 2015, Yahoo! Inc. + * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. + */ + + + var REACT_STATICS = { + childContextTypes: true, + contextType: true, + contextTypes: true, + defaultProps: true, + displayName: true, + getDefaultProps: true, + getDerivedStateFromError: true, + getDerivedStateFromProps: true, + mixins: true, + propTypes: true, + type: true + }; + var KNOWN_STATICS = { + name: true, + length: true, + prototype: true, + caller: true, + callee: true, + arguments: true, + arity: true + }; + var FORWARD_REF_STATICS = { + '$$typeof': true, + render: true, + defaultProps: true, + displayName: true, + propTypes: true + }; + var MEMO_STATICS = { + '$$typeof': true, + compare: true, + defaultProps: true, + displayName: true, + propTypes: true, + type: true + }; + var TYPE_STATICS = {}; + TYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS; + TYPE_STATICS[reactIs.Memo] = MEMO_STATICS; + + function getStatics(component) { + // React v16.11 and below + if (reactIs.isMemo(component)) { + return MEMO_STATICS; + } // React v16.12 and above + + + return TYPE_STATICS[component['$$typeof']] || REACT_STATICS; + } + + var defineProperty = Object.defineProperty; + var getOwnPropertyNames = Object.getOwnPropertyNames; + var getOwnPropertySymbols = Object.getOwnPropertySymbols; + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var getPrototypeOf = Object.getPrototypeOf; + var objectPrototype = Object.prototype; + + function hoistNonReactStatics$1(targetComponent, sourceComponent, blacklist) { + if (typeof sourceComponent !== 'string') { + // don't hoist over string (html) components + if (objectPrototype) { + var inheritedComponent = getPrototypeOf(sourceComponent); + + if (inheritedComponent && inheritedComponent !== objectPrototype) { + hoistNonReactStatics$1(targetComponent, inheritedComponent, blacklist); + } + } + + var keys = getOwnPropertyNames(sourceComponent); + + if (getOwnPropertySymbols) { + keys = keys.concat(getOwnPropertySymbols(sourceComponent)); + } + + var targetStatics = getStatics(targetComponent); + var sourceStatics = getStatics(sourceComponent); + + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + + if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) { + var descriptor = getOwnPropertyDescriptor(sourceComponent, key); + + try { + // Avoid failures from read-only properties + defineProperty(targetComponent, key, descriptor); + } catch (e) {} + } + } + } + + return targetComponent; + } + + var hoistNonReactStatics_cjs = hoistNonReactStatics$1; + + var React = require('react'); + + var createReactClass = createReactClass$1; + + var mapValues = mapValues_1; + + var hoistNonReactStatics = hoistNonReactStatics_cjs; + + function withFauxDOMFactory(Element) { + function withFauxDOM(WrappedComponent) { + var WithFauxDOM = createReactClass({ + componentWillMount: function () { + this.connectedFauxDOM = {}; + this.animateFauxDOMUntil = 0; + }, + componentWillUnmount: function () { + this.stopAnimatingFauxDOM(); + this.stopDrawFauxDOM(); + }, + connectFauxDOM: function (node, name, discardNode) { + if (!this.connectedFauxDOM[name] || discardNode) { + this.connectedFauxDOM[name] = typeof node !== 'string' ? node : new Element(node); + this.drawFauxDOMTimeout = setTimeout(this.drawFauxDOM); + } + + return this.connectedFauxDOM[name]; + }, + drawFauxDOM: function () { + var virtualDOM = mapValues(this.connectedFauxDOM, function (n) { + return n.toReact(); + }); + this.setState(virtualDOM); + }, + animateFauxDOM: function (duration) { + this.animateFauxDOMUntil = Math.max(Date.now() + duration, this.animateFauxDOMUntil); + + if (!this.fauxDOMAnimationInterval) { + this.fauxDOMAnimationInterval = setInterval(function () { + if (Date.now() < this.animateFauxDOMUntil) { + this.drawFauxDOM(); + } else { + this.stopAnimatingFauxDOM(); + } + }.bind(this), 16); + } + }, + stopAnimatingFauxDOM: function () { + this.fauxDOMAnimationInterval = clearInterval(this.fauxDOMAnimationInterval); + this.animateFauxDOMUntil = 0; + }, + stopDrawFauxDOM: function () { + this.drawFauxDOMTimeout = clearTimeout(this.drawFauxDOMTimeout); + }, + isAnimatingFauxDOM: function () { + return !!this.fauxDOMAnimationInterval; + }, + render: function () { + var props = Object.assign({}, this.props, this.state, { + connectFauxDOM: this.connectFauxDOM, + drawFauxDOM: this.drawFauxDOM, + animateFauxDOM: this.animateFauxDOM, + stopAnimatingFauxDOM: this.stopAnimatingFauxDOM, + isAnimatingFauxDOM: this.isAnimatingFauxDOM + }); + return React.createElement(WrappedComponent, props); + } + }); + WithFauxDOM.displayName = 'WithFauxDOM(' + getDisplayName(WrappedComponent) + ')'; + hoistNonReactStatics(WithFauxDOM, WrappedComponent); + return WithFauxDOM; + } + + return withFauxDOM; + } + + function getDisplayName(WrappedComponent) { + return WrappedComponent.displayName || WrappedComponent.name || 'Component'; + } + + var _withFauxDOM = withFauxDOMFactory; + + var element = _element; + + var window$1 = _window; + + var withFauxDOM = _withFauxDOM; + + function factory$1() { + var Element = element(); + var Window = window$1(); + var ReactFauxDOM = { + Element: Element, + defaultView: Window, + withFauxDOM: withFauxDOM(Element), + createElement: function (nodeName) { + return new Element(nodeName); + }, + createElementNS: function (namespace, nodeName) { + return this.createElement(nodeName); + }, + compareDocumentPosition: function () { + // The selector engine tries to validate with this, but we don't care. + // 8 = DOCUMENT_POSITION_CONTAINS, so we say all nodes are in this document. + return 8; + } + }; + Element.prototype.ownerDocument = ReactFauxDOM; + return ReactFauxDOM; + } + + var factory_1 = factory$1; + + var factory = factory_1; + + var ReactFauxDOM = factory(); + + var noop = { + value: function () {} + }; + + function dispatch$1() { + for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) { + if (!(t = arguments[i] + "") || t in _ || /[\s.]/.test(t)) throw new Error("illegal type: " + t); + _[t] = []; + } + + return new Dispatch(_); + } + + function Dispatch(_) { + this._ = _; + } + + function parseTypenames$1(typenames, types) { + return typenames.trim().split(/^|\s+/).map(function (t) { + var name = "", + i = t.indexOf("."); + if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); + if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t); + return { + type: t, + name: name + }; + }); + } + + Dispatch.prototype = dispatch$1.prototype = { + constructor: Dispatch, + on: function (typename, callback) { + var _ = this._, + T = parseTypenames$1(typename + "", _), + t, + i = -1, + n = T.length; // If no callback was specified, return the callback of the given type and name. + + if (arguments.length < 2) { + while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t; + + return; + } // If a type was specified, set the callback for the given type and name. + // Otherwise, if a null callback was specified, remove callbacks of the given name. + + + if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback); + + while (++i < n) { + if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null); + } + + return this; + }, + copy: function () { + var copy = {}, + _ = this._; + + for (var t in _) copy[t] = _[t].slice(); + + return new Dispatch(copy); + }, + call: function (type, that) { + if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2]; + if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); + + for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); + }, + apply: function (type, that, args) { + if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); + + for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); + } + }; + + function get(type, name) { + for (var i = 0, n = type.length, c; i < n; ++i) { + if ((c = type[i]).name === name) { + return c.value; + } + } + } + + function set(type, name, callback) { + for (var i = 0, n = type.length; i < n; ++i) { + if (type[i].name === name) { + type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1)); + break; + } + } + + if (callback != null) type.push({ + name: name, + value: callback + }); + return type; + } + + var src = /*#__PURE__*/Object.freeze({ + __proto__: null, + dispatch: dispatch$1 + }); + + // Word cloud layout by Jason Davies, https://www.jasondavies.com/wordcloud/ + // Algorithm due to Jonathan Feinberg, http://static.mrfeinberg.com/bv_ch03.pdf + var dispatch = src.dispatch; + + var cloudRadians = Math.PI / 180, + cw = 1 << 11 >> 5, + ch = 1 << 11; + + var d3Cloud = function () { + var size = [256, 256], + text = cloudText, + font = cloudFont, + fontSize = cloudFontSize, + fontStyle = cloudFontNormal, + fontWeight = cloudFontNormal, + rotate = cloudRotate, + padding = cloudPadding, + spiral = archimedeanSpiral, + words = [], + timeInterval = Infinity, + event = dispatch("word", "end"), + timer = null, + random = Math.random, + cloud = {}, + canvas = cloudCanvas; + + cloud.canvas = function (_) { + return arguments.length ? (canvas = functor(_), cloud) : canvas; + }; + + cloud.start = function () { + var contextAndRatio = getContext(canvas()), + board = zeroArray((size[0] >> 5) * size[1]), + bounds = null, + n = words.length, + i = -1, + tags = [], + data = words.map(function (d, i) { + d.text = text.call(this, d, i); + d.font = font.call(this, d, i); + d.style = fontStyle.call(this, d, i); + d.weight = fontWeight.call(this, d, i); + d.rotate = rotate.call(this, d, i); + d.size = ~~fontSize.call(this, d, i); + d.padding = padding.call(this, d, i); + return d; + }).sort(function (a, b) { + return b.size - a.size; + }); + if (timer) clearInterval(timer); + timer = setInterval(step, 0); + step(); + return cloud; + + function step() { + var start = Date.now(); + + while (Date.now() - start < timeInterval && ++i < n && timer) { + var d = data[i]; + d.x = size[0] * (random() + .5) >> 1; + d.y = size[1] * (random() + .5) >> 1; + cloudSprite(contextAndRatio, d, data, i); + + if (d.hasText && place(board, d, bounds)) { + tags.push(d); + event.call("word", cloud, d); + if (bounds) cloudBounds(bounds, d);else bounds = [{ + x: d.x + d.x0, + y: d.y + d.y0 + }, { + x: d.x + d.x1, + y: d.y + d.y1 + }]; // Temporary hack + + d.x -= size[0] >> 1; + d.y -= size[1] >> 1; + } + } + + if (i >= n) { + cloud.stop(); + event.call("end", cloud, tags, bounds); + } + } + }; + + cloud.stop = function () { + if (timer) { + clearInterval(timer); + timer = null; + } + + return cloud; + }; + + function getContext(canvas) { + canvas.width = canvas.height = 1; + var ratio = Math.sqrt(canvas.getContext("2d").getImageData(0, 0, 1, 1).data.length >> 2); + canvas.width = (cw << 5) / ratio; + canvas.height = ch / ratio; + var context = canvas.getContext("2d"); + context.fillStyle = context.strokeStyle = "red"; + context.textAlign = "center"; + return { + context: context, + ratio: ratio + }; + } + + function place(board, tag, bounds) { + [{ + x: 0, + y: 0 + }, { + x: size[0], + y: size[1] + }]; + var startX = tag.x, + startY = tag.y, + maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]), + s = spiral(size), + dt = random() < .5 ? 1 : -1, + t = -dt, + dxdy, + dx, + dy; + + while (dxdy = s(t += dt)) { + dx = ~~dxdy[0]; + dy = ~~dxdy[1]; + if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break; + tag.x = startX + dx; + tag.y = startY + dy; + if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue; // TODO only check for collisions within current bounds. + + if (!bounds || !cloudCollide(tag, board, size[0])) { + if (!bounds || collideRects(tag, bounds)) { + var sprite = tag.sprite, + w = tag.width >> 5, + sw = size[0] >> 5, + lx = tag.x - (w << 4), + sx = lx & 0x7f, + msx = 32 - sx, + h = tag.y1 - tag.y0, + x = (tag.y + tag.y0) * sw + (lx >> 5), + last; + + for (var j = 0; j < h; j++) { + last = 0; + + for (var i = 0; i <= w; i++) { + board[x + i] |= last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0); + } + + x += sw; + } + + delete tag.sprite; + return true; + } + } + } + + return false; + } + + cloud.timeInterval = function (_) { + return arguments.length ? (timeInterval = _ == null ? Infinity : _, cloud) : timeInterval; + }; + + cloud.words = function (_) { + return arguments.length ? (words = _, cloud) : words; + }; + + cloud.size = function (_) { + return arguments.length ? (size = [+_[0], +_[1]], cloud) : size; + }; + + cloud.font = function (_) { + return arguments.length ? (font = functor(_), cloud) : font; + }; + + cloud.fontStyle = function (_) { + return arguments.length ? (fontStyle = functor(_), cloud) : fontStyle; + }; + + cloud.fontWeight = function (_) { + return arguments.length ? (fontWeight = functor(_), cloud) : fontWeight; + }; + + cloud.rotate = function (_) { + return arguments.length ? (rotate = functor(_), cloud) : rotate; + }; + + cloud.text = function (_) { + return arguments.length ? (text = functor(_), cloud) : text; + }; + + cloud.spiral = function (_) { + return arguments.length ? (spiral = spirals[_] || _, cloud) : spiral; + }; + + cloud.fontSize = function (_) { + return arguments.length ? (fontSize = functor(_), cloud) : fontSize; + }; + + cloud.padding = function (_) { + return arguments.length ? (padding = functor(_), cloud) : padding; + }; + + cloud.random = function (_) { + return arguments.length ? (random = _, cloud) : random; + }; + + cloud.on = function () { + var value = event.on.apply(event, arguments); + return value === event ? cloud : value; + }; + + return cloud; + }; + + function cloudText(d) { + return d.text; + } + + function cloudFont() { + return "serif"; + } + + function cloudFontNormal() { + return "normal"; + } + + function cloudFontSize(d) { + return Math.sqrt(d.value); + } + + function cloudRotate() { + return (~~(Math.random() * 6) - 3) * 30; + } + + function cloudPadding() { + return 1; + } // Fetches a monochrome sprite bitmap for the specified text. + // Load in batches for speed. + + + function cloudSprite(contextAndRatio, d, data, di) { + if (d.sprite) return; + var c = contextAndRatio.context, + ratio = contextAndRatio.ratio; + c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio); + var x = 0, + y = 0, + maxh = 0, + n = data.length; + --di; + + while (++di < n) { + d = data[di]; + c.save(); + c.font = d.style + " " + d.weight + " " + ~~((d.size + 1) / ratio) + "px " + d.font; + var w = c.measureText(d.text + "m").width * ratio, + h = d.size << 1; + + if (d.rotate) { + var sr = Math.sin(d.rotate * cloudRadians), + cr = Math.cos(d.rotate * cloudRadians), + wcr = w * cr, + wsr = w * sr, + hcr = h * cr, + hsr = h * sr; + w = Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f >> 5 << 5; + h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr)); + } else { + w = w + 0x1f >> 5 << 5; + } + + if (h > maxh) maxh = h; + + if (x + w >= cw << 5) { + x = 0; + y += maxh; + maxh = 0; + } + + if (y + h >= ch) break; + c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio); + if (d.rotate) c.rotate(d.rotate * cloudRadians); + c.fillText(d.text, 0, 0); + if (d.padding) c.lineWidth = 2 * d.padding, c.strokeText(d.text, 0, 0); + c.restore(); + d.width = w; + d.height = h; + d.xoff = x; + d.yoff = y; + d.x1 = w >> 1; + d.y1 = h >> 1; + d.x0 = -d.x1; + d.y0 = -d.y1; + d.hasText = true; + x += w; + } + + var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data, + sprite = []; + + while (--di >= 0) { + d = data[di]; + if (!d.hasText) continue; + var w = d.width, + w32 = w >> 5, + h = d.y1 - d.y0; // Zero the buffer + + for (var i = 0; i < h * w32; i++) sprite[i] = 0; + + x = d.xoff; + if (x == null) return; + y = d.yoff; + var seen = 0, + seenRow = -1; + + for (var j = 0; j < h; j++) { + for (var i = 0; i < w; i++) { + var k = w32 * j + (i >> 5), + m = pixels[(y + j) * (cw << 5) + (x + i) << 2] ? 1 << 31 - i % 32 : 0; + sprite[k] |= m; + seen |= m; + } + + if (seen) seenRow = j;else { + d.y0++; + h--; + j--; + y++; + } + } + + d.y1 = d.y0 + seenRow; + d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32); + } + } // Use mask-based collision detection. + + + function cloudCollide(tag, board, sw) { + sw >>= 5; + var sprite = tag.sprite, + w = tag.width >> 5, + lx = tag.x - (w << 4), + sx = lx & 0x7f, + msx = 32 - sx, + h = tag.y1 - tag.y0, + x = (tag.y + tag.y0) * sw + (lx >> 5), + last; + + for (var j = 0; j < h; j++) { + last = 0; + + for (var i = 0; i <= w; i++) { + if ((last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) & board[x + i]) return true; + } + + x += sw; + } + + return false; + } + + function cloudBounds(bounds, d) { + var b0 = bounds[0], + b1 = bounds[1]; + if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0; + if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0; + if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1; + if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1; + } + + function collideRects(a, b) { + return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y; + } + + function archimedeanSpiral(size) { + var e = size[0] / size[1]; + return function (t) { + return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)]; + }; + } + + function rectangularSpiral(size) { + var dy = 4, + dx = dy * size[0] / size[1], + x = 0, + y = 0; + return function (t) { + var sign = t < 0 ? -1 : 1; // See triangular numbers: T_n = n * (n + 1) / 2. + + switch (Math.sqrt(1 + 4 * sign * t) - sign & 3) { + case 0: + x += dx; + break; + + case 1: + y += dy; + break; + + case 2: + x -= dx; + break; + + default: + y -= dy; + break; + } + + return [x, y]; + }; + } // TODO reuse arrays? + + + function zeroArray(n) { + var a = [], + i = -1; + + while (++i < n) a[i] = 0; + + return a; + } + + function cloudCanvas() { + return document.createElement("canvas"); + } + + function functor(d) { + return typeof d === "function" ? d : function () { + return d; + }; + } + + var spirals = { + archimedean: archimedeanSpiral, + rectangular: rectangularSpiral + }; + + /* global Map:readonly, Set:readonly, ArrayBuffer:readonly */ + + var hasElementType = typeof Element !== 'undefined'; + var hasMap = typeof Map === 'function'; + var hasSet = typeof Set === 'function'; + var hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView; // Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js + + function equal(a, b) { + // START: fast-deep-equal es6/index.js 3.1.1 + if (a === b) return true; + + if (a && b && typeof a == 'object' && typeof b == 'object') { + if (a.constructor !== b.constructor) return false; + var length, i, keys; + + if (Array.isArray(a)) { + length = a.length; + if (length != b.length) return false; + + for (i = length; i-- !== 0;) if (!equal(a[i], b[i])) return false; + + return true; + } // START: Modifications: + // 1. Extra `has &&` helpers in initial condition allow es6 code + // to co-exist with es5. + // 2. Replace `for of` with es5 compliant iteration using `for`. + // Basically, take: + // + // ```js + // for (i of a.entries()) + // if (!b.has(i[0])) return false; + // ``` + // + // ... and convert to: + // + // ```js + // it = a.entries(); + // while (!(i = it.next()).done) + // if (!b.has(i.value[0])) return false; + // ``` + // + // **Note**: `i` access switches to `i.value`. + + + var it; + + if (hasMap && a instanceof Map && b instanceof Map) { + if (a.size !== b.size) return false; + it = a.entries(); + + while (!(i = it.next()).done) if (!b.has(i.value[0])) return false; + + it = a.entries(); + + while (!(i = it.next()).done) if (!equal(i.value[1], b.get(i.value[0]))) return false; + + return true; + } + + if (hasSet && a instanceof Set && b instanceof Set) { + if (a.size !== b.size) return false; + it = a.entries(); + + while (!(i = it.next()).done) if (!b.has(i.value[0])) return false; + + return true; + } // END: Modifications + + + if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) { + length = a.length; + if (length != b.length) return false; + + for (i = length; i-- !== 0;) if (a[i] !== b[i]) return false; + + return true; + } + + if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags; + if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf(); + if (a.toString !== Object.prototype.toString) return a.toString() === b.toString(); + keys = Object.keys(a); + length = keys.length; + if (length !== Object.keys(b).length) return false; + + for (i = length; i-- !== 0;) if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false; // END: fast-deep-equal + // START: react-fast-compare + // custom handling for DOM elements + + + if (hasElementType && a instanceof Element) return false; // custom handling for React/Preact + + for (i = length; i-- !== 0;) { + if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) { + // React-specific: avoid traversing React elements' _owner + // Preact-specific: avoid traversing Preact elements' __v and __o + // __v = $_original / $_vnode + // __o = $_owner + // These properties contain circular references and are not needed when + // comparing the actual elements (and not their owners) + // .$$typeof and ._store on just reasonable markers of elements + continue; + } // all other properties should be traversed as usual + + + if (!equal(a[keys[i]], b[keys[i]])) return false; + } // END: react-fast-compare + // START: fast-deep-equal + + + return true; + } + + return a !== a && b !== b; + } // end fast-deep-equal + + + var reactFastCompare = function isEqual(a, b) { + try { + return equal(a, b); + } catch (error) { + if ((error.message || '').match(/stack|recursion/i)) { + // warn on circular references, don't crash + // browsers give this different errors name and messages: + // chrome/safari: "RangeError", "Maximum call stack size exceeded" + // firefox: "InternalError", too much recursion" + // edge: "Error", "Out of stack space" + console.warn('react-fast-compare cannot handle circular refs'); + return false; + } // some other error. we should definitely know about these + + + throw error; + } + }; + + var xhtml = "http://www.w3.org/1999/xhtml"; + var namespaces = { + svg: "http://www.w3.org/2000/svg", + xhtml: xhtml, + xlink: "http://www.w3.org/1999/xlink", + xml: "http://www.w3.org/XML/1998/namespace", + xmlns: "http://www.w3.org/2000/xmlns/" + }; + + function namespace (name) { + var prefix = name += "", + i = prefix.indexOf(":"); + if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1); + return namespaces.hasOwnProperty(prefix) ? { + space: namespaces[prefix], + local: name + } : name; // eslint-disable-line no-prototype-builtins + } + + function creatorInherit(name) { + return function () { + var document = this.ownerDocument, + uri = this.namespaceURI; + return uri === xhtml && document.documentElement.namespaceURI === xhtml ? document.createElement(name) : document.createElementNS(uri, name); + }; + } + + function creatorFixed(fullname) { + return function () { + return this.ownerDocument.createElementNS(fullname.space, fullname.local); + }; + } + + function creator (name) { + var fullname = namespace(name); + return (fullname.local ? creatorFixed : creatorInherit)(fullname); + } + + function none() {} + + function selector (selector) { + return selector == null ? none : function () { + return this.querySelector(selector); + }; + } + + function selection_select (select) { + if (typeof select !== "function") select = selector(select); + + for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { + if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { + if ("__data__" in node) subnode.__data__ = node.__data__; + subgroup[i] = subnode; + } + } + } + + return new Selection(subgroups, this._parents); + } + + function array (x) { + return typeof x === "object" && "length" in x ? x // Array, TypedArray, NodeList, array-like + : Array.from(x); // Map, Set, iterable, string, or anything else + } + + function empty() { + return []; + } + + function selectorAll (selector) { + return selector == null ? empty : function () { + return this.querySelectorAll(selector); + }; + } + + function arrayAll(select) { + return function () { + var group = select.apply(this, arguments); + return group == null ? [] : array(group); + }; + } + + function selection_selectAll (select) { + if (typeof select === "function") select = arrayAll(select);else select = selectorAll(select); + + for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { + if (node = group[i]) { + subgroups.push(select.call(node, node.__data__, i, group)); + parents.push(node); + } + } + } + + return new Selection(subgroups, parents); + } + + function matcher (selector) { + return function () { + return this.matches(selector); + }; + } + function childMatcher(selector) { + return function (node) { + return node.matches(selector); + }; + } + + var find = Array.prototype.find; + + function childFind(match) { + return function () { + return find.call(this.children, match); + }; + } + + function childFirst() { + return this.firstElementChild; + } + + function selection_selectChild (match) { + return this.select(match == null ? childFirst : childFind(typeof match === "function" ? match : childMatcher(match))); + } + + var filter = Array.prototype.filter; + + function children() { + return this.children; + } + + function childrenFilter(match) { + return function () { + return filter.call(this.children, match); + }; + } + + function selection_selectChildren (match) { + return this.selectAll(match == null ? children : childrenFilter(typeof match === "function" ? match : childMatcher(match))); + } + + function selection_filter (match) { + if (typeof match !== "function") match = matcher(match); + + for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { + if ((node = group[i]) && match.call(node, node.__data__, i, group)) { + subgroup.push(node); + } + } + } + + return new Selection(subgroups, this._parents); + } + + function sparse (update) { + return new Array(update.length); + } + + function selection_enter () { + return new Selection(this._enter || this._groups.map(sparse), this._parents); + } + function EnterNode(parent, datum) { + this.ownerDocument = parent.ownerDocument; + this.namespaceURI = parent.namespaceURI; + this._next = null; + this._parent = parent; + this.__data__ = datum; + } + EnterNode.prototype = { + constructor: EnterNode, + appendChild: function (child) { + return this._parent.insertBefore(child, this._next); + }, + insertBefore: function (child, next) { + return this._parent.insertBefore(child, next); + }, + querySelector: function (selector) { + return this._parent.querySelector(selector); + }, + querySelectorAll: function (selector) { + return this._parent.querySelectorAll(selector); + } + }; + + function constant (x) { + return function () { + return x; + }; + } + + function bindIndex(parent, group, enter, update, exit, data) { + var i = 0, + node, + groupLength = group.length, + dataLength = data.length; // Put any non-null nodes that fit into update. + // Put any null nodes into enter. + // Put any remaining data into enter. + + for (; i < dataLength; ++i) { + if (node = group[i]) { + node.__data__ = data[i]; + update[i] = node; + } else { + enter[i] = new EnterNode(parent, data[i]); + } + } // Put any non-null nodes that don’t fit into exit. + + + for (; i < groupLength; ++i) { + if (node = group[i]) { + exit[i] = node; + } + } + } + + function bindKey(parent, group, enter, update, exit, data, key) { + var i, + node, + nodeByKeyValue = new Map(), + groupLength = group.length, + dataLength = data.length, + keyValues = new Array(groupLength), + keyValue; // Compute the key for each node. + // If multiple nodes have the same key, the duplicates are added to exit. + + for (i = 0; i < groupLength; ++i) { + if (node = group[i]) { + keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + ""; + + if (nodeByKeyValue.has(keyValue)) { + exit[i] = node; + } else { + nodeByKeyValue.set(keyValue, node); + } + } + } // Compute the key for each datum. + // If there a node associated with this key, join and add it to update. + // If there is not (or the key is a duplicate), add it to enter. + + + for (i = 0; i < dataLength; ++i) { + keyValue = key.call(parent, data[i], i, data) + ""; + + if (node = nodeByKeyValue.get(keyValue)) { + update[i] = node; + node.__data__ = data[i]; + nodeByKeyValue.delete(keyValue); + } else { + enter[i] = new EnterNode(parent, data[i]); + } + } // Add any remaining nodes that were not bound to data to exit. + + + for (i = 0; i < groupLength; ++i) { + if ((node = group[i]) && nodeByKeyValue.get(keyValues[i]) === node) { + exit[i] = node; + } + } + } + + function datum(node) { + return node.__data__; + } + + function selection_data (value, key) { + if (!arguments.length) return Array.from(this, datum); + var bind = key ? bindKey : bindIndex, + parents = this._parents, + groups = this._groups; + if (typeof value !== "function") value = constant(value); + + for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) { + var parent = parents[j], + group = groups[j], + groupLength = group.length, + data = array(value.call(parent, parent && parent.__data__, j, parents)), + dataLength = data.length, + enterGroup = enter[j] = new Array(dataLength), + updateGroup = update[j] = new Array(dataLength), + exitGroup = exit[j] = new Array(groupLength); + bind(parent, group, enterGroup, updateGroup, exitGroup, data, key); // Now connect the enter nodes to their following update node, such that + // appendChild can insert the materialized enter node before this node, + // rather than at the end of the parent node. + + for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) { + if (previous = enterGroup[i0]) { + if (i0 >= i1) i1 = i0 + 1; + + while (!(next = updateGroup[i1]) && ++i1 < dataLength); + + previous._next = next || null; + } + } + } + + update = new Selection(update, parents); + update._enter = enter; + update._exit = exit; + return update; + } + + function selection_exit () { + return new Selection(this._exit || this._groups.map(sparse), this._parents); + } + + function selection_join (onenter, onupdate, onexit) { + var enter = this.enter(), + update = this, + exit = this.exit(); + enter = typeof onenter === "function" ? onenter(enter) : enter.append(onenter + ""); + if (onupdate != null) update = onupdate(update); + if (onexit == null) exit.remove();else onexit(exit); + return enter && update ? enter.merge(update).order() : update; + } + + function selection_merge (selection) { + if (!(selection instanceof Selection)) throw new Error("invalid merge"); + + for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) { + for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { + if (node = group0[i] || group1[i]) { + merge[i] = node; + } + } + } + + for (; j < m0; ++j) { + merges[j] = groups0[j]; + } + + return new Selection(merges, this._parents); + } + + function selection_order () { + for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) { + for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) { + if (node = group[i]) { + if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next); + next = node; + } + } + } + + return this; + } + + function selection_sort (compare) { + if (!compare) compare = ascending; + + function compareNode(a, b) { + return a && b ? compare(a.__data__, b.__data__) : !a - !b; + } + + for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) { + if (node = group[i]) { + sortgroup[i] = node; + } + } + + sortgroup.sort(compareNode); + } + + return new Selection(sortgroups, this._parents).order(); + } + + function ascending(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; + } + + function selection_call () { + var callback = arguments[0]; + arguments[0] = this; + callback.apply(null, arguments); + return this; + } + + function selection_nodes () { + return Array.from(this); + } + + function selection_node () { + for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { + for (var group = groups[j], i = 0, n = group.length; i < n; ++i) { + var node = group[i]; + if (node) return node; + } + } + + return null; + } + + function selection_size () { + let size = 0; + + for (const node of this) ++size; // eslint-disable-line no-unused-vars + + + return size; + } + + function selection_empty () { + return !this.node(); + } + + function selection_each (callback) { + for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { + for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) { + if (node = group[i]) callback.call(node, node.__data__, i, group); + } + } + + return this; + } + + function attrRemove(name) { + return function () { + this.removeAttribute(name); + }; + } + + function attrRemoveNS(fullname) { + return function () { + this.removeAttributeNS(fullname.space, fullname.local); + }; + } + + function attrConstant(name, value) { + return function () { + this.setAttribute(name, value); + }; + } + + function attrConstantNS(fullname, value) { + return function () { + this.setAttributeNS(fullname.space, fullname.local, value); + }; + } + + function attrFunction(name, value) { + return function () { + var v = value.apply(this, arguments); + if (v == null) this.removeAttribute(name);else this.setAttribute(name, v); + }; + } + + function attrFunctionNS(fullname, value) { + return function () { + var v = value.apply(this, arguments); + if (v == null) this.removeAttributeNS(fullname.space, fullname.local);else this.setAttributeNS(fullname.space, fullname.local, v); + }; + } + + function selection_attr (name, value) { + var fullname = namespace(name); + + if (arguments.length < 2) { + var node = this.node(); + return fullname.local ? node.getAttributeNS(fullname.space, fullname.local) : node.getAttribute(fullname); + } + + return this.each((value == null ? fullname.local ? attrRemoveNS : attrRemove : typeof value === "function" ? fullname.local ? attrFunctionNS : attrFunction : fullname.local ? attrConstantNS : attrConstant)(fullname, value)); + } + + function defaultView (node) { + return node.ownerDocument && node.ownerDocument.defaultView // node is a Node + || node.document && node // node is a Window + || node.defaultView; // node is a Document + } + + function styleRemove(name) { + return function () { + this.style.removeProperty(name); + }; + } + + function styleConstant(name, value, priority) { + return function () { + this.style.setProperty(name, value, priority); + }; + } + + function styleFunction(name, value, priority) { + return function () { + var v = value.apply(this, arguments); + if (v == null) this.style.removeProperty(name);else this.style.setProperty(name, v, priority); + }; + } + + function selection_style (name, value, priority) { + return arguments.length > 1 ? this.each((value == null ? styleRemove : typeof value === "function" ? styleFunction : styleConstant)(name, value, priority == null ? "" : priority)) : styleValue(this.node(), name); + } + function styleValue(node, name) { + return node.style.getPropertyValue(name) || defaultView(node).getComputedStyle(node, null).getPropertyValue(name); + } + + function propertyRemove(name) { + return function () { + delete this[name]; + }; + } + + function propertyConstant(name, value) { + return function () { + this[name] = value; + }; + } + + function propertyFunction(name, value) { + return function () { + var v = value.apply(this, arguments); + if (v == null) delete this[name];else this[name] = v; + }; + } + + function selection_property (name, value) { + return arguments.length > 1 ? this.each((value == null ? propertyRemove : typeof value === "function" ? propertyFunction : propertyConstant)(name, value)) : this.node()[name]; + } + + function classArray(string) { + return string.trim().split(/^|\s+/); + } + + function classList(node) { + return node.classList || new ClassList(node); + } + + function ClassList(node) { + this._node = node; + this._names = classArray(node.getAttribute("class") || ""); + } + + ClassList.prototype = { + add: function (name) { + var i = this._names.indexOf(name); + + if (i < 0) { + this._names.push(name); + + this._node.setAttribute("class", this._names.join(" ")); + } + }, + remove: function (name) { + var i = this._names.indexOf(name); + + if (i >= 0) { + this._names.splice(i, 1); + + this._node.setAttribute("class", this._names.join(" ")); + } + }, + contains: function (name) { + return this._names.indexOf(name) >= 0; + } + }; + + function classedAdd(node, names) { + var list = classList(node), + i = -1, + n = names.length; + + while (++i < n) list.add(names[i]); + } + + function classedRemove(node, names) { + var list = classList(node), + i = -1, + n = names.length; + + while (++i < n) list.remove(names[i]); + } + + function classedTrue(names) { + return function () { + classedAdd(this, names); + }; + } + + function classedFalse(names) { + return function () { + classedRemove(this, names); + }; + } + + function classedFunction(names, value) { + return function () { + (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names); + }; + } + + function selection_classed (name, value) { + var names = classArray(name + ""); + + if (arguments.length < 2) { + var list = classList(this.node()), + i = -1, + n = names.length; + + while (++i < n) if (!list.contains(names[i])) return false; + + return true; + } + + return this.each((typeof value === "function" ? classedFunction : value ? classedTrue : classedFalse)(names, value)); + } + + function textRemove() { + this.textContent = ""; + } + + function textConstant(value) { + return function () { + this.textContent = value; + }; + } + + function textFunction(value) { + return function () { + var v = value.apply(this, arguments); + this.textContent = v == null ? "" : v; + }; + } + + function selection_text (value) { + return arguments.length ? this.each(value == null ? textRemove : (typeof value === "function" ? textFunction : textConstant)(value)) : this.node().textContent; + } + + function htmlRemove() { + this.innerHTML = ""; + } + + function htmlConstant(value) { + return function () { + this.innerHTML = value; + }; + } + + function htmlFunction(value) { + return function () { + var v = value.apply(this, arguments); + this.innerHTML = v == null ? "" : v; + }; + } + + function selection_html (value) { + return arguments.length ? this.each(value == null ? htmlRemove : (typeof value === "function" ? htmlFunction : htmlConstant)(value)) : this.node().innerHTML; + } + + function raise() { + if (this.nextSibling) this.parentNode.appendChild(this); + } + + function selection_raise () { + return this.each(raise); + } + + function lower() { + if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild); + } + + function selection_lower () { + return this.each(lower); + } + + function selection_append (name) { + var create = typeof name === "function" ? name : creator(name); + return this.select(function () { + return this.appendChild(create.apply(this, arguments)); + }); + } + + function constantNull() { + return null; + } + + function selection_insert (name, before) { + var create = typeof name === "function" ? name : creator(name), + select = before == null ? constantNull : typeof before === "function" ? before : selector(before); + return this.select(function () { + return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null); + }); + } + + function remove() { + var parent = this.parentNode; + if (parent) parent.removeChild(this); + } + + function selection_remove () { + return this.each(remove); + } + + function selection_cloneShallow() { + var clone = this.cloneNode(false), + parent = this.parentNode; + return parent ? parent.insertBefore(clone, this.nextSibling) : clone; + } + + function selection_cloneDeep() { + var clone = this.cloneNode(true), + parent = this.parentNode; + return parent ? parent.insertBefore(clone, this.nextSibling) : clone; + } + + function selection_clone (deep) { + return this.select(deep ? selection_cloneDeep : selection_cloneShallow); + } + + function selection_datum (value) { + return arguments.length ? this.property("__data__", value) : this.node().__data__; + } + + function contextListener(listener) { + return function (event) { + listener.call(this, event, this.__data__); + }; + } + + function parseTypenames(typenames) { + return typenames.trim().split(/^|\s+/).map(function (t) { + var name = "", + i = t.indexOf("."); + if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); + return { + type: t, + name: name + }; + }); + } + + function onRemove(typename) { + return function () { + var on = this.__on; + if (!on) return; + + for (var j = 0, i = -1, m = on.length, o; j < m; ++j) { + if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) { + this.removeEventListener(o.type, o.listener, o.options); + } else { + on[++i] = o; + } + } + + if (++i) on.length = i;else delete this.__on; + }; + } + + function onAdd(typename, value, options) { + return function () { + var on = this.__on, + o, + listener = contextListener(value); + if (on) for (var j = 0, m = on.length; j < m; ++j) { + if ((o = on[j]).type === typename.type && o.name === typename.name) { + this.removeEventListener(o.type, o.listener, o.options); + this.addEventListener(o.type, o.listener = listener, o.options = options); + o.value = value; + return; + } + } + this.addEventListener(typename.type, listener, options); + o = { + type: typename.type, + name: typename.name, + value: value, + listener: listener, + options: options + }; + if (!on) this.__on = [o];else on.push(o); + }; + } + + function selection_on (typename, value, options) { + var typenames = parseTypenames(typename + ""), + i, + n = typenames.length, + t; + + if (arguments.length < 2) { + var on = this.node().__on; + + if (on) for (var j = 0, m = on.length, o; j < m; ++j) { + for (i = 0, o = on[j]; i < n; ++i) { + if ((t = typenames[i]).type === o.type && t.name === o.name) { + return o.value; + } + } + } + return; + } + + on = value ? onAdd : onRemove; + + for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options)); + + return this; + } + + function dispatchEvent(node, type, params) { + var window = defaultView(node), + event = window.CustomEvent; + + if (typeof event === "function") { + event = new event(type, params); + } else { + event = window.document.createEvent("Event"); + if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;else event.initEvent(type, false, false); + } + + node.dispatchEvent(event); + } + + function dispatchConstant(type, params) { + return function () { + return dispatchEvent(this, type, params); + }; + } + + function dispatchFunction(type, params) { + return function () { + return dispatchEvent(this, type, params.apply(this, arguments)); + }; + } + + function selection_dispatch (type, params) { + return this.each((typeof params === "function" ? dispatchFunction : dispatchConstant)(type, params)); + } + + function* selection_iterator () { + for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { + for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) { + if (node = group[i]) yield node; + } + } + } + + var root = [null]; + function Selection(groups, parents) { + this._groups = groups; + this._parents = parents; + } + + function selection_selection() { + return this; + } + + Selection.prototype = { + constructor: Selection, + select: selection_select, + selectAll: selection_selectAll, + selectChild: selection_selectChild, + selectChildren: selection_selectChildren, + filter: selection_filter, + data: selection_data, + enter: selection_enter, + exit: selection_exit, + join: selection_join, + merge: selection_merge, + selection: selection_selection, + order: selection_order, + sort: selection_sort, + call: selection_call, + nodes: selection_nodes, + node: selection_node, + size: selection_size, + empty: selection_empty, + each: selection_each, + attr: selection_attr, + style: selection_style, + property: selection_property, + classed: selection_classed, + text: selection_text, + html: selection_html, + raise: selection_raise, + lower: selection_lower, + append: selection_append, + insert: selection_insert, + remove: selection_remove, + clone: selection_clone, + datum: selection_datum, + on: selection_on, + dispatch: selection_dispatch, + [Symbol.iterator]: selection_iterator + }; + + function select (selector) { + return typeof selector === "string" ? new Selection([[document.querySelector(selector)]], [document.documentElement]) : new Selection([[selector]], root); + } + + function initRange(domain, range) { + switch (arguments.length) { + case 0: + break; + + case 1: + this.range(domain); + break; + + default: + this.range(range).domain(domain); + break; + } + + return this; + } + + const implicit = Symbol("implicit"); + function ordinal() { + var index = new Map(), + domain = [], + range = [], + unknown = implicit; + + function scale(d) { + var key = d + "", + i = index.get(key); + + if (!i) { + if (unknown !== implicit) return unknown; + index.set(key, i = domain.push(d)); + } + + return range[(i - 1) % range.length]; + } + + scale.domain = function (_) { + if (!arguments.length) return domain.slice(); + domain = [], index = new Map(); + + for (const value of _) { + const key = value + ""; + if (index.has(key)) continue; + index.set(key, domain.push(value)); + } + + return scale; + }; + + scale.range = function (_) { + return arguments.length ? (range = Array.from(_), scale) : range.slice(); + }; + + scale.unknown = function (_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + scale.copy = function () { + return ordinal(domain, range).unknown(unknown); + }; + + initRange.apply(scale, arguments); + return scale; + } + + function colors (specifier) { + var n = specifier.length / 6 | 0, + colors = new Array(n), + i = 0; + + while (i < n) colors[i] = "#" + specifier.slice(i * 6, ++i * 6); + + return colors; + } + + var schemeCategory10 = colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"); + + function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); + } + + function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) { + arr2[i] = arr[i]; + } + + return arr2; + } + + function _iterableToArrayLimit(arr, i) { + var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; + + if (_i == null) return; + var _arr = []; + var _n = true; + var _d = false; + + var _s, _e; + + try { + for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; + } + var defaultScaleOrdinal = ordinal(schemeCategory10); + + function WordCloud(_ref) { + var data = _ref.data, + _ref$width = _ref.width, + width = _ref$width === void 0 ? 700 : _ref$width, + _ref$height = _ref.height, + height = _ref$height === void 0 ? 600 : _ref$height, + _ref$font = _ref.font, + font = _ref$font === void 0 ? 'serif' : _ref$font, + _ref$fontStyle = _ref.fontStyle, + fontStyle = _ref$fontStyle === void 0 ? 'normal' : _ref$fontStyle, + _ref$fontWeight = _ref.fontWeight, + fontWeight = _ref$fontWeight === void 0 ? 'normal' : _ref$fontWeight, + _ref$fontSize = _ref.fontSize, + fontSize = _ref$fontSize === void 0 ? function (d) { + return Math.sqrt(d.value); + } : _ref$fontSize, + _ref$rotate = _ref.rotate, + rotate = _ref$rotate === void 0 ? function () { + return (~~(Math.random() * 6) - 3) * 30; + } : _ref$rotate, + _ref$spiral = _ref.spiral, + spiral = _ref$spiral === void 0 ? 'archimedean' : _ref$spiral, + _ref$padding = _ref.padding, + padding = _ref$padding === void 0 ? 1 : _ref$padding, + _ref$random = _ref.random, + random = _ref$random === void 0 ? Math.random : _ref$random, + _ref$fill = _ref.fill, + fill = _ref$fill === void 0 ? function (_, i) { + return defaultScaleOrdinal(i); + } : _ref$fill, + onWordClick = _ref.onWordClick, + onWordMouseOver = _ref.onWordMouseOver, + onWordMouseOut = _ref.onWordMouseOut; + var elementRef = React$3.useRef(); + + if (!elementRef.current) { + elementRef.current = ReactFauxDOM.createElement('div'); + } + + var el = elementRef.current; // clear old words + + select(el).selectAll('*').remove(); // render based on new data + + var layout = d3Cloud().words(data).size([width, height]).font(font).fontStyle(fontStyle).fontWeight(fontWeight).fontSize(fontSize).rotate(rotate).spiral(spiral).padding(padding).random(random).on('end', function (words) { + var _layout$size = layout.size(), + _layout$size2 = _slicedToArray(_layout$size, 2), + w = _layout$size2[0], + h = _layout$size2[1]; + + var texts = select(el).append('svg').attr('viewBox', "0 0 ".concat(w, " ").concat(h)).attr('preserveAspectRatio', 'xMinYMin meet').append('g').attr('transform', "translate(".concat(w / 2, ",").concat(h / 2, ")")).selectAll('text').data(words).enter().append('text').style('font-family', function (d) { + return d.font; + }).style('font-style', function (d) { + return d.style; + }).style('font-weight', function (d) { + return d.weight; + }).style('font-size', function (d) { + return "".concat(d.size, "px"); + }).style('fill', fill).attr('text-anchor', 'middle').attr('transform', function (d) { + return "translate(".concat([d.x, d.y], ")rotate(").concat(d.rotate, ")"); + }).text(function (d) { + return d.text; + }); + + if (onWordClick) { + texts.on('click', onWordClick); + } + + if (onWordMouseOver) { + texts.on('mouseover', onWordMouseOver); + } + + if (onWordMouseOut) { + texts.on('mouseout', onWordMouseOut); + } + }); + layout.start(); + return el.toReact(); + } + + WordCloud.propTypes = { + data: _pt.arrayOf(_pt.shape({ + text: _pt.string.isRequired, + value: _pt.number.isRequired + })).isRequired, + width: _pt.number, + height: _pt.number, + font: _pt.oneOfType([_pt.string, _pt.func]), + fontStyle: _pt.oneOfType([_pt.string, _pt.func]), + fontWeight: _pt.oneOfType([_pt.string, _pt.number, _pt.func]), + fontSize: _pt.oneOfType([_pt.number, _pt.func]), + rotate: _pt.oneOfType([_pt.number, _pt.func]), + spiral: _pt.oneOfType([_pt.oneOf(['archimedean']), _pt.oneOf(['rectangular']), _pt.func]), + padding: _pt.oneOfType([_pt.number, _pt.func]), + random: _pt.func, + onWordClick: _pt.func, + onWordMouseOver: _pt.func, + onWordMouseOut: _pt.func + }; + var WordCloud$1 = /*#__PURE__*/React__default["default"].memo(WordCloud, reactFastCompare); + + function WordCloudWidgetComponent(props) { + const data = props.inputData; + + const fontSizeMapper = word => Math.log2(word.value) * 5; + + const rotate = word => Math.floor(Math.random() * 2) * 90; + + const onClickHandle = text => { + props.onClickAction.canExecute && !props.onClickAction.isExecuting; + { + props.chosenWord.setValue(text); + props.onClickAction.execute(); + } + }; + + return React$3.createElement(WordCloud$1, { + data: data, + fontSizeMapper: fontSizeMapper, + rotate: rotate, + onWordClick: (event, word) => onClickHandle(word.text) + }); + } + + class WordCloudWidget extends React$3.Component { + shouldComponentUpdate(nextProps) { + return nextProps.dataSource !== this.props.dataSource; + } + + render() { + var dataToRender = []; + + if (this.props.dataSource.status === "available" && this.props.dataSource.items) { + var i = 0; + + for (i = 0; i < this.props.dataSource.items.length; i++) { + dataToRender.push({ + text: this.props.textAttrib.get(this.props.dataSource.items[i]).value, + value: this.props.intAttrib.get(this.props.dataSource.items[i]).value + }); + } + } + + return React$3.createElement(WordCloudWidgetComponent, { + inputData: dataToRender, + chosenWord: this.props.chosenWord, + onClickAction: this.props.onClickAction + }); + } + + } + + return WordCloudWidget; + +})); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV29yZENsb3VkLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2xvYmFsLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtc3ltYm9sLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtbWV0aG9kLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1wdXJlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1nbG9iYWwuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1vYmplY3QuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91aWQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZGVmaW5lLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXguanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vd24ta2V5cy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmcuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2h0bWwuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BhdGguanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLXdlbGwta25vd24tc3ltYm9sLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jb25zdHJ1Y3Rvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmhhcy1pbnN0YW5jZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmlzLWNvbmNhdC1zcHJlYWRhYmxlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLm1hdGNoLWFsbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLnJlcGxhY2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5zZWFyY2guanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5zcGVjaWVzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuc3BsaXQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC50by1wcmltaXRpdmUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wudW5zY29wYWJsZXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3JzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvci1jbG9zZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hZ2dyZWdhdGUtZXJyb3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5hdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1jb3B5LXdpdGhpbi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29weS13aXRoaW4uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZXZlcnkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktZmlsbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maW5kLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maW5kLWluZGV4LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZsYXR0ZW4taW50by1hcnJheS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmxhdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmxhdC1tYXAuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2guanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWZyb20uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5mcm9tLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pbmNsdWRlcy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5kZXgtb2YuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmlzLWFycmF5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1pdGVyYXRvci1jb25zdHJ1Y3Rvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtaXRlcmF0b3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5qb2luLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWxhc3QtaW5kZXgtb2YuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lmxhc3QtaW5kZXgtb2YuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkub2YuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktcmVkdWNlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZS1yaWdodC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucmV2ZXJzZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNvbWUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc29ydC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtZmYtdmVyc2lvbi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtaWUtb3ItZWRnZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtd2Via2l0LXZlcnNpb24uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNvcnQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXNwZWNpZXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNwZWNpZXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNwbGljZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkudW5zY29wYWJsZXMuZmxhdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkudW5zY29wYWJsZXMuZmxhdC1tYXAuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5hdGl2ZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWRlZmluZS1hbGwuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4taW5zdGFuY2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXguanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWVlZTc1NC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1idWZmZXIuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LWJ1ZmZlci5jb25zdHJ1Y3Rvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS1idWZmZXIuaXMtdmlldy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNvbnN0cnVjdG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LWJ1ZmZlci5zbGljZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZGF0YS12aWV3LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5kYXRlLmdldC15ZWFyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5kYXRlLm5vdy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZGF0ZS5zZXQteWVhci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZGF0ZS50by1nbXQtc3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1yZXBlYXQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLXBhZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kYXRlLXRvLWlzby1zdHJpbmcuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmRhdGUudG8taXNvLXN0cmluZy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZGF0ZS50by1qc29uLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RhdGUtdG8tcHJpbWl0aXZlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5kYXRlLnRvLXByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZGF0ZS50by1zdHJpbmcuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmVzY2FwZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5iaW5kLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5oYXMtaW5zdGFuY2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmdsb2JhbC10aGlzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZyZWV6aW5nLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29sbGVjdGlvbi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubWFwLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21hdGgtbG9nMXAuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm1hdGguYWNvc2guanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm1hdGguYXNpbmguanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm1hdGguYXRhbmguanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWF0aC1zaWduLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5tYXRoLmNicnQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm1hdGguY2x6MzIuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWF0aC1leHBtMS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubWF0aC5jb3NoLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5tYXRoLmV4cG0xLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21hdGgtZnJvdW5kLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5tYXRoLmZyb3VuZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubWF0aC5oeXBvdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubWF0aC5pbXVsLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5tYXRoLmxvZzEwLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5tYXRoLmxvZzFwLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5tYXRoLmxvZzIuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm1hdGguc2lnbi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubWF0aC5zaW5oLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5tYXRoLnRhbmguanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm1hdGgudG8tc3RyaW5nLXRhZy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubWF0aC50cnVuYy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90aGlzLW51bWJlci12YWx1ZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93aGl0ZXNwYWNlcy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctdHJpbS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLmNvbnN0cnVjdG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIuZXBzaWxvbi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9udW1iZXItaXMtZmluaXRlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIuaXMtZmluaXRlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWludGVncmFsLW51bWJlci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLmlzLWludGVnZXIuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci5pcy1uYW4uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci5pcy1zYWZlLWludGVnZXIuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci5tYXgtc2FmZS1pbnRlZ2VyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIubWluLXNhZmUtaW50ZWdlci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9udW1iZXItcGFyc2UtZmxvYXQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci5wYXJzZS1mbG9hdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9udW1iZXItcGFyc2UtaW50LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIucGFyc2UtaW50LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIudG8tZml4ZWQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci50by1wcmVjaXNpb24uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmFzc2lnbi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmNyZWF0ZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvdG90eXBlLWFjY2Vzc29ycy1mb3JjZWQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtZ2V0dGVyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5kZWZpbmUtc2V0dGVyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC10by1hcnJheS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmVudHJpZXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5mcmVlemUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5mcm9tLWVudHJpZXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5oYXMtb3duLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NhbWUtdmFsdWUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5pcy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmlzLWV4dGVuc2libGUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5pcy1mcm96ZW4uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5pcy1zZWFsZWQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5rZXlzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QubG9va3VwLWdldHRlci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0Lmxvb2t1cC1zZXR0ZXIuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5zZWFsLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudmFsdWVzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wYXJzZS1mbG9hdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucGFyc2UtaW50LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25hdGl2ZS1wcm9taXNlLWNvbnN0cnVjdG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdGFzay5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLXBlYmJsZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21pY3JvdGFzay5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcGVyZm9ybS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtYnJvd3Nlci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5hbGwtc2V0dGxlZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5hbnkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UuZmluYWxseS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVmbGVjdC5hcHBseS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVmbGVjdC5jb25zdHJ1Y3QuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZmxlY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1kYXRhLWRlc2NyaXB0b3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZmxlY3QuZ2V0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVmbGVjdC5nZXQtcHJvdG90eXBlLW9mLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWZsZWN0Lmhhcy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVmbGVjdC5pcy1leHRlbnNpYmxlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWZsZWN0Lm93bi1rZXlzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVmbGVjdC5zZXQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZmxlY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVmbGVjdC50by1zdHJpbmctdGFnLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXJlZ2V4cC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZmxhZ3MuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1kb3QtYWxsLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1uY2cuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5jb25zdHJ1Y3Rvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmRvdC1hbGwuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZmxhZ3MuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5zdGlja3kuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50ZXN0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAudG8tc3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zZXQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5hdC1hbHRlcm5hdGl2ZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuY29kZS1wb2ludC1hdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9ub3QtYS1yZWdleHAuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5lbmRzLXdpdGguanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5mcm9tLWNvZGUtcG9pbnQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pbmNsdWRlcy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5tYXRjaC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLm1hdGNoLWFsbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctcGFkLXdlYmtpdC1idWcuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5wYWQtZW5kLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucGFkLXN0YXJ0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmF3LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwZWF0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1zdWJzdGl0dXRpb24uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS1hbGwuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zZWFyY2guanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zcGxpdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnN0YXJ0cy13aXRoLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc3Vic3RyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy10cmltLWZvcmNlZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy50cmltLWVuZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0tc3RhcnQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLWh0bWwuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLWh0bWwtZm9yY2VkLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuYW5jaG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuYmlnLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuYmxpbmsuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5ib2xkLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuZml4ZWQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5mb250Y29sb3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5mb250c2l6ZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLml0YWxpY3MuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5saW5rLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc21hbGwuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zdHJpa2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zdWIuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zdXAuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdHlwZWQtYXJyYXktY29uc3RydWN0b3JzLXJlcXVpcmUtd3JhcHBlcnMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcG9zaXRpdmUtaW50ZWdlci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1vZmZzZXQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdHlwZWQtYXJyYXktZnJvbS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90eXBlZC1hcnJheS1jb25zdHJ1Y3Rvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuZmxvYXQzMi1hcnJheS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuZmxvYXQ2NC1hcnJheS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuaW50OC1hcnJheS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuaW50MTYtYXJyYXkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LmludDMyLWFycmF5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS51aW50OC1hcnJheS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkudWludDgtY2xhbXBlZC1hcnJheS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkudWludDE2LWFycmF5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS51aW50MzItYXJyYXkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LmF0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5jb3B5LXdpdGhpbi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuZXZlcnkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LmZpbGwuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktZnJvbS1jb25zdHJ1Y3Rvci1hbmQtbGlzdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90eXBlZC1hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3R5cGVkLWFycmF5LWZyb20tc3BlY2llcy1hbmQtbGlzdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuZmlsdGVyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5maW5kLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5maW5kLWluZGV4LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5mb3ItZWFjaC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuZnJvbS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuaW5jbHVkZXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LmluZGV4LW9mLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5pdGVyYXRvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuam9pbi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkubGFzdC1pbmRleC1vZi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkubWFwLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5vZi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkucmVkdWNlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5yZWR1Y2UtcmlnaHQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LnJldmVyc2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LnNldC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuc2xpY2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LnNvbWUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LnNvcnQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LnN1YmFycmF5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS50by1sb2NhbGUtc3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS50by1zdHJpbmcuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnVuZXNjYXBlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvbGxlY3Rpb24td2Vhay5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMud2Vhay1tYXAuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLndlYWstc2V0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FzeW5jLWl0ZXJhdG9yLXByb3RvdHlwZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hc3luYy1mcm9tLXN5bmMtaXRlcmF0b3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWFzeW5jLWl0ZXJhdG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VudHJ5LXZpcnR1YWwuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXN5bmMtaXRlcmF0b3ItaXRlcmF0aW9uLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWZyb20tYXN5bmMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5hcnJheS5mcm9tLWFzeW5jLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuYXJyYXkuZmlsdGVyLW91dC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LmFycmF5LmZpbHRlci1yZWplY3QuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLWZyb20tbGFzdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LmFycmF5LmZpbmQtbGFzdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LmFycmF5LmZpbmQtbGFzdC1pbmRleC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1ncm91cC1ieS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LmFycmF5Lmdyb3VwLWJ5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuYXJyYXkuaXMtdGVtcGxhdGUtb2JqZWN0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuYXJyYXkubGFzdC1pbmRleC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LmFycmF5Lmxhc3QtaXRlbS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS11bmlxdWUtYnkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5hcnJheS51bmlxdWUtYnkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5hc3luYy1pdGVyYXRvci5jb25zdHJ1Y3Rvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hc3luYy1pdGVyYXRvci1jcmVhdGUtcHJveHkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5hc3luYy1pdGVyYXRvci5hcy1pbmRleGVkLXBhaXJzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuYXN5bmMtaXRlcmF0b3IuZHJvcC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LmFzeW5jLWl0ZXJhdG9yLmV2ZXJ5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuYXN5bmMtaXRlcmF0b3IuZmlsdGVyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuYXN5bmMtaXRlcmF0b3IuZmluZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LmFzeW5jLWl0ZXJhdG9yLmZsYXQtbWFwLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuYXN5bmMtaXRlcmF0b3IuZm9yLWVhY2guanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5hc3luYy1pdGVyYXRvci5mcm9tLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuYXN5bmMtaXRlcmF0b3IubWFwLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuYXN5bmMtaXRlcmF0b3IucmVkdWNlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuYXN5bmMtaXRlcmF0b3Iuc29tZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LmFzeW5jLWl0ZXJhdG9yLnRha2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5hc3luYy1pdGVyYXRvci50by1hcnJheS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9udW1lcmljLXJhbmdlLWl0ZXJhdG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuYmlnaW50LnJhbmdlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvbXBvc2l0ZS1rZXkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5jb21wb3NpdGUta2V5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuY29tcG9zaXRlLXN5bWJvbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmNvbnN0cnVjdG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1wcm94eS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmFzLWluZGV4ZWQtcGFpcnMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5kcm9wLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuZXZlcnkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5maWx0ZXIuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5maW5kLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuZmxhdC1tYXAuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5mb3ItZWFjaC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmZyb20uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5tYXAuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5yZWR1Y2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5zb21lLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IudGFrZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLnRvLWFycmF5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvbGxlY3Rpb24tZGVsZXRlLWFsbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hcC5kZWxldGUtYWxsLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21hcC1lbXBsYWNlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWFwLmVtcGxhY2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1hcC1pdGVyYXRvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hcC5ldmVyeS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hcC5maWx0ZXIuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAuZmluZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hcC5maW5kLWtleS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb2xsZWN0aW9uLWZyb20uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAuZnJvbS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hcC5ncm91cC1ieS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zYW1lLXZhbHVlLXplcm8uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAuaW5jbHVkZXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAua2V5LWJ5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWFwLmtleS1vZi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hcC5tYXAta2V5cy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hcC5tYXAtdmFsdWVzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWFwLm1lcmdlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvbGxlY3Rpb24tb2YuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAub2YuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAucmVkdWNlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWFwLnNvbWUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAudXBkYXRlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21hcC11cHNlcnQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAudXBkYXRlLW9yLWluc2VydC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hcC51cHNlcnQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLmNsYW1wLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWF0aC5kZWctcGVyLXJhZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hdGguZGVncmVlcy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXNjYWxlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWF0aC5mc2NhbGUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLmlhZGRoLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWF0aC5pbXVsaC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hdGguaXN1YmguanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLnJhZC1wZXItZGVnLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWF0aC5yYWRpYW5zLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWF0aC5zY2FsZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hdGguc2VlZGVkLXBybmcuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLnNpZ25iaXQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLnVtdWxoLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubnVtYmVyLmZyb20tc3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubnVtYmVyLnJhbmdlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pdGVyYXRvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm9iamVjdC5pdGVyYXRlLWVudHJpZXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5vYmplY3QuaXRlcmF0ZS1rZXlzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQub2JqZWN0Lml0ZXJhdGUtdmFsdWVzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQub2JzZXJ2YWJsZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnByb21pc2UudHJ5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZmxlY3QtbWV0YWRhdGEuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5yZWZsZWN0LmRlZmluZS1tZXRhZGF0YS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnJlZmxlY3QuZGVsZXRlLW1ldGFkYXRhLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQucmVmbGVjdC5nZXQtbWV0YWRhdGEuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5yZWZsZWN0LmdldC1tZXRhZGF0YS1rZXlzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5yZWZsZWN0Lmhhcy1tZXRhZGF0YS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnJlZmxlY3QuaGFzLW93bi1tZXRhZGF0YS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnJlZmxlY3QubWV0YWRhdGEuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29sbGVjdGlvbi1hZGQtYWxsLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmFkZC1hbGwuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZGVsZXRlLWFsbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5kaWZmZXJlbmNlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1zZXQtaXRlcmF0b3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZXZlcnkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZmlsdGVyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmZpbmQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZnJvbS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pbnRlcnNlY3Rpb24uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtZGlzam9pbnQtZnJvbS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5pcy1zdWJzZXQtb2YuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3VwZXJzZXQtb2YuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuam9pbi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5tYXAuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQub2YuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQucmVkdWNlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LnNvbWUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuc3ltbWV0cmljLWRpZmZlcmVuY2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQudW5pb24uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zdHJpbmcuYXQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zdHJpbmcuY29kZS1wb2ludHMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuYXN5bmMtZGlzcG9zZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5kaXNwb3NlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc3ltYm9sLm1hdGNoZXIuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zeW1ib2wubWV0YWRhdGEuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zeW1ib2wub2JzZXJ2YWJsZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5wYXR0ZXJuLW1hdGNoLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc3ltYm9sLnJlcGxhY2UtYWxsLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQudHlwZWQtYXJyYXkuZnJvbS1hc3luYy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnR5cGVkLWFycmF5LmZpbHRlci1vdXQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC50eXBlZC1hcnJheS5maWx0ZXItcmVqZWN0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQudHlwZWQtYXJyYXkuZmluZC1sYXN0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQudHlwZWQtYXJyYXkuZmluZC1sYXN0LWluZGV4LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQudHlwZWQtYXJyYXkuZ3JvdXAtYnkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC50eXBlZC1hcnJheS51bmlxdWUtYnkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC53ZWFrLW1hcC5kZWxldGUtYWxsLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQud2Vhay1tYXAuZnJvbS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LndlYWstbWFwLm9mLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQud2Vhay1tYXAuZW1wbGFjZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LndlYWstbWFwLnVwc2VydC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LndlYWstc2V0LmFkZC1hbGwuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC53ZWFrLXNldC5kZWxldGUtYWxsLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQud2Vhay1zZXQuZnJvbS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LndlYWstc2V0Lm9mLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9tLXRva2VuLWxpc3QtcHJvdG90eXBlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuaW1tZWRpYXRlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIucXVldWUtbWljcm90YXNrLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudGltZXJzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25hdGl2ZS11cmwuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLXB1bnljb2RlLXRvLWFzY2lpLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi51cmwuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi51cmwudG8tanNvbi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2NoZWNrUHJvcFR5cGVzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1hdHRyL2xpYi9pbmRleC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9xdWVyeS1zZWxlY3Rvci9saWIvcXVlcnktc2VsZWN0b3IvdXRpbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9xdWVyeS1zZWxlY3Rvci9saWIvcXVlcnktc2VsZWN0b3IvcGFyc2VyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3F1ZXJ5LXNlbGVjdG9yL2xpYi9xdWVyeS1zZWxlY3Rvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9xdWVyeS1zZWxlY3Rvci9pbmRleC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1mYXV4LWRvbS9saWIvdXRpbHMvY2FtZWxDYXNlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZhdXgtZG9tL2xpYi91dGlscy9pc1N0cmluZy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1mYXV4LWRvbS9saWIvdXRpbHMvaXNVbmRlZmluZWQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZmF1eC1kb20vbGliL3V0aWxzL2Fzc2lnbi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1mYXV4LWRvbS9saWIvdXRpbHMvbWFwVmFsdWVzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZhdXgtZG9tL2xpYi91dGlscy9zdHlsZUNhbWVsQ2FzZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1mYXV4LWRvbS9saWIvX2VsZW1lbnQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZmF1eC1kb20vbGliL193aW5kb3cuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3JlYXRlLXJlYWN0LWNsYXNzL2ZhY3RvcnkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3JlYXRlLXJlYWN0LWNsYXNzL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzL2Rpc3QvaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MuY2pzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZhdXgtZG9tL2xpYi9fd2l0aEZhdXhET00uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZmF1eC1kb20vbGliL2ZhY3RvcnkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZmF1eC1kb20vbGliL1JlYWN0RmF1eERPTS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kMy1kaXNwYXRjaC9zcmMvZGlzcGF0Y2guanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtY2xvdWQvaW5kZXguanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZmFzdC1jb21wYXJlL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbmFtZXNwYWNlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NyZWF0b3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0b3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9hcnJheS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3RvckFsbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0QWxsLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL21hdGNoZXIuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdENoaWxkLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3RDaGlsZHJlbi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZmlsdGVyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zcGFyc2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VudGVyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NvbnN0YW50LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9kYXRhLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9leGl0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9qb2luLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9tZXJnZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb3JkZXIuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NvcnQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2NhbGwuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL25vZGVzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9ub2RlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zaXplLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lbXB0eS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZWFjaC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vYXR0ci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy93aW5kb3cuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3N0eWxlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9wcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xhc3NlZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vdGV4dC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaHRtbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcmFpc2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2xvd2VyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9hcHBlbmQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luc2VydC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcmVtb3ZlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9jbG9uZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGF0dW0uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL29uLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9kaXNwYXRjaC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaXRlcmF0b3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2luaXQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9vcmRpbmFsLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL2NvbG9ycy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jYXRlZ29yaWNhbC9jYXRlZ29yeTEwLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL2xpYi9lc20vV29yZENsb3VkLmpzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvV29yZENsb3VkV2lkZ2V0Q29tcG9uZW50LmpzeCIsIi4uLy4uLy4uLy4uLy4uL3NyYy9Xb3JkQ2xvdWQuanN4Il0sInNvdXJjZXNDb250ZW50IjpbInZhciBjaGVjayA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgJiYgaXQuTWF0aCA9PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT0gNztcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgc3BsaXQgPSAnJy5zcGxpdDtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gIU9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09ICdTdHJpbmcnID8gc3BsaXQuY2FsbChpdCwgJycpIDogT2JqZWN0KGl0KTtcbn0gOiBPYmplY3Q7XG4iLCIvLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcbiIsIi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmd1bWVudCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCJ2YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoYXJndW1lbnQpID8gYXJndW1lbnQgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24oZ2xvYmFsW25hbWVzcGFjZV0pIDogZ2xvYmFsW25hbWVzcGFjZV0gJiYgZ2xvYmFsW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCJ2YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCduYXZpZ2F0b3InLCAndXNlckFnZW50JykgfHwgJyc7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWwuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPCA0ID8gMSA6IG1hdGNoWzBdICsgbWF0Y2hbMV07XG59IGVsc2UgaWYgKHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9IG1hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbiAmJiArdmVyc2lvbjtcbiIsIi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIHJldHVybiAhU3RyaW5nKHN5bWJvbCkgfHwgIShPYmplY3Qoc3ltYm9sKSBpbnN0YW5jZW9mIFN5bWJvbCkgfHxcbiAgICAvLyBDaHJvbWUgMzgtNDAgc3ltYm9scyBhcmUgbm90IGluaGVyaXRlZCBmcm9tIERPTSBjb2xsZWN0aW9ucyBwcm90b3R5cGVzIHRvIGluc3RhbmNlc1xuICAgICFTeW1ib2wuc2hhbSAmJiBWOF9WRVJTSU9OICYmIFY4X1ZFUlNJT04gPCA0MTtcbn0pO1xuIiwiLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAmJiAhU3ltYm9sLnNoYW1cbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsInZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFVTRV9TWU1CT0xfQVNfVUlEID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciAkU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHJldHVybiBpc0NhbGxhYmxlKCRTeW1ib2wpICYmIE9iamVjdChpdCkgaW5zdGFuY2VvZiAkU3ltYm9sO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwidmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCJ2YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBmdW5jID09IG51bGwgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwidmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFtrZXldID0gdmFsdWU7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2V0R2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1nbG9iYWwnKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgc2V0R2xvYmFsKFNIQVJFRCwge30pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlO1xuIiwidmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuMTguMycsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAyMSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwidmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCJ2YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4vLyBgSGFzT3duUHJvcGVydHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1oYXNvd25wcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIFN0cmluZyhrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyAoKytpZCArIHBvc3RmaXgpLnRvU3RyaW5nKDM2KTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sIDogU3ltYm9sICYmIFN5bWJvbC53aXRob3V0U2V0dGVyIHx8IHVpZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIWhhc093bihXZWxsS25vd25TeW1ib2xzU3RvcmUsIG5hbWUpIHx8ICEoTkFUSVZFX1NZTUJPTCB8fCB0eXBlb2YgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID09ICdzdHJpbmcnKSkge1xuICAgIGlmIChOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpKSB7XG4gICAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBTeW1ib2xbbmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgICB9XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGV4b3RpY1RvUHJpbS5jYWxsKGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gIH1cbiAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdudW1iZXInO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgcHJlZik7XG59O1xuIiwidmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IFN0cmluZyhrZXkpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIURFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWllZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsInZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbnZhciBmdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24udG9TdHJpbmc7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcuY2FsbChpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcblxudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChpbnNwZWN0U291cmNlKFdlYWtNYXApKTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJ2YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS13ZWFrLW1hcCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCA9ICdPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCc7XG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgdmFyIHdtZ2V0ID0gc3RvcmUuZ2V0O1xuICB2YXIgd21oYXMgPSBzdG9yZS5oYXM7XG4gIHZhciB3bXNldCA9IHN0b3JlLnNldDtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmICh3bWhhcy5jYWxsKHN0b3JlLCBpdCkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHdtc2V0LmNhbGwoc3RvcmUsIGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gd21nZXQuY2FsbChzdG9yZSwgaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gd21oYXMuY2FsbChzdG9yZSwgaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IG5ldyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShpdCwgU1RBVEUsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKSA/IGl0W1NUQVRFXSA6IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgZ2V0OiBnZXQsXG4gIGhhczogaGFzLFxuICBlbmZvcmNlOiBlbmZvcmNlLFxuICBnZXR0ZXJGb3I6IGdldHRlckZvclxufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXREZXNjcmlwdG9yID0gREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxudmFyIEVYSVNUUyA9IGhhc093bihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKTtcbi8vIGFkZGl0aW9uYWwgcHJvdGVjdGlvbiBmcm9tIG1pbmlmaWVkIC8gbWFuZ2xlZCAvIGRyb3BwZWQgZnVuY3Rpb24gbmFtZXNcbnZhciBQUk9QRVIgPSBFWElTVFMgJiYgKGZ1bmN0aW9uIHNvbWV0aGluZygpIHsgLyogZW1wdHkgKi8gfSkubmFtZSA9PT0gJ3NvbWV0aGluZyc7XG52YXIgQ09ORklHVVJBQkxFID0gRVhJU1RTICYmICghREVTQ1JJUFRPUlMgfHwgKERFU0NSSVBUT1JTICYmIGdldERlc2NyaXB0b3IoRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJykuY29uZmlndXJhYmxlKSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBFWElTVFM6IEVYSVNUUyxcbiAgUFJPUEVSOiBQUk9QRVIsXG4gIENPTkZJR1VSQUJMRTogQ09ORklHVVJBQkxFXG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgc2V0R2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1nbG9iYWwnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG5cbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmVuZm9yY2U7XG52YXIgVEVNUExBVEUgPSBTdHJpbmcoU3RyaW5nKS5zcGxpdCgnU3RyaW5nJyk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIHZhciB1bnNhZmUgPSBvcHRpb25zID8gISFvcHRpb25zLnVuc2FmZSA6IGZhbHNlO1xuICB2YXIgc2ltcGxlID0gb3B0aW9ucyA/ICEhb3B0aW9ucy5lbnVtZXJhYmxlIDogZmFsc2U7XG4gIHZhciBub1RhcmdldEdldCA9IG9wdGlvbnMgPyAhIW9wdGlvbnMubm9UYXJnZXRHZXQgOiBmYWxzZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zICYmIG9wdGlvbnMubmFtZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uYW1lIDoga2V5O1xuICB2YXIgc3RhdGU7XG4gIGlmIChpc0NhbGxhYmxlKHZhbHVlKSkge1xuICAgIGlmIChTdHJpbmcobmFtZSkuc2xpY2UoMCwgNykgPT09ICdTeW1ib2woJykge1xuICAgICAgbmFtZSA9ICdbJyArIFN0cmluZyhuYW1lKS5yZXBsYWNlKC9eU3ltYm9sXFwoKFteKV0qKVxcKS8sICckMScpICsgJ10nO1xuICAgIH1cbiAgICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCBuYW1lKTtcbiAgICB9XG4gICAgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSk7XG4gICAgaWYgKCFzdGF0ZS5zb3VyY2UpIHtcbiAgICAgIHN0YXRlLnNvdXJjZSA9IFRFTVBMQVRFLmpvaW4odHlwZW9mIG5hbWUgPT0gJ3N0cmluZycgPyBuYW1lIDogJycpO1xuICAgIH1cbiAgfVxuICBpZiAoTyA9PT0gZ2xvYmFsKSB7XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBzZXRHbG9iYWwoa2V5LCB2YWx1ZSk7XG4gICAgcmV0dXJuO1xuICB9IGVsc2UgaWYgKCF1bnNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICB9IGVsc2UgaWYgKCFub1RhcmdldEdldCAmJiBPW2tleV0pIHtcbiAgICBzaW1wbGUgPSB0cnVlO1xuICB9XG4gIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCBrZXksIHZhbHVlKTtcbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxufSkoRnVuY3Rpb24ucHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0pO1xuIiwidmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgVG9JbnRlZ2VyT3JJbmZpbml0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW50ZWdlcm9yaW5maW5pdHlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBudW1iZXIgPSArYXJndW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gc2FmZVxuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IChudW1iZXIgPiAwID8gZmxvb3IgOiBjZWlsKShudW1iZXIpO1xufTtcbiIsInZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsInZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBgVG9MZW5ndGhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2xlbmd0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGFyZ3VtZW50ID4gMCA/IG1pbih0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KSwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwidmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCJ2YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsInZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXNPd24oTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+aW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwidmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwidmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdvd25LZXlzJykgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwidmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkpIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgfVxufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIHJlcGxhY2VtZW50ID0gLyN8XFwucHJvdG90eXBlXFwuLztcblxudmFyIGlzRm9yY2VkID0gZnVuY3Rpb24gKGZlYXR1cmUsIGRldGVjdGlvbikge1xuICB2YXIgdmFsdWUgPSBkYXRhW25vcm1hbGl6ZShmZWF0dXJlKV07XG4gIHJldHVybiB2YWx1ZSA9PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHNldEdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZ2xvYmFsJyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5ub1RhcmdldEdldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbDtcbiAgfSBlbHNlIGlmIChTVEFUSUMpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxbVEFSR0VUXSB8fCBzZXRHbG9iYWwoVEFSR0VULCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0ID0gKGdsb2JhbFtUQVJHRVRdIHx8IHt9KS5wcm90b3R5cGU7XG4gIH1cbiAgaWYgKHRhcmdldCkgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgc291cmNlUHJvcGVydHkgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAob3B0aW9ucy5ub1RhcmdldEdldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gICAgICB0YXJnZXRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5lZCBpbiB0YXJnZXRcbiAgICBpZiAoIUZPUkNFRCAmJiB0YXJnZXRQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVByb3BlcnR5ID09PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgLy8gZXh0ZW5kIGdsb2JhbFxuICAgIHJlZGVmaW5lKHRhcmdldCwga2V5LCBzb3VyY2VQcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1pc2FycmF5IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZ3VtZW50KSB7XG4gIHJldHVybiBjbGFzc29mKGFyZ3VtZW50KSA9PSAnQXJyYXknO1xufTtcbiIsInZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwidmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUT19TVFJJTkdfVEFHKSkgPT0gJ3N0cmluZycgPyB0YWdcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IENPUlJFQ1RfQVJHVU1FTlRTID8gY2xhc3NvZlJhdyhPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChyZXN1bHQgPSBjbGFzc29mUmF3KE8pKSA9PSAnT2JqZWN0JyAmJiBpc0NhbGxhYmxlKE8uY2FsbGVlKSA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGNsYXNzb2YoYXJndW1lbnQpID09PSAnU3ltYm9sJykgdGhyb3cgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZycpO1xuICByZXR1cm4gU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCJ2YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1rZXlzIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIFByb3BlcnRpZXNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwiLyogZ2xvYmFsIEFjdGl2ZVhPYmplY3QgLS0gb2xkIElFLCBXU0ggKi9cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcblxudmFyIEdUID0gJz4nO1xudmFyIExUID0gJzwnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFNDUklQVCA9ICdzY3JpcHQnO1xudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xuXG52YXIgRW1wdHlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxudmFyIHNjcmlwdFRhZyA9IGZ1bmN0aW9uIChjb250ZW50KSB7XG4gIHJldHVybiBMVCArIFNDUklQVCArIEdUICsgY29udGVudCArIExUICsgJy8nICsgU0NSSVBUICsgR1Q7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgQWN0aXZlWCBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVggPSBmdW5jdGlvbiAoYWN0aXZlWERvY3VtZW50KSB7XG4gIGFjdGl2ZVhEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJycpKTtcbiAgYWN0aXZlWERvY3VtZW50LmNsb3NlKCk7XG4gIHZhciB0ZW1wID0gYWN0aXZlWERvY3VtZW50LnBhcmVudFdpbmRvdy5PYmplY3Q7XG4gIGFjdGl2ZVhEb2N1bWVudCA9IG51bGw7IC8vIGF2b2lkIG1lbW9yeSBsZWFrXG4gIHJldHVybiB0ZW1wO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUlGcmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IGRvY3VtZW50Q3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gIHZhciBKUyA9ICdqYXZhJyArIFNDUklQVCArICc6JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaHRtbC5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNDc1XG4gIGlmcmFtZS5zcmMgPSBTdHJpbmcoSlMpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnZG9jdW1lbnQuRj1PYmplY3QnKSk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIHJldHVybiBpZnJhbWVEb2N1bWVudC5GO1xufTtcblxuLy8gQ2hlY2sgZm9yIGRvY3VtZW50LmRvbWFpbiBhbmQgYWN0aXZlIHggc3VwcG9ydFxuLy8gTm8gbmVlZCB0byB1c2UgYWN0aXZlIHggYXBwcm9hY2ggd2hlbiBkb2N1bWVudC5kb21haW4gaXMgbm90IHNldFxuLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbS9pc3N1ZXMvMTUwXG4vLyB2YXJpYXRpb24gb2YgaHR0cHM6Ly9naXRodWIuY29tL2tpdGNhbWJyaWRnZS9lczUtc2hpbS9jb21taXQvNGY3MzhhYzA2NjM0NlxuLy8gYXZvaWQgSUUgR0MgYnVnXG52YXIgYWN0aXZlWERvY3VtZW50O1xudmFyIE51bGxQcm90b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBhY3RpdmVYRG9jdW1lbnQgPSBuZXcgQWN0aXZlWE9iamVjdCgnaHRtbGZpbGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogaWdub3JlICovIH1cbiAgTnVsbFByb3RvT2JqZWN0ID0gdHlwZW9mIGRvY3VtZW50ICE9ICd1bmRlZmluZWQnXG4gICAgPyBkb2N1bWVudC5kb21haW4gJiYgYWN0aXZlWERvY3VtZW50XG4gICAgICA/IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KSAvLyBvbGQgSUVcbiAgICAgIDogTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lKClcbiAgICA6IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KTsgLy8gV1NIXG4gIHZhciBsZW5ndGggPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkgZGVsZXRlIE51bGxQcm90b09iamVjdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2xlbmd0aF1dO1xuICByZXR1cm4gTnVsbFByb3RvT2JqZWN0KCk7XG59O1xuXG5oaWRkZW5LZXlzW0lFX1BST1RPXSA9IHRydWU7XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5Q29uc3RydWN0b3IoKTtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IE51bGxQcm90b09iamVjdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZGVmaW5lUHJvcGVydGllcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmUgKi9cbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpLmY7XG5cbnZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcbiAgfVxufTtcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIHRvU3RyaW5nLmNhbGwoaXQpID09ICdbb2JqZWN0IFdpbmRvd10nXG4gICAgPyBnZXRXaW5kb3dOYW1lcyhpdClcbiAgICA6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzKHRvSW5kZXhlZE9iamVjdChpdCkpO1xufTtcbiIsInZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuZXhwb3J0cy5mID0gd2VsbEtub3duU3ltYm9sO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWw7XG4iLCJ2YXIgcGF0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wYXRoJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSkge1xuICB2YXIgU3ltYm9sID0gcGF0aC5TeW1ib2wgfHwgKHBhdGguU3ltYm9sID0ge30pO1xuICBpZiAoIWhhc093bihTeW1ib2wsIE5BTUUpKSBkZWZpbmVQcm9wZXJ0eShTeW1ib2wsIE5BTUUsIHtcbiAgICB2YWx1ZTogd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mKE5BTUUpXG4gIH0pO1xufTtcbiIsInZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFRBRywgU1RBVElDKSB7XG4gIGlmIChpdCAmJiAhaGFzT3duKGl0ID0gU1RBVElDID8gaXQgOiBpdC5wcm90b3R5cGUsIFRPX1NUUklOR19UQUcpKSB7XG4gICAgZGVmaW5lUHJvcGVydHkoaXQsIFRPX1NUUklOR19UQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogVEFHIH0pO1xuICB9XG59O1xuIiwidmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhQ2FsbGFibGUoZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCk7XG4gICAgfTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG5cbnZhciBlbXB0eSA9IFtdO1xudmFyIGNvbnN0cnVjdCA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnY29uc3RydWN0Jyk7XG52YXIgY29uc3RydWN0b3JSZWdFeHAgPSAvXlxccyooPzpjbGFzc3xmdW5jdGlvbilcXGIvO1xudmFyIGV4ZWMgPSBjb25zdHJ1Y3RvclJlZ0V4cC5leGVjO1xudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSAhY29uc3RydWN0b3JSZWdFeHAuZXhlYyhmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuXG52YXIgaXNDb25zdHJ1Y3Rvck1vZGVybiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3RydWN0KE9iamVjdCwgZW1wdHksIGFyZ3VtZW50KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbnZhciBpc0NvbnN0cnVjdG9yTGVnYWN5ID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgc3dpdGNoIChjbGFzc29mKGFyZ3VtZW50KSkge1xuICAgIGNhc2UgJ0FzeW5jRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0dlbmVyYXRvckZ1bmN0aW9uJzpcbiAgICBjYXNlICdBc3luY0dlbmVyYXRvckZ1bmN0aW9uJzogcmV0dXJuIGZhbHNlO1xuICAgIC8vIHdlIGNhbid0IGNoZWNrIC5wcm90b3R5cGUgc2luY2UgY29uc3RydWN0b3JzIHByb2R1Y2VkIGJ5IC5iaW5kIGhhdmVuJ3QgaXRcbiAgfSByZXR1cm4gSU5DT1JSRUNUX1RPX1NUUklORyB8fCAhIWV4ZWMuY2FsbChjb25zdHJ1Y3RvclJlZ0V4cCwgaW5zcGVjdFNvdXJjZShhcmd1bWVudCkpO1xufTtcblxuLy8gYElzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9ICFjb25zdHJ1Y3QgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgY2FsbGVkO1xuICByZXR1cm4gaXNDb25zdHJ1Y3Rvck1vZGVybihpc0NvbnN0cnVjdG9yTW9kZXJuLmNhbGwpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oT2JqZWN0KVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKGZ1bmN0aW9uICgpIHsgY2FsbGVkID0gdHJ1ZTsgfSlcbiAgICB8fCBjYWxsZWQ7XG59KSA/IGlzQ29uc3RydWN0b3JMZWdhY3kgOiBpc0NvbnN0cnVjdG9yTW9kZXJuO1xuIiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGEgcGFydCBvZiBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5KSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKGlzQ29uc3RydWN0b3IoQykgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBlbHNlIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQztcbn07XG4iLCJ2YXIgYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoYXJyYXlTcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWxBcnJheSkpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcbiIsInZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG52YXIgcHVzaCA9IFtdLnB1c2g7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBmb3JFYWNoLCBtYXAsIGZpbHRlciwgc29tZSwgZXZlcnksIGZpbmQsIGZpbmRJbmRleCwgZmlsdGVyUmVqZWN0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIElTX0ZJTFRFUl9SRUpFQ1QgPSBUWVBFID09IDc7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0LCBzcGVjaWZpY0NyZWF0ZSkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgdGhhdCwgMyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKHNlbGYpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNyZWF0ZSA9IHNwZWNpZmljQ3JlYXRlIHx8IGFycmF5U3BlY2llc0NyZWF0ZTtcbiAgICB2YXIgdGFyZ2V0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSIHx8IElTX0ZJTFRFUl9SRUpFQ1QgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoLmNhbGwodGFyZ2V0LCB2YWx1ZSk7IC8vIGZpbHRlclxuICAgICAgICB9IGVsc2Ugc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSA0OiByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgIC8vIGV2ZXJ5XG4gICAgICAgICAgY2FzZSA3OiBwdXNoLmNhbGwodGFyZ2V0LCB2YWx1ZSk7IC8vIGZpbHRlclJlamVjdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiB0YXJnZXQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuICBmaWx0ZXI6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4gIGZpbmQ6IGNyZWF0ZU1ldGhvZCg1KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcbiAgZmluZEluZGV4OiBjcmVhdGVNZXRob2QoNiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyUmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmlsdGVyaW5nXG4gIGZpbHRlclJlamVjdDogY3JlYXRlTWV0aG9kKDcpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBuYXRpdmVPYmplY3RDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLXdlbGwta25vd24tc3ltYm9sJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcblxudmFyIEhJRERFTiA9IHNoYXJlZEtleSgnaGlkZGVuJyk7XG52YXIgU1lNQk9MID0gJ1N5bWJvbCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1lNQk9MKTtcbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciAkc3RyaW5naWZ5ID0gZ2V0QnVpbHRJbignSlNPTicsICdzdHJpbmdpZnknKTtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbnZhciBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyA9IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbC5mO1xudmFyIG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbnZhciBBbGxTeW1ib2xzID0gc2hhcmVkKCdzeW1ib2xzJyk7XG52YXIgT2JqZWN0UHJvdG90eXBlU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N0cmluZy10by1zeW1ib2wtcmVnaXN0cnknKTtcbnZhciBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Jyk7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBVU0VfU0VUVEVSID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgc2V0U3ltYm9sRGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdENyZWF0ZShuYXRpdmVEZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbiAoTywgUCwgQXR0cmlidXRlcykge1xuICB2YXIgT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIFApO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvcikgZGVsZXRlIE9iamVjdFByb3RvdHlwZVtQXTtcbiAgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yICYmIE8gIT09IE9iamVjdFByb3RvdHlwZSkge1xuICAgIG5hdGl2ZURlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZSwgUCwgT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvcik7XG4gIH1cbn0gOiBuYXRpdmVEZWZpbmVQcm9wZXJ0eTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnLCBkZXNjcmlwdGlvbikge1xuICB2YXIgc3ltYm9sID0gQWxsU3ltYm9sc1t0YWddID0gbmF0aXZlT2JqZWN0Q3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHNldEludGVybmFsU3RhdGUoc3ltYm9sLCB7XG4gICAgdHlwZTogU1lNQk9MLFxuICAgIHRhZzogdGFnLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICB9KTtcbiAgaWYgKCFERVNDUklQVE9SUykgc3ltYm9sLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gIHJldHVybiBzeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBpZiAoTyA9PT0gT2JqZWN0UHJvdG90eXBlKSAkZGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCwgQXR0cmlidXRlcyk7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghQXR0cmlidXRlcy5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhc093bihPLCBISURERU4pKSBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBISURERU4sIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB7fSkpO1xuICAgICAgT1tISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzT3duKE8sIEhJRERFTikgJiYgT1tISURERU5dW2tleV0pIE9bSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBBdHRyaWJ1dGVzID0gbmF0aXZlT2JqZWN0Q3JlYXRlKEF0dHJpYnV0ZXMsIHsgZW51bWVyYWJsZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjcmlwdG9yKE8sIGtleSwgQXR0cmlidXRlcyk7XG4gIH0gcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIGtleSwgQXR0cmlidXRlcyk7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBwcm9wZXJ0aWVzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMocHJvcGVydGllcykuY29uY2F0KCRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMocHJvcGVydGllcykpO1xuICAkZm9yRWFjaChrZXlzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFERVNDUklQVE9SUyB8fCAkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChwcm9wZXJ0aWVzLCBrZXkpKSAkZGVmaW5lUHJvcGVydHkoTywga2V5LCBwcm9wZXJ0aWVzW2tleV0pO1xuICB9KTtcbiAgcmV0dXJuIE87XG59O1xuXG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyBuYXRpdmVPYmplY3RDcmVhdGUoTykgOiAkZGVmaW5lUHJvcGVydGllcyhuYXRpdmVPYmplY3RDcmVhdGUoTyksIFByb3BlcnRpZXMpO1xufTtcblxudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKFYpIHtcbiAgdmFyIFAgPSB0b1Byb3BlcnR5S2V5KFYpO1xuICB2YXIgZW51bWVyYWJsZSA9IG5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodGhpcywgUCk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIFApICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGVudW1lcmFibGUgfHwgIWhhc093bih0aGlzLCBQKSB8fCAhaGFzT3duKEFsbFN5bWJvbHMsIFApIHx8IGhhc093bih0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtQXVxuICAgID8gZW51bWVyYWJsZSA6IHRydWU7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIHZhciBpdCA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgZGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbiAgaWYgKGRlc2NyaXB0b3IgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXNPd24oaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkge1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKGhpZGRlbktleXMsIGtleSkpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTykge1xuICB2YXIgSVNfT0JKRUNUX1BST1RPVFlQRSA9IE8gPT09IE9iamVjdFByb3RvdHlwZTtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyhJU19PQkpFQ1RfUFJPVE9UWVBFID8gT2JqZWN0UHJvdG90eXBlU3ltYm9scyA6IHRvSW5kZXhlZE9iamVjdChPKSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgJGZvckVhY2gobmFtZXMsIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgKCFJU19PQkpFQ1RfUFJPVE9UWVBFIHx8IGhhc093bihPYmplY3RQcm90b3R5cGUsIGtleSkpKSB7XG4gICAgICByZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBgU3ltYm9sYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wtY29uc3RydWN0b3JcbmlmICghTkFUSVZFX1NZTUJPTCkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSAhYXJndW1lbnRzLmxlbmd0aCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICR0b1N0cmluZyhhcmd1bWVudHNbMF0pO1xuICAgIHZhciB0YWcgPSB1aWQoZGVzY3JpcHRpb24pO1xuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90b3R5cGUpIHNldHRlci5jYWxsKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXNPd24odGhpcywgSElEREVOKSAmJiBoYXNPd24odGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzY3JpcHRvcih0aGlzLCB0YWcsIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIFVTRV9TRVRURVIpIHNldFN5bWJvbERlc2NyaXB0b3IoT2JqZWN0UHJvdG90eXBlLCB0YWcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6IHNldHRlciB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcsIGRlc2NyaXB0aW9uKTtcbiAgfTtcblxuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnRhZztcbiAgfSk7XG5cbiAgcmVkZWZpbmUoJFN5bWJvbCwgJ3dpdGhvdXRTZXR0ZXInLCBmdW5jdGlvbiAoZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4gd3JhcCh1aWQoZGVzY3JpcHRpb24pLCBkZXNjcmlwdGlvbik7XG4gIH0pO1xuXG4gIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gIGRlZmluZVByb3BlcnR5TW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHdyYXAod2VsbEtub3duU3ltYm9sKG5hbWUpLCBuYW1lKTtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1TeW1ib2wtZGVzY3JpcHRpb25cbiAgICBuYXRpdmVEZWZpbmVQcm9wZXJ0eSgkU3ltYm9sW1BST1RPVFlQRV0sICdkZXNjcmlwdGlvbicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmRlc2NyaXB0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghSVNfUFVSRSkge1xuICAgICAgcmVkZWZpbmUoT2JqZWN0UHJvdG90eXBlLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIFN5bWJvbDogJFN5bWJvbFxufSk7XG5cbiRmb3JFYWNoKG9iamVjdEtleXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVmaW5lV2VsbEtub3duU3ltYm9sKG5hbWUpO1xufSk7XG5cbiQoeyB0YXJnZXQ6IFNZTUJPTCwgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIC8vIGBTeW1ib2wuZm9yYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuZm9yXG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHN0cmluZyA9ICR0b1N0cmluZyhrZXkpO1xuICAgIGlmIChoYXNPd24oU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSwgc3RyaW5nKSkgcmV0dXJuIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXTtcbiAgICB2YXIgc3ltYm9sID0gJFN5bWJvbChzdHJpbmcpO1xuICAgIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXSA9IHN5bWJvbDtcbiAgICBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bWJvbF0gPSBzdHJpbmc7XG4gICAgcmV0dXJuIHN5bWJvbDtcbiAgfSxcbiAgLy8gYFN5bWJvbC5rZXlGb3JgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5rZXlmb3JcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgaWYgKCFpc1N5bWJvbChzeW0pKSB0aHJvdyBUeXBlRXJyb3Ioc3ltICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcbiAgICBpZiAoaGFzT3duKFN5bWJvbFRvU3RyaW5nUmVnaXN0cnksIHN5bSkpIHJldHVybiBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bV07XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSBmYWxzZTsgfVxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICAvLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzLFxuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5c3ltYm9sc1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBmYWlscyhmdW5jdGlvbiAoKSB7IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mKDEpOyB9KSB9LCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4vLyBgSlNPTi5zdHJpbmdpZnlgIG1ldGhvZCBiZWhhdmlvciB3aXRoIHN5bWJvbHNcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi5zdHJpbmdpZnlcbmlmICgkc3RyaW5naWZ5KSB7XG4gIHZhciBGT1JDRURfSlNPTl9TVFJJTkdJRlkgPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN5bWJvbCA9ICRTeW1ib2woKTtcbiAgICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAgIHJldHVybiAkc3RyaW5naWZ5KFtzeW1ib2xdKSAhPSAnW251bGxdJ1xuICAgICAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gICAgICB8fCAkc3RyaW5naWZ5KHsgYTogc3ltYm9sIH0pICE9ICd7fSdcbiAgICAgIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gICAgICB8fCAkc3RyaW5naWZ5KE9iamVjdChzeW1ib2wpKSAhPSAne30nO1xuICB9KTtcblxuICAkKHsgdGFyZ2V0OiAnSlNPTicsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEX0pTT05fU1RSSU5HSUZZIH0sIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0LCByZXBsYWNlciwgc3BhY2UpIHtcbiAgICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICAgIHZhciBpbmRleCA9IDE7XG4gICAgICB2YXIgJHJlcGxhY2VyO1xuICAgICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpbmRleCkgYXJncy5wdXNoKGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgICAkcmVwbGFjZXIgPSByZXBsYWNlcjtcbiAgICAgIGlmICghaXNPYmplY3QocmVwbGFjZXIpICYmIGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgICAgIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJlcGxhY2VyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKGlzQ2FsbGFibGUoJHJlcGxhY2VyKSkgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgICAgaWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICAgIH07XG4gICAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgICByZXR1cm4gJHN0cmluZ2lmeS5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxuaWYgKCEkU3ltYm9sW1BST1RPVFlQRV1bVE9fUFJJTUlUSVZFXSkge1xuICB2YXIgdmFsdWVPZiA9ICRTeW1ib2xbUFJPVE9UWVBFXS52YWx1ZU9mO1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB2YWx1ZU9mLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0pO1xufVxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11gIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgU1lNQk9MKTtcblxuaGlkZGVuS2V5c1tISURERU5dID0gdHJ1ZTtcbiIsIi8vIGBTeW1ib2wucHJvdG90eXBlLmRlc2NyaXB0aW9uYCBnZXR0ZXJcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS5kZXNjcmlwdGlvblxuJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcblxudmFyIE5hdGl2ZVN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG5cbmlmIChERVNDUklQVE9SUyAmJiBpc0NhbGxhYmxlKE5hdGl2ZVN5bWJvbCkgJiYgKCEoJ2Rlc2NyaXB0aW9uJyBpbiBOYXRpdmVTeW1ib2wucHJvdG90eXBlKSB8fFxuICAvLyBTYWZhcmkgMTIgYnVnXG4gIE5hdGl2ZVN5bWJvbCgpLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWRcbikpIHtcbiAgdmFyIEVtcHR5U3RyaW5nRGVzY3JpcHRpb25TdG9yZSA9IHt9O1xuICAvLyB3cmFwIFN5bWJvbCBjb25zdHJ1Y3RvciBmb3IgY29ycmVjdCB3b3JrIHdpdGggdW5kZWZpbmVkIGRlc2NyaXB0aW9uXG4gIHZhciBTeW1ib2xXcmFwcGVyID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIHZhciBkZXNjcmlwdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPCAxIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogU3RyaW5nKGFyZ3VtZW50c1swXSk7XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMgaW5zdGFuY2VvZiBTeW1ib2xXcmFwcGVyXG4gICAgICA/IG5ldyBOYXRpdmVTeW1ib2woZGVzY3JpcHRpb24pXG4gICAgICAvLyBpbiBFZGdlIDEzLCBTdHJpbmcoU3ltYm9sKHVuZGVmaW5lZCkpID09PSAnU3ltYm9sKHVuZGVmaW5lZCknXG4gICAgICA6IGRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQgPyBOYXRpdmVTeW1ib2woKSA6IE5hdGl2ZVN5bWJvbChkZXNjcmlwdGlvbik7XG4gICAgaWYgKGRlc2NyaXB0aW9uID09PSAnJykgRW1wdHlTdHJpbmdEZXNjcmlwdGlvblN0b3JlW3Jlc3VsdF0gPSB0cnVlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoU3ltYm9sV3JhcHBlciwgTmF0aXZlU3ltYm9sKTtcbiAgdmFyIHN5bWJvbFByb3RvdHlwZSA9IFN5bWJvbFdyYXBwZXIucHJvdG90eXBlID0gTmF0aXZlU3ltYm9sLnByb3RvdHlwZTtcbiAgc3ltYm9sUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ltYm9sV3JhcHBlcjtcblxuICB2YXIgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90b3R5cGUudG9TdHJpbmc7XG4gIHZhciBuYXRpdmVTeW1ib2wgPSBTdHJpbmcoTmF0aXZlU3ltYm9sKCd0ZXN0JykpID09ICdTeW1ib2wodGVzdCknO1xuICB2YXIgcmVnZXhwID0gL15TeW1ib2xcXCgoLiopXFwpW14pXSskLztcbiAgZGVmaW5lUHJvcGVydHkoc3ltYm9sUHJvdG90eXBlLCAnZGVzY3JpcHRpb24nLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICB2YXIgc3ltYm9sID0gaXNPYmplY3QodGhpcykgPyB0aGlzLnZhbHVlT2YoKSA6IHRoaXM7XG4gICAgICB2YXIgc3RyaW5nID0gc3ltYm9sVG9TdHJpbmcuY2FsbChzeW1ib2wpO1xuICAgICAgaWYgKGhhc093bihFbXB0eVN0cmluZ0Rlc2NyaXB0aW9uU3RvcmUsIHN5bWJvbCkpIHJldHVybiAnJztcbiAgICAgIHZhciBkZXNjID0gbmF0aXZlU3ltYm9sID8gc3RyaW5nLnNsaWNlKDcsIC0xKSA6IHN0cmluZy5yZXBsYWNlKHJlZ2V4cCwgJyQxJyk7XG4gICAgICByZXR1cm4gZGVzYyA9PT0gJycgPyB1bmRlZmluZWQgOiBkZXNjO1xuICAgIH1cbiAgfSk7XG5cbiAgJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICBTeW1ib2w6IFN5bWJvbFdyYXBwZXJcbiAgfSk7XG59XG4iLCJ2YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS13ZWxsLWtub3duLXN5bWJvbCcpO1xuXG4vLyBgU3ltYm9sLmFzeW5jSXRlcmF0b3JgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5hc3luY2l0ZXJhdG9yXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2FzeW5jSXRlcmF0b3InKTtcbiIsInZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLXdlbGwta25vd24tc3ltYm9sJyk7XG5cbi8vIGBTeW1ib2wuaGFzSW5zdGFuY2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5oYXNpbnN0YW5jZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdoYXNJbnN0YW5jZScpO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC5pc0NvbmNhdFNwcmVhZGFibGVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5pc2NvbmNhdHNwcmVhZGFibGVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG4iLCJ2YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS13ZWxsLWtub3duLXN5bWJvbCcpO1xuXG4vLyBgU3ltYm9sLml0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbiIsInZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLXdlbGwta25vd24tc3ltYm9sJyk7XG5cbi8vIGBTeW1ib2wubWF0Y2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5tYXRjaFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC5tYXRjaEFsbGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLm1hdGNoYWxsXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ21hdGNoQWxsJyk7XG4iLCJ2YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS13ZWxsLWtub3duLXN5bWJvbCcpO1xuXG4vLyBgU3ltYm9sLnJlcGxhY2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5yZXBsYWNlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3JlcGxhY2UnKTtcbiIsInZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLXdlbGwta25vd24tc3ltYm9sJyk7XG5cbi8vIGBTeW1ib2wuc2VhcmNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuc2VhcmNoXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NlYXJjaCcpO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC5zcGVjaWVzYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuc3BlY2llc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG4iLCJ2YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS13ZWxsLWtub3duLXN5bWJvbCcpO1xuXG4vLyBgU3ltYm9sLnNwbGl0YCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuc3BsaXRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc3BsaXQnKTtcbiIsInZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLXdlbGwta25vd24tc3ltYm9sJyk7XG5cbi8vIGBTeW1ib2wudG9QcmltaXRpdmVgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC50b3ByaW1pdGl2ZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC50b1N0cmluZ1RhZ2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnRvc3RyaW5ndGFnXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG4iLCJ2YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS13ZWxsLWtub3duLXN5bWJvbCcpO1xuXG4vLyBgU3ltYm9sLnVuc2NvcGFibGVzYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudW5zY29wYWJsZXNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndW5zY29wYWJsZXMnKTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCJ2YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyJyk7XG5cbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gKE8pIHtcbiAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzT3duKG9iamVjdCwgSUVfUFJPVE8pKSByZXR1cm4gb2JqZWN0W0lFX1BST1RPXTtcbiAgdmFyIGNvbnN0cnVjdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBpZiAoaXNDYWxsYWJsZShjb25zdHJ1Y3RvcikgJiYgb2JqZWN0IGluc3RhbmNlb2YgY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsInZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdvYmplY3QnIHx8IGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArIFN0cmluZyhhcmd1bWVudCkgKyAnIGFzIGEgcHJvdG90eXBlJyk7XG59O1xuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gLS0gc2FmZSAqL1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qtc2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gICAgc2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0O1xuICAgIHNldHRlci5jYWxsKHRlc3QsIFtdKTtcbiAgICBDT1JSRUNUX1NFVFRFUiA9IHRlc3QgaW5zdGFuY2VvZiBBcnJheTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICBhbk9iamVjdChPKTtcbiAgICBhUG9zc2libGVQcm90b3R5cGUocHJvdG8pO1xuICAgIGlmIChDT1JSRUNUX1NFVFRFUikgc2V0dGVyLmNhbGwoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG4vLyBgSW5zdGFsbEVycm9yQ2F1c2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWVycm9yLWNhdXNlLyNzZWMtZXJyb3JvYmplY3RzLWluc3RhbGwtZXJyb3ItY2F1c2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmICdjYXVzZScgaW4gb3B0aW9ucykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCAnY2F1c2UnLCBvcHRpb25zLmNhdXNlKTtcbiAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG90eXBlW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gZ2V0TWV0aG9kKGl0LCBJVEVSQVRPUilcbiAgICB8fCBnZXRNZXRob2QoaXQsICdAQGl0ZXJhdG9yJylcbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsInZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsIHVzaW5nSXRlcmF0b3IpIHtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBnZXRJdGVyYXRvck1ldGhvZChhcmd1bWVudCkgOiB1c2luZ0l0ZXJhdG9yO1xuICBpZiAoYUNhbGxhYmxlKGl0ZXJhdG9yTWV0aG9kKSkgcmV0dXJuIGFuT2JqZWN0KGl0ZXJhdG9yTWV0aG9kLmNhbGwoYXJndW1lbnQpKTtcbiAgdGhyb3cgVHlwZUVycm9yKFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBpdGVyYWJsZScpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwga2luZCwgdmFsdWUpIHtcbiAgdmFyIGlubmVyUmVzdWx0LCBpbm5lckVycm9yO1xuICBhbk9iamVjdChpdGVyYXRvcik7XG4gIHRyeSB7XG4gICAgaW5uZXJSZXN1bHQgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICBpZiAoIWlubmVyUmVzdWx0KSB7XG4gICAgICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlubmVyUmVzdWx0ID0gaW5uZXJSZXN1bHQuY2FsbChpdGVyYXRvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW5uZXJFcnJvciA9IHRydWU7XG4gICAgaW5uZXJSZXN1bHQgPSBlcnJvcjtcbiAgfVxuICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gIGlmIChpbm5lckVycm9yKSB0aHJvdyBpbm5lclJlc3VsdDtcbiAgYW5PYmplY3QoaW5uZXJSZXN1bHQpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxudmFyIFJlc3VsdCA9IGZ1bmN0aW9uIChzdG9wcGVkLCByZXN1bHQpIHtcbiAgdGhpcy5zdG9wcGVkID0gc3RvcHBlZDtcbiAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgdW5ib3VuZEZ1bmN0aW9uLCBvcHRpb25zKSB7XG4gIHZhciB0aGF0ID0gb3B0aW9ucyAmJiBvcHRpb25zLnRoYXQ7XG4gIHZhciBBU19FTlRSSUVTID0gISEob3B0aW9ucyAmJiBvcHRpb25zLkFTX0VOVFJJRVMpO1xuICB2YXIgSVNfSVRFUkFUT1IgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfSVRFUkFUT1IpO1xuICB2YXIgSU5URVJSVVBURUQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSU5URVJSVVBURUQpO1xuICB2YXIgZm4gPSBiaW5kKHVuYm91bmRGdW5jdGlvbiwgdGhhdCwgMSArIEFTX0VOVFJJRVMgKyBJTlRFUlJVUFRFRCk7XG4gIHZhciBpdGVyYXRvciwgaXRlckZuLCBpbmRleCwgbGVuZ3RoLCByZXN1bHQsIG5leHQsIHN0ZXA7XG5cbiAgdmFyIHN0b3AgPSBmdW5jdGlvbiAoY29uZGl0aW9uKSB7XG4gICAgaWYgKGl0ZXJhdG9yKSBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgY29uZGl0aW9uKTtcbiAgICByZXR1cm4gbmV3IFJlc3VsdCh0cnVlLCBjb25kaXRpb24pO1xuICB9O1xuXG4gIHZhciBjYWxsRm4gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAoQVNfRU5UUklFUykge1xuICAgICAgYW5PYmplY3QodmFsdWUpO1xuICAgICAgcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWVbMF0sIHZhbHVlWzFdLCBzdG9wKSA6IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgfSByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZSwgc3RvcCkgOiBmbih2YWx1ZSk7XG4gIH07XG5cbiAgaWYgKElTX0lURVJBVE9SKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyRm4gPSBnZXRJdGVyYXRvck1ldGhvZChpdGVyYWJsZSk7XG4gICAgaWYgKCFpdGVyRm4pIHRocm93IFR5cGVFcnJvcihTdHJpbmcoaXRlcmFibGUpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbiAgICAvLyBvcHRpbWlzYXRpb24gZm9yIGFycmF5IGl0ZXJhdG9yc1xuICAgIGlmIChpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlckZuKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZXJhYmxlKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbEZuKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0IGluc3RhbmNlb2YgUmVzdWx0KSByZXR1cm4gcmVzdWx0O1xuICAgICAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG4gICAgfVxuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoaXRlcmFibGUsIGl0ZXJGbik7XG4gIH1cblxuICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgd2hpbGUgKCEoc3RlcCA9IG5leHQuY2FsbChpdGVyYXRvcikpLmRvbmUpIHtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gY2FsbEZuKHN0ZXAudmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdvYmplY3QnICYmIHJlc3VsdCAmJiByZXN1bHQgaW5zdGFuY2VvZiBSZXN1bHQpIHJldHVybiByZXN1bHQ7XG4gIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGluc3RhbGxFcnJvckNhdXNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxudmFyICRBZ2dyZWdhdGVFcnJvciA9IGZ1bmN0aW9uIEFnZ3JlZ2F0ZUVycm9yKGVycm9ycywgbWVzc2FnZSAvKiAsIG9wdGlvbnMgKi8pIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICBpZiAoISh0aGF0IGluc3RhbmNlb2YgJEFnZ3JlZ2F0ZUVycm9yKSkgcmV0dXJuIG5ldyAkQWdncmVnYXRlRXJyb3IoZXJyb3JzLCBtZXNzYWdlLCBvcHRpb25zKTtcbiAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vZXJyb3ItbWVzc2FnZSAtLSBleHBlY3RlZFxuICAgIHRoYXQgPSBzZXRQcm90b3R5cGVPZihuZXcgRXJyb3IodW5kZWZpbmVkKSwgZ2V0UHJvdG90eXBlT2YodGhhdCkpO1xuICB9XG4gIGlmIChtZXNzYWdlICE9PSB1bmRlZmluZWQpIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnbWVzc2FnZScsIHRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgaW5zdGFsbEVycm9yQ2F1c2UodGhhdCwgb3B0aW9ucyk7XG4gIHZhciBlcnJvcnNBcnJheSA9IFtdO1xuICBpdGVyYXRlKGVycm9ycywgZXJyb3JzQXJyYXkucHVzaCwgeyB0aGF0OiBlcnJvcnNBcnJheSB9KTtcbiAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHRoYXQsICdlcnJvcnMnLCBlcnJvcnNBcnJheSk7XG4gIHJldHVybiB0aGF0O1xufTtcblxuaWYgKHNldFByb3RvdHlwZU9mKSBzZXRQcm90b3R5cGVPZigkQWdncmVnYXRlRXJyb3IsIEVycm9yKTtcbmVsc2UgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcygkQWdncmVnYXRlRXJyb3IsIEVycm9yKTtcblxuJEFnZ3JlZ2F0ZUVycm9yLnByb3RvdHlwZSA9IGNyZWF0ZShFcnJvci5wcm90b3R5cGUsIHtcbiAgY29uc3RydWN0b3I6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAkQWdncmVnYXRlRXJyb3IpLFxuICBtZXNzYWdlOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgJycpLFxuICBuYW1lOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgJ0FnZ3JlZ2F0ZUVycm9yJylcbn0pO1xuXG4vLyBgQWdncmVnYXRlRXJyb3JgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFnZ3JlZ2F0ZS1lcnJvci1jb25zdHJ1Y3RvclxuJCh7IGdsb2JhbDogdHJ1ZSB9LCB7XG4gIEFnZ3JlZ2F0ZUVycm9yOiAkQWdncmVnYXRlRXJyb3Jcbn0pO1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG52YXIgVU5TQ09QQUJMRVMgPSB3ZWxsS25vd25TeW1ib2woJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbi8vIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuaWYgKEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHtcbiAgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihBcnJheVByb3RvdHlwZSwgVU5TQ09QQUJMRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IGNyZWF0ZShudWxsKVxuICB9KTtcbn1cblxuLy8gYWRkIGEga2V5IHRvIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcmVsYXRpdmUtaW5kZXhpbmctbWV0aG9kXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSB9LCB7XG4gIGF0OiBmdW5jdGlvbiBhdChpbmRleCkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciByZWxhdGl2ZUluZGV4ID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gICAgdmFyIGsgPSByZWxhdGl2ZUluZGV4ID49IDAgPyByZWxhdGl2ZUluZGV4IDogbGVuICsgcmVsYXRpdmVJbmRleDtcbiAgICByZXR1cm4gKGsgPCAwIHx8IGsgPj0gbGVuKSA/IHVuZGVmaW5lZCA6IE9ba107XG4gIH1cbn0pO1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdhdCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIHByb3BlcnR5S2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICBpZiAocHJvcGVydHlLZXkgaW4gb2JqZWN0KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwgcHJvcGVydHlLZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtwcm9wZXJ0eUtleV0gPSB2YWx1ZTtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIC8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc3XG4gIHJldHVybiBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gYXJyYXkuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGZvbzogMSB9O1xuICAgIH07XG4gICAgcmV0dXJuIGFycmF5W01FVEhPRF9OQU1FXShCb29sZWFuKS5mb28gIT09IDE7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFID0gd2VsbEtub3duU3ltYm9sKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjtcbnZhciBNQVhJTVVNX0FMTE9XRURfSU5ERVhfRVhDRUVERUQgPSAnTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkJztcblxuLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4vLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQgPSBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBhcnJheSA9IFtdO1xuICBhcnJheVtJU19DT05DQVRfU1BSRUFEQUJMRV0gPSBmYWxzZTtcbiAgcmV0dXJuIGFycmF5LmNvbmNhdCgpWzBdICE9PSBhcnJheTtcbn0pO1xuXG52YXIgU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnY29uY2F0Jyk7XG5cbnZhciBpc0NvbmNhdFNwcmVhZGFibGUgPSBmdW5jdGlvbiAoTykge1xuICBpZiAoIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzcHJlYWRhYmxlID0gT1tJU19DT05DQVRfU1BSRUFEQUJMRV07XG4gIHJldHVybiBzcHJlYWRhYmxlICE9PSB1bmRlZmluZWQgPyAhIXNwcmVhZGFibGUgOiBpc0FycmF5KE8pO1xufTtcblxudmFyIEZPUkNFRCA9ICFJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUIHx8ICFTUEVDSUVTX1NVUFBPUlQ7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuY29uY2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmNvbmNhdFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQGlzQ29uY2F0U3ByZWFkYWJsZSBhbmQgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBjb25jYXQ6IGZ1bmN0aW9uIGNvbmNhdChhcmcpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIHZhciBuID0gMDtcbiAgICB2YXIgaSwgaywgbGVuZ3RoLCBsZW4sIEU7XG4gICAgZm9yIChpID0gLTEsIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgRSA9IGkgPT09IC0xID8gTyA6IGFyZ3VtZW50c1tpXTtcbiAgICAgIGlmIChpc0NvbmNhdFNwcmVhZGFibGUoRSkpIHtcbiAgICAgICAgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoRSk7XG4gICAgICAgIGlmIChuICsgbGVuID4gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgVHlwZUVycm9yKE1BWElNVU1fQUxMT1dFRF9JTkRFWF9FWENFRURFRCk7XG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBsZW47IGsrKywgbisrKSBpZiAoayBpbiBFKSBjcmVhdGVQcm9wZXJ0eShBLCBuLCBFW2tdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChuID49IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93IFR5cGVFcnJvcihNQVhJTVVNX0FMTE9XRURfSU5ERVhfRVhDRUVERUQpO1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShBLCBuKyssIEUpO1xuICAgICAgfVxuICAgIH1cbiAgICBBLmxlbmd0aCA9IG47XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmNvcHl3aXRoaW5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtY29weXdpdGhpbiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IFtdLmNvcHlXaXRoaW4gfHwgZnVuY3Rpb24gY29weVdpdGhpbih0YXJnZXQgLyogPSAwICovLCBzdGFydCAvKiA9IDAsIGVuZCA9IEBsZW5ndGggKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICB2YXIgdG8gPSB0b0Fic29sdXRlSW5kZXgodGFyZ2V0LCBsZW4pO1xuICB2YXIgZnJvbSA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgdmFyIGVuZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgY291bnQgPSBtaW4oKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKSkgLSBmcm9tLCBsZW4gLSB0byk7XG4gIHZhciBpbmMgPSAxO1xuICBpZiAoZnJvbSA8IHRvICYmIHRvIDwgZnJvbSArIGNvdW50KSB7XG4gICAgaW5jID0gLTE7XG4gICAgZnJvbSArPSBjb3VudCAtIDE7XG4gICAgdG8gKz0gY291bnQgLSAxO1xuICB9XG4gIHdoaWxlIChjb3VudC0tID4gMCkge1xuICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICBlbHNlIGRlbGV0ZSBPW3RvXTtcbiAgICB0byArPSBpbmM7XG4gICAgZnJvbSArPSBpbmM7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY29weVdpdGhpbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1jb3B5LXdpdGhpbicpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5jb3B5d2l0aGluXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSB9LCB7XG4gIGNvcHlXaXRoaW46IGNvcHlXaXRoaW5cbn0pO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdjb3B5V2l0aGluJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUsIGFyZ3VtZW50KSB7XG4gIHZhciBtZXRob2QgPSBbXVtNRVRIT0RfTkFNRV07XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbCxuby10aHJvdy1saXRlcmFsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgbWV0aG9kLmNhbGwobnVsbCwgYXJndW1lbnQgfHwgZnVuY3Rpb24gKCkgeyB0aHJvdyAxOyB9LCAxKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGV2ZXJ5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmV2ZXJ5O1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ2V2ZXJ5Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFTVFJJQ1RfTUVUSE9EIH0sIHtcbiAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRldmVyeSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsbGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWxsXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZpbGwodmFsdWUgLyogLCBzdGFydCA9IDAsIGVuZCA9IEBsZW5ndGggKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFyZ3VtZW50c0xlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGxlbmd0aCk7XG4gIHZhciBlbmQgPSBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgZW5kUG9zID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW5ndGgpO1xuICB3aGlsZSAoZW5kUG9zID4gaW5kZXgpIE9baW5kZXgrK10gPSB2YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmlsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1maWxsJyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maWxsYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbGxcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlIH0sIHtcbiAgZmlsbDogZmlsbFxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2ZpbGwnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmlsdGVyO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdmaWx0ZXInKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsdGVyXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZmlsdGVyKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maW5kO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbnZhciBGSU5EID0gJ2ZpbmQnO1xudmFyIFNLSVBTX0hPTEVTID0gdHJ1ZTtcblxuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChGSU5EIGluIFtdKSBBcnJheSgxKVtGSU5EXShmdW5jdGlvbiAoKSB7IFNLSVBTX0hPTEVTID0gZmFsc2U7IH0pO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU0tJUFNfSE9MRVMgfSwge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoRklORCk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmluZEluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbmRJbmRleDtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xuXG52YXIgRklORF9JTkRFWCA9ICdmaW5kSW5kZXgnO1xudmFyIFNLSVBTX0hPTEVTID0gdHJ1ZTtcblxuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChGSU5EX0lOREVYIGluIFtdKSBBcnJheSgxKVtGSU5EX0lOREVYXShmdW5jdGlvbiAoKSB7IFNLSVBTX0hPTEVTID0gZmFsc2U7IH0pO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kaW5kZXhcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFNLSVBTX0hPTEVTIH0sIHtcbiAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmRJbmRleCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKEZJTkRfSU5ERVgpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG5cbi8vIGBGbGF0dGVuSW50b0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gZnVuY3Rpb24gKHRhcmdldCwgb3JpZ2luYWwsIHNvdXJjZSwgc291cmNlTGVuLCBzdGFydCwgZGVwdGgsIG1hcHBlciwgdGhpc0FyZykge1xuICB2YXIgdGFyZ2V0SW5kZXggPSBzdGFydDtcbiAgdmFyIHNvdXJjZUluZGV4ID0gMDtcbiAgdmFyIG1hcEZuID0gbWFwcGVyID8gYmluZChtYXBwZXIsIHRoaXNBcmcsIDMpIDogZmFsc2U7XG4gIHZhciBlbGVtZW50LCBlbGVtZW50TGVuO1xuXG4gIHdoaWxlIChzb3VyY2VJbmRleCA8IHNvdXJjZUxlbikge1xuICAgIGlmIChzb3VyY2VJbmRleCBpbiBzb3VyY2UpIHtcbiAgICAgIGVsZW1lbnQgPSBtYXBGbiA/IG1hcEZuKHNvdXJjZVtzb3VyY2VJbmRleF0sIHNvdXJjZUluZGV4LCBvcmlnaW5hbCkgOiBzb3VyY2Vbc291cmNlSW5kZXhdO1xuXG4gICAgICBpZiAoZGVwdGggPiAwICYmIGlzQXJyYXkoZWxlbWVudCkpIHtcbiAgICAgICAgZWxlbWVudExlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKGVsZW1lbnQpO1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgZWxlbWVudExlbiwgdGFyZ2V0SW5kZXgsIGRlcHRoIC0gMSkgLSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRhcmdldEluZGV4ID49IDB4MUZGRkZGRkZGRkZGRkYpIHRocm93IFR5cGVFcnJvcignRXhjZWVkIHRoZSBhY2NlcHRhYmxlIGFycmF5IGxlbmd0aCcpO1xuICAgICAgICB0YXJnZXRbdGFyZ2V0SW5kZXhdID0gZWxlbWVudDtcbiAgICAgIH1cblxuICAgICAgdGFyZ2V0SW5kZXgrKztcbiAgICB9XG4gICAgc291cmNlSW5kZXgrKztcbiAgfVxuICByZXR1cm4gdGFyZ2V0SW5kZXg7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW5JbnRvQXJyYXk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmxhdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mbGF0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSB9LCB7XG4gIGZsYXQ6IGZ1bmN0aW9uIGZsYXQoLyogZGVwdGhBcmcgPSAxICovKSB7XG4gICAgdmFyIGRlcHRoQXJnID0gYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBzb3VyY2VMZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICBBLmxlbmd0aCA9IGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCBkZXB0aEFyZyA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlck9ySW5maW5pdHkoZGVwdGhBcmcpKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mbGF0TWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZsYXRtYXBcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlIH0sIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBBO1xuICAgIGFDYWxsYWJsZShjYWxsYmFja2ZuKTtcbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIEEubGVuZ3RoID0gZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdmb3JFYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG5tb2R1bGUuZXhwb3J0cyA9ICFTVFJJQ1RfTUVUSE9EID8gZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbn0gOiBbXS5mb3JFYWNoO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mb3ItZWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFtdLmZvckVhY2ggIT0gZm9yRWFjaCB9LCB7XG4gIGZvckVhY2g6IGZvckVhY2hcbn0pO1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgRU5UUklFUykge1xuICB0cnkge1xuICAgIHJldHVybiBFTlRSSUVTID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbi8vIGBBcnJheS5mcm9tYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuZnJvbVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgdmFyIElTX0NPTlNUUlVDVE9SID0gaXNDb25zdHJ1Y3Rvcih0aGlzKTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBtYXBmbiA9IGFyZ3VtZW50c0xlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgaWYgKG1hcHBpbmcpIG1hcGZuID0gYmluZChtYXBmbiwgYXJndW1lbnRzTGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGdldEl0ZXJhdG9yTWV0aG9kKE8pO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yLCBuZXh0LCB2YWx1ZTtcbiAgLy8gaWYgdGhlIHRhcmdldCBpcyBub3QgaXRlcmFibGUgb3IgaXQncyBhbiBhcnJheSB3aXRoIHRoZSBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIGEgc2ltcGxlIGNhc2VcbiAgaWYgKGl0ZXJhdG9yTWV0aG9kICYmICEodGhpcyA9PSBBcnJheSAmJiBpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlcmF0b3JNZXRob2QpKSkge1xuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoTywgaXRlcmF0b3JNZXRob2QpO1xuICAgIG5leHQgPSBpdGVyYXRvci5uZXh0O1xuICAgIHJlc3VsdCA9IElTX0NPTlNUUlVDVE9SID8gbmV3IHRoaXMoKSA6IFtdO1xuICAgIGZvciAoOyEoc3RlcCA9IG5leHQuY2FsbChpdGVyYXRvcikpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWU7XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHJlc3VsdCA9IElTX0NPTlNUUlVDVE9SID8gbmV3IHRoaXMobGVuZ3RoKSA6IEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgY2FsbGVkID0gMDtcbiAgdmFyIGl0ZXJhdG9yV2l0aFJldHVybiA9IHtcbiAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBkb25lOiAhIWNhbGxlZCsrIH07XG4gICAgfSxcbiAgICAncmV0dXJuJzogZnVuY3Rpb24gKCkge1xuICAgICAgU0FGRV9DTE9TSU5HID0gdHJ1ZTtcbiAgICB9XG4gIH07XG4gIGl0ZXJhdG9yV2l0aFJldHVybltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1mcm9tLCBuby10aHJvdy1saXRlcmFsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIEFycmF5LmZyb20oaXRlcmF0b3JXaXRoUmV0dXJuLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBTS0lQX0NMT1NJTkcpIHtcbiAgaWYgKCFTS0lQX0NMT1NJTkcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB2YXIgSVRFUkFUSU9OX1NVUFBPUlQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgb2JqZWN0W0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiBJVEVSQVRJT05fU1VQUE9SVCA9IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4ZWMob2JqZWN0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gSVRFUkFUSU9OX1NVUFBPUlQ7XG59O1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mcm9tJyk7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbicpO1xuXG52YXIgSU5DT1JSRUNUX0lURVJBVElPTiA9ICFjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24oZnVuY3Rpb24gKGl0ZXJhYmxlKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1mcm9tIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIEFycmF5LmZyb20oaXRlcmFibGUpO1xufSk7XG5cbi8vIGBBcnJheS5mcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuZnJvbVxuJCh7IHRhcmdldDogJ0FycmF5Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgZnJvbTogZnJvbVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmNsdWRlcztcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSB9LCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhlbCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gJGluY2x1ZGVzKHRoaXMsIGVsLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdpbmNsdWRlcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWluZGV4b2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIG5hdGl2ZUluZGV4T2YgPSBbXS5pbmRleE9mO1xuXG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhbmF0aXZlSW5kZXhPZiAmJiAxIC8gWzFdLmluZGV4T2YoMSwgLTApIDwgMDtcbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnaW5kZXhPZicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogTkVHQVRJVkVfWkVSTyB8fCAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gTkVHQVRJVkVfWkVST1xuICAgICAgLy8gY29udmVydCAtMCB0byArMFxuICAgICAgPyBuYXRpdmVJbmRleE9mLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMFxuICAgICAgOiAkaW5kZXhPZih0aGlzLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG4vLyBgQXJyYXkuaXNBcnJheWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmlzYXJyYXlcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUgfSwge1xuICBpc0FycmF5OiBpc0FycmF5XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBmYWxzZTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVgIG9iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLW9iamVjdFxudmFyIEl0ZXJhdG9yUHJvdG90eXBlLCBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUsIGFycmF5SXRlcmF0b3I7XG5cbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLWFycmF5LXByb3RvdHlwZS1rZXlzIC0tIHNhZmUgKi9cbmlmIChbXS5rZXlzKSB7XG4gIGFycmF5SXRlcmF0b3IgPSBbXS5rZXlzKCk7XG4gIC8vIFNhZmFyaSA4IGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxuICBpZiAoISgnbmV4dCcgaW4gYXJyYXlJdGVyYXRvcikpIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSB0cnVlO1xuICBlbHNlIHtcbiAgICBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihnZXRQcm90b3R5cGVPZihhcnJheUl0ZXJhdG9yKSk7XG4gICAgaWYgKFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkgSXRlcmF0b3JQcm90b3R5cGUgPSBQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cbn1cblxudmFyIE5FV19JVEVSQVRPUl9QUk9UT1RZUEUgPSBJdGVyYXRvclByb3RvdHlwZSA9PSB1bmRlZmluZWQgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgdGVzdCA9IHt9O1xuICAvLyBGRjQ0LSBsZWdhY3kgaXRlcmF0b3JzIGNhc2VcbiAgcmV0dXJuIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXS5jYWxsKHRlc3QpICE9PSB0ZXN0O1xufSk7XG5cbmlmIChORVdfSVRFUkFUT1JfUFJPVE9UWVBFKSBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuZWxzZSBpZiAoSVNfUFVSRSkgSXRlcmF0b3JQcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1AQGl0ZXJhdG9yXG5pZiAoIWlzQ2FsbGFibGUoSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICByZWRlZmluZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBJdGVyYXRvclByb3RvdHlwZTogSXRlcmF0b3JQcm90b3R5cGUsXG4gIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlNcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JDb25zdHJ1Y3RvciwgVE9fU1RSSU5HX1RBRywgZmFsc2UsIHRydWUpO1xuICBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICByZXR1cm4gSXRlcmF0b3JDb25zdHJ1Y3Rvcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBGdW5jdGlvbk5hbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyYXRvci1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5QUk9QRVI7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuQ09ORklHVVJBQkxFO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgaW4gSXRlcmFibGVQcm90b3R5cGUpIHJldHVybiBJdGVyYWJsZVByb3RvdHlwZVtLSU5EXTtcbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcyk7IH07XG4gIH07XG5cbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSBmYWxzZTtcbiAgdmFyIEl0ZXJhYmxlUHJvdG90eXBlID0gSXRlcmFibGUucHJvdG90eXBlO1xuICB2YXIgbmF0aXZlSXRlcmF0b3IgPSBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl1cbiAgICB8fCBJdGVyYWJsZVByb3RvdHlwZVsnQEBpdGVyYXRvciddXG4gICAgfHwgREVGQVVMVCAmJiBJdGVyYWJsZVByb3RvdHlwZVtERUZBVUxUXTtcbiAgdmFyIGRlZmF1bHRJdGVyYXRvciA9ICFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIG5hdGl2ZUl0ZXJhdG9yIHx8IGdldEl0ZXJhdGlvbk1ldGhvZChERUZBVUxUKTtcbiAgdmFyIGFueU5hdGl2ZUl0ZXJhdG9yID0gTkFNRSA9PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0NhbGxhYmxlKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gICAgICAgICAgcmVkZWZpbmUoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICBpZiAoSVNfUFVSRSkgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgICB9XG4gIH1cblxuICAvLyBmaXggQXJyYXkucHJvdG90eXBlLnsgdmFsdWVzLCBAQGl0ZXJhdG9yIH0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChQUk9QRVJfRlVOQ1RJT05fTkFNRSAmJiBERUZBVUxUID09IFZBTFVFUyAmJiBuYXRpdmVJdGVyYXRvciAmJiBuYXRpdmVJdGVyYXRvci5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBpZiAoIUlTX1BVUkUgJiYgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYWJsZVByb3RvdHlwZSwgJ25hbWUnLCBWQUxVRVMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSB0cnVlO1xuICAgICAgZGVmYXVsdEl0ZXJhdG9yID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmF0aXZlSXRlcmF0b3IuY2FsbCh0aGlzKTsgfTtcbiAgICB9XG4gIH1cblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgcmVkZWZpbmUoSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgcmVkZWZpbmUoSXRlcmFibGVQcm90b3R5cGUsIElURVJBVE9SLCBkZWZhdWx0SXRlcmF0b3IsIHsgbmFtZTogREVGQVVMVCB9KTtcbiAgfVxuICBJdGVyYXRvcnNbTkFNRV0gPSBkZWZhdWx0SXRlcmF0b3I7XG5cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtaXRlcmF0b3InKTtcblxudmFyIEFSUkFZX0lURVJBVE9SID0gJ0FycmF5IEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKEFSUkFZX0lURVJBVE9SKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5lbnRyaWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmVudHJpZXNcbi8vIGBBcnJheS5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS52YWx1ZXNcbi8vIGBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEBpdGVyYXRvclxuLy8gYENyZWF0ZUFycmF5SXRlcmF0b3JgIGludGVybmFsIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lYXJyYXlpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgdGFyZ2V0ID0gc3RhdGUudGFyZ2V0O1xuICB2YXIga2luZCA9IHN0YXRlLmtpbmQ7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4Kys7XG4gIGlmICghdGFyZ2V0IHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpIHtcbiAgICBzdGF0ZS50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHsgdmFsdWU6IGluZGV4LCBkb25lOiBmYWxzZSB9O1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHsgdmFsdWU6IHRhcmdldFtpbmRleF0sIGRvbmU6IGZhbHNlIH07XG4gIHJldHVybiB7IHZhbHVlOiBbaW5kZXgsIHRhcmdldFtpbmRleF1dLCBkb25lOiBmYWxzZSB9O1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyVcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRldW5tYXBwZWRhcmd1bWVudHNvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlbWFwcGVkYXJndW1lbnRzb2JqZWN0XG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIG5hdGl2ZUpvaW4gPSBbXS5qb2luO1xuXG52YXIgRVMzX1NUUklOR1MgPSBJbmRleGVkT2JqZWN0ICE9IE9iamVjdDtcbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnam9pbicsICcsJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuam9pbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5qb2luXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBFUzNfU1RSSU5HUyB8fCAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUpvaW4uY2FsbCh0b0luZGV4ZWRPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1hcnJheS1wcm90b3R5cGUtbGFzdGluZGV4b2YgLS0gc2FmZSAqL1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciAkbGFzdEluZGV4T2YgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbGFzdEluZGV4T2YgJiYgMSAvIFsxXS5sYXN0SW5kZXhPZigxLCAtMCkgPCAwO1xudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdsYXN0SW5kZXhPZicpO1xudmFyIEZPUkNFRCA9IE5FR0FUSVZFX1pFUk8gfHwgIVNUUklDVF9NRVRIT0Q7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2ZgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubGFzdGluZGV4b2Zcbm1vZHVsZS5leHBvcnRzID0gRk9SQ0VEID8gZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IEBbKi0xXSAqLykge1xuICAvLyBjb252ZXJ0IC0wIHRvICswXG4gIGlmIChORUdBVElWRV9aRVJPKSByZXR1cm4gJGxhc3RJbmRleE9mLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgdmFyIGluZGV4ID0gbGVuZ3RoIC0gMTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IG1pbihpbmRleCwgdG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudHNbMV0pKTtcbiAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgZm9yICg7aW5kZXggPj0gMDsgaW5kZXgtLSkgaWYgKGluZGV4IGluIE8gJiYgT1tpbmRleF0gPT09IHNlYXJjaEVsZW1lbnQpIHJldHVybiBpbmRleCB8fCAwO1xuICByZXR1cm4gLTE7XG59IDogJGxhc3RJbmRleE9mO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbGFzdEluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbGFzdC1pbmRleC1vZicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmxhc3RpbmRleG9mXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWxhc3RpbmRleG9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBsYXN0SW5kZXhPZiAhPT0gW10ubGFzdEluZGV4T2YgfSwge1xuICBsYXN0SW5kZXhPZjogbGFzdEluZGV4T2Zcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJG1hcCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5tYXA7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ21hcCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG52YXIgSVNOVF9HRU5FUklDID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1vZiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gIShBcnJheS5vZi5jYWxsKEYpIGluc3RhbmNlb2YgRik7XG59KTtcblxuLy8gYEFycmF5Lm9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkub2Zcbi8vIFdlYktpdCBBcnJheS5vZiBpc24ndCBnZW5lcmljXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElTTlRfR0VORVJJQyB9LCB7XG4gIG9mOiBmdW5jdGlvbiBvZigvKiAuLi5hcmdzICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IChpc0NvbnN0cnVjdG9yKHRoaXMpID8gdGhpcyA6IEFycmF5KShhcmd1bWVudHNMZW5ndGgpO1xuICAgIHdoaWxlIChhcmd1bWVudHNMZW5ndGggPiBpbmRleCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gYXJndW1lbnRzTGVuZ3RoO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwidmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyByZWR1Y2UsIHJlZHVjZVJpZ2h0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfUklHSFQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhcmd1bWVudHNMZW5ndGgsIG1lbW8pIHtcbiAgICBhQ2FsbGFibGUoY2FsbGJhY2tmbik7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBpbmRleCA9IElTX1JJR0hUID8gbGVuZ3RoIC0gMSA6IDA7XG4gICAgdmFyIGkgPSBJU19SSUdIVCA/IC0xIDogMTtcbiAgICBpZiAoYXJndW1lbnRzTGVuZ3RoIDwgMikgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgICAgaW5kZXggKz0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpbmRleCArPSBpO1xuICAgICAgaWYgKElTX1JJR0hUID8gaW5kZXggPCAwIDogbGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICAgIHRocm93IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKDtJU19SSUdIVCA/IGluZGV4ID49IDAgOiBsZW5ndGggPiBpbmRleDsgaW5kZXggKz0gaSkgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBjYWxsYmFja2ZuKG1lbW8sIHNlbGZbaW5kZXhdLCBpbmRleCwgTyk7XG4gICAgfVxuICAgIHJldHVybiBtZW1vO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4gIGxlZnQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VyaWdodFxuICByaWdodDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3NvZihnbG9iYWwucHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1yZWR1Y2UnKS5sZWZ0O1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIENIUk9NRV9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ3JlZHVjZScpO1xuLy8gQ2hyb21lIDgwLTgyIGhhcyBhIGNyaXRpY2FsIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTA0OTk4MlxudmFyIENIUk9NRV9CVUcgPSAhSVNfTk9ERSAmJiBDSFJPTUVfVkVSU0lPTiA+IDc5ICYmIENIUk9NRV9WRVJTSU9OIDwgODM7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIVNUUklDVF9NRVRIT0QgfHwgQ0hST01FX0JVRyB9LCB7XG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHJlZHVjZVJpZ2h0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXJlZHVjZScpLnJpZ2h0O1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xudmFyIENIUk9NRV9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ3JlZHVjZVJpZ2h0Jyk7XG4vLyBDaHJvbWUgODAtODIgaGFzIGEgY3JpdGljYWwgYnVnXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDQ5OTgyXG52YXIgQ0hST01FX0JVRyA9ICFJU19OT0RFICYmIENIUk9NRV9WRVJTSU9OID4gNzkgJiYgQ0hST01FX1ZFUlNJT04gPCA4MztcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VyaWdodFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIVNUUklDVF9NRVRIT0QgfHwgQ0hST01FX0JVRyB9LCB7XG4gIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2VSaWdodCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgbmF0aXZlUmV2ZXJzZSA9IFtdLnJldmVyc2U7XG52YXIgdGVzdCA9IFsxLCAyXTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZXZlcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJldmVyc2Vcbi8vIGZpeCBmb3IgU2FmYXJpIDEyLjAgYnVnXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4Nzk0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBTdHJpbmcodGVzdCkgPT09IFN0cmluZyh0ZXN0LnJldmVyc2UoKSkgfSwge1xuICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWFzc2lnbiAtLSBkaXJ0eSBoYWNrXG4gICAgaWYgKGlzQXJyYXkodGhpcykpIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgcmV0dXJuIG5hdGl2ZVJldmVyc2UuY2FsbCh0aGlzKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NsaWNlJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgbmF0aXZlU2xpY2UgPSBbXS5zbGljZTtcbnZhciBtYXggPSBNYXRoLm1heDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zbGljZVxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgayA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuZ3RoKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kLCBsZW5ndGgpO1xuICAgIC8vIGlubGluZSBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBmb3IgdXNhZ2UgbmF0aXZlIGBBcnJheSNzbGljZWAgd2hlcmUgaXQncyBwb3NzaWJsZVxuICAgIHZhciBDb25zdHJ1Y3RvciwgcmVzdWx0LCBuO1xuICAgIGlmIChpc0FycmF5KE8pKSB7XG4gICAgICBDb25zdHJ1Y3RvciA9IE8uY29uc3RydWN0b3I7XG4gICAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgICAgaWYgKGlzQ29uc3RydWN0b3IoQ29uc3RydWN0b3IpICYmIChDb25zdHJ1Y3RvciA9PT0gQXJyYXkgfHwgaXNBcnJheShDb25zdHJ1Y3Rvci5wcm90b3R5cGUpKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoQ29uc3RydWN0b3IpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gQ29uc3RydWN0b3JbU1BFQ0lFU107XG4gICAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gbnVsbCkgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoQ29uc3RydWN0b3IgPT09IEFycmF5IHx8IENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNsaWNlLmNhbGwoTywgaywgZmluKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gbmV3IChDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDb25zdHJ1Y3RvcikobWF4KGZpbiAtIGssIDApKTtcbiAgICBmb3IgKG4gPSAwOyBrIDwgZmluOyBrKyssIG4rKykgaWYgKGsgaW4gTykgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBuLCBPW2tdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLnNvbWU7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnc29tZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIVNUUklDVF9NRVRIT0QgfSwge1xuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCIvLyBUT0RPOiB1c2Ugc29tZXRoaW5nIG1vcmUgY29tcGxleCBsaWtlIHRpbXNvcnQ/XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG52YXIgbWVyZ2VTb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIG1pZGRsZSA9IGZsb29yKGxlbmd0aCAvIDIpO1xuICByZXR1cm4gbGVuZ3RoIDwgOCA/IGluc2VydGlvblNvcnQoYXJyYXksIGNvbXBhcmVmbikgOiBtZXJnZShcbiAgICBtZXJnZVNvcnQoYXJyYXkuc2xpY2UoMCwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBtZXJnZVNvcnQoYXJyYXkuc2xpY2UobWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBjb21wYXJlZm5cbiAgKTtcbn07XG5cbnZhciBpbnNlcnRpb25Tb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIGkgPSAxO1xuICB2YXIgZWxlbWVudCwgajtcblxuICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgIGogPSBpO1xuICAgIGVsZW1lbnQgPSBhcnJheVtpXTtcbiAgICB3aGlsZSAoaiAmJiBjb21wYXJlZm4oYXJyYXlbaiAtIDFdLCBlbGVtZW50KSA+IDApIHtcbiAgICAgIGFycmF5W2pdID0gYXJyYXlbLS1qXTtcbiAgICB9XG4gICAgaWYgKGogIT09IGkrKykgYXJyYXlbal0gPSBlbGVtZW50O1xuICB9IHJldHVybiBhcnJheTtcbn07XG5cbnZhciBtZXJnZSA9IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgY29tcGFyZWZuKSB7XG4gIHZhciBsbGVuZ3RoID0gbGVmdC5sZW5ndGg7XG4gIHZhciBybGVuZ3RoID0gcmlnaHQubGVuZ3RoO1xuICB2YXIgbGluZGV4ID0gMDtcbiAgdmFyIHJpbmRleCA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAobGluZGV4IDwgbGxlbmd0aCB8fCByaW5kZXggPCBybGVuZ3RoKSB7XG4gICAgaWYgKGxpbmRleCA8IGxsZW5ndGggJiYgcmluZGV4IDwgcmxlbmd0aCkge1xuICAgICAgcmVzdWx0LnB1c2goY29tcGFyZWZuKGxlZnRbbGluZGV4XSwgcmlnaHRbcmluZGV4XSkgPD0gMCA/IGxlZnRbbGluZGV4KytdIDogcmlnaHRbcmluZGV4KytdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2gobGluZGV4IDwgbGxlbmd0aCA/IGxlZnRbbGluZGV4KytdIDogcmlnaHRbcmluZGV4KytdKTtcbiAgICB9XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbWVyZ2VTb3J0O1xuIiwidmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgZmlyZWZveCA9IHVzZXJBZ2VudC5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS9pKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIWZpcmVmb3ggJiYgK2ZpcmVmb3hbMV07XG4iLCJ2YXIgVUEgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvTVNJRXxUcmlkZW50Ly50ZXN0KFVBKTtcbiIsInZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHdlYmtpdCA9IHVzZXJBZ2VudC5tYXRjaCgvQXBwbGVXZWJLaXRcXC8oXFxkKylcXC4vKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIXdlYmtpdCAmJiArd2Via2l0WzFdO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaW50ZXJuYWxTb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNvcnQnKTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcbnZhciBGRiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtZmYtdmVyc2lvbicpO1xudmFyIElFX09SX0VER0UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWllLW9yLWVkZ2UnKTtcbnZhciBWOCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIFdFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtd2Via2l0LXZlcnNpb24nKTtcblxudmFyIHRlc3QgPSBbXTtcbnZhciBuYXRpdmVTb3J0ID0gdGVzdC5zb3J0O1xuXG4vLyBJRTgtXG52YXIgRkFJTFNfT05fVU5ERUZJTkVEID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB0ZXN0LnNvcnQodW5kZWZpbmVkKTtcbn0pO1xuLy8gVjggYnVnXG52YXIgRkFJTFNfT05fTlVMTCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdGVzdC5zb3J0KG51bGwpO1xufSk7XG4vLyBPbGQgV2ViS2l0XG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ3NvcnQnKTtcblxudmFyIFNUQUJMRV9TT1JUID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZmVhdHVyZSBkZXRlY3Rpb24gY2FuIGJlIHRvbyBzbG93LCBzbyBjaGVjayBlbmdpbmVzIHZlcnNpb25zXG4gIGlmIChWOCkgcmV0dXJuIFY4IDwgNzA7XG4gIGlmIChGRiAmJiBGRiA+IDMpIHJldHVybjtcbiAgaWYgKElFX09SX0VER0UpIHJldHVybiB0cnVlO1xuICBpZiAoV0VCS0lUKSByZXR1cm4gV0VCS0lUIDwgNjAzO1xuXG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIGNvZGUsIGNociwgdmFsdWUsIGluZGV4O1xuXG4gIC8vIGdlbmVyYXRlIGFuIGFycmF5IHdpdGggbW9yZSA1MTIgZWxlbWVudHMgKENoYWtyYSBhbmQgb2xkIFY4IGZhaWxzIG9ubHkgaW4gdGhpcyBjYXNlKVxuICBmb3IgKGNvZGUgPSA2NTsgY29kZSA8IDc2OyBjb2RlKyspIHtcbiAgICBjaHIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpO1xuXG4gICAgc3dpdGNoIChjb2RlKSB7XG4gICAgICBjYXNlIDY2OiBjYXNlIDY5OiBjYXNlIDcwOiBjYXNlIDcyOiB2YWx1ZSA9IDM7IGJyZWFrO1xuICAgICAgY2FzZSA2ODogY2FzZSA3MTogdmFsdWUgPSA0OyBicmVhaztcbiAgICAgIGRlZmF1bHQ6IHZhbHVlID0gMjtcbiAgICB9XG5cbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCA0NzsgaW5kZXgrKykge1xuICAgICAgdGVzdC5wdXNoKHsgazogY2hyICsgaW5kZXgsIHY6IHZhbHVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRlc3Quc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYi52IC0gYS52OyB9KTtcblxuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB0ZXN0Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNociA9IHRlc3RbaW5kZXhdLmsuY2hhckF0KDApO1xuICAgIGlmIChyZXN1bHQuY2hhckF0KHJlc3VsdC5sZW5ndGggLSAxKSAhPT0gY2hyKSByZXN1bHQgKz0gY2hyO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdCAhPT0gJ0RHQkVGSEFDSUpLJztcbn0pO1xuXG52YXIgRk9SQ0VEID0gRkFJTFNfT05fVU5ERUZJTkVEIHx8ICFGQUlMU19PTl9OVUxMIHx8ICFTVFJJQ1RfTUVUSE9EIHx8ICFTVEFCTEVfU09SVDtcblxudmFyIGdldFNvcnRDb21wYXJlID0gZnVuY3Rpb24gKGNvbXBhcmVmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKHgsIHkpIHtcbiAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gLTE7XG4gICAgaWYgKHggPT09IHVuZGVmaW5lZCkgcmV0dXJuIDE7XG4gICAgaWYgKGNvbXBhcmVmbiAhPT0gdW5kZWZpbmVkKSByZXR1cm4gK2NvbXBhcmVmbih4LCB5KSB8fCAwO1xuICAgIHJldHVybiB0b1N0cmluZyh4KSA+IHRvU3RyaW5nKHkpID8gMSA6IC0xO1xuICB9O1xufTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zb3J0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvcnRcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgaWYgKGNvbXBhcmVmbiAhPT0gdW5kZWZpbmVkKSBhQ2FsbGFibGUoY29tcGFyZWZuKTtcblxuICAgIHZhciBhcnJheSA9IHRvT2JqZWN0KHRoaXMpO1xuXG4gICAgaWYgKFNUQUJMRV9TT1JUKSByZXR1cm4gY29tcGFyZWZuID09PSB1bmRlZmluZWQgPyBuYXRpdmVTb3J0LmNhbGwoYXJyYXkpIDogbmF0aXZlU29ydC5jYWxsKGFycmF5LCBjb21wYXJlZm4pO1xuXG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdmFyIGFycmF5TGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoYXJyYXkpO1xuICAgIHZhciBpdGVtc0xlbmd0aCwgaW5kZXg7XG5cbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheUxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKGluZGV4IGluIGFycmF5KSBpdGVtcy5wdXNoKGFycmF5W2luZGV4XSk7XG4gICAgfVxuXG4gICAgaXRlbXMgPSBpbnRlcm5hbFNvcnQoaXRlbXMsIGdldFNvcnRDb21wYXJlKGNvbXBhcmVmbikpO1xuICAgIGl0ZW1zTGVuZ3RoID0gaXRlbXMubGVuZ3RoO1xuICAgIGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChpbmRleCA8IGl0ZW1zTGVuZ3RoKSBhcnJheVtpbmRleF0gPSBpdGVtc1tpbmRleCsrXTtcbiAgICB3aGlsZSAoaW5kZXggPCBhcnJheUxlbmd0aCkgZGVsZXRlIGFycmF5W2luZGV4KytdO1xuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FKSB7XG4gIHZhciBDb25zdHJ1Y3RvciA9IGdldEJ1aWx0SW4oQ09OU1RSVUNUT1JfTkFNRSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmIENvbnN0cnVjdG9yICYmICFDb25zdHJ1Y3RvcltTUEVDSUVTXSkge1xuICAgIGRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBTUEVDSUVTLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgICB9KTtcbiAgfVxufTtcbiIsInZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG5cbi8vIGBBcnJheVtAQHNwZWNpZXNdYCBnZXR0ZXJcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LWFycmF5LUBAc3BlY2llc1xuc2V0U3BlY2llcygnQXJyYXknKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NwbGljZScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7XG52YXIgTUFYSU1VTV9BTExPV0VEX0xFTkdUSF9FWENFRURFRCA9ICdNYXhpbXVtIGFsbG93ZWQgbGVuZ3RoIGV4Y2VlZGVkJztcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zcGxpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc3BsaWNlXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBzcGxpY2U6IGZ1bmN0aW9uIHNwbGljZShzdGFydCwgZGVsZXRlQ291bnQgLyogLCAuLi5pdGVtcyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBhY3R1YWxTdGFydCA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgaW5zZXJ0Q291bnQsIGFjdHVhbERlbGV0ZUNvdW50LCBBLCBrLCBmcm9tLCB0bztcbiAgICBpZiAoYXJndW1lbnRzTGVuZ3RoID09PSAwKSB7XG4gICAgICBpbnNlcnRDb3VudCA9IGFjdHVhbERlbGV0ZUNvdW50ID0gMDtcbiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50c0xlbmd0aCA9PT0gMSkge1xuICAgICAgaW5zZXJ0Q291bnQgPSAwO1xuICAgICAgYWN0dWFsRGVsZXRlQ291bnQgPSBsZW4gLSBhY3R1YWxTdGFydDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5zZXJ0Q291bnQgPSBhcmd1bWVudHNMZW5ndGggLSAyO1xuICAgICAgYWN0dWFsRGVsZXRlQ291bnQgPSBtaW4obWF4KHRvSW50ZWdlck9ySW5maW5pdHkoZGVsZXRlQ291bnQpLCAwKSwgbGVuIC0gYWN0dWFsU3RhcnQpO1xuICAgIH1cbiAgICBpZiAobGVuICsgaW5zZXJ0Q291bnQgLSBhY3R1YWxEZWxldGVDb3VudCA+IE1BWF9TQUZFX0lOVEVHRVIpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcihNQVhJTVVNX0FMTE9XRURfTEVOR1RIX0VYQ0VFREVEKTtcbiAgICB9XG4gICAgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCBhY3R1YWxEZWxldGVDb3VudCk7XG4gICAgZm9yIChrID0gMDsgayA8IGFjdHVhbERlbGV0ZUNvdW50OyBrKyspIHtcbiAgICAgIGZyb20gPSBhY3R1YWxTdGFydCArIGs7XG4gICAgICBpZiAoZnJvbSBpbiBPKSBjcmVhdGVQcm9wZXJ0eShBLCBrLCBPW2Zyb21dKTtcbiAgICB9XG4gICAgQS5sZW5ndGggPSBhY3R1YWxEZWxldGVDb3VudDtcbiAgICBpZiAoaW5zZXJ0Q291bnQgPCBhY3R1YWxEZWxldGVDb3VudCkge1xuICAgICAgZm9yIChrID0gYWN0dWFsU3RhcnQ7IGsgPCBsZW4gLSBhY3R1YWxEZWxldGVDb3VudDsgaysrKSB7XG4gICAgICAgIGZyb20gPSBrICsgYWN0dWFsRGVsZXRlQ291bnQ7XG4gICAgICAgIHRvID0gayArIGluc2VydENvdW50O1xuICAgICAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgICAgIGVsc2UgZGVsZXRlIE9bdG9dO1xuICAgICAgfVxuICAgICAgZm9yIChrID0gbGVuOyBrID4gbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQgKyBpbnNlcnRDb3VudDsgay0tKSBkZWxldGUgT1trIC0gMV07XG4gICAgfSBlbHNlIGlmIChpbnNlcnRDb3VudCA+IGFjdHVhbERlbGV0ZUNvdW50KSB7XG4gICAgICBmb3IgKGsgPSBsZW4gLSBhY3R1YWxEZWxldGVDb3VudDsgayA+IGFjdHVhbFN0YXJ0OyBrLS0pIHtcbiAgICAgICAgZnJvbSA9IGsgKyBhY3R1YWxEZWxldGVDb3VudCAtIDE7XG4gICAgICAgIHRvID0gayArIGluc2VydENvdW50IC0gMTtcbiAgICAgICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgICAgICBlbHNlIGRlbGV0ZSBPW3RvXTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChrID0gMDsgayA8IGluc2VydENvdW50OyBrKyspIHtcbiAgICAgIE9bayArIGFjdHVhbFN0YXJ0XSA9IGFyZ3VtZW50c1trICsgMl07XG4gICAgfVxuICAgIE8ubGVuZ3RoID0gbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQgKyBpbnNlcnRDb3VudDtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG4iLCIvLyB0aGlzIG1ldGhvZCB3YXMgYWRkZWQgdG8gdW5zY29wYWJsZXMgYWZ0ZXIgaW1wbGVtZW50YXRpb25cbi8vIGluIHBvcHVsYXIgZW5naW5lcywgc28gaXQncyBtb3ZlZCB0byBhIHNlcGFyYXRlIG1vZHVsZVxudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2ZsYXQnKTtcbiIsIi8vIHRoaXMgbWV0aG9kIHdhcyBhZGRlZCB0byB1bnNjb3BhYmxlcyBhZnRlciBpbXBsZW1lbnRhdGlvblxuLy8gaW4gcG9wdWxhciBlbmdpbmVzLCBzbyBpdCdzIG1vdmVkIHRvIGEgc2VwYXJhdGUgbW9kdWxlXG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygnZmxhdE1hcCcpO1xuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXR5cGVkLWFycmF5cyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIERhdGFWaWV3ICE9PSAndW5kZWZpbmVkJztcbiIsInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgb3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIG9wdGlvbnMpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSkge1xuICBpZiAoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgcmV0dXJuIGl0O1xuICB0aHJvdyBUeXBlRXJyb3IoJ0luY29ycmVjdCAnICsgKG5hbWUgPyBuYW1lICsgJyAnIDogJycpICsgJ2ludm9jYXRpb24nKTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbi8vIGBUb0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9pbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpdCk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChudW1iZXIpO1xuICBpZiAobnVtYmVyICE9PSBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIGxlbmd0aCBvciBpbmRleCcpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcbiIsIi8vIElFRUU3NTQgY29udmVyc2lvbnMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9pZWVlNzU0XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGxvZyA9IE1hdGgubG9nO1xudmFyIExOMiA9IE1hdGguTE4yO1xuXG52YXIgcGFjayA9IGZ1bmN0aW9uIChudW1iZXIsIG1hbnRpc3NhTGVuZ3RoLCBieXRlcykge1xuICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KGJ5dGVzKTtcbiAgdmFyIGV4cG9uZW50TGVuZ3RoID0gYnl0ZXMgKiA4IC0gbWFudGlzc2FMZW5ndGggLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGV4cG9uZW50TGVuZ3RoKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIHJ0ID0gbWFudGlzc2FMZW5ndGggPT09IDIzID8gcG93KDIsIC0yNCkgLSBwb3coMiwgLTc3KSA6IDA7XG4gIHZhciBzaWduID0gbnVtYmVyIDwgMCB8fCBudW1iZXIgPT09IDAgJiYgMSAvIG51bWJlciA8IDAgPyAxIDogMDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGV4cG9uZW50LCBtYW50aXNzYSwgYztcbiAgbnVtYmVyID0gYWJzKG51bWJlcik7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIGlmIChudW1iZXIgIT0gbnVtYmVyIHx8IG51bWJlciA9PT0gSW5maW5pdHkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIG1hbnRpc3NhID0gbnVtYmVyICE9IG51bWJlciA/IDEgOiAwO1xuICAgIGV4cG9uZW50ID0gZU1heDtcbiAgfSBlbHNlIHtcbiAgICBleHBvbmVudCA9IGZsb29yKGxvZyhudW1iZXIpIC8gTE4yKTtcbiAgICBpZiAobnVtYmVyICogKGMgPSBwb3coMiwgLWV4cG9uZW50KSkgPCAxKSB7XG4gICAgICBleHBvbmVudC0tO1xuICAgICAgYyAqPSAyO1xuICAgIH1cbiAgICBpZiAoZXhwb25lbnQgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBudW1iZXIgKz0gcnQgLyBjO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1iZXIgKz0gcnQgKiBwb3coMiwgMSAtIGVCaWFzKTtcbiAgICB9XG4gICAgaWYgKG51bWJlciAqIGMgPj0gMikge1xuICAgICAgZXhwb25lbnQrKztcbiAgICAgIGMgLz0gMjtcbiAgICB9XG4gICAgaWYgKGV4cG9uZW50ICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbWFudGlzc2EgPSAwO1xuICAgICAgZXhwb25lbnQgPSBlTWF4O1xuICAgIH0gZWxzZSBpZiAoZXhwb25lbnQgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtYW50aXNzYSA9IChudW1iZXIgKiBjIC0gMSkgKiBwb3coMiwgbWFudGlzc2FMZW5ndGgpO1xuICAgICAgZXhwb25lbnQgPSBleHBvbmVudCArIGVCaWFzO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYW50aXNzYSA9IG51bWJlciAqIHBvdygyLCBlQmlhcyAtIDEpICogcG93KDIsIG1hbnRpc3NhTGVuZ3RoKTtcbiAgICAgIGV4cG9uZW50ID0gMDtcbiAgICB9XG4gIH1cbiAgZm9yICg7IG1hbnRpc3NhTGVuZ3RoID49IDg7IGJ1ZmZlcltpbmRleCsrXSA9IG1hbnRpc3NhICYgMjU1LCBtYW50aXNzYSAvPSAyNTYsIG1hbnRpc3NhTGVuZ3RoIC09IDgpO1xuICBleHBvbmVudCA9IGV4cG9uZW50IDw8IG1hbnRpc3NhTGVuZ3RoIHwgbWFudGlzc2E7XG4gIGV4cG9uZW50TGVuZ3RoICs9IG1hbnRpc3NhTGVuZ3RoO1xuICBmb3IgKDsgZXhwb25lbnRMZW5ndGggPiAwOyBidWZmZXJbaW5kZXgrK10gPSBleHBvbmVudCAmIDI1NSwgZXhwb25lbnQgLz0gMjU2LCBleHBvbmVudExlbmd0aCAtPSA4KTtcbiAgYnVmZmVyWy0taW5kZXhdIHw9IHNpZ24gKiAxMjg7XG4gIHJldHVybiBidWZmZXI7XG59O1xuXG52YXIgdW5wYWNrID0gZnVuY3Rpb24gKGJ1ZmZlciwgbWFudGlzc2FMZW5ndGgpIHtcbiAgdmFyIGJ5dGVzID0gYnVmZmVyLmxlbmd0aDtcbiAgdmFyIGV4cG9uZW50TGVuZ3RoID0gYnl0ZXMgKiA4IC0gbWFudGlzc2FMZW5ndGggLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGV4cG9uZW50TGVuZ3RoKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIG5CaXRzID0gZXhwb25lbnRMZW5ndGggLSA3O1xuICB2YXIgaW5kZXggPSBieXRlcyAtIDE7XG4gIHZhciBzaWduID0gYnVmZmVyW2luZGV4LS1dO1xuICB2YXIgZXhwb25lbnQgPSBzaWduICYgMTI3O1xuICB2YXIgbWFudGlzc2E7XG4gIHNpZ24gPj49IDc7XG4gIGZvciAoOyBuQml0cyA+IDA7IGV4cG9uZW50ID0gZXhwb25lbnQgKiAyNTYgKyBidWZmZXJbaW5kZXhdLCBpbmRleC0tLCBuQml0cyAtPSA4KTtcbiAgbWFudGlzc2EgPSBleHBvbmVudCAmICgxIDw8IC1uQml0cykgLSAxO1xuICBleHBvbmVudCA+Pj0gLW5CaXRzO1xuICBuQml0cyArPSBtYW50aXNzYUxlbmd0aDtcbiAgZm9yICg7IG5CaXRzID4gMDsgbWFudGlzc2EgPSBtYW50aXNzYSAqIDI1NiArIGJ1ZmZlcltpbmRleF0sIGluZGV4LS0sIG5CaXRzIC09IDgpO1xuICBpZiAoZXhwb25lbnQgPT09IDApIHtcbiAgICBleHBvbmVudCA9IDEgLSBlQmlhcztcbiAgfSBlbHNlIGlmIChleHBvbmVudCA9PT0gZU1heCkge1xuICAgIHJldHVybiBtYW50aXNzYSA/IE5hTiA6IHNpZ24gPyAtSW5maW5pdHkgOiBJbmZpbml0eTtcbiAgfSBlbHNlIHtcbiAgICBtYW50aXNzYSA9IG1hbnRpc3NhICsgcG93KDIsIG1hbnRpc3NhTGVuZ3RoKTtcbiAgICBleHBvbmVudCA9IGV4cG9uZW50IC0gZUJpYXM7XG4gIH0gcmV0dXJuIChzaWduID8gLTEgOiAxKSAqIG1hbnRpc3NhICogcG93KDIsIGV4cG9uZW50IC0gbWFudGlzc2FMZW5ndGgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHBhY2s6IHBhY2ssXG4gIHVucGFjazogdW5wYWNrXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIE5BVElWRV9BUlJBWV9CVUZGRVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5hdGl2ZScpO1xudmFyIEZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lLWFsbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXgnKTtcbnZhciBJRUVFNzU0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llZWU3NTQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpLmY7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgYXJyYXlGaWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZpbGwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLlBST1BFUjtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5DT05GSUdVUkFCTEU7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xudmFyIERBVEFfVklFVyA9ICdEYXRhVmlldyc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgV1JPTkdfTEVOR1RIID0gJ1dyb25nIGxlbmd0aCc7XG52YXIgV1JPTkdfSU5ERVggPSAnV3JvbmcgaW5kZXgnO1xudmFyIE5hdGl2ZUFycmF5QnVmZmVyID0gZ2xvYmFsW0FSUkFZX0JVRkZFUl07XG52YXIgJEFycmF5QnVmZmVyID0gTmF0aXZlQXJyYXlCdWZmZXI7XG52YXIgJERhdGFWaWV3ID0gZ2xvYmFsW0RBVEFfVklFV107XG52YXIgJERhdGFWaWV3UHJvdG90eXBlID0gJERhdGFWaWV3ICYmICREYXRhVmlld1tQUk9UT1RZUEVdO1xudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuXG52YXIgcGFja0lFRUU3NTQgPSBJRUVFNzU0LnBhY2s7XG52YXIgdW5wYWNrSUVFRTc1NCA9IElFRUU3NTQudW5wYWNrO1xuXG52YXIgcGFja0ludDggPSBmdW5jdGlvbiAobnVtYmVyKSB7XG4gIHJldHVybiBbbnVtYmVyICYgMHhGRl07XG59O1xuXG52YXIgcGFja0ludDE2ID0gZnVuY3Rpb24gKG51bWJlcikge1xuICByZXR1cm4gW251bWJlciAmIDB4RkYsIG51bWJlciA+PiA4ICYgMHhGRl07XG59O1xuXG52YXIgcGFja0ludDMyID0gZnVuY3Rpb24gKG51bWJlcikge1xuICByZXR1cm4gW251bWJlciAmIDB4RkYsIG51bWJlciA+PiA4ICYgMHhGRiwgbnVtYmVyID4+IDE2ICYgMHhGRiwgbnVtYmVyID4+IDI0ICYgMHhGRl07XG59O1xuXG52YXIgdW5wYWNrSW50MzIgPSBmdW5jdGlvbiAoYnVmZmVyKSB7XG4gIHJldHVybiBidWZmZXJbM10gPDwgMjQgfCBidWZmZXJbMl0gPDwgMTYgfCBidWZmZXJbMV0gPDwgOCB8IGJ1ZmZlclswXTtcbn07XG5cbnZhciBwYWNrRmxvYXQzMiA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KG51bWJlciwgMjMsIDQpO1xufTtcblxudmFyIHBhY2tGbG9hdDY0ID0gZnVuY3Rpb24gKG51bWJlcikge1xuICByZXR1cm4gcGFja0lFRUU3NTQobnVtYmVyLCA1MiwgOCk7XG59O1xuXG52YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBrZXkpIHtcbiAgZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3JbUFJPVE9UWVBFXSwga2V5LCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKVtrZXldOyB9IH0pO1xufTtcblxudmFyIGdldCA9IGZ1bmN0aW9uICh2aWV3LCBjb3VudCwgaW5kZXgsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgoaW5kZXgpO1xuICB2YXIgc3RvcmUgPSBnZXRJbnRlcm5hbFN0YXRlKHZpZXcpO1xuICBpZiAoaW50SW5kZXggKyBjb3VudCA+IHN0b3JlLmJ5dGVMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgYnl0ZXMgPSBnZXRJbnRlcm5hbFN0YXRlKHN0b3JlLmJ1ZmZlcikuYnl0ZXM7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgc3RvcmUuYnl0ZU9mZnNldDtcbiAgdmFyIHBhY2sgPSBieXRlcy5zbGljZShzdGFydCwgc3RhcnQgKyBjb3VudCk7XG4gIHJldHVybiBpc0xpdHRsZUVuZGlhbiA/IHBhY2sgOiBwYWNrLnJldmVyc2UoKTtcbn07XG5cbnZhciBzZXQgPSBmdW5jdGlvbiAodmlldywgY291bnQsIGluZGV4LCBjb252ZXJzaW9uLCB2YWx1ZSwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChpbmRleCk7XG4gIHZhciBzdG9yZSA9IGdldEludGVybmFsU3RhdGUodmlldyk7XG4gIGlmIChpbnRJbmRleCArIGNvdW50ID4gc3RvcmUuYnl0ZUxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBieXRlcyA9IGdldEludGVybmFsU3RhdGUoc3RvcmUuYnVmZmVyKS5ieXRlcztcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyBzdG9yZS5ieXRlT2Zmc2V0O1xuICB2YXIgcGFjayA9IGNvbnZlcnNpb24oK3ZhbHVlKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSBieXRlc1tzdGFydCArIGldID0gcGFja1tpc0xpdHRsZUVuZGlhbiA/IGkgOiBjb3VudCAtIGkgLSAxXTtcbn07XG5cbmlmICghTkFUSVZFX0FSUkFZX0JVRkZFUikge1xuICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbiAgICB2YXIgYnl0ZUxlbmd0aCA9IHRvSW5kZXgobGVuZ3RoKTtcbiAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgIGJ5dGVzOiBhcnJheUZpbGwuY2FsbChuZXcgQXJyYXkoYnl0ZUxlbmd0aCksIDApLFxuICAgICAgYnl0ZUxlbmd0aDogYnl0ZUxlbmd0aFxuICAgIH0pO1xuICAgIGlmICghREVTQ1JJUFRPUlMpIHRoaXMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgJERhdGFWaWV3ID0gZnVuY3Rpb24gRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkRGF0YVZpZXcsIERBVEFfVklFVyk7XG4gICAgYW5JbnN0YW5jZShidWZmZXIsICRBcnJheUJ1ZmZlciwgREFUQV9WSUVXKTtcbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gZ2V0SW50ZXJuYWxTdGF0ZShidWZmZXIpLmJ5dGVMZW5ndGg7XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlck9ySW5maW5pdHkoYnl0ZU9mZnNldCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBvZmZzZXQnKTtcbiAgICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA9PT0gdW5kZWZpbmVkID8gYnVmZmVyTGVuZ3RoIC0gb2Zmc2V0IDogdG9MZW5ndGgoYnl0ZUxlbmd0aCk7XG4gICAgaWYgKG9mZnNldCArIGJ5dGVMZW5ndGggPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgIGJ1ZmZlcjogYnVmZmVyLFxuICAgICAgYnl0ZUxlbmd0aDogYnl0ZUxlbmd0aCxcbiAgICAgIGJ5dGVPZmZzZXQ6IG9mZnNldFxuICAgIH0pO1xuICAgIGlmICghREVTQ1JJUFRPUlMpIHtcbiAgICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyO1xuICAgICAgdGhpcy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aDtcbiAgICAgIHRoaXMuYnl0ZU9mZnNldCA9IG9mZnNldDtcbiAgICB9XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgYWRkR2V0dGVyKCRBcnJheUJ1ZmZlciwgJ2J5dGVMZW5ndGgnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCAnYnVmZmVyJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgJ2J5dGVMZW5ndGgnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCAnYnl0ZU9mZnNldCcpO1xuICB9XG5cbiAgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBnZXRJbnQ4OiBmdW5jdGlvbiBnZXRJbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF0gPDwgMjQgPj4gMjQ7XG4gICAgfSxcbiAgICBnZXRVaW50ODogZnVuY3Rpb24gZ2V0VWludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXTtcbiAgICB9LFxuICAgIGdldEludDE2OiBmdW5jdGlvbiBnZXRJbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgICAgcmV0dXJuIChieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF0pIDw8IDE2ID4+IDE2O1xuICAgIH0sXG4gICAgZ2V0VWludDE2OiBmdW5jdGlvbiBnZXRVaW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICAgIHJldHVybiBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG4gICAgfSxcbiAgICBnZXRJbnQzMjogZnVuY3Rpb24gZ2V0SW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0ludDMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCkpO1xuICAgIH0sXG4gICAgZ2V0VWludDMyOiBmdW5jdGlvbiBnZXRVaW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0ludDMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCkpID4+PiAwO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQzMjogZnVuY3Rpb24gZ2V0RmxvYXQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpLCAyMyk7XG4gICAgfSxcbiAgICBnZXRGbG9hdDY0OiBmdW5jdGlvbiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCksIDUyKTtcbiAgICB9LFxuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSW50OCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0ludDgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldEludDE2OiBmdW5jdGlvbiBzZXRJbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJbnQxNiwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIHNldFVpbnQxNjogZnVuY3Rpb24gc2V0VWludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0ludDE2LCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgc2V0SW50MzI6IGZ1bmN0aW9uIHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0ludDMyLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgc2V0VWludDMyOiBmdW5jdGlvbiBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSW50MzIsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDMyOiBmdW5jdGlvbiBzZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0Zsb2F0MzIsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDY0OiBmdW5jdGlvbiBzZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgcGFja0Zsb2F0NjQsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfVxuICB9KTtcbn0gZWxzZSB7XG4gIHZhciBJTkNPUlJFQ1RfQVJSQVlfQlVGRkVSX05BTUUgPSBQUk9QRVJfRlVOQ1RJT05fTkFNRSAmJiBOYXRpdmVBcnJheUJ1ZmZlci5uYW1lICE9PSBBUlJBWV9CVUZGRVI7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xuICBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBOYXRpdmVBcnJheUJ1ZmZlcigxKTtcbiAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgTmF0aXZlQXJyYXlCdWZmZXIoLTEpO1xuICB9KSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3IE5hdGl2ZUFycmF5QnVmZmVyKCk7XG4gICAgbmV3IE5hdGl2ZUFycmF5QnVmZmVyKDEuNSk7XG4gICAgbmV3IE5hdGl2ZUFycmF5QnVmZmVyKE5hTik7XG4gICAgcmV0dXJuIElOQ09SUkVDVF9BUlJBWV9CVUZGRVJfTkFNRSAmJiAhQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUU7XG4gIH0pKSB7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tbmV3IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG4gICAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlcik7XG4gICAgICByZXR1cm4gbmV3IE5hdGl2ZUFycmF5QnVmZmVyKHRvSW5kZXgobGVuZ3RoKSk7XG4gICAgfTtcbiAgICB2YXIgQXJyYXlCdWZmZXJQcm90b3R5cGUgPSAkQXJyYXlCdWZmZXJbUFJPVE9UWVBFXSA9IE5hdGl2ZUFycmF5QnVmZmVyW1BST1RPVFlQRV07XG4gICAgZm9yICh2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoTmF0aXZlQXJyYXlCdWZmZXIpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7KSB7XG4gICAgICBpZiAoISgoa2V5ID0ga2V5c1tqKytdKSBpbiAkQXJyYXlCdWZmZXIpKSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSgkQXJyYXlCdWZmZXIsIGtleSwgTmF0aXZlQXJyYXlCdWZmZXJba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIEFycmF5QnVmZmVyUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gJEFycmF5QnVmZmVyO1xuICB9IGVsc2UgaWYgKElOQ09SUkVDVF9BUlJBWV9CVUZGRVJfTkFNRSAmJiBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSkge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShOYXRpdmVBcnJheUJ1ZmZlciwgJ25hbWUnLCBBUlJBWV9CVUZGRVIpO1xuICB9XG5cbiAgLy8gV2ViS2l0IGJ1ZyAtIHRoZSBzYW1lIHBhcmVudCBwcm90b3R5cGUgZm9yIHR5cGVkIGFycmF5cyBhbmQgZGF0YSB2aWV3XG4gIGlmIChzZXRQcm90b3R5cGVPZiAmJiBnZXRQcm90b3R5cGVPZigkRGF0YVZpZXdQcm90b3R5cGUpICE9PSBPYmplY3RQcm90b3R5cGUpIHtcbiAgICBzZXRQcm90b3R5cGVPZigkRGF0YVZpZXdQcm90b3R5cGUsIE9iamVjdFByb3RvdHlwZSk7XG4gIH1cblxuICAvLyBpT1MgU2FmYXJpIDcueCBidWdcbiAgdmFyIHRlc3RWaWV3ID0gbmV3ICREYXRhVmlldyhuZXcgJEFycmF5QnVmZmVyKDIpKTtcbiAgdmFyICRzZXRJbnQ4ID0gJERhdGFWaWV3UHJvdG90eXBlLnNldEludDg7XG4gIHRlc3RWaWV3LnNldEludDgoMCwgMjE0NzQ4MzY0OCk7XG4gIHRlc3RWaWV3LnNldEludDgoMSwgMjE0NzQ4MzY0OSk7XG4gIGlmICh0ZXN0Vmlldy5nZXRJbnQ4KDApIHx8ICF0ZXN0Vmlldy5nZXRJbnQ4KDEpKSByZWRlZmluZUFsbCgkRGF0YVZpZXdQcm90b3R5cGUsIHtcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfVxuICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcbn1cblxuc2V0VG9TdHJpbmdUYWcoJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuc2V0VG9TdHJpbmdUYWcoJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQXJyYXlCdWZmZXI6ICRBcnJheUJ1ZmZlcixcbiAgRGF0YVZpZXc6ICREYXRhVmlld1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBhcnJheUJ1ZmZlck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXInKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG5cbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xudmFyIEFycmF5QnVmZmVyID0gYXJyYXlCdWZmZXJNb2R1bGVbQVJSQVlfQlVGRkVSXTtcbnZhciBOYXRpdmVBcnJheUJ1ZmZlciA9IGdsb2JhbFtBUlJBWV9CVUZGRVJdO1xuXG4vLyBgQXJyYXlCdWZmZXJgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5YnVmZmVyLWNvbnN0cnVjdG9yXG4kKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6IE5hdGl2ZUFycmF5QnVmZmVyICE9PSBBcnJheUJ1ZmZlciB9LCB7XG4gIEFycmF5QnVmZmVyOiBBcnJheUJ1ZmZlclxufSk7XG5cbnNldFNwZWNpZXMoQVJSQVlfQlVGRkVSKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQVJSQVlfQlVGRkVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1uYXRpdmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIEludDhBcnJheSA9IGdsb2JhbC5JbnQ4QXJyYXk7XG52YXIgSW50OEFycmF5UHJvdG90eXBlID0gSW50OEFycmF5ICYmIEludDhBcnJheS5wcm90b3R5cGU7XG52YXIgVWludDhDbGFtcGVkQXJyYXkgPSBnbG9iYWwuVWludDhDbGFtcGVkQXJyYXk7XG52YXIgVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUgPSBVaW50OENsYW1wZWRBcnJheSAmJiBVaW50OENsYW1wZWRBcnJheS5wcm90b3R5cGU7XG52YXIgVHlwZWRBcnJheSA9IEludDhBcnJheSAmJiBnZXRQcm90b3R5cGVPZihJbnQ4QXJyYXkpO1xudmFyIFR5cGVkQXJyYXlQcm90b3R5cGUgPSBJbnQ4QXJyYXlQcm90b3R5cGUgJiYgZ2V0UHJvdG90eXBlT2YoSW50OEFycmF5UHJvdG90eXBlKTtcbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xudmFyIGlzUHJvdG90eXBlT2YgPSBPYmplY3RQcm90b3R5cGUuaXNQcm90b3R5cGVPZjtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgVFlQRURfQVJSQVlfVEFHID0gdWlkKCdUWVBFRF9BUlJBWV9UQUcnKTtcbnZhciBUWVBFRF9BUlJBWV9DT05TVFJVQ1RPUiA9IHVpZCgnVFlQRURfQVJSQVlfQ09OU1RSVUNUT1InKTtcbi8vIEZpeGluZyBuYXRpdmUgdHlwZWQgYXJyYXlzIGluIE9wZXJhIFByZXN0byBjcmFzaGVzIHRoZSBicm93c2VyLCBzZWUgIzU5NVxudmFyIE5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MgPSBOQVRJVkVfQVJSQVlfQlVGRkVSICYmICEhc2V0UHJvdG90eXBlT2YgJiYgY2xhc3NvZihnbG9iYWwub3BlcmEpICE9PSAnT3BlcmEnO1xudmFyIFRZUEVEX0FSUkFZX1RBR19SRVFJUkVEID0gZmFsc2U7XG52YXIgTkFNRSwgQ29uc3RydWN0b3IsIFByb3RvdHlwZTtcblxudmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0ID0ge1xuICBJbnQ4QXJyYXk6IDEsXG4gIFVpbnQ4QXJyYXk6IDEsXG4gIFVpbnQ4Q2xhbXBlZEFycmF5OiAxLFxuICBJbnQxNkFycmF5OiAyLFxuICBVaW50MTZBcnJheTogMixcbiAgSW50MzJBcnJheTogNCxcbiAgVWludDMyQXJyYXk6IDQsXG4gIEZsb2F0MzJBcnJheTogNCxcbiAgRmxvYXQ2NEFycmF5OiA4XG59O1xuXG52YXIgQmlnSW50QXJyYXlDb25zdHJ1Y3RvcnNMaXN0ID0ge1xuICBCaWdJbnQ2NEFycmF5OiA4LFxuICBCaWdVaW50NjRBcnJheTogOFxufTtcblxudmFyIGlzVmlldyA9IGZ1bmN0aW9uIGlzVmlldyhpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGZhbHNlO1xuICB2YXIga2xhc3MgPSBjbGFzc29mKGl0KTtcbiAgcmV0dXJuIGtsYXNzID09PSAnRGF0YVZpZXcnXG4gICAgfHwgaGFzT3duKFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0LCBrbGFzcylcbiAgICB8fCBoYXNPd24oQmlnSW50QXJyYXlDb25zdHJ1Y3RvcnNMaXN0LCBrbGFzcyk7XG59O1xuXG52YXIgaXNUeXBlZEFycmF5ID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gZmFsc2U7XG4gIHZhciBrbGFzcyA9IGNsYXNzb2YoaXQpO1xuICByZXR1cm4gaGFzT3duKFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0LCBrbGFzcylcbiAgICB8fCBoYXNPd24oQmlnSW50QXJyYXlDb25zdHJ1Y3RvcnNMaXN0LCBrbGFzcyk7XG59O1xuXG52YXIgYVR5cGVkQXJyYXkgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzVHlwZWRBcnJheShpdCkpIHJldHVybiBpdDtcbiAgdGhyb3cgVHlwZUVycm9yKCdUYXJnZXQgaXMgbm90IGEgdHlwZWQgYXJyYXknKTtcbn07XG5cbnZhciBhVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKEMpIHtcbiAgaWYgKGlzQ2FsbGFibGUoQykgJiYgKCFzZXRQcm90b3R5cGVPZiB8fCBpc1Byb3RvdHlwZU9mLmNhbGwoVHlwZWRBcnJheSwgQykpKSByZXR1cm4gQztcbiAgdGhyb3cgVHlwZUVycm9yKHRyeVRvU3RyaW5nKEMpICsgJyBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvcicpO1xufTtcblxudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBmdW5jdGlvbiAoS0VZLCBwcm9wZXJ0eSwgZm9yY2VkKSB7XG4gIGlmICghREVTQ1JJUFRPUlMpIHJldHVybjtcbiAgaWYgKGZvcmNlZCkgZm9yICh2YXIgQVJSQVkgaW4gVHlwZWRBcnJheUNvbnN0cnVjdG9yc0xpc3QpIHtcbiAgICB2YXIgVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gZ2xvYmFsW0FSUkFZXTtcbiAgICBpZiAoVHlwZWRBcnJheUNvbnN0cnVjdG9yICYmIGhhc093bihUeXBlZEFycmF5Q29uc3RydWN0b3IucHJvdG90eXBlLCBLRVkpKSB0cnkge1xuICAgICAgZGVsZXRlIFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5wcm90b3R5cGVbS0VZXTtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIH1cbiAgaWYgKCFUeXBlZEFycmF5UHJvdG90eXBlW0tFWV0gfHwgZm9yY2VkKSB7XG4gICAgcmVkZWZpbmUoVHlwZWRBcnJheVByb3RvdHlwZSwgS0VZLCBmb3JjZWQgPyBwcm9wZXJ0eVxuICAgICAgOiBOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTICYmIEludDhBcnJheVByb3RvdHlwZVtLRVldIHx8IHByb3BlcnR5KTtcbiAgfVxufTtcblxudmFyIGV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2QgPSBmdW5jdGlvbiAoS0VZLCBwcm9wZXJ0eSwgZm9yY2VkKSB7XG4gIHZhciBBUlJBWSwgVHlwZWRBcnJheUNvbnN0cnVjdG9yO1xuICBpZiAoIURFU0NSSVBUT1JTKSByZXR1cm47XG4gIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgIGlmIChmb3JjZWQpIGZvciAoQVJSQVkgaW4gVHlwZWRBcnJheUNvbnN0cnVjdG9yc0xpc3QpIHtcbiAgICAgIFR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IGdsb2JhbFtBUlJBWV07XG4gICAgICBpZiAoVHlwZWRBcnJheUNvbnN0cnVjdG9yICYmIGhhc093bihUeXBlZEFycmF5Q29uc3RydWN0b3IsIEtFWSkpIHRyeSB7XG4gICAgICAgIGRlbGV0ZSBUeXBlZEFycmF5Q29uc3RydWN0b3JbS0VZXTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgICB9XG4gICAgaWYgKCFUeXBlZEFycmF5W0tFWV0gfHwgZm9yY2VkKSB7XG4gICAgICAvLyBWOCB+IENocm9tZSA0OS01MCBgJVR5cGVkQXJyYXklYCBtZXRob2RzIGFyZSBub24td3JpdGFibGUgbm9uLWNvbmZpZ3VyYWJsZVxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlZGVmaW5lKFR5cGVkQXJyYXksIEtFWSwgZm9yY2VkID8gcHJvcGVydHkgOiBOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTICYmIFR5cGVkQXJyYXlbS0VZXSB8fCBwcm9wZXJ0eSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gICAgfSBlbHNlIHJldHVybjtcbiAgfVxuICBmb3IgKEFSUkFZIGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0KSB7XG4gICAgVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gZ2xvYmFsW0FSUkFZXTtcbiAgICBpZiAoVHlwZWRBcnJheUNvbnN0cnVjdG9yICYmICghVHlwZWRBcnJheUNvbnN0cnVjdG9yW0tFWV0gfHwgZm9yY2VkKSkge1xuICAgICAgcmVkZWZpbmUoVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBLRVksIHByb3BlcnR5KTtcbiAgICB9XG4gIH1cbn07XG5cbmZvciAoTkFNRSBpbiBUeXBlZEFycmF5Q29uc3RydWN0b3JzTGlzdCkge1xuICBDb25zdHJ1Y3RvciA9IGdsb2JhbFtOQU1FXTtcbiAgUHJvdG90eXBlID0gQ29uc3RydWN0b3IgJiYgQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICBpZiAoUHJvdG90eXBlKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUHJvdG90eXBlLCBUWVBFRF9BUlJBWV9DT05TVFJVQ1RPUiwgQ29uc3RydWN0b3IpO1xuICBlbHNlIE5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MgPSBmYWxzZTtcbn1cblxuZm9yIChOQU1FIGluIEJpZ0ludEFycmF5Q29uc3RydWN0b3JzTGlzdCkge1xuICBDb25zdHJ1Y3RvciA9IGdsb2JhbFtOQU1FXTtcbiAgUHJvdG90eXBlID0gQ29uc3RydWN0b3IgJiYgQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICBpZiAoUHJvdG90eXBlKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUHJvdG90eXBlLCBUWVBFRF9BUlJBWV9DT05TVFJVQ1RPUiwgQ29uc3RydWN0b3IpO1xufVxuXG4vLyBXZWJLaXQgYnVnIC0gdHlwZWQgYXJyYXlzIGNvbnN0cnVjdG9ycyBwcm90b3R5cGUgaXMgT2JqZWN0LnByb3RvdHlwZVxuaWYgKCFOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTIHx8ICFpc0NhbGxhYmxlKFR5cGVkQXJyYXkpIHx8IFR5cGVkQXJyYXkgPT09IEZ1bmN0aW9uLnByb3RvdHlwZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93IC0tIHNhZmVcbiAgVHlwZWRBcnJheSA9IGZ1bmN0aW9uIFR5cGVkQXJyYXkoKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdJbmNvcnJlY3QgaW52b2NhdGlvbicpO1xuICB9O1xuICBpZiAoTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUykgZm9yIChOQU1FIGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0KSB7XG4gICAgaWYgKGdsb2JhbFtOQU1FXSkgc2V0UHJvdG90eXBlT2YoZ2xvYmFsW05BTUVdLCBUeXBlZEFycmF5KTtcbiAgfVxufVxuXG5pZiAoIU5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MgfHwgIVR5cGVkQXJyYXlQcm90b3R5cGUgfHwgVHlwZWRBcnJheVByb3RvdHlwZSA9PT0gT2JqZWN0UHJvdG90eXBlKSB7XG4gIFR5cGVkQXJyYXlQcm90b3R5cGUgPSBUeXBlZEFycmF5LnByb3RvdHlwZTtcbiAgaWYgKE5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MpIGZvciAoTkFNRSBpbiBUeXBlZEFycmF5Q29uc3RydWN0b3JzTGlzdCkge1xuICAgIGlmIChnbG9iYWxbTkFNRV0pIHNldFByb3RvdHlwZU9mKGdsb2JhbFtOQU1FXS5wcm90b3R5cGUsIFR5cGVkQXJyYXlQcm90b3R5cGUpO1xuICB9XG59XG5cbi8vIFdlYktpdCBidWcgLSBvbmUgbW9yZSBvYmplY3QgaW4gVWludDhDbGFtcGVkQXJyYXkgcHJvdG90eXBlIGNoYWluXG5pZiAoTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyAmJiBnZXRQcm90b3R5cGVPZihVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSkgIT09IFR5cGVkQXJyYXlQcm90b3R5cGUpIHtcbiAgc2V0UHJvdG90eXBlT2YoVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUsIFR5cGVkQXJyYXlQcm90b3R5cGUpO1xufVxuXG5pZiAoREVTQ1JJUFRPUlMgJiYgIWhhc093bihUeXBlZEFycmF5UHJvdG90eXBlLCBUT19TVFJJTkdfVEFHKSkge1xuICBUWVBFRF9BUlJBWV9UQUdfUkVRSVJFRCA9IHRydWU7XG4gIGRlZmluZVByb3BlcnR5KFR5cGVkQXJyYXlQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHRoaXMpID8gdGhpc1tUWVBFRF9BUlJBWV9UQUddIDogdW5kZWZpbmVkO1xuICB9IH0pO1xuICBmb3IgKE5BTUUgaW4gVHlwZWRBcnJheUNvbnN0cnVjdG9yc0xpc3QpIGlmIChnbG9iYWxbTkFNRV0pIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsW05BTUVdLCBUWVBFRF9BUlJBWV9UQUcsIE5BTUUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTOiBOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTLFxuICBUWVBFRF9BUlJBWV9DT05TVFJVQ1RPUjogVFlQRURfQVJSQVlfQ09OU1RSVUNUT1IsXG4gIFRZUEVEX0FSUkFZX1RBRzogVFlQRURfQVJSQVlfVEFHX1JFUUlSRUQgJiYgVFlQRURfQVJSQVlfVEFHLFxuICBhVHlwZWRBcnJheTogYVR5cGVkQXJyYXksXG4gIGFUeXBlZEFycmF5Q29uc3RydWN0b3I6IGFUeXBlZEFycmF5Q29uc3RydWN0b3IsXG4gIGV4cG9ydFR5cGVkQXJyYXlNZXRob2Q6IGV4cG9ydFR5cGVkQXJyYXlNZXRob2QsXG4gIGV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2Q6IGV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2QsXG4gIGlzVmlldzogaXNWaWV3LFxuICBpc1R5cGVkQXJyYXk6IGlzVHlwZWRBcnJheSxcbiAgVHlwZWRBcnJheTogVHlwZWRBcnJheSxcbiAgVHlwZWRBcnJheVByb3RvdHlwZTogVHlwZWRBcnJheVByb3RvdHlwZVxufTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xuXG52YXIgTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyA9IEFycmF5QnVmZmVyVmlld0NvcmUuTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUztcblxuLy8gYEFycmF5QnVmZmVyLmlzVmlld2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5YnVmZmVyLmlzdmlld1xuJCh7IHRhcmdldDogJ0FycmF5QnVmZmVyJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyB9LCB7XG4gIGlzVmlldzogQXJyYXlCdWZmZXJWaWV3Q29yZS5pc1ZpZXdcbn0pO1xuIiwidmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbi8vIGBBc3NlcnQ6IElzQ29uc3RydWN0b3IoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3InKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxuLy8gYFNwZWNpZXNDb25zdHJ1Y3RvcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNwZWNpZXNjb25zdHJ1Y3RvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb25zdHJ1Y3RvciA6IGFDb25zdHJ1Y3RvcihTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIEFycmF5QnVmZmVyTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbnZhciBBcnJheUJ1ZmZlciA9IEFycmF5QnVmZmVyTW9kdWxlLkFycmF5QnVmZmVyO1xudmFyIERhdGFWaWV3ID0gQXJyYXlCdWZmZXJNb2R1bGUuRGF0YVZpZXc7XG52YXIgbmF0aXZlQXJyYXlCdWZmZXJTbGljZSA9IEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZTtcblxudmFyIElOQ09SUkVDVF9TTElDRSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICFuZXcgQXJyYXlCdWZmZXIoMikuc2xpY2UoMSwgdW5kZWZpbmVkKS5ieXRlTGVuZ3RoO1xufSk7XG5cbi8vIGBBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheWJ1ZmZlci5wcm90b3R5cGUuc2xpY2VcbiQoeyB0YXJnZXQ6ICdBcnJheUJ1ZmZlcicsIHByb3RvOiB0cnVlLCB1bnNhZmU6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX1NMSUNFIH0sIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAobmF0aXZlQXJyYXlCdWZmZXJTbGljZSAhPT0gdW5kZWZpbmVkICYmIGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbmF0aXZlQXJyYXlCdWZmZXJTbGljZS5jYWxsKGFuT2JqZWN0KHRoaXMpLCBzdGFydCk7IC8vIEZGIGZpeFxuICAgIH1cbiAgICB2YXIgbGVuZ3RoID0gYW5PYmplY3QodGhpcykuYnl0ZUxlbmd0aDtcbiAgICB2YXIgZmlyc3QgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZCwgbGVuZ3RoKTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgQXJyYXlCdWZmZXIpKSh0b0xlbmd0aChmaW4gLSBmaXJzdCkpO1xuICAgIHZhciB2aWV3U291cmNlID0gbmV3IERhdGFWaWV3KHRoaXMpO1xuICAgIHZhciB2aWV3VGFyZ2V0ID0gbmV3IERhdGFWaWV3KHJlc3VsdCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoZmlyc3QgPCBmaW4pIHtcbiAgICAgIHZpZXdUYXJnZXQuc2V0VWludDgoaW5kZXgrKywgdmlld1NvdXJjZS5nZXRVaW50OChmaXJzdCsrKSk7XG4gICAgfSByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIEFycmF5QnVmZmVyTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlcicpO1xudmFyIE5BVElWRV9BUlJBWV9CVUZGRVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5hdGl2ZScpO1xuXG4vLyBgRGF0YVZpZXdgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWRhdGF2aWV3LWNvbnN0cnVjdG9yXG4kKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfQVJSQVlfQlVGRkVSIH0sIHtcbiAgRGF0YVZpZXc6IEFycmF5QnVmZmVyTW9kdWxlLkRhdGFWaWV3XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBGT1JDRUQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZSgxNmUxMSkuZ2V0WWVhcigpICE9PSAxMjA7XG59KTtcblxudmFyIGdldEZ1bGxZZWFyID0gRGF0ZS5wcm90b3R5cGUuZ2V0RnVsbFllYXI7XG5cbi8vIGBEYXRlLnByb3RvdHlwZS5nZXRZZWFyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZGF0ZS5wcm90b3R5cGUuZ2V0eWVhclxuJCh7IHRhcmdldDogJ0RhdGUnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBnZXRZZWFyOiBmdW5jdGlvbiBnZXRZZWFyKCkge1xuICAgIHJldHVybiBnZXRGdWxsWWVhci5jYWxsKHRoaXMpIC0gMTkwMDtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcblxuLy8gYERhdGUubm93YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZGF0ZS5ub3dcbiQoeyB0YXJnZXQ6ICdEYXRlJywgc3RhdDogdHJ1ZSB9LCB7XG4gIG5vdzogZnVuY3Rpb24gbm93KCkge1xuICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIGdldFRpbWUgPSBEYXRlLnByb3RvdHlwZS5nZXRUaW1lO1xudmFyIHNldEZ1bGxZZWFyID0gRGF0ZS5wcm90b3R5cGUuc2V0RnVsbFllYXI7XG5cbi8vIGBEYXRlLnByb3RvdHlwZS5zZXRZZWFyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZGF0ZS5wcm90b3R5cGUuc2V0eWVhclxuJCh7IHRhcmdldDogJ0RhdGUnLCBwcm90bzogdHJ1ZSB9LCB7XG4gIHNldFllYXI6IGZ1bmN0aW9uIHNldFllYXIoeWVhcikge1xuICAgIC8vIHZhbGlkYXRlXG4gICAgZ2V0VGltZS5jYWxsKHRoaXMpO1xuICAgIHZhciB5aSA9IHRvSW50ZWdlck9ySW5maW5pdHkoeWVhcik7XG4gICAgdmFyIHl5eXkgPSAwIDw9IHlpICYmIHlpIDw9IDk5ID8geWkgKyAxOTAwIDogeWk7XG4gICAgcmV0dXJuIHNldEZ1bGxZZWFyLmNhbGwodGhpcywgeXl5eSk7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGBEYXRlLnByb3RvdHlwZS50b0dNVFN0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWRhdGUucHJvdG90eXBlLnRvZ210c3RyaW5nXG4kKHsgdGFyZ2V0OiAnRGF0ZScsIHByb3RvOiB0cnVlIH0sIHtcbiAgdG9HTVRTdHJpbmc6IERhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBlYXRgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnJlcGVhdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXBlYXQoY291bnQpIHtcbiAgdmFyIHN0ciA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHZhciBuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShjb3VudCk7XG4gIGlmIChuIDwgMCB8fCBuID09IEluZmluaXR5KSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBudW1iZXIgb2YgcmVwZXRpdGlvbnMnKTtcbiAgZm9yICg7biA+IDA7IChuID4+Pj0gMSkgJiYgKHN0ciArPSBzdHIpKSBpZiAobiAmIDEpIHJlc3VsdCArPSBzdHI7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXJlcGVhdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciBjZWlsID0gTWF0aC5jZWlsO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS57IHBhZFN0YXJ0LCBwYWRFbmQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChJU19FTkQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgbWF4TGVuZ3RoLCBmaWxsU3RyaW5nKSB7XG4gICAgdmFyIFMgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIGludE1heExlbmd0aCA9IHRvTGVuZ3RoKG1heExlbmd0aCk7XG4gICAgdmFyIHN0cmluZ0xlbmd0aCA9IFMubGVuZ3RoO1xuICAgIHZhciBmaWxsU3RyID0gZmlsbFN0cmluZyA9PT0gdW5kZWZpbmVkID8gJyAnIDogdG9TdHJpbmcoZmlsbFN0cmluZyk7XG4gICAgdmFyIGZpbGxMZW4sIHN0cmluZ0ZpbGxlcjtcbiAgICBpZiAoaW50TWF4TGVuZ3RoIDw9IHN0cmluZ0xlbmd0aCB8fCBmaWxsU3RyID09ICcnKSByZXR1cm4gUztcbiAgICBmaWxsTGVuID0gaW50TWF4TGVuZ3RoIC0gc3RyaW5nTGVuZ3RoO1xuICAgIHN0cmluZ0ZpbGxlciA9IHJlcGVhdC5jYWxsKGZpbGxTdHIsIGNlaWwoZmlsbExlbiAvIGZpbGxTdHIubGVuZ3RoKSk7XG4gICAgaWYgKHN0cmluZ0ZpbGxlci5sZW5ndGggPiBmaWxsTGVuKSBzdHJpbmdGaWxsZXIgPSBzdHJpbmdGaWxsZXIuc2xpY2UoMCwgZmlsbExlbik7XG4gICAgcmV0dXJuIElTX0VORCA/IFMgKyBzdHJpbmdGaWxsZXIgOiBzdHJpbmdGaWxsZXIgKyBTO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnBhZFN0YXJ0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnBhZHN0YXJ0XG4gIHN0YXJ0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5wYWRFbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucGFkZW5kXG4gIGVuZDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgcGFkU3RhcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXBhZCcpLnN0YXJ0O1xuXG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgRGF0ZVByb3RvdHlwZSA9IERhdGUucHJvdG90eXBlO1xudmFyIGdldFRpbWUgPSBEYXRlUHJvdG90eXBlLmdldFRpbWU7XG52YXIgbmF0aXZlRGF0ZVRvSVNPU3RyaW5nID0gRGF0ZVByb3RvdHlwZS50b0lTT1N0cmluZztcblxuLy8gYERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZGF0ZS5wcm90b3R5cGUudG9pc29zdHJpbmdcbi8vIFBoYW50b21KUyAvIG9sZCBXZWJLaXQgZmFpbHMgaGVyZTpcbm1vZHVsZS5leHBvcnRzID0gKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5hdGl2ZURhdGVUb0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKC01ZTEzIC0gMSkpICE9ICcwMzg1LTA3LTI1VDA3OjA2OjM5Ljk5OVonO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgbmF0aXZlRGF0ZVRvSVNPU3RyaW5nLmNhbGwobmV3IERhdGUoTmFOKSk7XG59KSkgPyBmdW5jdGlvbiB0b0lTT1N0cmluZygpIHtcbiAgaWYgKCFpc0Zpbml0ZShnZXRUaW1lLmNhbGwodGhpcykpKSB0aHJvdyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgdmFyIGRhdGUgPSB0aGlzO1xuICB2YXIgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKTtcbiAgdmFyIG1pbGxpc2Vjb25kcyA9IGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gIHZhciBzaWduID0geWVhciA8IDAgPyAnLScgOiB5ZWFyID4gOTk5OSA/ICcrJyA6ICcnO1xuICByZXR1cm4gc2lnbiArIHBhZFN0YXJ0KGFicyh5ZWFyKSwgc2lnbiA/IDYgOiA0LCAwKSArXG4gICAgJy0nICsgcGFkU3RhcnQoZGF0ZS5nZXRVVENNb250aCgpICsgMSwgMiwgMCkgK1xuICAgICctJyArIHBhZFN0YXJ0KGRhdGUuZ2V0VVRDRGF0ZSgpLCAyLCAwKSArXG4gICAgJ1QnICsgcGFkU3RhcnQoZGF0ZS5nZXRVVENIb3VycygpLCAyLCAwKSArXG4gICAgJzonICsgcGFkU3RhcnQoZGF0ZS5nZXRVVENNaW51dGVzKCksIDIsIDApICtcbiAgICAnOicgKyBwYWRTdGFydChkYXRlLmdldFVUQ1NlY29uZHMoKSwgMiwgMCkgK1xuICAgICcuJyArIHBhZFN0YXJ0KG1pbGxpc2Vjb25kcywgMywgMCkgK1xuICAgICdaJztcbn0gOiBuYXRpdmVEYXRlVG9JU09TdHJpbmc7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b0lTT1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kYXRlLXRvLWlzby1zdHJpbmcnKTtcblxuLy8gYERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZGF0ZS5wcm90b3R5cGUudG9pc29zdHJpbmdcbi8vIFBoYW50b21KUyAvIG9sZCBXZWJLaXQgaGFzIGEgYnJva2VuIGltcGxlbWVudGF0aW9uc1xuJCh7IHRhcmdldDogJ0RhdGUnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyAhPT0gdG9JU09TdHJpbmcgfSwge1xuICB0b0lTT1N0cmluZzogdG9JU09TdHJpbmdcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcblxudmFyIEZPUkNFRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKE5hTikudG9KU09OKCkgIT09IG51bGxcbiAgICB8fCBEYXRlLnByb3RvdHlwZS50b0pTT04uY2FsbCh7IHRvSVNPU3RyaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9IH0pICE9PSAxO1xufSk7XG5cbi8vIGBEYXRlLnByb3RvdHlwZS50b0pTT05gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1kYXRlLnByb3RvdHlwZS50b2pzb25cbiQoeyB0YXJnZXQ6ICdEYXRlJywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oa2V5KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgcHYgPSB0b1ByaW1pdGl2ZShPLCAnbnVtYmVyJyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcblxuLy8gYERhdGUucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdKGhpbnQpYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZGF0ZS5wcm90b3R5cGUtQEB0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGludCkge1xuICBhbk9iamVjdCh0aGlzKTtcbiAgaWYgKGhpbnQgPT09ICdzdHJpbmcnIHx8IGhpbnQgPT09ICdkZWZhdWx0JykgaGludCA9ICdzdHJpbmcnO1xuICBlbHNlIGlmIChoaW50ICE9PSAnbnVtYmVyJykgdGhyb3cgVHlwZUVycm9yKCdJbmNvcnJlY3QgaGludCcpO1xuICByZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZSh0aGlzLCBoaW50KTtcbn07XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBkYXRlVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGF0ZS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcbnZhciBEYXRlUHJvdG90eXBlID0gRGF0ZS5wcm90b3R5cGU7XG5cbi8vIGBEYXRlLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWRhdGUucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmlmICghKFRPX1BSSU1JVElWRSBpbiBEYXRlUHJvdG90eXBlKSkge1xuICByZWRlZmluZShEYXRlUHJvdG90eXBlLCBUT19QUklNSVRJVkUsIGRhdGVUb1ByaW1pdGl2ZSk7XG59XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcblxudmFyIERhdGVQcm90b3R5cGUgPSBEYXRlLnByb3RvdHlwZTtcbnZhciBJTlZBTElEX0RBVEUgPSAnSW52YWxpZCBEYXRlJztcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIG5hdGl2ZURhdGVUb1N0cmluZyA9IERhdGVQcm90b3R5cGVbVE9fU1RSSU5HXTtcbnZhciBnZXRUaW1lID0gRGF0ZVByb3RvdHlwZS5nZXRUaW1lO1xuXG4vLyBgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1kYXRlLnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKFN0cmluZyhuZXcgRGF0ZShOYU4pKSAhPSBJTlZBTElEX0RBVEUpIHtcbiAgcmVkZWZpbmUoRGF0ZVByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgdmFsdWUgPSBnZXRUaW1lLmNhbGwodGhpcyk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gbmF0aXZlRGF0ZVRvU3RyaW5nLmNhbGwodGhpcykgOiBJTlZBTElEX0RBVEU7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbnZhciByYXcgPSAvW1xcdyorXFwtLi9AXS87XG5cbnZhciBoZXggPSBmdW5jdGlvbiAoY29kZSwgbGVuZ3RoKSB7XG4gIHZhciByZXN1bHQgPSBjb2RlLnRvU3RyaW5nKDE2KTtcbiAgd2hpbGUgKHJlc3VsdC5sZW5ndGggPCBsZW5ndGgpIHJlc3VsdCA9ICcwJyArIHJlc3VsdDtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIGBlc2NhcGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1lc2NhcGUtc3RyaW5nXG4kKHsgZ2xvYmFsOiB0cnVlIH0sIHtcbiAgZXNjYXBlOiBmdW5jdGlvbiBlc2NhcGUoc3RyaW5nKSB7XG4gICAgdmFyIHN0ciA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBsZW5ndGggPSBzdHIubGVuZ3RoO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNociwgY29kZTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGNociA9IHN0ci5jaGFyQXQoaW5kZXgrKyk7XG4gICAgICBpZiAocmF3LnRlc3QoY2hyKSkge1xuICAgICAgICByZXN1bHQgKz0gY2hyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29kZSA9IGNoci5jaGFyQ29kZUF0KDApO1xuICAgICAgICBpZiAoY29kZSA8IDI1Nikge1xuICAgICAgICAgIHJlc3VsdCArPSAnJScgKyBoZXgoY29kZSwgMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ICs9ICcldScgKyBoZXgoY29kZSwgNCkudG9VcHBlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgZmFjdG9yaWVzID0ge307XG5cbnZhciBjb25zdHJ1Y3QgPSBmdW5jdGlvbiAoQywgYXJnc0xlbmd0aCwgYXJncykge1xuICBpZiAoIShhcmdzTGVuZ3RoIGluIGZhY3RvcmllcykpIHtcbiAgICBmb3IgKHZhciBsaXN0ID0gW10sIGkgPSAwOyBpIDwgYXJnc0xlbmd0aDsgaSsrKSBsaXN0W2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIHdlIGhhdmUgbm8gcHJvcGVyIGFsdGVybmF0aXZlcywgSUU4LSBvbmx5XG4gICAgZmFjdG9yaWVzW2FyZ3NMZW5ndGhdID0gRnVuY3Rpb24oJ0MsYScsICdyZXR1cm4gbmV3IEMoJyArIGxpc3Quam9pbignLCcpICsgJyknKTtcbiAgfSByZXR1cm4gZmFjdG9yaWVzW2FyZ3NMZW5ndGhdKEMsIGFyZ3MpO1xufTtcblxuLy8gYEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZnVuY3Rpb24ucHJvdG90eXBlLmJpbmRcbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uYmluZCB8fCBmdW5jdGlvbiBiaW5kKHRoYXQgLyogLCAuLi5hcmdzICovKSB7XG4gIHZhciBmbiA9IGFDYWxsYWJsZSh0aGlzKTtcbiAgdmFyIHBhcnRBcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmRGdW5jdGlvbiA9IGZ1bmN0aW9uIGJvdW5kKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IHBhcnRBcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmRGdW5jdGlvbiA/IGNvbnN0cnVjdChmbiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogZm4uYXBwbHkodGhhdCwgYXJncyk7XG4gIH07XG4gIGlmIChpc09iamVjdChmbi5wcm90b3R5cGUpKSBib3VuZEZ1bmN0aW9uLnByb3RvdHlwZSA9IGZuLnByb3RvdHlwZTtcbiAgcmV0dXJuIGJvdW5kRnVuY3Rpb247XG59O1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kJyk7XG5cbi8vIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4kKHsgdGFyZ2V0OiAnRnVuY3Rpb24nLCBwcm90bzogdHJ1ZSB9LCB7XG4gIGJpbmQ6IGJpbmRcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIEhBU19JTlNUQU5DRSA9IHdlbGxLbm93blN5bWJvbCgnaGFzSW5zdGFuY2UnKTtcbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLy8gYEZ1bmN0aW9uLnByb3RvdHlwZVtAQGhhc0luc3RhbmNlXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWZ1bmN0aW9uLnByb3RvdHlwZS1AQGhhc2luc3RhbmNlXG5pZiAoIShIQVNfSU5TVEFOQ0UgaW4gRnVuY3Rpb25Qcm90b3R5cGUpKSB7XG4gIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoRnVuY3Rpb25Qcm90b3R5cGUsIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgICBpZiAoIWlzQ2FsbGFibGUodGhpcykgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFpc09iamVjdCh0aGlzLnByb3RvdHlwZSkpIHJldHVybiBPIGluc3RhbmNlb2YgdGhpcztcbiAgICAvLyBmb3IgZW52aXJvbm1lbnQgdy9vIG5hdGl2ZSBgQEBoYXNJbnN0YW5jZWAgbG9naWMgZW5vdWdoIGBpbnN0YW5jZW9mYCwgYnV0IGFkZCB0aGlzOlxuICAgIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IH0pO1xufVxuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgRlVOQ1RJT05fTkFNRV9FWElTVFMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLkVYSVNUUztcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIEZ1bmN0aW9uUHJvdG90eXBlVG9TdHJpbmcgPSBGdW5jdGlvblByb3RvdHlwZS50b1N0cmluZztcbnZhciBuYW1lUkUgPSAvXlxccypmdW5jdGlvbiAoW14gKF0qKS87XG52YXIgTkFNRSA9ICduYW1lJztcblxuLy8gRnVuY3Rpb24gaW5zdGFuY2VzIGAubmFtZWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZnVuY3Rpb24taW5zdGFuY2VzLW5hbWVcbmlmIChERVNDUklQVE9SUyAmJiAhRlVOQ1RJT05fTkFNRV9FWElTVFMpIHtcbiAgZGVmaW5lUHJvcGVydHkoRnVuY3Rpb25Qcm90b3R5cGUsIE5BTUUsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gRnVuY3Rpb25Qcm90b3R5cGVUb1N0cmluZy5jYWxsKHRoaXMpLm1hdGNoKG5hbWVSRSlbMV07XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gYGdsb2JhbFRoaXNgIG9iamVjdFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nbG9iYWx0aGlzXG4kKHsgZ2xvYmFsOiB0cnVlIH0sIHtcbiAgZ2xvYmFsVGhpczogZ2xvYmFsXG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyICRzdHJpbmdpZnkgPSBnZXRCdWlsdEluKCdKU09OJywgJ3N0cmluZ2lmeScpO1xudmFyIHJlID0gL1tcXHVEODAwLVxcdURGRkZdL2c7XG52YXIgbG93ID0gL15bXFx1RDgwMC1cXHVEQkZGXSQvO1xudmFyIGhpID0gL15bXFx1REMwMC1cXHVERkZGXSQvO1xuXG52YXIgZml4ID0gZnVuY3Rpb24gKG1hdGNoLCBvZmZzZXQsIHN0cmluZykge1xuICB2YXIgcHJldiA9IHN0cmluZy5jaGFyQXQob2Zmc2V0IC0gMSk7XG4gIHZhciBuZXh0ID0gc3RyaW5nLmNoYXJBdChvZmZzZXQgKyAxKTtcbiAgaWYgKChsb3cudGVzdChtYXRjaCkgJiYgIWhpLnRlc3QobmV4dCkpIHx8IChoaS50ZXN0KG1hdGNoKSAmJiAhbG93LnRlc3QocHJldikpKSB7XG4gICAgcmV0dXJuICdcXFxcdScgKyBtYXRjaC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTtcbiAgfSByZXR1cm4gbWF0Y2g7XG59O1xuXG52YXIgRk9SQ0VEID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHN0cmluZ2lmeSgnXFx1REYwNlxcdUQ4MzQnKSAhPT0gJ1wiXFxcXHVkZjA2XFxcXHVkODM0XCInXG4gICAgfHwgJHN0cmluZ2lmeSgnXFx1REVBRCcpICE9PSAnXCJcXFxcdWRlYWRcIic7XG59KTtcblxuaWYgKCRzdHJpbmdpZnkpIHtcbiAgLy8gYEpTT04uc3RyaW5naWZ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1qc29uLnN0cmluZ2lmeVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC13ZWxsLWZvcm1lZC1zdHJpbmdpZnlcbiAgJCh7IHRhcmdldDogJ0pTT04nLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCwgcmVwbGFjZXIsIHNwYWNlKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gJHN0cmluZ2lmeS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgcmV0dXJuIHR5cGVvZiByZXN1bHQgPT0gJ3N0cmluZycgPyByZXN1bHQucmVwbGFjZShyZSwgZml4KSA6IHJlc3VsdDtcbiAgICB9XG4gIH0pO1xufVxuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xuXG4vLyBKU09OW0BAdG9TdHJpbmdUYWddIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWpzb24tQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LXByZXZlbnRleHRlbnNpb25zIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIEZSRUVaSU5HID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZyZWV6aW5nJyk7XG5cbnZhciBSRVFVSVJFRCA9IGZhbHNlO1xudmFyIE1FVEFEQVRBID0gdWlkKCdtZXRhJyk7XG52YXIgaWQgPSAwO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSAtLSBzYWZlXG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcblxudmFyIHNldE1ldGFkYXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIGRlZmluZVByb3BlcnR5KGl0LCBNRVRBREFUQSwgeyB2YWx1ZToge1xuICAgIG9iamVjdElEOiAnTycgKyBpZCsrLCAvLyBvYmplY3QgSURcbiAgICB3ZWFrRGF0YToge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG5cbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIGEgcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhc093bihpdCwgTUVUQURBVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGFkYXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBREFUQV0ub2JqZWN0SUQ7XG59O1xuXG52YXIgZ2V0V2Vha0RhdGEgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhc093bihpdCwgTUVUQURBVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGFkYXRhKGl0KTtcbiAgLy8gcmV0dXJuIHRoZSBzdG9yZSBvZiB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBREFUQV0ud2Vha0RhdGE7XG59O1xuXG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpJTkcgJiYgUkVRVUlSRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzT3duKGl0LCBNRVRBREFUQSkpIHNldE1ldGFkYXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcblxudmFyIGVuYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgbWV0YS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4gIFJFUVVJUkVEID0gdHJ1ZTtcbiAgdmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmY7XG4gIHZhciBzcGxpY2UgPSBbXS5zcGxpY2U7XG4gIHZhciB0ZXN0ID0ge307XG4gIHRlc3RbTUVUQURBVEFdID0gMTtcblxuICAvLyBwcmV2ZW50IGV4cG9zaW5nIG9mIG1ldGFkYXRhIGtleVxuICBpZiAoZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0KS5sZW5ndGgpIHtcbiAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSByZXN1bHQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHJlc3VsdFtpXSA9PT0gTUVUQURBVEEpIHtcbiAgICAgICAgICBzcGxpY2UuY2FsbChyZXN1bHQsIGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgICQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgZ2V0T3duUHJvcGVydHlOYW1lczogZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlLmZcbiAgICB9KTtcbiAgfVxufTtcblxudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgZW5hYmxlOiBlbmFibGUsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWtEYXRhOiBnZXRXZWFrRGF0YSxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuXG5oaWRkZW5LZXlzW01FVEFEQVRBXSA9IHRydWU7XG4iLCJ2YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIG1ha2VzIHN1YmNsYXNzaW5nIHdvcmsgY29ycmVjdCBmb3Igd3JhcHBlZCBidWlsdC1pbnNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCR0aGlzLCBkdW1teSwgV3JhcHBlcikge1xuICB2YXIgTmV3VGFyZ2V0LCBOZXdUYXJnZXRQcm90b3R5cGU7XG4gIGlmIChcbiAgICAvLyBpdCBjYW4gd29yayBvbmx5IHdpdGggbmF0aXZlIGBzZXRQcm90b3R5cGVPZmBcbiAgICBzZXRQcm90b3R5cGVPZiAmJlxuICAgIC8vIHdlIGhhdmVuJ3QgY29tcGxldGVseSBjb3JyZWN0IHByZS1FUzYgd2F5IGZvciBnZXR0aW5nIGBuZXcudGFyZ2V0YCwgc28gdXNlIHRoaXNcbiAgICBpc0NhbGxhYmxlKE5ld1RhcmdldCA9IGR1bW15LmNvbnN0cnVjdG9yKSAmJlxuICAgIE5ld1RhcmdldCAhPT0gV3JhcHBlciAmJlxuICAgIGlzT2JqZWN0KE5ld1RhcmdldFByb3RvdHlwZSA9IE5ld1RhcmdldC5wcm90b3R5cGUpICYmXG4gICAgTmV3VGFyZ2V0UHJvdG90eXBlICE9PSBXcmFwcGVyLnByb3RvdHlwZVxuICApIHNldFByb3RvdHlwZU9mKCR0aGlzLCBOZXdUYXJnZXRQcm90b3R5cGUpO1xuICByZXR1cm4gJHRoaXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgSW50ZXJuYWxNZXRhZGF0YU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUsIHdyYXBwZXIsIGNvbW1vbikge1xuICB2YXIgSVNfTUFQID0gQ09OU1RSVUNUT1JfTkFNRS5pbmRleE9mKCdNYXAnKSAhPT0gLTE7XG4gIHZhciBJU19XRUFLID0gQ09OU1RSVUNUT1JfTkFNRS5pbmRleE9mKCdXZWFrJykgIT09IC0xO1xuICB2YXIgQURERVIgPSBJU19NQVAgPyAnc2V0JyA6ICdhZGQnO1xuICB2YXIgTmF0aXZlQ29uc3RydWN0b3IgPSBnbG9iYWxbQ09OU1RSVUNUT1JfTkFNRV07XG4gIHZhciBOYXRpdmVQcm90b3R5cGUgPSBOYXRpdmVDb25zdHJ1Y3RvciAmJiBOYXRpdmVDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHZhciBDb25zdHJ1Y3RvciA9IE5hdGl2ZUNvbnN0cnVjdG9yO1xuICB2YXIgZXhwb3J0ZWQgPSB7fTtcblxuICB2YXIgZml4TWV0aG9kID0gZnVuY3Rpb24gKEtFWSkge1xuICAgIHZhciBuYXRpdmVNZXRob2QgPSBOYXRpdmVQcm90b3R5cGVbS0VZXTtcbiAgICByZWRlZmluZShOYXRpdmVQcm90b3R5cGUsIEtFWSxcbiAgICAgIEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgICBuYXRpdmVNZXRob2QuY2FsbCh0aGlzLCB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSA6IEtFWSA9PSAnZGVsZXRlJyA/IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGtleSkgPyBmYWxzZSA6IG5hdGl2ZU1ldGhvZC5jYWxsKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXkpO1xuICAgICAgfSA6IEtFWSA9PSAnZ2V0JyA/IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGtleSkgPyB1bmRlZmluZWQgOiBuYXRpdmVNZXRob2QuY2FsbCh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5KTtcbiAgICAgIH0gOiBLRVkgPT0gJ2hhcycgPyBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChrZXkpID8gZmFsc2UgOiBuYXRpdmVNZXRob2QuY2FsbCh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5KTtcbiAgICAgIH0gOiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICBuYXRpdmVNZXRob2QuY2FsbCh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICk7XG4gIH07XG5cbiAgdmFyIFJFUExBQ0UgPSBpc0ZvcmNlZChcbiAgICBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICFpc0NhbGxhYmxlKE5hdGl2ZUNvbnN0cnVjdG9yKSB8fCAhKElTX1dFQUsgfHwgTmF0aXZlUHJvdG90eXBlLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpLmVudHJpZXMoKS5uZXh0KCk7XG4gICAgfSkpXG4gICk7XG5cbiAgaWYgKFJFUExBQ0UpIHtcbiAgICAvLyBjcmVhdGUgY29sbGVjdGlvbiBjb25zdHJ1Y3RvclxuICAgIENvbnN0cnVjdG9yID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpO1xuICAgIEludGVybmFsTWV0YWRhdGFNb2R1bGUuZW5hYmxlKCk7XG4gIH0gZWxzZSBpZiAoaXNGb3JjZWQoQ09OU1RSVUNUT1JfTkFNRSwgdHJ1ZSkpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAvLyBlYXJseSBpbXBsZW1lbnRhdGlvbnMgbm90IHN1cHBvcnRzIGNoYWluaW5nXG4gICAgdmFyIEhBU05UX0NIQUlOSU5HID0gaW5zdGFuY2VbQURERVJdKElTX1dFQUsgPyB7fSA6IC0wLCAxKSAhPSBpbnN0YW5jZTtcbiAgICAvLyBWOCB+IENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgIHZhciBBQ0NFUFRfSVRFUkFCTEVTID0gY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkgeyBuZXcgTmF0aXZlQ29uc3RydWN0b3IoaXRlcmFibGUpOyB9KTtcbiAgICAvLyBmb3IgZWFybHkgaW1wbGVtZW50YXRpb25zIC0wIGFuZCArMCBub3QgdGhlIHNhbWVcbiAgICB2YXIgQlVHR1lfWkVSTyA9ICFJU19XRUFLICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFY4IH4gQ2hyb21pdW0gNDItIGZhaWxzIG9ubHkgd2l0aCA1KyBlbGVtZW50c1xuICAgICAgdmFyICRpbnN0YW5jZSA9IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuXG4gICAgaWYgKCFBQ0NFUFRfSVRFUkFCTEVTKSB7XG4gICAgICBDb25zdHJ1Y3RvciA9IHdyYXBwZXIoZnVuY3Rpb24gKGR1bW15LCBpdGVyYWJsZSkge1xuICAgICAgICBhbkluc3RhbmNlKGR1bW15LCBDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSk7XG4gICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCksIGR1bW15LCBDb25zdHJ1Y3Rvcik7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGl0ZXJhdGUoaXRlcmFibGUsIHRoYXRbQURERVJdLCB7IHRoYXQ6IHRoYXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE5hdGl2ZVByb3RvdHlwZTtcbiAgICAgIE5hdGl2ZVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yO1xuICAgIH1cblxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cblxuICAgIGlmIChCVUdHWV9aRVJPIHx8IEhBU05UX0NIQUlOSU5HKSBmaXhNZXRob2QoQURERVIpO1xuXG4gICAgLy8gd2VhayBjb2xsZWN0aW9ucyBzaG91bGQgbm90IGNvbnRhaW5zIC5jbGVhciBtZXRob2RcbiAgICBpZiAoSVNfV0VBSyAmJiBOYXRpdmVQcm90b3R5cGUuY2xlYXIpIGRlbGV0ZSBOYXRpdmVQcm90b3R5cGUuY2xlYXI7XG4gIH1cblxuICBleHBvcnRlZFtDT05TVFJVQ1RPUl9OQU1FXSA9IENvbnN0cnVjdG9yO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6IENvbnN0cnVjdG9yICE9IE5hdGl2ZUNvbnN0cnVjdG9yIH0sIGV4cG9ydGVkKTtcblxuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApO1xuXG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZS1hbGwnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtaXRlcmF0b3InKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJykuZmFzdEtleTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBDT05TVFJVQ1RPUl9OQU1FKTtcbiAgICAgIHNldEludGVybmFsU3RhdGUodGhhdCwge1xuICAgICAgICB0eXBlOiBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICAgICBpbmRleDogY3JlYXRlKG51bGwpLFxuICAgICAgICBmaXJzdDogdW5kZWZpbmVkLFxuICAgICAgICBsYXN0OiB1bmRlZmluZWQsXG4gICAgICAgIHNpemU6IDBcbiAgICAgIH0pO1xuICAgICAgaWYgKCFERVNDUklQVE9SUykgdGhhdC5zaXplID0gMDtcbiAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGl0ZXJhdGUoaXRlcmFibGUsIHRoYXRbQURERVJdLCB7IHRoYXQ6IHRoYXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICB9KTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIHZhciBkZWZpbmUgPSBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICB2YXIgcHJldmlvdXMsIGluZGV4O1xuICAgICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTtcbiAgICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmxhc3QgPSBlbnRyeSA9IHtcbiAgICAgICAgICBpbmRleDogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksXG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHByZXZpb3VzOiBwcmV2aW91cyA9IHN0YXRlLmxhc3QsXG4gICAgICAgICAgbmV4dDogdW5kZWZpbmVkLFxuICAgICAgICAgIHJlbW92ZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIGlmICghc3RhdGUuZmlyc3QpIHN0YXRlLmZpcnN0ID0gZW50cnk7XG4gICAgICAgIGlmIChwcmV2aW91cykgcHJldmlvdXMubmV4dCA9IGVudHJ5O1xuICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUrKztcbiAgICAgICAgZWxzZSB0aGF0LnNpemUrKztcbiAgICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSBzdGF0ZS5pbmRleFtpbmRleF0gPSBlbnRyeTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfTtcblxuICAgIHZhciBnZXRFbnRyeSA9IGZ1bmN0aW9uICh0aGF0LCBrZXkpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAvLyBmYXN0IGNhc2VcbiAgICAgIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KTtcbiAgICAgIHZhciBlbnRyeTtcbiAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gc3RhdGUuaW5kZXhbaW5kZXhdO1xuICAgICAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gICAgICBmb3IgKGVudHJ5ID0gc3RhdGUuZmlyc3Q7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm5leHQpIHtcbiAgICAgICAgaWYgKGVudHJ5LmtleSA9PSBrZXkpIHJldHVybiBlbnRyeTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmNsZWFyKClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5jbGVhclxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmNsZWFyXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGRhdGEgPSBzdGF0ZS5pbmRleDtcbiAgICAgICAgdmFyIGVudHJ5ID0gc3RhdGUuZmlyc3Q7XG4gICAgICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wcmV2aW91cykgZW50cnkucHJldmlvdXMgPSBlbnRyeS5wcmV2aW91cy5uZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmluZGV4XTtcbiAgICAgICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuZmlyc3QgPSBzdGF0ZS5sYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUgPSAwO1xuICAgICAgICBlbHNlIHRoYXQuc2l6ZSA9IDA7XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuZGVsZXRlKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5kZWxldGVcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5kZWxldGVcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uZXh0O1xuICAgICAgICAgIHZhciBwcmV2ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAgICAgZGVsZXRlIHN0YXRlLmluZGV4W2VudHJ5LmluZGV4XTtcbiAgICAgICAgICBlbnRyeS5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocHJldikgcHJldi5uZXh0ID0gbmV4dDtcbiAgICAgICAgICBpZiAobmV4dCkgbmV4dC5wcmV2aW91cyA9IHByZXY7XG4gICAgICAgICAgaWYgKHN0YXRlLmZpcnN0ID09IGVudHJ5KSBzdGF0ZS5maXJzdCA9IG5leHQ7XG4gICAgICAgICAgaWYgKHN0YXRlLmxhc3QgPT0gZW50cnkpIHN0YXRlLmxhc3QgPSBwcmV2O1xuICAgICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZS0tO1xuICAgICAgICAgIGVsc2UgdGhhdC5zaXplLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmZvcmVhY2hcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMyk7XG4gICAgICAgIHZhciBlbnRyeTtcbiAgICAgICAgd2hpbGUgKGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uZXh0IDogc3RhdGUuZmlyc3QpIHtcbiAgICAgICAgICBib3VuZEZ1bmN0aW9uKGVudHJ5LnZhbHVlLCBlbnRyeS5rZXksIHRoaXMpO1xuICAgICAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yZW1vdmVkKSBlbnRyeSA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gYHsgTWFwLCBTZXR9LnByb3RvdHlwZS5oYXMoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmhhc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmhhc1xuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIWdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgSVNfTUFQID8ge1xuICAgICAgLy8gYE1hcC5wcm90b3R5cGUuZ2V0KGtleSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmdldFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoaXMsIGtleSk7XG4gICAgICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52YWx1ZTtcbiAgICAgIH0sXG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLnNldFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IDoge1xuICAgICAgLy8gYFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuYWRkXG4gICAgICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIHZhbHVlID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KEMucHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApIHtcbiAgICB2YXIgSVRFUkFUT1JfTkFNRSA9IENPTlNUUlVDVE9SX05BTUUgKyAnIEl0ZXJhdG9yJztcbiAgICB2YXIgZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuICAgIHZhciBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKElURVJBVE9SX05BTUUpO1xuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLnsga2V5cywgdmFsdWVzLCBlbnRyaWVzLCBAQGl0ZXJhdG9yIH0oKWAgbWV0aG9kc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5lbnRyaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmtleXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUudmFsdWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLUBAaXRlcmF0b3JcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgZGVmaW5lSXRlcmF0b3IoQywgQ09OU1RSVUNUT1JfTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgICAgdHlwZTogSVRFUkFUT1JfTkFNRSxcbiAgICAgICAgdGFyZ2V0OiBpdGVyYXRlZCxcbiAgICAgICAgc3RhdGU6IGdldEludGVybmFsQ29sbGVjdGlvblN0YXRlKGl0ZXJhdGVkKSxcbiAgICAgICAga2luZDoga2luZCxcbiAgICAgICAgbGFzdDogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUodGhpcyk7XG4gICAgICB2YXIga2luZCA9IHN0YXRlLmtpbmQ7XG4gICAgICB2YXIgZW50cnkgPSBzdGF0ZS5sYXN0O1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXN0YXRlLnRhcmdldCB8fCAhKHN0YXRlLmxhc3QgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLnN0YXRlLmZpcnN0KSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICBzdGF0ZS50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHsgdmFsdWU6IGVudHJ5LmtleSwgZG9uZTogZmFsc2UgfTtcbiAgICAgIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4geyB2YWx1ZTogZW50cnkudmFsdWUsIGRvbmU6IGZhbHNlIH07XG4gICAgICByZXR1cm4geyB2YWx1ZTogW2VudHJ5LmtleSwgZW50cnkudmFsdWVdLCBkb25lOiBmYWxzZSB9O1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlW0BAc3BlY2llc11gIGFjY2Vzc29yc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LW1hcC1AQHNwZWNpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1zZXQtQEBzcGVjaWVzXG4gICAgc2V0U3BlY2llcyhDT05TVFJVQ1RPUl9OQU1FKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjb2xsZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24nKTtcbnZhciBjb2xsZWN0aW9uU3Ryb25nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24tc3Ryb25nJyk7XG5cbi8vIGBNYXBgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC1vYmplY3RzXG5tb2R1bGUuZXhwb3J0cyA9IGNvbGxlY3Rpb24oJ01hcCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBNYXAoKSB7IHJldHVybiBpbml0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwgY29sbGVjdGlvblN0cm9uZyk7XG4iLCJ2YXIgbG9nID0gTWF0aC5sb2c7XG5cbi8vIGBNYXRoLmxvZzFwYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC5sb2cxcFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtbG9nMXAgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmxvZzFwIHx8IGZ1bmN0aW9uIGxvZzFwKHgpIHtcbiAgcmV0dXJuICh4ID0gK3gpID4gLTFlLTggJiYgeCA8IDFlLTggPyB4IC0geCAqIHggLyAyIDogbG9nKDEgKyB4KTtcbn07XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBsb2cxcCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLWxvZzFwJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLWFjb3NoIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgJGFjb3NoID0gTWF0aC5hY29zaDtcbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xudmFyIExOMiA9IE1hdGguTE4yO1xuXG52YXIgRk9SQ0VEID0gISRhY29zaFxuICAvLyBWOCBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNTA5XG4gIHx8IE1hdGguZmxvb3IoJGFjb3NoKE51bWJlci5NQVhfVkFMVUUpKSAhPSA3MTBcbiAgLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFjb3NoKEluZmluaXR5KSAtPiBOYU5cbiAgfHwgJGFjb3NoKEluZmluaXR5KSAhPSBJbmZpbml0eTtcblxuLy8gYE1hdGguYWNvc2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLmFjb3NoXG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgYWNvc2g6IGZ1bmN0aW9uIGFjb3NoKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPCAxID8gTmFOIDogeCA+IDk0OTA2MjY1LjYyNDI1MTU2XG4gICAgICA/IGxvZyh4KSArIExOMlxuICAgICAgOiBsb2cxcCh4IC0gMSArIHNxcnQoeCAtIDEpICogc3FydCh4ICsgMSkpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC1hc2luaCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyICRhc2luaCA9IE1hdGguYXNpbmg7XG52YXIgbG9nID0gTWF0aC5sb2c7XG52YXIgc3FydCA9IE1hdGguc3FydDtcblxuZnVuY3Rpb24gYXNpbmgoeCkge1xuICByZXR1cm4gIWlzRmluaXRlKHggPSAreCkgfHwgeCA9PSAwID8geCA6IHggPCAwID8gLWFzaW5oKC14KSA6IGxvZyh4ICsgc3FydCh4ICogeCArIDEpKTtcbn1cblxuLy8gYE1hdGguYXNpbmhgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLmFzaW5oXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXNpbmgoMCkgLT4gLTBcbiQoeyB0YXJnZXQ6ICdNYXRoJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhKCRhc2luaCAmJiAxIC8gJGFzaW5oKDApID4gMCkgfSwge1xuICBhc2luaDogYXNpbmhcbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLWF0YW5oIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgJGF0YW5oID0gTWF0aC5hdGFuaDtcbnZhciBsb2cgPSBNYXRoLmxvZztcblxuLy8gYE1hdGguYXRhbmhgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLmF0YW5oXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXRhbmgoLTApIC0+IDBcbiQoeyB0YXJnZXQ6ICdNYXRoJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhKCRhdGFuaCAmJiAxIC8gJGF0YW5oKC0wKSA8IDApIH0sIHtcbiAgYXRhbmg6IGZ1bmN0aW9uIGF0YW5oKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiBsb2coKDEgKyB4KSAvICgxIC0geCkpIC8gMjtcbiAgfVxufSk7XG4iLCIvLyBgTWF0aC5zaWduYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC5zaWduXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC1zaWduIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5zaWduIHx8IGZ1bmN0aW9uIHNpZ24oeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gKHggPSAreCkgPT0gMCB8fCB4ICE9IHggPyB4IDogeCA8IDAgPyAtMSA6IDE7XG59O1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgc2lnbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLXNpZ24nKTtcblxudmFyIGFicyA9IE1hdGguYWJzO1xudmFyIHBvdyA9IE1hdGgucG93O1xuXG4vLyBgTWF0aC5jYnJ0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC5jYnJ0XG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUgfSwge1xuICBjYnJ0OiBmdW5jdGlvbiBjYnJ0KHgpIHtcbiAgICByZXR1cm4gc2lnbih4ID0gK3gpICogcG93KGFicyh4KSwgMSAvIDMpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGxvZyA9IE1hdGgubG9nO1xudmFyIExPRzJFID0gTWF0aC5MT0cyRTtcblxuLy8gYE1hdGguY2x6MzJgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLmNsejMyXG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUgfSwge1xuICBjbHozMjogZnVuY3Rpb24gY2x6MzIoeCkge1xuICAgIHJldHVybiAoeCA+Pj49IDApID8gMzEgLSBmbG9vcihsb2coeCArIDAuNSkgKiBMT0cyRSkgOiAzMjtcbiAgfVxufSk7XG4iLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC1leHBtMSAtLSBzYWZlXG52YXIgJGV4cG0xID0gTWF0aC5leHBtMTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuLy8gYE1hdGguZXhwbTFgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLmV4cG0xXG5tb2R1bGUuZXhwb3J0cyA9ICghJGV4cG0xXG4gIC8vIE9sZCBGRiBidWdcbiAgfHwgJGV4cG0xKDEwKSA+IDIyMDI1LjQ2NTc5NDgwNjcxOSB8fCAkZXhwbTEoMTApIDwgMjIwMjUuNDY1Nzk0ODA2NzE2NTE2OFxuICAvLyBUb3IgQnJvd3NlciBidWdcbiAgfHwgJGV4cG0xKC0yZS0xNykgIT0gLTJlLTE3XG4pID8gZnVuY3Rpb24gZXhwbTEoeCkge1xuICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiB4ID4gLTFlLTYgJiYgeCA8IDFlLTYgPyB4ICsgeCAqIHggLyAyIDogZXhwKHgpIC0gMTtcbn0gOiAkZXhwbTE7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLWV4cG0xJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLWNvc2ggLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciAkY29zaCA9IE1hdGguY29zaDtcbnZhciBhYnMgPSBNYXRoLmFicztcbnZhciBFID0gTWF0aC5FO1xuXG4vLyBgTWF0aC5jb3NoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC5jb3NoXG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogISRjb3NoIHx8ICRjb3NoKDcxMCkgPT09IEluZmluaXR5IH0sIHtcbiAgY29zaDogZnVuY3Rpb24gY29zaCh4KSB7XG4gICAgdmFyIHQgPSBleHBtMShhYnMoeCkgLSAxKSArIDE7XG4gICAgcmV0dXJuICh0ICsgMSAvICh0ICogRSAqIEUpKSAqIChFIC8gMik7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC1leHBtMScpO1xuXG4vLyBgTWF0aC5leHBtMWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGguZXhwbTFcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLWV4cG0xIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogZXhwbTEgIT0gTWF0aC5leHBtMSB9LCB7IGV4cG0xOiBleHBtMSB9KTtcbiIsInZhciBzaWduID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtc2lnbicpO1xuXG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgRVBTSUxPTiA9IHBvdygyLCAtNTIpO1xudmFyIEVQU0lMT04zMiA9IHBvdygyLCAtMjMpO1xudmFyIE1BWDMyID0gcG93KDIsIDEyNykgKiAoMiAtIEVQU0lMT04zMik7XG52YXIgTUlOMzIgPSBwb3coMiwgLTEyNik7XG5cbnZhciByb3VuZFRpZXNUb0V2ZW4gPSBmdW5jdGlvbiAobikge1xuICByZXR1cm4gbiArIDEgLyBFUFNJTE9OIC0gMSAvIEVQU0lMT047XG59O1xuXG4vLyBgTWF0aC5mcm91bmRgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLmZyb3VuZFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtZnJvdW5kIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5mcm91bmQgfHwgZnVuY3Rpb24gZnJvdW5kKHgpIHtcbiAgdmFyICRhYnMgPSBhYnMoeCk7XG4gIHZhciAkc2lnbiA9IHNpZ24oeCk7XG4gIHZhciBhLCByZXN1bHQ7XG4gIGlmICgkYWJzIDwgTUlOMzIpIHJldHVybiAkc2lnbiAqIHJvdW5kVGllc1RvRXZlbigkYWJzIC8gTUlOMzIgLyBFUFNJTE9OMzIpICogTUlOMzIgKiBFUFNJTE9OMzI7XG4gIGEgPSAoMSArIEVQU0lMT04zMiAvIEVQU0lMT04pICogJGFicztcbiAgcmVzdWx0ID0gYSAtIChhIC0gJGFicyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIGlmIChyZXN1bHQgPiBNQVgzMiB8fCByZXN1bHQgIT0gcmVzdWx0KSByZXR1cm4gJHNpZ24gKiBJbmZpbml0eTtcbiAgcmV0dXJuICRzaWduICogcmVzdWx0O1xufTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZyb3VuZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLWZyb3VuZCcpO1xuXG4vLyBgTWF0aC5mcm91bmRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLmZyb3VuZFxuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlIH0sIHsgZnJvdW5kOiBmcm91bmQgfSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtaHlwb3QgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciAkaHlwb3QgPSBNYXRoLmh5cG90O1xudmFyIGFicyA9IE1hdGguYWJzO1xudmFyIHNxcnQgPSBNYXRoLnNxcnQ7XG5cbi8vIENocm9tZSA3NyBidWdcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTk1NDZcbnZhciBCVUdHWSA9ICEhJGh5cG90ICYmICRoeXBvdChJbmZpbml0eSwgTmFOKSAhPT0gSW5maW5pdHk7XG5cbi8vIGBNYXRoLmh5cG90YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC5oeXBvdFxuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEJVR0dZIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgaHlwb3Q6IGZ1bmN0aW9uIGh5cG90KHZhbHVlMSwgdmFsdWUyKSB7XG4gICAgdmFyIHN1bSA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbGFyZyA9IDA7XG4gICAgdmFyIGFyZywgZGl2O1xuICAgIHdoaWxlIChpIDwgYUxlbikge1xuICAgICAgYXJnID0gYWJzKGFyZ3VtZW50c1tpKytdKTtcbiAgICAgIGlmIChsYXJnIDwgYXJnKSB7XG4gICAgICAgIGRpdiA9IGxhcmcgLyBhcmc7XG4gICAgICAgIHN1bSA9IHN1bSAqIGRpdiAqIGRpdiArIDE7XG4gICAgICAgIGxhcmcgPSBhcmc7XG4gICAgICB9IGVsc2UgaWYgKGFyZyA+IDApIHtcbiAgICAgICAgZGl2ID0gYXJnIC8gbGFyZztcbiAgICAgICAgc3VtICs9IGRpdiAqIGRpdjtcbiAgICAgIH0gZWxzZSBzdW0gKz0gYXJnO1xuICAgIH1cbiAgICByZXR1cm4gbGFyZyA9PT0gSW5maW5pdHkgPyBJbmZpbml0eSA6IGxhcmcgKiBzcXJ0KHN1bSk7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtaW11bCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyICRpbXVsID0gTWF0aC5pbXVsO1xuXG52YXIgRk9SQ0VEID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJGltdWwoMHhGRkZGRkZGRiwgNSkgIT0gLTUgfHwgJGltdWwubGVuZ3RoICE9IDI7XG59KTtcblxuLy8gYE1hdGguaW11bGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGguaW11bFxuLy8gc29tZSBXZWJLaXQgdmVyc2lvbnMgZmFpbHMgd2l0aCBiaWcgbnVtYmVycywgc29tZSBoYXMgd3JvbmcgYXJpdHlcbiQoeyB0YXJnZXQ6ICdNYXRoJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBpbXVsOiBmdW5jdGlvbiBpbXVsKHgsIHkpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhGRkZGO1xuICAgIHZhciB4biA9ICt4O1xuICAgIHZhciB5biA9ICt5O1xuICAgIHZhciB4bCA9IFVJTlQxNiAmIHhuO1xuICAgIHZhciB5bCA9IFVJTlQxNiAmIHluO1xuICAgIHJldHVybiAwIHwgeGwgKiB5bCArICgoVUlOVDE2ICYgeG4gPj4+IDE2KSAqIHlsICsgeGwgKiAoVUlOVDE2ICYgeW4gPj4+IDE2KSA8PCAxNiA+Pj4gMCk7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBMT0cxMEUgPSBNYXRoLkxPRzEwRTtcblxuLy8gYE1hdGgubG9nMTBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLmxvZzEwXG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUgfSwge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBsb2coeCkgKiBMT0cxMEU7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbG9nMXAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC1sb2cxcCcpO1xuXG4vLyBgTWF0aC5sb2cxcGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgubG9nMXBcbiQoeyB0YXJnZXQ6ICdNYXRoJywgc3RhdDogdHJ1ZSB9LCB7IGxvZzFwOiBsb2cxcCB9KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG52YXIgbG9nID0gTWF0aC5sb2c7XG52YXIgTE4yID0gTWF0aC5MTjI7XG5cbi8vIGBNYXRoLmxvZzJgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLmxvZzJcbiQoeyB0YXJnZXQ6ICdNYXRoJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCkge1xuICAgIHJldHVybiBsb2coeCkgLyBMTjI7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgc2lnbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLXNpZ24nKTtcblxuLy8gYE1hdGguc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGguc2lnblxuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlIH0sIHtcbiAgc2lnbjogc2lnblxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGV4cG0xID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtZXhwbTEnKTtcblxudmFyIGFicyA9IE1hdGguYWJzO1xudmFyIGV4cCA9IE1hdGguZXhwO1xudmFyIEUgPSBNYXRoLkU7XG5cbnZhciBGT1JDRUQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLXNpbmggLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE1hdGguc2luaCgtMmUtMTcpICE9IC0yZS0xNztcbn0pO1xuXG4vLyBgTWF0aC5zaW5oYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC5zaW5oXG4vLyBWOCBuZWFyIENocm9taXVtIDM4IGhhcyBhIHByb2JsZW0gd2l0aCB2ZXJ5IHNtYWxsIG51bWJlcnNcbiQoeyB0YXJnZXQ6ICdNYXRoJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBzaW5oOiBmdW5jdGlvbiBzaW5oKHgpIHtcbiAgICByZXR1cm4gYWJzKHggPSAreCkgPCAxID8gKGV4cG0xKHgpIC0gZXhwbTEoLXgpKSAvIDIgOiAoZXhwKHggLSAxKSAtIGV4cCgteCAtIDEpKSAqIChFIC8gMik7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC1leHBtMScpO1xuXG52YXIgZXhwID0gTWF0aC5leHA7XG5cbi8vIGBNYXRoLnRhbmhgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRhbmhcbiQoeyB0YXJnZXQ6ICdNYXRoJywgc3RhdDogdHJ1ZSB9LCB7XG4gIHRhbmg6IGZ1bmN0aW9uIHRhbmgoeCkge1xuICAgIHZhciBhID0gZXhwbTEoeCA9ICt4KTtcbiAgICB2YXIgYiA9IGV4cG0xKC14KTtcbiAgICByZXR1cm4gYSA9PSBJbmZpbml0eSA/IDEgOiBiID09IEluZmluaXR5ID8gLTEgOiAoYSAtIGIpIC8gKGV4cCh4KSArIGV4cCgteCkpO1xuICB9XG59KTtcbiIsInZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xuXG4vLyBNYXRoW0BAdG9TdHJpbmdUYWddIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgtQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlIH0sIHtcbiAgdHJ1bmM6IGZ1bmN0aW9uIHRydW5jKGl0KSB7XG4gICAgcmV0dXJuIChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbiAgfVxufSk7XG4iLCJ2YXIgdmFsdWVPZiA9IDEuMC52YWx1ZU9mO1xuXG4vLyBgdGhpc051bWJlclZhbHVlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdGhpc251bWJlcnZhbHVlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWVPZi5jYWxsKHZhbHVlKTtcbn07XG4iLCIvLyBhIHN0cmluZyBvZiBhbGwgdmFsaWQgdW5pY29kZSB3aGl0ZXNwYWNlc1xubW9kdWxlLmV4cG9ydHMgPSAnXFx1MDAwOVxcdTAwMEFcXHUwMDBCXFx1MDAwQ1xcdTAwMERcXHUwMDIwXFx1MDBBMFxcdTE2ODBcXHUyMDAwXFx1MjAwMVxcdTIwMDInICtcbiAgJ1xcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsInZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciB3aGl0ZXNwYWNlID0gJ1snICsgd2hpdGVzcGFjZXMgKyAnXSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgd2hpdGVzcGFjZSArIHdoaXRlc3BhY2UgKyAnKicpO1xudmFyIHJ0cmltID0gUmVnRXhwKHdoaXRlc3BhY2UgKyB3aGl0ZXNwYWNlICsgJyokJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbSwgdHJpbVN0YXJ0LCB0cmltRW5kLCB0cmltTGVmdCwgdHJpbVJpZ2h0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzKSB7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGx0cmltLCAnJyk7XG4gICAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltTGVmdCwgdHJpbVN0YXJ0IH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1zdGFydFxuICBzdGFydDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1SaWdodCwgdHJpbUVuZCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltZW5kXG4gIGVuZDogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiAgdHJpbTogY3JlYXRlTWV0aG9kKDMpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJykuZjtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgdGhpc051bWJlclZhbHVlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RoaXMtbnVtYmVyLXZhbHVlJyk7XG52YXIgdHJpbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctdHJpbScpLnRyaW07XG5cbnZhciBOVU1CRVIgPSAnTnVtYmVyJztcbnZhciBOYXRpdmVOdW1iZXIgPSBnbG9iYWxbTlVNQkVSXTtcbnZhciBOdW1iZXJQcm90b3R5cGUgPSBOYXRpdmVOdW1iZXIucHJvdG90eXBlO1xuXG4vLyBgVG9OdW1lcmljYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9udW1lcmljXG52YXIgdG9OdW1lcmljID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcmltVmFsdWUgPSB0b1ByaW1pdGl2ZSh2YWx1ZSwgJ251bWJlcicpO1xuICByZXR1cm4gdHlwZW9mIHByaW1WYWx1ZSA9PT0gJ2JpZ2ludCcgPyBwcmltVmFsdWUgOiB0b051bWJlcihwcmltVmFsdWUpO1xufTtcblxuLy8gYFRvTnVtYmVyYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9udW1iZXJcbnZhciB0b051bWJlciA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgaXQgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ251bWJlcicpO1xuICB2YXIgZmlyc3QsIHRoaXJkLCByYWRpeCwgbWF4Q29kZSwgZGlnaXRzLCBsZW5ndGgsIGluZGV4LCBjb2RlO1xuICBpZiAoaXNTeW1ib2woaXQpKSB0aHJvdyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgJiYgaXQubGVuZ3RoID4gMikge1xuICAgIGl0ID0gdHJpbShpdCk7XG4gICAgZmlyc3QgPSBpdC5jaGFyQ29kZUF0KDApO1xuICAgIGlmIChmaXJzdCA9PT0gNDMgfHwgZmlyc3QgPT09IDQ1KSB7XG4gICAgICB0aGlyZCA9IGl0LmNoYXJDb2RlQXQoMik7XG4gICAgICBpZiAodGhpcmQgPT09IDg4IHx8IHRoaXJkID09PSAxMjApIHJldHVybiBOYU47IC8vIE51bWJlcignKzB4MScpIHNob3VsZCBiZSBOYU4sIG9sZCBWOCBmaXhcbiAgICB9IGVsc2UgaWYgKGZpcnN0ID09PSA0OCkge1xuICAgICAgc3dpdGNoIChpdC5jaGFyQ29kZUF0KDEpKSB7XG4gICAgICAgIGNhc2UgNjY6IGNhc2UgOTg6IHJhZGl4ID0gMjsgbWF4Q29kZSA9IDQ5OyBicmVhazsgLy8gZmFzdCBlcXVhbCBvZiAvXjBiWzAxXSskL2lcbiAgICAgICAgY2FzZSA3OTogY2FzZSAxMTE6IHJhZGl4ID0gODsgbWF4Q29kZSA9IDU1OyBicmVhazsgLy8gZmFzdCBlcXVhbCBvZiAvXjBvWzAtN10rJC9pXG4gICAgICAgIGRlZmF1bHQ6IHJldHVybiAraXQ7XG4gICAgICB9XG4gICAgICBkaWdpdHMgPSBpdC5zbGljZSgyKTtcbiAgICAgIGxlbmd0aCA9IGRpZ2l0cy5sZW5ndGg7XG4gICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY29kZSA9IGRpZ2l0cy5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgLy8gcGFyc2VJbnQgcGFyc2VzIGEgc3RyaW5nIHRvIGEgZmlyc3QgdW5hdmFpbGFibGUgc3ltYm9sXG4gICAgICAgIC8vIGJ1dCBUb051bWJlciBzaG91bGQgcmV0dXJuIE5hTiBpZiBhIHN0cmluZyBjb250YWlucyB1bmF2YWlsYWJsZSBzeW1ib2xzXG4gICAgICAgIGlmIChjb2RlIDwgNDggfHwgY29kZSA+IG1heENvZGUpIHJldHVybiBOYU47XG4gICAgICB9IHJldHVybiBwYXJzZUludChkaWdpdHMsIHJhZGl4KTtcbiAgICB9XG4gIH0gcmV0dXJuICtpdDtcbn07XG5cbi8vIGBOdW1iZXJgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW51bWJlci1jb25zdHJ1Y3RvclxuaWYgKGlzRm9yY2VkKE5VTUJFUiwgIU5hdGl2ZU51bWJlcignIDBvMScpIHx8ICFOYXRpdmVOdW1iZXIoJzBiMScpIHx8IE5hdGl2ZU51bWJlcignKzB4MScpKSkge1xuICB2YXIgTnVtYmVyV3JhcHBlciA9IGZ1bmN0aW9uIE51bWJlcih2YWx1ZSkge1xuICAgIHZhciBuID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgPyAwIDogTmF0aXZlTnVtYmVyKHRvTnVtZXJpYyh2YWx1ZSkpO1xuICAgIHZhciBkdW1teSA9IHRoaXM7XG4gICAgLy8gY2hlY2sgb24gMS4uY29uc3RydWN0b3IoZm9vKSBjYXNlXG4gICAgcmV0dXJuIGR1bW15IGluc3RhbmNlb2YgTnVtYmVyV3JhcHBlciAmJiBmYWlscyhmdW5jdGlvbiAoKSB7IHRoaXNOdW1iZXJWYWx1ZShkdW1teSk7IH0pXG4gICAgICA/IGluaGVyaXRJZlJlcXVpcmVkKE9iamVjdChuKSwgZHVtbXksIE51bWJlcldyYXBwZXIpIDogbjtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IERFU0NSSVBUT1JTID8gZ2V0T3duUHJvcGVydHlOYW1lcyhOYXRpdmVOdW1iZXIpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVMyMDE1IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVMyMDE1IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04sTUFYX1NBRkVfSU5URUdFUixNSU5fU0FGRV9JTlRFR0VSLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLHBhcnNlRmxvYXQscGFyc2VJbnQsJyArXG4gICAgLy8gRVNOZXh0XG4gICAgJ2Zyb21TdHJpbmcscmFuZ2UnXG4gICkuc3BsaXQoJywnKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOyBqKyspIHtcbiAgICBpZiAoaGFzT3duKE5hdGl2ZU51bWJlciwga2V5ID0ga2V5c1tqXSkgJiYgIWhhc093bihOdW1iZXJXcmFwcGVyLCBrZXkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eShOdW1iZXJXcmFwcGVyLCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihOYXRpdmVOdW1iZXIsIGtleSkpO1xuICAgIH1cbiAgfVxuICBOdW1iZXJXcmFwcGVyLnByb3RvdHlwZSA9IE51bWJlclByb3RvdHlwZTtcbiAgTnVtYmVyUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTnVtYmVyV3JhcHBlcjtcbiAgcmVkZWZpbmUoZ2xvYmFsLCBOVU1CRVIsIE51bWJlcldyYXBwZXIpO1xufVxuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGBOdW1iZXIuRVBTSUxPTmAgY29uc3RhbnRcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbnVtYmVyLmVwc2lsb25cbiQoeyB0YXJnZXQ6ICdOdW1iZXInLCBzdGF0OiB0cnVlIH0sIHtcbiAgRVBTSUxPTjogTWF0aC5wb3coMiwgLTUyKVxufSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG52YXIgZ2xvYmFsSXNGaW5pdGUgPSBnbG9iYWwuaXNGaW5pdGU7XG5cbi8vIGBOdW1iZXIuaXNGaW5pdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIuaXNmaW5pdGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1udW1iZXItaXNmaW5pdGUgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNGaW5pdGUgfHwgZnVuY3Rpb24gaXNGaW5pdGUoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnbnVtYmVyJyAmJiBnbG9iYWxJc0Zpbml0ZShpdCk7XG59O1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbnVtYmVySXNGaW5pdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbnVtYmVyLWlzLWZpbml0ZScpO1xuXG4vLyBgTnVtYmVyLmlzRmluaXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbnVtYmVyLmlzZmluaXRlXG4kKHsgdGFyZ2V0OiAnTnVtYmVyJywgc3RhdDogdHJ1ZSB9LCB7IGlzRmluaXRlOiBudW1iZXJJc0Zpbml0ZSB9KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYElzSW50ZWdyYWxOdW1iZXJgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2ludGVncmFsbnVtYmVyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbnVtYmVyLWlzaW50ZWdlciAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE51bWJlci5pc0ludGVnZXIgfHwgZnVuY3Rpb24gaXNJbnRlZ2VyKGl0KSB7XG4gIHJldHVybiAhaXNPYmplY3QoaXQpICYmIGlzRmluaXRlKGl0KSAmJiBmbG9vcihpdCkgPT09IGl0O1xufTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzSW50ZWdyYWxOdW1iZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtaW50ZWdyYWwtbnVtYmVyJyk7XG5cbi8vIGBOdW1iZXIuaXNJbnRlZ2VyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbnVtYmVyLmlzaW50ZWdlclxuJCh7IHRhcmdldDogJ051bWJlcicsIHN0YXQ6IHRydWUgfSwge1xuICBpc0ludGVnZXI6IGlzSW50ZWdyYWxOdW1iZXJcbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGBOdW1iZXIuaXNOYU5gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIuaXNuYW5cbiQoeyB0YXJnZXQ6ICdOdW1iZXInLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgcmV0dXJuIG51bWJlciAhPSBudW1iZXI7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNJbnRlZ3JhbE51bWJlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1pbnRlZ3JhbC1udW1iZXInKTtcblxudmFyIGFicyA9IE1hdGguYWJzO1xuXG4vLyBgTnVtYmVyLmlzU2FmZUludGVnZXJgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIuaXNzYWZlaW50ZWdlclxuJCh7IHRhcmdldDogJ051bWJlcicsIHN0YXQ6IHRydWUgfSwge1xuICBpc1NhZmVJbnRlZ2VyOiBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKG51bWJlcikge1xuICAgIHJldHVybiBpc0ludGVncmFsTnVtYmVyKG51bWJlcikgJiYgYWJzKG51bWJlcikgPD0gMHgxRkZGRkZGRkZGRkZGRjtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcblxuLy8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYCBjb25zdGFudFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIubWF4X3NhZmVfaW50ZWdlclxuJCh7IHRhcmdldDogJ051bWJlcicsIHN0YXQ6IHRydWUgfSwge1xuICBNQVhfU0FGRV9JTlRFR0VSOiAweDFGRkZGRkZGRkZGRkZGXG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG4vLyBgTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVJgIGNvbnN0YW50XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW51bWJlci5taW5fc2FmZV9pbnRlZ2VyXG4kKHsgdGFyZ2V0OiAnTnVtYmVyJywgc3RhdDogdHJ1ZSB9LCB7XG4gIE1JTl9TQUZFX0lOVEVHRVI6IC0weDFGRkZGRkZGRkZGRkZGXG59KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciB0cmltID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltJykudHJpbTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgJHBhcnNlRmxvYXQgPSBnbG9iYWwucGFyc2VGbG9hdDtcbnZhciBTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIElURVJBVE9SID0gU3ltYm9sICYmIFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGT1JDRUQgPSAxIC8gJHBhcnNlRmxvYXQod2hpdGVzcGFjZXMgKyAnLTAnKSAhPT0gLUluZmluaXR5XG4gIC8vIE1TIEVkZ2UgMTgtIGJyb2tlbiB3aXRoIGJveGVkIHN5bWJvbHNcbiAgfHwgKElURVJBVE9SICYmICFmYWlscyhmdW5jdGlvbiAoKSB7ICRwYXJzZUZsb2F0KE9iamVjdChJVEVSQVRPUikpOyB9KSk7XG5cbi8vIGBwYXJzZUZsb2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcGFyc2VmbG9hdC1zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gRk9SQ0VEID8gZnVuY3Rpb24gcGFyc2VGbG9hdChzdHJpbmcpIHtcbiAgdmFyIHRyaW1tZWRTdHJpbmcgPSB0cmltKHRvU3RyaW5nKHN0cmluZykpO1xuICB2YXIgcmVzdWx0ID0gJHBhcnNlRmxvYXQodHJpbW1lZFN0cmluZyk7XG4gIHJldHVybiByZXN1bHQgPT09IDAgJiYgdHJpbW1lZFN0cmluZy5jaGFyQXQoMCkgPT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL251bWJlci1wYXJzZS1mbG9hdCcpO1xuXG4vLyBgTnVtYmVyLnBhcnNlRmxvYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIucGFyc2VGbG9hdFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW51bWJlci1wYXJzZWZsb2F0IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4kKHsgdGFyZ2V0OiAnTnVtYmVyJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBOdW1iZXIucGFyc2VGbG9hdCAhPSBwYXJzZUZsb2F0IH0sIHtcbiAgcGFyc2VGbG9hdDogcGFyc2VGbG9hdFxufSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgdHJpbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctdHJpbScpLnRyaW07XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyICRwYXJzZUludCA9IGdsb2JhbC5wYXJzZUludDtcbnZhciBTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIElURVJBVE9SID0gU3ltYm9sICYmIFN5bWJvbC5pdGVyYXRvcjtcbnZhciBoZXggPSAvXlsrLV0/MHgvaTtcbnZhciBGT1JDRUQgPSAkcGFyc2VJbnQod2hpdGVzcGFjZXMgKyAnMDgnKSAhPT0gOCB8fCAkcGFyc2VJbnQod2hpdGVzcGFjZXMgKyAnMHgxNicpICE9PSAyMlxuICAvLyBNUyBFZGdlIDE4LSBicm9rZW4gd2l0aCBib3hlZCBzeW1ib2xzXG4gIHx8IChJVEVSQVRPUiAmJiAhZmFpbHMoZnVuY3Rpb24gKCkgeyAkcGFyc2VJbnQoT2JqZWN0KElURVJBVE9SKSk7IH0pKTtcblxuLy8gYHBhcnNlSW50YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcGFyc2VpbnQtc3RyaW5nLXJhZGl4XG5tb2R1bGUuZXhwb3J0cyA9IEZPUkNFRCA/IGZ1bmN0aW9uIHBhcnNlSW50KHN0cmluZywgcmFkaXgpIHtcbiAgdmFyIFMgPSB0cmltKHRvU3RyaW5nKHN0cmluZykpO1xuICByZXR1cm4gJHBhcnNlSW50KFMsIChyYWRpeCA+Pj4gMCkgfHwgKGhleC50ZXN0KFMpID8gMTYgOiAxMCkpO1xufSA6ICRwYXJzZUludDtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHBhcnNlSW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL251bWJlci1wYXJzZS1pbnQnKTtcblxuLy8gYE51bWJlci5wYXJzZUludGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW51bWJlci5wYXJzZWludFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW51bWJlci1wYXJzZWludCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuJCh7IHRhcmdldDogJ051bWJlcicsIHN0YXQ6IHRydWUsIGZvcmNlZDogTnVtYmVyLnBhcnNlSW50ICE9IHBhcnNlSW50IH0sIHtcbiAgcGFyc2VJbnQ6IHBhcnNlSW50XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRoaXNOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90aGlzLW51bWJlci12YWx1ZScpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctcmVwZWF0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIG5hdGl2ZVRvRml4ZWQgPSAxLjAudG9GaXhlZDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbnZhciBwb3cgPSBmdW5jdGlvbiAoeCwgbiwgYWNjKSB7XG4gIHJldHVybiBuID09PSAwID8gYWNjIDogbiAlIDIgPT09IDEgPyBwb3coeCwgbiAtIDEsIGFjYyAqIHgpIDogcG93KHggKiB4LCBuIC8gMiwgYWNjKTtcbn07XG5cbnZhciBsb2cgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbiA9IDA7XG4gIHZhciB4MiA9IHg7XG4gIHdoaWxlICh4MiA+PSA0MDk2KSB7XG4gICAgbiArPSAxMjtcbiAgICB4MiAvPSA0MDk2O1xuICB9XG4gIHdoaWxlICh4MiA+PSAyKSB7XG4gICAgbiArPSAxO1xuICAgIHgyIC89IDI7XG4gIH0gcmV0dXJuIG47XG59O1xuXG52YXIgbXVsdGlwbHkgPSBmdW5jdGlvbiAoZGF0YSwgbiwgYykge1xuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIGMyID0gYztcbiAgd2hpbGUgKCsraW5kZXggPCA2KSB7XG4gICAgYzIgKz0gbiAqIGRhdGFbaW5kZXhdO1xuICAgIGRhdGFbaW5kZXhdID0gYzIgJSAxZTc7XG4gICAgYzIgPSBmbG9vcihjMiAvIDFlNyk7XG4gIH1cbn07XG5cbnZhciBkaXZpZGUgPSBmdW5jdGlvbiAoZGF0YSwgbikge1xuICB2YXIgaW5kZXggPSA2O1xuICB2YXIgYyA9IDA7XG4gIHdoaWxlICgtLWluZGV4ID49IDApIHtcbiAgICBjICs9IGRhdGFbaW5kZXhdO1xuICAgIGRhdGFbaW5kZXhdID0gZmxvb3IoYyAvIG4pO1xuICAgIGMgPSAoYyAlIG4pICogMWU3O1xuICB9XG59O1xuXG52YXIgZGF0YVRvU3RyaW5nID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgdmFyIGluZGV4ID0gNjtcbiAgdmFyIHMgPSAnJztcbiAgd2hpbGUgKC0taW5kZXggPj0gMCkge1xuICAgIGlmIChzICE9PSAnJyB8fCBpbmRleCA9PT0gMCB8fCBkYXRhW2luZGV4XSAhPT0gMCkge1xuICAgICAgdmFyIHQgPSBTdHJpbmcoZGF0YVtpbmRleF0pO1xuICAgICAgcyA9IHMgPT09ICcnID8gdCA6IHMgKyByZXBlYXQuY2FsbCgnMCcsIDcgLSB0Lmxlbmd0aCkgKyB0O1xuICAgIH1cbiAgfSByZXR1cm4gcztcbn07XG5cbnZhciBGT1JDRUQgPSBuYXRpdmVUb0ZpeGVkICYmIChcbiAgMC4wMDAwOC50b0ZpeGVkKDMpICE9PSAnMC4wMDAnIHx8XG4gIDAuOS50b0ZpeGVkKDApICE9PSAnMScgfHxcbiAgMS4yNTUudG9GaXhlZCgyKSAhPT0gJzEuMjUnIHx8XG4gIDEwMDAwMDAwMDAwMDAwMDAxMjguMC50b0ZpeGVkKDApICE9PSAnMTAwMDAwMDAwMDAwMDAwMDEyOCdcbikgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgbmF0aXZlVG9GaXhlZC5jYWxsKHt9KTtcbn0pO1xuXG4vLyBgTnVtYmVyLnByb3RvdHlwZS50b0ZpeGVkYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbnVtYmVyLnByb3RvdHlwZS50b2ZpeGVkXG4kKHsgdGFyZ2V0OiAnTnVtYmVyJywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgdG9GaXhlZDogZnVuY3Rpb24gdG9GaXhlZChmcmFjdGlvbkRpZ2l0cykge1xuICAgIHZhciBudW1iZXIgPSB0aGlzTnVtYmVyVmFsdWUodGhpcyk7XG4gICAgdmFyIGZyYWN0RGlnaXRzID0gdG9JbnRlZ2VyT3JJbmZpbml0eShmcmFjdGlvbkRpZ2l0cyk7XG4gICAgdmFyIGRhdGEgPSBbMCwgMCwgMCwgMCwgMCwgMF07XG4gICAgdmFyIHNpZ24gPSAnJztcbiAgICB2YXIgcmVzdWx0ID0gJzAnO1xuICAgIHZhciBlLCB6LCBqLCBrO1xuXG4gICAgaWYgKGZyYWN0RGlnaXRzIDwgMCB8fCBmcmFjdERpZ2l0cyA+IDIwKSB0aHJvdyBSYW5nZUVycm9yKCdJbmNvcnJlY3QgZnJhY3Rpb24gZGlnaXRzJyk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAobnVtYmVyICE9IG51bWJlcikgcmV0dXJuICdOYU4nO1xuICAgIGlmIChudW1iZXIgPD0gLTFlMjEgfHwgbnVtYmVyID49IDFlMjEpIHJldHVybiBTdHJpbmcobnVtYmVyKTtcbiAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgc2lnbiA9ICctJztcbiAgICAgIG51bWJlciA9IC1udW1iZXI7XG4gICAgfVxuICAgIGlmIChudW1iZXIgPiAxZS0yMSkge1xuICAgICAgZSA9IGxvZyhudW1iZXIgKiBwb3coMiwgNjksIDEpKSAtIDY5O1xuICAgICAgeiA9IGUgPCAwID8gbnVtYmVyICogcG93KDIsIC1lLCAxKSA6IG51bWJlciAvIHBvdygyLCBlLCAxKTtcbiAgICAgIHogKj0gMHgxMDAwMDAwMDAwMDAwMDtcbiAgICAgIGUgPSA1MiAtIGU7XG4gICAgICBpZiAoZSA+IDApIHtcbiAgICAgICAgbXVsdGlwbHkoZGF0YSwgMCwgeik7XG4gICAgICAgIGogPSBmcmFjdERpZ2l0cztcbiAgICAgICAgd2hpbGUgKGogPj0gNykge1xuICAgICAgICAgIG11bHRpcGx5KGRhdGEsIDFlNywgMCk7XG4gICAgICAgICAgaiAtPSA3O1xuICAgICAgICB9XG4gICAgICAgIG11bHRpcGx5KGRhdGEsIHBvdygxMCwgaiwgMSksIDApO1xuICAgICAgICBqID0gZSAtIDE7XG4gICAgICAgIHdoaWxlIChqID49IDIzKSB7XG4gICAgICAgICAgZGl2aWRlKGRhdGEsIDEgPDwgMjMpO1xuICAgICAgICAgIGogLT0gMjM7XG4gICAgICAgIH1cbiAgICAgICAgZGl2aWRlKGRhdGEsIDEgPDwgaik7XG4gICAgICAgIG11bHRpcGx5KGRhdGEsIDEsIDEpO1xuICAgICAgICBkaXZpZGUoZGF0YSwgMik7XG4gICAgICAgIHJlc3VsdCA9IGRhdGFUb1N0cmluZyhkYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG11bHRpcGx5KGRhdGEsIDAsIHopO1xuICAgICAgICBtdWx0aXBseShkYXRhLCAxIDw8IC1lLCAwKTtcbiAgICAgICAgcmVzdWx0ID0gZGF0YVRvU3RyaW5nKGRhdGEpICsgcmVwZWF0LmNhbGwoJzAnLCBmcmFjdERpZ2l0cyk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmcmFjdERpZ2l0cyA+IDApIHtcbiAgICAgIGsgPSByZXN1bHQubGVuZ3RoO1xuICAgICAgcmVzdWx0ID0gc2lnbiArIChrIDw9IGZyYWN0RGlnaXRzXG4gICAgICAgID8gJzAuJyArIHJlcGVhdC5jYWxsKCcwJywgZnJhY3REaWdpdHMgLSBrKSArIHJlc3VsdFxuICAgICAgICA6IHJlc3VsdC5zbGljZSgwLCBrIC0gZnJhY3REaWdpdHMpICsgJy4nICsgcmVzdWx0LnNsaWNlKGsgLSBmcmFjdERpZ2l0cykpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBzaWduICsgcmVzdWx0O1xuICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRoaXNOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90aGlzLW51bWJlci12YWx1ZScpO1xuXG52YXIgbmF0aXZlVG9QcmVjaXNpb24gPSAxLjAudG9QcmVjaXNpb247XG5cbnZhciBGT1JDRUQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIElFNy1cbiAgcmV0dXJuIG5hdGl2ZVRvUHJlY2lzaW9uLmNhbGwoMSwgdW5kZWZpbmVkKSAhPT0gJzEnO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgbmF0aXZlVG9QcmVjaXNpb24uY2FsbCh7fSk7XG59KTtcblxuLy8gYE51bWJlci5wcm90b3R5cGUudG9QcmVjaXNpb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIucHJvdG90eXBlLnRvcHJlY2lzaW9uXG4kKHsgdGFyZ2V0OiAnTnVtYmVyJywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgdG9QcmVjaXNpb246IGZ1bmN0aW9uIHRvUHJlY2lzaW9uKHByZWNpc2lvbikge1xuICAgIHJldHVybiBwcmVjaXNpb24gPT09IHVuZGVmaW5lZFxuICAgICAgPyBuYXRpdmVUb1ByZWNpc2lvbi5jYWxsKHRoaXNOdW1iZXJWYWx1ZSh0aGlzKSlcbiAgICAgIDogbmF0aXZlVG9QcmVjaXNpb24uY2FsbCh0aGlzTnVtYmVyVmFsdWUodGhpcyksIHByZWNpc2lvbik7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1hc3NpZ24gLS0gc2FmZVxudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBzaG91bGQgaGF2ZSBjb3JyZWN0IG9yZGVyIG9mIG9wZXJhdGlvbnMgKEVkZ2UgYnVnKVxuICBpZiAoREVTQ1JJUFRPUlMgJiYgJGFzc2lnbih7IGI6IDEgfSwgJGFzc2lnbihkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRoaXMsICdiJywge1xuICAgICAgICB2YWx1ZTogMyxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfSksIHsgYjogMiB9KSkuYiAhPT0gMSkgcmV0dXJuIHRydWU7XG4gIC8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc3ltYm9sIC0tIHNhZmVcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgpO1xuICB2YXIgYWxwaGFiZXQgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW3N5bWJvbF0gPSA3O1xuICBhbHBoYWJldC5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoY2hyKSB7IEJbY2hyXSA9IGNocjsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtzeW1ib2xdICE9IDcgfHwgb2JqZWN0S2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gYWxwaGFiZXQ7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICB2YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xuICB3aGlsZSAoYXJndW1lbnRzTGVuZ3RoID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IEluZGV4ZWRPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5U3ltYm9scyA/IG9iamVjdEtleXMoUykuY29uY2F0KGdldE93blByb3BlcnR5U3ltYm9scyhTKSkgOiBvYmplY3RLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAga2V5ID0ga2V5c1tqKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtYXNzaWduJyk7XG5cbi8vIGBPYmplY3QuYXNzaWduYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmFzc2lnblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1hc3NpZ24gLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IE9iamVjdC5hc3NpZ24gIT09IGFzc2lnbiB9LCB7XG4gIGFzc2lnbjogYXNzaWduXG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgY3JlYXRlOiBjcmVhdGVcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIFdFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtd2Via2l0LXZlcnNpb24nKTtcblxuLy8gRm9yY2VkIHJlcGxhY2VtZW50IG9iamVjdCBwcm90b3R5cGUgYWNjZXNzb3JzIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gSVNfUFVSRSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBUaGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGNyYXNoZXMgb2xkIFdlYktpdFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMjMyXG4gIGlmIChXRUJLSVQgJiYgV0VCS0lUIDwgNTM1KSByZXR1cm47XG4gIHZhciBrZXkgPSBNYXRoLnJhbmRvbSgpO1xuICAvLyBJbiBGRiB0aHJvd3Mgb25seSBkZWZpbmUgbWV0aG9kc1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWYsIG5vLXVzZWxlc3MtY2FsbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBfX2RlZmluZVNldHRlcl9fLmNhbGwobnVsbCwga2V5LCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICBkZWxldGUgZ2xvYmFsW2tleV07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgRk9SQ0VEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm90b3R5cGUtYWNjZXNzb3JzLWZvcmNlZCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fXG5pZiAoREVTQ1JJUFRPUlMpIHtcbiAgJCh7IHRhcmdldDogJ09iamVjdCcsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gICAgX19kZWZpbmVHZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5TW9kdWxlLmYodG9PYmplY3QodGhpcyksIFAsIHsgZ2V0OiBhQ2FsbGFibGUoZ2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhREVTQ1JJUFRPUlMsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGRlZmluZVByb3BlcnRpZXM6IGRlZmluZVByb3BlcnRpZXNcbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBvYmplY3REZWZpbmVQcm9wZXJ0eU1vZGlsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFERVNDUklQVE9SUywgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydHk6IG9iamVjdERlZmluZVByb3BlcnR5TW9kaWxlLmZcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBGT1JDRUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3RvdHlwZS1hY2Nlc3NvcnMtZm9yY2VkJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX19gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX19cbmlmIChERVNDUklQVE9SUykge1xuICAkKHsgdGFyZ2V0OiAnT2JqZWN0JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgICBfX2RlZmluZVNldHRlcl9fOiBmdW5jdGlvbiBfX2RlZmluZVNldHRlcl9fKFAsIHNldHRlcikge1xuICAgICAgZGVmaW5lUHJvcGVydHlNb2R1bGUuZih0b09iamVjdCh0aGlzKSwgUCwgeyBzZXQ6IGFDYWxsYWJsZShzZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgfVxuICB9KTtcbn1cbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpLmY7XG5cbi8vIGBPYmplY3QueyBlbnRyaWVzLCB2YWx1ZXMgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUT19FTlRSSUVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChpdCk7XG4gICAgdmFyIGtleXMgPSBvYmplY3RLZXlzKE8pO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgIGtleSA9IGtleXNbaSsrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChPLCBrZXkpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKFRPX0VOVFJJRVMgPyBba2V5LCBPW2tleV1dIDogT1trZXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgT2JqZWN0LmVudHJpZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5lbnRyaWVzXG4gIGVudHJpZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYE9iamVjdC52YWx1ZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC52YWx1ZXNcbiAgdmFsdWVzOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGVudHJpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXRvLWFycmF5JykuZW50cmllcztcblxuLy8gYE9iamVjdC5lbnRyaWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmVudHJpZXNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcyhPKSB7XG4gICAgcmV0dXJuICRlbnRyaWVzKE8pO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIEZSRUVaSU5HID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZyZWV6aW5nJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBvbkZyZWV6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpLm9uRnJlZXplO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWZyZWV6ZSAtLSBzYWZlXG52YXIgJGZyZWV6ZSA9IE9iamVjdC5mcmVlemU7XG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgJGZyZWV6ZSgxKTsgfSk7XG5cbi8vIGBPYmplY3QuZnJlZXplYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmZyZWV6ZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUywgc2hhbTogIUZSRUVaSU5HIH0sIHtcbiAgZnJlZXplOiBmdW5jdGlvbiBmcmVlemUoaXQpIHtcbiAgICByZXR1cm4gJGZyZWV6ZSAmJiBpc09iamVjdChpdCkgPyAkZnJlZXplKG9uRnJlZXplKGl0KSkgOiBpdDtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxuLy8gYE9iamVjdC5mcm9tRW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtZnJvbS1lbnRyaWVzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGZyb21FbnRyaWVzOiBmdW5jdGlvbiBmcm9tRW50cmllcyhpdGVyYWJsZSkge1xuICAgIHZhciBvYmogPSB7fTtcbiAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAoaywgdikge1xuICAgICAgY3JlYXRlUHJvcGVydHkob2JqLCBrLCB2KTtcbiAgICB9LCB7IEFTX0VOVFJJRVM6IHRydWUgfSk7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKDEpOyB9KTtcbnZhciBGT1JDRUQgPSAhREVTQ1JJUFRPUlMgfHwgRkFJTFNfT05fUFJJTUlUSVZFUztcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSW5kZXhlZE9iamVjdChpdCksIGtleSk7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICAgIHZhciBrZXlzID0gb3duS2V5cyhPKTtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIga2V5LCBkZXNjcmlwdG9yO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGluZGV4KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSA9IGtleXNbaW5kZXgrK10pO1xuICAgICAgaWYgKGRlc2NyaXB0b3IgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpLmY7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IHJldHVybiAhT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGdldE93blByb3BlcnR5TmFtZXM6IGdldE93blByb3BlcnR5TmFtZXNcbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVHZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUdldFByb3RvdHlwZU9mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUywgc2hhbTogIUNPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiB9LCB7XG4gIGdldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiBuYXRpdmVHZXRQcm90b3R5cGVPZih0b09iamVjdChpdCkpO1xuICB9XG59KTtcblxuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxuLy8gYE9iamVjdC5oYXNPd25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYWNjZXNzaWJsZS1vYmplY3QtaGFzb3ducHJvcGVydHlcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgaGFzT3duOiBoYXNPd25cbn0pO1xuIiwiLy8gYFNhbWVWYWx1ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNhbWV2YWx1ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pcyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiB4ID09PSB5ID8geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkgOiB4ICE9IHggJiYgeSAhPSB5O1xufTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NhbWUtdmFsdWUnKTtcblxuLy8gYE9iamVjdC5pc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5pc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBpczogaXNcbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUgLS0gc2FmZVxudmFyICRpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7ICRpc0V4dGVuc2libGUoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmlzRXh0ZW5zaWJsZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5pc2V4dGVuc2libGVcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZBSUxTX09OX1BSSU1JVElWRVMgfSwge1xuICBpc0V4dGVuc2libGU6IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZShpdCkgOiB0cnVlIDogZmFsc2U7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2Zyb3plbiAtLSBzYWZlXG52YXIgJGlzRnJvemVuID0gT2JqZWN0LmlzRnJvemVuO1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7ICRpc0Zyb3plbigxKTsgfSk7XG5cbi8vIGBPYmplY3QuaXNGcm96ZW5gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuaXNmcm96ZW5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZBSUxTX09OX1BSSU1JVElWRVMgfSwge1xuICBpc0Zyb3plbjogZnVuY3Rpb24gaXNGcm96ZW4oaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRnJvemVuID8gJGlzRnJvemVuKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzc2VhbGVkIC0tIHNhZmVcbnZhciAkaXNTZWFsZWQgPSBPYmplY3QuaXNTZWFsZWQ7XG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgJGlzU2VhbGVkKDEpOyB9KTtcblxuLy8gYE9iamVjdC5pc1NlYWxlZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5pc3NlYWxlZFxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGlzU2VhbGVkOiBmdW5jdGlvbiBpc1NlYWxlZChpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNTZWFsZWQgPyAkaXNTZWFsZWQoaXQpIDogZmFsc2UgOiB0cnVlO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlS2V5cygxKTsgfSk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAga2V5czogZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBGT1JDRUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3RvdHlwZS1hY2Nlc3NvcnMtZm9yY2VkJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUuX19sb29rdXBHZXR0ZXJfX2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUuX19sb29rdXBHZXR0ZXJfX1xuaWYgKERFU0NSSVBUT1JTKSB7XG4gICQoeyB0YXJnZXQ6ICdPYmplY3QnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAgIF9fbG9va3VwR2V0dGVyX186IGZ1bmN0aW9uIF9fbG9va3VwR2V0dGVyX18oUCkge1xuICAgICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICAgIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KFApO1xuICAgICAgdmFyIGRlc2M7XG4gICAgICBkbyB7XG4gICAgICAgIGlmIChkZXNjID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSkpIHJldHVybiBkZXNjLmdldDtcbiAgICAgIH0gd2hpbGUgKE8gPSBnZXRQcm90b3R5cGVPZihPKSk7XG4gICAgfVxuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgRk9SQ0VEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm90b3R5cGUtYWNjZXNzb3JzLWZvcmNlZCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX19gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX19cbmlmIChERVNDUklQVE9SUykge1xuICAkKHsgdGFyZ2V0OiAnT2JqZWN0JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgICBfX2xvb2t1cFNldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cFNldHRlcl9fKFApIHtcbiAgICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgICAgIHZhciBkZXNjO1xuICAgICAgZG8ge1xuICAgICAgICBpZiAoZGVzYyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBrZXkpKSByZXR1cm4gZGVzYy5zZXQ7XG4gICAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICAgIH1cbiAgfSk7XG59XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBvbkZyZWV6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpLm9uRnJlZXplO1xudmFyIEZSRUVaSU5HID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZyZWV6aW5nJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1wcmV2ZW50ZXh0ZW5zaW9ucyAtLSBzYWZlXG52YXIgJHByZXZlbnRFeHRlbnNpb25zID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7ICRwcmV2ZW50RXh0ZW5zaW9ucygxKTsgfSk7XG5cbi8vIGBPYmplY3QucHJldmVudEV4dGVuc2lvbnNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJldmVudGV4dGVuc2lvbnNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZBSUxTX09OX1BSSU1JVElWRVMsIHNoYW06ICFGUkVFWklORyB9LCB7XG4gIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG9uRnJlZXplKGl0KSkgOiBpdDtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBvbkZyZWV6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpLm9uRnJlZXplO1xudmFyIEZSRUVaSU5HID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZyZWV6aW5nJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZWFsIC0tIHNhZmVcbnZhciAkc2VhbCA9IE9iamVjdC5zZWFsO1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7ICRzZWFsKDEpOyB9KTtcblxuLy8gYE9iamVjdC5zZWFsYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNlYWxcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZBSUxTX09OX1BSSU1JVElWRVMsIHNoYW06ICFGUkVFWklORyB9LCB7XG4gIHNlYWw6IGZ1bmN0aW9uIHNlYWwoaXQpIHtcbiAgICByZXR1cm4gJHNlYWwgJiYgaXNPYmplY3QoaXQpID8gJHNlYWwob25GcmVlemUoaXQpKSA6IGl0O1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2ZcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgc2V0UHJvdG90eXBlT2Y6IHNldFByb3RvdHlwZU9mXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyB7fS50b1N0cmluZyA6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG59O1xuIiwidmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1zdHJpbmcnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoIVRPX1NUUklOR19UQUdfU1VQUE9SVCkge1xuICByZWRlZmluZShPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCB0b1N0cmluZywgeyB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkdmFsdWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1hcnJheScpLnZhbHVlcztcblxuLy8gYE9iamVjdC52YWx1ZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QudmFsdWVzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKE8pIHtcbiAgICByZXR1cm4gJHZhbHVlcyhPKTtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9udW1iZXItcGFyc2UtZmxvYXQnKTtcblxuLy8gYHBhcnNlRmxvYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wYXJzZWZsb2F0LXN0cmluZ1xuJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiBwYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0IH0sIHtcbiAgcGFyc2VGbG9hdDogJHBhcnNlRmxvYXRcbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL251bWJlci1wYXJzZS1pbnQnKTtcblxuLy8gYHBhcnNlSW50YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcGFyc2VpbnQtc3RyaW5nLXJhZGl4XG4kKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6IHBhcnNlSW50ICE9ICRwYXJzZUludCB9LCB7XG4gIHBhcnNlSW50OiAkcGFyc2VJbnRcbn0pO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuUHJvbWlzZTtcbiIsInZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvKD86aXBhZHxpcGhvbmV8aXBvZCkuKmFwcGxld2Via2l0L2kudGVzdCh1c2VyQWdlbnQpO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcycpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxudmFyIHNldCA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXIgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgbG9jYXRpb24sIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xuXG50cnkge1xuICAvLyBEZW5vIHRocm93cyBhIFJlZmVyZW5jZUVycm9yIG9uIGBsb2NhdGlvbmAgYWNjZXNzIHdpdGhvdXQgYC0tbG9jYXRpb25gIGZsYWdcbiAgbG9jYXRpb24gPSBnbG9iYWwubG9jYXRpb247XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbnZhciBydW4gPSBmdW5jdGlvbiAoaWQpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIGlmIChxdWV1ZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xuXG52YXIgcnVubmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcnVuKGlkKTtcbiAgfTtcbn07XG5cbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4oZXZlbnQuZGF0YSk7XG59O1xuXG52YXIgcG9zdCA9IGZ1bmN0aW9uIChpZCkge1xuICAvLyBvbGQgZW5naW5lcyBoYXZlIG5vdCBsb2NhdGlvbi5vcmlnaW5cbiAgZ2xvYmFsLnBvc3RNZXNzYWdlKFN0cmluZyhpZCksIGxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIGxvY2F0aW9uLmhvc3QpO1xufTtcblxuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXQgfHwgIWNsZWFyKSB7XG4gIHNldCA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHNMZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gc3BlYyByZXF1aXJlbWVudFxuICAgICAgKGlzQ2FsbGFibGUoZm4pID8gZm4gOiBGdW5jdGlvbihmbikpLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXIgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAoSVNfTk9ERSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIFNwaGVyZSAoSlMgZ2FtZSBlbmdpbmUpIERpc3BhdGNoIEFQSVxuICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBEaXNwYXRjaC5ub3cocnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICAvLyBleGNlcHQgaU9TIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzYyNFxuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsICYmICFJU19JT1MpIHtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBsaXN0ZW5lcjtcbiAgICBkZWZlciA9IGJpbmQocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKFxuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmXG4gICAgaXNDYWxsYWJsZShnbG9iYWwucG9zdE1lc3NhZ2UpICYmXG4gICAgIWdsb2JhbC5pbXBvcnRTY3JpcHRzICYmXG4gICAgbG9jYXRpb24gJiYgbG9jYXRpb24ucHJvdG9jb2wgIT09ICdmaWxlOicgJiZcbiAgICAhZmFpbHMocG9zdClcbiAgKSB7XG4gICAgZGVmZXIgPSBwb3N0O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4oaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KHJ1bm5lcihpZCksIDApO1xuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBjbGVhcjogY2xlYXJcbn07XG4iLCJ2YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC9pcGFkfGlwaG9uZXxpcG9kL2kudGVzdCh1c2VyQWdlbnQpICYmIGdsb2JhbC5QZWJibGUgIT09IHVuZGVmaW5lZDtcbiIsInZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvd2ViMHMoPyEuKmNocm9tZSkvaS50ZXN0KHVzZXJBZ2VudCk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBJU19JT1MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcycpO1xudmFyIElTX0lPU19QRUJCTEUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy1wZWJibGUnKTtcbnZhciBJU19XRUJPU19XRUJLSVQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLXdlYm9zLXdlYmtpdCcpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxudmFyIE11dGF0aW9uT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xuLy8gTm9kZS5qcyAxMSBzaG93cyBFeHBlcmltZW50YWxXYXJuaW5nIG9uIGdldHRpbmcgYHF1ZXVlTWljcm90YXNrYFxudmFyIHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsICdxdWV1ZU1pY3JvdGFzaycpO1xudmFyIHF1ZXVlTWljcm90YXNrID0gcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yICYmIHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvci52YWx1ZTtcblxudmFyIGZsdXNoLCBoZWFkLCBsYXN0LCBub3RpZnksIHRvZ2dsZSwgbm9kZSwgcHJvbWlzZSwgdGhlbjtcblxuLy8gbW9kZXJuIGVuZ2luZXMgaGF2ZSBxdWV1ZU1pY3JvdGFzayBtZXRob2RcbmlmICghcXVldWVNaWNyb3Rhc2spIHtcbiAgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKElTX05PREUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoaGVhZCkge1xuICAgICAgZm4gPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoaGVhZCkgbm90aWZ5KCk7XG4gICAgICAgIGVsc2UgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgLy8gYWxzbyBleGNlcHQgV2ViT1MgV2Via2l0IGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84OThcbiAgaWYgKCFJU19JT1MgJiYgIUlTX05PREUgJiYgIUlTX1dFQk9TX1dFQktJVCAmJiBNdXRhdGlvbk9ic2VydmVyICYmIGRvY3VtZW50KSB7XG4gICAgdG9nZ2xlID0gdHJ1ZTtcbiAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoIUlTX0lPU19QRUJCTEUgJiYgUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAvLyB3b3JrYXJvdW5kIG9mIFdlYktpdCB+IGlPUyBTYWZhcmkgMTAuMSBidWdcbiAgICBwcm9taXNlLmNvbnN0cnVjdG9yID0gUHJvbWlzZTtcbiAgICB0aGVuID0gcHJvbWlzZS50aGVuO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoZW4uY2FsbChwcm9taXNlLCBmbHVzaCk7XG4gICAgfTtcbiAgLy8gTm9kZS5qcyB3aXRob3V0IHByb21pc2VzXG4gIH0gZWxzZSBpZiAoSVNfTk9ERSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcXVldWVNaWNyb3Rhc2sgfHwgZnVuY3Rpb24gKGZuKSB7XG4gIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgaWYgKCFoZWFkKSB7XG4gICAgaGVhZCA9IHRhc2s7XG4gICAgbm90aWZ5KCk7XG4gIH0gbGFzdCA9IHRhc2s7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbnZhciBQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhQ2FsbGFibGUocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUNhbGxhYmxlKHJlamVjdCk7XG59O1xuXG4vLyBgTmV3UHJvbWlzZUNhcGFiaWxpdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1uZXdwcm9taXNlY2FwYWJpbGl0eVxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgdmFyIGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZTtcbiAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS5lcnJvcikge1xuICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBjb25zb2xlLmVycm9yKGEpIDogY29uc29sZS5lcnJvcihhLCBiKTtcbiAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlcnJvcjogZmFsc2UsIHZhbHVlOiBleGVjKCkgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4geyBlcnJvcjogdHJ1ZSwgdmFsdWU6IGVycm9yIH07XG4gIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBOYXRpdmVQcm9taXNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1wcm9taXNlLWNvbnN0cnVjdG9yJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZS1hbGwnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbicpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9taWNyb3Rhc2snKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUnKTtcbnZhciBob3N0UmVwb3J0RXJyb3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycycpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfQlJPV1NFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtYnJvd3NlcicpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsUHJvbWlzZVN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoUFJPTUlTRSk7XG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2UgJiYgTmF0aXZlUHJvbWlzZS5wcm90b3R5cGU7XG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yID0gTmF0aXZlUHJvbWlzZTtcbnZhciBQcm9taXNlQ29uc3RydWN0b3JQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlUHJvdG90eXBlO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZjtcbnZhciBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eTtcbnZhciBESVNQQVRDSF9FVkVOVCA9ICEhKGRvY3VtZW50ICYmIGRvY3VtZW50LmNyZWF0ZUV2ZW50ICYmIGdsb2JhbC5kaXNwYXRjaEV2ZW50KTtcbnZhciBOQVRJVkVfUkVKRUNUSU9OX0VWRU5UID0gaXNDYWxsYWJsZShnbG9iYWwuUHJvbWlzZVJlamVjdGlvbkV2ZW50KTtcbnZhciBVTkhBTkRMRURfUkVKRUNUSU9OID0gJ3VuaGFuZGxlZHJlamVjdGlvbic7XG52YXIgUkVKRUNUSU9OX0hBTkRMRUQgPSAncmVqZWN0aW9uaGFuZGxlZCc7XG52YXIgUEVORElORyA9IDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG52YXIgSEFORExFRCA9IDE7XG52YXIgVU5IQU5ETEVEID0gMjtcbnZhciBTVUJDTEFTU0lORyA9IGZhbHNlO1xudmFyIEludGVybmFsLCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgUHJvbWlzZVdyYXBwZXIsIG5hdGl2ZVRoZW47XG5cbnZhciBGT1JDRUQgPSBpc0ZvcmNlZChQUk9NSVNFLCBmdW5jdGlvbiAoKSB7XG4gIHZhciBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSA9IGluc3BlY3RTb3VyY2UoUHJvbWlzZUNvbnN0cnVjdG9yKTtcbiAgdmFyIEdMT0JBTF9DT1JFX0pTX1BST01JU0UgPSBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSAhPT0gU3RyaW5nKFByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIC8vIFY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gIC8vIFdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gIGlmICghR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSAmJiBWOF9WRVJTSU9OID09PSA2NikgcmV0dXJuIHRydWU7XG4gIC8vIFdlIG5lZWQgUHJvbWlzZSNmaW5hbGx5IGluIHRoZSBwdXJlIHZlcnNpb24gZm9yIHByZXZlbnRpbmcgcHJvdG90eXBlIHBvbGx1dGlvblxuICBpZiAoSVNfUFVSRSAmJiAhUHJvbWlzZUNvbnN0cnVjdG9yUHJvdG90eXBlWydmaW5hbGx5J10pIHJldHVybiB0cnVlO1xuICAvLyBXZSBjYW4ndCB1c2UgQEBzcGVjaWVzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxuICBpZiAoVjhfVkVSU0lPTiA+PSA1MSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UpKSByZXR1cm4gZmFsc2U7XG4gIC8vIERldGVjdCBjb3JyZWN0bmVzcyBvZiBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gIHZhciBwcm9taXNlID0gbmV3IFByb21pc2VDb25zdHJ1Y3RvcihmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKDEpOyB9KTtcbiAgdmFyIEZha2VQcm9taXNlID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICBleGVjKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbiAgfTtcbiAgdmFyIGNvbnN0cnVjdG9yID0gcHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9O1xuICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IEZha2VQcm9taXNlO1xuICBTVUJDTEFTU0lORyA9IHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pIGluc3RhbmNlb2YgRmFrZVByb21pc2U7XG4gIGlmICghU1VCQ0xBU1NJTkcpIHJldHVybiB0cnVlO1xuICAvLyBVbmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gIHJldHVybiAhR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSAmJiBJU19CUk9XU0VSICYmICFOQVRJVkVfUkVKRUNUSU9OX0VWRU5UO1xufSk7XG5cbnZhciBJTkNPUlJFQ1RfSVRFUkFUSU9OID0gRk9SQ0VEIHx8ICFjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24oZnVuY3Rpb24gKGl0ZXJhYmxlKSB7XG4gIFByb21pc2VDb25zdHJ1Y3Rvci5hbGwoaXRlcmFibGUpWydjYXRjaCddKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgaXNDYWxsYWJsZSh0aGVuID0gaXQudGhlbikgPyB0aGVuIDogZmFsc2U7XG59O1xuXG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHN0YXRlLCBpc1JlamVjdCkge1xuICBpZiAoc3RhdGUubm90aWZpZWQpIHJldHVybjtcbiAgc3RhdGUubm90aWZpZWQgPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBzdGF0ZS5yZWFjdGlvbnM7XG4gIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gICAgdmFyIG9rID0gc3RhdGUuc3RhdGUgPT0gRlVMRklMTEVEO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IGNoYWluW2luZGV4KytdO1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAoc3RhdGUucmVqZWN0aW9uID09PSBVTkhBTkRMRUQpIG9uSGFuZGxlVW5oYW5kbGVkKHN0YXRlKTtcbiAgICAgICAgICAgIHN0YXRlLnJlamVjdGlvbiA9IEhBTkRMRUQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIGNhbiB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3RhdGUucmVhY3Rpb25zID0gW107XG4gICAgc3RhdGUubm90aWZpZWQgPSBmYWxzZTtcbiAgICBpZiAoaXNSZWplY3QgJiYgIXN0YXRlLnJlamVjdGlvbikgb25VbmhhbmRsZWQoc3RhdGUpO1xuICB9KTtcbn07XG5cbnZhciBkaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gKG5hbWUsIHByb21pc2UsIHJlYXNvbikge1xuICB2YXIgZXZlbnQsIGhhbmRsZXI7XG4gIGlmIChESVNQQVRDSF9FVkVOVCkge1xuICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgZXZlbnQucHJvbWlzZSA9IHByb21pc2U7XG4gICAgZXZlbnQucmVhc29uID0gcmVhc29uO1xuICAgIGV2ZW50LmluaXRFdmVudChuYW1lLCBmYWxzZSwgdHJ1ZSk7XG4gICAgZ2xvYmFsLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICB9IGVsc2UgZXZlbnQgPSB7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcmVhc29uIH07XG4gIGlmICghTkFUSVZFX1JFSkVDVElPTl9FVkVOVCAmJiAoaGFuZGxlciA9IGdsb2JhbFsnb24nICsgbmFtZV0pKSBoYW5kbGVyKGV2ZW50KTtcbiAgZWxzZSBpZiAobmFtZSA9PT0gVU5IQU5ETEVEX1JFSkVDVElPTikgaG9zdFJlcG9ydEVycm9ycygnVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgcmVhc29uKTtcbn07XG5cbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBzdGF0ZS5mYWNhZGU7XG4gICAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gICAgdmFyIElTX1VOSEFORExFRCA9IGlzVW5oYW5kbGVkKHN0YXRlKTtcbiAgICB2YXIgcmVzdWx0O1xuICAgIGlmIChJU19VTkhBTkRMRUQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgICAgIHByb2Nlc3MuZW1pdCgndW5oYW5kbGVkUmVqZWN0aW9uJywgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2UgZGlzcGF0Y2hFdmVudChVTkhBTkRMRURfUkVKRUNUSU9OLCBwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICAgIC8vIEJyb3dzZXJzIHNob3VsZCBub3QgdHJpZ2dlciBgcmVqZWN0aW9uSGFuZGxlZGAgZXZlbnQgaWYgaXQgd2FzIGhhbmRsZWQgaGVyZSwgTm9kZUpTIC0gc2hvdWxkXG4gICAgICBzdGF0ZS5yZWplY3Rpb24gPSBJU19OT0RFIHx8IGlzVW5oYW5kbGVkKHN0YXRlKSA/IFVOSEFORExFRCA6IEhBTkRMRUQ7XG4gICAgICBpZiAocmVzdWx0LmVycm9yKSB0aHJvdyByZXN1bHQudmFsdWU7XG4gICAgfVxuICB9KTtcbn07XG5cbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICByZXR1cm4gc3RhdGUucmVqZWN0aW9uICE9PSBIQU5ETEVEICYmICFzdGF0ZS5wYXJlbnQ7XG59O1xuXG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gc3RhdGUuZmFjYWRlO1xuICAgIGlmIChJU19OT0RFKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgZGlzcGF0Y2hFdmVudChSRUpFQ1RJT05fSEFORExFRCwgcHJvbWlzZSwgc3RhdGUudmFsdWUpO1xuICB9KTtcbn07XG5cbnZhciBiaW5kID0gZnVuY3Rpb24gKGZuLCBzdGF0ZSwgdW53cmFwKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBmbihzdGF0ZSwgdmFsdWUsIHVud3JhcCk7XG4gIH07XG59O1xuXG52YXIgaW50ZXJuYWxSZWplY3QgPSBmdW5jdGlvbiAoc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICBzdGF0ZS5zdGF0ZSA9IFJFSkVDVEVEO1xuICBub3RpZnkoc3RhdGUsIHRydWUpO1xufTtcblxudmFyIGludGVybmFsUmVzb2x2ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHRyeSB7XG4gICAgaWYgKHN0YXRlLmZhY2FkZSA9PT0gdmFsdWUpIHRocm93IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIHZhciB0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSk7XG4gICAgaWYgKHRoZW4pIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBkb25lOiBmYWxzZSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZXNvbHZlLCB3cmFwcGVyLCBzdGF0ZSksXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVqZWN0LCB3cmFwcGVyLCBzdGF0ZSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGludGVybmFsUmVqZWN0KHdyYXBwZXIsIGVycm9yLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgc3RhdGUuc3RhdGUgPSBGVUxGSUxMRUQ7XG4gICAgICBub3RpZnkoc3RhdGUsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW50ZXJuYWxSZWplY3QoeyBkb25lOiBmYWxzZSB9LCBlcnJvciwgc3RhdGUpO1xuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYgKEZPUkNFRCkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICBQcm9taXNlQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCBQcm9taXNlQ29uc3RydWN0b3IsIFBST01JU0UpO1xuICAgIGFDYWxsYWJsZShleGVjdXRvcik7XG4gICAgSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihiaW5kKGludGVybmFsUmVzb2x2ZSwgc3RhdGUpLCBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpbnRlcm5hbFJlamVjdChzdGF0ZSwgZXJyb3IpO1xuICAgIH1cbiAgfTtcbiAgUHJvbWlzZUNvbnN0cnVjdG9yUHJvdG90eXBlID0gUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICB0eXBlOiBQUk9NSVNFLFxuICAgICAgZG9uZTogZmFsc2UsXG4gICAgICBub3RpZmllZDogZmFsc2UsXG4gICAgICBwYXJlbnQ6IGZhbHNlLFxuICAgICAgcmVhY3Rpb25zOiBbXSxcbiAgICAgIHJlamVjdGlvbjogZmFsc2UsXG4gICAgICBzdGF0ZTogUEVORElORyxcbiAgICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgfTtcbiAgSW50ZXJuYWwucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoUHJvbWlzZUNvbnN0cnVjdG9yUHJvdG90eXBlLCB7XG4gICAgLy8gYFByb21pc2UucHJvdG90eXBlLnRoZW5gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUudGhlblxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIFByb21pc2VDb25zdHJ1Y3RvcikpO1xuICAgICAgcmVhY3Rpb24ub2sgPSBpc0NhbGxhYmxlKG9uRnVsZmlsbGVkKSA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSBpc0NhbGxhYmxlKG9uUmVqZWN0ZWQpICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBJU19OT0RFID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICBzdGF0ZS5wYXJlbnQgPSB0cnVlO1xuICAgICAgc3RhdGUucmVhY3Rpb25zLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHN0YXRlLnN0YXRlICE9IFBFTkRJTkcpIG5vdGlmeShzdGF0ZSwgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyBgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZShwcm9taXNlKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBzdGF0ZSk7XG4gICAgdGhpcy5yZWplY3QgPSBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09IFByb21pc2VDb25zdHJ1Y3RvciB8fCBDID09PSBQcm9taXNlV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xuXG4gIGlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2UpICYmIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICBuYXRpdmVUaGVuID0gTmF0aXZlUHJvbWlzZVByb3RvdHlwZS50aGVuO1xuXG4gICAgaWYgKCFTVUJDTEFTU0lORykge1xuICAgICAgLy8gbWFrZSBgUHJvbWlzZSN0aGVuYCByZXR1cm4gYSBwb2x5ZmlsbGVkIGBQcm9taXNlYCBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgICAgcmVkZWZpbmUoTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIG5hdGl2ZVRoZW4uY2FsbCh0aGF0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKTtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NDBcbiAgICAgIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xuXG4gICAgICAvLyBtYWtlcyBzdXJlIHRoYXQgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJcyBgUHJvbWlzZSNjYXRjaGAgcHJvcGVybHkgd29ya3Mgd2l0aCBwYXRjaGVkIGBQcm9taXNlI3RoZW5gXG4gICAgICByZWRlZmluZShOYXRpdmVQcm9taXNlUHJvdG90eXBlLCAnY2F0Y2gnLCBQcm9taXNlQ29uc3RydWN0b3JQcm90b3R5cGVbJ2NhdGNoJ10sIHsgdW5zYWZlOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8vIG1ha2UgYC5jb25zdHJ1Y3RvciA9PT0gUHJvbWlzZWAgd29yayBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgIHRyeSB7XG4gICAgICBkZWxldGUgTmF0aXZlUHJvbWlzZVByb3RvdHlwZS5jb25zdHJ1Y3RvcjtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbiAgICAvLyBtYWtlIGBpbnN0YW5jZW9mIFByb21pc2VgIHdvcmsgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIHNldFByb3RvdHlwZU9mKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsIFByb21pc2VDb25zdHJ1Y3RvclByb3RvdHlwZSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgUHJvbWlzZTogUHJvbWlzZUNvbnN0cnVjdG9yXG59KTtcblxuc2V0VG9TdHJpbmdUYWcoUHJvbWlzZUNvbnN0cnVjdG9yLCBQUk9NSVNFLCBmYWxzZSwgdHJ1ZSk7XG5zZXRTcGVjaWVzKFBST01JU0UpO1xuXG5Qcm9taXNlV3JhcHBlciA9IGdldEJ1aWx0SW4oUFJPTUlTRSk7XG5cbi8vIHN0YXRpY3NcbiQoeyB0YXJnZXQ6IFBST01JU0UsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gYFByb21pc2UucmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJlamVjdFxuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKTtcbiAgICBjYXBhYmlsaXR5LnJlamVjdC5jYWxsKHVuZGVmaW5lZCwgcik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG5cbiQoeyB0YXJnZXQ6IFBST01JU0UsIHN0YXQ6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB8fCBGT1JDRUQgfSwge1xuICAvLyBgUHJvbWlzZS5yZXNvbHZlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJlc29sdmVcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKElTX1BVUkUgJiYgdGhpcyA9PT0gUHJvbWlzZVdyYXBwZXIgPyBQcm9taXNlQ29uc3RydWN0b3IgOiB0aGlzLCB4KTtcbiAgfVxufSk7XG5cbiQoeyB0YXJnZXQ6IFBST01JU0UsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIC8vIGBQcm9taXNlLmFsbGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbGxcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICAkcHJvbWlzZVJlc29sdmUuY2FsbChDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH0sXG4gIC8vIGBQcm9taXNlLnJhY2VgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmFjZVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgICRwcm9taXNlUmVzb2x2ZS5jYWxsKEMsIHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcblxuLy8gYFByb21pc2UuYWxsU2V0dGxlZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UuYWxsc2V0dGxlZFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlIH0sIHtcbiAgYWxsU2V0dGxlZDogZnVuY3Rpb24gYWxsU2V0dGxlZChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBwcm9taXNlUmVzb2x2ZS5jYWxsKEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0geyBzdGF0dXM6ICdmdWxmaWxsZWQnLCB2YWx1ZTogdmFsdWUgfTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHsgc3RhdHVzOiAncmVqZWN0ZWQnLCByZWFzb246IGVycm9yIH07XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcblxudmFyIFBST01JU0VfQU5ZX0VSUk9SID0gJ05vIG9uZSBwcm9taXNlIHJlc29sdmVkJztcblxuLy8gYFByb21pc2UuYW55YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbnlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGFueTogZnVuY3Rpb24gYW55KGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgZXJyb3JzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIHZhciBhbHJlYWR5UmVzb2x2ZWQgPSBmYWxzZTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlSZWplY3RlZCA9IGZhbHNlO1xuICAgICAgICBlcnJvcnMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgcHJvbWlzZVJlc29sdmUuY2FsbChDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5UmVqZWN0ZWQgfHwgYWxyZWFkeVJlc29sdmVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeVJlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlSZWplY3RlZCB8fCBhbHJlYWR5UmVzb2x2ZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5UmVqZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgIGVycm9yc1tpbmRleF0gPSBlcnJvcjtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZWplY3QobmV3IChnZXRCdWlsdEluKCdBZ2dyZWdhdGVFcnJvcicpKShlcnJvcnMsIFBST01JU0VfQU5ZX0VSUk9SKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZWplY3QobmV3IChnZXRCdWlsdEluKCdBZ2dyZWdhdGVFcnJvcicpKShlcnJvcnMsIFBST01JU0VfQU5ZX0VSUk9SKSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBOYXRpdmVQcm9taXNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1wcm9taXNlLWNvbnN0cnVjdG9yJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG5cbi8vIFNhZmFyaSBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDgyOVxudmFyIE5PTl9HRU5FUklDID0gISFOYXRpdmVQcm9taXNlICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgTmF0aXZlUHJvbWlzZS5wcm90b3R5cGVbJ2ZpbmFsbHknXS5jYWxsKHsgdGhlbjogZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9IH0sIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxuLy8gYFByb21pc2UucHJvdG90eXBlLmZpbmFsbHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS5maW5hbGx5XG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IE5PTl9HRU5FUklDIH0sIHtcbiAgJ2ZpbmFsbHknOiBmdW5jdGlvbiAob25GaW5hbGx5KSB7XG4gICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgZ2V0QnVpbHRJbignUHJvbWlzZScpKTtcbiAgICB2YXIgaXNGdW5jdGlvbiA9IGlzQ2FsbGFibGUob25GaW5hbGx5KTtcbiAgICByZXR1cm4gdGhpcy50aGVuKFxuICAgICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICAgIH0gOiBvbkZpbmFsbHksXG4gICAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgICB9IDogb25GaW5hbGx5XG4gICAgKTtcbiAgfVxufSk7XG5cbi8vIG1ha2VzIHN1cmUgdGhhdCBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzIGBQcm9taXNlI2ZpbmFsbHlgIHByb3Blcmx5IHdvcmtzIHdpdGggcGF0Y2hlZCBgUHJvbWlzZSN0aGVuYFxuaWYgKCFJU19QVVJFICYmIGlzQ2FsbGFibGUoTmF0aXZlUHJvbWlzZSkpIHtcbiAgdmFyIG1ldGhvZCA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKS5wcm90b3R5cGVbJ2ZpbmFsbHknXTtcbiAgaWYgKE5hdGl2ZVByb21pc2UucHJvdG90eXBlWydmaW5hbGx5J10gIT09IG1ldGhvZCkge1xuICAgIHJlZGVmaW5lKE5hdGl2ZVByb21pc2UucHJvdG90eXBlLCAnZmluYWxseScsIG1ldGhvZCwgeyB1bnNhZmU6IHRydWUgfSk7XG4gIH1cbn1cbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgbmF0aXZlQXBwbHkgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ2FwcGx5Jyk7XG52YXIgZnVuY3Rpb25BcHBseSA9IEZ1bmN0aW9uLmFwcGx5O1xuXG4vLyBNUyBFZGdlIGFyZ3VtZW50c0xpc3QgYXJndW1lbnQgaXMgb3B0aW9uYWxcbnZhciBPUFRJT05BTF9BUkdVTUVOVFNfTElTVCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIG5hdGl2ZUFwcGx5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxuLy8gYFJlZmxlY3QuYXBwbHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWZsZWN0LmFwcGx5XG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogT1BUSU9OQUxfQVJHVU1FTlRTX0xJU1QgfSwge1xuICBhcHBseTogZnVuY3Rpb24gYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpIHtcbiAgICBhQ2FsbGFibGUodGFyZ2V0KTtcbiAgICBhbk9iamVjdChhcmd1bWVudHNMaXN0KTtcbiAgICByZXR1cm4gbmF0aXZlQXBwbHlcbiAgICAgID8gbmF0aXZlQXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpXG4gICAgICA6IGZ1bmN0aW9uQXBwbHkuY2FsbCh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCk7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jb25zdHJ1Y3RvcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIG5hdGl2ZUNvbnN0cnVjdCA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnY29uc3RydWN0Jyk7XG5cbi8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZmxlY3QuY29uc3RydWN0XG4vLyBNUyBFZGdlIHN1cHBvcnRzIG9ubHkgMiBhcmd1bWVudHMgYW5kIGFyZ3VtZW50c0xpc3QgYXJndW1lbnQgaXMgb3B0aW9uYWxcbi8vIEZGIE5pZ2h0bHkgc2V0cyB0aGlyZCBhcmd1bWVudCBhcyBgbmV3LnRhcmdldGAsIGJ1dCBkb2VzIG5vdCBjcmVhdGUgYHRoaXNgIGZyb20gaXRcbnZhciBORVdfVEFSR0VUX0JVRyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShuYXRpdmVDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBbXSwgRikgaW5zdGFuY2VvZiBGKTtcbn0pO1xudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgbmF0aXZlQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcbnZhciBGT1JDRUQgPSBORVdfVEFSR0VUX0JVRyB8fCBBUkdTX0JVRztcblxuJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCwgc2hhbTogRk9SQ0VEIH0sIHtcbiAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzIC8qICwgbmV3VGFyZ2V0ICovKSB7XG4gICAgYUNvbnN0cnVjdG9yKFRhcmdldCk7XG4gICAgYW5PYmplY3QoYXJncyk7XG4gICAgdmFyIG5ld1RhcmdldCA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gVGFyZ2V0IDogYUNvbnN0cnVjdG9yKGFyZ3VtZW50c1syXSk7XG4gICAgaWYgKEFSR1NfQlVHICYmICFORVdfVEFSR0VUX0JVRykgcmV0dXJuIG5hdGl2ZUNvbnN0cnVjdChUYXJnZXQsIGFyZ3MsIG5ld1RhcmdldCk7XG4gICAgaWYgKFRhcmdldCA9PSBuZXdUYXJnZXQpIHtcbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgb3B0aW1pemF0aW9uIGZvciAwLTQgYXJndW1lbnRzXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBUYXJnZXQoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIH1cbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgbG90IG9mIGFyZ3VtZW50cyBjYXNlXG4gICAgICB2YXIgJGFyZ3MgPSBbbnVsbF07XG4gICAgICAkYXJncy5wdXNoLmFwcGx5KCRhcmdzLCBhcmdzKTtcbiAgICAgIHJldHVybiBuZXcgKGJpbmQuYXBwbHkoVGFyZ2V0LCAkYXJncykpKCk7XG4gICAgfVxuICAgIC8vIHdpdGggYWx0ZXJlZCBuZXdUYXJnZXQsIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGNvbnN0cnVjdG9yc1xuICAgIHZhciBwcm90byA9IG5ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgdmFyIGluc3RhbmNlID0gY3JlYXRlKGlzT2JqZWN0KHByb3RvKSA/IHByb3RvIDogT2JqZWN0LnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IEZ1bmN0aW9uLmFwcGx5LmNhbGwoVGFyZ2V0LCBpbnN0YW5jZSwgYXJncyk7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiBpbnN0YW5jZTtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIE1TIEVkZ2UgaGFzIGJyb2tlbiBSZWZsZWN0LmRlZmluZVByb3BlcnR5IC0gdGhyb3dpbmcgaW5zdGVhZCBvZiByZXR1cm5pbmcgZmFsc2VcbnZhciBFUlJPUl9JTlNURUFEX09GX0ZBTFNFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tcmVmbGVjdCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBSZWZsZWN0LmRlZmluZVByb3BlcnR5KGRlZmluZVByb3BlcnR5TW9kdWxlLmYoe30sIDEsIHsgdmFsdWU6IDEgfSksIDEsIHsgdmFsdWU6IDIgfSk7XG59KTtcblxuLy8gYFJlZmxlY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWZsZWN0LmRlZmluZXByb3BlcnR5XG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRVJST1JfSU5TVEVBRF9PRl9GQUxTRSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KHByb3BlcnR5S2V5KTtcbiAgICBhbk9iamVjdChhdHRyaWJ1dGVzKTtcbiAgICB0cnkge1xuICAgICAgZGVmaW5lUHJvcGVydHlNb2R1bGUuZih0YXJnZXQsIGtleSwgYXR0cmlidXRlcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG5cbi8vIGBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5kZWxldGVwcm9wZXJ0eVxuJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgZGVsZXRlUHJvcGVydHk6IGZ1bmN0aW9uIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gICAgcmV0dXJuIGRlc2NyaXB0b3IgJiYgIWRlc2NyaXB0b3IuY29uZmlndXJhYmxlID8gZmFsc2UgOiBkZWxldGUgdGFyZ2V0W3Byb3BlcnR5S2V5XTtcbiAgfVxufSk7XG4iLCJ2YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZGVzY3JpcHRvcikge1xuICByZXR1cm4gZGVzY3JpcHRvciAhPT0gdW5kZWZpbmVkICYmIChoYXNPd24oZGVzY3JpcHRvciwgJ3ZhbHVlJykgfHwgaGFzT3duKGRlc2NyaXB0b3IsICd3cml0YWJsZScpKTtcbn07XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWRhdGEtZGVzY3JpcHRvcicpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcblxuLy8gYFJlZmxlY3QuZ2V0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5nZXRcbmZ1bmN0aW9uIGdldCh0YXJnZXQsIHByb3BlcnR5S2V5IC8qICwgcmVjZWl2ZXIgKi8pIHtcbiAgdmFyIHJlY2VpdmVyID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0YXJnZXQgOiBhcmd1bWVudHNbMl07XG4gIHZhciBkZXNjcmlwdG9yLCBwcm90b3R5cGU7XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZih0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgaWYgKGRlc2NyaXB0b3IpIHJldHVybiBpc0RhdGFEZXNjcmlwdG9yKGRlc2NyaXB0b3IpXG4gICAgPyBkZXNjcmlwdG9yLnZhbHVlXG4gICAgOiBkZXNjcmlwdG9yLmdldCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogZGVzY3JpcHRvci5nZXQuY2FsbChyZWNlaXZlcik7XG4gIGlmIChpc09iamVjdChwcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZih0YXJnZXQpKSkgcmV0dXJuIGdldChwcm90b3R5cGUsIHByb3BlcnR5S2V5LCByZWNlaXZlcik7XG59XG5cbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGdldDogZ2V0XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxuLy8gYFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZihhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgb2JqZWN0R2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyJyk7XG5cbi8vIGBSZWZsZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5nZXRwcm90b3R5cGVvZlxuJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlLCBzaGFtOiAhQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSIH0sIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKHRhcmdldCkge1xuICAgIHJldHVybiBvYmplY3RHZXRQcm90b3R5cGVPZihhbk9iamVjdCh0YXJnZXQpKTtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcblxuLy8gYFJlZmxlY3QuaGFzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5oYXNcbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGhhczogZnVuY3Rpb24gaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gcHJvcGVydHlLZXkgaW4gdGFyZ2V0O1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSAtLSBzYWZlXG52YXIgb2JqZWN0SXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcblxuLy8gYFJlZmxlY3QuaXNFeHRlbnNpYmxlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5pc2V4dGVuc2libGVcbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGlzRXh0ZW5zaWJsZTogZnVuY3Rpb24gaXNFeHRlbnNpYmxlKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcmV0dXJuIG9iamVjdElzRXh0ZW5zaWJsZSA/IG9iamVjdElzRXh0ZW5zaWJsZSh0YXJnZXQpIDogdHJ1ZTtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG5cbi8vIGBSZWZsZWN0Lm93bktleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWZsZWN0Lm93bmtleXNcbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIG93bktleXM6IG93bktleXNcbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBGUkVFWklORyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mcmVlemluZycpO1xuXG4vLyBgUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9uc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZmxlY3QucHJldmVudGV4dGVuc2lvbnNcbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIUZSRUVaSU5HIH0sIHtcbiAgcHJldmVudEV4dGVuc2lvbnM6IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBvYmplY3RQcmV2ZW50RXh0ZW5zaW9ucyA9IGdldEJ1aWx0SW4oJ09iamVjdCcsICdwcmV2ZW50RXh0ZW5zaW9ucycpO1xuICAgICAgaWYgKG9iamVjdFByZXZlbnRFeHRlbnNpb25zKSBvYmplY3RQcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNEYXRhRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1kYXRhLWRlc2NyaXB0b3InKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbi8vIGBSZWZsZWN0LnNldGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZmxlY3Quc2V0XG5mdW5jdGlvbiBzZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCA0ID8gdGFyZ2V0IDogYXJndW1lbnRzWzNdO1xuICB2YXIgb3duRGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgdmFyIGV4aXN0aW5nRGVzY3JpcHRvciwgcHJvdG90eXBlLCBzZXR0ZXI7XG4gIGlmICghb3duRGVzY3JpcHRvcikge1xuICAgIGlmIChpc09iamVjdChwcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZih0YXJnZXQpKSkge1xuICAgICAgcmV0dXJuIHNldChwcm90b3R5cGUsIHByb3BlcnR5S2V5LCBWLCByZWNlaXZlcik7XG4gICAgfVxuICAgIG93bkRlc2NyaXB0b3IgPSBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCk7XG4gIH1cbiAgaWYgKGlzRGF0YURlc2NyaXB0b3Iob3duRGVzY3JpcHRvcikpIHtcbiAgICBpZiAob3duRGVzY3JpcHRvci53cml0YWJsZSA9PT0gZmFsc2UgfHwgIWlzT2JqZWN0KHJlY2VpdmVyKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZihyZWNlaXZlciwgcHJvcGVydHlLZXkpKSB7XG4gICAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yLmdldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iuc2V0IHx8IGV4aXN0aW5nRGVzY3JpcHRvci53cml0YWJsZSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgIGV4aXN0aW5nRGVzY3JpcHRvci52YWx1ZSA9IFY7XG4gICAgICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSwgZXhpc3RpbmdEZXNjcmlwdG9yKTtcbiAgICB9IGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCBWKSk7XG4gIH0gZWxzZSB7XG4gICAgc2V0dGVyID0gb3duRGVzY3JpcHRvci5zZXQ7XG4gICAgaWYgKHNldHRlciA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gICAgc2V0dGVyLmNhbGwocmVjZWl2ZXIsIFYpO1xuICB9IHJldHVybiB0cnVlO1xufVxuXG4vLyBNUyBFZGdlIDE3LTE4IFJlZmxlY3Quc2V0IGFsbG93cyBzZXR0aW5nIHRoZSBwcm9wZXJ0eSB0byBvYmplY3Rcbi8vIHdpdGggbm9uLXdyaXRhYmxlIHByb3BlcnR5IG9uIHRoZSBwcm90b3R5cGVcbnZhciBNU19FREdFX0JVRyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuICB2YXIgb2JqZWN0ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihuZXcgQ29uc3RydWN0b3IoKSwgJ2EnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXJlZmxlY3QgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIFJlZmxlY3Quc2V0KENvbnN0cnVjdG9yLnByb3RvdHlwZSwgJ2EnLCAxLCBvYmplY3QpICE9PSBmYWxzZTtcbn0pO1xuXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogTVNfRURHRV9CVUcgfSwge1xuICBzZXQ6IHNldFxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUnKTtcbnZhciBvYmplY3RTZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xuXG4vLyBgUmVmbGVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZmxlY3Quc2V0cHJvdG90eXBlb2ZcbmlmIChvYmplY3RTZXRQcm90b3R5cGVPZikgJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgc2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgdHJ5IHtcbiAgICAgIG9iamVjdFNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG5cbiQoeyBnbG9iYWw6IHRydWUgfSwgeyBSZWZsZWN0OiB7fSB9KTtcblxuLy8gUmVmbGVjdFtAQHRvU3RyaW5nVGFnXSBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWZsZWN0LUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5SZWZsZWN0LCAnUmVmbGVjdCcsIHRydWUpO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG4vLyBgSXNSZWdFeHBgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc3JlZ2V4cFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY2xhc3NvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NgIGdldHRlciBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLnByb3RvdHlwZS5mbGFnc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoYXQuZ2xvYmFsKSByZXN1bHQgKz0gJ2cnO1xuICBpZiAodGhhdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gJ2knO1xuICBpZiAodGhhdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAnbSc7XG4gIGlmICh0aGF0LmRvdEFsbCkgcmVzdWx0ICs9ICdzJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCdhJywgJ3knKSAtPiAvYS95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciAkUmVnRXhwID0gZ2xvYmFsLlJlZ0V4cDtcblxuZXhwb3J0cy5VTlNVUFBPUlRFRF9ZID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAkUmVnRXhwKCdhJywgJ3knKTtcbiAgcmUubGFzdEluZGV4ID0gMjtcbiAgcmV0dXJuIHJlLmV4ZWMoJ2FiY2QnKSAhPSBudWxsO1xufSk7XG5cbmV4cG9ydHMuQlJPS0VOX0NBUkVUID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD03NzM2ODdcbiAgdmFyIHJlID0gJFJlZ0V4cCgnXnInLCAnZ3knKTtcbiAgcmUubGFzdEluZGV4ID0gMjtcbiAgcmV0dXJuIHJlLmV4ZWMoJ3N0cicpICE9IG51bGw7XG59KTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCcuJywgJ3MnKSAtPiAvLi9zIGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciAkUmVnRXhwID0gZ2xvYmFsLlJlZ0V4cDtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJy4nLCAncycpO1xuICByZXR1cm4gIShyZS5kb3RBbGwgJiYgcmUuZXhlYygnXFxuJykgJiYgcmUuZmxhZ3MgPT09ICdzJyk7XG59KTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCcoPzxhPmIpJywgJ2cnKSAtPiAvKD88YT5iKS9nIGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciAkUmVnRXhwID0gZ2xvYmFsLlJlZ0V4cDtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJyg/PGE+YiknLCAnZycpO1xuICByZXR1cm4gcmUuZXhlYygnYicpLmdyb3Vwcy5hICE9PSAnYicgfHxcbiAgICAnYicucmVwbGFjZShyZSwgJyQ8YT5jJykgIT09ICdiYyc7XG59KTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKS5mO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXJlZ2V4cCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGdldEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xudmFyIHN0aWNreUhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKS5lbmZvcmNlO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBVTlNVUFBPUlRFRF9ET1RfQUxMID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1kb3QtYWxsJyk7XG52YXIgVU5TVVBQT1JURURfTkNHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1uY2cnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xudmFyIE5hdGl2ZVJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gTmF0aXZlUmVnRXhwLnByb3RvdHlwZTtcbi8vIFRPRE86IFVzZSBvbmx5IHByb3BwZXIgUmVnRXhwSWRlbnRpZmllck5hbWVcbnZhciBJU19OQ0cgPSAvXlxcPzxbXlxcc1xcZCEjJSYqKzw9PkBeXVteXFxzISMlJiorPD0+QF5dKj4vO1xudmFyIHJlMSA9IC9hL2c7XG52YXIgcmUyID0gL2EvZztcblxuLy8gXCJuZXdcIiBzaG91bGQgY3JlYXRlIGEgbmV3IG9iamVjdCwgb2xkIHdlYmtpdCBidWdcbnZhciBDT1JSRUNUX05FVyA9IG5ldyBOYXRpdmVSZWdFeHAocmUxKSAhPT0gcmUxO1xuXG52YXIgVU5TVVBQT1JURURfWSA9IHN0aWNreUhlbHBlcnMuVU5TVVBQT1JURURfWTtcblxudmFyIEJBU0VfRk9SQ0VEID0gREVTQ1JJUFRPUlMgJiZcbiAgKCFDT1JSRUNUX05FVyB8fCBVTlNVUFBPUlRFRF9ZIHx8IFVOU1VQUE9SVEVEX0RPVF9BTEwgfHwgVU5TVVBQT1JURURfTkNHIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZTJbTUFUQ0hdID0gZmFsc2U7XG4gICAgLy8gUmVnRXhwIGNvbnN0cnVjdG9yIGNhbiBhbHRlciBmbGFncyBhbmQgSXNSZWdFeHAgd29ya3MgY29ycmVjdCB3aXRoIEBAbWF0Y2hcbiAgICByZXR1cm4gTmF0aXZlUmVnRXhwKHJlMSkgIT0gcmUxIHx8IE5hdGl2ZVJlZ0V4cChyZTIpID09IHJlMiB8fCBOYXRpdmVSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbiAgfSkpO1xuXG52YXIgaGFuZGxlRG90QWxsID0gZnVuY3Rpb24gKHN0cmluZykge1xuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgYnJhY2tldHMgPSBmYWxzZTtcbiAgdmFyIGNocjtcbiAgZm9yICg7IGluZGV4IDw9IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNociA9IHN0cmluZy5jaGFyQXQoaW5kZXgpO1xuICAgIGlmIChjaHIgPT09ICdcXFxcJykge1xuICAgICAgcmVzdWx0ICs9IGNociArIHN0cmluZy5jaGFyQXQoKytpbmRleCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCFicmFja2V0cyAmJiBjaHIgPT09ICcuJykge1xuICAgICAgcmVzdWx0ICs9ICdbXFxcXHNcXFxcU10nO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2hyID09PSAnWycpIHtcbiAgICAgICAgYnJhY2tldHMgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChjaHIgPT09ICddJykge1xuICAgICAgICBicmFja2V0cyA9IGZhbHNlO1xuICAgICAgfSByZXN1bHQgKz0gY2hyO1xuICAgIH1cbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyIGhhbmRsZU5DRyA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIG5hbWVkID0gW107XG4gIHZhciBuYW1lcyA9IHt9O1xuICB2YXIgYnJhY2tldHMgPSBmYWxzZTtcbiAgdmFyIG5jZyA9IGZhbHNlO1xuICB2YXIgZ3JvdXBpZCA9IDA7XG4gIHZhciBncm91cG5hbWUgPSAnJztcbiAgdmFyIGNocjtcbiAgZm9yICg7IGluZGV4IDw9IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNociA9IHN0cmluZy5jaGFyQXQoaW5kZXgpO1xuICAgIGlmIChjaHIgPT09ICdcXFxcJykge1xuICAgICAgY2hyID0gY2hyICsgc3RyaW5nLmNoYXJBdCgrK2luZGV4KTtcbiAgICB9IGVsc2UgaWYgKGNociA9PT0gJ10nKSB7XG4gICAgICBicmFja2V0cyA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoIWJyYWNrZXRzKSBzd2l0Y2ggKHRydWUpIHtcbiAgICAgIGNhc2UgY2hyID09PSAnWyc6XG4gICAgICAgIGJyYWNrZXRzID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGNociA9PT0gJygnOlxuICAgICAgICBpZiAoSVNfTkNHLnRlc3Qoc3RyaW5nLnNsaWNlKGluZGV4ICsgMSkpKSB7XG4gICAgICAgICAgaW5kZXggKz0gMjtcbiAgICAgICAgICBuY2cgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCArPSBjaHI7XG4gICAgICAgIGdyb3VwaWQrKztcbiAgICAgICAgY29udGludWU7XG4gICAgICBjYXNlIGNociA9PT0gJz4nICYmIG5jZzpcbiAgICAgICAgaWYgKGdyb3VwbmFtZSA9PT0gJycgfHwgaGFzT3duKG5hbWVzLCBncm91cG5hbWUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdJbnZhbGlkIGNhcHR1cmUgZ3JvdXAgbmFtZScpO1xuICAgICAgICB9XG4gICAgICAgIG5hbWVzW2dyb3VwbmFtZV0gPSB0cnVlO1xuICAgICAgICBuYW1lZC5wdXNoKFtncm91cG5hbWUsIGdyb3VwaWRdKTtcbiAgICAgICAgbmNnID0gZmFsc2U7XG4gICAgICAgIGdyb3VwbmFtZSA9ICcnO1xuICAgICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKG5jZykgZ3JvdXBuYW1lICs9IGNocjtcbiAgICBlbHNlIHJlc3VsdCArPSBjaHI7XG4gIH0gcmV0dXJuIFtyZXN1bHQsIG5hbWVkXTtcbn07XG5cbi8vIGBSZWdFeHBgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC1jb25zdHJ1Y3RvclxuaWYgKGlzRm9yY2VkKCdSZWdFeHAnLCBCQVNFX0ZPUkNFRCkpIHtcbiAgdmFyIFJlZ0V4cFdyYXBwZXIgPSBmdW5jdGlvbiBSZWdFeHAocGF0dGVybiwgZmxhZ3MpIHtcbiAgICB2YXIgdGhpc0lzUmVnRXhwID0gdGhpcyBpbnN0YW5jZW9mIFJlZ0V4cFdyYXBwZXI7XG4gICAgdmFyIHBhdHRlcm5Jc1JlZ0V4cCA9IGlzUmVnRXhwKHBhdHRlcm4pO1xuICAgIHZhciBmbGFnc0FyZVVuZGVmaW5lZCA9IGZsYWdzID09PSB1bmRlZmluZWQ7XG4gICAgdmFyIGdyb3VwcyA9IFtdO1xuICAgIHZhciByYXdQYXR0ZXJuID0gcGF0dGVybjtcbiAgICB2YXIgcmF3RmxhZ3MsIGRvdEFsbCwgc3RpY2t5LCBoYW5kbGVkLCByZXN1bHQsIHN0YXRlO1xuXG4gICAgaWYgKCF0aGlzSXNSZWdFeHAgJiYgcGF0dGVybklzUmVnRXhwICYmIGZsYWdzQXJlVW5kZWZpbmVkICYmIHBhdHRlcm4uY29uc3RydWN0b3IgPT09IFJlZ0V4cFdyYXBwZXIpIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuO1xuICAgIH1cblxuICAgIGlmIChwYXR0ZXJuSXNSZWdFeHAgfHwgcGF0dGVybiBpbnN0YW5jZW9mIFJlZ0V4cFdyYXBwZXIpIHtcbiAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnNvdXJjZTtcbiAgICAgIGlmIChmbGFnc0FyZVVuZGVmaW5lZCkgZmxhZ3MgPSAnZmxhZ3MnIGluIHJhd1BhdHRlcm4gPyByYXdQYXR0ZXJuLmZsYWdzIDogZ2V0RmxhZ3MuY2FsbChyYXdQYXR0ZXJuKTtcbiAgICB9XG5cbiAgICBwYXR0ZXJuID0gcGF0dGVybiA9PT0gdW5kZWZpbmVkID8gJycgOiB0b1N0cmluZyhwYXR0ZXJuKTtcbiAgICBmbGFncyA9IGZsYWdzID09PSB1bmRlZmluZWQgPyAnJyA6IHRvU3RyaW5nKGZsYWdzKTtcbiAgICByYXdQYXR0ZXJuID0gcGF0dGVybjtcblxuICAgIGlmIChVTlNVUFBPUlRFRF9ET1RfQUxMICYmICdkb3RBbGwnIGluIHJlMSkge1xuICAgICAgZG90QWxsID0gISFmbGFncyAmJiBmbGFncy5pbmRleE9mKCdzJykgPiAtMTtcbiAgICAgIGlmIChkb3RBbGwpIGZsYWdzID0gZmxhZ3MucmVwbGFjZSgvcy9nLCAnJyk7XG4gICAgfVxuXG4gICAgcmF3RmxhZ3MgPSBmbGFncztcblxuICAgIGlmIChVTlNVUFBPUlRFRF9ZICYmICdzdGlja3knIGluIHJlMSkge1xuICAgICAgc3RpY2t5ID0gISFmbGFncyAmJiBmbGFncy5pbmRleE9mKCd5JykgPiAtMTtcbiAgICAgIGlmIChzdGlja3kpIGZsYWdzID0gZmxhZ3MucmVwbGFjZSgveS9nLCAnJyk7XG4gICAgfVxuXG4gICAgaWYgKFVOU1VQUE9SVEVEX05DRykge1xuICAgICAgaGFuZGxlZCA9IGhhbmRsZU5DRyhwYXR0ZXJuKTtcbiAgICAgIHBhdHRlcm4gPSBoYW5kbGVkWzBdO1xuICAgICAgZ3JvdXBzID0gaGFuZGxlZFsxXTtcbiAgICB9XG5cbiAgICByZXN1bHQgPSBpbmhlcml0SWZSZXF1aXJlZChOYXRpdmVSZWdFeHAocGF0dGVybiwgZmxhZ3MpLCB0aGlzSXNSZWdFeHAgPyB0aGlzIDogUmVnRXhwUHJvdG90eXBlLCBSZWdFeHBXcmFwcGVyKTtcblxuICAgIGlmIChkb3RBbGwgfHwgc3RpY2t5IHx8IGdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUocmVzdWx0KTtcbiAgICAgIGlmIChkb3RBbGwpIHtcbiAgICAgICAgc3RhdGUuZG90QWxsID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUucmF3ID0gUmVnRXhwV3JhcHBlcihoYW5kbGVEb3RBbGwocGF0dGVybiksIHJhd0ZsYWdzKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGlja3kpIHN0YXRlLnN0aWNreSA9IHRydWU7XG4gICAgICBpZiAoZ3JvdXBzLmxlbmd0aCkgc3RhdGUuZ3JvdXBzID0gZ3JvdXBzO1xuICAgIH1cblxuICAgIGlmIChwYXR0ZXJuICE9PSByYXdQYXR0ZXJuKSB0cnkge1xuICAgICAgLy8gZmFpbHMgaW4gb2xkIGVuZ2luZXMsIGJ1dCB3ZSBoYXZlIG5vIGFsdGVybmF0aXZlcyBmb3IgdW5zdXBwb3J0ZWQgcmVnZXggc3ludGF4XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0LCAnc291cmNlJywgcmF3UGF0dGVybiA9PT0gJycgPyAnKD86KScgOiByYXdQYXR0ZXJuKTtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciBwcm94eSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICBrZXkgaW4gUmVnRXhwV3JhcHBlciB8fCBkZWZpbmVQcm9wZXJ0eShSZWdFeHBXcmFwcGVyLCBrZXksIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTmF0aXZlUmVnRXhwW2tleV07IH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChpdCkgeyBOYXRpdmVSZWdFeHBba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG5cbiAgZm9yICh2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoTmF0aXZlUmVnRXhwKSwgaW5kZXggPSAwOyBrZXlzLmxlbmd0aCA+IGluZGV4Oykge1xuICAgIHByb3h5KGtleXNbaW5kZXgrK10pO1xuICB9XG5cbiAgUmVnRXhwUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVnRXhwV3JhcHBlcjtcbiAgUmVnRXhwV3JhcHBlci5wcm90b3R5cGUgPSBSZWdFeHBQcm90b3R5cGU7XG4gIHJlZGVmaW5lKGdsb2JhbCwgJ1JlZ0V4cCcsIFJlZ0V4cFdyYXBwZXIpO1xufVxuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAtQEBzcGVjaWVzXG5zZXRTcGVjaWVzKCdSZWdFeHAnKTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFVOU1VQUE9SVEVEX0RPVF9BTEwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLWRvdC1hbGwnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJykuZ2V0O1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmRvdEFsbGAgZ2V0dGVyXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLmRvdGFsbFxuaWYgKERFU0NSSVBUT1JTICYmIFVOU1VQUE9SVEVEX0RPVF9BTEwpIHtcbiAgZGVmaW5lUHJvcGVydHkoUmVnRXhwUHJvdG90eXBlLCAnZG90QWxsJywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICh0aGlzID09PSBSZWdFeHBQcm90b3R5cGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAvLyBXZSBjYW4ndCB1c2UgSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IgYmVjYXVzZVxuICAgICAgLy8gd2UgZG9uJ3QgYWRkIG1ldGFkYXRhIGZvciByZWdleHBzIGNyZWF0ZWQgYnkgYSBsaXRlcmFsLlxuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5kb3RBbGw7XG4gICAgICB9XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgUmVnRXhwIHJlcXVpcmVkJyk7XG4gICAgfVxuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIHJlZ2V4cC9uby1lbXB0eS1jYXB0dXJpbmctZ3JvdXAsIHJlZ2V4cC9uby1lbXB0eS1ncm91cCwgcmVnZXhwL25vLWxhenktZW5kcyAtLSB0ZXN0aW5nICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tdXNlbGVzcy1xdWFudGlmaWVyIC0tIHRlc3RpbmcgKi9cbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcbnZhciBzdGlja3lIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldEludGVybmFsU3RhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKS5nZXQ7XG52YXIgVU5TVVBQT1JURURfRE9UX0FMTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtZG90LWFsbCcpO1xudmFyIFVOU1VQUE9SVEVEX05DRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnJyk7XG5cbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xudmFyIG5hdGl2ZVJlcGxhY2UgPSBzaGFyZWQoJ25hdGl2ZS1zdHJpbmctcmVwbGFjZScsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSk7XG5cbnZhciBwYXRjaGVkRXhlYyA9IG5hdGl2ZUV4ZWM7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvO1xuICB2YXIgcmUyID0gL2IqL2c7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTEsICdhJyk7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTIsICdhJyk7XG4gIHJldHVybiByZTEubGFzdEluZGV4ICE9PSAwIHx8IHJlMi5sYXN0SW5kZXggIT09IDA7XG59KSgpO1xuXG52YXIgVU5TVVBQT1JURURfWSA9IHN0aWNreUhlbHBlcnMuVU5TVVBQT1JURURfWSB8fCBzdGlja3lIZWxwZXJzLkJST0tFTl9DQVJFVDtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQgfHwgVU5TVVBQT1JURURfWSB8fCBVTlNVUFBPUlRFRF9ET1RfQUxMIHx8IFVOU1VQUE9SVEVEX05DRztcblxuaWYgKFBBVENIKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50cyAtLSBUT0RPXG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHJpbmcpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUocmUpO1xuICAgIHZhciBzdHIgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgIHZhciByYXcgPSBzdGF0ZS5yYXc7XG4gICAgdmFyIHJlc3VsdCwgcmVDb3B5LCBsYXN0SW5kZXgsIG1hdGNoLCBpLCBvYmplY3QsIGdyb3VwO1xuXG4gICAgaWYgKHJhdykge1xuICAgICAgcmF3Lmxhc3RJbmRleCA9IHJlLmxhc3RJbmRleDtcbiAgICAgIHJlc3VsdCA9IHBhdGNoZWRFeGVjLmNhbGwocmF3LCBzdHIpO1xuICAgICAgcmUubGFzdEluZGV4ID0gcmF3Lmxhc3RJbmRleDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgdmFyIGdyb3VwcyA9IHN0YXRlLmdyb3VwcztcbiAgICB2YXIgc3RpY2t5ID0gVU5TVVBQT1JURURfWSAmJiByZS5zdGlja3k7XG4gICAgdmFyIGZsYWdzID0gcmVnZXhwRmxhZ3MuY2FsbChyZSk7XG4gICAgdmFyIHNvdXJjZSA9IHJlLnNvdXJjZTtcbiAgICB2YXIgY2hhcnNBZGRlZCA9IDA7XG4gICAgdmFyIHN0ckNvcHkgPSBzdHI7XG5cbiAgICBpZiAoc3RpY2t5KSB7XG4gICAgICBmbGFncyA9IGZsYWdzLnJlcGxhY2UoJ3knLCAnJyk7XG4gICAgICBpZiAoZmxhZ3MuaW5kZXhPZignZycpID09PSAtMSkge1xuICAgICAgICBmbGFncyArPSAnZyc7XG4gICAgICB9XG5cbiAgICAgIHN0ckNvcHkgPSBzdHIuc2xpY2UocmUubGFzdEluZGV4KTtcbiAgICAgIC8vIFN1cHBvcnQgYW5jaG9yZWQgc3RpY2t5IGJlaGF2aW9yLlxuICAgICAgaWYgKHJlLmxhc3RJbmRleCA+IDAgJiYgKCFyZS5tdWx0aWxpbmUgfHwgcmUubXVsdGlsaW5lICYmIHN0ci5jaGFyQXQocmUubGFzdEluZGV4IC0gMSkgIT09ICdcXG4nKSkge1xuICAgICAgICBzb3VyY2UgPSAnKD86ICcgKyBzb3VyY2UgKyAnKSc7XG4gICAgICAgIHN0ckNvcHkgPSAnICcgKyBzdHJDb3B5O1xuICAgICAgICBjaGFyc0FkZGVkKys7XG4gICAgICB9XG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgc3RyIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeKD86JyArIHNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgIH1cblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHNvdXJjZSArICckKD8hXFxcXHMpJywgZmxhZ3MpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG5cbiAgICBtYXRjaCA9IG5hdGl2ZUV4ZWMuY2FsbChzdGlja3kgPyByZUNvcHkgOiByZSwgc3RyQ29weSk7XG5cbiAgICBpZiAoc3RpY2t5KSB7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgbWF0Y2guaW5wdXQgPSBtYXRjaC5pbnB1dC5zbGljZShjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZShjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2guaW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICAgIHJlLmxhc3RJbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICB9IGVsc2UgcmUubGFzdEluZGV4ID0gMDtcbiAgICB9IGVsc2UgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmUubGFzdEluZGV4ID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24nIHdvcmsgZm9yIC8oLj8pPy9cbiAgICAgIG5hdGl2ZVJlcGxhY2UuY2FsbChtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoICYmIGdyb3Vwcykge1xuICAgICAgbWF0Y2guZ3JvdXBzID0gb2JqZWN0ID0gY3JlYXRlKG51bGwpO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBncm91cCA9IGdyb3Vwc1tpXTtcbiAgICAgICAgb2JqZWN0W2dyb3VwWzBdXSA9IG1hdGNoW2dyb3VwWzFdXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBleGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmV4ZWNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLmV4ZWNcbiQoeyB0YXJnZXQ6ICdSZWdFeHAnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAvLi8uZXhlYyAhPT0gZXhlYyB9LCB7XG4gIGV4ZWM6IGV4ZWNcbn0pO1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgb2JqZWN0RGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIHJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBGT1JDRUQgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJykuZ2V0LmNhbGwoeyBkb3RBbGw6IHRydWUsIHN0aWNreTogdHJ1ZSB9KSAhPT0gJ3N5Jztcbn0pO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5mbGFnc2AgZ2V0dGVyXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLmZsYWdzXG5pZiAoRk9SQ0VEKSBvYmplY3REZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKFJlZ0V4cC5wcm90b3R5cGUsICdmbGFncycsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IHJlZ0V4cEZsYWdzXG59KTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFVOU1VQUE9SVEVEX1kgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzJykuVU5TVVBQT1JURURfWTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJykuZ2V0O1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLnN0aWNreWAgZ2V0dGVyXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLnN0aWNreVxuaWYgKERFU0NSSVBUT1JTICYmIFVOU1VQUE9SVEVEX1kpIHtcbiAgZGVmaW5lUHJvcGVydHkoUmVnRXhwUHJvdG90eXBlLCAnc3RpY2t5Jywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICh0aGlzID09PSBSZWdFeHBQcm90b3R5cGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAvLyBXZSBjYW4ndCB1c2UgSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IgYmVjYXVzZVxuICAgICAgLy8gd2UgZG9uJ3QgYWRkIG1ldGFkYXRhIGZvciByZWdleHBzIGNyZWF0ZWQgYnkgYSBsaXRlcmFsLlxuICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zdGlja3k7XG4gICAgICB9XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgUmVnRXhwIHJlcXVpcmVkJyk7XG4gICAgfVxuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgbW92ZWQgdG8gZW50cnkgcG9pbnRzXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjJyk7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBERUxFR0FURVNfVE9fRVhFQyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgdmFyIHJlID0gL1thY10vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIGV4ZWNDYWxsZWQgPSB0cnVlO1xuICAgIHJldHVybiAvLi8uZXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xuICByZXR1cm4gcmUudGVzdCgnYWJjJykgPT09IHRydWUgJiYgZXhlY0NhbGxlZDtcbn0oKTtcblxudmFyIG5hdGl2ZVRlc3QgPSAvLi8udGVzdDtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUudGVzdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudGVzdFxuJCh7IHRhcmdldDogJ1JlZ0V4cCcsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFERUxFR0FURVNfVE9fRVhFQyB9LCB7XG4gIHRlc3Q6IGZ1bmN0aW9uIChzdHIpIHtcbiAgICB2YXIgZXhlYyA9IHRoaXMuZXhlYztcbiAgICBpZiAoIWlzQ2FsbGFibGUoZXhlYykpIHJldHVybiBuYXRpdmVUZXN0LmNhbGwodGhpcywgc3RyKTtcbiAgICB2YXIgcmVzdWx0ID0gZXhlYy5jYWxsKHRoaXMsIHN0cik7XG4gICAgaWYgKHJlc3VsdCAhPT0gbnVsbCAmJiAhaXNPYmplY3QocmVzdWx0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuICEhcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuUFJPUEVSO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzJyk7XG5cbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG52YXIgbmF0aXZlVG9TdHJpbmcgPSBSZWdFeHBQcm90b3R5cGVbVE9fU1RSSU5HXTtcblxudmFyIE5PVF9HRU5FUklDID0gZmFpbHMoZnVuY3Rpb24gKCkgeyByZXR1cm4gbmF0aXZlVG9TdHJpbmcuY2FsbCh7IHNvdXJjZTogJ2EnLCBmbGFnczogJ2InIH0pICE9ICcvYS9iJzsgfSk7XG4vLyBGRjQ0LSBSZWdFeHAjdG9TdHJpbmcgaGFzIGEgd3JvbmcgbmFtZVxudmFyIElOQ09SUkVDVF9OQU1FID0gUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgbmF0aXZlVG9TdHJpbmcubmFtZSAhPSBUT19TVFJJTkc7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKE5PVF9HRU5FUklDIHx8IElOQ09SUkVDVF9OQU1FKSB7XG4gIHJlZGVmaW5lKFJlZ0V4cC5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgcCA9ICR0b1N0cmluZyhSLnNvdXJjZSk7XG4gICAgdmFyIHJmID0gUi5mbGFncztcbiAgICB2YXIgZiA9ICR0b1N0cmluZyhyZiA9PT0gdW5kZWZpbmVkICYmIFIgaW5zdGFuY2VvZiBSZWdFeHAgJiYgISgnZmxhZ3MnIGluIFJlZ0V4cFByb3RvdHlwZSkgPyBmbGFncy5jYWxsKFIpIDogcmYpO1xuICAgIHJldHVybiAnLycgKyBwICsgJy8nICsgZjtcbiAgfSwgeyB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyBgU2V0YCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQtb2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSBjb2xsZWN0aW9uKCdTZXQnLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gaW5pdCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIGNvbGxlY3Rpb25TdHJvbmcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRk9SQ0VEID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ/CgrrcnLmF0KDApICE9PSAnXFx1RDg0Mic7XG59KTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcmVsYXRpdmUtaW5kZXhpbmctbWV0aG9kXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgYXQ6IGZ1bmN0aW9uIGF0KGluZGV4KSB7XG4gICAgdmFyIFMgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpKTtcbiAgICB2YXIgbGVuID0gUy5sZW5ndGg7XG4gICAgdmFyIHJlbGF0aXZlSW5kZXggPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgICB2YXIgayA9IHJlbGF0aXZlSW5kZXggPj0gMCA/IHJlbGF0aXZlSW5kZXggOiBsZW4gKyByZWxhdGl2ZUluZGV4O1xuICAgIHJldHVybiAoayA8IDAgfHwgayA+PSBsZW4pID8gdW5kZWZpbmVkIDogUy5jaGFyQXQoayk7XG4gIH1cbn0pO1xuIiwidmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoQ09OVkVSVF9UT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgcG9zKSB7XG4gICAgdmFyIFMgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIHBvc2l0aW9uID0gdG9JbnRlZ2VyT3JJbmZpbml0eShwb3MpO1xuICAgIHZhciBzaXplID0gUy5sZW5ndGg7XG4gICAgdmFyIGZpcnN0LCBzZWNvbmQ7XG4gICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBzaXplKSByZXR1cm4gQ09OVkVSVF9UT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBmaXJzdCA9IFMuY2hhckNvZGVBdChwb3NpdGlvbik7XG4gICAgcmV0dXJuIGZpcnN0IDwgMHhEODAwIHx8IGZpcnN0ID4gMHhEQkZGIHx8IHBvc2l0aW9uICsgMSA9PT0gc2l6ZVxuICAgICAgfHwgKHNlY29uZCA9IFMuY2hhckNvZGVBdChwb3NpdGlvbiArIDEpKSA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkZcbiAgICAgICAgPyBDT05WRVJUX1RPX1NUUklORyA/IFMuY2hhckF0KHBvc2l0aW9uKSA6IGZpcnN0XG4gICAgICAgIDogQ09OVkVSVF9UT19TVFJJTkcgPyBTLnNsaWNlKHBvc2l0aW9uLCBwb3NpdGlvbiArIDIpIDogKGZpcnN0IC0gMHhEODAwIDw8IDEwKSArIChzZWNvbmQgLSAweERDMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5jb2RlcG9pbnRhdFxuICBjb2RlQXQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxuICBjaGFyQXQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNvZGVBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY29kZUF0O1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSB9LCB7XG4gIGNvZGVQb2ludEF0OiBmdW5jdGlvbiBjb2RlUG9pbnRBdChwb3MpIHtcbiAgICByZXR1cm4gY29kZUF0KHRoaXMsIHBvcyk7XG4gIH1cbn0pO1xuIiwidmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXJlZ2V4cCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNSZWdFeHAoaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFwiVGhlIG1ldGhvZCBkb2Vzbid0IGFjY2VwdCByZWd1bGFyIGV4cHJlc3Npb25zXCIpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgdmFyIHJlZ2V4cCA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tNRVRIT0RfTkFNRV0ocmVnZXhwKTtcbiAgfSBjYXRjaCAoZXJyb3IxKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlZ2V4cFtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAnLy4vJ1tNRVRIT0RfTkFNRV0ocmVnZXhwKTtcbiAgICB9IGNhdGNoIChlcnJvcjIpIHsgLyogZW1wdHkgKi8gfVxuICB9IHJldHVybiBmYWxzZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgbm90QVJlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ub3QtYS1yZWdleHAnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGNvcnJlY3RJc1JlZ0V4cExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtaXMtcmVnZXhwLWxvZ2ljJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zdHJpbmctcHJvdG90eXBlLWVuZHN3aXRoIC0tIHNhZmVcbnZhciAkZW5kc1dpdGggPSAnJy5lbmRzV2l0aDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxudmFyIENPUlJFQ1RfSVNfUkVHRVhQX0xPR0lDID0gY29ycmVjdElzUmVnRXhwTG9naWMoJ2VuZHNXaXRoJyk7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9wdWxsLzcwMlxudmFyIE1ETl9QT0xZRklMTF9CVUcgPSAhSVNfUFVSRSAmJiAhQ09SUkVDVF9JU19SRUdFWFBfTE9HSUMgJiYgISFmdW5jdGlvbiAoKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFN0cmluZy5wcm90b3R5cGUsICdlbmRzV2l0aCcpO1xuICByZXR1cm4gZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci53cml0YWJsZTtcbn0oKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGhgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmVuZHN3aXRoXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogIU1ETl9QT0xZRklMTF9CVUcgJiYgIUNPUlJFQ1RfSVNfUkVHRVhQX0xPR0lDIH0sIHtcbiAgZW5kc1dpdGg6IGZ1bmN0aW9uIGVuZHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIGVuZFBvc2l0aW9uID0gQGxlbmd0aCAqLykge1xuICAgIHZhciB0aGF0ID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSk7XG4gICAgbm90QVJlZ0V4cChzZWFyY2hTdHJpbmcpO1xuICAgIHZhciBlbmRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBsZW4gPSB0aGF0Lmxlbmd0aDtcbiAgICB2YXIgZW5kID0gZW5kUG9zaXRpb24gPT09IHVuZGVmaW5lZCA/IGxlbiA6IG1pbih0b0xlbmd0aChlbmRQb3NpdGlvbiksIGxlbik7XG4gICAgdmFyIHNlYXJjaCA9IHRvU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRlbmRzV2l0aFxuICAgICAgPyAkZW5kc1dpdGguY2FsbCh0aGF0LCBzZWFyY2gsIGVuZClcbiAgICAgIDogdGhhdC5zbGljZShlbmQgLSBzZWFyY2gubGVuZ3RoLCBlbmQpID09PSBzZWFyY2g7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG5cbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXN0cmluZy1mcm9tY29kZXBvaW50IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgJGZyb21Db2RlUG9pbnQgPSBTdHJpbmcuZnJvbUNvZGVQb2ludDtcblxuLy8gbGVuZ3RoIHNob3VsZCBiZSAxLCBvbGQgRkYgcHJvYmxlbVxudmFyIElOQ09SUkVDVF9MRU5HVEggPSAhISRmcm9tQ29kZVBvaW50ICYmICRmcm9tQ29kZVBvaW50Lmxlbmd0aCAhPSAxO1xuXG4vLyBgU3RyaW5nLmZyb21Db2RlUG9pbnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcuZnJvbWNvZGVwb2ludFxuJCh7IHRhcmdldDogJ1N0cmluZycsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0xFTkdUSCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIGZyb21Db2RlUG9pbnQ6IGZ1bmN0aW9uIGZyb21Db2RlUG9pbnQoeCkge1xuICAgIHZhciBlbGVtZW50cyA9IFtdO1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgY29kZTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMEZGRkYpICE9PSBjb2RlKSB0aHJvdyBSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIGVsZW1lbnRzLnB1c2goY29kZSA8IDB4MTAwMDBcbiAgICAgICAgPyBmcm9tQ2hhckNvZGUoY29kZSlcbiAgICAgICAgOiBmcm9tQ2hhckNvZGUoKChjb2RlIC09IDB4MTAwMDApID4+IDEwKSArIDB4RDgwMCwgY29kZSAlIDB4NDAwICsgMHhEQzAwKVxuICAgICAgKTtcbiAgICB9IHJldHVybiBlbGVtZW50cy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBub3RBUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vdC1hLXJlZ2V4cCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY29ycmVjdElzUmVnRXhwTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogIWNvcnJlY3RJc1JlZ0V4cExvZ2ljKCdpbmNsdWRlcycpIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX50b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpKVxuICAgICAgLmluZGV4T2YodG9TdHJpbmcobm90QVJlZ0V4cChzZWFyY2hTdHJpbmcpKSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yJyk7XG5cbnZhciBTVFJJTkdfSVRFUkFUT1IgPSAnU3RyaW5nIEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNUUklOR19JVEVSQVRPUik7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG5kZWZpbmVJdGVyYXRvcihTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogU1RSSU5HX0lURVJBVE9SLFxuICAgIHN0cmluZzogdG9TdHJpbmcoaXRlcmF0ZWQpLFxuICAgIGluZGV4OiAwXG4gIH0pO1xuLy8gYCVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVzdHJpbmdpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHN0cmluZyA9IHN0YXRlLnN0cmluZztcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXg7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IHN0cmluZy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSBjaGFyQXQoc3RyaW5nLCBpbmRleCk7XG4gIHN0YXRlLmluZGV4ICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIG1vdmVkIHRvIGVudHJ5IHBvaW50c1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5yZWdleHAuZXhlYycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgZXhlYywgRk9SQ0VELCBTSEFNKSB7XG4gIHZhciBTWU1CT0wgPSB3ZWxsS25vd25TeW1ib2woS0VZKTtcblxuICB2YXIgREVMRUdBVEVTX1RPX1NZTUJPTCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3RyaW5nIG1ldGhvZHMgY2FsbCBzeW1ib2wtbmFtZWQgUmVnRXAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPSA3O1xuICB9KTtcblxuICB2YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBERUxFR0FURVNfVE9fU1lNQk9MICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcblxuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFdlIGNhbid0IHVzZSByZWFsIHJlZ2V4IGhlcmUgc2luY2UgaXQgY2F1c2VzIGRlb3B0aW1pemF0aW9uXG4gICAgICAvLyBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBpbiBWOFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMwNlxuICAgICAgcmUgPSB7fTtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICAgIHJlLmZsYWdzID0gJyc7XG4gICAgICByZVtTWU1CT0xdID0gLy4vW1NZTUJPTF07XG4gICAgfVxuXG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuXG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KTtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICBGT1JDRURcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBtZXRob2RzID0gZXhlYyhTWU1CT0wsICcnW0tFWV0sIGZ1bmN0aW9uIChuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgdmFyICRleGVjID0gcmVnZXhwLmV4ZWM7XG4gICAgICBpZiAoJGV4ZWMgPT09IHJlZ2V4cEV4ZWMgfHwgJGV4ZWMgPT09IFJlZ0V4cFByb3RvdHlwZS5leGVjKSB7XG4gICAgICAgIGlmIChERUxFR0FURVNfVE9fU1lNQk9MICYmICFmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAvLyBXZSBhdm9pZCBpdCBieSBkaXJlY3RseSBjYWxsaW5nIHRoZSBuYXRpdmUgQEBtZXRob2QgbWV0aG9kLlxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVSZWdFeHBNZXRob2QuY2FsbChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlTWV0aG9kLmNhbGwoc3RyLCByZWdleHAsIGFyZzIpIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgIH0pO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBtZXRob2RzWzBdKTtcbiAgICByZWRlZmluZShSZWdFeHBQcm90b3R5cGUsIFNZTUJPTCwgbWV0aG9kc1sxXSk7XG4gIH1cblxuICBpZiAoU0hBTSkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFJlZ0V4cFByb3RvdHlwZVtTWU1CT0xdLCAnc2hhbScsIHRydWUpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcblxuLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBjaGFyQXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcblxuLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHBleGVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSLCBTKSB7XG4gIHZhciBleGVjID0gUi5leGVjO1xuICBpZiAoaXNDYWxsYWJsZShleGVjKSkge1xuICAgIHZhciByZXN1bHQgPSBleGVjLmNhbGwoUiwgUyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkgYW5PYmplY3QocmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpID09PSAnUmVnRXhwJykgcmV0dXJuIHJlZ2V4cEV4ZWMuY2FsbChSLCBTKTtcbiAgdGhyb3cgVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQG1hdGNoIGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygnbWF0Y2gnLCBmdW5jdGlvbiAoTUFUQ0gsIG5hdGl2ZU1hdGNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5tYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLm1hdGNoXG4gICAgZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgbWF0Y2hlciA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBnZXRNZXRob2QocmVnZXhwLCBNQVRDSCk7XG4gICAgICByZXR1cm4gbWF0Y2hlciA/IG1hdGNoZXIuY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW01BVENIXSh0b1N0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAbWF0Y2hcbiAgICBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdCh0aGlzKTtcbiAgICAgIHZhciBTID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWF0Y2gsIHJ4LCBTKTtcblxuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICBpZiAoIXJ4Lmdsb2JhbCkgcmV0dXJuIHJlZ0V4cEV4ZWMocngsIFMpO1xuXG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gdG9TdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgQVtuXSA9IG1hdGNoU3RyO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgICBuKys7XG4gICAgICB9XG4gICAgICByZXR1cm4gbiA9PT0gMCA/IG51bGwgOiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3RyaW5nLXByb3RvdHlwZS1tYXRjaGFsbCAtLSBzYWZlICovXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyYXRvci1jb25zdHJ1Y3RvcicpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXJlZ2V4cCcpO1xudmFyIGdldFJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIE1BVENIX0FMTCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2hBbGwnKTtcbnZhciBSRUdFWFBfU1RSSU5HID0gJ1JlZ0V4cCBTdHJpbmcnO1xudmFyIFJFR0VYUF9TVFJJTkdfSVRFUkFUT1IgPSBSRUdFWFBfU1RSSU5HICsgJyBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihSRUdFWFBfU1RSSU5HX0lURVJBVE9SKTtcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xudmFyIG5hdGl2ZU1hdGNoQWxsID0gJycubWF0Y2hBbGw7XG5cbnZhciBXT1JLU19XSVRIX05PTl9HTE9CQUxfUkVHRVggPSAhIW5hdGl2ZU1hdGNoQWxsICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICdhJy5tYXRjaEFsbCgvLi8pO1xufSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuIC0tIGlnbm9yZVxudmFyICRSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoZnVuY3Rpb24gUmVnRXhwU3RyaW5nSXRlcmF0b3IocmVnZXhwLCBzdHJpbmcsIGdsb2JhbCwgZnVsbFVuaWNvZGUpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogUkVHRVhQX1NUUklOR19JVEVSQVRPUixcbiAgICByZWdleHA6IHJlZ2V4cCxcbiAgICBzdHJpbmc6IHN0cmluZyxcbiAgICBnbG9iYWw6IGdsb2JhbCxcbiAgICB1bmljb2RlOiBmdWxsVW5pY29kZSxcbiAgICBkb25lOiBmYWxzZVxuICB9KTtcbn0sIFJFR0VYUF9TVFJJTkcsIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHZhciBSID0gc3RhdGUucmVnZXhwO1xuICB2YXIgUyA9IHN0YXRlLnN0cmluZztcbiAgdmFyIG1hdGNoID0gcmVnRXhwRXhlYyhSLCBTKTtcbiAgaWYgKG1hdGNoID09PSBudWxsKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiBzdGF0ZS5kb25lID0gdHJ1ZSB9O1xuICBpZiAoc3RhdGUuZ2xvYmFsKSB7XG4gICAgaWYgKHRvU3RyaW5nKG1hdGNoWzBdKSA9PT0gJycpIFIubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKFIubGFzdEluZGV4KSwgc3RhdGUudW5pY29kZSk7XG4gICAgcmV0dXJuIHsgdmFsdWU6IG1hdGNoLCBkb25lOiBmYWxzZSB9O1xuICB9XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICByZXR1cm4geyB2YWx1ZTogbWF0Y2gsIGRvbmU6IGZhbHNlIH07XG59KTtcblxudmFyICRtYXRjaEFsbCA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIFMgPSB0b1N0cmluZyhzdHJpbmcpO1xuICB2YXIgQywgZmxhZ3NWYWx1ZSwgZmxhZ3MsIG1hdGNoZXIsIGdsb2JhbCwgZnVsbFVuaWNvZGU7XG4gIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IoUiwgUmVnRXhwKTtcbiAgZmxhZ3NWYWx1ZSA9IFIuZmxhZ3M7XG4gIGlmIChmbGFnc1ZhbHVlID09PSB1bmRlZmluZWQgJiYgUiBpbnN0YW5jZW9mIFJlZ0V4cCAmJiAhKCdmbGFncycgaW4gUmVnRXhwUHJvdG90eXBlKSkge1xuICAgIGZsYWdzVmFsdWUgPSBnZXRSZWdFeHBGbGFncy5jYWxsKFIpO1xuICB9XG4gIGZsYWdzID0gZmxhZ3NWYWx1ZSA9PT0gdW5kZWZpbmVkID8gJycgOiB0b1N0cmluZyhmbGFnc1ZhbHVlKTtcbiAgbWF0Y2hlciA9IG5ldyBDKEMgPT09IFJlZ0V4cCA/IFIuc291cmNlIDogUiwgZmxhZ3MpO1xuICBnbG9iYWwgPSAhIX5mbGFncy5pbmRleE9mKCdnJyk7XG4gIGZ1bGxVbmljb2RlID0gISF+ZmxhZ3MuaW5kZXhPZigndScpO1xuICBtYXRjaGVyLmxhc3RJbmRleCA9IHRvTGVuZ3RoKFIubGFzdEluZGV4KTtcbiAgcmV0dXJuIG5ldyAkUmVnRXhwU3RyaW5nSXRlcmF0b3IobWF0Y2hlciwgUywgZ2xvYmFsLCBmdWxsVW5pY29kZSk7XG59O1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUubWF0Y2hhbGxcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBXT1JLU19XSVRIX05PTl9HTE9CQUxfUkVHRVggfSwge1xuICBtYXRjaEFsbDogZnVuY3Rpb24gbWF0Y2hBbGwocmVnZXhwKSB7XG4gICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgIHZhciBmbGFncywgUywgbWF0Y2hlciwgcng7XG4gICAgaWYgKHJlZ2V4cCAhPSBudWxsKSB7XG4gICAgICBpZiAoaXNSZWdFeHAocmVnZXhwKSkge1xuICAgICAgICBmbGFncyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJ2ZsYWdzJyBpbiBSZWdFeHBQcm90b3R5cGVcbiAgICAgICAgICA/IHJlZ2V4cC5mbGFnc1xuICAgICAgICAgIDogZ2V0UmVnRXhwRmxhZ3MuY2FsbChyZWdleHApXG4gICAgICAgICkpO1xuICAgICAgICBpZiAoIX5mbGFncy5pbmRleE9mKCdnJykpIHRocm93IFR5cGVFcnJvcignYC5tYXRjaEFsbGAgZG9lcyBub3QgYWxsb3cgbm9uLWdsb2JhbCByZWdleGVzJyk7XG4gICAgICB9XG4gICAgICBpZiAoV09SS1NfV0lUSF9OT05fR0xPQkFMX1JFR0VYKSByZXR1cm4gbmF0aXZlTWF0Y2hBbGwuYXBwbHkoTywgYXJndW1lbnRzKTtcbiAgICAgIG1hdGNoZXIgPSBnZXRNZXRob2QocmVnZXhwLCBNQVRDSF9BTEwpO1xuICAgICAgaWYgKG1hdGNoZXIgPT09IHVuZGVmaW5lZCAmJiBJU19QVVJFICYmIGNsYXNzb2YocmVnZXhwKSA9PSAnUmVnRXhwJykgbWF0Y2hlciA9ICRtYXRjaEFsbDtcbiAgICAgIGlmIChtYXRjaGVyKSByZXR1cm4gbWF0Y2hlci5jYWxsKHJlZ2V4cCwgTyk7XG4gICAgfSBlbHNlIGlmIChXT1JLU19XSVRIX05PTl9HTE9CQUxfUkVHRVgpIHJldHVybiBuYXRpdmVNYXRjaEFsbC5hcHBseShPLCBhcmd1bWVudHMpO1xuICAgIFMgPSB0b1N0cmluZyhPKTtcbiAgICByeCA9IG5ldyBSZWdFeHAocmVnZXhwLCAnZycpO1xuICAgIHJldHVybiBJU19QVVJFID8gJG1hdGNoQWxsLmNhbGwocngsIFMpIDogcnhbTUFUQ0hfQUxMXShTKTtcbiAgfVxufSk7XG5cbklTX1BVUkUgfHwgTUFUQ0hfQUxMIGluIFJlZ0V4cFByb3RvdHlwZSB8fCByZWRlZmluZShSZWdFeHBQcm90b3R5cGUsIE1BVENIX0FMTCwgJG1hdGNoQWxsKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvVmVyc2lvblxcLzEwKD86XFwuXFxkKyl7MSwyfSg/OiBbXFx3Li9dKyk/KD86IE1vYmlsZVxcL1xcdyspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRwYWRFbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXBhZCcpLmVuZDtcbnZhciBXRUJLSVRfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1wYWQtd2Via2l0LWJ1ZycpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5wYWRFbmRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnBhZGVuZFxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFdFQktJVF9CVUcgfSwge1xuICBwYWRFbmQ6IGZ1bmN0aW9uIHBhZEVuZChtYXhMZW5ndGggLyogLCBmaWxsU3RyaW5nID0gJyAnICovKSB7XG4gICAgcmV0dXJuICRwYWRFbmQodGhpcywgbWF4TGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHBhZFN0YXJ0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1wYWQnKS5zdGFydDtcbnZhciBXRUJLSVRfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1wYWQtd2Via2l0LWJ1ZycpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5wYWRTdGFydGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucGFkc3RhcnRcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBXRUJLSVRfQlVHIH0sIHtcbiAgcGFkU3RhcnQ6IGZ1bmN0aW9uIHBhZFN0YXJ0KG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZFN0YXJ0KHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcbnZhciBwdXNoID0gQXJyYXlQcm90b3R5cGUucHVzaDtcbnZhciBqb2luID0gQXJyYXlQcm90b3R5cGUuam9pbjtcblxuLy8gYFN0cmluZy5yYXdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucmF3XG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgc3RhdDogdHJ1ZSB9LCB7XG4gIHJhdzogZnVuY3Rpb24gcmF3KHRlbXBsYXRlKSB7XG4gICAgdmFyIHJhd1RlbXBsYXRlID0gdG9JbmRleGVkT2JqZWN0KHRvT2JqZWN0KHRlbXBsYXRlKS5yYXcpO1xuICAgIHZhciBsaXRlcmFsU2VnbWVudHMgPSBsZW5ndGhPZkFycmF5TGlrZShyYXdUZW1wbGF0ZSk7XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGVsZW1lbnRzID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChsaXRlcmFsU2VnbWVudHMgPiBpKSB7XG4gICAgICBwdXNoLmNhbGwoZWxlbWVudHMsIHRvU3RyaW5nKHJhd1RlbXBsYXRlW2krK10pKTtcbiAgICAgIGlmIChpID09PSBsaXRlcmFsU2VnbWVudHMpIHJldHVybiBqb2luLmNhbGwoZWxlbWVudHMsICcnKTtcbiAgICAgIGlmIChpIDwgYXJndW1lbnRzTGVuZ3RoKSBwdXNoLmNhbGwoZWxlbWVudHMsIHRvU3RyaW5nKGFyZ3VtZW50c1tpXSkpO1xuICAgIH1cbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXJlcGVhdCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBlYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnJlcGVhdFxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlIH0sIHtcbiAgcmVwZWF0OiByZXBlYXRcbn0pO1xuIiwidmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIHJlcGxhY2UgPSAnJy5yZXBsYWNlO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCYnYF18XFxkezEsMn18PFtePl0qPikvZztcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRCA9IC9cXCQoWyQmJ2BdfFxcZHsxLDJ9KS9nO1xuXG4vLyBgR2V0U3Vic3RpdHV0aW9uYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgdmFyIHRhaWxQb3MgPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICB2YXIgbSA9IGNhcHR1cmVzLmxlbmd0aDtcbiAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIG5hbWVkQ2FwdHVyZXMgPSB0b09iamVjdChuYW1lZENhcHR1cmVzKTtcbiAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gIH1cbiAgcmV0dXJuIHJlcGxhY2UuY2FsbChyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgIHZhciBjYXB0dXJlO1xuICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICBjYXNlICckJzogcmV0dXJuICckJztcbiAgICAgIGNhc2UgJyYnOiByZXR1cm4gbWF0Y2hlZDtcbiAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgIGNhc2UgXCInXCI6IHJldHVybiBzdHIuc2xpY2UodGFpbFBvcyk7XG4gICAgICBjYXNlICc8JzpcbiAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OiAvLyBcXGRcXGQ/XG4gICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICBpZiAobiA+IG0pIHtcbiAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgaWYgKGYgPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICBpZiAoZiA8PSBtKSByZXR1cm4gY2FwdHVyZXNbZiAtIDFdID09PSB1bmRlZmluZWQgPyBjaC5jaGFyQXQoMSkgOiBjYXB0dXJlc1tmIC0gMV0gKyBjaC5jaGFyQXQoMSk7XG4gICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICB9XG4gICAgICAgIGNhcHR1cmUgPSBjYXB0dXJlc1tuIC0gMV07XG4gICAgfVxuICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIGdldFN1YnN0aXR1dGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc3Vic3RpdHV0aW9uJyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgUkVQTEFDRSA9IHdlbGxLbm93blN5bWJvbCgncmVwbGFjZScpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG52YXIgbWF5YmVUb1N0cmluZyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG5cbi8vIElFIDw9IDExIHJlcGxhY2VzICQwIHdpdGggdGhlIHdob2xlIG1hdGNoLCBhcyBpZiBpdCB3YXMgJCZcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzYwMjQ2NjYvZ2V0dGluZy1pZS10by1yZXBsYWNlLWEtcmVnZXgtd2l0aC10aGUtbGl0ZXJhbC1zdHJpbmctMFxudmFyIFJFUExBQ0VfS0VFUFNfJDAgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL3ByZWZlci1lc2NhcGUtcmVwbGFjZW1lbnQtZG9sbGFyLWNoYXIgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuICdhJy5yZXBsYWNlKC8uLywgJyQwJykgPT09ICckMCc7XG59KSgpO1xuXG4vLyBTYWZhcmkgPD0gMTMuMC4zKD8pIHN1YnN0aXR1dGVzIG50aCBjYXB0dXJlIHdoZXJlIG4+bSB3aXRoIGFuIGVtcHR5IHN0cmluZ1xudmFyIFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFID0gKGZ1bmN0aW9uICgpIHtcbiAgaWYgKC8uL1tSRVBMQUNFXSkge1xuICAgIHJldHVybiAvLi9bUkVQTEFDRV0oJ2EnLCAnJDAnKSA9PT0gJyc7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSkoKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLXVzZWxlc3MtZG9sbGFyLXJlcGxhY2VtZW50cyAtLSBmYWxzZSBwb3NpdGl2ZVxuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbi8vIEBAcmVwbGFjZSBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ3JlcGxhY2UnLCBmdW5jdGlvbiAoXywgbmF0aXZlUmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBVTlNBRkVfU1VCU1RJVFVURSA9IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFID8gJyQnIDogJyQwJztcblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgcmVwbGFjZXIgPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBnZXRNZXRob2Qoc2VhcmNoVmFsdWUsIFJFUExBQ0UpO1xuICAgICAgcmV0dXJuIHJlcGxhY2VyXG4gICAgICAgID8gcmVwbGFjZXIuY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6IG5hdGl2ZVJlcGxhY2UuY2FsbCh0b1N0cmluZyhPKSwgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHN0cmluZywgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdCh0aGlzKTtcbiAgICAgIHZhciBTID0gdG9TdHJpbmcoc3RyaW5nKTtcblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgcmVwbGFjZVZhbHVlID09PSAnc3RyaW5nJyAmJlxuICAgICAgICByZXBsYWNlVmFsdWUuaW5kZXhPZihVTlNBRkVfU1VCU1RJVFVURSkgPT09IC0xICYmXG4gICAgICAgIHJlcGxhY2VWYWx1ZS5pbmRleE9mKCckPCcpID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUobmF0aXZlUmVwbGFjZSwgcngsIFMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGZ1bmN0aW9uYWxSZXBsYWNlID0gaXNDYWxsYWJsZShyZXBsYWNlVmFsdWUpO1xuICAgICAgaWYgKCFmdW5jdGlvbmFsUmVwbGFjZSkgcmVwbGFjZVZhbHVlID0gdG9TdHJpbmcocmVwbGFjZVZhbHVlKTtcblxuICAgICAgdmFyIGdsb2JhbCA9IHJ4Lmdsb2JhbDtcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuXG4gICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICBpZiAoIWdsb2JhbCkgYnJlYWs7XG5cbiAgICAgICAgdmFyIG1hdGNoU3RyID0gdG9TdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFjY3VtdWxhdGVkUmVzdWx0ID0gJyc7XG4gICAgICB2YXIgbmV4dFNvdXJjZVBvc2l0aW9uID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSByZXN1bHRzW2ldO1xuXG4gICAgICAgIHZhciBtYXRjaGVkID0gdG9TdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gbWF4KG1pbih0b0ludGVnZXJPckluZmluaXR5KHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IHRvU3RyaW5nKHJlcGxhY2VWYWx1ZS5hcHBseSh1bmRlZmluZWQsIHJlcGxhY2VyQXJncykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIFMsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zaXRpb24gPj0gbmV4dFNvdXJjZVBvc2l0aW9uKSB7XG4gICAgICAgICAgYWNjdW11bGF0ZWRSZXN1bHQgKz0gUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24sIHBvc2l0aW9uKSArIHJlcGxhY2VtZW50O1xuICAgICAgICAgIG5leHRTb3VyY2VQb3NpdGlvbiA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZFJlc3VsdCArIFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uKTtcbiAgICB9XG4gIF07XG59LCAhUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgfHwgIVJFUExBQ0VfS0VFUFNfJDAgfHwgUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcmVnZXhwJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBnZXRSZWdFeHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcbnZhciBnZXRTdWJzdGl0dXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXN1YnN0aXR1dGlvbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgUkVQTEFDRSA9IHdlbGxLbm93blN5bWJvbCgncmVwbGFjZScpO1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbnZhciBzdHJpbmdJbmRleE9mID0gZnVuY3Rpb24gKHN0cmluZywgc2VhcmNoVmFsdWUsIGZyb21JbmRleCkge1xuICBpZiAoZnJvbUluZGV4ID4gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIC0xO1xuICBpZiAoc2VhcmNoVmFsdWUgPT09ICcnKSByZXR1cm4gZnJvbUluZGV4O1xuICByZXR1cm4gc3RyaW5nLmluZGV4T2Yoc2VhcmNoVmFsdWUsIGZyb21JbmRleCk7XG59O1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlQWxsYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlYWxsXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUgfSwge1xuICByZXBsYWNlQWxsOiBmdW5jdGlvbiByZXBsYWNlQWxsKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpIHtcbiAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgdmFyIElTX1JFR19FWFAsIGZsYWdzLCByZXBsYWNlciwgc3RyaW5nLCBzZWFyY2hTdHJpbmcsIGZ1bmN0aW9uYWxSZXBsYWNlLCBzZWFyY2hMZW5ndGgsIGFkdmFuY2VCeSwgcmVwbGFjZW1lbnQ7XG4gICAgdmFyIHBvc2l0aW9uID0gMDtcbiAgICB2YXIgZW5kT2ZMYXN0TWF0Y2ggPSAwO1xuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICBpZiAoc2VhcmNoVmFsdWUgIT0gbnVsbCkge1xuICAgICAgSVNfUkVHX0VYUCA9IGlzUmVnRXhwKHNlYXJjaFZhbHVlKTtcbiAgICAgIGlmIChJU19SRUdfRVhQKSB7XG4gICAgICAgIGZsYWdzID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgnZmxhZ3MnIGluIFJlZ0V4cFByb3RvdHlwZVxuICAgICAgICAgID8gc2VhcmNoVmFsdWUuZmxhZ3NcbiAgICAgICAgICA6IGdldFJlZ0V4cEZsYWdzLmNhbGwoc2VhcmNoVmFsdWUpXG4gICAgICAgICkpO1xuICAgICAgICBpZiAoIX5mbGFncy5pbmRleE9mKCdnJykpIHRocm93IFR5cGVFcnJvcignYC5yZXBsYWNlQWxsYCBkb2VzIG5vdCBhbGxvdyBub24tZ2xvYmFsIHJlZ2V4ZXMnKTtcbiAgICAgIH1cbiAgICAgIHJlcGxhY2VyID0gZ2V0TWV0aG9kKHNlYXJjaFZhbHVlLCBSRVBMQUNFKTtcbiAgICAgIGlmIChyZXBsYWNlcikge1xuICAgICAgICByZXR1cm4gcmVwbGFjZXIuY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoSVNfUFVSRSAmJiBJU19SRUdfRVhQKSB7XG4gICAgICAgIHJldHVybiB0b1N0cmluZyhPKS5yZXBsYWNlKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdHJpbmcgPSB0b1N0cmluZyhPKTtcbiAgICBzZWFyY2hTdHJpbmcgPSB0b1N0cmluZyhzZWFyY2hWYWx1ZSk7XG4gICAgZnVuY3Rpb25hbFJlcGxhY2UgPSBpc0NhbGxhYmxlKHJlcGxhY2VWYWx1ZSk7XG4gICAgaWYgKCFmdW5jdGlvbmFsUmVwbGFjZSkgcmVwbGFjZVZhbHVlID0gdG9TdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICBzZWFyY2hMZW5ndGggPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICAgIGFkdmFuY2VCeSA9IG1heCgxLCBzZWFyY2hMZW5ndGgpO1xuICAgIHBvc2l0aW9uID0gc3RyaW5nSW5kZXhPZihzdHJpbmcsIHNlYXJjaFN0cmluZywgMCk7XG4gICAgd2hpbGUgKHBvc2l0aW9uICE9PSAtMSkge1xuICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgIHJlcGxhY2VtZW50ID0gdG9TdHJpbmcocmVwbGFjZVZhbHVlKHNlYXJjaFN0cmluZywgcG9zaXRpb24sIHN0cmluZykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVwbGFjZW1lbnQgPSBnZXRTdWJzdGl0dXRpb24oc2VhcmNoU3RyaW5nLCBzdHJpbmcsIHBvc2l0aW9uLCBbXSwgdW5kZWZpbmVkLCByZXBsYWNlVmFsdWUpO1xuICAgICAgfVxuICAgICAgcmVzdWx0ICs9IHN0cmluZy5zbGljZShlbmRPZkxhc3RNYXRjaCwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICBlbmRPZkxhc3RNYXRjaCA9IHBvc2l0aW9uICsgc2VhcmNoTGVuZ3RoO1xuICAgICAgcG9zaXRpb24gPSBzdHJpbmdJbmRleE9mKHN0cmluZywgc2VhcmNoU3RyaW5nLCBwb3NpdGlvbiArIGFkdmFuY2VCeSk7XG4gICAgfVxuICAgIGlmIChlbmRPZkxhc3RNYXRjaCA8IHN0cmluZy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdCArPSBzdHJpbmcuc2xpY2UoZW5kT2ZMYXN0TWF0Y2gpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBzYW1lVmFsdWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2FtZS12YWx1ZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQHNlYXJjaCBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ3NlYXJjaCcsIGZ1bmN0aW9uIChTRUFSQ0gsIG5hdGl2ZVNlYXJjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc2VhcmNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc2VhcmNoXG4gICAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgICAgdmFyIHNlYXJjaGVyID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGdldE1ldGhvZChyZWdleHAsIFNFQVJDSCk7XG4gICAgICByZXR1cm4gc2VhcmNoZXIgPyBzZWFyY2hlci5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbU0VBUkNIXSh0b1N0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNlYXJjaFxuICAgIGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgICAgdmFyIFMgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVTZWFyY2gsIHJ4LCBTKTtcblxuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcHJldmlvdXNMYXN0SW5kZXggPSByeC5sYXN0SW5kZXg7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShwcmV2aW91c0xhc3RJbmRleCwgMCkpIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShyeC5sYXN0SW5kZXgsIHByZXZpb3VzTGFzdEluZGV4KSkgcngubGFzdEluZGV4ID0gcHJldmlvdXNMYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0ID09PSBudWxsID8gLTEgOiByZXN1bHQuaW5kZXg7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYycpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXJlZ2V4cCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIGNhbGxSZWdFeHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYycpO1xudmFyIHN0aWNreUhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBzdGlja3lIZWxwZXJzLlVOU1VQUE9SVEVEX1k7XG52YXIgYXJyYXlQdXNoID0gW10ucHVzaDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBNQVhfVUlOVDMyID0gMHhGRkZGRkZGRjtcblxuLy8gQ2hyb21lIDUxIGhhcyBhIGJ1Z2d5IFwic3BsaXRcIiBpbXBsZW1lbnRhdGlvbiB3aGVuIFJlZ0V4cCNleGVjICE9PSBuYXRpdmVFeGVjXG4vLyBXZWV4IEpTIGhhcyBmcm96ZW4gYnVpbHQtaW4gcHJvdG90eXBlcywgc28gdXNlIHRyeSAvIGNhdGNoIHdyYXBwZXJcbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLWVtcHR5LWdyb3VwIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHZhciByZSA9IC8oPzopLztcbiAgdmFyIG9yaWdpbmFsRXhlYyA9IHJlLmV4ZWM7XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvcmlnaW5hbEV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgdmFyIHJlc3VsdCA9ICdhYicuc3BsaXQocmUpO1xuICByZXR1cm4gcmVzdWx0Lmxlbmd0aCAhPT0gMiB8fCByZXN1bHRbMF0gIT09ICdhJyB8fCByZXN1bHRbMV0gIT09ICdiJztcbn0pO1xuXG4vLyBAQHNwbGl0IGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygnc3BsaXQnLCBmdW5jdGlvbiAoU1BMSVQsIG5hdGl2ZVNwbGl0LCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIGludGVybmFsU3BsaXQ7XG4gIGlmIChcbiAgICAnYWJiYycuc3BsaXQoLyhiKSovKVsxXSA9PSAnYycgfHxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLWVtcHR5LWdyb3VwIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgJ3Rlc3QnLnNwbGl0KC8oPzopLywgLTEpLmxlbmd0aCAhPSA0IHx8XG4gICAgJ2FiJy5zcGxpdCgvKD86YWIpKi8pLmxlbmd0aCAhPSAyIHx8XG4gICAgJy4nLnNwbGl0KC8oLj8pKC4/KS8pLmxlbmd0aCAhPSA0IHx8XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1lbXB0eS1jYXB0dXJpbmctZ3JvdXAsIHJlZ2V4cC9uby1lbXB0eS1ncm91cCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgICcuJy5zcGxpdCgvKCkoKS8pLmxlbmd0aCA+IDEgfHxcbiAgICAnJy5zcGxpdCgvLj8vKS5sZW5ndGhcbiAgKSB7XG4gICAgLy8gYmFzZWQgb24gZXM1LXNoaW0gaW1wbGVtZW50YXRpb24sIG5lZWQgdG8gcmV3b3JrIGl0XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSk7XG4gICAgICB2YXIgbGltID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmIChsaW0gPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtzdHJpbmddO1xuICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgIGlmICghaXNSZWdFeHAoc2VwYXJhdG9yKSkge1xuICAgICAgICByZXR1cm4gbmF0aXZlU3BsaXQuY2FsbChzdHJpbmcsIHNlcGFyYXRvciwgbGltKTtcbiAgICAgIH1cbiAgICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICAgIHZhciBmbGFncyA9IChzZXBhcmF0b3IuaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5zdGlja3kgPyAneScgOiAnJyk7XG4gICAgICB2YXIgbGFzdExhc3RJbmRleCA9IDA7XG4gICAgICAvLyBNYWtlIGBnbG9iYWxgIGFuZCBhdm9pZCBgbGFzdEluZGV4YCBpc3N1ZXMgYnkgd29ya2luZyB3aXRoIGEgY29weVxuICAgICAgdmFyIHNlcGFyYXRvckNvcHkgPSBuZXcgUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIGZsYWdzICsgJ2cnKTtcbiAgICAgIHZhciBtYXRjaCwgbGFzdEluZGV4LCBsYXN0TGVuZ3RoO1xuICAgICAgd2hpbGUgKG1hdGNoID0gcmVnZXhwRXhlYy5jYWxsKHNlcGFyYXRvckNvcHksIHN0cmluZykpIHtcbiAgICAgICAgbGFzdEluZGV4ID0gc2VwYXJhdG9yQ29weS5sYXN0SW5kZXg7XG4gICAgICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7XG4gICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgsIG1hdGNoLmluZGV4KSk7XG4gICAgICAgICAgaWYgKG1hdGNoLmxlbmd0aCA+IDEgJiYgbWF0Y2guaW5kZXggPCBzdHJpbmcubGVuZ3RoKSBhcnJheVB1c2guYXBwbHkob3V0cHV0LCBtYXRjaC5zbGljZSgxKSk7XG4gICAgICAgICAgbGFzdExlbmd0aCA9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgICBsYXN0TGFzdEluZGV4ID0gbGFzdEluZGV4O1xuICAgICAgICAgIGlmIChvdXRwdXQubGVuZ3RoID49IGxpbSkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcGFyYXRvckNvcHkubGFzdEluZGV4ID09PSBtYXRjaC5pbmRleCkgc2VwYXJhdG9yQ29weS5sYXN0SW5kZXgrKzsgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgfVxuICAgICAgaWYgKGxhc3RMYXN0SW5kZXggPT09IHN0cmluZy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGxhc3RMZW5ndGggfHwgIXNlcGFyYXRvckNvcHkudGVzdCgnJykpIG91dHB1dC5wdXNoKCcnKTtcbiAgICAgIH0gZWxzZSBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCkpO1xuICAgICAgcmV0dXJuIG91dHB1dC5sZW5ndGggPiBsaW0gPyBvdXRwdXQuc2xpY2UoMCwgbGltKSA6IG91dHB1dDtcbiAgICB9O1xuICAvLyBDaGFrcmEsIFY4XG4gIH0gZWxzZSBpZiAoJzAnLnNwbGl0KHVuZGVmaW5lZCwgMCkubGVuZ3RoKSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6IG5hdGl2ZVNwbGl0LmNhbGwodGhpcywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfTtcbiAgfSBlbHNlIGludGVybmFsU3BsaXQgPSBuYXRpdmVTcGxpdDtcblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNwbGl0YCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogZ2V0TWV0aG9kKHNlcGFyYXRvciwgU1BMSVQpO1xuICAgICAgcmV0dXJuIHNwbGl0dGVyXG4gICAgICAgID8gc3BsaXR0ZXIuY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KVxuICAgICAgICA6IGludGVybmFsU3BsaXQuY2FsbCh0b1N0cmluZyhPKSwgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc3BsaXRcbiAgICAvL1xuICAgIC8vIE5PVEU6IFRoaXMgY2Fubm90IGJlIHByb3Blcmx5IHBvbHlmaWxsZWQgaW4gZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnRcbiAgICAvLyB0aGUgJ3knIGZsYWcuXG4gICAgZnVuY3Rpb24gKHN0cmluZywgbGltaXQpIHtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgICAgdmFyIFMgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShpbnRlcm5hbFNwbGl0LCByeCwgUywgbGltaXQsIGludGVybmFsU3BsaXQgIT09IG5hdGl2ZVNwbGl0KTtcblxuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3RvcihyeCwgUmVnRXhwKTtcblxuICAgICAgdmFyIHVuaWNvZGVNYXRjaGluZyA9IHJ4LnVuaWNvZGU7XG4gICAgICB2YXIgZmxhZ3MgPSAocnguaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChVTlNVUFBPUlRFRF9ZID8gJ2cnIDogJ3knKTtcblxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIFMgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHZhciBzcGxpdHRlciA9IG5ldyBDKFVOU1VQUE9SVEVEX1kgPyAnXig/OicgKyByeC5zb3VyY2UgKyAnKScgOiByeCwgZmxhZ3MpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoUy5sZW5ndGggPT09IDApIHJldHVybiBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgUykgPT09IG51bGwgPyBbU10gOiBbXTtcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIHZhciBxID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB3aGlsZSAocSA8IFMubGVuZ3RoKSB7XG4gICAgICAgIHNwbGl0dGVyLmxhc3RJbmRleCA9IFVOU1VQUE9SVEVEX1kgPyAwIDogcTtcbiAgICAgICAgdmFyIHogPSBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgVU5TVVBQT1JURURfWSA/IFMuc2xpY2UocSkgOiBTKTtcbiAgICAgICAgdmFyIGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB6ID09PSBudWxsIHx8XG4gICAgICAgICAgKGUgPSBtaW4odG9MZW5ndGgoc3BsaXR0ZXIubGFzdEluZGV4ICsgKFVOU1VQUE9SVEVEX1kgPyBxIDogMCkpLCBTLmxlbmd0aCkpID09PSBwXG4gICAgICAgICkge1xuICAgICAgICAgIHEgPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgcSwgdW5pY29kZU1hdGNoaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBBLnB1c2goUy5zbGljZShwLCBxKSk7XG4gICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IHoubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBBLnB1c2goeltpXSk7XG4gICAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHEgPSBwID0gZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQS5wdXNoKFMuc2xpY2UocCkpO1xuICAgICAgcmV0dXJuIEE7XG4gICAgfVxuICBdO1xufSwgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQywgVU5TVVBQT1JURURfWSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgbm90QVJlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ub3QtYS1yZWdleHAnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGNvcnJlY3RJc1JlZ0V4cExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtaXMtcmVnZXhwLWxvZ2ljJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zdHJpbmctcHJvdG90eXBlLXN0YXJ0c3dpdGggLS0gc2FmZVxudmFyICRzdGFydHNXaXRoID0gJycuc3RhcnRzV2l0aDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxudmFyIENPUlJFQ1RfSVNfUkVHRVhQX0xPR0lDID0gY29ycmVjdElzUmVnRXhwTG9naWMoJ3N0YXJ0c1dpdGgnKTtcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL3B1bGwvNzAyXG52YXIgTUROX1BPTFlGSUxMX0JVRyA9ICFJU19QVVJFICYmICFDT1JSRUNUX0lTX1JFR0VYUF9MT0dJQyAmJiAhIWZ1bmN0aW9uICgpIHtcbiAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoU3RyaW5nLnByb3RvdHlwZSwgJ3N0YXJ0c1dpdGgnKTtcbiAgcmV0dXJuIGRlc2NyaXB0b3IgJiYgIWRlc2NyaXB0b3Iud3JpdGFibGU7XG59KCk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGhgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnN0YXJ0c3dpdGhcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhTUROX1BPTFlGSUxMX0JVRyAmJiAhQ09SUkVDVF9JU19SRUdFWFBfTE9HSUMgfSwge1xuICBzdGFydHNXaXRoOiBmdW5jdGlvbiBzdGFydHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHZhciB0aGF0ID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSk7XG4gICAgbm90QVJlZ0V4cChzZWFyY2hTdHJpbmcpO1xuICAgIHZhciBpbmRleCA9IHRvTGVuZ3RoKG1pbihhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdGhhdC5sZW5ndGgpKTtcbiAgICB2YXIgc2VhcmNoID0gdG9TdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJHN0YXJ0c1dpdGhcbiAgICAgID8gJHN0YXJ0c1dpdGguY2FsbCh0aGF0LCBzZWFyY2gsIGluZGV4KVxuICAgICAgOiB0aGF0LnNsaWNlKGluZGV4LCBpbmRleCArIHNlYXJjaC5sZW5ndGgpID09PSBzZWFyY2g7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxudmFyIHNsaWNlID0gJycuc2xpY2U7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1zdHJpbmctc2xpY2UgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBGT1JDRUQgPSAhJycuc3Vic3RyIHx8ICdhYicuc3Vic3RyKC0xKSAhPT0gJ2InO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5zdWJzdHJgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnN1YnN0clxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIHN1YnN0cjogZnVuY3Rpb24gc3Vic3RyKHN0YXJ0LCBsZW5ndGgpIHtcbiAgICB2YXIgdGhhdCA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpO1xuICAgIHZhciBzaXplID0gdGhhdC5sZW5ndGg7XG4gICAgdmFyIGludFN0YXJ0ID0gdG9JbnRlZ2VyT3JJbmZpbml0eShzdGFydCk7XG4gICAgdmFyIGludExlbmd0aCwgaW50RW5kO1xuICAgIGlmIChpbnRTdGFydCA9PT0gSW5maW5pdHkpIGludFN0YXJ0ID0gMDtcbiAgICBpZiAoaW50U3RhcnQgPCAwKSBpbnRTdGFydCA9IG1heChzaXplICsgaW50U3RhcnQsIDApO1xuICAgIGludExlbmd0aCA9IGxlbmd0aCA9PT0gdW5kZWZpbmVkID8gc2l6ZSA6IHRvSW50ZWdlck9ySW5maW5pdHkobGVuZ3RoKTtcbiAgICBpZiAoaW50TGVuZ3RoIDw9IDAgfHwgaW50TGVuZ3RoID09PSBJbmZpbml0eSkgcmV0dXJuICcnO1xuICAgIGludEVuZCA9IG1pbihpbnRTdGFydCArIGludExlbmd0aCwgc2l6ZSk7XG4gICAgcmV0dXJuIGludFN0YXJ0ID49IGludEVuZCA/ICcnIDogc2xpY2UuY2FsbCh0aGF0LCBpbnRTdGFydCwgaW50RW5kKTtcbiAgfVxufSk7XG4iLCJ2YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLlBST1BFUjtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciBub24gPSAnXFx1MjAwQlxcdTAwODVcXHUxODBFJztcblxuLy8gY2hlY2sgdGhhdCBhIG1ldGhvZCB3b3JrcyB3aXRoIHRoZSBjb3JyZWN0IGxpc3Rcbi8vIG9mIHdoaXRlc3BhY2VzIGFuZCBoYXMgYSBjb3JyZWN0IG5hbWVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIHJldHVybiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhd2hpdGVzcGFjZXNbTUVUSE9EX05BTUVdKClcbiAgICAgIHx8IG5vbltNRVRIT0RfTkFNRV0oKSAhPT0gbm9uXG4gICAgICB8fCAoUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgd2hpdGVzcGFjZXNbTUVUSE9EX05BTUVdLm5hbWUgIT09IE1FVEhPRF9OQU1FKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIGZvcmNlZFN0cmluZ1RyaW1NZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0tZm9yY2VkJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBmb3JjZWRTdHJpbmdUcmltTWV0aG9kKCd0cmltJykgfSwge1xuICB0cmltOiBmdW5jdGlvbiB0cmltKCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkdHJpbUVuZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctdHJpbScpLmVuZDtcbnZhciBmb3JjZWRTdHJpbmdUcmltTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltLWZvcmNlZCcpO1xuXG52YXIgRk9SQ0VEID0gZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCgndHJpbUVuZCcpO1xuXG52YXIgdHJpbUVuZCA9IEZPUkNFRCA/IGZ1bmN0aW9uIHRyaW1FbmQoKSB7XG4gIHJldHVybiAkdHJpbUVuZCh0aGlzKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zdHJpbmctcHJvdG90eXBlLXRyaW1zdGFydC10cmltZW5kIC0tIHNhZmVcbn0gOiAnJy50cmltRW5kO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1FbmQsIHRyaW1SaWdodCB9YCBtZXRob2RzXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbWVuZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI1N0cmluZy5wcm90b3R5cGUudHJpbXJpZ2h0XG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIG5hbWU6ICd0cmltRW5kJywgZm9yY2VkOiBGT1JDRUQgfSwge1xuICB0cmltRW5kOiB0cmltRW5kLFxuICB0cmltUmlnaHQ6IHRyaW1FbmRcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHRyaW1TdGFydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctdHJpbScpLnN0YXJ0O1xudmFyIGZvcmNlZFN0cmluZ1RyaW1NZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0tZm9yY2VkJyk7XG5cbnZhciBGT1JDRUQgPSBmb3JjZWRTdHJpbmdUcmltTWV0aG9kKCd0cmltU3RhcnQnKTtcblxudmFyIHRyaW1TdGFydCA9IEZPUkNFRCA/IGZ1bmN0aW9uIHRyaW1TdGFydCgpIHtcbiAgcmV0dXJuICR0cmltU3RhcnQodGhpcyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc3RyaW5nLXByb3RvdHlwZS10cmltc3RhcnQtdHJpbWVuZCAtLSBzYWZlXG59IDogJycudHJpbVN0YXJ0O1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1TdGFydCwgdHJpbUxlZnQgfWAgbWV0aG9kc1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1zdGFydFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI1N0cmluZy5wcm90b3R5cGUudHJpbWxlZnRcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgbmFtZTogJ3RyaW1TdGFydCcsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgdHJpbVN0YXJ0OiB0cmltU3RhcnQsXG4gIHRyaW1MZWZ0OiB0cmltU3RhcnRcbn0pO1xuIiwidmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbnZhciBxdW90ID0gL1wiL2c7XG5cbi8vIGBDcmVhdGVIVE1MYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlaHRtbFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHN0cmluZykpO1xuICB2YXIgcDEgPSAnPCcgKyB0YWc7XG4gIGlmIChhdHRyaWJ1dGUgIT09ICcnKSBwMSArPSAnICcgKyBhdHRyaWJ1dGUgKyAnPVwiJyArIHRvU3RyaW5nKHZhbHVlKS5yZXBsYWNlKHF1b3QsICcmcXVvdDsnKSArICdcIic7XG4gIHJldHVybiBwMSArICc+JyArIFMgKyAnPC8nICsgdGFnICsgJz4nO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBjaGVjayB0aGUgZXhpc3RlbmNlIG9mIGEgbWV0aG9kLCBsb3dlcmNhc2Vcbi8vIG9mIGEgdGFnIGFuZCBlc2NhcGluZyBxdW90ZXMgaW4gYXJndW1lbnRzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICByZXR1cm4gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ZXN0ID0gJydbTUVUSE9EX05BTUVdKCdcIicpO1xuICAgIHJldHVybiB0ZXN0ICE9PSB0ZXN0LnRvTG93ZXJDYXNlKCkgfHwgdGVzdC5zcGxpdCgnXCInKS5sZW5ndGggPiAzO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjcmVhdGVIVE1MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1odG1sJyk7XG52YXIgZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctaHRtbC1mb3JjZWQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuYW5jaG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5hbmNob3JcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBmb3JjZWRTdHJpbmdIVE1MTWV0aG9kKCdhbmNob3InKSB9LCB7XG4gIGFuY2hvcjogZnVuY3Rpb24gYW5jaG9yKG5hbWUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYScsICduYW1lJywgbmFtZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY3JlYXRlSFRNTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaHRtbCcpO1xudmFyIGZvcmNlZFN0cmluZ0hUTUxNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLWh0bWwtZm9yY2VkJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLmJpZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuYmlnXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCgnYmlnJykgfSwge1xuICBiaWc6IGZ1bmN0aW9uIGJpZygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYmlnJywgJycsICcnKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjcmVhdGVIVE1MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1odG1sJyk7XG52YXIgZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctaHRtbC1mb3JjZWQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuYmxpbmtgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmJsaW5rXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCgnYmxpbmsnKSB9LCB7XG4gIGJsaW5rOiBmdW5jdGlvbiBibGluaygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYmxpbmsnLCAnJywgJycpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNyZWF0ZUhUTUwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWh0bWwnKTtcbnZhciBmb3JjZWRTdHJpbmdIVE1MTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1odG1sLWZvcmNlZCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5ib2xkYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5ib2xkXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCgnYm9sZCcpIH0sIHtcbiAgYm9sZDogZnVuY3Rpb24gYm9sZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYicsICcnLCAnJyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY3JlYXRlSFRNTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaHRtbCcpO1xudmFyIGZvcmNlZFN0cmluZ0hUTUxNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLWh0bWwtZm9yY2VkJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLmZpeGVkYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5maXhlZFxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGZvcmNlZFN0cmluZ0hUTUxNZXRob2QoJ2ZpeGVkJykgfSwge1xuICBmaXhlZDogZnVuY3Rpb24gZml4ZWQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3R0JywgJycsICcnKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjcmVhdGVIVE1MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1odG1sJyk7XG52YXIgZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctaHRtbC1mb3JjZWQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuZm9udGNvbG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5mb250Y29sb3JcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBmb3JjZWRTdHJpbmdIVE1MTWV0aG9kKCdmb250Y29sb3InKSB9LCB7XG4gIGZvbnRjb2xvcjogZnVuY3Rpb24gZm9udGNvbG9yKGNvbG9yKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2ZvbnQnLCAnY29sb3InLCBjb2xvcik7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY3JlYXRlSFRNTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaHRtbCcpO1xudmFyIGZvcmNlZFN0cmluZ0hUTUxNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLWh0bWwtZm9yY2VkJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLmZvbnRzaXplYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5mb250c2l6ZVxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGZvcmNlZFN0cmluZ0hUTUxNZXRob2QoJ2ZvbnRzaXplJykgfSwge1xuICBmb250c2l6ZTogZnVuY3Rpb24gZm9udHNpemUoc2l6ZSkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdmb250JywgJ3NpemUnLCBzaXplKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjcmVhdGVIVE1MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1odG1sJyk7XG52YXIgZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctaHRtbC1mb3JjZWQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuaXRhbGljc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuaXRhbGljc1xuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGZvcmNlZFN0cmluZ0hUTUxNZXRob2QoJ2l0YWxpY3MnKSB9LCB7XG4gIGl0YWxpY3M6IGZ1bmN0aW9uIGl0YWxpY3MoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2knLCAnJywgJycpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNyZWF0ZUhUTUwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWh0bWwnKTtcbnZhciBmb3JjZWRTdHJpbmdIVE1MTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1odG1sLWZvcmNlZCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5saW5rYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5saW5rXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCgnbGluaycpIH0sIHtcbiAgbGluazogZnVuY3Rpb24gbGluayh1cmwpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYScsICdocmVmJywgdXJsKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjcmVhdGVIVE1MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1odG1sJyk7XG52YXIgZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctaHRtbC1mb3JjZWQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuc21hbGxgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNtYWxsXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCgnc21hbGwnKSB9LCB7XG4gIHNtYWxsOiBmdW5jdGlvbiBzbWFsbCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc21hbGwnLCAnJywgJycpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNyZWF0ZUhUTUwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWh0bWwnKTtcbnZhciBmb3JjZWRTdHJpbmdIVE1MTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1odG1sLWZvcmNlZCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5zdHJpa2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnN0cmlrZVxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGZvcmNlZFN0cmluZ0hUTUxNZXRob2QoJ3N0cmlrZScpIH0sIHtcbiAgc3RyaWtlOiBmdW5jdGlvbiBzdHJpa2UoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N0cmlrZScsICcnLCAnJyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY3JlYXRlSFRNTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaHRtbCcpO1xudmFyIGZvcmNlZFN0cmluZ0hUTUxNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLWh0bWwtZm9yY2VkJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnN1YmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3ViXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCgnc3ViJykgfSwge1xuICBzdWI6IGZ1bmN0aW9uIHN1YigpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3ViJywgJycsICcnKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjcmVhdGVIVE1MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1odG1sJyk7XG52YXIgZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctaHRtbC1mb3JjZWQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuc3VwYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zdXBcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBmb3JjZWRTdHJpbmdIVE1MTWV0aG9kKCdzdXAnKSB9LCB7XG4gIHN1cDogZnVuY3Rpb24gc3VwKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdXAnLCAnJywgJycpO1xuICB9XG59KTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcbnZhciBOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKS5OQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTO1xuXG52YXIgQXJyYXlCdWZmZXIgPSBnbG9iYWwuQXJyYXlCdWZmZXI7XG52YXIgSW50OEFycmF5ID0gZ2xvYmFsLkludDhBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSAhTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBJbnQ4QXJyYXkoMSk7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBuZXcgSW50OEFycmF5KC0xKTtcbn0pIHx8ICFjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24oZnVuY3Rpb24gKGl0ZXJhYmxlKSB7XG4gIG5ldyBJbnQ4QXJyYXkoKTtcbiAgbmV3IEludDhBcnJheShudWxsKTtcbiAgbmV3IEludDhBcnJheSgxLjUpO1xuICBuZXcgSW50OEFycmF5KGl0ZXJhYmxlKTtcbn0sIHRydWUpIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gU2FmYXJpICgxMSspIGJ1ZyAtIGEgcmVhc29uIHdoeSBldmVuIFNhZmFyaSAxMyBzaG91bGQgbG9hZCBhIHR5cGVkIGFycmF5IHBvbHlmaWxsXG4gIHJldHVybiBuZXcgSW50OEFycmF5KG5ldyBBcnJheUJ1ZmZlcigyKSwgMSwgdW5kZWZpbmVkKS5sZW5ndGggIT09IDE7XG59KTtcbiIsInZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHJlc3VsdCA9IHRvSW50ZWdlck9ySW5maW5pdHkoaXQpO1xuICBpZiAocmVzdWx0IDwgMCkgdGhyb3cgUmFuZ2VFcnJvcihcIlRoZSBhcmd1bWVudCBjYW4ndCBiZSBsZXNzIHRoYW4gMFwiKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgdG9Qb3NpdGl2ZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcG9zaXRpdmUtaW50ZWdlcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQllURVMpIHtcbiAgdmFyIG9mZnNldCA9IHRvUG9zaXRpdmVJbnRlZ2VyKGl0KTtcbiAgaWYgKG9mZnNldCAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBvZmZzZXQnKTtcbiAgcmV0dXJuIG9mZnNldDtcbn07XG4iLCJ2YXIgYUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3InKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBhVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKS5hVHlwZWRBcnJheUNvbnN0cnVjdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwZm4sIHRoaXNBcmcgKi8pIHtcbiAgdmFyIEMgPSBhQ29uc3RydWN0b3IodGhpcyk7XG4gIHZhciBPID0gdG9PYmplY3Qoc291cmNlKTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBtYXBmbiA9IGFyZ3VtZW50c0xlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2QoTyk7XG4gIHZhciBpLCBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3IsIG5leHQ7XG4gIGlmIChpdGVyYXRvck1ldGhvZCAmJiAhaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJhdG9yTWV0aG9kKSkge1xuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoTywgaXRlcmF0b3JNZXRob2QpO1xuICAgIG5leHQgPSBpdGVyYXRvci5uZXh0O1xuICAgIE8gPSBbXTtcbiAgICB3aGlsZSAoIShzdGVwID0gbmV4dC5jYWxsKGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgICAgTy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgIH1cbiAgfVxuICBpZiAobWFwcGluZyAmJiBhcmd1bWVudHNMZW5ndGggPiAyKSB7XG4gICAgbWFwZm4gPSBiaW5kKG1hcGZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICB9XG4gIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICByZXN1bHQgPSBuZXcgKGFUeXBlZEFycmF5Q29uc3RydWN0b3IoQykpKGxlbmd0aCk7XG4gIGZvciAoaSA9IDA7IGxlbmd0aCA+IGk7IGkrKykge1xuICAgIHJlc3VsdFtpXSA9IG1hcHBpbmcgPyBtYXBmbihPW2ldLCBpKSA6IE9baV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBUWVBFRF9BUlJBWVNfQ09OU1RSVUNUT1JTX1JFUVVJUkVTX1dSQVBQRVJTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3R5cGVkLWFycmF5LWNvbnN0cnVjdG9ycy1yZXF1aXJlLXdyYXBwZXJzJyk7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgQXJyYXlCdWZmZXJNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBpc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWludGVncmFsLW51bWJlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXgnKTtcbnZhciB0b09mZnNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vZmZzZXQnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKS5mO1xudmFyIHR5cGVkQXJyYXlGcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3R5cGVkLWFycmF5LWZyb20nKTtcbnZhciBmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG5cbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIG5hdGl2ZURlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbnZhciByb3VuZCA9IE1hdGgucm91bmQ7XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xudmFyIEFycmF5QnVmZmVyID0gQXJyYXlCdWZmZXJNb2R1bGUuQXJyYXlCdWZmZXI7XG52YXIgRGF0YVZpZXcgPSBBcnJheUJ1ZmZlck1vZHVsZS5EYXRhVmlldztcbnZhciBOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5OQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTO1xudmFyIFRZUEVEX0FSUkFZX0NPTlNUUlVDVE9SID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5UWVBFRF9BUlJBWV9DT05TVFJVQ1RPUjtcbnZhciBUWVBFRF9BUlJBWV9UQUcgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLlRZUEVEX0FSUkFZX1RBRztcbnZhciBUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5UeXBlZEFycmF5O1xudmFyIFR5cGVkQXJyYXlQcm90b3R5cGUgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLlR5cGVkQXJyYXlQcm90b3R5cGU7XG52YXIgYVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjtcbnZhciBpc1R5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmlzVHlwZWRBcnJheTtcbnZhciBCWVRFU19QRVJfRUxFTUVOVCA9ICdCWVRFU19QRVJfRUxFTUVOVCc7XG52YXIgV1JPTkdfTEVOR1RIID0gJ1dyb25nIGxlbmd0aCc7XG5cbnZhciBmcm9tTGlzdCA9IGZ1bmN0aW9uIChDLCBsaXN0KSB7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IG5ldyAoYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihDKSkobGVuZ3RoKTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gbGlzdFtpbmRleCsrXTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciBhZGRHZXR0ZXIgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShpdCwga2V5LCB7IGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpW2tleV07XG4gIH0gfSk7XG59O1xuXG52YXIgaXNBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIga2xhc3M7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoaXQpKSA9PSAnQXJyYXlCdWZmZXInIHx8IGtsYXNzID09ICdTaGFyZWRBcnJheUJ1ZmZlcic7XG59O1xuXG52YXIgaXNUeXBlZEFycmF5SW5kZXggPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgcmV0dXJuIGlzVHlwZWRBcnJheSh0YXJnZXQpXG4gICAgJiYgIWlzU3ltYm9sKGtleSlcbiAgICAmJiBrZXkgaW4gdGFyZ2V0XG4gICAgJiYgaXNJbnRlZ3JhbE51bWJlcigra2V5KVxuICAgICYmIGtleSA+PSAwO1xufTtcblxudmFyIHdyYXBwZWRHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIHtcbiAga2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICByZXR1cm4gaXNUeXBlZEFycmF5SW5kZXgodGFyZ2V0LCBrZXkpXG4gICAgPyBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMiwgdGFyZ2V0W2tleV0pXG4gICAgOiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xufTtcblxudmFyIHdyYXBwZWREZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGlzVHlwZWRBcnJheUluZGV4KHRhcmdldCwga2V5KVxuICAgICYmIGlzT2JqZWN0KGRlc2NyaXB0b3IpXG4gICAgJiYgaGFzT3duKGRlc2NyaXB0b3IsICd2YWx1ZScpXG4gICAgJiYgIWhhc093bihkZXNjcmlwdG9yLCAnZ2V0JylcbiAgICAmJiAhaGFzT3duKGRlc2NyaXB0b3IsICdzZXQnKVxuICAgIC8vIFRPRE86IGFkZCB2YWxpZGF0aW9uIGRlc2NyaXB0b3Igdy9vIGNhbGxpbmcgYWNjZXNzb3JzXG4gICAgJiYgIWRlc2NyaXB0b3IuY29uZmlndXJhYmxlXG4gICAgJiYgKCFoYXNPd24oZGVzY3JpcHRvciwgJ3dyaXRhYmxlJykgfHwgZGVzY3JpcHRvci53cml0YWJsZSlcbiAgICAmJiAoIWhhc093bihkZXNjcmlwdG9yLCAnZW51bWVyYWJsZScpIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSlcbiAgKSB7XG4gICAgdGFyZ2V0W2tleV0gPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH0gcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKTtcbn07XG5cbmlmIChERVNDUklQVE9SUykge1xuICBpZiAoIU5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MpIHtcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZiA9IHdyYXBwZWRHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gICAgZGVmaW5lUHJvcGVydHlNb2R1bGUuZiA9IHdyYXBwZWREZWZpbmVQcm9wZXJ0eTtcbiAgICBhZGRHZXR0ZXIoVHlwZWRBcnJheVByb3RvdHlwZSwgJ2J1ZmZlcicpO1xuICAgIGFkZEdldHRlcihUeXBlZEFycmF5UHJvdG90eXBlLCAnYnl0ZU9mZnNldCcpO1xuICAgIGFkZEdldHRlcihUeXBlZEFycmF5UHJvdG90eXBlLCAnYnl0ZUxlbmd0aCcpO1xuICAgIGFkZEdldHRlcihUeXBlZEFycmF5UHJvdG90eXBlLCAnbGVuZ3RoJyk7XG4gIH1cblxuICAkKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyB9LCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiB3cmFwcGVkR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAgIGRlZmluZVByb3BlcnR5OiB3cmFwcGVkRGVmaW5lUHJvcGVydHlcbiAgfSk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVFlQRSwgd3JhcHBlciwgQ0xBTVBFRCkge1xuICAgIHZhciBCWVRFUyA9IFRZUEUubWF0Y2goL1xcZCskLylbMF0gLyA4O1xuICAgIHZhciBDT05TVFJVQ1RPUl9OQU1FID0gVFlQRSArIChDTEFNUEVEID8gJ0NsYW1wZWQnIDogJycpICsgJ0FycmF5JztcbiAgICB2YXIgR0VUVEVSID0gJ2dldCcgKyBUWVBFO1xuICAgIHZhciBTRVRURVIgPSAnc2V0JyArIFRZUEU7XG4gICAgdmFyIE5hdGl2ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IGdsb2JhbFtDT05TVFJVQ1RPUl9OQU1FXTtcbiAgICB2YXIgVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gTmF0aXZlVHlwZWRBcnJheUNvbnN0cnVjdG9yO1xuICAgIHZhciBUeXBlZEFycmF5Q29uc3RydWN0b3JQcm90b3R5cGUgPSBUeXBlZEFycmF5Q29uc3RydWN0b3IgJiYgVHlwZWRBcnJheUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgICB2YXIgZXhwb3J0ZWQgPSB7fTtcblxuICAgIHZhciBnZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgpIHtcbiAgICAgIHZhciBkYXRhID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHJldHVybiBkYXRhLnZpZXdbR0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5ieXRlT2Zmc2V0LCB0cnVlKTtcbiAgICB9O1xuXG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIGlmIChDTEFNUEVEKSB2YWx1ZSA9ICh2YWx1ZSA9IHJvdW5kKHZhbHVlKSkgPCAwID8gMCA6IHZhbHVlID4gMHhGRiA/IDB4RkYgOiB2YWx1ZSAmIDB4RkY7XG4gICAgICBkYXRhLnZpZXdbU0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5ieXRlT2Zmc2V0LCB2YWx1ZSwgdHJ1ZSk7XG4gICAgfTtcblxuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBuYXRpdmVEZWZpbmVQcm9wZXJ0eSh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBpZiAoIU5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MpIHtcbiAgICAgIFR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsIG9mZnNldCwgJGxlbmd0aCkge1xuICAgICAgICBhbkluc3RhbmNlKHRoYXQsIFR5cGVkQXJyYXlDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSk7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHZhciBieXRlT2Zmc2V0ID0gMDtcbiAgICAgICAgdmFyIGJ1ZmZlciwgYnl0ZUxlbmd0aCwgbGVuZ3RoO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgICAgbGVuZ3RoID0gdG9JbmRleChkYXRhKTtcbiAgICAgICAgICBieXRlTGVuZ3RoID0gbGVuZ3RoICogQllURVM7XG4gICAgICAgICAgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXlCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIGJ5dGVPZmZzZXQgPSB0b09mZnNldChvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIGJ5dGVPZmZzZXQ7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCA8IDApIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IHRvTGVuZ3RoKCRsZW5ndGgpICogQllURVM7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCArIGJ5dGVPZmZzZXQgPiAkbGVuKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxlbmd0aCA9IGJ5dGVMZW5ndGggLyBCWVRFUztcbiAgICAgICAgfSBlbHNlIGlmIChpc1R5cGVkQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICByZXR1cm4gZnJvbUxpc3QoVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdHlwZWRBcnJheUZyb20uY2FsbChUeXBlZEFycmF5Q29uc3RydWN0b3IsIGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHNldEludGVybmFsU3RhdGUodGhhdCwge1xuICAgICAgICAgIGJ1ZmZlcjogYnVmZmVyLFxuICAgICAgICAgIGJ5dGVPZmZzZXQ6IGJ5dGVPZmZzZXQsXG4gICAgICAgICAgYnl0ZUxlbmd0aDogYnl0ZUxlbmd0aCxcbiAgICAgICAgICBsZW5ndGg6IGxlbmd0aCxcbiAgICAgICAgICB2aWV3OiBuZXcgRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSBhZGRFbGVtZW50KHRoYXQsIGluZGV4KyspO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBUeXBlZEFycmF5KTtcbiAgICAgIFR5cGVkQXJyYXlDb25zdHJ1Y3RvclByb3RvdHlwZSA9IFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoVHlwZWRBcnJheVByb3RvdHlwZSk7XG4gICAgfSBlbHNlIGlmIChUWVBFRF9BUlJBWVNfQ09OU1RSVUNUT1JTX1JFUVVJUkVTX1dSQVBQRVJTKSB7XG4gICAgICBUeXBlZEFycmF5Q29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uIChkdW1teSwgZGF0YSwgdHlwZWRBcnJheU9mZnNldCwgJGxlbmd0aCkge1xuICAgICAgICBhbkluc3RhbmNlKGR1bW15LCBUeXBlZEFycmF5Q29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUpO1xuICAgICAgICByZXR1cm4gaW5oZXJpdElmUmVxdWlyZWQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHJldHVybiBuZXcgTmF0aXZlVHlwZWRBcnJheUNvbnN0cnVjdG9yKHRvSW5kZXgoZGF0YSkpO1xuICAgICAgICAgIGlmIChpc0FycmF5QnVmZmVyKGRhdGEpKSByZXR1cm4gJGxlbmd0aCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IG5ldyBOYXRpdmVUeXBlZEFycmF5Q29uc3RydWN0b3IoZGF0YSwgdG9PZmZzZXQodHlwZWRBcnJheU9mZnNldCwgQllURVMpLCAkbGVuZ3RoKVxuICAgICAgICAgICAgOiB0eXBlZEFycmF5T2Zmc2V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBuZXcgTmF0aXZlVHlwZWRBcnJheUNvbnN0cnVjdG9yKGRhdGEsIHRvT2Zmc2V0KHR5cGVkQXJyYXlPZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgTmF0aXZlVHlwZWRBcnJheUNvbnN0cnVjdG9yKGRhdGEpO1xuICAgICAgICAgIGlmIChpc1R5cGVkQXJyYXkoZGF0YSkpIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5Q29uc3RydWN0b3IsIGRhdGEpO1xuICAgICAgICAgIHJldHVybiB0eXBlZEFycmF5RnJvbS5jYWxsKFR5cGVkQXJyYXlDb25zdHJ1Y3RvciwgZGF0YSk7XG4gICAgICAgIH0oKSwgZHVtbXksIFR5cGVkQXJyYXlDb25zdHJ1Y3Rvcik7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSBzZXRQcm90b3R5cGVPZihUeXBlZEFycmF5Q29uc3RydWN0b3IsIFR5cGVkQXJyYXkpO1xuICAgICAgZm9yRWFjaChnZXRPd25Qcm9wZXJ0eU5hbWVzKE5hdGl2ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvciksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBrZXksIE5hdGl2ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcltrZXldKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5Q29uc3RydWN0b3IucHJvdG90eXBlID0gVHlwZWRBcnJheUNvbnN0cnVjdG9yUHJvdG90eXBlO1xuICAgIH1cblxuICAgIGlmIChUeXBlZEFycmF5Q29uc3RydWN0b3JQcm90b3R5cGUuY29uc3RydWN0b3IgIT09IFR5cGVkQXJyYXlDb25zdHJ1Y3Rvcikge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFR5cGVkQXJyYXlDb25zdHJ1Y3RvclByb3RvdHlwZSwgJ2NvbnN0cnVjdG9yJywgVHlwZWRBcnJheUNvbnN0cnVjdG9yKTtcbiAgICB9XG5cbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoVHlwZWRBcnJheUNvbnN0cnVjdG9yUHJvdG90eXBlLCBUWVBFRF9BUlJBWV9DT05TVFJVQ1RPUiwgVHlwZWRBcnJheUNvbnN0cnVjdG9yKTtcblxuICAgIGlmIChUWVBFRF9BUlJBWV9UQUcpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShUeXBlZEFycmF5Q29uc3RydWN0b3JQcm90b3R5cGUsIFRZUEVEX0FSUkFZX1RBRywgQ09OU1RSVUNUT1JfTkFNRSk7XG4gICAgfVxuXG4gICAgZXhwb3J0ZWRbQ09OU1RSVUNUT1JfTkFNRV0gPSBUeXBlZEFycmF5Q29uc3RydWN0b3I7XG5cbiAgICAkKHtcbiAgICAgIGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiBUeXBlZEFycmF5Q29uc3RydWN0b3IgIT0gTmF0aXZlVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBzaGFtOiAhTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXU1xuICAgIH0sIGV4cG9ydGVkKTtcblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcikpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShUeXBlZEFycmF5Q29uc3RydWN0b3IsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG4gICAgfVxuXG4gICAgaWYgKCEoQllURVNfUEVSX0VMRU1FTlQgaW4gVHlwZWRBcnJheUNvbnN0cnVjdG9yUHJvdG90eXBlKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFR5cGVkQXJyYXlDb25zdHJ1Y3RvclByb3RvdHlwZSwgQllURVNfUEVSX0VMRU1FTlQsIEJZVEVTKTtcbiAgICB9XG5cbiAgICBzZXRTcGVjaWVzKENPTlNUUlVDVE9SX05BTUUpO1xuICB9O1xufSBlbHNlIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIiwidmFyIGNyZWF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgRmxvYXQzMkFycmF5YCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10eXBlZGFycmF5LW9iamVjdHNcbmNyZWF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcignRmxvYXQzMicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwidmFyIGNyZWF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgRmxvYXQ2NEFycmF5YCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10eXBlZGFycmF5LW9iamVjdHNcbmNyZWF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcignRmxvYXQ2NCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDY0QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwidmFyIGNyZWF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgSW50OEFycmF5YCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10eXBlZGFycmF5LW9iamVjdHNcbmNyZWF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcignSW50OCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQ4QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwidmFyIGNyZWF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgSW50MTZBcnJheWAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdHlwZWRhcnJheS1vYmplY3RzXG5jcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IoJ0ludDE2JywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDE2QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwidmFyIGNyZWF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgSW50MzJBcnJheWAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdHlwZWRhcnJheS1vYmplY3RzXG5jcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IoJ0ludDMyJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwidmFyIGNyZWF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgVWludDhBcnJheWAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdHlwZWRhcnJheS1vYmplY3RzXG5jcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IoJ1VpbnQ4JywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQ4QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwidmFyIGNyZWF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgVWludDhDbGFtcGVkQXJyYXlgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXR5cGVkYXJyYXktb2JqZWN0c1xuY3JlYXRlVHlwZWRBcnJheUNvbnN0cnVjdG9yKCdVaW50OCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OENsYW1wZWRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSwgdHJ1ZSk7XG4iLCJ2YXIgY3JlYXRlVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3R5cGVkLWFycmF5LWNvbnN0cnVjdG9yJyk7XG5cbi8vIGBVaW50MTZBcnJheWAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdHlwZWRhcnJheS1vYmplY3RzXG5jcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IoJ1VpbnQxNicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJ2YXIgY3JlYXRlVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3R5cGVkLWFycmF5LWNvbnN0cnVjdG9yJyk7XG5cbi8vIGBVaW50MzJBcnJheWAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdHlwZWRhcnJheS1vYmplY3RzXG5jcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IoJ1VpbnQzMicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1yZWxhdGl2ZS1pbmRleGluZy1tZXRob2RcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ2F0JywgZnVuY3Rpb24gYXQoaW5kZXgpIHtcbiAgdmFyIE8gPSBhVHlwZWRBcnJheSh0aGlzKTtcbiAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICB2YXIgcmVsYXRpdmVJbmRleCA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICB2YXIgayA9IHJlbGF0aXZlSW5kZXggPj0gMCA/IHJlbGF0aXZlSW5kZXggOiBsZW4gKyByZWxhdGl2ZUluZGV4O1xuICByZXR1cm4gKGsgPCAwIHx8IGsgPj0gbGVuKSA/IHVuZGVmaW5lZCA6IE9ba107XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciAkY29weVdpdGhpbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1jb3B5LXdpdGhpbicpO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmNvcHlXaXRoaW5gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLmNvcHl3aXRoaW5cbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ2NvcHlXaXRoaW4nLCBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCwgc3RhcnQgLyogLCBlbmQgKi8pIHtcbiAgcmV0dXJuICRjb3B5V2l0aGluLmNhbGwoYVR5cGVkQXJyYXkodGhpcyksIHRhcmdldCwgc3RhcnQsIGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyICRldmVyeSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5ldmVyeTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5ldmVyeWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUuZXZlcnlcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ2V2ZXJ5JywgZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgcmV0dXJuICRldmVyeShhVHlwZWRBcnJheSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgJGZpbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZmlsbCcpO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmZpbGxgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLmZpbGxcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdmaWxsJywgZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0LCBlbmQgKi8pIHtcbiAgcmV0dXJuICRmaWxsLmFwcGx5KGFUeXBlZEFycmF5KHRoaXMpLCBhcmd1bWVudHMpO1xufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgbGlzdCkge1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoID0gbGlzdC5sZW5ndGg7XG4gIHZhciByZXN1bHQgPSBuZXcgQ29uc3RydWN0b3IobGVuZ3RoKTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gbGlzdFtpbmRleCsrXTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcblxudmFyIFRZUEVEX0FSUkFZX0NPTlNUUlVDVE9SID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5UWVBFRF9BUlJBWV9DT05TVFJVQ1RPUjtcbnZhciBhVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheUNvbnN0cnVjdG9yO1xuXG4vLyBhIHBhcnQgb2YgYFR5cGVkQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyN0eXBlZGFycmF5LXNwZWNpZXMtY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5KSB7XG4gIHJldHVybiBhVHlwZWRBcnJheUNvbnN0cnVjdG9yKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbEFycmF5LCBvcmlnaW5hbEFycmF5W1RZUEVEX0FSUkFZX0NPTlNUUlVDVE9SXSkpO1xufTtcbiIsInZhciBhcnJheUZyb21Db25zdHJ1Y3RvckFuZExpc3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbS1jb25zdHJ1Y3Rvci1hbmQtbGlzdCcpO1xudmFyIHR5cGVkQXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHlwZWQtYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgbGlzdCkge1xuICByZXR1cm4gYXJyYXlGcm9tQ29uc3RydWN0b3JBbmRMaXN0KHR5cGVkQXJyYXlTcGVjaWVzQ29uc3RydWN0b3IoaW5zdGFuY2UpLCBsaXN0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXI7XG52YXIgZnJvbVNwZWNpZXNBbmRMaXN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3R5cGVkLWFycmF5LWZyb20tc3BlY2llcy1hbmQtbGlzdCcpO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUuZmlsdGVyXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdmaWx0ZXInLCBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgdmFyIGxpc3QgPSAkZmlsdGVyKGFUeXBlZEFycmF5KHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIHJldHVybiBmcm9tU3BlY2llc0FuZExpc3QodGhpcywgbGlzdCk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maW5kO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLmZpbmRcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ2ZpbmQnLCBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgcmV0dXJuICRmaW5kKGFUeXBlZEFycmF5KHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyICRmaW5kSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmluZEluZGV4O1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmZpbmRJbmRleGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUuZmluZGluZGV4XG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdmaW5kSW5kZXgnLCBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJGZpbmRJbmRleChhVHlwZWRBcnJheSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLmZvcmVhY2hcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ2ZvckVhY2gnLCBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICRmb3JFYWNoKGFUeXBlZEFycmF5KHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBUWVBFRF9BUlJBWVNfQ09OU1RSVUNUT1JTX1JFUVVJUkVTX1dSQVBQRVJTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3R5cGVkLWFycmF5LWNvbnN0cnVjdG9ycy1yZXF1aXJlLXdyYXBwZXJzJyk7XG52YXIgZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJykuZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZDtcbnZhciB0eXBlZEFycmF5RnJvbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1mcm9tJyk7XG5cbi8vIGAlVHlwZWRBcnJheSUuZnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5mcm9tXG5leHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kKCdmcm9tJywgdHlwZWRBcnJheUZyb20sIFRZUEVEX0FSUkFZU19DT05TVFJVQ1RPUlNfUkVRVUlSRVNfV1JBUFBFUlMpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyICRpbmNsdWRlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluY2x1ZGVzO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5pbmNsdWRlc1xuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnaW5jbHVkZXMnLCBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gIHJldHVybiAkaW5jbHVkZXMoYVR5cGVkQXJyYXkodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5pbmRleG9mXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdpbmRleE9mJywgZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gIHJldHVybiAkaW5kZXhPZihhVHlwZWRBcnJheSh0aGlzKSwgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5QUk9QRVI7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgQXJyYXlJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBVaW50OEFycmF5ID0gZ2xvYmFsLlVpbnQ4QXJyYXk7XG52YXIgYXJyYXlWYWx1ZXMgPSBBcnJheUl0ZXJhdG9ycy52YWx1ZXM7XG52YXIgYXJyYXlLZXlzID0gQXJyYXlJdGVyYXRvcnMua2V5cztcbnZhciBhcnJheUVudHJpZXMgPSBBcnJheUl0ZXJhdG9ycy5lbnRyaWVzO1xudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xudmFyIG5hdGl2ZVR5cGVkQXJyYXlJdGVyYXRvciA9IFVpbnQ4QXJyYXkgJiYgVWludDhBcnJheS5wcm90b3R5cGVbSVRFUkFUT1JdO1xuXG52YXIgUFJPUEVSX0FSUkFZX1ZBTFVFU19OQU1FID0gISFuYXRpdmVUeXBlZEFycmF5SXRlcmF0b3IgJiYgbmF0aXZlVHlwZWRBcnJheUl0ZXJhdG9yLm5hbWUgPT09ICd2YWx1ZXMnO1xuXG52YXIgdHlwZWRBcnJheVZhbHVlcyA9IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgcmV0dXJuIGFycmF5VmFsdWVzLmNhbGwoYVR5cGVkQXJyYXkodGhpcykpO1xufTtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUuZW50cmllc1xuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnZW50cmllcycsIGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gIHJldHVybiBhcnJheUVudHJpZXMuY2FsbChhVHlwZWRBcnJheSh0aGlzKSk7XG59KTtcbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLmtleXNcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ2tleXMnLCBmdW5jdGlvbiBrZXlzKCkge1xuICByZXR1cm4gYXJyYXlLZXlzLmNhbGwoYVR5cGVkQXJyYXkodGhpcykpO1xufSk7XG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS52YWx1ZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLnZhbHVlc1xuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgndmFsdWVzJywgdHlwZWRBcnJheVZhbHVlcywgUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgIVBST1BFUl9BUlJBWV9WQUxVRVNfTkFNRSk7XG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUtQEBpdGVyYXRvclxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZChJVEVSQVRPUiwgdHlwZWRBcnJheVZhbHVlcywgUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgIVBST1BFUl9BUlJBWV9WQUxVRVNfTkFNRSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG5cbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcbnZhciAkam9pbiA9IFtdLmpvaW47XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmpvaW5gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLmpvaW5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdqb2luJywgZnVuY3Rpb24gam9pbihzZXBhcmF0b3IpIHtcbiAgcmV0dXJuICRqb2luLmFwcGx5KGFUeXBlZEFycmF5KHRoaXMpLCBhcmd1bWVudHMpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgJGxhc3RJbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWxhc3QtaW5kZXgtb2YnKTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5sYXN0SW5kZXhPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUubGFzdGluZGV4b2Zcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdsYXN0SW5kZXhPZicsIGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHtcbiAgcmV0dXJuICRsYXN0SW5kZXhPZi5hcHBseShhVHlwZWRBcnJheSh0aGlzKSwgYXJndW1lbnRzKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykubWFwO1xudmFyIHR5cGVkQXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHlwZWQtYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUubWFwXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdtYXAnLCBmdW5jdGlvbiBtYXAobWFwZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkbWFwKGFUeXBlZEFycmF5KHRoaXMpLCBtYXBmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gbmV3ICh0eXBlZEFycmF5U3BlY2llc0NvbnN0cnVjdG9yKE8pKShsZW5ndGgpO1xuICB9KTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyIFRZUEVEX0FSUkFZU19DT05TVFJVQ1RPUlNfUkVRVUlSRVNfV1JBUFBFUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHlwZWQtYXJyYXktY29uc3RydWN0b3JzLXJlcXVpcmUtd3JhcHBlcnMnKTtcblxudmFyIGFUeXBlZEFycmF5Q29uc3RydWN0b3IgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5Q29uc3RydWN0b3I7XG52YXIgZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZDtcblxuLy8gYCVUeXBlZEFycmF5JS5vZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5vZlxuZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZCgnb2YnLCBmdW5jdGlvbiBvZigvKiAuLi5pdGVtcyAqLykge1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IG5ldyAoYVR5cGVkQXJyYXlDb25zdHJ1Y3Rvcih0aGlzKSkobGVuZ3RoKTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4KytdO1xuICByZXR1cm4gcmVzdWx0O1xufSwgVFlQRURfQVJSQVlTX0NPTlNUUlVDVE9SU19SRVFVSVJFU19XUkFQUEVSUyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1yZWR1Y2UnKS5sZWZ0O1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUucmVkdWNlXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdyZWR1Y2UnLCBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICByZXR1cm4gJHJlZHVjZShhVHlwZWRBcnJheSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgJHJlZHVjZVJpZ2h0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXJlZHVjZScpLnJpZ2h0O1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLnJlZHVjZVJpY2h0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5yZWR1Y2VyaWdodFxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgncmVkdWNlUmlnaHQnLCBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gIHJldHVybiAkcmVkdWNlUmlnaHQoYVR5cGVkQXJyYXkodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5yZXZlcnNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5yZXZlcnNlXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdyZXZlcnNlJywgZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB2YXIgbGVuZ3RoID0gYVR5cGVkQXJyYXkodGhhdCkubGVuZ3RoO1xuICB2YXIgbWlkZGxlID0gZmxvb3IobGVuZ3RoIC8gMik7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciB2YWx1ZTtcbiAgd2hpbGUgKGluZGV4IDwgbWlkZGxlKSB7XG4gICAgdmFsdWUgPSB0aGF0W2luZGV4XTtcbiAgICB0aGF0W2luZGV4KytdID0gdGhhdFstLWxlbmd0aF07XG4gICAgdGhhdFtsZW5ndGhdID0gdmFsdWU7XG4gIH0gcmV0dXJuIHRoYXQ7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHRvT2Zmc2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9mZnNldCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcblxudmFyIEZPUkNFRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXR5cGVkLWFycmF5cyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBuZXcgSW50OEFycmF5KDEpLnNldCh7fSk7XG59KTtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUuc2V0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5zZXRcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ3NldCcsIGZ1bmN0aW9uIHNldChhcnJheUxpa2UgLyogLCBvZmZzZXQgKi8pIHtcbiAgYVR5cGVkQXJyYXkodGhpcyk7XG4gIHZhciBvZmZzZXQgPSB0b09mZnNldChhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMSk7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgdmFyIHNyYyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShzcmMpO1xuICB2YXIgaW5kZXggPSAwO1xuICBpZiAobGVuICsgb2Zmc2V0ID4gbGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBsZW5ndGgnKTtcbiAgd2hpbGUgKGluZGV4IDwgbGVuKSB0aGlzW29mZnNldCArIGluZGV4XSA9IHNyY1tpbmRleCsrXTtcbn0sIEZPUkNFRCk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgdHlwZWRBcnJheVNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xudmFyICRzbGljZSA9IFtdLnNsaWNlO1xuXG52YXIgRk9SQ0VEID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tdHlwZWQtYXJyYXlzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIG5ldyBJbnQ4QXJyYXkoMSkuc2xpY2UoKTtcbn0pO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5zbGljZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUuc2xpY2VcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ3NsaWNlJywgZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICB2YXIgbGlzdCA9ICRzbGljZS5jYWxsKGFUeXBlZEFycmF5KHRoaXMpLCBzdGFydCwgZW5kKTtcbiAgdmFyIEMgPSB0eXBlZEFycmF5U3BlY2llc0NvbnN0cnVjdG9yKHRoaXMpO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoID0gbGlzdC5sZW5ndGg7XG4gIHZhciByZXN1bHQgPSBuZXcgQyhsZW5ndGgpO1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBsaXN0W2luZGV4KytdO1xuICByZXR1cm4gcmVzdWx0O1xufSwgRk9SQ0VEKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5zb21lO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLnNvbWVcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ3NvbWUnLCBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkc29tZShhVHlwZWRBcnJheSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGludGVybmFsU29ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zb3J0Jyk7XG52YXIgRkYgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWZmLXZlcnNpb24nKTtcbnZhciBJRV9PUl9FREdFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pZS1vci1lZGdlJyk7XG52YXIgVjggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBXRUJLSVQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXdlYmtpdC12ZXJzaW9uJyk7XG5cbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcbnZhciBVaW50MTZBcnJheSA9IGdsb2JhbC5VaW50MTZBcnJheTtcbnZhciBuYXRpdmVTb3J0ID0gVWludDE2QXJyYXkgJiYgVWludDE2QXJyYXkucHJvdG90eXBlLnNvcnQ7XG5cbi8vIFdlYktpdFxudmFyIEFDQ0VQVF9JTkNPUlJFQ1RfQVJHVU1FTlRTID0gISFuYXRpdmVTb3J0ICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBhcnJheSA9IG5ldyBVaW50MTZBcnJheSgyKTtcbiAgYXJyYXkuc29ydChudWxsKTtcbiAgYXJyYXkuc29ydCh7fSk7XG59KTtcblxudmFyIFNUQUJMRV9TT1JUID0gISFuYXRpdmVTb3J0ICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGZlYXR1cmUgZGV0ZWN0aW9uIGNhbiBiZSB0b28gc2xvdywgc28gY2hlY2sgZW5naW5lcyB2ZXJzaW9uc1xuICBpZiAoVjgpIHJldHVybiBWOCA8IDc0O1xuICBpZiAoRkYpIHJldHVybiBGRiA8IDY3O1xuICBpZiAoSUVfT1JfRURHRSkgcmV0dXJuIHRydWU7XG4gIGlmIChXRUJLSVQpIHJldHVybiBXRUJLSVQgPCA2MDI7XG5cbiAgdmFyIGFycmF5ID0gbmV3IFVpbnQxNkFycmF5KDUxNik7XG4gIHZhciBleHBlY3RlZCA9IEFycmF5KDUxNik7XG4gIHZhciBpbmRleCwgbW9kO1xuXG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IDUxNjsgaW5kZXgrKykge1xuICAgIG1vZCA9IGluZGV4ICUgNDtcbiAgICBhcnJheVtpbmRleF0gPSA1MTUgLSBpbmRleDtcbiAgICBleHBlY3RlZFtpbmRleF0gPSBpbmRleCAtIDIgKiBtb2QgKyAzO1xuICB9XG5cbiAgYXJyYXkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiAoYSAvIDQgfCAwKSAtIChiIC8gNCB8IDApO1xuICB9KTtcblxuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCA1MTY7IGluZGV4KyspIHtcbiAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBleHBlY3RlZFtpbmRleF0pIHJldHVybiB0cnVlO1xuICB9XG59KTtcblxudmFyIGdldFNvcnRDb21wYXJlID0gZnVuY3Rpb24gKGNvbXBhcmVmbikge1xuICByZXR1cm4gZnVuY3Rpb24gKHgsIHkpIHtcbiAgICBpZiAoY29tcGFyZWZuICE9PSB1bmRlZmluZWQpIHJldHVybiArY29tcGFyZWZuKHgsIHkpIHx8IDA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoeSAhPT0geSkgcmV0dXJuIC0xO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKHggIT09IHgpIHJldHVybiAxO1xuICAgIGlmICh4ID09PSAwICYmIHkgPT09IDApIHJldHVybiAxIC8geCA+IDAgJiYgMSAvIHkgPCAwID8gMSA6IC0xO1xuICAgIHJldHVybiB4ID4geTtcbiAgfTtcbn07XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLnNvcnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLnNvcnRcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ3NvcnQnLCBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICB2YXIgYXJyYXkgPSB0aGlzO1xuICBpZiAoY29tcGFyZWZuICE9PSB1bmRlZmluZWQpIGFDYWxsYWJsZShjb21wYXJlZm4pO1xuICBpZiAoU1RBQkxFX1NPUlQpIHJldHVybiBuYXRpdmVTb3J0LmNhbGwoYXJyYXksIGNvbXBhcmVmbik7XG5cbiAgYVR5cGVkQXJyYXkoYXJyYXkpO1xuICB2YXIgYXJyYXlMZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShhcnJheSk7XG4gIHZhciBpdGVtcyA9IEFycmF5KGFycmF5TGVuZ3RoKTtcbiAgdmFyIGluZGV4O1xuXG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgaXRlbXNbaW5kZXhdID0gYXJyYXlbaW5kZXhdO1xuICB9XG5cbiAgaXRlbXMgPSBpbnRlcm5hbFNvcnQoYXJyYXksIGdldFNvcnRDb21wYXJlKGNvbXBhcmVmbikpO1xuXG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gaXRlbXNbaW5kZXhdO1xuICB9XG5cbiAgcmV0dXJuIGFycmF5O1xufSwgIVNUQUJMRV9TT1JUIHx8IEFDQ0VQVF9JTkNPUlJFQ1RfQVJHVU1FTlRTKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0eXBlZEFycmF5U3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3R5cGVkLWFycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5zdWJhcnJheWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUuc3ViYXJyYXlcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ3N1YmFycmF5JywgZnVuY3Rpb24gc3ViYXJyYXkoYmVnaW4sIGVuZCkge1xuICB2YXIgTyA9IGFUeXBlZEFycmF5KHRoaXMpO1xuICB2YXIgbGVuZ3RoID0gTy5sZW5ndGg7XG4gIHZhciBiZWdpbkluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW5ndGgpO1xuICB2YXIgQyA9IHR5cGVkQXJyYXlTcGVjaWVzQ29uc3RydWN0b3IoTyk7XG4gIHJldHVybiBuZXcgQyhcbiAgICBPLmJ1ZmZlcixcbiAgICBPLmJ5dGVPZmZzZXQgKyBiZWdpbkluZGV4ICogTy5CWVRFU19QRVJfRUxFTUVOVCxcbiAgICB0b0xlbmd0aCgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW5ndGgpKSAtIGJlZ2luSW5kZXgpXG4gICk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIEludDhBcnJheSA9IGdsb2JhbC5JbnQ4QXJyYXk7XG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG52YXIgJHRvTG9jYWxlU3RyaW5nID0gW10udG9Mb2NhbGVTdHJpbmc7XG52YXIgJHNsaWNlID0gW10uc2xpY2U7XG5cbi8vIGlPUyBTYWZhcmkgNi54IGZhaWxzIGhlcmVcbnZhciBUT19MT0NBTEVfU1RSSU5HX0JVRyA9ICEhSW50OEFycmF5ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgJHRvTG9jYWxlU3RyaW5nLmNhbGwobmV3IEludDhBcnJheSgxKSk7XG59KTtcblxudmFyIEZPUkNFRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBJbnQ4QXJyYXkoWzEsIDJdKS50b0xvY2FsZVN0cmluZygpO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgSW50OEFycmF5LnByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG59KTtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLnRvbG9jYWxlc3RyaW5nXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCd0b0xvY2FsZVN0cmluZycsIGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkge1xuICByZXR1cm4gJHRvTG9jYWxlU3RyaW5nLmFwcGx5KFRPX0xPQ0FMRV9TVFJJTkdfQlVHID8gJHNsaWNlLmNhbGwoYVR5cGVkQXJyYXkodGhpcykpIDogYVR5cGVkQXJyYXkodGhpcyksIGFyZ3VtZW50cyk7XG59LCBGT1JDRUQpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbnZhciBVaW50OEFycmF5ID0gZ2xvYmFsLlVpbnQ4QXJyYXk7XG52YXIgVWludDhBcnJheVByb3RvdHlwZSA9IFVpbnQ4QXJyYXkgJiYgVWludDhBcnJheS5wcm90b3R5cGUgfHwge307XG52YXIgYXJyYXlUb1N0cmluZyA9IFtdLnRvU3RyaW5nO1xudmFyIGFycmF5Sm9pbiA9IFtdLmpvaW47XG5cbmlmIChmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9TdHJpbmcuY2FsbCh7fSk7IH0pKSB7XG4gIGFycmF5VG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYXJyYXlKb2luLmNhbGwodGhpcyk7XG4gIH07XG59XG5cbnZhciBJU19OT1RfQVJSQVlfTUVUSE9EID0gVWludDhBcnJheVByb3RvdHlwZS50b1N0cmluZyAhPSBhcnJheVRvU3RyaW5nO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUudG9zdHJpbmdcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ3RvU3RyaW5nJywgYXJyYXlUb1N0cmluZywgSVNfTk9UX0FSUkFZX01FVEhPRCk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxudmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG52YXIgaGV4MiA9IC9eW1xcZGEtZl17Mn0kL2k7XG52YXIgaGV4NCA9IC9eW1xcZGEtZl17NH0kL2k7XG5cbi8vIGB1bmVzY2FwZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXVuZXNjYXBlLXN0cmluZ1xuJCh7IGdsb2JhbDogdHJ1ZSB9LCB7XG4gIHVuZXNjYXBlOiBmdW5jdGlvbiB1bmVzY2FwZShzdHJpbmcpIHtcbiAgICB2YXIgc3RyID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgdmFyIGxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY2hyLCBzbGljZTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIGNociA9IHN0ci5jaGFyQXQoaW5kZXgrKyk7XG4gICAgICBpZiAoY2hyID09PSAnJScpIHtcbiAgICAgICAgaWYgKHN0ci5jaGFyQXQoaW5kZXgpID09PSAndScpIHtcbiAgICAgICAgICBzbGljZSA9IHN0ci5zbGljZShpbmRleCArIDEsIGluZGV4ICsgNSk7XG4gICAgICAgICAgaWYgKGhleDQudGVzdChzbGljZSkpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBmcm9tQ2hhckNvZGUocGFyc2VJbnQoc2xpY2UsIDE2KSk7XG4gICAgICAgICAgICBpbmRleCArPSA1O1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNsaWNlID0gc3RyLnNsaWNlKGluZGV4LCBpbmRleCArIDIpO1xuICAgICAgICAgIGlmIChoZXgyLnRlc3Qoc2xpY2UpKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gZnJvbUNoYXJDb2RlKHBhcnNlSW50KHNsaWNlLCAxNikpO1xuICAgICAgICAgICAgaW5kZXggKz0gMjtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVzdWx0ICs9IGNocjtcbiAgICB9IHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lLWFsbCcpO1xudmFyIGdldFdlYWtEYXRhID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJykuZ2V0V2Vha0RhdGE7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIEFycmF5SXRlcmF0aW9uTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcbnZhciBmaW5kID0gQXJyYXlJdGVyYXRpb25Nb2R1bGUuZmluZDtcbnZhciBmaW5kSW5kZXggPSBBcnJheUl0ZXJhdGlvbk1vZHVsZS5maW5kSW5kZXg7XG52YXIgaWQgPSAwO1xuXG4vLyBmYWxsYmFjayBmb3IgdW5jYXVnaHQgZnJvemVuIGtleXNcbnZhciB1bmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKHN0b3JlKSB7XG4gIHJldHVybiBzdG9yZS5mcm96ZW4gfHwgKHN0b3JlLmZyb3plbiA9IG5ldyBVbmNhdWdodEZyb3plblN0b3JlKCkpO1xufTtcblxudmFyIFVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZW50cmllcyA9IFtdO1xufTtcblxudmFyIGZpbmRVbmNhdWdodEZyb3plbiA9IGZ1bmN0aW9uIChzdG9yZSwga2V5KSB7XG4gIHJldHVybiBmaW5kKHN0b3JlLmVudHJpZXMsIGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICB9KTtcbn07XG5cblVuY2F1Z2h0RnJvemVuU3RvcmUucHJvdG90eXBlID0ge1xuICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIHJldHVybiBlbnRyeVsxXTtcbiAgfSxcbiAgaGFzOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuICEhZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIGVudHJ5WzFdID0gdmFsdWU7XG4gICAgZWxzZSB0aGlzLmVudHJpZXMucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9LFxuICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBpbmRleCA9IGZpbmRJbmRleCh0aGlzLmVudHJpZXMsIGZ1bmN0aW9uIChpdCkge1xuICAgICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gICAgfSk7XG4gICAgaWYgKH5pbmRleCkgdGhpcy5lbnRyaWVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgcmV0dXJuICEhfmluZGV4O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBDT05TVFJVQ1RPUl9OQU1FKTtcbiAgICAgIHNldEludGVybmFsU3RhdGUodGhhdCwge1xuICAgICAgICB0eXBlOiBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICAgICBpZDogaWQrKyxcbiAgICAgICAgZnJvemVuOiB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIGdldEludGVybmFsU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gICAgdmFyIGRlZmluZSA9IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrRGF0YShhbk9iamVjdChrZXkpLCB0cnVlKTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSB1bmNhdWdodEZyb3plblN0b3JlKHN0YXRlKS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICBlbHNlIGRhdGFbc3RhdGUuaWRdID0gdmFsdWU7XG4gICAgICByZXR1cm4gdGhhdDtcbiAgICB9O1xuXG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIGB7IFdlYWtNYXAsIFdlYWtTZXQgfS5wcm90b3R5cGUuZGVsZXRlKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha21hcC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWtzZXQucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2Vha0RhdGEoa2V5KTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHN0YXRlKVsnZGVsZXRlJ10oa2V5KTtcbiAgICAgICAgcmV0dXJuIGRhdGEgJiYgaGFzT3duKGRhdGEsIHN0YXRlLmlkKSAmJiBkZWxldGUgZGF0YVtzdGF0ZS5pZF07XG4gICAgICB9LFxuICAgICAgLy8gYHsgV2Vha01hcCwgV2Vha1NldCB9LnByb3RvdHlwZS5oYXMoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrbWFwLnByb3RvdHlwZS5oYXNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha3NldC5wcm90b3R5cGUuaGFzXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2Vha0RhdGEoa2V5KTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHN0YXRlKS5oYXMoa2V5KTtcbiAgICAgICAgcmV0dXJuIGRhdGEgJiYgaGFzT3duKGRhdGEsIHN0YXRlLmlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCBJU19NQVAgPyB7XG4gICAgICAvLyBgV2Vha01hcC5wcm90b3R5cGUuZ2V0KGtleSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrbWFwLnByb3RvdHlwZS5nZXRcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoaXNPYmplY3Qoa2V5KSkge1xuICAgICAgICAgIHZhciBkYXRhID0gZ2V0V2Vha0RhdGEoa2V5KTtcbiAgICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUoc3RhdGUpLmdldChrZXkpO1xuICAgICAgICAgIHJldHVybiBkYXRhID8gZGF0YVtzdGF0ZS5pZF0gOiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha21hcC5wcm90b3R5cGUuc2V0XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSA6IHtcbiAgICAgIC8vIGBXZWFrU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha3NldC5wcm90b3R5cGUuYWRkXG4gICAgICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIHZhbHVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBDO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZS1hbGwnKTtcbnZhciBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJyk7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvbldlYWsgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi13ZWFrJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgZW5mb3JjZUl0ZXJuYWxTdGF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpLmVuZm9yY2U7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS13ZWFrLW1hcCcpO1xuXG52YXIgSVNfSUUxMSA9ICFnbG9iYWwuQWN0aXZlWE9iamVjdCAmJiAnQWN0aXZlWE9iamVjdCcgaW4gZ2xvYmFsO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUgLS0gc2FmZVxudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgSW50ZXJuYWxXZWFrTWFwO1xuXG52YXIgd3JhcHBlciA9IGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxuLy8gYFdlYWtNYXBgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWttYXAtY29uc3RydWN0b3JcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gY29sbGVjdGlvbignV2Vha01hcCcsIHdyYXBwZXIsIGNvbGxlY3Rpb25XZWFrKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuLy8gV2UgY2FuJ3QgdXNlIGZlYXR1cmUgZGV0ZWN0aW9uIGJlY2F1c2UgaXQgY3Jhc2ggc29tZSBvbGQgSUUgYnVpbGRzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNDg1XG5pZiAoTkFUSVZFX1dFQUtfTUFQICYmIElTX0lFMTEpIHtcbiAgSW50ZXJuYWxXZWFrTWFwID0gY29sbGVjdGlvbldlYWsuZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgJ1dlYWtNYXAnLCB0cnVlKTtcbiAgSW50ZXJuYWxNZXRhZGF0YU1vZHVsZS5lbmFibGUoKTtcbiAgdmFyIFdlYWtNYXBQcm90b3R5cGUgPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gIHZhciBuYXRpdmVEZWxldGUgPSBXZWFrTWFwUHJvdG90eXBlWydkZWxldGUnXTtcbiAgdmFyIG5hdGl2ZUhhcyA9IFdlYWtNYXBQcm90b3R5cGUuaGFzO1xuICB2YXIgbmF0aXZlR2V0ID0gV2Vha01hcFByb3RvdHlwZS5nZXQ7XG4gIHZhciBuYXRpdmVTZXQgPSBXZWFrTWFwUHJvdG90eXBlLnNldDtcbiAgcmVkZWZpbmVBbGwoV2Vha01hcFByb3RvdHlwZSwge1xuICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBpZiAoaXNPYmplY3Qoa2V5KSAmJiAhaXNFeHRlbnNpYmxlKGtleSkpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZW5mb3JjZUl0ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKCFzdGF0ZS5mcm96ZW4pIHN0YXRlLmZyb3plbiA9IG5ldyBJbnRlcm5hbFdlYWtNYXAoKTtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZURlbGV0ZS5jYWxsKHRoaXMsIGtleSkgfHwgc3RhdGUuZnJvemVuWydkZWxldGUnXShrZXkpO1xuICAgICAgfSByZXR1cm4gbmF0aXZlRGVsZXRlLmNhbGwodGhpcywga2V5KTtcbiAgICB9LFxuICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgaWYgKGlzT2JqZWN0KGtleSkgJiYgIWlzRXh0ZW5zaWJsZShrZXkpKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGVuZm9yY2VJdGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIGlmICghc3RhdGUuZnJvemVuKSBzdGF0ZS5mcm96ZW4gPSBuZXcgSW50ZXJuYWxXZWFrTWFwKCk7XG4gICAgICAgIHJldHVybiBuYXRpdmVIYXMuY2FsbCh0aGlzLCBrZXkpIHx8IHN0YXRlLmZyb3plbi5oYXMoa2V5KTtcbiAgICAgIH0gcmV0dXJuIG5hdGl2ZUhhcy5jYWxsKHRoaXMsIGtleSk7XG4gICAgfSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgIGlmIChpc09iamVjdChrZXkpICYmICFpc0V4dGVuc2libGUoa2V5KSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBlbmZvcmNlSXRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIXN0YXRlLmZyb3plbikgc3RhdGUuZnJvemVuID0gbmV3IEludGVybmFsV2Vha01hcCgpO1xuICAgICAgICByZXR1cm4gbmF0aXZlSGFzLmNhbGwodGhpcywga2V5KSA/IG5hdGl2ZUdldC5jYWxsKHRoaXMsIGtleSkgOiBzdGF0ZS5mcm96ZW4uZ2V0KGtleSk7XG4gICAgICB9IHJldHVybiBuYXRpdmVHZXQuY2FsbCh0aGlzLCBrZXkpO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKGlzT2JqZWN0KGtleSkgJiYgIWlzRXh0ZW5zaWJsZShrZXkpKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGVuZm9yY2VJdGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIGlmICghc3RhdGUuZnJvemVuKSBzdGF0ZS5mcm96ZW4gPSBuZXcgSW50ZXJuYWxXZWFrTWFwKCk7XG4gICAgICAgIG5hdGl2ZUhhcy5jYWxsKHRoaXMsIGtleSkgPyBuYXRpdmVTZXQuY2FsbCh0aGlzLCBrZXksIHZhbHVlKSA6IHN0YXRlLmZyb3plbi5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgbmF0aXZlU2V0LmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNvbGxlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbicpO1xudmFyIGNvbGxlY3Rpb25XZWFrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24td2VhaycpO1xuXG4vLyBgV2Vha1NldGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha3NldC1jb25zdHJ1Y3RvclxuY29sbGVjdGlvbignV2Vha1NldCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrU2V0KCkgeyByZXR1cm4gaW5pdCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIGNvbGxlY3Rpb25XZWFrKTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIFVTRV9GVU5DVElPTl9DT05TVFJVQ1RPUiA9ICdVU0VfRlVOQ1RJT05fQ09OU1RSVUNUT1InO1xudmFyIEFTWU5DX0lURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdhc3luY0l0ZXJhdG9yJyk7XG52YXIgQXN5bmNJdGVyYXRvciA9IGdsb2JhbC5Bc3luY0l0ZXJhdG9yO1xudmFyIFBhc3NlZEFzeW5jSXRlcmF0b3JQcm90b3R5cGUgPSBzaGFyZWQuQXN5bmNJdGVyYXRvclByb3RvdHlwZTtcbnZhciBBc3luY0l0ZXJhdG9yUHJvdG90eXBlLCBwcm90b3R5cGU7XG5cbmlmIChQYXNzZWRBc3luY0l0ZXJhdG9yUHJvdG90eXBlKSB7XG4gIEFzeW5jSXRlcmF0b3JQcm90b3R5cGUgPSBQYXNzZWRBc3luY0l0ZXJhdG9yUHJvdG90eXBlO1xufSBlbHNlIGlmIChpc0NhbGxhYmxlKEFzeW5jSXRlcmF0b3IpKSB7XG4gIEFzeW5jSXRlcmF0b3JQcm90b3R5cGUgPSBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZTtcbn0gZWxzZSBpZiAoc2hhcmVkW1VTRV9GVU5DVElPTl9DT05TVFJVQ1RPUl0gfHwgZ2xvYmFsW1VTRV9GVU5DVElPTl9DT05TVFJVQ1RPUl0pIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gd2UgaGF2ZSBubyBhbHRlcm5hdGl2ZXMgd2l0aG91dCB1c2FnZSBvZiBtb2Rlcm4gc3ludGF4XG4gICAgcHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoRnVuY3Rpb24oJ3JldHVybiBhc3luYyBmdW5jdGlvbiooKXt9KCknKSgpKSkpO1xuICAgIGlmIChnZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBPYmplY3QucHJvdG90eXBlKSBBc3luY0l0ZXJhdG9yUHJvdG90eXBlID0gcHJvdG90eXBlO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59XG5cbmlmICghQXN5bmNJdGVyYXRvclByb3RvdHlwZSkgQXN5bmNJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuZWxzZSBpZiAoSVNfUFVSRSkgQXN5bmNJdGVyYXRvclByb3RvdHlwZSA9IGNyZWF0ZShBc3luY0l0ZXJhdG9yUHJvdG90eXBlKTtcblxuaWYgKCFpc0NhbGxhYmxlKEFzeW5jSXRlcmF0b3JQcm90b3R5cGVbQVNZTkNfSVRFUkFUT1JdKSkge1xuICByZWRlZmluZShBc3luY0l0ZXJhdG9yUHJvdG90eXBlLCBBU1lOQ19JVEVSQVRPUiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBc3luY0l0ZXJhdG9yUHJvdG90eXBlO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZS1hbGwnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBBc3luY0l0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FzeW5jLWl0ZXJhdG9yLXByb3RvdHlwZScpO1xuXG52YXIgUHJvbWlzZSA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG5cbnZhciBhc3luY0Zyb21TeW5jSXRlcmF0b3JDb250aW51YXRpb24gPSBmdW5jdGlvbiAocmVzdWx0LCByZXNvbHZlLCByZWplY3QpIHtcbiAgdmFyIGRvbmUgPSByZXN1bHQuZG9uZTtcbiAgUHJvbWlzZS5yZXNvbHZlKHJlc3VsdC52YWx1ZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXNvbHZlKHsgZG9uZTogZG9uZSwgdmFsdWU6IHZhbHVlIH0pO1xuICB9LCByZWplY3QpO1xufTtcblxudmFyIEFzeW5jRnJvbVN5bmNJdGVyYXRvciA9IGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoaXRlcmF0b3IpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgaXRlcmF0b3I6IGFuT2JqZWN0KGl0ZXJhdG9yKSxcbiAgICBuZXh0OiBpdGVyYXRvci5uZXh0XG4gIH0pO1xufTtcblxuQXN5bmNGcm9tU3luY0l0ZXJhdG9yLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKGNyZWF0ZShBc3luY0l0ZXJhdG9yUHJvdG90eXBlKSwge1xuICBuZXh0OiBmdW5jdGlvbiBuZXh0KGFyZykge1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgdmFyIGhhc0FyZyA9ICEhYXJndW1lbnRzLmxlbmd0aDtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGFuT2JqZWN0KHN0YXRlLm5leHQuYXBwbHkoc3RhdGUuaXRlcmF0b3IsIGhhc0FyZyA/IFthcmddIDogW10pKTtcbiAgICAgIGFzeW5jRnJvbVN5bmNJdGVyYXRvckNvbnRpbnVhdGlvbihyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgfSk7XG4gIH0sXG4gICdyZXR1cm4nOiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgdmFyIGl0ZXJhdG9yID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5pdGVyYXRvcjtcbiAgICB2YXIgaGFzQXJnID0gISFhcmd1bWVudHMubGVuZ3RoO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgJHJldHVybiA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgICAgaWYgKCRyZXR1cm4gPT09IHVuZGVmaW5lZCkgcmV0dXJuIHJlc29sdmUoeyBkb25lOiB0cnVlLCB2YWx1ZTogYXJnIH0pO1xuICAgICAgdmFyIHJlc3VsdCA9IGFuT2JqZWN0KCRyZXR1cm4uYXBwbHkoaXRlcmF0b3IsIGhhc0FyZyA/IFthcmddIDogW10pKTtcbiAgICAgIGFzeW5jRnJvbVN5bmNJdGVyYXRvckNvbnRpbnVhdGlvbihyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgfSk7XG4gIH0sXG4gICd0aHJvdyc6IGZ1bmN0aW9uIChhcmcpIHtcbiAgICB2YXIgaXRlcmF0b3IgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLml0ZXJhdG9yO1xuICAgIHZhciBoYXNBcmcgPSAhIWFyZ3VtZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciAkdGhyb3cgPSBnZXRNZXRob2QoaXRlcmF0b3IsICd0aHJvdycpO1xuICAgICAgaWYgKCR0aHJvdyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gcmVqZWN0KGFyZyk7XG4gICAgICB2YXIgcmVzdWx0ID0gYW5PYmplY3QoJHRocm93LmFwcGx5KGl0ZXJhdG9yLCBoYXNBcmcgPyBbYXJnXSA6IFtdKSk7XG4gICAgICBhc3luY0Zyb21TeW5jSXRlcmF0b3JDb250aW51YXRpb24ocmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgIH0pO1xuICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBc3luY0Zyb21TeW5jSXRlcmF0b3I7XG4iLCJ2YXIgQXN5bmNGcm9tU3luY0l0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FzeW5jLWZyb20tc3luYy1pdGVyYXRvcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBBU1lOQ19JVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnYXN5bmNJdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgdXNpbmdJdGVyYXRvcikge1xuICB2YXIgbWV0aG9kID0gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBnZXRNZXRob2QoaXQsIEFTWU5DX0lURVJBVE9SKSA6IHVzaW5nSXRlcmF0b3I7XG4gIHJldHVybiBtZXRob2QgPyBhbk9iamVjdChtZXRob2QuY2FsbChpdCkpIDogbmV3IEFzeW5jRnJvbVN5bmNJdGVyYXRvcihnZXRJdGVyYXRvcihpdCkpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SKSB7XG4gIHJldHVybiBnbG9iYWxbQ09OU1RSVUNUT1JdLnByb3RvdHlwZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1mcm9tLWFzeW5jXG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG5cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjtcblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19UT19BUlJBWSA9IFRZUEUgPT0gMDtcbiAgdmFyIElTX0ZPUl9FQUNIID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICByZXR1cm4gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdGFyZ2V0KSB7XG4gICAgYW5PYmplY3QoaXRlcmF0b3IpO1xuICAgIHZhciBQcm9taXNlID0gZ2V0QnVpbHRJbignUHJvbWlzZScpO1xuICAgIHZhciBuZXh0ID0gYUNhbGxhYmxlKGl0ZXJhdG9yLm5leHQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIE1BUFBJTkcgPSBmbiAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChNQVBQSU5HIHx8ICFJU19UT19BUlJBWSkgYUNhbGxhYmxlKGZuKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgY2xvc2VJdGVyYXRpb24gPSBmdW5jdGlvbiAobWV0aG9kLCBhcmd1bWVudCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciByZXR1cm5NZXRob2QgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICAgICAgICBpZiAocmV0dXJuTWV0aG9kKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJldHVybk1ldGhvZC5jYWxsKGl0ZXJhdG9yKSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIG1ldGhvZChhcmd1bWVudCk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IyKSB7XG4gICAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcjIpO1xuICAgICAgICB9IG1ldGhvZChhcmd1bWVudCk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgb25FcnJvciA9IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICBjbG9zZUl0ZXJhdGlvbihyZWplY3QsIGVycm9yKTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBsb29wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChJU19UT19BUlJBWSAmJiAoaW5kZXggPiBNQVhfU0FGRV9JTlRFR0VSKSAmJiBNQVBQSU5HKSB7XG4gICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ1RoZSBhbGxvd2VkIG51bWJlciBvZiBpdGVyYXRpb25zIGhhcyBiZWVuIGV4Y2VlZGVkJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFByb21pc2UucmVzb2x2ZShhbk9iamVjdChuZXh0LmNhbGwoaXRlcmF0b3IpKSkudGhlbihmdW5jdGlvbiAoc3RlcCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaWYgKGFuT2JqZWN0KHN0ZXApLmRvbmUpIHtcbiAgICAgICAgICAgICAgICBpZiAoSVNfVE9fQVJSQVkpIHtcbiAgICAgICAgICAgICAgICAgIHRhcmdldC5sZW5ndGggPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShJU19TT01FID8gZmFsc2UgOiBJU19FVkVSWSB8fCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHN0ZXAudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKE1BUFBJTkcpIHtcbiAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShJU19UT19BUlJBWSA/IGZuKHZhbHVlLCBpbmRleCkgOiBmbih2YWx1ZSkpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoSVNfRk9SX0VBQ0gpIHtcbiAgICAgICAgICAgICAgICAgICAgICBsb29wKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPyBsb29wKCkgOiBjbG9zZUl0ZXJhdGlvbihyZXNvbHZlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoSVNfVE9fQVJSQVkpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbaW5kZXgrK10gPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgbG9vcCgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA/IGNsb3NlSXRlcmF0aW9uKHJlc29sdmUsIElTX1NPTUUgfHwgdmFsdWUpIDogbG9vcCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LCBvbkVycm9yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGFyZ2V0W2luZGV4KytdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICBsb29wKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgeyBvbkVycm9yKGVycm9yKTsgfVxuICAgICAgICAgIH0sIG9uRXJyb3IpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjIpIHsgb25FcnJvcihlcnJvcjIpOyB9XG4gICAgICB9O1xuXG4gICAgICBsb29wKCk7XG4gICAgfSk7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdG9BcnJheTogY3JlYXRlTWV0aG9kKDApLFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMSksXG4gIGV2ZXJ5OiBjcmVhdGVNZXRob2QoMiksXG4gIHNvbWU6IGNyZWF0ZU1ldGhvZCgzKSxcbiAgZmluZDogY3JlYXRlTWV0aG9kKDQpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGdldEFzeW5jSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWFzeW5jLWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgZ2V0VmlydHVhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnRyeS12aXJ0dWFsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBBc3luY0Zyb21TeW5jSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXN5bmMtZnJvbS1zeW5jLWl0ZXJhdG9yJyk7XG52YXIgdG9BcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hc3luYy1pdGVyYXRvci1pdGVyYXRpb24nKS50b0FycmF5O1xuXG52YXIgQVNZTkNfSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2FzeW5jSXRlcmF0b3InKTtcbnZhciBhcnJheUl0ZXJhdG9yID0gZ2V0VmlydHVhbCgnQXJyYXknKS52YWx1ZXM7XG5cbi8vIGBBcnJheS5mcm9tQXN5bmNgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZnJvbS1hc3luY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmcm9tQXN5bmMoYXN5bmNJdGVtcyAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gIHZhciBDID0gdGhpcztcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBtYXBmbiA9IGFyZ3VtZW50c0xlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciB0aGlzQXJnID0gYXJndW1lbnRzTGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIG5ldyAoZ2V0QnVpbHRJbignUHJvbWlzZScpKShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgIHZhciBPID0gdG9PYmplY3QoYXN5bmNJdGVtcyk7XG4gICAgaWYgKG1hcGZuICE9PSB1bmRlZmluZWQpIG1hcGZuID0gYmluZChtYXBmbiwgdGhpc0FyZywgMik7XG4gICAgdmFyIHVzaW5nQXN5bmNJdGVyYXRvciA9IGdldE1ldGhvZChPLCBBU1lOQ19JVEVSQVRPUik7XG4gICAgdmFyIHVzaW5nU3luY0l0ZXJhdG9yID0gdXNpbmdBc3luY0l0ZXJhdG9yID8gdW5kZWZpbmVkIDogZ2V0SXRlcmF0b3JNZXRob2QoTykgfHwgYXJyYXlJdGVyYXRvcjtcbiAgICB2YXIgQSA9IGlzQ29uc3RydWN0b3IoQykgPyBuZXcgQygpIDogW107XG4gICAgdmFyIGl0ZXJhdG9yID0gdXNpbmdBc3luY0l0ZXJhdG9yXG4gICAgICA/IGdldEFzeW5jSXRlcmF0b3IoTywgdXNpbmdBc3luY0l0ZXJhdG9yKVxuICAgICAgOiBuZXcgQXN5bmNGcm9tU3luY0l0ZXJhdG9yKGdldEl0ZXJhdG9yKE8sIHVzaW5nU3luY0l0ZXJhdG9yKSk7XG4gICAgcmVzb2x2ZSh0b0FycmF5KGl0ZXJhdG9yLCBtYXBmbiwgQSkpO1xuICB9KTtcbn07XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmcm9tQXN5bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbS1hc3luYycpO1xuXG4vLyBgQXJyYXkuZnJvbUFzeW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZyb20tYXN5bmNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUgfSwge1xuICBmcm9tQXN5bmM6IGZyb21Bc3luY1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbHRlclJlamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXJSZWplY3Q7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJPdXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmlsdGVyaW5nXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSB9LCB7XG4gIGZpbHRlck91dDogZnVuY3Rpb24gZmlsdGVyT3V0KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXJSZWplY3QodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxuYWRkVG9VbnNjb3BhYmxlcygnZmlsdGVyT3V0Jyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmlsdGVyUmVqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbHRlclJlamVjdDtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlclJlamVjdGAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1maWx0ZXJpbmdcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlIH0sIHtcbiAgZmlsdGVyUmVqZWN0OiBmdW5jdGlvbiBmaWx0ZXJSZWplY3QoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlclJlamVjdCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdmaWx0ZXJSZWplY3QnKTtcbiIsInZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgZmluZExhc3QsIGZpbmRMYXN0SW5kZXggfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19GSU5EX0xBU1RfSU5ERVggPSBUWVBFID09IDE7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBpbmRleCA9IGxlbmd0aE9mQXJyYXlMaWtlKHNlbGYpO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIHdoaWxlIChpbmRleC0tID4gMCkge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiB2YWx1ZTsgLy8gZmluZExhc3RcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gaW5kZXg7IC8vIGZpbmRMYXN0SW5kZXhcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfTEFTVF9JTkRFWCA/IC0xIDogdW5kZWZpbmVkO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZExhc3RgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1maW5kLWZyb20tbGFzdFxuICBmaW5kTGFzdDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRMYXN0SW5kZXhgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1maW5kLWZyb20tbGFzdFxuICBmaW5kTGFzdEluZGV4OiBjcmVhdGVNZXRob2QoMSlcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmluZExhc3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLWZyb20tbGFzdCcpLmZpbmRMYXN0O1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmluZExhc3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmluZC1mcm9tLWxhc3RcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlIH0sIHtcbiAgZmluZExhc3Q6IGZ1bmN0aW9uIGZpbmRMYXN0KGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kTGFzdCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdmaW5kTGFzdCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbmRMYXN0SW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLWZyb20tbGFzdCcpLmZpbmRMYXN0SW5kZXg7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maW5kTGFzdEluZGV4YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbmQtZnJvbS1sYXN0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSB9LCB7XG4gIGZpbmRMYXN0SW5kZXg6IGZ1bmN0aW9uIGZpbmRMYXN0SW5kZXgoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmRMYXN0SW5kZXgodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxuYWRkVG9VbnNjb3BhYmxlcygnZmluZExhc3RJbmRleCcpO1xuIiwidmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBvYmplY3RDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGFycmF5RnJvbUNvbnN0cnVjdG9yQW5kTGlzdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mcm9tLWNvbnN0cnVjdG9yLWFuZC1saXN0Jyk7XG5cbnZhciBwdXNoID0gW10ucHVzaDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQsIHNwZWNpZmljQ29uc3RydWN0b3IpIHtcbiAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICB2YXIgdGFyZ2V0ID0gb2JqZWN0Q3JlYXRlKG51bGwpO1xuICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2Uoc2VsZik7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBDb25zdHJ1Y3Rvciwga2V5LCB2YWx1ZTtcbiAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICB2YWx1ZSA9IHNlbGZbaW5kZXhdO1xuICAgIGtleSA9IHRvUHJvcGVydHlLZXkoYm91bmRGdW5jdGlvbih2YWx1ZSwgaW5kZXgsIE8pKTtcbiAgICAvLyBpbiBzb21lIElFMTAgYnVpbGRzLCBgaGFzT3duUHJvcGVydHlgIHJldHVybnMgaW5jb3JyZWN0IHJlc3VsdCBvbiBpbnRlZ2VyIGtleXNcbiAgICAvLyBidXQgc2luY2UgaXQncyBhIGBudWxsYCBwcm90b3R5cGUgb2JqZWN0LCB3ZSBjYW4gc2FmZWx5IHVzZSBgaW5gXG4gICAgaWYgKGtleSBpbiB0YXJnZXQpIHB1c2guY2FsbCh0YXJnZXRba2V5XSwgdmFsdWUpO1xuICAgIGVsc2UgdGFyZ2V0W2tleV0gPSBbdmFsdWVdO1xuICB9XG4gIGlmIChzcGVjaWZpY0NvbnN0cnVjdG9yKSB7XG4gICAgQ29uc3RydWN0b3IgPSBzcGVjaWZpY0NvbnN0cnVjdG9yKE8pO1xuICAgIGlmIChDb25zdHJ1Y3RvciAhPT0gQXJyYXkpIHtcbiAgICAgIGZvciAoa2V5IGluIHRhcmdldCkgdGFyZ2V0W2tleV0gPSBhcnJheUZyb21Db25zdHJ1Y3RvckFuZExpc3QoQ29uc3RydWN0b3IsIHRhcmdldFtrZXldKTtcbiAgICB9XG4gIH0gcmV0dXJuIHRhcmdldDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZ3JvdXBCeSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1ncm91cC1ieScpO1xudmFyIGFycmF5U3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmdyb3VwQnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZ3JvdXBpbmdcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlIH0sIHtcbiAgZ3JvdXBCeTogZnVuY3Rpb24gZ3JvdXBCeShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuICRncm91cEJ5KHRoaXMsIGNhbGxiYWNrZm4sIHRoaXNBcmcsIGFycmF5U3BlY2llc0NvbnN0cnVjdG9yKTtcbiAgfVxufSk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2dyb3VwQnknKTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2Zyb3plbiAtLSBzYWZlXG52YXIgaXNGcm96ZW4gPSBPYmplY3QuaXNGcm96ZW47XG5cbnZhciBpc0Zyb3plblN0cmluZ0FycmF5ID0gZnVuY3Rpb24gKGFycmF5LCBhbGxvd1VuZGVmaW5lZCkge1xuICBpZiAoIWlzRnJvemVuIHx8ICFpc0FycmF5KGFycmF5KSB8fCAhaXNGcm96ZW4oYXJyYXkpKSByZXR1cm4gZmFsc2U7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHZhciBlbGVtZW50O1xuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICBlbGVtZW50ID0gYXJyYXlbaW5kZXgrK107XG4gICAgaWYgKCEodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnIHx8IChhbGxvd1VuZGVmaW5lZCAmJiB0eXBlb2YgZWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSByZXR1cm4gbGVuZ3RoICE9PSAwO1xufTtcblxuLy8gYEFycmF5LmlzVGVtcGxhdGVPYmplY3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktaXMtdGVtcGxhdGUtb2JqZWN0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNUZW1wbGF0ZU9iamVjdDogZnVuY3Rpb24gaXNUZW1wbGF0ZU9iamVjdCh2YWx1ZSkge1xuICAgIGlmICghaXNGcm96ZW5TdHJpbmdBcnJheSh2YWx1ZSwgdHJ1ZSkpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcmF3ID0gdmFsdWUucmF3O1xuICAgIGlmIChyYXcubGVuZ3RoICE9PSB2YWx1ZS5sZW5ndGggfHwgIWlzRnJvemVuU3RyaW5nQXJyYXkocmF3LCBmYWxzZSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4YCBnZXR0ZXJcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9rZWl0aGFtdXMvcHJvcG9zYWwtYXJyYXktbGFzdFxuaWYgKERFU0NSSVBUT1JTICYmICEoJ2xhc3RJbmRleCcgaW4gW10pKSB7XG4gIGRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSwgJ2xhc3RJbmRleCcsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBsYXN0SW5kZXgoKSB7XG4gICAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgICAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgICAgcmV0dXJuIGxlbiA9PSAwID8gMCA6IGxlbiAtIDE7XG4gICAgfVxuICB9KTtcblxuICBhZGRUb1Vuc2NvcGFibGVzKCdsYXN0SW5kZXgnKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhgIGFjY2Vzc29yXG4vLyBodHRwczovL2dpdGh1Yi5jb20va2VpdGhhbXVzL3Byb3Bvc2FsLWFycmF5LWxhc3RcbmlmIChERVNDUklQVE9SUyAmJiAhKCdsYXN0SXRlbScgaW4gW10pKSB7XG4gIGRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSwgJ2xhc3RJdGVtJywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGxhc3RJdGVtKCkge1xuICAgICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICAgIHJldHVybiBsZW4gPT0gMCA/IHVuZGVmaW5lZCA6IE9bbGVuIC0gMV07XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIGxhc3RJdGVtKHZhbHVlKSB7XG4gICAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgICAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgICAgcmV0dXJuIE9bbGVuID09IDAgPyAwIDogbGVuIC0gMV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGFkZFRvVW5zY29wYWJsZXMoJ2xhc3RJdGVtJyk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbnZhciBwdXNoID0gW10ucHVzaDtcblxuLy8gYEFycmF5LnByb3RvdHlwZS51bmlxdWVCeWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS11bmlxdWVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdW5pcXVlQnkocmVzb2x2ZXIpIHtcbiAgdmFyIHRoYXQgPSB0b09iamVjdCh0aGlzKTtcbiAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKHRoYXQpO1xuICB2YXIgcmVzdWx0ID0gYXJyYXlTcGVjaWVzQ3JlYXRlKHRoYXQsIDApO1xuICB2YXIgTWFwID0gZ2V0QnVpbHRJbignTWFwJyk7XG4gIHZhciBtYXAgPSBuZXcgTWFwKCk7XG4gIHZhciByZXNvbHZlckZ1bmN0aW9uLCBpbmRleCwgaXRlbSwga2V5O1xuICBpZiAocmVzb2x2ZXIgIT0gbnVsbCkgcmVzb2x2ZXJGdW5jdGlvbiA9IGFDYWxsYWJsZShyZXNvbHZlcik7XG4gIGVsc2UgcmVzb2x2ZXJGdW5jdGlvbiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgaXRlbSA9IHRoYXRbaW5kZXhdO1xuICAgIGtleSA9IHJlc29sdmVyRnVuY3Rpb24oaXRlbSk7XG4gICAgaWYgKCFtYXAuaGFzKGtleSkpIG1hcC5zZXQoa2V5LCBpdGVtKTtcbiAgfVxuICBtYXAuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBwdXNoLmNhbGwocmVzdWx0LCB2YWx1ZSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgdW5pcXVlQnkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktdW5pcXVlLWJ5Jyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUudW5pcXVlQnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktdW5pcXVlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSB9LCB7XG4gIHVuaXF1ZUJ5OiB1bmlxdWVCeVxufSk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ3VuaXF1ZUJ5Jyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgQXN5bmNJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hc3luYy1pdGVyYXRvci1wcm90b3R5cGUnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbnZhciBBc3luY0l0ZXJhdG9yQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKCkge1xuICBhbkluc3RhbmNlKHRoaXMsIEFzeW5jSXRlcmF0b3JDb25zdHJ1Y3Rvcik7XG59O1xuXG5Bc3luY0l0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gQXN5bmNJdGVyYXRvclByb3RvdHlwZTtcblxuaWYgKCFoYXNPd24oQXN5bmNJdGVyYXRvclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRykpIHtcbiAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEFzeW5jSXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsICdBc3luY0l0ZXJhdG9yJyk7XG59XG5cbmlmIChJU19QVVJFIHx8ICFoYXNPd24oQXN5bmNJdGVyYXRvclByb3RvdHlwZSwgJ2NvbnN0cnVjdG9yJykgfHwgQXN5bmNJdGVyYXRvclByb3RvdHlwZS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShBc3luY0l0ZXJhdG9yUHJvdG90eXBlLCAnY29uc3RydWN0b3InLCBBc3luY0l0ZXJhdG9yQ29uc3RydWN0b3IpO1xufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICBBc3luY0l0ZXJhdG9yOiBBc3luY0l0ZXJhdG9yQ29uc3RydWN0b3Jcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUtYWxsJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBBc3luY0l0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FzeW5jLWl0ZXJhdG9yLXByb3RvdHlwZScpO1xuXG52YXIgUHJvbWlzZSA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuZXh0SGFuZGxlciwgSVNfSVRFUkFUT1IpIHtcbiAgdmFyIEFzeW5jSXRlcmF0b3JQcm94eSA9IGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3Ioc3RhdGUpIHtcbiAgICBzdGF0ZS5uZXh0ID0gYUNhbGxhYmxlKHN0YXRlLml0ZXJhdG9yLm5leHQpO1xuICAgIHN0YXRlLmRvbmUgPSBmYWxzZTtcbiAgICBzdGF0ZS5pZ25vcmVBcmd1bWVudCA9ICFJU19JVEVSQVRPUjtcbiAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHN0YXRlKTtcbiAgfTtcblxuICBBc3luY0l0ZXJhdG9yUHJveHkucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoY3JlYXRlKEFzeW5jSXRlcmF0b3JQcm90b3R5cGUpLCB7XG4gICAgbmV4dDogZnVuY3Rpb24gbmV4dChhcmcpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBoYXNBcmd1bWVudCA9ICEhYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgYXJncyA9IGhhc0FyZ3VtZW50ID8gW3N0YXRlLmlnbm9yZUFyZ3VtZW50ID8gdW5kZWZpbmVkIDogYXJnXSA6IElTX0lURVJBVE9SID8gW10gOiBbdW5kZWZpbmVkXTtcbiAgICAgICAgc3RhdGUuaWdub3JlQXJndW1lbnQgPSBmYWxzZTtcbiAgICAgICAgcmVzb2x2ZShzdGF0ZS5kb25lID8geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH0gOiBhbk9iamVjdChuZXh0SGFuZGxlci5jYWxsKHN0YXRlLCBQcm9taXNlLCBhcmdzKSkpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICAncmV0dXJuJzogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgaXRlcmF0b3IgPSBzdGF0ZS5pdGVyYXRvcjtcbiAgICAgICAgc3RhdGUuZG9uZSA9IHRydWU7XG4gICAgICAgIHZhciAkJHJldHVybiA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgICAgICBpZiAoJCRyZXR1cm4gPT09IHVuZGVmaW5lZCkgcmV0dXJuIHJlc29sdmUoeyBkb25lOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgkJHJldHVybi5jYWxsKGl0ZXJhdG9yLCB2YWx1ZSkpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgIGFuT2JqZWN0KHJlc3VsdCk7XG4gICAgICAgICAgcmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ3Rocm93JzogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgaXRlcmF0b3IgPSBzdGF0ZS5pdGVyYXRvcjtcbiAgICAgICAgc3RhdGUuZG9uZSA9IHRydWU7XG4gICAgICAgIHZhciAkJHRocm93ID0gZ2V0TWV0aG9kKGl0ZXJhdG9yLCAndGhyb3cnKTtcbiAgICAgICAgaWYgKCQkdGhyb3cgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHJlamVjdCh2YWx1ZSk7XG4gICAgICAgIHJlc29sdmUoJCR0aHJvdy5jYWxsKGl0ZXJhdG9yLCB2YWx1ZSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICBpZiAoIUlTX0lURVJBVE9SKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEFzeW5jSXRlcmF0b3JQcm94eS5wcm90b3R5cGUsIFRPX1NUUklOR19UQUcsICdHZW5lcmF0b3InKTtcbiAgfVxuXG4gIHJldHVybiBBc3luY0l0ZXJhdG9yUHJveHk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVyc1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgY3JlYXRlQXN5bmNJdGVyYXRvclByb3h5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FzeW5jLWl0ZXJhdG9yLWNyZWF0ZS1wcm94eScpO1xuXG52YXIgQXN5bmNJdGVyYXRvclByb3h5ID0gY3JlYXRlQXN5bmNJdGVyYXRvclByb3h5KGZ1bmN0aW9uIChQcm9taXNlLCBhcmdzKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXM7XG4gIHZhciBpdGVyYXRvciA9IHN0YXRlLml0ZXJhdG9yO1xuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoYW5PYmplY3Qoc3RhdGUubmV4dC5hcHBseShpdGVyYXRvciwgYXJncykpKS50aGVuKGZ1bmN0aW9uIChzdGVwKSB7XG4gICAgaWYgKGFuT2JqZWN0KHN0ZXApLmRvbmUpIHtcbiAgICAgIHN0YXRlLmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IFtzdGF0ZS5pbmRleCsrLCBzdGVwLnZhbHVlXSB9O1xuICB9KTtcbn0pO1xuXG4kKHsgdGFyZ2V0OiAnQXN5bmNJdGVyYXRvcicsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlIH0sIHtcbiAgYXNJbmRleGVkUGFpcnM6IGZ1bmN0aW9uIGFzSW5kZXhlZFBhaXJzKCkge1xuICAgIHJldHVybiBuZXcgQXN5bmNJdGVyYXRvclByb3h5KHtcbiAgICAgIGl0ZXJhdG9yOiBhbk9iamVjdCh0aGlzKSxcbiAgICAgIGluZGV4OiAwXG4gICAgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVyc1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qb3NpdGl2ZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcG9zaXRpdmUtaW50ZWdlcicpO1xudmFyIGNyZWF0ZUFzeW5jSXRlcmF0b3JQcm94eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hc3luYy1pdGVyYXRvci1jcmVhdGUtcHJveHknKTtcblxudmFyIEFzeW5jSXRlcmF0b3JQcm94eSA9IGNyZWF0ZUFzeW5jSXRlcmF0b3JQcm94eShmdW5jdGlvbiAoUHJvbWlzZSwgYXJncykge1xuICB2YXIgc3RhdGUgPSB0aGlzO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIGxvb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgYW5PYmplY3Qoc3RhdGUubmV4dC5hcHBseShzdGF0ZS5pdGVyYXRvciwgc3RhdGUucmVtYWluaW5nID8gW10gOiBhcmdzKSlcbiAgICAgICAgKS50aGVuKGZ1bmN0aW9uIChzdGVwKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChhbk9iamVjdChzdGVwKS5kb25lKSB7XG4gICAgICAgICAgICAgIHN0YXRlLmRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICByZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUucmVtYWluaW5nKSB7XG4gICAgICAgICAgICAgIHN0YXRlLnJlbWFpbmluZy0tO1xuICAgICAgICAgICAgICBsb29wKCk7XG4gICAgICAgICAgICB9IGVsc2UgcmVzb2x2ZSh7IGRvbmU6IGZhbHNlLCB2YWx1ZTogc3RlcC52YWx1ZSB9KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsgcmVqZWN0KGVycik7IH1cbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7IHJlamVjdChlcnJvcik7IH1cbiAgICB9O1xuXG4gICAgbG9vcCgpO1xuICB9KTtcbn0pO1xuXG4kKHsgdGFyZ2V0OiAnQXN5bmNJdGVyYXRvcicsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlIH0sIHtcbiAgZHJvcDogZnVuY3Rpb24gZHJvcChsaW1pdCkge1xuICAgIHJldHVybiBuZXcgQXN5bmNJdGVyYXRvclByb3h5KHtcbiAgICAgIGl0ZXJhdG9yOiBhbk9iamVjdCh0aGlzKSxcbiAgICAgIHJlbWFpbmluZzogdG9Qb3NpdGl2ZUludGVnZXIobGltaXQpXG4gICAgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVyc1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGV2ZXJ5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FzeW5jLWl0ZXJhdG9yLWl0ZXJhdGlvbicpLmV2ZXJ5O1xuXG4kKHsgdGFyZ2V0OiAnQXN5bmNJdGVyYXRvcicsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlIH0sIHtcbiAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGZuKSB7XG4gICAgcmV0dXJuICRldmVyeSh0aGlzLCBmbik7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVyc1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBjcmVhdGVBc3luY0l0ZXJhdG9yUHJveHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXN5bmMtaXRlcmF0b3ItY3JlYXRlLXByb3h5Jyk7XG5cbnZhciBBc3luY0l0ZXJhdG9yUHJveHkgPSBjcmVhdGVBc3luY0l0ZXJhdG9yUHJveHkoZnVuY3Rpb24gKFByb21pc2UsIGFyZ3MpIHtcbiAgdmFyIHN0YXRlID0gdGhpcztcbiAgdmFyIGZpbHRlcmVyID0gc3RhdGUuZmlsdGVyZXI7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgbG9vcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShhbk9iamVjdChzdGF0ZS5uZXh0LmFwcGx5KHN0YXRlLml0ZXJhdG9yLCBhcmdzKSkpLnRoZW4oZnVuY3Rpb24gKHN0ZXApIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGFuT2JqZWN0KHN0ZXApLmRvbmUpIHtcbiAgICAgICAgICAgICAgc3RhdGUuZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgIHJlc29sdmUoeyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIHZhbHVlID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGZpbHRlcmVyKHZhbHVlKSkudGhlbihmdW5jdGlvbiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZCA/IHJlc29sdmUoeyBkb25lOiBmYWxzZSwgdmFsdWU6IHZhbHVlIH0pIDogbG9vcCgpO1xuICAgICAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVycikgeyByZWplY3QoZXJyKTsgfVxuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgcmVqZWN0KGVycm9yKTsgfVxuICAgIH07XG5cbiAgICBsb29wKCk7XG4gIH0pO1xufSk7XG5cbiQoeyB0YXJnZXQ6ICdBc3luY0l0ZXJhdG9yJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUgfSwge1xuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihmaWx0ZXJlcikge1xuICAgIHJldHVybiBuZXcgQXN5bmNJdGVyYXRvclByb3h5KHtcbiAgICAgIGl0ZXJhdG9yOiBhbk9iamVjdCh0aGlzKSxcbiAgICAgIGZpbHRlcmVyOiBhQ2FsbGFibGUoZmlsdGVyZXIpXG4gICAgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVyc1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXN5bmMtaXRlcmF0b3ItaXRlcmF0aW9uJykuZmluZDtcblxuJCh7IHRhcmdldDogJ0FzeW5jSXRlcmF0b3InLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSB9LCB7XG4gIGZpbmQ6IGZ1bmN0aW9uIGZpbmQoZm4pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgZm4pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnNcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgY3JlYXRlQXN5bmNJdGVyYXRvclByb3h5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FzeW5jLWl0ZXJhdG9yLWNyZWF0ZS1wcm94eScpO1xudmFyIGdldEFzeW5jSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWFzeW5jLWl0ZXJhdG9yJyk7XG5cbnZhciBBc3luY0l0ZXJhdG9yUHJveHkgPSBjcmVhdGVBc3luY0l0ZXJhdG9yUHJveHkoZnVuY3Rpb24gKFByb21pc2UpIHtcbiAgdmFyIHN0YXRlID0gdGhpcztcbiAgdmFyIG1hcHBlciA9IHN0YXRlLm1hcHBlcjtcbiAgdmFyIGlubmVySXRlcmF0b3I7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgb3V0ZXJMb29wID0gZnVuY3Rpb24gKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGFuT2JqZWN0KHN0YXRlLm5leHQuY2FsbChzdGF0ZS5pdGVyYXRvcikpKS50aGVuKGZ1bmN0aW9uIChzdGVwKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChhbk9iamVjdChzdGVwKS5kb25lKSB7XG4gICAgICAgICAgICAgIHN0YXRlLmRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICByZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShtYXBwZXIoc3RlcC52YWx1ZSkpLnRoZW4oZnVuY3Rpb24gKG1hcHBlZCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBzdGF0ZS5pbm5lckl0ZXJhdG9yID0gaW5uZXJJdGVyYXRvciA9IGdldEFzeW5jSXRlcmF0b3IobWFwcGVkKTtcbiAgICAgICAgICAgICAgICAgIHN0YXRlLmlubmVyTmV4dCA9IGFDYWxsYWJsZShpbm5lckl0ZXJhdG9yLm5leHQpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGlubmVyTG9vcCgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yMikgeyByZWplY3QoZXJyb3IyKTsgfVxuICAgICAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yMSkgeyByZWplY3QoZXJyb3IxKTsgfVxuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgcmVqZWN0KGVycm9yKTsgfVxuICAgIH07XG5cbiAgICB2YXIgaW5uZXJMb29wID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKGlubmVySXRlcmF0b3IgPSBzdGF0ZS5pbm5lckl0ZXJhdG9yKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGFuT2JqZWN0KHN0YXRlLmlubmVyTmV4dC5jYWxsKGlubmVySXRlcmF0b3IpKSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpZiAoYW5PYmplY3QocmVzdWx0KS5kb25lKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUuaW5uZXJJdGVyYXRvciA9IHN0YXRlLmlubmVyTmV4dCA9IG51bGw7XG4gICAgICAgICAgICAgICAgb3V0ZXJMb29wKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSByZXNvbHZlKHsgZG9uZTogZmFsc2UsIHZhbHVlOiByZXN1bHQudmFsdWUgfSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcjEpIHsgcmVqZWN0KGVycm9yMSk7IH1cbiAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyB9XG4gICAgICB9IGVsc2Ugb3V0ZXJMb29wKCk7XG4gICAgfTtcblxuICAgIGlubmVyTG9vcCgpO1xuICB9KTtcbn0pO1xuXG4kKHsgdGFyZ2V0OiAnQXN5bmNJdGVyYXRvcicsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlIH0sIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChtYXBwZXIpIHtcbiAgICByZXR1cm4gbmV3IEFzeW5jSXRlcmF0b3JQcm94eSh7XG4gICAgICBpdGVyYXRvcjogYW5PYmplY3QodGhpcyksXG4gICAgICBtYXBwZXI6IGFDYWxsYWJsZShtYXBwZXIpLFxuICAgICAgaW5uZXJJdGVyYXRvcjogbnVsbCxcbiAgICAgIGlubmVyTmV4dDogbnVsbFxuICAgIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnNcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FzeW5jLWl0ZXJhdG9yLWl0ZXJhdGlvbicpLmZvckVhY2g7XG5cbiQoeyB0YXJnZXQ6ICdBc3luY0l0ZXJhdG9yJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUgfSwge1xuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gICAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGZuKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBBc3luY0l0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FzeW5jLWl0ZXJhdG9yLXByb3RvdHlwZScpO1xudmFyIGNyZWF0ZUFzeW5jSXRlcmF0b3JQcm94eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hc3luYy1pdGVyYXRvci1jcmVhdGUtcHJveHknKTtcbnZhciBnZXRBc3luY0l0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1hc3luYy1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEFzeW5jRnJvbVN5bmNJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hc3luYy1mcm9tLXN5bmMtaXRlcmF0b3InKTtcblxudmFyIEFTWU5DX0lURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdhc3luY0l0ZXJhdG9yJyk7XG5cbnZhciBpc1Byb3RvdHlwZU9mID0ge30uaXNQcm90b3R5cGVPZjtcblxudmFyIEFzeW5jSXRlcmF0b3JQcm94eSA9IGNyZWF0ZUFzeW5jSXRlcmF0b3JQcm94eShmdW5jdGlvbiAoUHJvbWlzZSwgYXJncykge1xuICByZXR1cm4gYW5PYmplY3QodGhpcy5uZXh0LmFwcGx5KHRoaXMuaXRlcmF0b3IsIGFyZ3MpKTtcbn0sIHRydWUpO1xuXG4kKHsgdGFyZ2V0OiAnQXN5bmNJdGVyYXRvcicsIHN0YXQ6IHRydWUgfSwge1xuICBmcm9tOiBmdW5jdGlvbiBmcm9tKE8pIHtcbiAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QoTyk7XG4gICAgdmFyIHVzaW5nSXRlcmF0b3IgPSBnZXRNZXRob2Qob2JqZWN0LCBBU1lOQ19JVEVSQVRPUik7XG4gICAgdmFyIGl0ZXJhdG9yO1xuICAgIGlmICh1c2luZ0l0ZXJhdG9yKSB7XG4gICAgICBpdGVyYXRvciA9IGdldEFzeW5jSXRlcmF0b3Iob2JqZWN0LCB1c2luZ0l0ZXJhdG9yKTtcbiAgICAgIGlmIChpc1Byb3RvdHlwZU9mLmNhbGwoQXN5bmNJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3IpKSByZXR1cm4gaXRlcmF0b3I7XG4gICAgfVxuICAgIGlmIChpdGVyYXRvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1c2luZ0l0ZXJhdG9yID0gZ2V0SXRlcmF0b3JNZXRob2Qob2JqZWN0KTtcbiAgICAgIGlmICh1c2luZ0l0ZXJhdG9yKSByZXR1cm4gbmV3IEFzeW5jRnJvbVN5bmNJdGVyYXRvcihnZXRJdGVyYXRvcihvYmplY3QsIHVzaW5nSXRlcmF0b3IpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBc3luY0l0ZXJhdG9yUHJveHkoeyBpdGVyYXRvcjogaXRlcmF0b3IgIT09IHVuZGVmaW5lZCA/IGl0ZXJhdG9yIDogb2JqZWN0IH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnNcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgY3JlYXRlQXN5bmNJdGVyYXRvclByb3h5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FzeW5jLWl0ZXJhdG9yLWNyZWF0ZS1wcm94eScpO1xuXG52YXIgQXN5bmNJdGVyYXRvclByb3h5ID0gY3JlYXRlQXN5bmNJdGVyYXRvclByb3h5KGZ1bmN0aW9uIChQcm9taXNlLCBhcmdzKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXM7XG4gIHZhciBtYXBwZXIgPSBzdGF0ZS5tYXBwZXI7XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShhbk9iamVjdChzdGF0ZS5uZXh0LmFwcGx5KHN0YXRlLml0ZXJhdG9yLCBhcmdzKSkpLnRoZW4oZnVuY3Rpb24gKHN0ZXApIHtcbiAgICBpZiAoYW5PYmplY3Qoc3RlcCkuZG9uZSkge1xuICAgICAgc3RhdGUuZG9uZSA9IHRydWU7XG4gICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFwcGVyKHN0ZXAudmFsdWUpKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiB2YWx1ZSB9O1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG4kKHsgdGFyZ2V0OiAnQXN5bmNJdGVyYXRvcicsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlIH0sIHtcbiAgbWFwOiBmdW5jdGlvbiBtYXAobWFwcGVyKSB7XG4gICAgcmV0dXJuIG5ldyBBc3luY0l0ZXJhdG9yUHJveHkoe1xuICAgICAgaXRlcmF0b3I6IGFuT2JqZWN0KHRoaXMpLFxuICAgICAgbWFwcGVyOiBhQ2FsbGFibGUobWFwcGVyKVxuICAgIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnNcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxudmFyIFByb21pc2UgPSBnZXRCdWlsdEluKCdQcm9taXNlJyk7XG5cbiQoeyB0YXJnZXQ6ICdBc3luY0l0ZXJhdG9yJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUgfSwge1xuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShyZWR1Y2VyIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgdmFyIGl0ZXJhdG9yID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIG5leHQgPSBhQ2FsbGFibGUoaXRlcmF0b3IubmV4dCk7XG4gICAgdmFyIG5vSW5pdGlhbCA9IGFyZ3VtZW50cy5sZW5ndGggPCAyO1xuICAgIHZhciBhY2N1bXVsYXRvciA9IG5vSW5pdGlhbCA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1sxXTtcbiAgICBhQ2FsbGFibGUocmVkdWNlcik7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGxvb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGFuT2JqZWN0KG5leHQuY2FsbChpdGVyYXRvcikpKS50aGVuKGZ1bmN0aW9uIChzdGVwKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpZiAoYW5PYmplY3Qoc3RlcCkuZG9uZSkge1xuICAgICAgICAgICAgICAgIG5vSW5pdGlhbCA/IHJlamVjdChUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBpdGVyYXRvciB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKSkgOiByZXNvbHZlKGFjY3VtdWxhdG9yKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChub0luaXRpYWwpIHtcbiAgICAgICAgICAgICAgICAgIG5vSW5pdGlhbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgYWNjdW11bGF0b3IgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgIGxvb3AoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHJlZHVjZXIoYWNjdW11bGF0b3IsIHZhbHVlKSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICBsb29wKCk7XG4gICAgICAgICAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7IHJlamVjdChlcnIpOyB9XG4gICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgcmVqZWN0KGVycm9yKTsgfVxuICAgICAgfTtcblxuICAgICAgbG9vcCgpO1xuICAgIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnNcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FzeW5jLWl0ZXJhdG9yLWl0ZXJhdGlvbicpLnNvbWU7XG5cbiQoeyB0YXJnZXQ6ICdBc3luY0l0ZXJhdG9yJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUgfSwge1xuICBzb21lOiBmdW5jdGlvbiBzb21lKGZuKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGZuKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Bvc2l0aXZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wb3NpdGl2ZS1pbnRlZ2VyJyk7XG52YXIgY3JlYXRlQXN5bmNJdGVyYXRvclByb3h5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FzeW5jLWl0ZXJhdG9yLWNyZWF0ZS1wcm94eScpO1xuXG52YXIgQXN5bmNJdGVyYXRvclByb3h5ID0gY3JlYXRlQXN5bmNJdGVyYXRvclByb3h5KGZ1bmN0aW9uIChQcm9taXNlLCBhcmdzKSB7XG4gIHZhciBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3I7XG4gIHZhciByZXR1cm5NZXRob2QsIHJlc3VsdDtcbiAgaWYgKCF0aGlzLnJlbWFpbmluZy0tKSB7XG4gICAgcmVzdWx0ID0geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XG4gICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICByZXR1cm5NZXRob2QgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYgKHJldHVybk1ldGhvZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJldHVybk1ldGhvZC5jYWxsKGl0ZXJhdG9yKSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSByZXR1cm4gdGhpcy5uZXh0LmFwcGx5KGl0ZXJhdG9yLCBhcmdzKTtcbn0pO1xuXG4kKHsgdGFyZ2V0OiAnQXN5bmNJdGVyYXRvcicsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlIH0sIHtcbiAgdGFrZTogZnVuY3Rpb24gdGFrZShsaW1pdCkge1xuICAgIHJldHVybiBuZXcgQXN5bmNJdGVyYXRvclByb3h5KHtcbiAgICAgIGl0ZXJhdG9yOiBhbk9iamVjdCh0aGlzKSxcbiAgICAgIHJlbWFpbmluZzogdG9Qb3NpdGl2ZUludGVnZXIobGltaXQpXG4gICAgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVyc1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHRvQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXN5bmMtaXRlcmF0b3ItaXRlcmF0aW9uJykudG9BcnJheTtcblxuJCh7IHRhcmdldDogJ0FzeW5jSXRlcmF0b3InLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSB9LCB7XG4gIHRvQXJyYXk6IGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgcmV0dXJuICR0b0FycmF5KHRoaXMsIHVuZGVmaW5lZCwgW10pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlcmF0b3ItY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBJTkNPUlJFQ1RfUkFOR0UgPSAnSW5jb3JyZWN0IE51bWJlci5yYW5nZSBhcmd1bWVudHMnO1xudmFyIE5VTUVSSUNfUkFOR0VfSVRFUkFUT1IgPSAnTnVtZXJpY1JhbmdlSXRlcmF0b3InO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihOVU1FUklDX1JBTkdFX0lURVJBVE9SKTtcblxudmFyICRSYW5nZUl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihmdW5jdGlvbiBOdW1lcmljUmFuZ2VJdGVyYXRvcihzdGFydCwgZW5kLCBvcHRpb24sIHR5cGUsIHplcm8sIG9uZSkge1xuICBpZiAodHlwZW9mIHN0YXJ0ICE9IHR5cGUgfHwgKGVuZCAhPT0gSW5maW5pdHkgJiYgZW5kICE9PSAtSW5maW5pdHkgJiYgdHlwZW9mIGVuZCAhPSB0eXBlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoSU5DT1JSRUNUX1JBTkdFKTtcbiAgfVxuICBpZiAoc3RhcnQgPT09IEluZmluaXR5IHx8IHN0YXJ0ID09PSAtSW5maW5pdHkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihJTkNPUlJFQ1RfUkFOR0UpO1xuICB9XG4gIHZhciBpZkluY3JlYXNlID0gZW5kID4gc3RhcnQ7XG4gIHZhciBpbmNsdXNpdmVFbmQgPSBmYWxzZTtcbiAgdmFyIHN0ZXA7XG4gIGlmIChvcHRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgIHN0ZXAgPSB1bmRlZmluZWQ7XG4gIH0gZWxzZSBpZiAoaXNPYmplY3Qob3B0aW9uKSkge1xuICAgIHN0ZXAgPSBvcHRpb24uc3RlcDtcbiAgICBpbmNsdXNpdmVFbmQgPSAhIW9wdGlvbi5pbmNsdXNpdmU7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbiA9PSB0eXBlKSB7XG4gICAgc3RlcCA9IG9wdGlvbjtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKElOQ09SUkVDVF9SQU5HRSk7XG4gIH1cbiAgaWYgKHN0ZXAgPT0gbnVsbCkge1xuICAgIHN0ZXAgPSBpZkluY3JlYXNlID8gb25lIDogLW9uZTtcbiAgfVxuICBpZiAodHlwZW9mIHN0ZXAgIT0gdHlwZSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoSU5DT1JSRUNUX1JBTkdFKTtcbiAgfVxuICBpZiAoc3RlcCA9PT0gSW5maW5pdHkgfHwgc3RlcCA9PT0gLUluZmluaXR5IHx8IChzdGVwID09PSB6ZXJvICYmIHN0YXJ0ICE9PSBlbmQpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoSU5DT1JSRUNUX1JBTkdFKTtcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICB2YXIgaGl0c0VuZCA9IHN0YXJ0ICE9IHN0YXJ0IHx8IGVuZCAhPSBlbmQgfHwgc3RlcCAhPSBzdGVwIHx8IChlbmQgPiBzdGFydCkgIT09IChzdGVwID4gemVybyk7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IE5VTUVSSUNfUkFOR0VfSVRFUkFUT1IsXG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIGVuZDogZW5kLFxuICAgIHN0ZXA6IHN0ZXAsXG4gICAgaW5jbHVzaXZlRW5kOiBpbmNsdXNpdmVFbmQsXG4gICAgaGl0c0VuZDogaGl0c0VuZCxcbiAgICBjdXJyZW50Q291bnQ6IHplcm8sXG4gICAgemVybzogemVyb1xuICB9KTtcbiAgaWYgKCFERVNDUklQVE9SUykge1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLmVuZCA9IGVuZDtcbiAgICB0aGlzLnN0ZXAgPSBzdGVwO1xuICAgIHRoaXMuaW5jbHVzaXZlID0gaW5jbHVzaXZlRW5kO1xuICB9XG59LCBOVU1FUklDX1JBTkdFX0lURVJBVE9SLCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICBpZiAoc3RhdGUuaGl0c0VuZCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB2YXIgc3RhcnQgPSBzdGF0ZS5zdGFydDtcbiAgdmFyIGVuZCA9IHN0YXRlLmVuZDtcbiAgdmFyIHN0ZXAgPSBzdGF0ZS5zdGVwO1xuICB2YXIgY3VycmVudFlpZWxkaW5nVmFsdWUgPSBzdGFydCArIChzdGVwICogc3RhdGUuY3VycmVudENvdW50KyspO1xuICBpZiAoY3VycmVudFlpZWxkaW5nVmFsdWUgPT09IGVuZCkgc3RhdGUuaGl0c0VuZCA9IHRydWU7XG4gIHZhciBpbmNsdXNpdmVFbmQgPSBzdGF0ZS5pbmNsdXNpdmVFbmQ7XG4gIHZhciBlbmRDb25kaXRpb247XG4gIGlmIChlbmQgPiBzdGFydCkge1xuICAgIGVuZENvbmRpdGlvbiA9IGluY2x1c2l2ZUVuZCA/IGN1cnJlbnRZaWVsZGluZ1ZhbHVlID4gZW5kIDogY3VycmVudFlpZWxkaW5nVmFsdWUgPj0gZW5kO1xuICB9IGVsc2Uge1xuICAgIGVuZENvbmRpdGlvbiA9IGluY2x1c2l2ZUVuZCA/IGVuZCA+IGN1cnJlbnRZaWVsZGluZ1ZhbHVlIDogZW5kID49IGN1cnJlbnRZaWVsZGluZ1ZhbHVlO1xuICB9XG4gIGlmIChlbmRDb25kaXRpb24pIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiBzdGF0ZS5oaXRzRW5kID0gdHJ1ZSB9O1xuICB9IHJldHVybiB7IHZhbHVlOiBjdXJyZW50WWllbGRpbmdWYWx1ZSwgZG9uZTogZmFsc2UgfTtcbn0pO1xuXG52YXIgZ2V0dGVyID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiB7IGdldDogZm4sIHNldDogZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IGZhbHNlIH07XG59O1xuXG5pZiAoREVTQ1JJUFRPUlMpIHtcbiAgZGVmaW5lUHJvcGVydGllcygkUmFuZ2VJdGVyYXRvci5wcm90b3R5cGUsIHtcbiAgICBzdGFydDogZ2V0dGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnN0YXJ0O1xuICAgIH0pLFxuICAgIGVuZDogZ2V0dGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmVuZDtcbiAgICB9KSxcbiAgICBpbmNsdXNpdmU6IGdldHRlcihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5pbmNsdXNpdmVFbmQ7XG4gICAgfSksXG4gICAgc3RlcDogZ2V0dGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnN0ZXA7XG4gICAgfSlcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gJFJhbmdlSXRlcmF0b3I7XG4iLCIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1iaWdpbnQgLS0gc2FmZSAqL1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgTnVtZXJpY1JhbmdlSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbnVtZXJpYy1yYW5nZS1pdGVyYXRvcicpO1xuXG4vLyBgQmlnSW50LnJhbmdlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLU51bWJlci5yYW5nZVxuaWYgKHR5cGVvZiBCaWdJbnQgPT0gJ2Z1bmN0aW9uJykge1xuICAkKHsgdGFyZ2V0OiAnQmlnSW50Jywgc3RhdDogdHJ1ZSB9LCB7XG4gICAgcmFuZ2U6IGZ1bmN0aW9uIHJhbmdlKHN0YXJ0LCBlbmQsIG9wdGlvbikge1xuICAgICAgcmV0dXJuIG5ldyBOdW1lcmljUmFuZ2VJdGVyYXRvcihzdGFydCwgZW5kLCBvcHRpb24sICdiaWdpbnQnLCBCaWdJbnQoMCksIEJpZ0ludCgxKSk7XG4gICAgfVxuICB9KTtcbn1cbiIsIi8vIFRPRE86IGluIGNvcmUtanNANCwgbW92ZSAvbW9kdWxlcy8gZGVwZW5kZW5jaWVzIHRvIHB1YmxpYyBlbnRyaWVzIGZvciBiZXR0ZXIgb3B0aW1pemF0aW9uIGJ5IHRvb2xzIGxpa2UgYHByZXNldC1lbnZgXG52YXIgTWFwID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5tYXAnKTtcbnZhciBXZWFrTWFwID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9lcy53ZWFrLW1hcCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBOb2RlID0gZnVuY3Rpb24gKCkge1xuICAvLyBrZXlzXG4gIHRoaXMub2JqZWN0ID0gbnVsbDtcbiAgdGhpcy5zeW1ib2wgPSBudWxsO1xuICAvLyBjaGlsZCBub2Rlc1xuICB0aGlzLnByaW1pdGl2ZXMgPSBudWxsO1xuICB0aGlzLm9iamVjdHNCeUluZGV4ID0gY3JlYXRlKG51bGwpO1xufTtcblxuTm9kZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSwgaW5pdGlhbGl6ZXIpIHtcbiAgcmV0dXJuIHRoaXNba2V5XSB8fCAodGhpc1trZXldID0gaW5pdGlhbGl6ZXIoKSk7XG59O1xuXG5Ob2RlLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKGksIGl0LCBJU19PQkpFQ1QpIHtcbiAgdmFyIHN0b3JlID0gSVNfT0JKRUNUXG4gICAgPyB0aGlzLm9iamVjdHNCeUluZGV4W2ldIHx8ICh0aGlzLm9iamVjdHNCeUluZGV4W2ldID0gbmV3IFdlYWtNYXAoKSlcbiAgICA6IHRoaXMucHJpbWl0aXZlcyB8fCAodGhpcy5wcmltaXRpdmVzID0gbmV3IE1hcCgpKTtcbiAgdmFyIGVudHJ5ID0gc3RvcmUuZ2V0KGl0KTtcbiAgaWYgKCFlbnRyeSkgc3RvcmUuc2V0KGl0LCBlbnRyeSA9IG5ldyBOb2RlKCkpO1xuICByZXR1cm4gZW50cnk7XG59O1xuXG52YXIgcm9vdCA9IG5ldyBOb2RlKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgYWN0aXZlID0gcm9vdDtcbiAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpLCBpdDtcbiAgLy8gZm9yIHByZXZlbnQgbGVha2luZywgc3RhcnQgZnJvbSBvYmplY3RzXG4gIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGlmIChpc09iamVjdChpdCA9IGFyZ3VtZW50c1tpXSkpIGFjdGl2ZSA9IGFjdGl2ZS5uZXh0KGksIGl0LCB0cnVlKTtcbiAgfVxuICBpZiAodGhpcyA9PT0gT2JqZWN0ICYmIGFjdGl2ZSA9PT0gcm9vdCkgdGhyb3cgVHlwZUVycm9yKCdDb21wb3NpdGUga2V5cyBtdXN0IGNvbnRhaW4gYSBub24tcHJpbWl0aXZlIGNvbXBvbmVudCcpO1xuICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIWlzT2JqZWN0KGl0ID0gYXJndW1lbnRzW2ldKSkgYWN0aXZlID0gYWN0aXZlLm5leHQoaSwgaXQsIGZhbHNlKTtcbiAgfSByZXR1cm4gYWN0aXZlO1xufTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldENvbXBvc2l0ZUtleU5vZGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29tcG9zaXRlLWtleScpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcblxudmFyIGluaXRpYWxpemVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZnJlZXplID0gZ2V0QnVpbHRJbignT2JqZWN0JywgJ2ZyZWV6ZScpO1xuICByZXR1cm4gZnJlZXplID8gZnJlZXplKGNyZWF0ZShudWxsKSkgOiBjcmVhdGUobnVsbCk7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1yaWNoZXIta2V5cy90cmVlL21hc3Rlci9jb21wb3NpdGVLZXlcbiQoeyBnbG9iYWw6IHRydWUgfSwge1xuICBjb21wb3NpdGVLZXk6IGZ1bmN0aW9uIGNvbXBvc2l0ZUtleSgpIHtcbiAgICByZXR1cm4gZ2V0Q29tcG9zaXRlS2V5Tm9kZS5hcHBseShPYmplY3QsIGFyZ3VtZW50cykuZ2V0KCdvYmplY3QnLCBpbml0aWFsaXplcik7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0Q29tcG9zaXRlS2V5Tm9kZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb21wb3NpdGUta2V5Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcmljaGVyLWtleXMvdHJlZS9tYXN0ZXIvY29tcG9zaXRlS2V5XG4kKHsgZ2xvYmFsOiB0cnVlIH0sIHtcbiAgY29tcG9zaXRlU3ltYm9sOiBmdW5jdGlvbiBjb21wb3NpdGVTeW1ib2woKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ3N0cmluZycpIHJldHVybiBnZXRCdWlsdEluKCdTeW1ib2wnKVsnZm9yJ10oYXJndW1lbnRzWzBdKTtcbiAgICByZXR1cm4gZ2V0Q29tcG9zaXRlS2V5Tm9kZS5hcHBseShudWxsLCBhcmd1bWVudHMpLmdldCgnc3ltYm9sJywgZ2V0QnVpbHRJbignU3ltYm9sJykpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnNcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbnZhciBOYXRpdmVJdGVyYXRvciA9IGdsb2JhbC5JdGVyYXRvcjtcblxuLy8gRkY1Ni0gaGF2ZSBub24tc3RhbmRhcmQgZ2xvYmFsIGhlbHBlciBgSXRlcmF0b3JgXG52YXIgRk9SQ0VEID0gSVNfUFVSRVxuICB8fCAhaXNDYWxsYWJsZShOYXRpdmVJdGVyYXRvcilcbiAgfHwgTmF0aXZlSXRlcmF0b3IucHJvdG90eXBlICE9PSBJdGVyYXRvclByb3RvdHlwZVxuICAvLyBGRjQ0LSBub24tc3RhbmRhcmQgYEl0ZXJhdG9yYCBwYXNzZXMgcHJldmlvdXMgdGVzdHNcbiAgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHsgTmF0aXZlSXRlcmF0b3Ioe30pOyB9KTtcblxudmFyIEl0ZXJhdG9yQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBJdGVyYXRvcigpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCBJdGVyYXRvckNvbnN0cnVjdG9yKTtcbn07XG5cbmlmICghaGFzT3duKEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHKSkge1xuICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoSXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsICdJdGVyYXRvcicpO1xufVxuXG5pZiAoRk9SQ0VEIHx8ICFoYXNPd24oSXRlcmF0b3JQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicpIHx8IEl0ZXJhdG9yUHJvdG90eXBlLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcbiAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhdG9yUHJvdG90eXBlLCAnY29uc3RydWN0b3InLCBJdGVyYXRvckNvbnN0cnVjdG9yKTtcbn1cblxuSXRlcmF0b3JDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBJdGVyYXRvclByb3RvdHlwZTtcblxuJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBJdGVyYXRvcjogSXRlcmF0b3JDb25zdHJ1Y3RvclxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZS1hbGwnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5leHRIYW5kbGVyLCBJU19JVEVSQVRPUikge1xuICB2YXIgSXRlcmF0b3JQcm94eSA9IGZ1bmN0aW9uIEl0ZXJhdG9yKHN0YXRlKSB7XG4gICAgc3RhdGUubmV4dCA9IGFDYWxsYWJsZShzdGF0ZS5pdGVyYXRvci5uZXh0KTtcbiAgICBzdGF0ZS5kb25lID0gZmFsc2U7XG4gICAgc3RhdGUuaWdub3JlQXJnID0gIUlTX0lURVJBVE9SO1xuICAgIHNldEludGVybmFsU3RhdGUodGhpcywgc3RhdGUpO1xuICB9O1xuXG4gIEl0ZXJhdG9yUHJveHkucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKSwge1xuICAgIG5leHQ6IGZ1bmN0aW9uIG5leHQoYXJnKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID8gW3N0YXRlLmlnbm9yZUFyZyA/IHVuZGVmaW5lZCA6IGFyZ10gOiBJU19JVEVSQVRPUiA/IFtdIDogW3VuZGVmaW5lZF07XG4gICAgICBzdGF0ZS5pZ25vcmVBcmcgPSBmYWxzZTtcbiAgICAgIHZhciByZXN1bHQgPSBzdGF0ZS5kb25lID8gdW5kZWZpbmVkIDogbmV4dEhhbmRsZXIuY2FsbChzdGF0ZSwgYXJncyk7XG4gICAgICByZXR1cm4geyBkb25lOiBzdGF0ZS5kb25lLCB2YWx1ZTogcmVzdWx0IH07XG4gICAgfSxcbiAgICAncmV0dXJuJzogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgdmFyIGl0ZXJhdG9yID0gc3RhdGUuaXRlcmF0b3I7XG4gICAgICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgICAgIHZhciAkJHJldHVybiA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6ICQkcmV0dXJuID8gYW5PYmplY3QoJCRyZXR1cm4uY2FsbChpdGVyYXRvciwgdmFsdWUpKS52YWx1ZSA6IHZhbHVlIH07XG4gICAgfSxcbiAgICAndGhyb3cnOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICB2YXIgaXRlcmF0b3IgPSBzdGF0ZS5pdGVyYXRvcjtcbiAgICAgIHN0YXRlLmRvbmUgPSB0cnVlO1xuICAgICAgdmFyICQkdGhyb3cgPSBnZXRNZXRob2QoaXRlcmF0b3IsICd0aHJvdycpO1xuICAgICAgaWYgKCQkdGhyb3cpIHJldHVybiAkJHRocm93LmNhbGwoaXRlcmF0b3IsIHZhbHVlKTtcbiAgICAgIHRocm93IHZhbHVlO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKCFJU19JVEVSQVRPUikge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYXRvclByb3h5LnByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRywgJ0dlbmVyYXRvcicpO1xuICB9XG5cbiAgcmV0dXJuIEl0ZXJhdG9yUHJveHk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVyc1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgY3JlYXRlSXRlcmF0b3JQcm94eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtcHJveHknKTtcblxudmFyIEl0ZXJhdG9yUHJveHkgPSBjcmVhdGVJdGVyYXRvclByb3h5KGZ1bmN0aW9uIChhcmdzKSB7XG4gIHZhciByZXN1bHQgPSBhbk9iamVjdCh0aGlzLm5leHQuYXBwbHkodGhpcy5pdGVyYXRvciwgYXJncykpO1xuICB2YXIgZG9uZSA9IHRoaXMuZG9uZSA9ICEhcmVzdWx0LmRvbmU7XG4gIGlmICghZG9uZSkgcmV0dXJuIFt0aGlzLmluZGV4KyssIHJlc3VsdC52YWx1ZV07XG59KTtcblxuJCh7IHRhcmdldDogJ0l0ZXJhdG9yJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUgfSwge1xuICBhc0luZGV4ZWRQYWlyczogZnVuY3Rpb24gYXNJbmRleGVkUGFpcnMoKSB7XG4gICAgcmV0dXJuIG5ldyBJdGVyYXRvclByb3h5KHtcbiAgICAgIGl0ZXJhdG9yOiBhbk9iamVjdCh0aGlzKSxcbiAgICAgIGluZGV4OiAwXG4gICAgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVyc1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qb3NpdGl2ZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcG9zaXRpdmUtaW50ZWdlcicpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yUHJveHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLXByb3h5Jyk7XG5cbnZhciBJdGVyYXRvclByb3h5ID0gY3JlYXRlSXRlcmF0b3JQcm94eShmdW5jdGlvbiAoYXJncykge1xuICB2YXIgaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yO1xuICB2YXIgbmV4dCA9IHRoaXMubmV4dDtcbiAgdmFyIHJlc3VsdCwgZG9uZTtcbiAgd2hpbGUgKHRoaXMucmVtYWluaW5nKSB7XG4gICAgdGhpcy5yZW1haW5pbmctLTtcbiAgICByZXN1bHQgPSBhbk9iamVjdChuZXh0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICBkb25lID0gdGhpcy5kb25lID0gISFyZXN1bHQuZG9uZTtcbiAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICB9XG4gIHJlc3VsdCA9IGFuT2JqZWN0KG5leHQuYXBwbHkoaXRlcmF0b3IsIGFyZ3MpKTtcbiAgZG9uZSA9IHRoaXMuZG9uZSA9ICEhcmVzdWx0LmRvbmU7XG4gIGlmICghZG9uZSkgcmV0dXJuIHJlc3VsdC52YWx1ZTtcbn0pO1xuXG4kKHsgdGFyZ2V0OiAnSXRlcmF0b3InLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSB9LCB7XG4gIGRyb3A6IGZ1bmN0aW9uIGRyb3AobGltaXQpIHtcbiAgICByZXR1cm4gbmV3IEl0ZXJhdG9yUHJveHkoe1xuICAgICAgaXRlcmF0b3I6IGFuT2JqZWN0KHRoaXMpLFxuICAgICAgcmVtYWluaW5nOiB0b1Bvc2l0aXZlSW50ZWdlcihsaW1pdClcbiAgICB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG4kKHsgdGFyZ2V0OiAnSXRlcmF0b3InLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSB9LCB7XG4gIGV2ZXJ5OiBmdW5jdGlvbiBldmVyeShmbikge1xuICAgIGFuT2JqZWN0KHRoaXMpO1xuICAgIGFDYWxsYWJsZShmbik7XG4gICAgcmV0dXJuICFpdGVyYXRlKHRoaXMsIGZ1bmN0aW9uICh2YWx1ZSwgc3RvcCkge1xuICAgICAgaWYgKCFmbih2YWx1ZSkpIHJldHVybiBzdG9wKCk7XG4gICAgfSwgeyBJU19JVEVSQVRPUjogdHJ1ZSwgSU5URVJSVVBURUQ6IHRydWUgfSkuc3RvcHBlZDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yUHJveHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLXByb3h5Jyk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZycpO1xuXG52YXIgSXRlcmF0b3JQcm94eSA9IGNyZWF0ZUl0ZXJhdG9yUHJveHkoZnVuY3Rpb24gKGFyZ3MpIHtcbiAgdmFyIGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcjtcbiAgdmFyIGZpbHRlcmVyID0gdGhpcy5maWx0ZXJlcjtcbiAgdmFyIG5leHQgPSB0aGlzLm5leHQ7XG4gIHZhciByZXN1bHQsIGRvbmUsIHZhbHVlO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHJlc3VsdCA9IGFuT2JqZWN0KG5leHQuYXBwbHkoaXRlcmF0b3IsIGFyZ3MpKTtcbiAgICBkb25lID0gdGhpcy5kb25lID0gISFyZXN1bHQuZG9uZTtcbiAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgIGlmIChjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nKGl0ZXJhdG9yLCBmaWx0ZXJlciwgdmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiAnSXRlcmF0b3InLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSB9LCB7XG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGZpbHRlcmVyKSB7XG4gICAgcmV0dXJuIG5ldyBJdGVyYXRvclByb3h5KHtcbiAgICAgIGl0ZXJhdG9yOiBhbk9iamVjdCh0aGlzKSxcbiAgICAgIGZpbHRlcmVyOiBhQ2FsbGFibGUoZmlsdGVyZXIpXG4gICAgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVyc1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuJCh7IHRhcmdldDogJ0l0ZXJhdG9yJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUgfSwge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGZuKSB7XG4gICAgYW5PYmplY3QodGhpcyk7XG4gICAgYUNhbGxhYmxlKGZuKTtcbiAgICByZXR1cm4gaXRlcmF0ZSh0aGlzLCBmdW5jdGlvbiAodmFsdWUsIHN0b3ApIHtcbiAgICAgIGlmIChmbih2YWx1ZSkpIHJldHVybiBzdG9wKHZhbHVlKTtcbiAgICB9LCB7IElTX0lURVJBVE9SOiB0cnVlLCBJTlRFUlJVUFRFRDogdHJ1ZSB9KS5yZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVyc1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgY3JlYXRlSXRlcmF0b3JQcm94eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtcHJveHknKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbnZhciBJdGVyYXRvclByb3h5ID0gY3JlYXRlSXRlcmF0b3JQcm94eShmdW5jdGlvbiAoKSB7XG4gIHZhciBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3I7XG4gIHZhciBtYXBwZXIgPSB0aGlzLm1hcHBlcjtcbiAgdmFyIHJlc3VsdCwgbWFwcGVkLCBpdGVyYXRvck1ldGhvZCwgaW5uZXJJdGVyYXRvcjtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoaW5uZXJJdGVyYXRvciA9IHRoaXMuaW5uZXJJdGVyYXRvcikge1xuICAgICAgICByZXN1bHQgPSBhbk9iamVjdCh0aGlzLmlubmVyTmV4dC5jYWxsKGlubmVySXRlcmF0b3IpKTtcbiAgICAgICAgaWYgKCFyZXN1bHQuZG9uZSkgcmV0dXJuIHJlc3VsdC52YWx1ZTtcbiAgICAgICAgdGhpcy5pbm5lckl0ZXJhdG9yID0gdGhpcy5pbm5lck5leHQgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXN1bHQgPSBhbk9iamVjdCh0aGlzLm5leHQuY2FsbChpdGVyYXRvcikpO1xuXG4gICAgICBpZiAodGhpcy5kb25lID0gISFyZXN1bHQuZG9uZSkgcmV0dXJuO1xuXG4gICAgICBtYXBwZWQgPSBtYXBwZXIocmVzdWx0LnZhbHVlKTtcbiAgICAgIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2QobWFwcGVkKTtcblxuICAgICAgaWYgKCFpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJy5mbGF0TWFwIGNhbGxiYWNrIHNob3VsZCByZXR1cm4gYW4gaXRlcmFibGUgb2JqZWN0Jyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaW5uZXJJdGVyYXRvciA9IGlubmVySXRlcmF0b3IgPSBhbk9iamVjdChpdGVyYXRvck1ldGhvZC5jYWxsKG1hcHBlZCkpO1xuICAgICAgdGhpcy5pbm5lck5leHQgPSBhQ2FsbGFibGUoaW5uZXJJdGVyYXRvci5uZXh0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICAgIH1cbiAgfVxufSk7XG5cbiQoeyB0YXJnZXQ6ICdJdGVyYXRvcicsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlIH0sIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChtYXBwZXIpIHtcbiAgICByZXR1cm4gbmV3IEl0ZXJhdG9yUHJveHkoe1xuICAgICAgaXRlcmF0b3I6IGFuT2JqZWN0KHRoaXMpLFxuICAgICAgbWFwcGVyOiBhQ2FsbGFibGUobWFwcGVyKSxcbiAgICAgIGlubmVySXRlcmF0b3I6IG51bGwsXG4gICAgICBpbm5lck5leHQ6IG51bGxcbiAgICB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuJCh7IHRhcmdldDogJ0l0ZXJhdG9yJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUgfSwge1xuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gICAgaXRlcmF0ZShhbk9iamVjdCh0aGlzKSwgZm4sIHsgSVNfSVRFUkFUT1I6IHRydWUgfSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVyc1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBjcmVhdGVJdGVyYXRvclByb3h5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1wcm94eScpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcblxudmFyIGlzUHJvdG90eXBlT2YgPSB7fS5pc1Byb3RvdHlwZU9mO1xuXG52YXIgSXRlcmF0b3JQcm94eSA9IGNyZWF0ZUl0ZXJhdG9yUHJveHkoZnVuY3Rpb24gKGFyZ3MpIHtcbiAgdmFyIHJlc3VsdCA9IGFuT2JqZWN0KHRoaXMubmV4dC5hcHBseSh0aGlzLml0ZXJhdG9yLCBhcmdzKSk7XG4gIHZhciBkb25lID0gdGhpcy5kb25lID0gISFyZXN1bHQuZG9uZTtcbiAgaWYgKCFkb25lKSByZXR1cm4gcmVzdWx0LnZhbHVlO1xufSwgdHJ1ZSk7XG5cbiQoeyB0YXJnZXQ6ICdJdGVyYXRvcicsIHN0YXQ6IHRydWUgfSwge1xuICBmcm9tOiBmdW5jdGlvbiBmcm9tKE8pIHtcbiAgICB2YXIgb2JqZWN0ID0gdG9PYmplY3QoTyk7XG4gICAgdmFyIHVzaW5nSXRlcmF0b3IgPSBnZXRJdGVyYXRvck1ldGhvZChvYmplY3QpO1xuICAgIHZhciBpdGVyYXRvcjtcbiAgICBpZiAodXNpbmdJdGVyYXRvcikge1xuICAgICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihvYmplY3QsIHVzaW5nSXRlcmF0b3IpO1xuICAgICAgaWYgKGlzUHJvdG90eXBlT2YuY2FsbChJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3IpKSByZXR1cm4gaXRlcmF0b3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZXJhdG9yID0gb2JqZWN0O1xuICAgIH0gcmV0dXJuIG5ldyBJdGVyYXRvclByb3h5KHsgaXRlcmF0b3I6IGl0ZXJhdG9yIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnNcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgY3JlYXRlSXRlcmF0b3JQcm94eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtcHJveHknKTtcbnZhciBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nJyk7XG5cbnZhciBJdGVyYXRvclByb3h5ID0gY3JlYXRlSXRlcmF0b3JQcm94eShmdW5jdGlvbiAoYXJncykge1xuICB2YXIgaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yO1xuICB2YXIgcmVzdWx0ID0gYW5PYmplY3QodGhpcy5uZXh0LmFwcGx5KGl0ZXJhdG9yLCBhcmdzKSk7XG4gIHZhciBkb25lID0gdGhpcy5kb25lID0gISFyZXN1bHQuZG9uZTtcbiAgaWYgKCFkb25lKSByZXR1cm4gY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgdGhpcy5tYXBwZXIsIHJlc3VsdC52YWx1ZSk7XG59KTtcblxuJCh7IHRhcmdldDogJ0l0ZXJhdG9yJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUgfSwge1xuICBtYXA6IGZ1bmN0aW9uIG1hcChtYXBwZXIpIHtcbiAgICByZXR1cm4gbmV3IEl0ZXJhdG9yUHJveHkoe1xuICAgICAgaXRlcmF0b3I6IGFuT2JqZWN0KHRoaXMpLFxuICAgICAgbWFwcGVyOiBhQ2FsbGFibGUobWFwcGVyKVxuICAgIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnNcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbiQoeyB0YXJnZXQ6ICdJdGVyYXRvcicsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlIH0sIHtcbiAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UocmVkdWNlciAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIGFuT2JqZWN0KHRoaXMpO1xuICAgIGFDYWxsYWJsZShyZWR1Y2VyKTtcbiAgICB2YXIgbm9Jbml0aWFsID0gYXJndW1lbnRzLmxlbmd0aCA8IDI7XG4gICAgdmFyIGFjY3VtdWxhdG9yID0gbm9Jbml0aWFsID8gdW5kZWZpbmVkIDogYXJndW1lbnRzWzFdO1xuICAgIGl0ZXJhdGUodGhpcywgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAobm9Jbml0aWFsKSB7XG4gICAgICAgIG5vSW5pdGlhbCA9IGZhbHNlO1xuICAgICAgICBhY2N1bXVsYXRvciA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWNjdW11bGF0b3IgPSByZWR1Y2VyKGFjY3VtdWxhdG9yLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSwgeyBJU19JVEVSQVRPUjogdHJ1ZSB9KTtcbiAgICBpZiAobm9Jbml0aWFsKSB0aHJvdyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBpdGVyYXRvciB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVyc1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuJCh7IHRhcmdldDogJ0l0ZXJhdG9yJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUgfSwge1xuICBzb21lOiBmdW5jdGlvbiBzb21lKGZuKSB7XG4gICAgYW5PYmplY3QodGhpcyk7XG4gICAgYUNhbGxhYmxlKGZuKTtcbiAgICByZXR1cm4gaXRlcmF0ZSh0aGlzLCBmdW5jdGlvbiAodmFsdWUsIHN0b3ApIHtcbiAgICAgIGlmIChmbih2YWx1ZSkpIHJldHVybiBzdG9wKCk7XG4gICAgfSwgeyBJU19JVEVSQVRPUjogdHJ1ZSwgSU5URVJSVVBURUQ6IHRydWUgfSkuc3RvcHBlZDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Bvc2l0aXZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wb3NpdGl2ZS1pbnRlZ2VyJyk7XG52YXIgY3JlYXRlSXRlcmF0b3JQcm94eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtcHJveHknKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbnZhciBJdGVyYXRvclByb3h5ID0gY3JlYXRlSXRlcmF0b3JQcm94eShmdW5jdGlvbiAoYXJncykge1xuICB2YXIgaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yO1xuICBpZiAoIXRoaXMucmVtYWluaW5nLS0pIHtcbiAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgIHJldHVybiBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgdW5kZWZpbmVkKTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gYW5PYmplY3QodGhpcy5uZXh0LmFwcGx5KGl0ZXJhdG9yLCBhcmdzKSk7XG4gIHZhciBkb25lID0gdGhpcy5kb25lID0gISFyZXN1bHQuZG9uZTtcbiAgaWYgKCFkb25lKSByZXR1cm4gcmVzdWx0LnZhbHVlO1xufSk7XG5cbiQoeyB0YXJnZXQ6ICdJdGVyYXRvcicsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlIH0sIHtcbiAgdGFrZTogZnVuY3Rpb24gdGFrZShsaW1pdCkge1xuICAgIHJldHVybiBuZXcgSXRlcmF0b3JQcm94eSh7XG4gICAgICBpdGVyYXRvcjogYW5PYmplY3QodGhpcyksXG4gICAgICByZW1haW5pbmc6IHRvUG9zaXRpdmVJbnRlZ2VyKGxpbWl0KVxuICAgIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnNcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgcHVzaCA9IFtdLnB1c2g7XG5cbiQoeyB0YXJnZXQ6ICdJdGVyYXRvcicsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlIH0sIHtcbiAgdG9BcnJheTogZnVuY3Rpb24gdG9BcnJheSgpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgaXRlcmF0ZShhbk9iamVjdCh0aGlzKSwgcHVzaCwgeyB0aGF0OiByZXN1bHQsIElTX0lURVJBVE9SOiB0cnVlIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L2NvbGxlY3Rpb24tbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoLyogLi4uZWxlbWVudHMgKi8pIHtcbiAgdmFyIGNvbGxlY3Rpb24gPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlbW92ZXIgPSBhQ2FsbGFibGUoY29sbGVjdGlvblsnZGVsZXRlJ10pO1xuICB2YXIgYWxsRGVsZXRlZCA9IHRydWU7XG4gIHZhciB3YXNEZWxldGVkO1xuICBmb3IgKHZhciBrID0gMCwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsgayA8IGxlbjsgaysrKSB7XG4gICAgd2FzRGVsZXRlZCA9IHJlbW92ZXIuY2FsbChjb2xsZWN0aW9uLCBhcmd1bWVudHNba10pO1xuICAgIGFsbERlbGV0ZWQgPSBhbGxEZWxldGVkICYmIHdhc0RlbGV0ZWQ7XG4gIH1cbiAgcmV0dXJuICEhYWxsRGVsZXRlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBjb2xsZWN0aW9uRGVsZXRlQWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24tZGVsZXRlLWFsbCcpO1xuXG4vLyBgTWFwLnByb3RvdHlwZS5kZWxldGVBbGxgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnTWFwJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIGRlbGV0ZUFsbDogZnVuY3Rpb24gZGVsZXRlQWxsKC8qIC4uLmVsZW1lbnRzICovKSB7XG4gICAgcmV0dXJuIGNvbGxlY3Rpb25EZWxldGVBbGwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGBNYXAucHJvdG90eXBlLmVtcGxhY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RodW1ic3VwZXAvcHJvcG9zYWwtdXBzZXJ0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGVtcGxhY2Uoa2V5LCBoYW5kbGVyKSB7XG4gIHZhciBtYXAgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHZhbHVlID0gKG1hcC5oYXMoa2V5KSAmJiAndXBkYXRlJyBpbiBoYW5kbGVyKVxuICAgID8gaGFuZGxlci51cGRhdGUobWFwLmdldChrZXkpLCBrZXksIG1hcClcbiAgICA6IGhhbmRsZXIuaW5zZXJ0KGtleSwgbWFwKTtcbiAgbWFwLnNldChrZXksIHZhbHVlKTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyICRlbXBsYWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hcC1lbXBsYWNlJyk7XG5cbi8vIGBNYXAucHJvdG90eXBlLmVtcGxhY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RodW1ic3VwZXAvcHJvcG9zYWwtdXBzZXJ0XG4kKHsgdGFyZ2V0OiAnTWFwJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIGVtcGxhY2U6ICRlbXBsYWNlXG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXAgLS0gc2FmZVxuICByZXR1cm4gTWFwLnByb3RvdHlwZS5lbnRyaWVzLmNhbGwoaXQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgZ2V0TWFwSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1hcC1pdGVyYXRvcicpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG4vLyBgTWFwLnByb3RvdHlwZS5ldmVyeWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdNYXAnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIG1hcCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBpdGVyYXRvciA9IGdldE1hcEl0ZXJhdG9yKG1hcCk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICByZXR1cm4gIWl0ZXJhdGUoaXRlcmF0b3IsIGZ1bmN0aW9uIChrZXksIHZhbHVlLCBzdG9wKSB7XG4gICAgICBpZiAoIWJvdW5kRnVuY3Rpb24odmFsdWUsIGtleSwgbWFwKSkgcmV0dXJuIHN0b3AoKTtcbiAgICB9LCB7IEFTX0VOVFJJRVM6IHRydWUsIElTX0lURVJBVE9SOiB0cnVlLCBJTlRFUlJVUFRFRDogdHJ1ZSB9KS5zdG9wcGVkO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0TWFwSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1hcC1pdGVyYXRvcicpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG4vLyBgTWFwLnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnTWFwJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIG1hcCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBpdGVyYXRvciA9IGdldE1hcEl0ZXJhdG9yKG1hcCk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICB2YXIgbmV3TWFwID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IobWFwLCBnZXRCdWlsdEluKCdNYXAnKSkpKCk7XG4gICAgdmFyIHNldHRlciA9IGFDYWxsYWJsZShuZXdNYXAuc2V0KTtcbiAgICBpdGVyYXRlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKGJvdW5kRnVuY3Rpb24odmFsdWUsIGtleSwgbWFwKSkgc2V0dGVyLmNhbGwobmV3TWFwLCBrZXksIHZhbHVlKTtcbiAgICB9LCB7IEFTX0VOVFJJRVM6IHRydWUsIElTX0lURVJBVE9SOiB0cnVlIH0pO1xuICAgIHJldHVybiBuZXdNYXA7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBnZXRNYXBJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWFwLWl0ZXJhdG9yJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG5cbi8vIGBNYXAucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnTWFwJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIGZpbmQ6IGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgbWFwID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIGl0ZXJhdG9yID0gZ2V0TWFwSXRlcmF0b3IobWFwKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDMpO1xuICAgIHJldHVybiBpdGVyYXRlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgc3RvcCkge1xuICAgICAgaWYgKGJvdW5kRnVuY3Rpb24odmFsdWUsIGtleSwgbWFwKSkgcmV0dXJuIHN0b3AodmFsdWUpO1xuICAgIH0sIHsgQVNfRU5UUklFUzogdHJ1ZSwgSVNfSVRFUkFUT1I6IHRydWUsIElOVEVSUlVQVEVEOiB0cnVlIH0pLnJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGdldE1hcEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tYXAtaXRlcmF0b3InKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcblxuLy8gYE1hcC5wcm90b3R5cGUuZmluZEtleWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdNYXAnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAgZmluZEtleTogZnVuY3Rpb24gZmluZEtleShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBtYXAgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgaXRlcmF0b3IgPSBnZXRNYXBJdGVyYXRvcihtYXApO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMyk7XG4gICAgcmV0dXJuIGl0ZXJhdGUoaXRlcmF0b3IsIGZ1bmN0aW9uIChrZXksIHZhbHVlLCBzdG9wKSB7XG4gICAgICBpZiAoYm91bmRGdW5jdGlvbih2YWx1ZSwga2V5LCBtYXApKSByZXR1cm4gc3RvcChrZXkpO1xuICAgIH0sIHsgQVNfRU5UUklFUzogdHJ1ZSwgSVNfSVRFUkFUT1I6IHRydWUsIElOVEVSUlVQVEVEOiB0cnVlIH0pLnJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jb25zdHJ1Y3RvcicpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZnJvbShzb3VyY2UgLyogLCBtYXBGbiwgdGhpc0FyZyAqLykge1xuICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIG1hcEZuID0gbGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIG1hcHBpbmcsIGFycmF5LCBuLCBib3VuZEZ1bmN0aW9uO1xuICBhQ29uc3RydWN0b3IodGhpcyk7XG4gIG1hcHBpbmcgPSBtYXBGbiAhPT0gdW5kZWZpbmVkO1xuICBpZiAobWFwcGluZykgYUNhbGxhYmxlKG1hcEZuKTtcbiAgaWYgKHNvdXJjZSA9PSB1bmRlZmluZWQpIHJldHVybiBuZXcgdGhpcygpO1xuICBhcnJheSA9IFtdO1xuICBpZiAobWFwcGluZykge1xuICAgIG4gPSAwO1xuICAgIGJvdW5kRnVuY3Rpb24gPSBiaW5kKG1hcEZuLCBsZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkLCAyKTtcbiAgICBpdGVyYXRlKHNvdXJjZSwgZnVuY3Rpb24gKG5leHRJdGVtKSB7XG4gICAgICBhcnJheS5wdXNoKGJvdW5kRnVuY3Rpb24obmV4dEl0ZW0sIG4rKykpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJhdGUoc291cmNlLCBhcnJheS5wdXNoLCB7IHRoYXQ6IGFycmF5IH0pO1xuICB9XG4gIHJldHVybiBuZXcgdGhpcyhhcnJheSk7XG59O1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLWZyb20nKTtcblxuLy8gYE1hcC5mcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5mcm9tXG4kKHsgdGFyZ2V0OiAnTWFwJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGZyb206IGZyb21cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcblxuLy8gYE1hcC5ncm91cEJ5YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNvbGxlY3Rpb24tbWV0aG9kc1xuJCh7IHRhcmdldDogJ01hcCcsIHN0YXQ6IHRydWUgfSwge1xuICBncm91cEJ5OiBmdW5jdGlvbiBncm91cEJ5KGl0ZXJhYmxlLCBrZXlEZXJpdmF0aXZlKSB7XG4gICAgYUNhbGxhYmxlKGtleURlcml2YXRpdmUpO1xuICAgIHZhciBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKGl0ZXJhYmxlKTtcbiAgICB2YXIgbmV3TWFwID0gbmV3IHRoaXMoKTtcbiAgICB2YXIgaGFzID0gYUNhbGxhYmxlKG5ld01hcC5oYXMpO1xuICAgIHZhciBnZXQgPSBhQ2FsbGFibGUobmV3TWFwLmdldCk7XG4gICAgdmFyIHNldCA9IGFDYWxsYWJsZShuZXdNYXAuc2V0KTtcbiAgICBpdGVyYXRlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgdmFyIGRlcml2ZWRLZXkgPSBrZXlEZXJpdmF0aXZlKGVsZW1lbnQpO1xuICAgICAgaWYgKCFoYXMuY2FsbChuZXdNYXAsIGRlcml2ZWRLZXkpKSBzZXQuY2FsbChuZXdNYXAsIGRlcml2ZWRLZXksIFtlbGVtZW50XSk7XG4gICAgICBlbHNlIGdldC5jYWxsKG5ld01hcCwgZGVyaXZlZEtleSkucHVzaChlbGVtZW50KTtcbiAgICB9LCB7IElTX0lURVJBVE9SOiB0cnVlIH0pO1xuICAgIHJldHVybiBuZXdNYXA7XG4gIH1cbn0pO1xuIiwiLy8gYFNhbWVWYWx1ZVplcm9gIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zYW1ldmFsdWV6ZXJvXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gIHJldHVybiB4ID09PSB5IHx8IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0TWFwSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1hcC1pdGVyYXRvcicpO1xudmFyIHNhbWVWYWx1ZVplcm8gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2FtZS12YWx1ZS16ZXJvJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG5cbi8vIGBNYXAucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNvbGxlY3Rpb24tbWV0aG9kc1xuJCh7IHRhcmdldDogJ01hcCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCkge1xuICAgIHJldHVybiBpdGVyYXRlKGdldE1hcEl0ZXJhdG9yKGFuT2JqZWN0KHRoaXMpKSwgZnVuY3Rpb24gKGtleSwgdmFsdWUsIHN0b3ApIHtcbiAgICAgIGlmIChzYW1lVmFsdWVaZXJvKHZhbHVlLCBzZWFyY2hFbGVtZW50KSkgcmV0dXJuIHN0b3AoKTtcbiAgICB9LCB7IEFTX0VOVFJJRVM6IHRydWUsIElTX0lURVJBVE9SOiB0cnVlLCBJTlRFUlJVUFRFRDogdHJ1ZSB9KS5zdG9wcGVkO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbi8vIGBNYXAua2V5QnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnTWFwJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGtleUJ5OiBmdW5jdGlvbiBrZXlCeShpdGVyYWJsZSwga2V5RGVyaXZhdGl2ZSkge1xuICAgIHZhciBuZXdNYXAgPSBuZXcgdGhpcygpO1xuICAgIGFDYWxsYWJsZShrZXlEZXJpdmF0aXZlKTtcbiAgICB2YXIgc2V0dGVyID0gYUNhbGxhYmxlKG5ld01hcC5zZXQpO1xuICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICBzZXR0ZXIuY2FsbChuZXdNYXAsIGtleURlcml2YXRpdmUoZWxlbWVudCksIGVsZW1lbnQpO1xuICAgIH0pO1xuICAgIHJldHVybiBuZXdNYXA7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0TWFwSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1hcC1pdGVyYXRvcicpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG4vLyBgTWFwLnByb3RvdHlwZS5rZXlPZmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdNYXAnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAga2V5T2Y6IGZ1bmN0aW9uIGtleU9mKHNlYXJjaEVsZW1lbnQpIHtcbiAgICByZXR1cm4gaXRlcmF0ZShnZXRNYXBJdGVyYXRvcihhbk9iamVjdCh0aGlzKSksIGZ1bmN0aW9uIChrZXksIHZhbHVlLCBzdG9wKSB7XG4gICAgICBpZiAodmFsdWUgPT09IHNlYXJjaEVsZW1lbnQpIHJldHVybiBzdG9wKGtleSk7XG4gICAgfSwgeyBBU19FTlRSSUVTOiB0cnVlLCBJU19JVEVSQVRPUjogdHJ1ZSwgSU5URVJSVVBURUQ6IHRydWUgfSkucmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0TWFwSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1hcC1pdGVyYXRvcicpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG4vLyBgTWFwLnByb3RvdHlwZS5tYXBLZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNvbGxlY3Rpb24tbWV0aG9kc1xuJCh7IHRhcmdldDogJ01hcCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICBtYXBLZXlzOiBmdW5jdGlvbiBtYXBLZXlzKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIG1hcCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBpdGVyYXRvciA9IGdldE1hcEl0ZXJhdG9yKG1hcCk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICB2YXIgbmV3TWFwID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IobWFwLCBnZXRCdWlsdEluKCdNYXAnKSkpKCk7XG4gICAgdmFyIHNldHRlciA9IGFDYWxsYWJsZShuZXdNYXAuc2V0KTtcbiAgICBpdGVyYXRlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgc2V0dGVyLmNhbGwobmV3TWFwLCBib3VuZEZ1bmN0aW9uKHZhbHVlLCBrZXksIG1hcCksIHZhbHVlKTtcbiAgICB9LCB7IEFTX0VOVFJJRVM6IHRydWUsIElTX0lURVJBVE9SOiB0cnVlIH0pO1xuICAgIHJldHVybiBuZXdNYXA7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBnZXRNYXBJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWFwLWl0ZXJhdG9yJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG5cbi8vIGBNYXAucHJvdG90eXBlLm1hcFZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdNYXAnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAgbWFwVmFsdWVzOiBmdW5jdGlvbiBtYXBWYWx1ZXMoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgbWFwID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIGl0ZXJhdG9yID0gZ2V0TWFwSXRlcmF0b3IobWFwKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDMpO1xuICAgIHZhciBuZXdNYXAgPSBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihtYXAsIGdldEJ1aWx0SW4oJ01hcCcpKSkoKTtcbiAgICB2YXIgc2V0dGVyID0gYUNhbGxhYmxlKG5ld01hcC5zZXQpO1xuICAgIGl0ZXJhdGUoaXRlcmF0b3IsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICBzZXR0ZXIuY2FsbChuZXdNYXAsIGtleSwgYm91bmRGdW5jdGlvbih2YWx1ZSwga2V5LCBtYXApKTtcbiAgICB9LCB7IEFTX0VOVFJJRVM6IHRydWUsIElTX0lURVJBVE9SOiB0cnVlIH0pO1xuICAgIHJldHVybiBuZXdNYXA7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcblxuLy8gYE1hcC5wcm90b3R5cGUubWVyZ2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnTWFwJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIG1lcmdlOiBmdW5jdGlvbiBtZXJnZShpdGVyYWJsZSAvKiAuLi5pdGVyYmxlcyAqLykge1xuICAgIHZhciBtYXAgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgc2V0dGVyID0gYUNhbGxhYmxlKG1hcC5zZXQpO1xuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGFyZ3VtZW50c0xlbmd0aCkge1xuICAgICAgaXRlcmF0ZShhcmd1bWVudHNbaSsrXSwgc2V0dGVyLCB7IHRoYXQ6IG1hcCwgQVNfRU5UUklFUzogdHJ1ZSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG9mKCkge1xuICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIEEgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgd2hpbGUgKGxlbmd0aC0tKSBBW2xlbmd0aF0gPSBhcmd1bWVudHNbbGVuZ3RoXTtcbiAgcmV0dXJuIG5ldyB0aGlzKEEpO1xufTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24tb2YnKTtcblxuLy8gYE1hcC5vZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1tYXAub2ZcbiQoeyB0YXJnZXQ6ICdNYXAnLCBzdGF0OiB0cnVlIH0sIHtcbiAgb2Y6IG9mXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgZ2V0TWFwSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1hcC1pdGVyYXRvcicpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG4vLyBgTWFwLnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnTWFwJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICB2YXIgbWFwID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIGl0ZXJhdG9yID0gZ2V0TWFwSXRlcmF0b3IobWFwKTtcbiAgICB2YXIgbm9Jbml0aWFsID0gYXJndW1lbnRzLmxlbmd0aCA8IDI7XG4gICAgdmFyIGFjY3VtdWxhdG9yID0gbm9Jbml0aWFsID8gdW5kZWZpbmVkIDogYXJndW1lbnRzWzFdO1xuICAgIGFDYWxsYWJsZShjYWxsYmFja2ZuKTtcbiAgICBpdGVyYXRlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKG5vSW5pdGlhbCkge1xuICAgICAgICBub0luaXRpYWwgPSBmYWxzZTtcbiAgICAgICAgYWNjdW11bGF0b3IgPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjY3VtdWxhdG9yID0gY2FsbGJhY2tmbihhY2N1bXVsYXRvciwgdmFsdWUsIGtleSwgbWFwKTtcbiAgICAgIH1cbiAgICB9LCB7IEFTX0VOVFJJRVM6IHRydWUsIElTX0lURVJBVE9SOiB0cnVlIH0pO1xuICAgIGlmIChub0luaXRpYWwpIHRocm93IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IG1hcCB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBnZXRNYXBJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWFwLWl0ZXJhdG9yJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnTWFwJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgbWFwID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIGl0ZXJhdG9yID0gZ2V0TWFwSXRlcmF0b3IobWFwKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDMpO1xuICAgIHJldHVybiBpdGVyYXRlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgc3RvcCkge1xuICAgICAgaWYgKGJvdW5kRnVuY3Rpb24odmFsdWUsIGtleSwgbWFwKSkgcmV0dXJuIHN0b3AoKTtcbiAgICB9LCB7IEFTX0VOVFJJRVM6IHRydWUsIElTX0lURVJBVE9SOiB0cnVlLCBJTlRFUlJVUFRFRDogdHJ1ZSB9KS5zdG9wcGVkO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnVwZGF0ZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdNYXAnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoa2V5LCBjYWxsYmFjayAvKiAsIHRodW5rICovKSB7XG4gICAgdmFyIG1hcCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGFDYWxsYWJsZShjYWxsYmFjayk7XG4gICAgdmFyIGlzUHJlc2VudEluTWFwID0gbWFwLmhhcyhrZXkpO1xuICAgIGlmICghaXNQcmVzZW50SW5NYXAgJiYgbGVuZ3RoIDwgMykge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdVcGRhdGluZyBhYnNlbnQgdmFsdWUnKTtcbiAgICB9XG4gICAgdmFyIHZhbHVlID0gaXNQcmVzZW50SW5NYXAgPyBtYXAuZ2V0KGtleSkgOiBhQ2FsbGFibGUobGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCkoa2V5LCBtYXApO1xuICAgIG1hcC5zZXQoa2V5LCBjYWxsYmFjayh2YWx1ZSwga2V5LCBtYXApKTtcbiAgICByZXR1cm4gbWFwO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGBNYXAucHJvdG90eXBlLnVwc2VydGAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGh1bWJzdXBlcC9wcm9wb3NhbC11cHNlcnRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdXBzZXJ0KGtleSwgdXBkYXRlRm4gLyogLCBpbnNlcnRGbiAqLykge1xuICB2YXIgbWFwID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciBpbnNlcnRGbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgdmFsdWU7XG4gIGlmICghaXNDYWxsYWJsZSh1cGRhdGVGbikgJiYgIWlzQ2FsbGFibGUoaW5zZXJ0Rm4pKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdBdCBsZWFzdCBvbmUgY2FsbGJhY2sgcmVxdWlyZWQnKTtcbiAgfVxuICBpZiAobWFwLmhhcyhrZXkpKSB7XG4gICAgdmFsdWUgPSBtYXAuZ2V0KGtleSk7XG4gICAgaWYgKGlzQ2FsbGFibGUodXBkYXRlRm4pKSB7XG4gICAgICB2YWx1ZSA9IHVwZGF0ZUZuKHZhbHVlKTtcbiAgICAgIG1hcC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzQ2FsbGFibGUoaW5zZXJ0Rm4pKSB7XG4gICAgdmFsdWUgPSBpbnNlcnRGbigpO1xuICAgIG1hcC5zZXQoa2V5LCB2YWx1ZSk7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IHJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciAkdXBzZXJ0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hcC11cHNlcnQnKTtcblxuLy8gYE1hcC5wcm90b3R5cGUudXBkYXRlT3JJbnNlcnRgIG1ldGhvZCAocmVwbGFjZWQgYnkgYE1hcC5wcm90b3R5cGUuZW1wbGFjZWApXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGh1bWJzdXBlcC9wcm9wb3NhbC11cHNlcnRcbiQoeyB0YXJnZXQ6ICdNYXAnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgbmFtZTogJ3Vwc2VydCcsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIHVwZGF0ZU9ySW5zZXJ0OiAkdXBzZXJ0XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IHJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciAkdXBzZXJ0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hcC11cHNlcnQnKTtcblxuLy8gYE1hcC5wcm90b3R5cGUudXBzZXJ0YCBtZXRob2QgKHJlcGxhY2VkIGJ5IGBNYXAucHJvdG90eXBlLmVtcGxhY2VgKVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RodW1ic3VwZXAvcHJvcG9zYWwtdXBzZXJ0XG4kKHsgdGFyZ2V0OiAnTWFwJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIHVwc2VydDogJHVwc2VydFxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcblxudmFyIG1pbiA9IE1hdGgubWluO1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG4vLyBgTWF0aC5jbGFtcGAgbWV0aG9kXG4vLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUgfSwge1xuICBjbGFtcDogZnVuY3Rpb24gY2xhbXAoeCwgbG93ZXIsIHVwcGVyKSB7XG4gICAgcmV0dXJuIG1pbih1cHBlciwgbWF4KGxvd2VyLCB4KSk7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGBNYXRoLkRFR19QRVJfUkFEYCBjb25zdGFudFxuLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlIH0sIHtcbiAgREVHX1BFUl9SQUQ6IE1hdGguUEkgLyAxODBcbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbnZhciBSQURfUEVSX0RFRyA9IDE4MCAvIE1hdGguUEk7XG5cbi8vIGBNYXRoLmRlZ3JlZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlIH0sIHtcbiAgZGVncmVlczogZnVuY3Rpb24gZGVncmVlcyhyYWRpYW5zKSB7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSQURfUEVSX0RFRztcbiAgfVxufSk7XG4iLCIvLyBgTWF0aC5zY2FsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrICovXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVjayAqL1xuICApIHJldHVybiBOYU47XG4gIGlmICh4ID09PSBJbmZpbml0eSB8fCB4ID09PSAtSW5maW5pdHkpIHJldHVybiB4O1xuICByZXR1cm4gKHggLSBpbkxvdykgKiAob3V0SGlnaCAtIG91dExvdykgLyAoaW5IaWdoIC0gaW5Mb3cpICsgb3V0TG93O1xufTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG52YXIgc2NhbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC1zY2FsZScpO1xudmFyIGZyb3VuZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLWZyb3VuZCcpO1xuXG4vLyBgTWF0aC5mc2NhbGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlIH0sIHtcbiAgZnNjYWxlOiBmdW5jdGlvbiBmc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gICAgcmV0dXJuIGZyb3VuZChzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpKTtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcblxuLy8gYE1hdGguaWFkZGhgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUgfSwge1xuICBpYWRkaDogZnVuY3Rpb24gaWFkZGgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxICsgKHkxID4+PiAwKSArICgoJHgwICYgJHkwIHwgKCR4MCB8ICR5MCkgJiB+KCR4MCArICR5MCA+Pj4gMCkpID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG4vLyBgTWF0aC5pbXVsaGAgbWV0aG9kXG4vLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbiQoeyB0YXJnZXQ6ICdNYXRoJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGltdWxoOiBmdW5jdGlvbiBpbXVsaCh1LCB2KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4RkZGRjtcbiAgICB2YXIgJHUgPSArdTtcbiAgICB2YXIgJHYgPSArdjtcbiAgICB2YXIgdTAgPSAkdSAmIFVJTlQxNjtcbiAgICB2YXIgdjAgPSAkdiAmIFVJTlQxNjtcbiAgICB2YXIgdTEgPSAkdSA+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+PiAxNjtcbiAgICB2YXIgdCA9ICh1MSAqIHYwID4+PiAwKSArICh1MCAqIHYwID4+PiAxNik7XG4gICAgcmV0dXJuIHUxICogdjEgKyAodCA+PiAxNikgKyAoKHUwICogdjEgPj4+IDApICsgKHQgJiBVSU5UMTYpID4+IDE2KTtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcblxuLy8gYE1hdGguaXN1YmhgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUgfSwge1xuICBpc3ViaDogZnVuY3Rpb24gaXN1YmgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxIC0gKHkxID4+PiAwKSAtICgofiR4MCAmICR5MCB8IH4oJHgwIF4gJHkwKSAmICR4MCAtICR5MCA+Pj4gMCkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGBNYXRoLlJBRF9QRVJfREVHYCBjb25zdGFudFxuLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlIH0sIHtcbiAgUkFEX1BFUl9ERUc6IDE4MCAvIE1hdGguUElcbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbnZhciBERUdfUEVSX1JBRCA9IE1hdGguUEkgLyAxODA7XG5cbi8vIGBNYXRoLnJhZGlhbnNgIG1ldGhvZFxuLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlIH0sIHtcbiAgcmFkaWFuczogZnVuY3Rpb24gcmFkaWFucyhkZWdyZWVzKSB7XG4gICAgcmV0dXJuIGRlZ3JlZXMgKiBERUdfUEVSX1JBRDtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBzY2FsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLXNjYWxlJyk7XG5cbi8vIGBNYXRoLnNjYWxlYCBtZXRob2Rcbi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbiQoeyB0YXJnZXQ6ICdNYXRoJywgc3RhdDogdHJ1ZSB9LCB7XG4gIHNjYWxlOiBzY2FsZVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBudW1iZXJJc0Zpbml0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9udW1iZXItaXMtZmluaXRlJyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlcmF0b3ItY29uc3RydWN0b3InKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBTRUVERURfUkFORE9NID0gJ1NlZWRlZCBSYW5kb20nO1xudmFyIFNFRURFRF9SQU5ET01fR0VORVJBVE9SID0gU0VFREVEX1JBTkRPTSArICcgR2VuZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNFRURFRF9SQU5ET01fR0VORVJBVE9SKTtcbnZhciBTRUVEX1RZUEVfRVJST1IgPSAnTWF0aC5zZWVkZWRQUk5HKCkgYXJndW1lbnQgc2hvdWxkIGhhdmUgYSBcInNlZWRcIiBmaWVsZCB3aXRoIGEgZmluaXRlIHZhbHVlLic7XG5cbnZhciAkU2VlZGVkUmFuZG9tR2VuZXJhdG9yID0gY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihmdW5jdGlvbiBTZWVkZWRSYW5kb21HZW5lcmF0b3Ioc2VlZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBTRUVERURfUkFORE9NX0dFTkVSQVRPUixcbiAgICBzZWVkOiBzZWVkICUgMjE0NzQ4MzY0N1xuICB9KTtcbn0sIFNFRURFRF9SQU5ET00sIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciBzZWVkID0gc3RhdGUuc2VlZCA9IChzdGF0ZS5zZWVkICogMTEwMzUxNTI0NSArIDEyMzQ1KSAlIDIxNDc0ODM2NDc7XG4gIHJldHVybiB7IHZhbHVlOiAoc2VlZCAmIDEwNzM3NDE4MjMpIC8gMTA3Mzc0MTgyMywgZG9uZTogZmFsc2UgfTtcbn0pO1xuXG4vLyBgTWF0aC5zZWVkZWRQUk5HYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNlZWRlZC1yYW5kb21cbi8vIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNlZWRlZC1yYW5kb20vYmxvYi83OGI4MjU4ODM1YjU3ZmMyMTAwZDA3NjE1MWFiNTA2YmMzMjAyYWU2L2RlbW8uaHRtbFxuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICBzZWVkZWRQUk5HOiBmdW5jdGlvbiBzZWVkZWRQUk5HKGl0KSB7XG4gICAgdmFyIHNlZWQgPSBhbk9iamVjdChpdCkuc2VlZDtcbiAgICBpZiAoIW51bWJlcklzRmluaXRlKHNlZWQpKSB0aHJvdyBUeXBlRXJyb3IoU0VFRF9UWVBFX0VSUk9SKTtcbiAgICByZXR1cm4gbmV3ICRTZWVkZWRSYW5kb21HZW5lcmF0b3Ioc2VlZCk7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGBNYXRoLnNpZ25iaXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtTWF0aC5zaWduYml0XG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUgfSwge1xuICBzaWduYml0OiBmdW5jdGlvbiBzaWduYml0KHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPT0geCAmJiB4ID09IDAgPyAxIC8geCA9PSAtSW5maW5pdHkgOiB4IDwgMDtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcblxuLy8gYE1hdGgudW11bGhgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUgfSwge1xuICB1bXVsaDogZnVuY3Rpb24gdW11bGgodSwgdikge1xuICAgIHZhciBVSU5UMTYgPSAweEZGRkY7XG4gICAgdmFyICR1ID0gK3U7XG4gICAgdmFyICR2ID0gK3Y7XG4gICAgdmFyIHUwID0gJHUgJiBVSU5UMTY7XG4gICAgdmFyIHYwID0gJHYgJiBVSU5UMTY7XG4gICAgdmFyIHUxID0gJHUgPj4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+PiAxNjtcbiAgICB2YXIgdCA9ICh1MSAqIHYwID4+PiAwKSArICh1MCAqIHYwID4+PiAxNik7XG4gICAgcmV0dXJuIHUxICogdjEgKyAodCA+Pj4gMTYpICsgKCh1MCAqIHYxID4+PiAwKSArICh0ICYgVUlOVDE2KSA+Pj4gMTYpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHBhcnNlSW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL251bWJlci1wYXJzZS1pbnQnKTtcblxudmFyIElOVkFMSURfTlVNQkVSX1JFUFJFU0VOVEFUSU9OID0gJ0ludmFsaWQgbnVtYmVyIHJlcHJlc2VudGF0aW9uJztcbnZhciBJTlZBTElEX1JBRElYID0gJ0ludmFsaWQgcmFkaXgnO1xudmFyIHZhbGlkID0gL15bXFxkYS16XSskLztcblxuLy8gYE51bWJlci5mcm9tU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW51bWJlci1mcm9tc3RyaW5nXG4kKHsgdGFyZ2V0OiAnTnVtYmVyJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGZyb21TdHJpbmc6IGZ1bmN0aW9uIGZyb21TdHJpbmcoc3RyaW5nLCByYWRpeCkge1xuICAgIHZhciBzaWduID0gMTtcbiAgICB2YXIgUiwgbWF0aE51bTtcbiAgICBpZiAodHlwZW9mIHN0cmluZyAhPSAnc3RyaW5nJykgdGhyb3cgVHlwZUVycm9yKElOVkFMSURfTlVNQkVSX1JFUFJFU0VOVEFUSU9OKTtcbiAgICBpZiAoIXN0cmluZy5sZW5ndGgpIHRocm93IFN5bnRheEVycm9yKElOVkFMSURfTlVNQkVSX1JFUFJFU0VOVEFUSU9OKTtcbiAgICBpZiAoc3RyaW5nLmNoYXJBdCgwKSA9PSAnLScpIHtcbiAgICAgIHNpZ24gPSAtMTtcbiAgICAgIHN0cmluZyA9IHN0cmluZy5zbGljZSgxKTtcbiAgICAgIGlmICghc3RyaW5nLmxlbmd0aCkgdGhyb3cgU3ludGF4RXJyb3IoSU5WQUxJRF9OVU1CRVJfUkVQUkVTRU5UQVRJT04pO1xuICAgIH1cbiAgICBSID0gcmFkaXggPT09IHVuZGVmaW5lZCA/IDEwIDogdG9JbnRlZ2VyT3JJbmZpbml0eShyYWRpeCk7XG4gICAgaWYgKFIgPCAyIHx8IFIgPiAzNikgdGhyb3cgUmFuZ2VFcnJvcihJTlZBTElEX1JBRElYKTtcbiAgICBpZiAoIXZhbGlkLnRlc3Qoc3RyaW5nKSB8fCAobWF0aE51bSA9IHBhcnNlSW50KHN0cmluZywgUikpLnRvU3RyaW5nKFIpICE9PSBzdHJpbmcpIHtcbiAgICAgIHRocm93IFN5bnRheEVycm9yKElOVkFMSURfTlVNQkVSX1JFUFJFU0VOVEFUSU9OKTtcbiAgICB9XG4gICAgcmV0dXJuIHNpZ24gKiBtYXRoTnVtO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIE51bWVyaWNSYW5nZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL251bWVyaWMtcmFuZ2UtaXRlcmF0b3InKTtcblxuLy8gYE51bWJlci5yYW5nZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1OdW1iZXIucmFuZ2VcbiQoeyB0YXJnZXQ6ICdOdW1iZXInLCBzdGF0OiB0cnVlIH0sIHtcbiAgcmFuZ2U6IGZ1bmN0aW9uIHJhbmdlKHN0YXJ0LCBlbmQsIG9wdGlvbikge1xuICAgIHJldHVybiBuZXcgTnVtZXJpY1JhbmdlSXRlcmF0b3Ioc3RhcnQsIGVuZCwgb3B0aW9uLCAnbnVtYmVyJywgMCwgMSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyYXRvci1jb25zdHJ1Y3RvcicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgT0JKRUNUX0lURVJBVE9SID0gJ09iamVjdCBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihPQkpFQ1RfSVRFUkFUT1IpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoZnVuY3Rpb24gT2JqZWN0SXRlcmF0b3Ioc291cmNlLCBtb2RlKSB7XG4gIHZhciBvYmplY3QgPSB0b09iamVjdChzb3VyY2UpO1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBPQkpFQ1RfSVRFUkFUT1IsXG4gICAgbW9kZTogbW9kZSxcbiAgICBvYmplY3Q6IG9iamVjdCxcbiAgICBrZXlzOiBvYmplY3RLZXlzKG9iamVjdCksXG4gICAgaW5kZXg6IDBcbiAgfSk7XG59LCAnT2JqZWN0JywgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIGtleXMgPSBzdGF0ZS5rZXlzO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChrZXlzID09PSBudWxsIHx8IHN0YXRlLmluZGV4ID49IGtleXMubGVuZ3RoKSB7XG4gICAgICBzdGF0ZS5vYmplY3QgPSBzdGF0ZS5rZXlzID0gbnVsbDtcbiAgICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgICB9XG4gICAgdmFyIGtleSA9IGtleXNbc3RhdGUuaW5kZXgrK107XG4gICAgdmFyIG9iamVjdCA9IHN0YXRlLm9iamVjdDtcbiAgICBpZiAoIWhhc093bihvYmplY3QsIGtleSkpIGNvbnRpbnVlO1xuICAgIHN3aXRjaCAoc3RhdGUubW9kZSkge1xuICAgICAgY2FzZSAna2V5cyc6IHJldHVybiB7IHZhbHVlOiBrZXksIGRvbmU6IGZhbHNlIH07XG4gICAgICBjYXNlICd2YWx1ZXMnOiByZXR1cm4geyB2YWx1ZTogb2JqZWN0W2tleV0sIGRvbmU6IGZhbHNlIH07XG4gICAgfSAvKiBlbnRyaWVzICovIHJldHVybiB7IHZhbHVlOiBba2V5LCBvYmplY3Rba2V5XV0sIGRvbmU6IGZhbHNlIH07XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgT2JqZWN0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWl0ZXJhdG9yJyk7XG5cbi8vIGBPYmplY3QuaXRlcmF0ZUVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LWl0ZXJhdGlvblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBpdGVyYXRlRW50cmllczogZnVuY3Rpb24gaXRlcmF0ZUVudHJpZXMob2JqZWN0KSB7XG4gICAgcmV0dXJuIG5ldyBPYmplY3RJdGVyYXRvcihvYmplY3QsICdlbnRyaWVzJyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgT2JqZWN0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWl0ZXJhdG9yJyk7XG5cbi8vIGBPYmplY3QuaXRlcmF0ZUtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LWl0ZXJhdGlvblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBpdGVyYXRlS2V5czogZnVuY3Rpb24gaXRlcmF0ZUtleXMob2JqZWN0KSB7XG4gICAgcmV0dXJuIG5ldyBPYmplY3RJdGVyYXRvcihvYmplY3QsICdrZXlzJyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgT2JqZWN0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWl0ZXJhdG9yJyk7XG5cbi8vIGBPYmplY3QuaXRlcmF0ZVZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtaXRlcmF0aW9uXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGl0ZXJhdGVWYWx1ZXM6IGZ1bmN0aW9uIGl0ZXJhdGVWYWx1ZXMob2JqZWN0KSB7XG4gICAgcmV0dXJuIG5ldyBPYmplY3RJdGVyYXRvcihvYmplY3QsICd2YWx1ZXMnKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYnNlcnZhYmxlXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUtYWxsJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBob3N0UmVwb3J0RXJyb3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIE9CU0VSVkFCTEUgPSB3ZWxsS25vd25TeW1ib2woJ29ic2VydmFibGUnKTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xuXG52YXIgY2xlYW51cFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb25TdGF0ZSkge1xuICB2YXIgY2xlYW51cCA9IHN1YnNjcmlwdGlvblN0YXRlLmNsZWFudXA7XG4gIGlmIChjbGVhbnVwKSB7XG4gICAgc3Vic2NyaXB0aW9uU3RhdGUuY2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY2xlYW51cCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBob3N0UmVwb3J0RXJyb3JzKGVycm9yKTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBzdWJzY3JpcHRpb25DbG9zZWQgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uU3RhdGUpIHtcbiAgcmV0dXJuIHN1YnNjcmlwdGlvblN0YXRlLm9ic2VydmVyID09PSB1bmRlZmluZWQ7XG59O1xuXG52YXIgY2xvc2UgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uU3RhdGUpIHtcbiAgdmFyIHN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvblN0YXRlLmZhY2FkZTtcbiAgaWYgKCFERVNDUklQVE9SUykge1xuICAgIHN1YnNjcmlwdGlvbi5jbG9zZWQgPSB0cnVlO1xuICAgIHZhciBzdWJzY3JpcHRpb25PYnNlcnZlciA9IHN1YnNjcmlwdGlvblN0YXRlLnN1YnNjcmlwdGlvbk9ic2VydmVyO1xuICAgIGlmIChzdWJzY3JpcHRpb25PYnNlcnZlcikgc3Vic2NyaXB0aW9uT2JzZXJ2ZXIuY2xvc2VkID0gdHJ1ZTtcbiAgfSBzdWJzY3JpcHRpb25TdGF0ZS5vYnNlcnZlciA9IHVuZGVmaW5lZDtcbn07XG5cbnZhciBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAob2JzZXJ2ZXIsIHN1YnNjcmliZXIpIHtcbiAgdmFyIHN1YnNjcmlwdGlvblN0YXRlID0gc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgY2xlYW51cDogdW5kZWZpbmVkLFxuICAgIG9ic2VydmVyOiBhbk9iamVjdChvYnNlcnZlciksXG4gICAgc3Vic2NyaXB0aW9uT2JzZXJ2ZXI6IHVuZGVmaW5lZFxuICB9KTtcbiAgdmFyIHN0YXJ0O1xuICBpZiAoIURFU0NSSVBUT1JTKSB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICB0cnkge1xuICAgIGlmIChzdGFydCA9IGdldE1ldGhvZChvYnNlcnZlciwgJ3N0YXJ0JykpIHN0YXJ0LmNhbGwob2JzZXJ2ZXIsIHRoaXMpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGhvc3RSZXBvcnRFcnJvcnMoZXJyb3IpO1xuICB9XG4gIGlmIChzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uU3RhdGUpKSByZXR1cm47XG4gIHZhciBzdWJzY3JpcHRpb25PYnNlcnZlciA9IHN1YnNjcmlwdGlvblN0YXRlLnN1YnNjcmlwdGlvbk9ic2VydmVyID0gbmV3IFN1YnNjcmlwdGlvbk9ic2VydmVyKHRoaXMpO1xuICB0cnkge1xuICAgIHZhciBjbGVhbnVwID0gc3Vic2NyaWJlcihzdWJzY3JpcHRpb25PYnNlcnZlcik7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IGNsZWFudXA7XG4gICAgaWYgKGNsZWFudXAgIT0gbnVsbCkgc3Vic2NyaXB0aW9uU3RhdGUuY2xlYW51cCA9IGlzQ2FsbGFibGUoY2xlYW51cC51bnN1YnNjcmliZSlcbiAgICAgID8gZnVuY3Rpb24gKCkgeyBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsgfVxuICAgICAgOiBhQ2FsbGFibGUoY2xlYW51cCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgc3Vic2NyaXB0aW9uT2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xuICAgIHJldHVybjtcbiAgfSBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvblN0YXRlKSkgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb25TdGF0ZSk7XG59O1xuXG5TdWJzY3JpcHRpb24ucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoe30sIHtcbiAgdW5zdWJzY3JpYmU6IGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkge1xuICAgIHZhciBzdWJzY3JpcHRpb25TdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uU3RhdGUpKSB7XG4gICAgICBjbG9zZShzdWJzY3JpcHRpb25TdGF0ZSk7XG4gICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvblN0YXRlKTtcbiAgICB9XG4gIH1cbn0pO1xuXG5pZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KFN1YnNjcmlwdGlvbi5wcm90b3R5cGUsICdjbG9zZWQnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHN1YnNjcmlwdGlvbkNsb3NlZChnZXRJbnRlcm5hbFN0YXRlKHRoaXMpKTtcbiAgfVxufSk7XG5cbnZhciBTdWJzY3JpcHRpb25PYnNlcnZlciA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7IHN1YnNjcmlwdGlvbjogc3Vic2NyaXB0aW9uIH0pO1xuICBpZiAoIURFU0NSSVBUT1JTKSB0aGlzLmNsb3NlZCA9IGZhbHNlO1xufTtcblxuU3Vic2NyaXB0aW9uT2JzZXJ2ZXIucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoe30sIHtcbiAgbmV4dDogZnVuY3Rpb24gbmV4dCh2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb25TdGF0ZSA9IGdldEludGVybmFsU3RhdGUoZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zdWJzY3JpcHRpb24pO1xuICAgIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvblN0YXRlKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uU3RhdGUub2JzZXJ2ZXI7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbmV4dE1ldGhvZCA9IGdldE1ldGhvZChvYnNlcnZlciwgJ25leHQnKTtcbiAgICAgICAgaWYgKG5leHRNZXRob2QpIG5leHRNZXRob2QuY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaG9zdFJlcG9ydEVycm9ycyhlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uU3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKGdldEludGVybmFsU3RhdGUodGhpcykuc3Vic2NyaXB0aW9uKTtcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb25TdGF0ZSkpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvblN0YXRlLm9ic2VydmVyO1xuICAgICAgY2xvc2Uoc3Vic2NyaXB0aW9uU3RhdGUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIGVycm9yTWV0aG9kID0gZ2V0TWV0aG9kKG9ic2VydmVyLCAnZXJyb3InKTtcbiAgICAgICAgaWYgKGVycm9yTWV0aG9kKSBlcnJvck1ldGhvZC5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICAgIGVsc2UgaG9zdFJlcG9ydEVycm9ycyh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaG9zdFJlcG9ydEVycm9ycyhlcnIpO1xuICAgICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvblN0YXRlKTtcbiAgICB9XG4gIH0sXG4gIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSgpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uU3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKGdldEludGVybmFsU3RhdGUodGhpcykuc3Vic2NyaXB0aW9uKTtcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb25TdGF0ZSkpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvblN0YXRlLm9ic2VydmVyO1xuICAgICAgY2xvc2Uoc3Vic2NyaXB0aW9uU3RhdGUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIGNvbXBsZXRlTWV0aG9kID0gZ2V0TWV0aG9kKG9ic2VydmVyLCAnY29tcGxldGUnKTtcbiAgICAgICAgaWYgKGNvbXBsZXRlTWV0aG9kKSBjb21wbGV0ZU1ldGhvZC5jYWxsKG9ic2VydmVyKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhvc3RSZXBvcnRFcnJvcnMoZXJyb3IpO1xuICAgICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvblN0YXRlKTtcbiAgICB9XG4gIH1cbn0pO1xuXG5pZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KFN1YnNjcmlwdGlvbk9ic2VydmVyLnByb3RvdHlwZSwgJ2Nsb3NlZCcsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gc3Vic2NyaXB0aW9uQ2xvc2VkKGdldEludGVybmFsU3RhdGUoZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zdWJzY3JpcHRpb24pKTtcbiAgfVxufSk7XG5cbnZhciAkT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uIE9ic2VydmFibGUoc3Vic2NyaWJlcikge1xuICBhbkluc3RhbmNlKHRoaXMsICRPYnNlcnZhYmxlLCAnT2JzZXJ2YWJsZScpO1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHsgc3Vic2NyaWJlcjogYUNhbGxhYmxlKHN1YnNjcmliZXIpIH0pO1xufTtcblxucmVkZWZpbmVBbGwoJE9ic2VydmFibGUucHJvdG90eXBlLCB7XG4gIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKG9ic2VydmVyKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24oaXNDYWxsYWJsZShvYnNlcnZlcikgPyB7XG4gICAgICBuZXh0OiBvYnNlcnZlcixcbiAgICAgIGVycm9yOiBsZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLFxuICAgICAgY29tcGxldGU6IGxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWRcbiAgICB9IDogaXNPYmplY3Qob2JzZXJ2ZXIpID8gb2JzZXJ2ZXIgOiB7fSwgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zdWJzY3JpYmVyKTtcbiAgfVxufSk7XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLCB7XG4gIGZyb206IGZ1bmN0aW9uIGZyb20oeCkge1xuICAgIHZhciBDID0gaXNDb25zdHJ1Y3Rvcih0aGlzKSA/IHRoaXMgOiAkT2JzZXJ2YWJsZTtcbiAgICB2YXIgb2JzZXJ2YWJsZU1ldGhvZCA9IGdldE1ldGhvZChhbk9iamVjdCh4KSwgT0JTRVJWQUJMRSk7XG4gICAgaWYgKG9ic2VydmFibGVNZXRob2QpIHtcbiAgICAgIHZhciBvYnNlcnZhYmxlID0gYW5PYmplY3Qob2JzZXJ2YWJsZU1ldGhvZC5jYWxsKHgpKTtcbiAgICAgIHJldHVybiBvYnNlcnZhYmxlLmNvbnN0cnVjdG9yID09PSBDID8gb2JzZXJ2YWJsZSA6IG5ldyBDKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZS5zdWJzY3JpYmUob2JzZXJ2ZXIpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHZhciBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKHgpO1xuICAgIHJldHVybiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIGl0ZXJhdGUoaXRlcmF0b3IsIGZ1bmN0aW9uIChpdCwgc3RvcCkge1xuICAgICAgICBvYnNlcnZlci5uZXh0KGl0KTtcbiAgICAgICAgaWYgKG9ic2VydmVyLmNsb3NlZCkgcmV0dXJuIHN0b3AoKTtcbiAgICAgIH0sIHsgSVNfSVRFUkFUT1I6IHRydWUsIElOVEVSUlVQVEVEOiB0cnVlIH0pO1xuICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbiAgfSxcbiAgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIHZhciBDID0gaXNDb25zdHJ1Y3Rvcih0aGlzKSA/IHRoaXMgOiAkT2JzZXJ2YWJsZTtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgaXRlbXMgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgaXRlbXNbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4KytdO1xuICAgIHJldHVybiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtc1tpXSk7XG4gICAgICAgIGlmIChvYnNlcnZlci5jbG9zZWQpIHJldHVybjtcbiAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbnJlZGVmaW5lKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwgT0JTRVJWQUJMRSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbiQoeyBnbG9iYWw6IHRydWUgfSwge1xuICBPYnNlcnZhYmxlOiAkT2JzZXJ2YWJsZVxufSk7XG5cbnNldFNwZWNpZXMoJ09ic2VydmFibGUnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcblxuLy8gYFByb21pc2UudHJ5YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtdHJ5XG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUgfSwge1xuICAndHJ5JzogZnVuY3Rpb24gKGNhbGxiYWNrZm4pIHtcbiAgICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKHRoaXMpO1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGNhbGxiYWNrZm4pO1xuICAgIChyZXN1bHQuZXJyb3IgPyBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3QgOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlKShyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIi8vIFRPRE86IGluIGNvcmUtanNANCwgbW92ZSAvbW9kdWxlcy8gZGVwZW5kZW5jaWVzIHRvIHB1YmxpYyBlbnRyaWVzIGZvciBiZXR0ZXIgb3B0aW1pemF0aW9uIGJ5IHRvb2xzIGxpa2UgYHByZXNldC1lbnZgXG52YXIgTWFwID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5tYXAnKTtcbnZhciBXZWFrTWFwID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9lcy53ZWFrLW1hcCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcblxudmFyIG1ldGFkYXRhID0gc2hhcmVkKCdtZXRhZGF0YScpO1xudmFyIHN0b3JlID0gbWV0YWRhdGEuc3RvcmUgfHwgKG1ldGFkYXRhLnN0b3JlID0gbmV3IFdlYWtNYXAoKSk7XG5cbnZhciBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5LCBjcmVhdGUpIHtcbiAgdmFyIHRhcmdldE1ldGFkYXRhID0gc3RvcmUuZ2V0KHRhcmdldCk7XG4gIGlmICghdGFyZ2V0TWV0YWRhdGEpIHtcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuO1xuICAgIHN0b3JlLnNldCh0YXJnZXQsIHRhcmdldE1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfVxuICB2YXIga2V5TWV0YWRhdGEgPSB0YXJnZXRNZXRhZGF0YS5nZXQodGFyZ2V0S2V5KTtcbiAgaWYgKCFrZXlNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm47XG4gICAgdGFyZ2V0TWV0YWRhdGEuc2V0KHRhcmdldEtleSwga2V5TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9IHJldHVybiBrZXlNZXRhZGF0YTtcbn07XG5cbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogbWV0YWRhdGFNYXAuaGFzKE1ldGFkYXRhS2V5KTtcbn07XG5cbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG1ldGFkYXRhTWFwLmdldChNZXRhZGF0YUtleSk7XG59O1xuXG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSwgTywgUCkge1xuICBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIHRydWUpLnNldChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSk7XG59O1xuXG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCh0YXJnZXQsIHRhcmdldEtleSwgZmFsc2UpO1xuICB2YXIga2V5cyA9IFtdO1xuICBpZiAobWV0YWRhdGFNYXApIG1ldGFkYXRhTWFwLmZvckVhY2goZnVuY3Rpb24gKF8sIGtleSkgeyBrZXlzLnB1c2goa2V5KTsgfSk7XG4gIHJldHVybiBrZXlzO1xufTtcblxudmFyIHRvTWV0YWRhdGFLZXkgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0b3JlOiBzdG9yZSxcbiAgZ2V0TWFwOiBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwLFxuICBoYXM6IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEsXG4gIGdldDogb3JkaW5hcnlHZXRPd25NZXRhZGF0YSxcbiAgc2V0OiBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhLFxuICBrZXlzOiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyxcbiAgdG9LZXk6IHRvTWV0YWRhdGFLZXlcbn07XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBSZWZsZWN0TWV0YWRhdGFNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVmbGVjdC1tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgdG9NZXRhZGF0YUtleSA9IFJlZmxlY3RNZXRhZGF0YU1vZHVsZS50b0tleTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gUmVmbGVjdE1ldGFkYXRhTW9kdWxlLnNldDtcblxuLy8gYFJlZmxlY3QuZGVmaW5lTWV0YWRhdGFgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3JidWNrdG9uL3JlZmxlY3QtbWV0YWRhdGFcbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGRlZmluZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWZpbmVNZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gICAgdmFyIHRhcmdldEtleSA9IGFyZ3VtZW50cy5sZW5ndGggPCA0ID8gdW5kZWZpbmVkIDogdG9NZXRhZGF0YUtleShhcmd1bWVudHNbM10pO1xuICAgIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIGFuT2JqZWN0KHRhcmdldCksIHRhcmdldEtleSk7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgUmVmbGVjdE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZmxlY3QtbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIHRvTWV0YWRhdGFLZXkgPSBSZWZsZWN0TWV0YWRhdGFNb2R1bGUudG9LZXk7XG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IFJlZmxlY3RNZXRhZGF0YU1vZHVsZS5nZXRNYXA7XG52YXIgc3RvcmUgPSBSZWZsZWN0TWV0YWRhdGFNb2R1bGUuc3RvcmU7XG5cbi8vIGBSZWZsZWN0LmRlbGV0ZU1ldGFkYXRhYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yYnVja3Rvbi9yZWZsZWN0LW1ldGFkYXRhXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBkZWxldGVNZXRhZGF0YTogZnVuY3Rpb24gZGVsZXRlTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICAgIHZhciB0YXJnZXRLZXkgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YWRhdGFLZXkoYXJndW1lbnRzWzJdKTtcbiAgICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKGFuT2JqZWN0KHRhcmdldCksIHRhcmdldEtleSwgZmFsc2UpO1xuICAgIGlmIChtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkIHx8ICFtZXRhZGF0YU1hcFsnZGVsZXRlJ10obWV0YWRhdGFLZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKG1ldGFkYXRhTWFwLnNpemUpIHJldHVybiB0cnVlO1xuICAgIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICAgIHRhcmdldE1ldGFkYXRhWydkZWxldGUnXSh0YXJnZXRLZXkpO1xuICAgIHJldHVybiAhIXRhcmdldE1ldGFkYXRhLnNpemUgfHwgc3RvcmVbJ2RlbGV0ZSddKHRhcmdldCk7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgUmVmbGVjdE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZmxlY3QtbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xuXG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IFJlZmxlY3RNZXRhZGF0YU1vZHVsZS5oYXM7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IFJlZmxlY3RNZXRhZGF0YU1vZHVsZS5nZXQ7XG52YXIgdG9NZXRhZGF0YUtleSA9IFJlZmxlY3RNZXRhZGF0YU1vZHVsZS50b0tleTtcblxudmFyIG9yZGluYXJ5R2V0TWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIGhhc093biA9IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICBpZiAoaGFzT3duKSByZXR1cm4gb3JkaW5hcnlHZXRPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5R2V0TWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiB1bmRlZmluZWQ7XG59O1xuXG4vLyBgUmVmbGVjdC5nZXRNZXRhZGF0YWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vcmJ1Y2t0b24vcmVmbGVjdC1tZXRhZGF0YVxuJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgZ2V0TWV0YWRhdGE6IGZ1bmN0aW9uIGdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgICB2YXIgdGFyZ2V0S2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFkYXRhS2V5KGFyZ3VtZW50c1syXSk7XG4gICAgcmV0dXJuIG9yZGluYXJ5R2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIHRhcmdldEtleSk7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG4vLyBUT0RPOiBpbiBjb3JlLWpzQDQsIG1vdmUgL21vZHVsZXMvIGRlcGVuZGVuY2llcyB0byBwdWJsaWMgZW50cmllcyBmb3IgYmV0dGVyIG9wdGltaXphdGlvbiBieSB0b29scyBsaWtlIGBwcmVzZXQtZW52YFxudmFyIFNldCA9IHJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc2V0Jyk7XG52YXIgUmVmbGVjdE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZmxlY3QtbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBSZWZsZWN0TWV0YWRhdGFNb2R1bGUua2V5cztcbnZhciB0b01ldGFkYXRhS2V5ID0gUmVmbGVjdE1ldGFkYXRhTW9kdWxlLnRvS2V5O1xuXG52YXIgZnJvbSA9IGZ1bmN0aW9uIChpdGVyKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaXRlcmF0ZShpdGVyLCByZXN1bHQucHVzaCwgeyB0aGF0OiByZXN1bHQgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgb3JkaW5hcnlNZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAoTywgUCkge1xuICB2YXIgb0tleXMgPSBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICBpZiAocGFyZW50ID09PSBudWxsKSByZXR1cm4gb0tleXM7XG4gIHZhciBwS2V5cyA9IG9yZGluYXJ5TWV0YWRhdGFLZXlzKHBhcmVudCwgUCk7XG4gIHJldHVybiBwS2V5cy5sZW5ndGggPyBvS2V5cy5sZW5ndGggPyBmcm9tKG5ldyBTZXQob0tleXMuY29uY2F0KHBLZXlzKSkpIDogcEtleXMgOiBvS2V5cztcbn07XG5cbi8vIGBSZWZsZWN0LmdldE1ldGFkYXRhS2V5c2AgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vcmJ1Y2t0b24vcmVmbGVjdC1tZXRhZGF0YVxuJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgZ2V0TWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRNZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gICAgdmFyIHRhcmdldEtleSA9IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gdW5kZWZpbmVkIDogdG9NZXRhZGF0YUtleShhcmd1bWVudHNbMV0pO1xuICAgIHJldHVybiBvcmRpbmFyeU1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXkpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIFJlZmxlY3RNZXRhZGF0YU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWZsZWN0LW1ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gUmVmbGVjdE1ldGFkYXRhTW9kdWxlLmdldDtcbnZhciB0b01ldGFkYXRhS2V5ID0gUmVmbGVjdE1ldGFkYXRhTW9kdWxlLnRvS2V5O1xuXG4vLyBgUmVmbGVjdC5nZXRPd25NZXRhZGF0YWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vcmJ1Y2t0b24vcmVmbGVjdC1tZXRhZGF0YVxuJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgZ2V0T3duTWV0YWRhdGE6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgICB2YXIgdGFyZ2V0S2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFkYXRhS2V5KGFyZ3VtZW50c1syXSk7XG4gICAgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIHRhcmdldEtleSk7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgUmVmbGVjdE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZmxlY3QtbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gUmVmbGVjdE1ldGFkYXRhTW9kdWxlLmtleXM7XG52YXIgdG9NZXRhZGF0YUtleSA9IFJlZmxlY3RNZXRhZGF0YU1vZHVsZS50b0tleTtcblxuLy8gYFJlZmxlY3QuZ2V0T3duTWV0YWRhdGFLZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yYnVja3Rvbi9yZWZsZWN0LW1ldGFkYXRhXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBnZXRPd25NZXRhZGF0YUtleXM6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhS2V5cyh0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgICB2YXIgdGFyZ2V0S2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiB0b01ldGFkYXRhS2V5KGFyZ3VtZW50c1sxXSk7XG4gICAgcmV0dXJuIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKGFuT2JqZWN0KHRhcmdldCksIHRhcmdldEtleSk7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgUmVmbGVjdE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZmxlY3QtbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xuXG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IFJlZmxlY3RNZXRhZGF0YU1vZHVsZS5oYXM7XG52YXIgdG9NZXRhZGF0YUtleSA9IFJlZmxlY3RNZXRhZGF0YU1vZHVsZS50b0tleTtcblxudmFyIG9yZGluYXJ5SGFzTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIGhhc093biA9IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICBpZiAoaGFzT3duKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlIYXNNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IGZhbHNlO1xufTtcblxuLy8gYFJlZmxlY3QuaGFzTWV0YWRhdGFgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3JidWNrdG9uL3JlZmxlY3QtbWV0YWRhdGFcbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGhhc01ldGFkYXRhOiBmdW5jdGlvbiBoYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gICAgdmFyIHRhcmdldEtleSA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhZGF0YUtleShhcmd1bWVudHNbMl0pO1xuICAgIHJldHVybiBvcmRpbmFyeUhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXkpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIFJlZmxlY3RNZXRhZGF0YU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWZsZWN0LW1ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gUmVmbGVjdE1ldGFkYXRhTW9kdWxlLmhhcztcbnZhciB0b01ldGFkYXRhS2V5ID0gUmVmbGVjdE1ldGFkYXRhTW9kdWxlLnRvS2V5O1xuXG4vLyBgUmVmbGVjdC5oYXNPd25NZXRhZGF0YWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vcmJ1Y2t0b24vcmVmbGVjdC1tZXRhZGF0YVxuJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgaGFzT3duTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgICB2YXIgdGFyZ2V0S2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFkYXRhS2V5KGFyZ3VtZW50c1syXSk7XG4gICAgcmV0dXJuIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIHRhcmdldEtleSk7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgUmVmbGVjdE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZmxlY3QtbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIHRvTWV0YWRhdGFLZXkgPSBSZWZsZWN0TWV0YWRhdGFNb2R1bGUudG9LZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IFJlZmxlY3RNZXRhZGF0YU1vZHVsZS5zZXQ7XG5cbi8vIGBSZWZsZWN0Lm1ldGFkYXRhYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yYnVja3Rvbi9yZWZsZWN0LW1ldGFkYXRhXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBtZXRhZGF0YTogZnVuY3Rpb24gbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gZGVjb3JhdG9yKHRhcmdldCwga2V5KSB7XG4gICAgICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCBhbk9iamVjdCh0YXJnZXQpLCB0b01ldGFkYXRhS2V5KGtleSkpO1xuICAgIH07XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L2NvbGxlY3Rpb24tbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoLyogLi4uZWxlbWVudHMgKi8pIHtcbiAgdmFyIHNldCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgYWRkZXIgPSBhQ2FsbGFibGUoc2V0LmFkZCk7XG4gIGZvciAodmFyIGsgPSAwLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBrIDwgbGVuOyBrKyspIHtcbiAgICBhZGRlci5jYWxsKHNldCwgYXJndW1lbnRzW2tdKTtcbiAgfVxuICByZXR1cm4gc2V0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGNvbGxlY3Rpb25BZGRBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1hZGQtYWxsJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmFkZEFsbGAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAgYWRkQWxsOiBmdW5jdGlvbiBhZGRBbGwoLyogLi4uZWxlbWVudHMgKi8pIHtcbiAgICByZXR1cm4gY29sbGVjdGlvbkFkZEFsbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGNvbGxlY3Rpb25EZWxldGVBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1kZWxldGUtYWxsJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmRlbGV0ZUFsbGAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAgZGVsZXRlQWxsOiBmdW5jdGlvbiBkZWxldGVBbGwoLyogLi4uZWxlbWVudHMgKi8pIHtcbiAgICByZXR1cm4gY29sbGVjdGlvbkRlbGV0ZUFsbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5kaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIGRpZmZlcmVuY2U6IGZ1bmN0aW9uIGRpZmZlcmVuY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgc2V0ID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIG5ld1NldCA9IG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKHNldCwgZ2V0QnVpbHRJbignU2V0JykpKShzZXQpO1xuICAgIHZhciByZW1vdmVyID0gYUNhbGxhYmxlKG5ld1NldFsnZGVsZXRlJ10pO1xuICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmVtb3Zlci5jYWxsKG5ld1NldCwgdmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBuZXdTZXQ7XG4gIH1cbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXNldCAtLSBzYWZlXG4gIHJldHVybiBTZXQucHJvdG90eXBlLnZhbHVlcy5jYWxsKGl0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGdldFNldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtaXRlcmF0b3InKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIGV2ZXJ5OiBmdW5jdGlvbiBldmVyeShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBzZXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgaXRlcmF0b3IgPSBnZXRTZXRJdGVyYXRvcihzZXQpO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMyk7XG4gICAgcmV0dXJuICFpdGVyYXRlKGl0ZXJhdG9yLCBmdW5jdGlvbiAodmFsdWUsIHN0b3ApIHtcbiAgICAgIGlmICghYm91bmRGdW5jdGlvbih2YWx1ZSwgdmFsdWUsIHNldCkpIHJldHVybiBzdG9wKCk7XG4gICAgfSwgeyBJU19JVEVSQVRPUjogdHJ1ZSwgSU5URVJSVVBURUQ6IHRydWUgfSkuc3RvcHBlZDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFNldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtaXRlcmF0b3InKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNvbGxlY3Rpb24tbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBzZXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgaXRlcmF0b3IgPSBnZXRTZXRJdGVyYXRvcihzZXQpO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMyk7XG4gICAgdmFyIG5ld1NldCA9IG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKHNldCwgZ2V0QnVpbHRJbignU2V0JykpKSgpO1xuICAgIHZhciBhZGRlciA9IGFDYWxsYWJsZShuZXdTZXQuYWRkKTtcbiAgICBpdGVyYXRlKGl0ZXJhdG9yLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmIChib3VuZEZ1bmN0aW9uKHZhbHVlLCB2YWx1ZSwgc2V0KSkgYWRkZXIuY2FsbChuZXdTZXQsIHZhbHVlKTtcbiAgICB9LCB7IElTX0lURVJBVE9SOiB0cnVlIH0pO1xuICAgIHJldHVybiBuZXdTZXQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBnZXRTZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LWl0ZXJhdG9yJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIGZpbmQ6IGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgc2V0ID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIGl0ZXJhdG9yID0gZ2V0U2V0SXRlcmF0b3Ioc2V0KTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDMpO1xuICAgIHJldHVybiBpdGVyYXRlKGl0ZXJhdG9yLCBmdW5jdGlvbiAodmFsdWUsIHN0b3ApIHtcbiAgICAgIGlmIChib3VuZEZ1bmN0aW9uKHZhbHVlLCB2YWx1ZSwgc2V0KSkgcmV0dXJuIHN0b3AodmFsdWUpO1xuICAgIH0sIHsgSVNfSVRFUkFUT1I6IHRydWUsIElOVEVSUlVQVEVEOiB0cnVlIH0pLnJlc3VsdDtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24tZnJvbScpO1xuXG4vLyBgU2V0LmZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0LmZyb21cbiQoeyB0YXJnZXQ6ICdTZXQnLCBzdGF0OiB0cnVlIH0sIHtcbiAgZnJvbTogZnJvbVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaW50ZXJzZWN0aW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIGludGVyc2VjdGlvbjogZnVuY3Rpb24gaW50ZXJzZWN0aW9uKGl0ZXJhYmxlKSB7XG4gICAgdmFyIHNldCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBuZXdTZXQgPSBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihzZXQsIGdldEJ1aWx0SW4oJ1NldCcpKSkoKTtcbiAgICB2YXIgaGFzQ2hlY2sgPSBhQ2FsbGFibGUoc2V0Lmhhcyk7XG4gICAgdmFyIGFkZGVyID0gYUNhbGxhYmxlKG5ld1NldC5hZGQpO1xuICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKGhhc0NoZWNrLmNhbGwoc2V0LCB2YWx1ZSkpIGFkZGVyLmNhbGwobmV3U2V0LCB2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ld1NldDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc0Rpc2pvaW50RnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzRGlzam9pbnRGcm9tXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIGlzRGlzam9pbnRGcm9tOiBmdW5jdGlvbiBpc0Rpc2pvaW50RnJvbShpdGVyYWJsZSkge1xuICAgIHZhciBzZXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgaGFzQ2hlY2sgPSBhQ2FsbGFibGUoc2V0Lmhhcyk7XG4gICAgcmV0dXJuICFpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAodmFsdWUsIHN0b3ApIHtcbiAgICAgIGlmIChoYXNDaGVjay5jYWxsKHNldCwgdmFsdWUpID09PSB0cnVlKSByZXR1cm4gc3RvcCgpO1xuICAgIH0sIHsgSU5URVJSVVBURUQ6IHRydWUgfSkuc3RvcHBlZDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1YnNldE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0LW1ldGhvZHMvI1NldC5wcm90b3R5cGUuaXNTdWJzZXRPZlxuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICBpc1N1YnNldE9mOiBmdW5jdGlvbiBpc1N1YnNldE9mKGl0ZXJhYmxlKSB7XG4gICAgdmFyIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IodGhpcyk7XG4gICAgdmFyIG90aGVyU2V0ID0gYW5PYmplY3QoaXRlcmFibGUpO1xuICAgIHZhciBoYXNDaGVjayA9IG90aGVyU2V0LmhhcztcbiAgICBpZiAoIWlzQ2FsbGFibGUoaGFzQ2hlY2spKSB7XG4gICAgICBvdGhlclNldCA9IG5ldyAoZ2V0QnVpbHRJbignU2V0JykpKGl0ZXJhYmxlKTtcbiAgICAgIGhhc0NoZWNrID0gYUNhbGxhYmxlKG90aGVyU2V0Lmhhcyk7XG4gICAgfVxuICAgIHJldHVybiAhaXRlcmF0ZShpdGVyYXRvciwgZnVuY3Rpb24gKHZhbHVlLCBzdG9wKSB7XG4gICAgICBpZiAoaGFzQ2hlY2suY2FsbChvdGhlclNldCwgdmFsdWUpID09PSBmYWxzZSkgcmV0dXJuIHN0b3AoKTtcbiAgICB9LCB7IElTX0lURVJBVE9SOiB0cnVlLCBJTlRFUlJVUFRFRDogdHJ1ZSB9KS5zdG9wcGVkO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzU3VwZXJzZXRPZlxuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICBpc1N1cGVyc2V0T2Y6IGZ1bmN0aW9uIGlzU3VwZXJzZXRPZihpdGVyYWJsZSkge1xuICAgIHZhciBzZXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgaGFzQ2hlY2sgPSBhQ2FsbGFibGUoc2V0Lmhhcyk7XG4gICAgcmV0dXJuICFpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAodmFsdWUsIHN0b3ApIHtcbiAgICAgIGlmIChoYXNDaGVjay5jYWxsKHNldCwgdmFsdWUpID09PSBmYWxzZSkgcmV0dXJuIHN0b3AoKTtcbiAgICB9LCB7IElOVEVSUlVQVEVEOiB0cnVlIH0pLnN0b3BwZWQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0U2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1pdGVyYXRvcicpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5qb2luYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNvbGxlY3Rpb24tbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikge1xuICAgIHZhciBzZXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgaXRlcmF0b3IgPSBnZXRTZXRJdGVyYXRvcihzZXQpO1xuICAgIHZhciBzZXAgPSBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCA/ICcsJyA6IFN0cmluZyhzZXBhcmF0b3IpO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICBpdGVyYXRlKGl0ZXJhdG9yLCByZXN1bHQucHVzaCwgeyB0aGF0OiByZXN1bHQsIElTX0lURVJBVE9SOiB0cnVlIH0pO1xuICAgIHJldHVybiByZXN1bHQuam9pbihzZXApO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0U2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1pdGVyYXRvcicpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIHNldCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBpdGVyYXRvciA9IGdldFNldEl0ZXJhdG9yKHNldCk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICB2YXIgbmV3U2V0ID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3Ioc2V0LCBnZXRCdWlsdEluKCdTZXQnKSkpKCk7XG4gICAgdmFyIGFkZGVyID0gYUNhbGxhYmxlKG5ld1NldC5hZGQpO1xuICAgIGl0ZXJhdGUoaXRlcmF0b3IsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgYWRkZXIuY2FsbChuZXdTZXQsIGJvdW5kRnVuY3Rpb24odmFsdWUsIHZhbHVlLCBzZXQpKTtcbiAgICB9LCB7IElTX0lURVJBVE9SOiB0cnVlIH0pO1xuICAgIHJldHVybiBuZXdTZXQ7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1vZicpO1xuXG4vLyBgU2V0Lm9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5vZlxuJCh7IHRhcmdldDogJ1NldCcsIHN0YXQ6IHRydWUgfSwge1xuICBvZjogb2Zcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRTZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LWl0ZXJhdG9yJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHZhciBzZXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgaXRlcmF0b3IgPSBnZXRTZXRJdGVyYXRvcihzZXQpO1xuICAgIHZhciBub0luaXRpYWwgPSBhcmd1bWVudHMubGVuZ3RoIDwgMjtcbiAgICB2YXIgYWNjdW11bGF0b3IgPSBub0luaXRpYWwgPyB1bmRlZmluZWQgOiBhcmd1bWVudHNbMV07XG4gICAgYUNhbGxhYmxlKGNhbGxiYWNrZm4pO1xuICAgIGl0ZXJhdGUoaXRlcmF0b3IsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKG5vSW5pdGlhbCkge1xuICAgICAgICBub0luaXRpYWwgPSBmYWxzZTtcbiAgICAgICAgYWNjdW11bGF0b3IgPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjY3VtdWxhdG9yID0gY2FsbGJhY2tmbihhY2N1bXVsYXRvciwgdmFsdWUsIHZhbHVlLCBzZXQpO1xuICAgICAgfVxuICAgIH0sIHsgSVNfSVRFUkFUT1I6IHRydWUgfSk7XG4gICAgaWYgKG5vSW5pdGlhbCkgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgc2V0IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgIHJldHVybiBhY2N1bXVsYXRvcjtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGdldFNldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtaXRlcmF0b3InKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAgc29tZTogZnVuY3Rpb24gc29tZShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBzZXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgaXRlcmF0b3IgPSBnZXRTZXRJdGVyYXRvcihzZXQpO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMyk7XG4gICAgcmV0dXJuIGl0ZXJhdGUoaXRlcmF0b3IsIGZ1bmN0aW9uICh2YWx1ZSwgc3RvcCkge1xuICAgICAgaWYgKGJvdW5kRnVuY3Rpb24odmFsdWUsIHZhbHVlLCBzZXQpKSByZXR1cm4gc3RvcCgpO1xuICAgIH0sIHsgSVNfSVRFUkFUT1I6IHRydWUsIElOVEVSUlVQVEVEOiB0cnVlIH0pLnN0b3BwZWQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnN5bW1ldHJpY0RpZmZlcmVuY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAgc3ltbWV0cmljRGlmZmVyZW5jZTogZnVuY3Rpb24gc3ltbWV0cmljRGlmZmVyZW5jZShpdGVyYWJsZSkge1xuICAgIHZhciBzZXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgbmV3U2V0ID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3Ioc2V0LCBnZXRCdWlsdEluKCdTZXQnKSkpKHNldCk7XG4gICAgdmFyIHJlbW92ZXIgPSBhQ2FsbGFibGUobmV3U2V0WydkZWxldGUnXSk7XG4gICAgdmFyIGFkZGVyID0gYUNhbGxhYmxlKG5ld1NldC5hZGQpO1xuICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmVtb3Zlci5jYWxsKG5ld1NldCwgdmFsdWUpIHx8IGFkZGVyLmNhbGwobmV3U2V0LCB2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ld1NldDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcblxuLy8gYFNldC5wcm90b3R5cGUudW5pb25gIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc2V0LW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAgdW5pb246IGZ1bmN0aW9uIHVuaW9uKGl0ZXJhYmxlKSB7XG4gICAgdmFyIHNldCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBuZXdTZXQgPSBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihzZXQsIGdldEJ1aWx0SW4oJ1NldCcpKSkoc2V0KTtcbiAgICBpdGVyYXRlKGl0ZXJhYmxlLCBhQ2FsbGFibGUobmV3U2V0LmFkZCksIHsgdGhhdDogbmV3U2V0IH0pO1xuICAgIHJldHVybiBuZXdTZXQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2hhckF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jaGFyQXQ7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIEZPUkNFRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICfwoK63Jy5hdCgwKSAhPT0gJ/CgrrcnO1xufSk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBhdDogZnVuY3Rpb24gYXQocG9zKSB7XG4gICAgcmV0dXJuIGNoYXJBdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgU3RyaW5nTXVsdGlieXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKTtcblxudmFyIGNvZGVBdCA9IFN0cmluZ011bHRpYnl0ZU1vZHVsZS5jb2RlQXQ7XG52YXIgY2hhckF0ID0gU3RyaW5nTXVsdGlieXRlTW9kdWxlLmNoYXJBdDtcbnZhciBTVFJJTkdfSVRFUkFUT1IgPSAnU3RyaW5nIEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNUUklOR19JVEVSQVRPUik7XG5cbi8vIFRPRE86IHVuaWZ5IHdpdGggU3RyaW5nI0BAaXRlcmF0b3JcbnZhciAkU3RyaW5nSXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKGZ1bmN0aW9uIFN0cmluZ0l0ZXJhdG9yKHN0cmluZykge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBTVFJJTkdfSVRFUkFUT1IsXG4gICAgc3RyaW5nOiBzdHJpbmcsXG4gICAgaW5kZXg6IDBcbiAgfSk7XG59LCAnU3RyaW5nJywgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHN0cmluZyA9IHN0YXRlLnN0cmluZztcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXg7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IHN0cmluZy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSBjaGFyQXQoc3RyaW5nLCBpbmRleCk7XG4gIHN0YXRlLmluZGV4ICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHsgY29kZVBvaW50OiBjb2RlQXQocG9pbnQsIDApLCBwb3NpdGlvbjogaW5kZXggfSwgZG9uZTogZmFsc2UgfTtcbn0pO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRzYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wcm90b3R5cGUtY29kZXBvaW50c1xuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlIH0sIHtcbiAgY29kZVBvaW50czogZnVuY3Rpb24gY29kZVBvaW50cygpIHtcbiAgICByZXR1cm4gbmV3ICRTdHJpbmdJdGVyYXRvcih0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpKSk7XG4gIH1cbn0pO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC5hc3luY0Rpc3Bvc2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC11c2luZy1zdGF0ZW1lbnRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnYXN5bmNEaXNwb3NlJyk7XG4iLCJ2YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS13ZWxsLWtub3duLXN5bWJvbCcpO1xuXG4vLyBgU3ltYm9sLmRpc3Bvc2VgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC11c2luZy1zdGF0ZW1lbnRcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnZGlzcG9zZScpO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC5tYXRjaGVyYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcGF0dGVybi1tYXRjaGluZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaGVyJyk7XG4iLCJ2YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS13ZWxsLWtub3duLXN5bWJvbCcpO1xuXG4vLyBgU3ltYm9sLm1ldGFkYXRhYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZGVjb3JhdG9yc1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtZXRhZGF0YScpO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC5vYnNlcnZhYmxlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JzZXJ2YWJsZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdvYnNlcnZhYmxlJyk7XG4iLCIvLyBUT0RPOiByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC5wYXR0ZXJuTWF0Y2hgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wYXR0ZXJuLW1hdGNoaW5nXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3BhdHRlcm5NYXRjaCcpO1xuIiwiLy8gVE9ETzogcmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLXdlbGwta25vd24tc3ltYm9sJyk7XG5cbmRlZmluZVdlbGxLbm93blN5bWJvbCgncmVwbGFjZUFsbCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3InKTtcbnZhciBhcnJheUZyb21Bc3luYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mcm9tLWFzeW5jJyk7XG52YXIgVFlQRURfQVJSQVlTX0NPTlNUUlVDVE9SU19SRVFVSVJFU19XUkFQUEVSUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1jb25zdHJ1Y3RvcnMtcmVxdWlyZS13cmFwcGVycycpO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyIGFycmF5RnJvbUNvbnN0cnVjdG9yQW5kTGlzdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mcm9tLWNvbnN0cnVjdG9yLWFuZC1saXN0Jyk7XG5cbnZhciBhVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheUNvbnN0cnVjdG9yO1xudmFyIGV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUuZnJvbUFzeW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZyb20tYXN5bmNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSAtLSByZXF1aXJlZCBmb3IgLmxlbmd0aFxuZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZCgnZnJvbUFzeW5jJywgZnVuY3Rpb24gZnJvbUFzeW5jKGFzeW5jSXRlbXMgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICB2YXIgQyA9IHRoaXM7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgbWFwZm4gPSBhcmd1bWVudHNMZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50c0xlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHJldHVybiBuZXcgKGdldEJ1aWx0SW4oJ1Byb21pc2UnKSkoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICBhQ29uc3RydWN0b3IoQyk7XG4gICAgcmVzb2x2ZShhcnJheUZyb21Bc3luYyhhc3luY0l0ZW1zLCBtYXBmbiwgdGhpc0FyZykpO1xuICB9KS50aGVuKGZ1bmN0aW9uIChsaXN0KSB7XG4gICAgcmV0dXJuIGFycmF5RnJvbUNvbnN0cnVjdG9yQW5kTGlzdChhVHlwZWRBcnJheUNvbnN0cnVjdG9yKEMpLCBsaXN0KTtcbiAgfSk7XG59LCBUWVBFRF9BUlJBWVNfQ09OU1RSVUNUT1JTX1JFUVVJUkVTX1dSQVBQRVJTKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgJGZpbHRlclJlamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXJSZWplY3Q7XG52YXIgZnJvbVNwZWNpZXNBbmRMaXN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3R5cGVkLWFycmF5LWZyb20tc3BlY2llcy1hbmQtbGlzdCcpO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmZpbHRlck91dGAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1maWx0ZXJpbmdcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ2ZpbHRlck91dCcsIGZ1bmN0aW9uIGZpbHRlck91dChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICB2YXIgbGlzdCA9ICRmaWx0ZXJSZWplY3QoYVR5cGVkQXJyYXkodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgcmV0dXJuIGZyb21TcGVjaWVzQW5kTGlzdCh0aGlzLCBsaXN0KTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyICRmaWx0ZXJSZWplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmlsdGVyUmVqZWN0O1xudmFyIGZyb21TcGVjaWVzQW5kTGlzdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1mcm9tLXNwZWNpZXMtYW5kLWxpc3QnKTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5maWx0ZXJSZWplY3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmlsdGVyaW5nXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdmaWx0ZXJSZWplY3QnLCBmdW5jdGlvbiBmaWx0ZXJSZWplY3QoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgdmFyIGxpc3QgPSAkZmlsdGVyUmVqZWN0KGFUeXBlZEFycmF5KHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIHJldHVybiBmcm9tU3BlY2llc0FuZExpc3QodGhpcywgbGlzdCk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciAkZmluZExhc3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLWZyb20tbGFzdCcpLmZpbmRMYXN0O1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmZpbmRMYXN0YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbmQtZnJvbS1sYXN0XG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdmaW5kTGFzdCcsIGZ1bmN0aW9uIGZpbmRMYXN0KHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgcmV0dXJuICRmaW5kTGFzdChhVHlwZWRBcnJheSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciAkZmluZExhc3RJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24tZnJvbS1sYXN0JykuZmluZExhc3RJbmRleDtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5maW5kTGFzdEluZGV4YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbmQtZnJvbS1sYXN0XG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdmaW5kTGFzdEluZGV4JywgZnVuY3Rpb24gZmluZExhc3RJbmRleChwcmVkaWNhdGUgLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkZmluZExhc3RJbmRleChhVHlwZWRBcnJheSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciAkZ3JvdXBCeSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1ncm91cC1ieScpO1xudmFyIHR5cGVkQXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHlwZWQtYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmdyb3VwQnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZ3JvdXBpbmdcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ2dyb3VwQnknLCBmdW5jdGlvbiBncm91cEJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHZhciB0aGlzQXJnID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHJldHVybiAkZ3JvdXBCeShhVHlwZWRBcnJheSh0aGlzKSwgY2FsbGJhY2tmbiwgdGhpc0FyZywgdHlwZWRBcnJheVNwZWNpZXNDb25zdHJ1Y3Rvcik7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciBhcnJheVVuaXF1ZUJ5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXVuaXF1ZS1ieScpO1xudmFyIGZyb21TcGVjaWVzQW5kTGlzdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1mcm9tLXNwZWNpZXMtYW5kLWxpc3QnKTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS51bmlxdWVCeWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS11bmlxdWVcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ3VuaXF1ZUJ5JywgZnVuY3Rpb24gdW5pcXVlQnkocmVzb2x2ZXIpIHtcbiAgcmV0dXJuIGZyb21TcGVjaWVzQW5kTGlzdCh0aGlzLCBhcnJheVVuaXF1ZUJ5LmNhbGwoYVR5cGVkQXJyYXkodGhpcyksIHJlc29sdmVyKSk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGNvbGxlY3Rpb25EZWxldGVBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1kZWxldGUtYWxsJyk7XG5cbi8vIGBXZWFrTWFwLnByb3RvdHlwZS5kZWxldGVBbGxgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnV2Vha01hcCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICBkZWxldGVBbGw6IGZ1bmN0aW9uIGRlbGV0ZUFsbCgvKiAuLi5lbGVtZW50cyAqLykge1xuICAgIHJldHVybiBjb2xsZWN0aW9uRGVsZXRlQWxsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLWZyb20nKTtcblxuLy8gYFdlYWtNYXAuZnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLmZyb21cbiQoeyB0YXJnZXQ6ICdXZWFrTWFwJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGZyb206IGZyb21cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1vZicpO1xuXG4vLyBgV2Vha01hcC5vZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLm9mXG4kKHsgdGFyZ2V0OiAnV2Vha01hcCcsIHN0YXQ6IHRydWUgfSwge1xuICBvZjogb2Zcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgJGVtcGxhY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFwLWVtcGxhY2UnKTtcblxuLy8gYFdlYWtNYXAucHJvdG90eXBlLmVtcGxhY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtdXBzZXJ0XG4kKHsgdGFyZ2V0OiAnV2Vha01hcCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICBlbXBsYWNlOiAkZW1wbGFjZVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgJHVwc2VydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXAtdXBzZXJ0Jyk7XG5cbi8vIGBXZWFrTWFwLnByb3RvdHlwZS51cHNlcnRgIG1ldGhvZCAocmVwbGFjZWQgYnkgYFdlYWtNYXAucHJvdG90eXBlLmVtcGxhY2VgKVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtdXBzZXJ0XG4kKHsgdGFyZ2V0OiAnV2Vha01hcCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICB1cHNlcnQ6ICR1cHNlcnRcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgY29sbGVjdGlvbkFkZEFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLWFkZC1hbGwnKTtcblxuLy8gYFdlYWtTZXQucHJvdG90eXBlLmFkZEFsbGAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdXZWFrU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIGFkZEFsbDogZnVuY3Rpb24gYWRkQWxsKC8qIC4uLmVsZW1lbnRzICovKSB7XG4gICAgcmV0dXJuIGNvbGxlY3Rpb25BZGRBbGwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBjb2xsZWN0aW9uRGVsZXRlQWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24tZGVsZXRlLWFsbCcpO1xuXG4vLyBgV2Vha1NldC5wcm90b3R5cGUuZGVsZXRlQWxsYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNvbGxlY3Rpb24tbWV0aG9kc1xuJCh7IHRhcmdldDogJ1dlYWtTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAgZGVsZXRlQWxsOiBmdW5jdGlvbiBkZWxldGVBbGwoLyogLi4uZWxlbWVudHMgKi8pIHtcbiAgICByZXR1cm4gY29sbGVjdGlvbkRlbGV0ZUFsbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1mcm9tJyk7XG5cbi8vIGBXZWFrU2V0LmZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5mcm9tXG4kKHsgdGFyZ2V0OiAnV2Vha1NldCcsIHN0YXQ6IHRydWUgfSwge1xuICBmcm9tOiBmcm9tXG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24tb2YnKTtcblxuLy8gYFdlYWtTZXQub2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5vZlxuJCh7IHRhcmdldDogJ1dlYWtTZXQnLCBzdGF0OiB0cnVlIH0sIHtcbiAgb2Y6IG9mXG59KTtcbiIsIi8vIGl0ZXJhYmxlIERPTSBjb2xsZWN0aW9uc1xuLy8gZmxhZyAtIGBpdGVyYWJsZWAgaW50ZXJmYWNlIC0gJ2VudHJpZXMnLCAna2V5cycsICd2YWx1ZXMnLCAnZm9yRWFjaCcgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENTU1J1bGVMaXN0OiAwLFxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiAwLFxuICBDU1NWYWx1ZUxpc3Q6IDAsXG4gIENsaWVudFJlY3RMaXN0OiAwLFxuICBET01SZWN0TGlzdDogMCxcbiAgRE9NU3RyaW5nTGlzdDogMCxcbiAgRE9NVG9rZW5MaXN0OiAxLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogMCxcbiAgRmlsZUxpc3Q6IDAsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiAwLFxuICBIVE1MQ29sbGVjdGlvbjogMCxcbiAgSFRNTEZvcm1FbGVtZW50OiAwLFxuICBIVE1MU2VsZWN0RWxlbWVudDogMCxcbiAgTWVkaWFMaXN0OiAwLFxuICBNaW1lVHlwZUFycmF5OiAwLFxuICBOYW1lZE5vZGVNYXA6IDAsXG4gIE5vZGVMaXN0OiAxLFxuICBQYWludFJlcXVlc3RMaXN0OiAwLFxuICBQbHVnaW46IDAsXG4gIFBsdWdpbkFycmF5OiAwLFxuICBTVkdMZW5ndGhMaXN0OiAwLFxuICBTVkdOdW1iZXJMaXN0OiAwLFxuICBTVkdQYXRoU2VnTGlzdDogMCxcbiAgU1ZHUG9pbnRMaXN0OiAwLFxuICBTVkdTdHJpbmdMaXN0OiAwLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiAwLFxuICBTb3VyY2VCdWZmZXJMaXN0OiAwLFxuICBTdHlsZVNoZWV0TGlzdDogMCxcbiAgVGV4dFRyYWNrQ3VlTGlzdDogMCxcbiAgVGV4dFRyYWNrTGlzdDogMCxcbiAgVG91Y2hMaXN0OiAwXG59O1xuIiwiLy8gaW4gb2xkIFdlYktpdCB2ZXJzaW9ucywgYGVsZW1lbnQuY2xhc3NMaXN0YCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgZ2xvYmFsIGBET01Ub2tlbkxpc3RgXG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbnZhciBjbGFzc0xpc3QgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ3NwYW4nKS5jbGFzc0xpc3Q7XG52YXIgRE9NVG9rZW5MaXN0UHJvdG90eXBlID0gY2xhc3NMaXN0ICYmIGNsYXNzTGlzdC5jb25zdHJ1Y3RvciAmJiBjbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERPTVRva2VuTGlzdFByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSA/IHVuZGVmaW5lZCA6IERPTVRva2VuTGlzdFByb3RvdHlwZTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgRE9NSXRlcmFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMnKTtcbnZhciBET01Ub2tlbkxpc3RQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9tLXRva2VuLWxpc3QtcHJvdG90eXBlJyk7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1mb3ItZWFjaCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxudmFyIGhhbmRsZVByb3RvdHlwZSA9IGZ1bmN0aW9uIChDb2xsZWN0aW9uUHJvdG90eXBlKSB7XG4gIC8vIHNvbWUgQ2hyb21lIHZlcnNpb25zIGhhdmUgbm9uLWNvbmZpZ3VyYWJsZSBtZXRob2RzIG9uIERPTVRva2VuTGlzdFxuICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZSAmJiBDb2xsZWN0aW9uUHJvdG90eXBlLmZvckVhY2ggIT09IGZvckVhY2gpIHRyeSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KENvbGxlY3Rpb25Qcm90b3R5cGUsICdmb3JFYWNoJywgZm9yRWFjaCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgQ29sbGVjdGlvblByb3RvdHlwZS5mb3JFYWNoID0gZm9yRWFjaDtcbiAgfVxufTtcblxuZm9yICh2YXIgQ09MTEVDVElPTl9OQU1FIGluIERPTUl0ZXJhYmxlcykge1xuICBpZiAoRE9NSXRlcmFibGVzW0NPTExFQ1RJT05fTkFNRV0pIHtcbiAgICBoYW5kbGVQcm90b3R5cGUoZ2xvYmFsW0NPTExFQ1RJT05fTkFNRV0gJiYgZ2xvYmFsW0NPTExFQ1RJT05fTkFNRV0ucHJvdG90eXBlKTtcbiAgfVxufVxuXG5oYW5kbGVQcm90b3R5cGUoRE9NVG9rZW5MaXN0UHJvdG90eXBlKTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgRE9NSXRlcmFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMnKTtcbnZhciBET01Ub2tlbkxpc3RQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9tLXRva2VuLWxpc3QtcHJvdG90eXBlJyk7XG52YXIgQXJyYXlJdGVyYXRvck1ldGhvZHMgPSByZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEFycmF5SXRlcmF0b3JNZXRob2RzLnZhbHVlcztcblxudmFyIGhhbmRsZVByb3RvdHlwZSA9IGZ1bmN0aW9uIChDb2xsZWN0aW9uUHJvdG90eXBlLCBDT0xMRUNUSU9OX05BTUUpIHtcbiAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGUpIHtcbiAgICAvLyBzb21lIENocm9tZSB2ZXJzaW9ucyBoYXZlIG5vbi1jb25maWd1cmFibGUgbWV0aG9kcyBvbiBET01Ub2tlbkxpc3RcbiAgICBpZiAoQ29sbGVjdGlvblByb3RvdHlwZVtJVEVSQVRPUl0gIT09IEFycmF5VmFsdWVzKSB0cnkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KENvbGxlY3Rpb25Qcm90b3R5cGUsIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIENvbGxlY3Rpb25Qcm90b3R5cGVbSVRFUkFUT1JdID0gQXJyYXlWYWx1ZXM7XG4gICAgfVxuICAgIGlmICghQ29sbGVjdGlvblByb3RvdHlwZVtUT19TVFJJTkdfVEFHXSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KENvbGxlY3Rpb25Qcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIENPTExFQ1RJT05fTkFNRSk7XG4gICAgfVxuICAgIGlmIChET01JdGVyYWJsZXNbQ09MTEVDVElPTl9OQU1FXSkgZm9yICh2YXIgTUVUSE9EX05BTUUgaW4gQXJyYXlJdGVyYXRvck1ldGhvZHMpIHtcbiAgICAgIC8vIHNvbWUgQ2hyb21lIHZlcnNpb25zIGhhdmUgbm9uLWNvbmZpZ3VyYWJsZSBtZXRob2RzIG9uIERPTVRva2VuTGlzdFxuICAgICAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGVbTUVUSE9EX05BTUVdICE9PSBBcnJheUl0ZXJhdG9yTWV0aG9kc1tNRVRIT0RfTkFNRV0pIHRyeSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBNRVRIT0RfTkFNRSwgQXJyYXlJdGVyYXRvck1ldGhvZHNbTUVUSE9EX05BTUVdKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIENvbGxlY3Rpb25Qcm90b3R5cGVbTUVUSE9EX05BTUVdID0gQXJyYXlJdGVyYXRvck1ldGhvZHNbTUVUSE9EX05BTUVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuZm9yICh2YXIgQ09MTEVDVElPTl9OQU1FIGluIERPTUl0ZXJhYmxlcykge1xuICBoYW5kbGVQcm90b3R5cGUoZ2xvYmFsW0NPTExFQ1RJT05fTkFNRV0gJiYgZ2xvYmFsW0NPTExFQ1RJT05fTkFNRV0ucHJvdG90eXBlLCBDT0xMRUNUSU9OX05BTUUpO1xufVxuXG5oYW5kbGVQcm90b3R5cGUoRE9NVG9rZW5MaXN0UHJvdG90eXBlLCAnRE9NVG9rZW5MaXN0Jyk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90YXNrJyk7XG5cbnZhciBGT1JDRUQgPSAhZ2xvYmFsLnNldEltbWVkaWF0ZSB8fCAhZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xuXG4vLyBodHRwOi8vdzNjLmdpdGh1Yi5pby9zZXRJbW1lZGlhdGUvXG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGBzZXRJbW1lZGlhdGVgIG1ldGhvZFxuICAvLyBodHRwOi8vdzNjLmdpdGh1Yi5pby9zZXRJbW1lZGlhdGUvI3NpLXNldEltbWVkaWF0ZVxuICBzZXRJbW1lZGlhdGU6IHRhc2suc2V0LFxuICAvLyBgY2xlYXJJbW1lZGlhdGVgIG1ldGhvZFxuICAvLyBodHRwOi8vdzNjLmdpdGh1Yi5pby9zZXRJbW1lZGlhdGUvI3NpLWNsZWFySW1tZWRpYXRlXG4gIGNsZWFySW1tZWRpYXRlOiB0YXNrLmNsZWFyXG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWljcm90YXNrJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xuXG4vLyBgcXVldWVNaWNyb3Rhc2tgIG1ldGhvZFxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvdGltZXJzLWFuZC11c2VyLXByb21wdHMuaHRtbCNkb20tcXVldWVtaWNyb3Rhc2tcbiQoeyBnbG9iYWw6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIG5vVGFyZ2V0R2V0OiB0cnVlIH0sIHtcbiAgcXVldWVNaWNyb3Rhc2s6IGZ1bmN0aW9uIHF1ZXVlTWljcm90YXNrKGZuKSB7XG4gICAgdmFyIGRvbWFpbiA9IElTX05PREUgJiYgcHJvY2Vzcy5kb21haW47XG4gICAgbWljcm90YXNrKGRvbWFpbiA/IGRvbWFpbi5iaW5kKGZuKSA6IGZuKTtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgc2xpY2UgPSBbXS5zbGljZTtcbnZhciBNU0lFID0gL01TSUUgLlxcLi8udGVzdCh1c2VyQWdlbnQpOyAvLyA8LSBkaXJ0eSBpZTktIGNoZWNrXG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHNjaGVkdWxlcikge1xuICByZXR1cm4gZnVuY3Rpb24gKGhhbmRsZXIsIHRpbWVvdXQgLyogLCAuLi5hcmd1bWVudHMgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gICAgdmFyIGFyZ3MgPSBib3VuZEFyZ3MgPyBzbGljZS5jYWxsKGFyZ3VtZW50cywgMikgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHNjaGVkdWxlcihib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gc3BlYyByZXF1aXJlbWVudFxuICAgICAgKGlzQ2FsbGFibGUoaGFuZGxlcikgPyBoYW5kbGVyIDogRnVuY3Rpb24oaGFuZGxlcikpLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH0gOiBoYW5kbGVyLCB0aW1lb3V0KTtcbiAgfTtcbn07XG5cbi8vIGllOS0gc2V0VGltZW91dCAmIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjdGltZXJzXG4kKHsgZ2xvYmFsOiB0cnVlLCBiaW5kOiB0cnVlLCBmb3JjZWQ6IE1TSUUgfSwge1xuICAvLyBgc2V0VGltZW91dGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjZG9tLXNldHRpbWVvdXRcbiAgc2V0VGltZW91dDogd3JhcChnbG9iYWwuc2V0VGltZW91dCksXG4gIC8vIGBzZXRJbnRlcnZhbGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjZG9tLXNldGludGVydmFsXG4gIHNldEludGVydmFsOiB3cmFwKGdsb2JhbC5zZXRJbnRlcnZhbClcbn0pO1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgdXJsID0gbmV3IFVSTCgnYj9hPTEmYj0yJmM9MycsICdodHRwOi8vYScpO1xuICB2YXIgc2VhcmNoUGFyYW1zID0gdXJsLnNlYXJjaFBhcmFtcztcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB1cmwucGF0aG5hbWUgPSAnYyUyMGQnO1xuICBzZWFyY2hQYXJhbXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgIHNlYXJjaFBhcmFtc1snZGVsZXRlJ10oJ2InKTtcbiAgICByZXN1bHQgKz0ga2V5ICsgdmFsdWU7XG4gIH0pO1xuICByZXR1cm4gKElTX1BVUkUgJiYgIXVybC50b0pTT04pXG4gICAgfHwgIXNlYXJjaFBhcmFtcy5zb3J0XG4gICAgfHwgdXJsLmhyZWYgIT09ICdodHRwOi8vYS9jJTIwZD9hPTEmYz0zJ1xuICAgIHx8IHNlYXJjaFBhcmFtcy5nZXQoJ2MnKSAhPT0gJzMnXG4gICAgfHwgU3RyaW5nKG5ldyBVUkxTZWFyY2hQYXJhbXMoJz9hPTEnKSkgIT09ICdhPTEnXG4gICAgfHwgIXNlYXJjaFBhcmFtc1tJVEVSQVRPUl1cbiAgICAvLyB0aHJvd3MgaW4gRWRnZVxuICAgIHx8IG5ldyBVUkwoJ2h0dHBzOi8vYUBiJykudXNlcm5hbWUgIT09ICdhJ1xuICAgIHx8IG5ldyBVUkxTZWFyY2hQYXJhbXMobmV3IFVSTFNlYXJjaFBhcmFtcygnYT1iJykpLmdldCgnYScpICE9PSAnYidcbiAgICAvLyBub3QgcHVueWNvZGVkIGluIEVkZ2VcbiAgICB8fCBuZXcgVVJMKCdodHRwOi8v0YLQtdGB0YInKS5ob3N0ICE9PSAneG4tLWUxYXliYydcbiAgICAvLyBub3QgZXNjYXBlZCBpbiBDaHJvbWUgNjItXG4gICAgfHwgbmV3IFVSTCgnaHR0cDovL2Ej0LEnKS5oYXNoICE9PSAnIyVEMCVCMSdcbiAgICAvLyBmYWlscyBpbiBDaHJvbWUgNjYtXG4gICAgfHwgcmVzdWx0ICE9PSAnYTFjMydcbiAgICAvLyB0aHJvd3MgaW4gU2FmYXJpXG4gICAgfHwgbmV3IFVSTCgnaHR0cDovL3gnLCB1bmRlZmluZWQpLmhvc3QgIT09ICd4Jztcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL3B1bnljb2RlLmpzL2Jsb2IvbWFzdGVyL3B1bnljb2RlLmpzXG52YXIgbWF4SW50ID0gMjE0NzQ4MzY0NzsgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxudmFyIGJhc2UgPSAzNjtcbnZhciB0TWluID0gMTtcbnZhciB0TWF4ID0gMjY7XG52YXIgc2tldyA9IDM4O1xudmFyIGRhbXAgPSA3MDA7XG52YXIgaW5pdGlhbEJpYXMgPSA3MjtcbnZhciBpbml0aWFsTiA9IDEyODsgLy8gMHg4MFxudmFyIGRlbGltaXRlciA9ICctJzsgLy8gJ1xceDJEJ1xudmFyIHJlZ2V4Tm9uQVNDSUkgPSAvW15cXDAtXFx1MDA3RV0vOyAvLyBub24tQVNDSUkgY2hhcnNcbnZhciByZWdleFNlcGFyYXRvcnMgPSAvWy5cXHUzMDAyXFx1RkYwRVxcdUZGNjFdL2c7IC8vIFJGQyAzNDkwIHNlcGFyYXRvcnNcbnZhciBPVkVSRkxPV19FUlJPUiA9ICdPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2Vzcyc7XG52YXIgYmFzZU1pbnVzVE1pbiA9IGJhc2UgLSB0TWluO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgbnVtZXJpYyBjb2RlIHBvaW50cyBvZiBlYWNoIFVuaWNvZGVcbiAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcbiAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG4gKiBVQ1MtMiBleHBvc2VzIGFzIHNlcGFyYXRlIGNoYXJhY3RlcnMpIGludG8gYSBzaW5nbGUgY29kZSBwb2ludCxcbiAqIG1hdGNoaW5nIFVURi0xNi5cbiAqL1xudmFyIHVjczJkZWNvZGUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHZhciBvdXRwdXQgPSBbXTtcbiAgdmFyIGNvdW50ZXIgPSAwO1xuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgd2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBzdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO1xuICAgIGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcbiAgICAgIC8vIEl0J3MgYSBoaWdoIHN1cnJvZ2F0ZSwgYW5kIHRoZXJlIGlzIGEgbmV4dCBjaGFyYWN0ZXIuXG4gICAgICB2YXIgZXh0cmEgPSBzdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO1xuICAgICAgaWYgKChleHRyYSAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7IC8vIExvdyBzdXJyb2dhdGUuXG4gICAgICAgIG91dHB1dC5wdXNoKCgodmFsdWUgJiAweDNGRikgPDwgMTApICsgKGV4dHJhICYgMHgzRkYpICsgMHgxMDAwMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJdCdzIGFuIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZVxuICAgICAgICAvLyBuZXh0IGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpci5cbiAgICAgICAgb3V0cHV0LnB1c2godmFsdWUpO1xuICAgICAgICBjb3VudGVyLS07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dHB1dDtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuICovXG52YXIgZGlnaXRUb0Jhc2ljID0gZnVuY3Rpb24gKGRpZ2l0KSB7XG4gIC8vICAwLi4yNSBtYXAgdG8gQVNDSUkgYS4ueiBvciBBLi5aXG4gIC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuICByZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpO1xufTtcblxuLyoqXG4gKiBCaWFzIGFkYXB0YXRpb24gZnVuY3Rpb24gYXMgcGVyIHNlY3Rpb24gMy40IG9mIFJGQyAzNDkyLlxuICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcbiAqL1xudmFyIGFkYXB0ID0gZnVuY3Rpb24gKGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuICB2YXIgayA9IDA7XG4gIGRlbHRhID0gZmlyc3RUaW1lID8gZmxvb3IoZGVsdGEgLyBkYW1wKSA6IGRlbHRhID4+IDE7XG4gIGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcbiAgZm9yICg7IGRlbHRhID4gYmFzZU1pbnVzVE1pbiAqIHRNYXggPj4gMTsgayArPSBiYXNlKSB7XG4gICAgZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuICB9XG4gIHJldHVybiBmbG9vcihrICsgKGJhc2VNaW51c1RNaW4gKyAxKSAqIGRlbHRhIC8gKGRlbHRhICsgc2tldykpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMgKGUuZy4gYSBkb21haW4gbmFtZSBsYWJlbCkgdG8gYVxuICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzIC0tIFRPRE9cbnZhciBlbmNvZGUgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgdmFyIG91dHB1dCA9IFtdO1xuXG4gIC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIGFuIGFycmF5IG9mIFVuaWNvZGUgY29kZSBwb2ludHMuXG4gIGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cbiAgLy8gQ2FjaGUgdGhlIGxlbmd0aC5cbiAgdmFyIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG4gIC8vIEluaXRpYWxpemUgdGhlIHN0YXRlLlxuICB2YXIgbiA9IGluaXRpYWxOO1xuICB2YXIgZGVsdGEgPSAwO1xuICB2YXIgYmlhcyA9IGluaXRpYWxCaWFzO1xuICB2YXIgaSwgY3VycmVudFZhbHVlO1xuXG4gIC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHMuXG4gIGZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGN1cnJlbnRWYWx1ZSA9IGlucHV0W2ldO1xuICAgIGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG4gICAgICBvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDsgLy8gbnVtYmVyIG9mIGJhc2ljIGNvZGUgcG9pbnRzLlxuICB2YXIgaGFuZGxlZENQQ291bnQgPSBiYXNpY0xlbmd0aDsgLy8gbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgaGF2ZSBiZWVuIGhhbmRsZWQ7XG5cbiAgLy8gRmluaXNoIHRoZSBiYXNpYyBzdHJpbmcgd2l0aCBhIGRlbGltaXRlciB1bmxlc3MgaXQncyBlbXB0eS5cbiAgaWYgKGJhc2ljTGVuZ3RoKSB7XG4gICAgb3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcbiAgfVxuXG4gIC8vIE1haW4gZW5jb2RpbmcgbG9vcDpcbiAgd2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcbiAgICAvLyBBbGwgbm9uLWJhc2ljIGNvZGUgcG9pbnRzIDwgbiBoYXZlIGJlZW4gaGFuZGxlZCBhbHJlYWR5LiBGaW5kIHRoZSBuZXh0IGxhcmdlciBvbmU6XG4gICAgdmFyIG0gPSBtYXhJbnQ7XG4gICAgZm9yIChpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSBpbnB1dFtpXTtcbiAgICAgIGlmIChjdXJyZW50VmFsdWUgPj0gbiAmJiBjdXJyZW50VmFsdWUgPCBtKSB7XG4gICAgICAgIG0gPSBjdXJyZW50VmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LCBidXQgZ3VhcmQgYWdhaW5zdCBvdmVyZmxvdy5cbiAgICB2YXIgaGFuZGxlZENQQ291bnRQbHVzT25lID0gaGFuZGxlZENQQ291bnQgKyAxO1xuICAgIGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG4gICAgICB0aHJvdyBSYW5nZUVycm9yKE9WRVJGTE9XX0VSUk9SKTtcbiAgICB9XG5cbiAgICBkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuICAgIG4gPSBtO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSBpbnB1dFtpXTtcbiAgICAgIGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcbiAgICAgICAgdGhyb3cgUmFuZ2VFcnJvcihPVkVSRkxPV19FUlJPUik7XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudFZhbHVlID09IG4pIHtcbiAgICAgICAgLy8gUmVwcmVzZW50IGRlbHRhIGFzIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIuXG4gICAgICAgIHZhciBxID0gZGVsdGE7XG4gICAgICAgIGZvciAodmFyIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuICAgICAgICAgIHZhciB0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcbiAgICAgICAgICBpZiAocSA8IHQpIGJyZWFrO1xuICAgICAgICAgIHZhciBxTWludXNUID0gcSAtIHQ7XG4gICAgICAgICAgdmFyIGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcbiAgICAgICAgICBvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHQgKyBxTWludXNUICUgYmFzZU1pbnVzVCkpKTtcbiAgICAgICAgICBxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuICAgICAgICB9XG5cbiAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxKSkpO1xuICAgICAgICBiaWFzID0gYWRhcHQoZGVsdGEsIGhhbmRsZWRDUENvdW50UGx1c09uZSwgaGFuZGxlZENQQ291bnQgPT0gYmFzaWNMZW5ndGgpO1xuICAgICAgICBkZWx0YSA9IDA7XG4gICAgICAgICsraGFuZGxlZENQQ291bnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgKytkZWx0YTtcbiAgICArK247XG4gIH1cbiAgcmV0dXJuIG91dHB1dC5qb2luKCcnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gIHZhciBlbmNvZGVkID0gW107XG4gIHZhciBsYWJlbHMgPSBpbnB1dC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UocmVnZXhTZXBhcmF0b3JzLCAnXFx1MDAyRScpLnNwbGl0KCcuJyk7XG4gIHZhciBpLCBsYWJlbDtcbiAgZm9yIChpID0gMDsgaSA8IGxhYmVscy5sZW5ndGg7IGkrKykge1xuICAgIGxhYmVsID0gbGFiZWxzW2ldO1xuICAgIGVuY29kZWQucHVzaChyZWdleE5vbkFTQ0lJLnRlc3QobGFiZWwpID8gJ3huLS0nICsgZW5jb2RlKGxhYmVsKSA6IGxhYmVsKTtcbiAgfVxuICByZXR1cm4gZW5jb2RlZC5qb2luKCcuJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogaW4gY29yZS1qc0A0LCBtb3ZlIC9tb2R1bGVzLyBkZXBlbmRlbmNpZXMgdG8gcHVibGljIGVudHJpZXMgZm9yIGJldHRlciBvcHRpbWl6YXRpb24gYnkgdG9vbHMgbGlrZSBgcHJlc2V0LWVudmBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgVVNFX05BVElWRV9VUkwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXVybCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUtYWxsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyYXRvci1jb25zdHJ1Y3RvcicpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBuYXRpdmVGZXRjaCA9IGdldEJ1aWx0SW4oJ2ZldGNoJyk7XG52YXIgTmF0aXZlUmVxdWVzdCA9IGdldEJ1aWx0SW4oJ1JlcXVlc3QnKTtcbnZhciBSZXF1ZXN0UHJvdG90eXBlID0gTmF0aXZlUmVxdWVzdCAmJiBOYXRpdmVSZXF1ZXN0LnByb3RvdHlwZTtcbnZhciBIZWFkZXJzID0gZ2V0QnVpbHRJbignSGVhZGVycycpO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFVSTF9TRUFSQ0hfUEFSQU1TID0gJ1VSTFNlYXJjaFBhcmFtcyc7XG52YXIgVVJMX1NFQVJDSF9QQVJBTVNfSVRFUkFUT1IgPSBVUkxfU0VBUkNIX1BBUkFNUyArICdJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsUGFyYW1zU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihVUkxfU0VBUkNIX1BBUkFNUyk7XG52YXIgZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoVVJMX1NFQVJDSF9QQVJBTVNfSVRFUkFUT1IpO1xuXG52YXIgcGx1cyA9IC9cXCsvZztcbnZhciBzZXF1ZW5jZXMgPSBBcnJheSg0KTtcblxudmFyIHBlcmNlbnRTZXF1ZW5jZSA9IGZ1bmN0aW9uIChieXRlcykge1xuICByZXR1cm4gc2VxdWVuY2VzW2J5dGVzIC0gMV0gfHwgKHNlcXVlbmNlc1tieXRlcyAtIDFdID0gUmVnRXhwKCcoKD86JVtcXFxcZGEtZl17Mn0peycgKyBieXRlcyArICd9KScsICdnaScpKTtcbn07XG5cbnZhciBwZXJjZW50RGVjb2RlID0gZnVuY3Rpb24gKHNlcXVlbmNlKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChzZXF1ZW5jZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHNlcXVlbmNlO1xuICB9XG59O1xuXG52YXIgZGVzZXJpYWxpemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHJlc3VsdCA9IGl0LnJlcGxhY2UocGx1cywgJyAnKTtcbiAgdmFyIGJ5dGVzID0gNDtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHJlc3VsdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgd2hpbGUgKGJ5dGVzKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShwZXJjZW50U2VxdWVuY2UoYnl0ZXMtLSksIHBlcmNlbnREZWNvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuXG52YXIgZmluZCA9IC9bIScoKX5dfCUyMC9nO1xuXG52YXIgcmVwbGFjZSA9IHtcbiAgJyEnOiAnJTIxJyxcbiAgXCInXCI6ICclMjcnLFxuICAnKCc6ICclMjgnLFxuICAnKSc6ICclMjknLFxuICAnfic6ICclN0UnLFxuICAnJTIwJzogJysnXG59O1xuXG52YXIgcmVwbGFjZXIgPSBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgcmV0dXJuIHJlcGxhY2VbbWF0Y2hdO1xufTtcblxudmFyIHNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGl0KS5yZXBsYWNlKGZpbmQsIHJlcGxhY2VyKTtcbn07XG5cbnZhciBwYXJzZVNlYXJjaFBhcmFtcyA9IGZ1bmN0aW9uIChyZXN1bHQsIHF1ZXJ5KSB7XG4gIGlmIChxdWVyeSkge1xuICAgIHZhciBhdHRyaWJ1dGVzID0gcXVlcnkuc3BsaXQoJyYnKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBhdHRyaWJ1dGUsIGVudHJ5O1xuICAgIHdoaWxlIChpbmRleCA8IGF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW2luZGV4KytdO1xuICAgICAgaWYgKGF0dHJpYnV0ZS5sZW5ndGgpIHtcbiAgICAgICAgZW50cnkgPSBhdHRyaWJ1dGUuc3BsaXQoJz0nKTtcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgIGtleTogZGVzZXJpYWxpemUoZW50cnkuc2hpZnQoKSksXG4gICAgICAgICAgdmFsdWU6IGRlc2VyaWFsaXplKGVudHJ5LmpvaW4oJz0nKSlcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG52YXIgdXBkYXRlU2VhcmNoUGFyYW1zID0gZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gIHRoaXMuZW50cmllcy5sZW5ndGggPSAwO1xuICBwYXJzZVNlYXJjaFBhcmFtcyh0aGlzLmVudHJpZXMsIHF1ZXJ5KTtcbn07XG5cbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IGZ1bmN0aW9uIChwYXNzZWQsIHJlcXVpcmVkKSB7XG4gIGlmIChwYXNzZWQgPCByZXF1aXJlZCkgdGhyb3cgVHlwZUVycm9yKCdOb3QgZW5vdWdoIGFyZ3VtZW50cycpO1xufTtcblxudmFyIFVSTFNlYXJjaFBhcmFtc0l0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihmdW5jdGlvbiBJdGVyYXRvcihwYXJhbXMsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogVVJMX1NFQVJDSF9QQVJBTVNfSVRFUkFUT1IsXG4gICAgaXRlcmF0b3I6IGdldEl0ZXJhdG9yKGdldEludGVybmFsUGFyYW1zU3RhdGUocGFyYW1zKS5lbnRyaWVzKSxcbiAgICBraW5kOiBraW5kXG4gIH0pO1xufSwgJ0l0ZXJhdG9yJywgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlKHRoaXMpO1xuICB2YXIga2luZCA9IHN0YXRlLmtpbmQ7XG4gIHZhciBzdGVwID0gc3RhdGUuaXRlcmF0b3IubmV4dCgpO1xuICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICBpZiAoIXN0ZXAuZG9uZSkge1xuICAgIHN0ZXAudmFsdWUgPSBraW5kID09PSAna2V5cycgPyBlbnRyeS5rZXkgOiBraW5kID09PSAndmFsdWVzJyA/IGVudHJ5LnZhbHVlIDogW2VudHJ5LmtleSwgZW50cnkudmFsdWVdO1xuICB9IHJldHVybiBzdGVwO1xufSk7XG5cbi8vIGBVUkxTZWFyY2hQYXJhbXNgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2ludGVyZmFjZS11cmxzZWFyY2hwYXJhbXNcbnZhciBVUkxTZWFyY2hQYXJhbXNDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIFVSTFNlYXJjaFBhcmFtcygvKiBpbml0ICovKSB7XG4gIGFuSW5zdGFuY2UodGhpcywgVVJMU2VhcmNoUGFyYW1zQ29uc3RydWN0b3IsIFVSTF9TRUFSQ0hfUEFSQU1TKTtcbiAgdmFyIGluaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZDtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB2YXIgZW50cmllcyA9IFtdO1xuICB2YXIgaXRlcmF0b3JNZXRob2QsIGl0ZXJhdG9yLCBuZXh0LCBzdGVwLCBlbnRyeUl0ZXJhdG9yLCBlbnRyeU5leHQsIGZpcnN0LCBzZWNvbmQsIGtleTtcblxuICBzZXRJbnRlcm5hbFN0YXRlKHRoYXQsIHtcbiAgICB0eXBlOiBVUkxfU0VBUkNIX1BBUkFNUyxcbiAgICBlbnRyaWVzOiBlbnRyaWVzLFxuICAgIHVwZGF0ZVVSTDogZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LFxuICAgIHVwZGF0ZVNlYXJjaFBhcmFtczogdXBkYXRlU2VhcmNoUGFyYW1zXG4gIH0pO1xuXG4gIGlmIChpbml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoaXNPYmplY3QoaW5pdCkpIHtcbiAgICAgIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2QoaW5pdCk7XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihpbml0LCBpdGVyYXRvck1ldGhvZCk7XG4gICAgICAgIG5leHQgPSBpdGVyYXRvci5uZXh0O1xuICAgICAgICB3aGlsZSAoIShzdGVwID0gbmV4dC5jYWxsKGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgICAgICAgIGVudHJ5SXRlcmF0b3IgPSBnZXRJdGVyYXRvcihhbk9iamVjdChzdGVwLnZhbHVlKSk7XG4gICAgICAgICAgZW50cnlOZXh0ID0gZW50cnlJdGVyYXRvci5uZXh0O1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChmaXJzdCA9IGVudHJ5TmV4dC5jYWxsKGVudHJ5SXRlcmF0b3IpKS5kb25lIHx8XG4gICAgICAgICAgICAoc2Vjb25kID0gZW50cnlOZXh0LmNhbGwoZW50cnlJdGVyYXRvcikpLmRvbmUgfHxcbiAgICAgICAgICAgICFlbnRyeU5leHQuY2FsbChlbnRyeUl0ZXJhdG9yKS5kb25lXG4gICAgICAgICAgKSB0aHJvdyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHNlcXVlbmNlIHdpdGggbGVuZ3RoIDInKTtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goeyBrZXk6ICR0b1N0cmluZyhmaXJzdC52YWx1ZSksIHZhbHVlOiAkdG9TdHJpbmcoc2Vjb25kLnZhbHVlKSB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGZvciAoa2V5IGluIGluaXQpIGlmIChoYXNPd24oaW5pdCwga2V5KSkgZW50cmllcy5wdXNoKHsga2V5OiBrZXksIHZhbHVlOiAkdG9TdHJpbmcoaW5pdFtrZXldKSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VTZWFyY2hQYXJhbXMoXG4gICAgICAgIGVudHJpZXMsXG4gICAgICAgIHR5cGVvZiBpbml0ID09PSAnc3RyaW5nJyA/IGluaXQuY2hhckF0KDApID09PSAnPycgPyBpbml0LnNsaWNlKDEpIDogaW5pdCA6ICR0b1N0cmluZyhpbml0KVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUgPSBVUkxTZWFyY2hQYXJhbXNDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbnJlZGVmaW5lQWxsKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSwge1xuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5hcHBlbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtYXBwZW5kXG4gIGFwcGVuZDogZnVuY3Rpb24gYXBwZW5kKG5hbWUsIHZhbHVlKSB7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMik7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKTtcbiAgICBzdGF0ZS5lbnRyaWVzLnB1c2goeyBrZXk6ICR0b1N0cmluZyhuYW1lKSwgdmFsdWU6ICR0b1N0cmluZyh2YWx1ZSkgfSk7XG4gICAgc3RhdGUudXBkYXRlVVJMKCk7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmRlbGV0ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1kZWxldGVcbiAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKTtcbiAgICB2YXIgZW50cmllcyA9IHN0YXRlLmVudHJpZXM7XG4gICAgdmFyIGtleSA9ICR0b1N0cmluZyhuYW1lKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChpbmRleCA8IGVudHJpZXMubGVuZ3RoKSB7XG4gICAgICBpZiAoZW50cmllc1tpbmRleF0ua2V5ID09PSBrZXkpIGVudHJpZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIGVsc2UgaW5kZXgrKztcbiAgICB9XG4gICAgc3RhdGUudXBkYXRlVVJMKCk7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmdldGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1nZXRcbiAgZ2V0OiBmdW5jdGlvbiBnZXQobmFtZSkge1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBlbnRyaWVzID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKS5lbnRyaWVzO1xuICAgIHZhciBrZXkgPSAkdG9TdHJpbmcobmFtZSk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBmb3IgKDsgaW5kZXggPCBlbnRyaWVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKGVudHJpZXNbaW5kZXhdLmtleSA9PT0ga2V5KSByZXR1cm4gZW50cmllc1tpbmRleF0udmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5nZXRBbGxgIG1ldGhvZFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtZ2V0YWxsXG4gIGdldEFsbDogZnVuY3Rpb24gZ2V0QWxsKG5hbWUpIHtcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIgZW50cmllcyA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcykuZW50cmllcztcbiAgICB2YXIga2V5ID0gJHRvU3RyaW5nKG5hbWUpO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGZvciAoOyBpbmRleCA8IGVudHJpZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBpZiAoZW50cmllc1tpbmRleF0ua2V5ID09PSBrZXkpIHJlc3VsdC5wdXNoKGVudHJpZXNbaW5kZXhdLnZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuaGFzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLWhhc1xuICBoYXM6IGZ1bmN0aW9uIGhhcyhuYW1lKSB7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIGVudHJpZXMgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpLmVudHJpZXM7XG4gICAgdmFyIGtleSA9ICR0b1N0cmluZyhuYW1lKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChpbmRleCA8IGVudHJpZXMubGVuZ3RoKSB7XG4gICAgICBpZiAoZW50cmllc1tpbmRleCsrXS5rZXkgPT09IGtleSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuc2V0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLXNldFxuICBzZXQ6IGZ1bmN0aW9uIHNldChuYW1lLCB2YWx1ZSkge1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcyk7XG4gICAgdmFyIGVudHJpZXMgPSBzdGF0ZS5lbnRyaWVzO1xuICAgIHZhciBmb3VuZCA9IGZhbHNlO1xuICAgIHZhciBrZXkgPSAkdG9TdHJpbmcobmFtZSk7XG4gICAgdmFyIHZhbCA9ICR0b1N0cmluZyh2YWx1ZSk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgZW50cnk7XG4gICAgZm9yICg7IGluZGV4IDwgZW50cmllcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgICBpZiAoZW50cnkua2V5ID09PSBrZXkpIHtcbiAgICAgICAgaWYgKGZvdW5kKSBlbnRyaWVzLnNwbGljZShpbmRleC0tLCAxKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGVudHJ5LnZhbHVlID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghZm91bmQpIGVudHJpZXMucHVzaCh7IGtleToga2V5LCB2YWx1ZTogdmFsIH0pO1xuICAgIHN0YXRlLnVwZGF0ZVVSTCgpO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5zb3J0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLXNvcnRcbiAgc29ydDogZnVuY3Rpb24gc29ydCgpIHtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpO1xuICAgIHZhciBlbnRyaWVzID0gc3RhdGUuZW50cmllcztcbiAgICAvLyBBcnJheSNzb3J0IGlzIG5vdCBzdGFibGUgaW4gc29tZSBlbmdpbmVzXG4gICAgdmFyIHNsaWNlID0gZW50cmllcy5zbGljZSgpO1xuICAgIHZhciBlbnRyeSwgZW50cmllc0luZGV4LCBzbGljZUluZGV4O1xuICAgIGVudHJpZXMubGVuZ3RoID0gMDtcbiAgICBmb3IgKHNsaWNlSW5kZXggPSAwOyBzbGljZUluZGV4IDwgc2xpY2UubGVuZ3RoOyBzbGljZUluZGV4KyspIHtcbiAgICAgIGVudHJ5ID0gc2xpY2Vbc2xpY2VJbmRleF07XG4gICAgICBmb3IgKGVudHJpZXNJbmRleCA9IDA7IGVudHJpZXNJbmRleCA8IHNsaWNlSW5kZXg7IGVudHJpZXNJbmRleCsrKSB7XG4gICAgICAgIGlmIChlbnRyaWVzW2VudHJpZXNJbmRleF0ua2V5ID4gZW50cnkua2V5KSB7XG4gICAgICAgICAgZW50cmllcy5zcGxpY2UoZW50cmllc0luZGV4LCAwLCBlbnRyeSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChlbnRyaWVzSW5kZXggPT09IHNsaWNlSW5kZXgpIGVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgfVxuICAgIHN0YXRlLnVwZGF0ZVVSTCgpO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFjayAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgZW50cmllcyA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcykuZW50cmllcztcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2ssIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBlbnRyeTtcbiAgICB3aGlsZSAoaW5kZXggPCBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgZW50cnkgPSBlbnRyaWVzW2luZGV4KytdO1xuICAgICAgYm91bmRGdW5jdGlvbihlbnRyeS52YWx1ZSwgZW50cnkua2V5LCB0aGlzKTtcbiAgICB9XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmtleXNgIG1ldGhvZFxuICBrZXlzOiBmdW5jdGlvbiBrZXlzKCkge1xuICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zSXRlcmF0b3IodGhpcywgJ2tleXMnKTtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUudmFsdWVzYCBtZXRob2RcbiAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoKSB7XG4gICAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXNJdGVyYXRvcih0aGlzLCAndmFsdWVzJyk7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKCkge1xuICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zSXRlcmF0b3IodGhpcywgJ2VudHJpZXMnKTtcbiAgfVxufSwgeyBlbnVtZXJhYmxlOiB0cnVlIH0pO1xuXG4vLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG5yZWRlZmluZShVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUsIElURVJBVE9SLCBVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUuZW50cmllcywgeyBuYW1lOiAnZW50cmllcycgfSk7XG5cbi8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsc2VhcmNocGFyYW1zLXN0cmluZ2lmaWNhdGlvbi1iZWhhdmlvclxucmVkZWZpbmUoVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgdmFyIGVudHJpZXMgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpLmVudHJpZXM7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGVudHJ5O1xuICB3aGlsZSAoaW5kZXggPCBlbnRyaWVzLmxlbmd0aCkge1xuICAgIGVudHJ5ID0gZW50cmllc1tpbmRleCsrXTtcbiAgICByZXN1bHQucHVzaChzZXJpYWxpemUoZW50cnkua2V5KSArICc9JyArIHNlcmlhbGl6ZShlbnRyeS52YWx1ZSkpO1xuICB9IHJldHVybiByZXN1bHQuam9pbignJicpO1xufSwgeyBlbnVtZXJhYmxlOiB0cnVlIH0pO1xuXG5zZXRUb1N0cmluZ1RhZyhVUkxTZWFyY2hQYXJhbXNDb25zdHJ1Y3RvciwgVVJMX1NFQVJDSF9QQVJBTVMpO1xuXG4kKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6ICFVU0VfTkFUSVZFX1VSTCB9LCB7XG4gIFVSTFNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zQ29uc3RydWN0b3Jcbn0pO1xuXG4vLyBXcmFwIGBmZXRjaGAgYW5kIGBSZXF1ZXN0YCBmb3IgY29ycmVjdCB3b3JrIHdpdGggcG9seWZpbGxlZCBgVVJMU2VhcmNoUGFyYW1zYFxuaWYgKCFVU0VfTkFUSVZFX1VSTCAmJiBpc0NhbGxhYmxlKEhlYWRlcnMpKSB7XG4gIHZhciB3cmFwUmVxdWVzdE9wdGlvbnMgPSBmdW5jdGlvbiAoaW5pdCkge1xuICAgIGlmIChpc09iamVjdChpbml0KSkge1xuICAgICAgdmFyIGJvZHkgPSBpbml0LmJvZHk7XG4gICAgICB2YXIgaGVhZGVycztcbiAgICAgIGlmIChjbGFzc29mKGJvZHkpID09PSBVUkxfU0VBUkNIX1BBUkFNUykge1xuICAgICAgICBoZWFkZXJzID0gaW5pdC5oZWFkZXJzID8gbmV3IEhlYWRlcnMoaW5pdC5oZWFkZXJzKSA6IG5ldyBIZWFkZXJzKCk7XG4gICAgICAgIGlmICghaGVhZGVycy5oYXMoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICAgICAgaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGUoaW5pdCwge1xuICAgICAgICAgIGJvZHk6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCBTdHJpbmcoYm9keSkpLFxuICAgICAgICAgIGhlYWRlcnM6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCBoZWFkZXJzKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IHJldHVybiBpbml0O1xuICB9O1xuXG4gIGlmIChpc0NhbGxhYmxlKG5hdGl2ZUZldGNoKSkge1xuICAgICQoeyBnbG9iYWw6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgICBmZXRjaDogZnVuY3Rpb24gZmV0Y2goaW5wdXQgLyogLCBpbml0ICovKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVGZXRjaChpbnB1dCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyB3cmFwUmVxdWVzdE9wdGlvbnMoYXJndW1lbnRzWzFdKSA6IHt9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChpc0NhbGxhYmxlKE5hdGl2ZVJlcXVlc3QpKSB7XG4gICAgdmFyIFJlcXVlc3RDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQgLyogLCBpbml0ICovKSB7XG4gICAgICBhbkluc3RhbmNlKHRoaXMsIFJlcXVlc3RDb25zdHJ1Y3RvciwgJ1JlcXVlc3QnKTtcbiAgICAgIHJldHVybiBuZXcgTmF0aXZlUmVxdWVzdChpbnB1dCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyB3cmFwUmVxdWVzdE9wdGlvbnMoYXJndW1lbnRzWzFdKSA6IHt9KTtcbiAgICB9O1xuXG4gICAgUmVxdWVzdFByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlcXVlc3RDb25zdHJ1Y3RvcjtcbiAgICBSZXF1ZXN0Q29uc3RydWN0b3IucHJvdG90eXBlID0gUmVxdWVzdFByb3RvdHlwZTtcblxuICAgICQoeyBnbG9iYWw6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgICBSZXF1ZXN0OiBSZXF1ZXN0Q29uc3RydWN0b3JcbiAgICB9KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgVVJMU2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXNDb25zdHJ1Y3RvcixcbiAgZ2V0U3RhdGU6IGdldEludGVybmFsUGFyYW1zU3RhdGVcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBpbiBjb3JlLWpzQDQsIG1vdmUgL21vZHVsZXMvIGRlcGVuZGVuY2llcyB0byBwdWJsaWMgZW50cmllcyBmb3IgYmV0dGVyIG9wdGltaXphdGlvbiBieSB0b29scyBsaWtlIGBwcmVzZXQtZW52YFxucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3InKTtcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVVNFX05BVElWRV9VUkwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXVybCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1hc3NpZ24nKTtcbnZhciBhcnJheUZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbScpO1xudmFyIGNvZGVBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY29kZUF0O1xudmFyIHRvQVNDSUkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXB1bnljb2RlLXRvLWFzY2lpJyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgVVJMU2VhcmNoUGFyYW1zTW9kdWxlID0gcmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBOYXRpdmVVUkwgPSBnbG9iYWwuVVJMO1xudmFyIFVSTFNlYXJjaFBhcmFtcyA9IFVSTFNlYXJjaFBhcmFtc01vZHVsZS5VUkxTZWFyY2hQYXJhbXM7XG52YXIgZ2V0SW50ZXJuYWxTZWFyY2hQYXJhbXNTdGF0ZSA9IFVSTFNlYXJjaFBhcmFtc01vZHVsZS5nZXRTdGF0ZTtcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxVUkxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKCdVUkwnKTtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgcG93ID0gTWF0aC5wb3c7XG5cbnZhciBJTlZBTElEX0FVVEhPUklUWSA9ICdJbnZhbGlkIGF1dGhvcml0eSc7XG52YXIgSU5WQUxJRF9TQ0hFTUUgPSAnSW52YWxpZCBzY2hlbWUnO1xudmFyIElOVkFMSURfSE9TVCA9ICdJbnZhbGlkIGhvc3QnO1xudmFyIElOVkFMSURfUE9SVCA9ICdJbnZhbGlkIHBvcnQnO1xuXG52YXIgQUxQSEEgPSAvW2Etel0vaTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tb2JzY3VyZS1yYW5nZSAtLSBzYWZlXG52YXIgQUxQSEFOVU1FUklDID0gL1tcXGQrLS5hLXpdL2k7XG52YXIgRElHSVQgPSAvXFxkLztcbnZhciBIRVhfU1RBUlQgPSAvXjB4L2k7XG52YXIgT0NUID0gL15bMC03XSskLztcbnZhciBERUMgPSAvXlxcZCskLztcbnZhciBIRVggPSAvXltcXGRhLWZdKyQvaTtcbi8qIGVzbGludC1kaXNhYmxlIHJlZ2V4cC9uby1jb250cm9sLWNoYXJhY3RlciAtLSBzYWZlICovXG52YXIgRk9SQklEREVOX0hPU1RfQ09ERV9QT0lOVCA9IC9bXFwwXFx0XFxuXFxyICMlLzo8Pj9AW1xcXFxcXF1efF0vO1xudmFyIEZPUkJJRERFTl9IT1NUX0NPREVfUE9JTlRfRVhDTFVESU5HX1BFUkNFTlQgPSAvW1xcMFxcdFxcblxcciAjLzo8Pj9AW1xcXFxcXF1efF0vO1xudmFyIExFQURJTkdfQU5EX1RSQUlMSU5HX0MwX0NPTlRST0xfT1JfU1BBQ0UgPSAvXltcXHUwMDAwLVxcdTAwMjBdK3xbXFx1MDAwMC1cXHUwMDIwXSskL2c7XG52YXIgVEFCX0FORF9ORVdfTElORSA9IC9bXFx0XFxuXFxyXS9nO1xuLyogZXNsaW50LWVuYWJsZSByZWdleHAvbm8tY29udHJvbC1jaGFyYWN0ZXIgLS0gc2FmZSAqL1xudmFyIEVPRjtcblxudmFyIHBhcnNlSG9zdCA9IGZ1bmN0aW9uICh1cmwsIGlucHV0KSB7XG4gIHZhciByZXN1bHQsIGNvZGVQb2ludHMsIGluZGV4O1xuICBpZiAoaW5wdXQuY2hhckF0KDApID09ICdbJykge1xuICAgIGlmIChpbnB1dC5jaGFyQXQoaW5wdXQubGVuZ3RoIC0gMSkgIT0gJ10nKSByZXR1cm4gSU5WQUxJRF9IT1NUO1xuICAgIHJlc3VsdCA9IHBhcnNlSVB2NihpbnB1dC5zbGljZSgxLCAtMSkpO1xuICAgIGlmICghcmVzdWx0KSByZXR1cm4gSU5WQUxJRF9IT1NUO1xuICAgIHVybC5ob3N0ID0gcmVzdWx0O1xuICAvLyBvcGFxdWUgaG9zdFxuICB9IGVsc2UgaWYgKCFpc1NwZWNpYWwodXJsKSkge1xuICAgIGlmIChGT1JCSURERU5fSE9TVF9DT0RFX1BPSU5UX0VYQ0xVRElOR19QRVJDRU5ULnRlc3QoaW5wdXQpKSByZXR1cm4gSU5WQUxJRF9IT1NUO1xuICAgIHJlc3VsdCA9ICcnO1xuICAgIGNvZGVQb2ludHMgPSBhcnJheUZyb20oaW5wdXQpO1xuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGNvZGVQb2ludHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICByZXN1bHQgKz0gcGVyY2VudEVuY29kZShjb2RlUG9pbnRzW2luZGV4XSwgQzBDb250cm9sUGVyY2VudEVuY29kZVNldCk7XG4gICAgfVxuICAgIHVybC5ob3N0ID0gcmVzdWx0O1xuICB9IGVsc2Uge1xuICAgIGlucHV0ID0gdG9BU0NJSShpbnB1dCk7XG4gICAgaWYgKEZPUkJJRERFTl9IT1NUX0NPREVfUE9JTlQudGVzdChpbnB1dCkpIHJldHVybiBJTlZBTElEX0hPU1Q7XG4gICAgcmVzdWx0ID0gcGFyc2VJUHY0KGlucHV0KTtcbiAgICBpZiAocmVzdWx0ID09PSBudWxsKSByZXR1cm4gSU5WQUxJRF9IT1NUO1xuICAgIHVybC5ob3N0ID0gcmVzdWx0O1xuICB9XG59O1xuXG52YXIgcGFyc2VJUHY0ID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gIHZhciBwYXJ0cyA9IGlucHV0LnNwbGl0KCcuJyk7XG4gIHZhciBwYXJ0c0xlbmd0aCwgbnVtYmVycywgaW5kZXgsIHBhcnQsIHJhZGl4LCBudW1iZXIsIGlwdjQ7XG4gIGlmIChwYXJ0cy5sZW5ndGggJiYgcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gPT0gJycpIHtcbiAgICBwYXJ0cy5wb3AoKTtcbiAgfVxuICBwYXJ0c0xlbmd0aCA9IHBhcnRzLmxlbmd0aDtcbiAgaWYgKHBhcnRzTGVuZ3RoID4gNCkgcmV0dXJuIGlucHV0O1xuICBudW1iZXJzID0gW107XG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHBhcnRzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgcGFydCA9IHBhcnRzW2luZGV4XTtcbiAgICBpZiAocGFydCA9PSAnJykgcmV0dXJuIGlucHV0O1xuICAgIHJhZGl4ID0gMTA7XG4gICAgaWYgKHBhcnQubGVuZ3RoID4gMSAmJiBwYXJ0LmNoYXJBdCgwKSA9PSAnMCcpIHtcbiAgICAgIHJhZGl4ID0gSEVYX1NUQVJULnRlc3QocGFydCkgPyAxNiA6IDg7XG4gICAgICBwYXJ0ID0gcGFydC5zbGljZShyYWRpeCA9PSA4ID8gMSA6IDIpO1xuICAgIH1cbiAgICBpZiAocGFydCA9PT0gJycpIHtcbiAgICAgIG51bWJlciA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghKHJhZGl4ID09IDEwID8gREVDIDogcmFkaXggPT0gOCA/IE9DVCA6IEhFWCkudGVzdChwYXJ0KSkgcmV0dXJuIGlucHV0O1xuICAgICAgbnVtYmVyID0gcGFyc2VJbnQocGFydCwgcmFkaXgpO1xuICAgIH1cbiAgICBudW1iZXJzLnB1c2gobnVtYmVyKTtcbiAgfVxuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBwYXJ0c0xlbmd0aDsgaW5kZXgrKykge1xuICAgIG51bWJlciA9IG51bWJlcnNbaW5kZXhdO1xuICAgIGlmIChpbmRleCA9PSBwYXJ0c0xlbmd0aCAtIDEpIHtcbiAgICAgIGlmIChudW1iZXIgPj0gcG93KDI1NiwgNSAtIHBhcnRzTGVuZ3RoKSkgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmIChudW1iZXIgPiAyNTUpIHJldHVybiBudWxsO1xuICB9XG4gIGlwdjQgPSBudW1iZXJzLnBvcCgpO1xuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBudW1iZXJzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGlwdjQgKz0gbnVtYmVyc1tpbmRleF0gKiBwb3coMjU2LCAzIC0gaW5kZXgpO1xuICB9XG4gIHJldHVybiBpcHY0O1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzIC0tIFRPRE9cbnZhciBwYXJzZUlQdjYgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgdmFyIGFkZHJlc3MgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XG4gIHZhciBwaWVjZUluZGV4ID0gMDtcbiAgdmFyIGNvbXByZXNzID0gbnVsbDtcbiAgdmFyIHBvaW50ZXIgPSAwO1xuICB2YXIgdmFsdWUsIGxlbmd0aCwgbnVtYmVyc1NlZW4sIGlwdjRQaWVjZSwgbnVtYmVyLCBzd2Fwcywgc3dhcDtcblxuICB2YXIgY2hyID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpbnB1dC5jaGFyQXQocG9pbnRlcik7XG4gIH07XG5cbiAgaWYgKGNocigpID09ICc6Jykge1xuICAgIGlmIChpbnB1dC5jaGFyQXQoMSkgIT0gJzonKSByZXR1cm47XG4gICAgcG9pbnRlciArPSAyO1xuICAgIHBpZWNlSW5kZXgrKztcbiAgICBjb21wcmVzcyA9IHBpZWNlSW5kZXg7XG4gIH1cbiAgd2hpbGUgKGNocigpKSB7XG4gICAgaWYgKHBpZWNlSW5kZXggPT0gOCkgcmV0dXJuO1xuICAgIGlmIChjaHIoKSA9PSAnOicpIHtcbiAgICAgIGlmIChjb21wcmVzcyAhPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgcG9pbnRlcisrO1xuICAgICAgcGllY2VJbmRleCsrO1xuICAgICAgY29tcHJlc3MgPSBwaWVjZUluZGV4O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhbHVlID0gbGVuZ3RoID0gMDtcbiAgICB3aGlsZSAobGVuZ3RoIDwgNCAmJiBIRVgudGVzdChjaHIoKSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgKiAxNiArIHBhcnNlSW50KGNocigpLCAxNik7XG4gICAgICBwb2ludGVyKys7XG4gICAgICBsZW5ndGgrKztcbiAgICB9XG4gICAgaWYgKGNocigpID09ICcuJykge1xuICAgICAgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm47XG4gICAgICBwb2ludGVyIC09IGxlbmd0aDtcbiAgICAgIGlmIChwaWVjZUluZGV4ID4gNikgcmV0dXJuO1xuICAgICAgbnVtYmVyc1NlZW4gPSAwO1xuICAgICAgd2hpbGUgKGNocigpKSB7XG4gICAgICAgIGlwdjRQaWVjZSA9IG51bGw7XG4gICAgICAgIGlmIChudW1iZXJzU2VlbiA+IDApIHtcbiAgICAgICAgICBpZiAoY2hyKCkgPT0gJy4nICYmIG51bWJlcnNTZWVuIDwgNCkgcG9pbnRlcisrO1xuICAgICAgICAgIGVsc2UgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghRElHSVQudGVzdChjaHIoKSkpIHJldHVybjtcbiAgICAgICAgd2hpbGUgKERJR0lULnRlc3QoY2hyKCkpKSB7XG4gICAgICAgICAgbnVtYmVyID0gcGFyc2VJbnQoY2hyKCksIDEwKTtcbiAgICAgICAgICBpZiAoaXB2NFBpZWNlID09PSBudWxsKSBpcHY0UGllY2UgPSBudW1iZXI7XG4gICAgICAgICAgZWxzZSBpZiAoaXB2NFBpZWNlID09IDApIHJldHVybjtcbiAgICAgICAgICBlbHNlIGlwdjRQaWVjZSA9IGlwdjRQaWVjZSAqIDEwICsgbnVtYmVyO1xuICAgICAgICAgIGlmIChpcHY0UGllY2UgPiAyNTUpIHJldHVybjtcbiAgICAgICAgICBwb2ludGVyKys7XG4gICAgICAgIH1cbiAgICAgICAgYWRkcmVzc1twaWVjZUluZGV4XSA9IGFkZHJlc3NbcGllY2VJbmRleF0gKiAyNTYgKyBpcHY0UGllY2U7XG4gICAgICAgIG51bWJlcnNTZWVuKys7XG4gICAgICAgIGlmIChudW1iZXJzU2VlbiA9PSAyIHx8IG51bWJlcnNTZWVuID09IDQpIHBpZWNlSW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGlmIChudW1iZXJzU2VlbiAhPSA0KSByZXR1cm47XG4gICAgICBicmVhaztcbiAgICB9IGVsc2UgaWYgKGNocigpID09ICc6Jykge1xuICAgICAgcG9pbnRlcisrO1xuICAgICAgaWYgKCFjaHIoKSkgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoY2hyKCkpIHJldHVybjtcbiAgICBhZGRyZXNzW3BpZWNlSW5kZXgrK10gPSB2YWx1ZTtcbiAgfVxuICBpZiAoY29tcHJlc3MgIT09IG51bGwpIHtcbiAgICBzd2FwcyA9IHBpZWNlSW5kZXggLSBjb21wcmVzcztcbiAgICBwaWVjZUluZGV4ID0gNztcbiAgICB3aGlsZSAocGllY2VJbmRleCAhPSAwICYmIHN3YXBzID4gMCkge1xuICAgICAgc3dhcCA9IGFkZHJlc3NbcGllY2VJbmRleF07XG4gICAgICBhZGRyZXNzW3BpZWNlSW5kZXgtLV0gPSBhZGRyZXNzW2NvbXByZXNzICsgc3dhcHMgLSAxXTtcbiAgICAgIGFkZHJlc3NbY29tcHJlc3MgKyAtLXN3YXBzXSA9IHN3YXA7XG4gICAgfVxuICB9IGVsc2UgaWYgKHBpZWNlSW5kZXggIT0gOCkgcmV0dXJuO1xuICByZXR1cm4gYWRkcmVzcztcbn07XG5cbnZhciBmaW5kTG9uZ2VzdFplcm9TZXF1ZW5jZSA9IGZ1bmN0aW9uIChpcHY2KSB7XG4gIHZhciBtYXhJbmRleCA9IG51bGw7XG4gIHZhciBtYXhMZW5ndGggPSAxO1xuICB2YXIgY3VyclN0YXJ0ID0gbnVsbDtcbiAgdmFyIGN1cnJMZW5ndGggPSAwO1xuICB2YXIgaW5kZXggPSAwO1xuICBmb3IgKDsgaW5kZXggPCA4OyBpbmRleCsrKSB7XG4gICAgaWYgKGlwdjZbaW5kZXhdICE9PSAwKSB7XG4gICAgICBpZiAoY3Vyckxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgICAgICBtYXhJbmRleCA9IGN1cnJTdGFydDtcbiAgICAgICAgbWF4TGVuZ3RoID0gY3Vyckxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGN1cnJTdGFydCA9IG51bGw7XG4gICAgICBjdXJyTGVuZ3RoID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGN1cnJTdGFydCA9PT0gbnVsbCkgY3VyclN0YXJ0ID0gaW5kZXg7XG4gICAgICArK2N1cnJMZW5ndGg7XG4gICAgfVxuICB9XG4gIGlmIChjdXJyTGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgbWF4SW5kZXggPSBjdXJyU3RhcnQ7XG4gICAgbWF4TGVuZ3RoID0gY3Vyckxlbmd0aDtcbiAgfVxuICByZXR1cm4gbWF4SW5kZXg7XG59O1xuXG52YXIgc2VyaWFsaXplSG9zdCA9IGZ1bmN0aW9uIChob3N0KSB7XG4gIHZhciByZXN1bHQsIGluZGV4LCBjb21wcmVzcywgaWdub3JlMDtcbiAgLy8gaXB2NFxuICBpZiAodHlwZW9mIGhvc3QgPT0gJ251bWJlcicpIHtcbiAgICByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCA0OyBpbmRleCsrKSB7XG4gICAgICByZXN1bHQudW5zaGlmdChob3N0ICUgMjU2KTtcbiAgICAgIGhvc3QgPSBmbG9vcihob3N0IC8gMjU2KTtcbiAgICB9IHJldHVybiByZXN1bHQuam9pbignLicpO1xuICAvLyBpcHY2XG4gIH0gZWxzZSBpZiAodHlwZW9mIGhvc3QgPT0gJ29iamVjdCcpIHtcbiAgICByZXN1bHQgPSAnJztcbiAgICBjb21wcmVzcyA9IGZpbmRMb25nZXN0WmVyb1NlcXVlbmNlKGhvc3QpO1xuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IDg7IGluZGV4KyspIHtcbiAgICAgIGlmIChpZ25vcmUwICYmIGhvc3RbaW5kZXhdID09PSAwKSBjb250aW51ZTtcbiAgICAgIGlmIChpZ25vcmUwKSBpZ25vcmUwID0gZmFsc2U7XG4gICAgICBpZiAoY29tcHJlc3MgPT09IGluZGV4KSB7XG4gICAgICAgIHJlc3VsdCArPSBpbmRleCA/ICc6JyA6ICc6Oic7XG4gICAgICAgIGlnbm9yZTAgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ICs9IGhvc3RbaW5kZXhdLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgaWYgKGluZGV4IDwgNykgcmVzdWx0ICs9ICc6JztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICdbJyArIHJlc3VsdCArICddJztcbiAgfSByZXR1cm4gaG9zdDtcbn07XG5cbnZhciBDMENvbnRyb2xQZXJjZW50RW5jb2RlU2V0ID0ge307XG52YXIgZnJhZ21lbnRQZXJjZW50RW5jb2RlU2V0ID0gYXNzaWduKHt9LCBDMENvbnRyb2xQZXJjZW50RW5jb2RlU2V0LCB7XG4gICcgJzogMSwgJ1wiJzogMSwgJzwnOiAxLCAnPic6IDEsICdgJzogMVxufSk7XG52YXIgcGF0aFBlcmNlbnRFbmNvZGVTZXQgPSBhc3NpZ24oe30sIGZyYWdtZW50UGVyY2VudEVuY29kZVNldCwge1xuICAnIyc6IDEsICc/JzogMSwgJ3snOiAxLCAnfSc6IDFcbn0pO1xudmFyIHVzZXJpbmZvUGVyY2VudEVuY29kZVNldCA9IGFzc2lnbih7fSwgcGF0aFBlcmNlbnRFbmNvZGVTZXQsIHtcbiAgJy8nOiAxLCAnOic6IDEsICc7JzogMSwgJz0nOiAxLCAnQCc6IDEsICdbJzogMSwgJ1xcXFwnOiAxLCAnXSc6IDEsICdeJzogMSwgJ3wnOiAxXG59KTtcblxudmFyIHBlcmNlbnRFbmNvZGUgPSBmdW5jdGlvbiAoY2hyLCBzZXQpIHtcbiAgdmFyIGNvZGUgPSBjb2RlQXQoY2hyLCAwKTtcbiAgcmV0dXJuIGNvZGUgPiAweDIwICYmIGNvZGUgPCAweDdGICYmICFoYXNPd24oc2V0LCBjaHIpID8gY2hyIDogZW5jb2RlVVJJQ29tcG9uZW50KGNocik7XG59O1xuXG52YXIgc3BlY2lhbFNjaGVtZXMgPSB7XG4gIGZ0cDogMjEsXG4gIGZpbGU6IG51bGwsXG4gIGh0dHA6IDgwLFxuICBodHRwczogNDQzLFxuICB3czogODAsXG4gIHdzczogNDQzXG59O1xuXG52YXIgaXNTcGVjaWFsID0gZnVuY3Rpb24gKHVybCkge1xuICByZXR1cm4gaGFzT3duKHNwZWNpYWxTY2hlbWVzLCB1cmwuc2NoZW1lKTtcbn07XG5cbnZhciBpbmNsdWRlc0NyZWRlbnRpYWxzID0gZnVuY3Rpb24gKHVybCkge1xuICByZXR1cm4gdXJsLnVzZXJuYW1lICE9ICcnIHx8IHVybC5wYXNzd29yZCAhPSAnJztcbn07XG5cbnZhciBjYW5ub3RIYXZlVXNlcm5hbWVQYXNzd29yZFBvcnQgPSBmdW5jdGlvbiAodXJsKSB7XG4gIHJldHVybiAhdXJsLmhvc3QgfHwgdXJsLmNhbm5vdEJlQUJhc2VVUkwgfHwgdXJsLnNjaGVtZSA9PSAnZmlsZSc7XG59O1xuXG52YXIgaXNXaW5kb3dzRHJpdmVMZXR0ZXIgPSBmdW5jdGlvbiAoc3RyaW5nLCBub3JtYWxpemVkKSB7XG4gIHZhciBzZWNvbmQ7XG4gIHJldHVybiBzdHJpbmcubGVuZ3RoID09IDIgJiYgQUxQSEEudGVzdChzdHJpbmcuY2hhckF0KDApKVxuICAgICYmICgoc2Vjb25kID0gc3RyaW5nLmNoYXJBdCgxKSkgPT0gJzonIHx8ICghbm9ybWFsaXplZCAmJiBzZWNvbmQgPT0gJ3wnKSk7XG59O1xuXG52YXIgc3RhcnRzV2l0aFdpbmRvd3NEcml2ZUxldHRlciA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgdmFyIHRoaXJkO1xuICByZXR1cm4gc3RyaW5nLmxlbmd0aCA+IDEgJiYgaXNXaW5kb3dzRHJpdmVMZXR0ZXIoc3RyaW5nLnNsaWNlKDAsIDIpKSAmJiAoXG4gICAgc3RyaW5nLmxlbmd0aCA9PSAyIHx8XG4gICAgKCh0aGlyZCA9IHN0cmluZy5jaGFyQXQoMikpID09PSAnLycgfHwgdGhpcmQgPT09ICdcXFxcJyB8fCB0aGlyZCA9PT0gJz8nIHx8IHRoaXJkID09PSAnIycpXG4gICk7XG59O1xuXG52YXIgc2hvcnRlblVSTHNQYXRoID0gZnVuY3Rpb24gKHVybCkge1xuICB2YXIgcGF0aCA9IHVybC5wYXRoO1xuICB2YXIgcGF0aFNpemUgPSBwYXRoLmxlbmd0aDtcbiAgaWYgKHBhdGhTaXplICYmICh1cmwuc2NoZW1lICE9ICdmaWxlJyB8fCBwYXRoU2l6ZSAhPSAxIHx8ICFpc1dpbmRvd3NEcml2ZUxldHRlcihwYXRoWzBdLCB0cnVlKSkpIHtcbiAgICBwYXRoLnBvcCgpO1xuICB9XG59O1xuXG52YXIgaXNTaW5nbGVEb3QgPSBmdW5jdGlvbiAoc2VnbWVudCkge1xuICByZXR1cm4gc2VnbWVudCA9PT0gJy4nIHx8IHNlZ21lbnQudG9Mb3dlckNhc2UoKSA9PT0gJyUyZSc7XG59O1xuXG52YXIgaXNEb3VibGVEb3QgPSBmdW5jdGlvbiAoc2VnbWVudCkge1xuICBzZWdtZW50ID0gc2VnbWVudC50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gc2VnbWVudCA9PT0gJy4uJyB8fCBzZWdtZW50ID09PSAnJTJlLicgfHwgc2VnbWVudCA9PT0gJy4lMmUnIHx8IHNlZ21lbnQgPT09ICclMmUlMmUnO1xufTtcblxuLy8gU3RhdGVzOlxudmFyIFNDSEVNRV9TVEFSVCA9IHt9O1xudmFyIFNDSEVNRSA9IHt9O1xudmFyIE5PX1NDSEVNRSA9IHt9O1xudmFyIFNQRUNJQUxfUkVMQVRJVkVfT1JfQVVUSE9SSVRZID0ge307XG52YXIgUEFUSF9PUl9BVVRIT1JJVFkgPSB7fTtcbnZhciBSRUxBVElWRSA9IHt9O1xudmFyIFJFTEFUSVZFX1NMQVNIID0ge307XG52YXIgU1BFQ0lBTF9BVVRIT1JJVFlfU0xBU0hFUyA9IHt9O1xudmFyIFNQRUNJQUxfQVVUSE9SSVRZX0lHTk9SRV9TTEFTSEVTID0ge307XG52YXIgQVVUSE9SSVRZID0ge307XG52YXIgSE9TVCA9IHt9O1xudmFyIEhPU1ROQU1FID0ge307XG52YXIgUE9SVCA9IHt9O1xudmFyIEZJTEUgPSB7fTtcbnZhciBGSUxFX1NMQVNIID0ge307XG52YXIgRklMRV9IT1NUID0ge307XG52YXIgUEFUSF9TVEFSVCA9IHt9O1xudmFyIFBBVEggPSB7fTtcbnZhciBDQU5OT1RfQkVfQV9CQVNFX1VSTF9QQVRIID0ge307XG52YXIgUVVFUlkgPSB7fTtcbnZhciBGUkFHTUVOVCA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHMgLS0gVE9ET1xudmFyIHBhcnNlVVJMID0gZnVuY3Rpb24gKHVybCwgaW5wdXQsIHN0YXRlT3ZlcnJpZGUsIGJhc2UpIHtcbiAgdmFyIHN0YXRlID0gc3RhdGVPdmVycmlkZSB8fCBTQ0hFTUVfU1RBUlQ7XG4gIHZhciBwb2ludGVyID0gMDtcbiAgdmFyIGJ1ZmZlciA9ICcnO1xuICB2YXIgc2VlbkF0ID0gZmFsc2U7XG4gIHZhciBzZWVuQnJhY2tldCA9IGZhbHNlO1xuICB2YXIgc2VlblBhc3N3b3JkVG9rZW4gPSBmYWxzZTtcbiAgdmFyIGNvZGVQb2ludHMsIGNociwgYnVmZmVyQ29kZVBvaW50cywgZmFpbHVyZTtcblxuICBpZiAoIXN0YXRlT3ZlcnJpZGUpIHtcbiAgICB1cmwuc2NoZW1lID0gJyc7XG4gICAgdXJsLnVzZXJuYW1lID0gJyc7XG4gICAgdXJsLnBhc3N3b3JkID0gJyc7XG4gICAgdXJsLmhvc3QgPSBudWxsO1xuICAgIHVybC5wb3J0ID0gbnVsbDtcbiAgICB1cmwucGF0aCA9IFtdO1xuICAgIHVybC5xdWVyeSA9IG51bGw7XG4gICAgdXJsLmZyYWdtZW50ID0gbnVsbDtcbiAgICB1cmwuY2Fubm90QmVBQmFzZVVSTCA9IGZhbHNlO1xuICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZShMRUFESU5HX0FORF9UUkFJTElOR19DMF9DT05UUk9MX09SX1NQQUNFLCAnJyk7XG4gIH1cblxuICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoVEFCX0FORF9ORVdfTElORSwgJycpO1xuXG4gIGNvZGVQb2ludHMgPSBhcnJheUZyb20oaW5wdXQpO1xuXG4gIHdoaWxlIChwb2ludGVyIDw9IGNvZGVQb2ludHMubGVuZ3RoKSB7XG4gICAgY2hyID0gY29kZVBvaW50c1twb2ludGVyXTtcbiAgICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgICBjYXNlIFNDSEVNRV9TVEFSVDpcbiAgICAgICAgaWYgKGNociAmJiBBTFBIQS50ZXN0KGNocikpIHtcbiAgICAgICAgICBidWZmZXIgKz0gY2hyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgc3RhdGUgPSBTQ0hFTUU7XG4gICAgICAgIH0gZWxzZSBpZiAoIXN0YXRlT3ZlcnJpZGUpIHtcbiAgICAgICAgICBzdGF0ZSA9IE5PX1NDSEVNRTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIHJldHVybiBJTlZBTElEX1NDSEVNRTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU0NIRU1FOlxuICAgICAgICBpZiAoY2hyICYmIChBTFBIQU5VTUVSSUMudGVzdChjaHIpIHx8IGNociA9PSAnKycgfHwgY2hyID09ICctJyB8fCBjaHIgPT0gJy4nKSkge1xuICAgICAgICAgIGJ1ZmZlciArPSBjaHIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfSBlbHNlIGlmIChjaHIgPT0gJzonKSB7XG4gICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUgJiYgKFxuICAgICAgICAgICAgKGlzU3BlY2lhbCh1cmwpICE9IGhhc093bihzcGVjaWFsU2NoZW1lcywgYnVmZmVyKSkgfHxcbiAgICAgICAgICAgIChidWZmZXIgPT0gJ2ZpbGUnICYmIChpbmNsdWRlc0NyZWRlbnRpYWxzKHVybCkgfHwgdXJsLnBvcnQgIT09IG51bGwpKSB8fFxuICAgICAgICAgICAgKHVybC5zY2hlbWUgPT0gJ2ZpbGUnICYmICF1cmwuaG9zdClcbiAgICAgICAgICApKSByZXR1cm47XG4gICAgICAgICAgdXJsLnNjaGVtZSA9IGJ1ZmZlcjtcbiAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSkge1xuICAgICAgICAgICAgaWYgKGlzU3BlY2lhbCh1cmwpICYmIHNwZWNpYWxTY2hlbWVzW3VybC5zY2hlbWVdID09IHVybC5wb3J0KSB1cmwucG9ydCA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgIGlmICh1cmwuc2NoZW1lID09ICdmaWxlJykge1xuICAgICAgICAgICAgc3RhdGUgPSBGSUxFO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNTcGVjaWFsKHVybCkgJiYgYmFzZSAmJiBiYXNlLnNjaGVtZSA9PSB1cmwuc2NoZW1lKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IFNQRUNJQUxfUkVMQVRJVkVfT1JfQVVUSE9SSVRZO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNTcGVjaWFsKHVybCkpIHtcbiAgICAgICAgICAgIHN0YXRlID0gU1BFQ0lBTF9BVVRIT1JJVFlfU0xBU0hFUztcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvZGVQb2ludHNbcG9pbnRlciArIDFdID09ICcvJykge1xuICAgICAgICAgICAgc3RhdGUgPSBQQVRIX09SX0FVVEhPUklUWTtcbiAgICAgICAgICAgIHBvaW50ZXIrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdXJsLmNhbm5vdEJlQUJhc2VVUkwgPSB0cnVlO1xuICAgICAgICAgICAgdXJsLnBhdGgucHVzaCgnJyk7XG4gICAgICAgICAgICBzdGF0ZSA9IENBTk5PVF9CRV9BX0JBU0VfVVJMX1BBVEg7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgc3RhdGUgPSBOT19TQ0hFTUU7XG4gICAgICAgICAgcG9pbnRlciA9IDA7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSByZXR1cm4gSU5WQUxJRF9TQ0hFTUU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIE5PX1NDSEVNRTpcbiAgICAgICAgaWYgKCFiYXNlIHx8IChiYXNlLmNhbm5vdEJlQUJhc2VVUkwgJiYgY2hyICE9ICcjJykpIHJldHVybiBJTlZBTElEX1NDSEVNRTtcbiAgICAgICAgaWYgKGJhc2UuY2Fubm90QmVBQmFzZVVSTCAmJiBjaHIgPT0gJyMnKSB7XG4gICAgICAgICAgdXJsLnNjaGVtZSA9IGJhc2Uuc2NoZW1lO1xuICAgICAgICAgIHVybC5wYXRoID0gYmFzZS5wYXRoLnNsaWNlKCk7XG4gICAgICAgICAgdXJsLnF1ZXJ5ID0gYmFzZS5xdWVyeTtcbiAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICB1cmwuY2Fubm90QmVBQmFzZVVSTCA9IHRydWU7XG4gICAgICAgICAgc3RhdGUgPSBGUkFHTUVOVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IGJhc2Uuc2NoZW1lID09ICdmaWxlJyA/IEZJTEUgOiBSRUxBVElWRTtcbiAgICAgICAgY29udGludWU7XG5cbiAgICAgIGNhc2UgU1BFQ0lBTF9SRUxBVElWRV9PUl9BVVRIT1JJVFk6XG4gICAgICAgIGlmIChjaHIgPT0gJy8nICYmIGNvZGVQb2ludHNbcG9pbnRlciArIDFdID09ICcvJykge1xuICAgICAgICAgIHN0YXRlID0gU1BFQ0lBTF9BVVRIT1JJVFlfSUdOT1JFX1NMQVNIRVM7XG4gICAgICAgICAgcG9pbnRlcisrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlID0gUkVMQVRJVkU7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gYnJlYWs7XG5cbiAgICAgIGNhc2UgUEFUSF9PUl9BVVRIT1JJVFk6XG4gICAgICAgIGlmIChjaHIgPT0gJy8nKSB7XG4gICAgICAgICAgc3RhdGUgPSBBVVRIT1JJVFk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUkVMQVRJVkU6XG4gICAgICAgIHVybC5zY2hlbWUgPSBiYXNlLnNjaGVtZTtcbiAgICAgICAgaWYgKGNociA9PSBFT0YpIHtcbiAgICAgICAgICB1cmwudXNlcm5hbWUgPSBiYXNlLnVzZXJuYW1lO1xuICAgICAgICAgIHVybC5wYXNzd29yZCA9IGJhc2UucGFzc3dvcmQ7XG4gICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgdXJsLnBvcnQgPSBiYXNlLnBvcnQ7XG4gICAgICAgICAgdXJsLnBhdGggPSBiYXNlLnBhdGguc2xpY2UoKTtcbiAgICAgICAgICB1cmwucXVlcnkgPSBiYXNlLnF1ZXJ5O1xuICAgICAgICB9IGVsc2UgaWYgKGNociA9PSAnLycgfHwgKGNociA9PSAnXFxcXCcgJiYgaXNTcGVjaWFsKHVybCkpKSB7XG4gICAgICAgICAgc3RhdGUgPSBSRUxBVElWRV9TTEFTSDtcbiAgICAgICAgfSBlbHNlIGlmIChjaHIgPT0gJz8nKSB7XG4gICAgICAgICAgdXJsLnVzZXJuYW1lID0gYmFzZS51c2VybmFtZTtcbiAgICAgICAgICB1cmwucGFzc3dvcmQgPSBiYXNlLnBhc3N3b3JkO1xuICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgIHVybC5wb3J0ID0gYmFzZS5wb3J0O1xuICAgICAgICAgIHVybC5wYXRoID0gYmFzZS5wYXRoLnNsaWNlKCk7XG4gICAgICAgICAgdXJsLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgc3RhdGUgPSBRVUVSWTtcbiAgICAgICAgfSBlbHNlIGlmIChjaHIgPT0gJyMnKSB7XG4gICAgICAgICAgdXJsLnVzZXJuYW1lID0gYmFzZS51c2VybmFtZTtcbiAgICAgICAgICB1cmwucGFzc3dvcmQgPSBiYXNlLnBhc3N3b3JkO1xuICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgIHVybC5wb3J0ID0gYmFzZS5wb3J0O1xuICAgICAgICAgIHVybC5wYXRoID0gYmFzZS5wYXRoLnNsaWNlKCk7XG4gICAgICAgICAgdXJsLnF1ZXJ5ID0gYmFzZS5xdWVyeTtcbiAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICBzdGF0ZSA9IEZSQUdNRU5UO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVybC51c2VybmFtZSA9IGJhc2UudXNlcm5hbWU7XG4gICAgICAgICAgdXJsLnBhc3N3b3JkID0gYmFzZS5wYXNzd29yZDtcbiAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICB1cmwucG9ydCA9IGJhc2UucG9ydDtcbiAgICAgICAgICB1cmwucGF0aCA9IGJhc2UucGF0aC5zbGljZSgpO1xuICAgICAgICAgIHVybC5wYXRoLnBvcCgpO1xuICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBicmVhaztcblxuICAgICAgY2FzZSBSRUxBVElWRV9TTEFTSDpcbiAgICAgICAgaWYgKGlzU3BlY2lhbCh1cmwpICYmIChjaHIgPT0gJy8nIHx8IGNociA9PSAnXFxcXCcpKSB7XG4gICAgICAgICAgc3RhdGUgPSBTUEVDSUFMX0FVVEhPUklUWV9JR05PUkVfU0xBU0hFUztcbiAgICAgICAgfSBlbHNlIGlmIChjaHIgPT0gJy8nKSB7XG4gICAgICAgICAgc3RhdGUgPSBBVVRIT1JJVFk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXJsLnVzZXJuYW1lID0gYmFzZS51c2VybmFtZTtcbiAgICAgICAgICB1cmwucGFzc3dvcmQgPSBiYXNlLnBhc3N3b3JkO1xuICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgIHVybC5wb3J0ID0gYmFzZS5wb3J0O1xuICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBicmVhaztcblxuICAgICAgY2FzZSBTUEVDSUFMX0FVVEhPUklUWV9TTEFTSEVTOlxuICAgICAgICBzdGF0ZSA9IFNQRUNJQUxfQVVUSE9SSVRZX0lHTk9SRV9TTEFTSEVTO1xuICAgICAgICBpZiAoY2hyICE9ICcvJyB8fCBidWZmZXIuY2hhckF0KHBvaW50ZXIgKyAxKSAhPSAnLycpIGNvbnRpbnVlO1xuICAgICAgICBwb2ludGVyKys7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNQRUNJQUxfQVVUSE9SSVRZX0lHTk9SRV9TTEFTSEVTOlxuICAgICAgICBpZiAoY2hyICE9ICcvJyAmJiBjaHIgIT0gJ1xcXFwnKSB7XG4gICAgICAgICAgc3RhdGUgPSBBVVRIT1JJVFk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gYnJlYWs7XG5cbiAgICAgIGNhc2UgQVVUSE9SSVRZOlxuICAgICAgICBpZiAoY2hyID09ICdAJykge1xuICAgICAgICAgIGlmIChzZWVuQXQpIGJ1ZmZlciA9ICclNDAnICsgYnVmZmVyO1xuICAgICAgICAgIHNlZW5BdCA9IHRydWU7XG4gICAgICAgICAgYnVmZmVyQ29kZVBvaW50cyA9IGFycmF5RnJvbShidWZmZXIpO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyQ29kZVBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNvZGVQb2ludCA9IGJ1ZmZlckNvZGVQb2ludHNbaV07XG4gICAgICAgICAgICBpZiAoY29kZVBvaW50ID09ICc6JyAmJiAhc2VlblBhc3N3b3JkVG9rZW4pIHtcbiAgICAgICAgICAgICAgc2VlblBhc3N3b3JkVG9rZW4gPSB0cnVlO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBlbmNvZGVkQ29kZVBvaW50cyA9IHBlcmNlbnRFbmNvZGUoY29kZVBvaW50LCB1c2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQpO1xuICAgICAgICAgICAgaWYgKHNlZW5QYXNzd29yZFRva2VuKSB1cmwucGFzc3dvcmQgKz0gZW5jb2RlZENvZGVQb2ludHM7XG4gICAgICAgICAgICBlbHNlIHVybC51c2VybmFtZSArPSBlbmNvZGVkQ29kZVBvaW50cztcbiAgICAgICAgICB9XG4gICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgY2hyID09IEVPRiB8fCBjaHIgPT0gJy8nIHx8IGNociA9PSAnPycgfHwgY2hyID09ICcjJyB8fFxuICAgICAgICAgIChjaHIgPT0gJ1xcXFwnICYmIGlzU3BlY2lhbCh1cmwpKVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoc2VlbkF0ICYmIGJ1ZmZlciA9PSAnJykgcmV0dXJuIElOVkFMSURfQVVUSE9SSVRZO1xuICAgICAgICAgIHBvaW50ZXIgLT0gYXJyYXlGcm9tKGJ1ZmZlcikubGVuZ3RoICsgMTtcbiAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICBzdGF0ZSA9IEhPU1Q7XG4gICAgICAgIH0gZWxzZSBidWZmZXIgKz0gY2hyO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBIT1NUOlxuICAgICAgY2FzZSBIT1NUTkFNRTpcbiAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUgJiYgdXJsLnNjaGVtZSA9PSAnZmlsZScpIHtcbiAgICAgICAgICBzdGF0ZSA9IEZJTEVfSE9TVDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjaHIgPT0gJzonICYmICFzZWVuQnJhY2tldCkge1xuICAgICAgICAgIGlmIChidWZmZXIgPT0gJycpIHJldHVybiBJTlZBTElEX0hPU1Q7XG4gICAgICAgICAgZmFpbHVyZSA9IHBhcnNlSG9zdCh1cmwsIGJ1ZmZlcik7XG4gICAgICAgICAgaWYgKGZhaWx1cmUpIHJldHVybiBmYWlsdXJlO1xuICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgIHN0YXRlID0gUE9SVDtcbiAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSA9PSBIT1NUTkFNRSkgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGNociA9PSBFT0YgfHwgY2hyID09ICcvJyB8fCBjaHIgPT0gJz8nIHx8IGNociA9PSAnIycgfHxcbiAgICAgICAgICAoY2hyID09ICdcXFxcJyAmJiBpc1NwZWNpYWwodXJsKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGlzU3BlY2lhbCh1cmwpICYmIGJ1ZmZlciA9PSAnJykgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSAmJiBidWZmZXIgPT0gJycgJiYgKGluY2x1ZGVzQ3JlZGVudGlhbHModXJsKSB8fCB1cmwucG9ydCAhPT0gbnVsbCkpIHJldHVybjtcbiAgICAgICAgICBmYWlsdXJlID0gcGFyc2VIb3N0KHVybCwgYnVmZmVyKTtcbiAgICAgICAgICBpZiAoZmFpbHVyZSkgcmV0dXJuIGZhaWx1cmU7XG4gICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgc3RhdGUgPSBQQVRIX1NUQVJUO1xuICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSByZXR1cm47XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGNociA9PSAnWycpIHNlZW5CcmFja2V0ID0gdHJ1ZTtcbiAgICAgICAgICBlbHNlIGlmIChjaHIgPT0gJ10nKSBzZWVuQnJhY2tldCA9IGZhbHNlO1xuICAgICAgICAgIGJ1ZmZlciArPSBjaHI7XG4gICAgICAgIH0gYnJlYWs7XG5cbiAgICAgIGNhc2UgUE9SVDpcbiAgICAgICAgaWYgKERJR0lULnRlc3QoY2hyKSkge1xuICAgICAgICAgIGJ1ZmZlciArPSBjaHI7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgY2hyID09IEVPRiB8fCBjaHIgPT0gJy8nIHx8IGNociA9PSAnPycgfHwgY2hyID09ICcjJyB8fFxuICAgICAgICAgIChjaHIgPT0gJ1xcXFwnICYmIGlzU3BlY2lhbCh1cmwpKSB8fFxuICAgICAgICAgIHN0YXRlT3ZlcnJpZGVcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGJ1ZmZlciAhPSAnJykge1xuICAgICAgICAgICAgdmFyIHBvcnQgPSBwYXJzZUludChidWZmZXIsIDEwKTtcbiAgICAgICAgICAgIGlmIChwb3J0ID4gMHhGRkZGKSByZXR1cm4gSU5WQUxJRF9QT1JUO1xuICAgICAgICAgICAgdXJsLnBvcnQgPSAoaXNTcGVjaWFsKHVybCkgJiYgcG9ydCA9PT0gc3BlY2lhbFNjaGVtZXNbdXJsLnNjaGVtZV0pID8gbnVsbCA6IHBvcnQ7XG4gICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUpIHJldHVybjtcbiAgICAgICAgICBzdGF0ZSA9IFBBVEhfU1RBUlQ7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSByZXR1cm4gSU5WQUxJRF9QT1JUO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBGSUxFOlxuICAgICAgICB1cmwuc2NoZW1lID0gJ2ZpbGUnO1xuICAgICAgICBpZiAoY2hyID09ICcvJyB8fCBjaHIgPT0gJ1xcXFwnKSBzdGF0ZSA9IEZJTEVfU0xBU0g7XG4gICAgICAgIGVsc2UgaWYgKGJhc2UgJiYgYmFzZS5zY2hlbWUgPT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgaWYgKGNociA9PSBFT0YpIHtcbiAgICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgdXJsLnBhdGggPSBiYXNlLnBhdGguc2xpY2UoKTtcbiAgICAgICAgICAgIHVybC5xdWVyeSA9IGJhc2UucXVlcnk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgPT0gJz8nKSB7XG4gICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgIHVybC5wYXRoID0gYmFzZS5wYXRoLnNsaWNlKCk7XG4gICAgICAgICAgICB1cmwucXVlcnkgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gUVVFUlk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgPT0gJyMnKSB7XG4gICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgIHVybC5wYXRoID0gYmFzZS5wYXRoLnNsaWNlKCk7XG4gICAgICAgICAgICB1cmwucXVlcnkgPSBiYXNlLnF1ZXJ5O1xuICAgICAgICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IEZSQUdNRU5UO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXN0YXJ0c1dpdGhXaW5kb3dzRHJpdmVMZXR0ZXIoY29kZVBvaW50cy5zbGljZShwb2ludGVyKS5qb2luKCcnKSkpIHtcbiAgICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICAgIHVybC5wYXRoID0gYmFzZS5wYXRoLnNsaWNlKCk7XG4gICAgICAgICAgICAgIHNob3J0ZW5VUkxzUGF0aCh1cmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBicmVhaztcblxuICAgICAgY2FzZSBGSUxFX1NMQVNIOlxuICAgICAgICBpZiAoY2hyID09ICcvJyB8fCBjaHIgPT0gJ1xcXFwnKSB7XG4gICAgICAgICAgc3RhdGUgPSBGSUxFX0hPU1Q7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJhc2UgJiYgYmFzZS5zY2hlbWUgPT0gJ2ZpbGUnICYmICFzdGFydHNXaXRoV2luZG93c0RyaXZlTGV0dGVyKGNvZGVQb2ludHMuc2xpY2UocG9pbnRlcikuam9pbignJykpKSB7XG4gICAgICAgICAgaWYgKGlzV2luZG93c0RyaXZlTGV0dGVyKGJhc2UucGF0aFswXSwgdHJ1ZSkpIHVybC5wYXRoLnB1c2goYmFzZS5wYXRoWzBdKTtcbiAgICAgICAgICBlbHNlIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgY29udGludWU7XG5cbiAgICAgIGNhc2UgRklMRV9IT1NUOlxuICAgICAgICBpZiAoY2hyID09IEVPRiB8fCBjaHIgPT0gJy8nIHx8IGNociA9PSAnXFxcXCcgfHwgY2hyID09ICc/JyB8fCBjaHIgPT0gJyMnKSB7XG4gICAgICAgICAgaWYgKCFzdGF0ZU92ZXJyaWRlICYmIGlzV2luZG93c0RyaXZlTGV0dGVyKGJ1ZmZlcikpIHtcbiAgICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGJ1ZmZlciA9PSAnJykge1xuICAgICAgICAgICAgdXJsLmhvc3QgPSAnJztcbiAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSByZXR1cm47XG4gICAgICAgICAgICBzdGF0ZSA9IFBBVEhfU1RBUlQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZhaWx1cmUgPSBwYXJzZUhvc3QodXJsLCBidWZmZXIpO1xuICAgICAgICAgICAgaWYgKGZhaWx1cmUpIHJldHVybiBmYWlsdXJlO1xuICAgICAgICAgICAgaWYgKHVybC5ob3N0ID09ICdsb2NhbGhvc3QnKSB1cmwuaG9zdCA9ICcnO1xuICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUpIHJldHVybjtcbiAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBQQVRIX1NUQVJUO1xuICAgICAgICAgIH0gY29udGludWU7XG4gICAgICAgIH0gZWxzZSBidWZmZXIgKz0gY2hyO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBQQVRIX1NUQVJUOlxuICAgICAgICBpZiAoaXNTcGVjaWFsKHVybCkpIHtcbiAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgaWYgKGNociAhPSAnLycgJiYgY2hyICE9ICdcXFxcJykgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAoIXN0YXRlT3ZlcnJpZGUgJiYgY2hyID09ICc/Jykge1xuICAgICAgICAgIHVybC5xdWVyeSA9ICcnO1xuICAgICAgICAgIHN0YXRlID0gUVVFUlk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXN0YXRlT3ZlcnJpZGUgJiYgY2hyID09ICcjJykge1xuICAgICAgICAgIHVybC5mcmFnbWVudCA9ICcnO1xuICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hyICE9IEVPRikge1xuICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICBpZiAoY2hyICE9ICcvJykgY29udGludWU7XG4gICAgICAgIH0gYnJlYWs7XG5cbiAgICAgIGNhc2UgUEFUSDpcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNociA9PSBFT0YgfHwgY2hyID09ICcvJyB8fFxuICAgICAgICAgIChjaHIgPT0gJ1xcXFwnICYmIGlzU3BlY2lhbCh1cmwpKSB8fFxuICAgICAgICAgICghc3RhdGVPdmVycmlkZSAmJiAoY2hyID09ICc/JyB8fCBjaHIgPT0gJyMnKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGlzRG91YmxlRG90KGJ1ZmZlcikpIHtcbiAgICAgICAgICAgIHNob3J0ZW5VUkxzUGF0aCh1cmwpO1xuICAgICAgICAgICAgaWYgKGNociAhPSAnLycgJiYgIShjaHIgPT0gJ1xcXFwnICYmIGlzU3BlY2lhbCh1cmwpKSkge1xuICAgICAgICAgICAgICB1cmwucGF0aC5wdXNoKCcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGlzU2luZ2xlRG90KGJ1ZmZlcikpIHtcbiAgICAgICAgICAgIGlmIChjaHIgIT0gJy8nICYmICEoY2hyID09ICdcXFxcJyAmJiBpc1NwZWNpYWwodXJsKSkpIHtcbiAgICAgICAgICAgICAgdXJsLnBhdGgucHVzaCgnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh1cmwuc2NoZW1lID09ICdmaWxlJyAmJiAhdXJsLnBhdGgubGVuZ3RoICYmIGlzV2luZG93c0RyaXZlTGV0dGVyKGJ1ZmZlcikpIHtcbiAgICAgICAgICAgICAgaWYgKHVybC5ob3N0KSB1cmwuaG9zdCA9ICcnO1xuICAgICAgICAgICAgICBidWZmZXIgPSBidWZmZXIuY2hhckF0KDApICsgJzonOyAvLyBub3JtYWxpemUgd2luZG93cyBkcml2ZSBsZXR0ZXJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVybC5wYXRoLnB1c2goYnVmZmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgaWYgKHVybC5zY2hlbWUgPT0gJ2ZpbGUnICYmIChjaHIgPT0gRU9GIHx8IGNociA9PSAnPycgfHwgY2hyID09ICcjJykpIHtcbiAgICAgICAgICAgIHdoaWxlICh1cmwucGF0aC5sZW5ndGggPiAxICYmIHVybC5wYXRoWzBdID09PSAnJykge1xuICAgICAgICAgICAgICB1cmwucGF0aC5zaGlmdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2hyID09ICc/Jykge1xuICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IFFVRVJZO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyID09ICcjJykge1xuICAgICAgICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IEZSQUdNRU5UO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBidWZmZXIgKz0gcGVyY2VudEVuY29kZShjaHIsIHBhdGhQZXJjZW50RW5jb2RlU2V0KTtcbiAgICAgICAgfSBicmVhaztcblxuICAgICAgY2FzZSBDQU5OT1RfQkVfQV9CQVNFX1VSTF9QQVRIOlxuICAgICAgICBpZiAoY2hyID09ICc/Jykge1xuICAgICAgICAgIHVybC5xdWVyeSA9ICcnO1xuICAgICAgICAgIHN0YXRlID0gUVVFUlk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hyID09ICcjJykge1xuICAgICAgICAgIHVybC5mcmFnbWVudCA9ICcnO1xuICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hyICE9IEVPRikge1xuICAgICAgICAgIHVybC5wYXRoWzBdICs9IHBlcmNlbnRFbmNvZGUoY2hyLCBDMENvbnRyb2xQZXJjZW50RW5jb2RlU2V0KTtcbiAgICAgICAgfSBicmVhaztcblxuICAgICAgY2FzZSBRVUVSWTpcbiAgICAgICAgaWYgKCFzdGF0ZU92ZXJyaWRlICYmIGNociA9PSAnIycpIHtcbiAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICBzdGF0ZSA9IEZSQUdNRU5UO1xuICAgICAgICB9IGVsc2UgaWYgKGNociAhPSBFT0YpIHtcbiAgICAgICAgICBpZiAoY2hyID09IFwiJ1wiICYmIGlzU3BlY2lhbCh1cmwpKSB1cmwucXVlcnkgKz0gJyUyNyc7XG4gICAgICAgICAgZWxzZSBpZiAoY2hyID09ICcjJykgdXJsLnF1ZXJ5ICs9ICclMjMnO1xuICAgICAgICAgIGVsc2UgdXJsLnF1ZXJ5ICs9IHBlcmNlbnRFbmNvZGUoY2hyLCBDMENvbnRyb2xQZXJjZW50RW5jb2RlU2V0KTtcbiAgICAgICAgfSBicmVhaztcblxuICAgICAgY2FzZSBGUkFHTUVOVDpcbiAgICAgICAgaWYgKGNociAhPSBFT0YpIHVybC5mcmFnbWVudCArPSBwZXJjZW50RW5jb2RlKGNociwgZnJhZ21lbnRQZXJjZW50RW5jb2RlU2V0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcG9pbnRlcisrO1xuICB9XG59O1xuXG4vLyBgVVJMYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmwtY2xhc3NcbnZhciBVUkxDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIFVSTCh1cmwgLyogLCBiYXNlICovKSB7XG4gIHZhciB0aGF0ID0gYW5JbnN0YW5jZSh0aGlzLCBVUkxDb25zdHJ1Y3RvciwgJ1VSTCcpO1xuICB2YXIgYmFzZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgdXJsU3RyaW5nID0gJHRvU3RyaW5nKHVybCk7XG4gIHZhciBzdGF0ZSA9IHNldEludGVybmFsU3RhdGUodGhhdCwgeyB0eXBlOiAnVVJMJyB9KTtcbiAgdmFyIGJhc2VTdGF0ZSwgZmFpbHVyZTtcbiAgaWYgKGJhc2UgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChiYXNlIGluc3RhbmNlb2YgVVJMQ29uc3RydWN0b3IpIGJhc2VTdGF0ZSA9IGdldEludGVybmFsVVJMU3RhdGUoYmFzZSk7XG4gICAgZWxzZSB7XG4gICAgICBmYWlsdXJlID0gcGFyc2VVUkwoYmFzZVN0YXRlID0ge30sICR0b1N0cmluZyhiYXNlKSk7XG4gICAgICBpZiAoZmFpbHVyZSkgdGhyb3cgVHlwZUVycm9yKGZhaWx1cmUpO1xuICAgIH1cbiAgfVxuICBmYWlsdXJlID0gcGFyc2VVUkwoc3RhdGUsIHVybFN0cmluZywgbnVsbCwgYmFzZVN0YXRlKTtcbiAgaWYgKGZhaWx1cmUpIHRocm93IFR5cGVFcnJvcihmYWlsdXJlKTtcbiAgdmFyIHNlYXJjaFBhcmFtcyA9IHN0YXRlLnNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgdmFyIHNlYXJjaFBhcmFtc1N0YXRlID0gZ2V0SW50ZXJuYWxTZWFyY2hQYXJhbXNTdGF0ZShzZWFyY2hQYXJhbXMpO1xuICBzZWFyY2hQYXJhbXNTdGF0ZS51cGRhdGVTZWFyY2hQYXJhbXMoc3RhdGUucXVlcnkpO1xuICBzZWFyY2hQYXJhbXNTdGF0ZS51cGRhdGVVUkwgPSBmdW5jdGlvbiAoKSB7XG4gICAgc3RhdGUucXVlcnkgPSBTdHJpbmcoc2VhcmNoUGFyYW1zKSB8fCBudWxsO1xuICB9O1xuICBpZiAoIURFU0NSSVBUT1JTKSB7XG4gICAgdGhhdC5ocmVmID0gc2VyaWFsaXplVVJMLmNhbGwodGhhdCk7XG4gICAgdGhhdC5vcmlnaW4gPSBnZXRPcmlnaW4uY2FsbCh0aGF0KTtcbiAgICB0aGF0LnByb3RvY29sID0gZ2V0UHJvdG9jb2wuY2FsbCh0aGF0KTtcbiAgICB0aGF0LnVzZXJuYW1lID0gZ2V0VXNlcm5hbWUuY2FsbCh0aGF0KTtcbiAgICB0aGF0LnBhc3N3b3JkID0gZ2V0UGFzc3dvcmQuY2FsbCh0aGF0KTtcbiAgICB0aGF0Lmhvc3QgPSBnZXRIb3N0LmNhbGwodGhhdCk7XG4gICAgdGhhdC5ob3N0bmFtZSA9IGdldEhvc3RuYW1lLmNhbGwodGhhdCk7XG4gICAgdGhhdC5wb3J0ID0gZ2V0UG9ydC5jYWxsKHRoYXQpO1xuICAgIHRoYXQucGF0aG5hbWUgPSBnZXRQYXRobmFtZS5jYWxsKHRoYXQpO1xuICAgIHRoYXQuc2VhcmNoID0gZ2V0U2VhcmNoLmNhbGwodGhhdCk7XG4gICAgdGhhdC5zZWFyY2hQYXJhbXMgPSBnZXRTZWFyY2hQYXJhbXMuY2FsbCh0aGF0KTtcbiAgICB0aGF0Lmhhc2ggPSBnZXRIYXNoLmNhbGwodGhhdCk7XG4gIH1cbn07XG5cbnZhciBVUkxQcm90b3R5cGUgPSBVUkxDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbnZhciBzZXJpYWxpemVVUkwgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB1cmwgPSBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpO1xuICB2YXIgc2NoZW1lID0gdXJsLnNjaGVtZTtcbiAgdmFyIHVzZXJuYW1lID0gdXJsLnVzZXJuYW1lO1xuICB2YXIgcGFzc3dvcmQgPSB1cmwucGFzc3dvcmQ7XG4gIHZhciBob3N0ID0gdXJsLmhvc3Q7XG4gIHZhciBwb3J0ID0gdXJsLnBvcnQ7XG4gIHZhciBwYXRoID0gdXJsLnBhdGg7XG4gIHZhciBxdWVyeSA9IHVybC5xdWVyeTtcbiAgdmFyIGZyYWdtZW50ID0gdXJsLmZyYWdtZW50O1xuICB2YXIgb3V0cHV0ID0gc2NoZW1lICsgJzonO1xuICBpZiAoaG9zdCAhPT0gbnVsbCkge1xuICAgIG91dHB1dCArPSAnLy8nO1xuICAgIGlmIChpbmNsdWRlc0NyZWRlbnRpYWxzKHVybCkpIHtcbiAgICAgIG91dHB1dCArPSB1c2VybmFtZSArIChwYXNzd29yZCA/ICc6JyArIHBhc3N3b3JkIDogJycpICsgJ0AnO1xuICAgIH1cbiAgICBvdXRwdXQgKz0gc2VyaWFsaXplSG9zdChob3N0KTtcbiAgICBpZiAocG9ydCAhPT0gbnVsbCkgb3V0cHV0ICs9ICc6JyArIHBvcnQ7XG4gIH0gZWxzZSBpZiAoc2NoZW1lID09ICdmaWxlJykgb3V0cHV0ICs9ICcvLyc7XG4gIG91dHB1dCArPSB1cmwuY2Fubm90QmVBQmFzZVVSTCA/IHBhdGhbMF0gOiBwYXRoLmxlbmd0aCA/ICcvJyArIHBhdGguam9pbignLycpIDogJyc7XG4gIGlmIChxdWVyeSAhPT0gbnVsbCkgb3V0cHV0ICs9ICc/JyArIHF1ZXJ5O1xuICBpZiAoZnJhZ21lbnQgIT09IG51bGwpIG91dHB1dCArPSAnIycgKyBmcmFnbWVudDtcbiAgcmV0dXJuIG91dHB1dDtcbn07XG5cbnZhciBnZXRPcmlnaW4gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB1cmwgPSBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpO1xuICB2YXIgc2NoZW1lID0gdXJsLnNjaGVtZTtcbiAgdmFyIHBvcnQgPSB1cmwucG9ydDtcbiAgaWYgKHNjaGVtZSA9PSAnYmxvYicpIHRyeSB7XG4gICAgcmV0dXJuIG5ldyBVUkxDb25zdHJ1Y3RvcihzY2hlbWUucGF0aFswXSkub3JpZ2luO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnbnVsbCc7XG4gIH1cbiAgaWYgKHNjaGVtZSA9PSAnZmlsZScgfHwgIWlzU3BlY2lhbCh1cmwpKSByZXR1cm4gJ251bGwnO1xuICByZXR1cm4gc2NoZW1lICsgJzovLycgKyBzZXJpYWxpemVIb3N0KHVybC5ob3N0KSArIChwb3J0ICE9PSBudWxsID8gJzonICsgcG9ydCA6ICcnKTtcbn07XG5cbnZhciBnZXRQcm90b2NvbCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGdldEludGVybmFsVVJMU3RhdGUodGhpcykuc2NoZW1lICsgJzonO1xufTtcblxudmFyIGdldFVzZXJuYW1lID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKS51c2VybmFtZTtcbn07XG5cbnZhciBnZXRQYXNzd29yZCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGdldEludGVybmFsVVJMU3RhdGUodGhpcykucGFzc3dvcmQ7XG59O1xuXG52YXIgZ2V0SG9zdCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHVybCA9IGdldEludGVybmFsVVJMU3RhdGUodGhpcyk7XG4gIHZhciBob3N0ID0gdXJsLmhvc3Q7XG4gIHZhciBwb3J0ID0gdXJsLnBvcnQ7XG4gIHJldHVybiBob3N0ID09PSBudWxsID8gJydcbiAgICA6IHBvcnQgPT09IG51bGwgPyBzZXJpYWxpemVIb3N0KGhvc3QpXG4gICAgOiBzZXJpYWxpemVIb3N0KGhvc3QpICsgJzonICsgcG9ydDtcbn07XG5cbnZhciBnZXRIb3N0bmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhvc3QgPSBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpLmhvc3Q7XG4gIHJldHVybiBob3N0ID09PSBudWxsID8gJycgOiBzZXJpYWxpemVIb3N0KGhvc3QpO1xufTtcblxudmFyIGdldFBvcnQgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBwb3J0ID0gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKS5wb3J0O1xuICByZXR1cm4gcG9ydCA9PT0gbnVsbCA/ICcnIDogU3RyaW5nKHBvcnQpO1xufTtcblxudmFyIGdldFBhdGhuYW1lID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdXJsID0gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKTtcbiAgdmFyIHBhdGggPSB1cmwucGF0aDtcbiAgcmV0dXJuIHVybC5jYW5ub3RCZUFCYXNlVVJMID8gcGF0aFswXSA6IHBhdGgubGVuZ3RoID8gJy8nICsgcGF0aC5qb2luKCcvJykgOiAnJztcbn07XG5cbnZhciBnZXRTZWFyY2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBxdWVyeSA9IGdldEludGVybmFsVVJMU3RhdGUodGhpcykucXVlcnk7XG4gIHJldHVybiBxdWVyeSA/ICc/JyArIHF1ZXJ5IDogJyc7XG59O1xuXG52YXIgZ2V0U2VhcmNoUGFyYW1zID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKS5zZWFyY2hQYXJhbXM7XG59O1xuXG52YXIgZ2V0SGFzaCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGZyYWdtZW50ID0gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKS5mcmFnbWVudDtcbiAgcmV0dXJuIGZyYWdtZW50ID8gJyMnICsgZnJhZ21lbnQgOiAnJztcbn07XG5cbnZhciBhY2Nlc3NvckRlc2NyaXB0b3IgPSBmdW5jdGlvbiAoZ2V0dGVyLCBzZXR0ZXIpIHtcbiAgcmV0dXJuIHsgZ2V0OiBnZXR0ZXIsIHNldDogc2V0dGVyLCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUgfTtcbn07XG5cbmlmIChERVNDUklQVE9SUykge1xuICBkZWZpbmVQcm9wZXJ0aWVzKFVSTFByb3RvdHlwZSwge1xuICAgIC8vIGBVUkwucHJvdG90eXBlLmhyZWZgIGFjY2Vzc29ycyBwYWlyXG4gICAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWhyZWZcbiAgICBocmVmOiBhY2Nlc3NvckRlc2NyaXB0b3Ioc2VyaWFsaXplVVJMLCBmdW5jdGlvbiAoaHJlZikge1xuICAgICAgdmFyIHVybCA9IGdldEludGVybmFsVVJMU3RhdGUodGhpcyk7XG4gICAgICB2YXIgdXJsU3RyaW5nID0gJHRvU3RyaW5nKGhyZWYpO1xuICAgICAgdmFyIGZhaWx1cmUgPSBwYXJzZVVSTCh1cmwsIHVybFN0cmluZyk7XG4gICAgICBpZiAoZmFpbHVyZSkgdGhyb3cgVHlwZUVycm9yKGZhaWx1cmUpO1xuICAgICAgZ2V0SW50ZXJuYWxTZWFyY2hQYXJhbXNTdGF0ZSh1cmwuc2VhcmNoUGFyYW1zKS51cGRhdGVTZWFyY2hQYXJhbXModXJsLnF1ZXJ5KTtcbiAgICB9KSxcbiAgICAvLyBgVVJMLnByb3RvdHlwZS5vcmlnaW5gIGdldHRlclxuICAgIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1vcmlnaW5cbiAgICBvcmlnaW46IGFjY2Vzc29yRGVzY3JpcHRvcihnZXRPcmlnaW4pLFxuICAgIC8vIGBVUkwucHJvdG90eXBlLnByb3RvY29sYCBhY2Nlc3NvcnMgcGFpclxuICAgIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1wcm90b2NvbFxuICAgIHByb3RvY29sOiBhY2Nlc3NvckRlc2NyaXB0b3IoZ2V0UHJvdG9jb2wsIGZ1bmN0aW9uIChwcm90b2NvbCkge1xuICAgICAgdmFyIHVybCA9IGdldEludGVybmFsVVJMU3RhdGUodGhpcyk7XG4gICAgICBwYXJzZVVSTCh1cmwsICR0b1N0cmluZyhwcm90b2NvbCkgKyAnOicsIFNDSEVNRV9TVEFSVCk7XG4gICAgfSksXG4gICAgLy8gYFVSTC5wcm90b3R5cGUudXNlcm5hbWVgIGFjY2Vzc29ycyBwYWlyXG4gICAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXVzZXJuYW1lXG4gICAgdXNlcm5hbWU6IGFjY2Vzc29yRGVzY3JpcHRvcihnZXRVc2VybmFtZSwgZnVuY3Rpb24gKHVzZXJuYW1lKSB7XG4gICAgICB2YXIgdXJsID0gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKTtcbiAgICAgIHZhciBjb2RlUG9pbnRzID0gYXJyYXlGcm9tKCR0b1N0cmluZyh1c2VybmFtZSkpO1xuICAgICAgaWYgKGNhbm5vdEhhdmVVc2VybmFtZVBhc3N3b3JkUG9ydCh1cmwpKSByZXR1cm47XG4gICAgICB1cmwudXNlcm5hbWUgPSAnJztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZVBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB1cmwudXNlcm5hbWUgKz0gcGVyY2VudEVuY29kZShjb2RlUG9pbnRzW2ldLCB1c2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQpO1xuICAgICAgfVxuICAgIH0pLFxuICAgIC8vIGBVUkwucHJvdG90eXBlLnBhc3N3b3JkYCBhY2Nlc3NvcnMgcGFpclxuICAgIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1wYXNzd29yZFxuICAgIHBhc3N3b3JkOiBhY2Nlc3NvckRlc2NyaXB0b3IoZ2V0UGFzc3dvcmQsIGZ1bmN0aW9uIChwYXNzd29yZCkge1xuICAgICAgdmFyIHVybCA9IGdldEludGVybmFsVVJMU3RhdGUodGhpcyk7XG4gICAgICB2YXIgY29kZVBvaW50cyA9IGFycmF5RnJvbSgkdG9TdHJpbmcocGFzc3dvcmQpKTtcbiAgICAgIGlmIChjYW5ub3RIYXZlVXNlcm5hbWVQYXNzd29yZFBvcnQodXJsKSkgcmV0dXJuO1xuICAgICAgdXJsLnBhc3N3b3JkID0gJyc7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvZGVQb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdXJsLnBhc3N3b3JkICs9IHBlcmNlbnRFbmNvZGUoY29kZVBvaW50c1tpXSwgdXNlcmluZm9QZXJjZW50RW5jb2RlU2V0KTtcbiAgICAgIH1cbiAgICB9KSxcbiAgICAvLyBgVVJMLnByb3RvdHlwZS5ob3N0YCBhY2Nlc3NvcnMgcGFpclxuICAgIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1ob3N0XG4gICAgaG9zdDogYWNjZXNzb3JEZXNjcmlwdG9yKGdldEhvc3QsIGZ1bmN0aW9uIChob3N0KSB7XG4gICAgICB2YXIgdXJsID0gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKTtcbiAgICAgIGlmICh1cmwuY2Fubm90QmVBQmFzZVVSTCkgcmV0dXJuO1xuICAgICAgcGFyc2VVUkwodXJsLCAkdG9TdHJpbmcoaG9zdCksIEhPU1QpO1xuICAgIH0pLFxuICAgIC8vIGBVUkwucHJvdG90eXBlLmhvc3RuYW1lYCBhY2Nlc3NvcnMgcGFpclxuICAgIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1ob3N0bmFtZVxuICAgIGhvc3RuYW1lOiBhY2Nlc3NvckRlc2NyaXB0b3IoZ2V0SG9zdG5hbWUsIGZ1bmN0aW9uIChob3N0bmFtZSkge1xuICAgICAgdmFyIHVybCA9IGdldEludGVybmFsVVJMU3RhdGUodGhpcyk7XG4gICAgICBpZiAodXJsLmNhbm5vdEJlQUJhc2VVUkwpIHJldHVybjtcbiAgICAgIHBhcnNlVVJMKHVybCwgJHRvU3RyaW5nKGhvc3RuYW1lKSwgSE9TVE5BTUUpO1xuICAgIH0pLFxuICAgIC8vIGBVUkwucHJvdG90eXBlLnBvcnRgIGFjY2Vzc29ycyBwYWlyXG4gICAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXBvcnRcbiAgICBwb3J0OiBhY2Nlc3NvckRlc2NyaXB0b3IoZ2V0UG9ydCwgZnVuY3Rpb24gKHBvcnQpIHtcbiAgICAgIHZhciB1cmwgPSBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpO1xuICAgICAgaWYgKGNhbm5vdEhhdmVVc2VybmFtZVBhc3N3b3JkUG9ydCh1cmwpKSByZXR1cm47XG4gICAgICBwb3J0ID0gJHRvU3RyaW5nKHBvcnQpO1xuICAgICAgaWYgKHBvcnQgPT0gJycpIHVybC5wb3J0ID0gbnVsbDtcbiAgICAgIGVsc2UgcGFyc2VVUkwodXJsLCBwb3J0LCBQT1JUKTtcbiAgICB9KSxcbiAgICAvLyBgVVJMLnByb3RvdHlwZS5wYXRobmFtZWAgYWNjZXNzb3JzIHBhaXJcbiAgICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtcGF0aG5hbWVcbiAgICBwYXRobmFtZTogYWNjZXNzb3JEZXNjcmlwdG9yKGdldFBhdGhuYW1lLCBmdW5jdGlvbiAocGF0aG5hbWUpIHtcbiAgICAgIHZhciB1cmwgPSBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpO1xuICAgICAgaWYgKHVybC5jYW5ub3RCZUFCYXNlVVJMKSByZXR1cm47XG4gICAgICB1cmwucGF0aCA9IFtdO1xuICAgICAgcGFyc2VVUkwodXJsLCAkdG9TdHJpbmcocGF0aG5hbWUpLCBQQVRIX1NUQVJUKTtcbiAgICB9KSxcbiAgICAvLyBgVVJMLnByb3RvdHlwZS5zZWFyY2hgIGFjY2Vzc29ycyBwYWlyXG4gICAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXNlYXJjaFxuICAgIHNlYXJjaDogYWNjZXNzb3JEZXNjcmlwdG9yKGdldFNlYXJjaCwgZnVuY3Rpb24gKHNlYXJjaCkge1xuICAgICAgdmFyIHVybCA9IGdldEludGVybmFsVVJMU3RhdGUodGhpcyk7XG4gICAgICBzZWFyY2ggPSAkdG9TdHJpbmcoc2VhcmNoKTtcbiAgICAgIGlmIChzZWFyY2ggPT0gJycpIHtcbiAgICAgICAgdXJsLnF1ZXJ5ID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICgnPycgPT0gc2VhcmNoLmNoYXJBdCgwKSkgc2VhcmNoID0gc2VhcmNoLnNsaWNlKDEpO1xuICAgICAgICB1cmwucXVlcnkgPSAnJztcbiAgICAgICAgcGFyc2VVUkwodXJsLCBzZWFyY2gsIFFVRVJZKTtcbiAgICAgIH1cbiAgICAgIGdldEludGVybmFsU2VhcmNoUGFyYW1zU3RhdGUodXJsLnNlYXJjaFBhcmFtcykudXBkYXRlU2VhcmNoUGFyYW1zKHVybC5xdWVyeSk7XG4gICAgfSksXG4gICAgLy8gYFVSTC5wcm90b3R5cGUuc2VhcmNoUGFyYW1zYCBnZXR0ZXJcbiAgICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtc2VhcmNocGFyYW1zXG4gICAgc2VhcmNoUGFyYW1zOiBhY2Nlc3NvckRlc2NyaXB0b3IoZ2V0U2VhcmNoUGFyYW1zKSxcbiAgICAvLyBgVVJMLnByb3RvdHlwZS5oYXNoYCBhY2Nlc3NvcnMgcGFpclxuICAgIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1oYXNoXG4gICAgaGFzaDogYWNjZXNzb3JEZXNjcmlwdG9yKGdldEhhc2gsIGZ1bmN0aW9uIChoYXNoKSB7XG4gICAgICB2YXIgdXJsID0gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKTtcbiAgICAgIGhhc2ggPSAkdG9TdHJpbmcoaGFzaCk7XG4gICAgICBpZiAoaGFzaCA9PSAnJykge1xuICAgICAgICB1cmwuZnJhZ21lbnQgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoJyMnID09IGhhc2guY2hhckF0KDApKSBoYXNoID0gaGFzaC5zbGljZSgxKTtcbiAgICAgIHVybC5mcmFnbWVudCA9ICcnO1xuICAgICAgcGFyc2VVUkwodXJsLCBoYXNoLCBGUkFHTUVOVCk7XG4gICAgfSlcbiAgfSk7XG59XG5cbi8vIGBVUkwucHJvdG90eXBlLnRvSlNPTmAgbWV0aG9kXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtdG9qc29uXG5yZWRlZmluZShVUkxQcm90b3R5cGUsICd0b0pTT04nLCBmdW5jdGlvbiB0b0pTT04oKSB7XG4gIHJldHVybiBzZXJpYWxpemVVUkwuY2FsbCh0aGlzKTtcbn0sIHsgZW51bWVyYWJsZTogdHJ1ZSB9KTtcblxuLy8gYFVSTC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNVUkwtc3RyaW5naWZpY2F0aW9uLWJlaGF2aW9yXG5yZWRlZmluZShVUkxQcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gc2VyaWFsaXplVVJMLmNhbGwodGhpcyk7XG59LCB7IGVudW1lcmFibGU6IHRydWUgfSk7XG5cbmlmIChOYXRpdmVVUkwpIHtcbiAgdmFyIG5hdGl2ZUNyZWF0ZU9iamVjdFVSTCA9IE5hdGl2ZVVSTC5jcmVhdGVPYmplY3RVUkw7XG4gIHZhciBuYXRpdmVSZXZva2VPYmplY3RVUkwgPSBOYXRpdmVVUkwucmV2b2tlT2JqZWN0VVJMO1xuICAvLyBgVVJMLmNyZWF0ZU9iamVjdFVSTGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9VUkwvY3JlYXRlT2JqZWN0VVJMXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIGlmIChuYXRpdmVDcmVhdGVPYmplY3RVUkwpIHJlZGVmaW5lKFVSTENvbnN0cnVjdG9yLCAnY3JlYXRlT2JqZWN0VVJMJywgZnVuY3Rpb24gY3JlYXRlT2JqZWN0VVJMKGJsb2IpIHtcbiAgICByZXR1cm4gbmF0aXZlQ3JlYXRlT2JqZWN0VVJMLmFwcGx5KE5hdGl2ZVVSTCwgYXJndW1lbnRzKTtcbiAgfSk7XG4gIC8vIGBVUkwucmV2b2tlT2JqZWN0VVJMYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC9yZXZva2VPYmplY3RVUkxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgaWYgKG5hdGl2ZVJldm9rZU9iamVjdFVSTCkgcmVkZWZpbmUoVVJMQ29uc3RydWN0b3IsICdyZXZva2VPYmplY3RVUkwnLCBmdW5jdGlvbiByZXZva2VPYmplY3RVUkwodXJsKSB7XG4gICAgcmV0dXJuIG5hdGl2ZVJldm9rZU9iamVjdFVSTC5hcHBseShOYXRpdmVVUkwsIGFyZ3VtZW50cyk7XG4gIH0pO1xufVxuXG5zZXRUb1N0cmluZ1RhZyhVUkxDb25zdHJ1Y3RvciwgJ1VSTCcpO1xuXG4kKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6ICFVU0VfTkFUSVZFX1VSTCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgVVJMOiBVUkxDb25zdHJ1Y3RvclxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcblxuLy8gYFVSTC5wcm90b3R5cGUudG9KU09OYCBtZXRob2Rcbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC10b2pzb25cbiQoeyB0YXJnZXQ6ICdVUkwnLCBwcm90bzogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSB9LCB7XG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIHJldHVybiBVUkwucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcyk7XG4gIH1cbn0pO1xuIiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi4xMy4xXG4gKiByZWFjdC1pcy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgOiAweGVhYzc7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKSA6IDB4ZWFjYTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZnJhZ21lbnQnKSA6IDB4ZWFjYjtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKSA6IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKSA6IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvdmlkZXInKSA6IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb250ZXh0JykgOiAweGVhY2U7IC8vIFRPRE86IFdlIGRvbid0IHVzZSBBc3luY01vZGUgb3IgQ29uY3VycmVudE1vZGUgYW55bW9yZS4gVGhleSB3ZXJlIHRlbXBvcmFyeVxuLy8gKHVuc3RhYmxlKSBBUElzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQuIENhbiB3ZSByZW1vdmUgdGhlIHN5bWJvbHM/XG5cbnZhciBSRUFDVF9BU1lOQ19NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5hc3luY19tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb25jdXJyZW50X21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKSA6IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKSA6IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0JykgOiAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubWVtbycpIDogMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKSA6IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYmxvY2snKSA6IDB4ZWFkOTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZnVuZGFtZW50YWwnKSA6IDB4ZWFkNTtcbnZhciBSRUFDVF9SRVNQT05ERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnJlc3BvbmRlcicpIDogMHhlYWQ2O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zY29wZScpIDogMHhlYWQ3O1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nIHx8IC8vIE5vdGU6IGl0cyB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyBpZiBpdCdzIGEgcG9seWZpbGwuXG4gIHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9SRVNQT05ERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9TQ09QRV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUpO1xufVxuXG5mdW5jdGlvbiB0eXBlT2Yob2JqZWN0KSB7XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBvYmplY3QuJCR0eXBlb2Y7XG5cbiAgICBzd2l0Y2ggKCQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgdmFyIHR5cGUgPSBvYmplY3QudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0FTWU5DX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoJCR0eXBlb2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZlR5cGU7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn0gLy8gQXN5bmNNb2RlIGlzIGRlcHJlY2F0ZWQgYWxvbmcgd2l0aCBpc0FzeW5jTW9kZVxuXG52YXIgQXN5bmNNb2RlID0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xudmFyIENvbmN1cnJlbnRNb2RlID0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG52YXIgQ29udGV4dENvbnN1bWVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xudmFyIENvbnRleHRQcm92aWRlciA9IFJFQUNUX1BST1ZJREVSX1RZUEU7XG52YXIgRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbnZhciBGb3J3YXJkUmVmID0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbnZhciBGcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG52YXIgTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbnZhciBNZW1vID0gUkVBQ1RfTUVNT19UWVBFO1xudmFyIFBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xudmFyIFByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbnZhciBTdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbnZhciBTdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSBmYWxzZTsgLy8gQXN5bmNNb2RlIHNob3VsZCBiZSBkZXByZWNhdGVkXG5cbmZ1bmN0aW9uIGlzQXN5bmNNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQXN5bmNNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE3Ky4gVXBkYXRlIHlvdXIgY29kZSB0byB1c2UgJyArICdSZWFjdElzLmlzQ29uY3VycmVudE1vZGUoKSBpbnN0ZWFkLiBJdCBoYXMgdGhlIGV4YWN0IHNhbWUgQVBJLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkgfHwgdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRDb25zdW1lcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05URVhUX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9WSURFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNGb3J3YXJkUmVmKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZyYWdtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0xhenkob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xufVxuZnVuY3Rpb24gaXNNZW1vKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX01FTU9fVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUG9ydGFsKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BPUlRBTF9UWVBFO1xufVxuZnVuY3Rpb24gaXNQcm9maWxlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdHJpY3RNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG59XG5cbmV4cG9ydHMuQXN5bmNNb2RlID0gQXN5bmNNb2RlO1xuZXhwb3J0cy5Db25jdXJyZW50TW9kZSA9IENvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5Db250ZXh0Q29uc3VtZXIgPSBDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IENvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuRWxlbWVudCA9IEVsZW1lbnQ7XG5leHBvcnRzLkZvcndhcmRSZWYgPSBGb3J3YXJkUmVmO1xuZXhwb3J0cy5GcmFnbWVudCA9IEZyYWdtZW50O1xuZXhwb3J0cy5MYXp5ID0gTGF6eTtcbmV4cG9ydHMuTWVtbyA9IE1lbW87XG5leHBvcnRzLlBvcnRhbCA9IFBvcnRhbDtcbmV4cG9ydHMuUHJvZmlsZXIgPSBQcm9maWxlcjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFN0cmljdE1vZGU7XG5leHBvcnRzLlN1c3BlbnNlID0gU3VzcGVuc2U7XG5leHBvcnRzLmlzQXN5bmNNb2RlID0gaXNBc3luY01vZGU7XG5leHBvcnRzLmlzQ29uY3VycmVudE1vZGUgPSBpc0NvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGlzQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlciA9IGlzQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG5leHBvcnRzLmlzRm9yd2FyZFJlZiA9IGlzRm9yd2FyZFJlZjtcbmV4cG9ydHMuaXNGcmFnbWVudCA9IGlzRnJhZ21lbnQ7XG5leHBvcnRzLmlzTGF6eSA9IGlzTGF6eTtcbmV4cG9ydHMuaXNNZW1vID0gaXNNZW1vO1xuZXhwb3J0cy5pc1BvcnRhbCA9IGlzUG9ydGFsO1xuZXhwb3J0cy5pc1Byb2ZpbGVyID0gaXNQcm9maWxlcjtcbmV4cG9ydHMuaXNTdHJpY3RNb2RlID0gaXNTdHJpY3RNb2RlO1xuZXhwb3J0cy5pc1N1c3BlbnNlID0gaXNTdXNwZW5zZTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlO1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG4gIH0pKCk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbiAgdmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuXG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xufVxuXG4vKipcbiAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZXMgbWF0Y2ggd2l0aCB0aGUgdHlwZSBzcGVjcy5cbiAqIEVycm9yIG1lc3NhZ2VzIGFyZSBtZW1vcml6ZWQgYW5kIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSB0eXBlU3BlY3MgTWFwIG9mIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlXG4gKiBAcGFyYW0ge29iamVjdH0gdmFsdWVzIFJ1bnRpbWUgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSB0eXBlLWNoZWNrZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiBlLmcuIFwicHJvcFwiLCBcImNvbnRleHRcIiwgXCJjaGlsZCBjb250ZXh0XCJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVudCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gKiBAcGFyYW0gez9GdW5jdGlvbn0gZ2V0U3RhY2sgUmV0dXJucyB0aGUgY29tcG9uZW50IHN0YWNrLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBnZXRTdGFjaykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcihcbiAgICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICtcbiAgICAgICAgICAgICAgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yID0gZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yICYmICEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAnICtcbiAgICAgICAgICAgIGxvY2F0aW9uICsgJyBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJyArIHR5cGVvZiBlcnJvciArICcuICcgK1xuICAgICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArXG4gICAgICAgICAgICAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVzc2FnZV0gPSB0cnVlO1xuXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XG5cbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAnRmFpbGVkICcgKyBsb2NhdGlvbiArICcgdHlwZTogJyArIGVycm9yLm1lc3NhZ2UgKyAoc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0cyB3YXJuaW5nIGNhY2hlIHdoZW4gdGVzdGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jaGVja1Byb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbnZhciBjaGVja1Byb3BUeXBlcyA9IHJlcXVpcmUoJy4vY2hlY2tQcm9wVHlwZXMnKTtcblxudmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcbn1cblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgLyogZ2xvYmFsIFN5bWJvbCAqL1xuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG4gIHZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuXG4gICAqXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxuICAgKlxuICAgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpO1xuICAgKiAgICAgICAuLi5cbiAgICogICAgIH1cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIHRoYXQgYWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBhcmVcbiAgICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpO1xuICAgKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgXCJkZXNjcmlwdGlvblwiLlxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcImNhdGVnb3J5XCIuXG4gICAqICAgICAgIGNhdGVnb3J5OiBQcm9wcy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCxcbiAgICpcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFwiZGlhbG9nXCIgdGhhdCByZXF1aXJlcyBhbiBpbnN0YW5jZSBvZiBEaWFsb2cuXG4gICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWRcbiAgICogICAgIH0sXG4gICAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeyAuLi4gfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBBIG1vcmUgZm9ybWFsIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6XG4gICAqXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxuICAgKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1JlcXVpcmVkKT9cbiAgICpcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xuICAgKiBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgXCJocmVmXCIuXG4gICAqICAgICAgaHJlZjogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXG4gICAqICAgICAgICAgICAgIShwcm9wVmFsdWUgaW5zdGFuY2VvZiBVUkkpKSB7XG4gICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcbiAgICogICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAqICAgICAgICAgICk7XG4gICAqICAgICAgICB9XG4gICAqICAgICAgfVxuICAgKiAgICB9LFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cbiAgICogIH0pO1xuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxuICAgIGZ1bmM6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlvbicpLFxuICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxuICAgIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N0cmluZycpLFxuICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJvbCcpLFxuXG4gICAgYW55OiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpLFxuICAgIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcbiAgICBlbGVtZW50VHlwZTogY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpLFxuICAgIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcbiAgICBvYmplY3RPZjogY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcixcbiAgICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcbiAgICBzaGFwZTogY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcixcbiAgICBleGFjdDogY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcixcbiAgfTtcblxuICAvKipcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAgICovXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cbiAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cbiAgICBpZiAoeCA9PT0geSkge1xuICAgICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgICB9XG4gIH1cbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXG5cbiAgLyoqXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcbiAgICogUHJvcFR5cGVzIGRpcmVjdGx5IGFuZCBpbnNwZWN0IHRoZWlyIG91dHB1dC4gSG93ZXZlciwgd2UgZG9uJ3QgdXNlIHJlYWxcbiAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbVxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XG4gICAqIGhhcHBlbnMgaW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0eXBlIGJlZm9yZSB0aGUgb25lIHRoYXQgbWF0Y2hlZC5cbiAgICovXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5zdGFjayA9ICcnO1xuICB9XG4gIC8vIE1ha2UgYGluc3RhbmNlb2YgRXJyb3JgIHN0aWxsIHdvcmsgZm9yIHJldHVybmVkIGVycm9ycy5cbiAgUHJvcFR5cGVFcnJvci5wcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlID0ge307XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPSAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja1R5cGUoaXNSZXF1aXJlZCwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIGNvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgIHByb3BGdWxsTmFtZSA9IHByb3BGdWxsTmFtZSB8fCBwcm9wTmFtZTtcblxuICAgICAgaWYgKHNlY3JldCAhPT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgICAgaWYgKHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgICAgICAgICAvLyBOZXcgYmVoYXZpb3Igb25seSBmb3IgdXNlcnMgb2YgYHByb3AtdHlwZXNgIHBhY2thZ2VcbiAgICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxuICAgICAgICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xuICAgICAgICAgICAgJ1VzZSBgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKClgIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAgICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICAgICAgICApO1xuICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIC8vIE9sZCBiZWhhdmlvciBmb3IgcGVvcGxlIHVzaW5nIFJlYWN0LlByb3BUeXBlc1xuICAgICAgICAgIHZhciBjYWNoZUtleSA9IGNvbXBvbmVudE5hbWUgKyAnOicgKyBwcm9wTmFtZTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldICYmXG4gICAgICAgICAgICAvLyBBdm9pZCBzcGFtbWluZyB0aGUgY29uc29sZSBiZWNhdXNlIHRoZXkgYXJlIG9mdGVuIG5vdCBhY3Rpb25hYmxlIGV4Y2VwdCBmb3IgbGliIGF1dGhvcnNcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50IDwgM1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgICAnWW91IGFyZSBtYW51YWxseSBjYWxsaW5nIGEgUmVhY3QuUHJvcFR5cGVzIHZhbGlkYXRpb24gJyArXG4gICAgICAgICAgICAgICdmdW5jdGlvbiBmb3IgdGhlIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgcHJvcCBvbiBgJyArIGNvbXBvbmVudE5hbWUgICsgJ2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcbiAgICAgICAgICAgICAgJ2FuZCB3aWxsIHRocm93IGluIHRoZSBzdGFuZGFsb25lIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICAgJ1lvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgJyArXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkICcgKyAoJ2luIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGBudWxsYC4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoYWluZWRDaGVja1R5cGUgPSBjaGVja1R5cGUuYmluZChudWxsLCBmYWxzZSk7XG4gICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XG5cbiAgICByZXR1cm4gY2hhaW5lZENoZWNrVHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKGV4cGVjdGVkVHlwZSkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICAgIC8vIGBwcm9wVmFsdWVgIGJlaW5nIGluc3RhbmNlIG9mLCBzYXksIGRhdGUvcmVnZXhwLCBwYXNzIHRoZSAnb2JqZWN0J1xuICAgICAgICAvLyBjaGVjaywgYnV0IHdlIGNhbiBvZmZlciBhIG1vcmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlIGhlcmUgcmF0aGVyIHRoYW5cbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxuICAgICAgICB2YXIgcHJlY2lzZVR5cGUgPSBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQW55VHlwZUNoZWNrZXIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gYXJyYXkuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBpLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJ1snICsgaSArICddJywgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlVHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFSZWFjdElzLmlzVmFsaWRFbGVtZW50VHlwZShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudCB0eXBlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIShwcm9wc1twcm9wTmFtZV0gaW5zdGFuY2VvZiBleHBlY3RlZENsYXNzKSkge1xuICAgICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgICB2YXIgYWN0dWFsQ2xhc3NOYW1lID0gZ2V0Q2xhc3NOYW1lKHByb3BzW3Byb3BOYW1lXSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIGFjdHVhbENsYXNzTmFtZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnaW5zdGFuY2Ugb2YgYCcgKyBleHBlY3RlZENsYXNzTmFtZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVmFsdWVzKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnRzIHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBhcnJheSwgZ290ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBhcmd1bWVudHMuICcgK1xuICAgICAgICAgICAgJ0EgY29tbW9uIG1pc3Rha2UgaXMgdG8gd3JpdGUgb25lT2YoeCwgeSwgeikgaW5zdGVhZCBvZiBvbmVPZihbeCwgeSwgel0pLidcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXkuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGlzKHByb3BWYWx1ZSwgZXhwZWN0ZWRWYWx1ZXNbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzLCBmdW5jdGlvbiByZXBsYWNlcihrZXksIHZhbHVlKSB7XG4gICAgICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdmFsdWUgYCcgKyBTdHJpbmcocHJvcFZhbHVlKSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xuICAgICAgICBpZiAoaGFzKHByb3BWYWx1ZSwga2V5KSkge1xuICAgICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlVW5pb25UeXBlQ2hlY2tlcihhcnJheU9mVHlwZUNoZWNrZXJzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5T2ZUeXBlQ2hlY2tlcnMpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLiBFeHBlY3RlZCBhbiBhcnJheSBvZiBjaGVjayBmdW5jdGlvbnMsIGJ1dCAnICtcbiAgICAgICAgICAncmVjZWl2ZWQgJyArIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyhjaGVja2VyKSArICcgYXQgaW5kZXggJyArIGkgKyAnLidcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xuICAgICAgICBpZiAoY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nKSk7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVOb2RlQ2hlY2tlcigpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICghaXNOb2RlKHByb3BzW3Byb3BOYW1lXSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBSZWFjdE5vZGUuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBhbGwga2V5cyBpbiBjYXNlIHNvbWUgYXJlIHJlcXVpcmVkIGJ1dCBtaXNzaW5nIGZyb21cbiAgICAgIC8vIHByb3BzLlxuICAgICAgdmFyIGFsbEtleXMgPSBhc3NpZ24oe30sIHByb3BzW3Byb3BOYW1lXSwgc2hhcGVUeXBlcyk7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gYWxsS2V5cykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKFxuICAgICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGtleSBgJyArIGtleSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLicgK1xuICAgICAgICAgICAgJ1xcbkJhZCBvYmplY3Q6ICcgKyBKU09OLnN0cmluZ2lmeShwcm9wc1twcm9wTmFtZV0sIG51bGwsICcgICcpICtcbiAgICAgICAgICAgICdcXG5WYWxpZCBrZXlzOiAnICsgIEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHNoYXBlVHlwZXMpLCBudWxsLCAnICAnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc05vZGUocHJvcFZhbHVlKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgcHJvcFZhbHVlKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAhcHJvcFZhbHVlO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBwcm9wVmFsdWUuZXZlcnkoaXNOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcFZhbHVlID09PSBudWxsIHx8IGlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihwcm9wVmFsdWUpO1xuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChwcm9wVmFsdWUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICBpZiAoIWlzTm9kZShzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJdGVyYXRvciB3aWxsIHByb3ZpZGUgZW50cnkgW2ssdl0gdHVwbGVzIHJhdGhlciB0aGFuIHZhbHVlcy5cbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05vZGUoZW50cnlbMV0pKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcbiAgICAvLyBOYXRpdmUgU3ltYm9sLlxuICAgIGlmIChwcm9wVHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGZhbHN5IHZhbHVlIGNhbid0IGJlIGEgU3ltYm9sXG4gICAgaWYgKCFwcm9wVmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddID09PSAnU3ltYm9sJ1xuICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIGZvciBub24tc3BlYyBjb21wbGlhbnQgU3ltYm9scyB3aGljaCBhcmUgcG9seWZpbGxlZC5cbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wVmFsdWUgaW5zdGFuY2VvZiBTeW1ib2wpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cbiAgZnVuY3Rpb24gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKSB7XG4gICAgdmFyIHByb3BUeXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9XG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgLy8gT2xkIHdlYmtpdHMgKGF0IGxlYXN0IHVudGlsIEFuZHJvaWQgNC4wKSByZXR1cm4gJ2Z1bmN0aW9uJyByYXRoZXIgdGhhblxuICAgICAgLy8gJ29iamVjdCcgZm9yIHR5cGVvZiBhIFJlZ0V4cC4gV2UnbGwgbm9ybWFsaXplIHRoaXMgaGVyZSBzbyB0aGF0IC9ibGEvXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cbiAgICAgIHJldHVybiAnb2JqZWN0JztcbiAgICB9XG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ3N5bWJvbCc7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cbiAgLy8gU2VlIGBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcmAuXG4gIGZ1bmN0aW9uIGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkge1xuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJyArIHByb3BWYWx1ZTtcbiAgICB9XG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICBpZiAocHJvcFR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gJ2RhdGUnO1xuICAgICAgfSBlbHNlIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcmV0dXJuICdyZWdleHAnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcG9zdGZpeGVkIHRvIGEgd2FybmluZyBhYm91dCBhbiBpbnZhbGlkIHR5cGUuXG4gIC8vIEZvciBleGFtcGxlLCBcInVuZGVmaW5lZFwiIG9yIFwib2YgdHlwZSBhcnJheVwiXG4gIGZ1bmN0aW9uIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xuICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuICdhbiAnICsgdHlwZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICBjYXNlICdyZWdleHAnOlxuICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LlxuICBmdW5jdGlvbiBnZXRDbGFzc05hbWUocHJvcFZhbHVlKSB7XG4gICAgaWYgKCFwcm9wVmFsdWUuY29uc3RydWN0b3IgfHwgIXByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lKSB7XG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cblxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGNoZWNrUHJvcFR5cGVzO1xuICBSZWFjdFByb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlO1xuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuIiwiXG5cbi8qOjogdHlwZSBBdHRyID0geyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfSAqL1xuLyo6OiB0eXBlIE9wdHMgPSB7IHByZXNlcnZlTnVtYmVyczogP2Jvb2xlYW4gfSAqL1xuXG4vKlxuXG5zdHlsZS1hdHRyXG49PT09XG5cblZlcnkgc2ltcGxlIHBhcnNpbmcgYW5kIHN0cmluZ2lmeWluZyBvZiBzdHlsZSBhdHRyaWJ1dGVzLlxuXG5gcGFyc2VgXG4tLS0tXG5cbkNvbnZlcnQgYSBzdHlsZSBhdHRyaWJ1dGUgc3RyaW5nIHRvIGFuIG9iamVjdC5cblxuKi9cblxuLyo6OiBkZWNsYXJlIGZ1bmN0aW9uIHBhcnNlIChyYXc6IHN0cmluZywgb3B0czogP09wdHMpOiBBdHRyICovXG5mdW5jdGlvbiBwYXJzZShyYXcsIG9wdHMpIHtcbiAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgdmFyIHByZXNlcnZlTnVtYmVycyA9IG9wdHMucHJlc2VydmVOdW1iZXJzO1xuICB2YXIgdHJpbSA9IGZ1bmN0aW9uIChzKSB7XG4gICAgcmV0dXJuIHMudHJpbSgpO1xuICB9O1xuICB2YXIgb2JqID0ge307XG5cbiAgZ2V0S2V5VmFsdWVDaHVua3MocmF3KS5tYXAodHJpbSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAvLyBzcGxpdCB3aXRoIGAuaW5kZXhPZmAgcmF0aGVyIHRoYW4gYC5zcGxpdGAgYmVjYXVzZSB0aGUgdmFsdWUgbWF5IGFsc28gY29udGFpbiBjb2xvbnMuXG4gICAgdmFyIHBvcyA9IGl0ZW0uaW5kZXhPZignOicpO1xuICAgIHZhciBrZXkgPSBpdGVtLnN1YnN0cigwLCBwb3MpLnRyaW0oKTtcbiAgICB2YXIgdmFsID0gaXRlbS5zdWJzdHIocG9zICsgMSkudHJpbSgpO1xuICAgIGlmIChwcmVzZXJ2ZU51bWJlcnMgJiYgaXNOdW1lcmljKHZhbCkpIHtcbiAgICAgIHZhbCA9IE51bWJlcih2YWwpO1xuICAgIH1cblxuICAgIG9ialtrZXldID0gdmFsO1xuICB9KTtcblxuICByZXR1cm4gb2JqO1xufVxuXG4vKlxuXG5gaXNOdW1lcmljYFxuLS0tLVxuXG5DaGVjayBpZiBhIHZhbHVlIGlzIG51bWVyaWMuXG5WaWE6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xODMwODQ0LzkzMjRcblxuKi9cblxuLyo6OiBkZWNsYXJlIGZ1bmN0aW9uIGlzTnVtZXJpYyAobjogYW55KTogYm9vbGVhbiAqL1xuXG5mdW5jdGlvbiBpc051bWVyaWMobikge1xuICByZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQobikpICYmIGlzRmluaXRlKG4pO1xufVxuXG4vKlxuXG5gZ2V0S2V5VmFsdWVDaHVua3NgXG4tLS0tXG5cblNwbGl0IGEgc3RyaW5nIGludG8gY2h1bmtzIG1hdGNoaW5nIGA8a2V5PjogPHZhbHVlPmBcblxuKi9cbi8qOjogZGVjbGFyZSBmdW5jdGlvbiBnZXRLZXlWYWx1ZUNodW5rcyAocmF3OiBzdHJpbmcpOiBBcnJheTxzdHJpbmc+ICovXG5mdW5jdGlvbiBnZXRLZXlWYWx1ZUNodW5rcyhyYXcpIHtcbiAgdmFyIGNodW5rcyA9IFtdO1xuICB2YXIgb2Zmc2V0ID0gMDtcbiAgdmFyIHNlcCA9ICc7JztcbiAgdmFyIGhhc1VuY2xvc2VkVXJsID0gL3VybFxcKFteXFwpXSskLztcbiAgdmFyIGNodW5rID0gJyc7XG4gIHZhciBuZXh0U3BsaXQ7XG4gIHdoaWxlIChvZmZzZXQgPCByYXcubGVuZ3RoKSB7XG4gICAgbmV4dFNwbGl0ID0gcmF3LmluZGV4T2Yoc2VwLCBvZmZzZXQpO1xuICAgIGlmIChuZXh0U3BsaXQgPT09IC0xKSB7XG4gICAgICBuZXh0U3BsaXQgPSByYXcubGVuZ3RoO1xuICAgIH1cblxuICAgIGNodW5rICs9IHJhdy5zdWJzdHJpbmcob2Zmc2V0LCBuZXh0U3BsaXQpO1xuXG4gICAgLy8gZGF0YSBVUklzIGNhbiBjb250YWluIHNlbWljb2xvbnMsIHNvIG1ha2Ugc3VyZSB3ZSBnZXQgdGhlIHdob2xlIHRoaW5nXG4gICAgaWYgKGhhc1VuY2xvc2VkVXJsLnRlc3QoY2h1bmspKSB7XG4gICAgICBjaHVuayArPSAnOyc7XG4gICAgICBvZmZzZXQgPSBuZXh0U3BsaXQgKyAxO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY2h1bmtzLnB1c2goY2h1bmspO1xuICAgIGNodW5rID0gJyc7XG4gICAgb2Zmc2V0ID0gbmV4dFNwbGl0ICsgMTtcbiAgfVxuXG4gIHJldHVybiBjaHVua3M7XG59XG5cbi8qXG5cbmBzdHJpbmdpZnlgXG4tLS0tXG5cbkNvbnZlcnQgYW4gb2JqZWN0IGludG8gYW4gYXR0cmlidXRlIHN0cmluZ1xuXG4qL1xuLyo6OiBkZWNsYXJlIGZ1bmN0aW9uIHN0cmluZ2lmeSAob2JqOiBBdHRyKTogc3RyaW5nICovXG5mdW5jdGlvbiBzdHJpbmdpZnkob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGtleSArICc6JyArIG9ialtrZXldO1xuICB9KS5qb2luKCc7Jyk7XG59XG5cbi8qXG5cbmBub3JtYWxpemVgXG4tLS0tXG5cbk5vcm1hbGl6ZSBhbiBhdHRyaWJ1dGUgc3RyaW5nIChlZy4gY29sbGFwc2UgZHVwbGljYXRlcylcblxuKi9cbi8qOjogZGVjbGFyZSBmdW5jdGlvbiBub3JtYWxpemUgKHN0cjogc3RyaW5nLCBvcHRzOiA/T3B0cyk6IHN0cmluZyAqL1xuZnVuY3Rpb24gbm9ybWFsaXplKHN0ciwgb3B0cykge1xuICByZXR1cm4gc3RyaW5naWZ5KHBhcnNlKHN0ciwgb3B0cykpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5wYXJzZSA9IHBhcnNlO1xubW9kdWxlLmV4cG9ydHMuc3RyaW5naWZ5ID0gc3RyaW5naWZ5O1xubW9kdWxlLmV4cG9ydHMubm9ybWFsaXplID0gbm9ybWFsaXplOyIsIi8qKlxuICogYXR0ciBmaXggZm9yIG9sZCBpZVxuICogQGF1dGhvciB5aW1pbmdoZUBnbWFpbC5jb21cbiAqL1xudmFyIFJfQk9PTEVBTiA9IC9eKD86YXV0b2ZvY3VzfGF1dG9wbGF5fGFzeW5jfGNoZWNrZWR8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWR8c2VsZWN0ZWQpJC9pLFxuICBSX0ZPQ1VTQUJMRSA9IC9eKD86YnV0dG9ufGlucHV0fG9iamVjdHxzZWxlY3R8dGV4dGFyZWEpJC9pLFxuICBSX0NMSUNLQUJMRSA9IC9eYSg/OnJlYSk/JC9pLFxuICBSX0lOVkFMSURfQ0hBUiA9IC86fF5vbi87XG5cbnZhciBhdHRyRml4ID0ge30sXG4gIHByb3BGaXgsXG4gIGF0dHJIb29rcyA9IHtcbiAgICAvLyBodHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgvMDEvMDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0aC1qYXZhc2NyaXB0L1xuICAgIHRhYmluZGV4OiB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIChlbCkge1xuICAgICAgICAvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGUgY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0XG4gICAgICAgIHZhciBhdHRyaWJ1dGVOb2RlID0gZWwuZ2V0QXR0cmlidXRlTm9kZSgndGFiaW5kZXgnKTtcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmlidXRlTm9kZS5zcGVjaWZpZWQgP1xuICAgICAgICAgIHBhcnNlSW50KGF0dHJpYnV0ZU5vZGUudmFsdWUsIDEwKSA6XG4gICAgICAgICAgUl9GT0NVU0FCTEUudGVzdChlbC5ub2RlTmFtZSkgfHxcbiAgICAgICAgICBSX0NMSUNLQUJMRS50ZXN0KGVsLm5vZGVOYW1lKSAmJiBlbC5ocmVmID9cbiAgICAgICAgICAgIDAgOlxuICAgICAgICAgICAgdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgYm9vbEhvb2sgPSB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoZWxlbSwgbmFtZSkge1xuICAgICAgLy8g6L2s5Y+R5YiwIHByb3Ag5pa55rOVXG4gICAgICByZXR1cm4gZWxlbVtwcm9wRml4W25hbWVdIHx8IG5hbWVdID9cbiAgICAgICAgLy8g5qC55o2uIHczYyBhdHRyaWJ1dGUgLCB0cnVlIOaXtui/lOWbnuWxnuaAp+WQjeWtl+espuS4slxuICAgICAgICBuYW1lLnRvTG93ZXJDYXNlKCkgOlxuICAgICAgICB1bmRlZmluZWQ7XG4gICAgfVxuICB9LFxuICBhdHRyTm9kZUhvb2sgPSB7fTtcblxuYXR0ckhvb2tzLnN0eWxlID0ge1xuICBnZXQ6IGZ1bmN0aW9uIChlbCkge1xuICAgIHJldHVybiBlbC5zdHlsZS5jc3NUZXh0O1xuICB9XG59O1xuXG5wcm9wRml4ID0ge1xuICBoaWRlZm9jdXM6ICdoaWRlRm9jdXMnLFxuICB0YWJpbmRleDogJ3RhYkluZGV4JyxcbiAgcmVhZG9ubHk6ICdyZWFkT25seScsXG4gICdmb3InOiAnaHRtbEZvcicsXG4gICdjbGFzcyc6ICdjbGFzc05hbWUnLFxuICBtYXhsZW5ndGg6ICdtYXhMZW5ndGgnLFxuICBjZWxsc3BhY2luZzogJ2NlbGxTcGFjaW5nJyxcbiAgY2VsbHBhZGRpbmc6ICdjZWxsUGFkZGluZycsXG4gIHJvd3NwYW46ICdyb3dTcGFuJyxcbiAgY29sc3BhbjogJ2NvbFNwYW4nLFxuICB1c2VtYXA6ICd1c2VNYXAnLFxuICBmcmFtZWJvcmRlcjogJ2ZyYW1lQm9yZGVyJyxcbiAgY29udGVudGVkaXRhYmxlOiAnY29udGVudEVkaXRhYmxlJ1xufTtcblxudmFyIHVhID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgPyBuYXZpZ2F0b3IudXNlckFnZW50IDogJyc7XG52YXIgZG9jID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyA/IGRvY3VtZW50IDoge307XG5cbmZ1bmN0aW9uIG51bWJlcmlmeShzKSB7XG4gIHZhciBjID0gMDtcbiAgLy8gY29udmVydCAnMS4yLjMuNCcgdG8gMS4yMzRcbiAgcmV0dXJuIHBhcnNlRmxvYXQocy5yZXBsYWNlKC9cXC4vZywgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAoYysrID09PSAwKSA/ICcuJyA6ICcnO1xuICB9KSk7XG59XG5cbmZ1bmN0aW9uIGllVmVyc2lvbigpIHtcbiAgdmFyIG0sIHY7XG4gIGlmICgobSA9IHVhLm1hdGNoKC9NU0lFIChbXjtdKil8VHJpZGVudC4qOyBydig/Olxcc3w6KT8oWzAtOS5dKykvKSkgJiZcbiAgICAodiA9IChtWzFdIHx8IG1bMl0pKSkge1xuICAgIHJldHVybiBkb2MuZG9jdW1lbnRNb2RlIHx8IG51bWJlcmlmeSh2KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtaXgocywgdCkge1xuICBmb3IgKHZhciBwIGluIHQpIHtcbiAgICBzW3BdID0gdFtwXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlYWNoKGFyciwgZm4pIHtcbiAgdmFyIGkgPSAwLCBsID0gYXJyLmxlbmd0aDtcbiAgZm9yICg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoZm4oYXJyW2ldLCBpKSA9PT0gZmFsc2UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxudmFyIGllID0gaWVWZXJzaW9uKCk7XG5cbmlmIChpZSAmJiBpZSA8IDgpIHtcbiAgYXR0ckhvb2tzLnN0eWxlLnNldCA9IGZ1bmN0aW9uIChlbCwgdmFsKSB7XG4gICAgZWwuc3R5bGUuY3NzVGV4dCA9IHZhbDtcbiAgfTtcblxuICAvLyBnZXQgYXR0cmlidXRlIHZhbHVlIGZyb20gYXR0cmlidXRlIG5vZGUgZm9yIGllXG4gIG1peChhdHRyTm9kZUhvb2ssIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIChlbGVtLCBuYW1lKSB7XG4gICAgICB2YXIgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpO1xuICAgICAgLy8gUmV0dXJuIHVuZGVmaW5lZCBpZiBhdHRyaWJ1dGUgbm9kZSBzcGVjaWZpZWQgYnkgdXNlclxuICAgICAgcmV0dXJuIHJldCAmJiAoXG4gICAgICAgIC8vIGZpeCAjMTAwXG4gICAgICByZXQuc3BlY2lmaWVkIHx8IHJldC5ub2RlVmFsdWUpID9cbiAgICAgICAgcmV0Lm5vZGVWYWx1ZSA6XG4gICAgICAgIHVuZGVmaW5lZDtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIGllNiw3IOS4jeWMuuWIhiBhdHRyaWJ1dGUg5LiOIHByb3BlcnR5XG4gIG1peChhdHRyRml4LCBwcm9wRml4KTtcblxuICAvLyBodHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgvMDEvMDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0aC1qYXZhc2NyaXB0L1xuICBhdHRySG9va3MudGFiSW5kZXggPSBhdHRySG9va3MudGFiaW5kZXg7XG5cbiAgLy8g5LiN5YWJ5pivIGhyZWYsIHNyYywg6L+Y5pyJIHJvd3NwYW4g562J6Z2eIG1hcHBpbmcg5bGe5oCn77yM5Lmf6ZyA6KaB55So56ysIDIg5Liq5Y+C5pWw5p2l6I635Y+W5Y6f5aeL5YC8XG4gIC8vIOazqOaEjyBjb2xTcGFuIHJvd1NwYW4g5bey57uP55SxIHByb3BGaXgg6L2s5Li65aSn5YaZXG4gIGVhY2goWydocmVmJywgJ3NyYycsICd3aWR0aCcsICdoZWlnaHQnLCAnY29sU3BhbicsICdyb3dTcGFuJ10sIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgYXR0ckhvb2tzW25hbWVdID0ge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgICB2YXIgcmV0ID0gZWxlbS5nZXRBdHRyaWJ1dGUobmFtZSwgMik7XG4gICAgICAgIHJldHVybiByZXQgPT09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7XG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG5cbiAgYXR0ckhvb2tzLnBsYWNlaG9sZGVyID0ge1xuICAgIGdldDogZnVuY3Rpb24gKGVsZW0sIG5hbWUpIHtcbiAgICAgIHJldHVybiBlbGVtW25hbWVdIHx8IGF0dHJOb2RlSG9vay5nZXQoZWxlbSwgbmFtZSk7XG4gICAgfVxuICB9O1xufVxuXG5pZiAoaWUpIHtcbiAgdmFyIGhyZWZGaXggPSBhdHRySG9va3MuaHJlZiA9IGF0dHJIb29rcy5ocmVmIHx8IHt9O1xuICBocmVmRml4LnNldCA9IGZ1bmN0aW9uIChlbCwgdmFsLCBuYW1lKSB7XG4gICAgdmFyIGNoaWxkTm9kZXMgPSBlbC5jaGlsZE5vZGVzLFxuICAgICAgYixcbiAgICAgIGxlbiA9IGNoaWxkTm9kZXMubGVuZ3RoLFxuICAgICAgYWxsVGV4dCA9IGxlbiA+IDA7XG4gICAgZm9yIChsZW4gPSBsZW4gLSAxOyBsZW4gPj0gMDsgbGVuLS0pIHtcbiAgICAgIGlmIChjaGlsZE5vZGVzW2xlbl0ubm9kZVR5cGUgIT09IDMpIHtcbiAgICAgICAgYWxsVGV4dCA9IDA7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhbGxUZXh0KSB7XG4gICAgICBiID0gZWwub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCdiJyk7XG4gICAgICBiLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICBlbC5hcHBlbmRDaGlsZChiKTtcbiAgICB9XG4gICAgZWwuc2V0QXR0cmlidXRlKG5hbWUsICcnICsgdmFsKTtcbiAgICBpZiAoYikge1xuICAgICAgZWwucmVtb3ZlQ2hpbGQoYik7XG4gICAgfVxuICB9O1xufVxuXG52YXIgUkVfVFJJTSA9IC9eW1xcc1xceGEwXSt8W1xcc1xceGEwXSskL2csXG4gIHRyaW0gPSBTdHJpbmcucHJvdG90eXBlLnRyaW07XG52YXIgU1BBQ0UgPSAnICc7XG5cbnZhciBnZXRFbGVtZW50c0J5VGFnTmFtZTtcbmdldEVsZW1lbnRzQnlUYWdOYW1lID0gZnVuY3Rpb24gKG5hbWUsIGNvbnRleHQpIHtcbiAgcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUobmFtZSk7XG59O1xuXG5pZiAoZG9jLmNyZWF0ZUVsZW1lbnQpIHtcbiAgdmFyIGRpdiA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJycpKTtcbiAgaWYgKGRpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpLmxlbmd0aCkge1xuICAgIGdldEVsZW1lbnRzQnlUYWdOYW1lID0gZnVuY3Rpb24gKG5hbWUsIGNvbnRleHQpIHtcbiAgICAgIHZhciBub2RlcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUobmFtZSksXG4gICAgICAgIG5lZWRzRmlsdGVyID0gbmFtZSA9PT0gJyonO1xuICAgICAgLy8gPGlucHV0IGlkPSdsZW5ndGgnPlxuICAgICAgaWYgKG5lZWRzRmlsdGVyIHx8IHR5cGVvZiBub2Rlcy5sZW5ndGggIT09ICdudW1iZXInKSB7XG4gICAgICAgIHZhciByZXQgPSBbXSxcbiAgICAgICAgICBpID0gMCxcbiAgICAgICAgICBlbDtcbiAgICAgICAgd2hpbGUgKChlbCA9IG5vZGVzW2krK10pKSB7XG4gICAgICAgICAgaWYgKCFuZWVkc0ZpbHRlciB8fCBlbC5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgICAgICAgcmV0LnB1c2goZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5vZGVzO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxudmFyIGNvbXBhcmVOb2RlT3JkZXIgPSAoJ3NvdXJjZUluZGV4JyBpbiAoZG9jICYmIGRvYy5kb2N1bWVudEVsZW1lbnQgfHwge30pKSA/IGZ1bmN0aW9uIChhLCBiKSB7XG4gIHJldHVybiBhLnNvdXJjZUluZGV4IC0gYi5zb3VyY2VJbmRleDtcbn0gOiBmdW5jdGlvbiAoYSwgYikge1xuICBpZiAoIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gfHwgIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb24pIHtcbiAgICByZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiA/IC0xIDogMTtcbiAgfVxuICB2YXIgYml0ID0gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSAmIDQ7XG4gIHJldHVybiBiaXQgPyAtMSA6IDE7XG59O1xuXG52YXIgdXRpbCA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBpZTogaWUsXG5cbiAgdW5pcXVlOiAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYXNEdXBsaWNhdGUsXG4gICAgICBiYXNlSGFzRHVwbGljYXRlID0gdHJ1ZTtcblxuICAgIC8vIEhlcmUgd2UgY2hlY2sgaWYgdGhlIEphdmFTY3JpcHQgZW5naW5lIGlzIHVzaW5nIHNvbWUgc29ydCBvZlxuICAgIC8vIG9wdGltaXphdGlvbiB3aGVyZSBpdCBkb2VzIG5vdCBhbHdheXMgY2FsbCBvdXIgY29tcGFyaXNvblxuICAgIC8vIGZ1bmN0aW9uLiBJZiB0aGF0IGlzIHRoZSBjYXNlLCBkaXNjYXJkIHRoZSBoYXNEdXBsaWNhdGUgdmFsdWUuXG4gICAgLy8gVGh1cyBmYXIgdGhhdCBpbmNsdWRlcyBHb29nbGUgQ2hyb21lLlxuICAgIFswLCAwXS5zb3J0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGJhc2VIYXNEdXBsaWNhdGUgPSBmYWxzZTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gc29ydE9yZGVyKGEsIGIpIHtcbiAgICAgIGlmIChhID09PSBiKSB7XG4gICAgICAgIGhhc0R1cGxpY2F0ZSA9IHRydWU7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tcGFyZU5vZGVPcmRlcihhLCBiKTtcbiAgICB9XG5cbiAgICAvLyDmjpLluo/ljrvph41cbiAgICByZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnRzKSB7XG4gICAgICBoYXNEdXBsaWNhdGUgPSBiYXNlSGFzRHVwbGljYXRlO1xuICAgICAgZWxlbWVudHMuc29ydChzb3J0T3JkZXIpO1xuXG4gICAgICBpZiAoaGFzRHVwbGljYXRlKSB7XG4gICAgICAgIHZhciBpID0gMSwgbGVuID0gZWxlbWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICAgIGlmIChlbGVtZW50c1tpXSA9PT0gZWxlbWVudHNbaSAtIDFdKSB7XG4gICAgICAgICAgICBlbGVtZW50cy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAtLWxlbjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVsZW1lbnRzO1xuICAgIH07XG4gIH0pKCksXG5cbiAgZ2V0RWxlbWVudHNCeVRhZ05hbWU6IGdldEVsZW1lbnRzQnlUYWdOYW1lLFxuXG4gIGdldFNpbXBsZUF0dHI6IGZ1bmN0aW9uIChlbCwgbmFtZSkge1xuICAgIHZhciByZXQgPSBlbCAmJiBlbC5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUpO1xuICAgIGlmIChyZXQgJiYgcmV0LnNwZWNpZmllZCkge1xuICAgICAgcmV0dXJuICd2YWx1ZScgaW4gcmV0ID8gcmV0LnZhbHVlIDogcmV0Lm5vZGVWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSxcblxuICBjb250YWluczogaWUgPyBmdW5jdGlvbiAoYSwgYikge1xuICAgIGlmIChhLm5vZGVUeXBlID09PSA5KSB7XG4gICAgICBhID0gYS5kb2N1bWVudEVsZW1lbnQ7XG4gICAgfVxuICAgIC8vICFhLmNvbnRhaW5zID0+IGE9PT1kb2N1bWVudCB8fCB0ZXh0XG4gICAgLy8g5rOo5oSP5Y6f55SfIGNvbnRhaW5zIOWIpOaWreaXtiBhPT09YiDkuZ/ov5Tlm54gdHJ1ZVxuICAgIGIgPSBiLnBhcmVudE5vZGU7XG5cbiAgICBpZiAoYSA9PT0gYikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gd2hlbiBiIGlzIGRvY3VtZW50LCBhLmNvbnRhaW5zKGIpIOS4jeaUr+aMgeeahOaOpeWPoyBpbiBpZVxuICAgIGlmIChiICYmIGIubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgIHJldHVybiBhLmNvbnRhaW5zICYmIGEuY29udGFpbnMoYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gOiBmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiAhIShhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpICYgMTYpO1xuICB9LFxuXG4gIGlzVGFnOiBmdW5jdGlvbiAoZWwsIHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAnKicgfHwgZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgfSxcblxuICBoYXNTaW5nbGVDbGFzczogZnVuY3Rpb24gKGVsLCBjbHMpIHtcbiAgICAvLyBjb25zaWRlciB4bWxcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20va2lzc3l0ZWFtL2tpc3N5L2lzc3Vlcy81MzJcbiAgICB2YXIgY2xhc3NOYW1lID0gZWwgJiYgdXRpbC5nZXRTaW1wbGVBdHRyKGVsLCAnY2xhc3MnKTtcbiAgICByZXR1cm4gY2xhc3NOYW1lICYmIChjbGFzc05hbWUgPSBjbGFzc05hbWUucmVwbGFjZSgvW1xcclxcdFxcbl0vZywgU1BBQ0UpKSAmJlxuICAgICAgKFNQQUNFICsgY2xhc3NOYW1lICsgU1BBQ0UpLmluZGV4T2YoU1BBQ0UgKyBjbHMgKyBTUEFDRSkgPiAtMTtcbiAgfSxcblxuICBzdGFydHNXaXRoOiBmdW5jdGlvbiAoc3RyLCBwcmVmaXgpIHtcbiAgICByZXR1cm4gc3RyLmxhc3RJbmRleE9mKHByZWZpeCwgMCkgPT09IDA7XG4gIH0sXG5cbiAgZW5kc1dpdGg6IGZ1bmN0aW9uIChzdHIsIHN1ZmZpeCkge1xuICAgIHZhciBpbmQgPSBzdHIubGVuZ3RoIC0gc3VmZml4Lmxlbmd0aDtcbiAgICByZXR1cm4gaW5kID49IDAgJiYgc3RyLmluZGV4T2Yoc3VmZml4LCBpbmQpID09PSBpbmQ7XG4gIH0sXG5cbiAgdHJpbTogdHJpbSA/XG4gICAgZnVuY3Rpb24gKHN0cikge1xuICAgICAgcmV0dXJuIHN0ciA9PSBudWxsID8gJycgOiB0cmltLmNhbGwoc3RyKTtcbiAgICB9IDpcbiAgICBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICByZXR1cm4gc3RyID09IG51bGwgPyAnJyA6IChzdHIgKyAnJykucmVwbGFjZShSRV9UUklNLCAnJyk7XG4gICAgfSxcblxuICBhdHRyOiBmdW5jdGlvbiAoZWwsIG5hbWUpIHtcbiAgICB2YXIgYXR0ck5vcm1hbGl6ZXIsIHJldDtcbiAgICAvLyBzY3JvbGxMZWZ0XG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAvLyBjdXN0b20gYXR0cnNcbiAgICBuYW1lID0gYXR0ckZpeFtuYW1lXSB8fCBuYW1lO1xuICAgIGlmIChSX0JPT0xFQU4udGVzdChuYW1lKSkge1xuICAgICAgYXR0ck5vcm1hbGl6ZXIgPSBib29sSG9vaztcbiAgICB9IGVsc2UgaWYgKFJfSU5WQUxJRF9DSEFSLnRlc3QobmFtZSkpIHtcbiAgICAgIC8vIG9ubHkgb2xkIGllP1xuICAgICAgYXR0ck5vcm1hbGl6ZXIgPSBhdHRyTm9kZUhvb2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF0dHJOb3JtYWxpemVyID0gYXR0ckhvb2tzW25hbWVdO1xuICAgIH1cbiAgICBpZiAoZWwgJiYgZWwubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgIC8vIGJyb3dzZXJzIGluZGV4IGVsZW1lbnRzIGJ5IGlkL25hbWUgb24gZm9ybXMsIGdpdmUgcHJpb3JpdHkgdG8gYXR0cmlidXRlcy5cbiAgICAgIGlmIChlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnZm9ybScpIHtcbiAgICAgICAgYXR0ck5vcm1hbGl6ZXIgPSBhdHRyTm9kZUhvb2s7XG4gICAgICB9XG4gICAgICBpZiAoYXR0ck5vcm1hbGl6ZXIgJiYgYXR0ck5vcm1hbGl6ZXIuZ2V0KSB7XG4gICAgICAgIHJldHVybiBhdHRyTm9ybWFsaXplci5nZXQoZWwsIG5hbWUpO1xuICAgICAgfVxuICAgICAgcmV0ID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgICAgaWYgKHJldCA9PT0gJycpIHtcbiAgICAgICAgdmFyIGF0dHJOb2RlID0gZWwuZ2V0QXR0cmlidXRlTm9kZShuYW1lKTtcbiAgICAgICAgaWYgKCFhdHRyTm9kZSB8fCAhYXR0ck5vZGUuc3BlY2lmaWVkKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gc3RhbmRhcmQgYnJvd3NlciBub24tZXhpc3RpbmcgYXR0cmlidXRlIHJldHVybiBudWxsXG4gICAgICAvLyBpZTw4IHdpbGwgcmV0dXJuIHVuZGVmaW5lZCAsIGJlY2F1c2UgaXQgcmV0dXJuIHByb3BlcnR5XG4gICAgICAvLyBzbyBub3JtIHRvIHVuZGVmaW5lZFxuICAgICAgcmV0dXJuIHJldCA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJldDtcbiAgICB9XG4gIH1cbn07IiwiLypcbiAgR2VuZXJhdGVkIGJ5IGtpc29uLiovXG52YXIgcGFyc2VyID0gKGZ1bmN0aW9uICh1bmRlZmluZWQpIHtcbiAgICAvKmpzaGludCBxdW90bWFyazpmYWxzZSwgbG9vcGZ1bmM6dHJ1ZSwgaW5kZW50OmZhbHNlLCB1bnVzZWQ6ZmFsc2UsIGFzaTp0cnVlLCBib3NzOnRydWUqL1xuICAgIC8qIEdlbmVyYXRlZCBieSBraXNvbiAqL1xuICAgIHZhciBwYXJzZXIgPSB7fSxcbiAgICAgICAgR3JhbW1hckNvbnN0ID0ge1xuICAgICAgICAgICAgJ1NISUZUX1RZUEUnOiAxLFxuICAgICAgICAgICAgJ1JFRFVDRV9UWVBFJzogMixcbiAgICAgICAgICAgICdBQ0NFUFRfVFlQRSc6IDAsXG4gICAgICAgICAgICAnVFlQRV9JTkRFWCc6IDAsXG4gICAgICAgICAgICAnUFJPRFVDVElPTl9JTkRFWCc6IDEsXG4gICAgICAgICAgICAnVE9fSU5ERVgnOiAyXG4gICAgICAgIH07XG4gICAgLypqc2xpbnQgcXVvdG1hcms6IGZhbHNlKi9cbiAgICBmdW5jdGlvbiBtaXgodG8sIGZyb20pIHtcbiAgICAgICAgZm9yICh2YXIgZiBpbiBmcm9tKSB7XG4gICAgICAgICAgICB0b1tmXSA9IGZyb21bZl07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FycmF5KG9iaikge1xuICAgICAgICByZXR1cm4gJ1tvYmplY3QgQXJyYXldJyA9PT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZWFjaChvYmplY3QsIGZuLCBjb250ZXh0KSB7XG4gICAgICAgIGlmIChvYmplY3QpIHtcbiAgICAgICAgICAgIHZhciBrZXksXG4gICAgICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgICAgIGxlbmd0aCxcbiAgICAgICAgICAgICAgICBpID0gMDtcblxuICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHQgfHwgbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFpc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2FuIG5vdCB1c2UgaGFzT3duUHJvcGVydHlcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZuLmNhbGwoY29udGV4dCwgb2JqZWN0W2tleV0sIGtleSwgb2JqZWN0KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZW5ndGggPSBvYmplY3QubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAodmFsID0gb2JqZWN0WzBdOyBpIDwgbGVuZ3RoOyB2YWwgPSBvYmplY3RbKytpXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm4uY2FsbChjb250ZXh0LCB2YWwsIGksIG9iamVjdCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluQXJyYXkoaXRlbSwgYXJyKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJyLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gaXRlbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIExleGVyID0gZnVuY3Rpb24gTGV4ZXIoY2ZnKSB7XG5cbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIC8qXG4gICAgIGxleCBydWxlcy5cbiAgICAgQHR5cGUge09iamVjdFtdfVxuICAgICBAZXhhbXBsZVxuICAgICBbXG4gICAgIHtcbiAgICAgcmVnZXhwOidcXFxcdysnLFxuICAgICBzdGF0ZTpbJ3h4J10sXG4gICAgIHRva2VuOidjJyxcbiAgICAgLy8gdGhpcyA9PiBsZXhcbiAgICAgYWN0aW9uOmZ1bmN0aW9uKCl7fVxuICAgICB9XG4gICAgIF1cbiAgICAgKi9cbiAgICAgICAgc2VsZi5ydWxlcyA9IFtdO1xuXG4gICAgICAgIG1peChzZWxmLCBjZmcpO1xuXG4gICAgICAgIC8qXG4gICAgIElucHV0IGxhbmd1YWdlc1xuICAgICBAdHlwZSB7U3RyaW5nfVxuICAgICAqL1xuXG4gICAgICAgIHNlbGYucmVzZXRJbnB1dChzZWxmLmlucHV0KTtcbiAgICB9O1xuICAgIExleGVyLnByb3RvdHlwZSA9IHtcbiAgICAgICAgJ3Jlc2V0SW5wdXQnOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgIG1peCh0aGlzLCB7XG4gICAgICAgICAgICAgICAgaW5wdXQ6IGlucHV0LFxuICAgICAgICAgICAgICAgIG1hdGNoZWQ6ICcnLFxuICAgICAgICAgICAgICAgIHN0YXRlU3RhY2s6IFtMZXhlci5TVEFUSUMuSU5JVElBTF0sXG4gICAgICAgICAgICAgICAgbWF0Y2g6ICcnLFxuICAgICAgICAgICAgICAgIHRleHQ6ICcnLFxuICAgICAgICAgICAgICAgIGZpcnN0TGluZTogMSxcbiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiAxLFxuICAgICAgICAgICAgICAgIGxhc3RMaW5lOiAxLFxuICAgICAgICAgICAgICAgIGZpcnN0Q29sdW1uOiAxLFxuICAgICAgICAgICAgICAgIGxhc3RDb2x1bW46IDFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICAnZ2V0Q3VycmVudFJ1bGVzJzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IHNlbGYuc3RhdGVTdGFja1tzZWxmLnN0YXRlU3RhY2subGVuZ3RoIC0gMV0sXG4gICAgICAgICAgICAgICAgcnVsZXMgPSBbXTtcbiAgICAgICAgICAgIC8vI0pTQ09WRVJBR0VfSUZcbiAgICAgICAgICAgIGlmIChzZWxmLm1hcFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gc2VsZi5tYXBTdGF0ZShjdXJyZW50U3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWFjaChzZWxmLnJ1bGVzLCBmdW5jdGlvbiAocikge1xuICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHIuc3RhdGUgfHwgclszXTtcbiAgICAgICAgICAgICAgICBpZiAoIXN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U3RhdGUgPT09IExleGVyLlNUQVRJQy5JTklUSUFMKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBydWxlcy5wdXNoKHIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbkFycmF5KGN1cnJlbnRTdGF0ZSwgc3RhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzLnB1c2gocik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcnVsZXM7XG4gICAgICAgIH0sXG4gICAgICAgICdwdXNoU3RhdGUnOiBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVTdGFjay5wdXNoKHN0YXRlKTtcbiAgICAgICAgfSxcbiAgICAgICAgJ3BvcFN0YXRlJzogZnVuY3Rpb24gKG51bSkge1xuICAgICAgICAgICAgbnVtID0gbnVtIHx8IDE7XG4gICAgICAgICAgICB2YXIgcmV0O1xuICAgICAgICAgICAgd2hpbGUgKG51bS0tKSB7XG4gICAgICAgICAgICAgICAgcmV0ID0gdGhpcy5zdGF0ZVN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfSxcbiAgICAgICAgJ3Nob3dEZWJ1Z0luZm8nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICAgICAgICAgICAgREVCVUdfQ09OVEVYVF9MSU1JVCA9IExleGVyLlNUQVRJQy5ERUJVR19DT05URVhUX0xJTUlULFxuICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBzZWxmLm1hdGNoZWQsXG4gICAgICAgICAgICAgICAgbWF0Y2ggPSBzZWxmLm1hdGNoLFxuICAgICAgICAgICAgICAgIGlucHV0ID0gc2VsZi5pbnB1dDtcbiAgICAgICAgICAgIG1hdGNoZWQgPSBtYXRjaGVkLnNsaWNlKDAsIG1hdGNoZWQubGVuZ3RoIC0gbWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgICAgIC8vI0pTQ09WRVJBR0VfSUYgMFxuICAgICAgICAgICAgdmFyIHBhc3QgPSAobWF0Y2hlZC5sZW5ndGggPiBERUJVR19DT05URVhUX0xJTUlUID8gJy4uLicgOiAnJykgK1xuICAgICAgICAgICAgICAgIG1hdGNoZWQuc2xpY2UoMCAtIERFQlVHX0NPTlRFWFRfTElNSVQpLnJlcGxhY2UoL1xcbi8sICcgJyksXG4gICAgICAgICAgICAgICAgbmV4dCA9IG1hdGNoICsgaW5wdXQ7XG4gICAgICAgICAgICAvLyNKU0NPVkVSQUdFX0VORElGXG4gICAgICAgICAgICBuZXh0ID0gbmV4dC5zbGljZSgwLCBERUJVR19DT05URVhUX0xJTUlUKSArXG4gICAgICAgICAgICAgICAgKG5leHQubGVuZ3RoID4gREVCVUdfQ09OVEVYVF9MSU1JVCA/ICcuLi4nIDogJycpO1xuICAgICAgICAgICAgcmV0dXJuIHBhc3QgKyBuZXh0ICsgJ1xcbicgKyBuZXcgQXJyYXkocGFzdC5sZW5ndGggKyAxKS5qb2luKCctJykgKyAnXic7XG4gICAgICAgIH0sXG4gICAgICAgICdtYXBTeW1ib2wnOiBmdW5jdGlvbiBtYXBTeW1ib2xGb3JDb2RlR2VuKHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN5bWJvbE1hcFt0XTtcbiAgICAgICAgfSxcbiAgICAgICAgJ21hcFJldmVyc2VTeW1ib2wnOiBmdW5jdGlvbiAocnMpIHtcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgICAgICAgICBzeW1ib2xNYXAgPSBzZWxmLnN5bWJvbE1hcCxcbiAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgIHJldmVyc2VTeW1ib2xNYXAgPSBzZWxmLnJldmVyc2VTeW1ib2xNYXA7XG4gICAgICAgICAgICBpZiAoIXJldmVyc2VTeW1ib2xNYXAgJiYgc3ltYm9sTWFwKSB7XG4gICAgICAgICAgICAgICAgcmV2ZXJzZVN5bWJvbE1hcCA9IHNlbGYucmV2ZXJzZVN5bWJvbE1hcCA9IHt9O1xuICAgICAgICAgICAgICAgIGZvciAoaSBpbiBzeW1ib2xNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZVN5bWJvbE1hcFtzeW1ib2xNYXBbaV1dID0gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyNKU0NPVkVSQUdFX0lGXG4gICAgICAgICAgICBpZiAocmV2ZXJzZVN5bWJvbE1hcCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXZlcnNlU3ltYm9sTWFwW3JzXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAnbGV4JzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICAgICAgICAgIGlucHV0ID0gc2VsZi5pbnB1dCxcbiAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgIHJ1bGUsXG4gICAgICAgICAgICAgICAgbSxcbiAgICAgICAgICAgICAgICByZXQsXG4gICAgICAgICAgICAgICAgbGluZXMsXG4gICAgICAgICAgICAgICAgcnVsZXMgPSBzZWxmLmdldEN1cnJlbnRSdWxlcygpO1xuXG4gICAgICAgICAgICBzZWxmLm1hdGNoID0gc2VsZi50ZXh0ID0gJyc7XG5cbiAgICAgICAgICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5tYXBTeW1ib2woTGV4ZXIuU1RBVElDLkVORF9UQUcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBydWxlID0gcnVsZXNbaV07XG4gICAgICAgICAgICAgICAgLy8jSlNDT1ZFUkFHRV9JRiAwXG4gICAgICAgICAgICAgICAgdmFyIHJlZ2V4cCA9IHJ1bGUucmVnZXhwIHx8IHJ1bGVbMV0sXG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0gcnVsZS50b2tlbiB8fCBydWxlWzBdLFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSBydWxlLmFjdGlvbiB8fCBydWxlWzJdIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAvLyNKU0NPVkVSQUdFX0VORElGXG4gICAgICAgICAgICAgICAgaWYgKChtID0gaW5wdXQubWF0Y2gocmVnZXhwKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBtWzBdLm1hdGNoKC9cXG4uKi9nKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmVOdW1iZXIgKz0gbGluZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG1peChzZWxmLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdExpbmU6IHNlbGYubGFzdExpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0TGluZTogc2VsZi5saW5lTnVtYmVyICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Q29sdW1uOiBzZWxmLmxhc3RDb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q29sdW1uOiBsaW5lcyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoIC0gMSA6IHNlbGYubGFzdENvbHVtbiArIG1bMF0ubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2g7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZvciBlcnJvciByZXBvcnRcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBzZWxmLm1hdGNoID0gbVswXTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBhbGwgbWF0Y2hlc1xuICAgICAgICAgICAgICAgICAgICBzZWxmLm1hdGNoZXMgPSBtO1xuICAgICAgICAgICAgICAgICAgICAvLyBtYXkgY2hhbmdlIGJ5IHVzZXJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXh0ID0gbWF0Y2g7XG4gICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoZWQgY29udGVudCB1dGlscyBub3dcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXRjaGVkICs9IG1hdGNoO1xuICAgICAgICAgICAgICAgICAgICByZXQgPSBhY3Rpb24gJiYgYWN0aW9uLmNhbGwoc2VsZik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBzZWxmLm1hcFN5bWJvbChyZXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQuc2xpY2UobWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnB1dCA9IGlucHV0O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmxleCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBMZXhlci5TVEFUSUMgPSB7XG4gICAgICAgICdJTklUSUFMJzogJ0knLFxuICAgICAgICAnREVCVUdfQ09OVEVYVF9MSU1JVCc6IDIwLFxuICAgICAgICAnRU5EX1RBRyc6ICckRU9GJ1xuICAgIH07XG4gICAgdmFyIGxleGVyID0gbmV3IExleGVyKHtcbiAgICAgICAgJ3J1bGVzJzogW1xuICAgICAgICAgICAgWydiJywgL15cXFsoPzpbXFx0XFxyXFxuXFxmXFx4MjBdKikvLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy55eS50cmltKHRoaXMudGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFsnYycsIC9eKD86W1xcdFxcclxcblxcZlxceDIwXSopXFxdLyxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCA9IHRoaXMueXkudHJpbSh0aGlzLnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbJ2QnLCAvXig/OltcXHRcXHJcXG5cXGZcXHgyMF0qKX49KD86W1xcdFxcclxcblxcZlxceDIwXSopLyxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCA9IHRoaXMueXkudHJpbSh0aGlzLnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbJ2UnLCAvXig/OltcXHRcXHJcXG5cXGZcXHgyMF0qKVxcfD0oPzpbXFx0XFxyXFxuXFxmXFx4MjBdKikvLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy55eS50cmltKHRoaXMudGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFsnZicsIC9eKD86W1xcdFxcclxcblxcZlxceDIwXSopXFxePSg/OltcXHRcXHJcXG5cXGZcXHgyMF0qKS8sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnl5LnRyaW0odGhpcy50ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgWydnJywgL14oPzpbXFx0XFxyXFxuXFxmXFx4MjBdKilcXCQ9KD86W1xcdFxcclxcblxcZlxceDIwXSopLyxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCA9IHRoaXMueXkudHJpbSh0aGlzLnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbJ2gnLCAvXig/OltcXHRcXHJcXG5cXGZcXHgyMF0qKVxcKj0oPzpbXFx0XFxyXFxuXFxmXFx4MjBdKikvLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy55eS50cmltKHRoaXMudGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFsnaScsIC9eKD86W1xcdFxcclxcblxcZlxceDIwXSopXFw9KD86W1xcdFxcclxcblxcZlxceDIwXSopLyxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCA9IHRoaXMueXkudHJpbSh0aGlzLnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbJ2onLCAvXig/Oig/OltcXHddfFteXFx4MDAtXFx4YTBdfCg/OlxcXFxbXlxcblxcclxcZjAtOWEtZl0pKSg/OltcXHdcXGQtXXxbXlxceDAwLVxceGEwXXwoPzpcXFxcW15cXG5cXHJcXGYwLTlhLWZdKSkqKVxcKC8sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnl5LnRyaW0odGhpcy50ZXh0KS5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaFN0YXRlKCdmbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbJ2snLCAvXlteXFwpXSovLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgWydmbiddXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgWydsJywgL14oPzpbXFx0XFxyXFxuXFxmXFx4MjBdKilcXCkvLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy55eS50cmltKHRoaXMudGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFsnbScsIC9eOm5vdFxcKCg/OltcXHRcXHJcXG5cXGZcXHgyMF0qKS9pLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy55eS50cmltKHRoaXMudGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFsnbicsIC9eKD86KD86W1xcd118W15cXHgwMC1cXHhhMF18KD86XFxcXFteXFxuXFxyXFxmMC05YS1mXSkpKD86W1xcd1xcZC1dfFteXFx4MDAtXFx4YTBdfCg/OlxcXFxbXlxcblxcclxcZjAtOWEtZl0pKSopLyxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCA9IHRoaXMueXkudW5Fc2NhcGUodGhpcy50ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgWydvJywgL15cIihcXFxcXCJ8W15cIl0pKlwiLyxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCA9IHRoaXMueXkudW5Fc2NhcGVTdHIodGhpcy50ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgWydvJywgL14nKFxcXFwnfFteJ10pKicvLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy55eS51bkVzY2FwZVN0cih0aGlzLnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbJ3AnLCAvXiMoPzooPzpbXFx3XFxkLV18W15cXHgwMC1cXHhhMF18KD86XFxcXFteXFxuXFxyXFxmMC05YS1mXSkpKykvLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy55eS51bkVzY2FwZSh0aGlzLnRleHQuc2xpY2UoMSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbJ3EnLCAvXlxcLig/Oig/OltcXHddfFteXFx4MDAtXFx4YTBdfCg/OlxcXFxbXlxcblxcclxcZjAtOWEtZl0pKSg/OltcXHdcXGQtXXxbXlxceDAwLVxceGEwXXwoPzpcXFxcW15cXG5cXHJcXGYwLTlhLWZdKSkqKS8sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnl5LnVuRXNjYXBlKHRoaXMudGV4dC5zbGljZSgxKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFsncicsIC9eKD86W1xcdFxcclxcblxcZlxceDIwXSopLCg/OltcXHRcXHJcXG5cXGZcXHgyMF0qKS8sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnl5LnRyaW0odGhpcy50ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgWydzJywgL146Oj8vLCAwXSxcbiAgICAgICAgICAgIFsndCcsIC9eKD86W1xcdFxcclxcblxcZlxceDIwXSopXFwrKD86W1xcdFxcclxcblxcZlxceDIwXSopLyxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCA9IHRoaXMueXkudHJpbSh0aGlzLnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbJ3UnLCAvXig/OltcXHRcXHJcXG5cXGZcXHgyMF0qKT4oPzpbXFx0XFxyXFxuXFxmXFx4MjBdKikvLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy55eS50cmltKHRoaXMudGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFsndicsIC9eKD86W1xcdFxcclxcblxcZlxceDIwXSopfig/OltcXHRcXHJcXG5cXGZcXHgyMF0qKS8sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnl5LnRyaW0odGhpcy50ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgWyd3JywgL15cXCovLCAwXSxcbiAgICAgICAgICAgIFsneCcsIC9eKD86W1xcdFxcclxcblxcZlxceDIwXSspLywgMF0sXG4gICAgICAgICAgICBbJ3knLCAvXi4vLCAwXVxuICAgICAgICBdXG4gICAgfSk7XG4gICAgcGFyc2VyLmxleGVyID0gbGV4ZXI7XG4gICAgbGV4ZXIuc3ltYm9sTWFwID0ge1xuICAgICAgICAnJEVPRic6ICdhJyxcbiAgICAgICAgJ0xFRlRfQlJBQ0tFVCc6ICdiJyxcbiAgICAgICAgJ1JJR0hUX0JSQUNLRVQnOiAnYycsXG4gICAgICAgICdJTkNMVURFUyc6ICdkJyxcbiAgICAgICAgJ0RBU0hfTUFUQ0gnOiAnZScsXG4gICAgICAgICdQUkVGSVhfTUFUQ0gnOiAnZicsXG4gICAgICAgICdTVUZGSVhfTUFUQ0gnOiAnZycsXG4gICAgICAgICdTVUJTVFJJTkdfTUFUQ0gnOiAnaCcsXG4gICAgICAgICdBTExfTUFUQ0gnOiAnaScsXG4gICAgICAgICdGVU5DVElPTic6ICdqJyxcbiAgICAgICAgJ1BBUkFNRVRFUic6ICdrJyxcbiAgICAgICAgJ1JJR0hUX1BBUkVOVEhFU0VTJzogJ2wnLFxuICAgICAgICAnTk9UJzogJ20nLFxuICAgICAgICAnSURFTlQnOiAnbicsXG4gICAgICAgICdTVFJJTkcnOiAnbycsXG4gICAgICAgICdIQVNIJzogJ3AnLFxuICAgICAgICAnQ0xBU1MnOiAncScsXG4gICAgICAgICdDT01NQSc6ICdyJyxcbiAgICAgICAgJ0NPTE9OJzogJ3MnLFxuICAgICAgICAnUExVUyc6ICd0JyxcbiAgICAgICAgJ0dSRUFURVInOiAndScsXG4gICAgICAgICdUSUxERSc6ICd2JyxcbiAgICAgICAgJ1VOSVZFUlNBTCc6ICd3JyxcbiAgICAgICAgJ1MnOiAneCcsXG4gICAgICAgICdJTlZBTElEJzogJ3knLFxuICAgICAgICAnJFNUQVJUJzogJ3onLFxuICAgICAgICAnc2VsZWN0b3JzX2dyb3VwJzogJ2FhJyxcbiAgICAgICAgJ3NlbGVjdG9yJzogJ2FiJyxcbiAgICAgICAgJ3NpbXBsZV9zZWxlY3Rvcl9zZXF1ZW5jZSc6ICdhYycsXG4gICAgICAgICdjb21iaW5hdG9yJzogJ2FkJyxcbiAgICAgICAgJ3R5cGVfc2VsZWN0b3InOiAnYWUnLFxuICAgICAgICAnaWRfc2VsZWN0b3InOiAnYWYnLFxuICAgICAgICAnY2xhc3Nfc2VsZWN0b3InOiAnYWcnLFxuICAgICAgICAnYXR0cmliX21hdGNoJzogJ2FoJyxcbiAgICAgICAgJ2F0dHJpYic6ICdhaScsXG4gICAgICAgICdhdHRyaWJfdmFsJzogJ2FqJyxcbiAgICAgICAgJ3BzZXVkbyc6ICdhaycsXG4gICAgICAgICduZWdhdGlvbic6ICdhbCcsXG4gICAgICAgICduZWdhdGlvbl9hcmcnOiAnYW0nLFxuICAgICAgICAnc3VmZml4X3NlbGVjdG9yJzogJ2FuJyxcbiAgICAgICAgJ3N1ZmZpeF9zZWxlY3RvcnMnOiAnYW8nXG4gICAgfTtcbiAgICBwYXJzZXIucHJvZHVjdGlvbnMgPSBbXG4gICAgICAgIFsneicsIFsnYWEnXV0sXG4gICAgICAgIFsnYWEnLCBbJ2FiJ10sXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFt0aGlzLiQxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgWydhYScsIFsnYWEnLCAncicsICdhYiddLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJDEucHVzaCh0aGlzLiQzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgWydhYicsIFsnYWMnXV0sXG4gICAgICAgIFsnYWInLCBbJ2FiJywgJ2FkJywgJ2FjJ10sXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLy8gTGlua2VkTGlzdFxuXG4gICAgICAgICAgICAgICAgdGhpcy4kMS5uZXh0Q29tYmluYXRvciA9IHRoaXMuJDMucHJldkNvbWJpbmF0b3IgPSB0aGlzLiQyO1xuICAgICAgICAgICAgICAgIHZhciBvcmRlcjtcbiAgICAgICAgICAgICAgICBvcmRlciA9IHRoaXMuJDEub3JkZXIgPSB0aGlzLiQxLm9yZGVyIHx8IDA7XG4gICAgICAgICAgICAgICAgdGhpcy4kMy5vcmRlciA9IG9yZGVyICsgMTtcbiAgICAgICAgICAgICAgICB0aGlzLiQzLnByZXYgPSB0aGlzLiQxO1xuICAgICAgICAgICAgICAgIHRoaXMuJDEubmV4dCA9IHRoaXMuJDM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuJDM7XG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIFsnYWQnLCBbJ3QnXV0sXG4gICAgICAgIFsnYWQnLCBbJ3UnXV0sXG4gICAgICAgIFsnYWQnLCBbJ3YnXV0sXG4gICAgICAgIFsnYWQnLCBbJ3gnXSxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyAnO1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBbJ2FlJywgWyduJ10sXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdDogJ3RhZycsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLiQxXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgWydhZScsIFsndyddLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHQ6ICd0YWcnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy4kMVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIFsnYWYnLCBbJ3AnXSxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0OiAnaWQnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy4kMVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIFsnYWcnLCBbJ3EnXSxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0OiAnY2xzJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuJDFcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBbJ2FoJywgWydmJ11dLFxuICAgICAgICBbJ2FoJywgWydnJ11dLFxuICAgICAgICBbJ2FoJywgWydoJ11dLFxuICAgICAgICBbJ2FoJywgWydpJ11dLFxuICAgICAgICBbJ2FoJywgWydkJ11dLFxuICAgICAgICBbJ2FoJywgWydlJ11dLFxuICAgICAgICBbJ2FpJywgWydiJywgJ24nLCAnYyddLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHQ6ICdhdHRyaWInLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQ6IHRoaXMuJDJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIFsnYWonLCBbJ24nXV0sXG4gICAgICAgIFsnYWonLCBbJ28nXV0sXG4gICAgICAgIFsnYWknLCBbJ2InLCAnbicsICdhaCcsICdhaicsICdjJ10sXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdDogJ2F0dHJpYicsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZGVudDogdGhpcy4kMixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoOiB0aGlzLiQzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuJDRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIFsnYWsnLCBbJ3MnLCAnaicsICdrJywgJ2wnXSxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0OiAncHNldWRvJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuOiB0aGlzLiQyLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbTogdGhpcy4kM1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgWydhaycsIFsncycsICduJ10sXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdDogJ3BzZXVkbycsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZGVudDogdGhpcy4kMi50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBbJ2FsJywgWydtJywgJ2FtJywgJ2wnXSxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0OiAncHNldWRvJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuOiAnbm90JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtOiB0aGlzLiQyXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBbJ2FtJywgWydhZSddXSxcbiAgICAgICAgWydhbScsIFsnYWYnXV0sXG4gICAgICAgIFsnYW0nLCBbJ2FnJ11dLFxuICAgICAgICBbJ2FtJywgWydhaSddXSxcbiAgICAgICAgWydhbScsIFsnYWsnXV0sXG4gICAgICAgIFsnYW4nLCBbJ2FmJ11dLFxuICAgICAgICBbJ2FuJywgWydhZyddXSxcbiAgICAgICAgWydhbicsIFsnYWknXV0sXG4gICAgICAgIFsnYW4nLCBbJ2FrJ11dLFxuICAgICAgICBbJ2FuJywgWydhbCddXSxcbiAgICAgICAgWydhbycsIFsnYW4nXSxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW3RoaXMuJDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBbJ2FvJywgWydhbycsICdhbiddLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJDEucHVzaCh0aGlzLiQyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgWydhYycsIFsnYWUnXV0sXG4gICAgICAgIFsnYWMnLCBbJ2FvJ10sXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc3VmZml4OiB0aGlzLiQxXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgWydhYycsIFsnYWUnLCAnYW8nXSxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0OiAndGFnJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuJDEudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHN1ZmZpeDogdGhpcy4kMlxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICBdO1xuICAgIHBhcnNlci50YWJsZSA9IHtcbiAgICAgICAgJ2dvdG9zJzoge1xuICAgICAgICAgICAgJzAnOiB7XG4gICAgICAgICAgICAgICAgJ2FhJzogOCxcbiAgICAgICAgICAgICAgICAnYWInOiA5LFxuICAgICAgICAgICAgICAgICdhZSc6IDEwLFxuICAgICAgICAgICAgICAgICdhZic6IDExLFxuICAgICAgICAgICAgICAgICdhZyc6IDEyLFxuICAgICAgICAgICAgICAgICdhaSc6IDEzLFxuICAgICAgICAgICAgICAgICdhayc6IDE0LFxuICAgICAgICAgICAgICAgICdhbCc6IDE1LFxuICAgICAgICAgICAgICAgICdhbic6IDE2LFxuICAgICAgICAgICAgICAgICdhbyc6IDE3LFxuICAgICAgICAgICAgICAgICdhYyc6IDE4XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzInOiB7XG4gICAgICAgICAgICAgICAgJ2FlJzogMjAsXG4gICAgICAgICAgICAgICAgJ2FmJzogMjEsXG4gICAgICAgICAgICAgICAgJ2FnJzogMjIsXG4gICAgICAgICAgICAgICAgJ2FpJzogMjMsXG4gICAgICAgICAgICAgICAgJ2FrJzogMjQsXG4gICAgICAgICAgICAgICAgJ2FtJzogMjVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnOSc6IHtcbiAgICAgICAgICAgICAgICAnYWQnOiAzM1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcxMCc6IHtcbiAgICAgICAgICAgICAgICAnYWYnOiAxMSxcbiAgICAgICAgICAgICAgICAnYWcnOiAxMixcbiAgICAgICAgICAgICAgICAnYWknOiAxMyxcbiAgICAgICAgICAgICAgICAnYWsnOiAxNCxcbiAgICAgICAgICAgICAgICAnYWwnOiAxNSxcbiAgICAgICAgICAgICAgICAnYW4nOiAxNixcbiAgICAgICAgICAgICAgICAnYW8nOiAzNFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcxNyc6IHtcbiAgICAgICAgICAgICAgICAnYWYnOiAxMSxcbiAgICAgICAgICAgICAgICAnYWcnOiAxMixcbiAgICAgICAgICAgICAgICAnYWknOiAxMyxcbiAgICAgICAgICAgICAgICAnYWsnOiAxNCxcbiAgICAgICAgICAgICAgICAnYWwnOiAxNSxcbiAgICAgICAgICAgICAgICAnYW4nOiAzNVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcxOSc6IHtcbiAgICAgICAgICAgICAgICAnYWgnOiA0M1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcyOCc6IHtcbiAgICAgICAgICAgICAgICAnYWInOiA0NixcbiAgICAgICAgICAgICAgICAnYWUnOiAxMCxcbiAgICAgICAgICAgICAgICAnYWYnOiAxMSxcbiAgICAgICAgICAgICAgICAnYWcnOiAxMixcbiAgICAgICAgICAgICAgICAnYWknOiAxMyxcbiAgICAgICAgICAgICAgICAnYWsnOiAxNCxcbiAgICAgICAgICAgICAgICAnYWwnOiAxNSxcbiAgICAgICAgICAgICAgICAnYW4nOiAxNixcbiAgICAgICAgICAgICAgICAnYW8nOiAxNyxcbiAgICAgICAgICAgICAgICAnYWMnOiAxOFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICczMyc6IHtcbiAgICAgICAgICAgICAgICAnYWUnOiAxMCxcbiAgICAgICAgICAgICAgICAnYWYnOiAxMSxcbiAgICAgICAgICAgICAgICAnYWcnOiAxMixcbiAgICAgICAgICAgICAgICAnYWknOiAxMyxcbiAgICAgICAgICAgICAgICAnYWsnOiAxNCxcbiAgICAgICAgICAgICAgICAnYWwnOiAxNSxcbiAgICAgICAgICAgICAgICAnYW4nOiAxNixcbiAgICAgICAgICAgICAgICAnYW8nOiAxNyxcbiAgICAgICAgICAgICAgICAnYWMnOiA0N1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICczNCc6IHtcbiAgICAgICAgICAgICAgICAnYWYnOiAxMSxcbiAgICAgICAgICAgICAgICAnYWcnOiAxMixcbiAgICAgICAgICAgICAgICAnYWknOiAxMyxcbiAgICAgICAgICAgICAgICAnYWsnOiAxNCxcbiAgICAgICAgICAgICAgICAnYWwnOiAxNSxcbiAgICAgICAgICAgICAgICAnYW4nOiAzNVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICc0Myc6IHtcbiAgICAgICAgICAgICAgICAnYWonOiA1MFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICc0Nic6IHtcbiAgICAgICAgICAgICAgICAnYWQnOiAzM1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAnYWN0aW9uJzoge1xuICAgICAgICAgICAgJzAnOiB7XG4gICAgICAgICAgICAgICAgJ2InOiBbMSwgdW5kZWZpbmVkLCAxXSxcbiAgICAgICAgICAgICAgICAnbSc6IFsxLCB1bmRlZmluZWQsIDJdLFxuICAgICAgICAgICAgICAgICduJzogWzEsIHVuZGVmaW5lZCwgM10sXG4gICAgICAgICAgICAgICAgJ3AnOiBbMSwgdW5kZWZpbmVkLCA0XSxcbiAgICAgICAgICAgICAgICAncSc6IFsxLCB1bmRlZmluZWQsIDVdLFxuICAgICAgICAgICAgICAgICdzJzogWzEsIHVuZGVmaW5lZCwgNl0sXG4gICAgICAgICAgICAgICAgJ3cnOiBbMSwgdW5kZWZpbmVkLCA3XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcxJzoge1xuICAgICAgICAgICAgICAgICduJzogWzEsIHVuZGVmaW5lZCwgMTldXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzInOiB7XG4gICAgICAgICAgICAgICAgJ2InOiBbMSwgdW5kZWZpbmVkLCAxXSxcbiAgICAgICAgICAgICAgICAnbic6IFsxLCB1bmRlZmluZWQsIDNdLFxuICAgICAgICAgICAgICAgICdwJzogWzEsIHVuZGVmaW5lZCwgNF0sXG4gICAgICAgICAgICAgICAgJ3EnOiBbMSwgdW5kZWZpbmVkLCA1XSxcbiAgICAgICAgICAgICAgICAncyc6IFsxLCB1bmRlZmluZWQsIDZdLFxuICAgICAgICAgICAgICAgICd3JzogWzEsIHVuZGVmaW5lZCwgN11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMyc6IHtcbiAgICAgICAgICAgICAgICAnYSc6IFsyLCA5XSxcbiAgICAgICAgICAgICAgICAncic6IFsyLCA5XSxcbiAgICAgICAgICAgICAgICAndCc6IFsyLCA5XSxcbiAgICAgICAgICAgICAgICAndSc6IFsyLCA5XSxcbiAgICAgICAgICAgICAgICAndic6IFsyLCA5XSxcbiAgICAgICAgICAgICAgICAneCc6IFsyLCA5XSxcbiAgICAgICAgICAgICAgICAncCc6IFsyLCA5XSxcbiAgICAgICAgICAgICAgICAncSc6IFsyLCA5XSxcbiAgICAgICAgICAgICAgICAnYic6IFsyLCA5XSxcbiAgICAgICAgICAgICAgICAncyc6IFsyLCA5XSxcbiAgICAgICAgICAgICAgICAnbSc6IFsyLCA5XSxcbiAgICAgICAgICAgICAgICAnbCc6IFsyLCA5XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICc0Jzoge1xuICAgICAgICAgICAgICAgICdhJzogWzIsIDExXSxcbiAgICAgICAgICAgICAgICAncic6IFsyLCAxMV0sXG4gICAgICAgICAgICAgICAgJ3QnOiBbMiwgMTFdLFxuICAgICAgICAgICAgICAgICd1JzogWzIsIDExXSxcbiAgICAgICAgICAgICAgICAndic6IFsyLCAxMV0sXG4gICAgICAgICAgICAgICAgJ3gnOiBbMiwgMTFdLFxuICAgICAgICAgICAgICAgICdwJzogWzIsIDExXSxcbiAgICAgICAgICAgICAgICAncSc6IFsyLCAxMV0sXG4gICAgICAgICAgICAgICAgJ2InOiBbMiwgMTFdLFxuICAgICAgICAgICAgICAgICdzJzogWzIsIDExXSxcbiAgICAgICAgICAgICAgICAnbSc6IFsyLCAxMV0sXG4gICAgICAgICAgICAgICAgJ2wnOiBbMiwgMTFdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzUnOiB7XG4gICAgICAgICAgICAgICAgJ2EnOiBbMiwgMTJdLFxuICAgICAgICAgICAgICAgICdyJzogWzIsIDEyXSxcbiAgICAgICAgICAgICAgICAndCc6IFsyLCAxMl0sXG4gICAgICAgICAgICAgICAgJ3UnOiBbMiwgMTJdLFxuICAgICAgICAgICAgICAgICd2JzogWzIsIDEyXSxcbiAgICAgICAgICAgICAgICAneCc6IFsyLCAxMl0sXG4gICAgICAgICAgICAgICAgJ3AnOiBbMiwgMTJdLFxuICAgICAgICAgICAgICAgICdxJzogWzIsIDEyXSxcbiAgICAgICAgICAgICAgICAnYic6IFsyLCAxMl0sXG4gICAgICAgICAgICAgICAgJ3MnOiBbMiwgMTJdLFxuICAgICAgICAgICAgICAgICdtJzogWzIsIDEyXSxcbiAgICAgICAgICAgICAgICAnbCc6IFsyLCAxMl1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnNic6IHtcbiAgICAgICAgICAgICAgICAnaic6IFsxLCB1bmRlZmluZWQsIDI2XSxcbiAgICAgICAgICAgICAgICAnbic6IFsxLCB1bmRlZmluZWQsIDI3XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICc3Jzoge1xuICAgICAgICAgICAgICAgICdhJzogWzIsIDEwXSxcbiAgICAgICAgICAgICAgICAncic6IFsyLCAxMF0sXG4gICAgICAgICAgICAgICAgJ3QnOiBbMiwgMTBdLFxuICAgICAgICAgICAgICAgICd1JzogWzIsIDEwXSxcbiAgICAgICAgICAgICAgICAndic6IFsyLCAxMF0sXG4gICAgICAgICAgICAgICAgJ3gnOiBbMiwgMTBdLFxuICAgICAgICAgICAgICAgICdwJzogWzIsIDEwXSxcbiAgICAgICAgICAgICAgICAncSc6IFsyLCAxMF0sXG4gICAgICAgICAgICAgICAgJ2InOiBbMiwgMTBdLFxuICAgICAgICAgICAgICAgICdzJzogWzIsIDEwXSxcbiAgICAgICAgICAgICAgICAnbSc6IFsyLCAxMF0sXG4gICAgICAgICAgICAgICAgJ2wnOiBbMiwgMTBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzgnOiB7XG4gICAgICAgICAgICAgICAgJ2EnOiBbMF0sXG4gICAgICAgICAgICAgICAgJ3InOiBbMSwgdW5kZWZpbmVkLCAyOF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnOSc6IHtcbiAgICAgICAgICAgICAgICAnYSc6IFsyLCAxXSxcbiAgICAgICAgICAgICAgICAncic6IFsyLCAxXSxcbiAgICAgICAgICAgICAgICAndCc6IFsxLCB1bmRlZmluZWQsIDI5XSxcbiAgICAgICAgICAgICAgICAndSc6IFsxLCB1bmRlZmluZWQsIDMwXSxcbiAgICAgICAgICAgICAgICAndic6IFsxLCB1bmRlZmluZWQsIDMxXSxcbiAgICAgICAgICAgICAgICAneCc6IFsxLCB1bmRlZmluZWQsIDMyXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcxMCc6IHtcbiAgICAgICAgICAgICAgICAnYSc6IFsyLCAzOF0sXG4gICAgICAgICAgICAgICAgJ3InOiBbMiwgMzhdLFxuICAgICAgICAgICAgICAgICd0JzogWzIsIDM4XSxcbiAgICAgICAgICAgICAgICAndSc6IFsyLCAzOF0sXG4gICAgICAgICAgICAgICAgJ3YnOiBbMiwgMzhdLFxuICAgICAgICAgICAgICAgICd4JzogWzIsIDM4XSxcbiAgICAgICAgICAgICAgICAnYic6IFsxLCB1bmRlZmluZWQsIDFdLFxuICAgICAgICAgICAgICAgICdtJzogWzEsIHVuZGVmaW5lZCwgMl0sXG4gICAgICAgICAgICAgICAgJ3AnOiBbMSwgdW5kZWZpbmVkLCA0XSxcbiAgICAgICAgICAgICAgICAncSc6IFsxLCB1bmRlZmluZWQsIDVdLFxuICAgICAgICAgICAgICAgICdzJzogWzEsIHVuZGVmaW5lZCwgNl1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMTEnOiB7XG4gICAgICAgICAgICAgICAgJ2EnOiBbMiwgMzFdLFxuICAgICAgICAgICAgICAgICdyJzogWzIsIDMxXSxcbiAgICAgICAgICAgICAgICAndCc6IFsyLCAzMV0sXG4gICAgICAgICAgICAgICAgJ3UnOiBbMiwgMzFdLFxuICAgICAgICAgICAgICAgICd2JzogWzIsIDMxXSxcbiAgICAgICAgICAgICAgICAneCc6IFsyLCAzMV0sXG4gICAgICAgICAgICAgICAgJ3AnOiBbMiwgMzFdLFxuICAgICAgICAgICAgICAgICdxJzogWzIsIDMxXSxcbiAgICAgICAgICAgICAgICAnYic6IFsyLCAzMV0sXG4gICAgICAgICAgICAgICAgJ3MnOiBbMiwgMzFdLFxuICAgICAgICAgICAgICAgICdtJzogWzIsIDMxXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcxMic6IHtcbiAgICAgICAgICAgICAgICAnYSc6IFsyLCAzMl0sXG4gICAgICAgICAgICAgICAgJ3InOiBbMiwgMzJdLFxuICAgICAgICAgICAgICAgICd0JzogWzIsIDMyXSxcbiAgICAgICAgICAgICAgICAndSc6IFsyLCAzMl0sXG4gICAgICAgICAgICAgICAgJ3YnOiBbMiwgMzJdLFxuICAgICAgICAgICAgICAgICd4JzogWzIsIDMyXSxcbiAgICAgICAgICAgICAgICAncCc6IFsyLCAzMl0sXG4gICAgICAgICAgICAgICAgJ3EnOiBbMiwgMzJdLFxuICAgICAgICAgICAgICAgICdiJzogWzIsIDMyXSxcbiAgICAgICAgICAgICAgICAncyc6IFsyLCAzMl0sXG4gICAgICAgICAgICAgICAgJ20nOiBbMiwgMzJdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzEzJzoge1xuICAgICAgICAgICAgICAgICdhJzogWzIsIDMzXSxcbiAgICAgICAgICAgICAgICAncic6IFsyLCAzM10sXG4gICAgICAgICAgICAgICAgJ3QnOiBbMiwgMzNdLFxuICAgICAgICAgICAgICAgICd1JzogWzIsIDMzXSxcbiAgICAgICAgICAgICAgICAndic6IFsyLCAzM10sXG4gICAgICAgICAgICAgICAgJ3gnOiBbMiwgMzNdLFxuICAgICAgICAgICAgICAgICdwJzogWzIsIDMzXSxcbiAgICAgICAgICAgICAgICAncSc6IFsyLCAzM10sXG4gICAgICAgICAgICAgICAgJ2InOiBbMiwgMzNdLFxuICAgICAgICAgICAgICAgICdzJzogWzIsIDMzXSxcbiAgICAgICAgICAgICAgICAnbSc6IFsyLCAzM11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMTQnOiB7XG4gICAgICAgICAgICAgICAgJ2EnOiBbMiwgMzRdLFxuICAgICAgICAgICAgICAgICdyJzogWzIsIDM0XSxcbiAgICAgICAgICAgICAgICAndCc6IFsyLCAzNF0sXG4gICAgICAgICAgICAgICAgJ3UnOiBbMiwgMzRdLFxuICAgICAgICAgICAgICAgICd2JzogWzIsIDM0XSxcbiAgICAgICAgICAgICAgICAneCc6IFsyLCAzNF0sXG4gICAgICAgICAgICAgICAgJ3AnOiBbMiwgMzRdLFxuICAgICAgICAgICAgICAgICdxJzogWzIsIDM0XSxcbiAgICAgICAgICAgICAgICAnYic6IFsyLCAzNF0sXG4gICAgICAgICAgICAgICAgJ3MnOiBbMiwgMzRdLFxuICAgICAgICAgICAgICAgICdtJzogWzIsIDM0XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcxNSc6IHtcbiAgICAgICAgICAgICAgICAnYSc6IFsyLCAzNV0sXG4gICAgICAgICAgICAgICAgJ3InOiBbMiwgMzVdLFxuICAgICAgICAgICAgICAgICd0JzogWzIsIDM1XSxcbiAgICAgICAgICAgICAgICAndSc6IFsyLCAzNV0sXG4gICAgICAgICAgICAgICAgJ3YnOiBbMiwgMzVdLFxuICAgICAgICAgICAgICAgICd4JzogWzIsIDM1XSxcbiAgICAgICAgICAgICAgICAncCc6IFsyLCAzNV0sXG4gICAgICAgICAgICAgICAgJ3EnOiBbMiwgMzVdLFxuICAgICAgICAgICAgICAgICdiJzogWzIsIDM1XSxcbiAgICAgICAgICAgICAgICAncyc6IFsyLCAzNV0sXG4gICAgICAgICAgICAgICAgJ20nOiBbMiwgMzVdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzE2Jzoge1xuICAgICAgICAgICAgICAgICdhJzogWzIsIDM2XSxcbiAgICAgICAgICAgICAgICAncic6IFsyLCAzNl0sXG4gICAgICAgICAgICAgICAgJ3QnOiBbMiwgMzZdLFxuICAgICAgICAgICAgICAgICd1JzogWzIsIDM2XSxcbiAgICAgICAgICAgICAgICAndic6IFsyLCAzNl0sXG4gICAgICAgICAgICAgICAgJ3gnOiBbMiwgMzZdLFxuICAgICAgICAgICAgICAgICdwJzogWzIsIDM2XSxcbiAgICAgICAgICAgICAgICAncSc6IFsyLCAzNl0sXG4gICAgICAgICAgICAgICAgJ2InOiBbMiwgMzZdLFxuICAgICAgICAgICAgICAgICdzJzogWzIsIDM2XSxcbiAgICAgICAgICAgICAgICAnbSc6IFsyLCAzNl1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMTcnOiB7XG4gICAgICAgICAgICAgICAgJ2EnOiBbMiwgMzldLFxuICAgICAgICAgICAgICAgICdyJzogWzIsIDM5XSxcbiAgICAgICAgICAgICAgICAndCc6IFsyLCAzOV0sXG4gICAgICAgICAgICAgICAgJ3UnOiBbMiwgMzldLFxuICAgICAgICAgICAgICAgICd2JzogWzIsIDM5XSxcbiAgICAgICAgICAgICAgICAneCc6IFsyLCAzOV0sXG4gICAgICAgICAgICAgICAgJ2InOiBbMSwgdW5kZWZpbmVkLCAxXSxcbiAgICAgICAgICAgICAgICAnbSc6IFsxLCB1bmRlZmluZWQsIDJdLFxuICAgICAgICAgICAgICAgICdwJzogWzEsIHVuZGVmaW5lZCwgNF0sXG4gICAgICAgICAgICAgICAgJ3EnOiBbMSwgdW5kZWZpbmVkLCA1XSxcbiAgICAgICAgICAgICAgICAncyc6IFsxLCB1bmRlZmluZWQsIDZdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzE4Jzoge1xuICAgICAgICAgICAgICAgICdhJzogWzIsIDNdLFxuICAgICAgICAgICAgICAgICdyJzogWzIsIDNdLFxuICAgICAgICAgICAgICAgICd0JzogWzIsIDNdLFxuICAgICAgICAgICAgICAgICd1JzogWzIsIDNdLFxuICAgICAgICAgICAgICAgICd2JzogWzIsIDNdLFxuICAgICAgICAgICAgICAgICd4JzogWzIsIDNdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzE5Jzoge1xuICAgICAgICAgICAgICAgICdjJzogWzEsIHVuZGVmaW5lZCwgMzZdLFxuICAgICAgICAgICAgICAgICdkJzogWzEsIHVuZGVmaW5lZCwgMzddLFxuICAgICAgICAgICAgICAgICdlJzogWzEsIHVuZGVmaW5lZCwgMzhdLFxuICAgICAgICAgICAgICAgICdmJzogWzEsIHVuZGVmaW5lZCwgMzldLFxuICAgICAgICAgICAgICAgICdnJzogWzEsIHVuZGVmaW5lZCwgNDBdLFxuICAgICAgICAgICAgICAgICdoJzogWzEsIHVuZGVmaW5lZCwgNDFdLFxuICAgICAgICAgICAgICAgICdpJzogWzEsIHVuZGVmaW5lZCwgNDJdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzIwJzoge1xuICAgICAgICAgICAgICAgICdsJzogWzIsIDI2XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcyMSc6IHtcbiAgICAgICAgICAgICAgICAnbCc6IFsyLCAyN11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMjInOiB7XG4gICAgICAgICAgICAgICAgJ2wnOiBbMiwgMjhdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzIzJzoge1xuICAgICAgICAgICAgICAgICdsJzogWzIsIDI5XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcyNCc6IHtcbiAgICAgICAgICAgICAgICAnbCc6IFsyLCAzMF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMjUnOiB7XG4gICAgICAgICAgICAgICAgJ2wnOiBbMSwgdW5kZWZpbmVkLCA0NF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMjYnOiB7XG4gICAgICAgICAgICAgICAgJ2snOiBbMSwgdW5kZWZpbmVkLCA0NV1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMjcnOiB7XG4gICAgICAgICAgICAgICAgJ2EnOiBbMiwgMjRdLFxuICAgICAgICAgICAgICAgICdyJzogWzIsIDI0XSxcbiAgICAgICAgICAgICAgICAndCc6IFsyLCAyNF0sXG4gICAgICAgICAgICAgICAgJ3UnOiBbMiwgMjRdLFxuICAgICAgICAgICAgICAgICd2JzogWzIsIDI0XSxcbiAgICAgICAgICAgICAgICAneCc6IFsyLCAyNF0sXG4gICAgICAgICAgICAgICAgJ3AnOiBbMiwgMjRdLFxuICAgICAgICAgICAgICAgICdxJzogWzIsIDI0XSxcbiAgICAgICAgICAgICAgICAnYic6IFsyLCAyNF0sXG4gICAgICAgICAgICAgICAgJ3MnOiBbMiwgMjRdLFxuICAgICAgICAgICAgICAgICdtJzogWzIsIDI0XSxcbiAgICAgICAgICAgICAgICAnbCc6IFsyLCAyNF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMjgnOiB7XG4gICAgICAgICAgICAgICAgJ2InOiBbMSwgdW5kZWZpbmVkLCAxXSxcbiAgICAgICAgICAgICAgICAnbSc6IFsxLCB1bmRlZmluZWQsIDJdLFxuICAgICAgICAgICAgICAgICduJzogWzEsIHVuZGVmaW5lZCwgM10sXG4gICAgICAgICAgICAgICAgJ3AnOiBbMSwgdW5kZWZpbmVkLCA0XSxcbiAgICAgICAgICAgICAgICAncSc6IFsxLCB1bmRlZmluZWQsIDVdLFxuICAgICAgICAgICAgICAgICdzJzogWzEsIHVuZGVmaW5lZCwgNl0sXG4gICAgICAgICAgICAgICAgJ3cnOiBbMSwgdW5kZWZpbmVkLCA3XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcyOSc6IHtcbiAgICAgICAgICAgICAgICAnbic6IFsyLCA1XSxcbiAgICAgICAgICAgICAgICAndyc6IFsyLCA1XSxcbiAgICAgICAgICAgICAgICAncCc6IFsyLCA1XSxcbiAgICAgICAgICAgICAgICAncSc6IFsyLCA1XSxcbiAgICAgICAgICAgICAgICAnYic6IFsyLCA1XSxcbiAgICAgICAgICAgICAgICAncyc6IFsyLCA1XSxcbiAgICAgICAgICAgICAgICAnbSc6IFsyLCA1XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICczMCc6IHtcbiAgICAgICAgICAgICAgICAnbic6IFsyLCA2XSxcbiAgICAgICAgICAgICAgICAndyc6IFsyLCA2XSxcbiAgICAgICAgICAgICAgICAncCc6IFsyLCA2XSxcbiAgICAgICAgICAgICAgICAncSc6IFsyLCA2XSxcbiAgICAgICAgICAgICAgICAnYic6IFsyLCA2XSxcbiAgICAgICAgICAgICAgICAncyc6IFsyLCA2XSxcbiAgICAgICAgICAgICAgICAnbSc6IFsyLCA2XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICczMSc6IHtcbiAgICAgICAgICAgICAgICAnbic6IFsyLCA3XSxcbiAgICAgICAgICAgICAgICAndyc6IFsyLCA3XSxcbiAgICAgICAgICAgICAgICAncCc6IFsyLCA3XSxcbiAgICAgICAgICAgICAgICAncSc6IFsyLCA3XSxcbiAgICAgICAgICAgICAgICAnYic6IFsyLCA3XSxcbiAgICAgICAgICAgICAgICAncyc6IFsyLCA3XSxcbiAgICAgICAgICAgICAgICAnbSc6IFsyLCA3XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICczMic6IHtcbiAgICAgICAgICAgICAgICAnbic6IFsyLCA4XSxcbiAgICAgICAgICAgICAgICAndyc6IFsyLCA4XSxcbiAgICAgICAgICAgICAgICAncCc6IFsyLCA4XSxcbiAgICAgICAgICAgICAgICAncSc6IFsyLCA4XSxcbiAgICAgICAgICAgICAgICAnYic6IFsyLCA4XSxcbiAgICAgICAgICAgICAgICAncyc6IFsyLCA4XSxcbiAgICAgICAgICAgICAgICAnbSc6IFsyLCA4XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICczMyc6IHtcbiAgICAgICAgICAgICAgICAnYic6IFsxLCB1bmRlZmluZWQsIDFdLFxuICAgICAgICAgICAgICAgICdtJzogWzEsIHVuZGVmaW5lZCwgMl0sXG4gICAgICAgICAgICAgICAgJ24nOiBbMSwgdW5kZWZpbmVkLCAzXSxcbiAgICAgICAgICAgICAgICAncCc6IFsxLCB1bmRlZmluZWQsIDRdLFxuICAgICAgICAgICAgICAgICdxJzogWzEsIHVuZGVmaW5lZCwgNV0sXG4gICAgICAgICAgICAgICAgJ3MnOiBbMSwgdW5kZWZpbmVkLCA2XSxcbiAgICAgICAgICAgICAgICAndyc6IFsxLCB1bmRlZmluZWQsIDddXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzM0Jzoge1xuICAgICAgICAgICAgICAgICdhJzogWzIsIDQwXSxcbiAgICAgICAgICAgICAgICAncic6IFsyLCA0MF0sXG4gICAgICAgICAgICAgICAgJ3QnOiBbMiwgNDBdLFxuICAgICAgICAgICAgICAgICd1JzogWzIsIDQwXSxcbiAgICAgICAgICAgICAgICAndic6IFsyLCA0MF0sXG4gICAgICAgICAgICAgICAgJ3gnOiBbMiwgNDBdLFxuICAgICAgICAgICAgICAgICdiJzogWzEsIHVuZGVmaW5lZCwgMV0sXG4gICAgICAgICAgICAgICAgJ20nOiBbMSwgdW5kZWZpbmVkLCAyXSxcbiAgICAgICAgICAgICAgICAncCc6IFsxLCB1bmRlZmluZWQsIDRdLFxuICAgICAgICAgICAgICAgICdxJzogWzEsIHVuZGVmaW5lZCwgNV0sXG4gICAgICAgICAgICAgICAgJ3MnOiBbMSwgdW5kZWZpbmVkLCA2XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICczNSc6IHtcbiAgICAgICAgICAgICAgICAnYSc6IFsyLCAzN10sXG4gICAgICAgICAgICAgICAgJ3InOiBbMiwgMzddLFxuICAgICAgICAgICAgICAgICd0JzogWzIsIDM3XSxcbiAgICAgICAgICAgICAgICAndSc6IFsyLCAzN10sXG4gICAgICAgICAgICAgICAgJ3YnOiBbMiwgMzddLFxuICAgICAgICAgICAgICAgICd4JzogWzIsIDM3XSxcbiAgICAgICAgICAgICAgICAncCc6IFsyLCAzN10sXG4gICAgICAgICAgICAgICAgJ3EnOiBbMiwgMzddLFxuICAgICAgICAgICAgICAgICdiJzogWzIsIDM3XSxcbiAgICAgICAgICAgICAgICAncyc6IFsyLCAzN10sXG4gICAgICAgICAgICAgICAgJ20nOiBbMiwgMzddXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzM2Jzoge1xuICAgICAgICAgICAgICAgICdhJzogWzIsIDE5XSxcbiAgICAgICAgICAgICAgICAncic6IFsyLCAxOV0sXG4gICAgICAgICAgICAgICAgJ3QnOiBbMiwgMTldLFxuICAgICAgICAgICAgICAgICd1JzogWzIsIDE5XSxcbiAgICAgICAgICAgICAgICAndic6IFsyLCAxOV0sXG4gICAgICAgICAgICAgICAgJ3gnOiBbMiwgMTldLFxuICAgICAgICAgICAgICAgICdwJzogWzIsIDE5XSxcbiAgICAgICAgICAgICAgICAncSc6IFsyLCAxOV0sXG4gICAgICAgICAgICAgICAgJ2InOiBbMiwgMTldLFxuICAgICAgICAgICAgICAgICdzJzogWzIsIDE5XSxcbiAgICAgICAgICAgICAgICAnbSc6IFsyLCAxOV0sXG4gICAgICAgICAgICAgICAgJ2wnOiBbMiwgMTldXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzM3Jzoge1xuICAgICAgICAgICAgICAgICduJzogWzIsIDE3XSxcbiAgICAgICAgICAgICAgICAnbyc6IFsyLCAxN11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMzgnOiB7XG4gICAgICAgICAgICAgICAgJ24nOiBbMiwgMThdLFxuICAgICAgICAgICAgICAgICdvJzogWzIsIDE4XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICczOSc6IHtcbiAgICAgICAgICAgICAgICAnbic6IFsyLCAxM10sXG4gICAgICAgICAgICAgICAgJ28nOiBbMiwgMTNdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzQwJzoge1xuICAgICAgICAgICAgICAgICduJzogWzIsIDE0XSxcbiAgICAgICAgICAgICAgICAnbyc6IFsyLCAxNF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnNDEnOiB7XG4gICAgICAgICAgICAgICAgJ24nOiBbMiwgMTVdLFxuICAgICAgICAgICAgICAgICdvJzogWzIsIDE1XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICc0Mic6IHtcbiAgICAgICAgICAgICAgICAnbic6IFsyLCAxNl0sXG4gICAgICAgICAgICAgICAgJ28nOiBbMiwgMTZdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzQzJzoge1xuICAgICAgICAgICAgICAgICduJzogWzEsIHVuZGVmaW5lZCwgNDhdLFxuICAgICAgICAgICAgICAgICdvJzogWzEsIHVuZGVmaW5lZCwgNDldXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzQ0Jzoge1xuICAgICAgICAgICAgICAgICdhJzogWzIsIDI1XSxcbiAgICAgICAgICAgICAgICAncic6IFsyLCAyNV0sXG4gICAgICAgICAgICAgICAgJ3QnOiBbMiwgMjVdLFxuICAgICAgICAgICAgICAgICd1JzogWzIsIDI1XSxcbiAgICAgICAgICAgICAgICAndic6IFsyLCAyNV0sXG4gICAgICAgICAgICAgICAgJ3gnOiBbMiwgMjVdLFxuICAgICAgICAgICAgICAgICdwJzogWzIsIDI1XSxcbiAgICAgICAgICAgICAgICAncSc6IFsyLCAyNV0sXG4gICAgICAgICAgICAgICAgJ2InOiBbMiwgMjVdLFxuICAgICAgICAgICAgICAgICdzJzogWzIsIDI1XSxcbiAgICAgICAgICAgICAgICAnbSc6IFsyLCAyNV1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnNDUnOiB7XG4gICAgICAgICAgICAgICAgJ2wnOiBbMSwgdW5kZWZpbmVkLCA1MV1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnNDYnOiB7XG4gICAgICAgICAgICAgICAgJ2EnOiBbMiwgMl0sXG4gICAgICAgICAgICAgICAgJ3InOiBbMiwgMl0sXG4gICAgICAgICAgICAgICAgJ3QnOiBbMSwgdW5kZWZpbmVkLCAyOV0sXG4gICAgICAgICAgICAgICAgJ3UnOiBbMSwgdW5kZWZpbmVkLCAzMF0sXG4gICAgICAgICAgICAgICAgJ3YnOiBbMSwgdW5kZWZpbmVkLCAzMV0sXG4gICAgICAgICAgICAgICAgJ3gnOiBbMSwgdW5kZWZpbmVkLCAzMl1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnNDcnOiB7XG4gICAgICAgICAgICAgICAgJ2EnOiBbMiwgNF0sXG4gICAgICAgICAgICAgICAgJ3InOiBbMiwgNF0sXG4gICAgICAgICAgICAgICAgJ3QnOiBbMiwgNF0sXG4gICAgICAgICAgICAgICAgJ3UnOiBbMiwgNF0sXG4gICAgICAgICAgICAgICAgJ3YnOiBbMiwgNF0sXG4gICAgICAgICAgICAgICAgJ3gnOiBbMiwgNF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnNDgnOiB7XG4gICAgICAgICAgICAgICAgJ2MnOiBbMiwgMjBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzQ5Jzoge1xuICAgICAgICAgICAgICAgICdjJzogWzIsIDIxXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICc1MCc6IHtcbiAgICAgICAgICAgICAgICAnYyc6IFsxLCB1bmRlZmluZWQsIDUyXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICc1MSc6IHtcbiAgICAgICAgICAgICAgICAnYSc6IFsyLCAyM10sXG4gICAgICAgICAgICAgICAgJ3InOiBbMiwgMjNdLFxuICAgICAgICAgICAgICAgICd0JzogWzIsIDIzXSxcbiAgICAgICAgICAgICAgICAndSc6IFsyLCAyM10sXG4gICAgICAgICAgICAgICAgJ3YnOiBbMiwgMjNdLFxuICAgICAgICAgICAgICAgICd4JzogWzIsIDIzXSxcbiAgICAgICAgICAgICAgICAncCc6IFsyLCAyM10sXG4gICAgICAgICAgICAgICAgJ3EnOiBbMiwgMjNdLFxuICAgICAgICAgICAgICAgICdiJzogWzIsIDIzXSxcbiAgICAgICAgICAgICAgICAncyc6IFsyLCAyM10sXG4gICAgICAgICAgICAgICAgJ20nOiBbMiwgMjNdLFxuICAgICAgICAgICAgICAgICdsJzogWzIsIDIzXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICc1Mic6IHtcbiAgICAgICAgICAgICAgICAnYSc6IFsyLCAyMl0sXG4gICAgICAgICAgICAgICAgJ3InOiBbMiwgMjJdLFxuICAgICAgICAgICAgICAgICd0JzogWzIsIDIyXSxcbiAgICAgICAgICAgICAgICAndSc6IFsyLCAyMl0sXG4gICAgICAgICAgICAgICAgJ3YnOiBbMiwgMjJdLFxuICAgICAgICAgICAgICAgICd4JzogWzIsIDIyXSxcbiAgICAgICAgICAgICAgICAncCc6IFsyLCAyMl0sXG4gICAgICAgICAgICAgICAgJ3EnOiBbMiwgMjJdLFxuICAgICAgICAgICAgICAgICdiJzogWzIsIDIyXSxcbiAgICAgICAgICAgICAgICAncyc6IFsyLCAyMl0sXG4gICAgICAgICAgICAgICAgJ20nOiBbMiwgMjJdLFxuICAgICAgICAgICAgICAgICdsJzogWzIsIDIyXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBwYXJzZXIucGFyc2UgPSBmdW5jdGlvbiBwYXJzZShpbnB1dCwgZmlsZW5hbWUpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICAgICAgbGV4ZXIgPSBzZWxmLmxleGVyLFxuICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICBzeW1ib2wsXG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICB0YWJsZSA9IHNlbGYudGFibGUsXG4gICAgICAgICAgICBnb3RvcyA9IHRhYmxlLmdvdG9zLFxuICAgICAgICAgICAgdGFibGVBY3Rpb24gPSB0YWJsZS5hY3Rpb24sXG4gICAgICAgICAgICBwcm9kdWN0aW9ucyA9IHNlbGYucHJvZHVjdGlvbnMsXG4gICAgICAgICAgICB2YWx1ZVN0YWNrID0gW251bGxdLFxuICAgICAgICAgICAgLy8gZm9yIGRlYnVnIGluZm9cbiAgICAgICAgICAgIHByZWZpeCA9IGZpbGVuYW1lID8gKCdpbiBmaWxlOiAnICsgZmlsZW5hbWUgKyAnICcpIDogJycsXG4gICAgICAgICAgICBzdGFjayA9IFswXTtcblxuICAgICAgICBsZXhlci5yZXNldElucHV0KGlucHV0KTtcblxuICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgLy8gcmV0cmlldmUgc3RhdGUgbnVtYmVyIGZyb20gdG9wIG9mIHN0YWNrXG4gICAgICAgICAgICBzdGF0ZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgICAgICBpZiAoIXN5bWJvbCkge1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IGxleGVyLmxleCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVhZCBhY3Rpb24gZm9yIGN1cnJlbnQgc3RhdGUgYW5kIGZpcnN0IGlucHV0XG4gICAgICAgICAgICAgICAgYWN0aW9uID0gdGFibGVBY3Rpb25bc3RhdGVdICYmIHRhYmxlQWN0aW9uW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWFjdGlvbikge1xuICAgICAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IFtdLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjtcbiAgICAgICAgICAgICAgICAvLyNKU0NPVkVSQUdFX0lGXG4gICAgICAgICAgICAgICAgaWYgKHRhYmxlQWN0aW9uW3N0YXRlXSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBzeW1ib2xGb3JTdGF0ZSBpbiB0YWJsZUFjdGlvbltzdGF0ZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkLnB1c2goc2VsZi5sZXhlci5tYXBSZXZlcnNlU3ltYm9sKHN5bWJvbEZvclN0YXRlKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBwcmVmaXggKyAnc3ludGF4IGVycm9yIGF0IGxpbmUgJyArIGxleGVyLmxpbmVOdW1iZXIgK1xuICAgICAgICAgICAgICAgICAgICAnOlxcbicgKyBsZXhlci5zaG93RGVidWdJbmZvKCkgK1xuICAgICAgICAgICAgICAgICAgICAnXFxuJyArICdleHBlY3QgJyArIGV4cGVjdGVkLmpvaW4oJywgJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3dpdGNoIChhY3Rpb25bR3JhbW1hckNvbnN0LlRZUEVfSU5ERVhdKSB7XG4gICAgICAgICAgICBjYXNlIEdyYW1tYXJDb25zdC5TSElGVF9UWVBFOlxuICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTtcblxuICAgICAgICAgICAgICAgIHZhbHVlU3RhY2sucHVzaChsZXhlci50ZXh0KTtcblxuICAgICAgICAgICAgICAgIC8vIHB1c2ggc3RhdGVcbiAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGFjdGlvbltHcmFtbWFyQ29uc3QuVE9fSU5ERVhdKTtcblxuICAgICAgICAgICAgICAgIC8vIGFsbG93IHRvIHJlYWQgbW9yZVxuICAgICAgICAgICAgICAgIHN5bWJvbCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBHcmFtbWFyQ29uc3QuUkVEVUNFX1RZUEU6XG4gICAgICAgICAgICAgICAgdmFyIHByb2R1Y3Rpb24gPSBwcm9kdWN0aW9uc1thY3Rpb25bR3JhbW1hckNvbnN0LlBST0RVQ1RJT05fSU5ERVhdXSxcbiAgICAgICAgICAgICAgICAgICAgcmVkdWNlZFN5bWJvbCA9IHByb2R1Y3Rpb24uc3ltYm9sIHx8IHByb2R1Y3Rpb25bMF0sXG4gICAgICAgICAgICAgICAgICAgIHJlZHVjZWRBY3Rpb24gPSBwcm9kdWN0aW9uLmFjdGlvbiB8fCBwcm9kdWN0aW9uWzJdLFxuICAgICAgICAgICAgICAgICAgICByZWR1Y2VkUmhzID0gcHJvZHVjdGlvbi5yaHMgfHwgcHJvZHVjdGlvblsxXSxcbiAgICAgICAgICAgICAgICAgICAgbGVuID0gcmVkdWNlZFJocy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgIGkgPSAwLFxuICAgICAgICAgICAgICAgICAgICByZXQsXG4gICAgICAgICAgICAgICAgICAgICQkID0gdmFsdWVTdGFja1t2YWx1ZVN0YWNrLmxlbmd0aCAtIGxlbl07IC8vIGRlZmF1bHQgdG8gJCQgPSAkMVxuXG4gICAgICAgICAgICAgICAgcmV0ID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgc2VsZi4kJCA9ICQkO1xuXG4gICAgICAgICAgICAgICAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBzZWxmWyckJyArIChsZW4gLSBpKV0gPSB2YWx1ZVN0YWNrW3ZhbHVlU3RhY2subGVuZ3RoIC0gMSAtIGldO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZWR1Y2VkQWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldCA9IHJlZHVjZWRBY3Rpb24uY2FsbChzZWxmKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgJCQgPSByZXQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgJCQgPSBzZWxmLiQkO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN0YWNrID0gc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4gKiAyKTtcbiAgICAgICAgICAgICAgICB2YWx1ZVN0YWNrID0gdmFsdWVTdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG5cbiAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHJlZHVjZWRTeW1ib2wpO1xuXG4gICAgICAgICAgICAgICAgdmFsdWVTdGFjay5wdXNoKCQkKTtcblxuICAgICAgICAgICAgICAgIHZhciBuZXdTdGF0ZSA9IGdvdG9zW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDJdXVtzdGFja1tzdGFjay5sZW5ndGggLSAxXV07XG5cbiAgICAgICAgICAgICAgICBzdGFjay5wdXNoKG5ld1N0YXRlKTtcblxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIEdyYW1tYXJDb25zdC5BQ0NFUFRfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBwYXJzZXI7XG59KSgpO1xuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBwYXJzZXI7XG59IiwiLyoqXG4gKiBAaWdub3JlXG4gKiBjc3MzIHNlbGVjdG9yIGVuZ2luZSBmb3IgaWU2LThcbiAqIEBhdXRob3IgeWltaW5naGVAZ21haWwuY29tXG4gKi9cblxudmFyIHV0aWwgPSByZXF1aXJlKCcuL3F1ZXJ5LXNlbGVjdG9yL3V0aWwnKTtcbnZhciBwYXJzZXIgPSByZXF1aXJlKCcuL3F1ZXJ5LXNlbGVjdG9yL3BhcnNlcicpO1xuXG52YXIgRVhQQU5ET19TRUxFQ1RPUl9LRVkgPSAnX2tzX2RhdGFfc2VsZWN0b3JfaWRfJyxcbiAgY2FjaGVzID0ge30sXG4gIGlzQ29udGV4dFhNTCxcbiAgdXVpZCA9IDAsXG4gIHN1Yk1hdGNoZXNDYWNoZSA9IHt9LFxuICBnZXRBdHRyID0gZnVuY3Rpb24gKGVsLCBuYW1lKSB7XG4gICAgaWYgKGlzQ29udGV4dFhNTCkge1xuICAgICAgcmV0dXJuIHV0aWwuZ2V0U2ltcGxlQXR0cihlbCwgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1dGlsLmF0dHIoZWwsIG5hbWUpO1xuICAgIH1cbiAgfSxcbiAgaGFzU2luZ2xlQ2xhc3MgPSB1dGlsLmhhc1NpbmdsZUNsYXNzLFxuICBpc1RhZyA9IHV0aWwuaXNUYWcsXG4gIGFOUGx1c0IgPSAvXigoWystXT8oPzpcXGQrKT8pP24pPyhbKy1dP1xcZCspPyQvO1xuXG4vLyBDU1MgZXNjYXBlcyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjZXNjYXBlZC1jaGFyYWN0ZXJzXG52YXIgdW5lc2NhcGUgPSAvXFxcXChbXFxkYS1mQS1GXXsxLDZ9W1xceDIwXFx0XFxyXFxuXFxmXT98LikvZyxcbiAgdW5lc2NhcGVGbiA9IGZ1bmN0aW9uIChfLCBlc2NhcGVkKSB7XG4gICAgdmFyIGhpZ2ggPSAnMHgnICsgZXNjYXBlZCAtIDB4MTAwMDA7XG4gICAgLy8gTmFOIG1lYW5zIG5vbi1jb2RlcG9pbnRcbiAgICByZXR1cm4gaXNOYU4oaGlnaCkgP1xuICAgICAgZXNjYXBlZCA6XG4gICAgICAvLyBCTVAgY29kZXBvaW50XG4gICAgICBoaWdoIDwgMCA/XG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoaGlnaCArIDB4MTAwMDApIDpcbiAgICAgICAgLy8gU3VwcGxlbWVudGFsIFBsYW5lIGNvZGVwb2ludCAoc3Vycm9nYXRlIHBhaXIpXG4gICAgICAgIFN0cmluZy5mcm9tQ2hhckNvZGUoaGlnaCA+PiAxMCB8IDB4RDgwMCwgaGlnaCAmIDB4M0ZGIHwgMHhEQzAwKTtcbiAgfTtcblxudmFyIG1hdGNoRXhwcjtcblxudmFyIHBzZXVkb0ZuRXhwciA9IHtcbiAgJ250aC1jaGlsZCc6IGZ1bmN0aW9uIChlbCwgcGFyYW0pIHtcbiAgICB2YXIgYWIgPSBnZXRBYihwYXJhbSksXG4gICAgICBhID0gYWIuYSxcbiAgICAgIGIgPSBhYi5iO1xuICAgIGlmIChhID09PSAwICYmIGIgPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSAwLFxuICAgICAgcGFyZW50ID0gZWwucGFyZW50Tm9kZTtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICB2YXIgY2hpbGROb2RlcyA9IHBhcmVudC5jaGlsZE5vZGVzLFxuICAgICAgICBjb3VudCA9IDAsXG4gICAgICAgIGNoaWxkLFxuICAgICAgICByZXQsXG4gICAgICAgIGxlbiA9IGNoaWxkTm9kZXMubGVuZ3RoO1xuICAgICAgZm9yICg7IGNvdW50IDwgbGVuOyBjb3VudCsrKSB7XG4gICAgICAgIGNoaWxkID0gY2hpbGROb2Rlc1tjb3VudF07XG4gICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgcmV0ID0gbWF0Y2hJbmRleEJ5QWIoaW5kZXgsIGEsIGIsIGNoaWxkID09PSBlbCk7XG4gICAgICAgICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfSxcbiAgJ250aC1sYXN0LWNoaWxkJzogZnVuY3Rpb24gKGVsLCBwYXJhbSkge1xuICAgIHZhciBhYiA9IGdldEFiKHBhcmFtKSxcbiAgICAgIGEgPSBhYi5hLFxuICAgICAgYiA9IGFiLmI7XG4gICAgaWYgKGEgPT09IDAgJiYgYiA9PT0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHZhciBpbmRleCA9IDAsXG4gICAgICBwYXJlbnQgPSBlbC5wYXJlbnROb2RlO1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHZhciBjaGlsZE5vZGVzID0gcGFyZW50LmNoaWxkTm9kZXMsXG4gICAgICAgIGxlbiA9IGNoaWxkTm9kZXMubGVuZ3RoLFxuICAgICAgICBjb3VudCA9IGxlbiAtIDEsXG4gICAgICAgIGNoaWxkLFxuICAgICAgICByZXQ7XG4gICAgICBmb3IgKDsgY291bnQgPj0gMDsgY291bnQtLSkge1xuICAgICAgICBjaGlsZCA9IGNoaWxkTm9kZXNbY291bnRdO1xuICAgICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgIHJldCA9IG1hdGNoSW5kZXhCeUFiKGluZGV4LCBhLCBiLCBjaGlsZCA9PT0gZWwpO1xuICAgICAgICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH0sXG4gICdudGgtb2YtdHlwZSc6IGZ1bmN0aW9uIChlbCwgcGFyYW0pIHtcbiAgICB2YXIgYWIgPSBnZXRBYihwYXJhbSksXG4gICAgICBhID0gYWIuYSxcbiAgICAgIGIgPSBhYi5iO1xuICAgIGlmIChhID09PSAwICYmIGIgPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSAwLFxuICAgICAgcGFyZW50ID0gZWwucGFyZW50Tm9kZTtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICB2YXIgY2hpbGROb2RlcyA9IHBhcmVudC5jaGlsZE5vZGVzLFxuICAgICAgICBlbFR5cGUgPSBlbC50YWdOYW1lLFxuICAgICAgICBjb3VudCA9IDAsXG4gICAgICAgIGNoaWxkLFxuICAgICAgICByZXQsXG4gICAgICAgIGxlbiA9IGNoaWxkTm9kZXMubGVuZ3RoO1xuICAgICAgZm9yICg7IGNvdW50IDwgbGVuOyBjb3VudCsrKSB7XG4gICAgICAgIGNoaWxkID0gY2hpbGROb2Rlc1tjb3VudF07XG4gICAgICAgIGlmIChjaGlsZC50YWdOYW1lID09PSBlbFR5cGUpIHtcbiAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgIHJldCA9IG1hdGNoSW5kZXhCeUFiKGluZGV4LCBhLCBiLCBjaGlsZCA9PT0gZWwpO1xuICAgICAgICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH0sXG4gICdudGgtbGFzdC1vZi10eXBlJzogZnVuY3Rpb24gKGVsLCBwYXJhbSkge1xuICAgIHZhciBhYiA9IGdldEFiKHBhcmFtKSxcbiAgICAgIGEgPSBhYi5hLFxuICAgICAgYiA9IGFiLmI7XG4gICAgaWYgKGEgPT09IDAgJiYgYiA9PT0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHZhciBpbmRleCA9IDAsXG4gICAgICBwYXJlbnQgPSBlbC5wYXJlbnROb2RlO1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHZhciBjaGlsZE5vZGVzID0gcGFyZW50LmNoaWxkTm9kZXMsXG4gICAgICAgIGxlbiA9IGNoaWxkTm9kZXMubGVuZ3RoLFxuICAgICAgICBlbFR5cGUgPSBlbC50YWdOYW1lLFxuICAgICAgICBjb3VudCA9IGxlbiAtIDEsXG4gICAgICAgIGNoaWxkLFxuICAgICAgICByZXQ7XG4gICAgICBmb3IgKDsgY291bnQgPj0gMDsgY291bnQtLSkge1xuICAgICAgICBjaGlsZCA9IGNoaWxkTm9kZXNbY291bnRdO1xuICAgICAgICBpZiAoY2hpbGQudGFnTmFtZSA9PT0gZWxUeXBlKSB7XG4gICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICByZXQgPSBtYXRjaEluZGV4QnlBYihpbmRleCwgYSwgYiwgY2hpbGQgPT09IGVsKTtcbiAgICAgICAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9LFxuICBsYW5nOiBmdW5jdGlvbiAoZWwsIGxhbmcpIHtcbiAgICB2YXIgZWxMYW5nO1xuICAgIGxhbmcgPSB1bkVzY2FwZShsYW5nLnRvTG93ZXJDYXNlKCkpO1xuICAgIGRvIHtcbiAgICAgIGlmICgoZWxMYW5nID0gKGlzQ29udGV4dFhNTCA/XG4gICAgICAgIGVsLmdldEF0dHJpYnV0ZSgneG1sOmxhbmcnKSB8fCBlbC5nZXRBdHRyaWJ1dGUoJ2xhbmcnKSA6XG4gICAgICAgICAgZWwubGFuZykpKSB7XG4gICAgICAgIGVsTGFuZyA9IGVsTGFuZy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gZWxMYW5nID09PSBsYW5nIHx8IGVsTGFuZy5pbmRleE9mKGxhbmcgKyAnLScpID09PSAwO1xuICAgICAgfVxuICAgIH0gd2hpbGUgKChlbCA9IGVsLnBhcmVudE5vZGUpICYmIGVsLm5vZGVUeXBlID09PSAxKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIG5vdDogZnVuY3Rpb24gKGVsLCBuZWdhdGlvbkFyZykge1xuICAgIHJldHVybiAhbWF0Y2hFeHByW25lZ2F0aW9uQXJnLnRdKGVsLCBuZWdhdGlvbkFyZy52YWx1ZSk7XG4gIH1cbn07XG5cbnZhciBwc2V1ZG9JZGVudEV4cHIgPSB7XG4gIGVtcHR5OiBmdW5jdGlvbiAoZWwpIHtcbiAgICB2YXIgY2hpbGROb2RlcyA9IGVsLmNoaWxkTm9kZXMsXG4gICAgICBpbmRleCA9IDAsXG4gICAgICBsZW4gPSBjaGlsZE5vZGVzLmxlbmd0aCAtIDEsXG4gICAgICBjaGlsZCxcbiAgICAgIG5vZGVUeXBlO1xuICAgIGZvciAoOyBpbmRleCA8IGxlbjsgaW5kZXgrKykge1xuICAgICAgY2hpbGQgPSBjaGlsZE5vZGVzW2luZGV4XTtcbiAgICAgIG5vZGVUeXBlID0gY2hpbGQubm9kZVR5cGU7XG4gICAgICAvLyBvbmx5IGVsZW1lbnQgbm9kZXMgYW5kIGNvbnRlbnQgbm9kZXNcbiAgICAgIC8vIChzdWNoIGFzIERvbSBbRG9tLUxFVkVMLTMtQ09SRV0gdGV4dCBub2RlcyxcbiAgICAgIC8vIENEQVRBIG5vZGVzLCBhbmQgZW50aXR5IHJlZmVyZW5jZXNcbiAgICAgIGlmIChub2RlVHlwZSA9PT0gMSB8fCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCB8fCBub2RlVHlwZSA9PT0gNSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDE7XG4gIH0sXG4gIHJvb3Q6IGZ1bmN0aW9uIChlbCkge1xuICAgIGlmIChlbC5ub2RlVHlwZSA9PT0gOSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBlbC5vd25lckRvY3VtZW50ICYmXG4gICAgICBlbCA9PT0gZWwub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH0sXG4gICdmaXJzdC1jaGlsZCc6IGZ1bmN0aW9uIChlbCkge1xuICAgIHJldHVybiBwc2V1ZG9GbkV4cHJbJ250aC1jaGlsZCddKGVsLCAxKTtcbiAgfSxcbiAgJ2xhc3QtY2hpbGQnOiBmdW5jdGlvbiAoZWwpIHtcbiAgICByZXR1cm4gcHNldWRvRm5FeHByWydudGgtbGFzdC1jaGlsZCddKGVsLCAxKTtcbiAgfSxcbiAgJ2ZpcnN0LW9mLXR5cGUnOiBmdW5jdGlvbiAoZWwpIHtcbiAgICByZXR1cm4gcHNldWRvRm5FeHByWydudGgtb2YtdHlwZSddKGVsLCAxKTtcbiAgfSxcbiAgJ2xhc3Qtb2YtdHlwZSc6IGZ1bmN0aW9uIChlbCkge1xuICAgIHJldHVybiBwc2V1ZG9GbkV4cHJbJ250aC1sYXN0LW9mLXR5cGUnXShlbCwgMSk7XG4gIH0sXG4gICdvbmx5LWNoaWxkJzogZnVuY3Rpb24gKGVsKSB7XG4gICAgcmV0dXJuIHBzZXVkb0lkZW50RXhwclsnZmlyc3QtY2hpbGQnXShlbCkgJiZcbiAgICAgIHBzZXVkb0lkZW50RXhwclsnbGFzdC1jaGlsZCddKGVsKTtcbiAgfSxcbiAgJ29ubHktb2YtdHlwZSc6IGZ1bmN0aW9uIChlbCkge1xuICAgIHJldHVybiBwc2V1ZG9JZGVudEV4cHJbJ2ZpcnN0LW9mLXR5cGUnXShlbCkgJiZcbiAgICAgIHBzZXVkb0lkZW50RXhwclsnbGFzdC1vZi10eXBlJ10oZWwpO1xuICB9LFxuICBmb2N1czogZnVuY3Rpb24gKGVsKSB7XG4gICAgdmFyIGRvYyA9IGVsLm93bmVyRG9jdW1lbnQ7XG4gICAgcmV0dXJuIGRvYyAmJiBlbCA9PT0gZG9jLmFjdGl2ZUVsZW1lbnQgJiZcbiAgICAgICghZG9jLmhhc0ZvY3VzIHx8IGRvYy5oYXNGb2N1cygpKSAmJiAhIShlbC50eXBlIHx8IGVsLmhyZWYgfHwgZWwudGFiSW5kZXggPj0gMCk7XG4gIH0sXG4gIHRhcmdldDogZnVuY3Rpb24gKGVsKSB7XG4gICAgdmFyIGhhc2ggPSBsb2NhdGlvbi5oYXNoO1xuICAgIHJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoMSkgPT09IGdldEF0dHIoZWwsICdpZCcpO1xuICB9LFxuICBlbmFibGVkOiBmdW5jdGlvbiAoZWwpIHtcbiAgICByZXR1cm4gIWVsLmRpc2FibGVkO1xuICB9LFxuICBkaXNhYmxlZDogZnVuY3Rpb24gKGVsKSB7XG4gICAgcmV0dXJuIGVsLmRpc2FibGVkO1xuICB9LFxuICBjaGVja2VkOiBmdW5jdGlvbiAoZWwpIHtcbiAgICB2YXIgbm9kZU5hbWUgPSBlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiAobm9kZU5hbWUgPT09ICdpbnB1dCcgJiYgZWwuY2hlY2tlZCkgfHxcbiAgICAgIChub2RlTmFtZSA9PT0gJ29wdGlvbicgJiYgZWwuc2VsZWN0ZWQpO1xuICB9XG59O1xuXG52YXIgYXR0cmlidXRlRXhwciA9IHtcbiAgJ349JzogZnVuY3Rpb24gKGVsVmFsdWUsIHZhbHVlKSB7XG4gICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZS5pbmRleE9mKCcgJykgPiAtMSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHJldHVybiAoJyAnICsgZWxWYWx1ZSArICcgJykuaW5kZXhPZignICcgKyB2YWx1ZSArICcgJykgIT09IC0xO1xuICB9LFxuICAnfD0nOiBmdW5jdGlvbiAoZWxWYWx1ZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gKCcgJyArIGVsVmFsdWUpLmluZGV4T2YoJyAnICsgdmFsdWUgKyAnLScpICE9PSAtMTtcbiAgfSxcbiAgJ149JzogZnVuY3Rpb24gKGVsVmFsdWUsIHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHV0aWwuc3RhcnRzV2l0aChlbFZhbHVlLCB2YWx1ZSk7XG4gIH0sXG4gICckPSc6IGZ1bmN0aW9uIChlbFZhbHVlLCB2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiB1dGlsLmVuZHNXaXRoKGVsVmFsdWUsIHZhbHVlKTtcbiAgfSxcbiAgJyo9JzogZnVuY3Rpb24gKGVsVmFsdWUsIHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIGVsVmFsdWUuaW5kZXhPZih2YWx1ZSkgIT09IC0xO1xuICB9LFxuICAnPSc6IGZ1bmN0aW9uIChlbFZhbHVlLCB2YWx1ZSkge1xuICAgIHJldHVybiBlbFZhbHVlID09PSB2YWx1ZTtcbiAgfVxufTtcblxudmFyIHJlbGF0aXZlRXhwciA9IHtcbiAgJz4nOiB7XG4gICAgZGlyOiAncGFyZW50Tm9kZScsXG4gICAgaW1tZWRpYXRlOiAxXG4gIH0sXG4gICcgJzoge1xuICAgIGRpcjogJ3BhcmVudE5vZGUnXG4gIH0sXG4gICcrJzoge1xuICAgIGRpcjogJ3ByZXZpb3VzU2libGluZycsXG4gICAgaW1tZWRpYXRlOiAxXG4gIH0sXG4gICd+Jzoge1xuICAgIGRpcjogJ3ByZXZpb3VzU2libGluZydcbiAgfVxufTtcblxubWF0Y2hFeHByID0ge1xuICB0YWc6IGlzVGFnLFxuICBjbHM6IGhhc1NpbmdsZUNsYXNzLFxuICBpZDogZnVuY3Rpb24gKGVsLCB2YWx1ZSkge1xuICAgIHJldHVybiBnZXRBdHRyKGVsLCAnaWQnKSA9PT0gdmFsdWU7XG4gIH0sXG4gIGF0dHJpYjogZnVuY3Rpb24gKGVsLCB2YWx1ZSkge1xuICAgIHZhciBuYW1lID0gdmFsdWUuaWRlbnQ7XG4gICAgaWYgKCFpc0NvbnRleHRYTUwpIHtcbiAgICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIHZhciBlbFZhbHVlID0gZ2V0QXR0cihlbCwgbmFtZSk7XG4gICAgdmFyIG1hdGNoID0gdmFsdWUubWF0Y2g7XG4gICAgaWYgKCFtYXRjaCAmJiBlbFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSBpZiAobWF0Y2gpIHtcbiAgICAgIGlmIChlbFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgICB2YXIgbWF0Y2hGbiA9IGF0dHJpYnV0ZUV4cHJbbWF0Y2hdO1xuICAgICAgaWYgKG1hdGNoRm4pIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoRm4oZWxWYWx1ZSArICcnLCB2YWx1ZS52YWx1ZSArICcnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH0sXG4gIHBzZXVkbzogZnVuY3Rpb24gKGVsLCB2YWx1ZSkge1xuICAgIHZhciBmbiwgZm5TdHIsIGlkZW50O1xuICAgIGlmICgoZm5TdHIgPSB2YWx1ZS5mbikpIHtcbiAgICAgIGlmICghKGZuID0gcHNldWRvRm5FeHByW2ZuU3RyXSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdTeW50YXggZXJyb3I6IG5vdCBzdXBwb3J0IHBzZXVkbzogJyArIGZuU3RyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmbihlbCwgdmFsdWUucGFyYW0pO1xuICAgIH1cbiAgICBpZiAoKGlkZW50ID0gdmFsdWUuaWRlbnQpKSB7XG4gICAgICBpZiAoIXBzZXVkb0lkZW50RXhwcltpZGVudF0pIHtcbiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdTeW50YXggZXJyb3I6IG5vdCBzdXBwb3J0IHBzZXVkbzogJyArIGlkZW50KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwc2V1ZG9JZGVudEV4cHJbaWRlbnRdKGVsKTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHVuRXNjYXBlKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UodW5lc2NhcGUsIHVuZXNjYXBlRm4pO1xufVxuXG5wYXJzZXIubGV4ZXIueXkgPSB7XG4gIHRyaW06IHV0aWwudHJpbSxcbiAgdW5Fc2NhcGU6IHVuRXNjYXBlLFxuICB1bkVzY2FwZVN0cjogZnVuY3Rpb24gKHN0cikge1xuICAgIHJldHVybiB0aGlzLnVuRXNjYXBlKHN0ci5zbGljZSgxLCAtMSkpO1xuICB9XG59O1xuXG5mdW5jdGlvbiByZXNldFN0YXR1cygpIHtcbiAgc3ViTWF0Y2hlc0NhY2hlID0ge307XG59XG5cbmZ1bmN0aW9uIGRpcihlbCwgZGlyZWN0aW9uKSB7XG4gIGRvIHtcbiAgICBlbCA9IGVsW2RpcmVjdGlvbl07XG4gIH0gd2hpbGUgKGVsICYmIGVsLm5vZGVUeXBlICE9PSAxKTtcbiAgcmV0dXJuIGVsO1xufVxuXG5mdW5jdGlvbiBnZXRBYihwYXJhbSkge1xuICB2YXIgYSA9IDAsXG4gICAgbWF0Y2gsXG4gICAgYiA9IDA7XG4gIGlmICh0eXBlb2YgcGFyYW0gPT09ICdudW1iZXInKSB7XG4gICAgYiA9IHBhcmFtO1xuICB9IGVsc2UgaWYgKHBhcmFtID09PSAnb2RkJykge1xuICAgIGEgPSAyO1xuICAgIGIgPSAxO1xuICB9IGVsc2UgaWYgKHBhcmFtID09PSAnZXZlbicpIHtcbiAgICBhID0gMjtcbiAgICBiID0gMDtcbiAgfSBlbHNlIGlmICgobWF0Y2ggPSBwYXJhbS5yZXBsYWNlKC9cXHMvZywgJycpLm1hdGNoKGFOUGx1c0IpKSkge1xuICAgIGlmIChtYXRjaFsxXSkge1xuICAgICAgYSA9IHBhcnNlSW50KG1hdGNoWzJdLCAxMCk7XG4gICAgICBpZiAoaXNOYU4oYSkpIHtcbiAgICAgICAgaWYgKG1hdGNoWzJdID09PSAnLScpIHtcbiAgICAgICAgICBhID0gLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYSA9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYSA9IDA7XG4gICAgfVxuICAgIGIgPSBwYXJzZUludChtYXRjaFszXSwgMTApIHx8IDA7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBhOiBhLFxuICAgIGI6IGJcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hJbmRleEJ5QWIoaW5kZXgsIGEsIGIsIGVxKSB7XG4gIGlmIChhID09PSAwKSB7XG4gICAgaWYgKGluZGV4ID09PSBiKSB7XG4gICAgICByZXR1cm4gZXE7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICgoaW5kZXggLSBiKSAvIGEgPj0gMCAmJiAoaW5kZXggLSBiKSAlIGEgPT09IDAgJiYgZXEpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc1hNTChlbGVtKSB7XG4gIHZhciBkb2N1bWVudEVsZW1lbnQgPSBlbGVtICYmIChlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSkuZG9jdW1lbnRFbGVtZW50O1xuICByZXR1cm4gZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnRFbGVtZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdodG1sJyA6IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVzKHN0ciwgc2VlZHMpIHtcbiAgcmV0dXJuIHNlbGVjdChzdHIsIG51bGwsIHNlZWRzKTtcbn1cblxuZnVuY3Rpb24gc2luZ2xlTWF0Y2goZWwsIG1hdGNoKSB7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoIWVsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGVsLm5vZGVUeXBlID09PSA5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIG1hdGNoZWQgPSAxLFxuICAgIG1hdGNoU3VmZml4ID0gbWF0Y2guc3VmZml4LFxuICAgIG1hdGNoU3VmZml4TGVuLFxuICAgIG1hdGNoU3VmZml4SW5kZXg7XG5cbiAgaWYgKG1hdGNoLnQgPT09ICd0YWcnKSB7XG4gICAgbWF0Y2hlZCAmPSBtYXRjaEV4cHIudGFnKGVsLCBtYXRjaC52YWx1ZSk7XG4gIH1cblxuICBpZiAobWF0Y2hlZCAmJiBtYXRjaFN1ZmZpeCkge1xuICAgIG1hdGNoU3VmZml4TGVuID0gbWF0Y2hTdWZmaXgubGVuZ3RoO1xuICAgIG1hdGNoU3VmZml4SW5kZXggPSAwO1xuICAgIGZvciAoOyBtYXRjaGVkICYmIG1hdGNoU3VmZml4SW5kZXggPCBtYXRjaFN1ZmZpeExlbjsgbWF0Y2hTdWZmaXhJbmRleCsrKSB7XG4gICAgICB2YXIgc2luZ2xlTWF0Y2hTdWZmaXggPSBtYXRjaFN1ZmZpeFttYXRjaFN1ZmZpeEluZGV4XSxcbiAgICAgICAgc2luZ2xlTWF0Y2hTdWZmaXhUeXBlID0gc2luZ2xlTWF0Y2hTdWZmaXgudDtcbiAgICAgIGlmIChtYXRjaEV4cHJbc2luZ2xlTWF0Y2hTdWZmaXhUeXBlXSkge1xuICAgICAgICBtYXRjaGVkICY9IG1hdGNoRXhwcltzaW5nbGVNYXRjaFN1ZmZpeFR5cGVdKGVsLCBzaW5nbGVNYXRjaFN1ZmZpeC52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1hdGNoZWQ7XG59XG5cbi8vIG1hdGNoIGJ5IGFkamFjZW50IGltbWVkaWF0ZSBzaW5nbGUgc2VsZWN0b3IgbWF0Y2hcbmZ1bmN0aW9uIG1hdGNoSW1tZWRpYXRlKGVsLCBtYXRjaCkge1xuICB2YXIgbWF0Y2hlZCA9IDEsXG4gICAgc3RhcnRFbCA9IGVsLFxuICAgIHJlbGF0aXZlT3AsXG4gICAgc3RhcnRNYXRjaCA9IG1hdGNoO1xuXG4gIGRvIHtcbiAgICBtYXRjaGVkICY9IHNpbmdsZU1hdGNoKGVsLCBtYXRjaCk7XG4gICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgIC8vIGFkdmFuY2VcbiAgICAgIG1hdGNoID0gbWF0Y2ggJiYgbWF0Y2gucHJldjtcbiAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZU9wID0gcmVsYXRpdmVFeHByW21hdGNoLm5leHRDb21iaW5hdG9yXTtcbiAgICAgIGVsID0gZGlyKGVsLCByZWxhdGl2ZU9wLmRpcik7XG4gICAgICBpZiAoIXJlbGF0aXZlT3AuaW1tZWRpYXRlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLy8gYWR2YW5jZSBmb3Igbm9uLWltbWVkaWF0ZVxuICAgICAgICAgIGVsOiBlbCxcbiAgICAgICAgICBtYXRjaDogbWF0Y2hcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVsYXRpdmVPcCA9IHJlbGF0aXZlRXhwclttYXRjaC5uZXh0Q29tYmluYXRvcl07XG4gICAgICBpZiAocmVsYXRpdmVPcC5pbW1lZGlhdGUpIHtcbiAgICAgICAgLy8gcmV0cmVhdCBidXQgYWR2YW5jZSBzdGFydEVsXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZWw6IGRpcihzdGFydEVsLCByZWxhdGl2ZUV4cHJbc3RhcnRNYXRjaC5uZXh0Q29tYmluYXRvcl0uZGlyKSxcbiAgICAgICAgICBtYXRjaDogc3RhcnRNYXRjaFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYWR2YW5jZSAoYmVmb3JlIGltbWVkaWF0ZSBtYXRjaCArIGp1bXAgdW5tYXRjaGVkKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVsOiBlbCAmJiBkaXIoZWwsIHJlbGF0aXZlT3AuZGlyKSxcbiAgICAgICAgICBtYXRjaDogbWF0Y2hcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH0gd2hpbGUgKGVsKTtcblxuICAvLyBvbmx5IG9jY3VyIHdoZW4gbWF0Y2ggaW1tZWRpYXRlXG4gIHJldHVybiB7XG4gICAgZWw6IGRpcihzdGFydEVsLCByZWxhdGl2ZUV4cHJbc3RhcnRNYXRjaC5uZXh0Q29tYmluYXRvcl0uZGlyKSxcbiAgICBtYXRjaDogc3RhcnRNYXRjaFxuICB9O1xufVxuXG4vLyBmaW5kIGZpeGVkIHBhcnQsIGZpeGVkIHdpdGggc2VlZHNcbmZ1bmN0aW9uIGZpbmRGaXhlZE1hdGNoRnJvbUhlYWQoZWwsIGhlYWQpIHtcbiAgdmFyIHJlbGF0aXZlT3AsXG4gICAgY3VyID0gaGVhZDtcblxuICBkbyB7XG4gICAgaWYgKCFzaW5nbGVNYXRjaChlbCwgY3VyKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGN1ciA9IGN1ci5wcmV2O1xuICAgIGlmICghY3VyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmVsYXRpdmVPcCA9IHJlbGF0aXZlRXhwcltjdXIubmV4dENvbWJpbmF0b3JdO1xuICAgIGVsID0gZGlyKGVsLCByZWxhdGl2ZU9wLmRpcik7XG4gIH0gd2hpbGUgKGVsICYmIHJlbGF0aXZlT3AuaW1tZWRpYXRlKTtcbiAgaWYgKCFlbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiB7XG4gICAgZWw6IGVsLFxuICAgIG1hdGNoOiBjdXJcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2VuSWQoZWwpIHtcbiAgdmFyIHNlbGVjdG9ySWQ7XG5cbiAgaWYgKGlzQ29udGV4dFhNTCkge1xuICAgIGlmICghKHNlbGVjdG9ySWQgPSBlbC5nZXRBdHRyaWJ1dGUoRVhQQU5ET19TRUxFQ1RPUl9LRVkpKSkge1xuICAgICAgZWwuc2V0QXR0cmlidXRlKEVYUEFORE9fU0VMRUNUT1JfS0VZLCBzZWxlY3RvcklkID0gKCtuZXcgRGF0ZSgpICsgJ18nICsgKCsrdXVpZCkpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKCEoc2VsZWN0b3JJZCA9IGVsW0VYUEFORE9fU0VMRUNUT1JfS0VZXSkpIHtcbiAgICAgIHNlbGVjdG9ySWQgPSBlbFtFWFBBTkRPX1NFTEVDVE9SX0tFWV0gPSAoK25ldyBEYXRlKCkpICsgJ18nICsgKCsrdXVpZCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNlbGVjdG9ySWQ7XG59XG5cbmZ1bmN0aW9uIG1hdGNoU3ViKGVsLCBtYXRjaCkge1xuICB2YXIgc2VsZWN0b3JJZCA9IGdlbklkKGVsKSxcbiAgICBtYXRjaEtleTtcbiAgbWF0Y2hLZXkgPSBzZWxlY3RvcklkICsgJ18nICsgKG1hdGNoLm9yZGVyIHx8IDApO1xuICBpZiAobWF0Y2hLZXkgaW4gc3ViTWF0Y2hlc0NhY2hlKSB7XG4gICAgcmV0dXJuIHN1Yk1hdGNoZXNDYWNoZVttYXRjaEtleV07XG4gIH1cbiAgc3ViTWF0Y2hlc0NhY2hlW21hdGNoS2V5XSA9IG1hdGNoU3ViSW50ZXJuYWwoZWwsIG1hdGNoKTtcbiAgcmV0dXJuIHN1Yk1hdGNoZXNDYWNoZVttYXRjaEtleV07XG59XG5cbi8vIHJlY3Vyc2l2ZSBtYXRjaCBieSBzdWIgc2VsZWN0b3Igc3RyaW5nIGZyb20gcmlnaHQgdG8gbGVmdFxuLy8gZ3JvdXBlZCBieSBpbW1lZGlhdGUgc2VsZWN0b3JzXG5mdW5jdGlvbiBtYXRjaFN1YkludGVybmFsKGVsLCBtYXRjaCkge1xuICB2YXIgbWF0Y2hJbW1lZGlhdGVSZXQgPSBtYXRjaEltbWVkaWF0ZShlbCwgbWF0Y2gpO1xuICBpZiAobWF0Y2hJbW1lZGlhdGVSZXQgPT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBlbCA9IG1hdGNoSW1tZWRpYXRlUmV0LmVsO1xuICAgIG1hdGNoID0gbWF0Y2hJbW1lZGlhdGVSZXQubWF0Y2g7XG4gICAgd2hpbGUgKGVsKSB7XG4gICAgICBpZiAobWF0Y2hTdWIoZWwsIG1hdGNoKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGVsID0gZGlyKGVsLCByZWxhdGl2ZUV4cHJbbWF0Y2gubmV4dENvbWJpbmF0b3JdLmRpcik7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZWxlY3Qoc3RyLCBjb250ZXh0LCBzZWVkcykge1xuICBpZiAoIWNhY2hlc1tzdHJdKSB7XG4gICAgY2FjaGVzW3N0cl0gPSBwYXJzZXIucGFyc2Uoc3RyKTtcbiAgfVxuXG4gIHZhciBzZWxlY3RvciA9IGNhY2hlc1tzdHJdLFxuICAgIGdyb3VwSW5kZXggPSAwLFxuICAgIGdyb3VwTGVuID0gc2VsZWN0b3IubGVuZ3RoLFxuICAgIGNvbnRleHREb2N1bWVudCxcbiAgICBncm91cCxcbiAgICByZXQgPSBbXTtcblxuICBpZiAoc2VlZHMpIHtcbiAgICBjb250ZXh0ID0gY29udGV4dCB8fCBzZWVkc1swXS5vd25lckRvY3VtZW50O1xuICB9XG5cbiAgY29udGV4dERvY3VtZW50ID0gY29udGV4dCAmJiBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudDtcblxuICBpZiAoY29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID09PSA5ICYmICFjb250ZXh0RG9jdW1lbnQpIHtcbiAgICBjb250ZXh0RG9jdW1lbnQgPSBjb250ZXh0O1xuICB9XG5cbiAgY29udGV4dCA9IGNvbnRleHQgfHwgY29udGV4dERvY3VtZW50O1xuXG4gIGlzQ29udGV4dFhNTCA9IGlzWE1MKGNvbnRleHQpO1xuXG4gIGZvciAoOyBncm91cEluZGV4IDwgZ3JvdXBMZW47IGdyb3VwSW5kZXgrKykge1xuICAgIHJlc2V0U3RhdHVzKCk7XG5cbiAgICBncm91cCA9IHNlbGVjdG9yW2dyb3VwSW5kZXhdO1xuXG4gICAgdmFyIHN1ZmZpeCA9IGdyb3VwLnN1ZmZpeCxcbiAgICAgIHN1ZmZpeEluZGV4LFxuICAgICAgc3VmZml4TGVuLFxuICAgICAgc2VlZHNJbmRleCxcbiAgICAgIG15U2VlZHMgPSBzZWVkcyxcbiAgICAgIHNlZWRzTGVuLFxuICAgICAgaWQgPSBudWxsO1xuXG4gICAgaWYgKCFteVNlZWRzKSB7XG4gICAgICBpZiAoc3VmZml4ICYmICFpc0NvbnRleHRYTUwpIHtcbiAgICAgICAgc3VmZml4SW5kZXggPSAwO1xuICAgICAgICBzdWZmaXhMZW4gPSBzdWZmaXgubGVuZ3RoO1xuICAgICAgICBmb3IgKDsgc3VmZml4SW5kZXggPCBzdWZmaXhMZW47IHN1ZmZpeEluZGV4KyspIHtcbiAgICAgICAgICB2YXIgc2luZ2xlU3VmZml4ID0gc3VmZml4W3N1ZmZpeEluZGV4XTtcbiAgICAgICAgICBpZiAoc2luZ2xlU3VmZml4LnQgPT09ICdpZCcpIHtcbiAgICAgICAgICAgIGlkID0gc2luZ2xlU3VmZml4LnZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpZCkge1xuICAgICAgICAvLyBodHRwOi8veWltaW5naGUuZ2l0aHViLmlvL2xhYi9wbGF5Z3JvdW5kL2ZyYWdtZW50LXNlbGVjdG9yL3NlbGVjdG9yLmh0bWxcbiAgICAgICAgdmFyIGRvZXNOb3RIYXNCeUlkID0gIWNvbnRleHQuZ2V0RWxlbWVudEJ5SWQsXG4gICAgICAgICAgY29udGV4dEluRG9tID0gdXRpbC5jb250YWlucyhjb250ZXh0RG9jdW1lbnQsIGNvbnRleHQpLFxuICAgICAgICAgIHRtcCA9IGRvZXNOb3RIYXNCeUlkID8gKFxuICAgICAgICAgICAgY29udGV4dEluRG9tID9cbiAgICAgICAgICAgICAgY29udGV4dERvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSA6XG4gICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICApIDogY29udGV4dC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgICAgIC8vIGlkIGJ1Z1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20va2lzc3l0ZWFtL2tpc3N5L2lzc3Vlcy82N1xuICAgICAgICBpZiAoIXRtcCAmJiBkb2VzTm90SGFzQnlJZCB8fCB0bXAgJiYgZ2V0QXR0cih0bXAsICdpZCcpICE9PSBpZCkge1xuICAgICAgICAgIHZhciB0bXBzID0gdXRpbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicsIGNvbnRleHQpLFxuICAgICAgICAgICAgdG1wTGVuID0gdG1wcy5sZW5ndGgsXG4gICAgICAgICAgICB0bXBJID0gMDtcbiAgICAgICAgICBmb3IgKDsgdG1wSSA8IHRtcExlbjsgdG1wSSsrKSB7XG4gICAgICAgICAgICB0bXAgPSB0bXBzW3RtcEldO1xuICAgICAgICAgICAgaWYgKGdldEF0dHIodG1wLCAnaWQnKSA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgbXlTZWVkcyA9IFt0bXBdO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRtcEkgPT09IHRtcExlbikge1xuICAgICAgICAgICAgbXlTZWVkcyA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoY29udGV4dEluRG9tICYmIHRtcCAmJiBjb250ZXh0ICE9PSBjb250ZXh0RG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRtcCA9IHV0aWwuY29udGFpbnMoY29udGV4dCwgdG1wKSA/IHRtcCA6IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIG15U2VlZHMgPSB0bXAgPyBbdG1wXSA6IFtdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBteVNlZWRzID0gdXRpbC5nZXRFbGVtZW50c0J5VGFnTmFtZShncm91cC52YWx1ZSB8fCAnKicsIGNvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNlZWRzSW5kZXggPSAwO1xuICAgIHNlZWRzTGVuID0gbXlTZWVkcy5sZW5ndGg7XG5cbiAgICBpZiAoIXNlZWRzTGVuKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBmb3IgKDsgc2VlZHNJbmRleCA8IHNlZWRzTGVuOyBzZWVkc0luZGV4KyspIHtcbiAgICAgIHZhciBzZWVkID0gbXlTZWVkc1tzZWVkc0luZGV4XTtcbiAgICAgIHZhciBtYXRjaEhlYWQgPSBmaW5kRml4ZWRNYXRjaEZyb21IZWFkKHNlZWQsIGdyb3VwKTtcbiAgICAgIGlmIChtYXRjaEhlYWQgPT09IHRydWUpIHtcbiAgICAgICAgcmV0LnB1c2goc2VlZCk7XG4gICAgICB9IGVsc2UgaWYgKG1hdGNoSGVhZCkge1xuICAgICAgICBpZiAobWF0Y2hTdWIobWF0Y2hIZWFkLmVsLCBtYXRjaEhlYWQubWF0Y2gpKSB7XG4gICAgICAgICAgcmV0LnB1c2goc2VlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZ3JvdXBMZW4gPiAxKSB7XG4gICAgcmV0ID0gdXRpbC51bmlxdWUocmV0KTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2VsZWN0O1xuXG5zZWxlY3QucGFyc2UgPSBmdW5jdGlvbiAoc3RyKSB7XG4gIHJldHVybiBwYXJzZXIucGFyc2Uoc3RyKTtcbn07XG5cbnNlbGVjdC5tYXRjaGVzID0gbWF0Y2hlcztcblxuc2VsZWN0LnV0aWwgPSB1dGlsO1xuXG5zZWxlY3QudmVyc2lvbiA9ICdAVkVSU0lPTkAnO1xuLyoqXG4gKiBAaWdub3JlXG4gKiBub3RlIDIwMTMtMDMtMjhcbiAqICAtIHVzZSByZWN1cnNpdmUgY2FsbCB0byByZXBsYWNlIGJhY2t0cmFja2luZyBhbGdvcml0aG1cbiAqXG4gKiByZWZlclxuICogIC0gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzL1xuICogIC0gaHR0cDovL3d3dy5pbXByZXNzaXZld2Vicy5jb20vYnJvd3Nlci1zdXBwb3J0LWNzczMtc2VsZWN0b3JzL1xuICogIC0gaHR0cDovL2Jsb2dzLm1zZG4uY29tL2llL2FyY2hpdmUvMjAxMC8wNS8xMy90aGUtY3NzLWNvcm5lci1jc3MzLXNlbGVjdG9ycy5hc3B4XG4gKiAgLSBodHRwOi8vc2l6emxlanMuY29tL1xuICovIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9xdWVyeS1zZWxlY3RvcicpOyIsInZhciBoeXBoZW5FeHByZXNzaW9uID0gLy0rKFthLXpdKS9naVxuXG5mdW5jdGlvbiB1cHBlckNhc2VGaXJzdE1hdGNoIChtYXRjaCwgYywgb2Zmc2V0KSB7XG4gIGlmIChvZmZzZXQgIT09IDApIHtcbiAgICByZXR1cm4gYy50b1VwcGVyQ2FzZSgpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNcbiAgfVxufVxuXG5mdW5jdGlvbiBjYW1lbENhc2UgKHN0cikge1xuICB2YXIgY2FtZWxDYXNlZCA9IHN0ci5yZXBsYWNlKGh5cGhlbkV4cHJlc3Npb24sIHVwcGVyQ2FzZUZpcnN0TWF0Y2gpXG4gIGh5cGhlbkV4cHJlc3Npb24ubGFzdEluZGV4ID0gMFxuICByZXR1cm4gY2FtZWxDYXNlZFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhbWVsQ2FzZVxuIiwiZnVuY3Rpb24gaXNTdHJpbmcgKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnXG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTdHJpbmdcbiIsImZ1bmN0aW9uIGlzVW5kZWZpbmVkICh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVW5kZWZpbmVkXG4iLCJmdW5jdGlvbiBhc3NpZ24gKGRlc3QpIHtcbiAgdmFyIGFyZ3MgPSBhcmd1bWVudHNcbiAgdmFyIHNvdXJjZVxuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgIHNvdXJjZSA9IGFyZ3NbaV1cblxuICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgIGRlc3Rba2V5XSA9IHNvdXJjZVtrZXldXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRlc3Rcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NpZ25cbiIsImZ1bmN0aW9uIG1hcFZhbHVlcyAoc291cmNlLCBmbikge1xuICB2YXIgZGVzdGluYXRpb24gPSB7fVxuXG4gIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIGRlc3RpbmF0aW9uW2tleV0gPSBmbihzb3VyY2Vba2V5XSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVzdGluYXRpb25cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBWYWx1ZXNcbiIsInZhciBjYW1lbENhc2UgPSByZXF1aXJlKCcuL2NhbWVsQ2FzZScpXG5cbmZ1bmN0aW9uIHN0eWxlQ2FtZWxDYXNlIChuYW1lKSB7XG4gIHZhciBjYW1lbCA9IGNhbWVsQ2FzZShuYW1lKVxuXG4gIC8vIERldGVjdCBpZiB0aGUgc3R5bGUgcHJvcGVydHkgaXMgYWxyZWFkeSBjYW1lbENhc2VkXG4gIC8vIFRvIG5vdCBjb252ZXJ0IFdlYmtpdCosIE1veiogYW5kIE8qIHRvIGxvd2VyY2FzZVxuICBpZiAoY2FtZWwuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgPT09IG5hbWUuY2hhckF0KDApKSB7XG4gICAgcmV0dXJuIG5hbWUuY2hhckF0KDApICsgY2FtZWwuc2xpY2UoMSlcbiAgfVxuXG4gIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gJy0nKSB7XG4gICAgcmV0dXJuIGNhbWVsLmluZGV4T2YoJ21zJykgPT09IDAgPyBjYW1lbFxuICAgICAgOiBjYW1lbC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGNhbWVsLnNsaWNlKDEpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNhbWVsXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHlsZUNhbWVsQ2FzZVxuIiwidmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKVxudmFyIHN0eWxlQXR0ciA9IHJlcXVpcmUoJ3N0eWxlLWF0dHInKVxudmFyIHF1ZXJ5U2VsZWN0b3JBbGwgPSByZXF1aXJlKCdxdWVyeS1zZWxlY3RvcicpXG52YXIgY2FtZWxDYXNlID0gcmVxdWlyZSgnLi91dGlscy9jYW1lbENhc2UnKVxudmFyIGlzU3RyaW5nID0gcmVxdWlyZSgnLi91dGlscy9pc1N0cmluZycpXG52YXIgaXNVbmRlZmluZWQgPSByZXF1aXJlKCcuL3V0aWxzL2lzVW5kZWZpbmVkJylcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL3V0aWxzL2Fzc2lnbicpXG52YXIgbWFwVmFsdWVzID0gcmVxdWlyZSgnLi91dGlscy9tYXBWYWx1ZXMnKVxudmFyIHN0eWxlQ2FtZWxDYXNlID0gcmVxdWlyZSgnLi91dGlscy9zdHlsZUNhbWVsQ2FzZScpXG5cbmZ1bmN0aW9uIGVsZW1lbnQgKCkge1xuICBmdW5jdGlvbiBFbGVtZW50IChub2RlTmFtZSwgcGFyZW50Tm9kZSkge1xuICAgIHRoaXMubm9kZU5hbWUgPSBub2RlTmFtZVxuICAgIHRoaXMucGFyZW50Tm9kZSA9IHBhcmVudE5vZGVcbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBbXVxuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMgPSB7fVxuICAgIHRoaXMudGV4dCA9ICcnXG4gICAgdmFyIHNlbGYgPSB0aGlzXG4gICAgdmFyIHByb3BzID0gdGhpcy5wcm9wcyA9IHtcbiAgICAgIHJlZjogZnVuY3Rpb24gKGNvbXBvbmVudCkge1xuICAgICAgICBzZWxmLmNvbXBvbmVudCA9IGNvbXBvbmVudFxuICAgICAgfSxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIHNldFByb3BlcnR5OiBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICAgICAgICBwcm9wcy5zdHlsZVtzdHlsZUNhbWVsQ2FzZShuYW1lKV0gPSB2YWx1ZVxuICAgICAgICB9LFxuICAgICAgICBnZXRQcm9wZXJ0eTogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gcHJvcHMuc3R5bGVbc3R5bGVDYW1lbENhc2UobmFtZSldIHx8ICcnXG4gICAgICAgIH0sXG4gICAgICAgIGdldFByb3BlcnR5VmFsdWU6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BzLnN0eWxlLmdldFByb3BlcnR5KG5hbWUpXG4gICAgICAgIH0sXG4gICAgICAgIHJlbW92ZVByb3BlcnR5OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgIGRlbGV0ZSBwcm9wcy5zdHlsZVtzdHlsZUNhbWVsQ2FzZShuYW1lKV1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3R5bGUgPSBwcm9wcy5zdHlsZVxuICB9XG5cbiAgRWxlbWVudC5FTEVNRU5UX05PREUgPSAxXG4gIEVsZW1lbnQuRE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEID0gMVxuICBFbGVtZW50LkRPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElORyA9IDJcbiAgRWxlbWVudC5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkcgPSA0XG4gIEVsZW1lbnQuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTlMgPSA4XG4gIEVsZW1lbnQuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZID0gMTZcblxuICBFbGVtZW50LnByb3RvdHlwZS5ub2RlVHlwZSA9IDFcblxuICAvLyBUaGlzIHdhcyBlYXN5IHRvIGRvIHdpdGggVmltLlxuICAvLyBKdXN0IHNheWluZy5cbiAgRWxlbWVudC5wcm90b3R5cGUuZXZlbnROYW1lTWFwcGluZ3MgPSB7XG4gICAgJ2JsdXInOiAnb25CbHVyJyxcbiAgICAnY2hhbmdlJzogJ29uQ2hhbmdlJyxcbiAgICAnY2xpY2snOiAnb25DbGljaycsXG4gICAgJ2NvbnRleHRtZW51JzogJ29uQ29udGV4dE1lbnUnLFxuICAgICdjb3B5JzogJ29uQ29weScsXG4gICAgJ2N1dCc6ICdvbkN1dCcsXG4gICAgJ2RvdWJsZWNsaWNrJzogJ29uRG91YmxlQ2xpY2snLFxuICAgICdkcmFnJzogJ29uRHJhZycsXG4gICAgJ2RyYWdlbmQnOiAnb25EcmFnRW5kJyxcbiAgICAnZHJhZ2VudGVyJzogJ29uRHJhZ0VudGVyJyxcbiAgICAnZHJhZ2V4aXQnOiAnb25EcmFnRXhpdCcsXG4gICAgJ2RyYWdsZWF2ZSc6ICdvbkRyYWdMZWF2ZScsXG4gICAgJ2RyYWdvdmVyJzogJ29uRHJhZ092ZXInLFxuICAgICdkcmFnc3RhcnQnOiAnb25EcmFnU3RhcnQnLFxuICAgICdkcm9wJzogJ29uRHJvcCcsXG4gICAgJ2Vycm9yJzogJ29uRXJyb3InLFxuICAgICdmb2N1cyc6ICdvbkZvY3VzJyxcbiAgICAnaW5wdXQnOiAnb25JbnB1dCcsXG4gICAgJ2tleWRvd24nOiAnb25LZXlEb3duJyxcbiAgICAna2V5cHJlc3MnOiAnb25LZXlQcmVzcycsXG4gICAgJ2tleXVwJzogJ29uS2V5VXAnLFxuICAgICdsb2FkJzogJ29uTG9hZCcsXG4gICAgJ21vdXNlZG93bic6ICdvbk1vdXNlRG93bicsXG4gICAgJ21vdXNlZW50ZXInOiAnb25Nb3VzZUVudGVyJyxcbiAgICAnbW91c2VsZWF2ZSc6ICdvbk1vdXNlTGVhdmUnLFxuICAgICdtb3VzZW1vdmUnOiAnb25Nb3VzZU1vdmUnLFxuICAgICdtb3VzZW91dCc6ICdvbk1vdXNlT3V0JyxcbiAgICAnbW91c2VvdmVyJzogJ29uTW91c2VPdmVyJyxcbiAgICAnbW91c2V1cCc6ICdvbk1vdXNlVXAnLFxuICAgICdwYXN0ZSc6ICdvblBhc3RlJyxcbiAgICAnc2Nyb2xsJzogJ29uU2Nyb2xsJyxcbiAgICAnc3VibWl0JzogJ29uU3VibWl0JyxcbiAgICAndG91Y2hjYW5jZWwnOiAnb25Ub3VjaENhbmNlbCcsXG4gICAgJ3RvdWNoZW5kJzogJ29uVG91Y2hFbmQnLFxuICAgICd0b3VjaG1vdmUnOiAnb25Ub3VjaE1vdmUnLFxuICAgICd0b3VjaHN0YXJ0JzogJ29uVG91Y2hTdGFydCcsXG4gICAgJ3doZWVsJzogJ29uV2hlZWwnXG4gIH1cblxuICBFbGVtZW50LnByb3RvdHlwZS5za2lwTmFtZVRyYW5zZm9ybWF0aW9uRXhwcmVzc2lvbnMgPSBbXG4gICAgL15kYXRhLS8sXG4gICAgL15hcmlhLS9cbiAgXVxuXG4gIEVsZW1lbnQucHJvdG90eXBlLmF0dHJpYnV0ZU5hbWVNYXBwaW5ncyA9IHtcbiAgICAnY2xhc3MnOiAnY2xhc3NOYW1lJ1xuICB9XG5cbiAgRWxlbWVudC5wcm90b3R5cGUuYXR0cmlidXRlVG9Qcm9wTmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFyIHNraXBUcmFuc2Zvcm1NYXRjaGVzID0gdGhpcy5za2lwTmFtZVRyYW5zZm9ybWF0aW9uRXhwcmVzc2lvbnMubWFwKGZ1bmN0aW9uIChleHByKSB7XG4gICAgICByZXR1cm4gZXhwci50ZXN0KG5hbWUpXG4gICAgfSlcblxuICAgIGlmIChza2lwVHJhbnNmb3JtTWF0Y2hlcy5zb21lKEJvb2xlYW4pKSB7XG4gICAgICByZXR1cm4gbmFtZVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVOYW1lTWFwcGluZ3NbbmFtZV0gfHwgY2FtZWxDYXNlKG5hbWUpXG4gICAgfVxuICB9XG5cbiAgRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKG5hbWUgPT09ICdzdHlsZScgJiYgaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICB2YXIgc3R5bGVzID0gc3R5bGVBdHRyLnBhcnNlKHZhbHVlKVxuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc3R5bGVzKSB7XG4gICAgICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoa2V5LCBzdHlsZXNba2V5XSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9wc1t0aGlzLmF0dHJpYnV0ZVRvUHJvcE5hbWUobmFtZSldID0gdmFsdWVcbiAgICB9XG4gIH1cblxuICBFbGVtZW50LnByb3RvdHlwZS5nZXRBdHRyaWJ1dGUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB0aGlzLnByb3BzW3RoaXMuYXR0cmlidXRlVG9Qcm9wTmFtZShuYW1lKV1cbiAgfVxuXG4gIEVsZW1lbnQucHJvdG90eXBlLmdldEF0dHJpYnV0ZU5vZGUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKG5hbWUpXG5cbiAgICBpZiAoIWlzVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBzcGVjaWZpZWQ6IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVBdHRyaWJ1dGUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLnByb3BzW3RoaXMuYXR0cmlidXRlVG9Qcm9wTmFtZShuYW1lKV1cbiAgfVxuXG4gIEVsZW1lbnQucHJvdG90eXBlLmV2ZW50VG9Qcm9wTmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnROYW1lTWFwcGluZ3NbbmFtZV0gfHwgbmFtZVxuICB9XG5cbiAgRWxlbWVudC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChuYW1lLCBmbikge1xuICAgIHZhciBwcm9wID0gdGhpcy5ldmVudFRvUHJvcE5hbWUobmFtZSlcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzW3Byb3BdID0gdGhpcy5ldmVudExpc3RlbmVyc1twcm9wXSB8fCBbXVxuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnNbcHJvcF0ucHVzaChmbilcbiAgfVxuXG4gIEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAobmFtZSwgZm4pIHtcbiAgICB2YXIgbGlzdGVuZXJzID0gdGhpcy5ldmVudExpc3RlbmVyc1t0aGlzLmV2ZW50VG9Qcm9wTmFtZShuYW1lKV1cblxuICAgIGlmIChsaXN0ZW5lcnMpIHtcbiAgICAgIHZhciBtYXRjaCA9IGxpc3RlbmVycy5pbmRleE9mKGZuKVxuXG4gICAgICBpZiAobWF0Y2ggIT09IC0xKSB7XG4gICAgICAgIGxpc3RlbmVycy5zcGxpY2UobWF0Y2gsIDEpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgRWxlbWVudC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbiAoZWwpIHtcbiAgICBpZiAoZWwgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICBlbC5wYXJlbnROb2RlID0gdGhpc1xuICAgIH1cblxuICAgIHRoaXMuY2hpbGROb2Rlcy5wdXNoKGVsKVxuICAgIHJldHVybiBlbFxuICB9XG5cbiAgRWxlbWVudC5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24gKGVsLCBiZWZvcmUpIHtcbiAgICB2YXIgaW5kZXggPSB0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihiZWZvcmUpXG4gICAgZWwucGFyZW50Tm9kZSA9IHRoaXNcblxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuY2hpbGROb2Rlcy5zcGxpY2UoaW5kZXgsIDAsIGVsKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNoaWxkTm9kZXMucHVzaChlbClcbiAgICB9XG5cbiAgICByZXR1cm4gZWxcbiAgfVxuXG4gIEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUNoaWxkID0gZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgdmFyIHRhcmdldCA9IHRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKGNoaWxkKVxuICAgIHRoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGFyZ2V0LCAxKVxuICB9XG5cbiAgRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvciA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylbMF0gfHwgbnVsbFxuICB9XG5cbiAgRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbCA9IGZ1bmN0aW9uIChzZWxlY3Rvcikge1xuICAgIGlmICghc2VsZWN0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGVub3VnaCBhcmd1bWVudHMnKVxuICAgIH1cblxuICAgIHJldHVybiBxdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yLCB0aGlzKVxuICB9XG5cbiAgRWxlbWVudC5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBmdW5jdGlvbiAobm9kZU5hbWUpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuXG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG1hdGNoZXNcblxuICAgICAgaWYgKG5vZGVOYW1lICE9PSAnKicpIHtcbiAgICAgICAgbWF0Y2hlcyA9IGNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICByZXR1cm4gZWwubm9kZU5hbWUgPT09IG5vZGVOYW1lXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtYXRjaGVzID0gY2hpbGRyZW5cbiAgICAgIH1cblxuICAgICAgdmFyIGNoaWxkTWF0Y2hlcyA9IGNoaWxkcmVuLm1hcChmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgcmV0dXJuIGVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKG5vZGVOYW1lKVxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIG1hdGNoZXMuY29uY2F0LmFwcGx5KG1hdGNoZXMsIGNoaWxkTWF0Y2hlcylcbiAgICB9XG4gIH1cblxuICBFbGVtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50QnlJZCA9IGZ1bmN0aW9uIChpZCkge1xuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW5cblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBtYXRjaCA9IGNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZSgnaWQnKSA9PT0gaWRcbiAgICAgIH0pWzBdXG5cbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICByZXR1cm4gbWF0Y2hcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBjaGlsZE1hdGNoZXMgPSBjaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgcmV0dXJuIGVsLmdldEVsZW1lbnRCeUlkKGlkKVxuICAgICAgICB9KVxuXG4gICAgICAgIHJldHVybiBjaGlsZE1hdGNoZXMuZmlsdGVyKGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgIHJldHVybiBtYXRjaCAhPT0gbnVsbFxuICAgICAgICB9KVswXSB8fCBudWxsXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgRWxlbWVudC5wcm90b3R5cGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5jb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgfVxuXG4gIEVsZW1lbnQucHJvdG90eXBlLmNsb25lTm9kZSA9IGZ1bmN0aW9uIChkZWVwKSB7XG4gICAgLy8gaWYgZGVlcCBpcyBub3QgcHJvdmlkZWQsIGl0IGRlZmF1bHQgdG8gdHJ1ZVxuICAgIGlmIChkZWVwID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlZXAgPSB0cnVlXG4gICAgfVxuICAgIHZhciBlbCA9IG5ldyBFbGVtZW50KHRoaXMubm9kZU5hbWUsIHRoaXMucGFyZW50Tm9kZSlcbiAgICAvLyBjb3B5IG5vZGVUeXBlXG4gICAgaWYgKHRoaXMubm9kZVR5cGUpIHtcbiAgICAgIGVsLm5vZGVUeXBlID0gdGhpcy5ub2RlVHlwZVxuICAgIH1cblxuICAgIHZhciBrXG5cbiAgICAvLyBjb3B5IHRoZSBwcm9wc1xuICAgIGZvciAoayBpbiB0aGlzLnByb3BzKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShrKSAmJiBrICE9PSAncmVmJyAmJiBrICE9PSAnc3R5bGUnKSB7XG4gICAgICAgIGVsLnByb3BzW2tdID0gdGhpcy5wcm9wc1trXVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBjb3B5IHRoZSBzdHlsZXNcbiAgICBmb3IgKGsgaW4gdGhpcy5zdHlsZSkge1xuICAgICAgaWYgKHRoaXMuc3R5bGUuaGFzT3duUHJvcGVydHkoaykgJiYgW1xuICAgICAgICAnc2V0UHJvcGVydHknLFxuICAgICAgICAnZ2V0UHJvcGVydHknLFxuICAgICAgICAnZ2V0UHJvcGVydHlWYWx1ZScsXG4gICAgICAgICdyZW1vdmVQcm9wZXJ0eSdcbiAgICAgIF0uaW5kZXhPZihrKSA9PT0gLTEpIHtcbiAgICAgICAgZWwuc3R5bGVba10gPSB0aGlzLnN0eWxlW2tdXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkZWVwKSB7XG4gICAgICBlbC5jaGlsZE5vZGVzID0gdGhpcy5jaGlsZE5vZGVzLm1hcChmdW5jdGlvbiAoY2hpbGRFbCkge1xuICAgICAgICBpZiAoIWNoaWxkRWwubm9kZVR5cGUpIHtcbiAgICAgICAgICAvLyBJdCdzIGEgUmVhY3QgZWxlbWVudCwgbGV0IFJlYWN0IGNsb25lIGl0XG4gICAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZEVsKVxuICAgICAgICB9XG4gICAgICAgIC8vIGVpdGhlciBFbGVtZW50IG9yIHRydWUgZG9tIGVsZW1lbnRcbiAgICAgICAgY2hpbGRFbCA9IGNoaWxkRWwuY2xvbmVOb2RlKHRydWUpXG4gICAgICAgIC8vIGlmIGEgZmF1eCBkb20gZWxlbWVudCwgbW9kaWZ5IHBhcmVudE5vZGVcbiAgICAgICAgaWYgKGNoaWxkRWwgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICAgICAgY2hpbGRFbC5wYXJlbnROb2RlID0gZWxcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hpbGRFbFxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIGVsXG4gIH1cblxuICBFbGVtZW50LnByb3RvdHlwZS50b1JlYWN0ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgaW5kZXggPSBpbmRleCB8fCAwXG4gICAgdmFyIHByb3BzID0gYXNzaWduKHt9LCB0aGlzLnByb3BzKVxuICAgIHByb3BzLnN0eWxlID0gYXNzaWduKHt9LCBwcm9wcy5zdHlsZSlcblxuICAgIHZhciBvcmlnaW5hbEVsZW1lbnQgPSB0aGlzXG5cbiAgICBmdW5jdGlvbiB1bmlxdWVLZXkgKCkge1xuICAgICAgcmV0dXJuICdmYXV4LWRvbS0nICsgaW5kZXhcbiAgICB9XG5cbiAgICBpZiAoaXNVbmRlZmluZWQocHJvcHMua2V5KSkge1xuICAgICAgcHJvcHMua2V5ID0gdW5pcXVlS2V5KClcbiAgICB9XG5cbiAgICBkZWxldGUgcHJvcHMuc3R5bGUuc2V0UHJvcGVydHlcbiAgICBkZWxldGUgcHJvcHMuc3R5bGUuZ2V0UHJvcGVydHlcbiAgICBkZWxldGUgcHJvcHMuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZVxuICAgIGRlbGV0ZSBwcm9wcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eVxuXG4gICAgYXNzaWduKHByb3BzLCBtYXBWYWx1ZXModGhpcy5ldmVudExpc3RlbmVycywgZnVuY3Rpb24gKGxpc3RlbmVycykge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzeW50aGV0aWNFdmVudCkge1xuICAgICAgICB2YXIgZXZlbnRcblxuICAgICAgICBpZiAoc3ludGhldGljRXZlbnQpIHtcbiAgICAgICAgICBldmVudCA9IHN5bnRoZXRpY0V2ZW50Lm5hdGl2ZUV2ZW50XG4gICAgICAgICAgZXZlbnQuc3ludGhldGljRXZlbnQgPSBzeW50aGV0aWNFdmVudFxuICAgICAgICB9XG5cbiAgICAgICAgbWFwVmFsdWVzKGxpc3RlbmVycywgZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICAgICAgbGlzdGVuZXIuY2FsbChvcmlnaW5hbEVsZW1lbnQsIGV2ZW50KVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pKVxuXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQodGhpcy5ub2RlTmFtZSwgcHJvcHMsIHRoaXMudGV4dCB8fCB0aGlzLmNoaWxkcmVuLm1hcChmdW5jdGlvbiAoZWwsIGkpIHtcbiAgICAgIGlmIChlbCBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsLnRvUmVhY3QoaSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBlbFxuICAgICAgfVxuICAgIH0pKVxuICB9XG5cbiAgRWxlbWVudC5wcm90b3R5cGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24gPSBmdW5jdGlvbiAob3RoZXIpIHtcbiAgICBmdW5jdGlvbiBnZXRGaXJzdE5vZGVCeU9yZGVyIChub2Rlcywgbm9kZU9uZSwgbm9kZVR3bykge1xuICAgICAgcmV0dXJuIG5vZGVzLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBub2RlKSB7XG4gICAgICAgIGlmIChyZXN1bHQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICB9IGVsc2UgaWYgKG5vZGUgPT09IG5vZGVPbmUpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZU9uZVxuICAgICAgICB9IGVsc2UgaWYgKG5vZGUgPT09IG5vZGVUd28pIHtcbiAgICAgICAgICByZXR1cm4gbm9kZVR3b1xuICAgICAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGROb2Rlcykge1xuICAgICAgICAgIHJldHVybiBnZXRGaXJzdE5vZGVCeU9yZGVyKG5vZGUuY2hpbGROb2Rlcywgbm9kZU9uZSwgbm9kZVR3bylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSwgZmFsc2UpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBbmNlc3RvciAoc291cmNlLCB0YXJnZXQpIHtcbiAgICAgIHdoaWxlICh0YXJnZXQucGFyZW50Tm9kZSkge1xuICAgICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZVxuICAgICAgICBpZiAodGFyZ2V0ID09PSBzb3VyY2UpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlaXRoZXJDb250YWlucyAobGVmdCwgcmlnaHQpIHtcbiAgICAgIHJldHVybiBpc0FuY2VzdG9yKGxlZnQsIHJpZ2h0KVxuICAgICAgICA/IEVsZW1lbnQuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZICsgRWxlbWVudC5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkdcbiAgICAgICAgOiBpc0FuY2VzdG9yKHJpZ2h0LCBsZWZ0KVxuICAgICAgICAgID8gRWxlbWVudC5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlOUyArIEVsZW1lbnQuRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HXG4gICAgICAgICAgOiBmYWxzZVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFJvb3ROb2RlIChub2RlKSB7XG4gICAgICB3aGlsZSAobm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGVcbiAgICAgIH1cbiAgICAgIHJldHVybiBub2RlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMgPT09IG90aGVyKSB7XG4gICAgICByZXR1cm4gMFxuICAgIH1cblxuICAgIHZhciByZWZlcmVuY2VSb290ID0gZ2V0Um9vdE5vZGUodGhpcylcbiAgICB2YXIgb3RoZXJSb290ID0gZ2V0Um9vdE5vZGUob3RoZXIpXG5cbiAgICBpZiAocmVmZXJlbmNlUm9vdCAhPT0gb3RoZXJSb290KSB7XG4gICAgICByZXR1cm4gRWxlbWVudC5ET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURURcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0ID0gZWl0aGVyQ29udGFpbnModGhpcywgb3RoZXIpXG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIHZhciBmaXJzdCA9IGdldEZpcnN0Tm9kZUJ5T3JkZXIoW3JlZmVyZW5jZVJvb3RdLCB0aGlzLCBvdGhlcilcbiAgICByZXR1cm4gZmlyc3QgPT09IHRoaXNcbiAgICAgID8gRWxlbWVudC5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkdcbiAgICAgIDogZmlyc3QgPT09IG90aGVyXG4gICAgICAgID8gRWxlbWVudC5ET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkdcbiAgICAgICAgOiBFbGVtZW50LkRPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRFxuICB9XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRWxlbWVudC5wcm90b3R5cGUsIHtcbiAgICBuZXh0U2libGluZzoge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzaWJsaW5ncyA9IHRoaXMucGFyZW50Tm9kZS5jaGlsZHJlblxuICAgICAgICB2YXIgbWUgPSBzaWJsaW5ncy5pbmRleE9mKHRoaXMpXG4gICAgICAgIHJldHVybiBzaWJsaW5nc1ttZSArIDFdXG4gICAgICB9XG4gICAgfSxcbiAgICBwcmV2aW91c1NpYmxpbmc6IHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc2libGluZ3MgPSB0aGlzLnBhcmVudE5vZGUuY2hpbGRyZW5cbiAgICAgICAgdmFyIG1lID0gc2libGluZ3MuaW5kZXhPZih0aGlzKVxuICAgICAgICByZXR1cm4gc2libGluZ3NbbWUgLSAxXVxuICAgICAgfVxuICAgIH0sXG4gICAgaW5uZXJIVE1MOiB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dFxuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dFxuICAgICAgfVxuICAgIH0sXG4gICAgdGV4dENvbnRlbnQ6IHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICB0aGlzLnRleHQgPSB0ZXh0XG4gICAgICB9XG4gICAgfSxcbiAgICBjaGlsZHJlbjoge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFNvIGZhciBub2RlcyBjcmVhdGVkIGJ5IHRoaXMgbGlicmFyeSBhcmUgYWxsIG9mIG5vZGVUeXBlIDEgKGVsZW1lbnRzKSxcbiAgICAgICAgLy8gYnV0IHRoaXMgY291bGQgY2hhbmdlIGluIHRoZSBmdXR1cmUuXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkTm9kZXMuZmlsdGVyKGZ1bmN0aW9uIChlbCkge1xuICAgICAgICAgIGlmICghZWwubm9kZVR5cGUpIHtcbiAgICAgICAgICAgIC8vIEl0J3MgYSBSZWFjdCBlbGVtZW50LCB3ZSBhbHdheXMgYWRkIGl0XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEl0J3MgYSBIVE1MIG5vZGUuIFdlIHdhbnQgdG8gZmlsdGVyIHRvIGhhdmUgb25seSBub2RlcyB3aXRoIHR5cGUgMVxuICAgICAgICAgIHJldHVybiBlbC5ub2RlVHlwZSA9PT0gMVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICAvLyBUaGVzZSBOUyBtZXRob2RzIGFyZSBjYWxsZWQgYnkgdGhpbmdzIGxpa2UgRDMgaWYgaXQgc3BvdHMgYSBuYW1lc3BhY2UuXG4gIC8vIExpa2UgeGxpbms6aHJlZi4gSSBkb24ndCBjYXJlIGFib3V0IG5hbWVzcGFjZXMsIHNvIHRoZXNlIGZ1bmN0aW9ucyBoYXZlIE5TIGFsaWFzZXMgY3JlYXRlZC5cbiAgdmFyIG5hbWVzcGFjZU1ldGhvZHMgPSBbXG4gICAgJ3NldEF0dHJpYnV0ZScsXG4gICAgJ2dldEF0dHJpYnV0ZScsXG4gICAgJ2dldEF0dHJpYnV0ZU5vZGUnLFxuICAgICdyZW1vdmVBdHRyaWJ1dGUnLFxuICAgICdnZXRFbGVtZW50c0J5VGFnTmFtZScsXG4gICAgJ2dldEVsZW1lbnRCeUlkJ1xuICBdXG5cbiAgbmFtZXNwYWNlTWV0aG9kcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFyIGZuID0gRWxlbWVudC5wcm90b3R5cGVbbmFtZV1cbiAgICBFbGVtZW50LnByb3RvdHlwZVtuYW1lICsgJ05TJ10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSlcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIEVsZW1lbnRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlbGVtZW50XG4iLCJmdW5jdGlvbiB3aW5kb3cgKCkge1xuICB2YXIgV2luZG93ID0ge1xuICAgIGdldENvbXB1dGVkU3R5bGU6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBnZXRQcm9wZXJ0eVZhbHVlOiBub2RlLnN0eWxlLmdldFByb3BlcnR5XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFdpbmRvd1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdpbmRvd1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxuLy8gLS0gSW5saW5lZCBmcm9tIGZianMgLS1cblxudmFyIGVtcHR5T2JqZWN0ID0ge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIE9iamVjdC5mcmVlemUoZW1wdHlPYmplY3QpO1xufVxuXG52YXIgdmFsaWRhdGVGb3JtYXQgPSBmdW5jdGlvbiB2YWxpZGF0ZUZvcm1hdChmb3JtYXQpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YWxpZGF0ZUZvcm1hdCA9IGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0KGZvcm1hdCkge1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhcmlhbnQgcmVxdWlyZXMgYW4gZXJyb3IgbWVzc2FnZSBhcmd1bWVudCcpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gX2ludmFyaWFudChjb25kaXRpb24sIGZvcm1hdCwgYSwgYiwgYywgZCwgZSwgZikge1xuICB2YWxpZGF0ZUZvcm1hdChmb3JtYXQpO1xuXG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdmFyIGVycm9yO1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ01pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50ICcgKyAnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGFyZ3MgPSBbYSwgYiwgYywgZCwgZSwgZl07XG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107XG4gICAgICB9KSk7XG4gICAgICBlcnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgIH1cblxuICAgIGVycm9yLmZyYW1lc1RvUG9wID0gMTsgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCBpbnZhcmlhbnQncyBvd24gZnJhbWVcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG52YXIgd2FybmluZyA9IGZ1bmN0aW9uKCl7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uIHByaW50V2FybmluZyhmb3JtYXQpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTtcbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xuXG4gIHdhcm5pbmcgPSBmdW5jdGlvbiB3YXJuaW5nKGNvbmRpdGlvbiwgZm9ybWF0KSB7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2B3YXJuaW5nKGNvbmRpdGlvbiwgZm9ybWF0LCAuLi5hcmdzKWAgcmVxdWlyZXMgYSB3YXJuaW5nICcgKyAnbWVzc2FnZSBhcmd1bWVudCcpO1xuICAgIH1cblxuICAgIGlmIChmb3JtYXQuaW5kZXhPZignRmFpbGVkIENvbXBvc2l0ZSBwcm9wVHlwZTogJykgPT09IDApIHtcbiAgICAgIHJldHVybjsgLy8gSWdub3JlIENvbXBvc2l0ZUNvbXBvbmVudCBwcm9wdHlwZSBjaGVjay5cbiAgICB9XG5cbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIgPiAyID8gX2xlbjIgLSAyIDogMCksIF9rZXkyID0gMjsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyIC0gMl0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICBwcmludFdhcm5pbmcuYXBwbHkodW5kZWZpbmVkLCBbZm9ybWF0XS5jb25jYXQoYXJncykpO1xuICAgIH1cbiAgfTtcbn1cblxuLy8gLy0tIElubGluZWQgZnJvbSBmYmpzIC0tXG5cbnZhciBNSVhJTlNfS0VZID0gJ21peGlucyc7XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBhbGxvdyB0aGUgY3JlYXRpb24gb2YgYW5vbnltb3VzIGZ1bmN0aW9ucyB3aGljaCBkbyBub3Rcbi8vIGhhdmUgLm5hbWUgc2V0IHRvIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSBiZWluZyBhc3NpZ25lZCB0by5cbmZ1bmN0aW9uIGlkZW50aXR5KGZuKSB7XG4gIHJldHVybiBmbjtcbn1cblxudmFyIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSB7XG4gICAgcHJvcDogJ3Byb3AnLFxuICAgIGNvbnRleHQ6ICdjb250ZXh0JyxcbiAgICBjaGlsZENvbnRleHQ6ICdjaGlsZCBjb250ZXh0J1xuICB9O1xufSBlbHNlIHtcbiAgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSB7fTtcbn1cblxuZnVuY3Rpb24gZmFjdG9yeShSZWFjdENvbXBvbmVudCwgaXNWYWxpZEVsZW1lbnQsIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlKSB7XG4gIC8qKlxuICAgKiBQb2xpY2llcyB0aGF0IGRlc2NyaWJlIG1ldGhvZHMgaW4gYFJlYWN0Q2xhc3NJbnRlcmZhY2VgLlxuICAgKi9cblxuICB2YXIgaW5qZWN0ZWRNaXhpbnMgPSBbXTtcblxuICAvKipcbiAgICogQ29tcG9zaXRlIGNvbXBvbmVudHMgYXJlIGhpZ2hlci1sZXZlbCBjb21wb25lbnRzIHRoYXQgY29tcG9zZSBvdGhlciBjb21wb3NpdGVcbiAgICogb3IgaG9zdCBjb21wb25lbnRzLlxuICAgKlxuICAgKiBUbyBjcmVhdGUgYSBuZXcgdHlwZSBvZiBgUmVhY3RDbGFzc2AsIHBhc3MgYSBzcGVjaWZpY2F0aW9uIG9mXG4gICAqIHlvdXIgbmV3IGNsYXNzIHRvIGBSZWFjdC5jcmVhdGVDbGFzc2AuIFRoZSBvbmx5IHJlcXVpcmVtZW50IG9mIHlvdXIgY2xhc3NcbiAgICogc3BlY2lmaWNhdGlvbiBpcyB0aGF0IHlvdSBpbXBsZW1lbnQgYSBgcmVuZGVyYCBtZXRob2QuXG4gICAqXG4gICAqICAgdmFyIE15Q29tcG9uZW50ID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICogICAgICAgcmV0dXJuIDxkaXY+SGVsbG8gV29ybGQ8L2Rpdj47XG4gICAqICAgICB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqIFRoZSBjbGFzcyBzcGVjaWZpY2F0aW9uIHN1cHBvcnRzIGEgc3BlY2lmaWMgcHJvdG9jb2wgb2YgbWV0aG9kcyB0aGF0IGhhdmVcbiAgICogc3BlY2lhbCBtZWFuaW5nIChlLmcuIGByZW5kZXJgKS4gU2VlIGBSZWFjdENsYXNzSW50ZXJmYWNlYCBmb3JcbiAgICogbW9yZSB0aGUgY29tcHJlaGVuc2l2ZSBwcm90b2NvbC4gQW55IG90aGVyIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgaW4gdGhlXG4gICAqIGNsYXNzIHNwZWNpZmljYXRpb24gd2lsbCBiZSBhdmFpbGFibGUgb24gdGhlIHByb3RvdHlwZS5cbiAgICpcbiAgICogQGludGVyZmFjZSBSZWFjdENsYXNzSW50ZXJmYWNlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdmFyIFJlYWN0Q2xhc3NJbnRlcmZhY2UgPSB7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2YgTWl4aW4gb2JqZWN0cyB0byBpbmNsdWRlIHdoZW4gZGVmaW5pbmcgeW91ciBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7YXJyYXl9XG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgbWl4aW5zOiAnREVGSU5FX01BTlknLFxuXG4gICAgLyoqXG4gICAgICogQW4gb2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllcyBhbmQgbWV0aG9kcyB0aGF0IHNob3VsZCBiZSBkZWZpbmVkIG9uXG4gICAgICogdGhlIGNvbXBvbmVudCdzIGNvbnN0cnVjdG9yIGluc3RlYWQgb2YgaXRzIHByb3RvdHlwZSAoc3RhdGljIG1ldGhvZHMpLlxuICAgICAqXG4gICAgICogQHR5cGUge29iamVjdH1cbiAgICAgKiBAb3B0aW9uYWxcbiAgICAgKi9cbiAgICBzdGF0aWNzOiAnREVGSU5FX01BTlknLFxuXG4gICAgLyoqXG4gICAgICogRGVmaW5pdGlvbiBvZiBwcm9wIHR5cGVzIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtvYmplY3R9XG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgcHJvcFR5cGVzOiAnREVGSU5FX01BTlknLFxuXG4gICAgLyoqXG4gICAgICogRGVmaW5pdGlvbiBvZiBjb250ZXh0IHR5cGVzIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtvYmplY3R9XG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgY29udGV4dFR5cGVzOiAnREVGSU5FX01BTlknLFxuXG4gICAgLyoqXG4gICAgICogRGVmaW5pdGlvbiBvZiBjb250ZXh0IHR5cGVzIHRoaXMgY29tcG9uZW50IHNldHMgZm9yIGl0cyBjaGlsZHJlbi5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtvYmplY3R9XG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgY2hpbGRDb250ZXh0VHlwZXM6ICdERUZJTkVfTUFOWScsXG5cbiAgICAvLyA9PT09IERlZmluaXRpb24gbWV0aG9kcyA9PT09XG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLiBWYWx1ZXMgaW4gdGhlIG1hcHBpbmcgd2lsbCBiZSBzZXQgb25cbiAgICAgKiBgdGhpcy5wcm9wc2AgaWYgdGhhdCBwcm9wIGlzIG5vdCBzcGVjaWZpZWQgKGkuZS4gdXNpbmcgYW4gYGluYCBjaGVjaykuXG4gICAgICpcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIGJlZm9yZSBgZ2V0SW5pdGlhbFN0YXRlYCBhbmQgdGhlcmVmb3JlIGNhbm5vdCByZWx5XG4gICAgICogb24gYHRoaXMuc3RhdGVgIG9yIHVzZSBgdGhpcy5zZXRTdGF0ZWAuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9XG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgZ2V0RGVmYXVsdFByb3BzOiAnREVGSU5FX01BTllfTUVSR0VEJyxcblxuICAgIC8qKlxuICAgICAqIEludm9rZWQgb25jZSBiZWZvcmUgdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdXNlZFxuICAgICAqIGFzIHRoZSBpbml0aWFsIHZhbHVlIG9mIGB0aGlzLnN0YXRlYC5cbiAgICAgKlxuICAgICAqICAgZ2V0SW5pdGlhbFN0YXRlOiBmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgcmV0dXJuIHtcbiAgICAgKiAgICAgICBpc09uOiBmYWxzZSxcbiAgICAgKiAgICAgICBmb29CYXo6IG5ldyBCYXpGb28oKVxuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9XG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgZ2V0SW5pdGlhbFN0YXRlOiAnREVGSU5FX01BTllfTUVSR0VEJyxcblxuICAgIC8qKlxuICAgICAqIEByZXR1cm4ge29iamVjdH1cbiAgICAgKiBAb3B0aW9uYWxcbiAgICAgKi9cbiAgICBnZXRDaGlsZENvbnRleHQ6ICdERUZJTkVfTUFOWV9NRVJHRUQnLFxuXG4gICAgLyoqXG4gICAgICogVXNlcyBwcm9wcyBmcm9tIGB0aGlzLnByb3BzYCBhbmQgc3RhdGUgZnJvbSBgdGhpcy5zdGF0ZWAgdG8gcmVuZGVyIHRoZVxuICAgICAqIHN0cnVjdHVyZSBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogTm8gZ3VhcmFudGVlcyBhcmUgbWFkZSBhYm91dCB3aGVuIG9yIGhvdyBvZnRlbiB0aGlzIG1ldGhvZCBpcyBpbnZva2VkLCBzb1xuICAgICAqIGl0IG11c3Qgbm90IGhhdmUgc2lkZSBlZmZlY3RzLlxuICAgICAqXG4gICAgICogICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICAgICAqICAgICB2YXIgbmFtZSA9IHRoaXMucHJvcHMubmFtZTtcbiAgICAgKiAgICAgcmV0dXJuIDxkaXY+SGVsbG8sIHtuYW1lfSE8L2Rpdj47XG4gICAgICogICB9XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtSZWFjdENvbXBvbmVudH1cbiAgICAgKiBAcmVxdWlyZWRcbiAgICAgKi9cbiAgICByZW5kZXI6ICdERUZJTkVfT05DRScsXG5cbiAgICAvLyA9PT09IERlbGVnYXRlIG1ldGhvZHMgPT09PVxuXG4gICAgLyoqXG4gICAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgaW5pdGlhbGx5IGNyZWF0ZWQgYW5kIGFib3V0IHRvIGJlIG1vdW50ZWQuXG4gICAgICogVGhpcyBtYXkgaGF2ZSBzaWRlIGVmZmVjdHMsIGJ1dCBhbnkgZXh0ZXJuYWwgc3Vic2NyaXB0aW9ucyBvciBkYXRhIGNyZWF0ZWRcbiAgICAgKiBieSB0aGlzIG1ldGhvZCBtdXN0IGJlIGNsZWFuZWQgdXAgaW4gYGNvbXBvbmVudFdpbGxVbm1vdW50YC5cbiAgICAgKlxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGNvbXBvbmVudFdpbGxNb3VudDogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50IGhhcyBiZWVuIG1vdW50ZWQgYW5kIGhhcyBhIERPTSByZXByZXNlbnRhdGlvbi5cbiAgICAgKiBIb3dldmVyLCB0aGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCB0aGUgRE9NIG5vZGUgaXMgaW4gdGhlIGRvY3VtZW50LlxuICAgICAqXG4gICAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gb3BlcmF0ZSBvbiB0aGUgRE9NIHdoZW4gdGhlIGNvbXBvbmVudCBoYXNcbiAgICAgKiBiZWVuIG1vdW50ZWQgKGluaXRpYWxpemVkIGFuZCByZW5kZXJlZCkgZm9yIHRoZSBmaXJzdCB0aW1lLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtET01FbGVtZW50fSByb290Tm9kZSBET00gZWxlbWVudCByZXByZXNlbnRpbmcgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAb3B0aW9uYWxcbiAgICAgKi9cbiAgICBjb21wb25lbnREaWRNb3VudDogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIEludm9rZWQgYmVmb3JlIHRoZSBjb21wb25lbnQgcmVjZWl2ZXMgbmV3IHByb3BzLlxuICAgICAqXG4gICAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gcmVhY3QgdG8gYSBwcm9wIHRyYW5zaXRpb24gYnkgdXBkYXRpbmcgdGhlXG4gICAgICogc3RhdGUgdXNpbmcgYHRoaXMuc2V0U3RhdGVgLiBDdXJyZW50IHByb3BzIGFyZSBhY2Nlc3NlZCB2aWEgYHRoaXMucHJvcHNgLlxuICAgICAqXG4gICAgICogICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzOiBmdW5jdGlvbihuZXh0UHJvcHMsIG5leHRDb250ZXh0KSB7XG4gICAgICogICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAqICAgICAgIGxpa2VzSW5jcmVhc2luZzogbmV4dFByb3BzLmxpa2VDb3VudCA+IHRoaXMucHJvcHMubGlrZUNvdW50XG4gICAgICogICAgIH0pO1xuICAgICAqICAgfVxuICAgICAqXG4gICAgICogTk9URTogVGhlcmUgaXMgbm8gZXF1aXZhbGVudCBgY29tcG9uZW50V2lsbFJlY2VpdmVTdGF0ZWAuIEFuIGluY29taW5nIHByb3BcbiAgICAgKiB0cmFuc2l0aW9uIG1heSBjYXVzZSBhIHN0YXRlIGNoYW5nZSwgYnV0IHRoZSBvcHBvc2l0ZSBpcyBub3QgdHJ1ZS4gSWYgeW91XG4gICAgICogbmVlZCBpdCwgeW91IGFyZSBwcm9iYWJseSBsb29raW5nIGZvciBgY29tcG9uZW50V2lsbFVwZGF0ZWAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gbmV4dFByb3BzXG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wczogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIEludm9rZWQgd2hpbGUgZGVjaWRpbmcgaWYgdGhlIGNvbXBvbmVudCBzaG91bGQgYmUgdXBkYXRlZCBhcyBhIHJlc3VsdCBvZlxuICAgICAqIHJlY2VpdmluZyBuZXcgcHJvcHMsIHN0YXRlIGFuZC9vciBjb250ZXh0LlxuICAgICAqXG4gICAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gYHJldHVybiBmYWxzZWAgd2hlbiB5b3UncmUgY2VydGFpbiB0aGF0IHRoZVxuICAgICAqIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBwcm9wcy9zdGF0ZS9jb250ZXh0IHdpbGwgbm90IHJlcXVpcmUgYSBjb21wb25lbnRcbiAgICAgKiB1cGRhdGUuXG4gICAgICpcbiAgICAgKiAgIHNob3VsZENvbXBvbmVudFVwZGF0ZTogZnVuY3Rpb24obmV4dFByb3BzLCBuZXh0U3RhdGUsIG5leHRDb250ZXh0KSB7XG4gICAgICogICAgIHJldHVybiAhZXF1YWwobmV4dFByb3BzLCB0aGlzLnByb3BzKSB8fFxuICAgICAqICAgICAgICFlcXVhbChuZXh0U3RhdGUsIHRoaXMuc3RhdGUpIHx8XG4gICAgICogICAgICAgIWVxdWFsKG5leHRDb250ZXh0LCB0aGlzLmNvbnRleHQpO1xuICAgICAqICAgfVxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG5leHRQcm9wc1xuICAgICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dFN0YXRlXG4gICAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0Q29udGV4dFxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGNvbXBvbmVudCBzaG91bGQgdXBkYXRlLlxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIHNob3VsZENvbXBvbmVudFVwZGF0ZTogJ0RFRklORV9PTkNFJyxcblxuICAgIC8qKlxuICAgICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGFib3V0IHRvIHVwZGF0ZSBkdWUgdG8gYSB0cmFuc2l0aW9uIGZyb21cbiAgICAgKiBgdGhpcy5wcm9wc2AsIGB0aGlzLnN0YXRlYCBhbmQgYHRoaXMuY29udGV4dGAgdG8gYG5leHRQcm9wc2AsIGBuZXh0U3RhdGVgXG4gICAgICogYW5kIGBuZXh0Q29udGV4dGAuXG4gICAgICpcbiAgICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBwZXJmb3JtIHByZXBhcmF0aW9uIGJlZm9yZSBhbiB1cGRhdGUgb2NjdXJzLlxuICAgICAqXG4gICAgICogTk9URTogWW91ICoqY2Fubm90KiogdXNlIGB0aGlzLnNldFN0YXRlKClgIGluIHRoaXMgbWV0aG9kLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG5leHRQcm9wc1xuICAgICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dFN0YXRlXG4gICAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0Q29udGV4dFxuICAgICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICAgKiBAb3B0aW9uYWxcbiAgICAgKi9cbiAgICBjb21wb25lbnRXaWxsVXBkYXRlOiAnREVGSU5FX01BTlknLFxuXG4gICAgLyoqXG4gICAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQncyBET00gcmVwcmVzZW50YXRpb24gaGFzIGJlZW4gdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIG9wZXJhdGUgb24gdGhlIERPTSB3aGVuIHRoZSBjb21wb25lbnQgaGFzXG4gICAgICogYmVlbiB1cGRhdGVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IHByZXZQcm9wc1xuICAgICAqIEBwYXJhbSB7P29iamVjdH0gcHJldlN0YXRlXG4gICAgICogQHBhcmFtIHs/b2JqZWN0fSBwcmV2Q29udGV4dFxuICAgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gcm9vdE5vZGUgRE9NIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQuXG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgY29tcG9uZW50RGlkVXBkYXRlOiAnREVGSU5FX01BTlknLFxuXG4gICAgLyoqXG4gICAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgYWJvdXQgdG8gYmUgcmVtb3ZlZCBmcm9tIGl0cyBwYXJlbnQgYW5kIGhhdmVcbiAgICAgKiBpdHMgRE9NIHJlcHJlc2VudGF0aW9uIGRlc3Ryb3llZC5cbiAgICAgKlxuICAgICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIGRlYWxsb2NhdGUgYW55IGV4dGVybmFsIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIE5PVEU6IFRoZXJlIGlzIG5vIGBjb21wb25lbnREaWRVbm1vdW50YCBzaW5jZSB5b3VyIGNvbXBvbmVudCB3aWxsIGhhdmUgYmVlblxuICAgICAqIGRlc3Ryb3llZCBieSB0aGF0IHBvaW50LlxuICAgICAqXG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgY29tcG9uZW50V2lsbFVubW91bnQ6ICdERUZJTkVfTUFOWScsXG5cbiAgICAvKipcbiAgICAgKiBSZXBsYWNlbWVudCBmb3IgKGRlcHJlY2F0ZWQpIGBjb21wb25lbnRXaWxsTW91bnRgLlxuICAgICAqXG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudDogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIFJlcGxhY2VtZW50IGZvciAoZGVwcmVjYXRlZCkgYGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNgLlxuICAgICAqXG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM6ICdERUZJTkVfTUFOWScsXG5cbiAgICAvKipcbiAgICAgKiBSZXBsYWNlbWVudCBmb3IgKGRlcHJlY2F0ZWQpIGBjb21wb25lbnRXaWxsVXBkYXRlYC5cbiAgICAgKlxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlOiAnREVGSU5FX01BTlknLFxuXG4gICAgLy8gPT09PSBBZHZhbmNlZCBtZXRob2RzID09PT1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGNvbXBvbmVudCdzIGN1cnJlbnRseSBtb3VudGVkIERPTSByZXByZXNlbnRhdGlvbi5cbiAgICAgKlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoaXMgaW1wbGVtZW50cyBSZWFjdCdzIHJlbmRlcmluZyBhbmQgcmVjb25jaWxpYXRpb24gYWxnb3JpdGhtLlxuICAgICAqIFNvcGhpc3RpY2F0ZWQgY2xpZW50cyBtYXkgd2lzaCB0byBvdmVycmlkZSB0aGlzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIEBvdmVycmlkYWJsZVxuICAgICAqL1xuICAgIHVwZGF0ZUNvbXBvbmVudDogJ09WRVJSSURFX0JBU0UnXG4gIH07XG5cbiAgLyoqXG4gICAqIFNpbWlsYXIgdG8gUmVhY3RDbGFzc0ludGVyZmFjZSBidXQgZm9yIHN0YXRpYyBtZXRob2RzLlxuICAgKi9cbiAgdmFyIFJlYWN0Q2xhc3NTdGF0aWNJbnRlcmZhY2UgPSB7XG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgaW52b2tlZCBhZnRlciBhIGNvbXBvbmVudCBpcyBpbnN0YW50aWF0ZWQgYW5kIHdoZW4gaXRcbiAgICAgKiByZWNlaXZlcyBuZXcgcHJvcHMuIFJldHVybiBhbiBvYmplY3QgdG8gdXBkYXRlIHN0YXRlIGluIHJlc3BvbnNlIHRvXG4gICAgICogcHJvcCBjaGFuZ2VzLiBSZXR1cm4gbnVsbCB0byBpbmRpY2F0ZSBubyBjaGFuZ2UgdG8gc3RhdGUuXG4gICAgICpcbiAgICAgKiBJZiBhbiBvYmplY3QgaXMgcmV0dXJuZWQsIGl0cyBrZXlzIHdpbGwgYmUgbWVyZ2VkIGludG8gdGhlIGV4aXN0aW5nIHN0YXRlLlxuICAgICAqXG4gICAgICogQHJldHVybiB7b2JqZWN0IHx8IG51bGx9XG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiAnREVGSU5FX01BTllfTUVSR0VEJ1xuICB9O1xuXG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gY2xhc3Mgc3BlY2lmaWNhdGlvbiBrZXlzIHRvIHNwZWNpYWwgcHJvY2Vzc2luZyBmdW5jdGlvbnMuXG4gICAqXG4gICAqIEFsdGhvdWdoIHRoZXNlIGFyZSBkZWNsYXJlZCBsaWtlIGluc3RhbmNlIHByb3BlcnRpZXMgaW4gdGhlIHNwZWNpZmljYXRpb25cbiAgICogd2hlbiBkZWZpbmluZyBjbGFzc2VzIHVzaW5nIGBSZWFjdC5jcmVhdGVDbGFzc2AsIHRoZXkgYXJlIGFjdHVhbGx5IHN0YXRpY1xuICAgKiBhbmQgYXJlIGFjY2Vzc2libGUgb24gdGhlIGNvbnN0cnVjdG9yIGluc3RlYWQgb2YgdGhlIHByb3RvdHlwZS4gRGVzcGl0ZVxuICAgKiBiZWluZyBzdGF0aWMsIHRoZXkgbXVzdCBiZSBkZWZpbmVkIG91dHNpZGUgb2YgdGhlIFwic3RhdGljc1wiIGtleSB1bmRlclxuICAgKiB3aGljaCBhbGwgb3RoZXIgc3RhdGljIG1ldGhvZHMgYXJlIGRlZmluZWQuXG4gICAqL1xuICB2YXIgUkVTRVJWRURfU1BFQ19LRVlTID0ge1xuICAgIGRpc3BsYXlOYW1lOiBmdW5jdGlvbihDb25zdHJ1Y3RvciwgZGlzcGxheU5hbWUpIHtcbiAgICAgIENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgfSxcbiAgICBtaXhpbnM6IGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBtaXhpbnMpIHtcbiAgICAgIGlmIChtaXhpbnMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaXhpbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBtaXhTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3RvciwgbWl4aW5zW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgY2hpbGRDb250ZXh0VHlwZXM6IGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBjaGlsZENvbnRleHRUeXBlcykge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgdmFsaWRhdGVUeXBlRGVmKENvbnN0cnVjdG9yLCBjaGlsZENvbnRleHRUeXBlcywgJ2NoaWxkQ29udGV4dCcpO1xuICAgICAgfVxuICAgICAgQ29uc3RydWN0b3IuY2hpbGRDb250ZXh0VHlwZXMgPSBfYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAgQ29uc3RydWN0b3IuY2hpbGRDb250ZXh0VHlwZXMsXG4gICAgICAgIGNoaWxkQ29udGV4dFR5cGVzXG4gICAgICApO1xuICAgIH0sXG4gICAgY29udGV4dFR5cGVzOiBmdW5jdGlvbihDb25zdHJ1Y3RvciwgY29udGV4dFR5cGVzKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB2YWxpZGF0ZVR5cGVEZWYoQ29uc3RydWN0b3IsIGNvbnRleHRUeXBlcywgJ2NvbnRleHQnKTtcbiAgICAgIH1cbiAgICAgIENvbnN0cnVjdG9yLmNvbnRleHRUeXBlcyA9IF9hc3NpZ24oXG4gICAgICAgIHt9LFxuICAgICAgICBDb25zdHJ1Y3Rvci5jb250ZXh0VHlwZXMsXG4gICAgICAgIGNvbnRleHRUeXBlc1xuICAgICAgKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNwZWNpYWwgY2FzZSBnZXREZWZhdWx0UHJvcHMgd2hpY2ggc2hvdWxkIG1vdmUgaW50byBzdGF0aWNzIGJ1dCByZXF1aXJlc1xuICAgICAqIGF1dG9tYXRpYyBtZXJnaW5nLlxuICAgICAqL1xuICAgIGdldERlZmF1bHRQcm9wczogZnVuY3Rpb24oQ29uc3RydWN0b3IsIGdldERlZmF1bHRQcm9wcykge1xuICAgICAgaWYgKENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcykge1xuICAgICAgICBDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMgPSBjcmVhdGVNZXJnZWRSZXN1bHRGdW5jdGlvbihcbiAgICAgICAgICBDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMsXG4gICAgICAgICAgZ2V0RGVmYXVsdFByb3BzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMgPSBnZXREZWZhdWx0UHJvcHM7XG4gICAgICB9XG4gICAgfSxcbiAgICBwcm9wVHlwZXM6IGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBwcm9wVHlwZXMpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhbGlkYXRlVHlwZURlZihDb25zdHJ1Y3RvciwgcHJvcFR5cGVzLCAncHJvcCcpO1xuICAgICAgfVxuICAgICAgQ29uc3RydWN0b3IucHJvcFR5cGVzID0gX2Fzc2lnbih7fSwgQ29uc3RydWN0b3IucHJvcFR5cGVzLCBwcm9wVHlwZXMpO1xuICAgIH0sXG4gICAgc3RhdGljczogZnVuY3Rpb24oQ29uc3RydWN0b3IsIHN0YXRpY3MpIHtcbiAgICAgIG1peFN0YXRpY1NwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBzdGF0aWNzKTtcbiAgICB9LFxuICAgIGF1dG9iaW5kOiBmdW5jdGlvbigpIHt9XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsaWRhdGVUeXBlRGVmKENvbnN0cnVjdG9yLCB0eXBlRGVmLCBsb2NhdGlvbikge1xuICAgIGZvciAodmFyIHByb3BOYW1lIGluIHR5cGVEZWYpIHtcbiAgICAgIGlmICh0eXBlRGVmLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICAvLyB1c2UgYSB3YXJuaW5nIGluc3RlYWQgb2YgYW4gX2ludmFyaWFudCBzbyBjb21wb25lbnRzXG4gICAgICAgIC8vIGRvbid0IHNob3cgdXAgaW4gcHJvZCBidXQgb25seSBpbiBfX0RFVl9fXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgd2FybmluZyhcbiAgICAgICAgICAgIHR5cGVvZiB0eXBlRGVmW3Byb3BOYW1lXSA9PT0gJ2Z1bmN0aW9uJyxcbiAgICAgICAgICAgICclczogJXMgdHlwZSBgJXNgIGlzIGludmFsaWQ7IGl0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tICcgK1xuICAgICAgICAgICAgICAnUmVhY3QuUHJvcFR5cGVzLicsXG4gICAgICAgICAgICBDb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCAnUmVhY3RDbGFzcycsXG4gICAgICAgICAgICBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl0sXG4gICAgICAgICAgICBwcm9wTmFtZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB2YWxpZGF0ZU1ldGhvZE92ZXJyaWRlKGlzQWxyZWFkeURlZmluZWQsIG5hbWUpIHtcbiAgICB2YXIgc3BlY1BvbGljeSA9IFJlYWN0Q2xhc3NJbnRlcmZhY2UuaGFzT3duUHJvcGVydHkobmFtZSlcbiAgICAgID8gUmVhY3RDbGFzc0ludGVyZmFjZVtuYW1lXVxuICAgICAgOiBudWxsO1xuXG4gICAgLy8gRGlzYWxsb3cgb3ZlcnJpZGluZyBvZiBiYXNlIGNsYXNzIG1ldGhvZHMgdW5sZXNzIGV4cGxpY2l0bHkgYWxsb3dlZC5cbiAgICBpZiAoUmVhY3RDbGFzc01peGluLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICBfaW52YXJpYW50KFxuICAgICAgICBzcGVjUG9saWN5ID09PSAnT1ZFUlJJREVfQkFTRScsXG4gICAgICAgICdSZWFjdENsYXNzSW50ZXJmYWNlOiBZb3UgYXJlIGF0dGVtcHRpbmcgdG8gb3ZlcnJpZGUgJyArXG4gICAgICAgICAgJ2Alc2AgZnJvbSB5b3VyIGNsYXNzIHNwZWNpZmljYXRpb24uIEVuc3VyZSB0aGF0IHlvdXIgbWV0aG9kIG5hbWVzICcgK1xuICAgICAgICAgICdkbyBub3Qgb3ZlcmxhcCB3aXRoIFJlYWN0IG1ldGhvZHMuJyxcbiAgICAgICAgbmFtZVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBEaXNhbGxvdyBkZWZpbmluZyBtZXRob2RzIG1vcmUgdGhhbiBvbmNlIHVubGVzcyBleHBsaWNpdGx5IGFsbG93ZWQuXG4gICAgaWYgKGlzQWxyZWFkeURlZmluZWQpIHtcbiAgICAgIF9pbnZhcmlhbnQoXG4gICAgICAgIHNwZWNQb2xpY3kgPT09ICdERUZJTkVfTUFOWScgfHwgc3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZX01FUkdFRCcsXG4gICAgICAgICdSZWFjdENsYXNzSW50ZXJmYWNlOiBZb3UgYXJlIGF0dGVtcHRpbmcgdG8gZGVmaW5lICcgK1xuICAgICAgICAgICdgJXNgIG9uIHlvdXIgY29tcG9uZW50IG1vcmUgdGhhbiBvbmNlLiBUaGlzIGNvbmZsaWN0IG1heSBiZSBkdWUgJyArXG4gICAgICAgICAgJ3RvIGEgbWl4aW4uJyxcbiAgICAgICAgbmFtZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWl4aW4gaGVscGVyIHdoaWNoIGhhbmRsZXMgcG9saWN5IHZhbGlkYXRpb24gYW5kIHJlc2VydmVkXG4gICAqIHNwZWNpZmljYXRpb24ga2V5cyB3aGVuIGJ1aWxkaW5nIFJlYWN0IGNsYXNzZXMuXG4gICAqL1xuICBmdW5jdGlvbiBtaXhTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwgc3BlYykge1xuICAgIGlmICghc3BlYykge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgdmFyIHR5cGVvZlNwZWMgPSB0eXBlb2Ygc3BlYztcbiAgICAgICAgdmFyIGlzTWl4aW5WYWxpZCA9IHR5cGVvZlNwZWMgPT09ICdvYmplY3QnICYmIHNwZWMgIT09IG51bGw7XG5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB3YXJuaW5nKFxuICAgICAgICAgICAgaXNNaXhpblZhbGlkLFxuICAgICAgICAgICAgXCIlczogWW91J3JlIGF0dGVtcHRpbmcgdG8gaW5jbHVkZSBhIG1peGluIHRoYXQgaXMgZWl0aGVyIG51bGwgXCIgK1xuICAgICAgICAgICAgICAnb3Igbm90IGFuIG9iamVjdC4gQ2hlY2sgdGhlIG1peGlucyBpbmNsdWRlZCBieSB0aGUgY29tcG9uZW50LCAnICtcbiAgICAgICAgICAgICAgJ2FzIHdlbGwgYXMgYW55IG1peGlucyB0aGV5IGluY2x1ZGUgdGhlbXNlbHZlcy4gJyArXG4gICAgICAgICAgICAgICdFeHBlY3RlZCBvYmplY3QgYnV0IGdvdCAlcy4nLFxuICAgICAgICAgICAgQ29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgJ1JlYWN0Q2xhc3MnLFxuICAgICAgICAgICAgc3BlYyA9PT0gbnVsbCA/IG51bGwgOiB0eXBlb2ZTcGVjXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgX2ludmFyaWFudChcbiAgICAgIHR5cGVvZiBzcGVjICE9PSAnZnVuY3Rpb24nLFxuICAgICAgXCJSZWFjdENsYXNzOiBZb3UncmUgYXR0ZW1wdGluZyB0byBcIiArXG4gICAgICAgICd1c2UgYSBjb21wb25lbnQgY2xhc3Mgb3IgZnVuY3Rpb24gYXMgYSBtaXhpbi4gSW5zdGVhZCwganVzdCB1c2UgYSAnICtcbiAgICAgICAgJ3JlZ3VsYXIgb2JqZWN0LidcbiAgICApO1xuICAgIF9pbnZhcmlhbnQoXG4gICAgICAhaXNWYWxpZEVsZW1lbnQoc3BlYyksXG4gICAgICBcIlJlYWN0Q2xhc3M6IFlvdSdyZSBhdHRlbXB0aW5nIHRvIFwiICtcbiAgICAgICAgJ3VzZSBhIGNvbXBvbmVudCBhcyBhIG1peGluLiBJbnN0ZWFkLCBqdXN0IHVzZSBhIHJlZ3VsYXIgb2JqZWN0LidcbiAgICApO1xuXG4gICAgdmFyIHByb3RvID0gQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICAgIHZhciBhdXRvQmluZFBhaXJzID0gcHJvdG8uX19yZWFjdEF1dG9CaW5kUGFpcnM7XG5cbiAgICAvLyBCeSBoYW5kbGluZyBtaXhpbnMgYmVmb3JlIGFueSBvdGhlciBwcm9wZXJ0aWVzLCB3ZSBlbnN1cmUgdGhlIHNhbWVcbiAgICAvLyBjaGFpbmluZyBvcmRlciBpcyBhcHBsaWVkIHRvIG1ldGhvZHMgd2l0aCBERUZJTkVfTUFOWSBwb2xpY3ksIHdoZXRoZXJcbiAgICAvLyBtaXhpbnMgYXJlIGxpc3RlZCBiZWZvcmUgb3IgYWZ0ZXIgdGhlc2UgbWV0aG9kcyBpbiB0aGUgc3BlYy5cbiAgICBpZiAoc3BlYy5oYXNPd25Qcm9wZXJ0eShNSVhJTlNfS0VZKSkge1xuICAgICAgUkVTRVJWRURfU1BFQ19LRVlTLm1peGlucyhDb25zdHJ1Y3Rvciwgc3BlYy5taXhpbnMpO1xuICAgIH1cblxuICAgIGZvciAodmFyIG5hbWUgaW4gc3BlYykge1xuICAgICAgaWYgKCFzcGVjLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobmFtZSA9PT0gTUlYSU5TX0tFWSkge1xuICAgICAgICAvLyBXZSBoYXZlIGFscmVhZHkgaGFuZGxlZCBtaXhpbnMgaW4gYSBzcGVjaWFsIGNhc2UgYWJvdmUuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcHJvcGVydHkgPSBzcGVjW25hbWVdO1xuICAgICAgdmFyIGlzQWxyZWFkeURlZmluZWQgPSBwcm90by5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgICAgIHZhbGlkYXRlTWV0aG9kT3ZlcnJpZGUoaXNBbHJlYWR5RGVmaW5lZCwgbmFtZSk7XG5cbiAgICAgIGlmIChSRVNFUlZFRF9TUEVDX0tFWVMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgUkVTRVJWRURfU1BFQ19LRVlTW25hbWVdKENvbnN0cnVjdG9yLCBwcm9wZXJ0eSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTZXR1cCBtZXRob2RzIG9uIHByb3RvdHlwZTpcbiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBtZW1iZXIgbWV0aG9kcyBzaG91bGQgbm90IGJlIGF1dG9tYXRpY2FsbHkgYm91bmQ6XG4gICAgICAgIC8vIDEuIEV4cGVjdGVkIFJlYWN0Q2xhc3MgbWV0aG9kcyAoaW4gdGhlIFwiaW50ZXJmYWNlXCIpLlxuICAgICAgICAvLyAyLiBPdmVycmlkZGVuIG1ldGhvZHMgKHRoYXQgd2VyZSBtaXhlZCBpbikuXG4gICAgICAgIHZhciBpc1JlYWN0Q2xhc3NNZXRob2QgPSBSZWFjdENsYXNzSW50ZXJmYWNlLmhhc093blByb3BlcnR5KG5hbWUpO1xuICAgICAgICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBwcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgdmFyIHNob3VsZEF1dG9CaW5kID1cbiAgICAgICAgICBpc0Z1bmN0aW9uICYmXG4gICAgICAgICAgIWlzUmVhY3RDbGFzc01ldGhvZCAmJlxuICAgICAgICAgICFpc0FscmVhZHlEZWZpbmVkICYmXG4gICAgICAgICAgc3BlYy5hdXRvYmluZCAhPT0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHNob3VsZEF1dG9CaW5kKSB7XG4gICAgICAgICAgYXV0b0JpbmRQYWlycy5wdXNoKG5hbWUsIHByb3BlcnR5KTtcbiAgICAgICAgICBwcm90b1tuYW1lXSA9IHByb3BlcnR5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChpc0FscmVhZHlEZWZpbmVkKSB7XG4gICAgICAgICAgICB2YXIgc3BlY1BvbGljeSA9IFJlYWN0Q2xhc3NJbnRlcmZhY2VbbmFtZV07XG5cbiAgICAgICAgICAgIC8vIFRoZXNlIGNhc2VzIHNob3VsZCBhbHJlYWR5IGJlIGNhdWdodCBieSB2YWxpZGF0ZU1ldGhvZE92ZXJyaWRlLlxuICAgICAgICAgICAgX2ludmFyaWFudChcbiAgICAgICAgICAgICAgaXNSZWFjdENsYXNzTWV0aG9kICYmXG4gICAgICAgICAgICAgICAgKHNwZWNQb2xpY3kgPT09ICdERUZJTkVfTUFOWV9NRVJHRUQnIHx8XG4gICAgICAgICAgICAgICAgICBzcGVjUG9saWN5ID09PSAnREVGSU5FX01BTlknKSxcbiAgICAgICAgICAgICAgJ1JlYWN0Q2xhc3M6IFVuZXhwZWN0ZWQgc3BlYyBwb2xpY3kgJXMgZm9yIGtleSAlcyAnICtcbiAgICAgICAgICAgICAgICAnd2hlbiBtaXhpbmcgaW4gY29tcG9uZW50IHNwZWNzLicsXG4gICAgICAgICAgICAgIHNwZWNQb2xpY3ksXG4gICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIEZvciBtZXRob2RzIHdoaWNoIGFyZSBkZWZpbmVkIG1vcmUgdGhhbiBvbmNlLCBjYWxsIHRoZSBleGlzdGluZ1xuICAgICAgICAgICAgLy8gbWV0aG9kcyBiZWZvcmUgY2FsbGluZyB0aGUgbmV3IHByb3BlcnR5LCBtZXJnaW5nIGlmIGFwcHJvcHJpYXRlLlxuICAgICAgICAgICAgaWYgKHNwZWNQb2xpY3kgPT09ICdERUZJTkVfTUFOWV9NRVJHRUQnKSB7XG4gICAgICAgICAgICAgIHByb3RvW25hbWVdID0gY3JlYXRlTWVyZ2VkUmVzdWx0RnVuY3Rpb24ocHJvdG9bbmFtZV0sIHByb3BlcnR5KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZJykge1xuICAgICAgICAgICAgICBwcm90b1tuYW1lXSA9IGNyZWF0ZUNoYWluZWRGdW5jdGlvbihwcm90b1tuYW1lXSwgcHJvcGVydHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm90b1tuYW1lXSA9IHByb3BlcnR5O1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgLy8gQWRkIHZlcmJvc2UgZGlzcGxheU5hbWUgdG8gdGhlIGZ1bmN0aW9uLCB3aGljaCBoZWxwcyB3aGVuIGxvb2tpbmdcbiAgICAgICAgICAgICAgLy8gYXQgcHJvZmlsaW5nIHRvb2xzLlxuICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BlcnR5ID09PSAnZnVuY3Rpb24nICYmIHNwZWMuZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICAgICAgICBwcm90b1tuYW1lXS5kaXNwbGF5TmFtZSA9IHNwZWMuZGlzcGxheU5hbWUgKyAnXycgKyBuYW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gbWl4U3RhdGljU3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIHN0YXRpY3MpIHtcbiAgICBpZiAoIXN0YXRpY3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBuYW1lIGluIHN0YXRpY3MpIHtcbiAgICAgIHZhciBwcm9wZXJ0eSA9IHN0YXRpY3NbbmFtZV07XG4gICAgICBpZiAoIXN0YXRpY3MuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBpc1Jlc2VydmVkID0gbmFtZSBpbiBSRVNFUlZFRF9TUEVDX0tFWVM7XG4gICAgICBfaW52YXJpYW50KFxuICAgICAgICAhaXNSZXNlcnZlZCxcbiAgICAgICAgJ1JlYWN0Q2xhc3M6IFlvdSBhcmUgYXR0ZW1wdGluZyB0byBkZWZpbmUgYSByZXNlcnZlZCAnICtcbiAgICAgICAgICAncHJvcGVydHksIGAlc2AsIHRoYXQgc2hvdWxkblxcJ3QgYmUgb24gdGhlIFwic3RhdGljc1wiIGtleS4gRGVmaW5lIGl0ICcgK1xuICAgICAgICAgICdhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBpbnN0ZWFkOyBpdCB3aWxsIHN0aWxsIGJlIGFjY2Vzc2libGUgb24gdGhlICcgK1xuICAgICAgICAgICdjb25zdHJ1Y3Rvci4nLFxuICAgICAgICBuYW1lXG4gICAgICApO1xuXG4gICAgICB2YXIgaXNBbHJlYWR5RGVmaW5lZCA9IG5hbWUgaW4gQ29uc3RydWN0b3I7XG4gICAgICBpZiAoaXNBbHJlYWR5RGVmaW5lZCkge1xuICAgICAgICB2YXIgc3BlY1BvbGljeSA9IFJlYWN0Q2xhc3NTdGF0aWNJbnRlcmZhY2UuaGFzT3duUHJvcGVydHkobmFtZSlcbiAgICAgICAgICA/IFJlYWN0Q2xhc3NTdGF0aWNJbnRlcmZhY2VbbmFtZV1cbiAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgX2ludmFyaWFudChcbiAgICAgICAgICBzcGVjUG9saWN5ID09PSAnREVGSU5FX01BTllfTUVSR0VEJyxcbiAgICAgICAgICAnUmVhY3RDbGFzczogWW91IGFyZSBhdHRlbXB0aW5nIHRvIGRlZmluZSAnICtcbiAgICAgICAgICAgICdgJXNgIG9uIHlvdXIgY29tcG9uZW50IG1vcmUgdGhhbiBvbmNlLiBUaGlzIGNvbmZsaWN0IG1heSBiZSAnICtcbiAgICAgICAgICAgICdkdWUgdG8gYSBtaXhpbi4nLFxuICAgICAgICAgIG5hbWVcbiAgICAgICAgKTtcblxuICAgICAgICBDb25zdHJ1Y3RvcltuYW1lXSA9IGNyZWF0ZU1lcmdlZFJlc3VsdEZ1bmN0aW9uKENvbnN0cnVjdG9yW25hbWVdLCBwcm9wZXJ0eSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBDb25zdHJ1Y3RvcltuYW1lXSA9IHByb3BlcnR5O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZSB0d28gb2JqZWN0cywgYnV0IHRocm93IGlmIGJvdGggY29udGFpbiB0aGUgc2FtZSBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvbmUgVGhlIGZpcnN0IG9iamVjdCwgd2hpY2ggaXMgbXV0YXRlZC5cbiAgICogQHBhcmFtIHtvYmplY3R9IHR3byBUaGUgc2Vjb25kIG9iamVjdFxuICAgKiBAcmV0dXJuIHtvYmplY3R9IG9uZSBhZnRlciBpdCBoYXMgYmVlbiBtdXRhdGVkIHRvIGNvbnRhaW4gZXZlcnl0aGluZyBpbiB0d28uXG4gICAqL1xuICBmdW5jdGlvbiBtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKG9uZSwgdHdvKSB7XG4gICAgX2ludmFyaWFudChcbiAgICAgIG9uZSAmJiB0d28gJiYgdHlwZW9mIG9uZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHR3byA9PT0gJ29iamVjdCcsXG4gICAgICAnbWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cygpOiBDYW5ub3QgbWVyZ2Ugbm9uLW9iamVjdHMuJ1xuICAgICk7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdHdvKSB7XG4gICAgICBpZiAodHdvLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgX2ludmFyaWFudChcbiAgICAgICAgICBvbmVba2V5XSA9PT0gdW5kZWZpbmVkLFxuICAgICAgICAgICdtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKCk6ICcgK1xuICAgICAgICAgICAgJ1RyaWVkIHRvIG1lcmdlIHR3byBvYmplY3RzIHdpdGggdGhlIHNhbWUga2V5OiBgJXNgLiBUaGlzIGNvbmZsaWN0ICcgK1xuICAgICAgICAgICAgJ21heSBiZSBkdWUgdG8gYSBtaXhpbjsgaW4gcGFydGljdWxhciwgdGhpcyBtYXkgYmUgY2F1c2VkIGJ5IHR3byAnICtcbiAgICAgICAgICAgICdnZXRJbml0aWFsU3RhdGUoKSBvciBnZXREZWZhdWx0UHJvcHMoKSBtZXRob2RzIHJldHVybmluZyBvYmplY3RzICcgK1xuICAgICAgICAgICAgJ3dpdGggY2xhc2hpbmcga2V5cy4nLFxuICAgICAgICAgIGtleVxuICAgICAgICApO1xuICAgICAgICBvbmVba2V5XSA9IHR3b1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb25lO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdHdvIGZ1bmN0aW9ucyBhbmQgbWVyZ2VzIHRoZWlyIHJldHVybiB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uZSBGdW5jdGlvbiB0byBpbnZva2UgZmlyc3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IHR3byBGdW5jdGlvbiB0byBpbnZva2Ugc2Vjb25kLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gRnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSB0d28gYXJndW1lbnQgZnVuY3Rpb25zLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gY3JlYXRlTWVyZ2VkUmVzdWx0RnVuY3Rpb24ob25lLCB0d28pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkUmVzdWx0KCkge1xuICAgICAgdmFyIGEgPSBvbmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHZhciBiID0gdHdvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICBpZiAoYSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBiO1xuICAgICAgfSBlbHNlIGlmIChiID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9XG4gICAgICB2YXIgYyA9IHt9O1xuICAgICAgbWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cyhjLCBhKTtcbiAgICAgIG1lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMoYywgYik7XG4gICAgICByZXR1cm4gYztcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdHdvIGZ1bmN0aW9ucyBhbmQgaWdub3JlcyB0aGVpciByZXR1cm4gdmFsZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uZSBGdW5jdGlvbiB0byBpbnZva2UgZmlyc3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IHR3byBGdW5jdGlvbiB0byBpbnZva2Ugc2Vjb25kLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gRnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSB0d28gYXJndW1lbnQgZnVuY3Rpb25zLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKG9uZSwgdHdvKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNoYWluZWRGdW5jdGlvbigpIHtcbiAgICAgIG9uZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgdHdvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBhIG1ldGhvZCB0byB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29tcG9uZW50IENvbXBvbmVudCB3aG9zZSBtZXRob2QgaXMgZ29pbmcgdG8gYmUgYm91bmQuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG1ldGhvZCBNZXRob2QgdG8gYmUgYm91bmQuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBUaGUgYm91bmQgbWV0aG9kLlxuICAgKi9cbiAgZnVuY3Rpb24gYmluZEF1dG9CaW5kTWV0aG9kKGNvbXBvbmVudCwgbWV0aG9kKSB7XG4gICAgdmFyIGJvdW5kTWV0aG9kID0gbWV0aG9kLmJpbmQoY29tcG9uZW50KTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgYm91bmRNZXRob2QuX19yZWFjdEJvdW5kQ29udGV4dCA9IGNvbXBvbmVudDtcbiAgICAgIGJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZE1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZEFyZ3VtZW50cyA9IG51bGw7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudC5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZTtcbiAgICAgIHZhciBfYmluZCA9IGJvdW5kTWV0aG9kLmJpbmQ7XG4gICAgICBib3VuZE1ldGhvZC5iaW5kID0gZnVuY3Rpb24obmV3VGhpcykge1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgICAgIGFyZ3MgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksXG4gICAgICAgICAgICBfa2V5ID0gMTtcbiAgICAgICAgICBfa2V5IDwgX2xlbjtcbiAgICAgICAgICBfa2V5KytcbiAgICAgICAgKSB7XG4gICAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVc2VyIGlzIHRyeWluZyB0byBiaW5kKCkgYW4gYXV0b2JvdW5kIG1ldGhvZDsgd2UgZWZmZWN0aXZlbHkgd2lsbFxuICAgICAgICAvLyBpZ25vcmUgdGhlIHZhbHVlIG9mIFwidGhpc1wiIHRoYXQgdGhlIHVzZXIgaXMgdHJ5aW5nIHRvIHVzZSwgc29cbiAgICAgICAgLy8gbGV0J3Mgd2Fybi5cbiAgICAgICAgaWYgKG5ld1RoaXMgIT09IGNvbXBvbmVudCAmJiBuZXdUaGlzICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHdhcm5pbmcoXG4gICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAnYmluZCgpOiBSZWFjdCBjb21wb25lbnQgbWV0aG9kcyBtYXkgb25seSBiZSBib3VuZCB0byB0aGUgJyArXG4gICAgICAgICAgICAgICAgJ2NvbXBvbmVudCBpbnN0YW5jZS4gU2VlICVzJyxcbiAgICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIWFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHdhcm5pbmcoXG4gICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAnYmluZCgpOiBZb3UgYXJlIGJpbmRpbmcgYSBjb21wb25lbnQgbWV0aG9kIHRvIHRoZSBjb21wb25lbnQuICcgK1xuICAgICAgICAgICAgICAgICdSZWFjdCBkb2VzIHRoaXMgZm9yIHlvdSBhdXRvbWF0aWNhbGx5IGluIGEgaGlnaC1wZXJmb3JtYW5jZSAnICtcbiAgICAgICAgICAgICAgICAnd2F5LCBzbyB5b3UgY2FuIHNhZmVseSByZW1vdmUgdGhpcyBjYWxsLiBTZWUgJXMnLFxuICAgICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYm91bmRNZXRob2Q7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlYm91bmRNZXRob2QgPSBfYmluZC5hcHBseShib3VuZE1ldGhvZCwgYXJndW1lbnRzKTtcbiAgICAgICAgcmVib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRDb250ZXh0ID0gY29tcG9uZW50O1xuICAgICAgICByZWJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZE1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgcmVib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRBcmd1bWVudHMgPSBhcmdzO1xuICAgICAgICByZXR1cm4gcmVib3VuZE1ldGhvZDtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBib3VuZE1ldGhvZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBhbGwgYXV0by1ib3VuZCBtZXRob2RzIGluIGEgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29tcG9uZW50IENvbXBvbmVudCB3aG9zZSBtZXRob2QgaXMgZ29pbmcgdG8gYmUgYm91bmQuXG4gICAqL1xuICBmdW5jdGlvbiBiaW5kQXV0b0JpbmRNZXRob2RzKGNvbXBvbmVudCkge1xuICAgIHZhciBwYWlycyA9IGNvbXBvbmVudC5fX3JlYWN0QXV0b0JpbmRQYWlycztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhaXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICB2YXIgYXV0b0JpbmRLZXkgPSBwYWlyc1tpXTtcbiAgICAgIHZhciBtZXRob2QgPSBwYWlyc1tpICsgMV07XG4gICAgICBjb21wb25lbnRbYXV0b0JpbmRLZXldID0gYmluZEF1dG9CaW5kTWV0aG9kKGNvbXBvbmVudCwgbWV0aG9kKTtcbiAgICB9XG4gIH1cblxuICB2YXIgSXNNb3VudGVkUHJlTWl4aW4gPSB7XG4gICAgY29tcG9uZW50RGlkTW91bnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fX2lzTW91bnRlZCA9IHRydWU7XG4gICAgfVxuICB9O1xuXG4gIHZhciBJc01vdW50ZWRQb3N0TWl4aW4gPSB7XG4gICAgY29tcG9uZW50V2lsbFVubW91bnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fX2lzTW91bnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQWRkIG1vcmUgdG8gdGhlIFJlYWN0Q2xhc3MgYmFzZSBjbGFzcy4gVGhlc2UgYXJlIGFsbCBsZWdhY3kgZmVhdHVyZXMgYW5kXG4gICAqIHRoZXJlZm9yZSBub3QgYWxyZWFkeSBwYXJ0IG9mIHRoZSBtb2Rlcm4gUmVhY3RDb21wb25lbnQuXG4gICAqL1xuICB2YXIgUmVhY3RDbGFzc01peGluID0ge1xuICAgIC8qKlxuICAgICAqIFRPRE86IFRoaXMgd2lsbCBiZSBkZXByZWNhdGVkIGJlY2F1c2Ugc3RhdGUgc2hvdWxkIGFsd2F5cyBrZWVwIGEgY29uc2lzdGVudFxuICAgICAqIHR5cGUgc2lnbmF0dXJlIGFuZCB0aGUgb25seSB1c2UgY2FzZSBmb3IgdGhpcywgaXMgdG8gYXZvaWQgdGhhdC5cbiAgICAgKi9cbiAgICByZXBsYWNlU3RhdGU6IGZ1bmN0aW9uKG5ld1N0YXRlLCBjYWxsYmFjaykge1xuICAgICAgdGhpcy51cGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUodGhpcywgbmV3U3RhdGUsIGNhbGxiYWNrKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoaXMgY29tcG9zaXRlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgbW91bnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKiBAZmluYWxcbiAgICAgKi9cbiAgICBpc01vdW50ZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybmluZyhcbiAgICAgICAgICB0aGlzLl9fZGlkV2FybklzTW91bnRlZCxcbiAgICAgICAgICAnJXM6IGlzTW91bnRlZCBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkLCBtYWtlIHN1cmUgdG8gY2xlYW4gdXAgJyArXG4gICAgICAgICAgICAnc3Vic2NyaXB0aW9ucyBhbmQgcGVuZGluZyByZXF1ZXN0cyBpbiBjb21wb25lbnRXaWxsVW5tb3VudCB0byAnICtcbiAgICAgICAgICAgICdwcmV2ZW50IG1lbW9yeSBsZWFrcy4nLFxuICAgICAgICAgICh0aGlzLmNvbnN0cnVjdG9yICYmIHRoaXMuY29uc3RydWN0b3IuZGlzcGxheU5hbWUpIHx8XG4gICAgICAgICAgICB0aGlzLm5hbWUgfHxcbiAgICAgICAgICAgICdDb21wb25lbnQnXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX19kaWRXYXJuSXNNb3VudGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhIXRoaXMuX19pc01vdW50ZWQ7XG4gICAgfVxuICB9O1xuXG4gIHZhciBSZWFjdENsYXNzQ29tcG9uZW50ID0gZnVuY3Rpb24oKSB7fTtcbiAgX2Fzc2lnbihcbiAgICBSZWFjdENsYXNzQ29tcG9uZW50LnByb3RvdHlwZSxcbiAgICBSZWFjdENvbXBvbmVudC5wcm90b3R5cGUsXG4gICAgUmVhY3RDbGFzc01peGluXG4gICk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjb21wb3NpdGUgY29tcG9uZW50IGNsYXNzIGdpdmVuIGEgY2xhc3Mgc3BlY2lmaWNhdGlvbi5cbiAgICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNyZWF0ZWNsYXNzXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzcGVjIENsYXNzIHNwZWNpZmljYXRpb24gKHdoaWNoIG11c3QgZGVmaW5lIGByZW5kZXJgKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IENvbXBvbmVudCBjb25zdHJ1Y3RvciBmdW5jdGlvbi5cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgZnVuY3Rpb24gY3JlYXRlQ2xhc3Moc3BlYykge1xuICAgIC8vIFRvIGtlZXAgb3VyIHdhcm5pbmdzIG1vcmUgdW5kZXJzdGFuZGFibGUsIHdlJ2xsIHVzZSBhIGxpdHRsZSBoYWNrIGhlcmUgdG9cbiAgICAvLyBlbnN1cmUgdGhhdCBDb25zdHJ1Y3Rvci5uYW1lICE9PSAnQ29uc3RydWN0b3InLiBUaGlzIG1ha2VzIHN1cmUgd2UgZG9uJ3RcbiAgICAvLyB1bm5lY2Vzc2FyaWx5IGlkZW50aWZ5IGEgY2xhc3Mgd2l0aG91dCBkaXNwbGF5TmFtZSBhcyAnQ29uc3RydWN0b3InLlxuICAgIHZhciBDb25zdHJ1Y3RvciA9IGlkZW50aXR5KGZ1bmN0aW9uKHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gICAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGdldHMgb3ZlcnJpZGRlbiBieSBtb2Nrcy4gVGhlIGFyZ3VtZW50IGlzIHVzZWRcbiAgICAgIC8vIGJ5IG1vY2tzIHRvIGFzc2VydCBvbiB3aGF0IGdldHMgbW91bnRlZC5cblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybmluZyhcbiAgICAgICAgICB0aGlzIGluc3RhbmNlb2YgQ29uc3RydWN0b3IsXG4gICAgICAgICAgJ1NvbWV0aGluZyBpcyBjYWxsaW5nIGEgUmVhY3QgY29tcG9uZW50IGRpcmVjdGx5LiBVc2UgYSBmYWN0b3J5IG9yICcgK1xuICAgICAgICAgICAgJ0pTWCBpbnN0ZWFkLiBTZWU6IGh0dHBzOi8vZmIubWUvcmVhY3QtbGVnYWN5ZmFjdG9yeSdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2lyZSB1cCBhdXRvLWJpbmRpbmdcbiAgICAgIGlmICh0aGlzLl9fcmVhY3RBdXRvQmluZFBhaXJzLmxlbmd0aCkge1xuICAgICAgICBiaW5kQXV0b0JpbmRNZXRob2RzKHRoaXMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7XG4gICAgICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xuXG4gICAgICB0aGlzLnN0YXRlID0gbnVsbDtcblxuICAgICAgLy8gUmVhY3RDbGFzc2VzIGRvZXNuJ3QgaGF2ZSBjb25zdHJ1Y3RvcnMuIEluc3RlYWQsIHRoZXkgdXNlIHRoZVxuICAgICAgLy8gZ2V0SW5pdGlhbFN0YXRlIGFuZCBjb21wb25lbnRXaWxsTW91bnQgbWV0aG9kcyBmb3IgaW5pdGlhbGl6YXRpb24uXG5cbiAgICAgIHZhciBpbml0aWFsU3RhdGUgPSB0aGlzLmdldEluaXRpYWxTdGF0ZSA/IHRoaXMuZ2V0SW5pdGlhbFN0YXRlKCkgOiBudWxsO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgLy8gV2UgYWxsb3cgYXV0by1tb2NrcyB0byBwcm9jZWVkIGFzIGlmIHRoZXkncmUgcmV0dXJuaW5nIG51bGwuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBpbml0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHRoaXMuZ2V0SW5pdGlhbFN0YXRlLl9pc01vY2tGdW5jdGlvblxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IGJhZCBwcmFjdGljZS4gQ29uc2lkZXIgd2FybmluZyBoZXJlIGFuZFxuICAgICAgICAgIC8vIGRlcHJlY2F0aW5nIHRoaXMgY29udmVuaWVuY2UuXG4gICAgICAgICAgaW5pdGlhbFN0YXRlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgX2ludmFyaWFudChcbiAgICAgICAgdHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaW5pdGlhbFN0YXRlKSxcbiAgICAgICAgJyVzLmdldEluaXRpYWxTdGF0ZSgpOiBtdXN0IHJldHVybiBhbiBvYmplY3Qgb3IgbnVsbCcsXG4gICAgICAgIENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCdcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuc3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gICAgfSk7XG4gICAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gbmV3IFJlYWN0Q2xhc3NDb21wb25lbnQoKTtcbiAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcjtcbiAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUuX19yZWFjdEF1dG9CaW5kUGFpcnMgPSBbXTtcblxuICAgIGluamVjdGVkTWl4aW5zLmZvckVhY2gobWl4U3BlY0ludG9Db21wb25lbnQuYmluZChudWxsLCBDb25zdHJ1Y3RvcikpO1xuXG4gICAgbWl4U3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIElzTW91bnRlZFByZU1peGluKTtcbiAgICBtaXhTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwgc3BlYyk7XG4gICAgbWl4U3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIElzTW91bnRlZFBvc3RNaXhpbik7XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSBkZWZhdWx0UHJvcHMgcHJvcGVydHkgYWZ0ZXIgYWxsIG1peGlucyBoYXZlIGJlZW4gbWVyZ2VkLlxuICAgIGlmIChDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMpIHtcbiAgICAgIENvbnN0cnVjdG9yLmRlZmF1bHRQcm9wcyA9IENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcygpO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgdGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHVzZSBvZiB0aGVzZSBtZXRob2QgbmFtZXMgaXMgb2ssXG4gICAgICAvLyBzaW5jZSBpdCdzIHVzZWQgd2l0aCBjcmVhdGVDbGFzcy4gSWYgaXQncyBub3QsIHRoZW4gaXQncyBsaWtlbHkgYVxuICAgICAgLy8gbWlzdGFrZSBzbyB3ZSdsbCB3YXJuIHlvdSB0byB1c2UgdGhlIHN0YXRpYyBwcm9wZXJ0eSwgcHJvcGVydHlcbiAgICAgIC8vIGluaXRpYWxpemVyIG9yIGNvbnN0cnVjdG9yIHJlc3BlY3RpdmVseS5cbiAgICAgIGlmIChDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMpIHtcbiAgICAgICAgQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkID0ge307XG4gICAgICB9XG4gICAgICBpZiAoQ29uc3RydWN0b3IucHJvdG90eXBlLmdldEluaXRpYWxTdGF0ZSkge1xuICAgICAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUuZ2V0SW5pdGlhbFN0YXRlLmlzUmVhY3RDbGFzc0FwcHJvdmVkID0ge307XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2ludmFyaWFudChcbiAgICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZS5yZW5kZXIsXG4gICAgICAnY3JlYXRlQ2xhc3MoLi4uKTogQ2xhc3Mgc3BlY2lmaWNhdGlvbiBtdXN0IGltcGxlbWVudCBhIGByZW5kZXJgIG1ldGhvZC4nXG4gICAgKTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB3YXJuaW5nKFxuICAgICAgICAhQ29uc3RydWN0b3IucHJvdG90eXBlLmNvbXBvbmVudFNob3VsZFVwZGF0ZSxcbiAgICAgICAgJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArXG4gICAgICAgICAgJ2NvbXBvbmVudFNob3VsZFVwZGF0ZSgpLiBEaWQgeW91IG1lYW4gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk/ICcgK1xuICAgICAgICAgICdUaGUgbmFtZSBpcyBwaHJhc2VkIGFzIGEgcXVlc3Rpb24gYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgJyArXG4gICAgICAgICAgJ2V4cGVjdGVkIHRvIHJldHVybiBhIHZhbHVlLicsXG4gICAgICAgIHNwZWMuZGlzcGxheU5hbWUgfHwgJ0EgY29tcG9uZW50J1xuICAgICAgKTtcbiAgICAgIHdhcm5pbmcoXG4gICAgICAgICFDb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyxcbiAgICAgICAgJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArXG4gICAgICAgICAgJ2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMoKS4gRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKT8nLFxuICAgICAgICBzcGVjLmRpc3BsYXlOYW1lIHx8ICdBIGNvbXBvbmVudCdcbiAgICAgICk7XG4gICAgICB3YXJuaW5nKFxuICAgICAgICAhQ29uc3RydWN0b3IucHJvdG90eXBlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzLFxuICAgICAgICAnJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcygpLiAnICtcbiAgICAgICAgICAnRGlkIHlvdSBtZWFuIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCk/JyxcbiAgICAgICAgc3BlYy5kaXNwbGF5TmFtZSB8fCAnQSBjb21wb25lbnQnXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFJlZHVjZSB0aW1lIHNwZW50IGRvaW5nIGxvb2t1cHMgYnkgc2V0dGluZyB0aGVzZSBvbiB0aGUgcHJvdG90eXBlLlxuICAgIGZvciAodmFyIG1ldGhvZE5hbWUgaW4gUmVhY3RDbGFzc0ludGVyZmFjZSkge1xuICAgICAgaWYgKCFDb25zdHJ1Y3Rvci5wcm90b3R5cGVbbWV0aG9kTmFtZV0pIHtcbiAgICAgICAgQ29uc3RydWN0b3IucHJvdG90eXBlW21ldGhvZE5hbWVdID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlQ2xhc3M7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmFjdG9yeTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcbnZhciBmYWN0b3J5ID0gcmVxdWlyZSgnLi9mYWN0b3J5Jyk7XG5cbmlmICh0eXBlb2YgUmVhY3QgPT09ICd1bmRlZmluZWQnKSB7XG4gIHRocm93IEVycm9yKFxuICAgICdjcmVhdGUtcmVhY3QtY2xhc3MgY291bGQgbm90IGZpbmQgdGhlIFJlYWN0IG9iamVjdC4gSWYgeW91IGFyZSB1c2luZyBzY3JpcHQgdGFncywgJyArXG4gICAgICAnbWFrZSBzdXJlIHRoYXQgUmVhY3QgaXMgYmVpbmcgbG9hZGVkIGJlZm9yZSBjcmVhdGUtcmVhY3QtY2xhc3MuJ1xuICApO1xufVxuXG4vLyBIYWNrIHRvIGdyYWIgTm9vcFVwZGF0ZVF1ZXVlIGZyb20gaXNvbW9ycGhpYyBSZWFjdFxudmFyIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlID0gbmV3IFJlYWN0LkNvbXBvbmVudCgpLnVwZGF0ZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShcbiAgUmVhY3QuQ29tcG9uZW50LFxuICBSZWFjdC5pc1ZhbGlkRWxlbWVudCxcbiAgUmVhY3ROb29wVXBkYXRlUXVldWVcbik7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuLyoqXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XG4gIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxuICBjb250ZXh0VHlwZTogdHJ1ZSxcbiAgY29udGV4dFR5cGVzOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBnZXREZWZhdWx0UHJvcHM6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjogdHJ1ZSxcbiAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiB0cnVlLFxuICBtaXhpbnM6IHRydWUsXG4gIHByb3BUeXBlczogdHJ1ZSxcbiAgdHlwZTogdHJ1ZVxufTtcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xuICBuYW1lOiB0cnVlLFxuICBsZW5ndGg6IHRydWUsXG4gIHByb3RvdHlwZTogdHJ1ZSxcbiAgY2FsbGVyOiB0cnVlLFxuICBjYWxsZWU6IHRydWUsXG4gIGFyZ3VtZW50czogdHJ1ZSxcbiAgYXJpdHk6IHRydWVcbn07XG52YXIgRk9SV0FSRF9SRUZfU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgcmVuZGVyOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWVcbn07XG52YXIgTUVNT19TVEFUSUNTID0ge1xuICAnJCR0eXBlb2YnOiB0cnVlLFxuICBjb21wYXJlOiB0cnVlLFxuICBkZWZhdWx0UHJvcHM6IHRydWUsXG4gIGRpc3BsYXlOYW1lOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgVFlQRV9TVEFUSUNTID0ge307XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5Gb3J3YXJkUmVmXSA9IEZPUldBUkRfUkVGX1NUQVRJQ1M7XG5UWVBFX1NUQVRJQ1NbcmVhY3RJcy5NZW1vXSA9IE1FTU9fU1RBVElDUztcblxuZnVuY3Rpb24gZ2V0U3RhdGljcyhjb21wb25lbnQpIHtcbiAgLy8gUmVhY3QgdjE2LjExIGFuZCBiZWxvd1xuICBpZiAocmVhY3RJcy5pc01lbW8oY29tcG9uZW50KSkge1xuICAgIHJldHVybiBNRU1PX1NUQVRJQ1M7XG4gIH0gLy8gUmVhY3QgdjE2LjEyIGFuZCBhYm92ZVxuXG5cbiAgcmV0dXJuIFRZUEVfU1RBVElDU1tjb21wb25lbnRbJyQkdHlwZW9mJ11dIHx8IFJFQUNUX1NUQVRJQ1M7XG59XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xudmFyIG9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG5mdW5jdGlvbiBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCwgYmxhY2tsaXN0KSB7XG4gIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykge1xuICAgIC8vIGRvbid0IGhvaXN0IG92ZXIgc3RyaW5nIChodG1sKSBjb21wb25lbnRzXG4gICAgaWYgKG9iamVjdFByb3RvdHlwZSkge1xuICAgICAgdmFyIGluaGVyaXRlZENvbXBvbmVudCA9IGdldFByb3RvdHlwZU9mKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICAgIGlmIChpbmhlcml0ZWRDb21wb25lbnQgJiYgaW5oZXJpdGVkQ29tcG9uZW50ICE9PSBvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgICAgaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBpbmhlcml0ZWRDb21wb25lbnQsIGJsYWNrbGlzdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICBpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgICBrZXlzID0ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXRTdGF0aWNzID0gZ2V0U3RhdGljcyh0YXJnZXRDb21wb25lbnQpO1xuICAgIHZhciBzb3VyY2VTdGF0aWNzID0gZ2V0U3RhdGljcyhzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKCFLTk9XTl9TVEFUSUNTW2tleV0gJiYgIShibGFja2xpc3QgJiYgYmxhY2tsaXN0W2tleV0pICYmICEoc291cmNlU3RhdGljcyAmJiBzb3VyY2VTdGF0aWNzW2tleV0pICYmICEodGFyZ2V0U3RhdGljcyAmJiB0YXJnZXRTdGF0aWNzW2tleV0pKSB7XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZUNvbXBvbmVudCwga2V5KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEF2b2lkIGZhaWx1cmVzIGZyb20gcmVhZC1vbmx5IHByb3BlcnRpZXNcbiAgICAgICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXRDb21wb25lbnQsIGtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldENvbXBvbmVudDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBob2lzdE5vblJlYWN0U3RhdGljcztcbiIsInZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0JylcbnZhciBjcmVhdGVSZWFjdENsYXNzID0gcmVxdWlyZSgnY3JlYXRlLXJlYWN0LWNsYXNzJylcbnZhciBtYXBWYWx1ZXMgPSByZXF1aXJlKCcuL3V0aWxzL21hcFZhbHVlcycpXG52YXIgaG9pc3ROb25SZWFjdFN0YXRpY3MgPSByZXF1aXJlKCdob2lzdC1ub24tcmVhY3Qtc3RhdGljcycpXG5cbmZ1bmN0aW9uIHdpdGhGYXV4RE9NRmFjdG9yeSAoRWxlbWVudCkge1xuICBmdW5jdGlvbiB3aXRoRmF1eERPTSAoV3JhcHBlZENvbXBvbmVudCkge1xuICAgIHZhciBXaXRoRmF1eERPTSA9IGNyZWF0ZVJlYWN0Q2xhc3Moe1xuICAgICAgY29tcG9uZW50V2lsbE1vdW50OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGVkRmF1eERPTSA9IHt9XG4gICAgICAgIHRoaXMuYW5pbWF0ZUZhdXhET01VbnRpbCA9IDBcbiAgICAgIH0sXG4gICAgICBjb21wb25lbnRXaWxsVW5tb3VudDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnN0b3BBbmltYXRpbmdGYXV4RE9NKClcbiAgICAgICAgdGhpcy5zdG9wRHJhd0ZhdXhET00oKVxuICAgICAgfSxcbiAgICAgIGNvbm5lY3RGYXV4RE9NOiBmdW5jdGlvbiAobm9kZSwgbmFtZSwgZGlzY2FyZE5vZGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbm5lY3RlZEZhdXhET01bbmFtZV0gfHwgZGlzY2FyZE5vZGUpIHtcbiAgICAgICAgICB0aGlzLmNvbm5lY3RlZEZhdXhET01bbmFtZV0gPSB0eXBlb2Ygbm9kZSAhPT0gJ3N0cmluZycgPyBub2RlIDogbmV3IEVsZW1lbnQobm9kZSlcbiAgICAgICAgICB0aGlzLmRyYXdGYXV4RE9NVGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5kcmF3RmF1eERPTSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0ZWRGYXV4RE9NW25hbWVdXG4gICAgICB9LFxuICAgICAgZHJhd0ZhdXhET006IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHZpcnR1YWxET00gPSBtYXBWYWx1ZXModGhpcy5jb25uZWN0ZWRGYXV4RE9NLCBmdW5jdGlvbiAobikge1xuICAgICAgICAgIHJldHVybiBuLnRvUmVhY3QoKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnNldFN0YXRlKHZpcnR1YWxET00pXG4gICAgICB9LFxuICAgICAgYW5pbWF0ZUZhdXhET006IGZ1bmN0aW9uIChkdXJhdGlvbikge1xuICAgICAgICB0aGlzLmFuaW1hdGVGYXV4RE9NVW50aWwgPSBNYXRoLm1heChEYXRlLm5vdygpICsgZHVyYXRpb24sIHRoaXMuYW5pbWF0ZUZhdXhET01VbnRpbClcbiAgICAgICAgaWYgKCF0aGlzLmZhdXhET01BbmltYXRpb25JbnRlcnZhbCkge1xuICAgICAgICAgIHRoaXMuZmF1eERPTUFuaW1hdGlvbkludGVydmFsID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKERhdGUubm93KCkgPCB0aGlzLmFuaW1hdGVGYXV4RE9NVW50aWwpIHtcbiAgICAgICAgICAgICAgdGhpcy5kcmF3RmF1eERPTSgpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnN0b3BBbmltYXRpbmdGYXV4RE9NKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LmJpbmQodGhpcyksIDE2KVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc3RvcEFuaW1hdGluZ0ZhdXhET006IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5mYXV4RE9NQW5pbWF0aW9uSW50ZXJ2YWwgPSBjbGVhckludGVydmFsKHRoaXMuZmF1eERPTUFuaW1hdGlvbkludGVydmFsKVxuICAgICAgICB0aGlzLmFuaW1hdGVGYXV4RE9NVW50aWwgPSAwXG4gICAgICB9LFxuICAgICAgc3RvcERyYXdGYXV4RE9NOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZHJhd0ZhdXhET01UaW1lb3V0ID0gY2xlYXJUaW1lb3V0KHRoaXMuZHJhd0ZhdXhET01UaW1lb3V0KVxuICAgICAgfSxcbiAgICAgIGlzQW5pbWF0aW5nRmF1eERPTTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmZhdXhET01BbmltYXRpb25JbnRlcnZhbFxuICAgICAgfSxcbiAgICAgIHJlbmRlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJvcHMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnByb3BzLCB0aGlzLnN0YXRlLCB7XG4gICAgICAgICAgY29ubmVjdEZhdXhET006IHRoaXMuY29ubmVjdEZhdXhET00sXG4gICAgICAgICAgZHJhd0ZhdXhET006IHRoaXMuZHJhd0ZhdXhET00sXG4gICAgICAgICAgYW5pbWF0ZUZhdXhET006IHRoaXMuYW5pbWF0ZUZhdXhET00sXG4gICAgICAgICAgc3RvcEFuaW1hdGluZ0ZhdXhET006IHRoaXMuc3RvcEFuaW1hdGluZ0ZhdXhET00sXG4gICAgICAgICAgaXNBbmltYXRpbmdGYXV4RE9NOiB0aGlzLmlzQW5pbWF0aW5nRmF1eERPTVxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkQ29tcG9uZW50LCBwcm9wcylcbiAgICAgIH1cbiAgICB9KVxuICAgIFdpdGhGYXV4RE9NLmRpc3BsYXlOYW1lID0gJ1dpdGhGYXV4RE9NKCcgKyBnZXREaXNwbGF5TmFtZShXcmFwcGVkQ29tcG9uZW50KSArICcpJ1xuICAgIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKFdpdGhGYXV4RE9NLCBXcmFwcGVkQ29tcG9uZW50KVxuICAgIHJldHVybiBXaXRoRmF1eERPTVxuICB9XG5cbiAgcmV0dXJuIHdpdGhGYXV4RE9NXG59XG5cbmZ1bmN0aW9uIGdldERpc3BsYXlOYW1lIChXcmFwcGVkQ29tcG9uZW50KSB7XG4gIHJldHVybiBXcmFwcGVkQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IFdyYXBwZWRDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50J1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdpdGhGYXV4RE9NRmFjdG9yeVxuIiwidmFyIGVsZW1lbnQgPSByZXF1aXJlKCcuL19lbGVtZW50JylcbnZhciB3aW5kb3cgPSByZXF1aXJlKCcuL193aW5kb3cnKVxudmFyIHdpdGhGYXV4RE9NID0gcmVxdWlyZSgnLi9fd2l0aEZhdXhET00nKVxuXG5mdW5jdGlvbiBmYWN0b3J5ICgpIHtcbiAgdmFyIEVsZW1lbnQgPSBlbGVtZW50KClcbiAgdmFyIFdpbmRvdyA9IHdpbmRvdygpXG4gIHZhciBSZWFjdEZhdXhET00gPSB7XG4gICAgRWxlbWVudDogRWxlbWVudCxcbiAgICBkZWZhdWx0VmlldzogV2luZG93LFxuICAgIHdpdGhGYXV4RE9NOiB3aXRoRmF1eERPTShFbGVtZW50KSxcbiAgICBjcmVhdGVFbGVtZW50OiBmdW5jdGlvbiAobm9kZU5hbWUpIHtcbiAgICAgIHJldHVybiBuZXcgRWxlbWVudChub2RlTmFtZSlcbiAgICB9LFxuICAgIGNyZWF0ZUVsZW1lbnROUzogZnVuY3Rpb24gKG5hbWVzcGFjZSwgbm9kZU5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUVsZW1lbnQobm9kZU5hbWUpXG4gICAgfSxcbiAgICBjb21wYXJlRG9jdW1lbnRQb3NpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVGhlIHNlbGVjdG9yIGVuZ2luZSB0cmllcyB0byB2YWxpZGF0ZSB3aXRoIHRoaXMsIGJ1dCB3ZSBkb24ndCBjYXJlLlxuICAgICAgLy8gOCA9IERPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5TLCBzbyB3ZSBzYXkgYWxsIG5vZGVzIGFyZSBpbiB0aGlzIGRvY3VtZW50LlxuICAgICAgcmV0dXJuIDhcbiAgICB9XG4gIH1cblxuICBFbGVtZW50LnByb3RvdHlwZS5vd25lckRvY3VtZW50ID0gUmVhY3RGYXV4RE9NXG4gIHJldHVybiBSZWFjdEZhdXhET01cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5XG4iLCJ2YXIgZmFjdG9yeSA9IHJlcXVpcmUoJy4vZmFjdG9yeScpXG5tb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKVxuIiwidmFyIG5vb3AgPSB7dmFsdWU6IGZ1bmN0aW9uKCkge319O1xuXG5mdW5jdGlvbiBkaXNwYXRjaCgpIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSBhcmd1bWVudHMubGVuZ3RoLCBfID0ge30sIHQ7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAoISh0ID0gYXJndW1lbnRzW2ldICsgXCJcIikgfHwgKHQgaW4gXykgfHwgL1tcXHMuXS8udGVzdCh0KSkgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCB0eXBlOiBcIiArIHQpO1xuICAgIF9bdF0gPSBbXTtcbiAgfVxuICByZXR1cm4gbmV3IERpc3BhdGNoKF8pO1xufVxuXG5mdW5jdGlvbiBEaXNwYXRjaChfKSB7XG4gIHRoaXMuXyA9IF87XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lcywgdHlwZXMpIHtcbiAgcmV0dXJuIHR5cGVuYW1lcy50cmltKCkuc3BsaXQoL158XFxzKy8pLm1hcChmdW5jdGlvbih0KSB7XG4gICAgdmFyIG5hbWUgPSBcIlwiLCBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSBuYW1lID0gdC5zbGljZShpICsgMSksIHQgPSB0LnNsaWNlKDAsIGkpO1xuICAgIGlmICh0ICYmICF0eXBlcy5oYXNPd25Qcm9wZXJ0eSh0KSkgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIiArIHQpO1xuICAgIHJldHVybiB7dHlwZTogdCwgbmFtZTogbmFtZX07XG4gIH0pO1xufVxuXG5EaXNwYXRjaC5wcm90b3R5cGUgPSBkaXNwYXRjaC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBEaXNwYXRjaCxcbiAgb246IGZ1bmN0aW9uKHR5cGVuYW1lLCBjYWxsYmFjaykge1xuICAgIHZhciBfID0gdGhpcy5fLFxuICAgICAgICBUID0gcGFyc2VUeXBlbmFtZXModHlwZW5hbWUgKyBcIlwiLCBfKSxcbiAgICAgICAgdCxcbiAgICAgICAgaSA9IC0xLFxuICAgICAgICBuID0gVC5sZW5ndGg7XG5cbiAgICAvLyBJZiBubyBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCByZXR1cm4gdGhlIGNhbGxiYWNrIG9mIHRoZSBnaXZlbiB0eXBlIGFuZCBuYW1lLlxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgICAgd2hpbGUgKCsraSA8IG4pIGlmICgodCA9ICh0eXBlbmFtZSA9IFRbaV0pLnR5cGUpICYmICh0ID0gZ2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUpKSkgcmV0dXJuIHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgYSB0eXBlIHdhcyBzcGVjaWZpZWQsIHNldCB0aGUgY2FsbGJhY2sgZm9yIHRoZSBnaXZlbiB0eXBlIGFuZCBuYW1lLlxuICAgIC8vIE90aGVyd2lzZSwgaWYgYSBudWxsIGNhbGxiYWNrIHdhcyBzcGVjaWZpZWQsIHJlbW92ZSBjYWxsYmFja3Mgb2YgdGhlIGdpdmVuIG5hbWUuXG4gICAgaWYgKGNhbGxiYWNrICE9IG51bGwgJiYgdHlwZW9mIGNhbGxiYWNrICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgY2FsbGJhY2s6IFwiICsgY2FsbGJhY2spO1xuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICBpZiAodCA9ICh0eXBlbmFtZSA9IFRbaV0pLnR5cGUpIF9bdF0gPSBzZXQoX1t0XSwgdHlwZW5hbWUubmFtZSwgY2FsbGJhY2spO1xuICAgICAgZWxzZSBpZiAoY2FsbGJhY2sgPT0gbnVsbCkgZm9yICh0IGluIF8pIF9bdF0gPSBzZXQoX1t0XSwgdHlwZW5hbWUubmFtZSwgbnVsbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGNvcHk6IGZ1bmN0aW9uKCkge1xuICAgIHZhciBjb3B5ID0ge30sIF8gPSB0aGlzLl87XG4gICAgZm9yICh2YXIgdCBpbiBfKSBjb3B5W3RdID0gX1t0XS5zbGljZSgpO1xuICAgIHJldHVybiBuZXcgRGlzcGF0Y2goY29weSk7XG4gIH0sXG4gIGNhbGw6IGZ1bmN0aW9uKHR5cGUsIHRoYXQpIHtcbiAgICBpZiAoKG4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMikgPiAwKSBmb3IgKHZhciBhcmdzID0gbmV3IEFycmF5KG4pLCBpID0gMCwgbiwgdDsgaSA8IG47ICsraSkgYXJnc1tpXSA9IGFyZ3VtZW50c1tpICsgMl07XG4gICAgaWYgKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodHlwZSkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0eXBlKTtcbiAgICBmb3IgKHQgPSB0aGlzLl9bdHlwZV0sIGkgPSAwLCBuID0gdC5sZW5ndGg7IGkgPCBuOyArK2kpIHRbaV0udmFsdWUuYXBwbHkodGhhdCwgYXJncyk7XG4gIH0sXG4gIGFwcGx5OiBmdW5jdGlvbih0eXBlLCB0aGF0LCBhcmdzKSB7XG4gICAgaWYgKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodHlwZSkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0eXBlKTtcbiAgICBmb3IgKHZhciB0ID0gdGhpcy5fW3R5cGVdLCBpID0gMCwgbiA9IHQubGVuZ3RoOyBpIDwgbjsgKytpKSB0W2ldLnZhbHVlLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBnZXQodHlwZSwgbmFtZSkge1xuICBmb3IgKHZhciBpID0gMCwgbiA9IHR5cGUubGVuZ3RoLCBjOyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKChjID0gdHlwZVtpXSkubmFtZSA9PT0gbmFtZSkge1xuICAgICAgcmV0dXJuIGMudmFsdWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNldCh0eXBlLCBuYW1lLCBjYWxsYmFjaykge1xuICBmb3IgKHZhciBpID0gMCwgbiA9IHR5cGUubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKHR5cGVbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgdHlwZVtpXSA9IG5vb3AsIHR5cGUgPSB0eXBlLnNsaWNlKDAsIGkpLmNvbmNhdCh0eXBlLnNsaWNlKGkgKyAxKSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGNhbGxiYWNrICE9IG51bGwpIHR5cGUucHVzaCh7bmFtZTogbmFtZSwgdmFsdWU6IGNhbGxiYWNrfSk7XG4gIHJldHVybiB0eXBlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBkaXNwYXRjaDtcbiIsIi8vIFdvcmQgY2xvdWQgbGF5b3V0IGJ5IEphc29uIERhdmllcywgaHR0cHM6Ly93d3cuamFzb25kYXZpZXMuY29tL3dvcmRjbG91ZC9cbi8vIEFsZ29yaXRobSBkdWUgdG8gSm9uYXRoYW4gRmVpbmJlcmcsIGh0dHA6Ly9zdGF0aWMubXJmZWluYmVyZy5jb20vYnZfY2gwMy5wZGZcblxudmFyIGRpc3BhdGNoID0gcmVxdWlyZShcImQzLWRpc3BhdGNoXCIpLmRpc3BhdGNoO1xuXG52YXIgY2xvdWRSYWRpYW5zID0gTWF0aC5QSSAvIDE4MCxcbiAgICBjdyA9IDEgPDwgMTEgPj4gNSxcbiAgICBjaCA9IDEgPDwgMTE7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzaXplID0gWzI1NiwgMjU2XSxcbiAgICAgIHRleHQgPSBjbG91ZFRleHQsXG4gICAgICBmb250ID0gY2xvdWRGb250LFxuICAgICAgZm9udFNpemUgPSBjbG91ZEZvbnRTaXplLFxuICAgICAgZm9udFN0eWxlID0gY2xvdWRGb250Tm9ybWFsLFxuICAgICAgZm9udFdlaWdodCA9IGNsb3VkRm9udE5vcm1hbCxcbiAgICAgIHJvdGF0ZSA9IGNsb3VkUm90YXRlLFxuICAgICAgcGFkZGluZyA9IGNsb3VkUGFkZGluZyxcbiAgICAgIHNwaXJhbCA9IGFyY2hpbWVkZWFuU3BpcmFsLFxuICAgICAgd29yZHMgPSBbXSxcbiAgICAgIHRpbWVJbnRlcnZhbCA9IEluZmluaXR5LFxuICAgICAgZXZlbnQgPSBkaXNwYXRjaChcIndvcmRcIiwgXCJlbmRcIiksXG4gICAgICB0aW1lciA9IG51bGwsXG4gICAgICByYW5kb20gPSBNYXRoLnJhbmRvbSxcbiAgICAgIGNsb3VkID0ge30sXG4gICAgICBjYW52YXMgPSBjbG91ZENhbnZhcztcblxuICBjbG91ZC5jYW52YXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2FudmFzID0gZnVuY3RvcihfKSwgY2xvdWQpIDogY2FudmFzO1xuICB9O1xuXG4gIGNsb3VkLnN0YXJ0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNvbnRleHRBbmRSYXRpbyA9IGdldENvbnRleHQoY2FudmFzKCkpLFxuICAgICAgICBib2FyZCA9IHplcm9BcnJheSgoc2l6ZVswXSA+PiA1KSAqIHNpemVbMV0pLFxuICAgICAgICBib3VuZHMgPSBudWxsLFxuICAgICAgICBuID0gd29yZHMubGVuZ3RoLFxuICAgICAgICBpID0gLTEsXG4gICAgICAgIHRhZ3MgPSBbXSxcbiAgICAgICAgZGF0YSA9IHdvcmRzLm1hcChmdW5jdGlvbihkLCBpKSB7XG4gICAgICAgICAgZC50ZXh0ID0gdGV4dC5jYWxsKHRoaXMsIGQsIGkpO1xuICAgICAgICAgIGQuZm9udCA9IGZvbnQuY2FsbCh0aGlzLCBkLCBpKTtcbiAgICAgICAgICBkLnN0eWxlID0gZm9udFN0eWxlLmNhbGwodGhpcywgZCwgaSk7XG4gICAgICAgICAgZC53ZWlnaHQgPSBmb250V2VpZ2h0LmNhbGwodGhpcywgZCwgaSk7XG4gICAgICAgICAgZC5yb3RhdGUgPSByb3RhdGUuY2FsbCh0aGlzLCBkLCBpKTtcbiAgICAgICAgICBkLnNpemUgPSB+fmZvbnRTaXplLmNhbGwodGhpcywgZCwgaSk7XG4gICAgICAgICAgZC5wYWRkaW5nID0gcGFkZGluZy5jYWxsKHRoaXMsIGQsIGkpO1xuICAgICAgICAgIHJldHVybiBkO1xuICAgICAgICB9KS5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGIuc2l6ZSAtIGEuc2l6ZTsgfSk7XG5cbiAgICBpZiAodGltZXIpIGNsZWFySW50ZXJ2YWwodGltZXIpO1xuICAgIHRpbWVyID0gc2V0SW50ZXJ2YWwoc3RlcCwgMCk7XG4gICAgc3RlcCgpO1xuXG4gICAgcmV0dXJuIGNsb3VkO1xuXG4gICAgZnVuY3Rpb24gc3RlcCgpIHtcbiAgICAgIHZhciBzdGFydCA9IERhdGUubm93KCk7XG4gICAgICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0IDwgdGltZUludGVydmFsICYmICsraSA8IG4gJiYgdGltZXIpIHtcbiAgICAgICAgdmFyIGQgPSBkYXRhW2ldO1xuICAgICAgICBkLnggPSAoc2l6ZVswXSAqIChyYW5kb20oKSArIC41KSkgPj4gMTtcbiAgICAgICAgZC55ID0gKHNpemVbMV0gKiAocmFuZG9tKCkgKyAuNSkpID4+IDE7XG4gICAgICAgIGNsb3VkU3ByaXRlKGNvbnRleHRBbmRSYXRpbywgZCwgZGF0YSwgaSk7XG4gICAgICAgIGlmIChkLmhhc1RleHQgJiYgcGxhY2UoYm9hcmQsIGQsIGJvdW5kcykpIHtcbiAgICAgICAgICB0YWdzLnB1c2goZCk7XG4gICAgICAgICAgZXZlbnQuY2FsbChcIndvcmRcIiwgY2xvdWQsIGQpO1xuICAgICAgICAgIGlmIChib3VuZHMpIGNsb3VkQm91bmRzKGJvdW5kcywgZCk7XG4gICAgICAgICAgZWxzZSBib3VuZHMgPSBbe3g6IGQueCArIGQueDAsIHk6IGQueSArIGQueTB9LCB7eDogZC54ICsgZC54MSwgeTogZC55ICsgZC55MX1dO1xuICAgICAgICAgIC8vIFRlbXBvcmFyeSBoYWNrXG4gICAgICAgICAgZC54IC09IHNpemVbMF0gPj4gMTtcbiAgICAgICAgICBkLnkgLT0gc2l6ZVsxXSA+PiAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaSA+PSBuKSB7XG4gICAgICAgIGNsb3VkLnN0b3AoKTtcbiAgICAgICAgZXZlbnQuY2FsbChcImVuZFwiLCBjbG91ZCwgdGFncywgYm91bmRzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjbG91ZC5zdG9wID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICAgIHRpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNsb3VkO1xuICB9O1xuXG4gIGZ1bmN0aW9uIGdldENvbnRleHQoY2FudmFzKSB7XG4gICAgY2FudmFzLndpZHRoID0gY2FudmFzLmhlaWdodCA9IDE7XG4gICAgdmFyIHJhdGlvID0gTWF0aC5zcXJ0KGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIikuZ2V0SW1hZ2VEYXRhKDAsIDAsIDEsIDEpLmRhdGEubGVuZ3RoID4+IDIpO1xuICAgIGNhbnZhcy53aWR0aCA9IChjdyA8PCA1KSAvIHJhdGlvO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBjaCAvIHJhdGlvO1xuXG4gICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gY29udGV4dC5zdHJva2VTdHlsZSA9IFwicmVkXCI7XG4gICAgY29udGV4dC50ZXh0QWxpZ24gPSBcImNlbnRlclwiO1xuXG4gICAgcmV0dXJuIHtjb250ZXh0OiBjb250ZXh0LCByYXRpbzogcmF0aW99O1xuICB9XG5cbiAgZnVuY3Rpb24gcGxhY2UoYm9hcmQsIHRhZywgYm91bmRzKSB7XG4gICAgdmFyIHBlcmltZXRlciA9IFt7eDogMCwgeTogMH0sIHt4OiBzaXplWzBdLCB5OiBzaXplWzFdfV0sXG4gICAgICAgIHN0YXJ0WCA9IHRhZy54LFxuICAgICAgICBzdGFydFkgPSB0YWcueSxcbiAgICAgICAgbWF4RGVsdGEgPSBNYXRoLnNxcnQoc2l6ZVswXSAqIHNpemVbMF0gKyBzaXplWzFdICogc2l6ZVsxXSksXG4gICAgICAgIHMgPSBzcGlyYWwoc2l6ZSksXG4gICAgICAgIGR0ID0gcmFuZG9tKCkgPCAuNSA/IDEgOiAtMSxcbiAgICAgICAgdCA9IC1kdCxcbiAgICAgICAgZHhkeSxcbiAgICAgICAgZHgsXG4gICAgICAgIGR5O1xuXG4gICAgd2hpbGUgKGR4ZHkgPSBzKHQgKz0gZHQpKSB7XG4gICAgICBkeCA9IH5+ZHhkeVswXTtcbiAgICAgIGR5ID0gfn5keGR5WzFdO1xuXG4gICAgICBpZiAoTWF0aC5taW4oTWF0aC5hYnMoZHgpLCBNYXRoLmFicyhkeSkpID49IG1heERlbHRhKSBicmVhaztcblxuICAgICAgdGFnLnggPSBzdGFydFggKyBkeDtcbiAgICAgIHRhZy55ID0gc3RhcnRZICsgZHk7XG5cbiAgICAgIGlmICh0YWcueCArIHRhZy54MCA8IDAgfHwgdGFnLnkgKyB0YWcueTAgPCAwIHx8XG4gICAgICAgICAgdGFnLnggKyB0YWcueDEgPiBzaXplWzBdIHx8IHRhZy55ICsgdGFnLnkxID4gc2l6ZVsxXSkgY29udGludWU7XG4gICAgICAvLyBUT0RPIG9ubHkgY2hlY2sgZm9yIGNvbGxpc2lvbnMgd2l0aGluIGN1cnJlbnQgYm91bmRzLlxuICAgICAgaWYgKCFib3VuZHMgfHwgIWNsb3VkQ29sbGlkZSh0YWcsIGJvYXJkLCBzaXplWzBdKSkge1xuICAgICAgICBpZiAoIWJvdW5kcyB8fCBjb2xsaWRlUmVjdHModGFnLCBib3VuZHMpKSB7XG4gICAgICAgICAgdmFyIHNwcml0ZSA9IHRhZy5zcHJpdGUsXG4gICAgICAgICAgICAgIHcgPSB0YWcud2lkdGggPj4gNSxcbiAgICAgICAgICAgICAgc3cgPSBzaXplWzBdID4+IDUsXG4gICAgICAgICAgICAgIGx4ID0gdGFnLnggLSAodyA8PCA0KSxcbiAgICAgICAgICAgICAgc3ggPSBseCAmIDB4N2YsXG4gICAgICAgICAgICAgIG1zeCA9IDMyIC0gc3gsXG4gICAgICAgICAgICAgIGggPSB0YWcueTEgLSB0YWcueTAsXG4gICAgICAgICAgICAgIHggPSAodGFnLnkgKyB0YWcueTApICogc3cgKyAobHggPj4gNSksXG4gICAgICAgICAgICAgIGxhc3Q7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBoOyBqKyspIHtcbiAgICAgICAgICAgIGxhc3QgPSAwO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gdzsgaSsrKSB7XG4gICAgICAgICAgICAgIGJvYXJkW3ggKyBpXSB8PSAobGFzdCA8PCBtc3gpIHwgKGkgPCB3ID8gKGxhc3QgPSBzcHJpdGVbaiAqIHcgKyBpXSkgPj4+IHN4IDogMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4ICs9IHN3O1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgdGFnLnNwcml0ZTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjbG91ZC50aW1lSW50ZXJ2YWwgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGltZUludGVydmFsID0gXyA9PSBudWxsID8gSW5maW5pdHkgOiBfLCBjbG91ZCkgOiB0aW1lSW50ZXJ2YWw7XG4gIH07XG5cbiAgY2xvdWQud29yZHMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAod29yZHMgPSBfLCBjbG91ZCkgOiB3b3JkcztcbiAgfTtcblxuICBjbG91ZC5zaXplID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNpemUgPSBbK19bMF0sICtfWzFdXSwgY2xvdWQpIDogc2l6ZTtcbiAgfTtcblxuICBjbG91ZC5mb250ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGZvbnQgPSBmdW5jdG9yKF8pLCBjbG91ZCkgOiBmb250O1xuICB9O1xuXG4gIGNsb3VkLmZvbnRTdHlsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChmb250U3R5bGUgPSBmdW5jdG9yKF8pLCBjbG91ZCkgOiBmb250U3R5bGU7XG4gIH07XG5cbiAgY2xvdWQuZm9udFdlaWdodCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChmb250V2VpZ2h0ID0gZnVuY3RvcihfKSwgY2xvdWQpIDogZm9udFdlaWdodDtcbiAgfTtcblxuICBjbG91ZC5yb3RhdGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocm90YXRlID0gZnVuY3RvcihfKSwgY2xvdWQpIDogcm90YXRlO1xuICB9O1xuXG4gIGNsb3VkLnRleHQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodGV4dCA9IGZ1bmN0b3IoXyksIGNsb3VkKSA6IHRleHQ7XG4gIH07XG5cbiAgY2xvdWQuc3BpcmFsID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNwaXJhbCA9IHNwaXJhbHNbX10gfHwgXywgY2xvdWQpIDogc3BpcmFsO1xuICB9O1xuXG4gIGNsb3VkLmZvbnRTaXplID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGZvbnRTaXplID0gZnVuY3RvcihfKSwgY2xvdWQpIDogZm9udFNpemU7XG4gIH07XG5cbiAgY2xvdWQucGFkZGluZyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRkaW5nID0gZnVuY3RvcihfKSwgY2xvdWQpIDogcGFkZGluZztcbiAgfTtcblxuICBjbG91ZC5yYW5kb20gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZG9tID0gXywgY2xvdWQpIDogcmFuZG9tO1xuICB9O1xuXG4gIGNsb3VkLm9uID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlID0gZXZlbnQub24uYXBwbHkoZXZlbnQsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHZhbHVlID09PSBldmVudCA/IGNsb3VkIDogdmFsdWU7XG4gIH07XG5cbiAgcmV0dXJuIGNsb3VkO1xufTtcblxuZnVuY3Rpb24gY2xvdWRUZXh0KGQpIHtcbiAgcmV0dXJuIGQudGV4dDtcbn1cblxuZnVuY3Rpb24gY2xvdWRGb250KCkge1xuICByZXR1cm4gXCJzZXJpZlwiO1xufVxuXG5mdW5jdGlvbiBjbG91ZEZvbnROb3JtYWwoKSB7XG4gIHJldHVybiBcIm5vcm1hbFwiO1xufVxuXG5mdW5jdGlvbiBjbG91ZEZvbnRTaXplKGQpIHtcbiAgcmV0dXJuIE1hdGguc3FydChkLnZhbHVlKTtcbn1cblxuZnVuY3Rpb24gY2xvdWRSb3RhdGUoKSB7XG4gIHJldHVybiAofn4oTWF0aC5yYW5kb20oKSAqIDYpIC0gMykgKiAzMDtcbn1cblxuZnVuY3Rpb24gY2xvdWRQYWRkaW5nKCkge1xuICByZXR1cm4gMTtcbn1cblxuLy8gRmV0Y2hlcyBhIG1vbm9jaHJvbWUgc3ByaXRlIGJpdG1hcCBmb3IgdGhlIHNwZWNpZmllZCB0ZXh0LlxuLy8gTG9hZCBpbiBiYXRjaGVzIGZvciBzcGVlZC5cbmZ1bmN0aW9uIGNsb3VkU3ByaXRlKGNvbnRleHRBbmRSYXRpbywgZCwgZGF0YSwgZGkpIHtcbiAgaWYgKGQuc3ByaXRlKSByZXR1cm47XG4gIHZhciBjID0gY29udGV4dEFuZFJhdGlvLmNvbnRleHQsXG4gICAgICByYXRpbyA9IGNvbnRleHRBbmRSYXRpby5yYXRpbztcblxuICBjLmNsZWFyUmVjdCgwLCAwLCAoY3cgPDwgNSkgLyByYXRpbywgY2ggLyByYXRpbyk7XG4gIHZhciB4ID0gMCxcbiAgICAgIHkgPSAwLFxuICAgICAgbWF4aCA9IDAsXG4gICAgICBuID0gZGF0YS5sZW5ndGg7XG4gIC0tZGk7XG4gIHdoaWxlICgrK2RpIDwgbikge1xuICAgIGQgPSBkYXRhW2RpXTtcbiAgICBjLnNhdmUoKTtcbiAgICBjLmZvbnQgPSBkLnN0eWxlICsgXCIgXCIgKyBkLndlaWdodCArIFwiIFwiICsgfn4oKGQuc2l6ZSArIDEpIC8gcmF0aW8pICsgXCJweCBcIiArIGQuZm9udDtcbiAgICB2YXIgdyA9IGMubWVhc3VyZVRleHQoZC50ZXh0ICsgXCJtXCIpLndpZHRoICogcmF0aW8sXG4gICAgICAgIGggPSBkLnNpemUgPDwgMTtcbiAgICBpZiAoZC5yb3RhdGUpIHtcbiAgICAgIHZhciBzciA9IE1hdGguc2luKGQucm90YXRlICogY2xvdWRSYWRpYW5zKSxcbiAgICAgICAgICBjciA9IE1hdGguY29zKGQucm90YXRlICogY2xvdWRSYWRpYW5zKSxcbiAgICAgICAgICB3Y3IgPSB3ICogY3IsXG4gICAgICAgICAgd3NyID0gdyAqIHNyLFxuICAgICAgICAgIGhjciA9IGggKiBjcixcbiAgICAgICAgICBoc3IgPSBoICogc3I7XG4gICAgICB3ID0gKE1hdGgubWF4KE1hdGguYWJzKHdjciArIGhzciksIE1hdGguYWJzKHdjciAtIGhzcikpICsgMHgxZikgPj4gNSA8PCA1O1xuICAgICAgaCA9IH5+TWF0aC5tYXgoTWF0aC5hYnMod3NyICsgaGNyKSwgTWF0aC5hYnMod3NyIC0gaGNyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHcgPSAodyArIDB4MWYpID4+IDUgPDwgNTtcbiAgICB9XG4gICAgaWYgKGggPiBtYXhoKSBtYXhoID0gaDtcbiAgICBpZiAoeCArIHcgPj0gKGN3IDw8IDUpKSB7XG4gICAgICB4ID0gMDtcbiAgICAgIHkgKz0gbWF4aDtcbiAgICAgIG1heGggPSAwO1xuICAgIH1cbiAgICBpZiAoeSArIGggPj0gY2gpIGJyZWFrO1xuICAgIGMudHJhbnNsYXRlKCh4ICsgKHcgPj4gMSkpIC8gcmF0aW8sICh5ICsgKGggPj4gMSkpIC8gcmF0aW8pO1xuICAgIGlmIChkLnJvdGF0ZSkgYy5yb3RhdGUoZC5yb3RhdGUgKiBjbG91ZFJhZGlhbnMpO1xuICAgIGMuZmlsbFRleHQoZC50ZXh0LCAwLCAwKTtcbiAgICBpZiAoZC5wYWRkaW5nKSBjLmxpbmVXaWR0aCA9IDIgKiBkLnBhZGRpbmcsIGMuc3Ryb2tlVGV4dChkLnRleHQsIDAsIDApO1xuICAgIGMucmVzdG9yZSgpO1xuICAgIGQud2lkdGggPSB3O1xuICAgIGQuaGVpZ2h0ID0gaDtcbiAgICBkLnhvZmYgPSB4O1xuICAgIGQueW9mZiA9IHk7XG4gICAgZC54MSA9IHcgPj4gMTtcbiAgICBkLnkxID0gaCA+PiAxO1xuICAgIGQueDAgPSAtZC54MTtcbiAgICBkLnkwID0gLWQueTE7XG4gICAgZC5oYXNUZXh0ID0gdHJ1ZTtcbiAgICB4ICs9IHc7XG4gIH1cbiAgdmFyIHBpeGVscyA9IGMuZ2V0SW1hZ2VEYXRhKDAsIDAsIChjdyA8PCA1KSAvIHJhdGlvLCBjaCAvIHJhdGlvKS5kYXRhLFxuICAgICAgc3ByaXRlID0gW107XG4gIHdoaWxlICgtLWRpID49IDApIHtcbiAgICBkID0gZGF0YVtkaV07XG4gICAgaWYgKCFkLmhhc1RleHQpIGNvbnRpbnVlO1xuICAgIHZhciB3ID0gZC53aWR0aCxcbiAgICAgICAgdzMyID0gdyA+PiA1LFxuICAgICAgICBoID0gZC55MSAtIGQueTA7XG4gICAgLy8gWmVybyB0aGUgYnVmZmVyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoICogdzMyOyBpKyspIHNwcml0ZVtpXSA9IDA7XG4gICAgeCA9IGQueG9mZjtcbiAgICBpZiAoeCA9PSBudWxsKSByZXR1cm47XG4gICAgeSA9IGQueW9mZjtcbiAgICB2YXIgc2VlbiA9IDAsXG4gICAgICAgIHNlZW5Sb3cgPSAtMTtcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGg7IGorKykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3OyBpKyspIHtcbiAgICAgICAgdmFyIGsgPSB3MzIgKiBqICsgKGkgPj4gNSksXG4gICAgICAgICAgICBtID0gcGl4ZWxzWygoeSArIGopICogKGN3IDw8IDUpICsgKHggKyBpKSkgPDwgMl0gPyAxIDw8ICgzMSAtIChpICUgMzIpKSA6IDA7XG4gICAgICAgIHNwcml0ZVtrXSB8PSBtO1xuICAgICAgICBzZWVuIHw9IG07XG4gICAgICB9XG4gICAgICBpZiAoc2Vlbikgc2VlblJvdyA9IGo7XG4gICAgICBlbHNlIHtcbiAgICAgICAgZC55MCsrO1xuICAgICAgICBoLS07XG4gICAgICAgIGotLTtcbiAgICAgICAgeSsrO1xuICAgICAgfVxuICAgIH1cbiAgICBkLnkxID0gZC55MCArIHNlZW5Sb3c7XG4gICAgZC5zcHJpdGUgPSBzcHJpdGUuc2xpY2UoMCwgKGQueTEgLSBkLnkwKSAqIHczMik7XG4gIH1cbn1cblxuLy8gVXNlIG1hc2stYmFzZWQgY29sbGlzaW9uIGRldGVjdGlvbi5cbmZ1bmN0aW9uIGNsb3VkQ29sbGlkZSh0YWcsIGJvYXJkLCBzdykge1xuICBzdyA+Pj0gNTtcbiAgdmFyIHNwcml0ZSA9IHRhZy5zcHJpdGUsXG4gICAgICB3ID0gdGFnLndpZHRoID4+IDUsXG4gICAgICBseCA9IHRhZy54IC0gKHcgPDwgNCksXG4gICAgICBzeCA9IGx4ICYgMHg3ZixcbiAgICAgIG1zeCA9IDMyIC0gc3gsXG4gICAgICBoID0gdGFnLnkxIC0gdGFnLnkwLFxuICAgICAgeCA9ICh0YWcueSArIHRhZy55MCkgKiBzdyArIChseCA+PiA1KSxcbiAgICAgIGxhc3Q7XG4gIGZvciAodmFyIGogPSAwOyBqIDwgaDsgaisrKSB7XG4gICAgbGFzdCA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gdzsgaSsrKSB7XG4gICAgICBpZiAoKChsYXN0IDw8IG1zeCkgfCAoaSA8IHcgPyAobGFzdCA9IHNwcml0ZVtqICogdyArIGldKSA+Pj4gc3ggOiAwKSlcbiAgICAgICAgICAmIGJvYXJkW3ggKyBpXSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHggKz0gc3c7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjbG91ZEJvdW5kcyhib3VuZHMsIGQpIHtcbiAgdmFyIGIwID0gYm91bmRzWzBdLFxuICAgICAgYjEgPSBib3VuZHNbMV07XG4gIGlmIChkLnggKyBkLngwIDwgYjAueCkgYjAueCA9IGQueCArIGQueDA7XG4gIGlmIChkLnkgKyBkLnkwIDwgYjAueSkgYjAueSA9IGQueSArIGQueTA7XG4gIGlmIChkLnggKyBkLngxID4gYjEueCkgYjEueCA9IGQueCArIGQueDE7XG4gIGlmIChkLnkgKyBkLnkxID4gYjEueSkgYjEueSA9IGQueSArIGQueTE7XG59XG5cbmZ1bmN0aW9uIGNvbGxpZGVSZWN0cyhhLCBiKSB7XG4gIHJldHVybiBhLnggKyBhLngxID4gYlswXS54ICYmIGEueCArIGEueDAgPCBiWzFdLnggJiYgYS55ICsgYS55MSA+IGJbMF0ueSAmJiBhLnkgKyBhLnkwIDwgYlsxXS55O1xufVxuXG5mdW5jdGlvbiBhcmNoaW1lZGVhblNwaXJhbChzaXplKSB7XG4gIHZhciBlID0gc2l6ZVswXSAvIHNpemVbMV07XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIFtlICogKHQgKj0gLjEpICogTWF0aC5jb3ModCksIHQgKiBNYXRoLnNpbih0KV07XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlY3Rhbmd1bGFyU3BpcmFsKHNpemUpIHtcbiAgdmFyIGR5ID0gNCxcbiAgICAgIGR4ID0gZHkgKiBzaXplWzBdIC8gc2l6ZVsxXSxcbiAgICAgIHggPSAwLFxuICAgICAgeSA9IDA7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdmFyIHNpZ24gPSB0IDwgMCA/IC0xIDogMTtcbiAgICAvLyBTZWUgdHJpYW5ndWxhciBudW1iZXJzOiBUX24gPSBuICogKG4gKyAxKSAvIDIuXG4gICAgc3dpdGNoICgoTWF0aC5zcXJ0KDEgKyA0ICogc2lnbiAqIHQpIC0gc2lnbikgJiAzKSB7XG4gICAgICBjYXNlIDA6ICB4ICs9IGR4OyBicmVhaztcbiAgICAgIGNhc2UgMTogIHkgKz0gZHk7IGJyZWFrO1xuICAgICAgY2FzZSAyOiAgeCAtPSBkeDsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiB5IC09IGR5OyBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIFt4LCB5XTtcbiAgfTtcbn1cblxuLy8gVE9ETyByZXVzZSBhcnJheXM/XG5mdW5jdGlvbiB6ZXJvQXJyYXkobikge1xuICB2YXIgYSA9IFtdLFxuICAgICAgaSA9IC0xO1xuICB3aGlsZSAoKytpIDwgbikgYVtpXSA9IDA7XG4gIHJldHVybiBhO1xufVxuXG5mdW5jdGlvbiBjbG91ZENhbnZhcygpIHtcbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG59XG5cbmZ1bmN0aW9uIGZ1bmN0b3IoZCkge1xuICByZXR1cm4gdHlwZW9mIGQgPT09IFwiZnVuY3Rpb25cIiA/IGQgOiBmdW5jdGlvbigpIHsgcmV0dXJuIGQ7IH07XG59XG5cbnZhciBzcGlyYWxzID0ge1xuICBhcmNoaW1lZGVhbjogYXJjaGltZWRlYW5TcGlyYWwsXG4gIHJlY3Rhbmd1bGFyOiByZWN0YW5ndWxhclNwaXJhbFxufTtcbiIsIi8qIGdsb2JhbCBNYXA6cmVhZG9ubHksIFNldDpyZWFkb25seSwgQXJyYXlCdWZmZXI6cmVhZG9ubHkgKi9cblxudmFyIGhhc0VsZW1lbnRUeXBlID0gdHlwZW9mIEVsZW1lbnQgIT09ICd1bmRlZmluZWQnO1xudmFyIGhhc01hcCA9IHR5cGVvZiBNYXAgPT09ICdmdW5jdGlvbic7XG52YXIgaGFzU2V0ID0gdHlwZW9mIFNldCA9PT0gJ2Z1bmN0aW9uJztcbnZhciBoYXNBcnJheUJ1ZmZlciA9IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJiAhIUFycmF5QnVmZmVyLmlzVmlldztcblxuLy8gTm90ZTogV2UgKipkb24ndCoqIG5lZWQgYGVudkhhc0JpZ0ludDY0QXJyYXlgIGluIGZkZSBlczYvaW5kZXguanNcblxuZnVuY3Rpb24gZXF1YWwoYSwgYikge1xuICAvLyBTVEFSVDogZmFzdC1kZWVwLWVxdWFsIGVzNi9pbmRleC5qcyAzLjEuMVxuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG5cbiAgaWYgKGEgJiYgYiAmJiB0eXBlb2YgYSA9PSAnb2JqZWN0JyAmJiB0eXBlb2YgYiA9PSAnb2JqZWN0Jykge1xuICAgIGlmIChhLmNvbnN0cnVjdG9yICE9PSBiLmNvbnN0cnVjdG9yKSByZXR1cm4gZmFsc2U7XG5cbiAgICB2YXIgbGVuZ3RoLCBpLCBrZXlzO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgICBsZW5ndGggPSBhLmxlbmd0aDtcbiAgICAgIGlmIChsZW5ndGggIT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICAgIGZvciAoaSA9IGxlbmd0aDsgaS0tICE9PSAwOylcbiAgICAgICAgaWYgKCFlcXVhbChhW2ldLCBiW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gU1RBUlQ6IE1vZGlmaWNhdGlvbnM6XG4gICAgLy8gMS4gRXh0cmEgYGhhczxUeXBlPiAmJmAgaGVscGVycyBpbiBpbml0aWFsIGNvbmRpdGlvbiBhbGxvdyBlczYgY29kZVxuICAgIC8vICAgIHRvIGNvLWV4aXN0IHdpdGggZXM1LlxuICAgIC8vIDIuIFJlcGxhY2UgYGZvciBvZmAgd2l0aCBlczUgY29tcGxpYW50IGl0ZXJhdGlvbiB1c2luZyBgZm9yYC5cbiAgICAvLyAgICBCYXNpY2FsbHksIHRha2U6XG4gICAgLy9cbiAgICAvLyAgICBgYGBqc1xuICAgIC8vICAgIGZvciAoaSBvZiBhLmVudHJpZXMoKSlcbiAgICAvLyAgICAgIGlmICghYi5oYXMoaVswXSkpIHJldHVybiBmYWxzZTtcbiAgICAvLyAgICBgYGBcbiAgICAvL1xuICAgIC8vICAgIC4uLiBhbmQgY29udmVydCB0bzpcbiAgICAvL1xuICAgIC8vICAgIGBgYGpzXG4gICAgLy8gICAgaXQgPSBhLmVudHJpZXMoKTtcbiAgICAvLyAgICB3aGlsZSAoIShpID0gaXQubmV4dCgpKS5kb25lKVxuICAgIC8vICAgICAgaWYgKCFiLmhhcyhpLnZhbHVlWzBdKSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vICAgIGBgYFxuICAgIC8vXG4gICAgLy8gICAgKipOb3RlKio6IGBpYCBhY2Nlc3Mgc3dpdGNoZXMgdG8gYGkudmFsdWVgLlxuICAgIHZhciBpdDtcbiAgICBpZiAoaGFzTWFwICYmIChhIGluc3RhbmNlb2YgTWFwKSAmJiAoYiBpbnN0YW5jZW9mIE1hcCkpIHtcbiAgICAgIGlmIChhLnNpemUgIT09IGIuc2l6ZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaXQgPSBhLmVudHJpZXMoKTtcbiAgICAgIHdoaWxlICghKGkgPSBpdC5uZXh0KCkpLmRvbmUpXG4gICAgICAgIGlmICghYi5oYXMoaS52YWx1ZVswXSkpIHJldHVybiBmYWxzZTtcbiAgICAgIGl0ID0gYS5lbnRyaWVzKCk7XG4gICAgICB3aGlsZSAoIShpID0gaXQubmV4dCgpKS5kb25lKVxuICAgICAgICBpZiAoIWVxdWFsKGkudmFsdWVbMV0sIGIuZ2V0KGkudmFsdWVbMF0pKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGhhc1NldCAmJiAoYSBpbnN0YW5jZW9mIFNldCkgJiYgKGIgaW5zdGFuY2VvZiBTZXQpKSB7XG4gICAgICBpZiAoYS5zaXplICE9PSBiLnNpemUpIHJldHVybiBmYWxzZTtcbiAgICAgIGl0ID0gYS5lbnRyaWVzKCk7XG4gICAgICB3aGlsZSAoIShpID0gaXQubmV4dCgpKS5kb25lKVxuICAgICAgICBpZiAoIWIuaGFzKGkudmFsdWVbMF0pKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gRU5EOiBNb2RpZmljYXRpb25zXG5cbiAgICBpZiAoaGFzQXJyYXlCdWZmZXIgJiYgQXJyYXlCdWZmZXIuaXNWaWV3KGEpICYmIEFycmF5QnVmZmVyLmlzVmlldyhiKSkge1xuICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSAhPT0gMDspXG4gICAgICAgIGlmIChhW2ldICE9PSBiW2ldKSByZXR1cm4gZmFsc2U7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoYS5jb25zdHJ1Y3RvciA9PT0gUmVnRXhwKSByZXR1cm4gYS5zb3VyY2UgPT09IGIuc291cmNlICYmIGEuZmxhZ3MgPT09IGIuZmxhZ3M7XG4gICAgaWYgKGEudmFsdWVPZiAhPT0gT2JqZWN0LnByb3RvdHlwZS52YWx1ZU9mKSByZXR1cm4gYS52YWx1ZU9mKCkgPT09IGIudmFsdWVPZigpO1xuICAgIGlmIChhLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKSByZXR1cm4gYS50b1N0cmluZygpID09PSBiLnRvU3RyaW5nKCk7XG5cbiAgICBrZXlzID0gT2JqZWN0LmtleXMoYSk7XG4gICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgaWYgKGxlbmd0aCAhPT0gT2JqZWN0LmtleXMoYikubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSAhPT0gMDspXG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBrZXlzW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIEVORDogZmFzdC1kZWVwLWVxdWFsXG5cbiAgICAvLyBTVEFSVDogcmVhY3QtZmFzdC1jb21wYXJlXG4gICAgLy8gY3VzdG9tIGhhbmRsaW5nIGZvciBET00gZWxlbWVudHNcbiAgICBpZiAoaGFzRWxlbWVudFR5cGUgJiYgYSBpbnN0YW5jZW9mIEVsZW1lbnQpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIGN1c3RvbSBoYW5kbGluZyBmb3IgUmVhY3QvUHJlYWN0XG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KSB7XG4gICAgICBpZiAoKGtleXNbaV0gPT09ICdfb3duZXInIHx8IGtleXNbaV0gPT09ICdfX3YnIHx8IGtleXNbaV0gPT09ICdfX28nKSAmJiBhLiQkdHlwZW9mKSB7XG4gICAgICAgIC8vIFJlYWN0LXNwZWNpZmljOiBhdm9pZCB0cmF2ZXJzaW5nIFJlYWN0IGVsZW1lbnRzJyBfb3duZXJcbiAgICAgICAgLy8gUHJlYWN0LXNwZWNpZmljOiBhdm9pZCB0cmF2ZXJzaW5nIFByZWFjdCBlbGVtZW50cycgX192IGFuZCBfX29cbiAgICAgICAgLy8gICAgX192ID0gJF9vcmlnaW5hbCAvICRfdm5vZGVcbiAgICAgICAgLy8gICAgX19vID0gJF9vd25lclxuICAgICAgICAvLyBUaGVzZSBwcm9wZXJ0aWVzIGNvbnRhaW4gY2lyY3VsYXIgcmVmZXJlbmNlcyBhbmQgYXJlIG5vdCBuZWVkZWQgd2hlblxuICAgICAgICAvLyBjb21wYXJpbmcgdGhlIGFjdHVhbCBlbGVtZW50cyAoYW5kIG5vdCB0aGVpciBvd25lcnMpXG4gICAgICAgIC8vIC4kJHR5cGVvZiBhbmQgLl9zdG9yZSBvbiBqdXN0IHJlYXNvbmFibGUgbWFya2VycyBvZiBlbGVtZW50c1xuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBhbGwgb3RoZXIgcHJvcGVydGllcyBzaG91bGQgYmUgdHJhdmVyc2VkIGFzIHVzdWFsXG4gICAgICBpZiAoIWVxdWFsKGFba2V5c1tpXV0sIGJba2V5c1tpXV0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIEVORDogcmVhY3QtZmFzdC1jb21wYXJlXG5cbiAgICAvLyBTVEFSVDogZmFzdC1kZWVwLWVxdWFsXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gYSAhPT0gYSAmJiBiICE9PSBiO1xufVxuLy8gZW5kIGZhc3QtZGVlcC1lcXVhbFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzRXF1YWwoYSwgYikge1xuICB0cnkge1xuICAgIHJldHVybiBlcXVhbChhLCBiKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoKChlcnJvci5tZXNzYWdlIHx8ICcnKS5tYXRjaCgvc3RhY2t8cmVjdXJzaW9uL2kpKSkge1xuICAgICAgLy8gd2FybiBvbiBjaXJjdWxhciByZWZlcmVuY2VzLCBkb24ndCBjcmFzaFxuICAgICAgLy8gYnJvd3NlcnMgZ2l2ZSB0aGlzIGRpZmZlcmVudCBlcnJvcnMgbmFtZSBhbmQgbWVzc2FnZXM6XG4gICAgICAvLyBjaHJvbWUvc2FmYXJpOiBcIlJhbmdlRXJyb3JcIiwgXCJNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiXG4gICAgICAvLyBmaXJlZm94OiBcIkludGVybmFsRXJyb3JcIiwgdG9vIG11Y2ggcmVjdXJzaW9uXCJcbiAgICAgIC8vIGVkZ2U6IFwiRXJyb3JcIiwgXCJPdXQgb2Ygc3RhY2sgc3BhY2VcIlxuICAgICAgY29uc29sZS53YXJuKCdyZWFjdC1mYXN0LWNvbXBhcmUgY2Fubm90IGhhbmRsZSBjaXJjdWxhciByZWZzJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIHNvbWUgb3RoZXIgZXJyb3IuIHdlIHNob3VsZCBkZWZpbml0ZWx5IGtub3cgYWJvdXQgdGhlc2VcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcbiIsImV4cG9ydCB2YXIgeGh0bWwgPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBzdmc6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgeGh0bWw6IHhodG1sLFxuICB4bGluazogXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIsXG4gIHhtbDogXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIixcbiAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy9cIlxufTtcbiIsImltcG9ydCBuYW1lc3BhY2VzIGZyb20gXCIuL25hbWVzcGFjZXMuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgcHJlZml4ID0gbmFtZSArPSBcIlwiLCBpID0gcHJlZml4LmluZGV4T2YoXCI6XCIpO1xuICBpZiAoaSA+PSAwICYmIChwcmVmaXggPSBuYW1lLnNsaWNlKDAsIGkpKSAhPT0gXCJ4bWxuc1wiKSBuYW1lID0gbmFtZS5zbGljZShpICsgMSk7XG4gIHJldHVybiBuYW1lc3BhY2VzLmhhc093blByb3BlcnR5KHByZWZpeCkgPyB7c3BhY2U6IG5hbWVzcGFjZXNbcHJlZml4XSwgbG9jYWw6IG5hbWV9IDogbmFtZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbn1cbiIsImltcG9ydCBuYW1lc3BhY2UgZnJvbSBcIi4vbmFtZXNwYWNlLmpzXCI7XG5pbXBvcnQge3hodG1sfSBmcm9tIFwiLi9uYW1lc3BhY2VzLmpzXCI7XG5cbmZ1bmN0aW9uIGNyZWF0b3JJbmhlcml0KG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBkb2N1bWVudCA9IHRoaXMub3duZXJEb2N1bWVudCxcbiAgICAgICAgdXJpID0gdGhpcy5uYW1lc3BhY2VVUkk7XG4gICAgcmV0dXJuIHVyaSA9PT0geGh0bWwgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0geGh0bWxcbiAgICAgICAgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpXG4gICAgICAgIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHVyaSwgbmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0b3JGaXhlZChmdWxsbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gIHJldHVybiAoZnVsbG5hbWUubG9jYWxcbiAgICAgID8gY3JlYXRvckZpeGVkXG4gICAgICA6IGNyZWF0b3JJbmhlcml0KShmdWxsbmFtZSk7XG59XG4iLCJmdW5jdGlvbiBub25lKCkge31cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHNlbGVjdG9yID09IG51bGwgPyBub25lIDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gIH07XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCBzZWxlY3RvciBmcm9tIFwiLi4vc2VsZWN0b3IuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0KSB7XG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgc3Vibm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiAoc3Vibm9kZSA9IHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkpIHtcbiAgICAgICAgaWYgKFwiX19kYXRhX19cIiBpbiBub2RlKSBzdWJub2RlLl9fZGF0YV9fID0gbm9kZS5fX2RhdGFfXztcbiAgICAgICAgc3ViZ3JvdXBbaV0gPSBzdWJub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJvYmplY3RcIiAmJiBcImxlbmd0aFwiIGluIHhcbiAgICA/IHggLy8gQXJyYXksIFR5cGVkQXJyYXksIE5vZGVMaXN0LCBhcnJheS1saWtlXG4gICAgOiBBcnJheS5mcm9tKHgpOyAvLyBNYXAsIFNldCwgaXRlcmFibGUsIHN0cmluZywgb3IgYW55dGhpbmcgZWxzZVxufVxuIiwiZnVuY3Rpb24gZW1wdHkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHNlbGVjdG9yID09IG51bGwgPyBlbXB0eSA6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuICB9O1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgYXJyYXkgZnJvbSBcIi4uL2FycmF5LmpzXCI7XG5pbXBvcnQgc2VsZWN0b3JBbGwgZnJvbSBcIi4uL3NlbGVjdG9yQWxsLmpzXCI7XG5cbmZ1bmN0aW9uIGFycmF5QWxsKHNlbGVjdCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGdyb3VwID0gc2VsZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIGdyb3VwID09IG51bGwgPyBbXSA6IGFycmF5KGdyb3VwKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0KSB7XG4gIGlmICh0eXBlb2Ygc2VsZWN0ID09PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IGFycmF5QWxsKHNlbGVjdCk7XG4gIGVsc2Ugc2VsZWN0ID0gc2VsZWN0b3JBbGwoc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBbXSwgcGFyZW50cyA9IFtdLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzdWJncm91cHMucHVzaChzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpO1xuICAgICAgICBwYXJlbnRzLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCBwYXJlbnRzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoaWxkTWF0Y2hlcihzZWxlY3Rvcikge1xuICByZXR1cm4gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBub2RlLm1hdGNoZXMoc2VsZWN0b3IpO1xuICB9O1xufVxuXG4iLCJpbXBvcnQge2NoaWxkTWF0Y2hlcn0gZnJvbSBcIi4uL21hdGNoZXIuanNcIjtcblxudmFyIGZpbmQgPSBBcnJheS5wcm90b3R5cGUuZmluZDtcblxuZnVuY3Rpb24gY2hpbGRGaW5kKG1hdGNoKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZmluZC5jYWxsKHRoaXMuY2hpbGRyZW4sIG1hdGNoKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hpbGRGaXJzdCgpIHtcbiAgcmV0dXJuIHRoaXMuZmlyc3RFbGVtZW50Q2hpbGQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hdGNoKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdChtYXRjaCA9PSBudWxsID8gY2hpbGRGaXJzdFxuICAgICAgOiBjaGlsZEZpbmQodHlwZW9mIG1hdGNoID09PSBcImZ1bmN0aW9uXCIgPyBtYXRjaCA6IGNoaWxkTWF0Y2hlcihtYXRjaCkpKTtcbn1cbiIsImltcG9ydCB7Y2hpbGRNYXRjaGVyfSBmcm9tIFwiLi4vbWF0Y2hlci5qc1wiO1xuXG52YXIgZmlsdGVyID0gQXJyYXkucHJvdG90eXBlLmZpbHRlcjtcblxuZnVuY3Rpb24gY2hpbGRyZW4oKSB7XG4gIHJldHVybiB0aGlzLmNoaWxkcmVuO1xufVxuXG5mdW5jdGlvbiBjaGlsZHJlbkZpbHRlcihtYXRjaCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGZpbHRlci5jYWxsKHRoaXMuY2hpbGRyZW4sIG1hdGNoKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0QWxsKG1hdGNoID09IG51bGwgPyBjaGlsZHJlblxuICAgICAgOiBjaGlsZHJlbkZpbHRlcih0eXBlb2YgbWF0Y2ggPT09IFwiZnVuY3Rpb25cIiA/IG1hdGNoIDogY2hpbGRNYXRjaGVyKG1hdGNoKSkpO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2hlciBmcm9tIFwiLi4vbWF0Y2hlci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlcihtYXRjaCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIG1hdGNoLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSB7XG4gICAgICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHVwZGF0ZSkge1xuICByZXR1cm4gbmV3IEFycmF5KHVwZGF0ZS5sZW5ndGgpO1xufVxuIiwiaW1wb3J0IHNwYXJzZSBmcm9tIFwiLi9zcGFyc2UuanNcIjtcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZW50ZXIgfHwgdGhpcy5fZ3JvdXBzLm1hcChzcGFyc2UpLCB0aGlzLl9wYXJlbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVudGVyTm9kZShwYXJlbnQsIGRhdHVtKSB7XG4gIHRoaXMub3duZXJEb2N1bWVudCA9IHBhcmVudC5vd25lckRvY3VtZW50O1xuICB0aGlzLm5hbWVzcGFjZVVSSSA9IHBhcmVudC5uYW1lc3BhY2VVUkk7XG4gIHRoaXMuX25leHQgPSBudWxsO1xuICB0aGlzLl9wYXJlbnQgPSBwYXJlbnQ7XG4gIHRoaXMuX19kYXRhX18gPSBkYXR1bTtcbn1cblxuRW50ZXJOb2RlLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IEVudGVyTm9kZSxcbiAgYXBwZW5kQ2hpbGQ6IGZ1bmN0aW9uKGNoaWxkKSB7IHJldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaWxkLCB0aGlzLl9uZXh0KTsgfSxcbiAgaW5zZXJ0QmVmb3JlOiBmdW5jdGlvbihjaGlsZCwgbmV4dCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgbmV4dCk7IH0sXG4gIHF1ZXJ5U2VsZWN0b3I6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7IHJldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7IH0sXG4gIHF1ZXJ5U2VsZWN0b3JBbGw6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7IHJldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7IH1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHtFbnRlck5vZGV9IGZyb20gXCIuL2VudGVyLmpzXCI7XG5pbXBvcnQgYXJyYXkgZnJvbSBcIi4uL2FycmF5LmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4uL2NvbnN0YW50LmpzXCI7XG5cbmZ1bmN0aW9uIGJpbmRJbmRleChwYXJlbnQsIGdyb3VwLCBlbnRlciwgdXBkYXRlLCBleGl0LCBkYXRhKSB7XG4gIHZhciBpID0gMCxcbiAgICAgIG5vZGUsXG4gICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aDtcblxuICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZml0IGludG8gdXBkYXRlLlxuICAvLyBQdXQgYW55IG51bGwgbm9kZXMgaW50byBlbnRlci5cbiAgLy8gUHV0IGFueSByZW1haW5pbmcgZGF0YSBpbnRvIGVudGVyLlxuICBmb3IgKDsgaSA8IGRhdGFMZW5ndGg7ICsraSkge1xuICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgIG5vZGUuX19kYXRhX18gPSBkYXRhW2ldO1xuICAgICAgdXBkYXRlW2ldID0gbm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW50ZXJbaV0gPSBuZXcgRW50ZXJOb2RlKHBhcmVudCwgZGF0YVtpXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUHV0IGFueSBub24tbnVsbCBub2RlcyB0aGF0IGRvbuKAmXQgZml0IGludG8gZXhpdC5cbiAgZm9yICg7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGJpbmRLZXkocGFyZW50LCBncm91cCwgZW50ZXIsIHVwZGF0ZSwgZXhpdCwgZGF0YSwga2V5KSB7XG4gIHZhciBpLFxuICAgICAgbm9kZSxcbiAgICAgIG5vZGVCeUtleVZhbHVlID0gbmV3IE1hcCxcbiAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoLFxuICAgICAga2V5VmFsdWVzID0gbmV3IEFycmF5KGdyb3VwTGVuZ3RoKSxcbiAgICAgIGtleVZhbHVlO1xuXG4gIC8vIENvbXB1dGUgdGhlIGtleSBmb3IgZWFjaCBub2RlLlxuICAvLyBJZiBtdWx0aXBsZSBub2RlcyBoYXZlIHRoZSBzYW1lIGtleSwgdGhlIGR1cGxpY2F0ZXMgYXJlIGFkZGVkIHRvIGV4aXQuXG4gIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAga2V5VmFsdWVzW2ldID0ga2V5VmFsdWUgPSBrZXkuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkgKyBcIlwiO1xuICAgICAgaWYgKG5vZGVCeUtleVZhbHVlLmhhcyhrZXlWYWx1ZSkpIHtcbiAgICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlQnlLZXlWYWx1ZS5zZXQoa2V5VmFsdWUsIG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIGtleSBmb3IgZWFjaCBkYXR1bS5cbiAgLy8gSWYgdGhlcmUgYSBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGtleSwgam9pbiBhbmQgYWRkIGl0IHRvIHVwZGF0ZS5cbiAgLy8gSWYgdGhlcmUgaXMgbm90IChvciB0aGUga2V5IGlzIGEgZHVwbGljYXRlKSwgYWRkIGl0IHRvIGVudGVyLlxuICBmb3IgKGkgPSAwOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7XG4gICAga2V5VmFsdWUgPSBrZXkuY2FsbChwYXJlbnQsIGRhdGFbaV0sIGksIGRhdGEpICsgXCJcIjtcbiAgICBpZiAobm9kZSA9IG5vZGVCeUtleVZhbHVlLmdldChrZXlWYWx1ZSkpIHtcbiAgICAgIHVwZGF0ZVtpXSA9IG5vZGU7XG4gICAgICBub2RlLl9fZGF0YV9fID0gZGF0YVtpXTtcbiAgICAgIG5vZGVCeUtleVZhbHVlLmRlbGV0ZShrZXlWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVudGVyW2ldID0gbmV3IEVudGVyTm9kZShwYXJlbnQsIGRhdGFbaV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCBhbnkgcmVtYWluaW5nIG5vZGVzIHRoYXQgd2VyZSBub3QgYm91bmQgdG8gZGF0YSB0byBleGl0LlxuICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBMZW5ndGg7ICsraSkge1xuICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiAobm9kZUJ5S2V5VmFsdWUuZ2V0KGtleVZhbHVlc1tpXSkgPT09IG5vZGUpKSB7XG4gICAgICBleGl0W2ldID0gbm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGF0dW0obm9kZSkge1xuICByZXR1cm4gbm9kZS5fX2RhdGFfXztcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBBcnJheS5mcm9tKHRoaXMsIGRhdHVtKTtcblxuICB2YXIgYmluZCA9IGtleSA/IGJpbmRLZXkgOiBiaW5kSW5kZXgsXG4gICAgICBwYXJlbnRzID0gdGhpcy5fcGFyZW50cyxcbiAgICAgIGdyb3VwcyA9IHRoaXMuX2dyb3VwcztcblxuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHZhbHVlID0gY29uc3RhbnQodmFsdWUpO1xuXG4gIGZvciAodmFyIG0gPSBncm91cHMubGVuZ3RoLCB1cGRhdGUgPSBuZXcgQXJyYXkobSksIGVudGVyID0gbmV3IEFycmF5KG0pLCBleGl0ID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIHZhciBwYXJlbnQgPSBwYXJlbnRzW2pdLFxuICAgICAgICBncm91cCA9IGdyb3Vwc1tqXSxcbiAgICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICAgIGRhdGEgPSBhcnJheSh2YWx1ZS5jYWxsKHBhcmVudCwgcGFyZW50ICYmIHBhcmVudC5fX2RhdGFfXywgaiwgcGFyZW50cykpLFxuICAgICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIGVudGVyR3JvdXAgPSBlbnRlcltqXSA9IG5ldyBBcnJheShkYXRhTGVuZ3RoKSxcbiAgICAgICAgdXBkYXRlR3JvdXAgPSB1cGRhdGVbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXG4gICAgICAgIGV4aXRHcm91cCA9IGV4aXRbal0gPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpO1xuXG4gICAgYmluZChwYXJlbnQsIGdyb3VwLCBlbnRlckdyb3VwLCB1cGRhdGVHcm91cCwgZXhpdEdyb3VwLCBkYXRhLCBrZXkpO1xuXG4gICAgLy8gTm93IGNvbm5lY3QgdGhlIGVudGVyIG5vZGVzIHRvIHRoZWlyIGZvbGxvd2luZyB1cGRhdGUgbm9kZSwgc3VjaCB0aGF0XG4gICAgLy8gYXBwZW5kQ2hpbGQgY2FuIGluc2VydCB0aGUgbWF0ZXJpYWxpemVkIGVudGVyIG5vZGUgYmVmb3JlIHRoaXMgbm9kZSxcbiAgICAvLyByYXRoZXIgdGhhbiBhdCB0aGUgZW5kIG9mIHRoZSBwYXJlbnQgbm9kZS5cbiAgICBmb3IgKHZhciBpMCA9IDAsIGkxID0gMCwgcHJldmlvdXMsIG5leHQ7IGkwIDwgZGF0YUxlbmd0aDsgKytpMCkge1xuICAgICAgaWYgKHByZXZpb3VzID0gZW50ZXJHcm91cFtpMF0pIHtcbiAgICAgICAgaWYgKGkwID49IGkxKSBpMSA9IGkwICsgMTtcbiAgICAgICAgd2hpbGUgKCEobmV4dCA9IHVwZGF0ZUdyb3VwW2kxXSkgJiYgKytpMSA8IGRhdGFMZW5ndGgpO1xuICAgICAgICBwcmV2aW91cy5fbmV4dCA9IG5leHQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGUgPSBuZXcgU2VsZWN0aW9uKHVwZGF0ZSwgcGFyZW50cyk7XG4gIHVwZGF0ZS5fZW50ZXIgPSBlbnRlcjtcbiAgdXBkYXRlLl9leGl0ID0gZXhpdDtcbiAgcmV0dXJuIHVwZGF0ZTtcbn1cbiIsImltcG9ydCBzcGFyc2UgZnJvbSBcIi4vc3BhcnNlLmpzXCI7XG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHRoaXMuX2V4aXQgfHwgdGhpcy5fZ3JvdXBzLm1hcChzcGFyc2UpLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG9uZW50ZXIsIG9udXBkYXRlLCBvbmV4aXQpIHtcbiAgdmFyIGVudGVyID0gdGhpcy5lbnRlcigpLCB1cGRhdGUgPSB0aGlzLCBleGl0ID0gdGhpcy5leGl0KCk7XG4gIGVudGVyID0gdHlwZW9mIG9uZW50ZXIgPT09IFwiZnVuY3Rpb25cIiA/IG9uZW50ZXIoZW50ZXIpIDogZW50ZXIuYXBwZW5kKG9uZW50ZXIgKyBcIlwiKTtcbiAgaWYgKG9udXBkYXRlICE9IG51bGwpIHVwZGF0ZSA9IG9udXBkYXRlKHVwZGF0ZSk7XG4gIGlmIChvbmV4aXQgPT0gbnVsbCkgZXhpdC5yZW1vdmUoKTsgZWxzZSBvbmV4aXQoZXhpdCk7XG4gIHJldHVybiBlbnRlciAmJiB1cGRhdGUgPyBlbnRlci5tZXJnZSh1cGRhdGUpLm9yZGVyKCkgOiB1cGRhdGU7XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0aW9uKSB7XG4gIGlmICghKHNlbGVjdGlvbiBpbnN0YW5jZW9mIFNlbGVjdGlvbikpIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgbWVyZ2VcIik7XG5cbiAgZm9yICh2YXIgZ3JvdXBzMCA9IHRoaXMuX2dyb3VwcywgZ3JvdXBzMSA9IHNlbGVjdGlvbi5fZ3JvdXBzLCBtMCA9IGdyb3VwczAubGVuZ3RoLCBtMSA9IGdyb3VwczEubGVuZ3RoLCBtID0gTWF0aC5taW4obTAsIG0xKSwgbWVyZ2VzID0gbmV3IEFycmF5KG0wKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cDAgPSBncm91cHMwW2pdLCBncm91cDEgPSBncm91cHMxW2pdLCBuID0gZ3JvdXAwLmxlbmd0aCwgbWVyZ2UgPSBtZXJnZXNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcbiAgICAgICAgbWVyZ2VbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBqIDwgbTA7ICsraikge1xuICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihtZXJnZXMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gLTEsIG0gPSBncm91cHMubGVuZ3RoOyArK2ogPCBtOykge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gZ3JvdXAubGVuZ3RoIC0gMSwgbmV4dCA9IGdyb3VwW2ldLCBub2RlOyAtLWkgPj0gMDspIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgaWYgKG5leHQgJiYgbm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuZXh0KSBeIDQpIG5leHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgbmV4dCk7XG4gICAgICAgIG5leHQgPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBhcmUpIHtcbiAgaWYgKCFjb21wYXJlKSBjb21wYXJlID0gYXNjZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGNvbXBhcmVOb2RlKGEsIGIpIHtcbiAgICByZXR1cm4gYSAmJiBiID8gY29tcGFyZShhLl9fZGF0YV9fLCBiLl9fZGF0YV9fKSA6ICFhIC0gIWI7XG4gIH1cblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzb3J0Z3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzb3J0Z3JvdXAgPSBzb3J0Z3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzb3J0Z3JvdXBbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3J0Z3JvdXAuc29ydChjb21wYXJlTm9kZSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzb3J0Z3JvdXBzLCB0aGlzLl9wYXJlbnRzKS5vcmRlcigpO1xufVxuXG5mdW5jdGlvbiBhc2NlbmRpbmcoYSwgYikge1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzWzBdO1xuICBhcmd1bWVudHNbMF0gPSB0aGlzO1xuICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IDAsIG0gPSBncm91cHMubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSAwLCBuID0gZ3JvdXAubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICB2YXIgbm9kZSA9IGdyb3VwW2ldO1xuICAgICAgaWYgKG5vZGUpIHJldHVybiBub2RlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIGxldCBzaXplID0gMDtcbiAgZm9yIChjb25zdCBub2RlIG9mIHRoaXMpICsrc2l6ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICByZXR1cm4gc2l6ZTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gIXRoaXMubm9kZSgpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZTsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkgY2FsbGJhY2suY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJpbXBvcnQgbmFtZXNwYWNlIGZyb20gXCIuLi9uYW1lc3BhY2UuanNcIjtcblxuZnVuY3Rpb24gYXR0clJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0clJlbW92ZU5TKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2YWx1ZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIGVsc2UgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdik7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbk5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBub2RlID0gdGhpcy5ub2RlKCk7XG4gICAgcmV0dXJuIGZ1bGxuYW1lLmxvY2FsXG4gICAgICAgID8gbm9kZS5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpXG4gICAgICAgIDogbm9kZS5nZXRBdHRyaWJ1dGUoZnVsbG5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyUmVtb3ZlTlMgOiBhdHRyUmVtb3ZlKSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyRnVuY3Rpb25OUyA6IGF0dHJGdW5jdGlvbilcbiAgICAgIDogKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckNvbnN0YW50TlMgOiBhdHRyQ29uc3RhbnQpKSkoZnVsbG5hbWUsIHZhbHVlKSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlKSB7XG4gIHJldHVybiAobm9kZS5vd25lckRvY3VtZW50ICYmIG5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykgLy8gbm9kZSBpcyBhIE5vZGVcbiAgICAgIHx8IChub2RlLmRvY3VtZW50ICYmIG5vZGUpIC8vIG5vZGUgaXMgYSBXaW5kb3dcbiAgICAgIHx8IG5vZGUuZGVmYXVsdFZpZXc7IC8vIG5vZGUgaXMgYSBEb2N1bWVudFxufVxuIiwiaW1wb3J0IGRlZmF1bHRWaWV3IGZyb20gXCIuLi93aW5kb3cuanNcIjtcblxuZnVuY3Rpb24gc3R5bGVSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVDb25zdGFudChuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsdWUsIHByaW9yaXR5KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVGdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICAgIGVsc2UgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2LCBwcmlvcml0eSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDFcbiAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgICA/IHN0eWxlUmVtb3ZlIDogdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgID8gc3R5bGVGdW5jdGlvblxuICAgICAgICAgICAgOiBzdHlsZUNvbnN0YW50KShuYW1lLCB2YWx1ZSwgcHJpb3JpdHkgPT0gbnVsbCA/IFwiXCIgOiBwcmlvcml0eSkpXG4gICAgICA6IHN0eWxlVmFsdWUodGhpcy5ub2RlKCksIG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3R5bGVWYWx1ZShub2RlLCBuYW1lKSB7XG4gIHJldHVybiBub2RlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSlcbiAgICAgIHx8IGRlZmF1bHRWaWV3KG5vZGUpLmdldENvbXB1dGVkU3R5bGUobm9kZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTtcbn1cbiIsImZ1bmN0aW9uIHByb3BlcnR5UmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGRlbGV0ZSB0aGlzW25hbWVdO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUNvbnN0YW50KG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzW25hbWVdID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5RnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSBkZWxldGUgdGhpc1tuYW1lXTtcbiAgICBlbHNlIHRoaXNbbmFtZV0gPSB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDFcbiAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBwcm9wZXJ0eVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBwcm9wZXJ0eUZ1bmN0aW9uXG4gICAgICAgICAgOiBwcm9wZXJ0eUNvbnN0YW50KShuYW1lLCB2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpW25hbWVdO1xufVxuIiwiZnVuY3Rpb24gY2xhc3NBcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy50cmltKCkuc3BsaXQoL158XFxzKy8pO1xufVxuXG5mdW5jdGlvbiBjbGFzc0xpc3Qobm9kZSkge1xuICByZXR1cm4gbm9kZS5jbGFzc0xpc3QgfHwgbmV3IENsYXNzTGlzdChub2RlKTtcbn1cblxuZnVuY3Rpb24gQ2xhc3NMaXN0KG5vZGUpIHtcbiAgdGhpcy5fbm9kZSA9IG5vZGU7XG4gIHRoaXMuX25hbWVzID0gY2xhc3NBcnJheShub2RlLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpIHx8IFwiXCIpO1xufVxuXG5DbGFzc0xpc3QucHJvdG90eXBlID0ge1xuICBhZGQ6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgaSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGkgPCAwKSB7XG4gICAgICB0aGlzLl9uYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLl9uYW1lcy5qb2luKFwiIFwiKSk7XG4gICAgfVxuICB9LFxuICByZW1vdmU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgaSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgdGhpcy5fbmFtZXMuc3BsaWNlKGksIDEpO1xuICAgICAgdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLl9uYW1lcy5qb2luKFwiIFwiKSk7XG4gICAgfVxuICB9LFxuICBjb250YWluczogZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpID49IDA7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNsYXNzZWRBZGQobm9kZSwgbmFtZXMpIHtcbiAgdmFyIGxpc3QgPSBjbGFzc0xpc3Qobm9kZSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIGxpc3QuYWRkKG5hbWVzW2ldKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZFJlbW92ZShub2RlLCBuYW1lcykge1xuICB2YXIgbGlzdCA9IGNsYXNzTGlzdChub2RlKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbikgbGlzdC5yZW1vdmUobmFtZXNbaV0pO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkVHJ1ZShuYW1lcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY2xhc3NlZEFkZCh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRGYWxzZShuYW1lcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY2xhc3NlZFJlbW92ZSh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRGdW5jdGlvbihuYW1lcywgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICh2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpID8gY2xhc3NlZEFkZCA6IGNsYXNzZWRSZW1vdmUpKHRoaXMsIG5hbWVzKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIG5hbWVzID0gY2xhc3NBcnJheShuYW1lICsgXCJcIik7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIGxpc3QgPSBjbGFzc0xpc3QodGhpcy5ub2RlKCkpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gICAgd2hpbGUgKCsraSA8IG4pIGlmICghbGlzdC5jb250YWlucyhuYW1lc1tpXSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGNsYXNzZWRGdW5jdGlvbiA6IHZhbHVlXG4gICAgICA/IGNsYXNzZWRUcnVlXG4gICAgICA6IGNsYXNzZWRGYWxzZSkobmFtZXMsIHZhbHVlKSk7XG59XG4iLCJmdW5jdGlvbiB0ZXh0UmVtb3ZlKCkge1xuICB0aGlzLnRleHRDb250ZW50ID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gdGV4dENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRleHRGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2ID09IG51bGwgPyBcIlwiIDogdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKHZhbHVlID09IG51bGxcbiAgICAgICAgICA/IHRleHRSZW1vdmUgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IHRleHRGdW5jdGlvblxuICAgICAgICAgIDogdGV4dENvbnN0YW50KSh2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpLnRleHRDb250ZW50O1xufVxuIiwiZnVuY3Rpb24gaHRtbFJlbW92ZSgpIHtcbiAgdGhpcy5pbm5lckhUTUwgPSBcIlwiO1xufVxuXG5mdW5jdGlvbiBodG1sQ29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGh0bWxGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBodG1sUmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBodG1sRnVuY3Rpb25cbiAgICAgICAgICA6IGh0bWxDb25zdGFudCkodmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKS5pbm5lckhUTUw7XG59XG4iLCJmdW5jdGlvbiByYWlzZSgpIHtcbiAgaWYgKHRoaXMubmV4dFNpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2gocmFpc2UpO1xufVxuIiwiZnVuY3Rpb24gbG93ZXIoKSB7XG4gIGlmICh0aGlzLnByZXZpb3VzU2libGluZykgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLCB0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKGxvd2VyKTtcbn1cbiIsImltcG9ydCBjcmVhdG9yIGZyb20gXCIuLi9jcmVhdG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGNyZWF0ZSA9IHR5cGVvZiBuYW1lID09PSBcImZ1bmN0aW9uXCIgPyBuYW1lIDogY3JlYXRvcihuYW1lKTtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmFwcGVuZENoaWxkKGNyZWF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfSk7XG59XG4iLCJpbXBvcnQgY3JlYXRvciBmcm9tIFwiLi4vY3JlYXRvci5qc1wiO1xuaW1wb3J0IHNlbGVjdG9yIGZyb20gXCIuLi9zZWxlY3Rvci5qc1wiO1xuXG5mdW5jdGlvbiBjb25zdGFudE51bGwoKSB7XG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCBiZWZvcmUpIHtcbiAgdmFyIGNyZWF0ZSA9IHR5cGVvZiBuYW1lID09PSBcImZ1bmN0aW9uXCIgPyBuYW1lIDogY3JlYXRvcihuYW1lKSxcbiAgICAgIHNlbGVjdCA9IGJlZm9yZSA9PSBudWxsID8gY29uc3RhbnROdWxsIDogdHlwZW9mIGJlZm9yZSA9PT0gXCJmdW5jdGlvblwiID8gYmVmb3JlIDogc2VsZWN0b3IoYmVmb3JlKTtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmluc2VydEJlZm9yZShjcmVhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgc2VsZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgbnVsbCk7XG4gIH0pO1xufVxuIiwiZnVuY3Rpb24gcmVtb3ZlKCkge1xuICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICBpZiAocGFyZW50KSBwYXJlbnQucmVtb3ZlQ2hpbGQodGhpcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKHJlbW92ZSk7XG59XG4iLCJmdW5jdGlvbiBzZWxlY3Rpb25fY2xvbmVTaGFsbG93KCkge1xuICB2YXIgY2xvbmUgPSB0aGlzLmNsb25lTm9kZShmYWxzZSksIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgcmV0dXJuIHBhcmVudCA/IHBhcmVudC5pbnNlcnRCZWZvcmUoY2xvbmUsIHRoaXMubmV4dFNpYmxpbmcpIDogY2xvbmU7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvbl9jbG9uZURlZXAoKSB7XG4gIHZhciBjbG9uZSA9IHRoaXMuY2xvbmVOb2RlKHRydWUpLCBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gIHJldHVybiBwYXJlbnQgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNsb25lLCB0aGlzLm5leHRTaWJsaW5nKSA6IGNsb25lO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkZWVwKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdChkZWVwID8gc2VsZWN0aW9uX2Nsb25lRGVlcCA6IHNlbGVjdGlvbl9jbG9uZVNoYWxsb3cpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5wcm9wZXJ0eShcIl9fZGF0YV9fXCIsIHZhbHVlKVxuICAgICAgOiB0aGlzLm5vZGUoKS5fX2RhdGFfXztcbn1cbiIsImZ1bmN0aW9uIGNvbnRleHRMaXN0ZW5lcihsaXN0ZW5lcikge1xuICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICBsaXN0ZW5lci5jYWxsKHRoaXMsIGV2ZW50LCB0aGlzLl9fZGF0YV9fKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUeXBlbmFtZXModHlwZW5hbWVzKSB7XG4gIHJldHVybiB0eXBlbmFtZXMudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCkge1xuICAgIHZhciBuYW1lID0gXCJcIiwgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGkgPj0gMCkgbmFtZSA9IHQuc2xpY2UoaSArIDEpLCB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICByZXR1cm4ge3R5cGU6IHQsIG5hbWU6IG5hbWV9O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb25SZW1vdmUodHlwZW5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBvbiA9IHRoaXMuX19vbjtcbiAgICBpZiAoIW9uKSByZXR1cm47XG4gICAgZm9yICh2YXIgaiA9IDAsIGkgPSAtMSwgbSA9IG9uLmxlbmd0aCwgbzsgaiA8IG07ICsraikge1xuICAgICAgaWYgKG8gPSBvbltqXSwgKCF0eXBlbmFtZS50eXBlIHx8IG8udHlwZSA9PT0gdHlwZW5hbWUudHlwZSkgJiYgby5uYW1lID09PSB0eXBlbmFtZS5uYW1lKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIsIG8ub3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvblsrK2ldID0gbztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCsraSkgb24ubGVuZ3RoID0gaTtcbiAgICBlbHNlIGRlbGV0ZSB0aGlzLl9fb247XG4gIH07XG59XG5cbmZ1bmN0aW9uIG9uQWRkKHR5cGVuYW1lLCB2YWx1ZSwgb3B0aW9ucykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG9uID0gdGhpcy5fX29uLCBvLCBsaXN0ZW5lciA9IGNvbnRleHRMaXN0ZW5lcih2YWx1ZSk7XG4gICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgICAgaWYgKChvID0gb25bal0pLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUgJiYgby5uYW1lID09PSB0eXBlbmFtZS5uYW1lKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIsIG8ub3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihvLnR5cGUsIG8ubGlzdGVuZXIgPSBsaXN0ZW5lciwgby5vcHRpb25zID0gb3B0aW9ucyk7XG4gICAgICAgIG8udmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIodHlwZW5hbWUudHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICAgIG8gPSB7dHlwZTogdHlwZW5hbWUudHlwZSwgbmFtZTogdHlwZW5hbWUubmFtZSwgdmFsdWU6IHZhbHVlLCBsaXN0ZW5lcjogbGlzdGVuZXIsIG9wdGlvbnM6IG9wdGlvbnN9O1xuICAgIGlmICghb24pIHRoaXMuX19vbiA9IFtvXTtcbiAgICBlbHNlIG9uLnB1c2gobyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHR5cGVuYW1lLCB2YWx1ZSwgb3B0aW9ucykge1xuICB2YXIgdHlwZW5hbWVzID0gcGFyc2VUeXBlbmFtZXModHlwZW5hbWUgKyBcIlwiKSwgaSwgbiA9IHR5cGVuYW1lcy5sZW5ndGgsIHQ7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIG9uID0gdGhpcy5ub2RlKCkuX19vbjtcbiAgICBpZiAob24pIGZvciAodmFyIGogPSAwLCBtID0gb24ubGVuZ3RoLCBvOyBqIDwgbTsgKytqKSB7XG4gICAgICBmb3IgKGkgPSAwLCBvID0gb25bal07IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKCh0ID0gdHlwZW5hbWVzW2ldKS50eXBlID09PSBvLnR5cGUgJiYgdC5uYW1lID09PSBvLm5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gby52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBvbiA9IHZhbHVlID8gb25BZGQgOiBvblJlbW92ZTtcbiAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgdGhpcy5lYWNoKG9uKHR5cGVuYW1lc1tpXSwgdmFsdWUsIG9wdGlvbnMpKTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJpbXBvcnQgZGVmYXVsdFZpZXcgZnJvbSBcIi4uL3dpbmRvdy5qc1wiO1xuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50KG5vZGUsIHR5cGUsIHBhcmFtcykge1xuICB2YXIgd2luZG93ID0gZGVmYXVsdFZpZXcobm9kZSksXG4gICAgICBldmVudCA9IHdpbmRvdy5DdXN0b21FdmVudDtcblxuICBpZiAodHlwZW9mIGV2ZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBldmVudCA9IG5ldyBldmVudCh0eXBlLCBwYXJhbXMpO1xuICB9IGVsc2Uge1xuICAgIGV2ZW50ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiRXZlbnRcIik7XG4gICAgaWYgKHBhcmFtcykgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIHBhcmFtcy5idWJibGVzLCBwYXJhbXMuY2FuY2VsYWJsZSksIGV2ZW50LmRldGFpbCA9IHBhcmFtcy5kZXRhaWw7XG4gICAgZWxzZSBldmVudC5pbml0RXZlbnQodHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIG5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQ29uc3RhbnQodHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2hFdmVudCh0aGlzLCB0eXBlLCBwYXJhbXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEZ1bmN0aW9uKHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaCgodHlwZW9mIHBhcmFtcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGRpc3BhdGNoRnVuY3Rpb25cbiAgICAgIDogZGlzcGF0Y2hDb25zdGFudCkodHlwZSwgcGFyYW1zKSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiooKSB7XG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IDAsIG0gPSBncm91cHMubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSAwLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB5aWVsZCBub2RlO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHNlbGVjdGlvbl9zZWxlY3QgZnJvbSBcIi4vc2VsZWN0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NlbGVjdEFsbCBmcm9tIFwiLi9zZWxlY3RBbGwuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2VsZWN0Q2hpbGQgZnJvbSBcIi4vc2VsZWN0Q2hpbGQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2VsZWN0Q2hpbGRyZW4gZnJvbSBcIi4vc2VsZWN0Q2hpbGRyZW4uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZmlsdGVyIGZyb20gXCIuL2ZpbHRlci5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9kYXRhIGZyb20gXCIuL2RhdGEuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZW50ZXIgZnJvbSBcIi4vZW50ZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZXhpdCBmcm9tIFwiLi9leGl0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2pvaW4gZnJvbSBcIi4vam9pbi5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9tZXJnZSBmcm9tIFwiLi9tZXJnZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9vcmRlciBmcm9tIFwiLi9vcmRlci5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zb3J0IGZyb20gXCIuL3NvcnQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2FsbCBmcm9tIFwiLi9jYWxsLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX25vZGVzIGZyb20gXCIuL25vZGVzLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX25vZGUgZnJvbSBcIi4vbm9kZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zaXplIGZyb20gXCIuL3NpemUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZW1wdHkgZnJvbSBcIi4vZW1wdHkuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZWFjaCBmcm9tIFwiLi9lYWNoLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2F0dHIgZnJvbSBcIi4vYXR0ci5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zdHlsZSBmcm9tIFwiLi9zdHlsZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9wcm9wZXJ0eSBmcm9tIFwiLi9wcm9wZXJ0eS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9jbGFzc2VkIGZyb20gXCIuL2NsYXNzZWQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fdGV4dCBmcm9tIFwiLi90ZXh0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2h0bWwgZnJvbSBcIi4vaHRtbC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9yYWlzZSBmcm9tIFwiLi9yYWlzZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9sb3dlciBmcm9tIFwiLi9sb3dlci5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9hcHBlbmQgZnJvbSBcIi4vYXBwZW5kLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2luc2VydCBmcm9tIFwiLi9pbnNlcnQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fcmVtb3ZlIGZyb20gXCIuL3JlbW92ZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9jbG9uZSBmcm9tIFwiLi9jbG9uZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9kYXR1bSBmcm9tIFwiLi9kYXR1bS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9vbiBmcm9tIFwiLi9vbi5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9kaXNwYXRjaCBmcm9tIFwiLi9kaXNwYXRjaC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9pdGVyYXRvciBmcm9tIFwiLi9pdGVyYXRvci5qc1wiO1xuXG5leHBvcnQgdmFyIHJvb3QgPSBbbnVsbF07XG5cbmV4cG9ydCBmdW5jdGlvbiBTZWxlY3Rpb24oZ3JvdXBzLCBwYXJlbnRzKSB7XG4gIHRoaXMuX2dyb3VwcyA9IGdyb3VwcztcbiAgdGhpcy5fcGFyZW50cyA9IHBhcmVudHM7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSwgcm9vdCk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvbl9zZWxlY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzO1xufVxuXG5TZWxlY3Rpb24ucHJvdG90eXBlID0gc2VsZWN0aW9uLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFNlbGVjdGlvbixcbiAgc2VsZWN0OiBzZWxlY3Rpb25fc2VsZWN0LFxuICBzZWxlY3RBbGw6IHNlbGVjdGlvbl9zZWxlY3RBbGwsXG4gIHNlbGVjdENoaWxkOiBzZWxlY3Rpb25fc2VsZWN0Q2hpbGQsXG4gIHNlbGVjdENoaWxkcmVuOiBzZWxlY3Rpb25fc2VsZWN0Q2hpbGRyZW4sXG4gIGZpbHRlcjogc2VsZWN0aW9uX2ZpbHRlcixcbiAgZGF0YTogc2VsZWN0aW9uX2RhdGEsXG4gIGVudGVyOiBzZWxlY3Rpb25fZW50ZXIsXG4gIGV4aXQ6IHNlbGVjdGlvbl9leGl0LFxuICBqb2luOiBzZWxlY3Rpb25fam9pbixcbiAgbWVyZ2U6IHNlbGVjdGlvbl9tZXJnZSxcbiAgc2VsZWN0aW9uOiBzZWxlY3Rpb25fc2VsZWN0aW9uLFxuICBvcmRlcjogc2VsZWN0aW9uX29yZGVyLFxuICBzb3J0OiBzZWxlY3Rpb25fc29ydCxcbiAgY2FsbDogc2VsZWN0aW9uX2NhbGwsXG4gIG5vZGVzOiBzZWxlY3Rpb25fbm9kZXMsXG4gIG5vZGU6IHNlbGVjdGlvbl9ub2RlLFxuICBzaXplOiBzZWxlY3Rpb25fc2l6ZSxcbiAgZW1wdHk6IHNlbGVjdGlvbl9lbXB0eSxcbiAgZWFjaDogc2VsZWN0aW9uX2VhY2gsXG4gIGF0dHI6IHNlbGVjdGlvbl9hdHRyLFxuICBzdHlsZTogc2VsZWN0aW9uX3N0eWxlLFxuICBwcm9wZXJ0eTogc2VsZWN0aW9uX3Byb3BlcnR5LFxuICBjbGFzc2VkOiBzZWxlY3Rpb25fY2xhc3NlZCxcbiAgdGV4dDogc2VsZWN0aW9uX3RleHQsXG4gIGh0bWw6IHNlbGVjdGlvbl9odG1sLFxuICByYWlzZTogc2VsZWN0aW9uX3JhaXNlLFxuICBsb3dlcjogc2VsZWN0aW9uX2xvd2VyLFxuICBhcHBlbmQ6IHNlbGVjdGlvbl9hcHBlbmQsXG4gIGluc2VydDogc2VsZWN0aW9uX2luc2VydCxcbiAgcmVtb3ZlOiBzZWxlY3Rpb25fcmVtb3ZlLFxuICBjbG9uZTogc2VsZWN0aW9uX2Nsb25lLFxuICBkYXR1bTogc2VsZWN0aW9uX2RhdHVtLFxuICBvbjogc2VsZWN0aW9uX29uLFxuICBkaXNwYXRjaDogc2VsZWN0aW9uX2Rpc3BhdGNoLFxuICBbU3ltYm9sLml0ZXJhdG9yXTogc2VsZWN0aW9uX2l0ZXJhdG9yXG59O1xuXG5leHBvcnQgZGVmYXVsdCBzZWxlY3Rpb247XG4iLCJpbXBvcnQge1NlbGVjdGlvbiwgcm9vdH0gZnJvbSBcIi4vc2VsZWN0aW9uL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCJcbiAgICAgID8gbmV3IFNlbGVjdGlvbihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpXV0sIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKVxuICAgICAgOiBuZXcgU2VsZWN0aW9uKFtbc2VsZWN0b3JdXSwgcm9vdCk7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gaW5pdFJhbmdlKGRvbWFpbiwgcmFuZ2UpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiBicmVhaztcbiAgICBjYXNlIDE6IHRoaXMucmFuZ2UoZG9tYWluKTsgYnJlYWs7XG4gICAgZGVmYXVsdDogdGhpcy5yYW5nZShyYW5nZSkuZG9tYWluKGRvbWFpbik7IGJyZWFrO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdEludGVycG9sYXRvcihkb21haW4sIGludGVycG9sYXRvcikge1xuICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IGJyZWFrO1xuICAgIGNhc2UgMToge1xuICAgICAgaWYgKHR5cGVvZiBkb21haW4gPT09IFwiZnVuY3Rpb25cIikgdGhpcy5pbnRlcnBvbGF0b3IoZG9tYWluKTtcbiAgICAgIGVsc2UgdGhpcy5yYW5nZShkb21haW4pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHRoaXMuZG9tYWluKGRvbWFpbik7XG4gICAgICBpZiAodHlwZW9mIGludGVycG9sYXRvciA9PT0gXCJmdW5jdGlvblwiKSB0aGlzLmludGVycG9sYXRvcihpbnRlcnBvbGF0b3IpO1xuICAgICAgZWxzZSB0aGlzLnJhbmdlKGludGVycG9sYXRvcik7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJpbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdC5qc1wiO1xuXG5leHBvcnQgY29uc3QgaW1wbGljaXQgPSBTeW1ib2woXCJpbXBsaWNpdFwiKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JkaW5hbCgpIHtcbiAgdmFyIGluZGV4ID0gbmV3IE1hcCgpLFxuICAgICAgZG9tYWluID0gW10sXG4gICAgICByYW5nZSA9IFtdLFxuICAgICAgdW5rbm93biA9IGltcGxpY2l0O1xuXG4gIGZ1bmN0aW9uIHNjYWxlKGQpIHtcbiAgICB2YXIga2V5ID0gZCArIFwiXCIsIGkgPSBpbmRleC5nZXQoa2V5KTtcbiAgICBpZiAoIWkpIHtcbiAgICAgIGlmICh1bmtub3duICE9PSBpbXBsaWNpdCkgcmV0dXJuIHVua25vd247XG4gICAgICBpbmRleC5zZXQoa2V5LCBpID0gZG9tYWluLnB1c2goZCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmFuZ2VbKGkgLSAxKSAlIHJhbmdlLmxlbmd0aF07XG4gIH1cblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZG9tYWluLnNsaWNlKCk7XG4gICAgZG9tYWluID0gW10sIGluZGV4ID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgXykge1xuICAgICAgY29uc3Qga2V5ID0gdmFsdWUgKyBcIlwiO1xuICAgICAgaWYgKGluZGV4LmhhcyhrZXkpKSBjb250aW51ZTtcbiAgICAgIGluZGV4LnNldChrZXksIGRvbWFpbi5wdXNoKHZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiBzY2FsZTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IEFycmF5LmZyb20oXyksIHNjYWxlKSA6IHJhbmdlLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUudW5rbm93biA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh1bmtub3duID0gXywgc2NhbGUpIDogdW5rbm93bjtcbiAgfTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG9yZGluYWwoZG9tYWluLCByYW5nZSkudW5rbm93bih1bmtub3duKTtcbiAgfTtcblxuICBpbml0UmFuZ2UuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gIHZhciBuID0gc3BlY2lmaWVyLmxlbmd0aCAvIDYgfCAwLCBjb2xvcnMgPSBuZXcgQXJyYXkobiksIGkgPSAwO1xuICB3aGlsZSAoaSA8IG4pIGNvbG9yc1tpXSA9IFwiI1wiICsgc3BlY2lmaWVyLnNsaWNlKGkgKiA2LCArK2kgKiA2KTtcbiAgcmV0dXJuIGNvbG9ycztcbn1cbiIsImltcG9ydCBjb2xvcnMgZnJvbSBcIi4uL2NvbG9ycy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnMoXCIxZjc3YjRmZjdmMGUyY2EwMmNkNjI3Mjg5NDY3YmQ4YzU2NGJlMzc3YzI3ZjdmN2ZiY2JkMjIxN2JlY2ZcIik7XG4iLCJpbXBvcnQgX3B0IGZyb20gXCJwcm9wLXR5cGVzXCI7XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciA9PSBudWxsID8gbnVsbCA6IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuaW1wb3J0IFJlYWN0LCB7IHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdEZhdXhEb20gZnJvbSAncmVhY3QtZmF1eC1kb20nO1xuaW1wb3J0IGNsb3VkIGZyb20gJ2QzLWNsb3VkJztcbmltcG9ydCBpc0RlZXBFcXVhbCBmcm9tICdyZWFjdC1mYXN0LWNvbXBhcmUnO1xuaW1wb3J0IHsgc2VsZWN0IH0gZnJvbSAnZDMtc2VsZWN0aW9uJztcbmltcG9ydCB7IHNjYWxlT3JkaW5hbCB9IGZyb20gJ2QzLXNjYWxlJztcbmltcG9ydCB7IHNjaGVtZUNhdGVnb3J5MTAgfSBmcm9tICdkMy1zY2FsZS1jaHJvbWF0aWMnO1xudmFyIGRlZmF1bHRTY2FsZU9yZGluYWwgPSBzY2FsZU9yZGluYWwoc2NoZW1lQ2F0ZWdvcnkxMCk7XG5cbmZ1bmN0aW9uIFdvcmRDbG91ZChfcmVmKSB7XG4gIHZhciBkYXRhID0gX3JlZi5kYXRhLFxuICAgICAgX3JlZiR3aWR0aCA9IF9yZWYud2lkdGgsXG4gICAgICB3aWR0aCA9IF9yZWYkd2lkdGggPT09IHZvaWQgMCA/IDcwMCA6IF9yZWYkd2lkdGgsXG4gICAgICBfcmVmJGhlaWdodCA9IF9yZWYuaGVpZ2h0LFxuICAgICAgaGVpZ2h0ID0gX3JlZiRoZWlnaHQgPT09IHZvaWQgMCA/IDYwMCA6IF9yZWYkaGVpZ2h0LFxuICAgICAgX3JlZiRmb250ID0gX3JlZi5mb250LFxuICAgICAgZm9udCA9IF9yZWYkZm9udCA9PT0gdm9pZCAwID8gJ3NlcmlmJyA6IF9yZWYkZm9udCxcbiAgICAgIF9yZWYkZm9udFN0eWxlID0gX3JlZi5mb250U3R5bGUsXG4gICAgICBmb250U3R5bGUgPSBfcmVmJGZvbnRTdHlsZSA9PT0gdm9pZCAwID8gJ25vcm1hbCcgOiBfcmVmJGZvbnRTdHlsZSxcbiAgICAgIF9yZWYkZm9udFdlaWdodCA9IF9yZWYuZm9udFdlaWdodCxcbiAgICAgIGZvbnRXZWlnaHQgPSBfcmVmJGZvbnRXZWlnaHQgPT09IHZvaWQgMCA/ICdub3JtYWwnIDogX3JlZiRmb250V2VpZ2h0LFxuICAgICAgX3JlZiRmb250U2l6ZSA9IF9yZWYuZm9udFNpemUsXG4gICAgICBmb250U2l6ZSA9IF9yZWYkZm9udFNpemUgPT09IHZvaWQgMCA/IGZ1bmN0aW9uIChkKSB7XG4gICAgcmV0dXJuIE1hdGguc3FydChkLnZhbHVlKTtcbiAgfSA6IF9yZWYkZm9udFNpemUsXG4gICAgICBfcmVmJHJvdGF0ZSA9IF9yZWYucm90YXRlLFxuICAgICAgcm90YXRlID0gX3JlZiRyb3RhdGUgPT09IHZvaWQgMCA/IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKH5+KE1hdGgucmFuZG9tKCkgKiA2KSAtIDMpICogMzA7XG4gIH0gOiBfcmVmJHJvdGF0ZSxcbiAgICAgIF9yZWYkc3BpcmFsID0gX3JlZi5zcGlyYWwsXG4gICAgICBzcGlyYWwgPSBfcmVmJHNwaXJhbCA9PT0gdm9pZCAwID8gJ2FyY2hpbWVkZWFuJyA6IF9yZWYkc3BpcmFsLFxuICAgICAgX3JlZiRwYWRkaW5nID0gX3JlZi5wYWRkaW5nLFxuICAgICAgcGFkZGluZyA9IF9yZWYkcGFkZGluZyA9PT0gdm9pZCAwID8gMSA6IF9yZWYkcGFkZGluZyxcbiAgICAgIF9yZWYkcmFuZG9tID0gX3JlZi5yYW5kb20sXG4gICAgICByYW5kb20gPSBfcmVmJHJhbmRvbSA9PT0gdm9pZCAwID8gTWF0aC5yYW5kb20gOiBfcmVmJHJhbmRvbSxcbiAgICAgIF9yZWYkZmlsbCA9IF9yZWYuZmlsbCxcbiAgICAgIGZpbGwgPSBfcmVmJGZpbGwgPT09IHZvaWQgMCA/IGZ1bmN0aW9uIChfLCBpKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRTY2FsZU9yZGluYWwoaSk7XG4gIH0gOiBfcmVmJGZpbGwsXG4gICAgICBvbldvcmRDbGljayA9IF9yZWYub25Xb3JkQ2xpY2ssXG4gICAgICBvbldvcmRNb3VzZU92ZXIgPSBfcmVmLm9uV29yZE1vdXNlT3ZlcixcbiAgICAgIG9uV29yZE1vdXNlT3V0ID0gX3JlZi5vbldvcmRNb3VzZU91dDtcbiAgdmFyIGVsZW1lbnRSZWYgPSB1c2VSZWYoKTtcblxuICBpZiAoIWVsZW1lbnRSZWYuY3VycmVudCkge1xuICAgIGVsZW1lbnRSZWYuY3VycmVudCA9IFJlYWN0RmF1eERvbS5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgfVxuXG4gIHZhciBlbCA9IGVsZW1lbnRSZWYuY3VycmVudDsgLy8gY2xlYXIgb2xkIHdvcmRzXG5cbiAgc2VsZWN0KGVsKS5zZWxlY3RBbGwoJyonKS5yZW1vdmUoKTsgLy8gcmVuZGVyIGJhc2VkIG9uIG5ldyBkYXRhXG5cbiAgdmFyIGxheW91dCA9IGNsb3VkKCkud29yZHMoZGF0YSkuc2l6ZShbd2lkdGgsIGhlaWdodF0pLmZvbnQoZm9udCkuZm9udFN0eWxlKGZvbnRTdHlsZSkuZm9udFdlaWdodChmb250V2VpZ2h0KS5mb250U2l6ZShmb250U2l6ZSkucm90YXRlKHJvdGF0ZSkuc3BpcmFsKHNwaXJhbCkucGFkZGluZyhwYWRkaW5nKS5yYW5kb20ocmFuZG9tKS5vbignZW5kJywgZnVuY3Rpb24gKHdvcmRzKSB7XG4gICAgdmFyIF9sYXlvdXQkc2l6ZSA9IGxheW91dC5zaXplKCksXG4gICAgICAgIF9sYXlvdXQkc2l6ZTIgPSBfc2xpY2VkVG9BcnJheShfbGF5b3V0JHNpemUsIDIpLFxuICAgICAgICB3ID0gX2xheW91dCRzaXplMlswXSxcbiAgICAgICAgaCA9IF9sYXlvdXQkc2l6ZTJbMV07XG5cbiAgICB2YXIgdGV4dHMgPSBzZWxlY3QoZWwpLmFwcGVuZCgnc3ZnJykuYXR0cigndmlld0JveCcsIFwiMCAwIFwiLmNvbmNhdCh3LCBcIiBcIikuY29uY2F0KGgpKS5hdHRyKCdwcmVzZXJ2ZUFzcGVjdFJhdGlvJywgJ3hNaW5ZTWluIG1lZXQnKS5hcHBlbmQoJ2cnKS5hdHRyKCd0cmFuc2Zvcm0nLCBcInRyYW5zbGF0ZShcIi5jb25jYXQodyAvIDIsIFwiLFwiKS5jb25jYXQoaCAvIDIsIFwiKVwiKSkuc2VsZWN0QWxsKCd0ZXh0JykuZGF0YSh3b3JkcykuZW50ZXIoKS5hcHBlbmQoJ3RleHQnKS5zdHlsZSgnZm9udC1mYW1pbHknLCBmdW5jdGlvbiAoZCkge1xuICAgICAgcmV0dXJuIGQuZm9udDtcbiAgICB9KS5zdHlsZSgnZm9udC1zdHlsZScsIGZ1bmN0aW9uIChkKSB7XG4gICAgICByZXR1cm4gZC5zdHlsZTtcbiAgICB9KS5zdHlsZSgnZm9udC13ZWlnaHQnLCBmdW5jdGlvbiAoZCkge1xuICAgICAgcmV0dXJuIGQud2VpZ2h0O1xuICAgIH0pLnN0eWxlKCdmb250LXNpemUnLCBmdW5jdGlvbiAoZCkge1xuICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KGQuc2l6ZSwgXCJweFwiKTtcbiAgICB9KS5zdHlsZSgnZmlsbCcsIGZpbGwpLmF0dHIoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uIChkKSB7XG4gICAgICByZXR1cm4gXCJ0cmFuc2xhdGUoXCIuY29uY2F0KFtkLngsIGQueV0sIFwiKXJvdGF0ZShcIikuY29uY2F0KGQucm90YXRlLCBcIilcIik7XG4gICAgfSkudGV4dChmdW5jdGlvbiAoZCkge1xuICAgICAgcmV0dXJuIGQudGV4dDtcbiAgICB9KTtcblxuICAgIGlmIChvbldvcmRDbGljaykge1xuICAgICAgdGV4dHMub24oJ2NsaWNrJywgb25Xb3JkQ2xpY2spO1xuICAgIH1cblxuICAgIGlmIChvbldvcmRNb3VzZU92ZXIpIHtcbiAgICAgIHRleHRzLm9uKCdtb3VzZW92ZXInLCBvbldvcmRNb3VzZU92ZXIpO1xuICAgIH1cblxuICAgIGlmIChvbldvcmRNb3VzZU91dCkge1xuICAgICAgdGV4dHMub24oJ21vdXNlb3V0Jywgb25Xb3JkTW91c2VPdXQpO1xuICAgIH1cbiAgfSk7XG4gIGxheW91dC5zdGFydCgpO1xuICByZXR1cm4gZWwudG9SZWFjdCgpO1xufVxuXG5Xb3JkQ2xvdWQucHJvcFR5cGVzID0ge1xuICBkYXRhOiBfcHQuYXJyYXlPZihfcHQuc2hhcGUoe1xuICAgIHRleHQ6IF9wdC5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICB2YWx1ZTogX3B0Lm51bWJlci5pc1JlcXVpcmVkXG4gIH0pKS5pc1JlcXVpcmVkLFxuICB3aWR0aDogX3B0Lm51bWJlcixcbiAgaGVpZ2h0OiBfcHQubnVtYmVyLFxuICBmb250OiBfcHQub25lT2ZUeXBlKFtfcHQuc3RyaW5nLCBfcHQuZnVuY10pLFxuICBmb250U3R5bGU6IF9wdC5vbmVPZlR5cGUoW19wdC5zdHJpbmcsIF9wdC5mdW5jXSksXG4gIGZvbnRXZWlnaHQ6IF9wdC5vbmVPZlR5cGUoW19wdC5zdHJpbmcsIF9wdC5udW1iZXIsIF9wdC5mdW5jXSksXG4gIGZvbnRTaXplOiBfcHQub25lT2ZUeXBlKFtfcHQubnVtYmVyLCBfcHQuZnVuY10pLFxuICByb3RhdGU6IF9wdC5vbmVPZlR5cGUoW19wdC5udW1iZXIsIF9wdC5mdW5jXSksXG4gIHNwaXJhbDogX3B0Lm9uZU9mVHlwZShbX3B0Lm9uZU9mKFsnYXJjaGltZWRlYW4nXSksIF9wdC5vbmVPZihbJ3JlY3Rhbmd1bGFyJ10pLCBfcHQuZnVuY10pLFxuICBwYWRkaW5nOiBfcHQub25lT2ZUeXBlKFtfcHQubnVtYmVyLCBfcHQuZnVuY10pLFxuICByYW5kb206IF9wdC5mdW5jLFxuICBvbldvcmRDbGljazogX3B0LmZ1bmMsXG4gIG9uV29yZE1vdXNlT3ZlcjogX3B0LmZ1bmMsXG4gIG9uV29yZE1vdXNlT3V0OiBfcHQuZnVuY1xufTtcbmV4cG9ydCBkZWZhdWx0IC8qI19fUFVSRV9fKi9SZWFjdC5tZW1vKFdvcmRDbG91ZCwgaXNEZWVwRXF1YWwpOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgY3JlYXRlRWxlbWVudCwgcmVuZGVyIH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCAnY29yZS1qcyc7XHJcbmltcG9ydCBXb3JkQ2xvdWQgZnJvbSBcInJlYWN0LWQzLWNsb3VkXCI7XHJcblxyXG5cclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBXb3JkQ2xvdWRXaWRnZXRDb21wb25lbnQocHJvcHMpIHtcclxuICBcclxuICBjb25zdCBkYXRhID0gcHJvcHMuaW5wdXREYXRhO1xyXG4gIGNvbnN0IGZvbnRTaXplTWFwcGVyID0gd29yZCA9PiBNYXRoLmxvZzIod29yZC52YWx1ZSkgKiA1O1xyXG4gIGNvbnN0IHJvdGF0ZSA9IHdvcmQgPT4gKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDIpICogOTApO1xyXG4gIGNvbnN0IG9uQ2xpY2tIYW5kbGUgPSAodGV4dCkgPT4ge1xyXG4gICAgXHJcbiAgICAocHJvcHMub25DbGlja0FjdGlvbi5jYW5FeGVjdXRlICYmICFwcm9wcy5vbkNsaWNrQWN0aW9uLmlzRXhlY3V0aW5nKVxyXG4gICAgXHJcbiAgICB7XHJcbiAgICAgIHByb3BzLmNob3NlbldvcmQuc2V0VmFsdWUodGV4dCk7XHJcbiAgICAgIHByb3BzLm9uQ2xpY2tBY3Rpb24uZXhlY3V0ZSgpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHJldHVybiAoXHJcblxyXG4gICAgPFdvcmRDbG91ZCBkYXRhPXtkYXRhfSBmb250U2l6ZU1hcHBlcj17Zm9udFNpemVNYXBwZXJ9IHJvdGF0ZT17cm90YXRlfSBvbldvcmRDbGljaz17KGV2ZW50LCB3b3JkKSA9PiBvbkNsaWNrSGFuZGxlKHdvcmQudGV4dCl9IC8+XHJcblxyXG4gICk7XHJcbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgJ2NvcmUtanMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIGNyZWF0ZUVsZW1lbnQsIHJlbmRlciB9IGZyb20gXCJyZWFjdFwiO1xyXG5cclxuXHJcblxyXG5pbXBvcnQgV29yZENsb3VkV2lkZ2V0Q29tcG9uZW50IGZyb20gXCIuL2NvbXBvbmVudHMvV29yZENsb3VkV2lkZ2V0Q29tcG9uZW50XCI7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV29yZENsb3VkV2lkZ2V0IGV4dGVuZHMgQ29tcG9uZW50IHtcclxuICAgIFxyXG5cclxuICAgIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5leHRQcm9wcy5kYXRhU291cmNlICE9PSB0aGlzLnByb3BzLmRhdGFTb3VyY2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG5cclxuICAgICAgICB2YXIgZGF0YVRvUmVuZGVyID0gW107XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZGF0YVNvdXJjZS5zdGF0dXMgPT09IFwiYXZhaWxhYmxlXCIgJiYgdGhpcy5wcm9wcy5kYXRhU291cmNlLml0ZW1zKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgaSA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnByb3BzLmRhdGFTb3VyY2UuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGRhdGFUb1JlbmRlci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLnByb3BzLnRleHRBdHRyaWIuZ2V0KCh0aGlzLnByb3BzLmRhdGFTb3VyY2UuaXRlbXNbaV0pKS52YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5wcm9wcy5pbnRBdHRyaWIuZ2V0KCh0aGlzLnByb3BzLmRhdGFTb3VyY2UuaXRlbXNbaV0pKS52YWx1ZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDxXb3JkQ2xvdWRXaWRnZXRDb21wb25lbnQgaW5wdXREYXRhPXtkYXRhVG9SZW5kZXJ9IGNob3NlbldvcmQ9e3RoaXMucHJvcHMuY2hvc2VuV29yZH0gb25DbGlja0FjdGlvbj17dGhpcy5wcm9wcy5vbkNsaWNrQWN0aW9ufSAvPjtcclxuXHJcbiAgICB9XHJcbn1cclxuIl0sIm5hbWVzIjpbImNoZWNrIiwiaXQiLCJNYXRoIiwibW9kdWxlIiwiZ2xvYmFsVGhpcyIsIndpbmRvdyIsInNlbGYiLCJnbG9iYWwiLCJGdW5jdGlvbiIsImV4ZWMiLCJlcnJvciIsImZhaWxzIiwicmVxdWlyZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwiJHByb3BlcnR5SXNFbnVtZXJhYmxlIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJOQVNIT1JOX0JVRyIsImNhbGwiLCJWIiwiZGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJiaXRtYXAiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwidG9TdHJpbmciLCJzbGljZSIsImNsYXNzb2YiLCJzcGxpdCIsInVuZGVmaW5lZCIsIlR5cGVFcnJvciIsIkluZGV4ZWRPYmplY3QiLCJyZXF1aXJlT2JqZWN0Q29lcmNpYmxlIiwiYXJndW1lbnQiLCJpc0NhbGxhYmxlIiwiYUZ1bmN0aW9uIiwibmFtZXNwYWNlIiwibWV0aG9kIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZ2V0QnVpbHRJbiIsInVzZXJBZ2VudCIsInByb2Nlc3MiLCJEZW5vIiwidmVyc2lvbnMiLCJ2ZXJzaW9uIiwidjgiLCJtYXRjaCIsIlY4X1ZFUlNJT04iLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJzeW1ib2wiLCJTeW1ib2wiLCJTdHJpbmciLCJzaGFtIiwiTkFUSVZFX1NZTUJPTCIsIml0ZXJhdG9yIiwiVVNFX1NZTUJPTF9BU19VSUQiLCIkU3ltYm9sIiwidHJ5VG9TdHJpbmciLCJhQ2FsbGFibGUiLCJQIiwiZnVuYyIsImlzT2JqZWN0IiwiaW5wdXQiLCJwcmVmIiwiZm4iLCJ2YWwiLCJ2YWx1ZU9mIiwia2V5Iiwic2V0R2xvYmFsIiwiU0hBUkVEIiwic3RvcmUiLCJwdXNoIiwibW9kZSIsImNvcHlyaWdodCIsInRvT2JqZWN0IiwiaGFzT3duUHJvcGVydHkiLCJoYXNPd24iLCJpZCIsInBvc3RmaXgiLCJyYW5kb20iLCJzaGFyZWQiLCJ1aWQiLCJXZWxsS25vd25TeW1ib2xzU3RvcmUiLCJjcmVhdGVXZWxsS25vd25TeW1ib2wiLCJ3aXRob3V0U2V0dGVyIiwibmFtZSIsImlzU3ltYm9sIiwiZ2V0TWV0aG9kIiwib3JkaW5hcnlUb1ByaW1pdGl2ZSIsIndlbGxLbm93blN5bWJvbCIsIlRPX1BSSU1JVElWRSIsImV4b3RpY1RvUHJpbSIsInJlc3VsdCIsInRvUHJpbWl0aXZlIiwiZG9jdW1lbnQiLCJFWElTVFMiLCJjcmVhdGVFbGVtZW50IiwiREVTQ1JJUFRPUlMiLCJhIiwicHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUiLCJjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IiLCJ0b0luZGV4ZWRPYmplY3QiLCJ0b1Byb3BlcnR5S2V5IiwiSUU4X0RPTV9ERUZJTkUiLCIkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiTyIsImYiLCJhbk9iamVjdCIsIiRkZWZpbmVQcm9wZXJ0eSIsIkF0dHJpYnV0ZXMiLCJkZWZpbmVQcm9wZXJ0eU1vZHVsZSIsIm9iamVjdCIsImZ1bmN0aW9uVG9TdHJpbmciLCJpbnNwZWN0U291cmNlIiwiV2Vha01hcCIsInRlc3QiLCJrZXlzIiwiTkFUSVZFX1dFQUtfTUFQIiwiY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5Iiwic2hhcmVkS2V5IiwiaGlkZGVuS2V5cyIsIk9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEIiwic2V0IiwiaGFzIiwiZW5mb3JjZSIsImdldHRlckZvciIsIlRZUEUiLCJzdGF0ZSIsInR5cGUiLCJ3bWdldCIsIndtaGFzIiwid21zZXQiLCJtZXRhZGF0YSIsImZhY2FkZSIsIlNUQVRFIiwiRnVuY3Rpb25Qcm90b3R5cGUiLCJwcm90b3R5cGUiLCJnZXREZXNjcmlwdG9yIiwiUFJPUEVSIiwic29tZXRoaW5nIiwiQ09ORklHVVJBQkxFIiwiSW50ZXJuYWxTdGF0ZU1vZHVsZSIsIkNPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FIiwiZ2V0SW50ZXJuYWxTdGF0ZSIsImVuZm9yY2VJbnRlcm5hbFN0YXRlIiwiVEVNUExBVEUiLCJvcHRpb25zIiwidW5zYWZlIiwic2ltcGxlIiwibm9UYXJnZXRHZXQiLCJyZXBsYWNlIiwic291cmNlIiwiam9pbiIsImNlaWwiLCJmbG9vciIsIm51bWJlciIsInRvSW50ZWdlck9ySW5maW5pdHkiLCJtYXgiLCJtaW4iLCJpbmRleCIsImludGVnZXIiLCJ0b0xlbmd0aCIsIm9iaiIsInRvQWJzb2x1dGVJbmRleCIsImxlbmd0aE9mQXJyYXlMaWtlIiwiY3JlYXRlTWV0aG9kIiwiSVNfSU5DTFVERVMiLCIkdGhpcyIsImVsIiwiZnJvbUluZGV4IiwiaW5jbHVkZXMiLCJpbmRleE9mIiwibmFtZXMiLCJpIiwiaW50ZXJuYWxPYmplY3RLZXlzIiwiZW51bUJ1Z0tleXMiLCJjb25jYXQiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSIsImdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSIsIm93bktleXMiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUiLCJ0YXJnZXQiLCJyZXBsYWNlbWVudCIsImlzRm9yY2VkIiwiZmVhdHVyZSIsImRldGVjdGlvbiIsImRhdGEiLCJub3JtYWxpemUiLCJQT0xZRklMTCIsIk5BVElWRSIsInN0cmluZyIsInRvTG93ZXJDYXNlIiwicmVkZWZpbmUiLCJjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzIiwiVEFSR0VUIiwiR0xPQkFMIiwiU1RBVElDIiwic3RhdCIsIkZPUkNFRCIsInRhcmdldFByb3BlcnR5Iiwic291cmNlUHJvcGVydHkiLCJmb3JjZWQiLCJBcnJheSIsImlzQXJyYXkiLCJUT19TVFJJTkdfVEFHIiwiVE9fU1RSSU5HX1RBR19TVVBQT1JUIiwiY2xhc3NvZlJhdyIsIkNPUlJFQ1RfQVJHVU1FTlRTIiwidHJ5R2V0IiwidGFnIiwiY2FsbGVlIiwib2JqZWN0S2V5cyIsImRlZmluZVByb3BlcnRpZXMiLCJQcm9wZXJ0aWVzIiwiaHRtbCIsImRvY3VtZW50Q3JlYXRlRWxlbWVudCIsIkdUIiwiTFQiLCJQUk9UT1RZUEUiLCJTQ1JJUFQiLCJJRV9QUk9UTyIsIkVtcHR5Q29uc3RydWN0b3IiLCJzY3JpcHRUYWciLCJjb250ZW50IiwiTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCIsImFjdGl2ZVhEb2N1bWVudCIsIndyaXRlIiwiY2xvc2UiLCJ0ZW1wIiwicGFyZW50V2luZG93IiwiTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lIiwiaWZyYW1lIiwiSlMiLCJpZnJhbWVEb2N1bWVudCIsInN0eWxlIiwiZGlzcGxheSIsImFwcGVuZENoaWxkIiwic3JjIiwiY29udGVudFdpbmRvdyIsIm9wZW4iLCJGIiwiTnVsbFByb3RvT2JqZWN0IiwiQWN0aXZlWE9iamVjdCIsImRvbWFpbiIsImNyZWF0ZSIsIiRnZXRPd25Qcm9wZXJ0eU5hbWVzIiwid2luZG93TmFtZXMiLCJnZXRXaW5kb3dOYW1lcyIsInBhdGgiLCJ3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlIiwiTkFNRSIsIlRBRyIsInRoYXQiLCJiIiwiYyIsImFwcGx5IiwiZW1wdHkiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvclJlZ0V4cCIsIklOQ09SUkVDVF9UT19TVFJJTkciLCJpc0NvbnN0cnVjdG9yTW9kZXJuIiwiaXNDb25zdHJ1Y3RvckxlZ2FjeSIsImNhbGxlZCIsImlzQ29uc3RydWN0b3IiLCJTUEVDSUVTIiwib3JpZ2luYWxBcnJheSIsIkMiLCJjb25zdHJ1Y3RvciIsImFycmF5U3BlY2llc0NvbnN0cnVjdG9yIiwiYmluZCIsImFycmF5U3BlY2llc0NyZWF0ZSIsIklTX01BUCIsIklTX0ZJTFRFUiIsIklTX1NPTUUiLCJJU19FVkVSWSIsIklTX0ZJTkRfSU5ERVgiLCJJU19GSUxURVJfUkVKRUNUIiwiTk9fSE9MRVMiLCJjYWxsYmFja2ZuIiwic3BlY2lmaWNDcmVhdGUiLCJib3VuZEZ1bmN0aW9uIiwiZm9yRWFjaCIsIm1hcCIsImZpbHRlciIsInNvbWUiLCJldmVyeSIsImZpbmQiLCJmaW5kSW5kZXgiLCJmaWx0ZXJSZWplY3QiLCIkIiwiJHRvU3RyaW5nIiwibmF0aXZlT2JqZWN0Q3JlYXRlIiwiZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsIiwiZGVmaW5lV2VsbEtub3duU3ltYm9sIiwic2V0VG9TdHJpbmdUYWciLCIkZm9yRWFjaCIsIkhJRERFTiIsIlNZTUJPTCIsInNldEludGVybmFsU3RhdGUiLCJPYmplY3RQcm90b3R5cGUiLCIkc3RyaW5naWZ5IiwibmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwibmF0aXZlRGVmaW5lUHJvcGVydHkiLCJuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzIiwibmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUiLCJBbGxTeW1ib2xzIiwiT2JqZWN0UHJvdG90eXBlU3ltYm9scyIsIlN0cmluZ1RvU3ltYm9sUmVnaXN0cnkiLCJTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5IiwiUU9iamVjdCIsIlVTRV9TRVRURVIiLCJmaW5kQ2hpbGQiLCJzZXRTeW1ib2xEZXNjcmlwdG9yIiwiT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciIsIndyYXAiLCJkZXNjcmlwdGlvbiIsIiRkZWZpbmVQcm9wZXJ0aWVzIiwicHJvcGVydGllcyIsIiRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCIkY3JlYXRlIiwiSVNfT0JKRUNUX1BST1RPVFlQRSIsInNldHRlciIsImtleUZvciIsInN5bSIsInVzZVNldHRlciIsInVzZVNpbXBsZSIsIkZPUkNFRF9KU09OX1NUUklOR0lGWSIsInN0cmluZ2lmeSIsInJlcGxhY2VyIiwic3BhY2UiLCJhcmdzIiwiJHJlcGxhY2VyIiwiTmF0aXZlU3ltYm9sIiwiRW1wdHlTdHJpbmdEZXNjcmlwdGlvblN0b3JlIiwiU3ltYm9sV3JhcHBlciIsInN5bWJvbFByb3RvdHlwZSIsInN5bWJvbFRvU3RyaW5nIiwibmF0aXZlU3ltYm9sIiwicmVnZXhwIiwiZGVzYyIsImdldFByb3RvdHlwZU9mIiwiQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSIiwiYVBvc3NpYmxlUHJvdG90eXBlIiwic2V0UHJvdG90eXBlT2YiLCJDT1JSRUNUX1NFVFRFUiIsInByb3RvIiwiX19wcm90b19fIiwiY2F1c2UiLCJJdGVyYXRvcnMiLCJJVEVSQVRPUiIsIkFycmF5UHJvdG90eXBlIiwiZ2V0SXRlcmF0b3JNZXRob2QiLCJ1c2luZ0l0ZXJhdG9yIiwiaXRlcmF0b3JNZXRob2QiLCJraW5kIiwiaW5uZXJSZXN1bHQiLCJpbm5lckVycm9yIiwiaXNBcnJheUl0ZXJhdG9yTWV0aG9kIiwiZ2V0SXRlcmF0b3IiLCJpdGVyYXRvckNsb3NlIiwiUmVzdWx0Iiwic3RvcHBlZCIsIml0ZXJhYmxlIiwidW5ib3VuZEZ1bmN0aW9uIiwiQVNfRU5UUklFUyIsIklTX0lURVJBVE9SIiwiSU5URVJSVVBURUQiLCJpdGVyRm4iLCJuZXh0Iiwic3RlcCIsInN0b3AiLCJjb25kaXRpb24iLCJjYWxsRm4iLCJkb25lIiwiaW5zdGFsbEVycm9yQ2F1c2UiLCJpdGVyYXRlIiwiJEFnZ3JlZ2F0ZUVycm9yIiwiQWdncmVnYXRlRXJyb3IiLCJlcnJvcnMiLCJtZXNzYWdlIiwiRXJyb3IiLCJlcnJvcnNBcnJheSIsIlVOU0NPUEFCTEVTIiwiYWRkVG9VbnNjb3BhYmxlcyIsImF0IiwibGVuIiwicmVsYXRpdmVJbmRleCIsImsiLCJwcm9wZXJ0eUtleSIsIk1FVEhPRF9OQU1FIiwiYXJyYXkiLCJmb28iLCJCb29sZWFuIiwiY3JlYXRlUHJvcGVydHkiLCJhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0IiwiSVNfQ09OQ0FUX1NQUkVBREFCTEUiLCJNQVhfU0FGRV9JTlRFR0VSIiwiTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEIiwiSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCIsIlNQRUNJRVNfU1VQUE9SVCIsImlzQ29uY2F0U3ByZWFkYWJsZSIsInNwcmVhZGFibGUiLCJhcmciLCJBIiwibiIsIkUiLCJjb3B5V2l0aGluIiwic3RhcnQiLCJ0byIsImZyb20iLCJlbmQiLCJjb3VudCIsImluYyIsIiRldmVyeSIsImFycmF5TWV0aG9kSXNTdHJpY3QiLCJTVFJJQ1RfTUVUSE9EIiwiZmlsbCIsImFyZ3VtZW50c0xlbmd0aCIsImVuZFBvcyIsIiRmaWx0ZXIiLCJIQVNfU1BFQ0lFU19TVVBQT1JUIiwiJGZpbmQiLCJGSU5EIiwiU0tJUFNfSE9MRVMiLCIkZmluZEluZGV4IiwiRklORF9JTkRFWCIsImZsYXR0ZW5JbnRvQXJyYXkiLCJvcmlnaW5hbCIsInNvdXJjZUxlbiIsImRlcHRoIiwibWFwcGVyIiwidGhpc0FyZyIsInRhcmdldEluZGV4Iiwic291cmNlSW5kZXgiLCJtYXBGbiIsImVsZW1lbnQiLCJlbGVtZW50TGVuIiwiZmxhdCIsImRlcHRoQXJnIiwiZmxhdE1hcCIsIkVOVFJJRVMiLCJjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nIiwiYXJyYXlMaWtlIiwiSVNfQ09OU1RSVUNUT1IiLCJtYXBmbiIsIm1hcHBpbmciLCJTQUZFX0NMT1NJTkciLCJpdGVyYXRvcldpdGhSZXR1cm4iLCJTS0lQX0NMT1NJTkciLCJJVEVSQVRJT05fU1VQUE9SVCIsImNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiIsIklOQ09SUkVDVF9JVEVSQVRJT04iLCIkaW5jbHVkZXMiLCIkaW5kZXhPZiIsIm5hdGl2ZUluZGV4T2YiLCJORUdBVElWRV9aRVJPIiwic2VhcmNoRWxlbWVudCIsIkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMiLCJJdGVyYXRvclByb3RvdHlwZSIsIlByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSIsImFycmF5SXRlcmF0b3IiLCJORVdfSVRFUkFUT1JfUFJPVE9UWVBFIiwicmV0dXJuVGhpcyIsIkl0ZXJhdG9yQ29uc3RydWN0b3IiLCJGdW5jdGlvbk5hbWUiLCJjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yIiwiSXRlcmF0b3JzQ29yZSIsIlBST1BFUl9GVU5DVElPTl9OQU1FIiwiS0VZUyIsIlZBTFVFUyIsIkl0ZXJhYmxlIiwiREVGQVVMVCIsIklTX1NFVCIsImdldEl0ZXJhdGlvbk1ldGhvZCIsIktJTkQiLCJkZWZhdWx0SXRlcmF0b3IiLCJJdGVyYWJsZVByb3RvdHlwZSIsInZhbHVlcyIsImVudHJpZXMiLCJJTkNPUlJFQ1RfVkFMVUVTX05BTUUiLCJuYXRpdmVJdGVyYXRvciIsImFueU5hdGl2ZUl0ZXJhdG9yIiwiQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlIiwibWV0aG9kcyIsIktFWSIsImRlZmluZUl0ZXJhdG9yIiwiQVJSQVlfSVRFUkFUT1IiLCJpdGVyYXRlZCIsIkFyZ3VtZW50cyIsIm5hdGl2ZUpvaW4iLCJFUzNfU1RSSU5HUyIsInNlcGFyYXRvciIsIiRsYXN0SW5kZXhPZiIsImxhc3RJbmRleE9mIiwiJG1hcCIsIklTTlRfR0VORVJJQyIsIm9mIiwiSVNfUklHSFQiLCJtZW1vIiwibGVmdCIsInJpZ2h0IiwiJHJlZHVjZSIsIkNIUk9NRV9WRVJTSU9OIiwiSVNfTk9ERSIsIkNIUk9NRV9CVUciLCJyZWR1Y2UiLCIkcmVkdWNlUmlnaHQiLCJyZWR1Y2VSaWdodCIsIm5hdGl2ZVJldmVyc2UiLCJyZXZlcnNlIiwibmF0aXZlU2xpY2UiLCJmaW4iLCJDb25zdHJ1Y3RvciIsIiRzb21lIiwibWVyZ2VTb3J0IiwiY29tcGFyZWZuIiwibWlkZGxlIiwiaW5zZXJ0aW9uU29ydCIsIm1lcmdlIiwiaiIsImxsZW5ndGgiLCJybGVuZ3RoIiwibGluZGV4IiwicmluZGV4IiwiZmlyZWZveCIsIlVBIiwid2Via2l0IiwiaW50ZXJuYWxTb3J0IiwiRkYiLCJJRV9PUl9FREdFIiwiVjgiLCJXRUJLSVQiLCJuYXRpdmVTb3J0Iiwic29ydCIsIkZBSUxTX09OX1VOREVGSU5FRCIsIkZBSUxTX09OX05VTEwiLCJTVEFCTEVfU09SVCIsImNvZGUiLCJjaHIiLCJmcm9tQ2hhckNvZGUiLCJ2IiwiY2hhckF0IiwiZ2V0U29ydENvbXBhcmUiLCJ4IiwieSIsIml0ZW1zIiwiYXJyYXlMZW5ndGgiLCJpdGVtc0xlbmd0aCIsIkNPTlNUUlVDVE9SX05BTUUiLCJzZXRTcGVjaWVzIiwiTUFYSU1VTV9BTExPV0VEX0xFTkdUSF9FWENFRURFRCIsInNwbGljZSIsImRlbGV0ZUNvdW50IiwiYWN0dWFsU3RhcnQiLCJpbnNlcnRDb3VudCIsImFjdHVhbERlbGV0ZUNvdW50IiwiQXJyYXlCdWZmZXIiLCJEYXRhVmlldyIsIlJhbmdlRXJyb3IiLCJhYnMiLCJwb3ciLCJsb2ciLCJMTjIiLCJwYWNrIiwibWFudGlzc2FMZW5ndGgiLCJieXRlcyIsImJ1ZmZlciIsImV4cG9uZW50TGVuZ3RoIiwiZU1heCIsImVCaWFzIiwicnQiLCJzaWduIiwiZXhwb25lbnQiLCJtYW50aXNzYSIsIkluZmluaXR5IiwidW5wYWNrIiwibkJpdHMiLCJOYU4iLCJOQVRJVkVfQVJSQVlfQlVGRkVSIiwicmVkZWZpbmVBbGwiLCJhbkluc3RhbmNlIiwidG9JbmRleCIsIklFRUU3NTQiLCJhcnJheUZpbGwiLCJBUlJBWV9CVUZGRVIiLCJEQVRBX1ZJRVciLCJXUk9OR19MRU5HVEgiLCJXUk9OR19JTkRFWCIsIk5hdGl2ZUFycmF5QnVmZmVyIiwiJEFycmF5QnVmZmVyIiwiJERhdGFWaWV3IiwiJERhdGFWaWV3UHJvdG90eXBlIiwicGFja0lFRUU3NTQiLCJ1bnBhY2tJRUVFNzU0IiwicGFja0ludDgiLCJwYWNrSW50MTYiLCJwYWNrSW50MzIiLCJ1bnBhY2tJbnQzMiIsInBhY2tGbG9hdDMyIiwicGFja0Zsb2F0NjQiLCJhZGRHZXR0ZXIiLCJ2aWV3IiwiaXNMaXR0bGVFbmRpYW4iLCJpbnRJbmRleCIsImJ5dGVMZW5ndGgiLCJieXRlT2Zmc2V0IiwiY29udmVyc2lvbiIsImJ1ZmZlckxlbmd0aCIsIm9mZnNldCIsImdldEludDgiLCJnZXRVaW50OCIsImdldEludDE2IiwiZ2V0VWludDE2IiwiZ2V0SW50MzIiLCJnZXRVaW50MzIiLCJnZXRGbG9hdDMyIiwiZ2V0RmxvYXQ2NCIsInNldEludDgiLCJzZXRVaW50OCIsInNldEludDE2Iiwic2V0VWludDE2Iiwic2V0SW50MzIiLCJzZXRVaW50MzIiLCJzZXRGbG9hdDMyIiwic2V0RmxvYXQ2NCIsIklOQ09SUkVDVF9BUlJBWV9CVUZGRVJfTkFNRSIsIkFycmF5QnVmZmVyUHJvdG90eXBlIiwidGVzdFZpZXciLCIkc2V0SW50OCIsImFycmF5QnVmZmVyTW9kdWxlIiwiSW50OEFycmF5IiwiSW50OEFycmF5UHJvdG90eXBlIiwiVWludDhDbGFtcGVkQXJyYXkiLCJVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSIsIlR5cGVkQXJyYXkiLCJUeXBlZEFycmF5UHJvdG90eXBlIiwiaXNQcm90b3R5cGVPZiIsIlRZUEVEX0FSUkFZX1RBRyIsIlRZUEVEX0FSUkFZX0NPTlNUUlVDVE9SIiwiTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyIsIm9wZXJhIiwiVFlQRURfQVJSQVlfVEFHX1JFUUlSRUQiLCJQcm90b3R5cGUiLCJUeXBlZEFycmF5Q29uc3RydWN0b3JzTGlzdCIsIlVpbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiVWludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiVWludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJCaWdJbnRBcnJheUNvbnN0cnVjdG9yc0xpc3QiLCJCaWdJbnQ2NEFycmF5IiwiQmlnVWludDY0QXJyYXkiLCJpc1ZpZXciLCJrbGFzcyIsImlzVHlwZWRBcnJheSIsImFUeXBlZEFycmF5IiwiYVR5cGVkQXJyYXlDb25zdHJ1Y3RvciIsImV4cG9ydFR5cGVkQXJyYXlNZXRob2QiLCJwcm9wZXJ0eSIsIkFSUkFZIiwiVHlwZWRBcnJheUNvbnN0cnVjdG9yIiwiZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZCIsIkFycmF5QnVmZmVyVmlld0NvcmUiLCJhQ29uc3RydWN0b3IiLCJkZWZhdWx0Q29uc3RydWN0b3IiLCJTIiwiQXJyYXlCdWZmZXJNb2R1bGUiLCJzcGVjaWVzQ29uc3RydWN0b3IiLCJuYXRpdmVBcnJheUJ1ZmZlclNsaWNlIiwiSU5DT1JSRUNUX1NMSUNFIiwiZmlyc3QiLCJ2aWV3U291cmNlIiwidmlld1RhcmdldCIsIkRhdGUiLCJnZXRZZWFyIiwiZ2V0RnVsbFllYXIiLCJub3ciLCJnZXRUaW1lIiwic2V0RnVsbFllYXIiLCJzZXRZZWFyIiwieWVhciIsInlpIiwieXl5eSIsInRvR01UU3RyaW5nIiwidG9VVENTdHJpbmciLCJyZXBlYXQiLCJzdHIiLCJJU19FTkQiLCJtYXhMZW5ndGgiLCJmaWxsU3RyaW5nIiwiaW50TWF4TGVuZ3RoIiwic3RyaW5nTGVuZ3RoIiwiZmlsbFN0ciIsImZpbGxMZW4iLCJzdHJpbmdGaWxsZXIiLCJwYWRTdGFydCIsIkRhdGVQcm90b3R5cGUiLCJuYXRpdmVEYXRlVG9JU09TdHJpbmciLCJ0b0lTT1N0cmluZyIsImlzRmluaXRlIiwiZGF0ZSIsImdldFVUQ0Z1bGxZZWFyIiwibWlsbGlzZWNvbmRzIiwiZ2V0VVRDTWlsbGlzZWNvbmRzIiwiZ2V0VVRDTW9udGgiLCJnZXRVVENEYXRlIiwiZ2V0VVRDSG91cnMiLCJnZXRVVENNaW51dGVzIiwiZ2V0VVRDU2Vjb25kcyIsInRvSlNPTiIsInB2IiwiaGludCIsImRhdGVUb1ByaW1pdGl2ZSIsIklOVkFMSURfREFURSIsIlRPX1NUUklORyIsIm5hdGl2ZURhdGVUb1N0cmluZyIsInJhdyIsImhleCIsImVzY2FwZSIsImNoYXJDb2RlQXQiLCJ0b1VwcGVyQ2FzZSIsImZhY3RvcmllcyIsImFyZ3NMZW5ndGgiLCJsaXN0IiwicGFydEFyZ3MiLCJib3VuZCIsIkhBU19JTlNUQU5DRSIsIkZVTkNUSU9OX05BTUVfRVhJU1RTIiwiRnVuY3Rpb25Qcm90b3R5cGVUb1N0cmluZyIsIm5hbWVSRSIsInJlIiwibG93IiwiaGkiLCJmaXgiLCJwcmV2IiwiSlNPTiIsImlzRXh0ZW5zaWJsZSIsInByZXZlbnRFeHRlbnNpb25zIiwiZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlIiwiRlJFRVpJTkciLCJSRVFVSVJFRCIsIk1FVEFEQVRBIiwic2V0TWV0YWRhdGEiLCJvYmplY3RJRCIsIndlYWtEYXRhIiwiZmFzdEtleSIsImdldFdlYWtEYXRhIiwib25GcmVlemUiLCJlbmFibGUiLCJtZXRhIiwiZHVtbXkiLCJXcmFwcGVyIiwiTmV3VGFyZ2V0IiwiTmV3VGFyZ2V0UHJvdG90eXBlIiwiSW50ZXJuYWxNZXRhZGF0YU1vZHVsZSIsImluaGVyaXRJZlJlcXVpcmVkIiwid3JhcHBlciIsImNvbW1vbiIsIklTX1dFQUsiLCJBRERFUiIsIk5hdGl2ZUNvbnN0cnVjdG9yIiwiTmF0aXZlUHJvdG90eXBlIiwiZXhwb3J0ZWQiLCJmaXhNZXRob2QiLCJuYXRpdmVNZXRob2QiLCJhZGQiLCJSRVBMQUNFIiwiZ2V0Q29uc3RydWN0b3IiLCJpbnN0YW5jZSIsIkhBU05UX0NIQUlOSU5HIiwiVEhST1dTX09OX1BSSU1JVElWRVMiLCJBQ0NFUFRfSVRFUkFCTEVTIiwiQlVHR1lfWkVSTyIsIiRpbnN0YW5jZSIsImNsZWFyIiwic2V0U3Ryb25nIiwiaW50ZXJuYWxTdGF0ZUdldHRlckZvciIsImxhc3QiLCJzaXplIiwiZGVmaW5lIiwiZW50cnkiLCJnZXRFbnRyeSIsInByZXZpb3VzIiwicmVtb3ZlZCIsIklURVJBVE9SX05BTUUiLCJnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZSIsImdldEludGVybmFsSXRlcmF0b3JTdGF0ZSIsImNvbGxlY3Rpb24iLCJjb2xsZWN0aW9uU3Ryb25nIiwiaW5pdCIsIk1hcCIsImxvZzFwIiwiJGFjb3NoIiwiYWNvc2giLCJzcXJ0IiwiTnVtYmVyIiwiTUFYX1ZBTFVFIiwiJGFzaW5oIiwiYXNpbmgiLCIkYXRhbmgiLCJhdGFuaCIsImNicnQiLCJMT0cyRSIsImNsejMyIiwiJGV4cG0xIiwiZXhwbTEiLCJleHAiLCIkY29zaCIsImNvc2giLCJ0IiwiRVBTSUxPTiIsIkVQU0lMT04zMiIsIk1BWDMyIiwiTUlOMzIiLCJyb3VuZFRpZXNUb0V2ZW4iLCJmcm91bmQiLCIkYWJzIiwiJHNpZ24iLCIkaHlwb3QiLCJoeXBvdCIsIkJVR0dZIiwidmFsdWUxIiwidmFsdWUyIiwic3VtIiwiYUxlbiIsImxhcmciLCJkaXYiLCIkaW11bCIsImltdWwiLCJVSU5UMTYiLCJ4biIsInluIiwieGwiLCJ5bCIsIkxPRzEwRSIsImxvZzEwIiwibG9nMiIsInNpbmgiLCJ0YW5oIiwidHJ1bmMiLCJ3aGl0ZXNwYWNlcyIsIndoaXRlc3BhY2UiLCJsdHJpbSIsIlJlZ0V4cCIsInJ0cmltIiwidHJpbSIsInRoaXNOdW1iZXJWYWx1ZSIsIk5VTUJFUiIsIk5hdGl2ZU51bWJlciIsIk51bWJlclByb3RvdHlwZSIsInRvTnVtZXJpYyIsInByaW1WYWx1ZSIsInRvTnVtYmVyIiwidGhpcmQiLCJyYWRpeCIsIm1heENvZGUiLCJkaWdpdHMiLCJwYXJzZUludCIsIk51bWJlcldyYXBwZXIiLCJnbG9iYWxJc0Zpbml0ZSIsIm51bWJlcklzRmluaXRlIiwiaXNJbnRlZ2VyIiwiaXNJbnRlZ3JhbE51bWJlciIsImlzTmFOIiwiaXNTYWZlSW50ZWdlciIsIk1JTl9TQUZFX0lOVEVHRVIiLCIkcGFyc2VGbG9hdCIsInBhcnNlRmxvYXQiLCJ0cmltbWVkU3RyaW5nIiwiJHBhcnNlSW50IiwibmF0aXZlVG9GaXhlZCIsInRvRml4ZWQiLCJhY2MiLCJ4MiIsIm11bHRpcGx5IiwiYzIiLCJkaXZpZGUiLCJkYXRhVG9TdHJpbmciLCJzIiwiZnJhY3Rpb25EaWdpdHMiLCJmcmFjdERpZ2l0cyIsImUiLCJ6IiwibmF0aXZlVG9QcmVjaXNpb24iLCJ0b1ByZWNpc2lvbiIsInByZWNpc2lvbiIsIiRhc3NpZ24iLCJhc3NpZ24iLCJCIiwiYWxwaGFiZXQiLCJUIiwiX19kZWZpbmVTZXR0ZXJfXyIsIl9fZGVmaW5lR2V0dGVyX18iLCJnZXR0ZXIiLCJvYmplY3REZWZpbmVQcm9wZXJ0eU1vZGlsZSIsIlRPX0VOVFJJRVMiLCIkZW50cmllcyIsIiRmcmVlemUiLCJmcmVlemUiLCJGQUlMU19PTl9QUklNSVRJVkVTIiwiZnJvbUVudHJpZXMiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwibmF0aXZlR2V0UHJvdG90eXBlT2YiLCJpcyIsIiRpc0V4dGVuc2libGUiLCIkaXNGcm96ZW4iLCJpc0Zyb3plbiIsIiRpc1NlYWxlZCIsImlzU2VhbGVkIiwibmF0aXZlS2V5cyIsIl9fbG9va3VwR2V0dGVyX18iLCJfX2xvb2t1cFNldHRlcl9fIiwiJHByZXZlbnRFeHRlbnNpb25zIiwiJHNlYWwiLCJzZWFsIiwiJHZhbHVlcyIsIlByb21pc2UiLCJJU19JT1MiLCJzZXRJbW1lZGlhdGUiLCJjbGVhckltbWVkaWF0ZSIsIk1lc3NhZ2VDaGFubmVsIiwiRGlzcGF0Y2giLCJjb3VudGVyIiwicXVldWUiLCJPTlJFQURZU1RBVEVDSEFOR0UiLCJsb2NhdGlvbiIsImRlZmVyIiwiY2hhbm5lbCIsInBvcnQiLCJydW4iLCJydW5uZXIiLCJsaXN0ZW5lciIsImV2ZW50IiwicG9zdCIsInBvc3RNZXNzYWdlIiwicHJvdG9jb2wiLCJob3N0IiwibmV4dFRpY2siLCJwb3J0MiIsInBvcnQxIiwib25tZXNzYWdlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImltcG9ydFNjcmlwdHMiLCJyZW1vdmVDaGlsZCIsInNldFRpbWVvdXQiLCJQZWJibGUiLCJtYWNyb3Rhc2siLCJJU19JT1NfUEVCQkxFIiwiSVNfV0VCT1NfV0VCS0lUIiwiTXV0YXRpb25PYnNlcnZlciIsIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiLCJxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IiLCJxdWV1ZU1pY3JvdGFzayIsImZsdXNoIiwiaGVhZCIsIm5vdGlmeSIsInRvZ2dsZSIsIm5vZGUiLCJwcm9taXNlIiwidGhlbiIsInBhcmVudCIsImV4aXQiLCJlbnRlciIsImNyZWF0ZVRleHROb2RlIiwib2JzZXJ2ZSIsImNoYXJhY3RlckRhdGEiLCJyZXNvbHZlIiwidGFzayIsIlByb21pc2VDYXBhYmlsaXR5IiwicmVqZWN0IiwiJCRyZXNvbHZlIiwiJCRyZWplY3QiLCJuZXdQcm9taXNlQ2FwYWJpbGl0eSIsInByb21pc2VDYXBhYmlsaXR5IiwiY29uc29sZSIsIk5hdGl2ZVByb21pc2UiLCJtaWNyb3Rhc2siLCJwcm9taXNlUmVzb2x2ZSIsImhvc3RSZXBvcnRFcnJvcnMiLCJuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSIsInBlcmZvcm0iLCJJU19CUk9XU0VSIiwiUFJPTUlTRSIsImdldEludGVybmFsUHJvbWlzZVN0YXRlIiwiTmF0aXZlUHJvbWlzZVByb3RvdHlwZSIsIlByb21pc2VDb25zdHJ1Y3RvciIsIlByb21pc2VDb25zdHJ1Y3RvclByb3RvdHlwZSIsIm5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSIsIkRJU1BBVENIX0VWRU5UIiwiY3JlYXRlRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiTkFUSVZFX1JFSkVDVElPTl9FVkVOVCIsIlByb21pc2VSZWplY3Rpb25FdmVudCIsIlVOSEFORExFRF9SRUpFQ1RJT04iLCJSRUpFQ1RJT05fSEFORExFRCIsIlBFTkRJTkciLCJGVUxGSUxMRUQiLCJSRUpFQ1RFRCIsIkhBTkRMRUQiLCJVTkhBTkRMRUQiLCJTVUJDTEFTU0lORyIsIkludGVybmFsIiwiT3duUHJvbWlzZUNhcGFiaWxpdHkiLCJQcm9taXNlV3JhcHBlciIsIm5hdGl2ZVRoZW4iLCJQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSIsIkdMT0JBTF9DT1JFX0pTX1BST01JU0UiLCJGYWtlUHJvbWlzZSIsImFsbCIsImlzVGhlbmFibGUiLCJpc1JlamVjdCIsIm5vdGlmaWVkIiwiY2hhaW4iLCJyZWFjdGlvbnMiLCJvayIsInJlYWN0aW9uIiwiaGFuZGxlciIsImZhaWwiLCJleGl0ZWQiLCJyZWplY3Rpb24iLCJvbkhhbmRsZVVuaGFuZGxlZCIsIm9uVW5oYW5kbGVkIiwicmVhc29uIiwiaW5pdEV2ZW50IiwiSVNfVU5IQU5ETEVEIiwiaXNVbmhhbmRsZWQiLCJlbWl0IiwidW53cmFwIiwiaW50ZXJuYWxSZWplY3QiLCJpbnRlcm5hbFJlc29sdmUiLCJleGVjdXRvciIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsInIiLCJjYXBhYmlsaXR5IiwiJHByb21pc2VSZXNvbHZlIiwicmVtYWluaW5nIiwiYWxyZWFkeUNhbGxlZCIsInJhY2UiLCJhbGxTZXR0bGVkIiwic3RhdHVzIiwiUFJPTUlTRV9BTllfRVJST1IiLCJhbnkiLCJhbHJlYWR5UmVzb2x2ZWQiLCJhbHJlYWR5UmVqZWN0ZWQiLCJOT05fR0VORVJJQyIsInJlYWwiLCJvbkZpbmFsbHkiLCJpc0Z1bmN0aW9uIiwibmF0aXZlQXBwbHkiLCJmdW5jdGlvbkFwcGx5IiwiT1BUSU9OQUxfQVJHVU1FTlRTX0xJU1QiLCJ0aGlzQXJndW1lbnQiLCJhcmd1bWVudHNMaXN0IiwibmF0aXZlQ29uc3RydWN0IiwiTkVXX1RBUkdFVF9CVUciLCJBUkdTX0JVRyIsIlRhcmdldCIsIm5ld1RhcmdldCIsIiRhcmdzIiwiRVJST1JfSU5TVEVBRF9PRl9GQUxTRSIsIlJlZmxlY3QiLCJhdHRyaWJ1dGVzIiwiZGVsZXRlUHJvcGVydHkiLCJpc0RhdGFEZXNjcmlwdG9yIiwicmVjZWl2ZXIiLCJvYmplY3RHZXRQcm90b3R5cGVPZiIsIm9iamVjdElzRXh0ZW5zaWJsZSIsIm9iamVjdFByZXZlbnRFeHRlbnNpb25zIiwib3duRGVzY3JpcHRvciIsImV4aXN0aW5nRGVzY3JpcHRvciIsIk1TX0VER0VfQlVHIiwib2JqZWN0U2V0UHJvdG90eXBlT2YiLCJNQVRDSCIsImlzUmVnRXhwIiwiaWdub3JlQ2FzZSIsIm11bHRpbGluZSIsImRvdEFsbCIsInVuaWNvZGUiLCJzdGlja3kiLCIkUmVnRXhwIiwibGFzdEluZGV4IiwiZmxhZ3MiLCJncm91cHMiLCJnZXRGbGFncyIsInN0aWNreUhlbHBlcnMiLCJVTlNVUFBPUlRFRF9ET1RfQUxMIiwiVU5TVVBQT1JURURfTkNHIiwiTmF0aXZlUmVnRXhwIiwiUmVnRXhwUHJvdG90eXBlIiwiSVNfTkNHIiwicmUxIiwicmUyIiwiQ09SUkVDVF9ORVciLCJVTlNVUFBPUlRFRF9ZIiwiQkFTRV9GT1JDRUQiLCJoYW5kbGVEb3RBbGwiLCJicmFja2V0cyIsImhhbmRsZU5DRyIsIm5hbWVkIiwibmNnIiwiZ3JvdXBpZCIsImdyb3VwbmFtZSIsIlN5bnRheEVycm9yIiwiUmVnRXhwV3JhcHBlciIsInBhdHRlcm4iLCJ0aGlzSXNSZWdFeHAiLCJwYXR0ZXJuSXNSZWdFeHAiLCJmbGFnc0FyZVVuZGVmaW5lZCIsInJhd1BhdHRlcm4iLCJyYXdGbGFncyIsImhhbmRsZWQiLCJwcm94eSIsInJlZ2V4cEZsYWdzIiwibmF0aXZlRXhlYyIsIm5hdGl2ZVJlcGxhY2UiLCJwYXRjaGVkRXhlYyIsIlVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyIsIkJST0tFTl9DQVJFVCIsIk5QQ0dfSU5DTFVERUQiLCJQQVRDSCIsInJlQ29weSIsImdyb3VwIiwiY2hhcnNBZGRlZCIsInN0ckNvcHkiLCJvYmplY3REZWZpbmVQcm9wZXJ0eU1vZHVsZSIsInJlZ0V4cEZsYWdzIiwiREVMRUdBVEVTX1RPX0VYRUMiLCJleGVjQ2FsbGVkIiwibmF0aXZlVGVzdCIsIm5hdGl2ZVRvU3RyaW5nIiwiTk9UX0dFTkVSSUMiLCJJTkNPUlJFQ1RfTkFNRSIsIlIiLCJwIiwicmYiLCJTZXQiLCJDT05WRVJUX1RPX1NUUklORyIsInBvcyIsInBvc2l0aW9uIiwic2Vjb25kIiwiY29kZUF0IiwiY29kZVBvaW50QXQiLCJlcnJvcjEiLCJlcnJvcjIiLCJub3RBUmVnRXhwIiwiY29ycmVjdElzUmVnRXhwTG9naWMiLCIkZW5kc1dpdGgiLCJlbmRzV2l0aCIsIkNPUlJFQ1RfSVNfUkVHRVhQX0xPR0lDIiwiTUROX1BPTFlGSUxMX0JVRyIsInNlYXJjaFN0cmluZyIsImVuZFBvc2l0aW9uIiwic2VhcmNoIiwiJGZyb21Db2RlUG9pbnQiLCJmcm9tQ29kZVBvaW50IiwiSU5DT1JSRUNUX0xFTkdUSCIsImVsZW1lbnRzIiwiU1RSSU5HX0lURVJBVE9SIiwicG9pbnQiLCJyZWdleHBFeGVjIiwiU0hBTSIsIkRFTEVHQVRFU19UT19TWU1CT0wiLCJuYXRpdmVSZWdFeHBNZXRob2QiLCJhcmcyIiwiZm9yY2VTdHJpbmdNZXRob2QiLCIkZXhlYyIsImZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljIiwiYWR2YW5jZVN0cmluZ0luZGV4IiwicmVnRXhwRXhlYyIsIm5hdGl2ZU1hdGNoIiwibWF5YmVDYWxsTmF0aXZlIiwibWF0Y2hlciIsInJ4IiwicmVzIiwiZnVsbFVuaWNvZGUiLCJtYXRjaFN0ciIsImdldFJlZ0V4cEZsYWdzIiwiSVNfUFVSRSIsIk1BVENIX0FMTCIsIlJFR0VYUF9TVFJJTkciLCJSRUdFWFBfU1RSSU5HX0lURVJBVE9SIiwibmF0aXZlTWF0Y2hBbGwiLCJtYXRjaEFsbCIsIldPUktTX1dJVEhfTk9OX0dMT0JBTF9SRUdFWCIsIiRSZWdFeHBTdHJpbmdJdGVyYXRvciIsIlJlZ0V4cFN0cmluZ0l0ZXJhdG9yIiwiJG1hdGNoQWxsIiwiZmxhZ3NWYWx1ZSIsIiRwYWRFbmQiLCJXRUJLSVRfQlVHIiwicGFkRW5kIiwiJHBhZFN0YXJ0IiwidGVtcGxhdGUiLCJyYXdUZW1wbGF0ZSIsImxpdGVyYWxTZWdtZW50cyIsIlNVQlNUSVRVVElPTl9TWU1CT0xTIiwiU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQiLCJtYXRjaGVkIiwiY2FwdHVyZXMiLCJuYW1lZENhcHR1cmVzIiwidGFpbFBvcyIsIm0iLCJzeW1ib2xzIiwiY2giLCJjYXB0dXJlIiwiZ2V0U3Vic3RpdHV0aW9uIiwibWF5YmVUb1N0cmluZyIsIlJFUExBQ0VfS0VFUFNfJDAiLCJSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSIsIlJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTIiwiXyIsIlVOU0FGRV9TVUJTVElUVVRFIiwic2VhcmNoVmFsdWUiLCJyZXBsYWNlVmFsdWUiLCJmdW5jdGlvbmFsUmVwbGFjZSIsInJlc3VsdHMiLCJhY2N1bXVsYXRlZFJlc3VsdCIsIm5leHRTb3VyY2VQb3NpdGlvbiIsInJlcGxhY2VyQXJncyIsInN0cmluZ0luZGV4T2YiLCJyZXBsYWNlQWxsIiwiSVNfUkVHX0VYUCIsInNlYXJjaExlbmd0aCIsImFkdmFuY2VCeSIsImVuZE9mTGFzdE1hdGNoIiwic2FtZVZhbHVlIiwiU0VBUkNIIiwibmF0aXZlU2VhcmNoIiwic2VhcmNoZXIiLCJwcmV2aW91c0xhc3RJbmRleCIsImNhbGxSZWdFeHBFeGVjIiwiYXJyYXlQdXNoIiwiTUFYX1VJTlQzMiIsIlNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQyIsIm9yaWdpbmFsRXhlYyIsIlNQTElUIiwibmF0aXZlU3BsaXQiLCJpbnRlcm5hbFNwbGl0IiwibGltaXQiLCJsaW0iLCJvdXRwdXQiLCJsYXN0TGFzdEluZGV4Iiwic2VwYXJhdG9yQ29weSIsImxhc3RMZW5ndGgiLCJzcGxpdHRlciIsInVuaWNvZGVNYXRjaGluZyIsInEiLCIkc3RhcnRzV2l0aCIsInN0YXJ0c1dpdGgiLCJzdWJzdHIiLCJpbnRTdGFydCIsImludExlbmd0aCIsImludEVuZCIsIm5vbiIsIiR0cmltIiwiZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCIsIiR0cmltRW5kIiwidHJpbUVuZCIsInRyaW1SaWdodCIsIiR0cmltU3RhcnQiLCJ0cmltU3RhcnQiLCJ0cmltTGVmdCIsInF1b3QiLCJhdHRyaWJ1dGUiLCJwMSIsImNyZWF0ZUhUTUwiLCJmb3JjZWRTdHJpbmdIVE1MTWV0aG9kIiwiYW5jaG9yIiwiYmlnIiwiYmxpbmsiLCJib2xkIiwiZml4ZWQiLCJmb250Y29sb3IiLCJjb2xvciIsImZvbnRzaXplIiwiaXRhbGljcyIsImxpbmsiLCJ1cmwiLCJzbWFsbCIsInN0cmlrZSIsInN1YiIsInN1cCIsInRvUG9zaXRpdmVJbnRlZ2VyIiwiQllURVMiLCJUWVBFRF9BUlJBWVNfQ09OU1RSVUNUT1JTX1JFUVVJUkVTX1dSQVBQRVJTIiwidG9PZmZzZXQiLCJ0eXBlZEFycmF5RnJvbSIsInJvdW5kIiwiQllURVNfUEVSX0VMRU1FTlQiLCJmcm9tTGlzdCIsImlzQXJyYXlCdWZmZXIiLCJpc1R5cGVkQXJyYXlJbmRleCIsIndyYXBwZWRHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ3cmFwcGVkRGVmaW5lUHJvcGVydHkiLCJDTEFNUEVEIiwiR0VUVEVSIiwiU0VUVEVSIiwiTmF0aXZlVHlwZWRBcnJheUNvbnN0cnVjdG9yIiwiVHlwZWRBcnJheUNvbnN0cnVjdG9yUHJvdG90eXBlIiwiYWRkRWxlbWVudCIsIiRsZW5ndGgiLCIkbGVuIiwidHlwZWRBcnJheU9mZnNldCIsImNyZWF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvciIsIiRjb3B5V2l0aGluIiwiJGZpbGwiLCJhcnJheUZyb21Db25zdHJ1Y3RvckFuZExpc3QiLCJ0eXBlZEFycmF5U3BlY2llc0NvbnN0cnVjdG9yIiwiZnJvbVNwZWNpZXNBbmRMaXN0IiwicHJlZGljYXRlIiwiQXJyYXlJdGVyYXRvcnMiLCJhcnJheVZhbHVlcyIsImFycmF5S2V5cyIsImFycmF5RW50cmllcyIsIm5hdGl2ZVR5cGVkQXJyYXlJdGVyYXRvciIsIlBST1BFUl9BUlJBWV9WQUxVRVNfTkFNRSIsInR5cGVkQXJyYXlWYWx1ZXMiLCIkam9pbiIsIiRzbGljZSIsIkFDQ0VQVF9JTkNPUlJFQ1RfQVJHVU1FTlRTIiwiZXhwZWN0ZWQiLCJtb2QiLCJzdWJhcnJheSIsImJlZ2luIiwiYmVnaW5JbmRleCIsIiR0b0xvY2FsZVN0cmluZyIsInRvTG9jYWxlU3RyaW5nIiwiVE9fTE9DQUxFX1NUUklOR19CVUciLCJVaW50OEFycmF5UHJvdG90eXBlIiwiYXJyYXlUb1N0cmluZyIsImFycmF5Sm9pbiIsIklTX05PVF9BUlJBWV9NRVRIT0QiLCJoZXgyIiwiaGV4NCIsInVuZXNjYXBlIiwiQXJyYXlJdGVyYXRpb25Nb2R1bGUiLCJ1bmNhdWdodEZyb3plblN0b3JlIiwiZnJvemVuIiwiVW5jYXVnaHRGcm96ZW5TdG9yZSIsImZpbmRVbmNhdWdodEZyb3plbiIsImNvbGxlY3Rpb25XZWFrIiwiZW5mb3JjZUl0ZXJuYWxTdGF0ZSIsIklTX0lFMTEiLCJJbnRlcm5hbFdlYWtNYXAiLCIkV2Vha01hcCIsIldlYWtNYXBQcm90b3R5cGUiLCJuYXRpdmVEZWxldGUiLCJuYXRpdmVIYXMiLCJuYXRpdmVHZXQiLCJuYXRpdmVTZXQiLCJXZWFrU2V0IiwiVVNFX0ZVTkNUSU9OX0NPTlNUUlVDVE9SIiwiQVNZTkNfSVRFUkFUT1IiLCJBc3luY0l0ZXJhdG9yIiwiUGFzc2VkQXN5bmNJdGVyYXRvclByb3RvdHlwZSIsIkFzeW5jSXRlcmF0b3JQcm90b3R5cGUiLCJhc3luY0Zyb21TeW5jSXRlcmF0b3JDb250aW51YXRpb24iLCJBc3luY0Zyb21TeW5jSXRlcmF0b3IiLCJoYXNBcmciLCIkcmV0dXJuIiwiJHRocm93IiwiQ09OU1RSVUNUT1IiLCJJU19UT19BUlJBWSIsIklTX0ZPUl9FQUNIIiwiTUFQUElORyIsImNsb3NlSXRlcmF0aW9uIiwicmV0dXJuTWV0aG9kIiwib25FcnJvciIsImxvb3AiLCJ0b0FycmF5IiwiZ2V0QXN5bmNJdGVyYXRvciIsImdldFZpcnR1YWwiLCJmcm9tQXN5bmMiLCJhc3luY0l0ZW1zIiwidXNpbmdBc3luY0l0ZXJhdG9yIiwidXNpbmdTeW5jSXRlcmF0b3IiLCIkZmlsdGVyUmVqZWN0IiwiZmlsdGVyT3V0IiwiSVNfRklORF9MQVNUX0lOREVYIiwiZmluZExhc3QiLCJmaW5kTGFzdEluZGV4IiwiJGZpbmRMYXN0IiwiJGZpbmRMYXN0SW5kZXgiLCJvYmplY3RDcmVhdGUiLCJzcGVjaWZpY0NvbnN0cnVjdG9yIiwiJGdyb3VwQnkiLCJncm91cEJ5IiwiaXNGcm96ZW5TdHJpbmdBcnJheSIsImFsbG93VW5kZWZpbmVkIiwiaXNUZW1wbGF0ZU9iamVjdCIsImxhc3RJdGVtIiwidW5pcXVlQnkiLCJyZXNvbHZlciIsInJlc29sdmVyRnVuY3Rpb24iLCJpdGVtIiwiQXN5bmNJdGVyYXRvckNvbnN0cnVjdG9yIiwibmV4dEhhbmRsZXIiLCJBc3luY0l0ZXJhdG9yUHJveHkiLCJpZ25vcmVBcmd1bWVudCIsImhhc0FyZ3VtZW50IiwiJCRyZXR1cm4iLCIkJHRocm93IiwiY3JlYXRlQXN5bmNJdGVyYXRvclByb3h5IiwiYXNJbmRleGVkUGFpcnMiLCJlcnIiLCJkcm9wIiwiZmlsdGVyZXIiLCJzZWxlY3RlZCIsImlubmVySXRlcmF0b3IiLCJvdXRlckxvb3AiLCJtYXBwZWQiLCJpbm5lck5leHQiLCJpbm5lckxvb3AiLCJyZWR1Y2VyIiwibm9Jbml0aWFsIiwiYWNjdW11bGF0b3IiLCJ0YWtlIiwiJHRvQXJyYXkiLCJJTkNPUlJFQ1RfUkFOR0UiLCJOVU1FUklDX1JBTkdFX0lURVJBVE9SIiwiJFJhbmdlSXRlcmF0b3IiLCJOdW1lcmljUmFuZ2VJdGVyYXRvciIsIm9wdGlvbiIsInplcm8iLCJvbmUiLCJpZkluY3JlYXNlIiwiaW5jbHVzaXZlRW5kIiwiaW5jbHVzaXZlIiwiaGl0c0VuZCIsImN1cnJlbnRDb3VudCIsImN1cnJlbnRZaWVsZGluZ1ZhbHVlIiwiZW5kQ29uZGl0aW9uIiwiQmlnSW50IiwicmFuZ2UiLCJOb2RlIiwicHJpbWl0aXZlcyIsIm9iamVjdHNCeUluZGV4IiwiaW5pdGlhbGl6ZXIiLCJJU19PQkpFQ1QiLCJyb290IiwiYWN0aXZlIiwiZ2V0Q29tcG9zaXRlS2V5Tm9kZSIsImNvbXBvc2l0ZUtleSIsImNvbXBvc2l0ZVN5bWJvbCIsIk5hdGl2ZUl0ZXJhdG9yIiwiSXRlcmF0b3IiLCJJdGVyYXRvclByb3h5IiwiaWdub3JlQXJnIiwiY3JlYXRlSXRlcmF0b3JQcm94eSIsInJlbW92ZXIiLCJhbGxEZWxldGVkIiwid2FzRGVsZXRlZCIsImNvbGxlY3Rpb25EZWxldGVBbGwiLCJkZWxldGVBbGwiLCJlbXBsYWNlIiwidXBkYXRlIiwiaW5zZXJ0IiwiJGVtcGxhY2UiLCJnZXRNYXBJdGVyYXRvciIsIm5ld01hcCIsImZpbmRLZXkiLCJuZXh0SXRlbSIsImtleURlcml2YXRpdmUiLCJkZXJpdmVkS2V5Iiwic2FtZVZhbHVlWmVybyIsImtleUJ5Iiwia2V5T2YiLCJtYXBLZXlzIiwibWFwVmFsdWVzIiwiY2FsbGJhY2siLCJpc1ByZXNlbnRJbk1hcCIsInVwc2VydCIsInVwZGF0ZUZuIiwiaW5zZXJ0Rm4iLCIkdXBzZXJ0IiwidXBkYXRlT3JJbnNlcnQiLCJjbGFtcCIsImxvd2VyIiwidXBwZXIiLCJERUdfUEVSX1JBRCIsIlBJIiwiUkFEX1BFUl9ERUciLCJkZWdyZWVzIiwicmFkaWFucyIsInNjYWxlIiwiaW5Mb3ciLCJpbkhpZ2giLCJvdXRMb3ciLCJvdXRIaWdoIiwiZnNjYWxlIiwiaWFkZGgiLCJ4MCIsIngxIiwieTAiLCJ5MSIsIiR4MCIsIiR4MSIsIiR5MCIsImltdWxoIiwidSIsIiR1IiwiJHYiLCJ1MCIsInYwIiwidTEiLCJ2MSIsImlzdWJoIiwiU0VFREVEX1JBTkRPTSIsIlNFRURFRF9SQU5ET01fR0VORVJBVE9SIiwiU0VFRF9UWVBFX0VSUk9SIiwiJFNlZWRlZFJhbmRvbUdlbmVyYXRvciIsIlNlZWRlZFJhbmRvbUdlbmVyYXRvciIsInNlZWQiLCJzZWVkZWRQUk5HIiwic2lnbmJpdCIsInVtdWxoIiwiSU5WQUxJRF9OVU1CRVJfUkVQUkVTRU5UQVRJT04iLCJJTlZBTElEX1JBRElYIiwidmFsaWQiLCJmcm9tU3RyaW5nIiwibWF0aE51bSIsIk9CSkVDVF9JVEVSQVRPUiIsIk9iamVjdEl0ZXJhdG9yIiwiaXRlcmF0ZUVudHJpZXMiLCJpdGVyYXRlS2V5cyIsIml0ZXJhdGVWYWx1ZXMiLCJPQlNFUlZBQkxFIiwiY2xlYW51cFN1YnNjcmlwdGlvbiIsInN1YnNjcmlwdGlvblN0YXRlIiwiY2xlYW51cCIsInN1YnNjcmlwdGlvbkNsb3NlZCIsIm9ic2VydmVyIiwic3Vic2NyaXB0aW9uIiwiY2xvc2VkIiwic3Vic2NyaXB0aW9uT2JzZXJ2ZXIiLCJTdWJzY3JpcHRpb24iLCJzdWJzY3JpYmVyIiwiU3Vic2NyaXB0aW9uT2JzZXJ2ZXIiLCJ1bnN1YnNjcmliZSIsIm5leHRNZXRob2QiLCJlcnJvck1ldGhvZCIsImNvbXBsZXRlIiwiY29tcGxldGVNZXRob2QiLCIkT2JzZXJ2YWJsZSIsIk9ic2VydmFibGUiLCJzdWJzY3JpYmUiLCJvYnNlcnZhYmxlTWV0aG9kIiwib2JzZXJ2YWJsZSIsImdldE9yQ3JlYXRlTWV0YWRhdGFNYXAiLCJ0YXJnZXRLZXkiLCJ0YXJnZXRNZXRhZGF0YSIsImtleU1ldGFkYXRhIiwib3JkaW5hcnlIYXNPd25NZXRhZGF0YSIsIk1ldGFkYXRhS2V5IiwibWV0YWRhdGFNYXAiLCJvcmRpbmFyeUdldE93bk1ldGFkYXRhIiwib3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSIsIk1ldGFkYXRhVmFsdWUiLCJvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyIsInRvTWV0YWRhdGFLZXkiLCJnZXRNYXAiLCJ0b0tleSIsIlJlZmxlY3RNZXRhZGF0YU1vZHVsZSIsImRlZmluZU1ldGFkYXRhIiwibWV0YWRhdGFLZXkiLCJtZXRhZGF0YVZhbHVlIiwiZGVsZXRlTWV0YWRhdGEiLCJvcmRpbmFyeUdldE1ldGFkYXRhIiwiZ2V0TWV0YWRhdGEiLCJpdGVyIiwib3JkaW5hcnlNZXRhZGF0YUtleXMiLCJvS2V5cyIsInBLZXlzIiwiZ2V0TWV0YWRhdGFLZXlzIiwiZ2V0T3duTWV0YWRhdGEiLCJnZXRPd25NZXRhZGF0YUtleXMiLCJvcmRpbmFyeUhhc01ldGFkYXRhIiwiaGFzTWV0YWRhdGEiLCJoYXNPd25NZXRhZGF0YSIsImRlY29yYXRvciIsImFkZGVyIiwiY29sbGVjdGlvbkFkZEFsbCIsImFkZEFsbCIsImRpZmZlcmVuY2UiLCJuZXdTZXQiLCJnZXRTZXRJdGVyYXRvciIsImludGVyc2VjdGlvbiIsImhhc0NoZWNrIiwiaXNEaXNqb2ludEZyb20iLCJpc1N1YnNldE9mIiwib3RoZXJTZXQiLCJpc1N1cGVyc2V0T2YiLCJzZXAiLCJzeW1tZXRyaWNEaWZmZXJlbmNlIiwidW5pb24iLCJTdHJpbmdNdWx0aWJ5dGVNb2R1bGUiLCIkU3RyaW5nSXRlcmF0b3IiLCJTdHJpbmdJdGVyYXRvciIsImNvZGVQb2ludCIsImNvZGVQb2ludHMiLCJhcnJheUZyb21Bc3luYyIsImFycmF5VW5pcXVlQnkiLCJDU1NSdWxlTGlzdCIsIkNTU1N0eWxlRGVjbGFyYXRpb24iLCJDU1NWYWx1ZUxpc3QiLCJDbGllbnRSZWN0TGlzdCIsIkRPTVJlY3RMaXN0IiwiRE9NU3RyaW5nTGlzdCIsIkRPTVRva2VuTGlzdCIsIkRhdGFUcmFuc2Zlckl0ZW1MaXN0IiwiRmlsZUxpc3QiLCJIVE1MQWxsQ29sbGVjdGlvbiIsIkhUTUxDb2xsZWN0aW9uIiwiSFRNTEZvcm1FbGVtZW50IiwiSFRNTFNlbGVjdEVsZW1lbnQiLCJNZWRpYUxpc3QiLCJNaW1lVHlwZUFycmF5IiwiTmFtZWROb2RlTWFwIiwiTm9kZUxpc3QiLCJQYWludFJlcXVlc3RMaXN0IiwiUGx1Z2luIiwiUGx1Z2luQXJyYXkiLCJTVkdMZW5ndGhMaXN0IiwiU1ZHTnVtYmVyTGlzdCIsIlNWR1BhdGhTZWdMaXN0IiwiU1ZHUG9pbnRMaXN0IiwiU1ZHU3RyaW5nTGlzdCIsIlNWR1RyYW5zZm9ybUxpc3QiLCJTb3VyY2VCdWZmZXJMaXN0IiwiU3R5bGVTaGVldExpc3QiLCJUZXh0VHJhY2tDdWVMaXN0IiwiVGV4dFRyYWNrTGlzdCIsIlRvdWNoTGlzdCIsImNsYXNzTGlzdCIsIkRPTVRva2VuTGlzdFByb3RvdHlwZSIsIkRPTUl0ZXJhYmxlcyIsImhhbmRsZVByb3RvdHlwZSIsIkNvbGxlY3Rpb25Qcm90b3R5cGUiLCJDT0xMRUNUSU9OX05BTUUiLCJBcnJheUl0ZXJhdG9yTWV0aG9kcyIsIkFycmF5VmFsdWVzIiwiTVNJRSIsInNjaGVkdWxlciIsInRpbWVvdXQiLCJib3VuZEFyZ3MiLCJzZXRJbnRlcnZhbCIsIlVSTCIsInNlYXJjaFBhcmFtcyIsInBhdGhuYW1lIiwiaHJlZiIsIlVSTFNlYXJjaFBhcmFtcyIsInVzZXJuYW1lIiwiaGFzaCIsIm1heEludCIsImJhc2UiLCJ0TWluIiwidE1heCIsInNrZXciLCJkYW1wIiwiaW5pdGlhbEJpYXMiLCJpbml0aWFsTiIsImRlbGltaXRlciIsInJlZ2V4Tm9uQVNDSUkiLCJyZWdleFNlcGFyYXRvcnMiLCJPVkVSRkxPV19FUlJPUiIsImJhc2VNaW51c1RNaW4iLCJzdHJpbmdGcm9tQ2hhckNvZGUiLCJ1Y3MyZGVjb2RlIiwiZXh0cmEiLCJkaWdpdFRvQmFzaWMiLCJkaWdpdCIsImFkYXB0IiwiZGVsdGEiLCJudW1Qb2ludHMiLCJmaXJzdFRpbWUiLCJlbmNvZGUiLCJpbnB1dExlbmd0aCIsImJpYXMiLCJjdXJyZW50VmFsdWUiLCJiYXNpY0xlbmd0aCIsImhhbmRsZWRDUENvdW50IiwiaGFuZGxlZENQQ291bnRQbHVzT25lIiwicU1pbnVzVCIsImJhc2VNaW51c1QiLCJlbmNvZGVkIiwibGFiZWxzIiwibGFiZWwiLCJVU0VfTkFUSVZFX1VSTCIsIm5hdGl2ZUZldGNoIiwiTmF0aXZlUmVxdWVzdCIsIlJlcXVlc3RQcm90b3R5cGUiLCJIZWFkZXJzIiwiVVJMX1NFQVJDSF9QQVJBTVMiLCJVUkxfU0VBUkNIX1BBUkFNU19JVEVSQVRPUiIsImdldEludGVybmFsUGFyYW1zU3RhdGUiLCJwbHVzIiwic2VxdWVuY2VzIiwicGVyY2VudFNlcXVlbmNlIiwicGVyY2VudERlY29kZSIsInNlcXVlbmNlIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZGVzZXJpYWxpemUiLCJzZXJpYWxpemUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJwYXJzZVNlYXJjaFBhcmFtcyIsInF1ZXJ5Iiwic2hpZnQiLCJ1cGRhdGVTZWFyY2hQYXJhbXMiLCJ2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCIsInBhc3NlZCIsInJlcXVpcmVkIiwiVVJMU2VhcmNoUGFyYW1zSXRlcmF0b3IiLCJwYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXNDb25zdHJ1Y3RvciIsImVudHJ5SXRlcmF0b3IiLCJlbnRyeU5leHQiLCJ1cGRhdGVVUkwiLCJVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUiLCJhcHBlbmQiLCJnZXRBbGwiLCJmb3VuZCIsImVudHJpZXNJbmRleCIsInNsaWNlSW5kZXgiLCJ3cmFwUmVxdWVzdE9wdGlvbnMiLCJib2R5IiwiaGVhZGVycyIsImZldGNoIiwiUmVxdWVzdENvbnN0cnVjdG9yIiwiUmVxdWVzdCIsImdldFN0YXRlIiwiYXJyYXlGcm9tIiwidG9BU0NJSSIsIlVSTFNlYXJjaFBhcmFtc01vZHVsZSIsIk5hdGl2ZVVSTCIsImdldEludGVybmFsU2VhcmNoUGFyYW1zU3RhdGUiLCJnZXRJbnRlcm5hbFVSTFN0YXRlIiwiSU5WQUxJRF9BVVRIT1JJVFkiLCJJTlZBTElEX1NDSEVNRSIsIklOVkFMSURfSE9TVCIsIklOVkFMSURfUE9SVCIsIkFMUEhBIiwiQUxQSEFOVU1FUklDIiwiRElHSVQiLCJIRVhfU1RBUlQiLCJPQ1QiLCJERUMiLCJIRVgiLCJGT1JCSURERU5fSE9TVF9DT0RFX1BPSU5UIiwiRk9SQklEREVOX0hPU1RfQ09ERV9QT0lOVF9FWENMVURJTkdfUEVSQ0VOVCIsIkxFQURJTkdfQU5EX1RSQUlMSU5HX0MwX0NPTlRST0xfT1JfU1BBQ0UiLCJUQUJfQU5EX05FV19MSU5FIiwiRU9GIiwicGFyc2VIb3N0IiwicGFyc2VJUHY2IiwiaXNTcGVjaWFsIiwicGVyY2VudEVuY29kZSIsIkMwQ29udHJvbFBlcmNlbnRFbmNvZGVTZXQiLCJwYXJzZUlQdjQiLCJwYXJ0cyIsInBhcnRzTGVuZ3RoIiwibnVtYmVycyIsInBhcnQiLCJpcHY0IiwicG9wIiwiYWRkcmVzcyIsInBpZWNlSW5kZXgiLCJjb21wcmVzcyIsInBvaW50ZXIiLCJudW1iZXJzU2VlbiIsImlwdjRQaWVjZSIsInN3YXBzIiwic3dhcCIsImZpbmRMb25nZXN0WmVyb1NlcXVlbmNlIiwiaXB2NiIsIm1heEluZGV4IiwiY3VyclN0YXJ0IiwiY3Vyckxlbmd0aCIsInNlcmlhbGl6ZUhvc3QiLCJpZ25vcmUwIiwidW5zaGlmdCIsImZyYWdtZW50UGVyY2VudEVuY29kZVNldCIsInBhdGhQZXJjZW50RW5jb2RlU2V0IiwidXNlcmluZm9QZXJjZW50RW5jb2RlU2V0Iiwic3BlY2lhbFNjaGVtZXMiLCJmdHAiLCJmaWxlIiwiaHR0cCIsImh0dHBzIiwid3MiLCJ3c3MiLCJzY2hlbWUiLCJpbmNsdWRlc0NyZWRlbnRpYWxzIiwicGFzc3dvcmQiLCJjYW5ub3RIYXZlVXNlcm5hbWVQYXNzd29yZFBvcnQiLCJjYW5ub3RCZUFCYXNlVVJMIiwiaXNXaW5kb3dzRHJpdmVMZXR0ZXIiLCJub3JtYWxpemVkIiwic3RhcnRzV2l0aFdpbmRvd3NEcml2ZUxldHRlciIsInNob3J0ZW5VUkxzUGF0aCIsInBhdGhTaXplIiwiaXNTaW5nbGVEb3QiLCJzZWdtZW50IiwiaXNEb3VibGVEb3QiLCJTQ0hFTUVfU1RBUlQiLCJTQ0hFTUUiLCJOT19TQ0hFTUUiLCJTUEVDSUFMX1JFTEFUSVZFX09SX0FVVEhPUklUWSIsIlBBVEhfT1JfQVVUSE9SSVRZIiwiUkVMQVRJVkUiLCJSRUxBVElWRV9TTEFTSCIsIlNQRUNJQUxfQVVUSE9SSVRZX1NMQVNIRVMiLCJTUEVDSUFMX0FVVEhPUklUWV9JR05PUkVfU0xBU0hFUyIsIkFVVEhPUklUWSIsIkhPU1QiLCJIT1NUTkFNRSIsIlBPUlQiLCJGSUxFIiwiRklMRV9TTEFTSCIsIkZJTEVfSE9TVCIsIlBBVEhfU1RBUlQiLCJQQVRIIiwiQ0FOTk9UX0JFX0FfQkFTRV9VUkxfUEFUSCIsIlFVRVJZIiwiRlJBR01FTlQiLCJwYXJzZVVSTCIsInN0YXRlT3ZlcnJpZGUiLCJzZWVuQXQiLCJzZWVuQnJhY2tldCIsInNlZW5QYXNzd29yZFRva2VuIiwiYnVmZmVyQ29kZVBvaW50cyIsImZhaWx1cmUiLCJmcmFnbWVudCIsImVuY29kZWRDb2RlUG9pbnRzIiwiVVJMQ29uc3RydWN0b3IiLCJ1cmxTdHJpbmciLCJiYXNlU3RhdGUiLCJzZWFyY2hQYXJhbXNTdGF0ZSIsInNlcmlhbGl6ZVVSTCIsIm9yaWdpbiIsImdldE9yaWdpbiIsImdldFByb3RvY29sIiwiZ2V0VXNlcm5hbWUiLCJnZXRQYXNzd29yZCIsImdldEhvc3QiLCJob3N0bmFtZSIsImdldEhvc3RuYW1lIiwiZ2V0UG9ydCIsImdldFBhdGhuYW1lIiwiZ2V0U2VhcmNoIiwiZ2V0U2VhcmNoUGFyYW1zIiwiZ2V0SGFzaCIsIlVSTFByb3RvdHlwZSIsImFjY2Vzc29yRGVzY3JpcHRvciIsIm5hdGl2ZUNyZWF0ZU9iamVjdFVSTCIsImNyZWF0ZU9iamVjdFVSTCIsIm5hdGl2ZVJldm9rZU9iamVjdFVSTCIsInJldm9rZU9iamVjdFVSTCIsImJsb2IiLCJoYXNTeW1ib2wiLCJmb3IiLCJSRUFDVF9FTEVNRU5UX1RZUEUiLCJSRUFDVF9QT1JUQUxfVFlQRSIsIlJFQUNUX0ZSQUdNRU5UX1RZUEUiLCJSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIiwiUkVBQ1RfUFJPRklMRVJfVFlQRSIsIlJFQUNUX1BST1ZJREVSX1RZUEUiLCJSRUFDVF9DT05URVhUX1RZUEUiLCJSRUFDVF9BU1lOQ19NT0RFX1RZUEUiLCJSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSIsIlJFQUNUX0ZPUldBUkRfUkVGX1RZUEUiLCJSRUFDVF9TVVNQRU5TRV9UWVBFIiwiUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIiwiUkVBQ1RfTUVNT19UWVBFIiwiUkVBQ1RfTEFaWV9UWVBFIiwiUkVBQ1RfQkxPQ0tfVFlQRSIsIlJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUiLCJSRUFDVF9SRVNQT05ERVJfVFlQRSIsIlJFQUNUX1NDT1BFX1RZUEUiLCJpc1ZhbGlkRWxlbWVudFR5cGUiLCIkJHR5cGVvZiIsInR5cGVPZiIsIiQkdHlwZW9mVHlwZSIsIkFzeW5jTW9kZSIsIkNvbmN1cnJlbnRNb2RlIiwiQ29udGV4dENvbnN1bWVyIiwiQ29udGV4dFByb3ZpZGVyIiwiRWxlbWVudCIsIkZvcndhcmRSZWYiLCJGcmFnbWVudCIsIkxhenkiLCJNZW1vIiwiUG9ydGFsIiwiUHJvZmlsZXIiLCJTdHJpY3RNb2RlIiwiU3VzcGVuc2UiLCJoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSIsImlzQXN5bmNNb2RlIiwiaXNDb25jdXJyZW50TW9kZSIsImlzQ29udGV4dENvbnN1bWVyIiwiaXNDb250ZXh0UHJvdmlkZXIiLCJpc0VsZW1lbnQiLCJpc0ZvcndhcmRSZWYiLCJpc0ZyYWdtZW50IiwiaXNMYXp5IiwiaXNNZW1vIiwiaXNQb3J0YWwiLCJpc1Byb2ZpbGVyIiwiaXNTdHJpY3RNb2RlIiwiaXNTdXNwZW5zZSIsImV4cG9ydHMiLCJwcm9wSXNFbnVtZXJhYmxlIiwic2hvdWxkVXNlTmF0aXZlIiwidGVzdDEiLCJ0ZXN0MiIsIm9yZGVyMiIsInRlc3QzIiwibGV0dGVyIiwiUmVhY3RQcm9wVHlwZXNTZWNyZXQiLCJwcmludFdhcm5pbmciLCJsb2dnZWRUeXBlRmFpbHVyZXMiLCJ0ZXh0IiwiY2hlY2tQcm9wVHlwZXMiLCJ0eXBlU3BlY3MiLCJjb21wb25lbnROYW1lIiwiZ2V0U3RhY2siLCJ0eXBlU3BlY05hbWUiLCJleCIsInN0YWNrIiwicmVzZXRXYXJuaW5nQ2FjaGUiLCJSZWFjdElzIiwiZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCIsImlzVmFsaWRFbGVtZW50IiwidGhyb3dPbkRpcmVjdEFjY2VzcyIsIklURVJBVE9SX1NZTUJPTCIsIkZBVVhfSVRFUkFUT1JfU1lNQk9MIiwiZ2V0SXRlcmF0b3JGbiIsIm1heWJlSXRlcmFibGUiLCJpdGVyYXRvckZuIiwiQU5PTllNT1VTIiwiUmVhY3RQcm9wVHlwZXMiLCJjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlciIsImJvb2wiLCJjcmVhdGVBbnlUeXBlQ2hlY2tlciIsImFycmF5T2YiLCJjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIiLCJjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIiLCJlbGVtZW50VHlwZSIsImNyZWF0ZUVsZW1lbnRUeXBlVHlwZUNoZWNrZXIiLCJpbnN0YW5jZU9mIiwiY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlciIsImNyZWF0ZU5vZGVDaGVja2VyIiwib2JqZWN0T2YiLCJjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyIiwib25lT2YiLCJjcmVhdGVFbnVtVHlwZUNoZWNrZXIiLCJvbmVPZlR5cGUiLCJjcmVhdGVVbmlvblR5cGVDaGVja2VyIiwic2hhcGUiLCJjcmVhdGVTaGFwZVR5cGVDaGVja2VyIiwiZXhhY3QiLCJjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyIiwiUHJvcFR5cGVFcnJvciIsImNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyIiwidmFsaWRhdGUiLCJtYW51YWxQcm9wVHlwZUNhbGxDYWNoZSIsIm1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50IiwiY2hlY2tUeXBlIiwiaXNSZXF1aXJlZCIsInByb3BzIiwicHJvcE5hbWUiLCJwcm9wRnVsbE5hbWUiLCJzZWNyZXQiLCJjYWNoZUtleSIsImNoYWluZWRDaGVja1R5cGUiLCJleHBlY3RlZFR5cGUiLCJwcm9wVmFsdWUiLCJwcm9wVHlwZSIsImdldFByb3BUeXBlIiwicHJlY2lzZVR5cGUiLCJnZXRQcmVjaXNlVHlwZSIsInR5cGVDaGVja2VyIiwiZXhwZWN0ZWRDbGFzcyIsImV4cGVjdGVkQ2xhc3NOYW1lIiwiYWN0dWFsQ2xhc3NOYW1lIiwiZ2V0Q2xhc3NOYW1lIiwiZXhwZWN0ZWRWYWx1ZXMiLCJ2YWx1ZXNTdHJpbmciLCJhcnJheU9mVHlwZUNoZWNrZXJzIiwiY2hlY2tlciIsImdldFBvc3RmaXhGb3JUeXBlV2FybmluZyIsImlzTm9kZSIsInNoYXBlVHlwZXMiLCJhbGxLZXlzIiwiUHJvcFR5cGVzIiwicGFyc2UiLCJvcHRzIiwicHJlc2VydmVOdW1iZXJzIiwiZ2V0S2V5VmFsdWVDaHVua3MiLCJpc051bWVyaWMiLCJjaHVua3MiLCJoYXNVbmNsb3NlZFVybCIsImNodW5rIiwibmV4dFNwbGl0Iiwic3Vic3RyaW5nIiwiUl9CT09MRUFOIiwiUl9GT0NVU0FCTEUiLCJSX0NMSUNLQUJMRSIsIlJfSU5WQUxJRF9DSEFSIiwiYXR0ckZpeCIsInByb3BGaXgiLCJhdHRySG9va3MiLCJ0YWJpbmRleCIsImF0dHJpYnV0ZU5vZGUiLCJnZXRBdHRyaWJ1dGVOb2RlIiwic3BlY2lmaWVkIiwibm9kZU5hbWUiLCJib29sSG9vayIsImVsZW0iLCJhdHRyTm9kZUhvb2siLCJjc3NUZXh0IiwiaGlkZWZvY3VzIiwicmVhZG9ubHkiLCJtYXhsZW5ndGgiLCJjZWxsc3BhY2luZyIsImNlbGxwYWRkaW5nIiwicm93c3BhbiIsImNvbHNwYW4iLCJ1c2VtYXAiLCJmcmFtZWJvcmRlciIsImNvbnRlbnRlZGl0YWJsZSIsInVhIiwibmF2aWdhdG9yIiwiZG9jIiwibnVtYmVyaWZ5IiwiaWVWZXJzaW9uIiwiZG9jdW1lbnRNb2RlIiwibWl4IiwiZWFjaCIsImFyciIsImwiLCJpZSIsInJldCIsIm5vZGVWYWx1ZSIsInRhYkluZGV4IiwiZ2V0QXR0cmlidXRlIiwicGxhY2Vob2xkZXIiLCJocmVmRml4IiwiY2hpbGROb2RlcyIsImFsbFRleHQiLCJub2RlVHlwZSIsIm93bmVyRG9jdW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJSRV9UUklNIiwiU1BBQ0UiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImNvbnRleHQiLCJjcmVhdGVDb21tZW50Iiwibm9kZXMiLCJuZWVkc0ZpbHRlciIsImNvbXBhcmVOb2RlT3JkZXIiLCJkb2N1bWVudEVsZW1lbnQiLCJjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiIsImJpdCIsInV0aWwiLCJ1bmlxdWUiLCJoYXNEdXBsaWNhdGUiLCJiYXNlSGFzRHVwbGljYXRlIiwic29ydE9yZGVyIiwiZ2V0U2ltcGxlQXR0ciIsImNvbnRhaW5zIiwicGFyZW50Tm9kZSIsImlzVGFnIiwiaGFzU2luZ2xlQ2xhc3MiLCJjbHMiLCJjbGFzc05hbWUiLCJwcmVmaXgiLCJzdWZmaXgiLCJpbmQiLCJhdHRyIiwiYXR0ck5vcm1hbGl6ZXIiLCJhdHRyTm9kZSIsInBhcnNlciIsIkdyYW1tYXJDb25zdCIsImluQXJyYXkiLCJMZXhlciIsImNmZyIsInJ1bGVzIiwicmVzZXRJbnB1dCIsInN0YXRlU3RhY2siLCJJTklUSUFMIiwiZmlyc3RMaW5lIiwibGluZU51bWJlciIsImxhc3RMaW5lIiwiZmlyc3RDb2x1bW4iLCJsYXN0Q29sdW1uIiwiY3VycmVudFN0YXRlIiwibWFwU3RhdGUiLCJudW0iLCJERUJVR19DT05URVhUX0xJTUlUIiwicGFzdCIsIm1hcFN5bWJvbEZvckNvZGVHZW4iLCJzeW1ib2xNYXAiLCJycyIsInJldmVyc2VTeW1ib2xNYXAiLCJydWxlIiwibGluZXMiLCJnZXRDdXJyZW50UnVsZXMiLCJtYXBTeW1ib2wiLCJFTkRfVEFHIiwidG9rZW4iLCJhY3Rpb24iLCJtYXRjaGVzIiwibGV4IiwibGV4ZXIiLCJ5eSIsInB1c2hTdGF0ZSIsInBvcFN0YXRlIiwidW5Fc2NhcGUiLCJ1bkVzY2FwZVN0ciIsInByb2R1Y3Rpb25zIiwiJDEiLCIkMyIsIm5leHRDb21iaW5hdG9yIiwicHJldkNvbWJpbmF0b3IiLCIkMiIsIm9yZGVyIiwiaWRlbnQiLCIkNCIsInBhcmFtIiwidGFibGUiLCJmaWxlbmFtZSIsImdvdG9zIiwidGFibGVBY3Rpb24iLCJ2YWx1ZVN0YWNrIiwic3ltYm9sRm9yU3RhdGUiLCJtYXBSZXZlcnNlU3ltYm9sIiwic2hvd0RlYnVnSW5mbyIsIlRZUEVfSU5ERVgiLCJTSElGVF9UWVBFIiwiVE9fSU5ERVgiLCJSRURVQ0VfVFlQRSIsInByb2R1Y3Rpb24iLCJQUk9EVUNUSU9OX0lOREVYIiwicmVkdWNlZFN5bWJvbCIsInJlZHVjZWRBY3Rpb24iLCJyZWR1Y2VkUmhzIiwicmhzIiwiJCQiLCJuZXdTdGF0ZSIsIkFDQ0VQVF9UWVBFIiwiRVhQQU5ET19TRUxFQ1RPUl9LRVkiLCJjYWNoZXMiLCJpc0NvbnRleHRYTUwiLCJ1dWlkIiwic3ViTWF0Y2hlc0NhY2hlIiwiZ2V0QXR0ciIsImFOUGx1c0IiLCJ1bmVzY2FwZUZuIiwiZXNjYXBlZCIsImhpZ2giLCJtYXRjaEV4cHIiLCJwc2V1ZG9GbkV4cHIiLCJhYiIsImdldEFiIiwiY2hpbGQiLCJtYXRjaEluZGV4QnlBYiIsImVsVHlwZSIsInRhZ05hbWUiLCJsYW5nIiwiZWxMYW5nIiwibm90IiwibmVnYXRpb25BcmciLCJwc2V1ZG9JZGVudEV4cHIiLCJmb2N1cyIsImFjdGl2ZUVsZW1lbnQiLCJoYXNGb2N1cyIsImVuYWJsZWQiLCJkaXNhYmxlZCIsImNoZWNrZWQiLCJhdHRyaWJ1dGVFeHByIiwiZWxWYWx1ZSIsInJlbGF0aXZlRXhwciIsImRpciIsImltbWVkaWF0ZSIsImF0dHJpYiIsIm1hdGNoRm4iLCJwc2V1ZG8iLCJmblN0ciIsInJlc2V0U3RhdHVzIiwiZGlyZWN0aW9uIiwiZXEiLCJpc1hNTCIsInNlZWRzIiwic2VsZWN0Iiwic2luZ2xlTWF0Y2giLCJtYXRjaFN1ZmZpeCIsIm1hdGNoU3VmZml4TGVuIiwibWF0Y2hTdWZmaXhJbmRleCIsInNpbmdsZU1hdGNoU3VmZml4Iiwic2luZ2xlTWF0Y2hTdWZmaXhUeXBlIiwibWF0Y2hJbW1lZGlhdGUiLCJzdGFydEVsIiwicmVsYXRpdmVPcCIsInN0YXJ0TWF0Y2giLCJmaW5kRml4ZWRNYXRjaEZyb21IZWFkIiwiY3VyIiwiZ2VuSWQiLCJzZWxlY3RvcklkIiwibWF0Y2hTdWIiLCJtYXRjaEtleSIsIm1hdGNoU3ViSW50ZXJuYWwiLCJtYXRjaEltbWVkaWF0ZVJldCIsInNlbGVjdG9yIiwiZ3JvdXBJbmRleCIsImdyb3VwTGVuIiwiY29udGV4dERvY3VtZW50Iiwic3VmZml4SW5kZXgiLCJzdWZmaXhMZW4iLCJzZWVkc0luZGV4IiwibXlTZWVkcyIsInNlZWRzTGVuIiwic2luZ2xlU3VmZml4IiwiZG9lc05vdEhhc0J5SWQiLCJnZXRFbGVtZW50QnlJZCIsImNvbnRleHRJbkRvbSIsInRtcCIsInRtcHMiLCJ0bXBMZW4iLCJ0bXBJIiwibWF0Y2hIZWFkIiwiaHlwaGVuRXhwcmVzc2lvbiIsInVwcGVyQ2FzZUZpcnN0TWF0Y2giLCJjYW1lbENhc2UiLCJjYW1lbENhc2VkIiwiaXNTdHJpbmciLCJpc1VuZGVmaW5lZCIsImRlc3QiLCJkZXN0aW5hdGlvbiIsInN0eWxlQ2FtZWxDYXNlIiwiY2FtZWwiLCJSZWFjdCIsInN0eWxlQXR0ciIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJldmVudExpc3RlbmVycyIsInJlZiIsImNvbXBvbmVudCIsInNldFByb3BlcnR5IiwiZ2V0UHJvcGVydHkiLCJnZXRQcm9wZXJ0eVZhbHVlIiwicmVtb3ZlUHJvcGVydHkiLCJFTEVNRU5UX05PREUiLCJET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURUQiLCJET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkciLCJET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkciLCJET0NVTUVOVF9QT1NJVElPTl9DT05UQUlOUyIsIkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWSIsImV2ZW50TmFtZU1hcHBpbmdzIiwic2tpcE5hbWVUcmFuc2Zvcm1hdGlvbkV4cHJlc3Npb25zIiwiYXR0cmlidXRlTmFtZU1hcHBpbmdzIiwiYXR0cmlidXRlVG9Qcm9wTmFtZSIsInNraXBUcmFuc2Zvcm1NYXRjaGVzIiwiZXhwciIsInN0eWxlcyIsInJlbW92ZUF0dHJpYnV0ZSIsImV2ZW50VG9Qcm9wTmFtZSIsInByb3AiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibGlzdGVuZXJzIiwiaW5zZXJ0QmVmb3JlIiwiYmVmb3JlIiwicXVlcnlTZWxlY3RvciIsImNoaWxkcmVuIiwiY2hpbGRNYXRjaGVzIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiY2xvbmVOb2RlIiwiZGVlcCIsImNoaWxkRWwiLCJjbG9uZUVsZW1lbnQiLCJ0b1JlYWN0Iiwib3JpZ2luYWxFbGVtZW50IiwidW5pcXVlS2V5Iiwic3ludGhldGljRXZlbnQiLCJuYXRpdmVFdmVudCIsIm90aGVyIiwiZ2V0Rmlyc3ROb2RlQnlPcmRlciIsIm5vZGVPbmUiLCJub2RlVHdvIiwiaXNBbmNlc3RvciIsImVpdGhlckNvbnRhaW5zIiwiZ2V0Um9vdE5vZGUiLCJyZWZlcmVuY2VSb290Iiwib3RoZXJSb290IiwibmV4dFNpYmxpbmciLCJzaWJsaW5ncyIsIm1lIiwicHJldmlvdXNTaWJsaW5nIiwiaW5uZXJIVE1MIiwidGV4dENvbnRlbnQiLCJuYW1lc3BhY2VNZXRob2RzIiwiV2luZG93IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsIl9hc3NpZ24iLCJlbXB0eU9iamVjdCIsInZhbGlkYXRlRm9ybWF0IiwiZm9ybWF0IiwiX2ludmFyaWFudCIsImQiLCJhcmdJbmRleCIsImZyYW1lc1RvUG9wIiwid2FybmluZyIsIl9sZW4iLCJfa2V5IiwiX2xlbjIiLCJfa2V5MiIsIk1JWElOU19LRVkiLCJpZGVudGl0eSIsIlJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzIiwiY2hpbGRDb250ZXh0IiwiZmFjdG9yeSIsIlJlYWN0Q29tcG9uZW50IiwiUmVhY3ROb29wVXBkYXRlUXVldWUiLCJpbmplY3RlZE1peGlucyIsIlJlYWN0Q2xhc3NJbnRlcmZhY2UiLCJtaXhpbnMiLCJzdGF0aWNzIiwicHJvcFR5cGVzIiwiY29udGV4dFR5cGVzIiwiY2hpbGRDb250ZXh0VHlwZXMiLCJnZXREZWZhdWx0UHJvcHMiLCJnZXRJbml0aWFsU3RhdGUiLCJnZXRDaGlsZENvbnRleHQiLCJyZW5kZXIiLCJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnREaWRNb3VudCIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJzaG91bGRDb21wb25lbnRVcGRhdGUiLCJjb21wb25lbnRXaWxsVXBkYXRlIiwiY29tcG9uZW50RGlkVXBkYXRlIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50IiwiVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSIsInVwZGF0ZUNvbXBvbmVudCIsIlJlYWN0Q2xhc3NTdGF0aWNJbnRlcmZhY2UiLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJSRVNFUlZFRF9TUEVDX0tFWVMiLCJkaXNwbGF5TmFtZSIsIm1peFNwZWNJbnRvQ29tcG9uZW50IiwidmFsaWRhdGVUeXBlRGVmIiwiY3JlYXRlTWVyZ2VkUmVzdWx0RnVuY3Rpb24iLCJtaXhTdGF0aWNTcGVjSW50b0NvbXBvbmVudCIsImF1dG9iaW5kIiwidHlwZURlZiIsInZhbGlkYXRlTWV0aG9kT3ZlcnJpZGUiLCJpc0FscmVhZHlEZWZpbmVkIiwic3BlY1BvbGljeSIsIlJlYWN0Q2xhc3NNaXhpbiIsInNwZWMiLCJ0eXBlb2ZTcGVjIiwiaXNNaXhpblZhbGlkIiwiYXV0b0JpbmRQYWlycyIsIl9fcmVhY3RBdXRvQmluZFBhaXJzIiwiaXNSZWFjdENsYXNzTWV0aG9kIiwic2hvdWxkQXV0b0JpbmQiLCJjcmVhdGVDaGFpbmVkRnVuY3Rpb24iLCJpc1Jlc2VydmVkIiwibWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cyIsInR3byIsIm1lcmdlZFJlc3VsdCIsImNoYWluZWRGdW5jdGlvbiIsImJpbmRBdXRvQmluZE1ldGhvZCIsImJvdW5kTWV0aG9kIiwiX19yZWFjdEJvdW5kQ29udGV4dCIsIl9fcmVhY3RCb3VuZE1ldGhvZCIsIl9fcmVhY3RCb3VuZEFyZ3VtZW50cyIsIl9iaW5kIiwibmV3VGhpcyIsInJlYm91bmRNZXRob2QiLCJiaW5kQXV0b0JpbmRNZXRob2RzIiwicGFpcnMiLCJhdXRvQmluZEtleSIsIklzTW91bnRlZFByZU1peGluIiwiX19pc01vdW50ZWQiLCJJc01vdW50ZWRQb3N0TWl4aW4iLCJyZXBsYWNlU3RhdGUiLCJ1cGRhdGVyIiwiZW5xdWV1ZVJlcGxhY2VTdGF0ZSIsImlzTW91bnRlZCIsIl9fZGlkV2FybklzTW91bnRlZCIsIlJlYWN0Q2xhc3NDb21wb25lbnQiLCJjcmVhdGVDbGFzcyIsInJlZnMiLCJpbml0aWFsU3RhdGUiLCJfaXNNb2NrRnVuY3Rpb24iLCJkZWZhdWx0UHJvcHMiLCJpc1JlYWN0Q2xhc3NBcHByb3ZlZCIsImNvbXBvbmVudFNob3VsZFVwZGF0ZSIsImNvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMiLCJVTlNBRkVfY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyIsIm1ldGhvZE5hbWUiLCJDb21wb25lbnQiLCJyZWFjdElzIiwiUkVBQ1RfU1RBVElDUyIsImNvbnRleHRUeXBlIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIiwiS05PV05fU1RBVElDUyIsImNhbGxlciIsImFyaXR5IiwiRk9SV0FSRF9SRUZfU1RBVElDUyIsIk1FTU9fU1RBVElDUyIsImNvbXBhcmUiLCJUWVBFX1NUQVRJQ1MiLCJnZXRTdGF0aWNzIiwib2JqZWN0UHJvdG90eXBlIiwiaG9pc3ROb25SZWFjdFN0YXRpY3MiLCJ0YXJnZXRDb21wb25lbnQiLCJzb3VyY2VDb21wb25lbnQiLCJibGFja2xpc3QiLCJpbmhlcml0ZWRDb21wb25lbnQiLCJ0YXJnZXRTdGF0aWNzIiwic291cmNlU3RhdGljcyIsImNyZWF0ZVJlYWN0Q2xhc3MiLCJ3aXRoRmF1eERPTUZhY3RvcnkiLCJ3aXRoRmF1eERPTSIsIldyYXBwZWRDb21wb25lbnQiLCJXaXRoRmF1eERPTSIsImNvbm5lY3RlZEZhdXhET00iLCJhbmltYXRlRmF1eERPTVVudGlsIiwic3RvcEFuaW1hdGluZ0ZhdXhET00iLCJzdG9wRHJhd0ZhdXhET00iLCJjb25uZWN0RmF1eERPTSIsImRpc2NhcmROb2RlIiwiZHJhd0ZhdXhET01UaW1lb3V0IiwiZHJhd0ZhdXhET00iLCJ2aXJ0dWFsRE9NIiwic2V0U3RhdGUiLCJhbmltYXRlRmF1eERPTSIsImR1cmF0aW9uIiwiZmF1eERPTUFuaW1hdGlvbkludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsImNsZWFyVGltZW91dCIsImlzQW5pbWF0aW5nRmF1eERPTSIsImdldERpc3BsYXlOYW1lIiwiUmVhY3RGYXV4RE9NIiwiZGVmYXVsdFZpZXciLCJjcmVhdGVFbGVtZW50TlMiLCJub29wIiwiZGlzcGF0Y2giLCJwYXJzZVR5cGVuYW1lcyIsInR5cGVuYW1lcyIsInR5cGVzIiwib24iLCJ0eXBlbmFtZSIsImNvcHkiLCJjbG91ZFJhZGlhbnMiLCJjdyIsImNsb3VkVGV4dCIsImZvbnQiLCJjbG91ZEZvbnQiLCJmb250U2l6ZSIsImNsb3VkRm9udFNpemUiLCJmb250U3R5bGUiLCJjbG91ZEZvbnROb3JtYWwiLCJmb250V2VpZ2h0Iiwicm90YXRlIiwiY2xvdWRSb3RhdGUiLCJwYWRkaW5nIiwiY2xvdWRQYWRkaW5nIiwic3BpcmFsIiwiYXJjaGltZWRlYW5TcGlyYWwiLCJ3b3JkcyIsInRpbWVJbnRlcnZhbCIsInRpbWVyIiwiY2xvdWQiLCJjYW52YXMiLCJjbG91ZENhbnZhcyIsImZ1bmN0b3IiLCJjb250ZXh0QW5kUmF0aW8iLCJnZXRDb250ZXh0IiwiYm9hcmQiLCJ6ZXJvQXJyYXkiLCJib3VuZHMiLCJ0YWdzIiwid2VpZ2h0IiwiY2xvdWRTcHJpdGUiLCJoYXNUZXh0IiwicGxhY2UiLCJjbG91ZEJvdW5kcyIsIndpZHRoIiwiaGVpZ2h0IiwicmF0aW8iLCJnZXRJbWFnZURhdGEiLCJmaWxsU3R5bGUiLCJzdHJva2VTdHlsZSIsInRleHRBbGlnbiIsInN0YXJ0WCIsInN0YXJ0WSIsIm1heERlbHRhIiwiZHQiLCJkeGR5IiwiZHgiLCJkeSIsImNsb3VkQ29sbGlkZSIsImNvbGxpZGVSZWN0cyIsInNwcml0ZSIsInciLCJzdyIsImx4Iiwic3giLCJtc3giLCJoIiwic3BpcmFscyIsImRpIiwiY2xlYXJSZWN0IiwibWF4aCIsInNhdmUiLCJtZWFzdXJlVGV4dCIsInNyIiwic2luIiwiY3IiLCJjb3MiLCJ3Y3IiLCJ3c3IiLCJoY3IiLCJoc3IiLCJ0cmFuc2xhdGUiLCJmaWxsVGV4dCIsImxpbmVXaWR0aCIsInN0cm9rZVRleHQiLCJyZXN0b3JlIiwieG9mZiIsInlvZmYiLCJwaXhlbHMiLCJ3MzIiLCJzZWVuIiwic2VlblJvdyIsImIwIiwiYjEiLCJyZWN0YW5ndWxhclNwaXJhbCIsImFyY2hpbWVkZWFuIiwicmVjdGFuZ3VsYXIiLCJoYXNFbGVtZW50VHlwZSIsImhhc01hcCIsImhhc1NldCIsImhhc0FycmF5QnVmZmVyIiwiZXF1YWwiLCJpc0VxdWFsIiwid2FybiIsInhodG1sIiwic3ZnIiwieGxpbmsiLCJ4bWwiLCJ4bWxucyIsIm5hbWVzcGFjZXMiLCJsb2NhbCIsImNyZWF0b3JJbmhlcml0IiwidXJpIiwibmFtZXNwYWNlVVJJIiwiY3JlYXRvckZpeGVkIiwiZnVsbG5hbWUiLCJub25lIiwiX2dyb3VwcyIsInN1Ymdyb3VwcyIsInN1Ymdyb3VwIiwic3Vibm9kZSIsIl9fZGF0YV9fIiwiU2VsZWN0aW9uIiwiX3BhcmVudHMiLCJhcnJheUFsbCIsInNlbGVjdG9yQWxsIiwicGFyZW50cyIsImNoaWxkTWF0Y2hlciIsImNoaWxkRmluZCIsImNoaWxkRmlyc3QiLCJmaXJzdEVsZW1lbnRDaGlsZCIsImNoaWxkcmVuRmlsdGVyIiwic2VsZWN0QWxsIiwiX2VudGVyIiwic3BhcnNlIiwiRW50ZXJOb2RlIiwiZGF0dW0iLCJfbmV4dCIsIl9wYXJlbnQiLCJiaW5kSW5kZXgiLCJncm91cExlbmd0aCIsImRhdGFMZW5ndGgiLCJiaW5kS2V5Iiwibm9kZUJ5S2V5VmFsdWUiLCJrZXlWYWx1ZXMiLCJrZXlWYWx1ZSIsImRlbGV0ZSIsImNvbnN0YW50IiwiZW50ZXJHcm91cCIsInVwZGF0ZUdyb3VwIiwiZXhpdEdyb3VwIiwiaTAiLCJpMSIsIl9leGl0Iiwib25lbnRlciIsIm9udXBkYXRlIiwib25leGl0IiwicmVtb3ZlIiwic2VsZWN0aW9uIiwiZ3JvdXBzMCIsImdyb3VwczEiLCJtMCIsIm0xIiwibWVyZ2VzIiwiZ3JvdXAwIiwiZ3JvdXAxIiwiYXNjZW5kaW5nIiwiY29tcGFyZU5vZGUiLCJzb3J0Z3JvdXBzIiwic29ydGdyb3VwIiwiYXR0clJlbW92ZSIsImF0dHJSZW1vdmVOUyIsInJlbW92ZUF0dHJpYnV0ZU5TIiwiYXR0ckNvbnN0YW50IiwiYXR0ckNvbnN0YW50TlMiLCJzZXRBdHRyaWJ1dGVOUyIsImF0dHJGdW5jdGlvbiIsImF0dHJGdW5jdGlvbk5TIiwiZ2V0QXR0cmlidXRlTlMiLCJzdHlsZVJlbW92ZSIsInN0eWxlQ29uc3RhbnQiLCJwcmlvcml0eSIsInN0eWxlRnVuY3Rpb24iLCJzdHlsZVZhbHVlIiwicHJvcGVydHlSZW1vdmUiLCJwcm9wZXJ0eUNvbnN0YW50IiwicHJvcGVydHlGdW5jdGlvbiIsImNsYXNzQXJyYXkiLCJDbGFzc0xpc3QiLCJfbm9kZSIsIl9uYW1lcyIsImNsYXNzZWRBZGQiLCJjbGFzc2VkUmVtb3ZlIiwiY2xhc3NlZFRydWUiLCJjbGFzc2VkRmFsc2UiLCJjbGFzc2VkRnVuY3Rpb24iLCJ0ZXh0UmVtb3ZlIiwidGV4dENvbnN0YW50IiwidGV4dEZ1bmN0aW9uIiwiaHRtbFJlbW92ZSIsImh0bWxDb25zdGFudCIsImh0bWxGdW5jdGlvbiIsInJhaXNlIiwiZmlyc3RDaGlsZCIsImNyZWF0b3IiLCJjb25zdGFudE51bGwiLCJzZWxlY3Rpb25fY2xvbmVTaGFsbG93IiwiY2xvbmUiLCJzZWxlY3Rpb25fY2xvbmVEZWVwIiwiY29udGV4dExpc3RlbmVyIiwib25SZW1vdmUiLCJfX29uIiwibyIsIm9uQWRkIiwiQ3VzdG9tRXZlbnQiLCJidWJibGVzIiwiY2FuY2VsYWJsZSIsImRldGFpbCIsImRpc3BhdGNoQ29uc3RhbnQiLCJkaXNwYXRjaEZ1bmN0aW9uIiwic2VsZWN0aW9uX3NlbGVjdGlvbiIsInNlbGVjdGlvbl9zZWxlY3QiLCJzZWxlY3Rpb25fc2VsZWN0QWxsIiwic2VsZWN0Q2hpbGQiLCJzZWxlY3Rpb25fc2VsZWN0Q2hpbGQiLCJzZWxlY3RDaGlsZHJlbiIsInNlbGVjdGlvbl9zZWxlY3RDaGlsZHJlbiIsInNlbGVjdGlvbl9maWx0ZXIiLCJzZWxlY3Rpb25fZGF0YSIsInNlbGVjdGlvbl9lbnRlciIsInNlbGVjdGlvbl9leGl0Iiwic2VsZWN0aW9uX2pvaW4iLCJzZWxlY3Rpb25fbWVyZ2UiLCJzZWxlY3Rpb25fb3JkZXIiLCJzZWxlY3Rpb25fc29ydCIsInNlbGVjdGlvbl9jYWxsIiwic2VsZWN0aW9uX25vZGVzIiwic2VsZWN0aW9uX25vZGUiLCJzZWxlY3Rpb25fc2l6ZSIsInNlbGVjdGlvbl9lbXB0eSIsInNlbGVjdGlvbl9lYWNoIiwic2VsZWN0aW9uX2F0dHIiLCJzZWxlY3Rpb25fc3R5bGUiLCJzZWxlY3Rpb25fcHJvcGVydHkiLCJjbGFzc2VkIiwic2VsZWN0aW9uX2NsYXNzZWQiLCJzZWxlY3Rpb25fdGV4dCIsInNlbGVjdGlvbl9odG1sIiwic2VsZWN0aW9uX3JhaXNlIiwic2VsZWN0aW9uX2xvd2VyIiwic2VsZWN0aW9uX2FwcGVuZCIsInNlbGVjdGlvbl9pbnNlcnQiLCJzZWxlY3Rpb25fcmVtb3ZlIiwic2VsZWN0aW9uX2Nsb25lIiwic2VsZWN0aW9uX2RhdHVtIiwic2VsZWN0aW9uX29uIiwic2VsZWN0aW9uX2Rpc3BhdGNoIiwic2VsZWN0aW9uX2l0ZXJhdG9yIiwiaW5pdFJhbmdlIiwiaW1wbGljaXQiLCJvcmRpbmFsIiwidW5rbm93biIsInNwZWNpZmllciIsImNvbG9ycyIsIl9zbGljZWRUb0FycmF5IiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlUmVzdCIsIm1pbkxlbiIsIl9hcnJheUxpa2VUb0FycmF5IiwiYXJyMiIsIl9pIiwiX2FyciIsIl9uIiwiX2QiLCJfcyIsIl9lIiwiZGVmYXVsdFNjYWxlT3JkaW5hbCIsInNjYWxlT3JkaW5hbCIsInNjaGVtZUNhdGVnb3J5MTAiLCJXb3JkQ2xvdWQiLCJfcmVmIiwiX3JlZiR3aWR0aCIsIl9yZWYkaGVpZ2h0IiwiX3JlZiRmb250IiwiX3JlZiRmb250U3R5bGUiLCJfcmVmJGZvbnRXZWlnaHQiLCJfcmVmJGZvbnRTaXplIiwiX3JlZiRyb3RhdGUiLCJfcmVmJHNwaXJhbCIsIl9yZWYkcGFkZGluZyIsIl9yZWYkcmFuZG9tIiwiX3JlZiRmaWxsIiwib25Xb3JkQ2xpY2siLCJvbldvcmRNb3VzZU92ZXIiLCJvbldvcmRNb3VzZU91dCIsImVsZW1lbnRSZWYiLCJ1c2VSZWYiLCJjdXJyZW50IiwiUmVhY3RGYXV4RG9tIiwibGF5b3V0IiwiX2xheW91dCRzaXplIiwiX2xheW91dCRzaXplMiIsInRleHRzIiwiX3B0IiwiaXNEZWVwRXF1YWwiLCJXb3JkQ2xvdWRXaWRnZXRDb21wb25lbnQiLCJpbnB1dERhdGEiLCJmb250U2l6ZU1hcHBlciIsIndvcmQiLCJvbkNsaWNrSGFuZGxlIiwib25DbGlja0FjdGlvbiIsImNhbkV4ZWN1dGUiLCJpc0V4ZWN1dGluZyIsImNob3NlbldvcmQiLCJzZXRWYWx1ZSIsImV4ZWN1dGUiLCJXb3JkQ2xvdWRXaWRnZXQiLCJuZXh0UHJvcHMiLCJkYXRhU291cmNlIiwiZGF0YVRvUmVuZGVyIiwidGV4dEF0dHJpYiIsImludEF0dHJpYiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FBQSxJQUFJQSxLQUFLLEdBQUcsVUFBVUMsRUFBVixFQUFjO0NBQ3hCLFNBQU9BLEVBQUUsSUFBSUEsRUFBRSxDQUFDQyxJQUFILElBQVdBLElBQWpCLElBQXlCRCxFQUFoQztDQUNELENBRkQ7OztLQUtBRSxRQUFBO0NBRUVILEtBQUssQ0FBQyxPQUFPSSxVQUFQLElBQXFCLFFBQXJCLElBQWlDQSxVQUFsQyxDQUFMLElBQ0FKLEtBQUssQ0FBQyxPQUFPSyxNQUFQLElBQWlCLFFBQWpCLElBQTZC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SyxDQUFDLENBQUQsRUFBSSxFQUFKLENBREg7Q0FFRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FGSDtDQUdGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQUhIO0NBSUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBSkg7Q0FLRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FMSDtDQU1GLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQU5IO0NBT0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBUEg7Q0FRRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FSSDtDQVNGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVRIO0NBVUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBVkg7Q0FXRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUo7Q0FYSCxPQTlKQTtDQTJLTixZQUFNO0NBQ0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBREg7Q0FFRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FGSDtDQUdGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQUhIO0NBSUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBSkg7Q0FLRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FMSDtDQU1GLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQU5IO0NBT0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBUEg7Q0FRRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FSSDtDQVNGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVRIO0NBVUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBVkg7Q0FXRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUo7Q0FYSCxPQTNLQTtDQXdMTixZQUFNO0NBQ0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBREg7Q0FFRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FGSDtDQUdGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQUhI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 diff --git a/dist/tmp/widgets/objectivity/wordcloud/WordCloud.mjs b/dist/tmp/widgets/objectivity/wordcloud/WordCloud.mjs new file mode 100644 index 0000000..7d7151d --- /dev/null +++ b/dist/tmp/widgets/objectivity/wordcloud/WordCloud.mjs @@ -0,0 +1,25506 @@ + +(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35730/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document); +function ___$insertStyle(css) { + if (!css || typeof window === 'undefined') { + return; + } + const style = document.createElement('style'); + style.setAttribute('type', 'text/css'); + style.innerHTML = css; + document.head.appendChild(style); + return css; +} + +import React$3, { useRef, createElement as createElement$2, Component } from 'react'; + +var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + +var check = function (it) { + return it && it.Math == Math && it; +}; // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 + + +var global$R = // eslint-disable-next-line es/no-global-this -- safe +check(typeof globalThis == 'object' && globalThis) || check(typeof window == 'object' && window) || // eslint-disable-next-line no-restricted-globals -- safe +check(typeof self == 'object' && self) || check(typeof commonjsGlobal == 'object' && commonjsGlobal) || // eslint-disable-next-line no-new-func -- fallback +function () { + return this; +}() || Function('return this')(); + +var objectGetOwnPropertyDescriptor = {}; + +var fails$15 = function (exec) { + try { + return !!exec(); + } catch (error) { + return true; + } +}; + +var fails$14 = fails$15; // Detect IE8's incomplete defineProperty implementation + + +var descriptors = !fails$14(function () { + // eslint-disable-next-line es/no-object-defineproperty -- required for testing + return Object.defineProperty({}, 1, { + get: function () { + return 7; + } + })[1] != 7; +}); + +var objectPropertyIsEnumerable = {}; + +var $propertyIsEnumerable$1 = {}.propertyIsEnumerable; // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + +var getOwnPropertyDescriptor$9 = Object.getOwnPropertyDescriptor; // Nashorn ~ JDK8 bug + +var NASHORN_BUG = getOwnPropertyDescriptor$9 && !$propertyIsEnumerable$1.call({ + 1: 2 +}, 1); // `Object.prototype.propertyIsEnumerable` method implementation +// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable + +objectPropertyIsEnumerable.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor$9(this, V); + return !!descriptor && descriptor.enumerable; +} : $propertyIsEnumerable$1; + +var createPropertyDescriptor$9 = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; +}; + +var toString$u = {}.toString; + +var classofRaw$1 = function (it) { + return toString$u.call(it).slice(8, -1); +}; + +var fails$13 = fails$15; + +var classof$d = classofRaw$1; + +var split = ''.split; // fallback for non-array-like ES3 and non-enumerable old V8 strings + +var indexedObject = fails$13(function () { + // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 + // eslint-disable-next-line no-prototype-builtins -- safe + return !Object('z').propertyIsEnumerable(0); +}) ? function (it) { + return classof$d(it) == 'String' ? split.call(it, '') : Object(it); +} : Object; + +// `RequireObjectCoercible` abstract operation +// https://tc39.es/ecma262/#sec-requireobjectcoercible +var requireObjectCoercible$j = function (it) { + if (it == undefined) throw TypeError("Can't call method on " + it); + return it; +}; + +// toObject with fallback for non-array-like ES3 strings +var IndexedObject$6 = indexedObject; + +var requireObjectCoercible$i = requireObjectCoercible$j; + +var toIndexedObject$d = function (it) { + return IndexedObject$6(requireObjectCoercible$i(it)); +}; + +// `IsCallable` abstract operation +// https://tc39.es/ecma262/#sec-iscallable +var isCallable$z = function (argument) { + return typeof argument === 'function'; +}; + +var isCallable$y = isCallable$z; + +var isObject$C = function (it) { + return typeof it === 'object' ? it !== null : isCallable$y(it); +}; + +var global$Q = global$R; + +var isCallable$x = isCallable$z; + +var aFunction = function (argument) { + return isCallable$x(argument) ? argument : undefined; +}; + +var getBuiltIn$y = function (namespace, method) { + return arguments.length < 2 ? aFunction(global$Q[namespace]) : global$Q[namespace] && global$Q[namespace][method]; +}; + +var getBuiltIn$x = getBuiltIn$y; + +var engineUserAgent = getBuiltIn$x('navigator', 'userAgent') || ''; + +var global$P = global$R; + +var userAgent$7 = engineUserAgent; + +var process$4 = global$P.process; +var Deno = global$P.Deno; +var versions = process$4 && process$4.versions || Deno && Deno.version; +var v8 = versions && versions.v8; +var match, version; + +if (v8) { + match = v8.split('.'); + version = match[0] < 4 ? 1 : match[0] + match[1]; +} else if (userAgent$7) { + match = userAgent$7.match(/Edge\/(\d+)/); + + if (!match || match[1] >= 74) { + match = userAgent$7.match(/Chrome\/(\d+)/); + if (match) version = match[1]; + } +} + +var engineV8Version = version && +version; + +/* eslint-disable es/no-symbol -- required for testing */ + +var V8_VERSION$3 = engineV8Version; + +var fails$12 = fails$15; // eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing + + +var nativeSymbol$1 = !!Object.getOwnPropertySymbols && !fails$12(function () { + var symbol = Symbol(); // Chrome 38 Symbol has incorrect toString conversion + // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances + + return !String(symbol) || !(Object(symbol) instanceof Symbol) || // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances + !Symbol.sham && V8_VERSION$3 && V8_VERSION$3 < 41; +}); + +/* eslint-disable es/no-symbol -- required for testing */ + +var NATIVE_SYMBOL$2 = nativeSymbol$1; + +var useSymbolAsUid = NATIVE_SYMBOL$2 && !Symbol.sham && typeof Symbol.iterator == 'symbol'; + +var isCallable$w = isCallable$z; + +var getBuiltIn$w = getBuiltIn$y; + +var USE_SYMBOL_AS_UID$1 = useSymbolAsUid; + +var isSymbol$5 = USE_SYMBOL_AS_UID$1 ? function (it) { + return typeof it == 'symbol'; +} : function (it) { + var $Symbol = getBuiltIn$w('Symbol'); + return isCallable$w($Symbol) && Object(it) instanceof $Symbol; +}; + +var tryToString$3 = function (argument) { + try { + return String(argument); + } catch (error) { + return 'Object'; + } +}; + +var isCallable$v = isCallable$z; + +var tryToString$2 = tryToString$3; // `Assert: IsCallable(argument) is true` + + +var aCallable$Q = function (argument) { + if (isCallable$v(argument)) return argument; + throw TypeError(tryToString$2(argument) + ' is not a function'); +}; + +var aCallable$P = aCallable$Q; // `GetMethod` abstract operation +// https://tc39.es/ecma262/#sec-getmethod + + +var getMethod$h = function (V, P) { + var func = V[P]; + return func == null ? undefined : aCallable$P(func); +}; + +var isCallable$u = isCallable$z; + +var isObject$B = isObject$C; // `OrdinaryToPrimitive` abstract operation +// https://tc39.es/ecma262/#sec-ordinarytoprimitive + + +var ordinaryToPrimitive$2 = function (input, pref) { + var fn, val; + if (pref === 'string' && isCallable$u(fn = input.toString) && !isObject$B(val = fn.call(input))) return val; + if (isCallable$u(fn = input.valueOf) && !isObject$B(val = fn.call(input))) return val; + if (pref !== 'string' && isCallable$u(fn = input.toString) && !isObject$B(val = fn.call(input))) return val; + throw TypeError("Can't convert object to primitive value"); +}; + +var shared$7 = {exports: {}}; + +var isPure = false; + +var global$O = global$R; + +var setGlobal$3 = function (key, value) { + try { + // eslint-disable-next-line es/no-object-defineproperty -- safe + Object.defineProperty(global$O, key, { + value: value, + configurable: true, + writable: true + }); + } catch (error) { + global$O[key] = value; + } + + return value; +}; + +var global$N = global$R; + +var setGlobal$2 = setGlobal$3; + +var SHARED = '__core-js_shared__'; +var store$5 = global$N[SHARED] || setGlobal$2(SHARED, {}); +var sharedStore = store$5; + +var store$4 = sharedStore; + +(shared$7.exports = function (key, value) { + return store$4[key] || (store$4[key] = value !== undefined ? value : {}); +})('versions', []).push({ + version: '3.18.3', + mode: 'global', + copyright: '© 2021 Denis Pushkarev (zloirock.ru)' +}); + +var requireObjectCoercible$h = requireObjectCoercible$j; // `ToObject` abstract operation +// https://tc39.es/ecma262/#sec-toobject + + +var toObject$A = function (argument) { + return Object(requireObjectCoercible$h(argument)); +}; + +var toObject$z = toObject$A; + +var hasOwnProperty$1 = {}.hasOwnProperty; // `HasOwnProperty` abstract operation +// https://tc39.es/ecma262/#sec-hasownproperty + +var hasOwnProperty_1 = Object.hasOwn || function hasOwn(it, key) { + return hasOwnProperty$1.call(toObject$z(it), key); +}; + +var id$2 = 0; +var postfix = Math.random(); + +var uid$5 = function (key) { + return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id$2 + postfix).toString(36); +}; + +var global$M = global$R; + +var shared$6 = shared$7.exports; + +var hasOwn$o = hasOwnProperty_1; + +var uid$4 = uid$5; + +var NATIVE_SYMBOL$1 = nativeSymbol$1; + +var USE_SYMBOL_AS_UID = useSymbolAsUid; + +var WellKnownSymbolsStore$1 = shared$6('wks'); +var Symbol$3 = global$M.Symbol; +var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol$3 : Symbol$3 && Symbol$3.withoutSetter || uid$4; + +var wellKnownSymbol$G = function (name) { + if (!hasOwn$o(WellKnownSymbolsStore$1, name) || !(NATIVE_SYMBOL$1 || typeof WellKnownSymbolsStore$1[name] == 'string')) { + if (NATIVE_SYMBOL$1 && hasOwn$o(Symbol$3, name)) { + WellKnownSymbolsStore$1[name] = Symbol$3[name]; + } else { + WellKnownSymbolsStore$1[name] = createWellKnownSymbol('Symbol.' + name); + } + } + + return WellKnownSymbolsStore$1[name]; +}; + +var isObject$A = isObject$C; + +var isSymbol$4 = isSymbol$5; + +var getMethod$g = getMethod$h; + +var ordinaryToPrimitive$1 = ordinaryToPrimitive$2; + +var wellKnownSymbol$F = wellKnownSymbol$G; + +var TO_PRIMITIVE$2 = wellKnownSymbol$F('toPrimitive'); // `ToPrimitive` abstract operation +// https://tc39.es/ecma262/#sec-toprimitive + +var toPrimitive$3 = function (input, pref) { + if (!isObject$A(input) || isSymbol$4(input)) return input; + var exoticToPrim = getMethod$g(input, TO_PRIMITIVE$2); + var result; + + if (exoticToPrim) { + if (pref === undefined) pref = 'default'; + result = exoticToPrim.call(input, pref); + if (!isObject$A(result) || isSymbol$4(result)) return result; + throw TypeError("Can't convert object to primitive value"); + } + + if (pref === undefined) pref = 'number'; + return ordinaryToPrimitive$1(input, pref); +}; + +var toPrimitive$2 = toPrimitive$3; + +var isSymbol$3 = isSymbol$5; // `ToPropertyKey` abstract operation +// https://tc39.es/ecma262/#sec-topropertykey + + +var toPropertyKey$9 = function (argument) { + var key = toPrimitive$2(argument, 'string'); + return isSymbol$3(key) ? key : String(key); +}; + +var global$L = global$R; + +var isObject$z = isObject$C; + +var document$3 = global$L.document; // typeof document.createElement is 'object' in old IE + +var EXISTS$1 = isObject$z(document$3) && isObject$z(document$3.createElement); + +var documentCreateElement$2 = function (it) { + return EXISTS$1 ? document$3.createElement(it) : {}; +}; + +var DESCRIPTORS$A = descriptors; + +var fails$11 = fails$15; + +var createElement$1 = documentCreateElement$2; // Thank's IE8 for his funny defineProperty + + +var ie8DomDefine = !DESCRIPTORS$A && !fails$11(function () { + // eslint-disable-next-line es/no-object-defineproperty -- requied for testing + return Object.defineProperty(createElement$1('div'), 'a', { + get: function () { + return 7; + } + }).a != 7; +}); + +var DESCRIPTORS$z = descriptors; + +var propertyIsEnumerableModule$2 = objectPropertyIsEnumerable; + +var createPropertyDescriptor$8 = createPropertyDescriptor$9; + +var toIndexedObject$c = toIndexedObject$d; + +var toPropertyKey$8 = toPropertyKey$9; + +var hasOwn$n = hasOwnProperty_1; + +var IE8_DOM_DEFINE$1 = ie8DomDefine; // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + + +var $getOwnPropertyDescriptor$1 = Object.getOwnPropertyDescriptor; // `Object.getOwnPropertyDescriptor` method +// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor + +objectGetOwnPropertyDescriptor.f = DESCRIPTORS$z ? $getOwnPropertyDescriptor$1 : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject$c(O); + P = toPropertyKey$8(P); + if (IE8_DOM_DEFINE$1) try { + return $getOwnPropertyDescriptor$1(O, P); + } catch (error) { + /* empty */ + } + if (hasOwn$n(O, P)) return createPropertyDescriptor$8(!propertyIsEnumerableModule$2.f.call(O, P), O[P]); +}; + +var objectDefineProperty = {}; + +var isObject$y = isObject$C; // `Assert: Type(argument) is Object` + + +var anObject$1C = function (argument) { + if (isObject$y(argument)) return argument; + throw TypeError(String(argument) + ' is not an object'); +}; + +var DESCRIPTORS$y = descriptors; + +var IE8_DOM_DEFINE = ie8DomDefine; + +var anObject$1B = anObject$1C; + +var toPropertyKey$7 = toPropertyKey$9; // eslint-disable-next-line es/no-object-defineproperty -- safe + + +var $defineProperty$1 = Object.defineProperty; // `Object.defineProperty` method +// https://tc39.es/ecma262/#sec-object.defineproperty + +objectDefineProperty.f = DESCRIPTORS$y ? $defineProperty$1 : function defineProperty(O, P, Attributes) { + anObject$1B(O); + P = toPropertyKey$7(P); + anObject$1B(Attributes); + if (IE8_DOM_DEFINE) try { + return $defineProperty$1(O, P, Attributes); + } catch (error) { + /* empty */ + } + if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported'); + if ('value' in Attributes) O[P] = Attributes.value; + return O; +}; + +var DESCRIPTORS$x = descriptors; + +var definePropertyModule$c = objectDefineProperty; + +var createPropertyDescriptor$7 = createPropertyDescriptor$9; + +var createNonEnumerableProperty$h = DESCRIPTORS$x ? function (object, key, value) { + return definePropertyModule$c.f(object, key, createPropertyDescriptor$7(1, value)); +} : function (object, key, value) { + object[key] = value; + return object; +}; + +var redefine$l = {exports: {}}; + +var isCallable$t = isCallable$z; + +var store$3 = sharedStore; + +var functionToString = Function.toString; // this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper + +if (!isCallable$t(store$3.inspectSource)) { + store$3.inspectSource = function (it) { + return functionToString.call(it); + }; +} + +var inspectSource$4 = store$3.inspectSource; + +var global$K = global$R; + +var isCallable$s = isCallable$z; + +var inspectSource$3 = inspectSource$4; + +var WeakMap$3 = global$K.WeakMap; +var nativeWeakMap = isCallable$s(WeakMap$3) && /native code/.test(inspectSource$3(WeakMap$3)); + +var shared$5 = shared$7.exports; + +var uid$3 = uid$5; + +var keys$3 = shared$5('keys'); + +var sharedKey$4 = function (key) { + return keys$3[key] || (keys$3[key] = uid$3(key)); +}; + +var hiddenKeys$6 = {}; + +var NATIVE_WEAK_MAP$1 = nativeWeakMap; + +var global$J = global$R; + +var isObject$x = isObject$C; + +var createNonEnumerableProperty$g = createNonEnumerableProperty$h; + +var hasOwn$m = hasOwnProperty_1; + +var shared$4 = sharedStore; + +var sharedKey$3 = sharedKey$4; + +var hiddenKeys$5 = hiddenKeys$6; + +var OBJECT_ALREADY_INITIALIZED = 'Object already initialized'; +var WeakMap$2 = global$J.WeakMap; +var set$4, get$3, has$2; + +var enforce = function (it) { + return has$2(it) ? get$3(it) : set$4(it, {}); +}; + +var getterFor = function (TYPE) { + return function (it) { + var state; + + if (!isObject$x(it) || (state = get$3(it)).type !== TYPE) { + throw TypeError('Incompatible receiver, ' + TYPE + ' required'); + } + + return state; + }; +}; + +if (NATIVE_WEAK_MAP$1 || shared$4.state) { + var store$2 = shared$4.state || (shared$4.state = new WeakMap$2()); + var wmget = store$2.get; + var wmhas = store$2.has; + var wmset = store$2.set; + + set$4 = function (it, metadata) { + if (wmhas.call(store$2, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + wmset.call(store$2, it, metadata); + return metadata; + }; + + get$3 = function (it) { + return wmget.call(store$2, it) || {}; + }; + + has$2 = function (it) { + return wmhas.call(store$2, it); + }; +} else { + var STATE = sharedKey$3('state'); + hiddenKeys$5[STATE] = true; + + set$4 = function (it, metadata) { + if (hasOwn$m(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + createNonEnumerableProperty$g(it, STATE, metadata); + return metadata; + }; + + get$3 = function (it) { + return hasOwn$m(it, STATE) ? it[STATE] : {}; + }; + + has$2 = function (it) { + return hasOwn$m(it, STATE); + }; +} + +var internalState = { + set: set$4, + get: get$3, + has: has$2, + enforce: enforce, + getterFor: getterFor +}; + +var DESCRIPTORS$w = descriptors; + +var hasOwn$l = hasOwnProperty_1; + +var FunctionPrototype$2 = Function.prototype; // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + +var getDescriptor = DESCRIPTORS$w && Object.getOwnPropertyDescriptor; +var EXISTS = hasOwn$l(FunctionPrototype$2, 'name'); // additional protection from minified / mangled / dropped function names + +var PROPER = EXISTS && function something() { + /* empty */ +}.name === 'something'; + +var CONFIGURABLE = EXISTS && (!DESCRIPTORS$w || DESCRIPTORS$w && getDescriptor(FunctionPrototype$2, 'name').configurable); +var functionName = { + EXISTS: EXISTS, + PROPER: PROPER, + CONFIGURABLE: CONFIGURABLE +}; + +var global$I = global$R; + +var isCallable$r = isCallable$z; + +var hasOwn$k = hasOwnProperty_1; + +var createNonEnumerableProperty$f = createNonEnumerableProperty$h; + +var setGlobal$1 = setGlobal$3; + +var inspectSource$2 = inspectSource$4; + +var InternalStateModule$j = internalState; + +var CONFIGURABLE_FUNCTION_NAME$2 = functionName.CONFIGURABLE; + +var getInternalState$i = InternalStateModule$j.get; +var enforceInternalState$1 = InternalStateModule$j.enforce; +var TEMPLATE = String(String).split('String'); +(redefine$l.exports = function (O, key, value, options) { + var unsafe = options ? !!options.unsafe : false; + var simple = options ? !!options.enumerable : false; + var noTargetGet = options ? !!options.noTargetGet : false; + var name = options && options.name !== undefined ? options.name : key; + var state; + + if (isCallable$r(value)) { + if (String(name).slice(0, 7) === 'Symbol(') { + name = '[' + String(name).replace(/^Symbol\(([^)]*)\)/, '$1') + ']'; + } + + if (!hasOwn$k(value, 'name') || CONFIGURABLE_FUNCTION_NAME$2 && value.name !== name) { + createNonEnumerableProperty$f(value, 'name', name); + } + + state = enforceInternalState$1(value); + + if (!state.source) { + state.source = TEMPLATE.join(typeof name == 'string' ? name : ''); + } + } + + if (O === global$I) { + if (simple) O[key] = value;else setGlobal$1(key, value); + return; + } else if (!unsafe) { + delete O[key]; + } else if (!noTargetGet && O[key]) { + simple = true; + } + + if (simple) O[key] = value;else createNonEnumerableProperty$f(O, key, value); // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative +})(Function.prototype, 'toString', function toString() { + return isCallable$r(this) && getInternalState$i(this).source || inspectSource$2(this); +}); + +var objectGetOwnPropertyNames = {}; + +var ceil$2 = Math.ceil; +var floor$a = Math.floor; // `ToIntegerOrInfinity` abstract operation +// https://tc39.es/ecma262/#sec-tointegerorinfinity + +var toIntegerOrInfinity$i = function (argument) { + var number = +argument; // eslint-disable-next-line no-self-compare -- safe + + return number !== number || number === 0 ? 0 : (number > 0 ? floor$a : ceil$2)(number); +}; + +var toIntegerOrInfinity$h = toIntegerOrInfinity$i; + +var max$6 = Math.max; +var min$a = Math.min; // Helper for a popular repeating case of the spec: +// Let integer be ? ToInteger(index). +// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). + +var toAbsoluteIndex$8 = function (index, length) { + var integer = toIntegerOrInfinity$h(index); + return integer < 0 ? max$6(integer + length, 0) : min$a(integer, length); +}; + +var toIntegerOrInfinity$g = toIntegerOrInfinity$i; + +var min$9 = Math.min; // `ToLength` abstract operation +// https://tc39.es/ecma262/#sec-tolength + +var toLength$d = function (argument) { + return argument > 0 ? min$9(toIntegerOrInfinity$g(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 +}; + +var toLength$c = toLength$d; // `LengthOfArrayLike` abstract operation +// https://tc39.es/ecma262/#sec-lengthofarraylike + + +var lengthOfArrayLike$q = function (obj) { + return toLength$c(obj.length); +}; + +var toIndexedObject$b = toIndexedObject$d; + +var toAbsoluteIndex$7 = toAbsoluteIndex$8; + +var lengthOfArrayLike$p = lengthOfArrayLike$q; // `Array.prototype.{ indexOf, includes }` methods implementation + + +var createMethod$8 = function (IS_INCLUDES) { + return function ($this, el, fromIndex) { + var O = toIndexedObject$b($this); + var length = lengthOfArrayLike$p(O); + var index = toAbsoluteIndex$7(fromIndex, length); + var value; // Array#includes uses SameValueZero equality algorithm + // eslint-disable-next-line no-self-compare -- NaN check + + if (IS_INCLUDES && el != el) while (length > index) { + value = O[index++]; // eslint-disable-next-line no-self-compare -- NaN check + + if (value != value) return true; // Array#indexOf ignores holes, Array#includes - not + } else for (; length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; + } + return !IS_INCLUDES && -1; + }; +}; + +var arrayIncludes = { + // `Array.prototype.includes` method + // https://tc39.es/ecma262/#sec-array.prototype.includes + includes: createMethod$8(true), + // `Array.prototype.indexOf` method + // https://tc39.es/ecma262/#sec-array.prototype.indexof + indexOf: createMethod$8(false) +}; + +var hasOwn$j = hasOwnProperty_1; + +var toIndexedObject$a = toIndexedObject$d; + +var indexOf = arrayIncludes.indexOf; + +var hiddenKeys$4 = hiddenKeys$6; + +var objectKeysInternal = function (object, names) { + var O = toIndexedObject$a(object); + var i = 0; + var result = []; + var key; + + for (key in O) !hasOwn$j(hiddenKeys$4, key) && hasOwn$j(O, key) && result.push(key); // Don't enum bug & hidden keys + + + while (names.length > i) if (hasOwn$j(O, key = names[i++])) { + ~indexOf(result, key) || result.push(key); + } + + return result; +}; + +// IE8- don't enum bug keys +var enumBugKeys$3 = ['constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf']; + +var internalObjectKeys$1 = objectKeysInternal; + +var enumBugKeys$2 = enumBugKeys$3; + +var hiddenKeys$3 = enumBugKeys$2.concat('length', 'prototype'); // `Object.getOwnPropertyNames` method +// https://tc39.es/ecma262/#sec-object.getownpropertynames +// eslint-disable-next-line es/no-object-getownpropertynames -- safe + +objectGetOwnPropertyNames.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys$1(O, hiddenKeys$3); +}; + +var objectGetOwnPropertySymbols = {}; + +// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe +objectGetOwnPropertySymbols.f = Object.getOwnPropertySymbols; + +var getBuiltIn$v = getBuiltIn$y; + +var getOwnPropertyNamesModule$2 = objectGetOwnPropertyNames; + +var getOwnPropertySymbolsModule$2 = objectGetOwnPropertySymbols; + +var anObject$1A = anObject$1C; // all object keys, includes non-enumerable and symbols + + +var ownKeys$3 = getBuiltIn$v('Reflect', 'ownKeys') || function ownKeys(it) { + var keys = getOwnPropertyNamesModule$2.f(anObject$1A(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule$2.f; + return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys; +}; + +var hasOwn$i = hasOwnProperty_1; + +var ownKeys$2 = ownKeys$3; + +var getOwnPropertyDescriptorModule$6 = objectGetOwnPropertyDescriptor; + +var definePropertyModule$b = objectDefineProperty; + +var copyConstructorProperties$3 = function (target, source) { + var keys = ownKeys$2(source); + var defineProperty = definePropertyModule$b.f; + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule$6.f; + + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!hasOwn$i(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } +}; + +var fails$10 = fails$15; + +var isCallable$q = isCallable$z; + +var replacement = /#|\.prototype\./; + +var isForced$5 = function (feature, detection) { + var value = data[normalize$1(feature)]; + return value == POLYFILL ? true : value == NATIVE ? false : isCallable$q(detection) ? fails$10(detection) : !!detection; +}; + +var normalize$1 = isForced$5.normalize = function (string) { + return String(string).replace(replacement, '.').toLowerCase(); +}; + +var data = isForced$5.data = {}; +var NATIVE = isForced$5.NATIVE = 'N'; +var POLYFILL = isForced$5.POLYFILL = 'P'; +var isForced_1 = isForced$5; + +var global$H = global$R; + +var getOwnPropertyDescriptor$8 = objectGetOwnPropertyDescriptor.f; + +var createNonEnumerableProperty$e = createNonEnumerableProperty$h; + +var redefine$k = redefine$l.exports; + +var setGlobal = setGlobal$3; + +var copyConstructorProperties$2 = copyConstructorProperties$3; + +var isForced$4 = isForced_1; +/* + options.target - name of the target object + options.global - target is the global object + options.stat - export as static methods of target + options.proto - export as prototype methods of target + options.real - real prototype method for the `pure` version + options.forced - export even if the native feature is available + options.bind - bind methods to the target, required for the `pure` version + options.wrap - wrap constructors to preventing global pollution, required for the `pure` version + options.unsafe - use the simple assignment of property instead of delete + defineProperty + options.sham - add a flag to not completely full polyfills + options.enumerable - export as enumerable property + options.noTargetGet - prevent calling a getter on target + options.name - the .name of the function if it does not match the key +*/ + + +var _export = function (options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + + if (GLOBAL) { + target = global$H; + } else if (STATIC) { + target = global$H[TARGET] || setGlobal(TARGET, {}); + } else { + target = (global$H[TARGET] || {}).prototype; + } + + if (target) for (key in source) { + sourceProperty = source[key]; + + if (options.noTargetGet) { + descriptor = getOwnPropertyDescriptor$8(target, key); + targetProperty = descriptor && descriptor.value; + } else targetProperty = target[key]; + + FORCED = isForced$4(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); // contained in target + + if (!FORCED && targetProperty !== undefined) { + if (typeof sourceProperty === typeof targetProperty) continue; + copyConstructorProperties$2(sourceProperty, targetProperty); + } // add a flag to not completely full polyfills + + + if (options.sham || targetProperty && targetProperty.sham) { + createNonEnumerableProperty$e(sourceProperty, 'sham', true); + } // extend global + + + redefine$k(target, key, sourceProperty, options); + } +}; + +var classof$c = classofRaw$1; // `IsArray` abstract operation +// https://tc39.es/ecma262/#sec-isarray +// eslint-disable-next-line es/no-array-isarray -- safe + + +var isArray$8 = Array.isArray || function isArray(argument) { + return classof$c(argument) == 'Array'; +}; + +var wellKnownSymbol$E = wellKnownSymbol$G; + +var TO_STRING_TAG$8 = wellKnownSymbol$E('toStringTag'); +var test$2 = {}; +test$2[TO_STRING_TAG$8] = 'z'; +var toStringTagSupport = String(test$2) === '[object z]'; + +var TO_STRING_TAG_SUPPORT$2 = toStringTagSupport; + +var isCallable$p = isCallable$z; + +var classofRaw = classofRaw$1; + +var wellKnownSymbol$D = wellKnownSymbol$G; + +var TO_STRING_TAG$7 = wellKnownSymbol$D('toStringTag'); // ES3 wrong here + +var CORRECT_ARGUMENTS = classofRaw(function () { + return arguments; +}()) == 'Arguments'; // fallback for IE11 Script Access Denied error + +var tryGet = function (it, key) { + try { + return it[key]; + } catch (error) { + /* empty */ + } +}; // getting tag from ES6+ `Object.prototype.toString` + + +var classof$b = TO_STRING_TAG_SUPPORT$2 ? classofRaw : function (it) { + var O, tag, result; + return it === undefined ? 'Undefined' : it === null ? 'Null' // @@toStringTag case + : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG$7)) == 'string' ? tag // builtinTag case + : CORRECT_ARGUMENTS ? classofRaw(O) // ES3 arguments fallback + : (result = classofRaw(O)) == 'Object' && isCallable$p(O.callee) ? 'Arguments' : result; +}; + +var classof$a = classof$b; + +var toString$t = function (argument) { + if (classof$a(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string'); + return String(argument); +}; + +var internalObjectKeys = objectKeysInternal; + +var enumBugKeys$1 = enumBugKeys$3; // `Object.keys` method +// https://tc39.es/ecma262/#sec-object.keys +// eslint-disable-next-line es/no-object-keys -- safe + + +var objectKeys$5 = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys$1); +}; + +var DESCRIPTORS$v = descriptors; + +var definePropertyModule$a = objectDefineProperty; + +var anObject$1z = anObject$1C; + +var objectKeys$4 = objectKeys$5; // `Object.defineProperties` method +// https://tc39.es/ecma262/#sec-object.defineproperties +// eslint-disable-next-line es/no-object-defineproperties -- safe + + +var objectDefineProperties = DESCRIPTORS$v ? Object.defineProperties : function defineProperties(O, Properties) { + anObject$1z(O); + var keys = objectKeys$4(Properties); + var length = keys.length; + var index = 0; + var key; + + while (length > index) definePropertyModule$a.f(O, key = keys[index++], Properties[key]); + + return O; +}; + +var getBuiltIn$u = getBuiltIn$y; + +var html$2 = getBuiltIn$u('document', 'documentElement'); + +/* global ActiveXObject -- old IE, WSH */ + +var anObject$1y = anObject$1C; + +var defineProperties$3 = objectDefineProperties; + +var enumBugKeys = enumBugKeys$3; + +var hiddenKeys$2 = hiddenKeys$6; + +var html$1 = html$2; + +var documentCreateElement$1 = documentCreateElement$2; + +var sharedKey$2 = sharedKey$4; + +var GT = '>'; +var LT = '<'; +var PROTOTYPE$2 = 'prototype'; +var SCRIPT = 'script'; +var IE_PROTO$1 = sharedKey$2('IE_PROTO'); + +var EmptyConstructor = function () { + /* empty */ +}; + +var scriptTag = function (content) { + return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; +}; // Create object with fake `null` prototype: use ActiveX Object with cleared prototype + + +var NullProtoObjectViaActiveX = function (activeXDocument) { + activeXDocument.write(scriptTag('')); + activeXDocument.close(); + var temp = activeXDocument.parentWindow.Object; + activeXDocument = null; // avoid memory leak + + return temp; +}; // Create object with fake `null` prototype: use iframe Object with cleared prototype + + +var NullProtoObjectViaIFrame = function () { + // Thrash, waste and sodomy: IE GC bug + var iframe = documentCreateElement$1('iframe'); + var JS = 'java' + SCRIPT + ':'; + var iframeDocument; + iframe.style.display = 'none'; + html$1.appendChild(iframe); // https://github.com/zloirock/core-js/issues/475 + + iframe.src = String(JS); + iframeDocument = iframe.contentWindow.document; + iframeDocument.open(); + iframeDocument.write(scriptTag('document.F=Object')); + iframeDocument.close(); + return iframeDocument.F; +}; // Check for document.domain and active x support +// No need to use active x approach when document.domain is not set +// see https://github.com/es-shims/es5-shim/issues/150 +// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 +// avoid IE GC bug + + +var activeXDocument; + +var NullProtoObject = function () { + try { + activeXDocument = new ActiveXObject('htmlfile'); + } catch (error) { + /* ignore */ + } + + NullProtoObject = typeof document != 'undefined' ? document.domain && activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) // old IE + : NullProtoObjectViaIFrame() : NullProtoObjectViaActiveX(activeXDocument); // WSH + + var length = enumBugKeys.length; + + while (length--) delete NullProtoObject[PROTOTYPE$2][enumBugKeys[length]]; + + return NullProtoObject(); +}; + +hiddenKeys$2[IE_PROTO$1] = true; // `Object.create` method +// https://tc39.es/ecma262/#sec-object.create + +var objectCreate$1 = Object.create || function create(O, Properties) { + var result; + + if (O !== null) { + EmptyConstructor[PROTOTYPE$2] = anObject$1y(O); + result = new EmptyConstructor(); + EmptyConstructor[PROTOTYPE$2] = null; // add "__proto__" for Object.getPrototypeOf polyfill + + result[IE_PROTO$1] = O; + } else result = NullProtoObject(); + + return Properties === undefined ? result : defineProperties$3(result, Properties); +}; + +var objectGetOwnPropertyNamesExternal = {}; + +/* eslint-disable es/no-object-getownpropertynames -- safe */ + +var toIndexedObject$9 = toIndexedObject$d; + +var $getOwnPropertyNames$1 = objectGetOwnPropertyNames.f; + +var toString$s = {}.toString; +var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : []; + +var getWindowNames = function (it) { + try { + return $getOwnPropertyNames$1(it); + } catch (error) { + return windowNames.slice(); + } +}; // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window + + +objectGetOwnPropertyNamesExternal.f = function getOwnPropertyNames(it) { + return windowNames && toString$s.call(it) == '[object Window]' ? getWindowNames(it) : $getOwnPropertyNames$1(toIndexedObject$9(it)); +}; + +var wellKnownSymbolWrapped = {}; + +var wellKnownSymbol$C = wellKnownSymbol$G; + +wellKnownSymbolWrapped.f = wellKnownSymbol$C; + +var global$G = global$R; + +var path$1 = global$G; + +var path = path$1; + +var hasOwn$h = hasOwnProperty_1; + +var wrappedWellKnownSymbolModule$1 = wellKnownSymbolWrapped; + +var defineProperty$g = objectDefineProperty.f; + +var defineWellKnownSymbol$l = function (NAME) { + var Symbol = path.Symbol || (path.Symbol = {}); + if (!hasOwn$h(Symbol, NAME)) defineProperty$g(Symbol, NAME, { + value: wrappedWellKnownSymbolModule$1.f(NAME) + }); +}; + +var defineProperty$f = objectDefineProperty.f; + +var hasOwn$g = hasOwnProperty_1; + +var wellKnownSymbol$B = wellKnownSymbol$G; + +var TO_STRING_TAG$6 = wellKnownSymbol$B('toStringTag'); + +var setToStringTag$b = function (it, TAG, STATIC) { + if (it && !hasOwn$g(it = STATIC ? it : it.prototype, TO_STRING_TAG$6)) { + defineProperty$f(it, TO_STRING_TAG$6, { + configurable: true, + value: TAG + }); + } +}; + +var aCallable$O = aCallable$Q; // optional / simple context binding + + +var functionBindContext = function (fn, that, length) { + aCallable$O(fn); + if (that === undefined) return fn; + + switch (length) { + case 0: + return function () { + return fn.call(that); + }; + + case 1: + return function (a) { + return fn.call(that, a); + }; + + case 2: + return function (a, b) { + return fn.call(that, a, b); + }; + + case 3: + return function (a, b, c) { + return fn.call(that, a, b, c); + }; + } + + return function () { + return fn.apply(that, arguments); + }; +}; + +var fails$$ = fails$15; + +var isCallable$o = isCallable$z; + +var classof$9 = classof$b; + +var getBuiltIn$t = getBuiltIn$y; + +var inspectSource$1 = inspectSource$4; + +var empty$1 = []; +var construct$1 = getBuiltIn$t('Reflect', 'construct'); +var constructorRegExp = /^\s*(?:class|function)\b/; +var exec$1 = constructorRegExp.exec; +var INCORRECT_TO_STRING = !constructorRegExp.exec(function () { + /* empty */ +}); + +var isConstructorModern = function (argument) { + if (!isCallable$o(argument)) return false; + + try { + construct$1(Object, empty$1, argument); + return true; + } catch (error) { + return false; + } +}; + +var isConstructorLegacy = function (argument) { + if (!isCallable$o(argument)) return false; + + switch (classof$9(argument)) { + case 'AsyncFunction': + case 'GeneratorFunction': + case 'AsyncGeneratorFunction': + return false; + // we can't check .prototype since constructors produced by .bind haven't it + } + + return INCORRECT_TO_STRING || !!exec$1.call(constructorRegExp, inspectSource$1(argument)); +}; // `IsConstructor` abstract operation +// https://tc39.es/ecma262/#sec-isconstructor + + +var isConstructor$7 = !construct$1 || fails$$(function () { + var called; + return isConstructorModern(isConstructorModern.call) || !isConstructorModern(Object) || !isConstructorModern(function () { + called = true; + }) || called; +}) ? isConstructorLegacy : isConstructorModern; + +var isArray$7 = isArray$8; + +var isConstructor$6 = isConstructor$7; + +var isObject$w = isObject$C; + +var wellKnownSymbol$A = wellKnownSymbol$G; + +var SPECIES$6 = wellKnownSymbol$A('species'); // a part of `ArraySpeciesCreate` abstract operation +// https://tc39.es/ecma262/#sec-arrayspeciescreate + +var arraySpeciesConstructor$2 = function (originalArray) { + var C; + + if (isArray$7(originalArray)) { + C = originalArray.constructor; // cross-realm fallback + + if (isConstructor$6(C) && (C === Array || isArray$7(C.prototype))) C = undefined;else if (isObject$w(C)) { + C = C[SPECIES$6]; + if (C === null) C = undefined; + } + } + + return C === undefined ? Array : C; +}; + +var arraySpeciesConstructor$1 = arraySpeciesConstructor$2; // `ArraySpeciesCreate` abstract operation +// https://tc39.es/ecma262/#sec-arrayspeciescreate + + +var arraySpeciesCreate$6 = function (originalArray, length) { + return new (arraySpeciesConstructor$1(originalArray))(length === 0 ? 0 : length); +}; + +var bind$q = functionBindContext; + +var IndexedObject$5 = indexedObject; + +var toObject$y = toObject$A; + +var lengthOfArrayLike$o = lengthOfArrayLike$q; + +var arraySpeciesCreate$5 = arraySpeciesCreate$6; + +var push$4 = [].push; // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation + +var createMethod$7 = function (TYPE) { + var IS_MAP = TYPE == 1; + var IS_FILTER = TYPE == 2; + var IS_SOME = TYPE == 3; + var IS_EVERY = TYPE == 4; + var IS_FIND_INDEX = TYPE == 6; + var IS_FILTER_REJECT = TYPE == 7; + var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; + return function ($this, callbackfn, that, specificCreate) { + var O = toObject$y($this); + var self = IndexedObject$5(O); + var boundFunction = bind$q(callbackfn, that, 3); + var length = lengthOfArrayLike$o(self); + var index = 0; + var create = specificCreate || arraySpeciesCreate$5; + var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined; + var value, result; + + for (; length > index; index++) if (NO_HOLES || index in self) { + value = self[index]; + result = boundFunction(value, index, O); + + if (TYPE) { + if (IS_MAP) target[index] = result; // map + else if (result) switch (TYPE) { + case 3: + return true; + // some + + case 5: + return value; + // find + + case 6: + return index; + // findIndex + + case 2: + push$4.call(target, value); + // filter + } else switch (TYPE) { + case 4: + return false; + // every + + case 7: + push$4.call(target, value); + // filterReject + } + } + } + + return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; + }; +}; + +var arrayIteration = { + // `Array.prototype.forEach` method + // https://tc39.es/ecma262/#sec-array.prototype.foreach + forEach: createMethod$7(0), + // `Array.prototype.map` method + // https://tc39.es/ecma262/#sec-array.prototype.map + map: createMethod$7(1), + // `Array.prototype.filter` method + // https://tc39.es/ecma262/#sec-array.prototype.filter + filter: createMethod$7(2), + // `Array.prototype.some` method + // https://tc39.es/ecma262/#sec-array.prototype.some + some: createMethod$7(3), + // `Array.prototype.every` method + // https://tc39.es/ecma262/#sec-array.prototype.every + every: createMethod$7(4), + // `Array.prototype.find` method + // https://tc39.es/ecma262/#sec-array.prototype.find + find: createMethod$7(5), + // `Array.prototype.findIndex` method + // https://tc39.es/ecma262/#sec-array.prototype.findIndex + findIndex: createMethod$7(6), + // `Array.prototype.filterReject` method + // https://github.com/tc39/proposal-array-filtering + filterReject: createMethod$7(7) +}; + +var $$4i = _export; + +var global$F = global$R; + +var getBuiltIn$s = getBuiltIn$y; + +var DESCRIPTORS$u = descriptors; + +var NATIVE_SYMBOL = nativeSymbol$1; + +var fails$_ = fails$15; + +var hasOwn$f = hasOwnProperty_1; + +var isArray$6 = isArray$8; + +var isCallable$n = isCallable$z; + +var isObject$v = isObject$C; + +var isSymbol$2 = isSymbol$5; + +var anObject$1x = anObject$1C; + +var toObject$x = toObject$A; + +var toIndexedObject$8 = toIndexedObject$d; + +var toPropertyKey$6 = toPropertyKey$9; + +var $toString$3 = toString$t; + +var createPropertyDescriptor$6 = createPropertyDescriptor$9; + +var nativeObjectCreate = objectCreate$1; + +var objectKeys$3 = objectKeys$5; + +var getOwnPropertyNamesModule$1 = objectGetOwnPropertyNames; + +var getOwnPropertyNamesExternal = objectGetOwnPropertyNamesExternal; + +var getOwnPropertySymbolsModule$1 = objectGetOwnPropertySymbols; + +var getOwnPropertyDescriptorModule$5 = objectGetOwnPropertyDescriptor; + +var definePropertyModule$9 = objectDefineProperty; + +var propertyIsEnumerableModule$1 = objectPropertyIsEnumerable; + +var redefine$j = redefine$l.exports; + +var shared$3 = shared$7.exports; + +var sharedKey$1 = sharedKey$4; + +var hiddenKeys$1 = hiddenKeys$6; + +var uid$2 = uid$5; + +var wellKnownSymbol$z = wellKnownSymbol$G; + +var wrappedWellKnownSymbolModule = wellKnownSymbolWrapped; + +var defineWellKnownSymbol$k = defineWellKnownSymbol$l; + +var setToStringTag$a = setToStringTag$b; + +var InternalStateModule$i = internalState; + +var $forEach$3 = arrayIteration.forEach; + +var HIDDEN = sharedKey$1('hidden'); +var SYMBOL = 'Symbol'; +var PROTOTYPE$1 = 'prototype'; +var TO_PRIMITIVE$1 = wellKnownSymbol$z('toPrimitive'); +var setInternalState$i = InternalStateModule$i.set; +var getInternalState$h = InternalStateModule$i.getterFor(SYMBOL); +var ObjectPrototype$3 = Object[PROTOTYPE$1]; +var $Symbol = global$F.Symbol; +var $stringify$1 = getBuiltIn$s('JSON', 'stringify'); +var nativeGetOwnPropertyDescriptor$2 = getOwnPropertyDescriptorModule$5.f; +var nativeDefineProperty$1 = definePropertyModule$9.f; +var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f; +var nativePropertyIsEnumerable = propertyIsEnumerableModule$1.f; +var AllSymbols = shared$3('symbols'); +var ObjectPrototypeSymbols = shared$3('op-symbols'); +var StringToSymbolRegistry = shared$3('string-to-symbol-registry'); +var SymbolToStringRegistry = shared$3('symbol-to-string-registry'); +var WellKnownSymbolsStore = shared$3('wks'); +var QObject = global$F.QObject; // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173 + +var USE_SETTER = !QObject || !QObject[PROTOTYPE$1] || !QObject[PROTOTYPE$1].findChild; // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 + +var setSymbolDescriptor = DESCRIPTORS$u && fails$_(function () { + return nativeObjectCreate(nativeDefineProperty$1({}, 'a', { + get: function () { + return nativeDefineProperty$1(this, 'a', { + value: 7 + }).a; + } + })).a != 7; +}) ? function (O, P, Attributes) { + var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor$2(ObjectPrototype$3, P); + if (ObjectPrototypeDescriptor) delete ObjectPrototype$3[P]; + nativeDefineProperty$1(O, P, Attributes); + + if (ObjectPrototypeDescriptor && O !== ObjectPrototype$3) { + nativeDefineProperty$1(ObjectPrototype$3, P, ObjectPrototypeDescriptor); + } +} : nativeDefineProperty$1; + +var wrap$1 = function (tag, description) { + var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE$1]); + setInternalState$i(symbol, { + type: SYMBOL, + tag: tag, + description: description + }); + if (!DESCRIPTORS$u) symbol.description = description; + return symbol; +}; + +var $defineProperty = function defineProperty(O, P, Attributes) { + if (O === ObjectPrototype$3) $defineProperty(ObjectPrototypeSymbols, P, Attributes); + anObject$1x(O); + var key = toPropertyKey$6(P); + anObject$1x(Attributes); + + if (hasOwn$f(AllSymbols, key)) { + if (!Attributes.enumerable) { + if (!hasOwn$f(O, HIDDEN)) nativeDefineProperty$1(O, HIDDEN, createPropertyDescriptor$6(1, {})); + O[HIDDEN][key] = true; + } else { + if (hasOwn$f(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false; + Attributes = nativeObjectCreate(Attributes, { + enumerable: createPropertyDescriptor$6(0, false) + }); + } + + return setSymbolDescriptor(O, key, Attributes); + } + + return nativeDefineProperty$1(O, key, Attributes); +}; + +var $defineProperties = function defineProperties(O, Properties) { + anObject$1x(O); + var properties = toIndexedObject$8(Properties); + var keys = objectKeys$3(properties).concat($getOwnPropertySymbols(properties)); + $forEach$3(keys, function (key) { + if (!DESCRIPTORS$u || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]); + }); + return O; +}; + +var $create = function create(O, Properties) { + return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties); +}; + +var $propertyIsEnumerable = function propertyIsEnumerable(V) { + var P = toPropertyKey$6(V); + var enumerable = nativePropertyIsEnumerable.call(this, P); + if (this === ObjectPrototype$3 && hasOwn$f(AllSymbols, P) && !hasOwn$f(ObjectPrototypeSymbols, P)) return false; + return enumerable || !hasOwn$f(this, P) || !hasOwn$f(AllSymbols, P) || hasOwn$f(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true; +}; + +var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) { + var it = toIndexedObject$8(O); + var key = toPropertyKey$6(P); + if (it === ObjectPrototype$3 && hasOwn$f(AllSymbols, key) && !hasOwn$f(ObjectPrototypeSymbols, key)) return; + var descriptor = nativeGetOwnPropertyDescriptor$2(it, key); + + if (descriptor && hasOwn$f(AllSymbols, key) && !(hasOwn$f(it, HIDDEN) && it[HIDDEN][key])) { + descriptor.enumerable = true; + } + + return descriptor; +}; + +var $getOwnPropertyNames = function getOwnPropertyNames(O) { + var names = nativeGetOwnPropertyNames(toIndexedObject$8(O)); + var result = []; + $forEach$3(names, function (key) { + if (!hasOwn$f(AllSymbols, key) && !hasOwn$f(hiddenKeys$1, key)) result.push(key); + }); + return result; +}; + +var $getOwnPropertySymbols = function getOwnPropertySymbols(O) { + var IS_OBJECT_PROTOTYPE = O === ObjectPrototype$3; + var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject$8(O)); + var result = []; + $forEach$3(names, function (key) { + if (hasOwn$f(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn$f(ObjectPrototype$3, key))) { + result.push(AllSymbols[key]); + } + }); + return result; +}; // `Symbol` constructor +// https://tc39.es/ecma262/#sec-symbol-constructor + + +if (!NATIVE_SYMBOL) { + $Symbol = function Symbol() { + if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor'); + var description = !arguments.length || arguments[0] === undefined ? undefined : $toString$3(arguments[0]); + var tag = uid$2(description); + + var setter = function (value) { + if (this === ObjectPrototype$3) setter.call(ObjectPrototypeSymbols, value); + if (hasOwn$f(this, HIDDEN) && hasOwn$f(this[HIDDEN], tag)) this[HIDDEN][tag] = false; + setSymbolDescriptor(this, tag, createPropertyDescriptor$6(1, value)); + }; + + if (DESCRIPTORS$u && USE_SETTER) setSymbolDescriptor(ObjectPrototype$3, tag, { + configurable: true, + set: setter + }); + return wrap$1(tag, description); + }; + + redefine$j($Symbol[PROTOTYPE$1], 'toString', function toString() { + return getInternalState$h(this).tag; + }); + redefine$j($Symbol, 'withoutSetter', function (description) { + return wrap$1(uid$2(description), description); + }); + propertyIsEnumerableModule$1.f = $propertyIsEnumerable; + definePropertyModule$9.f = $defineProperty; + getOwnPropertyDescriptorModule$5.f = $getOwnPropertyDescriptor; + getOwnPropertyNamesModule$1.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames; + getOwnPropertySymbolsModule$1.f = $getOwnPropertySymbols; + + wrappedWellKnownSymbolModule.f = function (name) { + return wrap$1(wellKnownSymbol$z(name), name); + }; + + if (DESCRIPTORS$u) { + // https://github.com/tc39/proposal-Symbol-description + nativeDefineProperty$1($Symbol[PROTOTYPE$1], 'description', { + configurable: true, + get: function description() { + return getInternalState$h(this).description; + } + }); + + { + redefine$j(ObjectPrototype$3, 'propertyIsEnumerable', $propertyIsEnumerable, { + unsafe: true + }); + } + } +} + +$$4i({ + global: true, + wrap: true, + forced: !NATIVE_SYMBOL, + sham: !NATIVE_SYMBOL +}, { + Symbol: $Symbol +}); +$forEach$3(objectKeys$3(WellKnownSymbolsStore), function (name) { + defineWellKnownSymbol$k(name); +}); +$$4i({ + target: SYMBOL, + stat: true, + forced: !NATIVE_SYMBOL +}, { + // `Symbol.for` method + // https://tc39.es/ecma262/#sec-symbol.for + 'for': function (key) { + var string = $toString$3(key); + if (hasOwn$f(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string]; + var symbol = $Symbol(string); + StringToSymbolRegistry[string] = symbol; + SymbolToStringRegistry[symbol] = string; + return symbol; + }, + // `Symbol.keyFor` method + // https://tc39.es/ecma262/#sec-symbol.keyfor + keyFor: function keyFor(sym) { + if (!isSymbol$2(sym)) throw TypeError(sym + ' is not a symbol'); + if (hasOwn$f(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym]; + }, + useSetter: function () { + USE_SETTER = true; + }, + useSimple: function () { + USE_SETTER = false; + } +}); +$$4i({ + target: 'Object', + stat: true, + forced: !NATIVE_SYMBOL, + sham: !DESCRIPTORS$u +}, { + // `Object.create` method + // https://tc39.es/ecma262/#sec-object.create + create: $create, + // `Object.defineProperty` method + // https://tc39.es/ecma262/#sec-object.defineproperty + defineProperty: $defineProperty, + // `Object.defineProperties` method + // https://tc39.es/ecma262/#sec-object.defineproperties + defineProperties: $defineProperties, + // `Object.getOwnPropertyDescriptor` method + // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors + getOwnPropertyDescriptor: $getOwnPropertyDescriptor +}); +$$4i({ + target: 'Object', + stat: true, + forced: !NATIVE_SYMBOL +}, { + // `Object.getOwnPropertyNames` method + // https://tc39.es/ecma262/#sec-object.getownpropertynames + getOwnPropertyNames: $getOwnPropertyNames, + // `Object.getOwnPropertySymbols` method + // https://tc39.es/ecma262/#sec-object.getownpropertysymbols + getOwnPropertySymbols: $getOwnPropertySymbols +}); // Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives +// https://bugs.chromium.org/p/v8/issues/detail?id=3443 + +$$4i({ + target: 'Object', + stat: true, + forced: fails$_(function () { + getOwnPropertySymbolsModule$1.f(1); + }) +}, { + getOwnPropertySymbols: function getOwnPropertySymbols(it) { + return getOwnPropertySymbolsModule$1.f(toObject$x(it)); + } +}); // `JSON.stringify` method behavior with symbols +// https://tc39.es/ecma262/#sec-json.stringify + +if ($stringify$1) { + var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails$_(function () { + var symbol = $Symbol(); // MS Edge converts symbol values to JSON as {} + + return $stringify$1([symbol]) != '[null]' // WebKit converts symbol values to JSON as null + || $stringify$1({ + a: symbol + }) != '{}' // V8 throws on boxed symbols + || $stringify$1(Object(symbol)) != '{}'; + }); + $$4i({ + target: 'JSON', + stat: true, + forced: FORCED_JSON_STRINGIFY + }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + stringify: function stringify(it, replacer, space) { + var args = [it]; + var index = 1; + var $replacer; + + while (arguments.length > index) args.push(arguments[index++]); + + $replacer = replacer; + if (!isObject$v(replacer) && it === undefined || isSymbol$2(it)) return; // IE8 returns string on undefined + + if (!isArray$6(replacer)) replacer = function (key, value) { + if (isCallable$n($replacer)) value = $replacer.call(this, key, value); + if (!isSymbol$2(value)) return value; + }; + args[1] = replacer; + return $stringify$1.apply(null, args); + } + }); +} // `Symbol.prototype[@@toPrimitive]` method +// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive + + +if (!$Symbol[PROTOTYPE$1][TO_PRIMITIVE$1]) { + var valueOf$1 = $Symbol[PROTOTYPE$1].valueOf; + redefine$j($Symbol[PROTOTYPE$1], TO_PRIMITIVE$1, function () { + return valueOf$1.apply(this, arguments); + }); +} // `Symbol.prototype[@@toStringTag]` property +// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag + + +setToStringTag$a($Symbol, SYMBOL); +hiddenKeys$1[HIDDEN] = true; + +var $$4h = _export; + +var DESCRIPTORS$t = descriptors; + +var global$E = global$R; + +var hasOwn$e = hasOwnProperty_1; + +var isCallable$m = isCallable$z; + +var isObject$u = isObject$C; + +var defineProperty$e = objectDefineProperty.f; + +var copyConstructorProperties$1 = copyConstructorProperties$3; + +var NativeSymbol = global$E.Symbol; + +if (DESCRIPTORS$t && isCallable$m(NativeSymbol) && (!('description' in NativeSymbol.prototype) || // Safari 12 bug +NativeSymbol().description !== undefined)) { + var EmptyStringDescriptionStore = {}; // wrap Symbol constructor for correct work with undefined description + + var SymbolWrapper = function Symbol() { + var description = arguments.length < 1 || arguments[0] === undefined ? undefined : String(arguments[0]); + var result = this instanceof SymbolWrapper ? new NativeSymbol(description) // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)' + : description === undefined ? NativeSymbol() : NativeSymbol(description); + if (description === '') EmptyStringDescriptionStore[result] = true; + return result; + }; + + copyConstructorProperties$1(SymbolWrapper, NativeSymbol); + var symbolPrototype = SymbolWrapper.prototype = NativeSymbol.prototype; + symbolPrototype.constructor = SymbolWrapper; + var symbolToString = symbolPrototype.toString; + var nativeSymbol = String(NativeSymbol('test')) == 'Symbol(test)'; + var regexp = /^Symbol\((.*)\)[^)]+$/; + defineProperty$e(symbolPrototype, 'description', { + configurable: true, + get: function description() { + var symbol = isObject$u(this) ? this.valueOf() : this; + var string = symbolToString.call(symbol); + if (hasOwn$e(EmptyStringDescriptionStore, symbol)) return ''; + var desc = nativeSymbol ? string.slice(7, -1) : string.replace(regexp, '$1'); + return desc === '' ? undefined : desc; + } + }); + $$4h({ + global: true, + forced: true + }, { + Symbol: SymbolWrapper + }); +} + +var defineWellKnownSymbol$j = defineWellKnownSymbol$l; // `Symbol.asyncIterator` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.asynciterator + + +defineWellKnownSymbol$j('asyncIterator'); + +var defineWellKnownSymbol$i = defineWellKnownSymbol$l; // `Symbol.hasInstance` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.hasinstance + + +defineWellKnownSymbol$i('hasInstance'); + +var defineWellKnownSymbol$h = defineWellKnownSymbol$l; // `Symbol.isConcatSpreadable` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.isconcatspreadable + + +defineWellKnownSymbol$h('isConcatSpreadable'); + +var defineWellKnownSymbol$g = defineWellKnownSymbol$l; // `Symbol.iterator` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.iterator + + +defineWellKnownSymbol$g('iterator'); + +var defineWellKnownSymbol$f = defineWellKnownSymbol$l; // `Symbol.match` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.match + + +defineWellKnownSymbol$f('match'); + +var defineWellKnownSymbol$e = defineWellKnownSymbol$l; // `Symbol.matchAll` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.matchall + + +defineWellKnownSymbol$e('matchAll'); + +var defineWellKnownSymbol$d = defineWellKnownSymbol$l; // `Symbol.replace` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.replace + + +defineWellKnownSymbol$d('replace'); + +var defineWellKnownSymbol$c = defineWellKnownSymbol$l; // `Symbol.search` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.search + + +defineWellKnownSymbol$c('search'); + +var defineWellKnownSymbol$b = defineWellKnownSymbol$l; // `Symbol.species` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.species + + +defineWellKnownSymbol$b('species'); + +var defineWellKnownSymbol$a = defineWellKnownSymbol$l; // `Symbol.split` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.split + + +defineWellKnownSymbol$a('split'); + +var defineWellKnownSymbol$9 = defineWellKnownSymbol$l; // `Symbol.toPrimitive` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.toprimitive + + +defineWellKnownSymbol$9('toPrimitive'); + +var defineWellKnownSymbol$8 = defineWellKnownSymbol$l; // `Symbol.toStringTag` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.tostringtag + + +defineWellKnownSymbol$8('toStringTag'); + +var defineWellKnownSymbol$7 = defineWellKnownSymbol$l; // `Symbol.unscopables` well-known symbol +// https://tc39.es/ecma262/#sec-symbol.unscopables + + +defineWellKnownSymbol$7('unscopables'); + +var fails$Z = fails$15; + +var correctPrototypeGetter = !fails$Z(function () { + function F() { + /* empty */ + } + + F.prototype.constructor = null; // eslint-disable-next-line es/no-object-getprototypeof -- required for testing + + return Object.getPrototypeOf(new F()) !== F.prototype; +}); + +var hasOwn$d = hasOwnProperty_1; + +var isCallable$l = isCallable$z; + +var toObject$w = toObject$A; + +var sharedKey = sharedKey$4; + +var CORRECT_PROTOTYPE_GETTER$2 = correctPrototypeGetter; + +var IE_PROTO = sharedKey('IE_PROTO'); +var ObjectPrototype$2 = Object.prototype; // `Object.getPrototypeOf` method +// https://tc39.es/ecma262/#sec-object.getprototypeof +// eslint-disable-next-line es/no-object-getprototypeof -- safe + +var objectGetPrototypeOf$1 = CORRECT_PROTOTYPE_GETTER$2 ? Object.getPrototypeOf : function (O) { + var object = toObject$w(O); + if (hasOwn$d(object, IE_PROTO)) return object[IE_PROTO]; + var constructor = object.constructor; + + if (isCallable$l(constructor) && object instanceof constructor) { + return constructor.prototype; + } + + return object instanceof Object ? ObjectPrototype$2 : null; +}; + +var isCallable$k = isCallable$z; + +var aPossiblePrototype$2 = function (argument) { + if (typeof argument === 'object' || isCallable$k(argument)) return argument; + throw TypeError("Can't set " + String(argument) + ' as a prototype'); +}; + +/* eslint-disable no-proto -- safe */ + +var anObject$1w = anObject$1C; + +var aPossiblePrototype$1 = aPossiblePrototype$2; // `Object.setPrototypeOf` method +// https://tc39.es/ecma262/#sec-object.setprototypeof +// Works with __proto__ only. Old v8 can't work with null proto objects. +// eslint-disable-next-line es/no-object-setprototypeof -- safe + + +var objectSetPrototypeOf$1 = Object.setPrototypeOf || ('__proto__' in {} ? function () { + var CORRECT_SETTER = false; + var test = {}; + var setter; + + try { + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set; + setter.call(test, []); + CORRECT_SETTER = test instanceof Array; + } catch (error) { + /* empty */ + } + + return function setPrototypeOf(O, proto) { + anObject$1w(O); + aPossiblePrototype$1(proto); + if (CORRECT_SETTER) setter.call(O, proto);else O.__proto__ = proto; + return O; + }; +}() : undefined); + +var isObject$t = isObject$C; + +var createNonEnumerableProperty$d = createNonEnumerableProperty$h; // `InstallErrorCause` abstract operation +// https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause + + +var installErrorCause$1 = function (O, options) { + if (isObject$t(options) && 'cause' in options) { + createNonEnumerableProperty$d(O, 'cause', options.cause); + } +}; + +var iterators = {}; + +var wellKnownSymbol$y = wellKnownSymbol$G; + +var Iterators$4 = iterators; + +var ITERATOR$a = wellKnownSymbol$y('iterator'); +var ArrayPrototype$2 = Array.prototype; // check on default Array iterator + +var isArrayIteratorMethod$3 = function (it) { + return it !== undefined && (Iterators$4.Array === it || ArrayPrototype$2[ITERATOR$a] === it); +}; + +var classof$8 = classof$b; + +var getMethod$f = getMethod$h; + +var Iterators$3 = iterators; + +var wellKnownSymbol$x = wellKnownSymbol$G; + +var ITERATOR$9 = wellKnownSymbol$x('iterator'); + +var getIteratorMethod$9 = function (it) { + if (it != undefined) return getMethod$f(it, ITERATOR$9) || getMethod$f(it, '@@iterator') || Iterators$3[classof$8(it)]; +}; + +var aCallable$N = aCallable$Q; + +var anObject$1v = anObject$1C; + +var getIteratorMethod$8 = getIteratorMethod$9; + +var getIterator$b = function (argument, usingIterator) { + var iteratorMethod = arguments.length < 2 ? getIteratorMethod$8(argument) : usingIterator; + if (aCallable$N(iteratorMethod)) return anObject$1v(iteratorMethod.call(argument)); + throw TypeError(String(argument) + ' is not iterable'); +}; + +var anObject$1u = anObject$1C; + +var getMethod$e = getMethod$h; + +var iteratorClose$4 = function (iterator, kind, value) { + var innerResult, innerError; + anObject$1u(iterator); + + try { + innerResult = getMethod$e(iterator, 'return'); + + if (!innerResult) { + if (kind === 'throw') throw value; + return value; + } + + innerResult = innerResult.call(iterator); + } catch (error) { + innerError = true; + innerResult = error; + } + + if (kind === 'throw') throw value; + if (innerError) throw innerResult; + anObject$1u(innerResult); + return value; +}; + +var anObject$1t = anObject$1C; + +var isArrayIteratorMethod$2 = isArrayIteratorMethod$3; + +var lengthOfArrayLike$n = lengthOfArrayLike$q; + +var bind$p = functionBindContext; + +var getIterator$a = getIterator$b; + +var getIteratorMethod$7 = getIteratorMethod$9; + +var iteratorClose$3 = iteratorClose$4; + +var Result = function (stopped, result) { + this.stopped = stopped; + this.result = result; +}; + +var iterate$I = function (iterable, unboundFunction, options) { + var that = options && options.that; + var AS_ENTRIES = !!(options && options.AS_ENTRIES); + var IS_ITERATOR = !!(options && options.IS_ITERATOR); + var INTERRUPTED = !!(options && options.INTERRUPTED); + var fn = bind$p(unboundFunction, that, 1 + AS_ENTRIES + INTERRUPTED); + var iterator, iterFn, index, length, result, next, step; + + var stop = function (condition) { + if (iterator) iteratorClose$3(iterator, 'normal', condition); + return new Result(true, condition); + }; + + var callFn = function (value) { + if (AS_ENTRIES) { + anObject$1t(value); + return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]); + } + + return INTERRUPTED ? fn(value, stop) : fn(value); + }; + + if (IS_ITERATOR) { + iterator = iterable; + } else { + iterFn = getIteratorMethod$7(iterable); + if (!iterFn) throw TypeError(String(iterable) + ' is not iterable'); // optimisation for array iterators + + if (isArrayIteratorMethod$2(iterFn)) { + for (index = 0, length = lengthOfArrayLike$n(iterable); length > index; index++) { + result = callFn(iterable[index]); + if (result && result instanceof Result) return result; + } + + return new Result(false); + } + + iterator = getIterator$a(iterable, iterFn); + } + + next = iterator.next; + + while (!(step = next.call(iterator)).done) { + try { + result = callFn(step.value); + } catch (error) { + iteratorClose$3(iterator, 'throw', error); + } + + if (typeof result == 'object' && result && result instanceof Result) return result; + } + + return new Result(false); +}; + +var $$4g = _export; + +var getPrototypeOf$e = objectGetPrototypeOf$1; + +var setPrototypeOf$7 = objectSetPrototypeOf$1; + +var copyConstructorProperties = copyConstructorProperties$3; + +var create$d = objectCreate$1; + +var createNonEnumerableProperty$c = createNonEnumerableProperty$h; + +var createPropertyDescriptor$5 = createPropertyDescriptor$9; + +var installErrorCause = installErrorCause$1; + +var iterate$H = iterate$I; + +var toString$r = toString$t; + +var $AggregateError = function AggregateError(errors, message +/* , options */ +) { + var that = this; + var options = arguments.length > 2 ? arguments[2] : undefined; + if (!(that instanceof $AggregateError)) return new $AggregateError(errors, message, options); + + if (setPrototypeOf$7) { + // eslint-disable-next-line unicorn/error-message -- expected + that = setPrototypeOf$7(new Error(undefined), getPrototypeOf$e(that)); + } + + if (message !== undefined) createNonEnumerableProperty$c(that, 'message', toString$r(message)); + installErrorCause(that, options); + var errorsArray = []; + iterate$H(errors, errorsArray.push, { + that: errorsArray + }); + createNonEnumerableProperty$c(that, 'errors', errorsArray); + return that; +}; + +if (setPrototypeOf$7) setPrototypeOf$7($AggregateError, Error);else copyConstructorProperties($AggregateError, Error); +$AggregateError.prototype = create$d(Error.prototype, { + constructor: createPropertyDescriptor$5(1, $AggregateError), + message: createPropertyDescriptor$5(1, ''), + name: createPropertyDescriptor$5(1, 'AggregateError') +}); // `AggregateError` constructor +// https://tc39.es/ecma262/#sec-aggregate-error-constructor + +$$4g({ + global: true +}, { + AggregateError: $AggregateError +}); + +var wellKnownSymbol$w = wellKnownSymbol$G; + +var create$c = objectCreate$1; + +var definePropertyModule$8 = objectDefineProperty; + +var UNSCOPABLES = wellKnownSymbol$w('unscopables'); +var ArrayPrototype$1 = Array.prototype; // Array.prototype[@@unscopables] +// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables + +if (ArrayPrototype$1[UNSCOPABLES] == undefined) { + definePropertyModule$8.f(ArrayPrototype$1, UNSCOPABLES, { + configurable: true, + value: create$c(null) + }); +} // add a key to Array.prototype[@@unscopables] + + +var addToUnscopables$h = function (key) { + ArrayPrototype$1[UNSCOPABLES][key] = true; +}; + +var $$4f = _export; + +var toObject$v = toObject$A; + +var lengthOfArrayLike$m = lengthOfArrayLike$q; + +var toIntegerOrInfinity$f = toIntegerOrInfinity$i; + +var addToUnscopables$g = addToUnscopables$h; // `Array.prototype.at` method +// https://github.com/tc39/proposal-relative-indexing-method + + +$$4f({ + target: 'Array', + proto: true +}, { + at: function at(index) { + var O = toObject$v(this); + var len = lengthOfArrayLike$m(O); + var relativeIndex = toIntegerOrInfinity$f(index); + var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex; + return k < 0 || k >= len ? undefined : O[k]; + } +}); +addToUnscopables$g('at'); + +var toPropertyKey$5 = toPropertyKey$9; + +var definePropertyModule$7 = objectDefineProperty; + +var createPropertyDescriptor$4 = createPropertyDescriptor$9; + +var createProperty$7 = function (object, key, value) { + var propertyKey = toPropertyKey$5(key); + if (propertyKey in object) definePropertyModule$7.f(object, propertyKey, createPropertyDescriptor$4(0, value));else object[propertyKey] = value; +}; + +var fails$Y = fails$15; + +var wellKnownSymbol$v = wellKnownSymbol$G; + +var V8_VERSION$2 = engineV8Version; + +var SPECIES$5 = wellKnownSymbol$v('species'); + +var arrayMethodHasSpeciesSupport$5 = function (METHOD_NAME) { + // We can't use this feature detection in V8 since it causes + // deoptimization and serious performance degradation + // https://github.com/zloirock/core-js/issues/677 + return V8_VERSION$2 >= 51 || !fails$Y(function () { + var array = []; + var constructor = array.constructor = {}; + + constructor[SPECIES$5] = function () { + return { + foo: 1 + }; + }; + + return array[METHOD_NAME](Boolean).foo !== 1; + }); +}; + +var $$4e = _export; + +var fails$X = fails$15; + +var isArray$5 = isArray$8; + +var isObject$s = isObject$C; + +var toObject$u = toObject$A; + +var lengthOfArrayLike$l = lengthOfArrayLike$q; + +var createProperty$6 = createProperty$7; + +var arraySpeciesCreate$4 = arraySpeciesCreate$6; + +var arrayMethodHasSpeciesSupport$4 = arrayMethodHasSpeciesSupport$5; + +var wellKnownSymbol$u = wellKnownSymbol$G; + +var V8_VERSION$1 = engineV8Version; + +var IS_CONCAT_SPREADABLE = wellKnownSymbol$u('isConcatSpreadable'); +var MAX_SAFE_INTEGER$2 = 0x1FFFFFFFFFFFFF; +var MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded'; // We can't use this feature detection in V8 since it causes +// deoptimization and serious performance degradation +// https://github.com/zloirock/core-js/issues/679 + +var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION$1 >= 51 || !fails$X(function () { + var array = []; + array[IS_CONCAT_SPREADABLE] = false; + return array.concat()[0] !== array; +}); +var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport$4('concat'); + +var isConcatSpreadable = function (O) { + if (!isObject$s(O)) return false; + var spreadable = O[IS_CONCAT_SPREADABLE]; + return spreadable !== undefined ? !!spreadable : isArray$5(O); +}; + +var FORCED$u = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT; // `Array.prototype.concat` method +// https://tc39.es/ecma262/#sec-array.prototype.concat +// with adding support of @@isConcatSpreadable and @@species + +$$4e({ + target: 'Array', + proto: true, + forced: FORCED$u +}, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + concat: function concat(arg) { + var O = toObject$u(this); + var A = arraySpeciesCreate$4(O, 0); + var n = 0; + var i, k, length, len, E; + + for (i = -1, length = arguments.length; i < length; i++) { + E = i === -1 ? O : arguments[i]; + + if (isConcatSpreadable(E)) { + len = lengthOfArrayLike$l(E); + if (n + len > MAX_SAFE_INTEGER$2) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED); + + for (k = 0; k < len; k++, n++) if (k in E) createProperty$6(A, n, E[k]); + } else { + if (n >= MAX_SAFE_INTEGER$2) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED); + createProperty$6(A, n++, E); + } + } + + A.length = n; + return A; + } +}); + +var toObject$t = toObject$A; + +var toAbsoluteIndex$6 = toAbsoluteIndex$8; + +var lengthOfArrayLike$k = lengthOfArrayLike$q; + +var min$8 = Math.min; // `Array.prototype.copyWithin` method implementation +// https://tc39.es/ecma262/#sec-array.prototype.copywithin +// eslint-disable-next-line es/no-array-prototype-copywithin -- safe + +var arrayCopyWithin = [].copyWithin || function copyWithin(target +/* = 0 */ +, start +/* = 0, end = @length */ +) { + var O = toObject$t(this); + var len = lengthOfArrayLike$k(O); + var to = toAbsoluteIndex$6(target, len); + var from = toAbsoluteIndex$6(start, len); + var end = arguments.length > 2 ? arguments[2] : undefined; + var count = min$8((end === undefined ? len : toAbsoluteIndex$6(end, len)) - from, len - to); + var inc = 1; + + if (from < to && to < from + count) { + inc = -1; + from += count - 1; + to += count - 1; + } + + while (count-- > 0) { + if (from in O) O[to] = O[from];else delete O[to]; + to += inc; + from += inc; + } + + return O; +}; + +var $$4d = _export; + +var copyWithin = arrayCopyWithin; + +var addToUnscopables$f = addToUnscopables$h; // `Array.prototype.copyWithin` method +// https://tc39.es/ecma262/#sec-array.prototype.copywithin + + +$$4d({ + target: 'Array', + proto: true +}, { + copyWithin: copyWithin +}); // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables + +addToUnscopables$f('copyWithin'); + +var fails$W = fails$15; + +var arrayMethodIsStrict$9 = function (METHOD_NAME, argument) { + var method = [][METHOD_NAME]; + return !!method && fails$W(function () { + // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing + method.call(null, argument || function () { + throw 1; + }, 1); + }); +}; + +var $$4c = _export; + +var $every$2 = arrayIteration.every; + +var arrayMethodIsStrict$8 = arrayMethodIsStrict$9; + +var STRICT_METHOD$8 = arrayMethodIsStrict$8('every'); // `Array.prototype.every` method +// https://tc39.es/ecma262/#sec-array.prototype.every + +$$4c({ + target: 'Array', + proto: true, + forced: !STRICT_METHOD$8 +}, { + every: function every(callbackfn + /* , thisArg */ + ) { + return $every$2(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +var toObject$s = toObject$A; + +var toAbsoluteIndex$5 = toAbsoluteIndex$8; + +var lengthOfArrayLike$j = lengthOfArrayLike$q; // `Array.prototype.fill` method implementation +// https://tc39.es/ecma262/#sec-array.prototype.fill + + +var arrayFill$1 = function fill(value +/* , start = 0, end = @length */ +) { + var O = toObject$s(this); + var length = lengthOfArrayLike$j(O); + var argumentsLength = arguments.length; + var index = toAbsoluteIndex$5(argumentsLength > 1 ? arguments[1] : undefined, length); + var end = argumentsLength > 2 ? arguments[2] : undefined; + var endPos = end === undefined ? length : toAbsoluteIndex$5(end, length); + + while (endPos > index) O[index++] = value; + + return O; +}; + +var $$4b = _export; + +var fill = arrayFill$1; + +var addToUnscopables$e = addToUnscopables$h; // `Array.prototype.fill` method +// https://tc39.es/ecma262/#sec-array.prototype.fill + + +$$4b({ + target: 'Array', + proto: true +}, { + fill: fill +}); // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables + +addToUnscopables$e('fill'); + +var $$4a = _export; + +var $filter$1 = arrayIteration.filter; + +var arrayMethodHasSpeciesSupport$3 = arrayMethodHasSpeciesSupport$5; + +var HAS_SPECIES_SUPPORT$3 = arrayMethodHasSpeciesSupport$3('filter'); // `Array.prototype.filter` method +// https://tc39.es/ecma262/#sec-array.prototype.filter +// with adding support of @@species + +$$4a({ + target: 'Array', + proto: true, + forced: !HAS_SPECIES_SUPPORT$3 +}, { + filter: function filter(callbackfn + /* , thisArg */ + ) { + return $filter$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +var $$49 = _export; + +var $find$2 = arrayIteration.find; + +var addToUnscopables$d = addToUnscopables$h; + +var FIND = 'find'; +var SKIPS_HOLES$1 = true; // Shouldn't skip holes + +if (FIND in []) Array(1)[FIND](function () { + SKIPS_HOLES$1 = false; +}); // `Array.prototype.find` method +// https://tc39.es/ecma262/#sec-array.prototype.find + +$$49({ + target: 'Array', + proto: true, + forced: SKIPS_HOLES$1 +}, { + find: function find(callbackfn + /* , that = undefined */ + ) { + return $find$2(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables + +addToUnscopables$d(FIND); + +var $$48 = _export; + +var $findIndex$1 = arrayIteration.findIndex; + +var addToUnscopables$c = addToUnscopables$h; + +var FIND_INDEX = 'findIndex'; +var SKIPS_HOLES = true; // Shouldn't skip holes + +if (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { + SKIPS_HOLES = false; +}); // `Array.prototype.findIndex` method +// https://tc39.es/ecma262/#sec-array.prototype.findindex + +$$48({ + target: 'Array', + proto: true, + forced: SKIPS_HOLES +}, { + findIndex: function findIndex(callbackfn + /* , that = undefined */ + ) { + return $findIndex$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables + +addToUnscopables$c(FIND_INDEX); + +var isArray$4 = isArray$8; + +var lengthOfArrayLike$i = lengthOfArrayLike$q; + +var bind$o = functionBindContext; // `FlattenIntoArray` abstract operation +// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray + + +var flattenIntoArray$2 = function (target, original, source, sourceLen, start, depth, mapper, thisArg) { + var targetIndex = start; + var sourceIndex = 0; + var mapFn = mapper ? bind$o(mapper, thisArg, 3) : false; + var element, elementLen; + + while (sourceIndex < sourceLen) { + if (sourceIndex in source) { + element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex]; + + if (depth > 0 && isArray$4(element)) { + elementLen = lengthOfArrayLike$i(element); + targetIndex = flattenIntoArray$2(target, original, element, elementLen, targetIndex, depth - 1) - 1; + } else { + if (targetIndex >= 0x1FFFFFFFFFFFFF) throw TypeError('Exceed the acceptable array length'); + target[targetIndex] = element; + } + + targetIndex++; + } + + sourceIndex++; + } + + return targetIndex; +}; + +var flattenIntoArray_1 = flattenIntoArray$2; + +var $$47 = _export; + +var flattenIntoArray$1 = flattenIntoArray_1; + +var toObject$r = toObject$A; + +var lengthOfArrayLike$h = lengthOfArrayLike$q; + +var toIntegerOrInfinity$e = toIntegerOrInfinity$i; + +var arraySpeciesCreate$3 = arraySpeciesCreate$6; // `Array.prototype.flat` method +// https://tc39.es/ecma262/#sec-array.prototype.flat + + +$$47({ + target: 'Array', + proto: true +}, { + flat: function flat() { + var depthArg = arguments.length ? arguments[0] : undefined; + var O = toObject$r(this); + var sourceLen = lengthOfArrayLike$h(O); + var A = arraySpeciesCreate$3(O, 0); + A.length = flattenIntoArray$1(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toIntegerOrInfinity$e(depthArg)); + return A; + } +}); + +var $$46 = _export; + +var flattenIntoArray = flattenIntoArray_1; + +var aCallable$M = aCallable$Q; + +var toObject$q = toObject$A; + +var lengthOfArrayLike$g = lengthOfArrayLike$q; + +var arraySpeciesCreate$2 = arraySpeciesCreate$6; // `Array.prototype.flatMap` method +// https://tc39.es/ecma262/#sec-array.prototype.flatmap + + +$$46({ + target: 'Array', + proto: true +}, { + flatMap: function flatMap(callbackfn + /* , thisArg */ + ) { + var O = toObject$q(this); + var sourceLen = lengthOfArrayLike$g(O); + var A; + aCallable$M(callbackfn); + A = arraySpeciesCreate$2(O, 0); + A.length = flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + return A; + } +}); + +var $forEach$2 = arrayIteration.forEach; + +var arrayMethodIsStrict$7 = arrayMethodIsStrict$9; + +var STRICT_METHOD$7 = arrayMethodIsStrict$7('forEach'); // `Array.prototype.forEach` method implementation +// https://tc39.es/ecma262/#sec-array.prototype.foreach + +var arrayForEach = !STRICT_METHOD$7 ? function forEach(callbackfn +/* , thisArg */ +) { + return $forEach$2(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); // eslint-disable-next-line es/no-array-prototype-foreach -- safe +} : [].forEach; + +var $$45 = _export; + +var forEach$2 = arrayForEach; // `Array.prototype.forEach` method +// https://tc39.es/ecma262/#sec-array.prototype.foreach +// eslint-disable-next-line es/no-array-prototype-foreach -- safe + + +$$45({ + target: 'Array', + proto: true, + forced: [].forEach != forEach$2 +}, { + forEach: forEach$2 +}); + +var anObject$1s = anObject$1C; + +var iteratorClose$2 = iteratorClose$4; // call something on iterator step with safe closing on error + + +var callWithSafeIterationClosing$3 = function (iterator, fn, value, ENTRIES) { + try { + return ENTRIES ? fn(anObject$1s(value)[0], value[1]) : fn(value); + } catch (error) { + iteratorClose$2(iterator, 'throw', error); + } +}; + +var bind$n = functionBindContext; + +var toObject$p = toObject$A; + +var callWithSafeIterationClosing$2 = callWithSafeIterationClosing$3; + +var isArrayIteratorMethod$1 = isArrayIteratorMethod$3; + +var isConstructor$5 = isConstructor$7; + +var lengthOfArrayLike$f = lengthOfArrayLike$q; + +var createProperty$5 = createProperty$7; + +var getIterator$9 = getIterator$b; + +var getIteratorMethod$6 = getIteratorMethod$9; // `Array.from` method implementation +// https://tc39.es/ecma262/#sec-array.from + + +var arrayFrom$1 = function from(arrayLike +/* , mapfn = undefined, thisArg = undefined */ +) { + var O = toObject$p(arrayLike); + var IS_CONSTRUCTOR = isConstructor$5(this); + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : undefined; + var mapping = mapfn !== undefined; + if (mapping) mapfn = bind$n(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2); + var iteratorMethod = getIteratorMethod$6(O); + var index = 0; + var length, result, step, iterator, next, value; // if the target is not iterable or it's an array with the default iterator - use a simple case + + if (iteratorMethod && !(this == Array && isArrayIteratorMethod$1(iteratorMethod))) { + iterator = getIterator$9(O, iteratorMethod); + next = iterator.next; + result = IS_CONSTRUCTOR ? new this() : []; + + for (; !(step = next.call(iterator)).done; index++) { + value = mapping ? callWithSafeIterationClosing$2(iterator, mapfn, [step.value, index], true) : step.value; + createProperty$5(result, index, value); + } + } else { + length = lengthOfArrayLike$f(O); + result = IS_CONSTRUCTOR ? new this(length) : Array(length); + + for (; length > index; index++) { + value = mapping ? mapfn(O[index], index) : O[index]; + createProperty$5(result, index, value); + } + } + + result.length = index; + return result; +}; + +var wellKnownSymbol$t = wellKnownSymbol$G; + +var ITERATOR$8 = wellKnownSymbol$t('iterator'); +var SAFE_CLOSING = false; + +try { + var called = 0; + var iteratorWithReturn = { + next: function () { + return { + done: !!called++ + }; + }, + 'return': function () { + SAFE_CLOSING = true; + } + }; + + iteratorWithReturn[ITERATOR$8] = function () { + return this; + }; // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing + + + Array.from(iteratorWithReturn, function () { + throw 2; + }); +} catch (error) { + /* empty */ +} + +var checkCorrectnessOfIteration$4 = function (exec, SKIP_CLOSING) { + if (!SKIP_CLOSING && !SAFE_CLOSING) return false; + var ITERATION_SUPPORT = false; + + try { + var object = {}; + + object[ITERATOR$8] = function () { + return { + next: function () { + return { + done: ITERATION_SUPPORT = true + }; + } + }; + }; + + exec(object); + } catch (error) { + /* empty */ + } + + return ITERATION_SUPPORT; +}; + +var $$44 = _export; + +var from$5 = arrayFrom$1; + +var checkCorrectnessOfIteration$3 = checkCorrectnessOfIteration$4; + +var INCORRECT_ITERATION$1 = !checkCorrectnessOfIteration$3(function (iterable) { + // eslint-disable-next-line es/no-array-from -- required for testing + Array.from(iterable); +}); // `Array.from` method +// https://tc39.es/ecma262/#sec-array.from + +$$44({ + target: 'Array', + stat: true, + forced: INCORRECT_ITERATION$1 +}, { + from: from$5 +}); + +var $$43 = _export; + +var $includes$1 = arrayIncludes.includes; + +var addToUnscopables$b = addToUnscopables$h; // `Array.prototype.includes` method +// https://tc39.es/ecma262/#sec-array.prototype.includes + + +$$43({ + target: 'Array', + proto: true +}, { + includes: function includes(el + /* , fromIndex = 0 */ + ) { + return $includes$1(this, el, arguments.length > 1 ? arguments[1] : undefined); + } +}); // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables + +addToUnscopables$b('includes'); + +/* eslint-disable es/no-array-prototype-indexof -- required for testing */ + +var $$42 = _export; + +var $indexOf$1 = arrayIncludes.indexOf; + +var arrayMethodIsStrict$6 = arrayMethodIsStrict$9; + +var nativeIndexOf = [].indexOf; +var NEGATIVE_ZERO$1 = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0; +var STRICT_METHOD$6 = arrayMethodIsStrict$6('indexOf'); // `Array.prototype.indexOf` method +// https://tc39.es/ecma262/#sec-array.prototype.indexof + +$$42({ + target: 'Array', + proto: true, + forced: NEGATIVE_ZERO$1 || !STRICT_METHOD$6 +}, { + indexOf: function indexOf(searchElement + /* , fromIndex = 0 */ + ) { + return NEGATIVE_ZERO$1 // convert -0 to +0 + ? nativeIndexOf.apply(this, arguments) || 0 : $indexOf$1(this, searchElement, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +var $$41 = _export; + +var isArray$3 = isArray$8; // `Array.isArray` method +// https://tc39.es/ecma262/#sec-array.isarray + + +$$41({ + target: 'Array', + stat: true +}, { + isArray: isArray$3 +}); + +var fails$V = fails$15; + +var isCallable$j = isCallable$z; + +var getPrototypeOf$d = objectGetPrototypeOf$1; + +var redefine$i = redefine$l.exports; + +var wellKnownSymbol$s = wellKnownSymbol$G; + +var ITERATOR$7 = wellKnownSymbol$s('iterator'); +var BUGGY_SAFARI_ITERATORS$1 = false; // `%IteratorPrototype%` object +// https://tc39.es/ecma262/#sec-%iteratorprototype%-object + +var IteratorPrototype$5, PrototypeOfArrayIteratorPrototype, arrayIterator$1; +/* eslint-disable es/no-array-prototype-keys -- safe */ + +if ([].keys) { + arrayIterator$1 = [].keys(); // Safari 8 has buggy iterators w/o `next` + + if (!('next' in arrayIterator$1)) BUGGY_SAFARI_ITERATORS$1 = true;else { + PrototypeOfArrayIteratorPrototype = getPrototypeOf$d(getPrototypeOf$d(arrayIterator$1)); + if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype$5 = PrototypeOfArrayIteratorPrototype; + } +} + +var NEW_ITERATOR_PROTOTYPE = IteratorPrototype$5 == undefined || fails$V(function () { + var test = {}; // FF44- legacy iterators case + + return IteratorPrototype$5[ITERATOR$7].call(test) !== test; +}); +if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype$5 = {}; // `%IteratorPrototype%[@@iterator]()` method +// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator + +if (!isCallable$j(IteratorPrototype$5[ITERATOR$7])) { + redefine$i(IteratorPrototype$5, ITERATOR$7, function () { + return this; + }); +} + +var iteratorsCore = { + IteratorPrototype: IteratorPrototype$5, + BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS$1 +}; + +var IteratorPrototype$4 = iteratorsCore.IteratorPrototype; + +var create$b = objectCreate$1; + +var createPropertyDescriptor$3 = createPropertyDescriptor$9; + +var setToStringTag$9 = setToStringTag$b; + +var Iterators$2 = iterators; + +var returnThis$1 = function () { + return this; +}; + +var createIteratorConstructor$7 = function (IteratorConstructor, NAME, next) { + var TO_STRING_TAG = NAME + ' Iterator'; + IteratorConstructor.prototype = create$b(IteratorPrototype$4, { + next: createPropertyDescriptor$3(1, next) + }); + setToStringTag$9(IteratorConstructor, TO_STRING_TAG, false); + Iterators$2[TO_STRING_TAG] = returnThis$1; + return IteratorConstructor; +}; + +var $$40 = _export; + +var FunctionName$1 = functionName; + +var isCallable$i = isCallable$z; + +var createIteratorConstructor$6 = createIteratorConstructor$7; + +var getPrototypeOf$c = objectGetPrototypeOf$1; + +var setPrototypeOf$6 = objectSetPrototypeOf$1; + +var setToStringTag$8 = setToStringTag$b; + +var createNonEnumerableProperty$b = createNonEnumerableProperty$h; + +var redefine$h = redefine$l.exports; + +var wellKnownSymbol$r = wellKnownSymbol$G; + +var Iterators$1 = iterators; + +var IteratorsCore = iteratorsCore; + +var PROPER_FUNCTION_NAME$4 = FunctionName$1.PROPER; +var CONFIGURABLE_FUNCTION_NAME$1 = FunctionName$1.CONFIGURABLE; +var IteratorPrototype$3 = IteratorsCore.IteratorPrototype; +var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; +var ITERATOR$6 = wellKnownSymbol$r('iterator'); +var KEYS = 'keys'; +var VALUES = 'values'; +var ENTRIES = 'entries'; + +var returnThis = function () { + return this; +}; + +var defineIterator$3 = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { + createIteratorConstructor$6(IteratorConstructor, NAME, next); + + var getIterationMethod = function (KIND) { + if (KIND === DEFAULT && defaultIterator) return defaultIterator; + if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND]; + + switch (KIND) { + case KEYS: + return function keys() { + return new IteratorConstructor(this, KIND); + }; + + case VALUES: + return function values() { + return new IteratorConstructor(this, KIND); + }; + + case ENTRIES: + return function entries() { + return new IteratorConstructor(this, KIND); + }; + } + + return function () { + return new IteratorConstructor(this); + }; + }; + + var TO_STRING_TAG = NAME + ' Iterator'; + var INCORRECT_VALUES_NAME = false; + var IterablePrototype = Iterable.prototype; + var nativeIterator = IterablePrototype[ITERATOR$6] || IterablePrototype['@@iterator'] || DEFAULT && IterablePrototype[DEFAULT]; + var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); + var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator; + var CurrentIteratorPrototype, methods, KEY; // fix native + + if (anyNativeIterator) { + CurrentIteratorPrototype = getPrototypeOf$c(anyNativeIterator.call(new Iterable())); + + if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { + if (getPrototypeOf$c(CurrentIteratorPrototype) !== IteratorPrototype$3) { + if (setPrototypeOf$6) { + setPrototypeOf$6(CurrentIteratorPrototype, IteratorPrototype$3); + } else if (!isCallable$i(CurrentIteratorPrototype[ITERATOR$6])) { + redefine$h(CurrentIteratorPrototype, ITERATOR$6, returnThis); + } + } // Set @@toStringTag to native iterators + + + setToStringTag$8(CurrentIteratorPrototype, TO_STRING_TAG, true); + } + } // fix Array.prototype.{ values, @@iterator }.name in V8 / FF + + + if (PROPER_FUNCTION_NAME$4 && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) { + if (CONFIGURABLE_FUNCTION_NAME$1) { + createNonEnumerableProperty$b(IterablePrototype, 'name', VALUES); + } else { + INCORRECT_VALUES_NAME = true; + + defaultIterator = function values() { + return nativeIterator.call(this); + }; + } + } // export additional methods + + + if (DEFAULT) { + methods = { + values: getIterationMethod(VALUES), + keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), + entries: getIterationMethod(ENTRIES) + }; + if (FORCED) for (KEY in methods) { + if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { + redefine$h(IterablePrototype, KEY, methods[KEY]); + } + } else $$40({ + target: NAME, + proto: true, + forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME + }, methods); + } // define iterator + + + if (IterablePrototype[ITERATOR$6] !== defaultIterator) { + redefine$h(IterablePrototype, ITERATOR$6, defaultIterator, { + name: DEFAULT + }); + } + + Iterators$1[NAME] = defaultIterator; + return methods; +}; + +var toIndexedObject$7 = toIndexedObject$d; + +var addToUnscopables$a = addToUnscopables$h; + +var Iterators = iterators; + +var InternalStateModule$h = internalState; + +var defineIterator$2 = defineIterator$3; + +var ARRAY_ITERATOR = 'Array Iterator'; +var setInternalState$h = InternalStateModule$h.set; +var getInternalState$g = InternalStateModule$h.getterFor(ARRAY_ITERATOR); // `Array.prototype.entries` method +// https://tc39.es/ecma262/#sec-array.prototype.entries +// `Array.prototype.keys` method +// https://tc39.es/ecma262/#sec-array.prototype.keys +// `Array.prototype.values` method +// https://tc39.es/ecma262/#sec-array.prototype.values +// `Array.prototype[@@iterator]` method +// https://tc39.es/ecma262/#sec-array.prototype-@@iterator +// `CreateArrayIterator` internal method +// https://tc39.es/ecma262/#sec-createarrayiterator + +var es_array_iterator = defineIterator$2(Array, 'Array', function (iterated, kind) { + setInternalState$h(this, { + type: ARRAY_ITERATOR, + target: toIndexedObject$7(iterated), + // target + index: 0, + // next index + kind: kind // kind + + }); // `%ArrayIteratorPrototype%.next` method + // https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next +}, function () { + var state = getInternalState$g(this); + var target = state.target; + var kind = state.kind; + var index = state.index++; + + if (!target || index >= target.length) { + state.target = undefined; + return { + value: undefined, + done: true + }; + } + + if (kind == 'keys') return { + value: index, + done: false + }; + if (kind == 'values') return { + value: target[index], + done: false + }; + return { + value: [index, target[index]], + done: false + }; +}, 'values'); // argumentsList[@@iterator] is %ArrayProto_values% +// https://tc39.es/ecma262/#sec-createunmappedargumentsobject +// https://tc39.es/ecma262/#sec-createmappedargumentsobject + +Iterators.Arguments = Iterators.Array; // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables + +addToUnscopables$a('keys'); +addToUnscopables$a('values'); +addToUnscopables$a('entries'); + +var $$3$ = _export; + +var IndexedObject$4 = indexedObject; + +var toIndexedObject$6 = toIndexedObject$d; + +var arrayMethodIsStrict$5 = arrayMethodIsStrict$9; + +var nativeJoin = [].join; +var ES3_STRINGS = IndexedObject$4 != Object; +var STRICT_METHOD$5 = arrayMethodIsStrict$5('join', ','); // `Array.prototype.join` method +// https://tc39.es/ecma262/#sec-array.prototype.join + +$$3$({ + target: 'Array', + proto: true, + forced: ES3_STRINGS || !STRICT_METHOD$5 +}, { + join: function join(separator) { + return nativeJoin.call(toIndexedObject$6(this), separator === undefined ? ',' : separator); + } +}); + +/* eslint-disable es/no-array-prototype-lastindexof -- safe */ + +var toIndexedObject$5 = toIndexedObject$d; + +var toIntegerOrInfinity$d = toIntegerOrInfinity$i; + +var lengthOfArrayLike$e = lengthOfArrayLike$q; + +var arrayMethodIsStrict$4 = arrayMethodIsStrict$9; + +var min$7 = Math.min; +var $lastIndexOf$1 = [].lastIndexOf; +var NEGATIVE_ZERO = !!$lastIndexOf$1 && 1 / [1].lastIndexOf(1, -0) < 0; +var STRICT_METHOD$4 = arrayMethodIsStrict$4('lastIndexOf'); +var FORCED$t = NEGATIVE_ZERO || !STRICT_METHOD$4; // `Array.prototype.lastIndexOf` method implementation +// https://tc39.es/ecma262/#sec-array.prototype.lastindexof + +var arrayLastIndexOf = FORCED$t ? function lastIndexOf(searchElement +/* , fromIndex = @[*-1] */ +) { + // convert -0 to +0 + if (NEGATIVE_ZERO) return $lastIndexOf$1.apply(this, arguments) || 0; + var O = toIndexedObject$5(this); + var length = lengthOfArrayLike$e(O); + var index = length - 1; + if (arguments.length > 1) index = min$7(index, toIntegerOrInfinity$d(arguments[1])); + if (index < 0) index = length + index; + + for (; index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0; + + return -1; +} : $lastIndexOf$1; + +var $$3_ = _export; + +var lastIndexOf = arrayLastIndexOf; // `Array.prototype.lastIndexOf` method +// https://tc39.es/ecma262/#sec-array.prototype.lastindexof +// eslint-disable-next-line es/no-array-prototype-lastindexof -- required for testing + + +$$3_({ + target: 'Array', + proto: true, + forced: lastIndexOf !== [].lastIndexOf +}, { + lastIndexOf: lastIndexOf +}); + +var $$3Z = _export; + +var $map$1 = arrayIteration.map; + +var arrayMethodHasSpeciesSupport$2 = arrayMethodHasSpeciesSupport$5; + +var HAS_SPECIES_SUPPORT$2 = arrayMethodHasSpeciesSupport$2('map'); // `Array.prototype.map` method +// https://tc39.es/ecma262/#sec-array.prototype.map +// with adding support of @@species + +$$3Z({ + target: 'Array', + proto: true, + forced: !HAS_SPECIES_SUPPORT$2 +}, { + map: function map(callbackfn + /* , thisArg */ + ) { + return $map$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +var $$3Y = _export; + +var fails$U = fails$15; + +var isConstructor$4 = isConstructor$7; + +var createProperty$4 = createProperty$7; + +var ISNT_GENERIC = fails$U(function () { + function F() { + /* empty */ + } // eslint-disable-next-line es/no-array-of -- required for testing + + + return !(Array.of.call(F) instanceof F); +}); // `Array.of` method +// https://tc39.es/ecma262/#sec-array.of +// WebKit Array.of isn't generic + +$$3Y({ + target: 'Array', + stat: true, + forced: ISNT_GENERIC +}, { + of: function of() { + var index = 0; + var argumentsLength = arguments.length; + var result = new (isConstructor$4(this) ? this : Array)(argumentsLength); + + while (argumentsLength > index) createProperty$4(result, index, arguments[index++]); + + result.length = argumentsLength; + return result; + } +}); + +var aCallable$L = aCallable$Q; + +var toObject$o = toObject$A; + +var IndexedObject$3 = indexedObject; + +var lengthOfArrayLike$d = lengthOfArrayLike$q; // `Array.prototype.{ reduce, reduceRight }` methods implementation + + +var createMethod$6 = function (IS_RIGHT) { + return function (that, callbackfn, argumentsLength, memo) { + aCallable$L(callbackfn); + var O = toObject$o(that); + var self = IndexedObject$3(O); + var length = lengthOfArrayLike$d(O); + var index = IS_RIGHT ? length - 1 : 0; + var i = IS_RIGHT ? -1 : 1; + if (argumentsLength < 2) while (true) { + if (index in self) { + memo = self[index]; + index += i; + break; + } + + index += i; + + if (IS_RIGHT ? index < 0 : length <= index) { + throw TypeError('Reduce of empty array with no initial value'); + } + } + + for (; IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) { + memo = callbackfn(memo, self[index], index, O); + } + + return memo; + }; +}; + +var arrayReduce = { + // `Array.prototype.reduce` method + // https://tc39.es/ecma262/#sec-array.prototype.reduce + left: createMethod$6(false), + // `Array.prototype.reduceRight` method + // https://tc39.es/ecma262/#sec-array.prototype.reduceright + right: createMethod$6(true) +}; + +var classof$7 = classofRaw$1; + +var global$D = global$R; + +var engineIsNode = classof$7(global$D.process) == 'process'; + +var $$3X = _export; + +var $reduce$1 = arrayReduce.left; + +var arrayMethodIsStrict$3 = arrayMethodIsStrict$9; + +var CHROME_VERSION$1 = engineV8Version; + +var IS_NODE$5 = engineIsNode; + +var STRICT_METHOD$3 = arrayMethodIsStrict$3('reduce'); // Chrome 80-82 has a critical bug +// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982 + +var CHROME_BUG$1 = !IS_NODE$5 && CHROME_VERSION$1 > 79 && CHROME_VERSION$1 < 83; // `Array.prototype.reduce` method +// https://tc39.es/ecma262/#sec-array.prototype.reduce + +$$3X({ + target: 'Array', + proto: true, + forced: !STRICT_METHOD$3 || CHROME_BUG$1 +}, { + reduce: function reduce(callbackfn + /* , initialValue */ + ) { + return $reduce$1(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +var $$3W = _export; + +var $reduceRight$1 = arrayReduce.right; + +var arrayMethodIsStrict$2 = arrayMethodIsStrict$9; + +var CHROME_VERSION = engineV8Version; + +var IS_NODE$4 = engineIsNode; + +var STRICT_METHOD$2 = arrayMethodIsStrict$2('reduceRight'); // Chrome 80-82 has a critical bug +// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982 + +var CHROME_BUG = !IS_NODE$4 && CHROME_VERSION > 79 && CHROME_VERSION < 83; // `Array.prototype.reduceRight` method +// https://tc39.es/ecma262/#sec-array.prototype.reduceright + +$$3W({ + target: 'Array', + proto: true, + forced: !STRICT_METHOD$2 || CHROME_BUG +}, { + reduceRight: function reduceRight(callbackfn + /* , initialValue */ + ) { + return $reduceRight$1(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +var $$3V = _export; + +var isArray$2 = isArray$8; + +var nativeReverse = [].reverse; +var test$1 = [1, 2]; // `Array.prototype.reverse` method +// https://tc39.es/ecma262/#sec-array.prototype.reverse +// fix for Safari 12.0 bug +// https://bugs.webkit.org/show_bug.cgi?id=188794 + +$$3V({ + target: 'Array', + proto: true, + forced: String(test$1) === String(test$1.reverse()) +}, { + reverse: function reverse() { + // eslint-disable-next-line no-self-assign -- dirty hack + if (isArray$2(this)) this.length = this.length; + return nativeReverse.call(this); + } +}); + +var $$3U = _export; + +var isArray$1 = isArray$8; + +var isConstructor$3 = isConstructor$7; + +var isObject$r = isObject$C; + +var toAbsoluteIndex$4 = toAbsoluteIndex$8; + +var lengthOfArrayLike$c = lengthOfArrayLike$q; + +var toIndexedObject$4 = toIndexedObject$d; + +var createProperty$3 = createProperty$7; + +var wellKnownSymbol$q = wellKnownSymbol$G; + +var arrayMethodHasSpeciesSupport$1 = arrayMethodHasSpeciesSupport$5; + +var HAS_SPECIES_SUPPORT$1 = arrayMethodHasSpeciesSupport$1('slice'); +var SPECIES$4 = wellKnownSymbol$q('species'); +var nativeSlice = [].slice; +var max$5 = Math.max; // `Array.prototype.slice` method +// https://tc39.es/ecma262/#sec-array.prototype.slice +// fallback for not array-like ES3 strings and DOM objects + +$$3U({ + target: 'Array', + proto: true, + forced: !HAS_SPECIES_SUPPORT$1 +}, { + slice: function slice(start, end) { + var O = toIndexedObject$4(this); + var length = lengthOfArrayLike$c(O); + var k = toAbsoluteIndex$4(start, length); + var fin = toAbsoluteIndex$4(end === undefined ? length : end, length); // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible + + var Constructor, result, n; + + if (isArray$1(O)) { + Constructor = O.constructor; // cross-realm fallback + + if (isConstructor$3(Constructor) && (Constructor === Array || isArray$1(Constructor.prototype))) { + Constructor = undefined; + } else if (isObject$r(Constructor)) { + Constructor = Constructor[SPECIES$4]; + if (Constructor === null) Constructor = undefined; + } + + if (Constructor === Array || Constructor === undefined) { + return nativeSlice.call(O, k, fin); + } + } + + result = new (Constructor === undefined ? Array : Constructor)(max$5(fin - k, 0)); + + for (n = 0; k < fin; k++, n++) if (k in O) createProperty$3(result, n, O[k]); + + result.length = n; + return result; + } +}); + +var $$3T = _export; + +var $some$2 = arrayIteration.some; + +var arrayMethodIsStrict$1 = arrayMethodIsStrict$9; + +var STRICT_METHOD$1 = arrayMethodIsStrict$1('some'); // `Array.prototype.some` method +// https://tc39.es/ecma262/#sec-array.prototype.some + +$$3T({ + target: 'Array', + proto: true, + forced: !STRICT_METHOD$1 +}, { + some: function some(callbackfn + /* , thisArg */ + ) { + return $some$2(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +// TODO: use something more complex like timsort? +var floor$9 = Math.floor; + +var mergeSort = function (array, comparefn) { + var length = array.length; + var middle = floor$9(length / 2); + return length < 8 ? insertionSort(array, comparefn) : merge(mergeSort(array.slice(0, middle), comparefn), mergeSort(array.slice(middle), comparefn), comparefn); +}; + +var insertionSort = function (array, comparefn) { + var length = array.length; + var i = 1; + var element, j; + + while (i < length) { + j = i; + element = array[i]; + + while (j && comparefn(array[j - 1], element) > 0) { + array[j] = array[--j]; + } + + if (j !== i++) array[j] = element; + } + + return array; +}; + +var merge = function (left, right, comparefn) { + var llength = left.length; + var rlength = right.length; + var lindex = 0; + var rindex = 0; + var result = []; + + while (lindex < llength || rindex < rlength) { + if (lindex < llength && rindex < rlength) { + result.push(comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]); + } else { + result.push(lindex < llength ? left[lindex++] : right[rindex++]); + } + } + + return result; +}; + +var arraySort = mergeSort; + +var userAgent$6 = engineUserAgent; + +var firefox = userAgent$6.match(/firefox\/(\d+)/i); +var engineFfVersion = !!firefox && +firefox[1]; + +var UA = engineUserAgent; + +var engineIsIeOrEdge = /MSIE|Trident/.test(UA); + +var userAgent$5 = engineUserAgent; + +var webkit = userAgent$5.match(/AppleWebKit\/(\d+)\./); +var engineWebkitVersion = !!webkit && +webkit[1]; + +var $$3S = _export; + +var aCallable$K = aCallable$Q; + +var toObject$n = toObject$A; + +var lengthOfArrayLike$b = lengthOfArrayLike$q; + +var toString$q = toString$t; + +var fails$T = fails$15; + +var internalSort$1 = arraySort; + +var arrayMethodIsStrict = arrayMethodIsStrict$9; + +var FF$1 = engineFfVersion; + +var IE_OR_EDGE$1 = engineIsIeOrEdge; + +var V8$1 = engineV8Version; + +var WEBKIT$2 = engineWebkitVersion; + +var test = []; +var nativeSort$1 = test.sort; // IE8- + +var FAILS_ON_UNDEFINED = fails$T(function () { + test.sort(undefined); +}); // V8 bug + +var FAILS_ON_NULL = fails$T(function () { + test.sort(null); +}); // Old WebKit + +var STRICT_METHOD = arrayMethodIsStrict('sort'); +var STABLE_SORT$1 = !fails$T(function () { + // feature detection can be too slow, so check engines versions + if (V8$1) return V8$1 < 70; + if (FF$1 && FF$1 > 3) return; + if (IE_OR_EDGE$1) return true; + if (WEBKIT$2) return WEBKIT$2 < 603; + var result = ''; + var code, chr, value, index; // generate an array with more 512 elements (Chakra and old V8 fails only in this case) + + for (code = 65; code < 76; code++) { + chr = String.fromCharCode(code); + + switch (code) { + case 66: + case 69: + case 70: + case 72: + value = 3; + break; + + case 68: + case 71: + value = 4; + break; + + default: + value = 2; + } + + for (index = 0; index < 47; index++) { + test.push({ + k: chr + index, + v: value + }); + } + } + + test.sort(function (a, b) { + return b.v - a.v; + }); + + for (index = 0; index < test.length; index++) { + chr = test[index].k.charAt(0); + if (result.charAt(result.length - 1) !== chr) result += chr; + } + + return result !== 'DGBEFHACIJK'; +}); +var FORCED$s = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT$1; + +var getSortCompare$1 = function (comparefn) { + return function (x, y) { + if (y === undefined) return -1; + if (x === undefined) return 1; + if (comparefn !== undefined) return +comparefn(x, y) || 0; + return toString$q(x) > toString$q(y) ? 1 : -1; + }; +}; // `Array.prototype.sort` method +// https://tc39.es/ecma262/#sec-array.prototype.sort + + +$$3S({ + target: 'Array', + proto: true, + forced: FORCED$s +}, { + sort: function sort(comparefn) { + if (comparefn !== undefined) aCallable$K(comparefn); + var array = toObject$n(this); + if (STABLE_SORT$1) return comparefn === undefined ? nativeSort$1.call(array) : nativeSort$1.call(array, comparefn); + var items = []; + var arrayLength = lengthOfArrayLike$b(array); + var itemsLength, index; + + for (index = 0; index < arrayLength; index++) { + if (index in array) items.push(array[index]); + } + + items = internalSort$1(items, getSortCompare$1(comparefn)); + itemsLength = items.length; + index = 0; + + while (index < itemsLength) array[index] = items[index++]; + + while (index < arrayLength) delete array[index++]; + + return array; + } +}); + +var getBuiltIn$r = getBuiltIn$y; + +var definePropertyModule$6 = objectDefineProperty; + +var wellKnownSymbol$p = wellKnownSymbol$G; + +var DESCRIPTORS$s = descriptors; + +var SPECIES$3 = wellKnownSymbol$p('species'); + +var setSpecies$7 = function (CONSTRUCTOR_NAME) { + var Constructor = getBuiltIn$r(CONSTRUCTOR_NAME); + var defineProperty = definePropertyModule$6.f; + + if (DESCRIPTORS$s && Constructor && !Constructor[SPECIES$3]) { + defineProperty(Constructor, SPECIES$3, { + configurable: true, + get: function () { + return this; + } + }); + } +}; + +var setSpecies$6 = setSpecies$7; // `Array[@@species]` getter +// https://tc39.es/ecma262/#sec-get-array-@@species + + +setSpecies$6('Array'); + +var $$3R = _export; + +var toAbsoluteIndex$3 = toAbsoluteIndex$8; + +var toIntegerOrInfinity$c = toIntegerOrInfinity$i; + +var lengthOfArrayLike$a = lengthOfArrayLike$q; + +var toObject$m = toObject$A; + +var arraySpeciesCreate$1 = arraySpeciesCreate$6; + +var createProperty$2 = createProperty$7; + +var arrayMethodHasSpeciesSupport = arrayMethodHasSpeciesSupport$5; + +var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice'); +var max$4 = Math.max; +var min$6 = Math.min; +var MAX_SAFE_INTEGER$1 = 0x1FFFFFFFFFFFFF; +var MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded'; // `Array.prototype.splice` method +// https://tc39.es/ecma262/#sec-array.prototype.splice +// with adding support of @@species + +$$3R({ + target: 'Array', + proto: true, + forced: !HAS_SPECIES_SUPPORT +}, { + splice: function splice(start, deleteCount + /* , ...items */ + ) { + var O = toObject$m(this); + var len = lengthOfArrayLike$a(O); + var actualStart = toAbsoluteIndex$3(start, len); + var argumentsLength = arguments.length; + var insertCount, actualDeleteCount, A, k, from, to; + + if (argumentsLength === 0) { + insertCount = actualDeleteCount = 0; + } else if (argumentsLength === 1) { + insertCount = 0; + actualDeleteCount = len - actualStart; + } else { + insertCount = argumentsLength - 2; + actualDeleteCount = min$6(max$4(toIntegerOrInfinity$c(deleteCount), 0), len - actualStart); + } + + if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER$1) { + throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED); + } + + A = arraySpeciesCreate$1(O, actualDeleteCount); + + for (k = 0; k < actualDeleteCount; k++) { + from = actualStart + k; + if (from in O) createProperty$2(A, k, O[from]); + } + + A.length = actualDeleteCount; + + if (insertCount < actualDeleteCount) { + for (k = actualStart; k < len - actualDeleteCount; k++) { + from = k + actualDeleteCount; + to = k + insertCount; + if (from in O) O[to] = O[from];else delete O[to]; + } + + for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1]; + } else if (insertCount > actualDeleteCount) { + for (k = len - actualDeleteCount; k > actualStart; k--) { + from = k + actualDeleteCount - 1; + to = k + insertCount - 1; + if (from in O) O[to] = O[from];else delete O[to]; + } + } + + for (k = 0; k < insertCount; k++) { + O[k + actualStart] = arguments[k + 2]; + } + + O.length = len - actualDeleteCount + insertCount; + return A; + } +}); + +// this method was added to unscopables after implementation +// in popular engines, so it's moved to a separate module +var addToUnscopables$9 = addToUnscopables$h; // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables + + +addToUnscopables$9('flat'); + +// this method was added to unscopables after implementation +// in popular engines, so it's moved to a separate module +var addToUnscopables$8 = addToUnscopables$h; // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables + + +addToUnscopables$8('flatMap'); + +// eslint-disable-next-line es/no-typed-arrays -- safe +var arrayBufferNative = typeof ArrayBuffer !== 'undefined' && typeof DataView !== 'undefined'; + +var redefine$g = redefine$l.exports; + +var redefineAll$a = function (target, src, options) { + for (var key in src) redefine$g(target, key, src[key], options); + + return target; +}; + +var anInstance$b = function (it, Constructor, name) { + if (it instanceof Constructor) return it; + throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation'); +}; + +var toIntegerOrInfinity$b = toIntegerOrInfinity$i; + +var toLength$b = toLength$d; // `ToIndex` abstract operation +// https://tc39.es/ecma262/#sec-toindex + + +var toIndex$2 = function (it) { + if (it === undefined) return 0; + var number = toIntegerOrInfinity$b(it); + var length = toLength$b(number); + if (number !== length) throw RangeError('Wrong length or index'); + return length; +}; + +// IEEE754 conversions based on https://github.com/feross/ieee754 +var abs$7 = Math.abs; +var pow$4 = Math.pow; +var floor$8 = Math.floor; +var log$8 = Math.log; +var LN2$2 = Math.LN2; + +var pack = function (number, mantissaLength, bytes) { + var buffer = new Array(bytes); + var exponentLength = bytes * 8 - mantissaLength - 1; + var eMax = (1 << exponentLength) - 1; + var eBias = eMax >> 1; + var rt = mantissaLength === 23 ? pow$4(2, -24) - pow$4(2, -77) : 0; + var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0; + var index = 0; + var exponent, mantissa, c; + number = abs$7(number); // eslint-disable-next-line no-self-compare -- NaN check + + if (number != number || number === Infinity) { + // eslint-disable-next-line no-self-compare -- NaN check + mantissa = number != number ? 1 : 0; + exponent = eMax; + } else { + exponent = floor$8(log$8(number) / LN2$2); + + if (number * (c = pow$4(2, -exponent)) < 1) { + exponent--; + c *= 2; + } + + if (exponent + eBias >= 1) { + number += rt / c; + } else { + number += rt * pow$4(2, 1 - eBias); + } + + if (number * c >= 2) { + exponent++; + c /= 2; + } + + if (exponent + eBias >= eMax) { + mantissa = 0; + exponent = eMax; + } else if (exponent + eBias >= 1) { + mantissa = (number * c - 1) * pow$4(2, mantissaLength); + exponent = exponent + eBias; + } else { + mantissa = number * pow$4(2, eBias - 1) * pow$4(2, mantissaLength); + exponent = 0; + } + } + + for (; mantissaLength >= 8; buffer[index++] = mantissa & 255, mantissa /= 256, mantissaLength -= 8); + + exponent = exponent << mantissaLength | mantissa; + exponentLength += mantissaLength; + + for (; exponentLength > 0; buffer[index++] = exponent & 255, exponent /= 256, exponentLength -= 8); + + buffer[--index] |= sign * 128; + return buffer; +}; + +var unpack = function (buffer, mantissaLength) { + var bytes = buffer.length; + var exponentLength = bytes * 8 - mantissaLength - 1; + var eMax = (1 << exponentLength) - 1; + var eBias = eMax >> 1; + var nBits = exponentLength - 7; + var index = bytes - 1; + var sign = buffer[index--]; + var exponent = sign & 127; + var mantissa; + sign >>= 7; + + for (; nBits > 0; exponent = exponent * 256 + buffer[index], index--, nBits -= 8); + + mantissa = exponent & (1 << -nBits) - 1; + exponent >>= -nBits; + nBits += mantissaLength; + + for (; nBits > 0; mantissa = mantissa * 256 + buffer[index], index--, nBits -= 8); + + if (exponent === 0) { + exponent = 1 - eBias; + } else if (exponent === eMax) { + return mantissa ? NaN : sign ? -Infinity : Infinity; + } else { + mantissa = mantissa + pow$4(2, mantissaLength); + exponent = exponent - eBias; + } + + return (sign ? -1 : 1) * mantissa * pow$4(2, exponent - mantissaLength); +}; + +var ieee754 = { + pack: pack, + unpack: unpack +}; + +var global$C = global$R; + +var DESCRIPTORS$r = descriptors; + +var NATIVE_ARRAY_BUFFER$2 = arrayBufferNative; + +var FunctionName = functionName; + +var createNonEnumerableProperty$a = createNonEnumerableProperty$h; + +var redefineAll$9 = redefineAll$a; + +var fails$S = fails$15; + +var anInstance$a = anInstance$b; + +var toIntegerOrInfinity$a = toIntegerOrInfinity$i; + +var toLength$a = toLength$d; + +var toIndex$1 = toIndex$2; + +var IEEE754 = ieee754; + +var getPrototypeOf$b = objectGetPrototypeOf$1; + +var setPrototypeOf$5 = objectSetPrototypeOf$1; + +var getOwnPropertyNames$5 = objectGetOwnPropertyNames.f; + +var defineProperty$d = objectDefineProperty.f; + +var arrayFill = arrayFill$1; + +var setToStringTag$7 = setToStringTag$b; + +var InternalStateModule$g = internalState; + +var PROPER_FUNCTION_NAME$3 = FunctionName.PROPER; +var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE; +var getInternalState$f = InternalStateModule$g.get; +var setInternalState$g = InternalStateModule$g.set; +var ARRAY_BUFFER$1 = 'ArrayBuffer'; +var DATA_VIEW = 'DataView'; +var PROTOTYPE = 'prototype'; +var WRONG_LENGTH$1 = 'Wrong length'; +var WRONG_INDEX = 'Wrong index'; +var NativeArrayBuffer$1 = global$C[ARRAY_BUFFER$1]; +var $ArrayBuffer = NativeArrayBuffer$1; +var $DataView = global$C[DATA_VIEW]; +var $DataViewPrototype = $DataView && $DataView[PROTOTYPE]; +var ObjectPrototype$1 = Object.prototype; +var RangeError$2 = global$C.RangeError; +var packIEEE754 = IEEE754.pack; +var unpackIEEE754 = IEEE754.unpack; + +var packInt8 = function (number) { + return [number & 0xFF]; +}; + +var packInt16 = function (number) { + return [number & 0xFF, number >> 8 & 0xFF]; +}; + +var packInt32 = function (number) { + return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF]; +}; + +var unpackInt32 = function (buffer) { + return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0]; +}; + +var packFloat32 = function (number) { + return packIEEE754(number, 23, 4); +}; + +var packFloat64 = function (number) { + return packIEEE754(number, 52, 8); +}; + +var addGetter$1 = function (Constructor, key) { + defineProperty$d(Constructor[PROTOTYPE], key, { + get: function () { + return getInternalState$f(this)[key]; + } + }); +}; + +var get$2 = function (view, count, index, isLittleEndian) { + var intIndex = toIndex$1(index); + var store = getInternalState$f(view); + if (intIndex + count > store.byteLength) throw RangeError$2(WRONG_INDEX); + var bytes = getInternalState$f(store.buffer).bytes; + var start = intIndex + store.byteOffset; + var pack = bytes.slice(start, start + count); + return isLittleEndian ? pack : pack.reverse(); +}; + +var set$3 = function (view, count, index, conversion, value, isLittleEndian) { + var intIndex = toIndex$1(index); + var store = getInternalState$f(view); + if (intIndex + count > store.byteLength) throw RangeError$2(WRONG_INDEX); + var bytes = getInternalState$f(store.buffer).bytes; + var start = intIndex + store.byteOffset; + var pack = conversion(+value); + + for (var i = 0; i < count; i++) bytes[start + i] = pack[isLittleEndian ? i : count - i - 1]; +}; + +if (!NATIVE_ARRAY_BUFFER$2) { + $ArrayBuffer = function ArrayBuffer(length) { + anInstance$a(this, $ArrayBuffer, ARRAY_BUFFER$1); + var byteLength = toIndex$1(length); + setInternalState$g(this, { + bytes: arrayFill.call(new Array(byteLength), 0), + byteLength: byteLength + }); + if (!DESCRIPTORS$r) this.byteLength = byteLength; + }; + + $DataView = function DataView(buffer, byteOffset, byteLength) { + anInstance$a(this, $DataView, DATA_VIEW); + anInstance$a(buffer, $ArrayBuffer, DATA_VIEW); + var bufferLength = getInternalState$f(buffer).byteLength; + var offset = toIntegerOrInfinity$a(byteOffset); + if (offset < 0 || offset > bufferLength) throw RangeError$2('Wrong offset'); + byteLength = byteLength === undefined ? bufferLength - offset : toLength$a(byteLength); + if (offset + byteLength > bufferLength) throw RangeError$2(WRONG_LENGTH$1); + setInternalState$g(this, { + buffer: buffer, + byteLength: byteLength, + byteOffset: offset + }); + + if (!DESCRIPTORS$r) { + this.buffer = buffer; + this.byteLength = byteLength; + this.byteOffset = offset; + } + }; + + if (DESCRIPTORS$r) { + addGetter$1($ArrayBuffer, 'byteLength'); + addGetter$1($DataView, 'buffer'); + addGetter$1($DataView, 'byteLength'); + addGetter$1($DataView, 'byteOffset'); + } + + redefineAll$9($DataView[PROTOTYPE], { + getInt8: function getInt8(byteOffset) { + return get$2(this, 1, byteOffset)[0] << 24 >> 24; + }, + getUint8: function getUint8(byteOffset) { + return get$2(this, 1, byteOffset)[0]; + }, + getInt16: function getInt16(byteOffset + /* , littleEndian */ + ) { + var bytes = get$2(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined); + return (bytes[1] << 8 | bytes[0]) << 16 >> 16; + }, + getUint16: function getUint16(byteOffset + /* , littleEndian */ + ) { + var bytes = get$2(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined); + return bytes[1] << 8 | bytes[0]; + }, + getInt32: function getInt32(byteOffset + /* , littleEndian */ + ) { + return unpackInt32(get$2(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)); + }, + getUint32: function getUint32(byteOffset + /* , littleEndian */ + ) { + return unpackInt32(get$2(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)) >>> 0; + }, + getFloat32: function getFloat32(byteOffset + /* , littleEndian */ + ) { + return unpackIEEE754(get$2(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 23); + }, + getFloat64: function getFloat64(byteOffset + /* , littleEndian */ + ) { + return unpackIEEE754(get$2(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 52); + }, + setInt8: function setInt8(byteOffset, value) { + set$3(this, 1, byteOffset, packInt8, value); + }, + setUint8: function setUint8(byteOffset, value) { + set$3(this, 1, byteOffset, packInt8, value); + }, + setInt16: function setInt16(byteOffset, value + /* , littleEndian */ + ) { + set$3(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined); + }, + setUint16: function setUint16(byteOffset, value + /* , littleEndian */ + ) { + set$3(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined); + }, + setInt32: function setInt32(byteOffset, value + /* , littleEndian */ + ) { + set$3(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined); + }, + setUint32: function setUint32(byteOffset, value + /* , littleEndian */ + ) { + set$3(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined); + }, + setFloat32: function setFloat32(byteOffset, value + /* , littleEndian */ + ) { + set$3(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : undefined); + }, + setFloat64: function setFloat64(byteOffset, value + /* , littleEndian */ + ) { + set$3(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : undefined); + } + }); +} else { + var INCORRECT_ARRAY_BUFFER_NAME = PROPER_FUNCTION_NAME$3 && NativeArrayBuffer$1.name !== ARRAY_BUFFER$1; + /* eslint-disable no-new -- required for testing */ + + if (!fails$S(function () { + NativeArrayBuffer$1(1); + }) || !fails$S(function () { + new NativeArrayBuffer$1(-1); + }) || fails$S(function () { + new NativeArrayBuffer$1(); + new NativeArrayBuffer$1(1.5); + new NativeArrayBuffer$1(NaN); + return INCORRECT_ARRAY_BUFFER_NAME && !CONFIGURABLE_FUNCTION_NAME; + })) { + /* eslint-enable no-new -- required for testing */ + $ArrayBuffer = function ArrayBuffer(length) { + anInstance$a(this, $ArrayBuffer); + return new NativeArrayBuffer$1(toIndex$1(length)); + }; + + var ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE] = NativeArrayBuffer$1[PROTOTYPE]; + + for (var keys$2 = getOwnPropertyNames$5(NativeArrayBuffer$1), j$1 = 0, key$1; keys$2.length > j$1;) { + if (!((key$1 = keys$2[j$1++]) in $ArrayBuffer)) { + createNonEnumerableProperty$a($ArrayBuffer, key$1, NativeArrayBuffer$1[key$1]); + } + } + + ArrayBufferPrototype.constructor = $ArrayBuffer; + } else if (INCORRECT_ARRAY_BUFFER_NAME && CONFIGURABLE_FUNCTION_NAME) { + createNonEnumerableProperty$a(NativeArrayBuffer$1, 'name', ARRAY_BUFFER$1); + } // WebKit bug - the same parent prototype for typed arrays and data view + + + if (setPrototypeOf$5 && getPrototypeOf$b($DataViewPrototype) !== ObjectPrototype$1) { + setPrototypeOf$5($DataViewPrototype, ObjectPrototype$1); + } // iOS Safari 7.x bug + + + var testView = new $DataView(new $ArrayBuffer(2)); + var $setInt8 = $DataViewPrototype.setInt8; + testView.setInt8(0, 2147483648); + testView.setInt8(1, 2147483649); + if (testView.getInt8(0) || !testView.getInt8(1)) redefineAll$9($DataViewPrototype, { + setInt8: function setInt8(byteOffset, value) { + $setInt8.call(this, byteOffset, value << 24 >> 24); + }, + setUint8: function setUint8(byteOffset, value) { + $setInt8.call(this, byteOffset, value << 24 >> 24); + } + }, { + unsafe: true + }); +} + +setToStringTag$7($ArrayBuffer, ARRAY_BUFFER$1); +setToStringTag$7($DataView, DATA_VIEW); +var arrayBuffer = { + ArrayBuffer: $ArrayBuffer, + DataView: $DataView +}; + +var $$3Q = _export; + +var global$B = global$R; + +var arrayBufferModule = arrayBuffer; + +var setSpecies$5 = setSpecies$7; + +var ARRAY_BUFFER = 'ArrayBuffer'; +var ArrayBuffer$4 = arrayBufferModule[ARRAY_BUFFER]; +var NativeArrayBuffer = global$B[ARRAY_BUFFER]; // `ArrayBuffer` constructor +// https://tc39.es/ecma262/#sec-arraybuffer-constructor + +$$3Q({ + global: true, + forced: NativeArrayBuffer !== ArrayBuffer$4 +}, { + ArrayBuffer: ArrayBuffer$4 +}); +setSpecies$5(ARRAY_BUFFER); + +var NATIVE_ARRAY_BUFFER$1 = arrayBufferNative; + +var DESCRIPTORS$q = descriptors; + +var global$A = global$R; + +var isCallable$h = isCallable$z; + +var isObject$q = isObject$C; + +var hasOwn$c = hasOwnProperty_1; + +var classof$6 = classof$b; + +var tryToString$1 = tryToString$3; + +var createNonEnumerableProperty$9 = createNonEnumerableProperty$h; + +var redefine$f = redefine$l.exports; + +var defineProperty$c = objectDefineProperty.f; + +var getPrototypeOf$a = objectGetPrototypeOf$1; + +var setPrototypeOf$4 = objectSetPrototypeOf$1; + +var wellKnownSymbol$o = wellKnownSymbol$G; + +var uid$1 = uid$5; + +var Int8Array$3 = global$A.Int8Array; +var Int8ArrayPrototype = Int8Array$3 && Int8Array$3.prototype; +var Uint8ClampedArray = global$A.Uint8ClampedArray; +var Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype; +var TypedArray$1 = Int8Array$3 && getPrototypeOf$a(Int8Array$3); +var TypedArrayPrototype$1 = Int8ArrayPrototype && getPrototypeOf$a(Int8ArrayPrototype); +var ObjectPrototype = Object.prototype; +var isPrototypeOf$2 = ObjectPrototype.isPrototypeOf; +var TO_STRING_TAG$5 = wellKnownSymbol$o('toStringTag'); +var TYPED_ARRAY_TAG$1 = uid$1('TYPED_ARRAY_TAG'); +var TYPED_ARRAY_CONSTRUCTOR$2 = uid$1('TYPED_ARRAY_CONSTRUCTOR'); // Fixing native typed arrays in Opera Presto crashes the browser, see #595 + +var NATIVE_ARRAY_BUFFER_VIEWS$3 = NATIVE_ARRAY_BUFFER$1 && !!setPrototypeOf$4 && classof$6(global$A.opera) !== 'Opera'; +var TYPED_ARRAY_TAG_REQIRED = false; +var NAME$1, Constructor, Prototype; +var TypedArrayConstructorsList = { + Int8Array: 1, + Uint8Array: 1, + Uint8ClampedArray: 1, + Int16Array: 2, + Uint16Array: 2, + Int32Array: 4, + Uint32Array: 4, + Float32Array: 4, + Float64Array: 8 +}; +var BigIntArrayConstructorsList = { + BigInt64Array: 8, + BigUint64Array: 8 +}; + +var isView = function isView(it) { + if (!isObject$q(it)) return false; + var klass = classof$6(it); + return klass === 'DataView' || hasOwn$c(TypedArrayConstructorsList, klass) || hasOwn$c(BigIntArrayConstructorsList, klass); +}; + +var isTypedArray$1 = function (it) { + if (!isObject$q(it)) return false; + var klass = classof$6(it); + return hasOwn$c(TypedArrayConstructorsList, klass) || hasOwn$c(BigIntArrayConstructorsList, klass); +}; + +var aTypedArray$t = function (it) { + if (isTypedArray$1(it)) return it; + throw TypeError('Target is not a typed array'); +}; + +var aTypedArrayConstructor$5 = function (C) { + if (isCallable$h(C) && (!setPrototypeOf$4 || isPrototypeOf$2.call(TypedArray$1, C))) return C; + throw TypeError(tryToString$1(C) + ' is not a typed array constructor'); +}; + +var exportTypedArrayMethod$u = function (KEY, property, forced) { + if (!DESCRIPTORS$q) return; + if (forced) for (var ARRAY in TypedArrayConstructorsList) { + var TypedArrayConstructor = global$A[ARRAY]; + if (TypedArrayConstructor && hasOwn$c(TypedArrayConstructor.prototype, KEY)) try { + delete TypedArrayConstructor.prototype[KEY]; + } catch (error) { + /* empty */ + } + } + + if (!TypedArrayPrototype$1[KEY] || forced) { + redefine$f(TypedArrayPrototype$1, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS$3 && Int8ArrayPrototype[KEY] || property); + } +}; + +var exportTypedArrayStaticMethod$3 = function (KEY, property, forced) { + var ARRAY, TypedArrayConstructor; + if (!DESCRIPTORS$q) return; + + if (setPrototypeOf$4) { + if (forced) for (ARRAY in TypedArrayConstructorsList) { + TypedArrayConstructor = global$A[ARRAY]; + if (TypedArrayConstructor && hasOwn$c(TypedArrayConstructor, KEY)) try { + delete TypedArrayConstructor[KEY]; + } catch (error) { + /* empty */ + } + } + + if (!TypedArray$1[KEY] || forced) { + // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable + try { + return redefine$f(TypedArray$1, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS$3 && TypedArray$1[KEY] || property); + } catch (error) { + /* empty */ + } + } else return; + } + + for (ARRAY in TypedArrayConstructorsList) { + TypedArrayConstructor = global$A[ARRAY]; + + if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) { + redefine$f(TypedArrayConstructor, KEY, property); + } + } +}; + +for (NAME$1 in TypedArrayConstructorsList) { + Constructor = global$A[NAME$1]; + Prototype = Constructor && Constructor.prototype; + if (Prototype) createNonEnumerableProperty$9(Prototype, TYPED_ARRAY_CONSTRUCTOR$2, Constructor);else NATIVE_ARRAY_BUFFER_VIEWS$3 = false; +} + +for (NAME$1 in BigIntArrayConstructorsList) { + Constructor = global$A[NAME$1]; + Prototype = Constructor && Constructor.prototype; + if (Prototype) createNonEnumerableProperty$9(Prototype, TYPED_ARRAY_CONSTRUCTOR$2, Constructor); +} // WebKit bug - typed arrays constructors prototype is Object.prototype + + +if (!NATIVE_ARRAY_BUFFER_VIEWS$3 || !isCallable$h(TypedArray$1) || TypedArray$1 === Function.prototype) { + // eslint-disable-next-line no-shadow -- safe + TypedArray$1 = function TypedArray() { + throw TypeError('Incorrect invocation'); + }; + + if (NATIVE_ARRAY_BUFFER_VIEWS$3) for (NAME$1 in TypedArrayConstructorsList) { + if (global$A[NAME$1]) setPrototypeOf$4(global$A[NAME$1], TypedArray$1); + } +} + +if (!NATIVE_ARRAY_BUFFER_VIEWS$3 || !TypedArrayPrototype$1 || TypedArrayPrototype$1 === ObjectPrototype) { + TypedArrayPrototype$1 = TypedArray$1.prototype; + if (NATIVE_ARRAY_BUFFER_VIEWS$3) for (NAME$1 in TypedArrayConstructorsList) { + if (global$A[NAME$1]) setPrototypeOf$4(global$A[NAME$1].prototype, TypedArrayPrototype$1); + } +} // WebKit bug - one more object in Uint8ClampedArray prototype chain + + +if (NATIVE_ARRAY_BUFFER_VIEWS$3 && getPrototypeOf$a(Uint8ClampedArrayPrototype) !== TypedArrayPrototype$1) { + setPrototypeOf$4(Uint8ClampedArrayPrototype, TypedArrayPrototype$1); +} + +if (DESCRIPTORS$q && !hasOwn$c(TypedArrayPrototype$1, TO_STRING_TAG$5)) { + TYPED_ARRAY_TAG_REQIRED = true; + defineProperty$c(TypedArrayPrototype$1, TO_STRING_TAG$5, { + get: function () { + return isObject$q(this) ? this[TYPED_ARRAY_TAG$1] : undefined; + } + }); + + for (NAME$1 in TypedArrayConstructorsList) if (global$A[NAME$1]) { + createNonEnumerableProperty$9(global$A[NAME$1], TYPED_ARRAY_TAG$1, NAME$1); + } +} + +var arrayBufferViewCore = { + NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS$3, + TYPED_ARRAY_CONSTRUCTOR: TYPED_ARRAY_CONSTRUCTOR$2, + TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQIRED && TYPED_ARRAY_TAG$1, + aTypedArray: aTypedArray$t, + aTypedArrayConstructor: aTypedArrayConstructor$5, + exportTypedArrayMethod: exportTypedArrayMethod$u, + exportTypedArrayStaticMethod: exportTypedArrayStaticMethod$3, + isView: isView, + isTypedArray: isTypedArray$1, + TypedArray: TypedArray$1, + TypedArrayPrototype: TypedArrayPrototype$1 +}; + +var $$3P = _export; + +var ArrayBufferViewCore$x = arrayBufferViewCore; + +var NATIVE_ARRAY_BUFFER_VIEWS$2 = ArrayBufferViewCore$x.NATIVE_ARRAY_BUFFER_VIEWS; // `ArrayBuffer.isView` method +// https://tc39.es/ecma262/#sec-arraybuffer.isview + +$$3P({ + target: 'ArrayBuffer', + stat: true, + forced: !NATIVE_ARRAY_BUFFER_VIEWS$2 +}, { + isView: ArrayBufferViewCore$x.isView +}); + +var isConstructor$2 = isConstructor$7; + +var tryToString = tryToString$3; // `Assert: IsConstructor(argument) is true` + + +var aConstructor$5 = function (argument) { + if (isConstructor$2(argument)) return argument; + throw TypeError(tryToString(argument) + ' is not a constructor'); +}; + +var anObject$1r = anObject$1C; + +var aConstructor$4 = aConstructor$5; + +var wellKnownSymbol$n = wellKnownSymbol$G; + +var SPECIES$2 = wellKnownSymbol$n('species'); // `SpeciesConstructor` abstract operation +// https://tc39.es/ecma262/#sec-speciesconstructor + +var speciesConstructor$f = function (O, defaultConstructor) { + var C = anObject$1r(O).constructor; + var S; + return C === undefined || (S = anObject$1r(C)[SPECIES$2]) == undefined ? defaultConstructor : aConstructor$4(S); +}; + +var $$3O = _export; + +var fails$R = fails$15; + +var ArrayBufferModule$2 = arrayBuffer; + +var anObject$1q = anObject$1C; + +var toAbsoluteIndex$2 = toAbsoluteIndex$8; + +var toLength$9 = toLength$d; + +var speciesConstructor$e = speciesConstructor$f; + +var ArrayBuffer$3 = ArrayBufferModule$2.ArrayBuffer; +var DataView$2 = ArrayBufferModule$2.DataView; +var nativeArrayBufferSlice = ArrayBuffer$3.prototype.slice; +var INCORRECT_SLICE = fails$R(function () { + return !new ArrayBuffer$3(2).slice(1, undefined).byteLength; +}); // `ArrayBuffer.prototype.slice` method +// https://tc39.es/ecma262/#sec-arraybuffer.prototype.slice + +$$3O({ + target: 'ArrayBuffer', + proto: true, + unsafe: true, + forced: INCORRECT_SLICE +}, { + slice: function slice(start, end) { + if (nativeArrayBufferSlice !== undefined && end === undefined) { + return nativeArrayBufferSlice.call(anObject$1q(this), start); // FF fix + } + + var length = anObject$1q(this).byteLength; + var first = toAbsoluteIndex$2(start, length); + var fin = toAbsoluteIndex$2(end === undefined ? length : end, length); + var result = new (speciesConstructor$e(this, ArrayBuffer$3))(toLength$9(fin - first)); + var viewSource = new DataView$2(this); + var viewTarget = new DataView$2(result); + var index = 0; + + while (first < fin) { + viewTarget.setUint8(index++, viewSource.getUint8(first++)); + } + + return result; + } +}); + +var $$3N = _export; + +var ArrayBufferModule$1 = arrayBuffer; + +var NATIVE_ARRAY_BUFFER = arrayBufferNative; // `DataView` constructor +// https://tc39.es/ecma262/#sec-dataview-constructor + + +$$3N({ + global: true, + forced: !NATIVE_ARRAY_BUFFER +}, { + DataView: ArrayBufferModule$1.DataView +}); + +var $$3M = _export; + +var fails$Q = fails$15; + +var FORCED$r = fails$Q(function () { + return new Date(16e11).getYear() !== 120; +}); +var getFullYear = Date.prototype.getFullYear; // `Date.prototype.getYear` method +// https://tc39.es/ecma262/#sec-date.prototype.getyear + +$$3M({ + target: 'Date', + proto: true, + forced: FORCED$r +}, { + getYear: function getYear() { + return getFullYear.call(this) - 1900; + } +}); + +var $$3L = _export; // `Date.now` method +// https://tc39.es/ecma262/#sec-date.now + + +$$3L({ + target: 'Date', + stat: true +}, { + now: function now() { + return new Date().getTime(); + } +}); + +var $$3K = _export; + +var toIntegerOrInfinity$9 = toIntegerOrInfinity$i; + +var getTime$2 = Date.prototype.getTime; +var setFullYear = Date.prototype.setFullYear; // `Date.prototype.setYear` method +// https://tc39.es/ecma262/#sec-date.prototype.setyear + +$$3K({ + target: 'Date', + proto: true +}, { + setYear: function setYear(year) { + // validate + getTime$2.call(this); + var yi = toIntegerOrInfinity$9(year); + var yyyy = 0 <= yi && yi <= 99 ? yi + 1900 : yi; + return setFullYear.call(this, yyyy); + } +}); + +var $$3J = _export; // `Date.prototype.toGMTString` method +// https://tc39.es/ecma262/#sec-date.prototype.togmtstring + + +$$3J({ + target: 'Date', + proto: true +}, { + toGMTString: Date.prototype.toUTCString +}); + +var toIntegerOrInfinity$8 = toIntegerOrInfinity$i; + +var toString$p = toString$t; + +var requireObjectCoercible$g = requireObjectCoercible$j; // `String.prototype.repeat` method implementation +// https://tc39.es/ecma262/#sec-string.prototype.repeat + + +var stringRepeat = function repeat(count) { + var str = toString$p(requireObjectCoercible$g(this)); + var result = ''; + var n = toIntegerOrInfinity$8(count); + if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions'); + + for (; n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str; + + return result; +}; + +// https://github.com/tc39/proposal-string-pad-start-end +var toLength$8 = toLength$d; + +var toString$o = toString$t; + +var repeat$2 = stringRepeat; + +var requireObjectCoercible$f = requireObjectCoercible$j; + +var ceil$1 = Math.ceil; // `String.prototype.{ padStart, padEnd }` methods implementation + +var createMethod$5 = function (IS_END) { + return function ($this, maxLength, fillString) { + var S = toString$o(requireObjectCoercible$f($this)); + var intMaxLength = toLength$8(maxLength); + var stringLength = S.length; + var fillStr = fillString === undefined ? ' ' : toString$o(fillString); + var fillLen, stringFiller; + if (intMaxLength <= stringLength || fillStr == '') return S; + fillLen = intMaxLength - stringLength; + stringFiller = repeat$2.call(fillStr, ceil$1(fillLen / fillStr.length)); + if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen); + return IS_END ? S + stringFiller : stringFiller + S; + }; +}; + +var stringPad = { + // `String.prototype.padStart` method + // https://tc39.es/ecma262/#sec-string.prototype.padstart + start: createMethod$5(false), + // `String.prototype.padEnd` method + // https://tc39.es/ecma262/#sec-string.prototype.padend + end: createMethod$5(true) +}; + +var fails$P = fails$15; + +var padStart = stringPad.start; + +var abs$6 = Math.abs; +var DatePrototype$2 = Date.prototype; +var getTime$1 = DatePrototype$2.getTime; +var nativeDateToISOString = DatePrototype$2.toISOString; // `Date.prototype.toISOString` method implementation +// https://tc39.es/ecma262/#sec-date.prototype.toisostring +// PhantomJS / old WebKit fails here: + +var dateToIsoString = fails$P(function () { + return nativeDateToISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z'; +}) || !fails$P(function () { + nativeDateToISOString.call(new Date(NaN)); +}) ? function toISOString() { + if (!isFinite(getTime$1.call(this))) throw RangeError('Invalid time value'); + var date = this; + var year = date.getUTCFullYear(); + var milliseconds = date.getUTCMilliseconds(); + var sign = year < 0 ? '-' : year > 9999 ? '+' : ''; + return sign + padStart(abs$6(year), sign ? 6 : 4, 0) + '-' + padStart(date.getUTCMonth() + 1, 2, 0) + '-' + padStart(date.getUTCDate(), 2, 0) + 'T' + padStart(date.getUTCHours(), 2, 0) + ':' + padStart(date.getUTCMinutes(), 2, 0) + ':' + padStart(date.getUTCSeconds(), 2, 0) + '.' + padStart(milliseconds, 3, 0) + 'Z'; +} : nativeDateToISOString; + +var $$3I = _export; + +var toISOString = dateToIsoString; // `Date.prototype.toISOString` method +// https://tc39.es/ecma262/#sec-date.prototype.toisostring +// PhantomJS / old WebKit has a broken implementations + + +$$3I({ + target: 'Date', + proto: true, + forced: Date.prototype.toISOString !== toISOString +}, { + toISOString: toISOString +}); + +var $$3H = _export; + +var fails$O = fails$15; + +var toObject$l = toObject$A; + +var toPrimitive$1 = toPrimitive$3; + +var FORCED$q = fails$O(function () { + return new Date(NaN).toJSON() !== null || Date.prototype.toJSON.call({ + toISOString: function () { + return 1; + } + }) !== 1; +}); // `Date.prototype.toJSON` method +// https://tc39.es/ecma262/#sec-date.prototype.tojson + +$$3H({ + target: 'Date', + proto: true, + forced: FORCED$q +}, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + toJSON: function toJSON(key) { + var O = toObject$l(this); + var pv = toPrimitive$1(O, 'number'); + return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString(); + } +}); + +var anObject$1p = anObject$1C; + +var ordinaryToPrimitive = ordinaryToPrimitive$2; // `Date.prototype[@@toPrimitive](hint)` method implementation +// https://tc39.es/ecma262/#sec-date.prototype-@@toprimitive + + +var dateToPrimitive$1 = function (hint) { + anObject$1p(this); + if (hint === 'string' || hint === 'default') hint = 'string';else if (hint !== 'number') throw TypeError('Incorrect hint'); + return ordinaryToPrimitive(this, hint); +}; + +var redefine$e = redefine$l.exports; + +var dateToPrimitive = dateToPrimitive$1; + +var wellKnownSymbol$m = wellKnownSymbol$G; + +var TO_PRIMITIVE = wellKnownSymbol$m('toPrimitive'); +var DatePrototype$1 = Date.prototype; // `Date.prototype[@@toPrimitive]` method +// https://tc39.es/ecma262/#sec-date.prototype-@@toprimitive + +if (!(TO_PRIMITIVE in DatePrototype$1)) { + redefine$e(DatePrototype$1, TO_PRIMITIVE, dateToPrimitive); +} + +var redefine$d = redefine$l.exports; + +var DatePrototype = Date.prototype; +var INVALID_DATE = 'Invalid Date'; +var TO_STRING$1 = 'toString'; +var nativeDateToString = DatePrototype[TO_STRING$1]; +var getTime = DatePrototype.getTime; // `Date.prototype.toString` method +// https://tc39.es/ecma262/#sec-date.prototype.tostring + +if (String(new Date(NaN)) != INVALID_DATE) { + redefine$d(DatePrototype, TO_STRING$1, function toString() { + var value = getTime.call(this); // eslint-disable-next-line no-self-compare -- NaN check + + return value === value ? nativeDateToString.call(this) : INVALID_DATE; + }); +} + +var $$3G = _export; + +var toString$n = toString$t; + +var raw = /[\w*+\-./@]/; + +var hex$1 = function (code, length) { + var result = code.toString(16); + + while (result.length < length) result = '0' + result; + + return result; +}; // `escape` method +// https://tc39.es/ecma262/#sec-escape-string + + +$$3G({ + global: true +}, { + escape: function escape(string) { + var str = toString$n(string); + var result = ''; + var length = str.length; + var index = 0; + var chr, code; + + while (index < length) { + chr = str.charAt(index++); + + if (raw.test(chr)) { + result += chr; + } else { + code = chr.charCodeAt(0); + + if (code < 256) { + result += '%' + hex$1(code, 2); + } else { + result += '%u' + hex$1(code, 4).toUpperCase(); + } + } + } + + return result; + } +}); + +var aCallable$J = aCallable$Q; + +var isObject$p = isObject$C; + +var slice$2 = [].slice; +var factories = {}; + +var construct = function (C, argsLength, args) { + if (!(argsLength in factories)) { + for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']'; // eslint-disable-next-line no-new-func -- we have no proper alternatives, IE8- only + + + factories[argsLength] = Function('C,a', 'return new C(' + list.join(',') + ')'); + } + + return factories[argsLength](C, args); +}; // `Function.prototype.bind` method implementation +// https://tc39.es/ecma262/#sec-function.prototype.bind + + +var functionBind = Function.bind || function bind(that +/* , ...args */ +) { + var fn = aCallable$J(this); + var partArgs = slice$2.call(arguments, 1); + + var boundFunction = function bound() { + var args = partArgs.concat(slice$2.call(arguments)); + return this instanceof boundFunction ? construct(fn, args.length, args) : fn.apply(that, args); + }; + + if (isObject$p(fn.prototype)) boundFunction.prototype = fn.prototype; + return boundFunction; +}; + +var $$3F = _export; + +var bind$m = functionBind; // `Function.prototype.bind` method +// https://tc39.es/ecma262/#sec-function.prototype.bind + + +$$3F({ + target: 'Function', + proto: true +}, { + bind: bind$m +}); + +var isCallable$g = isCallable$z; + +var isObject$o = isObject$C; + +var definePropertyModule$5 = objectDefineProperty; + +var getPrototypeOf$9 = objectGetPrototypeOf$1; + +var wellKnownSymbol$l = wellKnownSymbol$G; + +var HAS_INSTANCE = wellKnownSymbol$l('hasInstance'); +var FunctionPrototype$1 = Function.prototype; // `Function.prototype[@@hasInstance]` method +// https://tc39.es/ecma262/#sec-function.prototype-@@hasinstance + +if (!(HAS_INSTANCE in FunctionPrototype$1)) { + definePropertyModule$5.f(FunctionPrototype$1, HAS_INSTANCE, { + value: function (O) { + if (!isCallable$g(this) || !isObject$o(O)) return false; + if (!isObject$o(this.prototype)) return O instanceof this; // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this: + + while (O = getPrototypeOf$9(O)) if (this.prototype === O) return true; + + return false; + } + }); +} + +var DESCRIPTORS$p = descriptors; + +var FUNCTION_NAME_EXISTS = functionName.EXISTS; + +var defineProperty$b = objectDefineProperty.f; + +var FunctionPrototype = Function.prototype; +var FunctionPrototypeToString = FunctionPrototype.toString; +var nameRE = /^\s*function ([^ (]*)/; +var NAME = 'name'; // Function instances `.name` property +// https://tc39.es/ecma262/#sec-function-instances-name + +if (DESCRIPTORS$p && !FUNCTION_NAME_EXISTS) { + defineProperty$b(FunctionPrototype, NAME, { + configurable: true, + get: function () { + try { + return FunctionPrototypeToString.call(this).match(nameRE)[1]; + } catch (error) { + return ''; + } + } + }); +} + +var $$3E = _export; + +var global$z = global$R; // `globalThis` object +// https://tc39.es/ecma262/#sec-globalthis + + +$$3E({ + global: true +}, { + globalThis: global$z +}); + +var $$3D = _export; + +var getBuiltIn$q = getBuiltIn$y; + +var fails$N = fails$15; + +var $stringify = getBuiltIn$q('JSON', 'stringify'); +var re = /[\uD800-\uDFFF]/g; +var low = /^[\uD800-\uDBFF]$/; +var hi = /^[\uDC00-\uDFFF]$/; + +var fix = function (match, offset, string) { + var prev = string.charAt(offset - 1); + var next = string.charAt(offset + 1); + + if (low.test(match) && !hi.test(next) || hi.test(match) && !low.test(prev)) { + return '\\u' + match.charCodeAt(0).toString(16); + } + + return match; +}; + +var FORCED$p = fails$N(function () { + return $stringify('\uDF06\uD834') !== '"\\udf06\\ud834"' || $stringify('\uDEAD') !== '"\\udead"'; +}); + +if ($stringify) { + // `JSON.stringify` method + // https://tc39.es/ecma262/#sec-json.stringify + // https://github.com/tc39/proposal-well-formed-stringify + $$3D({ + target: 'JSON', + stat: true, + forced: FORCED$p + }, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + stringify: function stringify(it, replacer, space) { + var result = $stringify.apply(null, arguments); + return typeof result == 'string' ? result.replace(re, fix) : result; + } + }); +} + +var global$y = global$R; + +var setToStringTag$6 = setToStringTag$b; // JSON[@@toStringTag] property +// https://tc39.es/ecma262/#sec-json-@@tostringtag + + +setToStringTag$6(global$y.JSON, 'JSON', true); + +var internalMetadata = {exports: {}}; + +var fails$M = fails$15; + +var freezing = !fails$M(function () { + // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing + return Object.isExtensible(Object.preventExtensions({})); +}); + +var $$3C = _export; + +var hiddenKeys = hiddenKeys$6; + +var isObject$n = isObject$C; + +var hasOwn$b = hasOwnProperty_1; + +var defineProperty$a = objectDefineProperty.f; + +var getOwnPropertyNamesModule = objectGetOwnPropertyNames; + +var getOwnPropertyNamesExternalModule = objectGetOwnPropertyNamesExternal; + +var uid = uid$5; + +var FREEZING$4 = freezing; + +var REQUIRED = false; +var METADATA = uid('meta'); +var id$1 = 0; // eslint-disable-next-line es/no-object-isextensible -- safe + +var isExtensible$1 = Object.isExtensible || function () { + return true; +}; + +var setMetadata = function (it) { + defineProperty$a(it, METADATA, { + value: { + objectID: 'O' + id$1++, + // object ID + weakData: {} // weak collections IDs + + } + }); +}; + +var fastKey$1 = function (it, create) { + // return a primitive with prefix + if (!isObject$n(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; + + if (!hasOwn$b(it, METADATA)) { + // can't set metadata to uncaught frozen object + if (!isExtensible$1(it)) return 'F'; // not necessary to add metadata + + if (!create) return 'E'; // add missing metadata + + setMetadata(it); // return object ID + } + + return it[METADATA].objectID; +}; + +var getWeakData$1 = function (it, create) { + if (!hasOwn$b(it, METADATA)) { + // can't set metadata to uncaught frozen object + if (!isExtensible$1(it)) return true; // not necessary to add metadata + + if (!create) return false; // add missing metadata + + setMetadata(it); // return the store of weak collections IDs + } + + return it[METADATA].weakData; +}; // add metadata on freeze-family methods calling + + +var onFreeze$3 = function (it) { + if (FREEZING$4 && REQUIRED && isExtensible$1(it) && !hasOwn$b(it, METADATA)) setMetadata(it); + return it; +}; + +var enable = function () { + meta.enable = function () { + /* empty */ + }; + + REQUIRED = true; + var getOwnPropertyNames = getOwnPropertyNamesModule.f; + var splice = [].splice; + var test = {}; + test[METADATA] = 1; // prevent exposing of metadata key + + if (getOwnPropertyNames(test).length) { + getOwnPropertyNamesModule.f = function (it) { + var result = getOwnPropertyNames(it); + + for (var i = 0, length = result.length; i < length; i++) { + if (result[i] === METADATA) { + splice.call(result, i, 1); + break; + } + } + + return result; + }; + + $$3C({ + target: 'Object', + stat: true, + forced: true + }, { + getOwnPropertyNames: getOwnPropertyNamesExternalModule.f + }); + } +}; + +var meta = internalMetadata.exports = { + enable: enable, + fastKey: fastKey$1, + getWeakData: getWeakData$1, + onFreeze: onFreeze$3 +}; +hiddenKeys[METADATA] = true; + +var isCallable$f = isCallable$z; + +var isObject$m = isObject$C; + +var setPrototypeOf$3 = objectSetPrototypeOf$1; // makes subclassing work correct for wrapped built-ins + + +var inheritIfRequired$4 = function ($this, dummy, Wrapper) { + var NewTarget, NewTargetPrototype; + if ( // it can work only with native `setPrototypeOf` + setPrototypeOf$3 && // we haven't completely correct pre-ES6 way for getting `new.target`, so use this + isCallable$f(NewTarget = dummy.constructor) && NewTarget !== Wrapper && isObject$m(NewTargetPrototype = NewTarget.prototype) && NewTargetPrototype !== Wrapper.prototype) setPrototypeOf$3($this, NewTargetPrototype); + return $this; +}; + +var $$3B = _export; + +var global$x = global$R; + +var isForced$3 = isForced_1; + +var redefine$c = redefine$l.exports; + +var InternalMetadataModule$1 = internalMetadata.exports; + +var iterate$G = iterate$I; + +var anInstance$9 = anInstance$b; + +var isCallable$e = isCallable$z; + +var isObject$l = isObject$C; + +var fails$L = fails$15; + +var checkCorrectnessOfIteration$2 = checkCorrectnessOfIteration$4; + +var setToStringTag$5 = setToStringTag$b; + +var inheritIfRequired$3 = inheritIfRequired$4; + +var collection$4 = function (CONSTRUCTOR_NAME, wrapper, common) { + var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1; + var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1; + var ADDER = IS_MAP ? 'set' : 'add'; + var NativeConstructor = global$x[CONSTRUCTOR_NAME]; + var NativePrototype = NativeConstructor && NativeConstructor.prototype; + var Constructor = NativeConstructor; + var exported = {}; + + var fixMethod = function (KEY) { + var nativeMethod = NativePrototype[KEY]; + redefine$c(NativePrototype, KEY, KEY == 'add' ? function add(value) { + nativeMethod.call(this, value === 0 ? 0 : value); + return this; + } : KEY == 'delete' ? function (key) { + return IS_WEAK && !isObject$l(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key); + } : KEY == 'get' ? function get(key) { + return IS_WEAK && !isObject$l(key) ? undefined : nativeMethod.call(this, key === 0 ? 0 : key); + } : KEY == 'has' ? function has(key) { + return IS_WEAK && !isObject$l(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key); + } : function set(key, value) { + nativeMethod.call(this, key === 0 ? 0 : key, value); + return this; + }); + }; + + var REPLACE = isForced$3(CONSTRUCTOR_NAME, !isCallable$e(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails$L(function () { + new NativeConstructor().entries().next(); + }))); + + if (REPLACE) { + // create collection constructor + Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER); + InternalMetadataModule$1.enable(); + } else if (isForced$3(CONSTRUCTOR_NAME, true)) { + var instance = new Constructor(); // early implementations not supports chaining + + var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance; // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false + + var THROWS_ON_PRIMITIVES = fails$L(function () { + instance.has(1); + }); // most early implementations doesn't supports iterables, most modern - not close it correctly + // eslint-disable-next-line no-new -- required for testing + + var ACCEPT_ITERABLES = checkCorrectnessOfIteration$2(function (iterable) { + new NativeConstructor(iterable); + }); // for early implementations -0 and +0 not the same + + var BUGGY_ZERO = !IS_WEAK && fails$L(function () { + // V8 ~ Chromium 42- fails only with 5+ elements + var $instance = new NativeConstructor(); + var index = 5; + + while (index--) $instance[ADDER](index, index); + + return !$instance.has(-0); + }); + + if (!ACCEPT_ITERABLES) { + Constructor = wrapper(function (dummy, iterable) { + anInstance$9(dummy, Constructor, CONSTRUCTOR_NAME); + var that = inheritIfRequired$3(new NativeConstructor(), dummy, Constructor); + if (iterable != undefined) iterate$G(iterable, that[ADDER], { + that: that, + AS_ENTRIES: IS_MAP + }); + return that; + }); + Constructor.prototype = NativePrototype; + NativePrototype.constructor = Constructor; + } + + if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) { + fixMethod('delete'); + fixMethod('has'); + IS_MAP && fixMethod('get'); + } + + if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER); // weak collections should not contains .clear method + + if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear; + } + + exported[CONSTRUCTOR_NAME] = Constructor; + $$3B({ + global: true, + forced: Constructor != NativeConstructor + }, exported); + setToStringTag$5(Constructor, CONSTRUCTOR_NAME); + if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP); + return Constructor; +}; + +var defineProperty$9 = objectDefineProperty.f; + +var create$a = objectCreate$1; + +var redefineAll$8 = redefineAll$a; + +var bind$l = functionBindContext; + +var anInstance$8 = anInstance$b; + +var iterate$F = iterate$I; + +var defineIterator$1 = defineIterator$3; + +var setSpecies$4 = setSpecies$7; + +var DESCRIPTORS$o = descriptors; + +var fastKey = internalMetadata.exports.fastKey; + +var InternalStateModule$f = internalState; + +var setInternalState$f = InternalStateModule$f.set; +var internalStateGetterFor$1 = InternalStateModule$f.getterFor; +var collectionStrong$2 = { + getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) { + var C = wrapper(function (that, iterable) { + anInstance$8(that, C, CONSTRUCTOR_NAME); + setInternalState$f(that, { + type: CONSTRUCTOR_NAME, + index: create$a(null), + first: undefined, + last: undefined, + size: 0 + }); + if (!DESCRIPTORS$o) that.size = 0; + if (iterable != undefined) iterate$F(iterable, that[ADDER], { + that: that, + AS_ENTRIES: IS_MAP + }); + }); + var getInternalState = internalStateGetterFor$1(CONSTRUCTOR_NAME); + + var define = function (that, key, value) { + var state = getInternalState(that); + var entry = getEntry(that, key); + var previous, index; // change existing entry + + if (entry) { + entry.value = value; // create new entry + } else { + state.last = entry = { + index: index = fastKey(key, true), + key: key, + value: value, + previous: previous = state.last, + next: undefined, + removed: false + }; + if (!state.first) state.first = entry; + if (previous) previous.next = entry; + if (DESCRIPTORS$o) state.size++;else that.size++; // add to index + + if (index !== 'F') state.index[index] = entry; + } + + return that; + }; + + var getEntry = function (that, key) { + var state = getInternalState(that); // fast case + + var index = fastKey(key); + var entry; + if (index !== 'F') return state.index[index]; // frozen object case + + for (entry = state.first; entry; entry = entry.next) { + if (entry.key == key) return entry; + } + }; + + redefineAll$8(C.prototype, { + // `{ Map, Set }.prototype.clear()` methods + // https://tc39.es/ecma262/#sec-map.prototype.clear + // https://tc39.es/ecma262/#sec-set.prototype.clear + clear: function clear() { + var that = this; + var state = getInternalState(that); + var data = state.index; + var entry = state.first; + + while (entry) { + entry.removed = true; + if (entry.previous) entry.previous = entry.previous.next = undefined; + delete data[entry.index]; + entry = entry.next; + } + + state.first = state.last = undefined; + if (DESCRIPTORS$o) state.size = 0;else that.size = 0; + }, + // `{ Map, Set }.prototype.delete(key)` methods + // https://tc39.es/ecma262/#sec-map.prototype.delete + // https://tc39.es/ecma262/#sec-set.prototype.delete + 'delete': function (key) { + var that = this; + var state = getInternalState(that); + var entry = getEntry(that, key); + + if (entry) { + var next = entry.next; + var prev = entry.previous; + delete state.index[entry.index]; + entry.removed = true; + if (prev) prev.next = next; + if (next) next.previous = prev; + if (state.first == entry) state.first = next; + if (state.last == entry) state.last = prev; + if (DESCRIPTORS$o) state.size--;else that.size--; + } + + return !!entry; + }, + // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods + // https://tc39.es/ecma262/#sec-map.prototype.foreach + // https://tc39.es/ecma262/#sec-set.prototype.foreach + forEach: function forEach(callbackfn + /* , that = undefined */ + ) { + var state = getInternalState(this); + var boundFunction = bind$l(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + var entry; + + while (entry = entry ? entry.next : state.first) { + boundFunction(entry.value, entry.key, this); // revert to the last existing entry + + while (entry && entry.removed) entry = entry.previous; + } + }, + // `{ Map, Set}.prototype.has(key)` methods + // https://tc39.es/ecma262/#sec-map.prototype.has + // https://tc39.es/ecma262/#sec-set.prototype.has + has: function has(key) { + return !!getEntry(this, key); + } + }); + redefineAll$8(C.prototype, IS_MAP ? { + // `Map.prototype.get(key)` method + // https://tc39.es/ecma262/#sec-map.prototype.get + get: function get(key) { + var entry = getEntry(this, key); + return entry && entry.value; + }, + // `Map.prototype.set(key, value)` method + // https://tc39.es/ecma262/#sec-map.prototype.set + set: function set(key, value) { + return define(this, key === 0 ? 0 : key, value); + } + } : { + // `Set.prototype.add(value)` method + // https://tc39.es/ecma262/#sec-set.prototype.add + add: function add(value) { + return define(this, value = value === 0 ? 0 : value, value); + } + }); + if (DESCRIPTORS$o) defineProperty$9(C.prototype, 'size', { + get: function () { + return getInternalState(this).size; + } + }); + return C; + }, + setStrong: function (C, CONSTRUCTOR_NAME, IS_MAP) { + var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator'; + var getInternalCollectionState = internalStateGetterFor$1(CONSTRUCTOR_NAME); + var getInternalIteratorState = internalStateGetterFor$1(ITERATOR_NAME); // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods + // https://tc39.es/ecma262/#sec-map.prototype.entries + // https://tc39.es/ecma262/#sec-map.prototype.keys + // https://tc39.es/ecma262/#sec-map.prototype.values + // https://tc39.es/ecma262/#sec-map.prototype-@@iterator + // https://tc39.es/ecma262/#sec-set.prototype.entries + // https://tc39.es/ecma262/#sec-set.prototype.keys + // https://tc39.es/ecma262/#sec-set.prototype.values + // https://tc39.es/ecma262/#sec-set.prototype-@@iterator + + defineIterator$1(C, CONSTRUCTOR_NAME, function (iterated, kind) { + setInternalState$f(this, { + type: ITERATOR_NAME, + target: iterated, + state: getInternalCollectionState(iterated), + kind: kind, + last: undefined + }); + }, function () { + var state = getInternalIteratorState(this); + var kind = state.kind; + var entry = state.last; // revert to the last existing entry + + while (entry && entry.removed) entry = entry.previous; // get next entry + + + if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) { + // or finish the iteration + state.target = undefined; + return { + value: undefined, + done: true + }; + } // return step by kind + + + if (kind == 'keys') return { + value: entry.key, + done: false + }; + if (kind == 'values') return { + value: entry.value, + done: false + }; + return { + value: [entry.key, entry.value], + done: false + }; + }, IS_MAP ? 'entries' : 'values', !IS_MAP, true); // `{ Map, Set }.prototype[@@species]` accessors + // https://tc39.es/ecma262/#sec-get-map-@@species + // https://tc39.es/ecma262/#sec-get-set-@@species + + setSpecies$4(CONSTRUCTOR_NAME); + } +}; + +var collection$3 = collection$4; + +var collectionStrong$1 = collectionStrong$2; // `Map` constructor +// https://tc39.es/ecma262/#sec-map-objects + + +var es_map = collection$3('Map', function (init) { + return function Map() { + return init(this, arguments.length ? arguments[0] : undefined); + }; +}, collectionStrong$1); + +var log$7 = Math.log; // `Math.log1p` method implementation +// https://tc39.es/ecma262/#sec-math.log1p +// eslint-disable-next-line es/no-math-log1p -- safe + +var mathLog1p = Math.log1p || function log1p(x) { + return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : log$7(1 + x); +}; + +var $$3A = _export; + +var log1p$1 = mathLog1p; // eslint-disable-next-line es/no-math-acosh -- required for testing + + +var $acosh = Math.acosh; +var log$6 = Math.log; +var sqrt$2 = Math.sqrt; +var LN2$1 = Math.LN2; +var FORCED$o = !$acosh // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509 +|| Math.floor($acosh(Number.MAX_VALUE)) != 710 // Tor Browser bug: Math.acosh(Infinity) -> NaN +|| $acosh(Infinity) != Infinity; // `Math.acosh` method +// https://tc39.es/ecma262/#sec-math.acosh + +$$3A({ + target: 'Math', + stat: true, + forced: FORCED$o +}, { + acosh: function acosh(x) { + return (x = +x) < 1 ? NaN : x > 94906265.62425156 ? log$6(x) + LN2$1 : log1p$1(x - 1 + sqrt$2(x - 1) * sqrt$2(x + 1)); + } +}); + +var $$3z = _export; // eslint-disable-next-line es/no-math-asinh -- required for testing + + +var $asinh = Math.asinh; +var log$5 = Math.log; +var sqrt$1 = Math.sqrt; + +function asinh(x) { + return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : log$5(x + sqrt$1(x * x + 1)); +} // `Math.asinh` method +// https://tc39.es/ecma262/#sec-math.asinh +// Tor Browser bug: Math.asinh(0) -> -0 + + +$$3z({ + target: 'Math', + stat: true, + forced: !($asinh && 1 / $asinh(0) > 0) +}, { + asinh: asinh +}); + +var $$3y = _export; // eslint-disable-next-line es/no-math-atanh -- required for testing + + +var $atanh = Math.atanh; +var log$4 = Math.log; // `Math.atanh` method +// https://tc39.es/ecma262/#sec-math.atanh +// Tor Browser bug: Math.atanh(-0) -> 0 + +$$3y({ + target: 'Math', + stat: true, + forced: !($atanh && 1 / $atanh(-0) < 0) +}, { + atanh: function atanh(x) { + return (x = +x) == 0 ? x : log$4((1 + x) / (1 - x)) / 2; + } +}); + +// `Math.sign` method implementation +// https://tc39.es/ecma262/#sec-math.sign +// eslint-disable-next-line es/no-math-sign -- safe +var mathSign = Math.sign || function sign(x) { + // eslint-disable-next-line no-self-compare -- NaN check + return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1; +}; + +var $$3x = _export; + +var sign$2 = mathSign; + +var abs$5 = Math.abs; +var pow$3 = Math.pow; // `Math.cbrt` method +// https://tc39.es/ecma262/#sec-math.cbrt + +$$3x({ + target: 'Math', + stat: true +}, { + cbrt: function cbrt(x) { + return sign$2(x = +x) * pow$3(abs$5(x), 1 / 3); + } +}); + +var $$3w = _export; + +var floor$7 = Math.floor; +var log$3 = Math.log; +var LOG2E = Math.LOG2E; // `Math.clz32` method +// https://tc39.es/ecma262/#sec-math.clz32 + +$$3w({ + target: 'Math', + stat: true +}, { + clz32: function clz32(x) { + return (x >>>= 0) ? 31 - floor$7(log$3(x + 0.5) * LOG2E) : 32; + } +}); + +// eslint-disable-next-line es/no-math-expm1 -- safe +var $expm1 = Math.expm1; +var exp$2 = Math.exp; // `Math.expm1` method implementation +// https://tc39.es/ecma262/#sec-math.expm1 + +var mathExpm1 = !$expm1 // Old FF bug +|| $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168 // Tor Browser bug +|| $expm1(-2e-17) != -2e-17 ? function expm1(x) { + return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : exp$2(x) - 1; +} : $expm1; + +var $$3v = _export; + +var expm1$3 = mathExpm1; // eslint-disable-next-line es/no-math-cosh -- required for testing + + +var $cosh = Math.cosh; +var abs$4 = Math.abs; +var E$1 = Math.E; // `Math.cosh` method +// https://tc39.es/ecma262/#sec-math.cosh + +$$3v({ + target: 'Math', + stat: true, + forced: !$cosh || $cosh(710) === Infinity +}, { + cosh: function cosh(x) { + var t = expm1$3(abs$4(x) - 1) + 1; + return (t + 1 / (t * E$1 * E$1)) * (E$1 / 2); + } +}); + +var $$3u = _export; + +var expm1$2 = mathExpm1; // `Math.expm1` method +// https://tc39.es/ecma262/#sec-math.expm1 +// eslint-disable-next-line es/no-math-expm1 -- required for testing + + +$$3u({ + target: 'Math', + stat: true, + forced: expm1$2 != Math.expm1 +}, { + expm1: expm1$2 +}); + +var sign$1 = mathSign; + +var abs$3 = Math.abs; +var pow$2 = Math.pow; +var EPSILON = pow$2(2, -52); +var EPSILON32 = pow$2(2, -23); +var MAX32 = pow$2(2, 127) * (2 - EPSILON32); +var MIN32 = pow$2(2, -126); + +var roundTiesToEven = function (n) { + return n + 1 / EPSILON - 1 / EPSILON; +}; // `Math.fround` method implementation +// https://tc39.es/ecma262/#sec-math.fround +// eslint-disable-next-line es/no-math-fround -- safe + + +var mathFround = Math.fround || function fround(x) { + var $abs = abs$3(x); + var $sign = sign$1(x); + var a, result; + if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32; + a = (1 + EPSILON32 / EPSILON) * $abs; + result = a - (a - $abs); // eslint-disable-next-line no-self-compare -- NaN check + + if (result > MAX32 || result != result) return $sign * Infinity; + return $sign * result; +}; + +var $$3t = _export; + +var fround$1 = mathFround; // `Math.fround` method +// https://tc39.es/ecma262/#sec-math.fround + + +$$3t({ + target: 'Math', + stat: true +}, { + fround: fround$1 +}); + +var $$3s = _export; // eslint-disable-next-line es/no-math-hypot -- required for testing + + +var $hypot = Math.hypot; +var abs$2 = Math.abs; +var sqrt = Math.sqrt; // Chrome 77 bug +// https://bugs.chromium.org/p/v8/issues/detail?id=9546 + +var BUGGY = !!$hypot && $hypot(Infinity, NaN) !== Infinity; // `Math.hypot` method +// https://tc39.es/ecma262/#sec-math.hypot + +$$3s({ + target: 'Math', + stat: true, + forced: BUGGY +}, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + hypot: function hypot(value1, value2) { + var sum = 0; + var i = 0; + var aLen = arguments.length; + var larg = 0; + var arg, div; + + while (i < aLen) { + arg = abs$2(arguments[i++]); + + if (larg < arg) { + div = larg / arg; + sum = sum * div * div + 1; + larg = arg; + } else if (arg > 0) { + div = arg / larg; + sum += div * div; + } else sum += arg; + } + + return larg === Infinity ? Infinity : larg * sqrt(sum); + } +}); + +var $$3r = _export; + +var fails$K = fails$15; // eslint-disable-next-line es/no-math-imul -- required for testing + + +var $imul = Math.imul; +var FORCED$n = fails$K(function () { + return $imul(0xFFFFFFFF, 5) != -5 || $imul.length != 2; +}); // `Math.imul` method +// https://tc39.es/ecma262/#sec-math.imul +// some WebKit versions fails with big numbers, some has wrong arity + +$$3r({ + target: 'Math', + stat: true, + forced: FORCED$n +}, { + imul: function imul(x, y) { + var UINT16 = 0xFFFF; + var xn = +x; + var yn = +y; + var xl = UINT16 & xn; + var yl = UINT16 & yn; + return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0); + } +}); + +var $$3q = _export; + +var log$2 = Math.log; +var LOG10E = Math.LOG10E; // `Math.log10` method +// https://tc39.es/ecma262/#sec-math.log10 + +$$3q({ + target: 'Math', + stat: true +}, { + log10: function log10(x) { + return log$2(x) * LOG10E; + } +}); + +var $$3p = _export; + +var log1p = mathLog1p; // `Math.log1p` method +// https://tc39.es/ecma262/#sec-math.log1p + + +$$3p({ + target: 'Math', + stat: true +}, { + log1p: log1p +}); + +var $$3o = _export; + +var log$1 = Math.log; +var LN2 = Math.LN2; // `Math.log2` method +// https://tc39.es/ecma262/#sec-math.log2 + +$$3o({ + target: 'Math', + stat: true +}, { + log2: function log2(x) { + return log$1(x) / LN2; + } +}); + +var $$3n = _export; + +var sign = mathSign; // `Math.sign` method +// https://tc39.es/ecma262/#sec-math.sign + + +$$3n({ + target: 'Math', + stat: true +}, { + sign: sign +}); + +var $$3m = _export; + +var fails$J = fails$15; + +var expm1$1 = mathExpm1; + +var abs$1 = Math.abs; +var exp$1 = Math.exp; +var E = Math.E; +var FORCED$m = fails$J(function () { + // eslint-disable-next-line es/no-math-sinh -- required for testing + return Math.sinh(-2e-17) != -2e-17; +}); // `Math.sinh` method +// https://tc39.es/ecma262/#sec-math.sinh +// V8 near Chromium 38 has a problem with very small numbers + +$$3m({ + target: 'Math', + stat: true, + forced: FORCED$m +}, { + sinh: function sinh(x) { + return abs$1(x = +x) < 1 ? (expm1$1(x) - expm1$1(-x)) / 2 : (exp$1(x - 1) - exp$1(-x - 1)) * (E / 2); + } +}); + +var $$3l = _export; + +var expm1 = mathExpm1; + +var exp = Math.exp; // `Math.tanh` method +// https://tc39.es/ecma262/#sec-math.tanh + +$$3l({ + target: 'Math', + stat: true +}, { + tanh: function tanh(x) { + var a = expm1(x = +x); + var b = expm1(-x); + return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x)); + } +}); + +var setToStringTag$4 = setToStringTag$b; // Math[@@toStringTag] property +// https://tc39.es/ecma262/#sec-math-@@tostringtag + + +setToStringTag$4(Math, 'Math', true); + +var $$3k = _export; + +var ceil = Math.ceil; +var floor$6 = Math.floor; // `Math.trunc` method +// https://tc39.es/ecma262/#sec-math.trunc + +$$3k({ + target: 'Math', + stat: true +}, { + trunc: function trunc(it) { + return (it > 0 ? floor$6 : ceil)(it); + } +}); + +var valueOf = 1.0.valueOf; // `thisNumberValue` abstract operation +// https://tc39.es/ecma262/#sec-thisnumbervalue + +var thisNumberValue$3 = function (value) { + return valueOf.call(value); +}; + +// a string of all valid unicode whitespaces +var whitespaces$4 = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002' + '\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF'; + +var requireObjectCoercible$e = requireObjectCoercible$j; + +var toString$m = toString$t; + +var whitespaces$3 = whitespaces$4; + +var whitespace = '[' + whitespaces$3 + ']'; +var ltrim = RegExp('^' + whitespace + whitespace + '*'); +var rtrim = RegExp(whitespace + whitespace + '*$'); // `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation + +var createMethod$4 = function (TYPE) { + return function ($this) { + var string = toString$m(requireObjectCoercible$e($this)); + if (TYPE & 1) string = string.replace(ltrim, ''); + if (TYPE & 2) string = string.replace(rtrim, ''); + return string; + }; +}; + +var stringTrim = { + // `String.prototype.{ trimLeft, trimStart }` methods + // https://tc39.es/ecma262/#sec-string.prototype.trimstart + start: createMethod$4(1), + // `String.prototype.{ trimRight, trimEnd }` methods + // https://tc39.es/ecma262/#sec-string.prototype.trimend + end: createMethod$4(2), + // `String.prototype.trim` method + // https://tc39.es/ecma262/#sec-string.prototype.trim + trim: createMethod$4(3) +}; + +var DESCRIPTORS$n = descriptors; + +var global$w = global$R; + +var isForced$2 = isForced_1; + +var redefine$b = redefine$l.exports; + +var hasOwn$a = hasOwnProperty_1; + +var inheritIfRequired$2 = inheritIfRequired$4; + +var isSymbol$1 = isSymbol$5; + +var toPrimitive = toPrimitive$3; + +var fails$I = fails$15; + +var getOwnPropertyNames$4 = objectGetOwnPropertyNames.f; + +var getOwnPropertyDescriptor$7 = objectGetOwnPropertyDescriptor.f; + +var defineProperty$8 = objectDefineProperty.f; + +var thisNumberValue$2 = thisNumberValue$3; + +var trim$3 = stringTrim.trim; + +var NUMBER = 'Number'; +var NativeNumber = global$w[NUMBER]; +var NumberPrototype = NativeNumber.prototype; // `ToNumeric` abstract operation +// https://tc39.es/ecma262/#sec-tonumeric + +var toNumeric = function (value) { + var primValue = toPrimitive(value, 'number'); + return typeof primValue === 'bigint' ? primValue : toNumber(primValue); +}; // `ToNumber` abstract operation +// https://tc39.es/ecma262/#sec-tonumber + + +var toNumber = function (argument) { + var it = toPrimitive(argument, 'number'); + var first, third, radix, maxCode, digits, length, index, code; + if (isSymbol$1(it)) throw TypeError('Cannot convert a Symbol value to a number'); + + if (typeof it == 'string' && it.length > 2) { + it = trim$3(it); + first = it.charCodeAt(0); + + if (first === 43 || first === 45) { + third = it.charCodeAt(2); + if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix + } else if (first === 48) { + switch (it.charCodeAt(1)) { + case 66: + case 98: + radix = 2; + maxCode = 49; + break; + // fast equal of /^0b[01]+$/i + + case 79: + case 111: + radix = 8; + maxCode = 55; + break; + // fast equal of /^0o[0-7]+$/i + + default: + return +it; + } + + digits = it.slice(2); + length = digits.length; + + for (index = 0; index < length; index++) { + code = digits.charCodeAt(index); // parseInt parses a string to a first unavailable symbol + // but ToNumber should return NaN if a string contains unavailable symbols + + if (code < 48 || code > maxCode) return NaN; + } + + return parseInt(digits, radix); + } + } + + return +it; +}; // `Number` constructor +// https://tc39.es/ecma262/#sec-number-constructor + + +if (isForced$2(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) { + var NumberWrapper = function Number(value) { + var n = arguments.length < 1 ? 0 : NativeNumber(toNumeric(value)); + var dummy = this; // check on 1..constructor(foo) case + + return dummy instanceof NumberWrapper && fails$I(function () { + thisNumberValue$2(dummy); + }) ? inheritIfRequired$2(Object(n), dummy, NumberWrapper) : n; + }; + + for (var keys$1 = DESCRIPTORS$n ? getOwnPropertyNames$4(NativeNumber) : ( // ES3: + 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' + // ES2015 (in case, if modules with ES2015 Number statics required before): + 'EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,' + // ESNext + 'fromString,range').split(','), j = 0, key; keys$1.length > j; j++) { + if (hasOwn$a(NativeNumber, key = keys$1[j]) && !hasOwn$a(NumberWrapper, key)) { + defineProperty$8(NumberWrapper, key, getOwnPropertyDescriptor$7(NativeNumber, key)); + } + } + + NumberWrapper.prototype = NumberPrototype; + NumberPrototype.constructor = NumberWrapper; + redefine$b(global$w, NUMBER, NumberWrapper); +} + +var $$3j = _export; // `Number.EPSILON` constant +// https://tc39.es/ecma262/#sec-number.epsilon + + +$$3j({ + target: 'Number', + stat: true +}, { + EPSILON: Math.pow(2, -52) +}); + +var global$v = global$R; + +var globalIsFinite = global$v.isFinite; // `Number.isFinite` method +// https://tc39.es/ecma262/#sec-number.isfinite +// eslint-disable-next-line es/no-number-isfinite -- safe + +var numberIsFinite$2 = Number.isFinite || function isFinite(it) { + return typeof it == 'number' && globalIsFinite(it); +}; + +var $$3i = _export; + +var numberIsFinite$1 = numberIsFinite$2; // `Number.isFinite` method +// https://tc39.es/ecma262/#sec-number.isfinite + + +$$3i({ + target: 'Number', + stat: true +}, { + isFinite: numberIsFinite$1 +}); + +var isObject$k = isObject$C; + +var floor$5 = Math.floor; // `IsIntegralNumber` abstract operation +// https://tc39.es/ecma262/#sec-isintegralnumber +// eslint-disable-next-line es/no-number-isinteger -- safe + +var isIntegralNumber$3 = Number.isInteger || function isInteger(it) { + return !isObject$k(it) && isFinite(it) && floor$5(it) === it; +}; + +var $$3h = _export; + +var isIntegralNumber$2 = isIntegralNumber$3; // `Number.isInteger` method +// https://tc39.es/ecma262/#sec-number.isinteger + + +$$3h({ + target: 'Number', + stat: true +}, { + isInteger: isIntegralNumber$2 +}); + +var $$3g = _export; // `Number.isNaN` method +// https://tc39.es/ecma262/#sec-number.isnan + + +$$3g({ + target: 'Number', + stat: true +}, { + isNaN: function isNaN(number) { + // eslint-disable-next-line no-self-compare -- NaN check + return number != number; + } +}); + +var $$3f = _export; + +var isIntegralNumber$1 = isIntegralNumber$3; + +var abs = Math.abs; // `Number.isSafeInteger` method +// https://tc39.es/ecma262/#sec-number.issafeinteger + +$$3f({ + target: 'Number', + stat: true +}, { + isSafeInteger: function isSafeInteger(number) { + return isIntegralNumber$1(number) && abs(number) <= 0x1FFFFFFFFFFFFF; + } +}); + +var $$3e = _export; // `Number.MAX_SAFE_INTEGER` constant +// https://tc39.es/ecma262/#sec-number.max_safe_integer + + +$$3e({ + target: 'Number', + stat: true +}, { + MAX_SAFE_INTEGER: 0x1FFFFFFFFFFFFF +}); + +var $$3d = _export; // `Number.MIN_SAFE_INTEGER` constant +// https://tc39.es/ecma262/#sec-number.min_safe_integer + + +$$3d({ + target: 'Number', + stat: true +}, { + MIN_SAFE_INTEGER: -0x1FFFFFFFFFFFFF +}); + +var global$u = global$R; + +var fails$H = fails$15; + +var toString$l = toString$t; + +var trim$2 = stringTrim.trim; + +var whitespaces$2 = whitespaces$4; + +var $parseFloat$1 = global$u.parseFloat; +var Symbol$2 = global$u.Symbol; +var ITERATOR$5 = Symbol$2 && Symbol$2.iterator; +var FORCED$l = 1 / $parseFloat$1(whitespaces$2 + '-0') !== -Infinity // MS Edge 18- broken with boxed symbols +|| ITERATOR$5 && !fails$H(function () { + $parseFloat$1(Object(ITERATOR$5)); +}); // `parseFloat` method +// https://tc39.es/ecma262/#sec-parsefloat-string + +var numberParseFloat = FORCED$l ? function parseFloat(string) { + var trimmedString = trim$2(toString$l(string)); + var result = $parseFloat$1(trimmedString); + return result === 0 && trimmedString.charAt(0) == '-' ? -0 : result; +} : $parseFloat$1; + +var $$3c = _export; + +var parseFloat$1 = numberParseFloat; // `Number.parseFloat` method +// https://tc39.es/ecma262/#sec-number.parseFloat +// eslint-disable-next-line es/no-number-parsefloat -- required for testing + + +$$3c({ + target: 'Number', + stat: true, + forced: Number.parseFloat != parseFloat$1 +}, { + parseFloat: parseFloat$1 +}); + +var global$t = global$R; + +var fails$G = fails$15; + +var toString$k = toString$t; + +var trim$1 = stringTrim.trim; + +var whitespaces$1 = whitespaces$4; + +var $parseInt$1 = global$t.parseInt; +var Symbol$1 = global$t.Symbol; +var ITERATOR$4 = Symbol$1 && Symbol$1.iterator; +var hex = /^[+-]?0x/i; +var FORCED$k = $parseInt$1(whitespaces$1 + '08') !== 8 || $parseInt$1(whitespaces$1 + '0x16') !== 22 // MS Edge 18- broken with boxed symbols +|| ITERATOR$4 && !fails$G(function () { + $parseInt$1(Object(ITERATOR$4)); +}); // `parseInt` method +// https://tc39.es/ecma262/#sec-parseint-string-radix + +var numberParseInt = FORCED$k ? function parseInt(string, radix) { + var S = trim$1(toString$k(string)); + return $parseInt$1(S, radix >>> 0 || (hex.test(S) ? 16 : 10)); +} : $parseInt$1; + +var $$3b = _export; + +var parseInt$2 = numberParseInt; // `Number.parseInt` method +// https://tc39.es/ecma262/#sec-number.parseint +// eslint-disable-next-line es/no-number-parseint -- required for testing + + +$$3b({ + target: 'Number', + stat: true, + forced: Number.parseInt != parseInt$2 +}, { + parseInt: parseInt$2 +}); + +var $$3a = _export; + +var toIntegerOrInfinity$7 = toIntegerOrInfinity$i; + +var thisNumberValue$1 = thisNumberValue$3; + +var repeat$1 = stringRepeat; + +var fails$F = fails$15; + +var nativeToFixed = 1.0.toFixed; +var floor$4 = Math.floor; + +var pow$1 = function (x, n, acc) { + return n === 0 ? acc : n % 2 === 1 ? pow$1(x, n - 1, acc * x) : pow$1(x * x, n / 2, acc); +}; + +var log = function (x) { + var n = 0; + var x2 = x; + + while (x2 >= 4096) { + n += 12; + x2 /= 4096; + } + + while (x2 >= 2) { + n += 1; + x2 /= 2; + } + + return n; +}; + +var multiply = function (data, n, c) { + var index = -1; + var c2 = c; + + while (++index < 6) { + c2 += n * data[index]; + data[index] = c2 % 1e7; + c2 = floor$4(c2 / 1e7); + } +}; + +var divide = function (data, n) { + var index = 6; + var c = 0; + + while (--index >= 0) { + c += data[index]; + data[index] = floor$4(c / n); + c = c % n * 1e7; + } +}; + +var dataToString = function (data) { + var index = 6; + var s = ''; + + while (--index >= 0) { + if (s !== '' || index === 0 || data[index] !== 0) { + var t = String(data[index]); + s = s === '' ? t : s + repeat$1.call('0', 7 - t.length) + t; + } + } + + return s; +}; + +var FORCED$j = nativeToFixed && (0.00008.toFixed(3) !== '0.000' || 0.9.toFixed(0) !== '1' || 1.255.toFixed(2) !== '1.25' || 1000000000000000128.0.toFixed(0) !== '1000000000000000128') || !fails$F(function () { + // V8 ~ Android 4.3- + nativeToFixed.call({}); +}); // `Number.prototype.toFixed` method +// https://tc39.es/ecma262/#sec-number.prototype.tofixed + +$$3a({ + target: 'Number', + proto: true, + forced: FORCED$j +}, { + toFixed: function toFixed(fractionDigits) { + var number = thisNumberValue$1(this); + var fractDigits = toIntegerOrInfinity$7(fractionDigits); + var data = [0, 0, 0, 0, 0, 0]; + var sign = ''; + var result = '0'; + var e, z, j, k; + if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits'); // eslint-disable-next-line no-self-compare -- NaN check + + if (number != number) return 'NaN'; + if (number <= -1e21 || number >= 1e21) return String(number); + + if (number < 0) { + sign = '-'; + number = -number; + } + + if (number > 1e-21) { + e = log(number * pow$1(2, 69, 1)) - 69; + z = e < 0 ? number * pow$1(2, -e, 1) : number / pow$1(2, e, 1); + z *= 0x10000000000000; + e = 52 - e; + + if (e > 0) { + multiply(data, 0, z); + j = fractDigits; + + while (j >= 7) { + multiply(data, 1e7, 0); + j -= 7; + } + + multiply(data, pow$1(10, j, 1), 0); + j = e - 1; + + while (j >= 23) { + divide(data, 1 << 23); + j -= 23; + } + + divide(data, 1 << j); + multiply(data, 1, 1); + divide(data, 2); + result = dataToString(data); + } else { + multiply(data, 0, z); + multiply(data, 1 << -e, 0); + result = dataToString(data) + repeat$1.call('0', fractDigits); + } + } + + if (fractDigits > 0) { + k = result.length; + result = sign + (k <= fractDigits ? '0.' + repeat$1.call('0', fractDigits - k) + result : result.slice(0, k - fractDigits) + '.' + result.slice(k - fractDigits)); + } else { + result = sign + result; + } + + return result; + } +}); + +var $$39 = _export; + +var fails$E = fails$15; + +var thisNumberValue = thisNumberValue$3; + +var nativeToPrecision = 1.0.toPrecision; +var FORCED$i = fails$E(function () { + // IE7- + return nativeToPrecision.call(1, undefined) !== '1'; +}) || !fails$E(function () { + // V8 ~ Android 4.3- + nativeToPrecision.call({}); +}); // `Number.prototype.toPrecision` method +// https://tc39.es/ecma262/#sec-number.prototype.toprecision + +$$39({ + target: 'Number', + proto: true, + forced: FORCED$i +}, { + toPrecision: function toPrecision(precision) { + return precision === undefined ? nativeToPrecision.call(thisNumberValue(this)) : nativeToPrecision.call(thisNumberValue(this), precision); + } +}); + +var DESCRIPTORS$m = descriptors; + +var fails$D = fails$15; + +var objectKeys$2 = objectKeys$5; + +var getOwnPropertySymbolsModule = objectGetOwnPropertySymbols; + +var propertyIsEnumerableModule = objectPropertyIsEnumerable; + +var toObject$k = toObject$A; + +var IndexedObject$2 = indexedObject; // eslint-disable-next-line es/no-object-assign -- safe + + +var $assign = Object.assign; // eslint-disable-next-line es/no-object-defineproperty -- required for testing + +var defineProperty$7 = Object.defineProperty; // `Object.assign` method +// https://tc39.es/ecma262/#sec-object.assign + +var objectAssign$1 = !$assign || fails$D(function () { + // should have correct order of operations (Edge bug) + if (DESCRIPTORS$m && $assign({ + b: 1 + }, $assign(defineProperty$7({}, 'a', { + enumerable: true, + get: function () { + defineProperty$7(this, 'b', { + value: 3, + enumerable: false + }); + } + }), { + b: 2 + })).b !== 1) return true; // should work with symbols and should have deterministic property order (V8 bug) + + var A = {}; + var B = {}; // eslint-disable-next-line es/no-symbol -- safe + + var symbol = Symbol(); + var alphabet = 'abcdefghijklmnopqrst'; + A[symbol] = 7; + alphabet.split('').forEach(function (chr) { + B[chr] = chr; + }); + return $assign({}, A)[symbol] != 7 || objectKeys$2($assign({}, B)).join('') != alphabet; +}) ? function assign(target, source) { + // eslint-disable-line no-unused-vars -- required for `.length` + var T = toObject$k(target); + var argumentsLength = arguments.length; + var index = 1; + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + var propertyIsEnumerable = propertyIsEnumerableModule.f; + + while (argumentsLength > index) { + var S = IndexedObject$2(arguments[index++]); + var keys = getOwnPropertySymbols ? objectKeys$2(S).concat(getOwnPropertySymbols(S)) : objectKeys$2(S); + var length = keys.length; + var j = 0; + var key; + + while (length > j) { + key = keys[j++]; + if (!DESCRIPTORS$m || propertyIsEnumerable.call(S, key)) T[key] = S[key]; + } + } + + return T; +} : $assign; + +var $$38 = _export; + +var assign$4 = objectAssign$1; // `Object.assign` method +// https://tc39.es/ecma262/#sec-object.assign +// eslint-disable-next-line es/no-object-assign -- required for testing + + +$$38({ + target: 'Object', + stat: true, + forced: Object.assign !== assign$4 +}, { + assign: assign$4 +}); + +var $$37 = _export; + +var DESCRIPTORS$l = descriptors; + +var create$9 = objectCreate$1; // `Object.create` method +// https://tc39.es/ecma262/#sec-object.create + + +$$37({ + target: 'Object', + stat: true, + sham: !DESCRIPTORS$l +}, { + create: create$9 +}); + +var global$s = global$R; + +var fails$C = fails$15; + +var WEBKIT$1 = engineWebkitVersion; // Forced replacement object prototype accessors methods + + +var objectPrototypeAccessorsForced = !fails$C(function () { + // This feature detection crashes old WebKit + // https://github.com/zloirock/core-js/issues/232 + if (WEBKIT$1 && WEBKIT$1 < 535) return; + var key = Math.random(); // In FF throws only define methods + // eslint-disable-next-line no-undef, no-useless-call -- required for testing + + __defineSetter__.call(null, key, function () { + /* empty */ + }); + + delete global$s[key]; +}); + +var $$36 = _export; + +var DESCRIPTORS$k = descriptors; + +var FORCED$h = objectPrototypeAccessorsForced; + +var aCallable$I = aCallable$Q; + +var toObject$j = toObject$A; + +var definePropertyModule$4 = objectDefineProperty; // `Object.prototype.__defineGetter__` method +// https://tc39.es/ecma262/#sec-object.prototype.__defineGetter__ + + +if (DESCRIPTORS$k) { + $$36({ + target: 'Object', + proto: true, + forced: FORCED$h + }, { + __defineGetter__: function __defineGetter__(P, getter) { + definePropertyModule$4.f(toObject$j(this), P, { + get: aCallable$I(getter), + enumerable: true, + configurable: true + }); + } + }); +} + +var $$35 = _export; + +var DESCRIPTORS$j = descriptors; + +var defineProperties$2 = objectDefineProperties; // `Object.defineProperties` method +// https://tc39.es/ecma262/#sec-object.defineproperties + + +$$35({ + target: 'Object', + stat: true, + forced: !DESCRIPTORS$j, + sham: !DESCRIPTORS$j +}, { + defineProperties: defineProperties$2 +}); + +var $$34 = _export; + +var DESCRIPTORS$i = descriptors; + +var objectDefinePropertyModile = objectDefineProperty; // `Object.defineProperty` method +// https://tc39.es/ecma262/#sec-object.defineproperty + + +$$34({ + target: 'Object', + stat: true, + forced: !DESCRIPTORS$i, + sham: !DESCRIPTORS$i +}, { + defineProperty: objectDefinePropertyModile.f +}); + +var $$33 = _export; + +var DESCRIPTORS$h = descriptors; + +var FORCED$g = objectPrototypeAccessorsForced; + +var aCallable$H = aCallable$Q; + +var toObject$i = toObject$A; + +var definePropertyModule$3 = objectDefineProperty; // `Object.prototype.__defineSetter__` method +// https://tc39.es/ecma262/#sec-object.prototype.__defineSetter__ + + +if (DESCRIPTORS$h) { + $$33({ + target: 'Object', + proto: true, + forced: FORCED$g + }, { + __defineSetter__: function __defineSetter__(P, setter) { + definePropertyModule$3.f(toObject$i(this), P, { + set: aCallable$H(setter), + enumerable: true, + configurable: true + }); + } + }); +} + +var DESCRIPTORS$g = descriptors; + +var objectKeys$1 = objectKeys$5; + +var toIndexedObject$3 = toIndexedObject$d; + +var propertyIsEnumerable = objectPropertyIsEnumerable.f; // `Object.{ entries, values }` methods implementation + + +var createMethod$3 = function (TO_ENTRIES) { + return function (it) { + var O = toIndexedObject$3(it); + var keys = objectKeys$1(O); + var length = keys.length; + var i = 0; + var result = []; + var key; + + while (length > i) { + key = keys[i++]; + + if (!DESCRIPTORS$g || propertyIsEnumerable.call(O, key)) { + result.push(TO_ENTRIES ? [key, O[key]] : O[key]); + } + } + + return result; + }; +}; + +var objectToArray = { + // `Object.entries` method + // https://tc39.es/ecma262/#sec-object.entries + entries: createMethod$3(true), + // `Object.values` method + // https://tc39.es/ecma262/#sec-object.values + values: createMethod$3(false) +}; + +var $$32 = _export; + +var $entries = objectToArray.entries; // `Object.entries` method +// https://tc39.es/ecma262/#sec-object.entries + + +$$32({ + target: 'Object', + stat: true +}, { + entries: function entries(O) { + return $entries(O); + } +}); + +var $$31 = _export; + +var FREEZING$3 = freezing; + +var fails$B = fails$15; + +var isObject$j = isObject$C; + +var onFreeze$2 = internalMetadata.exports.onFreeze; // eslint-disable-next-line es/no-object-freeze -- safe + + +var $freeze = Object.freeze; +var FAILS_ON_PRIMITIVES$9 = fails$B(function () { + $freeze(1); +}); // `Object.freeze` method +// https://tc39.es/ecma262/#sec-object.freeze + +$$31({ + target: 'Object', + stat: true, + forced: FAILS_ON_PRIMITIVES$9, + sham: !FREEZING$3 +}, { + freeze: function freeze(it) { + return $freeze && isObject$j(it) ? $freeze(onFreeze$2(it)) : it; + } +}); + +var $$30 = _export; + +var iterate$E = iterate$I; + +var createProperty$1 = createProperty$7; // `Object.fromEntries` method +// https://github.com/tc39/proposal-object-from-entries + + +$$30({ + target: 'Object', + stat: true +}, { + fromEntries: function fromEntries(iterable) { + var obj = {}; + iterate$E(iterable, function (k, v) { + createProperty$1(obj, k, v); + }, { + AS_ENTRIES: true + }); + return obj; + } +}); + +var $$2$ = _export; + +var fails$A = fails$15; + +var toIndexedObject$2 = toIndexedObject$d; + +var nativeGetOwnPropertyDescriptor$1 = objectGetOwnPropertyDescriptor.f; + +var DESCRIPTORS$f = descriptors; + +var FAILS_ON_PRIMITIVES$8 = fails$A(function () { + nativeGetOwnPropertyDescriptor$1(1); +}); +var FORCED$f = !DESCRIPTORS$f || FAILS_ON_PRIMITIVES$8; // `Object.getOwnPropertyDescriptor` method +// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor + +$$2$({ + target: 'Object', + stat: true, + forced: FORCED$f, + sham: !DESCRIPTORS$f +}, { + getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) { + return nativeGetOwnPropertyDescriptor$1(toIndexedObject$2(it), key); + } +}); + +var $$2_ = _export; + +var DESCRIPTORS$e = descriptors; + +var ownKeys$1 = ownKeys$3; + +var toIndexedObject$1 = toIndexedObject$d; + +var getOwnPropertyDescriptorModule$4 = objectGetOwnPropertyDescriptor; + +var createProperty = createProperty$7; // `Object.getOwnPropertyDescriptors` method +// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors + + +$$2_({ + target: 'Object', + stat: true, + sham: !DESCRIPTORS$e +}, { + getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) { + var O = toIndexedObject$1(object); + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule$4.f; + var keys = ownKeys$1(O); + var result = {}; + var index = 0; + var key, descriptor; + + while (keys.length > index) { + descriptor = getOwnPropertyDescriptor(O, key = keys[index++]); + if (descriptor !== undefined) createProperty(result, key, descriptor); + } + + return result; + } +}); + +var $$2Z = _export; + +var fails$z = fails$15; + +var getOwnPropertyNames$3 = objectGetOwnPropertyNamesExternal.f; // eslint-disable-next-line es/no-object-getownpropertynames -- required for testing + + +var FAILS_ON_PRIMITIVES$7 = fails$z(function () { + return !Object.getOwnPropertyNames(1); +}); // `Object.getOwnPropertyNames` method +// https://tc39.es/ecma262/#sec-object.getownpropertynames + +$$2Z({ + target: 'Object', + stat: true, + forced: FAILS_ON_PRIMITIVES$7 +}, { + getOwnPropertyNames: getOwnPropertyNames$3 +}); + +var $$2Y = _export; + +var fails$y = fails$15; + +var toObject$h = toObject$A; + +var nativeGetPrototypeOf = objectGetPrototypeOf$1; + +var CORRECT_PROTOTYPE_GETTER$1 = correctPrototypeGetter; + +var FAILS_ON_PRIMITIVES$6 = fails$y(function () { + nativeGetPrototypeOf(1); +}); // `Object.getPrototypeOf` method +// https://tc39.es/ecma262/#sec-object.getprototypeof + +$$2Y({ + target: 'Object', + stat: true, + forced: FAILS_ON_PRIMITIVES$6, + sham: !CORRECT_PROTOTYPE_GETTER$1 +}, { + getPrototypeOf: function getPrototypeOf(it) { + return nativeGetPrototypeOf(toObject$h(it)); + } +}); + +var $$2X = _export; + +var hasOwn$9 = hasOwnProperty_1; // `Object.hasOwn` method +// https://github.com/tc39/proposal-accessible-object-hasownproperty + + +$$2X({ + target: 'Object', + stat: true +}, { + hasOwn: hasOwn$9 +}); + +// `SameValue` abstract operation +// https://tc39.es/ecma262/#sec-samevalue +// eslint-disable-next-line es/no-object-is -- safe +var sameValue$1 = Object.is || function is(x, y) { + // eslint-disable-next-line no-self-compare -- NaN check + return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y; +}; + +var $$2W = _export; + +var is = sameValue$1; // `Object.is` method +// https://tc39.es/ecma262/#sec-object.is + + +$$2W({ + target: 'Object', + stat: true +}, { + is: is +}); + +var $$2V = _export; + +var fails$x = fails$15; + +var isObject$i = isObject$C; // eslint-disable-next-line es/no-object-isextensible -- safe + + +var $isExtensible = Object.isExtensible; +var FAILS_ON_PRIMITIVES$5 = fails$x(function () { + $isExtensible(1); +}); // `Object.isExtensible` method +// https://tc39.es/ecma262/#sec-object.isextensible + +$$2V({ + target: 'Object', + stat: true, + forced: FAILS_ON_PRIMITIVES$5 +}, { + isExtensible: function isExtensible(it) { + return isObject$i(it) ? $isExtensible ? $isExtensible(it) : true : false; + } +}); + +var $$2U = _export; + +var fails$w = fails$15; + +var isObject$h = isObject$C; // eslint-disable-next-line es/no-object-isfrozen -- safe + + +var $isFrozen = Object.isFrozen; +var FAILS_ON_PRIMITIVES$4 = fails$w(function () { + $isFrozen(1); +}); // `Object.isFrozen` method +// https://tc39.es/ecma262/#sec-object.isfrozen + +$$2U({ + target: 'Object', + stat: true, + forced: FAILS_ON_PRIMITIVES$4 +}, { + isFrozen: function isFrozen(it) { + return isObject$h(it) ? $isFrozen ? $isFrozen(it) : false : true; + } +}); + +var $$2T = _export; + +var fails$v = fails$15; + +var isObject$g = isObject$C; // eslint-disable-next-line es/no-object-issealed -- safe + + +var $isSealed = Object.isSealed; +var FAILS_ON_PRIMITIVES$3 = fails$v(function () { + $isSealed(1); +}); // `Object.isSealed` method +// https://tc39.es/ecma262/#sec-object.issealed + +$$2T({ + target: 'Object', + stat: true, + forced: FAILS_ON_PRIMITIVES$3 +}, { + isSealed: function isSealed(it) { + return isObject$g(it) ? $isSealed ? $isSealed(it) : false : true; + } +}); + +var $$2S = _export; + +var toObject$g = toObject$A; + +var nativeKeys = objectKeys$5; + +var fails$u = fails$15; + +var FAILS_ON_PRIMITIVES$2 = fails$u(function () { + nativeKeys(1); +}); // `Object.keys` method +// https://tc39.es/ecma262/#sec-object.keys + +$$2S({ + target: 'Object', + stat: true, + forced: FAILS_ON_PRIMITIVES$2 +}, { + keys: function keys(it) { + return nativeKeys(toObject$g(it)); + } +}); + +var $$2R = _export; + +var DESCRIPTORS$d = descriptors; + +var FORCED$e = objectPrototypeAccessorsForced; + +var toObject$f = toObject$A; + +var toPropertyKey$4 = toPropertyKey$9; + +var getPrototypeOf$8 = objectGetPrototypeOf$1; + +var getOwnPropertyDescriptor$6 = objectGetOwnPropertyDescriptor.f; // `Object.prototype.__lookupGetter__` method +// https://tc39.es/ecma262/#sec-object.prototype.__lookupGetter__ + + +if (DESCRIPTORS$d) { + $$2R({ + target: 'Object', + proto: true, + forced: FORCED$e + }, { + __lookupGetter__: function __lookupGetter__(P) { + var O = toObject$f(this); + var key = toPropertyKey$4(P); + var desc; + + do { + if (desc = getOwnPropertyDescriptor$6(O, key)) return desc.get; + } while (O = getPrototypeOf$8(O)); + } + }); +} + +var $$2Q = _export; + +var DESCRIPTORS$c = descriptors; + +var FORCED$d = objectPrototypeAccessorsForced; + +var toObject$e = toObject$A; + +var toPropertyKey$3 = toPropertyKey$9; + +var getPrototypeOf$7 = objectGetPrototypeOf$1; + +var getOwnPropertyDescriptor$5 = objectGetOwnPropertyDescriptor.f; // `Object.prototype.__lookupSetter__` method +// https://tc39.es/ecma262/#sec-object.prototype.__lookupSetter__ + + +if (DESCRIPTORS$c) { + $$2Q({ + target: 'Object', + proto: true, + forced: FORCED$d + }, { + __lookupSetter__: function __lookupSetter__(P) { + var O = toObject$e(this); + var key = toPropertyKey$3(P); + var desc; + + do { + if (desc = getOwnPropertyDescriptor$5(O, key)) return desc.set; + } while (O = getPrototypeOf$7(O)); + } + }); +} + +var $$2P = _export; + +var isObject$f = isObject$C; + +var onFreeze$1 = internalMetadata.exports.onFreeze; + +var FREEZING$2 = freezing; + +var fails$t = fails$15; // eslint-disable-next-line es/no-object-preventextensions -- safe + + +var $preventExtensions = Object.preventExtensions; +var FAILS_ON_PRIMITIVES$1 = fails$t(function () { + $preventExtensions(1); +}); // `Object.preventExtensions` method +// https://tc39.es/ecma262/#sec-object.preventextensions + +$$2P({ + target: 'Object', + stat: true, + forced: FAILS_ON_PRIMITIVES$1, + sham: !FREEZING$2 +}, { + preventExtensions: function preventExtensions(it) { + return $preventExtensions && isObject$f(it) ? $preventExtensions(onFreeze$1(it)) : it; + } +}); + +var $$2O = _export; + +var isObject$e = isObject$C; + +var onFreeze = internalMetadata.exports.onFreeze; + +var FREEZING$1 = freezing; + +var fails$s = fails$15; // eslint-disable-next-line es/no-object-seal -- safe + + +var $seal = Object.seal; +var FAILS_ON_PRIMITIVES = fails$s(function () { + $seal(1); +}); // `Object.seal` method +// https://tc39.es/ecma262/#sec-object.seal + +$$2O({ + target: 'Object', + stat: true, + forced: FAILS_ON_PRIMITIVES, + sham: !FREEZING$1 +}, { + seal: function seal(it) { + return $seal && isObject$e(it) ? $seal(onFreeze(it)) : it; + } +}); + +var $$2N = _export; + +var setPrototypeOf$2 = objectSetPrototypeOf$1; // `Object.setPrototypeOf` method +// https://tc39.es/ecma262/#sec-object.setprototypeof + + +$$2N({ + target: 'Object', + stat: true +}, { + setPrototypeOf: setPrototypeOf$2 +}); + +var TO_STRING_TAG_SUPPORT$1 = toStringTagSupport; + +var classof$5 = classof$b; // `Object.prototype.toString` method implementation +// https://tc39.es/ecma262/#sec-object.prototype.tostring + + +var objectToString = TO_STRING_TAG_SUPPORT$1 ? {}.toString : function toString() { + return '[object ' + classof$5(this) + ']'; +}; + +var TO_STRING_TAG_SUPPORT = toStringTagSupport; + +var redefine$a = redefine$l.exports; + +var toString$j = objectToString; // `Object.prototype.toString` method +// https://tc39.es/ecma262/#sec-object.prototype.tostring + + +if (!TO_STRING_TAG_SUPPORT) { + redefine$a(Object.prototype, 'toString', toString$j, { + unsafe: true + }); +} + +var $$2M = _export; + +var $values = objectToArray.values; // `Object.values` method +// https://tc39.es/ecma262/#sec-object.values + + +$$2M({ + target: 'Object', + stat: true +}, { + values: function values(O) { + return $values(O); + } +}); + +var $$2L = _export; + +var $parseFloat = numberParseFloat; // `parseFloat` method +// https://tc39.es/ecma262/#sec-parsefloat-string + + +$$2L({ + global: true, + forced: parseFloat != $parseFloat +}, { + parseFloat: $parseFloat +}); + +var $$2K = _export; + +var $parseInt = numberParseInt; // `parseInt` method +// https://tc39.es/ecma262/#sec-parseint-string-radix + + +$$2K({ + global: true, + forced: parseInt != $parseInt +}, { + parseInt: $parseInt +}); + +var global$r = global$R; + +var nativePromiseConstructor = global$r.Promise; + +var userAgent$4 = engineUserAgent; + +var engineIsIos = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent$4); + +var global$q = global$R; + +var isCallable$d = isCallable$z; + +var fails$r = fails$15; + +var bind$k = functionBindContext; + +var html = html$2; + +var createElement = documentCreateElement$2; + +var IS_IOS$1 = engineIsIos; + +var IS_NODE$3 = engineIsNode; + +var set$2 = global$q.setImmediate; +var clear = global$q.clearImmediate; +var process$3 = global$q.process; +var MessageChannel = global$q.MessageChannel; +var Dispatch$1 = global$q.Dispatch; +var counter = 0; +var queue = {}; +var ONREADYSTATECHANGE = 'onreadystatechange'; +var location$1, defer, channel, port; + +try { + // Deno throws a ReferenceError on `location` access without `--location` flag + location$1 = global$q.location; +} catch (error) { + /* empty */ +} + +var run = function (id) { + // eslint-disable-next-line no-prototype-builtins -- safe + if (queue.hasOwnProperty(id)) { + var fn = queue[id]; + delete queue[id]; + fn(); + } +}; + +var runner = function (id) { + return function () { + run(id); + }; +}; + +var listener = function (event) { + run(event.data); +}; + +var post = function (id) { + // old engines have not location.origin + global$q.postMessage(String(id), location$1.protocol + '//' + location$1.host); +}; // Node.js 0.9+ & IE10+ has setImmediate, otherwise: + + +if (!set$2 || !clear) { + set$2 = function setImmediate(fn) { + var args = []; + var argumentsLength = arguments.length; + var i = 1; + + while (argumentsLength > i) args.push(arguments[i++]); + + queue[++counter] = function () { + // eslint-disable-next-line no-new-func -- spec requirement + (isCallable$d(fn) ? fn : Function(fn)).apply(undefined, args); + }; + + defer(counter); + return counter; + }; + + clear = function clearImmediate(id) { + delete queue[id]; + }; // Node.js 0.8- + + + if (IS_NODE$3) { + defer = function (id) { + process$3.nextTick(runner(id)); + }; // Sphere (JS game engine) Dispatch API + + } else if (Dispatch$1 && Dispatch$1.now) { + defer = function (id) { + Dispatch$1.now(runner(id)); + }; // Browsers with MessageChannel, includes WebWorkers + // except iOS - https://github.com/zloirock/core-js/issues/624 + + } else if (MessageChannel && !IS_IOS$1) { + channel = new MessageChannel(); + port = channel.port2; + channel.port1.onmessage = listener; + defer = bind$k(port.postMessage, port, 1); // Browsers with postMessage, skip WebWorkers + // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' + } else if (global$q.addEventListener && isCallable$d(global$q.postMessage) && !global$q.importScripts && location$1 && location$1.protocol !== 'file:' && !fails$r(post)) { + defer = post; + global$q.addEventListener('message', listener, false); // IE8- + } else if (ONREADYSTATECHANGE in createElement('script')) { + defer = function (id) { + html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () { + html.removeChild(this); + run(id); + }; + }; // Rest old browsers + + } else { + defer = function (id) { + setTimeout(runner(id), 0); + }; + } +} + +var task$2 = { + set: set$2, + clear: clear +}; + +var userAgent$3 = engineUserAgent; + +var global$p = global$R; + +var engineIsIosPebble = /ipad|iphone|ipod/i.test(userAgent$3) && global$p.Pebble !== undefined; + +var userAgent$2 = engineUserAgent; + +var engineIsWebosWebkit = /web0s(?!.*chrome)/i.test(userAgent$2); + +var global$o = global$R; + +var getOwnPropertyDescriptor$4 = objectGetOwnPropertyDescriptor.f; + +var macrotask = task$2.set; + +var IS_IOS = engineIsIos; + +var IS_IOS_PEBBLE = engineIsIosPebble; + +var IS_WEBOS_WEBKIT = engineIsWebosWebkit; + +var IS_NODE$2 = engineIsNode; + +var MutationObserver = global$o.MutationObserver || global$o.WebKitMutationObserver; +var document$2 = global$o.document; +var process$2 = global$o.process; +var Promise$4 = global$o.Promise; // Node.js 11 shows ExperimentalWarning on getting `queueMicrotask` + +var queueMicrotaskDescriptor = getOwnPropertyDescriptor$4(global$o, 'queueMicrotask'); +var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value; +var flush, head, last, notify$1, toggle, node, promise, then; // modern engines have queueMicrotask method + +if (!queueMicrotask) { + flush = function () { + var parent, fn; + if (IS_NODE$2 && (parent = process$2.domain)) parent.exit(); + + while (head) { + fn = head.fn; + head = head.next; + + try { + fn(); + } catch (error) { + if (head) notify$1();else last = undefined; + throw error; + } + } + + last = undefined; + if (parent) parent.enter(); + }; // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339 + // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898 + + + if (!IS_IOS && !IS_NODE$2 && !IS_WEBOS_WEBKIT && MutationObserver && document$2) { + toggle = true; + node = document$2.createTextNode(''); + new MutationObserver(flush).observe(node, { + characterData: true + }); + + notify$1 = function () { + node.data = toggle = !toggle; + }; // environments with maybe non-completely correct, but existent Promise + + } else if (!IS_IOS_PEBBLE && Promise$4 && Promise$4.resolve) { + // Promise.resolve without an argument throws an error in LG WebOS 2 + promise = Promise$4.resolve(undefined); // workaround of WebKit ~ iOS Safari 10.1 bug + + promise.constructor = Promise$4; + then = promise.then; + + notify$1 = function () { + then.call(promise, flush); + }; // Node.js without promises + + } else if (IS_NODE$2) { + notify$1 = function () { + process$2.nextTick(flush); + }; // for other environments - macrotask based on: + // - setImmediate + // - MessageChannel + // - window.postMessag + // - onreadystatechange + // - setTimeout + + } else { + notify$1 = function () { + // strange IE + webpack dev server bug - use .call(global) + macrotask.call(global$o, flush); + }; + } +} + +var microtask$2 = queueMicrotask || function (fn) { + var task = { + fn: fn, + next: undefined + }; + if (last) last.next = task; + + if (!head) { + head = task; + notify$1(); + } + + last = task; +}; + +var newPromiseCapability$2 = {}; + +var aCallable$G = aCallable$Q; + +var PromiseCapability = function (C) { + var resolve, reject; + this.promise = new C(function ($$resolve, $$reject) { + if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); + resolve = $$resolve; + reject = $$reject; + }); + this.resolve = aCallable$G(resolve); + this.reject = aCallable$G(reject); +}; // `NewPromiseCapability` abstract operation +// https://tc39.es/ecma262/#sec-newpromisecapability + + +newPromiseCapability$2.f = function (C) { + return new PromiseCapability(C); +}; + +var anObject$1o = anObject$1C; + +var isObject$d = isObject$C; + +var newPromiseCapability$1 = newPromiseCapability$2; + +var promiseResolve$2 = function (C, x) { + anObject$1o(C); + if (isObject$d(x) && x.constructor === C) return x; + var promiseCapability = newPromiseCapability$1.f(C); + var resolve = promiseCapability.resolve; + resolve(x); + return promiseCapability.promise; +}; + +var global$n = global$R; + +var hostReportErrors$2 = function (a, b) { + var console = global$n.console; + + if (console && console.error) { + arguments.length === 1 ? console.error(a) : console.error(a, b); + } +}; + +var perform$4 = function (exec) { + try { + return { + error: false, + value: exec() + }; + } catch (error) { + return { + error: true, + value: error + }; + } +}; + +var engineIsBrowser = typeof window == 'object'; + +var $$2J = _export; + +var global$m = global$R; + +var getBuiltIn$p = getBuiltIn$y; + +var NativePromise$1 = nativePromiseConstructor; + +var redefine$9 = redefine$l.exports; + +var redefineAll$7 = redefineAll$a; + +var setPrototypeOf$1 = objectSetPrototypeOf$1; + +var setToStringTag$3 = setToStringTag$b; + +var setSpecies$3 = setSpecies$7; + +var aCallable$F = aCallable$Q; + +var isCallable$c = isCallable$z; + +var isObject$c = isObject$C; + +var anInstance$7 = anInstance$b; + +var inspectSource = inspectSource$4; + +var iterate$D = iterate$I; + +var checkCorrectnessOfIteration$1 = checkCorrectnessOfIteration$4; + +var speciesConstructor$d = speciesConstructor$f; + +var task$1 = task$2.set; + +var microtask$1 = microtask$2; + +var promiseResolve$1 = promiseResolve$2; + +var hostReportErrors$1 = hostReportErrors$2; + +var newPromiseCapabilityModule$3 = newPromiseCapability$2; + +var perform$3 = perform$4; + +var InternalStateModule$e = internalState; + +var isForced$1 = isForced_1; + +var wellKnownSymbol$k = wellKnownSymbol$G; + +var IS_BROWSER = engineIsBrowser; + +var IS_NODE$1 = engineIsNode; + +var V8_VERSION = engineV8Version; + +var SPECIES$1 = wellKnownSymbol$k('species'); +var PROMISE = 'Promise'; +var getInternalState$e = InternalStateModule$e.get; +var setInternalState$e = InternalStateModule$e.set; +var getInternalPromiseState = InternalStateModule$e.getterFor(PROMISE); +var NativePromisePrototype = NativePromise$1 && NativePromise$1.prototype; +var PromiseConstructor = NativePromise$1; +var PromiseConstructorPrototype = NativePromisePrototype; +var TypeError$1 = global$m.TypeError; +var document$1 = global$m.document; +var process$1 = global$m.process; +var newPromiseCapability = newPromiseCapabilityModule$3.f; +var newGenericPromiseCapability = newPromiseCapability; +var DISPATCH_EVENT = !!(document$1 && document$1.createEvent && global$m.dispatchEvent); +var NATIVE_REJECTION_EVENT = isCallable$c(global$m.PromiseRejectionEvent); +var UNHANDLED_REJECTION = 'unhandledrejection'; +var REJECTION_HANDLED = 'rejectionhandled'; +var PENDING = 0; +var FULFILLED = 1; +var REJECTED = 2; +var HANDLED = 1; +var UNHANDLED = 2; +var SUBCLASSING = false; +var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen; +var FORCED$c = isForced$1(PROMISE, function () { + var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(PromiseConstructor); + var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(PromiseConstructor); // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables + // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 + // We can't detect it synchronously, so just check versions + + if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true; // We need Promise#finally in the pure version for preventing prototype pollution + // deoptimization and performance degradation + // https://github.com/zloirock/core-js/issues/679 + + if (V8_VERSION >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) return false; // Detect correctness of subclassing with @@species support + + var promise = new PromiseConstructor(function (resolve) { + resolve(1); + }); + + var FakePromise = function (exec) { + exec(function () { + /* empty */ + }, function () { + /* empty */ + }); + }; + + var constructor = promise.constructor = {}; + constructor[SPECIES$1] = FakePromise; + SUBCLASSING = promise.then(function () { + /* empty */ + }) instanceof FakePromise; + if (!SUBCLASSING) return true; // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test + + return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_REJECTION_EVENT; +}); +var INCORRECT_ITERATION = FORCED$c || !checkCorrectnessOfIteration$1(function (iterable) { + PromiseConstructor.all(iterable)['catch'](function () { + /* empty */ + }); +}); // helpers + +var isThenable = function (it) { + var then; + return isObject$c(it) && isCallable$c(then = it.then) ? then : false; +}; + +var notify = function (state, isReject) { + if (state.notified) return; + state.notified = true; + var chain = state.reactions; + microtask$1(function () { + var value = state.value; + var ok = state.state == FULFILLED; + var index = 0; // variable length - can't use forEach + + while (chain.length > index) { + var reaction = chain[index++]; + var handler = ok ? reaction.ok : reaction.fail; + var resolve = reaction.resolve; + var reject = reaction.reject; + var domain = reaction.domain; + var result, then, exited; + + try { + if (handler) { + if (!ok) { + if (state.rejection === UNHANDLED) onHandleUnhandled(state); + state.rejection = HANDLED; + } + + if (handler === true) result = value;else { + if (domain) domain.enter(); + result = handler(value); // can throw + + if (domain) { + domain.exit(); + exited = true; + } + } + + if (result === reaction.promise) { + reject(TypeError$1('Promise-chain cycle')); + } else if (then = isThenable(result)) { + then.call(result, resolve, reject); + } else resolve(result); + } else reject(value); + } catch (error) { + if (domain && !exited) domain.exit(); + reject(error); + } + } + + state.reactions = []; + state.notified = false; + if (isReject && !state.rejection) onUnhandled(state); + }); +}; + +var dispatchEvent$1 = function (name, promise, reason) { + var event, handler; + + if (DISPATCH_EVENT) { + event = document$1.createEvent('Event'); + event.promise = promise; + event.reason = reason; + event.initEvent(name, false, true); + global$m.dispatchEvent(event); + } else event = { + promise: promise, + reason: reason + }; + + if (!NATIVE_REJECTION_EVENT && (handler = global$m['on' + name])) handler(event);else if (name === UNHANDLED_REJECTION) hostReportErrors$1('Unhandled promise rejection', reason); +}; + +var onUnhandled = function (state) { + task$1.call(global$m, function () { + var promise = state.facade; + var value = state.value; + var IS_UNHANDLED = isUnhandled(state); + var result; + + if (IS_UNHANDLED) { + result = perform$3(function () { + if (IS_NODE$1) { + process$1.emit('unhandledRejection', value, promise); + } else dispatchEvent$1(UNHANDLED_REJECTION, promise, value); + }); // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should + + state.rejection = IS_NODE$1 || isUnhandled(state) ? UNHANDLED : HANDLED; + if (result.error) throw result.value; + } + }); +}; + +var isUnhandled = function (state) { + return state.rejection !== HANDLED && !state.parent; +}; + +var onHandleUnhandled = function (state) { + task$1.call(global$m, function () { + var promise = state.facade; + + if (IS_NODE$1) { + process$1.emit('rejectionHandled', promise); + } else dispatchEvent$1(REJECTION_HANDLED, promise, state.value); + }); +}; + +var bind$j = function (fn, state, unwrap) { + return function (value) { + fn(state, value, unwrap); + }; +}; + +var internalReject = function (state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + state.value = value; + state.state = REJECTED; + notify(state, true); +}; + +var internalResolve = function (state, value, unwrap) { + if (state.done) return; + state.done = true; + if (unwrap) state = unwrap; + + try { + if (state.facade === value) throw TypeError$1("Promise can't be resolved itself"); + var then = isThenable(value); + + if (then) { + microtask$1(function () { + var wrapper = { + done: false + }; + + try { + then.call(value, bind$j(internalResolve, wrapper, state), bind$j(internalReject, wrapper, state)); + } catch (error) { + internalReject(wrapper, error, state); + } + }); + } else { + state.value = value; + state.state = FULFILLED; + notify(state, false); + } + } catch (error) { + internalReject({ + done: false + }, error, state); + } +}; // constructor polyfill + + +if (FORCED$c) { + // 25.4.3.1 Promise(executor) + PromiseConstructor = function Promise(executor) { + anInstance$7(this, PromiseConstructor, PROMISE); + aCallable$F(executor); + Internal.call(this); + var state = getInternalState$e(this); + + try { + executor(bind$j(internalResolve, state), bind$j(internalReject, state)); + } catch (error) { + internalReject(state, error); + } + }; + + PromiseConstructorPrototype = PromiseConstructor.prototype; // eslint-disable-next-line no-unused-vars -- required for `.length` + + Internal = function Promise(executor) { + setInternalState$e(this, { + type: PROMISE, + done: false, + notified: false, + parent: false, + reactions: [], + rejection: false, + state: PENDING, + value: undefined + }); + }; + + Internal.prototype = redefineAll$7(PromiseConstructorPrototype, { + // `Promise.prototype.then` method + // https://tc39.es/ecma262/#sec-promise.prototype.then + then: function then(onFulfilled, onRejected) { + var state = getInternalPromiseState(this); + var reaction = newPromiseCapability(speciesConstructor$d(this, PromiseConstructor)); + reaction.ok = isCallable$c(onFulfilled) ? onFulfilled : true; + reaction.fail = isCallable$c(onRejected) && onRejected; + reaction.domain = IS_NODE$1 ? process$1.domain : undefined; + state.parent = true; + state.reactions.push(reaction); + if (state.state != PENDING) notify(state, false); + return reaction.promise; + }, + // `Promise.prototype.catch` method + // https://tc39.es/ecma262/#sec-promise.prototype.catch + 'catch': function (onRejected) { + return this.then(undefined, onRejected); + } + }); + + OwnPromiseCapability = function () { + var promise = new Internal(); + var state = getInternalState$e(promise); + this.promise = promise; + this.resolve = bind$j(internalResolve, state); + this.reject = bind$j(internalReject, state); + }; + + newPromiseCapabilityModule$3.f = newPromiseCapability = function (C) { + return C === PromiseConstructor || C === PromiseWrapper ? new OwnPromiseCapability(C) : newGenericPromiseCapability(C); + }; + + if (isCallable$c(NativePromise$1) && NativePromisePrototype !== Object.prototype) { + nativeThen = NativePromisePrototype.then; + + if (!SUBCLASSING) { + // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs + redefine$9(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) { + var that = this; + return new PromiseConstructor(function (resolve, reject) { + nativeThen.call(that, resolve, reject); + }).then(onFulfilled, onRejected); // https://github.com/zloirock/core-js/issues/640 + }, { + unsafe: true + }); // makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then` + + redefine$9(NativePromisePrototype, 'catch', PromiseConstructorPrototype['catch'], { + unsafe: true + }); + } // make `.constructor === Promise` work for native promise-based APIs + + + try { + delete NativePromisePrototype.constructor; + } catch (error) { + /* empty */ + } // make `instanceof Promise` work for native promise-based APIs + + + if (setPrototypeOf$1) { + setPrototypeOf$1(NativePromisePrototype, PromiseConstructorPrototype); + } + } +} + +$$2J({ + global: true, + wrap: true, + forced: FORCED$c +}, { + Promise: PromiseConstructor +}); +setToStringTag$3(PromiseConstructor, PROMISE, false); +setSpecies$3(PROMISE); +PromiseWrapper = getBuiltIn$p(PROMISE); // statics + +$$2J({ + target: PROMISE, + stat: true, + forced: FORCED$c +}, { + // `Promise.reject` method + // https://tc39.es/ecma262/#sec-promise.reject + reject: function reject(r) { + var capability = newPromiseCapability(this); + capability.reject.call(undefined, r); + return capability.promise; + } +}); +$$2J({ + target: PROMISE, + stat: true, + forced: FORCED$c +}, { + // `Promise.resolve` method + // https://tc39.es/ecma262/#sec-promise.resolve + resolve: function resolve(x) { + return promiseResolve$1(this, x); + } +}); +$$2J({ + target: PROMISE, + stat: true, + forced: INCORRECT_ITERATION +}, { + // `Promise.all` method + // https://tc39.es/ecma262/#sec-promise.all + all: function all(iterable) { + var C = this; + var capability = newPromiseCapability(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform$3(function () { + var $promiseResolve = aCallable$F(C.resolve); + var values = []; + var counter = 0; + var remaining = 1; + iterate$D(iterable, function (promise) { + var index = counter++; + var alreadyCalled = false; + values.push(undefined); + remaining++; + $promiseResolve.call(C, promise).then(function (value) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = value; + --remaining || resolve(values); + }, reject); + }); + --remaining || resolve(values); + }); + if (result.error) reject(result.value); + return capability.promise; + }, + // `Promise.race` method + // https://tc39.es/ecma262/#sec-promise.race + race: function race(iterable) { + var C = this; + var capability = newPromiseCapability(C); + var reject = capability.reject; + var result = perform$3(function () { + var $promiseResolve = aCallable$F(C.resolve); + iterate$D(iterable, function (promise) { + $promiseResolve.call(C, promise).then(capability.resolve, reject); + }); + }); + if (result.error) reject(result.value); + return capability.promise; + } +}); + +var $$2I = _export; + +var aCallable$E = aCallable$Q; + +var newPromiseCapabilityModule$2 = newPromiseCapability$2; + +var perform$2 = perform$4; + +var iterate$C = iterate$I; // `Promise.allSettled` method +// https://tc39.es/ecma262/#sec-promise.allsettled + + +$$2I({ + target: 'Promise', + stat: true +}, { + allSettled: function allSettled(iterable) { + var C = this; + var capability = newPromiseCapabilityModule$2.f(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform$2(function () { + var promiseResolve = aCallable$E(C.resolve); + var values = []; + var counter = 0; + var remaining = 1; + iterate$C(iterable, function (promise) { + var index = counter++; + var alreadyCalled = false; + values.push(undefined); + remaining++; + promiseResolve.call(C, promise).then(function (value) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = { + status: 'fulfilled', + value: value + }; + --remaining || resolve(values); + }, function (error) { + if (alreadyCalled) return; + alreadyCalled = true; + values[index] = { + status: 'rejected', + reason: error + }; + --remaining || resolve(values); + }); + }); + --remaining || resolve(values); + }); + if (result.error) reject(result.value); + return capability.promise; + } +}); + +var $$2H = _export; + +var aCallable$D = aCallable$Q; + +var getBuiltIn$o = getBuiltIn$y; + +var newPromiseCapabilityModule$1 = newPromiseCapability$2; + +var perform$1 = perform$4; + +var iterate$B = iterate$I; + +var PROMISE_ANY_ERROR = 'No one promise resolved'; // `Promise.any` method +// https://tc39.es/ecma262/#sec-promise.any + +$$2H({ + target: 'Promise', + stat: true +}, { + any: function any(iterable) { + var C = this; + var capability = newPromiseCapabilityModule$1.f(C); + var resolve = capability.resolve; + var reject = capability.reject; + var result = perform$1(function () { + var promiseResolve = aCallable$D(C.resolve); + var errors = []; + var counter = 0; + var remaining = 1; + var alreadyResolved = false; + iterate$B(iterable, function (promise) { + var index = counter++; + var alreadyRejected = false; + errors.push(undefined); + remaining++; + promiseResolve.call(C, promise).then(function (value) { + if (alreadyRejected || alreadyResolved) return; + alreadyResolved = true; + resolve(value); + }, function (error) { + if (alreadyRejected || alreadyResolved) return; + alreadyRejected = true; + errors[index] = error; + --remaining || reject(new (getBuiltIn$o('AggregateError'))(errors, PROMISE_ANY_ERROR)); + }); + }); + --remaining || reject(new (getBuiltIn$o('AggregateError'))(errors, PROMISE_ANY_ERROR)); + }); + if (result.error) reject(result.value); + return capability.promise; + } +}); + +var $$2G = _export; + +var NativePromise = nativePromiseConstructor; + +var fails$q = fails$15; + +var getBuiltIn$n = getBuiltIn$y; + +var isCallable$b = isCallable$z; + +var speciesConstructor$c = speciesConstructor$f; + +var promiseResolve = promiseResolve$2; + +var redefine$8 = redefine$l.exports; // Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829 + + +var NON_GENERIC = !!NativePromise && fails$q(function () { + NativePromise.prototype['finally'].call({ + then: function () { + /* empty */ + } + }, function () { + /* empty */ + }); +}); // `Promise.prototype.finally` method +// https://tc39.es/ecma262/#sec-promise.prototype.finally + +$$2G({ + target: 'Promise', + proto: true, + real: true, + forced: NON_GENERIC +}, { + 'finally': function (onFinally) { + var C = speciesConstructor$c(this, getBuiltIn$n('Promise')); + var isFunction = isCallable$b(onFinally); + return this.then(isFunction ? function (x) { + return promiseResolve(C, onFinally()).then(function () { + return x; + }); + } : onFinally, isFunction ? function (e) { + return promiseResolve(C, onFinally()).then(function () { + throw e; + }); + } : onFinally); + } +}); // makes sure that native promise-based APIs `Promise#finally` properly works with patched `Promise#then` + +if (isCallable$b(NativePromise)) { + var method = getBuiltIn$n('Promise').prototype['finally']; + + if (NativePromise.prototype['finally'] !== method) { + redefine$8(NativePromise.prototype, 'finally', method, { + unsafe: true + }); + } +} + +var $$2F = _export; + +var getBuiltIn$m = getBuiltIn$y; + +var aCallable$C = aCallable$Q; + +var anObject$1n = anObject$1C; + +var fails$p = fails$15; + +var nativeApply = getBuiltIn$m('Reflect', 'apply'); +var functionApply = Function.apply; // MS Edge argumentsList argument is optional + +var OPTIONAL_ARGUMENTS_LIST = !fails$p(function () { + nativeApply(function () { + /* empty */ + }); +}); // `Reflect.apply` method +// https://tc39.es/ecma262/#sec-reflect.apply + +$$2F({ + target: 'Reflect', + stat: true, + forced: OPTIONAL_ARGUMENTS_LIST +}, { + apply: function apply(target, thisArgument, argumentsList) { + aCallable$C(target); + anObject$1n(argumentsList); + return nativeApply ? nativeApply(target, thisArgument, argumentsList) : functionApply.call(target, thisArgument, argumentsList); + } +}); + +var $$2E = _export; + +var getBuiltIn$l = getBuiltIn$y; + +var aConstructor$3 = aConstructor$5; + +var anObject$1m = anObject$1C; + +var isObject$b = isObject$C; + +var create$8 = objectCreate$1; + +var bind$i = functionBind; + +var fails$o = fails$15; + +var nativeConstruct = getBuiltIn$l('Reflect', 'construct'); // `Reflect.construct` method +// https://tc39.es/ecma262/#sec-reflect.construct +// MS Edge supports only 2 arguments and argumentsList argument is optional +// FF Nightly sets third argument as `new.target`, but does not create `this` from it + +var NEW_TARGET_BUG = fails$o(function () { + function F() { + /* empty */ + } + + return !(nativeConstruct(function () { + /* empty */ + }, [], F) instanceof F); +}); +var ARGS_BUG = !fails$o(function () { + nativeConstruct(function () { + /* empty */ + }); +}); +var FORCED$b = NEW_TARGET_BUG || ARGS_BUG; +$$2E({ + target: 'Reflect', + stat: true, + forced: FORCED$b, + sham: FORCED$b +}, { + construct: function construct(Target, args + /* , newTarget */ + ) { + aConstructor$3(Target); + anObject$1m(args); + var newTarget = arguments.length < 3 ? Target : aConstructor$3(arguments[2]); + if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget); + + if (Target == newTarget) { + // w/o altered newTarget, optimization for 0-4 arguments + switch (args.length) { + case 0: + return new Target(); + + case 1: + return new Target(args[0]); + + case 2: + return new Target(args[0], args[1]); + + case 3: + return new Target(args[0], args[1], args[2]); + + case 4: + return new Target(args[0], args[1], args[2], args[3]); + } // w/o altered newTarget, lot of arguments case + + + var $args = [null]; + $args.push.apply($args, args); + return new (bind$i.apply(Target, $args))(); + } // with altered newTarget, not support built-in constructors + + + var proto = newTarget.prototype; + var instance = create$8(isObject$b(proto) ? proto : Object.prototype); + var result = Function.apply.call(Target, instance, args); + return isObject$b(result) ? result : instance; + } +}); + +var $$2D = _export; + +var DESCRIPTORS$b = descriptors; + +var anObject$1l = anObject$1C; + +var toPropertyKey$2 = toPropertyKey$9; + +var definePropertyModule$2 = objectDefineProperty; + +var fails$n = fails$15; // MS Edge has broken Reflect.defineProperty - throwing instead of returning false + + +var ERROR_INSTEAD_OF_FALSE = fails$n(function () { + // eslint-disable-next-line es/no-reflect -- required for testing + Reflect.defineProperty(definePropertyModule$2.f({}, 1, { + value: 1 + }), 1, { + value: 2 + }); +}); // `Reflect.defineProperty` method +// https://tc39.es/ecma262/#sec-reflect.defineproperty + +$$2D({ + target: 'Reflect', + stat: true, + forced: ERROR_INSTEAD_OF_FALSE, + sham: !DESCRIPTORS$b +}, { + defineProperty: function defineProperty(target, propertyKey, attributes) { + anObject$1l(target); + var key = toPropertyKey$2(propertyKey); + anObject$1l(attributes); + + try { + definePropertyModule$2.f(target, key, attributes); + return true; + } catch (error) { + return false; + } + } +}); + +var $$2C = _export; + +var anObject$1k = anObject$1C; + +var getOwnPropertyDescriptor$3 = objectGetOwnPropertyDescriptor.f; // `Reflect.deleteProperty` method +// https://tc39.es/ecma262/#sec-reflect.deleteproperty + + +$$2C({ + target: 'Reflect', + stat: true +}, { + deleteProperty: function deleteProperty(target, propertyKey) { + var descriptor = getOwnPropertyDescriptor$3(anObject$1k(target), propertyKey); + return descriptor && !descriptor.configurable ? false : delete target[propertyKey]; + } +}); + +var hasOwn$8 = hasOwnProperty_1; + +var isDataDescriptor$2 = function (descriptor) { + return descriptor !== undefined && (hasOwn$8(descriptor, 'value') || hasOwn$8(descriptor, 'writable')); +}; + +var $$2B = _export; + +var isObject$a = isObject$C; + +var anObject$1j = anObject$1C; + +var isDataDescriptor$1 = isDataDescriptor$2; + +var getOwnPropertyDescriptorModule$3 = objectGetOwnPropertyDescriptor; + +var getPrototypeOf$6 = objectGetPrototypeOf$1; // `Reflect.get` method +// https://tc39.es/ecma262/#sec-reflect.get + + +function get$1(target, propertyKey +/* , receiver */ +) { + var receiver = arguments.length < 3 ? target : arguments[2]; + var descriptor, prototype; + if (anObject$1j(target) === receiver) return target[propertyKey]; + descriptor = getOwnPropertyDescriptorModule$3.f(target, propertyKey); + if (descriptor) return isDataDescriptor$1(descriptor) ? descriptor.value : descriptor.get === undefined ? undefined : descriptor.get.call(receiver); + if (isObject$a(prototype = getPrototypeOf$6(target))) return get$1(prototype, propertyKey, receiver); +} + +$$2B({ + target: 'Reflect', + stat: true +}, { + get: get$1 +}); + +var $$2A = _export; + +var DESCRIPTORS$a = descriptors; + +var anObject$1i = anObject$1C; + +var getOwnPropertyDescriptorModule$2 = objectGetOwnPropertyDescriptor; // `Reflect.getOwnPropertyDescriptor` method +// https://tc39.es/ecma262/#sec-reflect.getownpropertydescriptor + + +$$2A({ + target: 'Reflect', + stat: true, + sham: !DESCRIPTORS$a +}, { + getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) { + return getOwnPropertyDescriptorModule$2.f(anObject$1i(target), propertyKey); + } +}); + +var $$2z = _export; + +var anObject$1h = anObject$1C; + +var objectGetPrototypeOf = objectGetPrototypeOf$1; + +var CORRECT_PROTOTYPE_GETTER = correctPrototypeGetter; // `Reflect.getPrototypeOf` method +// https://tc39.es/ecma262/#sec-reflect.getprototypeof + + +$$2z({ + target: 'Reflect', + stat: true, + sham: !CORRECT_PROTOTYPE_GETTER +}, { + getPrototypeOf: function getPrototypeOf(target) { + return objectGetPrototypeOf(anObject$1h(target)); + } +}); + +var $$2y = _export; // `Reflect.has` method +// https://tc39.es/ecma262/#sec-reflect.has + + +$$2y({ + target: 'Reflect', + stat: true +}, { + has: function has(target, propertyKey) { + return propertyKey in target; + } +}); + +var $$2x = _export; + +var anObject$1g = anObject$1C; // eslint-disable-next-line es/no-object-isextensible -- safe + + +var objectIsExtensible = Object.isExtensible; // `Reflect.isExtensible` method +// https://tc39.es/ecma262/#sec-reflect.isextensible + +$$2x({ + target: 'Reflect', + stat: true +}, { + isExtensible: function isExtensible(target) { + anObject$1g(target); + return objectIsExtensible ? objectIsExtensible(target) : true; + } +}); + +var $$2w = _export; + +var ownKeys = ownKeys$3; // `Reflect.ownKeys` method +// https://tc39.es/ecma262/#sec-reflect.ownkeys + + +$$2w({ + target: 'Reflect', + stat: true +}, { + ownKeys: ownKeys +}); + +var $$2v = _export; + +var getBuiltIn$k = getBuiltIn$y; + +var anObject$1f = anObject$1C; + +var FREEZING = freezing; // `Reflect.preventExtensions` method +// https://tc39.es/ecma262/#sec-reflect.preventextensions + + +$$2v({ + target: 'Reflect', + stat: true, + sham: !FREEZING +}, { + preventExtensions: function preventExtensions(target) { + anObject$1f(target); + + try { + var objectPreventExtensions = getBuiltIn$k('Object', 'preventExtensions'); + if (objectPreventExtensions) objectPreventExtensions(target); + return true; + } catch (error) { + return false; + } + } +}); + +var $$2u = _export; + +var anObject$1e = anObject$1C; + +var isObject$9 = isObject$C; + +var isDataDescriptor = isDataDescriptor$2; + +var fails$m = fails$15; + +var definePropertyModule$1 = objectDefineProperty; + +var getOwnPropertyDescriptorModule$1 = objectGetOwnPropertyDescriptor; + +var getPrototypeOf$5 = objectGetPrototypeOf$1; + +var createPropertyDescriptor$2 = createPropertyDescriptor$9; // `Reflect.set` method +// https://tc39.es/ecma262/#sec-reflect.set + + +function set$1(target, propertyKey, V +/* , receiver */ +) { + var receiver = arguments.length < 4 ? target : arguments[3]; + var ownDescriptor = getOwnPropertyDescriptorModule$1.f(anObject$1e(target), propertyKey); + var existingDescriptor, prototype, setter; + + if (!ownDescriptor) { + if (isObject$9(prototype = getPrototypeOf$5(target))) { + return set$1(prototype, propertyKey, V, receiver); + } + + ownDescriptor = createPropertyDescriptor$2(0); + } + + if (isDataDescriptor(ownDescriptor)) { + if (ownDescriptor.writable === false || !isObject$9(receiver)) return false; + + if (existingDescriptor = getOwnPropertyDescriptorModule$1.f(receiver, propertyKey)) { + if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false; + existingDescriptor.value = V; + definePropertyModule$1.f(receiver, propertyKey, existingDescriptor); + } else definePropertyModule$1.f(receiver, propertyKey, createPropertyDescriptor$2(0, V)); + } else { + setter = ownDescriptor.set; + if (setter === undefined) return false; + setter.call(receiver, V); + } + + return true; +} // MS Edge 17-18 Reflect.set allows setting the property to object +// with non-writable property on the prototype + + +var MS_EDGE_BUG = fails$m(function () { + var Constructor = function () { + /* empty */ + }; + + var object = definePropertyModule$1.f(new Constructor(), 'a', { + configurable: true + }); // eslint-disable-next-line es/no-reflect -- required for testing + + return Reflect.set(Constructor.prototype, 'a', 1, object) !== false; +}); +$$2u({ + target: 'Reflect', + stat: true, + forced: MS_EDGE_BUG +}, { + set: set$1 +}); + +var $$2t = _export; + +var anObject$1d = anObject$1C; + +var aPossiblePrototype = aPossiblePrototype$2; + +var objectSetPrototypeOf = objectSetPrototypeOf$1; // `Reflect.setPrototypeOf` method +// https://tc39.es/ecma262/#sec-reflect.setprototypeof + + +if (objectSetPrototypeOf) $$2t({ + target: 'Reflect', + stat: true +}, { + setPrototypeOf: function setPrototypeOf(target, proto) { + anObject$1d(target); + aPossiblePrototype(proto); + + try { + objectSetPrototypeOf(target, proto); + return true; + } catch (error) { + return false; + } + } +}); + +var $$2s = _export; + +var global$l = global$R; + +var setToStringTag$2 = setToStringTag$b; + +$$2s({ + global: true +}, { + Reflect: {} +}); // Reflect[@@toStringTag] property +// https://tc39.es/ecma262/#sec-reflect-@@tostringtag + +setToStringTag$2(global$l.Reflect, 'Reflect', true); + +var isObject$8 = isObject$C; + +var classof$4 = classofRaw$1; + +var wellKnownSymbol$j = wellKnownSymbol$G; + +var MATCH$2 = wellKnownSymbol$j('match'); // `IsRegExp` abstract operation +// https://tc39.es/ecma262/#sec-isregexp + +var isRegexp = function (it) { + var isRegExp; + return isObject$8(it) && ((isRegExp = it[MATCH$2]) !== undefined ? !!isRegExp : classof$4(it) == 'RegExp'); +}; + +var anObject$1c = anObject$1C; // `RegExp.prototype.flags` getter implementation +// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags + + +var regexpFlags$1 = function () { + var that = anObject$1c(this); + var result = ''; + if (that.global) result += 'g'; + if (that.ignoreCase) result += 'i'; + if (that.multiline) result += 'm'; + if (that.dotAll) result += 's'; + if (that.unicode) result += 'u'; + if (that.sticky) result += 'y'; + return result; +}; + +var regexpStickyHelpers = {}; + +var fails$l = fails$15; + +var global$k = global$R; // babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError + + +var $RegExp$2 = global$k.RegExp; +regexpStickyHelpers.UNSUPPORTED_Y = fails$l(function () { + var re = $RegExp$2('a', 'y'); + re.lastIndex = 2; + return re.exec('abcd') != null; +}); +regexpStickyHelpers.BROKEN_CARET = fails$l(function () { + // https://bugzilla.mozilla.org/show_bug.cgi?id=773687 + var re = $RegExp$2('^r', 'gy'); + re.lastIndex = 2; + return re.exec('str') != null; +}); + +var fails$k = fails$15; + +var global$j = global$R; // babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError + + +var $RegExp$1 = global$j.RegExp; +var regexpUnsupportedDotAll = fails$k(function () { + var re = $RegExp$1('.', 's'); + return !(re.dotAll && re.exec('\n') && re.flags === 's'); +}); + +var fails$j = fails$15; + +var global$i = global$R; // babel-minify and Closure Compiler transpiles RegExp('(?
b)', 'g') -> /(?b)/g and it causes SyntaxError + + +var $RegExp = global$i.RegExp; +var regexpUnsupportedNcg = fails$j(function () { + var re = $RegExp('(?b)', 'g'); + return re.exec('b').groups.a !== 'b' || 'b'.replace(re, '$c') !== 'bc'; +}); + +var DESCRIPTORS$9 = descriptors; + +var global$h = global$R; + +var isForced = isForced_1; + +var inheritIfRequired$1 = inheritIfRequired$4; + +var createNonEnumerableProperty$8 = createNonEnumerableProperty$h; + +var defineProperty$6 = objectDefineProperty.f; + +var getOwnPropertyNames$2 = objectGetOwnPropertyNames.f; + +var isRegExp$4 = isRegexp; + +var toString$i = toString$t; + +var getFlags = regexpFlags$1; + +var stickyHelpers$2 = regexpStickyHelpers; + +var redefine$7 = redefine$l.exports; + +var fails$i = fails$15; + +var hasOwn$7 = hasOwnProperty_1; + +var enforceInternalState = internalState.enforce; + +var setSpecies$2 = setSpecies$7; + +var wellKnownSymbol$i = wellKnownSymbol$G; + +var UNSUPPORTED_DOT_ALL$2 = regexpUnsupportedDotAll; + +var UNSUPPORTED_NCG$1 = regexpUnsupportedNcg; + +var MATCH$1 = wellKnownSymbol$i('match'); +var NativeRegExp = global$h.RegExp; +var RegExpPrototype$6 = NativeRegExp.prototype; // TODO: Use only propper RegExpIdentifierName + +var IS_NCG = /^\?<[^\s\d!#%&*+<=>@^][^\s!#%&*+<=>@^]*>/; +var re1 = /a/g; +var re2 = /a/g; // "new" should create a new object, old webkit bug + +var CORRECT_NEW = new NativeRegExp(re1) !== re1; +var UNSUPPORTED_Y$3 = stickyHelpers$2.UNSUPPORTED_Y; +var BASE_FORCED = DESCRIPTORS$9 && (!CORRECT_NEW || UNSUPPORTED_Y$3 || UNSUPPORTED_DOT_ALL$2 || UNSUPPORTED_NCG$1 || fails$i(function () { + re2[MATCH$1] = false; // RegExp constructor can alter flags and IsRegExp works correct with @@match + + return NativeRegExp(re1) != re1 || NativeRegExp(re2) == re2 || NativeRegExp(re1, 'i') != '/a/i'; +})); + +var handleDotAll = function (string) { + var length = string.length; + var index = 0; + var result = ''; + var brackets = false; + var chr; + + for (; index <= length; index++) { + chr = string.charAt(index); + + if (chr === '\\') { + result += chr + string.charAt(++index); + continue; + } + + if (!brackets && chr === '.') { + result += '[\\s\\S]'; + } else { + if (chr === '[') { + brackets = true; + } else if (chr === ']') { + brackets = false; + } + + result += chr; + } + } + + return result; +}; + +var handleNCG = function (string) { + var length = string.length; + var index = 0; + var result = ''; + var named = []; + var names = {}; + var brackets = false; + var ncg = false; + var groupid = 0; + var groupname = ''; + var chr; + + for (; index <= length; index++) { + chr = string.charAt(index); + + if (chr === '\\') { + chr = chr + string.charAt(++index); + } else if (chr === ']') { + brackets = false; + } else if (!brackets) switch (true) { + case chr === '[': + brackets = true; + break; + + case chr === '(': + if (IS_NCG.test(string.slice(index + 1))) { + index += 2; + ncg = true; + } + + result += chr; + groupid++; + continue; + + case chr === '>' && ncg: + if (groupname === '' || hasOwn$7(names, groupname)) { + throw new SyntaxError('Invalid capture group name'); + } + + names[groupname] = true; + named.push([groupname, groupid]); + ncg = false; + groupname = ''; + continue; + } + + if (ncg) groupname += chr;else result += chr; + } + + return [result, named]; +}; // `RegExp` constructor +// https://tc39.es/ecma262/#sec-regexp-constructor + + +if (isForced('RegExp', BASE_FORCED)) { + var RegExpWrapper = function RegExp(pattern, flags) { + var thisIsRegExp = this instanceof RegExpWrapper; + var patternIsRegExp = isRegExp$4(pattern); + var flagsAreUndefined = flags === undefined; + var groups = []; + var rawPattern = pattern; + var rawFlags, dotAll, sticky, handled, result, state; + + if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) { + return pattern; + } + + if (patternIsRegExp || pattern instanceof RegExpWrapper) { + pattern = pattern.source; + if (flagsAreUndefined) flags = 'flags' in rawPattern ? rawPattern.flags : getFlags.call(rawPattern); + } + + pattern = pattern === undefined ? '' : toString$i(pattern); + flags = flags === undefined ? '' : toString$i(flags); + rawPattern = pattern; + + if (UNSUPPORTED_DOT_ALL$2 && 'dotAll' in re1) { + dotAll = !!flags && flags.indexOf('s') > -1; + if (dotAll) flags = flags.replace(/s/g, ''); + } + + rawFlags = flags; + + if (UNSUPPORTED_Y$3 && 'sticky' in re1) { + sticky = !!flags && flags.indexOf('y') > -1; + if (sticky) flags = flags.replace(/y/g, ''); + } + + if (UNSUPPORTED_NCG$1) { + handled = handleNCG(pattern); + pattern = handled[0]; + groups = handled[1]; + } + + result = inheritIfRequired$1(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype$6, RegExpWrapper); + + if (dotAll || sticky || groups.length) { + state = enforceInternalState(result); + + if (dotAll) { + state.dotAll = true; + state.raw = RegExpWrapper(handleDotAll(pattern), rawFlags); + } + + if (sticky) state.sticky = true; + if (groups.length) state.groups = groups; + } + + if (pattern !== rawPattern) try { + // fails in old engines, but we have no alternatives for unsupported regex syntax + createNonEnumerableProperty$8(result, 'source', rawPattern === '' ? '(?:)' : rawPattern); + } catch (error) { + /* empty */ + } + return result; + }; + + var proxy = function (key) { + key in RegExpWrapper || defineProperty$6(RegExpWrapper, key, { + configurable: true, + get: function () { + return NativeRegExp[key]; + }, + set: function (it) { + NativeRegExp[key] = it; + } + }); + }; + + for (var keys = getOwnPropertyNames$2(NativeRegExp), index = 0; keys.length > index;) { + proxy(keys[index++]); + } + + RegExpPrototype$6.constructor = RegExpWrapper; + RegExpWrapper.prototype = RegExpPrototype$6; + redefine$7(global$h, 'RegExp', RegExpWrapper); +} // https://tc39.es/ecma262/#sec-get-regexp-@@species + + +setSpecies$2('RegExp'); + +var DESCRIPTORS$8 = descriptors; + +var UNSUPPORTED_DOT_ALL$1 = regexpUnsupportedDotAll; + +var defineProperty$5 = objectDefineProperty.f; + +var getInternalState$d = internalState.get; + +var RegExpPrototype$5 = RegExp.prototype; // `RegExp.prototype.dotAll` getter +// https://tc39.es/ecma262/#sec-get-regexp.prototype.dotall + +if (DESCRIPTORS$8 && UNSUPPORTED_DOT_ALL$1) { + defineProperty$5(RegExpPrototype$5, 'dotAll', { + configurable: true, + get: function () { + if (this === RegExpPrototype$5) return undefined; // We can't use InternalStateModule.getterFor because + // we don't add metadata for regexps created by a literal. + + if (this instanceof RegExp) { + return !!getInternalState$d(this).dotAll; + } + + throw TypeError('Incompatible receiver, RegExp required'); + } + }); +} + +/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */ + +/* eslint-disable regexp/no-useless-quantifier -- testing */ + +var toString$h = toString$t; + +var regexpFlags = regexpFlags$1; + +var stickyHelpers$1 = regexpStickyHelpers; + +var shared$2 = shared$7.exports; + +var create$7 = objectCreate$1; + +var getInternalState$c = internalState.get; + +var UNSUPPORTED_DOT_ALL = regexpUnsupportedDotAll; + +var UNSUPPORTED_NCG = regexpUnsupportedNcg; + +var nativeExec = RegExp.prototype.exec; +var nativeReplace = shared$2('native-string-replace', String.prototype.replace); +var patchedExec = nativeExec; + +var UPDATES_LAST_INDEX_WRONG = function () { + var re1 = /a/; + var re2 = /b*/g; + nativeExec.call(re1, 'a'); + nativeExec.call(re2, 'a'); + return re1.lastIndex !== 0 || re2.lastIndex !== 0; +}(); + +var UNSUPPORTED_Y$2 = stickyHelpers$1.UNSUPPORTED_Y || stickyHelpers$1.BROKEN_CARET; // nonparticipating capturing group, copied from es5-shim's String#split patch. + +var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; +var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y$2 || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG; + +if (PATCH) { + // eslint-disable-next-line max-statements -- TODO + patchedExec = function exec(string) { + var re = this; + var state = getInternalState$c(re); + var str = toString$h(string); + var raw = state.raw; + var result, reCopy, lastIndex, match, i, object, group; + + if (raw) { + raw.lastIndex = re.lastIndex; + result = patchedExec.call(raw, str); + re.lastIndex = raw.lastIndex; + return result; + } + + var groups = state.groups; + var sticky = UNSUPPORTED_Y$2 && re.sticky; + var flags = regexpFlags.call(re); + var source = re.source; + var charsAdded = 0; + var strCopy = str; + + if (sticky) { + flags = flags.replace('y', ''); + + if (flags.indexOf('g') === -1) { + flags += 'g'; + } + + strCopy = str.slice(re.lastIndex); // Support anchored sticky behavior. + + if (re.lastIndex > 0 && (!re.multiline || re.multiline && str.charAt(re.lastIndex - 1) !== '\n')) { + source = '(?: ' + source + ')'; + strCopy = ' ' + strCopy; + charsAdded++; + } // ^(? + rx + ) is needed, in combination with some str slicing, to + // simulate the 'y' flag. + + + reCopy = new RegExp('^(?:' + source + ')', flags); + } + + if (NPCG_INCLUDED) { + reCopy = new RegExp('^' + source + '$(?!\\s)', flags); + } + + if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex; + match = nativeExec.call(sticky ? reCopy : re, strCopy); + + if (sticky) { + if (match) { + match.input = match.input.slice(charsAdded); + match[0] = match[0].slice(charsAdded); + match.index = re.lastIndex; + re.lastIndex += match[0].length; + } else re.lastIndex = 0; + } else if (UPDATES_LAST_INDEX_WRONG && match) { + re.lastIndex = re.global ? match.index + match[0].length : lastIndex; + } + + if (NPCG_INCLUDED && match && match.length > 1) { + // Fix browsers whose `exec` methods don't consistently return `undefined` + // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/ + nativeReplace.call(match[0], reCopy, function () { + for (i = 1; i < arguments.length - 2; i++) { + if (arguments[i] === undefined) match[i] = undefined; + } + }); + } + + if (match && groups) { + match.groups = object = create$7(null); + + for (i = 0; i < groups.length; i++) { + group = groups[i]; + object[group[0]] = match[group[1]]; + } + } + + return match; + }; +} + +var regexpExec$3 = patchedExec; + +var $$2r = _export; + +var exec = regexpExec$3; // `RegExp.prototype.exec` method +// https://tc39.es/ecma262/#sec-regexp.prototype.exec + + +$$2r({ + target: 'RegExp', + proto: true, + forced: /./.exec !== exec +}, { + exec: exec +}); + +var DESCRIPTORS$7 = descriptors; + +var objectDefinePropertyModule = objectDefineProperty; + +var regExpFlags = regexpFlags$1; + +var fails$h = fails$15; + +var FORCED$a = DESCRIPTORS$7 && fails$h(function () { + // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe + return Object.getOwnPropertyDescriptor(RegExp.prototype, 'flags').get.call({ + dotAll: true, + sticky: true + }) !== 'sy'; +}); // `RegExp.prototype.flags` getter +// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags + +if (FORCED$a) objectDefinePropertyModule.f(RegExp.prototype, 'flags', { + configurable: true, + get: regExpFlags +}); + +var DESCRIPTORS$6 = descriptors; + +var UNSUPPORTED_Y$1 = regexpStickyHelpers.UNSUPPORTED_Y; + +var defineProperty$4 = objectDefineProperty.f; + +var getInternalState$b = internalState.get; + +var RegExpPrototype$4 = RegExp.prototype; // `RegExp.prototype.sticky` getter +// https://tc39.es/ecma262/#sec-get-regexp.prototype.sticky + +if (DESCRIPTORS$6 && UNSUPPORTED_Y$1) { + defineProperty$4(RegExpPrototype$4, 'sticky', { + configurable: true, + get: function () { + if (this === RegExpPrototype$4) return undefined; // We can't use InternalStateModule.getterFor because + // we don't add metadata for regexps created by a literal. + + if (this instanceof RegExp) { + return !!getInternalState$b(this).sticky; + } + + throw TypeError('Incompatible receiver, RegExp required'); + } + }); +} + +var $$2q = _export; + +var isCallable$a = isCallable$z; + +var isObject$7 = isObject$C; + +var DELEGATES_TO_EXEC = function () { + var execCalled = false; + var re = /[ac]/; + + re.exec = function () { + execCalled = true; + return /./.exec.apply(this, arguments); + }; + + return re.test('abc') === true && execCalled; +}(); + +var nativeTest = /./.test; // `RegExp.prototype.test` method +// https://tc39.es/ecma262/#sec-regexp.prototype.test + +$$2q({ + target: 'RegExp', + proto: true, + forced: !DELEGATES_TO_EXEC +}, { + test: function (str) { + var exec = this.exec; + if (!isCallable$a(exec)) return nativeTest.call(this, str); + var result = exec.call(this, str); + + if (result !== null && !isObject$7(result)) { + throw new Error('RegExp exec method returned something other than an Object or null'); + } + + return !!result; + } +}); + +var PROPER_FUNCTION_NAME$2 = functionName.PROPER; + +var redefine$6 = redefine$l.exports; + +var anObject$1b = anObject$1C; + +var $toString$2 = toString$t; + +var fails$g = fails$15; + +var flags = regexpFlags$1; + +var TO_STRING = 'toString'; +var RegExpPrototype$3 = RegExp.prototype; +var nativeToString = RegExpPrototype$3[TO_STRING]; +var NOT_GENERIC = fails$g(function () { + return nativeToString.call({ + source: 'a', + flags: 'b' + }) != '/a/b'; +}); // FF44- RegExp#toString has a wrong name + +var INCORRECT_NAME = PROPER_FUNCTION_NAME$2 && nativeToString.name != TO_STRING; // `RegExp.prototype.toString` method +// https://tc39.es/ecma262/#sec-regexp.prototype.tostring + +if (NOT_GENERIC || INCORRECT_NAME) { + redefine$6(RegExp.prototype, TO_STRING, function toString() { + var R = anObject$1b(this); + var p = $toString$2(R.source); + var rf = R.flags; + var f = $toString$2(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype$3) ? flags.call(R) : rf); + return '/' + p + '/' + f; + }, { + unsafe: true + }); +} + +var collection$2 = collection$4; + +var collectionStrong = collectionStrong$2; // `Set` constructor +// https://tc39.es/ecma262/#sec-set-objects + + +var es_set = collection$2('Set', function (init) { + return function Set() { + return init(this, arguments.length ? arguments[0] : undefined); + }; +}, collectionStrong); + +var $$2p = _export; + +var requireObjectCoercible$d = requireObjectCoercible$j; + +var toIntegerOrInfinity$6 = toIntegerOrInfinity$i; + +var toString$g = toString$t; + +var fails$f = fails$15; + +var FORCED$9 = fails$f(function () { + return '𠮷'.at(0) !== '\uD842'; +}); // `String.prototype.at` method +// https://github.com/tc39/proposal-relative-indexing-method + +$$2p({ + target: 'String', + proto: true, + forced: FORCED$9 +}, { + at: function at(index) { + var S = toString$g(requireObjectCoercible$d(this)); + var len = S.length; + var relativeIndex = toIntegerOrInfinity$6(index); + var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex; + return k < 0 || k >= len ? undefined : S.charAt(k); + } +}); + +var toIntegerOrInfinity$5 = toIntegerOrInfinity$i; + +var toString$f = toString$t; + +var requireObjectCoercible$c = requireObjectCoercible$j; + +var createMethod$2 = function (CONVERT_TO_STRING) { + return function ($this, pos) { + var S = toString$f(requireObjectCoercible$c($this)); + var position = toIntegerOrInfinity$5(pos); + var size = S.length; + var first, second; + if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined; + first = S.charCodeAt(position); + return first < 0xD800 || first > 0xDBFF || position + 1 === size || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF ? CONVERT_TO_STRING ? S.charAt(position) : first : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000; + }; +}; + +var stringMultibyte = { + // `String.prototype.codePointAt` method + // https://tc39.es/ecma262/#sec-string.prototype.codepointat + codeAt: createMethod$2(false), + // `String.prototype.at` method + // https://github.com/mathiasbynens/String.prototype.at + charAt: createMethod$2(true) +}; + +var $$2o = _export; + +var codeAt$2 = stringMultibyte.codeAt; // `String.prototype.codePointAt` method +// https://tc39.es/ecma262/#sec-string.prototype.codepointat + + +$$2o({ + target: 'String', + proto: true +}, { + codePointAt: function codePointAt(pos) { + return codeAt$2(this, pos); + } +}); + +var isRegExp$3 = isRegexp; + +var notARegexp = function (it) { + if (isRegExp$3(it)) { + throw TypeError("The method doesn't accept regular expressions"); + } + + return it; +}; + +var wellKnownSymbol$h = wellKnownSymbol$G; + +var MATCH = wellKnownSymbol$h('match'); + +var correctIsRegexpLogic = function (METHOD_NAME) { + var regexp = /./; + + try { + '/./'[METHOD_NAME](regexp); + } catch (error1) { + try { + regexp[MATCH] = false; + return '/./'[METHOD_NAME](regexp); + } catch (error2) { + /* empty */ + } + } + + return false; +}; + +var $$2n = _export; + +var getOwnPropertyDescriptor$2 = objectGetOwnPropertyDescriptor.f; + +var toLength$7 = toLength$d; + +var toString$e = toString$t; + +var notARegExp$2 = notARegexp; + +var requireObjectCoercible$b = requireObjectCoercible$j; + +var correctIsRegExpLogic$2 = correctIsRegexpLogic; + + +var $endsWith = ''.endsWith; +var min$5 = Math.min; +var CORRECT_IS_REGEXP_LOGIC$1 = correctIsRegExpLogic$2('endsWith'); // https://github.com/zloirock/core-js/pull/702 + +var MDN_POLYFILL_BUG$1 = !CORRECT_IS_REGEXP_LOGIC$1 && !!function () { + var descriptor = getOwnPropertyDescriptor$2(String.prototype, 'endsWith'); + return descriptor && !descriptor.writable; +}(); // `String.prototype.endsWith` method +// https://tc39.es/ecma262/#sec-string.prototype.endswith + +$$2n({ + target: 'String', + proto: true, + forced: !MDN_POLYFILL_BUG$1 && !CORRECT_IS_REGEXP_LOGIC$1 +}, { + endsWith: function endsWith(searchString + /* , endPosition = @length */ + ) { + var that = toString$e(requireObjectCoercible$b(this)); + notARegExp$2(searchString); + var endPosition = arguments.length > 1 ? arguments[1] : undefined; + var len = that.length; + var end = endPosition === undefined ? len : min$5(toLength$7(endPosition), len); + var search = toString$e(searchString); + return $endsWith ? $endsWith.call(that, search, end) : that.slice(end - search.length, end) === search; + } +}); + +var $$2m = _export; + +var toAbsoluteIndex$1 = toAbsoluteIndex$8; + +var fromCharCode$1 = String.fromCharCode; // eslint-disable-next-line es/no-string-fromcodepoint -- required for testing + +var $fromCodePoint = String.fromCodePoint; // length should be 1, old FF problem + +var INCORRECT_LENGTH = !!$fromCodePoint && $fromCodePoint.length != 1; // `String.fromCodePoint` method +// https://tc39.es/ecma262/#sec-string.fromcodepoint + +$$2m({ + target: 'String', + stat: true, + forced: INCORRECT_LENGTH +}, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + fromCodePoint: function fromCodePoint(x) { + var elements = []; + var length = arguments.length; + var i = 0; + var code; + + while (length > i) { + code = +arguments[i++]; + if (toAbsoluteIndex$1(code, 0x10FFFF) !== code) throw RangeError(code + ' is not a valid code point'); + elements.push(code < 0x10000 ? fromCharCode$1(code) : fromCharCode$1(((code -= 0x10000) >> 10) + 0xD800, code % 0x400 + 0xDC00)); + } + + return elements.join(''); + } +}); + +var $$2l = _export; + +var notARegExp$1 = notARegexp; + +var requireObjectCoercible$a = requireObjectCoercible$j; + +var toString$d = toString$t; + +var correctIsRegExpLogic$1 = correctIsRegexpLogic; // `String.prototype.includes` method +// https://tc39.es/ecma262/#sec-string.prototype.includes + + +$$2l({ + target: 'String', + proto: true, + forced: !correctIsRegExpLogic$1('includes') +}, { + includes: function includes(searchString + /* , position = 0 */ + ) { + return !!~toString$d(requireObjectCoercible$a(this)).indexOf(toString$d(notARegExp$1(searchString)), arguments.length > 1 ? arguments[1] : undefined); + } +}); + +var charAt$3 = stringMultibyte.charAt; + +var toString$c = toString$t; + +var InternalStateModule$d = internalState; + +var defineIterator = defineIterator$3; + +var STRING_ITERATOR$1 = 'String Iterator'; +var setInternalState$d = InternalStateModule$d.set; +var getInternalState$a = InternalStateModule$d.getterFor(STRING_ITERATOR$1); // `String.prototype[@@iterator]` method +// https://tc39.es/ecma262/#sec-string.prototype-@@iterator + +defineIterator(String, 'String', function (iterated) { + setInternalState$d(this, { + type: STRING_ITERATOR$1, + string: toString$c(iterated), + index: 0 + }); // `%StringIteratorPrototype%.next` method + // https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next +}, function next() { + var state = getInternalState$a(this); + var string = state.string; + var index = state.index; + var point; + if (index >= string.length) return { + value: undefined, + done: true + }; + point = charAt$3(string, index); + state.index += point.length; + return { + value: point, + done: false + }; +}); + +var redefine$5 = redefine$l.exports; + +var regexpExec$2 = regexpExec$3; + +var fails$e = fails$15; + +var wellKnownSymbol$g = wellKnownSymbol$G; + +var createNonEnumerableProperty$7 = createNonEnumerableProperty$h; + +var SPECIES = wellKnownSymbol$g('species'); +var RegExpPrototype$2 = RegExp.prototype; + +var fixRegexpWellKnownSymbolLogic = function (KEY, exec, FORCED, SHAM) { + var SYMBOL = wellKnownSymbol$g(KEY); + var DELEGATES_TO_SYMBOL = !fails$e(function () { + // String methods call symbol-named RegEp methods + var O = {}; + + O[SYMBOL] = function () { + return 7; + }; + + return ''[KEY](O) != 7; + }); + var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails$e(function () { + // Symbol-named RegExp methods call .exec + var execCalled = false; + var re = /a/; + + if (KEY === 'split') { + // We can't use real regex here since it causes deoptimization + // and serious performance degradation in V8 + // https://github.com/zloirock/core-js/issues/306 + re = {}; // RegExp[@@split] doesn't call the regex's exec method, but first creates + // a new one. We need to return the patched regex when creating the new one. + + re.constructor = {}; + + re.constructor[SPECIES] = function () { + return re; + }; + + re.flags = ''; + re[SYMBOL] = /./[SYMBOL]; + } + + re.exec = function () { + execCalled = true; + return null; + }; + + re[SYMBOL](''); + return !execCalled; + }); + + if (!DELEGATES_TO_SYMBOL || !DELEGATES_TO_EXEC || FORCED) { + var nativeRegExpMethod = /./[SYMBOL]; + var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) { + var $exec = regexp.exec; + + if ($exec === regexpExec$2 || $exec === RegExpPrototype$2.exec) { + if (DELEGATES_TO_SYMBOL && !forceStringMethod) { + // The native String method already delegates to @@method (this + // polyfilled function), leasing to infinite recursion. + // We avoid it by directly calling the native @@method method. + return { + done: true, + value: nativeRegExpMethod.call(regexp, str, arg2) + }; + } + + return { + done: true, + value: nativeMethod.call(str, regexp, arg2) + }; + } + + return { + done: false + }; + }); + redefine$5(String.prototype, KEY, methods[0]); + redefine$5(RegExpPrototype$2, SYMBOL, methods[1]); + } + + if (SHAM) createNonEnumerableProperty$7(RegExpPrototype$2[SYMBOL], 'sham', true); +}; + +var charAt$2 = stringMultibyte.charAt; // `AdvanceStringIndex` abstract operation +// https://tc39.es/ecma262/#sec-advancestringindex + + +var advanceStringIndex$4 = function (S, index, unicode) { + return index + (unicode ? charAt$2(S, index).length : 1); +}; + +var anObject$1a = anObject$1C; + +var isCallable$9 = isCallable$z; + +var classof$3 = classofRaw$1; + +var regexpExec$1 = regexpExec$3; // `RegExpExec` abstract operation +// https://tc39.es/ecma262/#sec-regexpexec + + +var regexpExecAbstract = function (R, S) { + var exec = R.exec; + + if (isCallable$9(exec)) { + var result = exec.call(R, S); + if (result !== null) anObject$1a(result); + return result; + } + + if (classof$3(R) === 'RegExp') return regexpExec$1.call(R, S); + throw TypeError('RegExp#exec called on incompatible receiver'); +}; + +var fixRegExpWellKnownSymbolLogic$3 = fixRegexpWellKnownSymbolLogic; + +var anObject$19 = anObject$1C; + +var toLength$6 = toLength$d; + +var toString$b = toString$t; + +var requireObjectCoercible$9 = requireObjectCoercible$j; + +var getMethod$d = getMethod$h; + +var advanceStringIndex$3 = advanceStringIndex$4; + +var regExpExec$3 = regexpExecAbstract; // @@match logic + + +fixRegExpWellKnownSymbolLogic$3('match', function (MATCH, nativeMatch, maybeCallNative) { + return [// `String.prototype.match` method + // https://tc39.es/ecma262/#sec-string.prototype.match + function match(regexp) { + var O = requireObjectCoercible$9(this); + var matcher = regexp == undefined ? undefined : getMethod$d(regexp, MATCH); + return matcher ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](toString$b(O)); + }, // `RegExp.prototype[@@match]` method + // https://tc39.es/ecma262/#sec-regexp.prototype-@@match + function (string) { + var rx = anObject$19(this); + var S = toString$b(string); + var res = maybeCallNative(nativeMatch, rx, S); + if (res.done) return res.value; + if (!rx.global) return regExpExec$3(rx, S); + var fullUnicode = rx.unicode; + rx.lastIndex = 0; + var A = []; + var n = 0; + var result; + + while ((result = regExpExec$3(rx, S)) !== null) { + var matchStr = toString$b(result[0]); + A[n] = matchStr; + if (matchStr === '') rx.lastIndex = advanceStringIndex$3(S, toLength$6(rx.lastIndex), fullUnicode); + n++; + } + + return n === 0 ? null : A; + }]; +}); + +/* eslint-disable es/no-string-prototype-matchall -- safe */ + +var $$2k = _export; + +var createIteratorConstructor$5 = createIteratorConstructor$7; + +var requireObjectCoercible$8 = requireObjectCoercible$j; + +var toLength$5 = toLength$d; + +var toString$a = toString$t; + +var anObject$18 = anObject$1C; + +var classof$2 = classofRaw$1; + +var isRegExp$2 = isRegexp; + +var getRegExpFlags$1 = regexpFlags$1; + +var getMethod$c = getMethod$h; + +var redefine$4 = redefine$l.exports; + +var fails$d = fails$15; + +var wellKnownSymbol$f = wellKnownSymbol$G; + +var speciesConstructor$b = speciesConstructor$f; + +var advanceStringIndex$2 = advanceStringIndex$4; + +var regExpExec$2 = regexpExecAbstract; + +var InternalStateModule$c = internalState; + +var IS_PURE$D = isPure; + +var MATCH_ALL = wellKnownSymbol$f('matchAll'); +var REGEXP_STRING = 'RegExp String'; +var REGEXP_STRING_ITERATOR = REGEXP_STRING + ' Iterator'; +var setInternalState$c = InternalStateModule$c.set; +var getInternalState$9 = InternalStateModule$c.getterFor(REGEXP_STRING_ITERATOR); +var RegExpPrototype$1 = RegExp.prototype; +var nativeMatchAll = ''.matchAll; +var WORKS_WITH_NON_GLOBAL_REGEX = !!nativeMatchAll && !fails$d(function () { + 'a'.matchAll(/./); +}); // eslint-disable-next-line max-len -- ignore + +var $RegExpStringIterator = createIteratorConstructor$5(function RegExpStringIterator(regexp, string, global, fullUnicode) { + setInternalState$c(this, { + type: REGEXP_STRING_ITERATOR, + regexp: regexp, + string: string, + global: global, + unicode: fullUnicode, + done: false + }); +}, REGEXP_STRING, function next() { + var state = getInternalState$9(this); + if (state.done) return { + value: undefined, + done: true + }; + var R = state.regexp; + var S = state.string; + var match = regExpExec$2(R, S); + if (match === null) return { + value: undefined, + done: state.done = true + }; + + if (state.global) { + if (toString$a(match[0]) === '') R.lastIndex = advanceStringIndex$2(S, toLength$5(R.lastIndex), state.unicode); + return { + value: match, + done: false + }; + } + + state.done = true; + return { + value: match, + done: false + }; +}); + +var $matchAll = function (string) { + var R = anObject$18(this); + var S = toString$a(string); + var C, flagsValue, flags, matcher, global, fullUnicode; + C = speciesConstructor$b(R, RegExp); + flagsValue = R.flags; + + if (flagsValue === undefined && R instanceof RegExp && !('flags' in RegExpPrototype$1)) { + flagsValue = getRegExpFlags$1.call(R); + } + + flags = flagsValue === undefined ? '' : toString$a(flagsValue); + matcher = new C(C === RegExp ? R.source : R, flags); + global = !!~flags.indexOf('g'); + fullUnicode = !!~flags.indexOf('u'); + matcher.lastIndex = toLength$5(R.lastIndex); + return new $RegExpStringIterator(matcher, S, global, fullUnicode); +}; // `String.prototype.matchAll` method +// https://tc39.es/ecma262/#sec-string.prototype.matchall + + +$$2k({ + target: 'String', + proto: true, + forced: WORKS_WITH_NON_GLOBAL_REGEX +}, { + matchAll: function matchAll(regexp) { + var O = requireObjectCoercible$8(this); + var flags, S, matcher, rx; + + if (regexp != null) { + if (isRegExp$2(regexp)) { + flags = toString$a(requireObjectCoercible$8('flags' in RegExpPrototype$1 ? regexp.flags : getRegExpFlags$1.call(regexp))); + if (!~flags.indexOf('g')) throw TypeError('`.matchAll` does not allow non-global regexes'); + } + + if (WORKS_WITH_NON_GLOBAL_REGEX) return nativeMatchAll.apply(O, arguments); + matcher = getMethod$c(regexp, MATCH_ALL); + if (matcher === undefined && IS_PURE$D && classof$2(regexp) == 'RegExp') matcher = $matchAll; + if (matcher) return matcher.call(regexp, O); + } else if (WORKS_WITH_NON_GLOBAL_REGEX) return nativeMatchAll.apply(O, arguments); + + S = toString$a(O); + rx = new RegExp(regexp, 'g'); + return rx[MATCH_ALL](S); + } +}); +MATCH_ALL in RegExpPrototype$1 || redefine$4(RegExpPrototype$1, MATCH_ALL, $matchAll); + +// https://github.com/zloirock/core-js/issues/280 +var userAgent$1 = engineUserAgent; + +var stringPadWebkitBug = /Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(userAgent$1); + +var $$2j = _export; + +var $padEnd = stringPad.end; + +var WEBKIT_BUG$1 = stringPadWebkitBug; // `String.prototype.padEnd` method +// https://tc39.es/ecma262/#sec-string.prototype.padend + + +$$2j({ + target: 'String', + proto: true, + forced: WEBKIT_BUG$1 +}, { + padEnd: function padEnd(maxLength + /* , fillString = ' ' */ + ) { + return $padEnd(this, maxLength, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +var $$2i = _export; + +var $padStart = stringPad.start; + +var WEBKIT_BUG = stringPadWebkitBug; // `String.prototype.padStart` method +// https://tc39.es/ecma262/#sec-string.prototype.padstart + + +$$2i({ + target: 'String', + proto: true, + forced: WEBKIT_BUG +}, { + padStart: function padStart(maxLength + /* , fillString = ' ' */ + ) { + return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined); + } +}); + +var $$2h = _export; + +var toIndexedObject = toIndexedObject$d; + +var toObject$d = toObject$A; + +var toString$9 = toString$t; + +var lengthOfArrayLike$9 = lengthOfArrayLike$q; + +var ArrayPrototype = Array.prototype; +var push$3 = ArrayPrototype.push; +var join = ArrayPrototype.join; // `String.raw` method +// https://tc39.es/ecma262/#sec-string.raw + +$$2h({ + target: 'String', + stat: true +}, { + raw: function raw(template) { + var rawTemplate = toIndexedObject(toObject$d(template).raw); + var literalSegments = lengthOfArrayLike$9(rawTemplate); + var argumentsLength = arguments.length; + var elements = []; + var i = 0; + + while (literalSegments > i) { + push$3.call(elements, toString$9(rawTemplate[i++])); + if (i === literalSegments) return join.call(elements, ''); + if (i < argumentsLength) push$3.call(elements, toString$9(arguments[i])); + } + } +}); + +var $$2g = _export; + +var repeat = stringRepeat; // `String.prototype.repeat` method +// https://tc39.es/ecma262/#sec-string.prototype.repeat + + +$$2g({ + target: 'String', + proto: true +}, { + repeat: repeat +}); + +var toObject$c = toObject$A; + +var floor$3 = Math.floor; +var replace$1 = ''.replace; +var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d{1,2}|<[^>]*>)/g; +var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d{1,2})/g; // `GetSubstitution` abstract operation +// https://tc39.es/ecma262/#sec-getsubstitution + +var getSubstitution$2 = function (matched, str, position, captures, namedCaptures, replacement) { + var tailPos = position + matched.length; + var m = captures.length; + var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED; + + if (namedCaptures !== undefined) { + namedCaptures = toObject$c(namedCaptures); + symbols = SUBSTITUTION_SYMBOLS; + } + + return replace$1.call(replacement, symbols, function (match, ch) { + var capture; + + switch (ch.charAt(0)) { + case '$': + return '$'; + + case '&': + return matched; + + case '`': + return str.slice(0, position); + + case "'": + return str.slice(tailPos); + + case '<': + capture = namedCaptures[ch.slice(1, -1)]; + break; + + default: + // \d\d? + var n = +ch; + if (n === 0) return match; + + if (n > m) { + var f = floor$3(n / 10); + if (f === 0) return match; + if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1); + return match; + } + + capture = captures[n - 1]; + } + + return capture === undefined ? '' : capture; + }); +}; + +var fixRegExpWellKnownSymbolLogic$2 = fixRegexpWellKnownSymbolLogic; + +var fails$c = fails$15; + +var anObject$17 = anObject$1C; + +var isCallable$8 = isCallable$z; + +var toIntegerOrInfinity$4 = toIntegerOrInfinity$i; + +var toLength$4 = toLength$d; + +var toString$8 = toString$t; + +var requireObjectCoercible$7 = requireObjectCoercible$j; + +var advanceStringIndex$1 = advanceStringIndex$4; + +var getMethod$b = getMethod$h; + +var getSubstitution$1 = getSubstitution$2; + +var regExpExec$1 = regexpExecAbstract; + +var wellKnownSymbol$e = wellKnownSymbol$G; + +var REPLACE$1 = wellKnownSymbol$e('replace'); +var max$3 = Math.max; +var min$4 = Math.min; + +var maybeToString = function (it) { + return it === undefined ? it : String(it); +}; // IE <= 11 replaces $0 with the whole match, as if it was $& +// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0 + + +var REPLACE_KEEPS_$0 = function () { + // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing + return 'a'.replace(/./, '$0') === '$0'; +}(); // Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string + + +var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = function () { + if (/./[REPLACE$1]) { + return /./[REPLACE$1]('a', '$0') === ''; + } + + return false; +}(); + +var REPLACE_SUPPORTS_NAMED_GROUPS = !fails$c(function () { + var re = /./; + + re.exec = function () { + var result = []; + result.groups = { + a: '7' + }; + return result; + }; // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive + + + return ''.replace(re, '$') !== '7'; +}); // @@replace logic + +fixRegExpWellKnownSymbolLogic$2('replace', function (_, nativeReplace, maybeCallNative) { + var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0'; + return [// `String.prototype.replace` method + // https://tc39.es/ecma262/#sec-string.prototype.replace + function replace(searchValue, replaceValue) { + var O = requireObjectCoercible$7(this); + var replacer = searchValue == undefined ? undefined : getMethod$b(searchValue, REPLACE$1); + return replacer ? replacer.call(searchValue, O, replaceValue) : nativeReplace.call(toString$8(O), searchValue, replaceValue); + }, // `RegExp.prototype[@@replace]` method + // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace + function (string, replaceValue) { + var rx = anObject$17(this); + var S = toString$8(string); + + if (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1 && replaceValue.indexOf('$<') === -1) { + var res = maybeCallNative(nativeReplace, rx, S, replaceValue); + if (res.done) return res.value; + } + + var functionalReplace = isCallable$8(replaceValue); + if (!functionalReplace) replaceValue = toString$8(replaceValue); + var global = rx.global; + + if (global) { + var fullUnicode = rx.unicode; + rx.lastIndex = 0; + } + + var results = []; + + while (true) { + var result = regExpExec$1(rx, S); + if (result === null) break; + results.push(result); + if (!global) break; + var matchStr = toString$8(result[0]); + if (matchStr === '') rx.lastIndex = advanceStringIndex$1(S, toLength$4(rx.lastIndex), fullUnicode); + } + + var accumulatedResult = ''; + var nextSourcePosition = 0; + + for (var i = 0; i < results.length; i++) { + result = results[i]; + var matched = toString$8(result[0]); + var position = max$3(min$4(toIntegerOrInfinity$4(result.index), S.length), 0); + var captures = []; // NOTE: This is equivalent to + // captures = result.slice(1).map(maybeToString) + // but for some reason `nativeSlice.call(result, 1, result.length)` (called in + // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and + // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it. + + for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j])); + + var namedCaptures = result.groups; + + if (functionalReplace) { + var replacerArgs = [matched].concat(captures, position, S); + if (namedCaptures !== undefined) replacerArgs.push(namedCaptures); + var replacement = toString$8(replaceValue.apply(undefined, replacerArgs)); + } else { + replacement = getSubstitution$1(matched, S, position, captures, namedCaptures, replaceValue); + } + + if (position >= nextSourcePosition) { + accumulatedResult += S.slice(nextSourcePosition, position) + replacement; + nextSourcePosition = position + matched.length; + } + } + + return accumulatedResult + S.slice(nextSourcePosition); + }]; +}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE); + +var $$2f = _export; + +var requireObjectCoercible$6 = requireObjectCoercible$j; + +var isCallable$7 = isCallable$z; + +var isRegExp$1 = isRegexp; + +var toString$7 = toString$t; + +var getMethod$a = getMethod$h; + +var getRegExpFlags = regexpFlags$1; + +var getSubstitution = getSubstitution$2; + +var wellKnownSymbol$d = wellKnownSymbol$G; + +var REPLACE = wellKnownSymbol$d('replace'); +var RegExpPrototype = RegExp.prototype; +var max$2 = Math.max; + +var stringIndexOf = function (string, searchValue, fromIndex) { + if (fromIndex > string.length) return -1; + if (searchValue === '') return fromIndex; + return string.indexOf(searchValue, fromIndex); +}; // `String.prototype.replaceAll` method +// https://tc39.es/ecma262/#sec-string.prototype.replaceall + + +$$2f({ + target: 'String', + proto: true +}, { + replaceAll: function replaceAll(searchValue, replaceValue) { + var O = requireObjectCoercible$6(this); + var IS_REG_EXP, flags, replacer, string, searchString, functionalReplace, searchLength, advanceBy, replacement; + var position = 0; + var endOfLastMatch = 0; + var result = ''; + + if (searchValue != null) { + IS_REG_EXP = isRegExp$1(searchValue); + + if (IS_REG_EXP) { + flags = toString$7(requireObjectCoercible$6('flags' in RegExpPrototype ? searchValue.flags : getRegExpFlags.call(searchValue))); + if (!~flags.indexOf('g')) throw TypeError('`.replaceAll` does not allow non-global regexes'); + } + + replacer = getMethod$a(searchValue, REPLACE); + + if (replacer) { + return replacer.call(searchValue, O, replaceValue); + } + } + + string = toString$7(O); + searchString = toString$7(searchValue); + functionalReplace = isCallable$7(replaceValue); + if (!functionalReplace) replaceValue = toString$7(replaceValue); + searchLength = searchString.length; + advanceBy = max$2(1, searchLength); + position = stringIndexOf(string, searchString, 0); + + while (position !== -1) { + if (functionalReplace) { + replacement = toString$7(replaceValue(searchString, position, string)); + } else { + replacement = getSubstitution(searchString, string, position, [], undefined, replaceValue); + } + + result += string.slice(endOfLastMatch, position) + replacement; + endOfLastMatch = position + searchLength; + position = stringIndexOf(string, searchString, position + advanceBy); + } + + if (endOfLastMatch < string.length) { + result += string.slice(endOfLastMatch); + } + + return result; + } +}); + +var fixRegExpWellKnownSymbolLogic$1 = fixRegexpWellKnownSymbolLogic; + +var anObject$16 = anObject$1C; + +var requireObjectCoercible$5 = requireObjectCoercible$j; + +var sameValue = sameValue$1; + +var toString$6 = toString$t; + +var getMethod$9 = getMethod$h; + +var regExpExec = regexpExecAbstract; // @@search logic + + +fixRegExpWellKnownSymbolLogic$1('search', function (SEARCH, nativeSearch, maybeCallNative) { + return [// `String.prototype.search` method + // https://tc39.es/ecma262/#sec-string.prototype.search + function search(regexp) { + var O = requireObjectCoercible$5(this); + var searcher = regexp == undefined ? undefined : getMethod$9(regexp, SEARCH); + return searcher ? searcher.call(regexp, O) : new RegExp(regexp)[SEARCH](toString$6(O)); + }, // `RegExp.prototype[@@search]` method + // https://tc39.es/ecma262/#sec-regexp.prototype-@@search + function (string) { + var rx = anObject$16(this); + var S = toString$6(string); + var res = maybeCallNative(nativeSearch, rx, S); + if (res.done) return res.value; + var previousLastIndex = rx.lastIndex; + if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0; + var result = regExpExec(rx, S); + if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex; + return result === null ? -1 : result.index; + }]; +}); + +var fixRegExpWellKnownSymbolLogic = fixRegexpWellKnownSymbolLogic; + +var isRegExp = isRegexp; + +var anObject$15 = anObject$1C; + +var requireObjectCoercible$4 = requireObjectCoercible$j; + +var speciesConstructor$a = speciesConstructor$f; + +var advanceStringIndex = advanceStringIndex$4; + +var toLength$3 = toLength$d; + +var toString$5 = toString$t; + +var getMethod$8 = getMethod$h; + +var callRegExpExec = regexpExecAbstract; + +var regexpExec = regexpExec$3; + +var stickyHelpers = regexpStickyHelpers; + +var fails$b = fails$15; + +var UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y; +var arrayPush = [].push; +var min$3 = Math.min; +var MAX_UINT32 = 0xFFFFFFFF; // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec +// Weex JS has frozen built-in prototypes, so use try / catch wrapper + +var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails$b(function () { + // eslint-disable-next-line regexp/no-empty-group -- required for testing + var re = /(?:)/; + var originalExec = re.exec; + + re.exec = function () { + return originalExec.apply(this, arguments); + }; + + var result = 'ab'.split(re); + return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b'; +}); // @@split logic + +fixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) { + var internalSplit; + + if ('abbc'.split(/(b)*/)[1] == 'c' || // eslint-disable-next-line regexp/no-empty-group -- required for testing + 'test'.split(/(?:)/, -1).length != 4 || 'ab'.split(/(?:ab)*/).length != 2 || '.'.split(/(.?)(.?)/).length != 4 || // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing + '.'.split(/()()/).length > 1 || ''.split(/.?/).length) { + // based on es5-shim implementation, need to rework it + internalSplit = function (separator, limit) { + var string = toString$5(requireObjectCoercible$4(this)); + var lim = limit === undefined ? MAX_UINT32 : limit >>> 0; + if (lim === 0) return []; + if (separator === undefined) return [string]; // If `separator` is not a regex, use native split + + if (!isRegExp(separator)) { + return nativeSplit.call(string, separator, lim); + } + + var output = []; + var flags = (separator.ignoreCase ? 'i' : '') + (separator.multiline ? 'm' : '') + (separator.unicode ? 'u' : '') + (separator.sticky ? 'y' : ''); + var lastLastIndex = 0; // Make `global` and avoid `lastIndex` issues by working with a copy + + var separatorCopy = new RegExp(separator.source, flags + 'g'); + var match, lastIndex, lastLength; + + while (match = regexpExec.call(separatorCopy, string)) { + lastIndex = separatorCopy.lastIndex; + + if (lastIndex > lastLastIndex) { + output.push(string.slice(lastLastIndex, match.index)); + if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1)); + lastLength = match[0].length; + lastLastIndex = lastIndex; + if (output.length >= lim) break; + } + + if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop + } + + if (lastLastIndex === string.length) { + if (lastLength || !separatorCopy.test('')) output.push(''); + } else output.push(string.slice(lastLastIndex)); + + return output.length > lim ? output.slice(0, lim) : output; + }; // Chakra, V8 + + } else if ('0'.split(undefined, 0).length) { + internalSplit = function (separator, limit) { + return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit); + }; + } else internalSplit = nativeSplit; + + return [// `String.prototype.split` method + // https://tc39.es/ecma262/#sec-string.prototype.split + function split(separator, limit) { + var O = requireObjectCoercible$4(this); + var splitter = separator == undefined ? undefined : getMethod$8(separator, SPLIT); + return splitter ? splitter.call(separator, O, limit) : internalSplit.call(toString$5(O), separator, limit); + }, // `RegExp.prototype[@@split]` method + // https://tc39.es/ecma262/#sec-regexp.prototype-@@split + // + // NOTE: This cannot be properly polyfilled in engines that don't support + // the 'y' flag. + function (string, limit) { + var rx = anObject$15(this); + var S = toString$5(string); + var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit); + if (res.done) return res.value; + var C = speciesConstructor$a(rx, RegExp); + var unicodeMatching = rx.unicode; + var flags = (rx.ignoreCase ? 'i' : '') + (rx.multiline ? 'm' : '') + (rx.unicode ? 'u' : '') + (UNSUPPORTED_Y ? 'g' : 'y'); // ^(? + rx + ) is needed, in combination with some S slicing, to + // simulate the 'y' flag. + + var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags); + var lim = limit === undefined ? MAX_UINT32 : limit >>> 0; + if (lim === 0) return []; + if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : []; + var p = 0; + var q = 0; + var A = []; + + while (q < S.length) { + splitter.lastIndex = UNSUPPORTED_Y ? 0 : q; + var z = callRegExpExec(splitter, UNSUPPORTED_Y ? S.slice(q) : S); + var e; + + if (z === null || (e = min$3(toLength$3(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p) { + q = advanceStringIndex(S, q, unicodeMatching); + } else { + A.push(S.slice(p, q)); + if (A.length === lim) return A; + + for (var i = 1; i <= z.length - 1; i++) { + A.push(z[i]); + if (A.length === lim) return A; + } + + q = p = e; + } + } + + A.push(S.slice(p)); + return A; + }]; +}, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y); + +var $$2e = _export; + +var getOwnPropertyDescriptor$1 = objectGetOwnPropertyDescriptor.f; + +var toLength$2 = toLength$d; + +var toString$4 = toString$t; + +var notARegExp = notARegexp; + +var requireObjectCoercible$3 = requireObjectCoercible$j; + +var correctIsRegExpLogic = correctIsRegexpLogic; + + +var $startsWith = ''.startsWith; +var min$2 = Math.min; +var CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('startsWith'); // https://github.com/zloirock/core-js/pull/702 + +var MDN_POLYFILL_BUG = !CORRECT_IS_REGEXP_LOGIC && !!function () { + var descriptor = getOwnPropertyDescriptor$1(String.prototype, 'startsWith'); + return descriptor && !descriptor.writable; +}(); // `String.prototype.startsWith` method +// https://tc39.es/ecma262/#sec-string.prototype.startswith + +$$2e({ + target: 'String', + proto: true, + forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC +}, { + startsWith: function startsWith(searchString + /* , position = 0 */ + ) { + var that = toString$4(requireObjectCoercible$3(this)); + notARegExp(searchString); + var index = toLength$2(min$2(arguments.length > 1 ? arguments[1] : undefined, that.length)); + var search = toString$4(searchString); + return $startsWith ? $startsWith.call(that, search, index) : that.slice(index, index + search.length) === search; + } +}); + +var $$2d = _export; + +var requireObjectCoercible$2 = requireObjectCoercible$j; + +var toIntegerOrInfinity$3 = toIntegerOrInfinity$i; + +var toString$3 = toString$t; + +var slice$1 = ''.slice; +var max$1 = Math.max; +var min$1 = Math.min; // eslint-disable-next-line unicorn/prefer-string-slice -- required for testing + +var FORCED$8 = !''.substr || 'ab'.substr(-1) !== 'b'; // `String.prototype.substr` method +// https://tc39.es/ecma262/#sec-string.prototype.substr + +$$2d({ + target: 'String', + proto: true, + forced: FORCED$8 +}, { + substr: function substr(start, length) { + var that = toString$3(requireObjectCoercible$2(this)); + var size = that.length; + var intStart = toIntegerOrInfinity$3(start); + var intLength, intEnd; + if (intStart === Infinity) intStart = 0; + if (intStart < 0) intStart = max$1(size + intStart, 0); + intLength = length === undefined ? size : toIntegerOrInfinity$3(length); + if (intLength <= 0 || intLength === Infinity) return ''; + intEnd = min$1(intStart + intLength, size); + return intStart >= intEnd ? '' : slice$1.call(that, intStart, intEnd); + } +}); + +var PROPER_FUNCTION_NAME$1 = functionName.PROPER; + +var fails$a = fails$15; + +var whitespaces = whitespaces$4; + +var non = '\u200B\u0085\u180E'; // check that a method works with the correct list +// of whitespaces and has a correct name + +var stringTrimForced = function (METHOD_NAME) { + return fails$a(function () { + return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() !== non || PROPER_FUNCTION_NAME$1 && whitespaces[METHOD_NAME].name !== METHOD_NAME; + }); +}; + +var $$2c = _export; + +var $trim = stringTrim.trim; + +var forcedStringTrimMethod$2 = stringTrimForced; // `String.prototype.trim` method +// https://tc39.es/ecma262/#sec-string.prototype.trim + + +$$2c({ + target: 'String', + proto: true, + forced: forcedStringTrimMethod$2('trim') +}, { + trim: function trim() { + return $trim(this); + } +}); + +var $$2b = _export; + +var $trimEnd = stringTrim.end; + +var forcedStringTrimMethod$1 = stringTrimForced; + +var FORCED$7 = forcedStringTrimMethod$1('trimEnd'); +var trimEnd = FORCED$7 ? function trimEnd() { + return $trimEnd(this); // eslint-disable-next-line es/no-string-prototype-trimstart-trimend -- safe +} : ''.trimEnd; // `String.prototype.{ trimEnd, trimRight }` methods +// https://tc39.es/ecma262/#sec-string.prototype.trimend +// https://tc39.es/ecma262/#String.prototype.trimright + +$$2b({ + target: 'String', + proto: true, + name: 'trimEnd', + forced: FORCED$7 +}, { + trimEnd: trimEnd, + trimRight: trimEnd +}); + +var $$2a = _export; + +var $trimStart = stringTrim.start; + +var forcedStringTrimMethod = stringTrimForced; + +var FORCED$6 = forcedStringTrimMethod('trimStart'); +var trimStart = FORCED$6 ? function trimStart() { + return $trimStart(this); // eslint-disable-next-line es/no-string-prototype-trimstart-trimend -- safe +} : ''.trimStart; // `String.prototype.{ trimStart, trimLeft }` methods +// https://tc39.es/ecma262/#sec-string.prototype.trimstart +// https://tc39.es/ecma262/#String.prototype.trimleft + +$$2a({ + target: 'String', + proto: true, + name: 'trimStart', + forced: FORCED$6 +}, { + trimStart: trimStart, + trimLeft: trimStart +}); + +var requireObjectCoercible$1 = requireObjectCoercible$j; + +var toString$2 = toString$t; + +var quot = /"/g; // `CreateHTML` abstract operation +// https://tc39.es/ecma262/#sec-createhtml + +var createHtml = function (string, tag, attribute, value) { + var S = toString$2(requireObjectCoercible$1(string)); + var p1 = '<' + tag; + if (attribute !== '') p1 += ' ' + attribute + '="' + toString$2(value).replace(quot, '"') + '"'; + return p1 + '>' + S + ''; +}; + +var fails$9 = fails$15; // check the existence of a method, lowercase +// of a tag and escaping quotes in arguments + + +var stringHtmlForced = function (METHOD_NAME) { + return fails$9(function () { + var test = ''[METHOD_NAME]('"'); + return test !== test.toLowerCase() || test.split('"').length > 3; + }); +}; + +var $$29 = _export; + +var createHTML$c = createHtml; + +var forcedStringHTMLMethod$c = stringHtmlForced; // `String.prototype.anchor` method +// https://tc39.es/ecma262/#sec-string.prototype.anchor + + +$$29({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod$c('anchor') +}, { + anchor: function anchor(name) { + return createHTML$c(this, 'a', 'name', name); + } +}); + +var $$28 = _export; + +var createHTML$b = createHtml; + +var forcedStringHTMLMethod$b = stringHtmlForced; // `String.prototype.big` method +// https://tc39.es/ecma262/#sec-string.prototype.big + + +$$28({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod$b('big') +}, { + big: function big() { + return createHTML$b(this, 'big', '', ''); + } +}); + +var $$27 = _export; + +var createHTML$a = createHtml; + +var forcedStringHTMLMethod$a = stringHtmlForced; // `String.prototype.blink` method +// https://tc39.es/ecma262/#sec-string.prototype.blink + + +$$27({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod$a('blink') +}, { + blink: function blink() { + return createHTML$a(this, 'blink', '', ''); + } +}); + +var $$26 = _export; + +var createHTML$9 = createHtml; + +var forcedStringHTMLMethod$9 = stringHtmlForced; // `String.prototype.bold` method +// https://tc39.es/ecma262/#sec-string.prototype.bold + + +$$26({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod$9('bold') +}, { + bold: function bold() { + return createHTML$9(this, 'b', '', ''); + } +}); + +var $$25 = _export; + +var createHTML$8 = createHtml; + +var forcedStringHTMLMethod$8 = stringHtmlForced; // `String.prototype.fixed` method +// https://tc39.es/ecma262/#sec-string.prototype.fixed + + +$$25({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod$8('fixed') +}, { + fixed: function fixed() { + return createHTML$8(this, 'tt', '', ''); + } +}); + +var $$24 = _export; + +var createHTML$7 = createHtml; + +var forcedStringHTMLMethod$7 = stringHtmlForced; // `String.prototype.fontcolor` method +// https://tc39.es/ecma262/#sec-string.prototype.fontcolor + + +$$24({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod$7('fontcolor') +}, { + fontcolor: function fontcolor(color) { + return createHTML$7(this, 'font', 'color', color); + } +}); + +var $$23 = _export; + +var createHTML$6 = createHtml; + +var forcedStringHTMLMethod$6 = stringHtmlForced; // `String.prototype.fontsize` method +// https://tc39.es/ecma262/#sec-string.prototype.fontsize + + +$$23({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod$6('fontsize') +}, { + fontsize: function fontsize(size) { + return createHTML$6(this, 'font', 'size', size); + } +}); + +var $$22 = _export; + +var createHTML$5 = createHtml; + +var forcedStringHTMLMethod$5 = stringHtmlForced; // `String.prototype.italics` method +// https://tc39.es/ecma262/#sec-string.prototype.italics + + +$$22({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod$5('italics') +}, { + italics: function italics() { + return createHTML$5(this, 'i', '', ''); + } +}); + +var $$21 = _export; + +var createHTML$4 = createHtml; + +var forcedStringHTMLMethod$4 = stringHtmlForced; // `String.prototype.link` method +// https://tc39.es/ecma262/#sec-string.prototype.link + + +$$21({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod$4('link') +}, { + link: function link(url) { + return createHTML$4(this, 'a', 'href', url); + } +}); + +var $$20 = _export; + +var createHTML$3 = createHtml; + +var forcedStringHTMLMethod$3 = stringHtmlForced; // `String.prototype.small` method +// https://tc39.es/ecma262/#sec-string.prototype.small + + +$$20({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod$3('small') +}, { + small: function small() { + return createHTML$3(this, 'small', '', ''); + } +}); + +var $$1$ = _export; + +var createHTML$2 = createHtml; + +var forcedStringHTMLMethod$2 = stringHtmlForced; // `String.prototype.strike` method +// https://tc39.es/ecma262/#sec-string.prototype.strike + + +$$1$({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod$2('strike') +}, { + strike: function strike() { + return createHTML$2(this, 'strike', '', ''); + } +}); + +var $$1_ = _export; + +var createHTML$1 = createHtml; + +var forcedStringHTMLMethod$1 = stringHtmlForced; // `String.prototype.sub` method +// https://tc39.es/ecma262/#sec-string.prototype.sub + + +$$1_({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod$1('sub') +}, { + sub: function sub() { + return createHTML$1(this, 'sub', '', ''); + } +}); + +var $$1Z = _export; + +var createHTML = createHtml; + +var forcedStringHTMLMethod = stringHtmlForced; // `String.prototype.sup` method +// https://tc39.es/ecma262/#sec-string.prototype.sup + + +$$1Z({ + target: 'String', + proto: true, + forced: forcedStringHTMLMethod('sup') +}, { + sup: function sup() { + return createHTML(this, 'sup', '', ''); + } +}); + +var typedArrayConstructor = {exports: {}}; + +/* eslint-disable no-new -- required for testing */ + +var global$g = global$R; + +var fails$8 = fails$15; + +var checkCorrectnessOfIteration = checkCorrectnessOfIteration$4; + +var NATIVE_ARRAY_BUFFER_VIEWS$1 = arrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS; + +var ArrayBuffer$2 = global$g.ArrayBuffer; +var Int8Array$2 = global$g.Int8Array; +var typedArrayConstructorsRequireWrappers = !NATIVE_ARRAY_BUFFER_VIEWS$1 || !fails$8(function () { + Int8Array$2(1); +}) || !fails$8(function () { + new Int8Array$2(-1); +}) || !checkCorrectnessOfIteration(function (iterable) { + new Int8Array$2(); + new Int8Array$2(null); + new Int8Array$2(1.5); + new Int8Array$2(iterable); +}, true) || fails$8(function () { + // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill + return new Int8Array$2(new ArrayBuffer$2(2), 1, undefined).length !== 1; +}); + +var toIntegerOrInfinity$2 = toIntegerOrInfinity$i; + +var toPositiveInteger$5 = function (it) { + var result = toIntegerOrInfinity$2(it); + if (result < 0) throw RangeError("The argument can't be less than 0"); + return result; +}; + +var toPositiveInteger$4 = toPositiveInteger$5; + +var toOffset$2 = function (it, BYTES) { + var offset = toPositiveInteger$4(it); + if (offset % BYTES) throw RangeError('Wrong offset'); + return offset; +}; + +var aConstructor$2 = aConstructor$5; + +var toObject$b = toObject$A; + +var lengthOfArrayLike$8 = lengthOfArrayLike$q; + +var getIterator$8 = getIterator$b; + +var getIteratorMethod$5 = getIteratorMethod$9; + +var isArrayIteratorMethod = isArrayIteratorMethod$3; + +var bind$h = functionBindContext; + +var aTypedArrayConstructor$4 = arrayBufferViewCore.aTypedArrayConstructor; + +var typedArrayFrom$2 = function from(source +/* , mapfn, thisArg */ +) { + var C = aConstructor$2(this); + var O = toObject$b(source); + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : undefined; + var mapping = mapfn !== undefined; + var iteratorMethod = getIteratorMethod$5(O); + var i, length, result, step, iterator, next; + + if (iteratorMethod && !isArrayIteratorMethod(iteratorMethod)) { + iterator = getIterator$8(O, iteratorMethod); + next = iterator.next; + O = []; + + while (!(step = next.call(iterator)).done) { + O.push(step.value); + } + } + + if (mapping && argumentsLength > 2) { + mapfn = bind$h(mapfn, arguments[2], 2); + } + + length = lengthOfArrayLike$8(O); + result = new (aTypedArrayConstructor$4(C))(length); + + for (i = 0; length > i; i++) { + result[i] = mapping ? mapfn(O[i], i) : O[i]; + } + + return result; +}; + +var $$1Y = _export; + +var global$f = global$R; + +var DESCRIPTORS$5 = descriptors; + +var TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS$3 = typedArrayConstructorsRequireWrappers; + +var ArrayBufferViewCore$w = arrayBufferViewCore; + +var ArrayBufferModule = arrayBuffer; + +var anInstance$6 = anInstance$b; + +var createPropertyDescriptor$1 = createPropertyDescriptor$9; + +var createNonEnumerableProperty$6 = createNonEnumerableProperty$h; + +var isIntegralNumber = isIntegralNumber$3; + +var toLength$1 = toLength$d; + +var toIndex = toIndex$2; + +var toOffset$1 = toOffset$2; + +var toPropertyKey$1 = toPropertyKey$9; + +var hasOwn$6 = hasOwnProperty_1; + +var classof$1 = classof$b; + +var isObject$6 = isObject$C; + +var isSymbol = isSymbol$5; + +var create$6 = objectCreate$1; + +var setPrototypeOf = objectSetPrototypeOf$1; + +var getOwnPropertyNames$1 = objectGetOwnPropertyNames.f; + +var typedArrayFrom$1 = typedArrayFrom$2; + +var forEach$1 = arrayIteration.forEach; + +var setSpecies$1 = setSpecies$7; + +var definePropertyModule = objectDefineProperty; + +var getOwnPropertyDescriptorModule = objectGetOwnPropertyDescriptor; + +var InternalStateModule$b = internalState; + +var inheritIfRequired = inheritIfRequired$4; + +var getInternalState$8 = InternalStateModule$b.get; +var setInternalState$b = InternalStateModule$b.set; +var nativeDefineProperty = definePropertyModule.f; +var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; +var round = Math.round; +var RangeError$1 = global$f.RangeError; +var ArrayBuffer$1 = ArrayBufferModule.ArrayBuffer; +var DataView$1 = ArrayBufferModule.DataView; +var NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore$w.NATIVE_ARRAY_BUFFER_VIEWS; +var TYPED_ARRAY_CONSTRUCTOR$1 = ArrayBufferViewCore$w.TYPED_ARRAY_CONSTRUCTOR; +var TYPED_ARRAY_TAG = ArrayBufferViewCore$w.TYPED_ARRAY_TAG; +var TypedArray = ArrayBufferViewCore$w.TypedArray; +var TypedArrayPrototype = ArrayBufferViewCore$w.TypedArrayPrototype; +var aTypedArrayConstructor$3 = ArrayBufferViewCore$w.aTypedArrayConstructor; +var isTypedArray = ArrayBufferViewCore$w.isTypedArray; +var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT'; +var WRONG_LENGTH = 'Wrong length'; + +var fromList = function (C, list) { + var index = 0; + var length = list.length; + var result = new (aTypedArrayConstructor$3(C))(length); + + while (length > index) result[index] = list[index++]; + + return result; +}; + +var addGetter = function (it, key) { + nativeDefineProperty(it, key, { + get: function () { + return getInternalState$8(this)[key]; + } + }); +}; + +var isArrayBuffer = function (it) { + var klass; + return it instanceof ArrayBuffer$1 || (klass = classof$1(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer'; +}; + +var isTypedArrayIndex = function (target, key) { + return isTypedArray(target) && !isSymbol(key) && key in target && isIntegralNumber(+key) && key >= 0; +}; + +var wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) { + key = toPropertyKey$1(key); + return isTypedArrayIndex(target, key) ? createPropertyDescriptor$1(2, target[key]) : nativeGetOwnPropertyDescriptor(target, key); +}; + +var wrappedDefineProperty = function defineProperty(target, key, descriptor) { + key = toPropertyKey$1(key); + + if (isTypedArrayIndex(target, key) && isObject$6(descriptor) && hasOwn$6(descriptor, 'value') && !hasOwn$6(descriptor, 'get') && !hasOwn$6(descriptor, 'set') // TODO: add validation descriptor w/o calling accessors + && !descriptor.configurable && (!hasOwn$6(descriptor, 'writable') || descriptor.writable) && (!hasOwn$6(descriptor, 'enumerable') || descriptor.enumerable)) { + target[key] = descriptor.value; + return target; + } + + return nativeDefineProperty(target, key, descriptor); +}; + +if (DESCRIPTORS$5) { + if (!NATIVE_ARRAY_BUFFER_VIEWS) { + getOwnPropertyDescriptorModule.f = wrappedGetOwnPropertyDescriptor; + definePropertyModule.f = wrappedDefineProperty; + addGetter(TypedArrayPrototype, 'buffer'); + addGetter(TypedArrayPrototype, 'byteOffset'); + addGetter(TypedArrayPrototype, 'byteLength'); + addGetter(TypedArrayPrototype, 'length'); + } + + $$1Y({ + target: 'Object', + stat: true, + forced: !NATIVE_ARRAY_BUFFER_VIEWS + }, { + getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor, + defineProperty: wrappedDefineProperty + }); + + typedArrayConstructor.exports = function (TYPE, wrapper, CLAMPED) { + var BYTES = TYPE.match(/\d+$/)[0] / 8; + var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array'; + var GETTER = 'get' + TYPE; + var SETTER = 'set' + TYPE; + var NativeTypedArrayConstructor = global$f[CONSTRUCTOR_NAME]; + var TypedArrayConstructor = NativeTypedArrayConstructor; + var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype; + var exported = {}; + + var getter = function (that, index) { + var data = getInternalState$8(that); + return data.view[GETTER](index * BYTES + data.byteOffset, true); + }; + + var setter = function (that, index, value) { + var data = getInternalState$8(that); + if (CLAMPED) value = (value = round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF; + data.view[SETTER](index * BYTES + data.byteOffset, value, true); + }; + + var addElement = function (that, index) { + nativeDefineProperty(that, index, { + get: function () { + return getter(this, index); + }, + set: function (value) { + return setter(this, index, value); + }, + enumerable: true + }); + }; + + if (!NATIVE_ARRAY_BUFFER_VIEWS) { + TypedArrayConstructor = wrapper(function (that, data, offset, $length) { + anInstance$6(that, TypedArrayConstructor, CONSTRUCTOR_NAME); + var index = 0; + var byteOffset = 0; + var buffer, byteLength, length; + + if (!isObject$6(data)) { + length = toIndex(data); + byteLength = length * BYTES; + buffer = new ArrayBuffer$1(byteLength); + } else if (isArrayBuffer(data)) { + buffer = data; + byteOffset = toOffset$1(offset, BYTES); + var $len = data.byteLength; + + if ($length === undefined) { + if ($len % BYTES) throw RangeError$1(WRONG_LENGTH); + byteLength = $len - byteOffset; + if (byteLength < 0) throw RangeError$1(WRONG_LENGTH); + } else { + byteLength = toLength$1($length) * BYTES; + if (byteLength + byteOffset > $len) throw RangeError$1(WRONG_LENGTH); + } + + length = byteLength / BYTES; + } else if (isTypedArray(data)) { + return fromList(TypedArrayConstructor, data); + } else { + return typedArrayFrom$1.call(TypedArrayConstructor, data); + } + + setInternalState$b(that, { + buffer: buffer, + byteOffset: byteOffset, + byteLength: byteLength, + length: length, + view: new DataView$1(buffer) + }); + + while (index < length) addElement(that, index++); + }); + if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray); + TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create$6(TypedArrayPrototype); + } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS$3) { + TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) { + anInstance$6(dummy, TypedArrayConstructor, CONSTRUCTOR_NAME); + return inheritIfRequired(function () { + if (!isObject$6(data)) return new NativeTypedArrayConstructor(toIndex(data)); + if (isArrayBuffer(data)) return $length !== undefined ? new NativeTypedArrayConstructor(data, toOffset$1(typedArrayOffset, BYTES), $length) : typedArrayOffset !== undefined ? new NativeTypedArrayConstructor(data, toOffset$1(typedArrayOffset, BYTES)) : new NativeTypedArrayConstructor(data); + if (isTypedArray(data)) return fromList(TypedArrayConstructor, data); + return typedArrayFrom$1.call(TypedArrayConstructor, data); + }(), dummy, TypedArrayConstructor); + }); + if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray); + forEach$1(getOwnPropertyNames$1(NativeTypedArrayConstructor), function (key) { + if (!(key in TypedArrayConstructor)) { + createNonEnumerableProperty$6(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]); + } + }); + TypedArrayConstructor.prototype = TypedArrayConstructorPrototype; + } + + if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) { + createNonEnumerableProperty$6(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor); + } + + createNonEnumerableProperty$6(TypedArrayConstructorPrototype, TYPED_ARRAY_CONSTRUCTOR$1, TypedArrayConstructor); + + if (TYPED_ARRAY_TAG) { + createNonEnumerableProperty$6(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME); + } + + exported[CONSTRUCTOR_NAME] = TypedArrayConstructor; + $$1Y({ + global: true, + forced: TypedArrayConstructor != NativeTypedArrayConstructor, + sham: !NATIVE_ARRAY_BUFFER_VIEWS + }, exported); + + if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) { + createNonEnumerableProperty$6(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES); + } + + if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) { + createNonEnumerableProperty$6(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES); + } + + setSpecies$1(CONSTRUCTOR_NAME); + }; +} else typedArrayConstructor.exports = function () { + /* empty */ +}; + +var createTypedArrayConstructor$8 = typedArrayConstructor.exports; // `Float32Array` constructor +// https://tc39.es/ecma262/#sec-typedarray-objects + + +createTypedArrayConstructor$8('Float32', function (init) { + return function Float32Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}); + +var createTypedArrayConstructor$7 = typedArrayConstructor.exports; // `Float64Array` constructor +// https://tc39.es/ecma262/#sec-typedarray-objects + + +createTypedArrayConstructor$7('Float64', function (init) { + return function Float64Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}); + +var createTypedArrayConstructor$6 = typedArrayConstructor.exports; // `Int8Array` constructor +// https://tc39.es/ecma262/#sec-typedarray-objects + + +createTypedArrayConstructor$6('Int8', function (init) { + return function Int8Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}); + +var createTypedArrayConstructor$5 = typedArrayConstructor.exports; // `Int16Array` constructor +// https://tc39.es/ecma262/#sec-typedarray-objects + + +createTypedArrayConstructor$5('Int16', function (init) { + return function Int16Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}); + +var createTypedArrayConstructor$4 = typedArrayConstructor.exports; // `Int32Array` constructor +// https://tc39.es/ecma262/#sec-typedarray-objects + + +createTypedArrayConstructor$4('Int32', function (init) { + return function Int32Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}); + +var createTypedArrayConstructor$3 = typedArrayConstructor.exports; // `Uint8Array` constructor +// https://tc39.es/ecma262/#sec-typedarray-objects + + +createTypedArrayConstructor$3('Uint8', function (init) { + return function Uint8Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}); + +var createTypedArrayConstructor$2 = typedArrayConstructor.exports; // `Uint8ClampedArray` constructor +// https://tc39.es/ecma262/#sec-typedarray-objects + + +createTypedArrayConstructor$2('Uint8', function (init) { + return function Uint8ClampedArray(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}, true); + +var createTypedArrayConstructor$1 = typedArrayConstructor.exports; // `Uint16Array` constructor +// https://tc39.es/ecma262/#sec-typedarray-objects + + +createTypedArrayConstructor$1('Uint16', function (init) { + return function Uint16Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}); + +var createTypedArrayConstructor = typedArrayConstructor.exports; // `Uint32Array` constructor +// https://tc39.es/ecma262/#sec-typedarray-objects + + +createTypedArrayConstructor('Uint32', function (init) { + return function Uint32Array(data, byteOffset, length) { + return init(this, data, byteOffset, length); + }; +}); + +var ArrayBufferViewCore$v = arrayBufferViewCore; + +var lengthOfArrayLike$7 = lengthOfArrayLike$q; + +var toIntegerOrInfinity$1 = toIntegerOrInfinity$i; + +var aTypedArray$s = ArrayBufferViewCore$v.aTypedArray; +var exportTypedArrayMethod$t = ArrayBufferViewCore$v.exportTypedArrayMethod; // `%TypedArray%.prototype.at` method +// https://github.com/tc39/proposal-relative-indexing-method + +exportTypedArrayMethod$t('at', function at(index) { + var O = aTypedArray$s(this); + var len = lengthOfArrayLike$7(O); + var relativeIndex = toIntegerOrInfinity$1(index); + var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex; + return k < 0 || k >= len ? undefined : O[k]; +}); + +var ArrayBufferViewCore$u = arrayBufferViewCore; + +var $copyWithin = arrayCopyWithin; + +var aTypedArray$r = ArrayBufferViewCore$u.aTypedArray; +var exportTypedArrayMethod$s = ArrayBufferViewCore$u.exportTypedArrayMethod; // `%TypedArray%.prototype.copyWithin` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.copywithin + +exportTypedArrayMethod$s('copyWithin', function copyWithin(target, start +/* , end */ +) { + return $copyWithin.call(aTypedArray$r(this), target, start, arguments.length > 2 ? arguments[2] : undefined); +}); + +var ArrayBufferViewCore$t = arrayBufferViewCore; + +var $every$1 = arrayIteration.every; + +var aTypedArray$q = ArrayBufferViewCore$t.aTypedArray; +var exportTypedArrayMethod$r = ArrayBufferViewCore$t.exportTypedArrayMethod; // `%TypedArray%.prototype.every` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.every + +exportTypedArrayMethod$r('every', function every(callbackfn +/* , thisArg */ +) { + return $every$1(aTypedArray$q(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); +}); + +var ArrayBufferViewCore$s = arrayBufferViewCore; + +var $fill = arrayFill$1; + +var aTypedArray$p = ArrayBufferViewCore$s.aTypedArray; +var exportTypedArrayMethod$q = ArrayBufferViewCore$s.exportTypedArrayMethod; // `%TypedArray%.prototype.fill` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill +// eslint-disable-next-line no-unused-vars -- required for `.length` + +exportTypedArrayMethod$q('fill', function fill(value +/* , start, end */ +) { + return $fill.apply(aTypedArray$p(this), arguments); +}); + +var arrayFromConstructorAndList$3 = function (Constructor, list) { + var index = 0; + var length = list.length; + var result = new Constructor(length); + + while (length > index) result[index] = list[index++]; + + return result; +}; + +var ArrayBufferViewCore$r = arrayBufferViewCore; + +var speciesConstructor$9 = speciesConstructor$f; + +var TYPED_ARRAY_CONSTRUCTOR = ArrayBufferViewCore$r.TYPED_ARRAY_CONSTRUCTOR; +var aTypedArrayConstructor$2 = ArrayBufferViewCore$r.aTypedArrayConstructor; // a part of `TypedArraySpeciesCreate` abstract operation +// https://tc39.es/ecma262/#typedarray-species-create + +var typedArraySpeciesConstructor$5 = function (originalArray) { + return aTypedArrayConstructor$2(speciesConstructor$9(originalArray, originalArray[TYPED_ARRAY_CONSTRUCTOR])); +}; + +var arrayFromConstructorAndList$2 = arrayFromConstructorAndList$3; + +var typedArraySpeciesConstructor$4 = typedArraySpeciesConstructor$5; + +var typedArrayFromSpeciesAndList = function (instance, list) { + return arrayFromConstructorAndList$2(typedArraySpeciesConstructor$4(instance), list); +}; + +var ArrayBufferViewCore$q = arrayBufferViewCore; + +var $filter = arrayIteration.filter; + +var fromSpeciesAndList$3 = typedArrayFromSpeciesAndList; + +var aTypedArray$o = ArrayBufferViewCore$q.aTypedArray; +var exportTypedArrayMethod$p = ArrayBufferViewCore$q.exportTypedArrayMethod; // `%TypedArray%.prototype.filter` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.filter + +exportTypedArrayMethod$p('filter', function filter(callbackfn +/* , thisArg */ +) { + var list = $filter(aTypedArray$o(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + return fromSpeciesAndList$3(this, list); +}); + +var ArrayBufferViewCore$p = arrayBufferViewCore; + +var $find$1 = arrayIteration.find; + +var aTypedArray$n = ArrayBufferViewCore$p.aTypedArray; +var exportTypedArrayMethod$o = ArrayBufferViewCore$p.exportTypedArrayMethod; // `%TypedArray%.prototype.find` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.find + +exportTypedArrayMethod$o('find', function find(predicate +/* , thisArg */ +) { + return $find$1(aTypedArray$n(this), predicate, arguments.length > 1 ? arguments[1] : undefined); +}); + +var ArrayBufferViewCore$o = arrayBufferViewCore; + +var $findIndex = arrayIteration.findIndex; + +var aTypedArray$m = ArrayBufferViewCore$o.aTypedArray; +var exportTypedArrayMethod$n = ArrayBufferViewCore$o.exportTypedArrayMethod; // `%TypedArray%.prototype.findIndex` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findindex + +exportTypedArrayMethod$n('findIndex', function findIndex(predicate +/* , thisArg */ +) { + return $findIndex(aTypedArray$m(this), predicate, arguments.length > 1 ? arguments[1] : undefined); +}); + +var ArrayBufferViewCore$n = arrayBufferViewCore; + +var $forEach$1 = arrayIteration.forEach; + +var aTypedArray$l = ArrayBufferViewCore$n.aTypedArray; +var exportTypedArrayMethod$m = ArrayBufferViewCore$n.exportTypedArrayMethod; // `%TypedArray%.prototype.forEach` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.foreach + +exportTypedArrayMethod$m('forEach', function forEach(callbackfn +/* , thisArg */ +) { + $forEach$1(aTypedArray$l(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); +}); + +var TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS$2 = typedArrayConstructorsRequireWrappers; + +var exportTypedArrayStaticMethod$2 = arrayBufferViewCore.exportTypedArrayStaticMethod; + +var typedArrayFrom = typedArrayFrom$2; // `%TypedArray%.from` method +// https://tc39.es/ecma262/#sec-%typedarray%.from + + +exportTypedArrayStaticMethod$2('from', typedArrayFrom, TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS$2); + +var ArrayBufferViewCore$m = arrayBufferViewCore; + +var $includes = arrayIncludes.includes; + +var aTypedArray$k = ArrayBufferViewCore$m.aTypedArray; +var exportTypedArrayMethod$l = ArrayBufferViewCore$m.exportTypedArrayMethod; // `%TypedArray%.prototype.includes` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.includes + +exportTypedArrayMethod$l('includes', function includes(searchElement +/* , fromIndex */ +) { + return $includes(aTypedArray$k(this), searchElement, arguments.length > 1 ? arguments[1] : undefined); +}); + +var ArrayBufferViewCore$l = arrayBufferViewCore; + +var $indexOf = arrayIncludes.indexOf; + +var aTypedArray$j = ArrayBufferViewCore$l.aTypedArray; +var exportTypedArrayMethod$k = ArrayBufferViewCore$l.exportTypedArrayMethod; // `%TypedArray%.prototype.indexOf` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.indexof + +exportTypedArrayMethod$k('indexOf', function indexOf(searchElement +/* , fromIndex */ +) { + return $indexOf(aTypedArray$j(this), searchElement, arguments.length > 1 ? arguments[1] : undefined); +}); + +var global$e = global$R; + +var PROPER_FUNCTION_NAME = functionName.PROPER; + +var ArrayBufferViewCore$k = arrayBufferViewCore; + +var ArrayIterators = es_array_iterator; + +var wellKnownSymbol$c = wellKnownSymbol$G; + +var ITERATOR$3 = wellKnownSymbol$c('iterator'); +var Uint8Array$1 = global$e.Uint8Array; +var arrayValues = ArrayIterators.values; +var arrayKeys = ArrayIterators.keys; +var arrayEntries = ArrayIterators.entries; +var aTypedArray$i = ArrayBufferViewCore$k.aTypedArray; +var exportTypedArrayMethod$j = ArrayBufferViewCore$k.exportTypedArrayMethod; +var nativeTypedArrayIterator = Uint8Array$1 && Uint8Array$1.prototype[ITERATOR$3]; +var PROPER_ARRAY_VALUES_NAME = !!nativeTypedArrayIterator && nativeTypedArrayIterator.name === 'values'; + +var typedArrayValues = function values() { + return arrayValues.call(aTypedArray$i(this)); +}; // `%TypedArray%.prototype.entries` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries + + +exportTypedArrayMethod$j('entries', function entries() { + return arrayEntries.call(aTypedArray$i(this)); +}); // `%TypedArray%.prototype.keys` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.keys + +exportTypedArrayMethod$j('keys', function keys() { + return arrayKeys.call(aTypedArray$i(this)); +}); // `%TypedArray%.prototype.values` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.values + +exportTypedArrayMethod$j('values', typedArrayValues, PROPER_FUNCTION_NAME && !PROPER_ARRAY_VALUES_NAME); // `%TypedArray%.prototype[@@iterator]` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype-@@iterator + +exportTypedArrayMethod$j(ITERATOR$3, typedArrayValues, PROPER_FUNCTION_NAME && !PROPER_ARRAY_VALUES_NAME); + +var ArrayBufferViewCore$j = arrayBufferViewCore; + +var aTypedArray$h = ArrayBufferViewCore$j.aTypedArray; +var exportTypedArrayMethod$i = ArrayBufferViewCore$j.exportTypedArrayMethod; +var $join = [].join; // `%TypedArray%.prototype.join` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.join +// eslint-disable-next-line no-unused-vars -- required for `.length` + +exportTypedArrayMethod$i('join', function join(separator) { + return $join.apply(aTypedArray$h(this), arguments); +}); + +var ArrayBufferViewCore$i = arrayBufferViewCore; + +var $lastIndexOf = arrayLastIndexOf; + +var aTypedArray$g = ArrayBufferViewCore$i.aTypedArray; +var exportTypedArrayMethod$h = ArrayBufferViewCore$i.exportTypedArrayMethod; // `%TypedArray%.prototype.lastIndexOf` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.lastindexof +// eslint-disable-next-line no-unused-vars -- required for `.length` + +exportTypedArrayMethod$h('lastIndexOf', function lastIndexOf(searchElement +/* , fromIndex */ +) { + return $lastIndexOf.apply(aTypedArray$g(this), arguments); +}); + +var ArrayBufferViewCore$h = arrayBufferViewCore; + +var $map = arrayIteration.map; + +var typedArraySpeciesConstructor$3 = typedArraySpeciesConstructor$5; + +var aTypedArray$f = ArrayBufferViewCore$h.aTypedArray; +var exportTypedArrayMethod$g = ArrayBufferViewCore$h.exportTypedArrayMethod; // `%TypedArray%.prototype.map` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.map + +exportTypedArrayMethod$g('map', function map(mapfn +/* , thisArg */ +) { + return $map(aTypedArray$f(this), mapfn, arguments.length > 1 ? arguments[1] : undefined, function (O, length) { + return new (typedArraySpeciesConstructor$3(O))(length); + }); +}); + +var ArrayBufferViewCore$g = arrayBufferViewCore; + +var TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS$1 = typedArrayConstructorsRequireWrappers; + +var aTypedArrayConstructor$1 = ArrayBufferViewCore$g.aTypedArrayConstructor; +var exportTypedArrayStaticMethod$1 = ArrayBufferViewCore$g.exportTypedArrayStaticMethod; // `%TypedArray%.of` method +// https://tc39.es/ecma262/#sec-%typedarray%.of + +exportTypedArrayStaticMethod$1('of', function of() { + var index = 0; + var length = arguments.length; + var result = new (aTypedArrayConstructor$1(this))(length); + + while (length > index) result[index] = arguments[index++]; + + return result; +}, TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS$1); + +var ArrayBufferViewCore$f = arrayBufferViewCore; + +var $reduce = arrayReduce.left; + +var aTypedArray$e = ArrayBufferViewCore$f.aTypedArray; +var exportTypedArrayMethod$f = ArrayBufferViewCore$f.exportTypedArrayMethod; // `%TypedArray%.prototype.reduce` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduce + +exportTypedArrayMethod$f('reduce', function reduce(callbackfn +/* , initialValue */ +) { + return $reduce(aTypedArray$e(this), callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined); +}); + +var ArrayBufferViewCore$e = arrayBufferViewCore; + +var $reduceRight = arrayReduce.right; + +var aTypedArray$d = ArrayBufferViewCore$e.aTypedArray; +var exportTypedArrayMethod$e = ArrayBufferViewCore$e.exportTypedArrayMethod; // `%TypedArray%.prototype.reduceRicht` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduceright + +exportTypedArrayMethod$e('reduceRight', function reduceRight(callbackfn +/* , initialValue */ +) { + return $reduceRight(aTypedArray$d(this), callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined); +}); + +var ArrayBufferViewCore$d = arrayBufferViewCore; + +var aTypedArray$c = ArrayBufferViewCore$d.aTypedArray; +var exportTypedArrayMethod$d = ArrayBufferViewCore$d.exportTypedArrayMethod; +var floor$2 = Math.floor; // `%TypedArray%.prototype.reverse` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reverse + +exportTypedArrayMethod$d('reverse', function reverse() { + var that = this; + var length = aTypedArray$c(that).length; + var middle = floor$2(length / 2); + var index = 0; + var value; + + while (index < middle) { + value = that[index]; + that[index++] = that[--length]; + that[length] = value; + } + + return that; +}); + +var ArrayBufferViewCore$c = arrayBufferViewCore; + +var lengthOfArrayLike$6 = lengthOfArrayLike$q; + +var toOffset = toOffset$2; + +var toObject$a = toObject$A; + +var fails$7 = fails$15; + +var aTypedArray$b = ArrayBufferViewCore$c.aTypedArray; +var exportTypedArrayMethod$c = ArrayBufferViewCore$c.exportTypedArrayMethod; +var FORCED$5 = fails$7(function () { + // eslint-disable-next-line es/no-typed-arrays -- required for testing + new Int8Array(1).set({}); +}); // `%TypedArray%.prototype.set` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.set + +exportTypedArrayMethod$c('set', function set(arrayLike +/* , offset */ +) { + aTypedArray$b(this); + var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1); + var length = this.length; + var src = toObject$a(arrayLike); + var len = lengthOfArrayLike$6(src); + var index = 0; + if (len + offset > length) throw RangeError('Wrong length'); + + while (index < len) this[offset + index] = src[index++]; +}, FORCED$5); + +var ArrayBufferViewCore$b = arrayBufferViewCore; + +var typedArraySpeciesConstructor$2 = typedArraySpeciesConstructor$5; + +var fails$6 = fails$15; + +var aTypedArray$a = ArrayBufferViewCore$b.aTypedArray; +var exportTypedArrayMethod$b = ArrayBufferViewCore$b.exportTypedArrayMethod; +var $slice$1 = [].slice; +var FORCED$4 = fails$6(function () { + // eslint-disable-next-line es/no-typed-arrays -- required for testing + new Int8Array(1).slice(); +}); // `%TypedArray%.prototype.slice` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice + +exportTypedArrayMethod$b('slice', function slice(start, end) { + var list = $slice$1.call(aTypedArray$a(this), start, end); + var C = typedArraySpeciesConstructor$2(this); + var index = 0; + var length = list.length; + var result = new C(length); + + while (length > index) result[index] = list[index++]; + + return result; +}, FORCED$4); + +var ArrayBufferViewCore$a = arrayBufferViewCore; + +var $some$1 = arrayIteration.some; + +var aTypedArray$9 = ArrayBufferViewCore$a.aTypedArray; +var exportTypedArrayMethod$a = ArrayBufferViewCore$a.exportTypedArrayMethod; // `%TypedArray%.prototype.some` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.some + +exportTypedArrayMethod$a('some', function some(callbackfn +/* , thisArg */ +) { + return $some$1(aTypedArray$9(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); +}); + +var ArrayBufferViewCore$9 = arrayBufferViewCore; + +var global$d = global$R; + +var fails$5 = fails$15; + +var aCallable$B = aCallable$Q; + +var lengthOfArrayLike$5 = lengthOfArrayLike$q; + +var internalSort = arraySort; + +var FF = engineFfVersion; + +var IE_OR_EDGE = engineIsIeOrEdge; + +var V8 = engineV8Version; + +var WEBKIT = engineWebkitVersion; + +var aTypedArray$8 = ArrayBufferViewCore$9.aTypedArray; +var exportTypedArrayMethod$9 = ArrayBufferViewCore$9.exportTypedArrayMethod; +var Uint16Array = global$d.Uint16Array; +var nativeSort = Uint16Array && Uint16Array.prototype.sort; // WebKit + +var ACCEPT_INCORRECT_ARGUMENTS = !!nativeSort && !fails$5(function () { + var array = new Uint16Array(2); + array.sort(null); + array.sort({}); +}); +var STABLE_SORT = !!nativeSort && !fails$5(function () { + // feature detection can be too slow, so check engines versions + if (V8) return V8 < 74; + if (FF) return FF < 67; + if (IE_OR_EDGE) return true; + if (WEBKIT) return WEBKIT < 602; + var array = new Uint16Array(516); + var expected = Array(516); + var index, mod; + + for (index = 0; index < 516; index++) { + mod = index % 4; + array[index] = 515 - index; + expected[index] = index - 2 * mod + 3; + } + + array.sort(function (a, b) { + return (a / 4 | 0) - (b / 4 | 0); + }); + + for (index = 0; index < 516; index++) { + if (array[index] !== expected[index]) return true; + } +}); + +var getSortCompare = function (comparefn) { + return function (x, y) { + if (comparefn !== undefined) return +comparefn(x, y) || 0; // eslint-disable-next-line no-self-compare -- NaN check + + if (y !== y) return -1; // eslint-disable-next-line no-self-compare -- NaN check + + if (x !== x) return 1; + if (x === 0 && y === 0) return 1 / x > 0 && 1 / y < 0 ? 1 : -1; + return x > y; + }; +}; // `%TypedArray%.prototype.sort` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort + + +exportTypedArrayMethod$9('sort', function sort(comparefn) { + var array = this; + if (comparefn !== undefined) aCallable$B(comparefn); + if (STABLE_SORT) return nativeSort.call(array, comparefn); + aTypedArray$8(array); + var arrayLength = lengthOfArrayLike$5(array); + var items = Array(arrayLength); + var index; + + for (index = 0; index < arrayLength; index++) { + items[index] = array[index]; + } + + items = internalSort(array, getSortCompare(comparefn)); + + for (index = 0; index < arrayLength; index++) { + array[index] = items[index]; + } + + return array; +}, !STABLE_SORT || ACCEPT_INCORRECT_ARGUMENTS); + +var ArrayBufferViewCore$8 = arrayBufferViewCore; + +var toLength = toLength$d; + +var toAbsoluteIndex = toAbsoluteIndex$8; + +var typedArraySpeciesConstructor$1 = typedArraySpeciesConstructor$5; + +var aTypedArray$7 = ArrayBufferViewCore$8.aTypedArray; +var exportTypedArrayMethod$8 = ArrayBufferViewCore$8.exportTypedArrayMethod; // `%TypedArray%.prototype.subarray` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.subarray + +exportTypedArrayMethod$8('subarray', function subarray(begin, end) { + var O = aTypedArray$7(this); + var length = O.length; + var beginIndex = toAbsoluteIndex(begin, length); + var C = typedArraySpeciesConstructor$1(O); + return new C(O.buffer, O.byteOffset + beginIndex * O.BYTES_PER_ELEMENT, toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - beginIndex)); +}); + +var global$c = global$R; + +var ArrayBufferViewCore$7 = arrayBufferViewCore; + +var fails$4 = fails$15; + +var Int8Array$1 = global$c.Int8Array; +var aTypedArray$6 = ArrayBufferViewCore$7.aTypedArray; +var exportTypedArrayMethod$7 = ArrayBufferViewCore$7.exportTypedArrayMethod; +var $toLocaleString = [].toLocaleString; +var $slice = [].slice; // iOS Safari 6.x fails here + +var TO_LOCALE_STRING_BUG = !!Int8Array$1 && fails$4(function () { + $toLocaleString.call(new Int8Array$1(1)); +}); +var FORCED$3 = fails$4(function () { + return [1, 2].toLocaleString() != new Int8Array$1([1, 2]).toLocaleString(); +}) || !fails$4(function () { + Int8Array$1.prototype.toLocaleString.call([1, 2]); +}); // `%TypedArray%.prototype.toLocaleString` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tolocalestring + +exportTypedArrayMethod$7('toLocaleString', function toLocaleString() { + return $toLocaleString.apply(TO_LOCALE_STRING_BUG ? $slice.call(aTypedArray$6(this)) : aTypedArray$6(this), arguments); +}, FORCED$3); + +var exportTypedArrayMethod$6 = arrayBufferViewCore.exportTypedArrayMethod; + +var fails$3 = fails$15; + +var global$b = global$R; + +var Uint8Array = global$b.Uint8Array; +var Uint8ArrayPrototype = Uint8Array && Uint8Array.prototype || {}; +var arrayToString = [].toString; +var arrayJoin = [].join; + +if (fails$3(function () { + arrayToString.call({}); +})) { + arrayToString = function toString() { + return arrayJoin.call(this); + }; +} + +var IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString; // `%TypedArray%.prototype.toString` method +// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tostring + +exportTypedArrayMethod$6('toString', arrayToString, IS_NOT_ARRAY_METHOD); + +var $$1X = _export; + +var toString$1 = toString$t; + +var fromCharCode = String.fromCharCode; +var hex2 = /^[\da-f]{2}$/i; +var hex4 = /^[\da-f]{4}$/i; // `unescape` method +// https://tc39.es/ecma262/#sec-unescape-string + +$$1X({ + global: true +}, { + unescape: function unescape(string) { + var str = toString$1(string); + var result = ''; + var length = str.length; + var index = 0; + var chr, slice; + + while (index < length) { + chr = str.charAt(index++); + + if (chr === '%') { + if (str.charAt(index) === 'u') { + slice = str.slice(index + 1, index + 5); + + if (hex4.test(slice)) { + result += fromCharCode(parseInt(slice, 16)); + index += 5; + continue; + } + } else { + slice = str.slice(index, index + 2); + + if (hex2.test(slice)) { + result += fromCharCode(parseInt(slice, 16)); + index += 2; + continue; + } + } + } + + result += chr; + } + + return result; + } +}); + +var es_weakMap = {exports: {}}; + +var redefineAll$6 = redefineAll$a; + +var getWeakData = internalMetadata.exports.getWeakData; + +var anObject$14 = anObject$1C; + +var isObject$5 = isObject$C; + +var anInstance$5 = anInstance$b; + +var iterate$A = iterate$I; + +var ArrayIterationModule = arrayIteration; + +var hasOwn$5 = hasOwnProperty_1; + +var InternalStateModule$a = internalState; + +var setInternalState$a = InternalStateModule$a.set; +var internalStateGetterFor = InternalStateModule$a.getterFor; +var find$2 = ArrayIterationModule.find; +var findIndex = ArrayIterationModule.findIndex; +var id = 0; // fallback for uncaught frozen keys + +var uncaughtFrozenStore = function (store) { + return store.frozen || (store.frozen = new UncaughtFrozenStore()); +}; + +var UncaughtFrozenStore = function () { + this.entries = []; +}; + +var findUncaughtFrozen = function (store, key) { + return find$2(store.entries, function (it) { + return it[0] === key; + }); +}; + +UncaughtFrozenStore.prototype = { + get: function (key) { + var entry = findUncaughtFrozen(this, key); + if (entry) return entry[1]; + }, + has: function (key) { + return !!findUncaughtFrozen(this, key); + }, + set: function (key, value) { + var entry = findUncaughtFrozen(this, key); + if (entry) entry[1] = value;else this.entries.push([key, value]); + }, + 'delete': function (key) { + var index = findIndex(this.entries, function (it) { + return it[0] === key; + }); + if (~index) this.entries.splice(index, 1); + return !!~index; + } +}; +var collectionWeak$2 = { + getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) { + var C = wrapper(function (that, iterable) { + anInstance$5(that, C, CONSTRUCTOR_NAME); + setInternalState$a(that, { + type: CONSTRUCTOR_NAME, + id: id++, + frozen: undefined + }); + if (iterable != undefined) iterate$A(iterable, that[ADDER], { + that: that, + AS_ENTRIES: IS_MAP + }); + }); + var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); + + var define = function (that, key, value) { + var state = getInternalState(that); + var data = getWeakData(anObject$14(key), true); + if (data === true) uncaughtFrozenStore(state).set(key, value);else data[state.id] = value; + return that; + }; + + redefineAll$6(C.prototype, { + // `{ WeakMap, WeakSet }.prototype.delete(key)` methods + // https://tc39.es/ecma262/#sec-weakmap.prototype.delete + // https://tc39.es/ecma262/#sec-weakset.prototype.delete + 'delete': function (key) { + var state = getInternalState(this); + if (!isObject$5(key)) return false; + var data = getWeakData(key); + if (data === true) return uncaughtFrozenStore(state)['delete'](key); + return data && hasOwn$5(data, state.id) && delete data[state.id]; + }, + // `{ WeakMap, WeakSet }.prototype.has(key)` methods + // https://tc39.es/ecma262/#sec-weakmap.prototype.has + // https://tc39.es/ecma262/#sec-weakset.prototype.has + has: function has(key) { + var state = getInternalState(this); + if (!isObject$5(key)) return false; + var data = getWeakData(key); + if (data === true) return uncaughtFrozenStore(state).has(key); + return data && hasOwn$5(data, state.id); + } + }); + redefineAll$6(C.prototype, IS_MAP ? { + // `WeakMap.prototype.get(key)` method + // https://tc39.es/ecma262/#sec-weakmap.prototype.get + get: function get(key) { + var state = getInternalState(this); + + if (isObject$5(key)) { + var data = getWeakData(key); + if (data === true) return uncaughtFrozenStore(state).get(key); + return data ? data[state.id] : undefined; + } + }, + // `WeakMap.prototype.set(key, value)` method + // https://tc39.es/ecma262/#sec-weakmap.prototype.set + set: function set(key, value) { + return define(this, key, value); + } + } : { + // `WeakSet.prototype.add(value)` method + // https://tc39.es/ecma262/#sec-weakset.prototype.add + add: function add(value) { + return define(this, value, true); + } + }); + return C; + } +}; + +var global$a = global$R; + +var redefineAll$5 = redefineAll$a; + +var InternalMetadataModule = internalMetadata.exports; + +var collection$1 = collection$4; + +var collectionWeak$1 = collectionWeak$2; + +var isObject$4 = isObject$C; + +var enforceIternalState = internalState.enforce; + +var NATIVE_WEAK_MAP = nativeWeakMap; + +var IS_IE11 = !global$a.ActiveXObject && 'ActiveXObject' in global$a; // eslint-disable-next-line es/no-object-isextensible -- safe + +var isExtensible = Object.isExtensible; +var InternalWeakMap; + +var wrapper = function (init) { + return function WeakMap() { + return init(this, arguments.length ? arguments[0] : undefined); + }; +}; // `WeakMap` constructor +// https://tc39.es/ecma262/#sec-weakmap-constructor + + +var $WeakMap = es_weakMap.exports = collection$1('WeakMap', wrapper, collectionWeak$1); // IE11 WeakMap frozen keys fix +// We can't use feature detection because it crash some old IE builds +// https://github.com/zloirock/core-js/issues/485 + +if (NATIVE_WEAK_MAP && IS_IE11) { + InternalWeakMap = collectionWeak$1.getConstructor(wrapper, 'WeakMap', true); + InternalMetadataModule.enable(); + var WeakMapPrototype = $WeakMap.prototype; + var nativeDelete = WeakMapPrototype['delete']; + var nativeHas = WeakMapPrototype.has; + var nativeGet = WeakMapPrototype.get; + var nativeSet = WeakMapPrototype.set; + redefineAll$5(WeakMapPrototype, { + 'delete': function (key) { + if (isObject$4(key) && !isExtensible(key)) { + var state = enforceIternalState(this); + if (!state.frozen) state.frozen = new InternalWeakMap(); + return nativeDelete.call(this, key) || state.frozen['delete'](key); + } + + return nativeDelete.call(this, key); + }, + has: function has(key) { + if (isObject$4(key) && !isExtensible(key)) { + var state = enforceIternalState(this); + if (!state.frozen) state.frozen = new InternalWeakMap(); + return nativeHas.call(this, key) || state.frozen.has(key); + } + + return nativeHas.call(this, key); + }, + get: function get(key) { + if (isObject$4(key) && !isExtensible(key)) { + var state = enforceIternalState(this); + if (!state.frozen) state.frozen = new InternalWeakMap(); + return nativeHas.call(this, key) ? nativeGet.call(this, key) : state.frozen.get(key); + } + + return nativeGet.call(this, key); + }, + set: function set(key, value) { + if (isObject$4(key) && !isExtensible(key)) { + var state = enforceIternalState(this); + if (!state.frozen) state.frozen = new InternalWeakMap(); + nativeHas.call(this, key) ? nativeSet.call(this, key, value) : state.frozen.set(key, value); + } else nativeSet.call(this, key, value); + + return this; + } + }); +} + +var collection = collection$4; + +var collectionWeak = collectionWeak$2; // `WeakSet` constructor +// https://tc39.es/ecma262/#sec-weakset-constructor + + +collection('WeakSet', function (init) { + return function WeakSet() { + return init(this, arguments.length ? arguments[0] : undefined); + }; +}, collectionWeak); + +var global$9 = global$R; + +var shared$1 = sharedStore; + +var isCallable$6 = isCallable$z; + +var getPrototypeOf$4 = objectGetPrototypeOf$1; + +var redefine$3 = redefine$l.exports; + +var wellKnownSymbol$b = wellKnownSymbol$G; + +var USE_FUNCTION_CONSTRUCTOR = 'USE_FUNCTION_CONSTRUCTOR'; +var ASYNC_ITERATOR$3 = wellKnownSymbol$b('asyncIterator'); +var AsyncIterator = global$9.AsyncIterator; +var PassedAsyncIteratorPrototype = shared$1.AsyncIteratorPrototype; +var AsyncIteratorPrototype$4, prototype; + +if (PassedAsyncIteratorPrototype) { + AsyncIteratorPrototype$4 = PassedAsyncIteratorPrototype; +} else if (isCallable$6(AsyncIterator)) { + AsyncIteratorPrototype$4 = AsyncIterator.prototype; +} else if (shared$1[USE_FUNCTION_CONSTRUCTOR] || global$9[USE_FUNCTION_CONSTRUCTOR]) { + try { + // eslint-disable-next-line no-new-func -- we have no alternatives without usage of modern syntax + prototype = getPrototypeOf$4(getPrototypeOf$4(getPrototypeOf$4(Function('return async function*(){}()')()))); + if (getPrototypeOf$4(prototype) === Object.prototype) AsyncIteratorPrototype$4 = prototype; + } catch (error) { + /* empty */ + } +} + +if (!AsyncIteratorPrototype$4) AsyncIteratorPrototype$4 = {}; + +if (!isCallable$6(AsyncIteratorPrototype$4[ASYNC_ITERATOR$3])) { + redefine$3(AsyncIteratorPrototype$4, ASYNC_ITERATOR$3, function () { + return this; + }); +} + +var asyncIteratorPrototype = AsyncIteratorPrototype$4; + +var anObject$13 = anObject$1C; + +var create$5 = objectCreate$1; + +var getMethod$7 = getMethod$h; + +var redefineAll$4 = redefineAll$a; + +var InternalStateModule$9 = internalState; + +var getBuiltIn$j = getBuiltIn$y; + +var AsyncIteratorPrototype$3 = asyncIteratorPrototype; + +var Promise$3 = getBuiltIn$j('Promise'); +var setInternalState$9 = InternalStateModule$9.set; +var getInternalState$7 = InternalStateModule$9.get; + +var asyncFromSyncIteratorContinuation = function (result, resolve, reject) { + var done = result.done; + Promise$3.resolve(result.value).then(function (value) { + resolve({ + done: done, + value: value + }); + }, reject); +}; + +var AsyncFromSyncIterator$3 = function AsyncIterator(iterator) { + setInternalState$9(this, { + iterator: anObject$13(iterator), + next: iterator.next + }); +}; + +AsyncFromSyncIterator$3.prototype = redefineAll$4(create$5(AsyncIteratorPrototype$3), { + next: function next(arg) { + var state = getInternalState$7(this); + var hasArg = !!arguments.length; + return new Promise$3(function (resolve, reject) { + var result = anObject$13(state.next.apply(state.iterator, hasArg ? [arg] : [])); + asyncFromSyncIteratorContinuation(result, resolve, reject); + }); + }, + 'return': function (arg) { + var iterator = getInternalState$7(this).iterator; + var hasArg = !!arguments.length; + return new Promise$3(function (resolve, reject) { + var $return = getMethod$7(iterator, 'return'); + if ($return === undefined) return resolve({ + done: true, + value: arg + }); + var result = anObject$13($return.apply(iterator, hasArg ? [arg] : [])); + asyncFromSyncIteratorContinuation(result, resolve, reject); + }); + }, + 'throw': function (arg) { + var iterator = getInternalState$7(this).iterator; + var hasArg = !!arguments.length; + return new Promise$3(function (resolve, reject) { + var $throw = getMethod$7(iterator, 'throw'); + if ($throw === undefined) return reject(arg); + var result = anObject$13($throw.apply(iterator, hasArg ? [arg] : [])); + asyncFromSyncIteratorContinuation(result, resolve, reject); + }); + } +}); +var asyncFromSyncIterator = AsyncFromSyncIterator$3; + +var AsyncFromSyncIterator$2 = asyncFromSyncIterator; + +var anObject$12 = anObject$1C; + +var getIterator$7 = getIterator$b; + +var getMethod$6 = getMethod$h; + +var wellKnownSymbol$a = wellKnownSymbol$G; + +var ASYNC_ITERATOR$2 = wellKnownSymbol$a('asyncIterator'); + +var getAsyncIterator$3 = function (it, usingIterator) { + var method = arguments.length < 2 ? getMethod$6(it, ASYNC_ITERATOR$2) : usingIterator; + return method ? anObject$12(method.call(it)) : new AsyncFromSyncIterator$2(getIterator$7(it)); +}; + +var global$8 = global$R; + +var entryVirtual = function (CONSTRUCTOR) { + return global$8[CONSTRUCTOR].prototype; +}; + +// https://github.com/tc39/proposal-array-from-async + +var aCallable$A = aCallable$Q; + +var anObject$11 = anObject$1C; + +var getBuiltIn$i = getBuiltIn$y; + +var getMethod$5 = getMethod$h; + +var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; + +var createMethod$1 = function (TYPE) { + var IS_TO_ARRAY = TYPE == 0; + var IS_FOR_EACH = TYPE == 1; + var IS_EVERY = TYPE == 2; + var IS_SOME = TYPE == 3; + return function (iterator, fn, target) { + anObject$11(iterator); + var Promise = getBuiltIn$i('Promise'); + var next = aCallable$A(iterator.next); + var index = 0; + var MAPPING = fn !== undefined; + if (MAPPING || !IS_TO_ARRAY) aCallable$A(fn); + return new Promise(function (resolve, reject) { + var closeIteration = function (method, argument) { + try { + var returnMethod = getMethod$5(iterator, 'return'); + + if (returnMethod) { + return Promise.resolve(returnMethod.call(iterator)).then(function () { + method(argument); + }, function (error) { + reject(error); + }); + } + } catch (error2) { + return reject(error2); + } + + method(argument); + }; + + var onError = function (error) { + closeIteration(reject, error); + }; + + var loop = function () { + try { + if (IS_TO_ARRAY && index > MAX_SAFE_INTEGER && MAPPING) { + throw TypeError('The allowed number of iterations has been exceeded'); + } + + Promise.resolve(anObject$11(next.call(iterator))).then(function (step) { + try { + if (anObject$11(step).done) { + if (IS_TO_ARRAY) { + target.length = index; + resolve(target); + } else resolve(IS_SOME ? false : IS_EVERY || undefined); + } else { + var value = step.value; + + if (MAPPING) { + Promise.resolve(IS_TO_ARRAY ? fn(value, index) : fn(value)).then(function (result) { + if (IS_FOR_EACH) { + loop(); + } else if (IS_EVERY) { + result ? loop() : closeIteration(resolve, false); + } else if (IS_TO_ARRAY) { + target[index++] = result; + loop(); + } else { + result ? closeIteration(resolve, IS_SOME || value) : loop(); + } + }, onError); + } else { + target[index++] = value; + loop(); + } + } + } catch (error) { + onError(error); + } + }, onError); + } catch (error2) { + onError(error2); + } + }; + + loop(); + }); + }; +}; + +var asyncIteratorIteration = { + toArray: createMethod$1(0), + forEach: createMethod$1(1), + every: createMethod$1(2), + some: createMethod$1(3), + find: createMethod$1(4) +}; + +var bind$g = functionBindContext; + +var toObject$9 = toObject$A; + +var isConstructor$1 = isConstructor$7; + +var getAsyncIterator$2 = getAsyncIterator$3; + +var getIterator$6 = getIterator$b; + +var getIteratorMethod$4 = getIteratorMethod$9; + +var getMethod$4 = getMethod$h; + +var getVirtual = entryVirtual; + +var getBuiltIn$h = getBuiltIn$y; + +var wellKnownSymbol$9 = wellKnownSymbol$G; + +var AsyncFromSyncIterator$1 = asyncFromSyncIterator; + +var toArray = asyncIteratorIteration.toArray; + +var ASYNC_ITERATOR$1 = wellKnownSymbol$9('asyncIterator'); +var arrayIterator = getVirtual('Array').values; // `Array.fromAsync` method implementation +// https://github.com/tc39/proposal-array-from-async + +var arrayFromAsync$1 = function fromAsync(asyncItems +/* , mapfn = undefined, thisArg = undefined */ +) { + var C = this; + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : undefined; + var thisArg = argumentsLength > 2 ? arguments[2] : undefined; + return new (getBuiltIn$h('Promise'))(function (resolve) { + var O = toObject$9(asyncItems); + if (mapfn !== undefined) mapfn = bind$g(mapfn, thisArg, 2); + var usingAsyncIterator = getMethod$4(O, ASYNC_ITERATOR$1); + var usingSyncIterator = usingAsyncIterator ? undefined : getIteratorMethod$4(O) || arrayIterator; + var A = isConstructor$1(C) ? new C() : []; + var iterator = usingAsyncIterator ? getAsyncIterator$2(O, usingAsyncIterator) : new AsyncFromSyncIterator$1(getIterator$6(O, usingSyncIterator)); + resolve(toArray(iterator, mapfn, A)); + }); +}; + +var $$1W = _export; + +var fromAsync = arrayFromAsync$1; // `Array.fromAsync` method +// https://github.com/tc39/proposal-array-from-async + + +$$1W({ + target: 'Array', + stat: true +}, { + fromAsync: fromAsync +}); + +var $$1V = _export; + +var $filterReject$3 = arrayIteration.filterReject; + +var addToUnscopables$7 = addToUnscopables$h; // `Array.prototype.filterOut` method +// https://github.com/tc39/proposal-array-filtering + + +$$1V({ + target: 'Array', + proto: true +}, { + filterOut: function filterOut(callbackfn + /* , thisArg */ + ) { + return $filterReject$3(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); +addToUnscopables$7('filterOut'); + +var $$1U = _export; + +var $filterReject$2 = arrayIteration.filterReject; + +var addToUnscopables$6 = addToUnscopables$h; // `Array.prototype.filterReject` method +// https://github.com/tc39/proposal-array-filtering + + +$$1U({ + target: 'Array', + proto: true +}, { + filterReject: function filterReject(callbackfn + /* , thisArg */ + ) { + return $filterReject$2(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); +addToUnscopables$6('filterReject'); + +var bind$f = functionBindContext; + +var IndexedObject$1 = indexedObject; + +var toObject$8 = toObject$A; + +var lengthOfArrayLike$4 = lengthOfArrayLike$q; // `Array.prototype.{ findLast, findLastIndex }` methods implementation + + +var createMethod = function (TYPE) { + var IS_FIND_LAST_INDEX = TYPE == 1; + return function ($this, callbackfn, that) { + var O = toObject$8($this); + var self = IndexedObject$1(O); + var boundFunction = bind$f(callbackfn, that, 3); + var index = lengthOfArrayLike$4(self); + var value, result; + + while (index-- > 0) { + value = self[index]; + result = boundFunction(value, index, O); + if (result) switch (TYPE) { + case 0: + return value; + // findLast + + case 1: + return index; + // findLastIndex + } + } + + return IS_FIND_LAST_INDEX ? -1 : undefined; + }; +}; + +var arrayIterationFromLast = { + // `Array.prototype.findLast` method + // https://github.com/tc39/proposal-array-find-from-last + findLast: createMethod(0), + // `Array.prototype.findLastIndex` method + // https://github.com/tc39/proposal-array-find-from-last + findLastIndex: createMethod(1) +}; + +var $$1T = _export; + +var $findLast$1 = arrayIterationFromLast.findLast; + +var addToUnscopables$5 = addToUnscopables$h; // `Array.prototype.findLast` method +// https://github.com/tc39/proposal-array-find-from-last + + +$$1T({ + target: 'Array', + proto: true +}, { + findLast: function findLast(callbackfn + /* , that = undefined */ + ) { + return $findLast$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); +addToUnscopables$5('findLast'); + +var $$1S = _export; + +var $findLastIndex$1 = arrayIterationFromLast.findLastIndex; + +var addToUnscopables$4 = addToUnscopables$h; // `Array.prototype.findLastIndex` method +// https://github.com/tc39/proposal-array-find-from-last + + +$$1S({ + target: 'Array', + proto: true +}, { + findLastIndex: function findLastIndex(callbackfn + /* , that = undefined */ + ) { + return $findLastIndex$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); + } +}); +addToUnscopables$4('findLastIndex'); + +var bind$e = functionBindContext; + +var IndexedObject = indexedObject; + +var toObject$7 = toObject$A; + +var toPropertyKey = toPropertyKey$9; + +var lengthOfArrayLike$3 = lengthOfArrayLike$q; + +var objectCreate = objectCreate$1; + +var arrayFromConstructorAndList$1 = arrayFromConstructorAndList$3; + +var push$2 = [].push; + +var arrayGroupBy = function ($this, callbackfn, that, specificConstructor) { + var O = toObject$7($this); + var self = IndexedObject(O); + var boundFunction = bind$e(callbackfn, that, 3); + var target = objectCreate(null); + var length = lengthOfArrayLike$3(self); + var index = 0; + var Constructor, key, value; + + for (; length > index; index++) { + value = self[index]; + key = toPropertyKey(boundFunction(value, index, O)); // in some IE10 builds, `hasOwnProperty` returns incorrect result on integer keys + // but since it's a `null` prototype object, we can safely use `in` + + if (key in target) push$2.call(target[key], value);else target[key] = [value]; + } + + if (specificConstructor) { + Constructor = specificConstructor(O); + + if (Constructor !== Array) { + for (key in target) target[key] = arrayFromConstructorAndList$1(Constructor, target[key]); + } + } + + return target; +}; + +var $$1R = _export; + +var $groupBy$1 = arrayGroupBy; + +var arraySpeciesConstructor = arraySpeciesConstructor$2; + +var addToUnscopables$3 = addToUnscopables$h; // `Array.prototype.groupBy` method +// https://github.com/tc39/proposal-array-grouping + + +$$1R({ + target: 'Array', + proto: true +}, { + groupBy: function groupBy(callbackfn + /* , thisArg */ + ) { + var thisArg = arguments.length > 1 ? arguments[1] : undefined; + return $groupBy$1(this, callbackfn, thisArg, arraySpeciesConstructor); + } +}); +addToUnscopables$3('groupBy'); + +var $$1Q = _export; + +var isArray = isArray$8; // eslint-disable-next-line es/no-object-isfrozen -- safe + + +var isFrozen = Object.isFrozen; + +var isFrozenStringArray = function (array, allowUndefined) { + if (!isFrozen || !isArray(array) || !isFrozen(array)) return false; + var index = 0; + var length = array.length; + var element; + + while (index < length) { + element = array[index++]; + + if (!(typeof element === 'string' || allowUndefined && typeof element === 'undefined')) { + return false; + } + } + + return length !== 0; +}; // `Array.isTemplateObject` method +// https://github.com/tc39/proposal-array-is-template-object + + +$$1Q({ + target: 'Array', + stat: true +}, { + isTemplateObject: function isTemplateObject(value) { + if (!isFrozenStringArray(value, true)) return false; + var raw = value.raw; + if (raw.length !== value.length || !isFrozenStringArray(raw, false)) return false; + return true; + } +}); + +var DESCRIPTORS$4 = descriptors; + +var addToUnscopables$2 = addToUnscopables$h; + +var toObject$6 = toObject$A; + +var lengthOfArrayLike$2 = lengthOfArrayLike$q; + +var defineProperty$3 = objectDefineProperty.f; // `Array.prototype.lastIndex` getter +// https://github.com/keithamus/proposal-array-last + + +if (DESCRIPTORS$4 && !('lastIndex' in [])) { + defineProperty$3(Array.prototype, 'lastIndex', { + configurable: true, + get: function lastIndex() { + var O = toObject$6(this); + var len = lengthOfArrayLike$2(O); + return len == 0 ? 0 : len - 1; + } + }); + addToUnscopables$2('lastIndex'); +} + +var DESCRIPTORS$3 = descriptors; + +var addToUnscopables$1 = addToUnscopables$h; + +var toObject$5 = toObject$A; + +var lengthOfArrayLike$1 = lengthOfArrayLike$q; + +var defineProperty$2 = objectDefineProperty.f; // `Array.prototype.lastIndex` accessor +// https://github.com/keithamus/proposal-array-last + + +if (DESCRIPTORS$3 && !('lastItem' in [])) { + defineProperty$2(Array.prototype, 'lastItem', { + configurable: true, + get: function lastItem() { + var O = toObject$5(this); + var len = lengthOfArrayLike$1(O); + return len == 0 ? undefined : O[len - 1]; + }, + set: function lastItem(value) { + var O = toObject$5(this); + var len = lengthOfArrayLike$1(O); + return O[len == 0 ? 0 : len - 1] = value; + } + }); + addToUnscopables$1('lastItem'); +} + +var aCallable$z = aCallable$Q; + +var lengthOfArrayLike = lengthOfArrayLike$q; + +var toObject$4 = toObject$A; + +var getBuiltIn$g = getBuiltIn$y; + +var arraySpeciesCreate = arraySpeciesCreate$6; + +var push$1 = [].push; // `Array.prototype.uniqueBy` method +// https://github.com/tc39/proposal-array-unique + +var arrayUniqueBy$1 = function uniqueBy(resolver) { + var that = toObject$4(this); + var length = lengthOfArrayLike(that); + var result = arraySpeciesCreate(that, 0); + var Map = getBuiltIn$g('Map'); + var map = new Map(); + var resolverFunction, index, item, key; + if (resolver != null) resolverFunction = aCallable$z(resolver);else resolverFunction = function (value) { + return value; + }; + + for (index = 0; index < length; index++) { + item = that[index]; + key = resolverFunction(item); + if (!map.has(key)) map.set(key, item); + } + + map.forEach(function (value) { + push$1.call(result, value); + }); + return result; +}; + +var $$1P = _export; + +var addToUnscopables = addToUnscopables$h; + +var uniqueBy = arrayUniqueBy$1; // `Array.prototype.uniqueBy` method +// https://github.com/tc39/proposal-array-unique + + +$$1P({ + target: 'Array', + proto: true +}, { + uniqueBy: uniqueBy +}); +addToUnscopables('uniqueBy'); + +var $$1O = _export; + +var anInstance$4 = anInstance$b; + +var createNonEnumerableProperty$5 = createNonEnumerableProperty$h; + +var hasOwn$4 = hasOwnProperty_1; + +var wellKnownSymbol$8 = wellKnownSymbol$G; + +var AsyncIteratorPrototype$2 = asyncIteratorPrototype; + +var IS_PURE$C = isPure; + +var TO_STRING_TAG$4 = wellKnownSymbol$8('toStringTag'); + +var AsyncIteratorConstructor = function AsyncIterator() { + anInstance$4(this, AsyncIteratorConstructor); +}; + +AsyncIteratorConstructor.prototype = AsyncIteratorPrototype$2; + +if (!hasOwn$4(AsyncIteratorPrototype$2, TO_STRING_TAG$4)) { + createNonEnumerableProperty$5(AsyncIteratorPrototype$2, TO_STRING_TAG$4, 'AsyncIterator'); +} + +if (!hasOwn$4(AsyncIteratorPrototype$2, 'constructor') || AsyncIteratorPrototype$2.constructor === Object) { + createNonEnumerableProperty$5(AsyncIteratorPrototype$2, 'constructor', AsyncIteratorConstructor); +} + +$$1O({ + global: true, + forced: IS_PURE$C +}, { + AsyncIterator: AsyncIteratorConstructor +}); + +var aCallable$y = aCallable$Q; + +var anObject$10 = anObject$1C; + +var create$4 = objectCreate$1; + +var createNonEnumerableProperty$4 = createNonEnumerableProperty$h; + +var redefineAll$3 = redefineAll$a; + +var wellKnownSymbol$7 = wellKnownSymbol$G; + +var InternalStateModule$8 = internalState; + +var getBuiltIn$f = getBuiltIn$y; + +var getMethod$3 = getMethod$h; + +var AsyncIteratorPrototype$1 = asyncIteratorPrototype; + +var Promise$2 = getBuiltIn$f('Promise'); +var setInternalState$8 = InternalStateModule$8.set; +var getInternalState$6 = InternalStateModule$8.get; +var TO_STRING_TAG$3 = wellKnownSymbol$7('toStringTag'); + +var asyncIteratorCreateProxy = function (nextHandler, IS_ITERATOR) { + var AsyncIteratorProxy = function AsyncIterator(state) { + state.next = aCallable$y(state.iterator.next); + state.done = false; + state.ignoreArgument = !IS_ITERATOR; + setInternalState$8(this, state); + }; + + AsyncIteratorProxy.prototype = redefineAll$3(create$4(AsyncIteratorPrototype$1), { + next: function next(arg) { + var that = this; + var hasArgument = !!arguments.length; + return new Promise$2(function (resolve) { + var state = getInternalState$6(that); + var args = hasArgument ? [state.ignoreArgument ? undefined : arg] : IS_ITERATOR ? [] : [undefined]; + state.ignoreArgument = false; + resolve(state.done ? { + done: true, + value: undefined + } : anObject$10(nextHandler.call(state, Promise$2, args))); + }); + }, + 'return': function (value) { + var that = this; + return new Promise$2(function (resolve, reject) { + var state = getInternalState$6(that); + var iterator = state.iterator; + state.done = true; + var $$return = getMethod$3(iterator, 'return'); + if ($$return === undefined) return resolve({ + done: true, + value: value + }); + Promise$2.resolve($$return.call(iterator, value)).then(function (result) { + anObject$10(result); + resolve({ + done: true, + value: value + }); + }, reject); + }); + }, + 'throw': function (value) { + var that = this; + return new Promise$2(function (resolve, reject) { + var state = getInternalState$6(that); + var iterator = state.iterator; + state.done = true; + var $$throw = getMethod$3(iterator, 'throw'); + if ($$throw === undefined) return reject(value); + resolve($$throw.call(iterator, value)); + }); + } + }); + + if (!IS_ITERATOR) { + createNonEnumerableProperty$4(AsyncIteratorProxy.prototype, TO_STRING_TAG$3, 'Generator'); + } + + return AsyncIteratorProxy; +}; + +var $$1N = _export; + +var anObject$$ = anObject$1C; + +var createAsyncIteratorProxy$6 = asyncIteratorCreateProxy; + +var AsyncIteratorProxy$6 = createAsyncIteratorProxy$6(function (Promise, args) { + var state = this; + var iterator = state.iterator; + return Promise.resolve(anObject$$(state.next.apply(iterator, args))).then(function (step) { + if (anObject$$(step).done) { + state.done = true; + return { + done: true, + value: undefined + }; + } + + return { + done: false, + value: [state.index++, step.value] + }; + }); +}); +$$1N({ + target: 'AsyncIterator', + proto: true, + real: true +}, { + asIndexedPairs: function asIndexedPairs() { + return new AsyncIteratorProxy$6({ + iterator: anObject$$(this), + index: 0 + }); + } +}); + +var $$1M = _export; + +var anObject$_ = anObject$1C; + +var toPositiveInteger$3 = toPositiveInteger$5; + +var createAsyncIteratorProxy$5 = asyncIteratorCreateProxy; + +var AsyncIteratorProxy$5 = createAsyncIteratorProxy$5(function (Promise, args) { + var state = this; + return new Promise(function (resolve, reject) { + var loop = function () { + try { + Promise.resolve(anObject$_(state.next.apply(state.iterator, state.remaining ? [] : args))).then(function (step) { + try { + if (anObject$_(step).done) { + state.done = true; + resolve({ + done: true, + value: undefined + }); + } else if (state.remaining) { + state.remaining--; + loop(); + } else resolve({ + done: false, + value: step.value + }); + } catch (err) { + reject(err); + } + }, reject); + } catch (error) { + reject(error); + } + }; + + loop(); + }); +}); +$$1M({ + target: 'AsyncIterator', + proto: true, + real: true +}, { + drop: function drop(limit) { + return new AsyncIteratorProxy$5({ + iterator: anObject$_(this), + remaining: toPositiveInteger$3(limit) + }); + } +}); + +var $$1L = _export; + +var $every = asyncIteratorIteration.every; + +$$1L({ + target: 'AsyncIterator', + proto: true, + real: true +}, { + every: function every(fn) { + return $every(this, fn); + } +}); + +var $$1K = _export; + +var aCallable$x = aCallable$Q; + +var anObject$Z = anObject$1C; + +var createAsyncIteratorProxy$4 = asyncIteratorCreateProxy; + +var AsyncIteratorProxy$4 = createAsyncIteratorProxy$4(function (Promise, args) { + var state = this; + var filterer = state.filterer; + return new Promise(function (resolve, reject) { + var loop = function () { + try { + Promise.resolve(anObject$Z(state.next.apply(state.iterator, args))).then(function (step) { + try { + if (anObject$Z(step).done) { + state.done = true; + resolve({ + done: true, + value: undefined + }); + } else { + var value = step.value; + Promise.resolve(filterer(value)).then(function (selected) { + selected ? resolve({ + done: false, + value: value + }) : loop(); + }, reject); + } + } catch (err) { + reject(err); + } + }, reject); + } catch (error) { + reject(error); + } + }; + + loop(); + }); +}); +$$1K({ + target: 'AsyncIterator', + proto: true, + real: true +}, { + filter: function filter(filterer) { + return new AsyncIteratorProxy$4({ + iterator: anObject$Z(this), + filterer: aCallable$x(filterer) + }); + } +}); + +var $$1J = _export; + +var $find = asyncIteratorIteration.find; + +$$1J({ + target: 'AsyncIterator', + proto: true, + real: true +}, { + find: function find(fn) { + return $find(this, fn); + } +}); + +var $$1I = _export; + +var aCallable$w = aCallable$Q; + +var anObject$Y = anObject$1C; + +var createAsyncIteratorProxy$3 = asyncIteratorCreateProxy; + +var getAsyncIterator$1 = getAsyncIterator$3; + +var AsyncIteratorProxy$3 = createAsyncIteratorProxy$3(function (Promise) { + var state = this; + var mapper = state.mapper; + var innerIterator; + return new Promise(function (resolve, reject) { + var outerLoop = function () { + try { + Promise.resolve(anObject$Y(state.next.call(state.iterator))).then(function (step) { + try { + if (anObject$Y(step).done) { + state.done = true; + resolve({ + done: true, + value: undefined + }); + } else { + Promise.resolve(mapper(step.value)).then(function (mapped) { + try { + state.innerIterator = innerIterator = getAsyncIterator$1(mapped); + state.innerNext = aCallable$w(innerIterator.next); + return innerLoop(); + } catch (error2) { + reject(error2); + } + }, reject); + } + } catch (error1) { + reject(error1); + } + }, reject); + } catch (error) { + reject(error); + } + }; + + var innerLoop = function () { + if (innerIterator = state.innerIterator) { + try { + Promise.resolve(anObject$Y(state.innerNext.call(innerIterator))).then(function (result) { + try { + if (anObject$Y(result).done) { + state.innerIterator = state.innerNext = null; + outerLoop(); + } else resolve({ + done: false, + value: result.value + }); + } catch (error1) { + reject(error1); + } + }, reject); + } catch (error) { + reject(error); + } + } else outerLoop(); + }; + + innerLoop(); + }); +}); +$$1I({ + target: 'AsyncIterator', + proto: true, + real: true +}, { + flatMap: function flatMap(mapper) { + return new AsyncIteratorProxy$3({ + iterator: anObject$Y(this), + mapper: aCallable$w(mapper), + innerIterator: null, + innerNext: null + }); + } +}); + +var $$1H = _export; + +var $forEach = asyncIteratorIteration.forEach; + +$$1H({ + target: 'AsyncIterator', + proto: true, + real: true +}, { + forEach: function forEach(fn) { + return $forEach(this, fn); + } +}); + +// https://github.com/tc39/proposal-iterator-helpers +var $$1G = _export; + +var anObject$X = anObject$1C; + +var toObject$3 = toObject$A; + +var AsyncIteratorPrototype = asyncIteratorPrototype; + +var createAsyncIteratorProxy$2 = asyncIteratorCreateProxy; + +var getAsyncIterator = getAsyncIterator$3; + +var getIterator$5 = getIterator$b; + +var getIteratorMethod$3 = getIteratorMethod$9; + +var getMethod$2 = getMethod$h; + +var wellKnownSymbol$6 = wellKnownSymbol$G; + +var AsyncFromSyncIterator = asyncFromSyncIterator; + +var ASYNC_ITERATOR = wellKnownSymbol$6('asyncIterator'); +var isPrototypeOf$1 = {}.isPrototypeOf; +var AsyncIteratorProxy$2 = createAsyncIteratorProxy$2(function (Promise, args) { + return anObject$X(this.next.apply(this.iterator, args)); +}, true); +$$1G({ + target: 'AsyncIterator', + stat: true +}, { + from: function from(O) { + var object = toObject$3(O); + var usingIterator = getMethod$2(object, ASYNC_ITERATOR); + var iterator; + + if (usingIterator) { + iterator = getAsyncIterator(object, usingIterator); + if (isPrototypeOf$1.call(AsyncIteratorPrototype, iterator)) return iterator; + } + + if (iterator === undefined) { + usingIterator = getIteratorMethod$3(object); + if (usingIterator) return new AsyncFromSyncIterator(getIterator$5(object, usingIterator)); + } + + return new AsyncIteratorProxy$2({ + iterator: iterator !== undefined ? iterator : object + }); + } +}); + +var $$1F = _export; + +var aCallable$v = aCallable$Q; + +var anObject$W = anObject$1C; + +var createAsyncIteratorProxy$1 = asyncIteratorCreateProxy; + +var AsyncIteratorProxy$1 = createAsyncIteratorProxy$1(function (Promise, args) { + var state = this; + var mapper = state.mapper; + return Promise.resolve(anObject$W(state.next.apply(state.iterator, args))).then(function (step) { + if (anObject$W(step).done) { + state.done = true; + return { + done: true, + value: undefined + }; + } + + return Promise.resolve(mapper(step.value)).then(function (value) { + return { + done: false, + value: value + }; + }); + }); +}); +$$1F({ + target: 'AsyncIterator', + proto: true, + real: true +}, { + map: function map(mapper) { + return new AsyncIteratorProxy$1({ + iterator: anObject$W(this), + mapper: aCallable$v(mapper) + }); + } +}); + +var $$1E = _export; + +var aCallable$u = aCallable$Q; + +var anObject$V = anObject$1C; + +var getBuiltIn$e = getBuiltIn$y; + +var Promise$1 = getBuiltIn$e('Promise'); +$$1E({ + target: 'AsyncIterator', + proto: true, + real: true +}, { + reduce: function reduce(reducer + /* , initialValue */ + ) { + var iterator = anObject$V(this); + var next = aCallable$u(iterator.next); + var noInitial = arguments.length < 2; + var accumulator = noInitial ? undefined : arguments[1]; + aCallable$u(reducer); + return new Promise$1(function (resolve, reject) { + var loop = function () { + try { + Promise$1.resolve(anObject$V(next.call(iterator))).then(function (step) { + try { + if (anObject$V(step).done) { + noInitial ? reject(TypeError('Reduce of empty iterator with no initial value')) : resolve(accumulator); + } else { + var value = step.value; + + if (noInitial) { + noInitial = false; + accumulator = value; + loop(); + } else { + Promise$1.resolve(reducer(accumulator, value)).then(function (result) { + accumulator = result; + loop(); + }, reject); + } + } + } catch (err) { + reject(err); + } + }, reject); + } catch (error) { + reject(error); + } + }; + + loop(); + }); + } +}); + +var $$1D = _export; + +var $some = asyncIteratorIteration.some; + +$$1D({ + target: 'AsyncIterator', + proto: true, + real: true +}, { + some: function some(fn) { + return $some(this, fn); + } +}); + +var $$1C = _export; + +var anObject$U = anObject$1C; + +var toPositiveInteger$2 = toPositiveInteger$5; + +var createAsyncIteratorProxy = asyncIteratorCreateProxy; + +var AsyncIteratorProxy = createAsyncIteratorProxy(function (Promise, args) { + var iterator = this.iterator; + var returnMethod, result; + + if (!this.remaining--) { + result = { + done: true, + value: undefined + }; + this.done = true; + returnMethod = iterator['return']; + + if (returnMethod !== undefined) { + return Promise.resolve(returnMethod.call(iterator)).then(function () { + return result; + }); + } + + return result; + } + + return this.next.apply(iterator, args); +}); +$$1C({ + target: 'AsyncIterator', + proto: true, + real: true +}, { + take: function take(limit) { + return new AsyncIteratorProxy({ + iterator: anObject$U(this), + remaining: toPositiveInteger$2(limit) + }); + } +}); + +var $$1B = _export; + +var $toArray = asyncIteratorIteration.toArray; + +$$1B({ + target: 'AsyncIterator', + proto: true, + real: true +}, { + toArray: function toArray() { + return $toArray(this, undefined, []); + } +}); + +var InternalStateModule$7 = internalState; + +var createIteratorConstructor$4 = createIteratorConstructor$7; + +var isObject$3 = isObject$C; + +var defineProperties$1 = objectDefineProperties; + +var DESCRIPTORS$2 = descriptors; + +var INCORRECT_RANGE = 'Incorrect Number.range arguments'; +var NUMERIC_RANGE_ITERATOR = 'NumericRangeIterator'; +var setInternalState$7 = InternalStateModule$7.set; +var getInternalState$5 = InternalStateModule$7.getterFor(NUMERIC_RANGE_ITERATOR); +var $RangeIterator = createIteratorConstructor$4(function NumericRangeIterator(start, end, option, type, zero, one) { + if (typeof start != type || end !== Infinity && end !== -Infinity && typeof end != type) { + throw new TypeError(INCORRECT_RANGE); + } + + if (start === Infinity || start === -Infinity) { + throw new RangeError(INCORRECT_RANGE); + } + + var ifIncrease = end > start; + var inclusiveEnd = false; + var step; + + if (option === undefined) { + step = undefined; + } else if (isObject$3(option)) { + step = option.step; + inclusiveEnd = !!option.inclusive; + } else if (typeof option == type) { + step = option; + } else { + throw new TypeError(INCORRECT_RANGE); + } + + if (step == null) { + step = ifIncrease ? one : -one; + } + + if (typeof step != type) { + throw new TypeError(INCORRECT_RANGE); + } + + if (step === Infinity || step === -Infinity || step === zero && start !== end) { + throw new RangeError(INCORRECT_RANGE); + } // eslint-disable-next-line no-self-compare -- NaN check + + + var hitsEnd = start != start || end != end || step != step || end > start !== step > zero; + setInternalState$7(this, { + type: NUMERIC_RANGE_ITERATOR, + start: start, + end: end, + step: step, + inclusiveEnd: inclusiveEnd, + hitsEnd: hitsEnd, + currentCount: zero, + zero: zero + }); + + if (!DESCRIPTORS$2) { + this.start = start; + this.end = end; + this.step = step; + this.inclusive = inclusiveEnd; + } +}, NUMERIC_RANGE_ITERATOR, function next() { + var state = getInternalState$5(this); + if (state.hitsEnd) return { + value: undefined, + done: true + }; + var start = state.start; + var end = state.end; + var step = state.step; + var currentYieldingValue = start + step * state.currentCount++; + if (currentYieldingValue === end) state.hitsEnd = true; + var inclusiveEnd = state.inclusiveEnd; + var endCondition; + + if (end > start) { + endCondition = inclusiveEnd ? currentYieldingValue > end : currentYieldingValue >= end; + } else { + endCondition = inclusiveEnd ? end > currentYieldingValue : end >= currentYieldingValue; + } + + if (endCondition) { + return { + value: undefined, + done: state.hitsEnd = true + }; + } + + return { + value: currentYieldingValue, + done: false + }; +}); + +var getter = function (fn) { + return { + get: fn, + set: function () { + /* empty */ + }, + configurable: true, + enumerable: false + }; +}; + +if (DESCRIPTORS$2) { + defineProperties$1($RangeIterator.prototype, { + start: getter(function () { + return getInternalState$5(this).start; + }), + end: getter(function () { + return getInternalState$5(this).end; + }), + inclusive: getter(function () { + return getInternalState$5(this).inclusiveEnd; + }), + step: getter(function () { + return getInternalState$5(this).step; + }) + }); +} + +var numericRangeIterator = $RangeIterator; + +/* eslint-disable es/no-bigint -- safe */ + +var $$1A = _export; + +var NumericRangeIterator$1 = numericRangeIterator; // `BigInt.range` method +// https://github.com/tc39/proposal-Number.range + + +if (typeof BigInt == 'function') { + $$1A({ + target: 'BigInt', + stat: true + }, { + range: function range(start, end, option) { + return new NumericRangeIterator$1(start, end, option, 'bigint', BigInt(0), BigInt(1)); + } + }); +} + +// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env` +var Map$2 = es_map; + +var WeakMap$1 = es_weakMap.exports; + +var create$3 = objectCreate$1; + +var isObject$2 = isObject$C; + +var Node = function () { + // keys + this.object = null; + this.symbol = null; // child nodes + + this.primitives = null; + this.objectsByIndex = create$3(null); +}; + +Node.prototype.get = function (key, initializer) { + return this[key] || (this[key] = initializer()); +}; + +Node.prototype.next = function (i, it, IS_OBJECT) { + var store = IS_OBJECT ? this.objectsByIndex[i] || (this.objectsByIndex[i] = new WeakMap$1()) : this.primitives || (this.primitives = new Map$2()); + var entry = store.get(it); + if (!entry) store.set(it, entry = new Node()); + return entry; +}; + +var root$1 = new Node(); + +var compositeKey = function () { + var active = root$1; + var length = arguments.length; + var i, it; // for prevent leaking, start from objects + + for (i = 0; i < length; i++) { + if (isObject$2(it = arguments[i])) active = active.next(i, it, true); + } + + if (this === Object && active === root$1) throw TypeError('Composite keys must contain a non-primitive component'); + + for (i = 0; i < length; i++) { + if (!isObject$2(it = arguments[i])) active = active.next(i, it, false); + } + + return active; +}; + +var $$1z = _export; + +var getCompositeKeyNode$1 = compositeKey; + +var getBuiltIn$d = getBuiltIn$y; + +var create$2 = objectCreate$1; + +var initializer = function () { + var freeze = getBuiltIn$d('Object', 'freeze'); + return freeze ? freeze(create$2(null)) : create$2(null); +}; // https://github.com/tc39/proposal-richer-keys/tree/master/compositeKey + + +$$1z({ + global: true +}, { + compositeKey: function compositeKey() { + return getCompositeKeyNode$1.apply(Object, arguments).get('object', initializer); + } +}); + +var $$1y = _export; + +var getCompositeKeyNode = compositeKey; + +var getBuiltIn$c = getBuiltIn$y; // https://github.com/tc39/proposal-richer-keys/tree/master/compositeKey + + +$$1y({ + global: true +}, { + compositeSymbol: function compositeSymbol() { + if (arguments.length === 1 && typeof arguments[0] === 'string') return getBuiltIn$c('Symbol')['for'](arguments[0]); + return getCompositeKeyNode.apply(null, arguments).get('symbol', getBuiltIn$c('Symbol')); + } +}); + +var $$1x = _export; + +var global$7 = global$R; + +var anInstance$3 = anInstance$b; + +var isCallable$5 = isCallable$z; + +var createNonEnumerableProperty$3 = createNonEnumerableProperty$h; + +var fails$2 = fails$15; + +var hasOwn$3 = hasOwnProperty_1; + +var wellKnownSymbol$5 = wellKnownSymbol$G; + +var IteratorPrototype$2 = iteratorsCore.IteratorPrototype; + +var TO_STRING_TAG$2 = wellKnownSymbol$5('toStringTag'); +var NativeIterator = global$7.Iterator; // FF56- have non-standard global helper `Iterator` + +var FORCED$2 = !isCallable$5(NativeIterator) || NativeIterator.prototype !== IteratorPrototype$2 // FF44- non-standard `Iterator` passes previous tests +|| !fails$2(function () { + NativeIterator({}); +}); + +var IteratorConstructor = function Iterator() { + anInstance$3(this, IteratorConstructor); +}; + +if (!hasOwn$3(IteratorPrototype$2, TO_STRING_TAG$2)) { + createNonEnumerableProperty$3(IteratorPrototype$2, TO_STRING_TAG$2, 'Iterator'); +} + +if (FORCED$2 || !hasOwn$3(IteratorPrototype$2, 'constructor') || IteratorPrototype$2.constructor === Object) { + createNonEnumerableProperty$3(IteratorPrototype$2, 'constructor', IteratorConstructor); +} + +IteratorConstructor.prototype = IteratorPrototype$2; +$$1x({ + global: true, + forced: FORCED$2 +}, { + Iterator: IteratorConstructor +}); + +var aCallable$t = aCallable$Q; + +var anObject$T = anObject$1C; + +var create$1 = objectCreate$1; + +var createNonEnumerableProperty$2 = createNonEnumerableProperty$h; + +var redefineAll$2 = redefineAll$a; + +var wellKnownSymbol$4 = wellKnownSymbol$G; + +var InternalStateModule$6 = internalState; + +var getMethod$1 = getMethod$h; + +var IteratorPrototype$1 = iteratorsCore.IteratorPrototype; + +var setInternalState$6 = InternalStateModule$6.set; +var getInternalState$4 = InternalStateModule$6.get; +var TO_STRING_TAG$1 = wellKnownSymbol$4('toStringTag'); + +var iteratorCreateProxy = function (nextHandler, IS_ITERATOR) { + var IteratorProxy = function Iterator(state) { + state.next = aCallable$t(state.iterator.next); + state.done = false; + state.ignoreArg = !IS_ITERATOR; + setInternalState$6(this, state); + }; + + IteratorProxy.prototype = redefineAll$2(create$1(IteratorPrototype$1), { + next: function next(arg) { + var state = getInternalState$4(this); + var args = arguments.length ? [state.ignoreArg ? undefined : arg] : IS_ITERATOR ? [] : [undefined]; + state.ignoreArg = false; + var result = state.done ? undefined : nextHandler.call(state, args); + return { + done: state.done, + value: result + }; + }, + 'return': function (value) { + var state = getInternalState$4(this); + var iterator = state.iterator; + state.done = true; + var $$return = getMethod$1(iterator, 'return'); + return { + done: true, + value: $$return ? anObject$T($$return.call(iterator, value)).value : value + }; + }, + 'throw': function (value) { + var state = getInternalState$4(this); + var iterator = state.iterator; + state.done = true; + var $$throw = getMethod$1(iterator, 'throw'); + if ($$throw) return $$throw.call(iterator, value); + throw value; + } + }); + + if (!IS_ITERATOR) { + createNonEnumerableProperty$2(IteratorProxy.prototype, TO_STRING_TAG$1, 'Generator'); + } + + return IteratorProxy; +}; + +var $$1w = _export; + +var anObject$S = anObject$1C; + +var createIteratorProxy$6 = iteratorCreateProxy; + +var IteratorProxy$6 = createIteratorProxy$6(function (args) { + var result = anObject$S(this.next.apply(this.iterator, args)); + var done = this.done = !!result.done; + if (!done) return [this.index++, result.value]; +}); +$$1w({ + target: 'Iterator', + proto: true, + real: true +}, { + asIndexedPairs: function asIndexedPairs() { + return new IteratorProxy$6({ + iterator: anObject$S(this), + index: 0 + }); + } +}); + +var $$1v = _export; + +var anObject$R = anObject$1C; + +var toPositiveInteger$1 = toPositiveInteger$5; + +var createIteratorProxy$5 = iteratorCreateProxy; + +var IteratorProxy$5 = createIteratorProxy$5(function (args) { + var iterator = this.iterator; + var next = this.next; + var result, done; + + while (this.remaining) { + this.remaining--; + result = anObject$R(next.call(iterator)); + done = this.done = !!result.done; + if (done) return; + } + + result = anObject$R(next.apply(iterator, args)); + done = this.done = !!result.done; + if (!done) return result.value; +}); +$$1v({ + target: 'Iterator', + proto: true, + real: true +}, { + drop: function drop(limit) { + return new IteratorProxy$5({ + iterator: anObject$R(this), + remaining: toPositiveInteger$1(limit) + }); + } +}); + +var $$1u = _export; + +var iterate$z = iterate$I; + +var aCallable$s = aCallable$Q; + +var anObject$Q = anObject$1C; + +$$1u({ + target: 'Iterator', + proto: true, + real: true +}, { + every: function every(fn) { + anObject$Q(this); + aCallable$s(fn); + return !iterate$z(this, function (value, stop) { + if (!fn(value)) return stop(); + }, { + IS_ITERATOR: true, + INTERRUPTED: true + }).stopped; + } +}); + +var $$1t = _export; + +var aCallable$r = aCallable$Q; + +var anObject$P = anObject$1C; + +var createIteratorProxy$4 = iteratorCreateProxy; + +var callWithSafeIterationClosing$1 = callWithSafeIterationClosing$3; + +var IteratorProxy$4 = createIteratorProxy$4(function (args) { + var iterator = this.iterator; + var filterer = this.filterer; + var next = this.next; + var result, done, value; + + while (true) { + result = anObject$P(next.apply(iterator, args)); + done = this.done = !!result.done; + if (done) return; + value = result.value; + if (callWithSafeIterationClosing$1(iterator, filterer, value)) return value; + } +}); +$$1t({ + target: 'Iterator', + proto: true, + real: true +}, { + filter: function filter(filterer) { + return new IteratorProxy$4({ + iterator: anObject$P(this), + filterer: aCallable$r(filterer) + }); + } +}); + +var $$1s = _export; + +var iterate$y = iterate$I; + +var aCallable$q = aCallable$Q; + +var anObject$O = anObject$1C; + +$$1s({ + target: 'Iterator', + proto: true, + real: true +}, { + find: function find(fn) { + anObject$O(this); + aCallable$q(fn); + return iterate$y(this, function (value, stop) { + if (fn(value)) return stop(value); + }, { + IS_ITERATOR: true, + INTERRUPTED: true + }).result; + } +}); + +var $$1r = _export; + +var aCallable$p = aCallable$Q; + +var anObject$N = anObject$1C; + +var getIteratorMethod$2 = getIteratorMethod$9; + +var createIteratorProxy$3 = iteratorCreateProxy; + +var iteratorClose$1 = iteratorClose$4; + +var IteratorProxy$3 = createIteratorProxy$3(function () { + var iterator = this.iterator; + var mapper = this.mapper; + var result, mapped, iteratorMethod, innerIterator; + + while (true) { + try { + if (innerIterator = this.innerIterator) { + result = anObject$N(this.innerNext.call(innerIterator)); + if (!result.done) return result.value; + this.innerIterator = this.innerNext = null; + } + + result = anObject$N(this.next.call(iterator)); + if (this.done = !!result.done) return; + mapped = mapper(result.value); + iteratorMethod = getIteratorMethod$2(mapped); + + if (!iteratorMethod) { + throw TypeError('.flatMap callback should return an iterable object'); + } + + this.innerIterator = innerIterator = anObject$N(iteratorMethod.call(mapped)); + this.innerNext = aCallable$p(innerIterator.next); + } catch (error) { + iteratorClose$1(iterator, 'throw', error); + } + } +}); +$$1r({ + target: 'Iterator', + proto: true, + real: true +}, { + flatMap: function flatMap(mapper) { + return new IteratorProxy$3({ + iterator: anObject$N(this), + mapper: aCallable$p(mapper), + innerIterator: null, + innerNext: null + }); + } +}); + +var $$1q = _export; + +var iterate$x = iterate$I; + +var anObject$M = anObject$1C; + +$$1q({ + target: 'Iterator', + proto: true, + real: true +}, { + forEach: function forEach(fn) { + iterate$x(anObject$M(this), fn, { + IS_ITERATOR: true + }); + } +}); + +// https://github.com/tc39/proposal-iterator-helpers +var $$1p = _export; + +var anObject$L = anObject$1C; + +var toObject$2 = toObject$A; + +var IteratorPrototype = iteratorsCore.IteratorPrototype; + +var createIteratorProxy$2 = iteratorCreateProxy; + +var getIterator$4 = getIterator$b; + +var getIteratorMethod$1 = getIteratorMethod$9; + +var isPrototypeOf = {}.isPrototypeOf; +var IteratorProxy$2 = createIteratorProxy$2(function (args) { + var result = anObject$L(this.next.apply(this.iterator, args)); + var done = this.done = !!result.done; + if (!done) return result.value; +}, true); +$$1p({ + target: 'Iterator', + stat: true +}, { + from: function from(O) { + var object = toObject$2(O); + var usingIterator = getIteratorMethod$1(object); + var iterator; + + if (usingIterator) { + iterator = getIterator$4(object, usingIterator); + if (isPrototypeOf.call(IteratorPrototype, iterator)) return iterator; + } else { + iterator = object; + } + + return new IteratorProxy$2({ + iterator: iterator + }); + } +}); + +var $$1o = _export; + +var aCallable$o = aCallable$Q; + +var anObject$K = anObject$1C; + +var createIteratorProxy$1 = iteratorCreateProxy; + +var callWithSafeIterationClosing = callWithSafeIterationClosing$3; + +var IteratorProxy$1 = createIteratorProxy$1(function (args) { + var iterator = this.iterator; + var result = anObject$K(this.next.apply(iterator, args)); + var done = this.done = !!result.done; + if (!done) return callWithSafeIterationClosing(iterator, this.mapper, result.value); +}); +$$1o({ + target: 'Iterator', + proto: true, + real: true +}, { + map: function map(mapper) { + return new IteratorProxy$1({ + iterator: anObject$K(this), + mapper: aCallable$o(mapper) + }); + } +}); + +var $$1n = _export; + +var iterate$w = iterate$I; + +var aCallable$n = aCallable$Q; + +var anObject$J = anObject$1C; + +$$1n({ + target: 'Iterator', + proto: true, + real: true +}, { + reduce: function reduce(reducer + /* , initialValue */ + ) { + anObject$J(this); + aCallable$n(reducer); + var noInitial = arguments.length < 2; + var accumulator = noInitial ? undefined : arguments[1]; + iterate$w(this, function (value) { + if (noInitial) { + noInitial = false; + accumulator = value; + } else { + accumulator = reducer(accumulator, value); + } + }, { + IS_ITERATOR: true + }); + if (noInitial) throw TypeError('Reduce of empty iterator with no initial value'); + return accumulator; + } +}); + +var $$1m = _export; + +var iterate$v = iterate$I; + +var aCallable$m = aCallable$Q; + +var anObject$I = anObject$1C; + +$$1m({ + target: 'Iterator', + proto: true, + real: true +}, { + some: function some(fn) { + anObject$I(this); + aCallable$m(fn); + return iterate$v(this, function (value, stop) { + if (fn(value)) return stop(); + }, { + IS_ITERATOR: true, + INTERRUPTED: true + }).stopped; + } +}); + +var $$1l = _export; + +var anObject$H = anObject$1C; + +var toPositiveInteger = toPositiveInteger$5; + +var createIteratorProxy = iteratorCreateProxy; + +var iteratorClose = iteratorClose$4; + +var IteratorProxy = createIteratorProxy(function (args) { + var iterator = this.iterator; + + if (!this.remaining--) { + this.done = true; + return iteratorClose(iterator, 'normal', undefined); + } + + var result = anObject$H(this.next.apply(iterator, args)); + var done = this.done = !!result.done; + if (!done) return result.value; +}); +$$1l({ + target: 'Iterator', + proto: true, + real: true +}, { + take: function take(limit) { + return new IteratorProxy({ + iterator: anObject$H(this), + remaining: toPositiveInteger(limit) + }); + } +}); + +var $$1k = _export; + +var iterate$u = iterate$I; + +var anObject$G = anObject$1C; + +var push = [].push; +$$1k({ + target: 'Iterator', + proto: true, + real: true +}, { + toArray: function toArray() { + var result = []; + iterate$u(anObject$G(this), push, { + that: result, + IS_ITERATOR: true + }); + return result; + } +}); + +var aCallable$l = aCallable$Q; + +var anObject$F = anObject$1C; // https://github.com/tc39/collection-methods + + +var collectionDeleteAll$4 = function () { + var collection = anObject$F(this); + var remover = aCallable$l(collection['delete']); + var allDeleted = true; + var wasDeleted; + + for (var k = 0, len = arguments.length; k < len; k++) { + wasDeleted = remover.call(collection, arguments[k]); + allDeleted = allDeleted && wasDeleted; + } + + return !!allDeleted; +}; + +var $$1j = _export; + +var IS_PURE$B = isPure; + +var collectionDeleteAll$3 = collectionDeleteAll$4; // `Map.prototype.deleteAll` method +// https://github.com/tc39/proposal-collection-methods + + +$$1j({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$B +}, { + deleteAll: function deleteAll() { + return collectionDeleteAll$3.apply(this, arguments); + } +}); + +var anObject$E = anObject$1C; // `Map.prototype.emplace` method +// https://github.com/thumbsupep/proposal-upsert + + +var mapEmplace = function emplace(key, handler) { + var map = anObject$E(this); + var value = map.has(key) && 'update' in handler ? handler.update(map.get(key), key, map) : handler.insert(key, map); + map.set(key, value); + return value; +}; + +var $$1i = _export; + +var IS_PURE$A = isPure; + +var $emplace$1 = mapEmplace; // `Map.prototype.emplace` method +// https://github.com/thumbsupep/proposal-upsert + + +$$1i({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$A +}, { + emplace: $emplace$1 +}); + +var getMapIterator$a = function (it) { + // eslint-disable-next-line es/no-map -- safe + return Map.prototype.entries.call(it); +}; + +var $$1h = _export; + +var IS_PURE$z = isPure; + +var anObject$D = anObject$1C; + +var bind$d = functionBindContext; + +var getMapIterator$9 = getMapIterator$a; + +var iterate$t = iterate$I; // `Map.prototype.every` method +// https://github.com/tc39/proposal-collection-methods + + +$$1h({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$z +}, { + every: function every(callbackfn + /* , thisArg */ + ) { + var map = anObject$D(this); + var iterator = getMapIterator$9(map); + var boundFunction = bind$d(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + return !iterate$t(iterator, function (key, value, stop) { + if (!boundFunction(value, key, map)) return stop(); + }, { + AS_ENTRIES: true, + IS_ITERATOR: true, + INTERRUPTED: true + }).stopped; + } +}); + +var $$1g = _export; + +var IS_PURE$y = isPure; + +var getBuiltIn$b = getBuiltIn$y; + +var aCallable$k = aCallable$Q; + +var anObject$C = anObject$1C; + +var bind$c = functionBindContext; + +var speciesConstructor$8 = speciesConstructor$f; + +var getMapIterator$8 = getMapIterator$a; + +var iterate$s = iterate$I; // `Map.prototype.filter` method +// https://github.com/tc39/proposal-collection-methods + + +$$1g({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$y +}, { + filter: function filter(callbackfn + /* , thisArg */ + ) { + var map = anObject$C(this); + var iterator = getMapIterator$8(map); + var boundFunction = bind$c(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + var newMap = new (speciesConstructor$8(map, getBuiltIn$b('Map')))(); + var setter = aCallable$k(newMap.set); + iterate$s(iterator, function (key, value) { + if (boundFunction(value, key, map)) setter.call(newMap, key, value); + }, { + AS_ENTRIES: true, + IS_ITERATOR: true + }); + return newMap; + } +}); + +var $$1f = _export; + +var IS_PURE$x = isPure; + +var anObject$B = anObject$1C; + +var bind$b = functionBindContext; + +var getMapIterator$7 = getMapIterator$a; + +var iterate$r = iterate$I; // `Map.prototype.find` method +// https://github.com/tc39/proposal-collection-methods + + +$$1f({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$x +}, { + find: function find(callbackfn + /* , thisArg */ + ) { + var map = anObject$B(this); + var iterator = getMapIterator$7(map); + var boundFunction = bind$b(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + return iterate$r(iterator, function (key, value, stop) { + if (boundFunction(value, key, map)) return stop(value); + }, { + AS_ENTRIES: true, + IS_ITERATOR: true, + INTERRUPTED: true + }).result; + } +}); + +var $$1e = _export; + +var IS_PURE$w = isPure; + +var anObject$A = anObject$1C; + +var bind$a = functionBindContext; + +var getMapIterator$6 = getMapIterator$a; + +var iterate$q = iterate$I; // `Map.prototype.findKey` method +// https://github.com/tc39/proposal-collection-methods + + +$$1e({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$w +}, { + findKey: function findKey(callbackfn + /* , thisArg */ + ) { + var map = anObject$A(this); + var iterator = getMapIterator$6(map); + var boundFunction = bind$a(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + return iterate$q(iterator, function (key, value, stop) { + if (boundFunction(value, key, map)) return stop(key); + }, { + AS_ENTRIES: true, + IS_ITERATOR: true, + INTERRUPTED: true + }).result; + } +}); + +var aCallable$j = aCallable$Q; + +var aConstructor$1 = aConstructor$5; + +var bind$9 = functionBindContext; + +var iterate$p = iterate$I; + +var collectionFrom = function from(source +/* , mapFn, thisArg */ +) { + var length = arguments.length; + var mapFn = length > 1 ? arguments[1] : undefined; + var mapping, array, n, boundFunction; + aConstructor$1(this); + mapping = mapFn !== undefined; + if (mapping) aCallable$j(mapFn); + if (source == undefined) return new this(); + array = []; + + if (mapping) { + n = 0; + boundFunction = bind$9(mapFn, length > 2 ? arguments[2] : undefined, 2); + iterate$p(source, function (nextItem) { + array.push(boundFunction(nextItem, n++)); + }); + } else { + iterate$p(source, array.push, { + that: array + }); + } + + return new this(array); +}; + +var $$1d = _export; + +var from$4 = collectionFrom; // `Map.from` method +// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from + + +$$1d({ + target: 'Map', + stat: true +}, { + from: from$4 +}); + +var $$1c = _export; + +var aCallable$i = aCallable$Q; + +var getIterator$3 = getIterator$b; + +var iterate$o = iterate$I; // `Map.groupBy` method +// https://github.com/tc39/proposal-collection-methods + + +$$1c({ + target: 'Map', + stat: true +}, { + groupBy: function groupBy(iterable, keyDerivative) { + aCallable$i(keyDerivative); + var iterator = getIterator$3(iterable); + var newMap = new this(); + var has = aCallable$i(newMap.has); + var get = aCallable$i(newMap.get); + var set = aCallable$i(newMap.set); + iterate$o(iterator, function (element) { + var derivedKey = keyDerivative(element); + if (!has.call(newMap, derivedKey)) set.call(newMap, derivedKey, [element]);else get.call(newMap, derivedKey).push(element); + }, { + IS_ITERATOR: true + }); + return newMap; + } +}); + +// `SameValueZero` abstract operation +// https://tc39.es/ecma262/#sec-samevaluezero +var sameValueZero$1 = function (x, y) { + // eslint-disable-next-line no-self-compare -- NaN check + return x === y || x != x && y != y; +}; + +var $$1b = _export; + +var IS_PURE$v = isPure; + +var anObject$z = anObject$1C; + +var getMapIterator$5 = getMapIterator$a; + +var sameValueZero = sameValueZero$1; + +var iterate$n = iterate$I; // `Map.prototype.includes` method +// https://github.com/tc39/proposal-collection-methods + + +$$1b({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$v +}, { + includes: function includes(searchElement) { + return iterate$n(getMapIterator$5(anObject$z(this)), function (key, value, stop) { + if (sameValueZero(value, searchElement)) return stop(); + }, { + AS_ENTRIES: true, + IS_ITERATOR: true, + INTERRUPTED: true + }).stopped; + } +}); + +var $$1a = _export; + +var iterate$m = iterate$I; + +var aCallable$h = aCallable$Q; // `Map.keyBy` method +// https://github.com/tc39/proposal-collection-methods + + +$$1a({ + target: 'Map', + stat: true +}, { + keyBy: function keyBy(iterable, keyDerivative) { + var newMap = new this(); + aCallable$h(keyDerivative); + var setter = aCallable$h(newMap.set); + iterate$m(iterable, function (element) { + setter.call(newMap, keyDerivative(element), element); + }); + return newMap; + } +}); + +var $$19 = _export; + +var IS_PURE$u = isPure; + +var anObject$y = anObject$1C; + +var getMapIterator$4 = getMapIterator$a; + +var iterate$l = iterate$I; // `Map.prototype.keyOf` method +// https://github.com/tc39/proposal-collection-methods + + +$$19({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$u +}, { + keyOf: function keyOf(searchElement) { + return iterate$l(getMapIterator$4(anObject$y(this)), function (key, value, stop) { + if (value === searchElement) return stop(key); + }, { + AS_ENTRIES: true, + IS_ITERATOR: true, + INTERRUPTED: true + }).result; + } +}); + +var $$18 = _export; + +var IS_PURE$t = isPure; + +var getBuiltIn$a = getBuiltIn$y; + +var aCallable$g = aCallable$Q; + +var anObject$x = anObject$1C; + +var bind$8 = functionBindContext; + +var speciesConstructor$7 = speciesConstructor$f; + +var getMapIterator$3 = getMapIterator$a; + +var iterate$k = iterate$I; // `Map.prototype.mapKeys` method +// https://github.com/tc39/proposal-collection-methods + + +$$18({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$t +}, { + mapKeys: function mapKeys(callbackfn + /* , thisArg */ + ) { + var map = anObject$x(this); + var iterator = getMapIterator$3(map); + var boundFunction = bind$8(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + var newMap = new (speciesConstructor$7(map, getBuiltIn$a('Map')))(); + var setter = aCallable$g(newMap.set); + iterate$k(iterator, function (key, value) { + setter.call(newMap, boundFunction(value, key, map), value); + }, { + AS_ENTRIES: true, + IS_ITERATOR: true + }); + return newMap; + } +}); + +var $$17 = _export; + +var IS_PURE$s = isPure; + +var getBuiltIn$9 = getBuiltIn$y; + +var aCallable$f = aCallable$Q; + +var anObject$w = anObject$1C; + +var bind$7 = functionBindContext; + +var speciesConstructor$6 = speciesConstructor$f; + +var getMapIterator$2 = getMapIterator$a; + +var iterate$j = iterate$I; // `Map.prototype.mapValues` method +// https://github.com/tc39/proposal-collection-methods + + +$$17({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$s +}, { + mapValues: function mapValues(callbackfn + /* , thisArg */ + ) { + var map = anObject$w(this); + var iterator = getMapIterator$2(map); + var boundFunction = bind$7(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + var newMap = new (speciesConstructor$6(map, getBuiltIn$9('Map')))(); + var setter = aCallable$f(newMap.set); + iterate$j(iterator, function (key, value) { + setter.call(newMap, key, boundFunction(value, key, map)); + }, { + AS_ENTRIES: true, + IS_ITERATOR: true + }); + return newMap; + } +}); + +var $$16 = _export; + +var IS_PURE$r = isPure; + +var aCallable$e = aCallable$Q; + +var anObject$v = anObject$1C; + +var iterate$i = iterate$I; // `Map.prototype.merge` method +// https://github.com/tc39/proposal-collection-methods + + +$$16({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$r +}, { + // eslint-disable-next-line no-unused-vars -- required for `.length` + merge: function merge(iterable + /* ...iterbles */ + ) { + var map = anObject$v(this); + var setter = aCallable$e(map.set); + var argumentsLength = arguments.length; + var i = 0; + + while (i < argumentsLength) { + iterate$i(arguments[i++], setter, { + that: map, + AS_ENTRIES: true + }); + } + + return map; + } +}); + +var collectionOf = function of() { + var length = arguments.length; + var A = new Array(length); + + while (length--) A[length] = arguments[length]; + + return new this(A); +}; + +var $$15 = _export; + +var of$3 = collectionOf; // `Map.of` method +// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of + + +$$15({ + target: 'Map', + stat: true +}, { + of: of$3 +}); + +var $$14 = _export; + +var IS_PURE$q = isPure; + +var anObject$u = anObject$1C; + +var aCallable$d = aCallable$Q; + +var getMapIterator$1 = getMapIterator$a; + +var iterate$h = iterate$I; // `Map.prototype.reduce` method +// https://github.com/tc39/proposal-collection-methods + + +$$14({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$q +}, { + reduce: function reduce(callbackfn + /* , initialValue */ + ) { + var map = anObject$u(this); + var iterator = getMapIterator$1(map); + var noInitial = arguments.length < 2; + var accumulator = noInitial ? undefined : arguments[1]; + aCallable$d(callbackfn); + iterate$h(iterator, function (key, value) { + if (noInitial) { + noInitial = false; + accumulator = value; + } else { + accumulator = callbackfn(accumulator, value, key, map); + } + }, { + AS_ENTRIES: true, + IS_ITERATOR: true + }); + if (noInitial) throw TypeError('Reduce of empty map with no initial value'); + return accumulator; + } +}); + +var $$13 = _export; + +var IS_PURE$p = isPure; + +var anObject$t = anObject$1C; + +var bind$6 = functionBindContext; + +var getMapIterator = getMapIterator$a; + +var iterate$g = iterate$I; // `Set.prototype.some` method +// https://github.com/tc39/proposal-collection-methods + + +$$13({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$p +}, { + some: function some(callbackfn + /* , thisArg */ + ) { + var map = anObject$t(this); + var iterator = getMapIterator(map); + var boundFunction = bind$6(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + return iterate$g(iterator, function (key, value, stop) { + if (boundFunction(value, key, map)) return stop(); + }, { + AS_ENTRIES: true, + IS_ITERATOR: true, + INTERRUPTED: true + }).stopped; + } +}); + +var $$12 = _export; + +var IS_PURE$o = isPure; + +var anObject$s = anObject$1C; + +var aCallable$c = aCallable$Q; // `Set.prototype.update` method +// https://github.com/tc39/proposal-collection-methods + + +$$12({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$o +}, { + update: function update(key, callback + /* , thunk */ + ) { + var map = anObject$s(this); + var length = arguments.length; + aCallable$c(callback); + var isPresentInMap = map.has(key); + + if (!isPresentInMap && length < 3) { + throw TypeError('Updating absent value'); + } + + var value = isPresentInMap ? map.get(key) : aCallable$c(length > 2 ? arguments[2] : undefined)(key, map); + map.set(key, callback(value, key, map)); + return map; + } +}); + +var isCallable$4 = isCallable$z; + +var anObject$r = anObject$1C; // `Map.prototype.upsert` method +// https://github.com/thumbsupep/proposal-upsert + + +var mapUpsert = function upsert(key, updateFn +/* , insertFn */ +) { + var map = anObject$r(this); + var insertFn = arguments.length > 2 ? arguments[2] : undefined; + var value; + + if (!isCallable$4(updateFn) && !isCallable$4(insertFn)) { + throw TypeError('At least one callback required'); + } + + if (map.has(key)) { + value = map.get(key); + + if (isCallable$4(updateFn)) { + value = updateFn(value); + map.set(key, value); + } + } else if (isCallable$4(insertFn)) { + value = insertFn(); + map.set(key, value); + } + + return value; +}; + +var $$11 = _export; + +var IS_PURE$n = isPure; + +var $upsert$2 = mapUpsert; // `Map.prototype.updateOrInsert` method (replaced by `Map.prototype.emplace`) +// https://github.com/thumbsupep/proposal-upsert + + +$$11({ + target: 'Map', + proto: true, + real: true, + name: 'upsert', + forced: IS_PURE$n +}, { + updateOrInsert: $upsert$2 +}); + +var $$10 = _export; + +var IS_PURE$m = isPure; + +var $upsert$1 = mapUpsert; // `Map.prototype.upsert` method (replaced by `Map.prototype.emplace`) +// https://github.com/thumbsupep/proposal-upsert + + +$$10({ + target: 'Map', + proto: true, + real: true, + forced: IS_PURE$m +}, { + upsert: $upsert$1 +}); + +var $$$ = _export; + +var min = Math.min; +var max = Math.max; // `Math.clamp` method +// https://rwaldron.github.io/proposal-math-extensions/ + +$$$({ + target: 'Math', + stat: true +}, { + clamp: function clamp(x, lower, upper) { + return min(upper, max(lower, x)); + } +}); + +var $$_ = _export; // `Math.DEG_PER_RAD` constant +// https://rwaldron.github.io/proposal-math-extensions/ + + +$$_({ + target: 'Math', + stat: true +}, { + DEG_PER_RAD: Math.PI / 180 +}); + +var $$Z = _export; + +var RAD_PER_DEG = 180 / Math.PI; // `Math.degrees` method +// https://rwaldron.github.io/proposal-math-extensions/ + +$$Z({ + target: 'Math', + stat: true +}, { + degrees: function degrees(radians) { + return radians * RAD_PER_DEG; + } +}); + +// `Math.scale` method implementation +// https://rwaldron.github.io/proposal-math-extensions/ +var mathScale = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) { + if (arguments.length === 0 + /* eslint-disable no-self-compare -- NaN check */ + || x != x || inLow != inLow || inHigh != inHigh || outLow != outLow || outHigh != outHigh + /* eslint-enable no-self-compare -- NaN check */ + ) return NaN; + if (x === Infinity || x === -Infinity) return x; + return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow; +}; + +var $$Y = _export; + +var scale$1 = mathScale; + +var fround = mathFround; // `Math.fscale` method +// https://rwaldron.github.io/proposal-math-extensions/ + + +$$Y({ + target: 'Math', + stat: true +}, { + fscale: function fscale(x, inLow, inHigh, outLow, outHigh) { + return fround(scale$1(x, inLow, inHigh, outLow, outHigh)); + } +}); + +var $$X = _export; // `Math.iaddh` method +// https://gist.github.com/BrendanEich/4294d5c212a6d2254703 +// TODO: Remove from `core-js@4` + + +$$X({ + target: 'Math', + stat: true +}, { + iaddh: function iaddh(x0, x1, y0, y1) { + var $x0 = x0 >>> 0; + var $x1 = x1 >>> 0; + var $y0 = y0 >>> 0; + return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0; + } +}); + +var $$W = _export; // `Math.imulh` method +// https://gist.github.com/BrendanEich/4294d5c212a6d2254703 +// TODO: Remove from `core-js@4` + + +$$W({ + target: 'Math', + stat: true +}, { + imulh: function imulh(u, v) { + var UINT16 = 0xFFFF; + var $u = +u; + var $v = +v; + var u0 = $u & UINT16; + var v0 = $v & UINT16; + var u1 = $u >> 16; + var v1 = $v >> 16; + var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16); + return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16); + } +}); + +var $$V = _export; // `Math.isubh` method +// https://gist.github.com/BrendanEich/4294d5c212a6d2254703 +// TODO: Remove from `core-js@4` + + +$$V({ + target: 'Math', + stat: true +}, { + isubh: function isubh(x0, x1, y0, y1) { + var $x0 = x0 >>> 0; + var $x1 = x1 >>> 0; + var $y0 = y0 >>> 0; + return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0; + } +}); + +var $$U = _export; // `Math.RAD_PER_DEG` constant +// https://rwaldron.github.io/proposal-math-extensions/ + + +$$U({ + target: 'Math', + stat: true +}, { + RAD_PER_DEG: 180 / Math.PI +}); + +var $$T = _export; + +var DEG_PER_RAD = Math.PI / 180; // `Math.radians` method +// https://rwaldron.github.io/proposal-math-extensions/ + +$$T({ + target: 'Math', + stat: true +}, { + radians: function radians(degrees) { + return degrees * DEG_PER_RAD; + } +}); + +var $$S = _export; + +var scale = mathScale; // `Math.scale` method +// https://rwaldron.github.io/proposal-math-extensions/ + + +$$S({ + target: 'Math', + stat: true +}, { + scale: scale +}); + +var $$R = _export; + +var anObject$q = anObject$1C; + +var numberIsFinite = numberIsFinite$2; + +var createIteratorConstructor$3 = createIteratorConstructor$7; + +var InternalStateModule$5 = internalState; + +var SEEDED_RANDOM = 'Seeded Random'; +var SEEDED_RANDOM_GENERATOR = SEEDED_RANDOM + ' Generator'; +var setInternalState$5 = InternalStateModule$5.set; +var getInternalState$3 = InternalStateModule$5.getterFor(SEEDED_RANDOM_GENERATOR); +var SEED_TYPE_ERROR = 'Math.seededPRNG() argument should have a "seed" field with a finite value.'; +var $SeededRandomGenerator = createIteratorConstructor$3(function SeededRandomGenerator(seed) { + setInternalState$5(this, { + type: SEEDED_RANDOM_GENERATOR, + seed: seed % 2147483647 + }); +}, SEEDED_RANDOM, function next() { + var state = getInternalState$3(this); + var seed = state.seed = (state.seed * 1103515245 + 12345) % 2147483647; + return { + value: (seed & 1073741823) / 1073741823, + done: false + }; +}); // `Math.seededPRNG` method +// https://github.com/tc39/proposal-seeded-random +// based on https://github.com/tc39/proposal-seeded-random/blob/78b8258835b57fc2100d076151ab506bc3202ae6/demo.html + +$$R({ + target: 'Math', + stat: true, + forced: true +}, { + seededPRNG: function seededPRNG(it) { + var seed = anObject$q(it).seed; + if (!numberIsFinite(seed)) throw TypeError(SEED_TYPE_ERROR); + return new $SeededRandomGenerator(seed); + } +}); + +var $$Q = _export; // `Math.signbit` method +// https://github.com/tc39/proposal-Math.signbit + + +$$Q({ + target: 'Math', + stat: true +}, { + signbit: function signbit(x) { + return (x = +x) == x && x == 0 ? 1 / x == -Infinity : x < 0; + } +}); + +var $$P = _export; // `Math.umulh` method +// https://gist.github.com/BrendanEich/4294d5c212a6d2254703 +// TODO: Remove from `core-js@4` + + +$$P({ + target: 'Math', + stat: true +}, { + umulh: function umulh(u, v) { + var UINT16 = 0xFFFF; + var $u = +u; + var $v = +v; + var u0 = $u & UINT16; + var v0 = $v & UINT16; + var u1 = $u >>> 16; + var v1 = $v >>> 16; + var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16); + return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16); + } +}); + +var $$O = _export; + +var toIntegerOrInfinity = toIntegerOrInfinity$i; + +var parseInt$1 = numberParseInt; + +var INVALID_NUMBER_REPRESENTATION = 'Invalid number representation'; +var INVALID_RADIX = 'Invalid radix'; +var valid = /^[\da-z]+$/; // `Number.fromString` method +// https://github.com/tc39/proposal-number-fromstring + +$$O({ + target: 'Number', + stat: true +}, { + fromString: function fromString(string, radix) { + var sign = 1; + var R, mathNum; + if (typeof string != 'string') throw TypeError(INVALID_NUMBER_REPRESENTATION); + if (!string.length) throw SyntaxError(INVALID_NUMBER_REPRESENTATION); + + if (string.charAt(0) == '-') { + sign = -1; + string = string.slice(1); + if (!string.length) throw SyntaxError(INVALID_NUMBER_REPRESENTATION); + } + + R = radix === undefined ? 10 : toIntegerOrInfinity(radix); + if (R < 2 || R > 36) throw RangeError(INVALID_RADIX); + + if (!valid.test(string) || (mathNum = parseInt$1(string, R)).toString(R) !== string) { + throw SyntaxError(INVALID_NUMBER_REPRESENTATION); + } + + return sign * mathNum; + } +}); + +var $$N = _export; + +var NumericRangeIterator = numericRangeIterator; // `Number.range` method +// https://github.com/tc39/proposal-Number.range + + +$$N({ + target: 'Number', + stat: true +}, { + range: function range(start, end, option) { + return new NumericRangeIterator(start, end, option, 'number', 0, 1); + } +}); + +var InternalStateModule$4 = internalState; + +var createIteratorConstructor$2 = createIteratorConstructor$7; + +var hasOwn$2 = hasOwnProperty_1; + +var objectKeys = objectKeys$5; + +var toObject$1 = toObject$A; + +var OBJECT_ITERATOR = 'Object Iterator'; +var setInternalState$4 = InternalStateModule$4.set; +var getInternalState$2 = InternalStateModule$4.getterFor(OBJECT_ITERATOR); +var objectIterator = createIteratorConstructor$2(function ObjectIterator(source, mode) { + var object = toObject$1(source); + setInternalState$4(this, { + type: OBJECT_ITERATOR, + mode: mode, + object: object, + keys: objectKeys(object), + index: 0 + }); +}, 'Object', function next() { + var state = getInternalState$2(this); + var keys = state.keys; + + while (true) { + if (keys === null || state.index >= keys.length) { + state.object = state.keys = null; + return { + value: undefined, + done: true + }; + } + + var key = keys[state.index++]; + var object = state.object; + if (!hasOwn$2(object, key)) continue; + + switch (state.mode) { + case 'keys': + return { + value: key, + done: false + }; + + case 'values': + return { + value: object[key], + done: false + }; + } + /* entries */ + + + return { + value: [key, object[key]], + done: false + }; + } +}); + +var $$M = _export; + +var ObjectIterator$2 = objectIterator; // `Object.iterateEntries` method +// https://github.com/tc39/proposal-object-iteration + + +$$M({ + target: 'Object', + stat: true +}, { + iterateEntries: function iterateEntries(object) { + return new ObjectIterator$2(object, 'entries'); + } +}); + +var $$L = _export; + +var ObjectIterator$1 = objectIterator; // `Object.iterateKeys` method +// https://github.com/tc39/proposal-object-iteration + + +$$L({ + target: 'Object', + stat: true +}, { + iterateKeys: function iterateKeys(object) { + return new ObjectIterator$1(object, 'keys'); + } +}); + +var $$K = _export; + +var ObjectIterator = objectIterator; // `Object.iterateValues` method +// https://github.com/tc39/proposal-object-iteration + + +$$K({ + target: 'Object', + stat: true +}, { + iterateValues: function iterateValues(object) { + return new ObjectIterator(object, 'values'); + } +}); + +var $$J = _export; + +var DESCRIPTORS$1 = descriptors; + +var setSpecies = setSpecies$7; + +var aCallable$b = aCallable$Q; + +var isCallable$3 = isCallable$z; + +var isConstructor = isConstructor$7; + +var anObject$p = anObject$1C; + +var isObject$1 = isObject$C; + +var anInstance$2 = anInstance$b; + +var defineProperty$1 = objectDefineProperty.f; + +var redefine$2 = redefine$l.exports; + +var redefineAll$1 = redefineAll$a; + +var getIterator$2 = getIterator$b; + +var getMethod = getMethod$h; + +var iterate$f = iterate$I; + +var hostReportErrors = hostReportErrors$2; + +var wellKnownSymbol$3 = wellKnownSymbol$G; + +var InternalStateModule$3 = internalState; + +var OBSERVABLE = wellKnownSymbol$3('observable'); +var getInternalState$1 = InternalStateModule$3.get; +var setInternalState$3 = InternalStateModule$3.set; + +var cleanupSubscription = function (subscriptionState) { + var cleanup = subscriptionState.cleanup; + + if (cleanup) { + subscriptionState.cleanup = undefined; + + try { + cleanup(); + } catch (error) { + hostReportErrors(error); + } + } +}; + +var subscriptionClosed = function (subscriptionState) { + return subscriptionState.observer === undefined; +}; + +var close = function (subscriptionState) { + var subscription = subscriptionState.facade; + + if (!DESCRIPTORS$1) { + subscription.closed = true; + var subscriptionObserver = subscriptionState.subscriptionObserver; + if (subscriptionObserver) subscriptionObserver.closed = true; + } + + subscriptionState.observer = undefined; +}; + +var Subscription = function (observer, subscriber) { + var subscriptionState = setInternalState$3(this, { + cleanup: undefined, + observer: anObject$p(observer), + subscriptionObserver: undefined + }); + var start; + if (!DESCRIPTORS$1) this.closed = false; + + try { + if (start = getMethod(observer, 'start')) start.call(observer, this); + } catch (error) { + hostReportErrors(error); + } + + if (subscriptionClosed(subscriptionState)) return; + var subscriptionObserver = subscriptionState.subscriptionObserver = new SubscriptionObserver(this); + + try { + var cleanup = subscriber(subscriptionObserver); + var subscription = cleanup; + if (cleanup != null) subscriptionState.cleanup = isCallable$3(cleanup.unsubscribe) ? function () { + subscription.unsubscribe(); + } : aCallable$b(cleanup); + } catch (error) { + subscriptionObserver.error(error); + return; + } + + if (subscriptionClosed(subscriptionState)) cleanupSubscription(subscriptionState); +}; + +Subscription.prototype = redefineAll$1({}, { + unsubscribe: function unsubscribe() { + var subscriptionState = getInternalState$1(this); + + if (!subscriptionClosed(subscriptionState)) { + close(subscriptionState); + cleanupSubscription(subscriptionState); + } + } +}); +if (DESCRIPTORS$1) defineProperty$1(Subscription.prototype, 'closed', { + configurable: true, + get: function () { + return subscriptionClosed(getInternalState$1(this)); + } +}); + +var SubscriptionObserver = function (subscription) { + setInternalState$3(this, { + subscription: subscription + }); + if (!DESCRIPTORS$1) this.closed = false; +}; + +SubscriptionObserver.prototype = redefineAll$1({}, { + next: function next(value) { + var subscriptionState = getInternalState$1(getInternalState$1(this).subscription); + + if (!subscriptionClosed(subscriptionState)) { + var observer = subscriptionState.observer; + + try { + var nextMethod = getMethod(observer, 'next'); + if (nextMethod) nextMethod.call(observer, value); + } catch (error) { + hostReportErrors(error); + } + } + }, + error: function error(value) { + var subscriptionState = getInternalState$1(getInternalState$1(this).subscription); + + if (!subscriptionClosed(subscriptionState)) { + var observer = subscriptionState.observer; + close(subscriptionState); + + try { + var errorMethod = getMethod(observer, 'error'); + if (errorMethod) errorMethod.call(observer, value);else hostReportErrors(value); + } catch (err) { + hostReportErrors(err); + } + + cleanupSubscription(subscriptionState); + } + }, + complete: function complete() { + var subscriptionState = getInternalState$1(getInternalState$1(this).subscription); + + if (!subscriptionClosed(subscriptionState)) { + var observer = subscriptionState.observer; + close(subscriptionState); + + try { + var completeMethod = getMethod(observer, 'complete'); + if (completeMethod) completeMethod.call(observer); + } catch (error) { + hostReportErrors(error); + } + + cleanupSubscription(subscriptionState); + } + } +}); +if (DESCRIPTORS$1) defineProperty$1(SubscriptionObserver.prototype, 'closed', { + configurable: true, + get: function () { + return subscriptionClosed(getInternalState$1(getInternalState$1(this).subscription)); + } +}); + +var $Observable = function Observable(subscriber) { + anInstance$2(this, $Observable, 'Observable'); + setInternalState$3(this, { + subscriber: aCallable$b(subscriber) + }); +}; + +redefineAll$1($Observable.prototype, { + subscribe: function subscribe(observer) { + var length = arguments.length; + return new Subscription(isCallable$3(observer) ? { + next: observer, + error: length > 1 ? arguments[1] : undefined, + complete: length > 2 ? arguments[2] : undefined + } : isObject$1(observer) ? observer : {}, getInternalState$1(this).subscriber); + } +}); +redefineAll$1($Observable, { + from: function from(x) { + var C = isConstructor(this) ? this : $Observable; + var observableMethod = getMethod(anObject$p(x), OBSERVABLE); + + if (observableMethod) { + var observable = anObject$p(observableMethod.call(x)); + return observable.constructor === C ? observable : new C(function (observer) { + return observable.subscribe(observer); + }); + } + + var iterator = getIterator$2(x); + return new C(function (observer) { + iterate$f(iterator, function (it, stop) { + observer.next(it); + if (observer.closed) return stop(); + }, { + IS_ITERATOR: true, + INTERRUPTED: true + }); + observer.complete(); + }); + }, + of: function of() { + var C = isConstructor(this) ? this : $Observable; + var length = arguments.length; + var items = new Array(length); + var index = 0; + + while (index < length) items[index] = arguments[index++]; + + return new C(function (observer) { + for (var i = 0; i < length; i++) { + observer.next(items[i]); + if (observer.closed) return; + } + + observer.complete(); + }); + } +}); +redefine$2($Observable.prototype, OBSERVABLE, function () { + return this; +}); +$$J({ + global: true +}, { + Observable: $Observable +}); +setSpecies('Observable'); + +var $$I = _export; + +var newPromiseCapabilityModule = newPromiseCapability$2; + +var perform = perform$4; // `Promise.try` method +// https://github.com/tc39/proposal-promise-try + + +$$I({ + target: 'Promise', + stat: true +}, { + 'try': function (callbackfn) { + var promiseCapability = newPromiseCapabilityModule.f(this); + var result = perform(callbackfn); + (result.error ? promiseCapability.reject : promiseCapability.resolve)(result.value); + return promiseCapability.promise; + } +}); + +// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env` +var Map$1 = es_map; + +var WeakMap = es_weakMap.exports; + +var shared = shared$7.exports; + +var metadata = shared('metadata'); +var store$1 = metadata.store || (metadata.store = new WeakMap()); + +var getOrCreateMetadataMap$1 = function (target, targetKey, create) { + var targetMetadata = store$1.get(target); + + if (!targetMetadata) { + if (!create) return; + store$1.set(target, targetMetadata = new Map$1()); + } + + var keyMetadata = targetMetadata.get(targetKey); + + if (!keyMetadata) { + if (!create) return; + targetMetadata.set(targetKey, keyMetadata = new Map$1()); + } + + return keyMetadata; +}; + +var ordinaryHasOwnMetadata$3 = function (MetadataKey, O, P) { + var metadataMap = getOrCreateMetadataMap$1(O, P, false); + return metadataMap === undefined ? false : metadataMap.has(MetadataKey); +}; + +var ordinaryGetOwnMetadata$2 = function (MetadataKey, O, P) { + var metadataMap = getOrCreateMetadataMap$1(O, P, false); + return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey); +}; + +var ordinaryDefineOwnMetadata$2 = function (MetadataKey, MetadataValue, O, P) { + getOrCreateMetadataMap$1(O, P, true).set(MetadataKey, MetadataValue); +}; + +var ordinaryOwnMetadataKeys$2 = function (target, targetKey) { + var metadataMap = getOrCreateMetadataMap$1(target, targetKey, false); + var keys = []; + if (metadataMap) metadataMap.forEach(function (_, key) { + keys.push(key); + }); + return keys; +}; + +var toMetadataKey$9 = function (it) { + return it === undefined || typeof it == 'symbol' ? it : String(it); +}; + +var reflectMetadata = { + store: store$1, + getMap: getOrCreateMetadataMap$1, + has: ordinaryHasOwnMetadata$3, + get: ordinaryGetOwnMetadata$2, + set: ordinaryDefineOwnMetadata$2, + keys: ordinaryOwnMetadataKeys$2, + toKey: toMetadataKey$9 +}; + +var $$H = _export; + +var ReflectMetadataModule$8 = reflectMetadata; + +var anObject$o = anObject$1C; + +var toMetadataKey$8 = ReflectMetadataModule$8.toKey; +var ordinaryDefineOwnMetadata$1 = ReflectMetadataModule$8.set; // `Reflect.defineMetadata` method +// https://github.com/rbuckton/reflect-metadata + +$$H({ + target: 'Reflect', + stat: true +}, { + defineMetadata: function defineMetadata(metadataKey, metadataValue, target + /* , targetKey */ + ) { + var targetKey = arguments.length < 4 ? undefined : toMetadataKey$8(arguments[3]); + ordinaryDefineOwnMetadata$1(metadataKey, metadataValue, anObject$o(target), targetKey); + } +}); + +var $$G = _export; + +var ReflectMetadataModule$7 = reflectMetadata; + +var anObject$n = anObject$1C; + +var toMetadataKey$7 = ReflectMetadataModule$7.toKey; +var getOrCreateMetadataMap = ReflectMetadataModule$7.getMap; +var store = ReflectMetadataModule$7.store; // `Reflect.deleteMetadata` method +// https://github.com/rbuckton/reflect-metadata + +$$G({ + target: 'Reflect', + stat: true +}, { + deleteMetadata: function deleteMetadata(metadataKey, target + /* , targetKey */ + ) { + var targetKey = arguments.length < 3 ? undefined : toMetadataKey$7(arguments[2]); + var metadataMap = getOrCreateMetadataMap(anObject$n(target), targetKey, false); + if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false; + if (metadataMap.size) return true; + var targetMetadata = store.get(target); + targetMetadata['delete'](targetKey); + return !!targetMetadata.size || store['delete'](target); + } +}); + +var $$F = _export; + +var ReflectMetadataModule$6 = reflectMetadata; + +var anObject$m = anObject$1C; + +var getPrototypeOf$3 = objectGetPrototypeOf$1; + +var ordinaryHasOwnMetadata$2 = ReflectMetadataModule$6.has; +var ordinaryGetOwnMetadata$1 = ReflectMetadataModule$6.get; +var toMetadataKey$6 = ReflectMetadataModule$6.toKey; + +var ordinaryGetMetadata = function (MetadataKey, O, P) { + var hasOwn = ordinaryHasOwnMetadata$2(MetadataKey, O, P); + if (hasOwn) return ordinaryGetOwnMetadata$1(MetadataKey, O, P); + var parent = getPrototypeOf$3(O); + return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined; +}; // `Reflect.getMetadata` method +// https://github.com/rbuckton/reflect-metadata + + +$$F({ + target: 'Reflect', + stat: true +}, { + getMetadata: function getMetadata(metadataKey, target + /* , targetKey */ + ) { + var targetKey = arguments.length < 3 ? undefined : toMetadataKey$6(arguments[2]); + return ordinaryGetMetadata(metadataKey, anObject$m(target), targetKey); + } +}); + +var $$E = _export; // TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env` + + +var Set$1 = es_set; + +var ReflectMetadataModule$5 = reflectMetadata; + +var anObject$l = anObject$1C; + +var getPrototypeOf$2 = objectGetPrototypeOf$1; + +var iterate$e = iterate$I; + +var ordinaryOwnMetadataKeys$1 = ReflectMetadataModule$5.keys; +var toMetadataKey$5 = ReflectMetadataModule$5.toKey; + +var from$3 = function (iter) { + var result = []; + iterate$e(iter, result.push, { + that: result + }); + return result; +}; + +var ordinaryMetadataKeys = function (O, P) { + var oKeys = ordinaryOwnMetadataKeys$1(O, P); + var parent = getPrototypeOf$2(O); + if (parent === null) return oKeys; + var pKeys = ordinaryMetadataKeys(parent, P); + return pKeys.length ? oKeys.length ? from$3(new Set$1(oKeys.concat(pKeys))) : pKeys : oKeys; +}; // `Reflect.getMetadataKeys` method +// https://github.com/rbuckton/reflect-metadata + + +$$E({ + target: 'Reflect', + stat: true +}, { + getMetadataKeys: function getMetadataKeys(target + /* , targetKey */ + ) { + var targetKey = arguments.length < 2 ? undefined : toMetadataKey$5(arguments[1]); + return ordinaryMetadataKeys(anObject$l(target), targetKey); + } +}); + +var $$D = _export; + +var ReflectMetadataModule$4 = reflectMetadata; + +var anObject$k = anObject$1C; + +var ordinaryGetOwnMetadata = ReflectMetadataModule$4.get; +var toMetadataKey$4 = ReflectMetadataModule$4.toKey; // `Reflect.getOwnMetadata` method +// https://github.com/rbuckton/reflect-metadata + +$$D({ + target: 'Reflect', + stat: true +}, { + getOwnMetadata: function getOwnMetadata(metadataKey, target + /* , targetKey */ + ) { + var targetKey = arguments.length < 3 ? undefined : toMetadataKey$4(arguments[2]); + return ordinaryGetOwnMetadata(metadataKey, anObject$k(target), targetKey); + } +}); + +var $$C = _export; + +var ReflectMetadataModule$3 = reflectMetadata; + +var anObject$j = anObject$1C; + +var ordinaryOwnMetadataKeys = ReflectMetadataModule$3.keys; +var toMetadataKey$3 = ReflectMetadataModule$3.toKey; // `Reflect.getOwnMetadataKeys` method +// https://github.com/rbuckton/reflect-metadata + +$$C({ + target: 'Reflect', + stat: true +}, { + getOwnMetadataKeys: function getOwnMetadataKeys(target + /* , targetKey */ + ) { + var targetKey = arguments.length < 2 ? undefined : toMetadataKey$3(arguments[1]); + return ordinaryOwnMetadataKeys(anObject$j(target), targetKey); + } +}); + +var $$B = _export; + +var ReflectMetadataModule$2 = reflectMetadata; + +var anObject$i = anObject$1C; + +var getPrototypeOf$1 = objectGetPrototypeOf$1; + +var ordinaryHasOwnMetadata$1 = ReflectMetadataModule$2.has; +var toMetadataKey$2 = ReflectMetadataModule$2.toKey; + +var ordinaryHasMetadata = function (MetadataKey, O, P) { + var hasOwn = ordinaryHasOwnMetadata$1(MetadataKey, O, P); + if (hasOwn) return true; + var parent = getPrototypeOf$1(O); + return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false; +}; // `Reflect.hasMetadata` method +// https://github.com/rbuckton/reflect-metadata + + +$$B({ + target: 'Reflect', + stat: true +}, { + hasMetadata: function hasMetadata(metadataKey, target + /* , targetKey */ + ) { + var targetKey = arguments.length < 3 ? undefined : toMetadataKey$2(arguments[2]); + return ordinaryHasMetadata(metadataKey, anObject$i(target), targetKey); + } +}); + +var $$A = _export; + +var ReflectMetadataModule$1 = reflectMetadata; + +var anObject$h = anObject$1C; + +var ordinaryHasOwnMetadata = ReflectMetadataModule$1.has; +var toMetadataKey$1 = ReflectMetadataModule$1.toKey; // `Reflect.hasOwnMetadata` method +// https://github.com/rbuckton/reflect-metadata + +$$A({ + target: 'Reflect', + stat: true +}, { + hasOwnMetadata: function hasOwnMetadata(metadataKey, target + /* , targetKey */ + ) { + var targetKey = arguments.length < 3 ? undefined : toMetadataKey$1(arguments[2]); + return ordinaryHasOwnMetadata(metadataKey, anObject$h(target), targetKey); + } +}); + +var $$z = _export; + +var ReflectMetadataModule = reflectMetadata; + +var anObject$g = anObject$1C; + +var toMetadataKey = ReflectMetadataModule.toKey; +var ordinaryDefineOwnMetadata = ReflectMetadataModule.set; // `Reflect.metadata` method +// https://github.com/rbuckton/reflect-metadata + +$$z({ + target: 'Reflect', + stat: true +}, { + metadata: function metadata(metadataKey, metadataValue) { + return function decorator(target, key) { + ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject$g(target), toMetadataKey(key)); + }; + } +}); + +var aCallable$a = aCallable$Q; + +var anObject$f = anObject$1C; // https://github.com/tc39/collection-methods + + +var collectionAddAll$2 = function () { + var set = anObject$f(this); + var adder = aCallable$a(set.add); + + for (var k = 0, len = arguments.length; k < len; k++) { + adder.call(set, arguments[k]); + } + + return set; +}; + +var $$y = _export; + +var IS_PURE$l = isPure; + +var collectionAddAll$1 = collectionAddAll$2; // `Set.prototype.addAll` method +// https://github.com/tc39/proposal-collection-methods + + +$$y({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$l +}, { + addAll: function addAll() { + return collectionAddAll$1.apply(this, arguments); + } +}); + +var $$x = _export; + +var IS_PURE$k = isPure; + +var collectionDeleteAll$2 = collectionDeleteAll$4; // `Set.prototype.deleteAll` method +// https://github.com/tc39/proposal-collection-methods + + +$$x({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$k +}, { + deleteAll: function deleteAll() { + return collectionDeleteAll$2.apply(this, arguments); + } +}); + +var $$w = _export; + +var IS_PURE$j = isPure; + +var getBuiltIn$8 = getBuiltIn$y; + +var aCallable$9 = aCallable$Q; + +var anObject$e = anObject$1C; + +var speciesConstructor$5 = speciesConstructor$f; + +var iterate$d = iterate$I; // `Set.prototype.difference` method +// https://github.com/tc39/proposal-set-methods + + +$$w({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$j +}, { + difference: function difference(iterable) { + var set = anObject$e(this); + var newSet = new (speciesConstructor$5(set, getBuiltIn$8('Set')))(set); + var remover = aCallable$9(newSet['delete']); + iterate$d(iterable, function (value) { + remover.call(newSet, value); + }); + return newSet; + } +}); + +var getSetIterator$7 = function (it) { + // eslint-disable-next-line es/no-set -- safe + return Set.prototype.values.call(it); +}; + +var $$v = _export; + +var IS_PURE$i = isPure; + +var anObject$d = anObject$1C; + +var bind$5 = functionBindContext; + +var getSetIterator$6 = getSetIterator$7; + +var iterate$c = iterate$I; // `Set.prototype.every` method +// https://github.com/tc39/proposal-collection-methods + + +$$v({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$i +}, { + every: function every(callbackfn + /* , thisArg */ + ) { + var set = anObject$d(this); + var iterator = getSetIterator$6(set); + var boundFunction = bind$5(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + return !iterate$c(iterator, function (value, stop) { + if (!boundFunction(value, value, set)) return stop(); + }, { + IS_ITERATOR: true, + INTERRUPTED: true + }).stopped; + } +}); + +var $$u = _export; + +var IS_PURE$h = isPure; + +var getBuiltIn$7 = getBuiltIn$y; + +var aCallable$8 = aCallable$Q; + +var anObject$c = anObject$1C; + +var bind$4 = functionBindContext; + +var speciesConstructor$4 = speciesConstructor$f; + +var getSetIterator$5 = getSetIterator$7; + +var iterate$b = iterate$I; // `Set.prototype.filter` method +// https://github.com/tc39/proposal-collection-methods + + +$$u({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$h +}, { + filter: function filter(callbackfn + /* , thisArg */ + ) { + var set = anObject$c(this); + var iterator = getSetIterator$5(set); + var boundFunction = bind$4(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + var newSet = new (speciesConstructor$4(set, getBuiltIn$7('Set')))(); + var adder = aCallable$8(newSet.add); + iterate$b(iterator, function (value) { + if (boundFunction(value, value, set)) adder.call(newSet, value); + }, { + IS_ITERATOR: true + }); + return newSet; + } +}); + +var $$t = _export; + +var IS_PURE$g = isPure; + +var anObject$b = anObject$1C; + +var bind$3 = functionBindContext; + +var getSetIterator$4 = getSetIterator$7; + +var iterate$a = iterate$I; // `Set.prototype.find` method +// https://github.com/tc39/proposal-collection-methods + + +$$t({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$g +}, { + find: function find(callbackfn + /* , thisArg */ + ) { + var set = anObject$b(this); + var iterator = getSetIterator$4(set); + var boundFunction = bind$3(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + return iterate$a(iterator, function (value, stop) { + if (boundFunction(value, value, set)) return stop(value); + }, { + IS_ITERATOR: true, + INTERRUPTED: true + }).result; + } +}); + +var $$s = _export; + +var from$2 = collectionFrom; // `Set.from` method +// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from + + +$$s({ + target: 'Set', + stat: true +}, { + from: from$2 +}); + +var $$r = _export; + +var IS_PURE$f = isPure; + +var getBuiltIn$6 = getBuiltIn$y; + +var aCallable$7 = aCallable$Q; + +var anObject$a = anObject$1C; + +var speciesConstructor$3 = speciesConstructor$f; + +var iterate$9 = iterate$I; // `Set.prototype.intersection` method +// https://github.com/tc39/proposal-set-methods + + +$$r({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$f +}, { + intersection: function intersection(iterable) { + var set = anObject$a(this); + var newSet = new (speciesConstructor$3(set, getBuiltIn$6('Set')))(); + var hasCheck = aCallable$7(set.has); + var adder = aCallable$7(newSet.add); + iterate$9(iterable, function (value) { + if (hasCheck.call(set, value)) adder.call(newSet, value); + }); + return newSet; + } +}); + +var $$q = _export; + +var IS_PURE$e = isPure; + +var aCallable$6 = aCallable$Q; + +var anObject$9 = anObject$1C; + +var iterate$8 = iterate$I; // `Set.prototype.isDisjointFrom` method +// https://tc39.github.io/proposal-set-methods/#Set.prototype.isDisjointFrom + + +$$q({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$e +}, { + isDisjointFrom: function isDisjointFrom(iterable) { + var set = anObject$9(this); + var hasCheck = aCallable$6(set.has); + return !iterate$8(iterable, function (value, stop) { + if (hasCheck.call(set, value) === true) return stop(); + }, { + INTERRUPTED: true + }).stopped; + } +}); + +var $$p = _export; + +var IS_PURE$d = isPure; + +var getBuiltIn$5 = getBuiltIn$y; + +var aCallable$5 = aCallable$Q; + +var isCallable$2 = isCallable$z; + +var anObject$8 = anObject$1C; + +var getIterator$1 = getIterator$b; + +var iterate$7 = iterate$I; // `Set.prototype.isSubsetOf` method +// https://tc39.github.io/proposal-set-methods/#Set.prototype.isSubsetOf + + +$$p({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$d +}, { + isSubsetOf: function isSubsetOf(iterable) { + var iterator = getIterator$1(this); + var otherSet = anObject$8(iterable); + var hasCheck = otherSet.has; + + if (!isCallable$2(hasCheck)) { + otherSet = new (getBuiltIn$5('Set'))(iterable); + hasCheck = aCallable$5(otherSet.has); + } + + return !iterate$7(iterator, function (value, stop) { + if (hasCheck.call(otherSet, value) === false) return stop(); + }, { + IS_ITERATOR: true, + INTERRUPTED: true + }).stopped; + } +}); + +var $$o = _export; + +var IS_PURE$c = isPure; + +var aCallable$4 = aCallable$Q; + +var anObject$7 = anObject$1C; + +var iterate$6 = iterate$I; // `Set.prototype.isSupersetOf` method +// https://tc39.github.io/proposal-set-methods/#Set.prototype.isSupersetOf + + +$$o({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$c +}, { + isSupersetOf: function isSupersetOf(iterable) { + var set = anObject$7(this); + var hasCheck = aCallable$4(set.has); + return !iterate$6(iterable, function (value, stop) { + if (hasCheck.call(set, value) === false) return stop(); + }, { + INTERRUPTED: true + }).stopped; + } +}); + +var $$n = _export; + +var IS_PURE$b = isPure; + +var anObject$6 = anObject$1C; + +var getSetIterator$3 = getSetIterator$7; + +var iterate$5 = iterate$I; // `Set.prototype.join` method +// https://github.com/tc39/proposal-collection-methods + + +$$n({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$b +}, { + join: function join(separator) { + var set = anObject$6(this); + var iterator = getSetIterator$3(set); + var sep = separator === undefined ? ',' : String(separator); + var result = []; + iterate$5(iterator, result.push, { + that: result, + IS_ITERATOR: true + }); + return result.join(sep); + } +}); + +var $$m = _export; + +var IS_PURE$a = isPure; + +var getBuiltIn$4 = getBuiltIn$y; + +var aCallable$3 = aCallable$Q; + +var anObject$5 = anObject$1C; + +var bind$2 = functionBindContext; + +var speciesConstructor$2 = speciesConstructor$f; + +var getSetIterator$2 = getSetIterator$7; + +var iterate$4 = iterate$I; // `Set.prototype.map` method +// https://github.com/tc39/proposal-collection-methods + + +$$m({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$a +}, { + map: function map(callbackfn + /* , thisArg */ + ) { + var set = anObject$5(this); + var iterator = getSetIterator$2(set); + var boundFunction = bind$2(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + var newSet = new (speciesConstructor$2(set, getBuiltIn$4('Set')))(); + var adder = aCallable$3(newSet.add); + iterate$4(iterator, function (value) { + adder.call(newSet, boundFunction(value, value, set)); + }, { + IS_ITERATOR: true + }); + return newSet; + } +}); + +var $$l = _export; + +var of$2 = collectionOf; // `Set.of` method +// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of + + +$$l({ + target: 'Set', + stat: true +}, { + of: of$2 +}); + +var $$k = _export; + +var IS_PURE$9 = isPure; + +var aCallable$2 = aCallable$Q; + +var anObject$4 = anObject$1C; + +var getSetIterator$1 = getSetIterator$7; + +var iterate$3 = iterate$I; // `Set.prototype.reduce` method +// https://github.com/tc39/proposal-collection-methods + + +$$k({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$9 +}, { + reduce: function reduce(callbackfn + /* , initialValue */ + ) { + var set = anObject$4(this); + var iterator = getSetIterator$1(set); + var noInitial = arguments.length < 2; + var accumulator = noInitial ? undefined : arguments[1]; + aCallable$2(callbackfn); + iterate$3(iterator, function (value) { + if (noInitial) { + noInitial = false; + accumulator = value; + } else { + accumulator = callbackfn(accumulator, value, value, set); + } + }, { + IS_ITERATOR: true + }); + if (noInitial) throw TypeError('Reduce of empty set with no initial value'); + return accumulator; + } +}); + +var $$j = _export; + +var IS_PURE$8 = isPure; + +var anObject$3 = anObject$1C; + +var bind$1 = functionBindContext; + +var getSetIterator = getSetIterator$7; + +var iterate$2 = iterate$I; // `Set.prototype.some` method +// https://github.com/tc39/proposal-collection-methods + + +$$j({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$8 +}, { + some: function some(callbackfn + /* , thisArg */ + ) { + var set = anObject$3(this); + var iterator = getSetIterator(set); + var boundFunction = bind$1(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); + return iterate$2(iterator, function (value, stop) { + if (boundFunction(value, value, set)) return stop(); + }, { + IS_ITERATOR: true, + INTERRUPTED: true + }).stopped; + } +}); + +var $$i = _export; + +var IS_PURE$7 = isPure; + +var getBuiltIn$3 = getBuiltIn$y; + +var aCallable$1 = aCallable$Q; + +var anObject$2 = anObject$1C; + +var speciesConstructor$1 = speciesConstructor$f; + +var iterate$1 = iterate$I; // `Set.prototype.symmetricDifference` method +// https://github.com/tc39/proposal-set-methods + + +$$i({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$7 +}, { + symmetricDifference: function symmetricDifference(iterable) { + var set = anObject$2(this); + var newSet = new (speciesConstructor$1(set, getBuiltIn$3('Set')))(set); + var remover = aCallable$1(newSet['delete']); + var adder = aCallable$1(newSet.add); + iterate$1(iterable, function (value) { + remover.call(newSet, value) || adder.call(newSet, value); + }); + return newSet; + } +}); + +var $$h = _export; + +var IS_PURE$6 = isPure; + +var getBuiltIn$2 = getBuiltIn$y; + +var aCallable = aCallable$Q; + +var anObject$1 = anObject$1C; + +var speciesConstructor = speciesConstructor$f; + +var iterate = iterate$I; // `Set.prototype.union` method +// https://github.com/tc39/proposal-set-methods + + +$$h({ + target: 'Set', + proto: true, + real: true, + forced: IS_PURE$6 +}, { + union: function union(iterable) { + var set = anObject$1(this); + var newSet = new (speciesConstructor(set, getBuiltIn$2('Set')))(set); + iterate(iterable, aCallable(newSet.add), { + that: newSet + }); + return newSet; + } +}); + +var $$g = _export; + +var charAt$1 = stringMultibyte.charAt; + +var fails$1 = fails$15; + +var FORCED$1 = fails$1(function () { + return '𠮷'.at(0) !== '𠮷'; +}); // `String.prototype.at` method +// https://github.com/mathiasbynens/String.prototype.at + +$$g({ + target: 'String', + proto: true, + forced: FORCED$1 +}, { + at: function at(pos) { + return charAt$1(this, pos); + } +}); + +var $$f = _export; + +var createIteratorConstructor$1 = createIteratorConstructor$7; + +var requireObjectCoercible = requireObjectCoercible$j; + +var toString = toString$t; + +var InternalStateModule$2 = internalState; + +var StringMultibyteModule = stringMultibyte; + +var codeAt$1 = StringMultibyteModule.codeAt; +var charAt = StringMultibyteModule.charAt; +var STRING_ITERATOR = 'String Iterator'; +var setInternalState$2 = InternalStateModule$2.set; +var getInternalState = InternalStateModule$2.getterFor(STRING_ITERATOR); // TODO: unify with String#@@iterator + +var $StringIterator = createIteratorConstructor$1(function StringIterator(string) { + setInternalState$2(this, { + type: STRING_ITERATOR, + string: string, + index: 0 + }); +}, 'String', function next() { + var state = getInternalState(this); + var string = state.string; + var index = state.index; + var point; + if (index >= string.length) return { + value: undefined, + done: true + }; + point = charAt(string, index); + state.index += point.length; + return { + value: { + codePoint: codeAt$1(point, 0), + position: index + }, + done: false + }; +}); // `String.prototype.codePoints` method +// https://github.com/tc39/proposal-string-prototype-codepoints + +$$f({ + target: 'String', + proto: true +}, { + codePoints: function codePoints() { + return new $StringIterator(toString(requireObjectCoercible(this))); + } +}); + +var defineWellKnownSymbol$6 = defineWellKnownSymbol$l; // `Symbol.asyncDispose` well-known symbol +// https://github.com/tc39/proposal-using-statement + + +defineWellKnownSymbol$6('asyncDispose'); + +var defineWellKnownSymbol$5 = defineWellKnownSymbol$l; // `Symbol.dispose` well-known symbol +// https://github.com/tc39/proposal-using-statement + + +defineWellKnownSymbol$5('dispose'); + +var defineWellKnownSymbol$4 = defineWellKnownSymbol$l; // `Symbol.matcher` well-known symbol +// https://github.com/tc39/proposal-pattern-matching + + +defineWellKnownSymbol$4('matcher'); + +var defineWellKnownSymbol$3 = defineWellKnownSymbol$l; // `Symbol.metadata` well-known symbol +// https://github.com/tc39/proposal-decorators + + +defineWellKnownSymbol$3('metadata'); + +var defineWellKnownSymbol$2 = defineWellKnownSymbol$l; // `Symbol.observable` well-known symbol +// https://github.com/tc39/proposal-observable + + +defineWellKnownSymbol$2('observable'); + +// TODO: remove from `core-js@4` +var defineWellKnownSymbol$1 = defineWellKnownSymbol$l; // `Symbol.patternMatch` well-known symbol +// https://github.com/tc39/proposal-pattern-matching + + +defineWellKnownSymbol$1('patternMatch'); + +// TODO: remove from `core-js@4` +var defineWellKnownSymbol = defineWellKnownSymbol$l; + +defineWellKnownSymbol('replaceAll'); + +var getBuiltIn$1 = getBuiltIn$y; + +var aConstructor = aConstructor$5; + +var arrayFromAsync = arrayFromAsync$1; + +var TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = typedArrayConstructorsRequireWrappers; + +var ArrayBufferViewCore$6 = arrayBufferViewCore; + +var arrayFromConstructorAndList = arrayFromConstructorAndList$3; + +var aTypedArrayConstructor = ArrayBufferViewCore$6.aTypedArrayConstructor; +var exportTypedArrayStaticMethod = ArrayBufferViewCore$6.exportTypedArrayStaticMethod; // `%TypedArray%.fromAsync` method +// https://github.com/tc39/proposal-array-from-async +// eslint-disable-next-line -- required for .length + +exportTypedArrayStaticMethod('fromAsync', function fromAsync(asyncItems +/* , mapfn = undefined, thisArg = undefined */ +) { + var C = this; + var argumentsLength = arguments.length; + var mapfn = argumentsLength > 1 ? arguments[1] : undefined; + var thisArg = argumentsLength > 2 ? arguments[2] : undefined; + return new (getBuiltIn$1('Promise'))(function (resolve) { + aConstructor(C); + resolve(arrayFromAsync(asyncItems, mapfn, thisArg)); + }).then(function (list) { + return arrayFromConstructorAndList(aTypedArrayConstructor(C), list); + }); +}, TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS); + +var ArrayBufferViewCore$5 = arrayBufferViewCore; + +var $filterReject$1 = arrayIteration.filterReject; + +var fromSpeciesAndList$2 = typedArrayFromSpeciesAndList; + +var aTypedArray$5 = ArrayBufferViewCore$5.aTypedArray; +var exportTypedArrayMethod$5 = ArrayBufferViewCore$5.exportTypedArrayMethod; // `%TypedArray%.prototype.filterOut` method +// https://github.com/tc39/proposal-array-filtering + +exportTypedArrayMethod$5('filterOut', function filterOut(callbackfn +/* , thisArg */ +) { + var list = $filterReject$1(aTypedArray$5(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + return fromSpeciesAndList$2(this, list); +}); + +var ArrayBufferViewCore$4 = arrayBufferViewCore; + +var $filterReject = arrayIteration.filterReject; + +var fromSpeciesAndList$1 = typedArrayFromSpeciesAndList; + +var aTypedArray$4 = ArrayBufferViewCore$4.aTypedArray; +var exportTypedArrayMethod$4 = ArrayBufferViewCore$4.exportTypedArrayMethod; // `%TypedArray%.prototype.filterReject` method +// https://github.com/tc39/proposal-array-filtering + +exportTypedArrayMethod$4('filterReject', function filterReject(callbackfn +/* , thisArg */ +) { + var list = $filterReject(aTypedArray$4(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined); + return fromSpeciesAndList$1(this, list); +}); + +var ArrayBufferViewCore$3 = arrayBufferViewCore; + +var $findLast = arrayIterationFromLast.findLast; + +var aTypedArray$3 = ArrayBufferViewCore$3.aTypedArray; +var exportTypedArrayMethod$3 = ArrayBufferViewCore$3.exportTypedArrayMethod; // `%TypedArray%.prototype.findLast` method +// https://github.com/tc39/proposal-array-find-from-last + +exportTypedArrayMethod$3('findLast', function findLast(predicate +/* , thisArg */ +) { + return $findLast(aTypedArray$3(this), predicate, arguments.length > 1 ? arguments[1] : undefined); +}); + +var ArrayBufferViewCore$2 = arrayBufferViewCore; + +var $findLastIndex = arrayIterationFromLast.findLastIndex; + +var aTypedArray$2 = ArrayBufferViewCore$2.aTypedArray; +var exportTypedArrayMethod$2 = ArrayBufferViewCore$2.exportTypedArrayMethod; // `%TypedArray%.prototype.findLastIndex` method +// https://github.com/tc39/proposal-array-find-from-last + +exportTypedArrayMethod$2('findLastIndex', function findLastIndex(predicate +/* , thisArg */ +) { + return $findLastIndex(aTypedArray$2(this), predicate, arguments.length > 1 ? arguments[1] : undefined); +}); + +var ArrayBufferViewCore$1 = arrayBufferViewCore; + +var $groupBy = arrayGroupBy; + +var typedArraySpeciesConstructor = typedArraySpeciesConstructor$5; + +var aTypedArray$1 = ArrayBufferViewCore$1.aTypedArray; +var exportTypedArrayMethod$1 = ArrayBufferViewCore$1.exportTypedArrayMethod; // `%TypedArray%.prototype.groupBy` method +// https://github.com/tc39/proposal-array-grouping + +exportTypedArrayMethod$1('groupBy', function groupBy(callbackfn +/* , thisArg */ +) { + var thisArg = arguments.length > 1 ? arguments[1] : undefined; + return $groupBy(aTypedArray$1(this), callbackfn, thisArg, typedArraySpeciesConstructor); +}); + +var ArrayBufferViewCore = arrayBufferViewCore; + +var arrayUniqueBy = arrayUniqueBy$1; + +var fromSpeciesAndList = typedArrayFromSpeciesAndList; + +var aTypedArray = ArrayBufferViewCore.aTypedArray; +var exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod; // `%TypedArray%.prototype.uniqueBy` method +// https://github.com/tc39/proposal-array-unique + +exportTypedArrayMethod('uniqueBy', function uniqueBy(resolver) { + return fromSpeciesAndList(this, arrayUniqueBy.call(aTypedArray(this), resolver)); +}); + +var $$e = _export; + +var IS_PURE$5 = isPure; + +var collectionDeleteAll$1 = collectionDeleteAll$4; // `WeakMap.prototype.deleteAll` method +// https://github.com/tc39/proposal-collection-methods + + +$$e({ + target: 'WeakMap', + proto: true, + real: true, + forced: IS_PURE$5 +}, { + deleteAll: function deleteAll() { + return collectionDeleteAll$1.apply(this, arguments); + } +}); + +var $$d = _export; + +var from$1 = collectionFrom; // `WeakMap.from` method +// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from + + +$$d({ + target: 'WeakMap', + stat: true +}, { + from: from$1 +}); + +var $$c = _export; + +var of$1 = collectionOf; // `WeakMap.of` method +// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of + + +$$c({ + target: 'WeakMap', + stat: true +}, { + of: of$1 +}); + +var $$b = _export; + +var IS_PURE$4 = isPure; + +var $emplace = mapEmplace; // `WeakMap.prototype.emplace` method +// https://github.com/tc39/proposal-upsert + + +$$b({ + target: 'WeakMap', + proto: true, + real: true, + forced: IS_PURE$4 +}, { + emplace: $emplace +}); + +var $$a = _export; + +var IS_PURE$3 = isPure; + +var $upsert = mapUpsert; // `WeakMap.prototype.upsert` method (replaced by `WeakMap.prototype.emplace`) +// https://github.com/tc39/proposal-upsert + + +$$a({ + target: 'WeakMap', + proto: true, + real: true, + forced: IS_PURE$3 +}, { + upsert: $upsert +}); + +var $$9 = _export; + +var IS_PURE$2 = isPure; + +var collectionAddAll = collectionAddAll$2; // `WeakSet.prototype.addAll` method +// https://github.com/tc39/proposal-collection-methods + + +$$9({ + target: 'WeakSet', + proto: true, + real: true, + forced: IS_PURE$2 +}, { + addAll: function addAll() { + return collectionAddAll.apply(this, arguments); + } +}); + +var $$8 = _export; + +var IS_PURE$1 = isPure; + +var collectionDeleteAll = collectionDeleteAll$4; // `WeakSet.prototype.deleteAll` method +// https://github.com/tc39/proposal-collection-methods + + +$$8({ + target: 'WeakSet', + proto: true, + real: true, + forced: IS_PURE$1 +}, { + deleteAll: function deleteAll() { + return collectionDeleteAll.apply(this, arguments); + } +}); + +var $$7 = _export; + +var from = collectionFrom; // `WeakSet.from` method +// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from + + +$$7({ + target: 'WeakSet', + stat: true +}, { + from: from +}); + +var $$6 = _export; + +var of = collectionOf; // `WeakSet.of` method +// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of + + +$$6({ + target: 'WeakSet', + stat: true +}, { + of: of +}); + +// iterable DOM collections +// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods +var domIterables = { + CSSRuleList: 0, + CSSStyleDeclaration: 0, + CSSValueList: 0, + ClientRectList: 0, + DOMRectList: 0, + DOMStringList: 0, + DOMTokenList: 1, + DataTransferItemList: 0, + FileList: 0, + HTMLAllCollection: 0, + HTMLCollection: 0, + HTMLFormElement: 0, + HTMLSelectElement: 0, + MediaList: 0, + MimeTypeArray: 0, + NamedNodeMap: 0, + NodeList: 1, + PaintRequestList: 0, + Plugin: 0, + PluginArray: 0, + SVGLengthList: 0, + SVGNumberList: 0, + SVGPathSegList: 0, + SVGPointList: 0, + SVGStringList: 0, + SVGTransformList: 0, + SourceBufferList: 0, + StyleSheetList: 0, + TextTrackCueList: 0, + TextTrackList: 0, + TouchList: 0 +}; + +// in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList` +var documentCreateElement = documentCreateElement$2; + +var classList$1 = documentCreateElement('span').classList; +var DOMTokenListPrototype$2 = classList$1 && classList$1.constructor && classList$1.constructor.prototype; +var domTokenListPrototype = DOMTokenListPrototype$2 === Object.prototype ? undefined : DOMTokenListPrototype$2; + +var global$6 = global$R; + +var DOMIterables$1 = domIterables; + +var DOMTokenListPrototype$1 = domTokenListPrototype; + +var forEach = arrayForEach; + +var createNonEnumerableProperty$1 = createNonEnumerableProperty$h; + +var handlePrototype$1 = function (CollectionPrototype) { + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try { + createNonEnumerableProperty$1(CollectionPrototype, 'forEach', forEach); + } catch (error) { + CollectionPrototype.forEach = forEach; + } +}; + +for (var COLLECTION_NAME$1 in DOMIterables$1) { + if (DOMIterables$1[COLLECTION_NAME$1]) { + handlePrototype$1(global$6[COLLECTION_NAME$1] && global$6[COLLECTION_NAME$1].prototype); + } +} + +handlePrototype$1(DOMTokenListPrototype$1); + +var global$5 = global$R; + +var DOMIterables = domIterables; + +var DOMTokenListPrototype = domTokenListPrototype; + +var ArrayIteratorMethods = es_array_iterator; + +var createNonEnumerableProperty = createNonEnumerableProperty$h; + +var wellKnownSymbol$2 = wellKnownSymbol$G; + +var ITERATOR$2 = wellKnownSymbol$2('iterator'); +var TO_STRING_TAG = wellKnownSymbol$2('toStringTag'); +var ArrayValues = ArrayIteratorMethods.values; + +var handlePrototype = function (CollectionPrototype, COLLECTION_NAME) { + if (CollectionPrototype) { + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype[ITERATOR$2] !== ArrayValues) try { + createNonEnumerableProperty(CollectionPrototype, ITERATOR$2, ArrayValues); + } catch (error) { + CollectionPrototype[ITERATOR$2] = ArrayValues; + } + + if (!CollectionPrototype[TO_STRING_TAG]) { + createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME); + } + + if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) { + // some Chrome versions have non-configurable methods on DOMTokenList + if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try { + createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]); + } catch (error) { + CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME]; + } + } + } +}; + +for (var COLLECTION_NAME in DOMIterables) { + handlePrototype(global$5[COLLECTION_NAME] && global$5[COLLECTION_NAME].prototype, COLLECTION_NAME); +} + +handlePrototype(DOMTokenListPrototype, 'DOMTokenList'); + +var $$5 = _export; + +var global$4 = global$R; + +var task = task$2; + +var FORCED = !global$4.setImmediate || !global$4.clearImmediate; // http://w3c.github.io/setImmediate/ + +$$5({ + global: true, + bind: true, + enumerable: true, + forced: FORCED +}, { + // `setImmediate` method + // http://w3c.github.io/setImmediate/#si-setImmediate + setImmediate: task.set, + // `clearImmediate` method + // http://w3c.github.io/setImmediate/#si-clearImmediate + clearImmediate: task.clear +}); + +var $$4 = _export; + +var global$3 = global$R; + +var microtask = microtask$2; + +var IS_NODE = engineIsNode; + +var process = global$3.process; // `queueMicrotask` method +// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-queuemicrotask + +$$4({ + global: true, + enumerable: true, + noTargetGet: true +}, { + queueMicrotask: function queueMicrotask(fn) { + var domain = IS_NODE && process.domain; + microtask(domain ? domain.bind(fn) : fn); + } +}); + +var $$3 = _export; + +var global$2 = global$R; + +var isCallable$1 = isCallable$z; + +var userAgent = engineUserAgent; + +var slice = [].slice; +var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check + +var wrap = function (scheduler) { + return function (handler, timeout + /* , ...arguments */ + ) { + var boundArgs = arguments.length > 2; + var args = boundArgs ? slice.call(arguments, 2) : undefined; + return scheduler(boundArgs ? function () { + // eslint-disable-next-line no-new-func -- spec requirement + (isCallable$1(handler) ? handler : Function(handler)).apply(this, args); + } : handler, timeout); + }; +}; // ie9- setTimeout & setInterval additional parameters fix +// https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers + + +$$3({ + global: true, + bind: true, + forced: MSIE +}, { + // `setTimeout` method + // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout + setTimeout: wrap(global$2.setTimeout), + // `setInterval` method + // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval + setInterval: wrap(global$2.setInterval) +}); + +var fails = fails$15; + +var wellKnownSymbol$1 = wellKnownSymbol$G; + +var IS_PURE = isPure; + +var ITERATOR$1 = wellKnownSymbol$1('iterator'); +var nativeUrl = !fails(function () { + var url = new URL('b?a=1&b=2&c=3', 'http://a'); + var searchParams = url.searchParams; + var result = ''; + url.pathname = 'c%20d'; + searchParams.forEach(function (value, key) { + searchParams['delete']('b'); + result += key + value; + }); + return IS_PURE && !url.toJSON || !searchParams.sort || url.href !== 'http://a/c%20d?a=1&c=3' || searchParams.get('c') !== '3' || String(new URLSearchParams('?a=1')) !== 'a=1' || !searchParams[ITERATOR$1] // throws in Edge + || new URL('https://a@b').username !== 'a' || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b' // not punycoded in Edge + || new URL('http://тест').host !== 'xn--e1aybc' // not escaped in Chrome 62- + || new URL('http://a#б').hash !== '#%D0%B1' // fails in Chrome 66- + || result !== 'a1c3' // throws in Safari + || new URL('http://x', undefined).host !== 'x'; +}); + +var maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1 + +var base = 36; +var tMin = 1; +var tMax = 26; +var skew = 38; +var damp = 700; +var initialBias = 72; +var initialN = 128; // 0x80 + +var delimiter = '-'; // '\x2D' + +var regexNonASCII = /[^\0-\u007E]/; // non-ASCII chars + +var regexSeparators = /[.\u3002\uFF0E\uFF61]/g; // RFC 3490 separators + +var OVERFLOW_ERROR = 'Overflow: input needs wider integers to process'; +var baseMinusTMin = base - tMin; +var floor$1 = Math.floor; +var stringFromCharCode = String.fromCharCode; +/** + * Creates an array containing the numeric code points of each Unicode + * character in the string. While JavaScript uses UCS-2 internally, + * this function will convert a pair of surrogate halves (each of which + * UCS-2 exposes as separate characters) into a single code point, + * matching UTF-16. + */ + +var ucs2decode = function (string) { + var output = []; + var counter = 0; + var length = string.length; + + while (counter < length) { + var value = string.charCodeAt(counter++); + + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // It's a high surrogate, and there is a next character. + var extra = string.charCodeAt(counter++); + + if ((extra & 0xFC00) == 0xDC00) { + // Low surrogate. + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // It's an unmatched surrogate; only append this code unit, in case the + // next code unit is the high surrogate of a surrogate pair. + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + + return output; +}; +/** + * Converts a digit/integer into a basic code point. + */ + + +var digitToBasic = function (digit) { + // 0..25 map to ASCII a..z or A..Z + // 26..35 map to ASCII 0..9 + return digit + 22 + 75 * (digit < 26); +}; +/** + * Bias adaptation function as per section 3.4 of RFC 3492. + * https://tools.ietf.org/html/rfc3492#section-3.4 + */ + + +var adapt = function (delta, numPoints, firstTime) { + var k = 0; + delta = firstTime ? floor$1(delta / damp) : delta >> 1; + delta += floor$1(delta / numPoints); + + for (; delta > baseMinusTMin * tMax >> 1; k += base) { + delta = floor$1(delta / baseMinusTMin); + } + + return floor$1(k + (baseMinusTMin + 1) * delta / (delta + skew)); +}; +/** + * Converts a string of Unicode symbols (e.g. a domain name label) to a + * Punycode string of ASCII-only symbols. + */ +// eslint-disable-next-line max-statements -- TODO + + +var encode = function (input) { + var output = []; // Convert the input in UCS-2 to an array of Unicode code points. + + input = ucs2decode(input); // Cache the length. + + var inputLength = input.length; // Initialize the state. + + var n = initialN; + var delta = 0; + var bias = initialBias; + var i, currentValue; // Handle the basic code points. + + for (i = 0; i < input.length; i++) { + currentValue = input[i]; + + if (currentValue < 0x80) { + output.push(stringFromCharCode(currentValue)); + } + } + + var basicLength = output.length; // number of basic code points. + + var handledCPCount = basicLength; // number of code points that have been handled; + // Finish the basic string with a delimiter unless it's empty. + + if (basicLength) { + output.push(delimiter); + } // Main encoding loop: + + + while (handledCPCount < inputLength) { + // All non-basic code points < n have been handled already. Find the next larger one: + var m = maxInt; + + for (i = 0; i < input.length; i++) { + currentValue = input[i]; + + if (currentValue >= n && currentValue < m) { + m = currentValue; + } + } // Increase `delta` enough to advance the decoder's state to , but guard against overflow. + + + var handledCPCountPlusOne = handledCPCount + 1; + + if (m - n > floor$1((maxInt - delta) / handledCPCountPlusOne)) { + throw RangeError(OVERFLOW_ERROR); + } + + delta += (m - n) * handledCPCountPlusOne; + n = m; + + for (i = 0; i < input.length; i++) { + currentValue = input[i]; + + if (currentValue < n && ++delta > maxInt) { + throw RangeError(OVERFLOW_ERROR); + } + + if (currentValue == n) { + // Represent delta as a generalized variable-length integer. + var q = delta; + + for (var k = base;; k += base) { + var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; + if (q < t) break; + var qMinusT = q - t; + var baseMinusT = base - t; + output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT))); + q = floor$1(qMinusT / baseMinusT); + } + + output.push(stringFromCharCode(digitToBasic(q))); + bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); + delta = 0; + ++handledCPCount; + } + } + + ++delta; + ++n; + } + + return output.join(''); +}; + +var stringPunycodeToAscii = function (input) { + var encoded = []; + var labels = input.toLowerCase().replace(regexSeparators, '\u002E').split('.'); + var i, label; + + for (i = 0; i < labels.length; i++) { + label = labels[i]; + encoded.push(regexNonASCII.test(label) ? 'xn--' + encode(label) : label); + } + + return encoded.join('.'); +}; + +var $$2 = _export; + +var getBuiltIn = getBuiltIn$y; + +var USE_NATIVE_URL$1 = nativeUrl; + +var redefine$1 = redefine$l.exports; + +var redefineAll = redefineAll$a; + +var setToStringTag$1 = setToStringTag$b; + +var createIteratorConstructor = createIteratorConstructor$7; + +var InternalStateModule$1 = internalState; + +var anInstance$1 = anInstance$b; + +var isCallable = isCallable$z; + +var hasOwn$1 = hasOwnProperty_1; + +var bind = functionBindContext; + +var classof = classof$b; + +var anObject = anObject$1C; + +var isObject = isObject$C; + +var $toString$1 = toString$t; + +var create = objectCreate$1; + +var createPropertyDescriptor = createPropertyDescriptor$9; + +var getIterator = getIterator$b; + +var getIteratorMethod = getIteratorMethod$9; + +var wellKnownSymbol = wellKnownSymbol$G; + +var nativeFetch = getBuiltIn('fetch'); +var NativeRequest = getBuiltIn('Request'); +var RequestPrototype = NativeRequest && NativeRequest.prototype; +var Headers = getBuiltIn('Headers'); +var ITERATOR = wellKnownSymbol('iterator'); +var URL_SEARCH_PARAMS = 'URLSearchParams'; +var URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator'; +var setInternalState$1 = InternalStateModule$1.set; +var getInternalParamsState = InternalStateModule$1.getterFor(URL_SEARCH_PARAMS); +var getInternalIteratorState = InternalStateModule$1.getterFor(URL_SEARCH_PARAMS_ITERATOR); +var plus = /\+/g; +var sequences = Array(4); + +var percentSequence = function (bytes) { + return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\da-f]{2}){' + bytes + '})', 'gi')); +}; + +var percentDecode = function (sequence) { + try { + return decodeURIComponent(sequence); + } catch (error) { + return sequence; + } +}; + +var deserialize = function (it) { + var result = it.replace(plus, ' '); + var bytes = 4; + + try { + return decodeURIComponent(result); + } catch (error) { + while (bytes) { + result = result.replace(percentSequence(bytes--), percentDecode); + } + + return result; + } +}; + +var find$1 = /[!'()~]|%20/g; +var replace = { + '!': '%21', + "'": '%27', + '(': '%28', + ')': '%29', + '~': '%7E', + '%20': '+' +}; + +var replacer = function (match) { + return replace[match]; +}; + +var serialize = function (it) { + return encodeURIComponent(it).replace(find$1, replacer); +}; + +var parseSearchParams = function (result, query) { + if (query) { + var attributes = query.split('&'); + var index = 0; + var attribute, entry; + + while (index < attributes.length) { + attribute = attributes[index++]; + + if (attribute.length) { + entry = attribute.split('='); + result.push({ + key: deserialize(entry.shift()), + value: deserialize(entry.join('=')) + }); + } + } + } +}; + +var updateSearchParams = function (query) { + this.entries.length = 0; + parseSearchParams(this.entries, query); +}; + +var validateArgumentsLength = function (passed, required) { + if (passed < required) throw TypeError('Not enough arguments'); +}; + +var URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) { + setInternalState$1(this, { + type: URL_SEARCH_PARAMS_ITERATOR, + iterator: getIterator(getInternalParamsState(params).entries), + kind: kind + }); +}, 'Iterator', function next() { + var state = getInternalIteratorState(this); + var kind = state.kind; + var step = state.iterator.next(); + var entry = step.value; + + if (!step.done) { + step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value]; + } + + return step; +}); // `URLSearchParams` constructor +// https://url.spec.whatwg.org/#interface-urlsearchparams + +var URLSearchParamsConstructor = function URLSearchParams() { + anInstance$1(this, URLSearchParamsConstructor, URL_SEARCH_PARAMS); + var init = arguments.length > 0 ? arguments[0] : undefined; + var that = this; + var entries = []; + var iteratorMethod, iterator, next, step, entryIterator, entryNext, first, second, key; + setInternalState$1(that, { + type: URL_SEARCH_PARAMS, + entries: entries, + updateURL: function () { + /* empty */ + }, + updateSearchParams: updateSearchParams + }); + + if (init !== undefined) { + if (isObject(init)) { + iteratorMethod = getIteratorMethod(init); + + if (iteratorMethod) { + iterator = getIterator(init, iteratorMethod); + next = iterator.next; + + while (!(step = next.call(iterator)).done) { + entryIterator = getIterator(anObject(step.value)); + entryNext = entryIterator.next; + if ((first = entryNext.call(entryIterator)).done || (second = entryNext.call(entryIterator)).done || !entryNext.call(entryIterator).done) throw TypeError('Expected sequence with length 2'); + entries.push({ + key: $toString$1(first.value), + value: $toString$1(second.value) + }); + } + } else for (key in init) if (hasOwn$1(init, key)) entries.push({ + key: key, + value: $toString$1(init[key]) + }); + } else { + parseSearchParams(entries, typeof init === 'string' ? init.charAt(0) === '?' ? init.slice(1) : init : $toString$1(init)); + } + } +}; + +var URLSearchParamsPrototype = URLSearchParamsConstructor.prototype; +redefineAll(URLSearchParamsPrototype, { + // `URLSearchParams.prototype.append` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-append + append: function append(name, value) { + validateArgumentsLength(arguments.length, 2); + var state = getInternalParamsState(this); + state.entries.push({ + key: $toString$1(name), + value: $toString$1(value) + }); + state.updateURL(); + }, + // `URLSearchParams.prototype.delete` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-delete + 'delete': function (name) { + validateArgumentsLength(arguments.length, 1); + var state = getInternalParamsState(this); + var entries = state.entries; + var key = $toString$1(name); + var index = 0; + + while (index < entries.length) { + if (entries[index].key === key) entries.splice(index, 1);else index++; + } + + state.updateURL(); + }, + // `URLSearchParams.prototype.get` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-get + get: function get(name) { + validateArgumentsLength(arguments.length, 1); + var entries = getInternalParamsState(this).entries; + var key = $toString$1(name); + var index = 0; + + for (; index < entries.length; index++) { + if (entries[index].key === key) return entries[index].value; + } + + return null; + }, + // `URLSearchParams.prototype.getAll` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-getall + getAll: function getAll(name) { + validateArgumentsLength(arguments.length, 1); + var entries = getInternalParamsState(this).entries; + var key = $toString$1(name); + var result = []; + var index = 0; + + for (; index < entries.length; index++) { + if (entries[index].key === key) result.push(entries[index].value); + } + + return result; + }, + // `URLSearchParams.prototype.has` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-has + has: function has(name) { + validateArgumentsLength(arguments.length, 1); + var entries = getInternalParamsState(this).entries; + var key = $toString$1(name); + var index = 0; + + while (index < entries.length) { + if (entries[index++].key === key) return true; + } + + return false; + }, + // `URLSearchParams.prototype.set` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-set + set: function set(name, value) { + validateArgumentsLength(arguments.length, 1); + var state = getInternalParamsState(this); + var entries = state.entries; + var found = false; + var key = $toString$1(name); + var val = $toString$1(value); + var index = 0; + var entry; + + for (; index < entries.length; index++) { + entry = entries[index]; + + if (entry.key === key) { + if (found) entries.splice(index--, 1);else { + found = true; + entry.value = val; + } + } + } + + if (!found) entries.push({ + key: key, + value: val + }); + state.updateURL(); + }, + // `URLSearchParams.prototype.sort` method + // https://url.spec.whatwg.org/#dom-urlsearchparams-sort + sort: function sort() { + var state = getInternalParamsState(this); + var entries = state.entries; // Array#sort is not stable in some engines + + var slice = entries.slice(); + var entry, entriesIndex, sliceIndex; + entries.length = 0; + + for (sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) { + entry = slice[sliceIndex]; + + for (entriesIndex = 0; entriesIndex < sliceIndex; entriesIndex++) { + if (entries[entriesIndex].key > entry.key) { + entries.splice(entriesIndex, 0, entry); + break; + } + } + + if (entriesIndex === sliceIndex) entries.push(entry); + } + + state.updateURL(); + }, + // `URLSearchParams.prototype.forEach` method + forEach: function forEach(callback + /* , thisArg */ + ) { + var entries = getInternalParamsState(this).entries; + var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined, 3); + var index = 0; + var entry; + + while (index < entries.length) { + entry = entries[index++]; + boundFunction(entry.value, entry.key, this); + } + }, + // `URLSearchParams.prototype.keys` method + keys: function keys() { + return new URLSearchParamsIterator(this, 'keys'); + }, + // `URLSearchParams.prototype.values` method + values: function values() { + return new URLSearchParamsIterator(this, 'values'); + }, + // `URLSearchParams.prototype.entries` method + entries: function entries() { + return new URLSearchParamsIterator(this, 'entries'); + } +}, { + enumerable: true +}); // `URLSearchParams.prototype[@@iterator]` method + +redefine$1(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries, { + name: 'entries' +}); // `URLSearchParams.prototype.toString` method +// https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior + +redefine$1(URLSearchParamsPrototype, 'toString', function toString() { + var entries = getInternalParamsState(this).entries; + var result = []; + var index = 0; + var entry; + + while (index < entries.length) { + entry = entries[index++]; + result.push(serialize(entry.key) + '=' + serialize(entry.value)); + } + + return result.join('&'); +}, { + enumerable: true +}); +setToStringTag$1(URLSearchParamsConstructor, URL_SEARCH_PARAMS); +$$2({ + global: true, + forced: !USE_NATIVE_URL$1 +}, { + URLSearchParams: URLSearchParamsConstructor +}); // Wrap `fetch` and `Request` for correct work with polyfilled `URLSearchParams` + +if (!USE_NATIVE_URL$1 && isCallable(Headers)) { + var wrapRequestOptions = function (init) { + if (isObject(init)) { + var body = init.body; + var headers; + + if (classof(body) === URL_SEARCH_PARAMS) { + headers = init.headers ? new Headers(init.headers) : new Headers(); + + if (!headers.has('content-type')) { + headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8'); + } + + return create(init, { + body: createPropertyDescriptor(0, String(body)), + headers: createPropertyDescriptor(0, headers) + }); + } + } + + return init; + }; + + if (isCallable(nativeFetch)) { + $$2({ + global: true, + enumerable: true, + forced: true + }, { + fetch: function fetch(input + /* , init */ + ) { + return nativeFetch(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {}); + } + }); + } + + if (isCallable(NativeRequest)) { + var RequestConstructor = function Request(input + /* , init */ + ) { + anInstance$1(this, RequestConstructor, 'Request'); + return new NativeRequest(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {}); + }; + + RequestPrototype.constructor = RequestConstructor; + RequestConstructor.prototype = RequestPrototype; + $$2({ + global: true, + forced: true + }, { + Request: RequestConstructor + }); + } +} + +var web_urlSearchParams = { + URLSearchParams: URLSearchParamsConstructor, + getState: getInternalParamsState +}; + +var $$1 = _export; + +var DESCRIPTORS = descriptors; + +var USE_NATIVE_URL = nativeUrl; + +var global$1 = global$R; + +var defineProperties = objectDefineProperties; + +var redefine = redefine$l.exports; + +var anInstance = anInstance$b; + +var hasOwn = hasOwnProperty_1; + +var assign$3 = objectAssign$1; + +var arrayFrom = arrayFrom$1; + +var codeAt = stringMultibyte.codeAt; + +var toASCII = stringPunycodeToAscii; + +var $toString = toString$t; + +var setToStringTag = setToStringTag$b; + +var URLSearchParamsModule = web_urlSearchParams; + +var InternalStateModule = internalState; + +var NativeURL = global$1.URL; +var URLSearchParams$1 = URLSearchParamsModule.URLSearchParams; +var getInternalSearchParamsState = URLSearchParamsModule.getState; +var setInternalState = InternalStateModule.set; +var getInternalURLState = InternalStateModule.getterFor('URL'); +var floor = Math.floor; +var pow = Math.pow; +var INVALID_AUTHORITY = 'Invalid authority'; +var INVALID_SCHEME = 'Invalid scheme'; +var INVALID_HOST = 'Invalid host'; +var INVALID_PORT = 'Invalid port'; +var ALPHA = /[a-z]/i; // eslint-disable-next-line regexp/no-obscure-range -- safe + +var ALPHANUMERIC = /[\d+-.a-z]/i; +var DIGIT = /\d/; +var HEX_START = /^0x/i; +var OCT = /^[0-7]+$/; +var DEC = /^\d+$/; +var HEX = /^[\da-f]+$/i; +/* eslint-disable regexp/no-control-character -- safe */ + +var FORBIDDEN_HOST_CODE_POINT = /[\0\t\n\r #%/:<>?@[\\\]^|]/; +var FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\0\t\n\r #/:<>?@[\\\]^|]/; +var LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\u0000-\u0020]+|[\u0000-\u0020]+$/g; +var TAB_AND_NEW_LINE = /[\t\n\r]/g; +/* eslint-enable regexp/no-control-character -- safe */ + +var EOF; + +var parseHost = function (url, input) { + var result, codePoints, index; + + if (input.charAt(0) == '[') { + if (input.charAt(input.length - 1) != ']') return INVALID_HOST; + result = parseIPv6(input.slice(1, -1)); + if (!result) return INVALID_HOST; + url.host = result; // opaque host + } else if (!isSpecial(url)) { + if (FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(input)) return INVALID_HOST; + result = ''; + codePoints = arrayFrom(input); + + for (index = 0; index < codePoints.length; index++) { + result += percentEncode(codePoints[index], C0ControlPercentEncodeSet); + } + + url.host = result; + } else { + input = toASCII(input); + if (FORBIDDEN_HOST_CODE_POINT.test(input)) return INVALID_HOST; + result = parseIPv4(input); + if (result === null) return INVALID_HOST; + url.host = result; + } +}; + +var parseIPv4 = function (input) { + var parts = input.split('.'); + var partsLength, numbers, index, part, radix, number, ipv4; + + if (parts.length && parts[parts.length - 1] == '') { + parts.pop(); + } + + partsLength = parts.length; + if (partsLength > 4) return input; + numbers = []; + + for (index = 0; index < partsLength; index++) { + part = parts[index]; + if (part == '') return input; + radix = 10; + + if (part.length > 1 && part.charAt(0) == '0') { + radix = HEX_START.test(part) ? 16 : 8; + part = part.slice(radix == 8 ? 1 : 2); + } + + if (part === '') { + number = 0; + } else { + if (!(radix == 10 ? DEC : radix == 8 ? OCT : HEX).test(part)) return input; + number = parseInt(part, radix); + } + + numbers.push(number); + } + + for (index = 0; index < partsLength; index++) { + number = numbers[index]; + + if (index == partsLength - 1) { + if (number >= pow(256, 5 - partsLength)) return null; + } else if (number > 255) return null; + } + + ipv4 = numbers.pop(); + + for (index = 0; index < numbers.length; index++) { + ipv4 += numbers[index] * pow(256, 3 - index); + } + + return ipv4; +}; // eslint-disable-next-line max-statements -- TODO + + +var parseIPv6 = function (input) { + var address = [0, 0, 0, 0, 0, 0, 0, 0]; + var pieceIndex = 0; + var compress = null; + var pointer = 0; + var value, length, numbersSeen, ipv4Piece, number, swaps, swap; + + var chr = function () { + return input.charAt(pointer); + }; + + if (chr() == ':') { + if (input.charAt(1) != ':') return; + pointer += 2; + pieceIndex++; + compress = pieceIndex; + } + + while (chr()) { + if (pieceIndex == 8) return; + + if (chr() == ':') { + if (compress !== null) return; + pointer++; + pieceIndex++; + compress = pieceIndex; + continue; + } + + value = length = 0; + + while (length < 4 && HEX.test(chr())) { + value = value * 16 + parseInt(chr(), 16); + pointer++; + length++; + } + + if (chr() == '.') { + if (length == 0) return; + pointer -= length; + if (pieceIndex > 6) return; + numbersSeen = 0; + + while (chr()) { + ipv4Piece = null; + + if (numbersSeen > 0) { + if (chr() == '.' && numbersSeen < 4) pointer++;else return; + } + + if (!DIGIT.test(chr())) return; + + while (DIGIT.test(chr())) { + number = parseInt(chr(), 10); + if (ipv4Piece === null) ipv4Piece = number;else if (ipv4Piece == 0) return;else ipv4Piece = ipv4Piece * 10 + number; + if (ipv4Piece > 255) return; + pointer++; + } + + address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece; + numbersSeen++; + if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++; + } + + if (numbersSeen != 4) return; + break; + } else if (chr() == ':') { + pointer++; + if (!chr()) return; + } else if (chr()) return; + + address[pieceIndex++] = value; + } + + if (compress !== null) { + swaps = pieceIndex - compress; + pieceIndex = 7; + + while (pieceIndex != 0 && swaps > 0) { + swap = address[pieceIndex]; + address[pieceIndex--] = address[compress + swaps - 1]; + address[compress + --swaps] = swap; + } + } else if (pieceIndex != 8) return; + + return address; +}; + +var findLongestZeroSequence = function (ipv6) { + var maxIndex = null; + var maxLength = 1; + var currStart = null; + var currLength = 0; + var index = 0; + + for (; index < 8; index++) { + if (ipv6[index] !== 0) { + if (currLength > maxLength) { + maxIndex = currStart; + maxLength = currLength; + } + + currStart = null; + currLength = 0; + } else { + if (currStart === null) currStart = index; + ++currLength; + } + } + + if (currLength > maxLength) { + maxIndex = currStart; + maxLength = currLength; + } + + return maxIndex; +}; + +var serializeHost = function (host) { + var result, index, compress, ignore0; // ipv4 + + if (typeof host == 'number') { + result = []; + + for (index = 0; index < 4; index++) { + result.unshift(host % 256); + host = floor(host / 256); + } + + return result.join('.'); // ipv6 + } else if (typeof host == 'object') { + result = ''; + compress = findLongestZeroSequence(host); + + for (index = 0; index < 8; index++) { + if (ignore0 && host[index] === 0) continue; + if (ignore0) ignore0 = false; + + if (compress === index) { + result += index ? ':' : '::'; + ignore0 = true; + } else { + result += host[index].toString(16); + if (index < 7) result += ':'; + } + } + + return '[' + result + ']'; + } + + return host; +}; + +var C0ControlPercentEncodeSet = {}; +var fragmentPercentEncodeSet = assign$3({}, C0ControlPercentEncodeSet, { + ' ': 1, + '"': 1, + '<': 1, + '>': 1, + '`': 1 +}); +var pathPercentEncodeSet = assign$3({}, fragmentPercentEncodeSet, { + '#': 1, + '?': 1, + '{': 1, + '}': 1 +}); +var userinfoPercentEncodeSet = assign$3({}, pathPercentEncodeSet, { + '/': 1, + ':': 1, + ';': 1, + '=': 1, + '@': 1, + '[': 1, + '\\': 1, + ']': 1, + '^': 1, + '|': 1 +}); + +var percentEncode = function (chr, set) { + var code = codeAt(chr, 0); + return code > 0x20 && code < 0x7F && !hasOwn(set, chr) ? chr : encodeURIComponent(chr); +}; + +var specialSchemes = { + ftp: 21, + file: null, + http: 80, + https: 443, + ws: 80, + wss: 443 +}; + +var isSpecial = function (url) { + return hasOwn(specialSchemes, url.scheme); +}; + +var includesCredentials = function (url) { + return url.username != '' || url.password != ''; +}; + +var cannotHaveUsernamePasswordPort = function (url) { + return !url.host || url.cannotBeABaseURL || url.scheme == 'file'; +}; + +var isWindowsDriveLetter = function (string, normalized) { + var second; + return string.length == 2 && ALPHA.test(string.charAt(0)) && ((second = string.charAt(1)) == ':' || !normalized && second == '|'); +}; + +var startsWithWindowsDriveLetter = function (string) { + var third; + return string.length > 1 && isWindowsDriveLetter(string.slice(0, 2)) && (string.length == 2 || (third = string.charAt(2)) === '/' || third === '\\' || third === '?' || third === '#'); +}; + +var shortenURLsPath = function (url) { + var path = url.path; + var pathSize = path.length; + + if (pathSize && (url.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) { + path.pop(); + } +}; + +var isSingleDot = function (segment) { + return segment === '.' || segment.toLowerCase() === '%2e'; +}; + +var isDoubleDot = function (segment) { + segment = segment.toLowerCase(); + return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e'; +}; // States: + + +var SCHEME_START = {}; +var SCHEME = {}; +var NO_SCHEME = {}; +var SPECIAL_RELATIVE_OR_AUTHORITY = {}; +var PATH_OR_AUTHORITY = {}; +var RELATIVE = {}; +var RELATIVE_SLASH = {}; +var SPECIAL_AUTHORITY_SLASHES = {}; +var SPECIAL_AUTHORITY_IGNORE_SLASHES = {}; +var AUTHORITY = {}; +var HOST = {}; +var HOSTNAME = {}; +var PORT = {}; +var FILE = {}; +var FILE_SLASH = {}; +var FILE_HOST = {}; +var PATH_START = {}; +var PATH = {}; +var CANNOT_BE_A_BASE_URL_PATH = {}; +var QUERY = {}; +var FRAGMENT = {}; // eslint-disable-next-line max-statements -- TODO + +var parseURL = function (url, input, stateOverride, base) { + var state = stateOverride || SCHEME_START; + var pointer = 0; + var buffer = ''; + var seenAt = false; + var seenBracket = false; + var seenPasswordToken = false; + var codePoints, chr, bufferCodePoints, failure; + + if (!stateOverride) { + url.scheme = ''; + url.username = ''; + url.password = ''; + url.host = null; + url.port = null; + url.path = []; + url.query = null; + url.fragment = null; + url.cannotBeABaseURL = false; + input = input.replace(LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, ''); + } + + input = input.replace(TAB_AND_NEW_LINE, ''); + codePoints = arrayFrom(input); + + while (pointer <= codePoints.length) { + chr = codePoints[pointer]; + + switch (state) { + case SCHEME_START: + if (chr && ALPHA.test(chr)) { + buffer += chr.toLowerCase(); + state = SCHEME; + } else if (!stateOverride) { + state = NO_SCHEME; + continue; + } else return INVALID_SCHEME; + + break; + + case SCHEME: + if (chr && (ALPHANUMERIC.test(chr) || chr == '+' || chr == '-' || chr == '.')) { + buffer += chr.toLowerCase(); + } else if (chr == ':') { + if (stateOverride && (isSpecial(url) != hasOwn(specialSchemes, buffer) || buffer == 'file' && (includesCredentials(url) || url.port !== null) || url.scheme == 'file' && !url.host)) return; + url.scheme = buffer; + + if (stateOverride) { + if (isSpecial(url) && specialSchemes[url.scheme] == url.port) url.port = null; + return; + } + + buffer = ''; + + if (url.scheme == 'file') { + state = FILE; + } else if (isSpecial(url) && base && base.scheme == url.scheme) { + state = SPECIAL_RELATIVE_OR_AUTHORITY; + } else if (isSpecial(url)) { + state = SPECIAL_AUTHORITY_SLASHES; + } else if (codePoints[pointer + 1] == '/') { + state = PATH_OR_AUTHORITY; + pointer++; + } else { + url.cannotBeABaseURL = true; + url.path.push(''); + state = CANNOT_BE_A_BASE_URL_PATH; + } + } else if (!stateOverride) { + buffer = ''; + state = NO_SCHEME; + pointer = 0; + continue; + } else return INVALID_SCHEME; + + break; + + case NO_SCHEME: + if (!base || base.cannotBeABaseURL && chr != '#') return INVALID_SCHEME; + + if (base.cannotBeABaseURL && chr == '#') { + url.scheme = base.scheme; + url.path = base.path.slice(); + url.query = base.query; + url.fragment = ''; + url.cannotBeABaseURL = true; + state = FRAGMENT; + break; + } + + state = base.scheme == 'file' ? FILE : RELATIVE; + continue; + + case SPECIAL_RELATIVE_OR_AUTHORITY: + if (chr == '/' && codePoints[pointer + 1] == '/') { + state = SPECIAL_AUTHORITY_IGNORE_SLASHES; + pointer++; + } else { + state = RELATIVE; + continue; + } + + break; + + case PATH_OR_AUTHORITY: + if (chr == '/') { + state = AUTHORITY; + break; + } else { + state = PATH; + continue; + } + + case RELATIVE: + url.scheme = base.scheme; + + if (chr == EOF) { + url.username = base.username; + url.password = base.password; + url.host = base.host; + url.port = base.port; + url.path = base.path.slice(); + url.query = base.query; + } else if (chr == '/' || chr == '\\' && isSpecial(url)) { + state = RELATIVE_SLASH; + } else if (chr == '?') { + url.username = base.username; + url.password = base.password; + url.host = base.host; + url.port = base.port; + url.path = base.path.slice(); + url.query = ''; + state = QUERY; + } else if (chr == '#') { + url.username = base.username; + url.password = base.password; + url.host = base.host; + url.port = base.port; + url.path = base.path.slice(); + url.query = base.query; + url.fragment = ''; + state = FRAGMENT; + } else { + url.username = base.username; + url.password = base.password; + url.host = base.host; + url.port = base.port; + url.path = base.path.slice(); + url.path.pop(); + state = PATH; + continue; + } + + break; + + case RELATIVE_SLASH: + if (isSpecial(url) && (chr == '/' || chr == '\\')) { + state = SPECIAL_AUTHORITY_IGNORE_SLASHES; + } else if (chr == '/') { + state = AUTHORITY; + } else { + url.username = base.username; + url.password = base.password; + url.host = base.host; + url.port = base.port; + state = PATH; + continue; + } + + break; + + case SPECIAL_AUTHORITY_SLASHES: + state = SPECIAL_AUTHORITY_IGNORE_SLASHES; + if (chr != '/' || buffer.charAt(pointer + 1) != '/') continue; + pointer++; + break; + + case SPECIAL_AUTHORITY_IGNORE_SLASHES: + if (chr != '/' && chr != '\\') { + state = AUTHORITY; + continue; + } + + break; + + case AUTHORITY: + if (chr == '@') { + if (seenAt) buffer = '%40' + buffer; + seenAt = true; + bufferCodePoints = arrayFrom(buffer); + + for (var i = 0; i < bufferCodePoints.length; i++) { + var codePoint = bufferCodePoints[i]; + + if (codePoint == ':' && !seenPasswordToken) { + seenPasswordToken = true; + continue; + } + + var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet); + if (seenPasswordToken) url.password += encodedCodePoints;else url.username += encodedCodePoints; + } + + buffer = ''; + } else if (chr == EOF || chr == '/' || chr == '?' || chr == '#' || chr == '\\' && isSpecial(url)) { + if (seenAt && buffer == '') return INVALID_AUTHORITY; + pointer -= arrayFrom(buffer).length + 1; + buffer = ''; + state = HOST; + } else buffer += chr; + + break; + + case HOST: + case HOSTNAME: + if (stateOverride && url.scheme == 'file') { + state = FILE_HOST; + continue; + } else if (chr == ':' && !seenBracket) { + if (buffer == '') return INVALID_HOST; + failure = parseHost(url, buffer); + if (failure) return failure; + buffer = ''; + state = PORT; + if (stateOverride == HOSTNAME) return; + } else if (chr == EOF || chr == '/' || chr == '?' || chr == '#' || chr == '\\' && isSpecial(url)) { + if (isSpecial(url) && buffer == '') return INVALID_HOST; + if (stateOverride && buffer == '' && (includesCredentials(url) || url.port !== null)) return; + failure = parseHost(url, buffer); + if (failure) return failure; + buffer = ''; + state = PATH_START; + if (stateOverride) return; + continue; + } else { + if (chr == '[') seenBracket = true;else if (chr == ']') seenBracket = false; + buffer += chr; + } + + break; + + case PORT: + if (DIGIT.test(chr)) { + buffer += chr; + } else if (chr == EOF || chr == '/' || chr == '?' || chr == '#' || chr == '\\' && isSpecial(url) || stateOverride) { + if (buffer != '') { + var port = parseInt(buffer, 10); + if (port > 0xFFFF) return INVALID_PORT; + url.port = isSpecial(url) && port === specialSchemes[url.scheme] ? null : port; + buffer = ''; + } + + if (stateOverride) return; + state = PATH_START; + continue; + } else return INVALID_PORT; + + break; + + case FILE: + url.scheme = 'file'; + if (chr == '/' || chr == '\\') state = FILE_SLASH;else if (base && base.scheme == 'file') { + if (chr == EOF) { + url.host = base.host; + url.path = base.path.slice(); + url.query = base.query; + } else if (chr == '?') { + url.host = base.host; + url.path = base.path.slice(); + url.query = ''; + state = QUERY; + } else if (chr == '#') { + url.host = base.host; + url.path = base.path.slice(); + url.query = base.query; + url.fragment = ''; + state = FRAGMENT; + } else { + if (!startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) { + url.host = base.host; + url.path = base.path.slice(); + shortenURLsPath(url); + } + + state = PATH; + continue; + } + } else { + state = PATH; + continue; + } + break; + + case FILE_SLASH: + if (chr == '/' || chr == '\\') { + state = FILE_HOST; + break; + } + + if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) { + if (isWindowsDriveLetter(base.path[0], true)) url.path.push(base.path[0]);else url.host = base.host; + } + + state = PATH; + continue; + + case FILE_HOST: + if (chr == EOF || chr == '/' || chr == '\\' || chr == '?' || chr == '#') { + if (!stateOverride && isWindowsDriveLetter(buffer)) { + state = PATH; + } else if (buffer == '') { + url.host = ''; + if (stateOverride) return; + state = PATH_START; + } else { + failure = parseHost(url, buffer); + if (failure) return failure; + if (url.host == 'localhost') url.host = ''; + if (stateOverride) return; + buffer = ''; + state = PATH_START; + } + + continue; + } else buffer += chr; + + break; + + case PATH_START: + if (isSpecial(url)) { + state = PATH; + if (chr != '/' && chr != '\\') continue; + } else if (!stateOverride && chr == '?') { + url.query = ''; + state = QUERY; + } else if (!stateOverride && chr == '#') { + url.fragment = ''; + state = FRAGMENT; + } else if (chr != EOF) { + state = PATH; + if (chr != '/') continue; + } + + break; + + case PATH: + if (chr == EOF || chr == '/' || chr == '\\' && isSpecial(url) || !stateOverride && (chr == '?' || chr == '#')) { + if (isDoubleDot(buffer)) { + shortenURLsPath(url); + + if (chr != '/' && !(chr == '\\' && isSpecial(url))) { + url.path.push(''); + } + } else if (isSingleDot(buffer)) { + if (chr != '/' && !(chr == '\\' && isSpecial(url))) { + url.path.push(''); + } + } else { + if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) { + if (url.host) url.host = ''; + buffer = buffer.charAt(0) + ':'; // normalize windows drive letter + } + + url.path.push(buffer); + } + + buffer = ''; + + if (url.scheme == 'file' && (chr == EOF || chr == '?' || chr == '#')) { + while (url.path.length > 1 && url.path[0] === '') { + url.path.shift(); + } + } + + if (chr == '?') { + url.query = ''; + state = QUERY; + } else if (chr == '#') { + url.fragment = ''; + state = FRAGMENT; + } + } else { + buffer += percentEncode(chr, pathPercentEncodeSet); + } + + break; + + case CANNOT_BE_A_BASE_URL_PATH: + if (chr == '?') { + url.query = ''; + state = QUERY; + } else if (chr == '#') { + url.fragment = ''; + state = FRAGMENT; + } else if (chr != EOF) { + url.path[0] += percentEncode(chr, C0ControlPercentEncodeSet); + } + + break; + + case QUERY: + if (!stateOverride && chr == '#') { + url.fragment = ''; + state = FRAGMENT; + } else if (chr != EOF) { + if (chr == "'" && isSpecial(url)) url.query += '%27';else if (chr == '#') url.query += '%23';else url.query += percentEncode(chr, C0ControlPercentEncodeSet); + } + + break; + + case FRAGMENT: + if (chr != EOF) url.fragment += percentEncode(chr, fragmentPercentEncodeSet); + break; + } + + pointer++; + } +}; // `URL` constructor +// https://url.spec.whatwg.org/#url-class + + +var URLConstructor = function URL(url +/* , base */ +) { + var that = anInstance(this, URLConstructor, 'URL'); + var base = arguments.length > 1 ? arguments[1] : undefined; + var urlString = $toString(url); + var state = setInternalState(that, { + type: 'URL' + }); + var baseState, failure; + + if (base !== undefined) { + if (base instanceof URLConstructor) baseState = getInternalURLState(base);else { + failure = parseURL(baseState = {}, $toString(base)); + if (failure) throw TypeError(failure); + } + } + + failure = parseURL(state, urlString, null, baseState); + if (failure) throw TypeError(failure); + var searchParams = state.searchParams = new URLSearchParams$1(); + var searchParamsState = getInternalSearchParamsState(searchParams); + searchParamsState.updateSearchParams(state.query); + + searchParamsState.updateURL = function () { + state.query = String(searchParams) || null; + }; + + if (!DESCRIPTORS) { + that.href = serializeURL.call(that); + that.origin = getOrigin.call(that); + that.protocol = getProtocol.call(that); + that.username = getUsername.call(that); + that.password = getPassword.call(that); + that.host = getHost.call(that); + that.hostname = getHostname.call(that); + that.port = getPort.call(that); + that.pathname = getPathname.call(that); + that.search = getSearch.call(that); + that.searchParams = getSearchParams.call(that); + that.hash = getHash.call(that); + } +}; + +var URLPrototype = URLConstructor.prototype; + +var serializeURL = function () { + var url = getInternalURLState(this); + var scheme = url.scheme; + var username = url.username; + var password = url.password; + var host = url.host; + var port = url.port; + var path = url.path; + var query = url.query; + var fragment = url.fragment; + var output = scheme + ':'; + + if (host !== null) { + output += '//'; + + if (includesCredentials(url)) { + output += username + (password ? ':' + password : '') + '@'; + } + + output += serializeHost(host); + if (port !== null) output += ':' + port; + } else if (scheme == 'file') output += '//'; + + output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : ''; + if (query !== null) output += '?' + query; + if (fragment !== null) output += '#' + fragment; + return output; +}; + +var getOrigin = function () { + var url = getInternalURLState(this); + var scheme = url.scheme; + var port = url.port; + if (scheme == 'blob') try { + return new URLConstructor(scheme.path[0]).origin; + } catch (error) { + return 'null'; + } + if (scheme == 'file' || !isSpecial(url)) return 'null'; + return scheme + '://' + serializeHost(url.host) + (port !== null ? ':' + port : ''); +}; + +var getProtocol = function () { + return getInternalURLState(this).scheme + ':'; +}; + +var getUsername = function () { + return getInternalURLState(this).username; +}; + +var getPassword = function () { + return getInternalURLState(this).password; +}; + +var getHost = function () { + var url = getInternalURLState(this); + var host = url.host; + var port = url.port; + return host === null ? '' : port === null ? serializeHost(host) : serializeHost(host) + ':' + port; +}; + +var getHostname = function () { + var host = getInternalURLState(this).host; + return host === null ? '' : serializeHost(host); +}; + +var getPort = function () { + var port = getInternalURLState(this).port; + return port === null ? '' : String(port); +}; + +var getPathname = function () { + var url = getInternalURLState(this); + var path = url.path; + return url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : ''; +}; + +var getSearch = function () { + var query = getInternalURLState(this).query; + return query ? '?' + query : ''; +}; + +var getSearchParams = function () { + return getInternalURLState(this).searchParams; +}; + +var getHash = function () { + var fragment = getInternalURLState(this).fragment; + return fragment ? '#' + fragment : ''; +}; + +var accessorDescriptor = function (getter, setter) { + return { + get: getter, + set: setter, + configurable: true, + enumerable: true + }; +}; + +if (DESCRIPTORS) { + defineProperties(URLPrototype, { + // `URL.prototype.href` accessors pair + // https://url.spec.whatwg.org/#dom-url-href + href: accessorDescriptor(serializeURL, function (href) { + var url = getInternalURLState(this); + var urlString = $toString(href); + var failure = parseURL(url, urlString); + if (failure) throw TypeError(failure); + getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query); + }), + // `URL.prototype.origin` getter + // https://url.spec.whatwg.org/#dom-url-origin + origin: accessorDescriptor(getOrigin), + // `URL.prototype.protocol` accessors pair + // https://url.spec.whatwg.org/#dom-url-protocol + protocol: accessorDescriptor(getProtocol, function (protocol) { + var url = getInternalURLState(this); + parseURL(url, $toString(protocol) + ':', SCHEME_START); + }), + // `URL.prototype.username` accessors pair + // https://url.spec.whatwg.org/#dom-url-username + username: accessorDescriptor(getUsername, function (username) { + var url = getInternalURLState(this); + var codePoints = arrayFrom($toString(username)); + if (cannotHaveUsernamePasswordPort(url)) return; + url.username = ''; + + for (var i = 0; i < codePoints.length; i++) { + url.username += percentEncode(codePoints[i], userinfoPercentEncodeSet); + } + }), + // `URL.prototype.password` accessors pair + // https://url.spec.whatwg.org/#dom-url-password + password: accessorDescriptor(getPassword, function (password) { + var url = getInternalURLState(this); + var codePoints = arrayFrom($toString(password)); + if (cannotHaveUsernamePasswordPort(url)) return; + url.password = ''; + + for (var i = 0; i < codePoints.length; i++) { + url.password += percentEncode(codePoints[i], userinfoPercentEncodeSet); + } + }), + // `URL.prototype.host` accessors pair + // https://url.spec.whatwg.org/#dom-url-host + host: accessorDescriptor(getHost, function (host) { + var url = getInternalURLState(this); + if (url.cannotBeABaseURL) return; + parseURL(url, $toString(host), HOST); + }), + // `URL.prototype.hostname` accessors pair + // https://url.spec.whatwg.org/#dom-url-hostname + hostname: accessorDescriptor(getHostname, function (hostname) { + var url = getInternalURLState(this); + if (url.cannotBeABaseURL) return; + parseURL(url, $toString(hostname), HOSTNAME); + }), + // `URL.prototype.port` accessors pair + // https://url.spec.whatwg.org/#dom-url-port + port: accessorDescriptor(getPort, function (port) { + var url = getInternalURLState(this); + if (cannotHaveUsernamePasswordPort(url)) return; + port = $toString(port); + if (port == '') url.port = null;else parseURL(url, port, PORT); + }), + // `URL.prototype.pathname` accessors pair + // https://url.spec.whatwg.org/#dom-url-pathname + pathname: accessorDescriptor(getPathname, function (pathname) { + var url = getInternalURLState(this); + if (url.cannotBeABaseURL) return; + url.path = []; + parseURL(url, $toString(pathname), PATH_START); + }), + // `URL.prototype.search` accessors pair + // https://url.spec.whatwg.org/#dom-url-search + search: accessorDescriptor(getSearch, function (search) { + var url = getInternalURLState(this); + search = $toString(search); + + if (search == '') { + url.query = null; + } else { + if ('?' == search.charAt(0)) search = search.slice(1); + url.query = ''; + parseURL(url, search, QUERY); + } + + getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query); + }), + // `URL.prototype.searchParams` getter + // https://url.spec.whatwg.org/#dom-url-searchparams + searchParams: accessorDescriptor(getSearchParams), + // `URL.prototype.hash` accessors pair + // https://url.spec.whatwg.org/#dom-url-hash + hash: accessorDescriptor(getHash, function (hash) { + var url = getInternalURLState(this); + hash = $toString(hash); + + if (hash == '') { + url.fragment = null; + return; + } + + if ('#' == hash.charAt(0)) hash = hash.slice(1); + url.fragment = ''; + parseURL(url, hash, FRAGMENT); + }) + }); +} // `URL.prototype.toJSON` method +// https://url.spec.whatwg.org/#dom-url-tojson + + +redefine(URLPrototype, 'toJSON', function toJSON() { + return serializeURL.call(this); +}, { + enumerable: true +}); // `URL.prototype.toString` method +// https://url.spec.whatwg.org/#URL-stringification-behavior + +redefine(URLPrototype, 'toString', function toString() { + return serializeURL.call(this); +}, { + enumerable: true +}); + +if (NativeURL) { + var nativeCreateObjectURL = NativeURL.createObjectURL; + var nativeRevokeObjectURL = NativeURL.revokeObjectURL; // `URL.createObjectURL` method + // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL + // eslint-disable-next-line no-unused-vars -- required for `.length` + + if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', function createObjectURL(blob) { + return nativeCreateObjectURL.apply(NativeURL, arguments); + }); // `URL.revokeObjectURL` method + // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL + // eslint-disable-next-line no-unused-vars -- required for `.length` + + if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', function revokeObjectURL(url) { + return nativeRevokeObjectURL.apply(NativeURL, arguments); + }); +} + +setToStringTag(URLConstructor, 'URL'); +$$1({ + global: true, + forced: !USE_NATIVE_URL, + sham: !DESCRIPTORS +}, { + URL: URLConstructor +}); + +var $ = _export; // `URL.prototype.toJSON` method +// https://url.spec.whatwg.org/#dom-url-tojson + + +$({ + target: 'URL', + proto: true, + enumerable: true +}, { + toJSON: function toJSON() { + return URL.prototype.toString.call(this); + } +}); + +var propTypes = {exports: {}}; + +var reactIs$1 = {exports: {}}; + +var reactIs_development = {}; + +/** @license React v16.13.1 + * react-is.development.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +{ + (function () { + // nor polyfill, then a plain number is used for performance. + + var hasSymbol = typeof Symbol === 'function' && Symbol.for; + var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7; + var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca; + var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb; + var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc; + var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2; + var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd; + var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary + // (unstable) APIs that have been removed. Can we remove the symbols? + + var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf; + var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf; + var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0; + var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1; + var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8; + var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3; + var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4; + var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9; + var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5; + var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6; + var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7; + + function isValidElementType(type) { + return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill. + type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE); + } + + function typeOf(object) { + if (typeof object === 'object' && object !== null) { + var $$typeof = object.$$typeof; + + switch ($$typeof) { + case REACT_ELEMENT_TYPE: + var type = object.type; + + switch (type) { + case REACT_ASYNC_MODE_TYPE: + case REACT_CONCURRENT_MODE_TYPE: + case REACT_FRAGMENT_TYPE: + case REACT_PROFILER_TYPE: + case REACT_STRICT_MODE_TYPE: + case REACT_SUSPENSE_TYPE: + return type; + + default: + var $$typeofType = type && type.$$typeof; + + switch ($$typeofType) { + case REACT_CONTEXT_TYPE: + case REACT_FORWARD_REF_TYPE: + case REACT_LAZY_TYPE: + case REACT_MEMO_TYPE: + case REACT_PROVIDER_TYPE: + return $$typeofType; + + default: + return $$typeof; + } + + } + + case REACT_PORTAL_TYPE: + return $$typeof; + } + } + + return undefined; + } // AsyncMode is deprecated along with isAsyncMode + + + var AsyncMode = REACT_ASYNC_MODE_TYPE; + var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE; + var ContextConsumer = REACT_CONTEXT_TYPE; + var ContextProvider = REACT_PROVIDER_TYPE; + var Element = REACT_ELEMENT_TYPE; + var ForwardRef = REACT_FORWARD_REF_TYPE; + var Fragment = REACT_FRAGMENT_TYPE; + var Lazy = REACT_LAZY_TYPE; + var Memo = REACT_MEMO_TYPE; + var Portal = REACT_PORTAL_TYPE; + var Profiler = REACT_PROFILER_TYPE; + var StrictMode = REACT_STRICT_MODE_TYPE; + var Suspense = REACT_SUSPENSE_TYPE; + var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated + + function isAsyncMode(object) { + { + if (!hasWarnedAboutDeprecatedIsAsyncMode) { + hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint + + console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.'); + } + } + return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE; + } + + function isConcurrentMode(object) { + return typeOf(object) === REACT_CONCURRENT_MODE_TYPE; + } + + function isContextConsumer(object) { + return typeOf(object) === REACT_CONTEXT_TYPE; + } + + function isContextProvider(object) { + return typeOf(object) === REACT_PROVIDER_TYPE; + } + + function isElement(object) { + return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; + } + + function isForwardRef(object) { + return typeOf(object) === REACT_FORWARD_REF_TYPE; + } + + function isFragment(object) { + return typeOf(object) === REACT_FRAGMENT_TYPE; + } + + function isLazy(object) { + return typeOf(object) === REACT_LAZY_TYPE; + } + + function isMemo(object) { + return typeOf(object) === REACT_MEMO_TYPE; + } + + function isPortal(object) { + return typeOf(object) === REACT_PORTAL_TYPE; + } + + function isProfiler(object) { + return typeOf(object) === REACT_PROFILER_TYPE; + } + + function isStrictMode(object) { + return typeOf(object) === REACT_STRICT_MODE_TYPE; + } + + function isSuspense(object) { + return typeOf(object) === REACT_SUSPENSE_TYPE; + } + + reactIs_development.AsyncMode = AsyncMode; + reactIs_development.ConcurrentMode = ConcurrentMode; + reactIs_development.ContextConsumer = ContextConsumer; + reactIs_development.ContextProvider = ContextProvider; + reactIs_development.Element = Element; + reactIs_development.ForwardRef = ForwardRef; + reactIs_development.Fragment = Fragment; + reactIs_development.Lazy = Lazy; + reactIs_development.Memo = Memo; + reactIs_development.Portal = Portal; + reactIs_development.Profiler = Profiler; + reactIs_development.StrictMode = StrictMode; + reactIs_development.Suspense = Suspense; + reactIs_development.isAsyncMode = isAsyncMode; + reactIs_development.isConcurrentMode = isConcurrentMode; + reactIs_development.isContextConsumer = isContextConsumer; + reactIs_development.isContextProvider = isContextProvider; + reactIs_development.isElement = isElement; + reactIs_development.isForwardRef = isForwardRef; + reactIs_development.isFragment = isFragment; + reactIs_development.isLazy = isLazy; + reactIs_development.isMemo = isMemo; + reactIs_development.isPortal = isPortal; + reactIs_development.isProfiler = isProfiler; + reactIs_development.isStrictMode = isStrictMode; + reactIs_development.isSuspense = isSuspense; + reactIs_development.isValidElementType = isValidElementType; + reactIs_development.typeOf = typeOf; + })(); +} + +{ + reactIs$1.exports = reactIs_development; +} + +/* +object-assign +(c) Sindre Sorhus +@license MIT +*/ +/* eslint-disable no-unused-vars */ + +var getOwnPropertySymbols$1 = Object.getOwnPropertySymbols; +var hasOwnProperty = Object.prototype.hasOwnProperty; +var propIsEnumerable = Object.prototype.propertyIsEnumerable; + +function toObject(val) { + if (val === null || val === undefined) { + throw new TypeError('Object.assign cannot be called with null or undefined'); + } + + return Object(val); +} + +function shouldUseNative() { + try { + if (!Object.assign) { + return false; + } // Detect buggy property enumeration order in older V8 versions. + // https://bugs.chromium.org/p/v8/issues/detail?id=4118 + + + var test1 = new String('abc'); // eslint-disable-line no-new-wrappers + + test1[5] = 'de'; + + if (Object.getOwnPropertyNames(test1)[0] === '5') { + return false; + } // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + + + var test2 = {}; + + for (var i = 0; i < 10; i++) { + test2['_' + String.fromCharCode(i)] = i; + } + + var order2 = Object.getOwnPropertyNames(test2).map(function (n) { + return test2[n]; + }); + + if (order2.join('') !== '0123456789') { + return false; + } // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + + + var test3 = {}; + 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { + test3[letter] = letter; + }); + + if (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') { + return false; + } + + return true; + } catch (err) { + // We don't expect any of the above to throw, but better to be safe. + return false; + } +} + +var objectAssign = shouldUseNative() ? Object.assign : function (target, source) { + var from; + var to = toObject(target); + var symbols; + + for (var s = 1; s < arguments.length; s++) { + from = Object(arguments[s]); + + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + + if (getOwnPropertySymbols$1) { + symbols = getOwnPropertySymbols$1(from); + + for (var i = 0; i < symbols.length; i++) { + if (propIsEnumerable.call(from, symbols[i])) { + to[symbols[i]] = from[symbols[i]]; + } + } + } + } + + return to; +}; + +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +var ReactPropTypesSecret$2 = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; +var ReactPropTypesSecret_1 = ReactPropTypesSecret$2; + +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +var printWarning$2 = function () {}; + +{ + var ReactPropTypesSecret$1 = ReactPropTypesSecret_1; + + var loggedTypeFailures = {}; + var has$1 = Function.call.bind(Object.prototype.hasOwnProperty); + + printWarning$2 = function (text) { + var message = 'Warning: ' + text; + + if (typeof console !== 'undefined') { + console.error(message); + } + + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + }; +} +/** + * Assert that the values match with the type specs. + * Error messages are memorized and will only be shown once. + * + * @param {object} typeSpecs Map of name to a ReactPropType + * @param {object} values Runtime values that need to be type-checked + * @param {string} location e.g. "prop", "context", "child context" + * @param {string} componentName Name of the component for error messages. + * @param {?Function} getStack Returns the component stack. + * @private + */ + + +function checkPropTypes$1(typeSpecs, values, location, componentName, getStack) { + { + for (var typeSpecName in typeSpecs) { + if (has$1(typeSpecs, typeSpecName)) { + var error; // Prop type validation may throw. In case they do, we don't want to + // fail the render phase where it didn't fail before. So we log it. + // After these have been cleaned up, we'll let them throw. + + try { + // This is intentionally an invariant that gets caught. It's the same + // behavior as without this statement except with a better message. + if (typeof typeSpecs[typeSpecName] !== 'function') { + var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.'); + err.name = 'Invariant Violation'; + throw err; + } + + error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret$1); + } catch (ex) { + error = ex; + } + + if (error && !(error instanceof Error)) { + printWarning$2((componentName || 'React class') + ': type specification of ' + location + ' `' + typeSpecName + '` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).'); + } + + if (error instanceof Error && !(error.message in loggedTypeFailures)) { + // Only monitor this failure once because there tends to be a lot of the + // same error. + loggedTypeFailures[error.message] = true; + var stack = getStack ? getStack() : ''; + printWarning$2('Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')); + } + } + } + } +} +/** + * Resets warning cache when testing. + * + * @private + */ + + +checkPropTypes$1.resetWarningCache = function () { + { + loggedTypeFailures = {}; + } +}; + +var checkPropTypes_1 = checkPropTypes$1; + +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +var ReactIs$1 = reactIs$1.exports; + +var assign$2 = objectAssign; + +var ReactPropTypesSecret = ReactPropTypesSecret_1; + +var checkPropTypes = checkPropTypes_1; + +var has = Function.call.bind(Object.prototype.hasOwnProperty); + +var printWarning$1 = function () {}; + +{ + printWarning$1 = function (text) { + var message = 'Warning: ' + text; + + if (typeof console !== 'undefined') { + console.error(message); + } + + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + }; +} + +function emptyFunctionThatReturnsNull() { + return null; +} + +var factoryWithTypeCheckers = function (isValidElement, throwOnDirectAccess) { + /* global Symbol */ + var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; + var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec. + + /** + * Returns the iterator method function contained on the iterable object. + * + * Be sure to invoke the function with the iterable as context: + * + * var iteratorFn = getIteratorFn(myIterable); + * if (iteratorFn) { + * var iterator = iteratorFn.call(myIterable); + * ... + * } + * + * @param {?object} maybeIterable + * @return {?function} + */ + + function getIteratorFn(maybeIterable) { + var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]); + + if (typeof iteratorFn === 'function') { + return iteratorFn; + } + } + /** + * Collection of methods that allow declaration and validation of props that are + * supplied to React components. Example usage: + * + * var Props = require('ReactPropTypes'); + * var MyArticle = React.createClass({ + * propTypes: { + * // An optional string prop named "description". + * description: Props.string, + * + * // A required enum prop named "category". + * category: Props.oneOf(['News','Photos']).isRequired, + * + * // A prop named "dialog" that requires an instance of Dialog. + * dialog: Props.instanceOf(Dialog).isRequired + * }, + * render: function() { ... } + * }); + * + * A more formal specification of how these methods are used: + * + * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...) + * decl := ReactPropTypes.{type}(.isRequired)? + * + * Each and every declaration produces a function with the same signature. This + * allows the creation of custom validation functions. For example: + * + * var MyLink = React.createClass({ + * propTypes: { + * // An optional string or URI prop named "href". + * href: function(props, propName, componentName) { + * var propValue = props[propName]; + * if (propValue != null && typeof propValue !== 'string' && + * !(propValue instanceof URI)) { + * return new Error( + * 'Expected a string or an URI for ' + propName + ' in ' + + * componentName + * ); + * } + * } + * }, + * render: function() {...} + * }); + * + * @internal + */ + + + var ANONYMOUS = '<>'; // Important! + // Keep this list in sync with production version in `./factoryWithThrowingShims.js`. + + var ReactPropTypes = { + array: createPrimitiveTypeChecker('array'), + bool: createPrimitiveTypeChecker('boolean'), + func: createPrimitiveTypeChecker('function'), + number: createPrimitiveTypeChecker('number'), + object: createPrimitiveTypeChecker('object'), + string: createPrimitiveTypeChecker('string'), + symbol: createPrimitiveTypeChecker('symbol'), + any: createAnyTypeChecker(), + arrayOf: createArrayOfTypeChecker, + element: createElementTypeChecker(), + elementType: createElementTypeTypeChecker(), + instanceOf: createInstanceTypeChecker, + node: createNodeChecker(), + objectOf: createObjectOfTypeChecker, + oneOf: createEnumTypeChecker, + oneOfType: createUnionTypeChecker, + shape: createShapeTypeChecker, + exact: createStrictShapeTypeChecker + }; + /** + * inlined Object.is polyfill to avoid requiring consumers ship their own + * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is + */ + + /*eslint-disable no-self-compare*/ + + function is(x, y) { + // SameValue algorithm + if (x === y) { + // Steps 1-5, 7-10 + // Steps 6.b-6.e: +0 != -0 + return x !== 0 || 1 / x === 1 / y; + } else { + // Step 6.a: NaN == NaN + return x !== x && y !== y; + } + } + /*eslint-enable no-self-compare*/ + + /** + * We use an Error-like object for backward compatibility as people may call + * PropTypes directly and inspect their output. However, we don't use real + * Errors anymore. We don't inspect their stack anyway, and creating them + * is prohibitively expensive if they are created too often, such as what + * happens in oneOfType() for any type before the one that matched. + */ + + + function PropTypeError(message) { + this.message = message; + this.stack = ''; + } // Make `instanceof Error` still work for returned errors. + + + PropTypeError.prototype = Error.prototype; + + function createChainableTypeChecker(validate) { + { + var manualPropTypeCallCache = {}; + var manualPropTypeWarningCount = 0; + } + + function checkType(isRequired, props, propName, componentName, location, propFullName, secret) { + componentName = componentName || ANONYMOUS; + propFullName = propFullName || propName; + + if (secret !== ReactPropTypesSecret) { + if (throwOnDirectAccess) { + // New behavior only for users of `prop-types` package + var err = new Error('Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use `PropTypes.checkPropTypes()` to call them. ' + 'Read more at http://fb.me/use-check-prop-types'); + err.name = 'Invariant Violation'; + throw err; + } else if (typeof console !== 'undefined') { + // Old behavior for people using React.PropTypes + var cacheKey = componentName + ':' + propName; + + if (!manualPropTypeCallCache[cacheKey] && // Avoid spamming the console because they are often not actionable except for lib authors + manualPropTypeWarningCount < 3) { + printWarning$1('You are manually calling a React.PropTypes validation ' + 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' + 'and will throw in the standalone `prop-types` package. ' + 'You may be seeing this warning due to a third-party PropTypes ' + 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'); + manualPropTypeCallCache[cacheKey] = true; + manualPropTypeWarningCount++; + } + } + } + + if (props[propName] == null) { + if (isRequired) { + if (props[propName] === null) { + return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.')); + } + + return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.')); + } + + return null; + } else { + return validate(props, propName, componentName, location, propFullName); + } + } + + var chainedCheckType = checkType.bind(null, false); + chainedCheckType.isRequired = checkType.bind(null, true); + return chainedCheckType; + } + + function createPrimitiveTypeChecker(expectedType) { + function validate(props, propName, componentName, location, propFullName, secret) { + var propValue = props[propName]; + var propType = getPropType(propValue); + + if (propType !== expectedType) { + // `propValue` being instance of, say, date/regexp, pass the 'object' + // check, but we can offer a more precise error message here rather than + // 'of type `object`'. + var preciseType = getPreciseType(propValue); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.')); + } + + return null; + } + + return createChainableTypeChecker(validate); + } + + function createAnyTypeChecker() { + return createChainableTypeChecker(emptyFunctionThatReturnsNull); + } + + function createArrayOfTypeChecker(typeChecker) { + function validate(props, propName, componentName, location, propFullName) { + if (typeof typeChecker !== 'function') { + return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.'); + } + + var propValue = props[propName]; + + if (!Array.isArray(propValue)) { + var propType = getPropType(propValue); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.')); + } + + for (var i = 0; i < propValue.length; i++) { + var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret); + + if (error instanceof Error) { + return error; + } + } + + return null; + } + + return createChainableTypeChecker(validate); + } + + function createElementTypeChecker() { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + + if (!isValidElement(propValue)) { + var propType = getPropType(propValue); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.')); + } + + return null; + } + + return createChainableTypeChecker(validate); + } + + function createElementTypeTypeChecker() { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + + if (!ReactIs$1.isValidElementType(propValue)) { + var propType = getPropType(propValue); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.')); + } + + return null; + } + + return createChainableTypeChecker(validate); + } + + function createInstanceTypeChecker(expectedClass) { + function validate(props, propName, componentName, location, propFullName) { + if (!(props[propName] instanceof expectedClass)) { + var expectedClassName = expectedClass.name || ANONYMOUS; + var actualClassName = getClassName(props[propName]); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.')); + } + + return null; + } + + return createChainableTypeChecker(validate); + } + + function createEnumTypeChecker(expectedValues) { + if (!Array.isArray(expectedValues)) { + { + if (arguments.length > 1) { + printWarning$1('Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' + 'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'); + } else { + printWarning$1('Invalid argument supplied to oneOf, expected an array.'); + } + } + + return emptyFunctionThatReturnsNull; + } + + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + + for (var i = 0; i < expectedValues.length; i++) { + if (is(propValue, expectedValues[i])) { + return null; + } + } + + var valuesString = JSON.stringify(expectedValues, function replacer(key, value) { + var type = getPreciseType(value); + + if (type === 'symbol') { + return String(value); + } + + return value; + }); + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.')); + } + + return createChainableTypeChecker(validate); + } + + function createObjectOfTypeChecker(typeChecker) { + function validate(props, propName, componentName, location, propFullName) { + if (typeof typeChecker !== 'function') { + return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.'); + } + + var propValue = props[propName]; + var propType = getPropType(propValue); + + if (propType !== 'object') { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.')); + } + + for (var key in propValue) { + if (has(propValue, key)) { + var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); + + if (error instanceof Error) { + return error; + } + } + } + + return null; + } + + return createChainableTypeChecker(validate); + } + + function createUnionTypeChecker(arrayOfTypeCheckers) { + if (!Array.isArray(arrayOfTypeCheckers)) { + printWarning$1('Invalid argument supplied to oneOfType, expected an instance of array.') ; + return emptyFunctionThatReturnsNull; + } + + for (var i = 0; i < arrayOfTypeCheckers.length; i++) { + var checker = arrayOfTypeCheckers[i]; + + if (typeof checker !== 'function') { + printWarning$1('Invalid argument supplied to oneOfType. Expected an array of check functions, but ' + 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'); + return emptyFunctionThatReturnsNull; + } + } + + function validate(props, propName, componentName, location, propFullName) { + for (var i = 0; i < arrayOfTypeCheckers.length; i++) { + var checker = arrayOfTypeCheckers[i]; + + if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) { + return null; + } + } + + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.')); + } + + return createChainableTypeChecker(validate); + } + + function createNodeChecker() { + function validate(props, propName, componentName, location, propFullName) { + if (!isNode(props[propName])) { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.')); + } + + return null; + } + + return createChainableTypeChecker(validate); + } + + function createShapeTypeChecker(shapeTypes) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + var propType = getPropType(propValue); + + if (propType !== 'object') { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); + } + + for (var key in shapeTypes) { + var checker = shapeTypes[key]; + + if (!checker) { + continue; + } + + var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); + + if (error) { + return error; + } + } + + return null; + } + + return createChainableTypeChecker(validate); + } + + function createStrictShapeTypeChecker(shapeTypes) { + function validate(props, propName, componentName, location, propFullName) { + var propValue = props[propName]; + var propType = getPropType(propValue); + + if (propType !== 'object') { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.')); + } // We need to check all keys in case some are required but missing from + // props. + + + var allKeys = assign$2({}, props[propName], shapeTypes); + + for (var key in allKeys) { + var checker = shapeTypes[key]; + + if (!checker) { + return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' + '\nBad object: ' + JSON.stringify(props[propName], null, ' ') + '\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')); + } + + var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret); + + if (error) { + return error; + } + } + + return null; + } + + return createChainableTypeChecker(validate); + } + + function isNode(propValue) { + switch (typeof propValue) { + case 'number': + case 'string': + case 'undefined': + return true; + + case 'boolean': + return !propValue; + + case 'object': + if (Array.isArray(propValue)) { + return propValue.every(isNode); + } + + if (propValue === null || isValidElement(propValue)) { + return true; + } + + var iteratorFn = getIteratorFn(propValue); + + if (iteratorFn) { + var iterator = iteratorFn.call(propValue); + var step; + + if (iteratorFn !== propValue.entries) { + while (!(step = iterator.next()).done) { + if (!isNode(step.value)) { + return false; + } + } + } else { + // Iterator will provide entry [k,v] tuples rather than values. + while (!(step = iterator.next()).done) { + var entry = step.value; + + if (entry) { + if (!isNode(entry[1])) { + return false; + } + } + } + } + } else { + return false; + } + + return true; + + default: + return false; + } + } + + function isSymbol(propType, propValue) { + // Native Symbol. + if (propType === 'symbol') { + return true; + } // falsy value can't be a Symbol + + + if (!propValue) { + return false; + } // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol' + + + if (propValue['@@toStringTag'] === 'Symbol') { + return true; + } // Fallback for non-spec compliant Symbols which are polyfilled. + + + if (typeof Symbol === 'function' && propValue instanceof Symbol) { + return true; + } + + return false; + } // Equivalent of `typeof` but with special handling for array and regexp. + + + function getPropType(propValue) { + var propType = typeof propValue; + + if (Array.isArray(propValue)) { + return 'array'; + } + + if (propValue instanceof RegExp) { + // Old webkits (at least until Android 4.0) return 'function' rather than + // 'object' for typeof a RegExp. We'll normalize this here so that /bla/ + // passes PropTypes.object. + return 'object'; + } + + if (isSymbol(propType, propValue)) { + return 'symbol'; + } + + return propType; + } // This handles more types than `getPropType`. Only used for error messages. + // See `createPrimitiveTypeChecker`. + + + function getPreciseType(propValue) { + if (typeof propValue === 'undefined' || propValue === null) { + return '' + propValue; + } + + var propType = getPropType(propValue); + + if (propType === 'object') { + if (propValue instanceof Date) { + return 'date'; + } else if (propValue instanceof RegExp) { + return 'regexp'; + } + } + + return propType; + } // Returns a string that is postfixed to a warning about an invalid type. + // For example, "undefined" or "of type array" + + + function getPostfixForTypeWarning(value) { + var type = getPreciseType(value); + + switch (type) { + case 'array': + case 'object': + return 'an ' + type; + + case 'boolean': + case 'date': + case 'regexp': + return 'a ' + type; + + default: + return type; + } + } // Returns class name of the object, if any. + + + function getClassName(propValue) { + if (!propValue.constructor || !propValue.constructor.name) { + return ANONYMOUS; + } + + return propValue.constructor.name; + } + + ReactPropTypes.checkPropTypes = checkPropTypes; + ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache; + ReactPropTypes.PropTypes = ReactPropTypes; + return ReactPropTypes; +}; + +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +{ + var ReactIs = reactIs$1.exports; // By explicitly using `prop-types` you are opting into new development behavior. + // http://fb.me/prop-types-in-prod + + + var throwOnDirectAccess = true; + propTypes.exports = factoryWithTypeCheckers(ReactIs.isElement, throwOnDirectAccess); +} + +var _pt = propTypes.exports; + +var lib = {}; + +/*:: type Attr = { [key: string]: string | number } */ + +/*:: type Opts = { preserveNumbers: ?boolean } */ + +/* + +style-attr +==== + +Very simple parsing and stringifying of style attributes. + +`parse` +---- + +Convert a style attribute string to an object. + +*/ + +/*:: declare function parse (raw: string, opts: ?Opts): Attr */ +function parse(raw, opts) { + opts = opts || {}; + var preserveNumbers = opts.preserveNumbers; + + var trim = function (s) { + return s.trim(); + }; + + var obj = {}; + getKeyValueChunks(raw).map(trim).filter(Boolean).forEach(function (item) { + // split with `.indexOf` rather than `.split` because the value may also contain colons. + var pos = item.indexOf(':'); + var key = item.substr(0, pos).trim(); + var val = item.substr(pos + 1).trim(); + + if (preserveNumbers && isNumeric(val)) { + val = Number(val); + } + + obj[key] = val; + }); + return obj; +} +/* + +`isNumeric` +---- + +Check if a value is numeric. +Via: https://stackoverflow.com/a/1830844/9324 + +*/ + +/*:: declare function isNumeric (n: any): boolean */ + + +function isNumeric(n) { + return !isNaN(parseFloat(n)) && isFinite(n); +} +/* + +`getKeyValueChunks` +---- + +Split a string into chunks matching `: ` + +*/ + +/*:: declare function getKeyValueChunks (raw: string): Array */ + + +function getKeyValueChunks(raw) { + var chunks = []; + var offset = 0; + var sep = ';'; + var hasUnclosedUrl = /url\([^\)]+$/; + var chunk = ''; + var nextSplit; + + while (offset < raw.length) { + nextSplit = raw.indexOf(sep, offset); + + if (nextSplit === -1) { + nextSplit = raw.length; + } + + chunk += raw.substring(offset, nextSplit); // data URIs can contain semicolons, so make sure we get the whole thing + + if (hasUnclosedUrl.test(chunk)) { + chunk += ';'; + offset = nextSplit + 1; + continue; + } + + chunks.push(chunk); + chunk = ''; + offset = nextSplit + 1; + } + + return chunks; +} +/* + +`stringify` +---- + +Convert an object into an attribute string + +*/ + +/*:: declare function stringify (obj: Attr): string */ + + +function stringify(obj) { + return Object.keys(obj).map(function (key) { + return key + ':' + obj[key]; + }).join(';'); +} +/* + +`normalize` +---- + +Normalize an attribute string (eg. collapse duplicates) + +*/ + +/*:: declare function normalize (str: string, opts: ?Opts): string */ + + +function normalize(str, opts) { + return stringify(parse(str, opts)); +} + +lib.parse = parse; +lib.stringify = stringify; +lib.normalize = normalize; + +var util$2 = {exports: {}}; + +/** + * attr fix for old ie + * @author yiminghe@gmail.com + */ + +var R_BOOLEAN = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + R_FOCUSABLE = /^(?:button|input|object|select|textarea)$/i, + R_CLICKABLE = /^a(?:rea)?$/i, + R_INVALID_CHAR = /:|^on/; +var attrFix = {}, + propFix, + attrHooks = { + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + tabindex: { + get: function (el) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + var attributeNode = el.getAttributeNode('tabindex'); + return attributeNode && attributeNode.specified ? parseInt(attributeNode.value, 10) : R_FOCUSABLE.test(el.nodeName) || R_CLICKABLE.test(el.nodeName) && el.href ? 0 : undefined; + } + } +}, + boolHook = { + get: function (elem, name) { + // 转发到 prop 方法 + return elem[propFix[name] || name] ? // 根据 w3c attribute , true 时返回属性名字符串 + name.toLowerCase() : undefined; + } +}, + attrNodeHook = {}; +attrHooks.style = { + get: function (el) { + return el.style.cssText; + } +}; +propFix = { + hidefocus: 'hideFocus', + tabindex: 'tabIndex', + readonly: 'readOnly', + 'for': 'htmlFor', + 'class': 'className', + maxlength: 'maxLength', + cellspacing: 'cellSpacing', + cellpadding: 'cellPadding', + rowspan: 'rowSpan', + colspan: 'colSpan', + usemap: 'useMap', + frameborder: 'frameBorder', + contenteditable: 'contentEditable' +}; +var ua = typeof navigator !== 'undefined' ? navigator.userAgent : ''; +var doc = typeof document !== 'undefined' ? document : {}; + +function numberify(s) { + var c = 0; // convert '1.2.3.4' to 1.234 + + return parseFloat(s.replace(/\./g, function () { + return c++ === 0 ? '.' : ''; + })); +} + +function ieVersion() { + var m, v; + + if ((m = ua.match(/MSIE ([^;]*)|Trident.*; rv(?:\s|:)?([0-9.]+)/)) && (v = m[1] || m[2])) { + return doc.documentMode || numberify(v); + } +} + +function mix(s, t) { + for (var p in t) { + s[p] = t[p]; + } +} + +function each(arr, fn) { + var i = 0, + l = arr.length; + + for (; i < l; i++) { + if (fn(arr[i], i) === false) { + break; + } + } +} + +var ie = ieVersion(); + +if (ie && ie < 8) { + attrHooks.style.set = function (el, val) { + el.style.cssText = val; + }; // get attribute value from attribute node for ie + + + mix(attrNodeHook, { + get: function (elem, name) { + var ret = elem.getAttributeNode(name); // Return undefined if attribute node specified by user + + return ret && ( // fix #100 + ret.specified || ret.nodeValue) ? ret.nodeValue : undefined; + } + }); // ie6,7 不区分 attribute 与 property + + mix(attrFix, propFix); // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + + attrHooks.tabIndex = attrHooks.tabindex; // 不光是 href, src, 还有 rowspan 等非 mapping 属性,也需要用第 2 个参数来获取原始值 + // 注意 colSpan rowSpan 已经由 propFix 转为大写 + + each(['href', 'src', 'width', 'height', 'colSpan', 'rowSpan'], function (name) { + attrHooks[name] = { + get: function (elem) { + var ret = elem.getAttribute(name, 2); + return ret === null ? undefined : ret; + } + }; + }); + attrHooks.placeholder = { + get: function (elem, name) { + return elem[name] || attrNodeHook.get(elem, name); + } + }; +} + +if (ie) { + var hrefFix = attrHooks.href = attrHooks.href || {}; + + hrefFix.set = function (el, val, name) { + var childNodes = el.childNodes, + b, + len = childNodes.length, + allText = len > 0; + + for (len = len - 1; len >= 0; len--) { + if (childNodes[len].nodeType !== 3) { + allText = 0; + } + } + + if (allText) { + b = el.ownerDocument.createElement('b'); + b.style.display = 'none'; + el.appendChild(b); + } + + el.setAttribute(name, '' + val); + + if (b) { + el.removeChild(b); + } + }; +} + +var RE_TRIM = /^[\s\xa0]+|[\s\xa0]+$/g, + trim = String.prototype.trim; +var SPACE = ' '; +var getElementsByTagName; + +getElementsByTagName = function (name, context) { + return context.getElementsByTagName(name); +}; + +if (doc.createElement) { + var div = doc.createElement('div'); + div.appendChild(document.createComment('')); + + if (div.getElementsByTagName('*').length) { + getElementsByTagName = function (name, context) { + var nodes = context.getElementsByTagName(name), + needsFilter = name === '*'; // + + if (needsFilter || typeof nodes.length !== 'number') { + var ret = [], + i = 0, + el; + + while (el = nodes[i++]) { + if (!needsFilter || el.nodeType === 1) { + ret.push(el); + } + } + + return ret; + } else { + return nodes; + } + }; + } +} + +var compareNodeOrder = 'sourceIndex' in (doc && doc.documentElement || {}) ? function (a, b) { + return a.sourceIndex - b.sourceIndex; +} : function (a, b) { + if (!a.compareDocumentPosition || !b.compareDocumentPosition) { + return a.compareDocumentPosition ? -1 : 1; + } + + var bit = a.compareDocumentPosition(b) & 4; + return bit ? -1 : 1; +}; +var util$1 = util$2.exports = { + ie: ie, + unique: function () { + var hasDuplicate, + baseHasDuplicate = true; // Here we check if the JavaScript engine is using some sort of + // optimization where it does not always call our comparison + // function. If that is the case, discard the hasDuplicate value. + // Thus far that includes Google Chrome. + + [0, 0].sort(function () { + baseHasDuplicate = false; + return 0; + }); + + function sortOrder(a, b) { + if (a === b) { + hasDuplicate = true; + return 0; + } + + return compareNodeOrder(a, b); + } // 排序去重 + + + return function (elements) { + hasDuplicate = baseHasDuplicate; + elements.sort(sortOrder); + + if (hasDuplicate) { + var i = 1, + len = elements.length; + + while (i < len) { + if (elements[i] === elements[i - 1]) { + elements.splice(i, 1); + --len; + } else { + i++; + } + } + } + + return elements; + }; + }(), + getElementsByTagName: getElementsByTagName, + getSimpleAttr: function (el, name) { + var ret = el && el.getAttributeNode(name); + + if (ret && ret.specified) { + return 'value' in ret ? ret.value : ret.nodeValue; + } + + return undefined; + }, + contains: ie ? function (a, b) { + if (a.nodeType === 9) { + a = a.documentElement; + } // !a.contains => a===document || text + // 注意原生 contains 判断时 a===b 也返回 true + + + b = b.parentNode; + + if (a === b) { + return true; + } // when b is document, a.contains(b) 不支持的接口 in ie + + + if (b && b.nodeType === 1) { + return a.contains && a.contains(b); + } else { + return false; + } + } : function (a, b) { + return !!(a.compareDocumentPosition(b) & 16); + }, + isTag: function (el, value) { + return value === '*' || el.nodeName.toLowerCase() === value.toLowerCase(); + }, + hasSingleClass: function (el, cls) { + // consider xml + // https://github.com/kissyteam/kissy/issues/532 + var className = el && util$1.getSimpleAttr(el, 'class'); + return className && (className = className.replace(/[\r\t\n]/g, SPACE)) && (SPACE + className + SPACE).indexOf(SPACE + cls + SPACE) > -1; + }, + startsWith: function (str, prefix) { + return str.lastIndexOf(prefix, 0) === 0; + }, + endsWith: function (str, suffix) { + var ind = str.length - suffix.length; + return ind >= 0 && str.indexOf(suffix, ind) === ind; + }, + trim: trim ? function (str) { + return str == null ? '' : trim.call(str); + } : function (str) { + return str == null ? '' : (str + '').replace(RE_TRIM, ''); + }, + attr: function (el, name) { + var attrNormalizer, ret; // scrollLeft + + name = name.toLowerCase(); // custom attrs + + name = attrFix[name] || name; + + if (R_BOOLEAN.test(name)) { + attrNormalizer = boolHook; + } else if (R_INVALID_CHAR.test(name)) { + // only old ie? + attrNormalizer = attrNodeHook; + } else { + attrNormalizer = attrHooks[name]; + } + + if (el && el.nodeType === 1) { + // browsers index elements by id/name on forms, give priority to attributes. + if (el.nodeName.toLowerCase() === 'form') { + attrNormalizer = attrNodeHook; + } + + if (attrNormalizer && attrNormalizer.get) { + return attrNormalizer.get(el, name); + } + + ret = el.getAttribute(name); + + if (ret === '') { + var attrNode = el.getAttributeNode(name); + + if (!attrNode || !attrNode.specified) { + return undefined; + } + } // standard browser non-existing attribute return null + // ie<8 will return undefined , because it return property + // so norm to undefined + + + return ret === null ? undefined : ret; + } + } +}; + +var parser$1 = {exports: {}}; + +/* + Generated by kison.*/ + +(function (module) { +var parser = function (undefined$1) { + /*jshint quotmark:false, loopfunc:true, indent:false, unused:false, asi:true, boss:true*/ + + /* Generated by kison */ + var parser = {}, + GrammarConst = { + 'SHIFT_TYPE': 1, + 'REDUCE_TYPE': 2, + 'ACCEPT_TYPE': 0, + 'TYPE_INDEX': 0, + 'PRODUCTION_INDEX': 1, + 'TO_INDEX': 2 + }; + /*jslint quotmark: false*/ + + function mix(to, from) { + for (var f in from) { + to[f] = from[f]; + } + } + + function isArray(obj) { + return '[object Array]' === Object.prototype.toString.call(obj); + } + + function each(object, fn, context) { + if (object) { + var key, + val, + length, + i = 0; + context = context || null; + + if (!isArray(object)) { + for (key in object) { + // can not use hasOwnProperty + if (fn.call(context, object[key], key, object) === false) { + break; + } + } + } else { + length = object.length; + + for (val = object[0]; i < length; val = object[++i]) { + if (fn.call(context, val, i, object) === false) { + break; + } + } + } + } + } + + function inArray(item, arr) { + for (var i = 0, l = arr.length; i < l; i++) { + if (arr[i] === item) { + return true; + } + } + + return false; + } + + var Lexer = function Lexer(cfg) { + var self = this; + /* + lex rules. + @type {Object[]} + @example + [ + { + regexp:'\\w+', + state:['xx'], + token:'c', + // this => lex + action:function(){} + } + ] + */ + + self.rules = []; + mix(self, cfg); + /* + Input languages + @type {String} + */ + + self.resetInput(self.input); + }; + + Lexer.prototype = { + 'resetInput': function (input) { + mix(this, { + input: input, + matched: '', + stateStack: [Lexer.STATIC.INITIAL], + match: '', + text: '', + firstLine: 1, + lineNumber: 1, + lastLine: 1, + firstColumn: 1, + lastColumn: 1 + }); + }, + 'getCurrentRules': function () { + var self = this, + currentState = self.stateStack[self.stateStack.length - 1], + rules = []; //#JSCOVERAGE_IF + + if (self.mapState) { + currentState = self.mapState(currentState); + } + + each(self.rules, function (r) { + var state = r.state || r[3]; + + if (!state) { + if (currentState === Lexer.STATIC.INITIAL) { + rules.push(r); + } + } else if (inArray(currentState, state)) { + rules.push(r); + } + }); + return rules; + }, + 'pushState': function (state) { + this.stateStack.push(state); + }, + 'popState': function (num) { + num = num || 1; + var ret; + + while (num--) { + ret = this.stateStack.pop(); + } + + return ret; + }, + 'showDebugInfo': function () { + var self = this, + DEBUG_CONTEXT_LIMIT = Lexer.STATIC.DEBUG_CONTEXT_LIMIT, + matched = self.matched, + match = self.match, + input = self.input; + matched = matched.slice(0, matched.length - match.length); //#JSCOVERAGE_IF 0 + + var past = (matched.length > DEBUG_CONTEXT_LIMIT ? '...' : '') + matched.slice(0 - DEBUG_CONTEXT_LIMIT).replace(/\n/, ' '), + next = match + input; //#JSCOVERAGE_ENDIF + + next = next.slice(0, DEBUG_CONTEXT_LIMIT) + (next.length > DEBUG_CONTEXT_LIMIT ? '...' : ''); + return past + next + '\n' + new Array(past.length + 1).join('-') + '^'; + }, + 'mapSymbol': function mapSymbolForCodeGen(t) { + return this.symbolMap[t]; + }, + 'mapReverseSymbol': function (rs) { + var self = this, + symbolMap = self.symbolMap, + i, + reverseSymbolMap = self.reverseSymbolMap; + + if (!reverseSymbolMap && symbolMap) { + reverseSymbolMap = self.reverseSymbolMap = {}; + + for (i in symbolMap) { + reverseSymbolMap[symbolMap[i]] = i; + } + } //#JSCOVERAGE_IF + + + if (reverseSymbolMap) { + return reverseSymbolMap[rs]; + } else { + return rs; + } + }, + 'lex': function () { + var self = this, + input = self.input, + i, + rule, + m, + ret, + lines, + rules = self.getCurrentRules(); + self.match = self.text = ''; + + if (!input) { + return self.mapSymbol(Lexer.STATIC.END_TAG); + } + + for (i = 0; i < rules.length; i++) { + rule = rules[i]; //#JSCOVERAGE_IF 0 + + var regexp = rule.regexp || rule[1], + token = rule.token || rule[0], + action = rule.action || rule[2] || undefined$1; //#JSCOVERAGE_ENDIF + + if (m = input.match(regexp)) { + lines = m[0].match(/\n.*/g); + + if (lines) { + self.lineNumber += lines.length; + } + + mix(self, { + firstLine: self.lastLine, + lastLine: self.lineNumber + 1, + firstColumn: self.lastColumn, + lastColumn: lines ? lines[lines.length - 1].length - 1 : self.lastColumn + m[0].length + }); + var match; // for error report + + match = self.match = m[0]; // all matches + + self.matches = m; // may change by user + + self.text = match; // matched content utils now + + self.matched += match; + ret = action && action.call(self); + + if (ret === undefined$1) { + ret = token; + } else { + ret = self.mapSymbol(ret); + } + + input = input.slice(match.length); + self.input = input; + + if (ret) { + return ret; + } else { + // ignore + return self.lex(); + } + } + } + } + }; + Lexer.STATIC = { + 'INITIAL': 'I', + 'DEBUG_CONTEXT_LIMIT': 20, + 'END_TAG': '$EOF' + }; + var lexer = new Lexer({ + 'rules': [['b', /^\[(?:[\t\r\n\f\x20]*)/, function () { + this.text = this.yy.trim(this.text); + }], ['c', /^(?:[\t\r\n\f\x20]*)\]/, function () { + this.text = this.yy.trim(this.text); + }], ['d', /^(?:[\t\r\n\f\x20]*)~=(?:[\t\r\n\f\x20]*)/, function () { + this.text = this.yy.trim(this.text); + }], ['e', /^(?:[\t\r\n\f\x20]*)\|=(?:[\t\r\n\f\x20]*)/, function () { + this.text = this.yy.trim(this.text); + }], ['f', /^(?:[\t\r\n\f\x20]*)\^=(?:[\t\r\n\f\x20]*)/, function () { + this.text = this.yy.trim(this.text); + }], ['g', /^(?:[\t\r\n\f\x20]*)\$=(?:[\t\r\n\f\x20]*)/, function () { + this.text = this.yy.trim(this.text); + }], ['h', /^(?:[\t\r\n\f\x20]*)\*=(?:[\t\r\n\f\x20]*)/, function () { + this.text = this.yy.trim(this.text); + }], ['i', /^(?:[\t\r\n\f\x20]*)\=(?:[\t\r\n\f\x20]*)/, function () { + this.text = this.yy.trim(this.text); + }], ['j', /^(?:(?:[\w]|[^\x00-\xa0]|(?:\\[^\n\r\f0-9a-f]))(?:[\w\d-]|[^\x00-\xa0]|(?:\\[^\n\r\f0-9a-f]))*)\(/, function () { + this.text = this.yy.trim(this.text).slice(0, -1); + this.pushState('fn'); + }], ['k', /^[^\)]*/, function () { + this.popState(); + }, ['fn']], ['l', /^(?:[\t\r\n\f\x20]*)\)/, function () { + this.text = this.yy.trim(this.text); + }], ['m', /^:not\((?:[\t\r\n\f\x20]*)/i, function () { + this.text = this.yy.trim(this.text); + }], ['n', /^(?:(?:[\w]|[^\x00-\xa0]|(?:\\[^\n\r\f0-9a-f]))(?:[\w\d-]|[^\x00-\xa0]|(?:\\[^\n\r\f0-9a-f]))*)/, function () { + this.text = this.yy.unEscape(this.text); + }], ['o', /^"(\\"|[^"])*"/, function () { + this.text = this.yy.unEscapeStr(this.text); + }], ['o', /^'(\\'|[^'])*'/, function () { + this.text = this.yy.unEscapeStr(this.text); + }], ['p', /^#(?:(?:[\w\d-]|[^\x00-\xa0]|(?:\\[^\n\r\f0-9a-f]))+)/, function () { + this.text = this.yy.unEscape(this.text.slice(1)); + }], ['q', /^\.(?:(?:[\w]|[^\x00-\xa0]|(?:\\[^\n\r\f0-9a-f]))(?:[\w\d-]|[^\x00-\xa0]|(?:\\[^\n\r\f0-9a-f]))*)/, function () { + this.text = this.yy.unEscape(this.text.slice(1)); + }], ['r', /^(?:[\t\r\n\f\x20]*),(?:[\t\r\n\f\x20]*)/, function () { + this.text = this.yy.trim(this.text); + }], ['s', /^::?/, 0], ['t', /^(?:[\t\r\n\f\x20]*)\+(?:[\t\r\n\f\x20]*)/, function () { + this.text = this.yy.trim(this.text); + }], ['u', /^(?:[\t\r\n\f\x20]*)>(?:[\t\r\n\f\x20]*)/, function () { + this.text = this.yy.trim(this.text); + }], ['v', /^(?:[\t\r\n\f\x20]*)~(?:[\t\r\n\f\x20]*)/, function () { + this.text = this.yy.trim(this.text); + }], ['w', /^\*/, 0], ['x', /^(?:[\t\r\n\f\x20]+)/, 0], ['y', /^./, 0]] + }); + parser.lexer = lexer; + lexer.symbolMap = { + '$EOF': 'a', + 'LEFT_BRACKET': 'b', + 'RIGHT_BRACKET': 'c', + 'INCLUDES': 'd', + 'DASH_MATCH': 'e', + 'PREFIX_MATCH': 'f', + 'SUFFIX_MATCH': 'g', + 'SUBSTRING_MATCH': 'h', + 'ALL_MATCH': 'i', + 'FUNCTION': 'j', + 'PARAMETER': 'k', + 'RIGHT_PARENTHESES': 'l', + 'NOT': 'm', + 'IDENT': 'n', + 'STRING': 'o', + 'HASH': 'p', + 'CLASS': 'q', + 'COMMA': 'r', + 'COLON': 's', + 'PLUS': 't', + 'GREATER': 'u', + 'TILDE': 'v', + 'UNIVERSAL': 'w', + 'S': 'x', + 'INVALID': 'y', + '$START': 'z', + 'selectors_group': 'aa', + 'selector': 'ab', + 'simple_selector_sequence': 'ac', + 'combinator': 'ad', + 'type_selector': 'ae', + 'id_selector': 'af', + 'class_selector': 'ag', + 'attrib_match': 'ah', + 'attrib': 'ai', + 'attrib_val': 'aj', + 'pseudo': 'ak', + 'negation': 'al', + 'negation_arg': 'am', + 'suffix_selector': 'an', + 'suffix_selectors': 'ao' + }; + parser.productions = [['z', ['aa']], ['aa', ['ab'], function () { + return [this.$1]; + }], ['aa', ['aa', 'r', 'ab'], function () { + this.$1.push(this.$3); + }], ['ab', ['ac']], ['ab', ['ab', 'ad', 'ac'], function () { + // LinkedList + this.$1.nextCombinator = this.$3.prevCombinator = this.$2; + var order; + order = this.$1.order = this.$1.order || 0; + this.$3.order = order + 1; + this.$3.prev = this.$1; + this.$1.next = this.$3; + return this.$3; + }], ['ad', ['t']], ['ad', ['u']], ['ad', ['v']], ['ad', ['x'], function () { + return ' '; + }], ['ae', ['n'], function () { + return { + t: 'tag', + value: this.$1 + }; + }], ['ae', ['w'], function () { + return { + t: 'tag', + value: this.$1 + }; + }], ['af', ['p'], function () { + return { + t: 'id', + value: this.$1 + }; + }], ['ag', ['q'], function () { + return { + t: 'cls', + value: this.$1 + }; + }], ['ah', ['f']], ['ah', ['g']], ['ah', ['h']], ['ah', ['i']], ['ah', ['d']], ['ah', ['e']], ['ai', ['b', 'n', 'c'], function () { + return { + t: 'attrib', + value: { + ident: this.$2 + } + }; + }], ['aj', ['n']], ['aj', ['o']], ['ai', ['b', 'n', 'ah', 'aj', 'c'], function () { + return { + t: 'attrib', + value: { + ident: this.$2, + match: this.$3, + value: this.$4 + } + }; + }], ['ak', ['s', 'j', 'k', 'l'], function () { + return { + t: 'pseudo', + value: { + fn: this.$2.toLowerCase(), + param: this.$3 + } + }; + }], ['ak', ['s', 'n'], function () { + return { + t: 'pseudo', + value: { + ident: this.$2.toLowerCase() + } + }; + }], ['al', ['m', 'am', 'l'], function () { + return { + t: 'pseudo', + value: { + fn: 'not', + param: this.$2 + } + }; + }], ['am', ['ae']], ['am', ['af']], ['am', ['ag']], ['am', ['ai']], ['am', ['ak']], ['an', ['af']], ['an', ['ag']], ['an', ['ai']], ['an', ['ak']], ['an', ['al']], ['ao', ['an'], function () { + return [this.$1]; + }], ['ao', ['ao', 'an'], function () { + this.$1.push(this.$2); + }], ['ac', ['ae']], ['ac', ['ao'], function () { + return { + suffix: this.$1 + }; + }], ['ac', ['ae', 'ao'], function () { + return { + t: 'tag', + value: this.$1.value, + suffix: this.$2 + }; + }]]; + parser.table = { + 'gotos': { + '0': { + 'aa': 8, + 'ab': 9, + 'ae': 10, + 'af': 11, + 'ag': 12, + 'ai': 13, + 'ak': 14, + 'al': 15, + 'an': 16, + 'ao': 17, + 'ac': 18 + }, + '2': { + 'ae': 20, + 'af': 21, + 'ag': 22, + 'ai': 23, + 'ak': 24, + 'am': 25 + }, + '9': { + 'ad': 33 + }, + '10': { + 'af': 11, + 'ag': 12, + 'ai': 13, + 'ak': 14, + 'al': 15, + 'an': 16, + 'ao': 34 + }, + '17': { + 'af': 11, + 'ag': 12, + 'ai': 13, + 'ak': 14, + 'al': 15, + 'an': 35 + }, + '19': { + 'ah': 43 + }, + '28': { + 'ab': 46, + 'ae': 10, + 'af': 11, + 'ag': 12, + 'ai': 13, + 'ak': 14, + 'al': 15, + 'an': 16, + 'ao': 17, + 'ac': 18 + }, + '33': { + 'ae': 10, + 'af': 11, + 'ag': 12, + 'ai': 13, + 'ak': 14, + 'al': 15, + 'an': 16, + 'ao': 17, + 'ac': 47 + }, + '34': { + 'af': 11, + 'ag': 12, + 'ai': 13, + 'ak': 14, + 'al': 15, + 'an': 35 + }, + '43': { + 'aj': 50 + }, + '46': { + 'ad': 33 + } + }, + 'action': { + '0': { + 'b': [1, undefined$1, 1], + 'm': [1, undefined$1, 2], + 'n': [1, undefined$1, 3], + 'p': [1, undefined$1, 4], + 'q': [1, undefined$1, 5], + 's': [1, undefined$1, 6], + 'w': [1, undefined$1, 7] + }, + '1': { + 'n': [1, undefined$1, 19] + }, + '2': { + 'b': [1, undefined$1, 1], + 'n': [1, undefined$1, 3], + 'p': [1, undefined$1, 4], + 'q': [1, undefined$1, 5], + 's': [1, undefined$1, 6], + 'w': [1, undefined$1, 7] + }, + '3': { + 'a': [2, 9], + 'r': [2, 9], + 't': [2, 9], + 'u': [2, 9], + 'v': [2, 9], + 'x': [2, 9], + 'p': [2, 9], + 'q': [2, 9], + 'b': [2, 9], + 's': [2, 9], + 'm': [2, 9], + 'l': [2, 9] + }, + '4': { + 'a': [2, 11], + 'r': [2, 11], + 't': [2, 11], + 'u': [2, 11], + 'v': [2, 11], + 'x': [2, 11], + 'p': [2, 11], + 'q': [2, 11], + 'b': [2, 11], + 's': [2, 11], + 'm': [2, 11], + 'l': [2, 11] + }, + '5': { + 'a': [2, 12], + 'r': [2, 12], + 't': [2, 12], + 'u': [2, 12], + 'v': [2, 12], + 'x': [2, 12], + 'p': [2, 12], + 'q': [2, 12], + 'b': [2, 12], + 's': [2, 12], + 'm': [2, 12], + 'l': [2, 12] + }, + '6': { + 'j': [1, undefined$1, 26], + 'n': [1, undefined$1, 27] + }, + '7': { + 'a': [2, 10], + 'r': [2, 10], + 't': [2, 10], + 'u': [2, 10], + 'v': [2, 10], + 'x': [2, 10], + 'p': [2, 10], + 'q': [2, 10], + 'b': [2, 10], + 's': [2, 10], + 'm': [2, 10], + 'l': [2, 10] + }, + '8': { + 'a': [0], + 'r': [1, undefined$1, 28] + }, + '9': { + 'a': [2, 1], + 'r': [2, 1], + 't': [1, undefined$1, 29], + 'u': [1, undefined$1, 30], + 'v': [1, undefined$1, 31], + 'x': [1, undefined$1, 32] + }, + '10': { + 'a': [2, 38], + 'r': [2, 38], + 't': [2, 38], + 'u': [2, 38], + 'v': [2, 38], + 'x': [2, 38], + 'b': [1, undefined$1, 1], + 'm': [1, undefined$1, 2], + 'p': [1, undefined$1, 4], + 'q': [1, undefined$1, 5], + 's': [1, undefined$1, 6] + }, + '11': { + 'a': [2, 31], + 'r': [2, 31], + 't': [2, 31], + 'u': [2, 31], + 'v': [2, 31], + 'x': [2, 31], + 'p': [2, 31], + 'q': [2, 31], + 'b': [2, 31], + 's': [2, 31], + 'm': [2, 31] + }, + '12': { + 'a': [2, 32], + 'r': [2, 32], + 't': [2, 32], + 'u': [2, 32], + 'v': [2, 32], + 'x': [2, 32], + 'p': [2, 32], + 'q': [2, 32], + 'b': [2, 32], + 's': [2, 32], + 'm': [2, 32] + }, + '13': { + 'a': [2, 33], + 'r': [2, 33], + 't': [2, 33], + 'u': [2, 33], + 'v': [2, 33], + 'x': [2, 33], + 'p': [2, 33], + 'q': [2, 33], + 'b': [2, 33], + 's': [2, 33], + 'm': [2, 33] + }, + '14': { + 'a': [2, 34], + 'r': [2, 34], + 't': [2, 34], + 'u': [2, 34], + 'v': [2, 34], + 'x': [2, 34], + 'p': [2, 34], + 'q': [2, 34], + 'b': [2, 34], + 's': [2, 34], + 'm': [2, 34] + }, + '15': { + 'a': [2, 35], + 'r': [2, 35], + 't': [2, 35], + 'u': [2, 35], + 'v': [2, 35], + 'x': [2, 35], + 'p': [2, 35], + 'q': [2, 35], + 'b': [2, 35], + 's': [2, 35], + 'm': [2, 35] + }, + '16': { + 'a': [2, 36], + 'r': [2, 36], + 't': [2, 36], + 'u': [2, 36], + 'v': [2, 36], + 'x': [2, 36], + 'p': [2, 36], + 'q': [2, 36], + 'b': [2, 36], + 's': [2, 36], + 'm': [2, 36] + }, + '17': { + 'a': [2, 39], + 'r': [2, 39], + 't': [2, 39], + 'u': [2, 39], + 'v': [2, 39], + 'x': [2, 39], + 'b': [1, undefined$1, 1], + 'm': [1, undefined$1, 2], + 'p': [1, undefined$1, 4], + 'q': [1, undefined$1, 5], + 's': [1, undefined$1, 6] + }, + '18': { + 'a': [2, 3], + 'r': [2, 3], + 't': [2, 3], + 'u': [2, 3], + 'v': [2, 3], + 'x': [2, 3] + }, + '19': { + 'c': [1, undefined$1, 36], + 'd': [1, undefined$1, 37], + 'e': [1, undefined$1, 38], + 'f': [1, undefined$1, 39], + 'g': [1, undefined$1, 40], + 'h': [1, undefined$1, 41], + 'i': [1, undefined$1, 42] + }, + '20': { + 'l': [2, 26] + }, + '21': { + 'l': [2, 27] + }, + '22': { + 'l': [2, 28] + }, + '23': { + 'l': [2, 29] + }, + '24': { + 'l': [2, 30] + }, + '25': { + 'l': [1, undefined$1, 44] + }, + '26': { + 'k': [1, undefined$1, 45] + }, + '27': { + 'a': [2, 24], + 'r': [2, 24], + 't': [2, 24], + 'u': [2, 24], + 'v': [2, 24], + 'x': [2, 24], + 'p': [2, 24], + 'q': [2, 24], + 'b': [2, 24], + 's': [2, 24], + 'm': [2, 24], + 'l': [2, 24] + }, + '28': { + 'b': [1, undefined$1, 1], + 'm': [1, undefined$1, 2], + 'n': [1, undefined$1, 3], + 'p': [1, undefined$1, 4], + 'q': [1, undefined$1, 5], + 's': [1, undefined$1, 6], + 'w': [1, undefined$1, 7] + }, + '29': { + 'n': [2, 5], + 'w': [2, 5], + 'p': [2, 5], + 'q': [2, 5], + 'b': [2, 5], + 's': [2, 5], + 'm': [2, 5] + }, + '30': { + 'n': [2, 6], + 'w': [2, 6], + 'p': [2, 6], + 'q': [2, 6], + 'b': [2, 6], + 's': [2, 6], + 'm': [2, 6] + }, + '31': { + 'n': [2, 7], + 'w': [2, 7], + 'p': [2, 7], + 'q': [2, 7], + 'b': [2, 7], + 's': [2, 7], + 'm': [2, 7] + }, + '32': { + 'n': [2, 8], + 'w': [2, 8], + 'p': [2, 8], + 'q': [2, 8], + 'b': [2, 8], + 's': [2, 8], + 'm': [2, 8] + }, + '33': { + 'b': [1, undefined$1, 1], + 'm': [1, undefined$1, 2], + 'n': [1, undefined$1, 3], + 'p': [1, undefined$1, 4], + 'q': [1, undefined$1, 5], + 's': [1, undefined$1, 6], + 'w': [1, undefined$1, 7] + }, + '34': { + 'a': [2, 40], + 'r': [2, 40], + 't': [2, 40], + 'u': [2, 40], + 'v': [2, 40], + 'x': [2, 40], + 'b': [1, undefined$1, 1], + 'm': [1, undefined$1, 2], + 'p': [1, undefined$1, 4], + 'q': [1, undefined$1, 5], + 's': [1, undefined$1, 6] + }, + '35': { + 'a': [2, 37], + 'r': [2, 37], + 't': [2, 37], + 'u': [2, 37], + 'v': [2, 37], + 'x': [2, 37], + 'p': [2, 37], + 'q': [2, 37], + 'b': [2, 37], + 's': [2, 37], + 'm': [2, 37] + }, + '36': { + 'a': [2, 19], + 'r': [2, 19], + 't': [2, 19], + 'u': [2, 19], + 'v': [2, 19], + 'x': [2, 19], + 'p': [2, 19], + 'q': [2, 19], + 'b': [2, 19], + 's': [2, 19], + 'm': [2, 19], + 'l': [2, 19] + }, + '37': { + 'n': [2, 17], + 'o': [2, 17] + }, + '38': { + 'n': [2, 18], + 'o': [2, 18] + }, + '39': { + 'n': [2, 13], + 'o': [2, 13] + }, + '40': { + 'n': [2, 14], + 'o': [2, 14] + }, + '41': { + 'n': [2, 15], + 'o': [2, 15] + }, + '42': { + 'n': [2, 16], + 'o': [2, 16] + }, + '43': { + 'n': [1, undefined$1, 48], + 'o': [1, undefined$1, 49] + }, + '44': { + 'a': [2, 25], + 'r': [2, 25], + 't': [2, 25], + 'u': [2, 25], + 'v': [2, 25], + 'x': [2, 25], + 'p': [2, 25], + 'q': [2, 25], + 'b': [2, 25], + 's': [2, 25], + 'm': [2, 25] + }, + '45': { + 'l': [1, undefined$1, 51] + }, + '46': { + 'a': [2, 2], + 'r': [2, 2], + 't': [1, undefined$1, 29], + 'u': [1, undefined$1, 30], + 'v': [1, undefined$1, 31], + 'x': [1, undefined$1, 32] + }, + '47': { + 'a': [2, 4], + 'r': [2, 4], + 't': [2, 4], + 'u': [2, 4], + 'v': [2, 4], + 'x': [2, 4] + }, + '48': { + 'c': [2, 20] + }, + '49': { + 'c': [2, 21] + }, + '50': { + 'c': [1, undefined$1, 52] + }, + '51': { + 'a': [2, 23], + 'r': [2, 23], + 't': [2, 23], + 'u': [2, 23], + 'v': [2, 23], + 'x': [2, 23], + 'p': [2, 23], + 'q': [2, 23], + 'b': [2, 23], + 's': [2, 23], + 'm': [2, 23], + 'l': [2, 23] + }, + '52': { + 'a': [2, 22], + 'r': [2, 22], + 't': [2, 22], + 'u': [2, 22], + 'v': [2, 22], + 'x': [2, 22], + 'p': [2, 22], + 'q': [2, 22], + 'b': [2, 22], + 's': [2, 22], + 'm': [2, 22], + 'l': [2, 22] + } + } + }; + + parser.parse = function parse(input, filename) { + var self = this, + lexer = self.lexer, + state, + symbol, + action, + table = self.table, + gotos = table.gotos, + tableAction = table.action, + productions = self.productions, + valueStack = [null], + // for debug info + prefix = filename ? 'in file: ' + filename + ' ' : '', + stack = [0]; + lexer.resetInput(input); + + while (1) { + // retrieve state number from top of stack + state = stack[stack.length - 1]; + + if (!symbol) { + symbol = lexer.lex(); + } + + if (symbol) { + // read action for current state and first input + action = tableAction[state] && tableAction[state][symbol]; + } else { + action = null; + } + + if (!action) { + var expected = [], + error; //#JSCOVERAGE_IF + + if (tableAction[state]) { + for (var symbolForState in tableAction[state]) { + expected.push(self.lexer.mapReverseSymbol(symbolForState)); + } + } + + error = prefix + 'syntax error at line ' + lexer.lineNumber + ':\n' + lexer.showDebugInfo() + '\n' + 'expect ' + expected.join(', '); + throw new Error(error); + } + + switch (action[GrammarConst.TYPE_INDEX]) { + case GrammarConst.SHIFT_TYPE: + stack.push(symbol); + valueStack.push(lexer.text); // push state + + stack.push(action[GrammarConst.TO_INDEX]); // allow to read more + + symbol = null; + break; + + case GrammarConst.REDUCE_TYPE: + var production = productions[action[GrammarConst.PRODUCTION_INDEX]], + reducedSymbol = production.symbol || production[0], + reducedAction = production.action || production[2], + reducedRhs = production.rhs || production[1], + len = reducedRhs.length, + i = 0, + ret, + $$ = valueStack[valueStack.length - len]; // default to $$ = $1 + + ret = undefined$1; + self.$$ = $$; + + for (; i < len; i++) { + self['$' + (len - i)] = valueStack[valueStack.length - 1 - i]; + } + + if (reducedAction) { + ret = reducedAction.call(self); + } + + if (ret !== undefined$1) { + $$ = ret; + } else { + $$ = self.$$; + } + + stack = stack.slice(0, -1 * len * 2); + valueStack = valueStack.slice(0, -1 * len); + stack.push(reducedSymbol); + valueStack.push($$); + var newState = gotos[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + + case GrammarConst.ACCEPT_TYPE: + return $$; + } + } + }; + + return parser; +}(); + +{ + module.exports = parser; +} +}(parser$1)); + +/** + * @ignore + * css3 selector engine for ie6-8 + * @author yiminghe@gmail.com + */ + +var util = util$2.exports; + +var parser = parser$1.exports; + +var EXPANDO_SELECTOR_KEY = '_ks_data_selector_id_', + caches = {}, + isContextXML, + uuid = 0, + subMatchesCache = {}, + getAttr = function (el, name) { + if (isContextXML) { + return util.getSimpleAttr(el, name); + } else { + return util.attr(el, name); + } +}, + hasSingleClass = util.hasSingleClass, + isTag = util.isTag, + aNPlusB = /^(([+-]?(?:\d+)?)?n)?([+-]?\d+)?$/; // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + + +var unescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g, + unescapeFn = function (_, escaped) { + var high = '0x' + escaped - 0x10000; // NaN means non-codepoint + + return isNaN(high) ? escaped : // BMP codepoint + high < 0 ? String.fromCharCode(high + 0x10000) : // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00); +}; + +var matchExpr; +var pseudoFnExpr = { + 'nth-child': function (el, param) { + var ab = getAb(param), + a = ab.a, + b = ab.b; + + if (a === 0 && b === 0) { + return 0; + } + + var index = 0, + parent = el.parentNode; + + if (parent) { + var childNodes = parent.childNodes, + count = 0, + child, + ret, + len = childNodes.length; + + for (; count < len; count++) { + child = childNodes[count]; + + if (child.nodeType === 1) { + index++; + ret = matchIndexByAb(index, a, b, child === el); + + if (ret !== undefined) { + return ret; + } + } + } + } + + return 0; + }, + 'nth-last-child': function (el, param) { + var ab = getAb(param), + a = ab.a, + b = ab.b; + + if (a === 0 && b === 0) { + return 0; + } + + var index = 0, + parent = el.parentNode; + + if (parent) { + var childNodes = parent.childNodes, + len = childNodes.length, + count = len - 1, + child, + ret; + + for (; count >= 0; count--) { + child = childNodes[count]; + + if (child.nodeType === 1) { + index++; + ret = matchIndexByAb(index, a, b, child === el); + + if (ret !== undefined) { + return ret; + } + } + } + } + + return 0; + }, + 'nth-of-type': function (el, param) { + var ab = getAb(param), + a = ab.a, + b = ab.b; + + if (a === 0 && b === 0) { + return 0; + } + + var index = 0, + parent = el.parentNode; + + if (parent) { + var childNodes = parent.childNodes, + elType = el.tagName, + count = 0, + child, + ret, + len = childNodes.length; + + for (; count < len; count++) { + child = childNodes[count]; + + if (child.tagName === elType) { + index++; + ret = matchIndexByAb(index, a, b, child === el); + + if (ret !== undefined) { + return ret; + } + } + } + } + + return 0; + }, + 'nth-last-of-type': function (el, param) { + var ab = getAb(param), + a = ab.a, + b = ab.b; + + if (a === 0 && b === 0) { + return 0; + } + + var index = 0, + parent = el.parentNode; + + if (parent) { + var childNodes = parent.childNodes, + len = childNodes.length, + elType = el.tagName, + count = len - 1, + child, + ret; + + for (; count >= 0; count--) { + child = childNodes[count]; + + if (child.tagName === elType) { + index++; + ret = matchIndexByAb(index, a, b, child === el); + + if (ret !== undefined) { + return ret; + } + } + } + } + + return 0; + }, + lang: function (el, lang) { + var elLang; + lang = unEscape(lang.toLowerCase()); + + do { + if (elLang = isContextXML ? el.getAttribute('xml:lang') || el.getAttribute('lang') : el.lang) { + elLang = elLang.toLowerCase(); + return elLang === lang || elLang.indexOf(lang + '-') === 0; + } + } while ((el = el.parentNode) && el.nodeType === 1); + + return false; + }, + not: function (el, negationArg) { + return !matchExpr[negationArg.t](el, negationArg.value); + } +}; +var pseudoIdentExpr = { + empty: function (el) { + var childNodes = el.childNodes, + index = 0, + len = childNodes.length - 1, + child, + nodeType; + + for (; index < len; index++) { + child = childNodes[index]; + nodeType = child.nodeType; // only element nodes and content nodes + // (such as Dom [Dom-LEVEL-3-CORE] text nodes, + // CDATA nodes, and entity references + + if (nodeType === 1 || nodeType === 3 || nodeType === 4 || nodeType === 5) { + return 0; + } + } + + return 1; + }, + root: function (el) { + if (el.nodeType === 9) { + return true; + } + + return el.ownerDocument && el === el.ownerDocument.documentElement; + }, + 'first-child': function (el) { + return pseudoFnExpr['nth-child'](el, 1); + }, + 'last-child': function (el) { + return pseudoFnExpr['nth-last-child'](el, 1); + }, + 'first-of-type': function (el) { + return pseudoFnExpr['nth-of-type'](el, 1); + }, + 'last-of-type': function (el) { + return pseudoFnExpr['nth-last-of-type'](el, 1); + }, + 'only-child': function (el) { + return pseudoIdentExpr['first-child'](el) && pseudoIdentExpr['last-child'](el); + }, + 'only-of-type': function (el) { + return pseudoIdentExpr['first-of-type'](el) && pseudoIdentExpr['last-of-type'](el); + }, + focus: function (el) { + var doc = el.ownerDocument; + return doc && el === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(el.type || el.href || el.tabIndex >= 0); + }, + target: function (el) { + var hash = location.hash; + return hash && hash.slice(1) === getAttr(el, 'id'); + }, + enabled: function (el) { + return !el.disabled; + }, + disabled: function (el) { + return el.disabled; + }, + checked: function (el) { + var nodeName = el.nodeName.toLowerCase(); + return nodeName === 'input' && el.checked || nodeName === 'option' && el.selected; + } +}; +var attributeExpr = { + '~=': function (elValue, value) { + if (!value || value.indexOf(' ') > -1) { + return 0; + } + + return (' ' + elValue + ' ').indexOf(' ' + value + ' ') !== -1; + }, + '|=': function (elValue, value) { + return (' ' + elValue).indexOf(' ' + value + '-') !== -1; + }, + '^=': function (elValue, value) { + return value && util.startsWith(elValue, value); + }, + '$=': function (elValue, value) { + return value && util.endsWith(elValue, value); + }, + '*=': function (elValue, value) { + return value && elValue.indexOf(value) !== -1; + }, + '=': function (elValue, value) { + return elValue === value; + } +}; +var relativeExpr = { + '>': { + dir: 'parentNode', + immediate: 1 + }, + ' ': { + dir: 'parentNode' + }, + '+': { + dir: 'previousSibling', + immediate: 1 + }, + '~': { + dir: 'previousSibling' + } +}; +matchExpr = { + tag: isTag, + cls: hasSingleClass, + id: function (el, value) { + return getAttr(el, 'id') === value; + }, + attrib: function (el, value) { + var name = value.ident; + + if (!isContextXML) { + name = name.toLowerCase(); + } + + var elValue = getAttr(el, name); + var match = value.match; + + if (!match && elValue !== undefined) { + return 1; + } else if (match) { + if (elValue === undefined) { + return 0; + } + + var matchFn = attributeExpr[match]; + + if (matchFn) { + return matchFn(elValue + '', value.value + ''); + } + } + + return 0; + }, + pseudo: function (el, value) { + var fn, fnStr, ident; + + if (fnStr = value.fn) { + if (!(fn = pseudoFnExpr[fnStr])) { + throw new SyntaxError('Syntax error: not support pseudo: ' + fnStr); + } + + return fn(el, value.param); + } + + if (ident = value.ident) { + if (!pseudoIdentExpr[ident]) { + throw new SyntaxError('Syntax error: not support pseudo: ' + ident); + } + + return pseudoIdentExpr[ident](el); + } + + return 0; + } +}; + +function unEscape(str) { + return str.replace(unescape, unescapeFn); +} + +parser.lexer.yy = { + trim: util.trim, + unEscape: unEscape, + unEscapeStr: function (str) { + return this.unEscape(str.slice(1, -1)); + } +}; + +function resetStatus() { + subMatchesCache = {}; +} + +function dir(el, direction) { + do { + el = el[direction]; + } while (el && el.nodeType !== 1); + + return el; +} + +function getAb(param) { + var a = 0, + match, + b = 0; + + if (typeof param === 'number') { + b = param; + } else if (param === 'odd') { + a = 2; + b = 1; + } else if (param === 'even') { + a = 2; + b = 0; + } else if (match = param.replace(/\s/g, '').match(aNPlusB)) { + if (match[1]) { + a = parseInt(match[2], 10); + + if (isNaN(a)) { + if (match[2] === '-') { + a = -1; + } else { + a = 1; + } + } + } else { + a = 0; + } + + b = parseInt(match[3], 10) || 0; + } + + return { + a: a, + b: b + }; +} + +function matchIndexByAb(index, a, b, eq) { + if (a === 0) { + if (index === b) { + return eq; + } + } else { + if ((index - b) / a >= 0 && (index - b) % a === 0 && eq) { + return 1; + } + } + + return undefined; +} + +function isXML(elem) { + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName.toLowerCase() !== 'html' : false; +} + +function matches(str, seeds) { + return select$1(str, null, seeds); +} + +function singleMatch(el, match) { + if (!match) { + return true; + } + + if (!el) { + return false; + } + + if (el.nodeType === 9) { + return false; + } + + var matched = 1, + matchSuffix = match.suffix, + matchSuffixLen, + matchSuffixIndex; + + if (match.t === 'tag') { + matched &= matchExpr.tag(el, match.value); + } + + if (matched && matchSuffix) { + matchSuffixLen = matchSuffix.length; + matchSuffixIndex = 0; + + for (; matched && matchSuffixIndex < matchSuffixLen; matchSuffixIndex++) { + var singleMatchSuffix = matchSuffix[matchSuffixIndex], + singleMatchSuffixType = singleMatchSuffix.t; + + if (matchExpr[singleMatchSuffixType]) { + matched &= matchExpr[singleMatchSuffixType](el, singleMatchSuffix.value); + } + } + } + + return matched; +} // match by adjacent immediate single selector match + + +function matchImmediate(el, match) { + var matched = 1, + startEl = el, + relativeOp, + startMatch = match; + + do { + matched &= singleMatch(el, match); + + if (matched) { + // advance + match = match && match.prev; + + if (!match) { + return true; + } + + relativeOp = relativeExpr[match.nextCombinator]; + el = dir(el, relativeOp.dir); + + if (!relativeOp.immediate) { + return { + // advance for non-immediate + el: el, + match: match + }; + } + } else { + relativeOp = relativeExpr[match.nextCombinator]; + + if (relativeOp.immediate) { + // retreat but advance startEl + return { + el: dir(startEl, relativeExpr[startMatch.nextCombinator].dir), + match: startMatch + }; + } else { + // advance (before immediate match + jump unmatched) + return { + el: el && dir(el, relativeOp.dir), + match: match + }; + } + } + } while (el); // only occur when match immediate + + + return { + el: dir(startEl, relativeExpr[startMatch.nextCombinator].dir), + match: startMatch + }; +} // find fixed part, fixed with seeds + + +function findFixedMatchFromHead(el, head) { + var relativeOp, + cur = head; + + do { + if (!singleMatch(el, cur)) { + return null; + } + + cur = cur.prev; + + if (!cur) { + return true; + } + + relativeOp = relativeExpr[cur.nextCombinator]; + el = dir(el, relativeOp.dir); + } while (el && relativeOp.immediate); + + if (!el) { + return null; + } + + return { + el: el, + match: cur + }; +} + +function genId(el) { + var selectorId; + + if (isContextXML) { + if (!(selectorId = el.getAttribute(EXPANDO_SELECTOR_KEY))) { + el.setAttribute(EXPANDO_SELECTOR_KEY, selectorId = +new Date() + '_' + ++uuid); + } + } else { + if (!(selectorId = el[EXPANDO_SELECTOR_KEY])) { + selectorId = el[EXPANDO_SELECTOR_KEY] = +new Date() + '_' + ++uuid; + } + } + + return selectorId; +} + +function matchSub(el, match) { + var selectorId = genId(el), + matchKey; + matchKey = selectorId + '_' + (match.order || 0); + + if (matchKey in subMatchesCache) { + return subMatchesCache[matchKey]; + } + + subMatchesCache[matchKey] = matchSubInternal(el, match); + return subMatchesCache[matchKey]; +} // recursive match by sub selector string from right to left +// grouped by immediate selectors + + +function matchSubInternal(el, match) { + var matchImmediateRet = matchImmediate(el, match); + + if (matchImmediateRet === true) { + return true; + } else { + el = matchImmediateRet.el; + match = matchImmediateRet.match; + + while (el) { + if (matchSub(el, match)) { + return true; + } + + el = dir(el, relativeExpr[match.nextCombinator].dir); + } + + return false; + } +} + +function select$1(str, context, seeds) { + if (!caches[str]) { + caches[str] = parser.parse(str); + } + + var selector = caches[str], + groupIndex = 0, + groupLen = selector.length, + contextDocument, + group, + ret = []; + + if (seeds) { + context = context || seeds[0].ownerDocument; + } + + contextDocument = context && context.ownerDocument || typeof document !== 'undefined' && document; + + if (context && context.nodeType === 9 && !contextDocument) { + contextDocument = context; + } + + context = context || contextDocument; + isContextXML = isXML(context); + + for (; groupIndex < groupLen; groupIndex++) { + resetStatus(); + group = selector[groupIndex]; + var suffix = group.suffix, + suffixIndex, + suffixLen, + seedsIndex, + mySeeds = seeds, + seedsLen, + id = null; + + if (!mySeeds) { + if (suffix && !isContextXML) { + suffixIndex = 0; + suffixLen = suffix.length; + + for (; suffixIndex < suffixLen; suffixIndex++) { + var singleSuffix = suffix[suffixIndex]; + + if (singleSuffix.t === 'id') { + id = singleSuffix.value; + break; + } + } + } + + if (id) { + // http://yiminghe.github.io/lab/playground/fragment-selector/selector.html + var doesNotHasById = !context.getElementById, + contextInDom = util.contains(contextDocument, context), + tmp = doesNotHasById ? contextInDom ? contextDocument.getElementById(id) : null : context.getElementById(id); // id bug + // https://github.com/kissyteam/kissy/issues/67 + + if (!tmp && doesNotHasById || tmp && getAttr(tmp, 'id') !== id) { + var tmps = util.getElementsByTagName('*', context), + tmpLen = tmps.length, + tmpI = 0; + + for (; tmpI < tmpLen; tmpI++) { + tmp = tmps[tmpI]; + + if (getAttr(tmp, 'id') === id) { + mySeeds = [tmp]; + break; + } + } + + if (tmpI === tmpLen) { + mySeeds = []; + } + } else { + if (contextInDom && tmp && context !== contextDocument) { + tmp = util.contains(context, tmp) ? tmp : null; + } + + mySeeds = tmp ? [tmp] : []; + } + } else { + mySeeds = util.getElementsByTagName(group.value || '*', context); + } + } + + seedsIndex = 0; + seedsLen = mySeeds.length; + + if (!seedsLen) { + continue; + } + + for (; seedsIndex < seedsLen; seedsIndex++) { + var seed = mySeeds[seedsIndex]; + var matchHead = findFixedMatchFromHead(seed, group); + + if (matchHead === true) { + ret.push(seed); + } else if (matchHead) { + if (matchSub(matchHead.el, matchHead.match)) { + ret.push(seed); + } + } + } + } + + if (groupLen > 1) { + ret = util.unique(ret); + } + + return ret; +} + +var querySelector$1 = select$1; + +select$1.parse = function (str) { + return parser.parse(str); +}; + +select$1.matches = matches; +select$1.util = util; +select$1.version = '@VERSION@'; + +var querySelector = querySelector$1; + +var hyphenExpression = /-+([a-z])/gi; + +function upperCaseFirstMatch(match, c, offset) { + if (offset !== 0) { + return c.toUpperCase(); + } else { + return c; + } +} + +function camelCase$2(str) { + var camelCased = str.replace(hyphenExpression, upperCaseFirstMatch); + hyphenExpression.lastIndex = 0; + return camelCased; +} + +var camelCase_1 = camelCase$2; + +function isString$1(value) { + return typeof value === 'string'; +} + +var isString_1 = isString$1; + +function isUndefined$1(value) { + return typeof value === 'undefined'; +} + +var isUndefined_1 = isUndefined$1; + +function assign$1(dest) { + var args = arguments; + var source; + + for (var i = 1; i < args.length; i++) { + source = args[i]; + + for (var key in source) { + dest[key] = source[key]; + } + } + + return dest; +} + +var assign_1 = assign$1; + +function mapValues$2(source, fn) { + var destination = {}; + + for (var key in source) { + if (source.hasOwnProperty(key)) { + destination[key] = fn(source[key]); + } + } + + return destination; +} + +var mapValues_1 = mapValues$2; + +var camelCase$1 = camelCase_1; + +function styleCamelCase$1(name) { + var camel = camelCase$1(name); // Detect if the style property is already camelCased + // To not convert Webkit*, Moz* and O* to lowercase + + if (camel.charAt(0).toUpperCase() === name.charAt(0)) { + return name.charAt(0) + camel.slice(1); + } + + if (name.charAt(0) === '-') { + return camel.indexOf('ms') === 0 ? camel : camel.charAt(0).toUpperCase() + camel.slice(1); + } else { + return camel; + } +} + +var styleCamelCase_1 = styleCamelCase$1; + +var React$2 = require('react'); + +var styleAttr = lib; + +var querySelectorAll = querySelector; + +var camelCase = camelCase_1; + +var isString = isString_1; + +var isUndefined = isUndefined_1; + +var assign = assign_1; + +var mapValues$1 = mapValues_1; + +var styleCamelCase = styleCamelCase_1; + +function element$1() { + function Element(nodeName, parentNode) { + this.nodeName = nodeName; + this.parentNode = parentNode; + this.childNodes = []; + this.eventListeners = {}; + this.text = ''; + var self = this; + var props = this.props = { + ref: function (component) { + self.component = component; + }, + style: { + setProperty: function (name, value) { + props.style[styleCamelCase(name)] = value; + }, + getProperty: function (name) { + return props.style[styleCamelCase(name)] || ''; + }, + getPropertyValue: function (name) { + return props.style.getProperty(name); + }, + removeProperty: function (name) { + delete props.style[styleCamelCase(name)]; + } + } + }; + this.style = props.style; + } + + Element.ELEMENT_NODE = 1; + Element.DOCUMENT_POSITION_DISCONNECTED = 1; + Element.DOCUMENT_POSITION_PRECEDING = 2; + Element.DOCUMENT_POSITION_FOLLOWING = 4; + Element.DOCUMENT_POSITION_CONTAINS = 8; + Element.DOCUMENT_POSITION_CONTAINED_BY = 16; + Element.prototype.nodeType = 1; // This was easy to do with Vim. + // Just saying. + + Element.prototype.eventNameMappings = { + 'blur': 'onBlur', + 'change': 'onChange', + 'click': 'onClick', + 'contextmenu': 'onContextMenu', + 'copy': 'onCopy', + 'cut': 'onCut', + 'doubleclick': 'onDoubleClick', + 'drag': 'onDrag', + 'dragend': 'onDragEnd', + 'dragenter': 'onDragEnter', + 'dragexit': 'onDragExit', + 'dragleave': 'onDragLeave', + 'dragover': 'onDragOver', + 'dragstart': 'onDragStart', + 'drop': 'onDrop', + 'error': 'onError', + 'focus': 'onFocus', + 'input': 'onInput', + 'keydown': 'onKeyDown', + 'keypress': 'onKeyPress', + 'keyup': 'onKeyUp', + 'load': 'onLoad', + 'mousedown': 'onMouseDown', + 'mouseenter': 'onMouseEnter', + 'mouseleave': 'onMouseLeave', + 'mousemove': 'onMouseMove', + 'mouseout': 'onMouseOut', + 'mouseover': 'onMouseOver', + 'mouseup': 'onMouseUp', + 'paste': 'onPaste', + 'scroll': 'onScroll', + 'submit': 'onSubmit', + 'touchcancel': 'onTouchCancel', + 'touchend': 'onTouchEnd', + 'touchmove': 'onTouchMove', + 'touchstart': 'onTouchStart', + 'wheel': 'onWheel' + }; + Element.prototype.skipNameTransformationExpressions = [/^data-/, /^aria-/]; + Element.prototype.attributeNameMappings = { + 'class': 'className' + }; + + Element.prototype.attributeToPropName = function (name) { + var skipTransformMatches = this.skipNameTransformationExpressions.map(function (expr) { + return expr.test(name); + }); + + if (skipTransformMatches.some(Boolean)) { + return name; + } else { + return this.attributeNameMappings[name] || camelCase(name); + } + }; + + Element.prototype.setAttribute = function (name, value) { + if (name === 'style' && isString(value)) { + var styles = styleAttr.parse(value); + + for (var key in styles) { + this.style.setProperty(key, styles[key]); + } + } else { + this.props[this.attributeToPropName(name)] = value; + } + }; + + Element.prototype.getAttribute = function (name) { + return this.props[this.attributeToPropName(name)]; + }; + + Element.prototype.getAttributeNode = function (name) { + var value = this.getAttribute(name); + + if (!isUndefined(value)) { + return { + value: value, + specified: true + }; + } + }; + + Element.prototype.removeAttribute = function (name) { + delete this.props[this.attributeToPropName(name)]; + }; + + Element.prototype.eventToPropName = function (name) { + return this.eventNameMappings[name] || name; + }; + + Element.prototype.addEventListener = function (name, fn) { + var prop = this.eventToPropName(name); + this.eventListeners[prop] = this.eventListeners[prop] || []; + this.eventListeners[prop].push(fn); + }; + + Element.prototype.removeEventListener = function (name, fn) { + var listeners = this.eventListeners[this.eventToPropName(name)]; + + if (listeners) { + var match = listeners.indexOf(fn); + + if (match !== -1) { + listeners.splice(match, 1); + } + } + }; + + Element.prototype.appendChild = function (el) { + if (el instanceof Element) { + el.parentNode = this; + } + + this.childNodes.push(el); + return el; + }; + + Element.prototype.insertBefore = function (el, before) { + var index = this.childNodes.indexOf(before); + el.parentNode = this; + + if (index !== -1) { + this.childNodes.splice(index, 0, el); + } else { + this.childNodes.push(el); + } + + return el; + }; + + Element.prototype.removeChild = function (child) { + var target = this.childNodes.indexOf(child); + this.childNodes.splice(target, 1); + }; + + Element.prototype.querySelector = function () { + return this.querySelectorAll.apply(this, arguments)[0] || null; + }; + + Element.prototype.querySelectorAll = function (selector) { + if (!selector) { + throw new Error('Not enough arguments'); + } + + return querySelectorAll(selector, this); + }; + + Element.prototype.getElementsByTagName = function (nodeName) { + var children = this.children; + + if (children.length === 0) { + return []; + } else { + var matches; + + if (nodeName !== '*') { + matches = children.filter(function (el) { + return el.nodeName === nodeName; + }); + } else { + matches = children; + } + + var childMatches = children.map(function (el) { + return el.getElementsByTagName(nodeName); + }); + return matches.concat.apply(matches, childMatches); + } + }; + + Element.prototype.getElementById = function (id) { + var children = this.children; + + if (children.length === 0) { + return null; + } else { + var match = children.filter(function (el) { + return el.getAttribute('id') === id; + })[0]; + + if (match) { + return match; + } else { + var childMatches = children.map(function (el) { + return el.getElementById(id); + }); + return childMatches.filter(function (match) { + return match !== null; + })[0] || null; + } + } + }; + + Element.prototype.getBoundingClientRect = function () { + if (!this.component) { + return undefined; + } + + return this.component.getBoundingClientRect(); + }; + + Element.prototype.cloneNode = function (deep) { + // if deep is not provided, it default to true + if (deep === undefined) { + deep = true; + } + + var el = new Element(this.nodeName, this.parentNode); // copy nodeType + + if (this.nodeType) { + el.nodeType = this.nodeType; + } + + var k; // copy the props + + for (k in this.props) { + if (this.props.hasOwnProperty(k) && k !== 'ref' && k !== 'style') { + el.props[k] = this.props[k]; + } + } // copy the styles + + + for (k in this.style) { + if (this.style.hasOwnProperty(k) && ['setProperty', 'getProperty', 'getPropertyValue', 'removeProperty'].indexOf(k) === -1) { + el.style[k] = this.style[k]; + } + } + + if (deep) { + el.childNodes = this.childNodes.map(function (childEl) { + if (!childEl.nodeType) { + // It's a React element, let React clone it + return React$2.cloneElement(childEl); + } // either Element or true dom element + + + childEl = childEl.cloneNode(true); // if a faux dom element, modify parentNode + + if (childEl instanceof Element) { + childEl.parentNode = el; + } + + return childEl; + }); + } + + return el; + }; + + Element.prototype.toReact = function (index) { + index = index || 0; + var props = assign({}, this.props); + props.style = assign({}, props.style); + var originalElement = this; + + function uniqueKey() { + return 'faux-dom-' + index; + } + + if (isUndefined(props.key)) { + props.key = uniqueKey(); + } + + delete props.style.setProperty; + delete props.style.getProperty; + delete props.style.getPropertyValue; + delete props.style.removeProperty; + assign(props, mapValues$1(this.eventListeners, function (listeners) { + return function (syntheticEvent) { + var event; + + if (syntheticEvent) { + event = syntheticEvent.nativeEvent; + event.syntheticEvent = syntheticEvent; + } + + mapValues$1(listeners, function (listener) { + listener.call(originalElement, event); + }); + }; + })); + return React$2.createElement(this.nodeName, props, this.text || this.children.map(function (el, i) { + if (el instanceof Element) { + return el.toReact(i); + } else { + return el; + } + })); + }; + + Element.prototype.compareDocumentPosition = function (other) { + function getFirstNodeByOrder(nodes, nodeOne, nodeTwo) { + return nodes.reduce(function (result, node) { + if (result !== false) { + return result; + } else if (node === nodeOne) { + return nodeOne; + } else if (node === nodeTwo) { + return nodeTwo; + } else if (node.childNodes) { + return getFirstNodeByOrder(node.childNodes, nodeOne, nodeTwo); + } else { + return false; + } + }, false); + } + + function isAncestor(source, target) { + while (target.parentNode) { + target = target.parentNode; + + if (target === source) { + return true; + } + } + + return false; + } + + function eitherContains(left, right) { + return isAncestor(left, right) ? Element.DOCUMENT_POSITION_CONTAINED_BY + Element.DOCUMENT_POSITION_FOLLOWING : isAncestor(right, left) ? Element.DOCUMENT_POSITION_CONTAINS + Element.DOCUMENT_POSITION_PRECEDING : false; + } + + function getRootNode(node) { + while (node.parentNode) { + node = node.parentNode; + } + + return node; + } + + if (this === other) { + return 0; + } + + var referenceRoot = getRootNode(this); + var otherRoot = getRootNode(other); + + if (referenceRoot !== otherRoot) { + return Element.DOCUMENT_POSITION_DISCONNECTED; + } + + var result = eitherContains(this, other); + + if (result) { + return result; + } + + var first = getFirstNodeByOrder([referenceRoot], this, other); + return first === this ? Element.DOCUMENT_POSITION_FOLLOWING : first === other ? Element.DOCUMENT_POSITION_PRECEDING : Element.DOCUMENT_POSITION_DISCONNECTED; + }; + + Object.defineProperties(Element.prototype, { + nextSibling: { + get: function () { + var siblings = this.parentNode.children; + var me = siblings.indexOf(this); + return siblings[me + 1]; + } + }, + previousSibling: { + get: function () { + var siblings = this.parentNode.children; + var me = siblings.indexOf(this); + return siblings[me - 1]; + } + }, + innerHTML: { + get: function () { + return this.text; + }, + set: function (text) { + this.text = text; + } + }, + textContent: { + get: function () { + return this.text; + }, + set: function (text) { + this.text = text; + } + }, + children: { + get: function () { + // So far nodes created by this library are all of nodeType 1 (elements), + // but this could change in the future. + return this.childNodes.filter(function (el) { + if (!el.nodeType) { + // It's a React element, we always add it + return true; + } // It's a HTML node. We want to filter to have only nodes with type 1 + + + return el.nodeType === 1; + }); + } + } + }); // These NS methods are called by things like D3 if it spots a namespace. + // Like xlink:href. I don't care about namespaces, so these functions have NS aliases created. + + var namespaceMethods = ['setAttribute', 'getAttribute', 'getAttributeNode', 'removeAttribute', 'getElementsByTagName', 'getElementById']; + namespaceMethods.forEach(function (name) { + var fn = Element.prototype[name]; + + Element.prototype[name + 'NS'] = function () { + return fn.apply(this, Array.prototype.slice.call(arguments, 1)); + }; + }); + return Element; +} + +var _element = element$1; + +function window$2() { + var Window = { + getComputedStyle: function (node) { + return { + getPropertyValue: node.style.getProperty + }; + } + }; + return Window; +} + +var _window = window$2; + +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +var _assign = objectAssign; // -- Inlined from fbjs -- + + +var emptyObject = {}; + +{ + Object.freeze(emptyObject); +} + +var validateFormat = function validateFormat(format) {}; + +{ + validateFormat = function validateFormat(format) { + if (format === undefined) { + throw new Error('invariant requires an error message argument'); + } + }; +} + +function _invariant(condition, format, a, b, c, d, e, f) { + validateFormat(format); + + if (!condition) { + var error; + + if (format === undefined) { + error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.'); + } else { + var args = [a, b, c, d, e, f]; + var argIndex = 0; + error = new Error(format.replace(/%s/g, function () { + return args[argIndex++]; + })); + error.name = 'Invariant Violation'; + } + + error.framesToPop = 1; // we don't care about invariant's own frame + + throw error; + } +} + +var warning = function () {}; + +{ + var printWarning = function printWarning(format) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + var argIndex = 0; + var message = 'Warning: ' + format.replace(/%s/g, function () { + return args[argIndex++]; + }); + + if (typeof console !== 'undefined') { + console.error(message); + } + + try { + // --- Welcome to debugging React --- + // This error was thrown as a convenience so that you can use this stack + // to find the callsite that caused this warning to fire. + throw new Error(message); + } catch (x) {} + }; + + warning = function warning(condition, format) { + if (format === undefined) { + throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument'); + } + + if (format.indexOf('Failed Composite propType: ') === 0) { + return; // Ignore CompositeComponent proptype check. + } + + if (!condition) { + for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { + args[_key2 - 2] = arguments[_key2]; + } + + printWarning.apply(undefined, [format].concat(args)); + } + }; +} // /-- Inlined from fbjs -- + + +var MIXINS_KEY = 'mixins'; // Helper function to allow the creation of anonymous functions which do not +// have .name set to the name of the variable being assigned to. + +function identity(fn) { + return fn; +} + +var ReactPropTypeLocationNames; + +{ + ReactPropTypeLocationNames = { + prop: 'prop', + context: 'context', + childContext: 'child context' + }; +} + +function factory$3(ReactComponent, isValidElement, ReactNoopUpdateQueue) { + /** + * Policies that describe methods in `ReactClassInterface`. + */ + var injectedMixins = []; + /** + * Composite components are higher-level components that compose other composite + * or host components. + * + * To create a new type of `ReactClass`, pass a specification of + * your new class to `React.createClass`. The only requirement of your class + * specification is that you implement a `render` method. + * + * var MyComponent = React.createClass({ + * render: function() { + * return
Hello World
; + * } + * }); + * + * The class specification supports a specific protocol of methods that have + * special meaning (e.g. `render`). See `ReactClassInterface` for + * more the comprehensive protocol. Any other properties and methods in the + * class specification will be available on the prototype. + * + * @interface ReactClassInterface + * @internal + */ + + var ReactClassInterface = { + /** + * An array of Mixin objects to include when defining your component. + * + * @type {array} + * @optional + */ + mixins: 'DEFINE_MANY', + + /** + * An object containing properties and methods that should be defined on + * the component's constructor instead of its prototype (static methods). + * + * @type {object} + * @optional + */ + statics: 'DEFINE_MANY', + + /** + * Definition of prop types for this component. + * + * @type {object} + * @optional + */ + propTypes: 'DEFINE_MANY', + + /** + * Definition of context types for this component. + * + * @type {object} + * @optional + */ + contextTypes: 'DEFINE_MANY', + + /** + * Definition of context types this component sets for its children. + * + * @type {object} + * @optional + */ + childContextTypes: 'DEFINE_MANY', + // ==== Definition methods ==== + + /** + * Invoked when the component is mounted. Values in the mapping will be set on + * `this.props` if that prop is not specified (i.e. using an `in` check). + * + * This method is invoked before `getInitialState` and therefore cannot rely + * on `this.state` or use `this.setState`. + * + * @return {object} + * @optional + */ + getDefaultProps: 'DEFINE_MANY_MERGED', + + /** + * Invoked once before the component is mounted. The return value will be used + * as the initial value of `this.state`. + * + * getInitialState: function() { + * return { + * isOn: false, + * fooBaz: new BazFoo() + * } + * } + * + * @return {object} + * @optional + */ + getInitialState: 'DEFINE_MANY_MERGED', + + /** + * @return {object} + * @optional + */ + getChildContext: 'DEFINE_MANY_MERGED', + + /** + * Uses props from `this.props` and state from `this.state` to render the + * structure of the component. + * + * No guarantees are made about when or how often this method is invoked, so + * it must not have side effects. + * + * render: function() { + * var name = this.props.name; + * return
Hello, {name}!
; + * } + * + * @return {ReactComponent} + * @required + */ + render: 'DEFINE_ONCE', + // ==== Delegate methods ==== + + /** + * Invoked when the component is initially created and about to be mounted. + * This may have side effects, but any external subscriptions or data created + * by this method must be cleaned up in `componentWillUnmount`. + * + * @optional + */ + componentWillMount: 'DEFINE_MANY', + + /** + * Invoked when the component has been mounted and has a DOM representation. + * However, there is no guarantee that the DOM node is in the document. + * + * Use this as an opportunity to operate on the DOM when the component has + * been mounted (initialized and rendered) for the first time. + * + * @param {DOMElement} rootNode DOM element representing the component. + * @optional + */ + componentDidMount: 'DEFINE_MANY', + + /** + * Invoked before the component receives new props. + * + * Use this as an opportunity to react to a prop transition by updating the + * state using `this.setState`. Current props are accessed via `this.props`. + * + * componentWillReceiveProps: function(nextProps, nextContext) { + * this.setState({ + * likesIncreasing: nextProps.likeCount > this.props.likeCount + * }); + * } + * + * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop + * transition may cause a state change, but the opposite is not true. If you + * need it, you are probably looking for `componentWillUpdate`. + * + * @param {object} nextProps + * @optional + */ + componentWillReceiveProps: 'DEFINE_MANY', + + /** + * Invoked while deciding if the component should be updated as a result of + * receiving new props, state and/or context. + * + * Use this as an opportunity to `return false` when you're certain that the + * transition to the new props/state/context will not require a component + * update. + * + * shouldComponentUpdate: function(nextProps, nextState, nextContext) { + * return !equal(nextProps, this.props) || + * !equal(nextState, this.state) || + * !equal(nextContext, this.context); + * } + * + * @param {object} nextProps + * @param {?object} nextState + * @param {?object} nextContext + * @return {boolean} True if the component should update. + * @optional + */ + shouldComponentUpdate: 'DEFINE_ONCE', + + /** + * Invoked when the component is about to update due to a transition from + * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState` + * and `nextContext`. + * + * Use this as an opportunity to perform preparation before an update occurs. + * + * NOTE: You **cannot** use `this.setState()` in this method. + * + * @param {object} nextProps + * @param {?object} nextState + * @param {?object} nextContext + * @param {ReactReconcileTransaction} transaction + * @optional + */ + componentWillUpdate: 'DEFINE_MANY', + + /** + * Invoked when the component's DOM representation has been updated. + * + * Use this as an opportunity to operate on the DOM when the component has + * been updated. + * + * @param {object} prevProps + * @param {?object} prevState + * @param {?object} prevContext + * @param {DOMElement} rootNode DOM element representing the component. + * @optional + */ + componentDidUpdate: 'DEFINE_MANY', + + /** + * Invoked when the component is about to be removed from its parent and have + * its DOM representation destroyed. + * + * Use this as an opportunity to deallocate any external resources. + * + * NOTE: There is no `componentDidUnmount` since your component will have been + * destroyed by that point. + * + * @optional + */ + componentWillUnmount: 'DEFINE_MANY', + + /** + * Replacement for (deprecated) `componentWillMount`. + * + * @optional + */ + UNSAFE_componentWillMount: 'DEFINE_MANY', + + /** + * Replacement for (deprecated) `componentWillReceiveProps`. + * + * @optional + */ + UNSAFE_componentWillReceiveProps: 'DEFINE_MANY', + + /** + * Replacement for (deprecated) `componentWillUpdate`. + * + * @optional + */ + UNSAFE_componentWillUpdate: 'DEFINE_MANY', + // ==== Advanced methods ==== + + /** + * Updates the component's currently mounted DOM representation. + * + * By default, this implements React's rendering and reconciliation algorithm. + * Sophisticated clients may wish to override this. + * + * @param {ReactReconcileTransaction} transaction + * @internal + * @overridable + */ + updateComponent: 'OVERRIDE_BASE' + }; + /** + * Similar to ReactClassInterface but for static methods. + */ + + var ReactClassStaticInterface = { + /** + * This method is invoked after a component is instantiated and when it + * receives new props. Return an object to update state in response to + * prop changes. Return null to indicate no change to state. + * + * If an object is returned, its keys will be merged into the existing state. + * + * @return {object || null} + * @optional + */ + getDerivedStateFromProps: 'DEFINE_MANY_MERGED' + }; + /** + * Mapping from class specification keys to special processing functions. + * + * Although these are declared like instance properties in the specification + * when defining classes using `React.createClass`, they are actually static + * and are accessible on the constructor instead of the prototype. Despite + * being static, they must be defined outside of the "statics" key under + * which all other static methods are defined. + */ + + var RESERVED_SPEC_KEYS = { + displayName: function (Constructor, displayName) { + Constructor.displayName = displayName; + }, + mixins: function (Constructor, mixins) { + if (mixins) { + for (var i = 0; i < mixins.length; i++) { + mixSpecIntoComponent(Constructor, mixins[i]); + } + } + }, + childContextTypes: function (Constructor, childContextTypes) { + { + validateTypeDef(Constructor, childContextTypes, 'childContext'); + } + + Constructor.childContextTypes = _assign({}, Constructor.childContextTypes, childContextTypes); + }, + contextTypes: function (Constructor, contextTypes) { + { + validateTypeDef(Constructor, contextTypes, 'context'); + } + + Constructor.contextTypes = _assign({}, Constructor.contextTypes, contextTypes); + }, + + /** + * Special case getDefaultProps which should move into statics but requires + * automatic merging. + */ + getDefaultProps: function (Constructor, getDefaultProps) { + if (Constructor.getDefaultProps) { + Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps, getDefaultProps); + } else { + Constructor.getDefaultProps = getDefaultProps; + } + }, + propTypes: function (Constructor, propTypes) { + { + validateTypeDef(Constructor, propTypes, 'prop'); + } + + Constructor.propTypes = _assign({}, Constructor.propTypes, propTypes); + }, + statics: function (Constructor, statics) { + mixStaticSpecIntoComponent(Constructor, statics); + }, + autobind: function () {} + }; + + function validateTypeDef(Constructor, typeDef, location) { + for (var propName in typeDef) { + if (typeDef.hasOwnProperty(propName)) { + // use a warning instead of an _invariant so components + // don't show up in prod but only in __DEV__ + { + warning(typeof typeDef[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', Constructor.displayName || 'ReactClass', ReactPropTypeLocationNames[location], propName); + } + } + } + } + + function validateMethodOverride(isAlreadyDefined, name) { + var specPolicy = ReactClassInterface.hasOwnProperty(name) ? ReactClassInterface[name] : null; // Disallow overriding of base class methods unless explicitly allowed. + + if (ReactClassMixin.hasOwnProperty(name)) { + _invariant(specPolicy === 'OVERRIDE_BASE', 'ReactClassInterface: You are attempting to override ' + '`%s` from your class specification. Ensure that your method names ' + 'do not overlap with React methods.', name); + } // Disallow defining methods more than once unless explicitly allowed. + + + if (isAlreadyDefined) { + _invariant(specPolicy === 'DEFINE_MANY' || specPolicy === 'DEFINE_MANY_MERGED', 'ReactClassInterface: You are attempting to define ' + '`%s` on your component more than once. This conflict may be due ' + 'to a mixin.', name); + } + } + /** + * Mixin helper which handles policy validation and reserved + * specification keys when building React classes. + */ + + + function mixSpecIntoComponent(Constructor, spec) { + if (!spec) { + { + var typeofSpec = typeof spec; + var isMixinValid = typeofSpec === 'object' && spec !== null; + + { + warning(isMixinValid, "%s: You're attempting to include a mixin that is either null " + 'or not an object. Check the mixins included by the component, ' + 'as well as any mixins they include themselves. ' + 'Expected object but got %s.', Constructor.displayName || 'ReactClass', spec === null ? null : typeofSpec); + } + } + + return; + } + + _invariant(typeof spec !== 'function', "ReactClass: You're attempting to " + 'use a component class or function as a mixin. Instead, just use a ' + 'regular object.'); + + _invariant(!isValidElement(spec), "ReactClass: You're attempting to " + 'use a component as a mixin. Instead, just use a regular object.'); + + var proto = Constructor.prototype; + var autoBindPairs = proto.__reactAutoBindPairs; // By handling mixins before any other properties, we ensure the same + // chaining order is applied to methods with DEFINE_MANY policy, whether + // mixins are listed before or after these methods in the spec. + + if (spec.hasOwnProperty(MIXINS_KEY)) { + RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins); + } + + for (var name in spec) { + if (!spec.hasOwnProperty(name)) { + continue; + } + + if (name === MIXINS_KEY) { + // We have already handled mixins in a special case above. + continue; + } + + var property = spec[name]; + var isAlreadyDefined = proto.hasOwnProperty(name); + validateMethodOverride(isAlreadyDefined, name); + + if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) { + RESERVED_SPEC_KEYS[name](Constructor, property); + } else { + // Setup methods on prototype: + // The following member methods should not be automatically bound: + // 1. Expected ReactClass methods (in the "interface"). + // 2. Overridden methods (that were mixed in). + var isReactClassMethod = ReactClassInterface.hasOwnProperty(name); + var isFunction = typeof property === 'function'; + var shouldAutoBind = isFunction && !isReactClassMethod && !isAlreadyDefined && spec.autobind !== false; + + if (shouldAutoBind) { + autoBindPairs.push(name, property); + proto[name] = property; + } else { + if (isAlreadyDefined) { + var specPolicy = ReactClassInterface[name]; // These cases should already be caught by validateMethodOverride. + + _invariant(isReactClassMethod && (specPolicy === 'DEFINE_MANY_MERGED' || specPolicy === 'DEFINE_MANY'), 'ReactClass: Unexpected spec policy %s for key %s ' + 'when mixing in component specs.', specPolicy, name); // For methods which are defined more than once, call the existing + // methods before calling the new property, merging if appropriate. + + + if (specPolicy === 'DEFINE_MANY_MERGED') { + proto[name] = createMergedResultFunction(proto[name], property); + } else if (specPolicy === 'DEFINE_MANY') { + proto[name] = createChainedFunction(proto[name], property); + } + } else { + proto[name] = property; + + { + // Add verbose displayName to the function, which helps when looking + // at profiling tools. + if (typeof property === 'function' && spec.displayName) { + proto[name].displayName = spec.displayName + '_' + name; + } + } + } + } + } + } + } + + function mixStaticSpecIntoComponent(Constructor, statics) { + if (!statics) { + return; + } + + for (var name in statics) { + var property = statics[name]; + + if (!statics.hasOwnProperty(name)) { + continue; + } + + var isReserved = (name in RESERVED_SPEC_KEYS); + + _invariant(!isReserved, 'ReactClass: You are attempting to define a reserved ' + 'property, `%s`, that shouldn\'t be on the "statics" key. Define it ' + 'as an instance property instead; it will still be accessible on the ' + 'constructor.', name); + + var isAlreadyDefined = (name in Constructor); + + if (isAlreadyDefined) { + var specPolicy = ReactClassStaticInterface.hasOwnProperty(name) ? ReactClassStaticInterface[name] : null; + + _invariant(specPolicy === 'DEFINE_MANY_MERGED', 'ReactClass: You are attempting to define ' + '`%s` on your component more than once. This conflict may be ' + 'due to a mixin.', name); + + Constructor[name] = createMergedResultFunction(Constructor[name], property); + return; + } + + Constructor[name] = property; + } + } + /** + * Merge two objects, but throw if both contain the same key. + * + * @param {object} one The first object, which is mutated. + * @param {object} two The second object + * @return {object} one after it has been mutated to contain everything in two. + */ + + + function mergeIntoWithNoDuplicateKeys(one, two) { + _invariant(one && two && typeof one === 'object' && typeof two === 'object', 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.'); + + for (var key in two) { + if (two.hasOwnProperty(key)) { + _invariant(one[key] === undefined, 'mergeIntoWithNoDuplicateKeys(): ' + 'Tried to merge two objects with the same key: `%s`. This conflict ' + 'may be due to a mixin; in particular, this may be caused by two ' + 'getInitialState() or getDefaultProps() methods returning objects ' + 'with clashing keys.', key); + + one[key] = two[key]; + } + } + + return one; + } + /** + * Creates a function that invokes two functions and merges their return values. + * + * @param {function} one Function to invoke first. + * @param {function} two Function to invoke second. + * @return {function} Function that invokes the two argument functions. + * @private + */ + + + function createMergedResultFunction(one, two) { + return function mergedResult() { + var a = one.apply(this, arguments); + var b = two.apply(this, arguments); + + if (a == null) { + return b; + } else if (b == null) { + return a; + } + + var c = {}; + mergeIntoWithNoDuplicateKeys(c, a); + mergeIntoWithNoDuplicateKeys(c, b); + return c; + }; + } + /** + * Creates a function that invokes two functions and ignores their return vales. + * + * @param {function} one Function to invoke first. + * @param {function} two Function to invoke second. + * @return {function} Function that invokes the two argument functions. + * @private + */ + + + function createChainedFunction(one, two) { + return function chainedFunction() { + one.apply(this, arguments); + two.apply(this, arguments); + }; + } + /** + * Binds a method to the component. + * + * @param {object} component Component whose method is going to be bound. + * @param {function} method Method to be bound. + * @return {function} The bound method. + */ + + + function bindAutoBindMethod(component, method) { + var boundMethod = method.bind(component); + + { + boundMethod.__reactBoundContext = component; + boundMethod.__reactBoundMethod = method; + boundMethod.__reactBoundArguments = null; + var componentName = component.constructor.displayName; + var _bind = boundMethod.bind; + + boundMethod.bind = function (newThis) { + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } // User is trying to bind() an autobound method; we effectively will + // ignore the value of "this" that the user is trying to use, so + // let's warn. + + + if (newThis !== component && newThis !== null) { + { + warning(false, 'bind(): React component methods may only be bound to the ' + 'component instance. See %s', componentName); + } + } else if (!args.length) { + { + warning(false, 'bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See %s', componentName); + } + + return boundMethod; + } + + var reboundMethod = _bind.apply(boundMethod, arguments); + + reboundMethod.__reactBoundContext = component; + reboundMethod.__reactBoundMethod = method; + reboundMethod.__reactBoundArguments = args; + return reboundMethod; + }; + } + + return boundMethod; + } + /** + * Binds all auto-bound methods in a component. + * + * @param {object} component Component whose method is going to be bound. + */ + + + function bindAutoBindMethods(component) { + var pairs = component.__reactAutoBindPairs; + + for (var i = 0; i < pairs.length; i += 2) { + var autoBindKey = pairs[i]; + var method = pairs[i + 1]; + component[autoBindKey] = bindAutoBindMethod(component, method); + } + } + + var IsMountedPreMixin = { + componentDidMount: function () { + this.__isMounted = true; + } + }; + var IsMountedPostMixin = { + componentWillUnmount: function () { + this.__isMounted = false; + } + }; + /** + * Add more to the ReactClass base class. These are all legacy features and + * therefore not already part of the modern ReactComponent. + */ + + var ReactClassMixin = { + /** + * TODO: This will be deprecated because state should always keep a consistent + * type signature and the only use case for this, is to avoid that. + */ + replaceState: function (newState, callback) { + this.updater.enqueueReplaceState(this, newState, callback); + }, + + /** + * Checks whether or not this composite component is mounted. + * @return {boolean} True if mounted, false otherwise. + * @protected + * @final + */ + isMounted: function () { + { + warning(this.__didWarnIsMounted, '%s: isMounted is deprecated. Instead, make sure to clean up ' + 'subscriptions and pending requests in componentWillUnmount to ' + 'prevent memory leaks.', this.constructor && this.constructor.displayName || this.name || 'Component'); + this.__didWarnIsMounted = true; + } + + return !!this.__isMounted; + } + }; + + var ReactClassComponent = function () {}; + + _assign(ReactClassComponent.prototype, ReactComponent.prototype, ReactClassMixin); + /** + * Creates a composite component class given a class specification. + * See https://facebook.github.io/react/docs/top-level-api.html#react.createclass + * + * @param {object} spec Class specification (which must define `render`). + * @return {function} Component constructor function. + * @public + */ + + + function createClass(spec) { + // To keep our warnings more understandable, we'll use a little hack here to + // ensure that Constructor.name !== 'Constructor'. This makes sure we don't + // unnecessarily identify a class without displayName as 'Constructor'. + var Constructor = identity(function (props, context, updater) { + // This constructor gets overridden by mocks. The argument is used + // by mocks to assert on what gets mounted. + { + warning(this instanceof Constructor, 'Something is calling a React component directly. Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory'); + } // Wire up auto-binding + + + if (this.__reactAutoBindPairs.length) { + bindAutoBindMethods(this); + } + + this.props = props; + this.context = context; + this.refs = emptyObject; + this.updater = updater || ReactNoopUpdateQueue; + this.state = null; // ReactClasses doesn't have constructors. Instead, they use the + // getInitialState and componentWillMount methods for initialization. + + var initialState = this.getInitialState ? this.getInitialState() : null; + + { + // We allow auto-mocks to proceed as if they're returning null. + if (initialState === undefined && this.getInitialState._isMockFunction) { + // This is probably bad practice. Consider warning here and + // deprecating this convenience. + initialState = null; + } + } + + _invariant(typeof initialState === 'object' && !Array.isArray(initialState), '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent'); + + this.state = initialState; + }); + Constructor.prototype = new ReactClassComponent(); + Constructor.prototype.constructor = Constructor; + Constructor.prototype.__reactAutoBindPairs = []; + injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor)); + mixSpecIntoComponent(Constructor, IsMountedPreMixin); + mixSpecIntoComponent(Constructor, spec); + mixSpecIntoComponent(Constructor, IsMountedPostMixin); // Initialize the defaultProps property after all mixins have been merged. + + if (Constructor.getDefaultProps) { + Constructor.defaultProps = Constructor.getDefaultProps(); + } + + { + // This is a tag to indicate that the use of these method names is ok, + // since it's used with createClass. If it's not, then it's likely a + // mistake so we'll warn you to use the static property, property + // initializer or constructor respectively. + if (Constructor.getDefaultProps) { + Constructor.getDefaultProps.isReactClassApproved = {}; + } + + if (Constructor.prototype.getInitialState) { + Constructor.prototype.getInitialState.isReactClassApproved = {}; + } + } + + _invariant(Constructor.prototype.render, 'createClass(...): Class specification must implement a `render` method.'); + + { + warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component'); + warning(!Constructor.prototype.componentWillRecieveProps, '%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', spec.displayName || 'A component'); + warning(!Constructor.prototype.UNSAFE_componentWillRecieveProps, '%s has a method called UNSAFE_componentWillRecieveProps(). ' + 'Did you mean UNSAFE_componentWillReceiveProps()?', spec.displayName || 'A component'); + } // Reduce time spent doing lookups by setting these on the prototype. + + + for (var methodName in ReactClassInterface) { + if (!Constructor.prototype[methodName]) { + Constructor.prototype[methodName] = null; + } + } + + return Constructor; + } + + return createClass; +} + +var factory_1$1 = factory$3; + +/** + * Copyright (c) 2013-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +var React$1 = require('react'); + +var factory$2 = factory_1$1; + +if (typeof React$1 === 'undefined') { + throw Error('create-react-class could not find the React object. If you are using script tags, ' + 'make sure that React is being loaded before create-react-class.'); +} // Hack to grab NoopUpdateQueue from isomorphic React + + +var ReactNoopUpdateQueue = new React$1.Component().updater; +var createReactClass$1 = factory$2(React$1.Component, React$1.isValidElement, ReactNoopUpdateQueue); + +var reactIs = reactIs$1.exports; +/** + * Copyright 2015, Yahoo! Inc. + * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. + */ + + +var REACT_STATICS = { + childContextTypes: true, + contextType: true, + contextTypes: true, + defaultProps: true, + displayName: true, + getDefaultProps: true, + getDerivedStateFromError: true, + getDerivedStateFromProps: true, + mixins: true, + propTypes: true, + type: true +}; +var KNOWN_STATICS = { + name: true, + length: true, + prototype: true, + caller: true, + callee: true, + arguments: true, + arity: true +}; +var FORWARD_REF_STATICS = { + '$$typeof': true, + render: true, + defaultProps: true, + displayName: true, + propTypes: true +}; +var MEMO_STATICS = { + '$$typeof': true, + compare: true, + defaultProps: true, + displayName: true, + propTypes: true, + type: true +}; +var TYPE_STATICS = {}; +TYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS; +TYPE_STATICS[reactIs.Memo] = MEMO_STATICS; + +function getStatics(component) { + // React v16.11 and below + if (reactIs.isMemo(component)) { + return MEMO_STATICS; + } // React v16.12 and above + + + return TYPE_STATICS[component['$$typeof']] || REACT_STATICS; +} + +var defineProperty = Object.defineProperty; +var getOwnPropertyNames = Object.getOwnPropertyNames; +var getOwnPropertySymbols = Object.getOwnPropertySymbols; +var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; +var getPrototypeOf = Object.getPrototypeOf; +var objectPrototype = Object.prototype; + +function hoistNonReactStatics$1(targetComponent, sourceComponent, blacklist) { + if (typeof sourceComponent !== 'string') { + // don't hoist over string (html) components + if (objectPrototype) { + var inheritedComponent = getPrototypeOf(sourceComponent); + + if (inheritedComponent && inheritedComponent !== objectPrototype) { + hoistNonReactStatics$1(targetComponent, inheritedComponent, blacklist); + } + } + + var keys = getOwnPropertyNames(sourceComponent); + + if (getOwnPropertySymbols) { + keys = keys.concat(getOwnPropertySymbols(sourceComponent)); + } + + var targetStatics = getStatics(targetComponent); + var sourceStatics = getStatics(sourceComponent); + + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + + if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) { + var descriptor = getOwnPropertyDescriptor(sourceComponent, key); + + try { + // Avoid failures from read-only properties + defineProperty(targetComponent, key, descriptor); + } catch (e) {} + } + } + } + + return targetComponent; +} + +var hoistNonReactStatics_cjs = hoistNonReactStatics$1; + +var React = require('react'); + +var createReactClass = createReactClass$1; + +var mapValues = mapValues_1; + +var hoistNonReactStatics = hoistNonReactStatics_cjs; + +function withFauxDOMFactory(Element) { + function withFauxDOM(WrappedComponent) { + var WithFauxDOM = createReactClass({ + componentWillMount: function () { + this.connectedFauxDOM = {}; + this.animateFauxDOMUntil = 0; + }, + componentWillUnmount: function () { + this.stopAnimatingFauxDOM(); + this.stopDrawFauxDOM(); + }, + connectFauxDOM: function (node, name, discardNode) { + if (!this.connectedFauxDOM[name] || discardNode) { + this.connectedFauxDOM[name] = typeof node !== 'string' ? node : new Element(node); + this.drawFauxDOMTimeout = setTimeout(this.drawFauxDOM); + } + + return this.connectedFauxDOM[name]; + }, + drawFauxDOM: function () { + var virtualDOM = mapValues(this.connectedFauxDOM, function (n) { + return n.toReact(); + }); + this.setState(virtualDOM); + }, + animateFauxDOM: function (duration) { + this.animateFauxDOMUntil = Math.max(Date.now() + duration, this.animateFauxDOMUntil); + + if (!this.fauxDOMAnimationInterval) { + this.fauxDOMAnimationInterval = setInterval(function () { + if (Date.now() < this.animateFauxDOMUntil) { + this.drawFauxDOM(); + } else { + this.stopAnimatingFauxDOM(); + } + }.bind(this), 16); + } + }, + stopAnimatingFauxDOM: function () { + this.fauxDOMAnimationInterval = clearInterval(this.fauxDOMAnimationInterval); + this.animateFauxDOMUntil = 0; + }, + stopDrawFauxDOM: function () { + this.drawFauxDOMTimeout = clearTimeout(this.drawFauxDOMTimeout); + }, + isAnimatingFauxDOM: function () { + return !!this.fauxDOMAnimationInterval; + }, + render: function () { + var props = Object.assign({}, this.props, this.state, { + connectFauxDOM: this.connectFauxDOM, + drawFauxDOM: this.drawFauxDOM, + animateFauxDOM: this.animateFauxDOM, + stopAnimatingFauxDOM: this.stopAnimatingFauxDOM, + isAnimatingFauxDOM: this.isAnimatingFauxDOM + }); + return React.createElement(WrappedComponent, props); + } + }); + WithFauxDOM.displayName = 'WithFauxDOM(' + getDisplayName(WrappedComponent) + ')'; + hoistNonReactStatics(WithFauxDOM, WrappedComponent); + return WithFauxDOM; + } + + return withFauxDOM; +} + +function getDisplayName(WrappedComponent) { + return WrappedComponent.displayName || WrappedComponent.name || 'Component'; +} + +var _withFauxDOM = withFauxDOMFactory; + +var element = _element; + +var window$1 = _window; + +var withFauxDOM = _withFauxDOM; + +function factory$1() { + var Element = element(); + var Window = window$1(); + var ReactFauxDOM = { + Element: Element, + defaultView: Window, + withFauxDOM: withFauxDOM(Element), + createElement: function (nodeName) { + return new Element(nodeName); + }, + createElementNS: function (namespace, nodeName) { + return this.createElement(nodeName); + }, + compareDocumentPosition: function () { + // The selector engine tries to validate with this, but we don't care. + // 8 = DOCUMENT_POSITION_CONTAINS, so we say all nodes are in this document. + return 8; + } + }; + Element.prototype.ownerDocument = ReactFauxDOM; + return ReactFauxDOM; +} + +var factory_1 = factory$1; + +var factory = factory_1; + +var ReactFauxDOM = factory(); + +var noop = { + value: function () {} +}; + +function dispatch$1() { + for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) { + if (!(t = arguments[i] + "") || t in _ || /[\s.]/.test(t)) throw new Error("illegal type: " + t); + _[t] = []; + } + + return new Dispatch(_); +} + +function Dispatch(_) { + this._ = _; +} + +function parseTypenames$1(typenames, types) { + return typenames.trim().split(/^|\s+/).map(function (t) { + var name = "", + i = t.indexOf("."); + if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); + if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t); + return { + type: t, + name: name + }; + }); +} + +Dispatch.prototype = dispatch$1.prototype = { + constructor: Dispatch, + on: function (typename, callback) { + var _ = this._, + T = parseTypenames$1(typename + "", _), + t, + i = -1, + n = T.length; // If no callback was specified, return the callback of the given type and name. + + if (arguments.length < 2) { + while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t; + + return; + } // If a type was specified, set the callback for the given type and name. + // Otherwise, if a null callback was specified, remove callbacks of the given name. + + + if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback); + + while (++i < n) { + if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null); + } + + return this; + }, + copy: function () { + var copy = {}, + _ = this._; + + for (var t in _) copy[t] = _[t].slice(); + + return new Dispatch(copy); + }, + call: function (type, that) { + if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2]; + if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); + + for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); + }, + apply: function (type, that, args) { + if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); + + for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); + } +}; + +function get(type, name) { + for (var i = 0, n = type.length, c; i < n; ++i) { + if ((c = type[i]).name === name) { + return c.value; + } + } +} + +function set(type, name, callback) { + for (var i = 0, n = type.length; i < n; ++i) { + if (type[i].name === name) { + type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1)); + break; + } + } + + if (callback != null) type.push({ + name: name, + value: callback + }); + return type; +} + +var src = /*#__PURE__*/Object.freeze({ + __proto__: null, + dispatch: dispatch$1 +}); + +// Word cloud layout by Jason Davies, https://www.jasondavies.com/wordcloud/ +// Algorithm due to Jonathan Feinberg, http://static.mrfeinberg.com/bv_ch03.pdf +var dispatch = src.dispatch; + +var cloudRadians = Math.PI / 180, + cw = 1 << 11 >> 5, + ch = 1 << 11; + +var d3Cloud = function () { + var size = [256, 256], + text = cloudText, + font = cloudFont, + fontSize = cloudFontSize, + fontStyle = cloudFontNormal, + fontWeight = cloudFontNormal, + rotate = cloudRotate, + padding = cloudPadding, + spiral = archimedeanSpiral, + words = [], + timeInterval = Infinity, + event = dispatch("word", "end"), + timer = null, + random = Math.random, + cloud = {}, + canvas = cloudCanvas; + + cloud.canvas = function (_) { + return arguments.length ? (canvas = functor(_), cloud) : canvas; + }; + + cloud.start = function () { + var contextAndRatio = getContext(canvas()), + board = zeroArray((size[0] >> 5) * size[1]), + bounds = null, + n = words.length, + i = -1, + tags = [], + data = words.map(function (d, i) { + d.text = text.call(this, d, i); + d.font = font.call(this, d, i); + d.style = fontStyle.call(this, d, i); + d.weight = fontWeight.call(this, d, i); + d.rotate = rotate.call(this, d, i); + d.size = ~~fontSize.call(this, d, i); + d.padding = padding.call(this, d, i); + return d; + }).sort(function (a, b) { + return b.size - a.size; + }); + if (timer) clearInterval(timer); + timer = setInterval(step, 0); + step(); + return cloud; + + function step() { + var start = Date.now(); + + while (Date.now() - start < timeInterval && ++i < n && timer) { + var d = data[i]; + d.x = size[0] * (random() + .5) >> 1; + d.y = size[1] * (random() + .5) >> 1; + cloudSprite(contextAndRatio, d, data, i); + + if (d.hasText && place(board, d, bounds)) { + tags.push(d); + event.call("word", cloud, d); + if (bounds) cloudBounds(bounds, d);else bounds = [{ + x: d.x + d.x0, + y: d.y + d.y0 + }, { + x: d.x + d.x1, + y: d.y + d.y1 + }]; // Temporary hack + + d.x -= size[0] >> 1; + d.y -= size[1] >> 1; + } + } + + if (i >= n) { + cloud.stop(); + event.call("end", cloud, tags, bounds); + } + } + }; + + cloud.stop = function () { + if (timer) { + clearInterval(timer); + timer = null; + } + + return cloud; + }; + + function getContext(canvas) { + canvas.width = canvas.height = 1; + var ratio = Math.sqrt(canvas.getContext("2d").getImageData(0, 0, 1, 1).data.length >> 2); + canvas.width = (cw << 5) / ratio; + canvas.height = ch / ratio; + var context = canvas.getContext("2d"); + context.fillStyle = context.strokeStyle = "red"; + context.textAlign = "center"; + return { + context: context, + ratio: ratio + }; + } + + function place(board, tag, bounds) { + [{ + x: 0, + y: 0 + }, { + x: size[0], + y: size[1] + }]; + var startX = tag.x, + startY = tag.y, + maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]), + s = spiral(size), + dt = random() < .5 ? 1 : -1, + t = -dt, + dxdy, + dx, + dy; + + while (dxdy = s(t += dt)) { + dx = ~~dxdy[0]; + dy = ~~dxdy[1]; + if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break; + tag.x = startX + dx; + tag.y = startY + dy; + if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue; // TODO only check for collisions within current bounds. + + if (!bounds || !cloudCollide(tag, board, size[0])) { + if (!bounds || collideRects(tag, bounds)) { + var sprite = tag.sprite, + w = tag.width >> 5, + sw = size[0] >> 5, + lx = tag.x - (w << 4), + sx = lx & 0x7f, + msx = 32 - sx, + h = tag.y1 - tag.y0, + x = (tag.y + tag.y0) * sw + (lx >> 5), + last; + + for (var j = 0; j < h; j++) { + last = 0; + + for (var i = 0; i <= w; i++) { + board[x + i] |= last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0); + } + + x += sw; + } + + delete tag.sprite; + return true; + } + } + } + + return false; + } + + cloud.timeInterval = function (_) { + return arguments.length ? (timeInterval = _ == null ? Infinity : _, cloud) : timeInterval; + }; + + cloud.words = function (_) { + return arguments.length ? (words = _, cloud) : words; + }; + + cloud.size = function (_) { + return arguments.length ? (size = [+_[0], +_[1]], cloud) : size; + }; + + cloud.font = function (_) { + return arguments.length ? (font = functor(_), cloud) : font; + }; + + cloud.fontStyle = function (_) { + return arguments.length ? (fontStyle = functor(_), cloud) : fontStyle; + }; + + cloud.fontWeight = function (_) { + return arguments.length ? (fontWeight = functor(_), cloud) : fontWeight; + }; + + cloud.rotate = function (_) { + return arguments.length ? (rotate = functor(_), cloud) : rotate; + }; + + cloud.text = function (_) { + return arguments.length ? (text = functor(_), cloud) : text; + }; + + cloud.spiral = function (_) { + return arguments.length ? (spiral = spirals[_] || _, cloud) : spiral; + }; + + cloud.fontSize = function (_) { + return arguments.length ? (fontSize = functor(_), cloud) : fontSize; + }; + + cloud.padding = function (_) { + return arguments.length ? (padding = functor(_), cloud) : padding; + }; + + cloud.random = function (_) { + return arguments.length ? (random = _, cloud) : random; + }; + + cloud.on = function () { + var value = event.on.apply(event, arguments); + return value === event ? cloud : value; + }; + + return cloud; +}; + +function cloudText(d) { + return d.text; +} + +function cloudFont() { + return "serif"; +} + +function cloudFontNormal() { + return "normal"; +} + +function cloudFontSize(d) { + return Math.sqrt(d.value); +} + +function cloudRotate() { + return (~~(Math.random() * 6) - 3) * 30; +} + +function cloudPadding() { + return 1; +} // Fetches a monochrome sprite bitmap for the specified text. +// Load in batches for speed. + + +function cloudSprite(contextAndRatio, d, data, di) { + if (d.sprite) return; + var c = contextAndRatio.context, + ratio = contextAndRatio.ratio; + c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio); + var x = 0, + y = 0, + maxh = 0, + n = data.length; + --di; + + while (++di < n) { + d = data[di]; + c.save(); + c.font = d.style + " " + d.weight + " " + ~~((d.size + 1) / ratio) + "px " + d.font; + var w = c.measureText(d.text + "m").width * ratio, + h = d.size << 1; + + if (d.rotate) { + var sr = Math.sin(d.rotate * cloudRadians), + cr = Math.cos(d.rotate * cloudRadians), + wcr = w * cr, + wsr = w * sr, + hcr = h * cr, + hsr = h * sr; + w = Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f >> 5 << 5; + h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr)); + } else { + w = w + 0x1f >> 5 << 5; + } + + if (h > maxh) maxh = h; + + if (x + w >= cw << 5) { + x = 0; + y += maxh; + maxh = 0; + } + + if (y + h >= ch) break; + c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio); + if (d.rotate) c.rotate(d.rotate * cloudRadians); + c.fillText(d.text, 0, 0); + if (d.padding) c.lineWidth = 2 * d.padding, c.strokeText(d.text, 0, 0); + c.restore(); + d.width = w; + d.height = h; + d.xoff = x; + d.yoff = y; + d.x1 = w >> 1; + d.y1 = h >> 1; + d.x0 = -d.x1; + d.y0 = -d.y1; + d.hasText = true; + x += w; + } + + var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data, + sprite = []; + + while (--di >= 0) { + d = data[di]; + if (!d.hasText) continue; + var w = d.width, + w32 = w >> 5, + h = d.y1 - d.y0; // Zero the buffer + + for (var i = 0; i < h * w32; i++) sprite[i] = 0; + + x = d.xoff; + if (x == null) return; + y = d.yoff; + var seen = 0, + seenRow = -1; + + for (var j = 0; j < h; j++) { + for (var i = 0; i < w; i++) { + var k = w32 * j + (i >> 5), + m = pixels[(y + j) * (cw << 5) + (x + i) << 2] ? 1 << 31 - i % 32 : 0; + sprite[k] |= m; + seen |= m; + } + + if (seen) seenRow = j;else { + d.y0++; + h--; + j--; + y++; + } + } + + d.y1 = d.y0 + seenRow; + d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32); + } +} // Use mask-based collision detection. + + +function cloudCollide(tag, board, sw) { + sw >>= 5; + var sprite = tag.sprite, + w = tag.width >> 5, + lx = tag.x - (w << 4), + sx = lx & 0x7f, + msx = 32 - sx, + h = tag.y1 - tag.y0, + x = (tag.y + tag.y0) * sw + (lx >> 5), + last; + + for (var j = 0; j < h; j++) { + last = 0; + + for (var i = 0; i <= w; i++) { + if ((last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) & board[x + i]) return true; + } + + x += sw; + } + + return false; +} + +function cloudBounds(bounds, d) { + var b0 = bounds[0], + b1 = bounds[1]; + if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0; + if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0; + if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1; + if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1; +} + +function collideRects(a, b) { + return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y; +} + +function archimedeanSpiral(size) { + var e = size[0] / size[1]; + return function (t) { + return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)]; + }; +} + +function rectangularSpiral(size) { + var dy = 4, + dx = dy * size[0] / size[1], + x = 0, + y = 0; + return function (t) { + var sign = t < 0 ? -1 : 1; // See triangular numbers: T_n = n * (n + 1) / 2. + + switch (Math.sqrt(1 + 4 * sign * t) - sign & 3) { + case 0: + x += dx; + break; + + case 1: + y += dy; + break; + + case 2: + x -= dx; + break; + + default: + y -= dy; + break; + } + + return [x, y]; + }; +} // TODO reuse arrays? + + +function zeroArray(n) { + var a = [], + i = -1; + + while (++i < n) a[i] = 0; + + return a; +} + +function cloudCanvas() { + return document.createElement("canvas"); +} + +function functor(d) { + return typeof d === "function" ? d : function () { + return d; + }; +} + +var spirals = { + archimedean: archimedeanSpiral, + rectangular: rectangularSpiral +}; + +/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */ + +var hasElementType = typeof Element !== 'undefined'; +var hasMap = typeof Map === 'function'; +var hasSet = typeof Set === 'function'; +var hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView; // Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js + +function equal(a, b) { + // START: fast-deep-equal es6/index.js 3.1.1 + if (a === b) return true; + + if (a && b && typeof a == 'object' && typeof b == 'object') { + if (a.constructor !== b.constructor) return false; + var length, i, keys; + + if (Array.isArray(a)) { + length = a.length; + if (length != b.length) return false; + + for (i = length; i-- !== 0;) if (!equal(a[i], b[i])) return false; + + return true; + } // START: Modifications: + // 1. Extra `has &&` helpers in initial condition allow es6 code + // to co-exist with es5. + // 2. Replace `for of` with es5 compliant iteration using `for`. + // Basically, take: + // + // ```js + // for (i of a.entries()) + // if (!b.has(i[0])) return false; + // ``` + // + // ... and convert to: + // + // ```js + // it = a.entries(); + // while (!(i = it.next()).done) + // if (!b.has(i.value[0])) return false; + // ``` + // + // **Note**: `i` access switches to `i.value`. + + + var it; + + if (hasMap && a instanceof Map && b instanceof Map) { + if (a.size !== b.size) return false; + it = a.entries(); + + while (!(i = it.next()).done) if (!b.has(i.value[0])) return false; + + it = a.entries(); + + while (!(i = it.next()).done) if (!equal(i.value[1], b.get(i.value[0]))) return false; + + return true; + } + + if (hasSet && a instanceof Set && b instanceof Set) { + if (a.size !== b.size) return false; + it = a.entries(); + + while (!(i = it.next()).done) if (!b.has(i.value[0])) return false; + + return true; + } // END: Modifications + + + if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) { + length = a.length; + if (length != b.length) return false; + + for (i = length; i-- !== 0;) if (a[i] !== b[i]) return false; + + return true; + } + + if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags; + if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf(); + if (a.toString !== Object.prototype.toString) return a.toString() === b.toString(); + keys = Object.keys(a); + length = keys.length; + if (length !== Object.keys(b).length) return false; + + for (i = length; i-- !== 0;) if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false; // END: fast-deep-equal + // START: react-fast-compare + // custom handling for DOM elements + + + if (hasElementType && a instanceof Element) return false; // custom handling for React/Preact + + for (i = length; i-- !== 0;) { + if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) { + // React-specific: avoid traversing React elements' _owner + // Preact-specific: avoid traversing Preact elements' __v and __o + // __v = $_original / $_vnode + // __o = $_owner + // These properties contain circular references and are not needed when + // comparing the actual elements (and not their owners) + // .$$typeof and ._store on just reasonable markers of elements + continue; + } // all other properties should be traversed as usual + + + if (!equal(a[keys[i]], b[keys[i]])) return false; + } // END: react-fast-compare + // START: fast-deep-equal + + + return true; + } + + return a !== a && b !== b; +} // end fast-deep-equal + + +var reactFastCompare = function isEqual(a, b) { + try { + return equal(a, b); + } catch (error) { + if ((error.message || '').match(/stack|recursion/i)) { + // warn on circular references, don't crash + // browsers give this different errors name and messages: + // chrome/safari: "RangeError", "Maximum call stack size exceeded" + // firefox: "InternalError", too much recursion" + // edge: "Error", "Out of stack space" + console.warn('react-fast-compare cannot handle circular refs'); + return false; + } // some other error. we should definitely know about these + + + throw error; + } +}; + +var xhtml = "http://www.w3.org/1999/xhtml"; +var namespaces = { + svg: "http://www.w3.org/2000/svg", + xhtml: xhtml, + xlink: "http://www.w3.org/1999/xlink", + xml: "http://www.w3.org/XML/1998/namespace", + xmlns: "http://www.w3.org/2000/xmlns/" +}; + +function namespace (name) { + var prefix = name += "", + i = prefix.indexOf(":"); + if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1); + return namespaces.hasOwnProperty(prefix) ? { + space: namespaces[prefix], + local: name + } : name; // eslint-disable-line no-prototype-builtins +} + +function creatorInherit(name) { + return function () { + var document = this.ownerDocument, + uri = this.namespaceURI; + return uri === xhtml && document.documentElement.namespaceURI === xhtml ? document.createElement(name) : document.createElementNS(uri, name); + }; +} + +function creatorFixed(fullname) { + return function () { + return this.ownerDocument.createElementNS(fullname.space, fullname.local); + }; +} + +function creator (name) { + var fullname = namespace(name); + return (fullname.local ? creatorFixed : creatorInherit)(fullname); +} + +function none() {} + +function selector (selector) { + return selector == null ? none : function () { + return this.querySelector(selector); + }; +} + +function selection_select (select) { + if (typeof select !== "function") select = selector(select); + + for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { + if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { + if ("__data__" in node) subnode.__data__ = node.__data__; + subgroup[i] = subnode; + } + } + } + + return new Selection(subgroups, this._parents); +} + +function array (x) { + return typeof x === "object" && "length" in x ? x // Array, TypedArray, NodeList, array-like + : Array.from(x); // Map, Set, iterable, string, or anything else +} + +function empty() { + return []; +} + +function selectorAll (selector) { + return selector == null ? empty : function () { + return this.querySelectorAll(selector); + }; +} + +function arrayAll(select) { + return function () { + var group = select.apply(this, arguments); + return group == null ? [] : array(group); + }; +} + +function selection_selectAll (select) { + if (typeof select === "function") select = arrayAll(select);else select = selectorAll(select); + + for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { + if (node = group[i]) { + subgroups.push(select.call(node, node.__data__, i, group)); + parents.push(node); + } + } + } + + return new Selection(subgroups, parents); +} + +function matcher (selector) { + return function () { + return this.matches(selector); + }; +} +function childMatcher(selector) { + return function (node) { + return node.matches(selector); + }; +} + +var find = Array.prototype.find; + +function childFind(match) { + return function () { + return find.call(this.children, match); + }; +} + +function childFirst() { + return this.firstElementChild; +} + +function selection_selectChild (match) { + return this.select(match == null ? childFirst : childFind(typeof match === "function" ? match : childMatcher(match))); +} + +var filter = Array.prototype.filter; + +function children() { + return this.children; +} + +function childrenFilter(match) { + return function () { + return filter.call(this.children, match); + }; +} + +function selection_selectChildren (match) { + return this.selectAll(match == null ? children : childrenFilter(typeof match === "function" ? match : childMatcher(match))); +} + +function selection_filter (match) { + if (typeof match !== "function") match = matcher(match); + + for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { + if ((node = group[i]) && match.call(node, node.__data__, i, group)) { + subgroup.push(node); + } + } + } + + return new Selection(subgroups, this._parents); +} + +function sparse (update) { + return new Array(update.length); +} + +function selection_enter () { + return new Selection(this._enter || this._groups.map(sparse), this._parents); +} +function EnterNode(parent, datum) { + this.ownerDocument = parent.ownerDocument; + this.namespaceURI = parent.namespaceURI; + this._next = null; + this._parent = parent; + this.__data__ = datum; +} +EnterNode.prototype = { + constructor: EnterNode, + appendChild: function (child) { + return this._parent.insertBefore(child, this._next); + }, + insertBefore: function (child, next) { + return this._parent.insertBefore(child, next); + }, + querySelector: function (selector) { + return this._parent.querySelector(selector); + }, + querySelectorAll: function (selector) { + return this._parent.querySelectorAll(selector); + } +}; + +function constant (x) { + return function () { + return x; + }; +} + +function bindIndex(parent, group, enter, update, exit, data) { + var i = 0, + node, + groupLength = group.length, + dataLength = data.length; // Put any non-null nodes that fit into update. + // Put any null nodes into enter. + // Put any remaining data into enter. + + for (; i < dataLength; ++i) { + if (node = group[i]) { + node.__data__ = data[i]; + update[i] = node; + } else { + enter[i] = new EnterNode(parent, data[i]); + } + } // Put any non-null nodes that don’t fit into exit. + + + for (; i < groupLength; ++i) { + if (node = group[i]) { + exit[i] = node; + } + } +} + +function bindKey(parent, group, enter, update, exit, data, key) { + var i, + node, + nodeByKeyValue = new Map(), + groupLength = group.length, + dataLength = data.length, + keyValues = new Array(groupLength), + keyValue; // Compute the key for each node. + // If multiple nodes have the same key, the duplicates are added to exit. + + for (i = 0; i < groupLength; ++i) { + if (node = group[i]) { + keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + ""; + + if (nodeByKeyValue.has(keyValue)) { + exit[i] = node; + } else { + nodeByKeyValue.set(keyValue, node); + } + } + } // Compute the key for each datum. + // If there a node associated with this key, join and add it to update. + // If there is not (or the key is a duplicate), add it to enter. + + + for (i = 0; i < dataLength; ++i) { + keyValue = key.call(parent, data[i], i, data) + ""; + + if (node = nodeByKeyValue.get(keyValue)) { + update[i] = node; + node.__data__ = data[i]; + nodeByKeyValue.delete(keyValue); + } else { + enter[i] = new EnterNode(parent, data[i]); + } + } // Add any remaining nodes that were not bound to data to exit. + + + for (i = 0; i < groupLength; ++i) { + if ((node = group[i]) && nodeByKeyValue.get(keyValues[i]) === node) { + exit[i] = node; + } + } +} + +function datum(node) { + return node.__data__; +} + +function selection_data (value, key) { + if (!arguments.length) return Array.from(this, datum); + var bind = key ? bindKey : bindIndex, + parents = this._parents, + groups = this._groups; + if (typeof value !== "function") value = constant(value); + + for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) { + var parent = parents[j], + group = groups[j], + groupLength = group.length, + data = array(value.call(parent, parent && parent.__data__, j, parents)), + dataLength = data.length, + enterGroup = enter[j] = new Array(dataLength), + updateGroup = update[j] = new Array(dataLength), + exitGroup = exit[j] = new Array(groupLength); + bind(parent, group, enterGroup, updateGroup, exitGroup, data, key); // Now connect the enter nodes to their following update node, such that + // appendChild can insert the materialized enter node before this node, + // rather than at the end of the parent node. + + for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) { + if (previous = enterGroup[i0]) { + if (i0 >= i1) i1 = i0 + 1; + + while (!(next = updateGroup[i1]) && ++i1 < dataLength); + + previous._next = next || null; + } + } + } + + update = new Selection(update, parents); + update._enter = enter; + update._exit = exit; + return update; +} + +function selection_exit () { + return new Selection(this._exit || this._groups.map(sparse), this._parents); +} + +function selection_join (onenter, onupdate, onexit) { + var enter = this.enter(), + update = this, + exit = this.exit(); + enter = typeof onenter === "function" ? onenter(enter) : enter.append(onenter + ""); + if (onupdate != null) update = onupdate(update); + if (onexit == null) exit.remove();else onexit(exit); + return enter && update ? enter.merge(update).order() : update; +} + +function selection_merge (selection) { + if (!(selection instanceof Selection)) throw new Error("invalid merge"); + + for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) { + for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { + if (node = group0[i] || group1[i]) { + merge[i] = node; + } + } + } + + for (; j < m0; ++j) { + merges[j] = groups0[j]; + } + + return new Selection(merges, this._parents); +} + +function selection_order () { + for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) { + for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) { + if (node = group[i]) { + if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next); + next = node; + } + } + } + + return this; +} + +function selection_sort (compare) { + if (!compare) compare = ascending; + + function compareNode(a, b) { + return a && b ? compare(a.__data__, b.__data__) : !a - !b; + } + + for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) { + for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) { + if (node = group[i]) { + sortgroup[i] = node; + } + } + + sortgroup.sort(compareNode); + } + + return new Selection(sortgroups, this._parents).order(); +} + +function ascending(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; +} + +function selection_call () { + var callback = arguments[0]; + arguments[0] = this; + callback.apply(null, arguments); + return this; +} + +function selection_nodes () { + return Array.from(this); +} + +function selection_node () { + for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { + for (var group = groups[j], i = 0, n = group.length; i < n; ++i) { + var node = group[i]; + if (node) return node; + } + } + + return null; +} + +function selection_size () { + let size = 0; + + for (const node of this) ++size; // eslint-disable-line no-unused-vars + + + return size; +} + +function selection_empty () { + return !this.node(); +} + +function selection_each (callback) { + for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { + for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) { + if (node = group[i]) callback.call(node, node.__data__, i, group); + } + } + + return this; +} + +function attrRemove(name) { + return function () { + this.removeAttribute(name); + }; +} + +function attrRemoveNS(fullname) { + return function () { + this.removeAttributeNS(fullname.space, fullname.local); + }; +} + +function attrConstant(name, value) { + return function () { + this.setAttribute(name, value); + }; +} + +function attrConstantNS(fullname, value) { + return function () { + this.setAttributeNS(fullname.space, fullname.local, value); + }; +} + +function attrFunction(name, value) { + return function () { + var v = value.apply(this, arguments); + if (v == null) this.removeAttribute(name);else this.setAttribute(name, v); + }; +} + +function attrFunctionNS(fullname, value) { + return function () { + var v = value.apply(this, arguments); + if (v == null) this.removeAttributeNS(fullname.space, fullname.local);else this.setAttributeNS(fullname.space, fullname.local, v); + }; +} + +function selection_attr (name, value) { + var fullname = namespace(name); + + if (arguments.length < 2) { + var node = this.node(); + return fullname.local ? node.getAttributeNS(fullname.space, fullname.local) : node.getAttribute(fullname); + } + + return this.each((value == null ? fullname.local ? attrRemoveNS : attrRemove : typeof value === "function" ? fullname.local ? attrFunctionNS : attrFunction : fullname.local ? attrConstantNS : attrConstant)(fullname, value)); +} + +function defaultView (node) { + return node.ownerDocument && node.ownerDocument.defaultView // node is a Node + || node.document && node // node is a Window + || node.defaultView; // node is a Document +} + +function styleRemove(name) { + return function () { + this.style.removeProperty(name); + }; +} + +function styleConstant(name, value, priority) { + return function () { + this.style.setProperty(name, value, priority); + }; +} + +function styleFunction(name, value, priority) { + return function () { + var v = value.apply(this, arguments); + if (v == null) this.style.removeProperty(name);else this.style.setProperty(name, v, priority); + }; +} + +function selection_style (name, value, priority) { + return arguments.length > 1 ? this.each((value == null ? styleRemove : typeof value === "function" ? styleFunction : styleConstant)(name, value, priority == null ? "" : priority)) : styleValue(this.node(), name); +} +function styleValue(node, name) { + return node.style.getPropertyValue(name) || defaultView(node).getComputedStyle(node, null).getPropertyValue(name); +} + +function propertyRemove(name) { + return function () { + delete this[name]; + }; +} + +function propertyConstant(name, value) { + return function () { + this[name] = value; + }; +} + +function propertyFunction(name, value) { + return function () { + var v = value.apply(this, arguments); + if (v == null) delete this[name];else this[name] = v; + }; +} + +function selection_property (name, value) { + return arguments.length > 1 ? this.each((value == null ? propertyRemove : typeof value === "function" ? propertyFunction : propertyConstant)(name, value)) : this.node()[name]; +} + +function classArray(string) { + return string.trim().split(/^|\s+/); +} + +function classList(node) { + return node.classList || new ClassList(node); +} + +function ClassList(node) { + this._node = node; + this._names = classArray(node.getAttribute("class") || ""); +} + +ClassList.prototype = { + add: function (name) { + var i = this._names.indexOf(name); + + if (i < 0) { + this._names.push(name); + + this._node.setAttribute("class", this._names.join(" ")); + } + }, + remove: function (name) { + var i = this._names.indexOf(name); + + if (i >= 0) { + this._names.splice(i, 1); + + this._node.setAttribute("class", this._names.join(" ")); + } + }, + contains: function (name) { + return this._names.indexOf(name) >= 0; + } +}; + +function classedAdd(node, names) { + var list = classList(node), + i = -1, + n = names.length; + + while (++i < n) list.add(names[i]); +} + +function classedRemove(node, names) { + var list = classList(node), + i = -1, + n = names.length; + + while (++i < n) list.remove(names[i]); +} + +function classedTrue(names) { + return function () { + classedAdd(this, names); + }; +} + +function classedFalse(names) { + return function () { + classedRemove(this, names); + }; +} + +function classedFunction(names, value) { + return function () { + (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names); + }; +} + +function selection_classed (name, value) { + var names = classArray(name + ""); + + if (arguments.length < 2) { + var list = classList(this.node()), + i = -1, + n = names.length; + + while (++i < n) if (!list.contains(names[i])) return false; + + return true; + } + + return this.each((typeof value === "function" ? classedFunction : value ? classedTrue : classedFalse)(names, value)); +} + +function textRemove() { + this.textContent = ""; +} + +function textConstant(value) { + return function () { + this.textContent = value; + }; +} + +function textFunction(value) { + return function () { + var v = value.apply(this, arguments); + this.textContent = v == null ? "" : v; + }; +} + +function selection_text (value) { + return arguments.length ? this.each(value == null ? textRemove : (typeof value === "function" ? textFunction : textConstant)(value)) : this.node().textContent; +} + +function htmlRemove() { + this.innerHTML = ""; +} + +function htmlConstant(value) { + return function () { + this.innerHTML = value; + }; +} + +function htmlFunction(value) { + return function () { + var v = value.apply(this, arguments); + this.innerHTML = v == null ? "" : v; + }; +} + +function selection_html (value) { + return arguments.length ? this.each(value == null ? htmlRemove : (typeof value === "function" ? htmlFunction : htmlConstant)(value)) : this.node().innerHTML; +} + +function raise() { + if (this.nextSibling) this.parentNode.appendChild(this); +} + +function selection_raise () { + return this.each(raise); +} + +function lower() { + if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild); +} + +function selection_lower () { + return this.each(lower); +} + +function selection_append (name) { + var create = typeof name === "function" ? name : creator(name); + return this.select(function () { + return this.appendChild(create.apply(this, arguments)); + }); +} + +function constantNull() { + return null; +} + +function selection_insert (name, before) { + var create = typeof name === "function" ? name : creator(name), + select = before == null ? constantNull : typeof before === "function" ? before : selector(before); + return this.select(function () { + return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null); + }); +} + +function remove() { + var parent = this.parentNode; + if (parent) parent.removeChild(this); +} + +function selection_remove () { + return this.each(remove); +} + +function selection_cloneShallow() { + var clone = this.cloneNode(false), + parent = this.parentNode; + return parent ? parent.insertBefore(clone, this.nextSibling) : clone; +} + +function selection_cloneDeep() { + var clone = this.cloneNode(true), + parent = this.parentNode; + return parent ? parent.insertBefore(clone, this.nextSibling) : clone; +} + +function selection_clone (deep) { + return this.select(deep ? selection_cloneDeep : selection_cloneShallow); +} + +function selection_datum (value) { + return arguments.length ? this.property("__data__", value) : this.node().__data__; +} + +function contextListener(listener) { + return function (event) { + listener.call(this, event, this.__data__); + }; +} + +function parseTypenames(typenames) { + return typenames.trim().split(/^|\s+/).map(function (t) { + var name = "", + i = t.indexOf("."); + if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); + return { + type: t, + name: name + }; + }); +} + +function onRemove(typename) { + return function () { + var on = this.__on; + if (!on) return; + + for (var j = 0, i = -1, m = on.length, o; j < m; ++j) { + if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) { + this.removeEventListener(o.type, o.listener, o.options); + } else { + on[++i] = o; + } + } + + if (++i) on.length = i;else delete this.__on; + }; +} + +function onAdd(typename, value, options) { + return function () { + var on = this.__on, + o, + listener = contextListener(value); + if (on) for (var j = 0, m = on.length; j < m; ++j) { + if ((o = on[j]).type === typename.type && o.name === typename.name) { + this.removeEventListener(o.type, o.listener, o.options); + this.addEventListener(o.type, o.listener = listener, o.options = options); + o.value = value; + return; + } + } + this.addEventListener(typename.type, listener, options); + o = { + type: typename.type, + name: typename.name, + value: value, + listener: listener, + options: options + }; + if (!on) this.__on = [o];else on.push(o); + }; +} + +function selection_on (typename, value, options) { + var typenames = parseTypenames(typename + ""), + i, + n = typenames.length, + t; + + if (arguments.length < 2) { + var on = this.node().__on; + + if (on) for (var j = 0, m = on.length, o; j < m; ++j) { + for (i = 0, o = on[j]; i < n; ++i) { + if ((t = typenames[i]).type === o.type && t.name === o.name) { + return o.value; + } + } + } + return; + } + + on = value ? onAdd : onRemove; + + for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options)); + + return this; +} + +function dispatchEvent(node, type, params) { + var window = defaultView(node), + event = window.CustomEvent; + + if (typeof event === "function") { + event = new event(type, params); + } else { + event = window.document.createEvent("Event"); + if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;else event.initEvent(type, false, false); + } + + node.dispatchEvent(event); +} + +function dispatchConstant(type, params) { + return function () { + return dispatchEvent(this, type, params); + }; +} + +function dispatchFunction(type, params) { + return function () { + return dispatchEvent(this, type, params.apply(this, arguments)); + }; +} + +function selection_dispatch (type, params) { + return this.each((typeof params === "function" ? dispatchFunction : dispatchConstant)(type, params)); +} + +function* selection_iterator () { + for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { + for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) { + if (node = group[i]) yield node; + } + } +} + +var root = [null]; +function Selection(groups, parents) { + this._groups = groups; + this._parents = parents; +} + +function selection_selection() { + return this; +} + +Selection.prototype = { + constructor: Selection, + select: selection_select, + selectAll: selection_selectAll, + selectChild: selection_selectChild, + selectChildren: selection_selectChildren, + filter: selection_filter, + data: selection_data, + enter: selection_enter, + exit: selection_exit, + join: selection_join, + merge: selection_merge, + selection: selection_selection, + order: selection_order, + sort: selection_sort, + call: selection_call, + nodes: selection_nodes, + node: selection_node, + size: selection_size, + empty: selection_empty, + each: selection_each, + attr: selection_attr, + style: selection_style, + property: selection_property, + classed: selection_classed, + text: selection_text, + html: selection_html, + raise: selection_raise, + lower: selection_lower, + append: selection_append, + insert: selection_insert, + remove: selection_remove, + clone: selection_clone, + datum: selection_datum, + on: selection_on, + dispatch: selection_dispatch, + [Symbol.iterator]: selection_iterator +}; + +function select (selector) { + return typeof selector === "string" ? new Selection([[document.querySelector(selector)]], [document.documentElement]) : new Selection([[selector]], root); +} + +function initRange(domain, range) { + switch (arguments.length) { + case 0: + break; + + case 1: + this.range(domain); + break; + + default: + this.range(range).domain(domain); + break; + } + + return this; +} + +const implicit = Symbol("implicit"); +function ordinal() { + var index = new Map(), + domain = [], + range = [], + unknown = implicit; + + function scale(d) { + var key = d + "", + i = index.get(key); + + if (!i) { + if (unknown !== implicit) return unknown; + index.set(key, i = domain.push(d)); + } + + return range[(i - 1) % range.length]; + } + + scale.domain = function (_) { + if (!arguments.length) return domain.slice(); + domain = [], index = new Map(); + + for (const value of _) { + const key = value + ""; + if (index.has(key)) continue; + index.set(key, domain.push(value)); + } + + return scale; + }; + + scale.range = function (_) { + return arguments.length ? (range = Array.from(_), scale) : range.slice(); + }; + + scale.unknown = function (_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + scale.copy = function () { + return ordinal(domain, range).unknown(unknown); + }; + + initRange.apply(scale, arguments); + return scale; +} + +function colors (specifier) { + var n = specifier.length / 6 | 0, + colors = new Array(n), + i = 0; + + while (i < n) colors[i] = "#" + specifier.slice(i * 6, ++i * 6); + + return colors; +} + +var schemeCategory10 = colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"); + +function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); +} + +function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} + +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); +} + +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) { + arr2[i] = arr[i]; + } + + return arr2; +} + +function _iterableToArrayLimit(arr, i) { + var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; + + if (_i == null) return; + var _arr = []; + var _n = true; + var _d = false; + + var _s, _e; + + try { + for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i["return"] != null) _i["return"](); + } finally { + if (_d) throw _e; + } + } + + return _arr; +} + +function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; +} +var defaultScaleOrdinal = ordinal(schemeCategory10); + +function WordCloud(_ref) { + var data = _ref.data, + _ref$width = _ref.width, + width = _ref$width === void 0 ? 700 : _ref$width, + _ref$height = _ref.height, + height = _ref$height === void 0 ? 600 : _ref$height, + _ref$font = _ref.font, + font = _ref$font === void 0 ? 'serif' : _ref$font, + _ref$fontStyle = _ref.fontStyle, + fontStyle = _ref$fontStyle === void 0 ? 'normal' : _ref$fontStyle, + _ref$fontWeight = _ref.fontWeight, + fontWeight = _ref$fontWeight === void 0 ? 'normal' : _ref$fontWeight, + _ref$fontSize = _ref.fontSize, + fontSize = _ref$fontSize === void 0 ? function (d) { + return Math.sqrt(d.value); + } : _ref$fontSize, + _ref$rotate = _ref.rotate, + rotate = _ref$rotate === void 0 ? function () { + return (~~(Math.random() * 6) - 3) * 30; + } : _ref$rotate, + _ref$spiral = _ref.spiral, + spiral = _ref$spiral === void 0 ? 'archimedean' : _ref$spiral, + _ref$padding = _ref.padding, + padding = _ref$padding === void 0 ? 1 : _ref$padding, + _ref$random = _ref.random, + random = _ref$random === void 0 ? Math.random : _ref$random, + _ref$fill = _ref.fill, + fill = _ref$fill === void 0 ? function (_, i) { + return defaultScaleOrdinal(i); + } : _ref$fill, + onWordClick = _ref.onWordClick, + onWordMouseOver = _ref.onWordMouseOver, + onWordMouseOut = _ref.onWordMouseOut; + var elementRef = useRef(); + + if (!elementRef.current) { + elementRef.current = ReactFauxDOM.createElement('div'); + } + + var el = elementRef.current; // clear old words + + select(el).selectAll('*').remove(); // render based on new data + + var layout = d3Cloud().words(data).size([width, height]).font(font).fontStyle(fontStyle).fontWeight(fontWeight).fontSize(fontSize).rotate(rotate).spiral(spiral).padding(padding).random(random).on('end', function (words) { + var _layout$size = layout.size(), + _layout$size2 = _slicedToArray(_layout$size, 2), + w = _layout$size2[0], + h = _layout$size2[1]; + + var texts = select(el).append('svg').attr('viewBox', "0 0 ".concat(w, " ").concat(h)).attr('preserveAspectRatio', 'xMinYMin meet').append('g').attr('transform', "translate(".concat(w / 2, ",").concat(h / 2, ")")).selectAll('text').data(words).enter().append('text').style('font-family', function (d) { + return d.font; + }).style('font-style', function (d) { + return d.style; + }).style('font-weight', function (d) { + return d.weight; + }).style('font-size', function (d) { + return "".concat(d.size, "px"); + }).style('fill', fill).attr('text-anchor', 'middle').attr('transform', function (d) { + return "translate(".concat([d.x, d.y], ")rotate(").concat(d.rotate, ")"); + }).text(function (d) { + return d.text; + }); + + if (onWordClick) { + texts.on('click', onWordClick); + } + + if (onWordMouseOver) { + texts.on('mouseover', onWordMouseOver); + } + + if (onWordMouseOut) { + texts.on('mouseout', onWordMouseOut); + } + }); + layout.start(); + return el.toReact(); +} + +WordCloud.propTypes = { + data: _pt.arrayOf(_pt.shape({ + text: _pt.string.isRequired, + value: _pt.number.isRequired + })).isRequired, + width: _pt.number, + height: _pt.number, + font: _pt.oneOfType([_pt.string, _pt.func]), + fontStyle: _pt.oneOfType([_pt.string, _pt.func]), + fontWeight: _pt.oneOfType([_pt.string, _pt.number, _pt.func]), + fontSize: _pt.oneOfType([_pt.number, _pt.func]), + rotate: _pt.oneOfType([_pt.number, _pt.func]), + spiral: _pt.oneOfType([_pt.oneOf(['archimedean']), _pt.oneOf(['rectangular']), _pt.func]), + padding: _pt.oneOfType([_pt.number, _pt.func]), + random: _pt.func, + onWordClick: _pt.func, + onWordMouseOver: _pt.func, + onWordMouseOut: _pt.func +}; +var WordCloud$1 = /*#__PURE__*/React$3.memo(WordCloud, reactFastCompare); + +function WordCloudWidgetComponent(props) { + const data = props.inputData; + + const fontSizeMapper = word => Math.log2(word.value) * 5; + + const rotate = word => Math.floor(Math.random() * 2) * 90; + + const onClickHandle = text => { + props.onClickAction.canExecute && !props.onClickAction.isExecuting; + { + props.chosenWord.setValue(text); + props.onClickAction.execute(); + } + }; + + return createElement$2(WordCloud$1, { + data: data, + fontSizeMapper: fontSizeMapper, + rotate: rotate, + onWordClick: (event, word) => onClickHandle(word.text) + }); +} + +class WordCloudWidget extends Component { + shouldComponentUpdate(nextProps) { + return nextProps.dataSource !== this.props.dataSource; + } + + render() { + var dataToRender = []; + + if (this.props.dataSource.status === "available" && this.props.dataSource.items) { + var i = 0; + + for (i = 0; i < this.props.dataSource.items.length; i++) { + dataToRender.push({ + text: this.props.textAttrib.get(this.props.dataSource.items[i]).value, + value: this.props.intAttrib.get(this.props.dataSource.items[i]).value + }); + } + } + + return createElement$2(WordCloudWidgetComponent, { + inputData: dataToRender, + chosenWord: this.props.chosenWord, + onClickAction: this.props.onClickAction + }); + } + +} + +export { WordCloudWidget as default }; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV29yZENsb3VkLm1qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLXJhdy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uYXRpdmUtc3ltYm9sLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90cnktdG8tc3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtY2FsbGFibGUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcHVyZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtZ2xvYmFsLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1vYmplY3QuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmF0aXZlLXdlYWstbWFwLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1rZXkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWRlZmluZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWxlbmd0aC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb3duLWtleXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWZvcmNlZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9odG1sLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wYXRoLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS13ZWxsLWtub3duLXN5bWJvbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5oYXMtaW5zdGFuY2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5pcy1jb25jYXQtc3ByZWFkYWJsZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLml0ZXJhdG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wubWF0Y2guanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5tYXRjaC1hbGwuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5yZXBsYWNlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuc2VhcmNoLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuc3BlY2llcy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLnNwbGl0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wudG8tcHJpbWl0aXZlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wudG8tc3RyaW5nLXRhZy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLnVuc2NvcGFibGVzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0ZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYWdncmVnYXRlLWVycm9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuYXQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5jb25jYXQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktY29weS13aXRoaW4uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmNvcHktd2l0aGluLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmV2ZXJ5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWZpbGwuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbGwuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmluZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmluZC1pbmRleC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mbGF0dGVuLWludG8tYXJyYXkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZsYXQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZsYXQtbWFwLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5mb3ItZWFjaC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1mcm9tLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZnJvbS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmluZGV4LW9mLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pcy1hcnJheS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMtY29yZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtaXRlcmF0b3ItY29uc3RydWN0b3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuam9pbi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1sYXN0LWluZGV4LW9mLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5sYXN0LWluZGV4LW9mLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5tYXAuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm9mLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXJlZHVjZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucmVkdWNlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UtcmlnaHQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnJldmVyc2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNsaWNlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zb21lLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNvcnQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWZmLXZlcnNpb24uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLWllLW9yLWVkZ2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXdlYmtpdC12ZXJzaW9uLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zb3J0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zcGVjaWVzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zcGVjaWVzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnVuc2NvcGFibGVzLmZsYXQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnVuc2NvcGFibGVzLmZsYXQtbWFwLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1uYXRpdmUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVkZWZpbmUtYWxsLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWluZGV4LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2llZWU3NTQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS1idWZmZXIuY29uc3RydWN0b3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXktYnVmZmVyLmlzLXZpZXcuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jb25zdHJ1Y3Rvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS1idWZmZXIuc2xpY2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmRhdGEtdmlldy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZGF0ZS5nZXQteWVhci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZGF0ZS5ub3cuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmRhdGUuc2V0LXllYXIuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmRhdGUudG8tZ210LXN0cmluZy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctcmVwZWF0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1wYWQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGF0ZS10by1pc28tc3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5kYXRlLnRvLWlzby1zdHJpbmcuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmRhdGUudG8tanNvbi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kYXRlLXRvLXByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZGF0ZS50by1wcmltaXRpdmUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmRhdGUudG8tc3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5lc2NhcGUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24uYmluZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24uaGFzLWluc3RhbmNlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5nbG9iYWwtdGhpcy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmpzb24udG8tc3RyaW5nLXRhZy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mcmVlemluZy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvbGxlY3Rpb24uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm1hcC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLWxvZzFwLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5tYXRoLmFjb3NoLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5tYXRoLmFzaW5oLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5tYXRoLmF0YW5oLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21hdGgtc2lnbi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubWF0aC5jYnJ0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5tYXRoLmNsejMyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21hdGgtZXhwbTEuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm1hdGguY29zaC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubWF0aC5leHBtMS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLWZyb3VuZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubWF0aC5mcm91bmQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm1hdGguaHlwb3QuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm1hdGguaW11bC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubWF0aC5sb2cxMC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubWF0aC5sb2cxcC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubWF0aC5sb2cyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5tYXRoLnNpZ24uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm1hdGguc2luaC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubWF0aC50YW5oLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5tYXRoLnRvLXN0cmluZy10YWcuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm1hdGgudHJ1bmMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdGhpcy1udW1iZXItdmFsdWUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2hpdGVzcGFjZXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLXRyaW0uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci5jb25zdHJ1Y3Rvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLmVwc2lsb24uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbnVtYmVyLWlzLWZpbml0ZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLmlzLWZpbml0ZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1pbnRlZ3JhbC1udW1iZXIuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci5pcy1pbnRlZ2VyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIuaXMtbmFuLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIubWF4LXNhZmUtaW50ZWdlci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLm1pbi1zYWZlLWludGVnZXIuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbnVtYmVyLXBhcnNlLWZsb2F0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIucGFyc2UtZmxvYXQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbnVtYmVyLXBhcnNlLWludC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLnBhcnNlLWludC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLnRvLWZpeGVkLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIudG8tcHJlY2lzaW9uLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1hc3NpZ24uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5jcmVhdGUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXByb3RvdHlwZS1hY2Nlc3NvcnMtZm9yY2VkLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLWdldHRlci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXNldHRlci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtdG8tYXJyYXkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5lbnRyaWVzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZnJlZXplLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZnJvbS1lbnRyaWVzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5nZXQtcHJvdG90eXBlLW9mLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuaGFzLW93bi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zYW1lLXZhbHVlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuaXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5pcy1leHRlbnNpYmxlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuaXMtZnJvemVuLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuaXMtc2VhbGVkLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5sb29rdXAtc2V0dGVyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QucHJldmVudC1leHRlbnNpb25zLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Quc2VhbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnZhbHVlcy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucGFyc2UtZmxvYXQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnBhcnNlLWludC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uYXRpdmUtcHJvbWlzZS1jb25zdHJ1Y3Rvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Rhc2suanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy1wZWJibGUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLXdlYm9zLXdlYmtpdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9taWNyb3Rhc2suanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BlcmZvcm0uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLWJyb3dzZXIuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UuYWxsLXNldHRsZWQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UuYW55LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZmxlY3QuYXBwbHkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZmxlY3QuY29uc3RydWN0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVmbGVjdC5kZWxldGUtcHJvcGVydHkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZGF0YS1kZXNjcmlwdG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWZsZWN0LmdldC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZmxlY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVmbGVjdC5oYXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZmxlY3QuaXMtZXh0ZW5zaWJsZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVmbGVjdC5vd24ta2V5cy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZmxlY3Quc2V0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWZsZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZmxlY3QudG8tc3RyaW5nLXRhZy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1yZWdleHAuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtZG90LWFsbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuY29uc3RydWN0b3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5kb3QtYWxsLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmZsYWdzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuc3RpY2t5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAudGVzdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRvLXN0cmluZy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc2V0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuYXQtYWx0ZXJuYXRpdmUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmNvZGUtcG9pbnQtYXQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbm90LWEtcmVnZXhwLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvcnJlY3QtaXMtcmVnZXhwLWxvZ2ljLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuZW5kcy13aXRoLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuZnJvbS1jb2RlLXBvaW50LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcubWF0Y2guanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5tYXRjaC1hbGwuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLXBhZC13ZWJraXQtYnVnLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucGFkLWVuZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnBhZC1zdGFydC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJhdy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJlcGVhdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtc3Vic3RpdHV0aW9uLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UtYWxsLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc2VhcmNoLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc3BsaXQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zdGFydHMtd2l0aC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnN1YnN0ci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctdHJpbS1mb3JjZWQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy50cmltLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcudHJpbS1lbmQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy50cmltLXN0YXJ0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1odG1sLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1odG1sLWZvcmNlZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmFuY2hvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmJpZy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmJsaW5rLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuYm9sZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmZpeGVkLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuZm9udGNvbG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuZm9udHNpemUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pdGFsaWNzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcubGluay5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnNtYWxsLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc3RyaWtlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc3ViLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc3VwLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3R5cGVkLWFycmF5LWNvbnN0cnVjdG9ycy1yZXF1aXJlLXdyYXBwZXJzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXBvc2l0aXZlLWludGVnZXIuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2Zmc2V0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3R5cGVkLWFycmF5LWZyb20uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdHlwZWQtYXJyYXktY29uc3RydWN0b3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LmZsb2F0MzItYXJyYXkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LmZsb2F0NjQtYXJyYXkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LmludDgtYXJyYXkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LmludDE2LWFycmF5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5pbnQzMi1hcnJheS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkudWludDgtYXJyYXkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LnVpbnQ4LWNsYW1wZWQtYXJyYXkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LnVpbnQxNi1hcnJheS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkudWludDMyLWFycmF5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5hdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuY29weS13aXRoaW4uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LmV2ZXJ5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5maWxsLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWZyb20tY29uc3RydWN0b3ItYW5kLWxpc3QuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdHlwZWQtYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90eXBlZC1hcnJheS1mcm9tLXNwZWNpZXMtYW5kLWxpc3QuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LmZpbHRlci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuZmluZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuZmluZC1pbmRleC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuZm9yLWVhY2guanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LmZyb20uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LmluY2x1ZGVzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5pbmRleC1vZi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuaXRlcmF0b3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LmpvaW4uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5Lmxhc3QtaW5kZXgtb2YuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5Lm1hcC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkub2YuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LnJlZHVjZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkucmVkdWNlLXJpZ2h0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5yZXZlcnNlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5zZXQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LnNsaWNlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5zb21lLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5zb3J0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5zdWJhcnJheS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkudG8tbG9jYWxlLXN0cmluZy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkudG8tc3RyaW5nLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy51bmVzY2FwZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb2xsZWN0aW9uLXdlYWsuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLndlYWstbWFwLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy53ZWFrLXNldC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hc3luYy1pdGVyYXRvci1wcm90b3R5cGUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXN5bmMtZnJvbS1zeW5jLWl0ZXJhdG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1hc3luYy1pdGVyYXRvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnRyeS12aXJ0dWFsLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FzeW5jLWl0ZXJhdG9yLWl0ZXJhdGlvbi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1mcm9tLWFzeW5jLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuYXJyYXkuZnJvbS1hc3luYy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LmFycmF5LmZpbHRlci1vdXQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5hcnJheS5maWx0ZXItcmVqZWN0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi1mcm9tLWxhc3QuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5hcnJheS5maW5kLWxhc3QuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5hcnJheS5maW5kLWxhc3QtaW5kZXguanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktZ3JvdXAtYnkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5hcnJheS5ncm91cC1ieS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LmFycmF5LmlzLXRlbXBsYXRlLW9iamVjdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LmFycmF5Lmxhc3QtaW5kZXguanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5hcnJheS5sYXN0LWl0ZW0uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktdW5pcXVlLWJ5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuYXJyYXkudW5pcXVlLWJ5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuYXN5bmMtaXRlcmF0b3IuY29uc3RydWN0b3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXN5bmMtaXRlcmF0b3ItY3JlYXRlLXByb3h5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuYXN5bmMtaXRlcmF0b3IuYXMtaW5kZXhlZC1wYWlycy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LmFzeW5jLWl0ZXJhdG9yLmRyb3AuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5hc3luYy1pdGVyYXRvci5ldmVyeS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LmFzeW5jLWl0ZXJhdG9yLmZpbHRlci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LmFzeW5jLWl0ZXJhdG9yLmZpbmQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5hc3luYy1pdGVyYXRvci5mbGF0LW1hcC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LmFzeW5jLWl0ZXJhdG9yLmZvci1lYWNoLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuYXN5bmMtaXRlcmF0b3IuZnJvbS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LmFzeW5jLWl0ZXJhdG9yLm1hcC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LmFzeW5jLWl0ZXJhdG9yLnJlZHVjZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LmFzeW5jLWl0ZXJhdG9yLnNvbWUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5hc3luYy1pdGVyYXRvci50YWtlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuYXN5bmMtaXRlcmF0b3IudG8tYXJyYXkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbnVtZXJpYy1yYW5nZS1pdGVyYXRvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LmJpZ2ludC5yYW5nZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb21wb3NpdGUta2V5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuY29tcG9zaXRlLWtleS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LmNvbXBvc2l0ZS1zeW1ib2wuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5jb25zdHJ1Y3Rvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtcHJveHkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5hcy1pbmRleGVkLXBhaXJzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuZHJvcC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmV2ZXJ5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuZmlsdGVyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuZmluZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmZsYXQtbWFwLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuZm9yLWVhY2guanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5mcm9tLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IubWFwLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IucmVkdWNlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3Iuc29tZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLnRha2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci50by1hcnJheS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb2xsZWN0aW9uLWRlbGV0ZS1hbGwuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAuZGVsZXRlLWFsbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXAtZW1wbGFjZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hcC5lbXBsYWNlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1tYXAtaXRlcmF0b3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAuZXZlcnkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAuZmlsdGVyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWFwLmZpbmQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAuZmluZC1rZXkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29sbGVjdGlvbi1mcm9tLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWFwLmZyb20uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAuZ3JvdXAtYnkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2FtZS12YWx1ZS16ZXJvLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWFwLmluY2x1ZGVzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWFwLmtleS1ieS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hcC5rZXktb2YuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAubWFwLWtleXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAubWFwLXZhbHVlcy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hcC5tZXJnZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb2xsZWN0aW9uLW9mLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWFwLm9mLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWFwLnJlZHVjZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hcC5zb21lLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWFwLnVwZGF0ZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXAtdXBzZXJ0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWFwLnVwZGF0ZS1vci1pbnNlcnQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXAudXBzZXJ0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWF0aC5jbGFtcC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hdGguZGVnLXBlci1yYWQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLmRlZ3JlZXMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWF0aC1zY2FsZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hdGguZnNjYWxlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWF0aC5pYWRkaC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hdGguaW11bGguanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLmlzdWJoLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWF0aC5yYWQtcGVyLWRlZy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hdGgucmFkaWFucy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm1hdGguc2NhbGUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5tYXRoLnNlZWRlZC1wcm5nLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWF0aC5zaWduYml0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQubWF0aC51bXVsaC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm51bWJlci5mcm9tLXN0cmluZy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm51bWJlci5yYW5nZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtaXRlcmF0b3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5vYmplY3QuaXRlcmF0ZS1lbnRyaWVzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQub2JqZWN0Lml0ZXJhdGUta2V5cy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm9iamVjdC5pdGVyYXRlLXZhbHVlcy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0Lm9ic2VydmFibGUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5wcm9taXNlLnRyeS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWZsZWN0LW1ldGFkYXRhLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5yZWZsZWN0LmRlbGV0ZS1tZXRhZGF0YS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YS1rZXlzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQucmVmbGVjdC5oYXMtbWV0YWRhdGEuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5yZWZsZWN0Lmhhcy1vd24tbWV0YWRhdGEuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5yZWZsZWN0Lm1ldGFkYXRhLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvbGxlY3Rpb24tYWRkLWFsbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5hZGQtYWxsLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmRlbGV0ZS1hbGwuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuZGlmZmVyZW5jZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtc2V0LWl0ZXJhdG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmV2ZXJ5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmZpbHRlci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5maW5kLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmZyb20uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaW50ZXJzZWN0aW9uLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLWRpc2pvaW50LWZyb20uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQuaXMtc3Vic2V0LW9mLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmlzLXN1cGVyc2V0LW9mLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LmpvaW4uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zZXQubWFwLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0Lm9mLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LnJlZHVjZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnNldC5zb21lLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LnN5bW1ldHJpYy1kaWZmZXJlbmNlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc2V0LnVuaW9uLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc3RyaW5nLmF0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc3RyaW5nLmNvZGUtcG9pbnRzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc3ltYm9sLmFzeW5jLWRpc3Bvc2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zeW1ib2wuZGlzcG9zZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5tYXRjaGVyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc3ltYm9sLm1ldGFkYXRhLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQuc3ltYm9sLm9ic2VydmFibGUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5zeW1ib2wucGF0dGVybi1tYXRjaC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnN5bWJvbC5yZXBsYWNlLWFsbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnR5cGVkLWFycmF5LmZyb20tYXN5bmMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC50eXBlZC1hcnJheS5maWx0ZXItb3V0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQudHlwZWQtYXJyYXkuZmlsdGVyLXJlamVjdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnR5cGVkLWFycmF5LmZpbmQtbGFzdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnR5cGVkLWFycmF5LmZpbmQtbGFzdC1pbmRleC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LnR5cGVkLWFycmF5Lmdyb3VwLWJ5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQudHlwZWQtYXJyYXkudW5pcXVlLWJ5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQud2Vhay1tYXAuZGVsZXRlLWFsbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LndlYWstbWFwLmZyb20uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC53ZWFrLW1hcC5vZi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LndlYWstbWFwLmVtcGxhY2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC53ZWFrLW1hcC51cHNlcnQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC53ZWFrLXNldC5hZGQtYWxsLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lc25leHQud2Vhay1zZXQuZGVsZXRlLWFsbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXNuZXh0LndlYWstc2V0LmZyb20uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzbmV4dC53ZWFrLXNldC5vZi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kb20taXRlcmFibGVzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvbS10b2tlbi1saXN0LXByb3RvdHlwZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmltbWVkaWF0ZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnF1ZXVlLW1pY3JvdGFzay5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnRpbWVycy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uYXRpdmUtdXJsLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1wdW55Y29kZS10by1hc2NpaS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudXJsLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudXJsLnRvLWpzb24uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWlzL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9jaGVja1Byb3BUeXBlcy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtYXR0ci9saWIvaW5kZXguanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcXVlcnktc2VsZWN0b3IvbGliL3F1ZXJ5LXNlbGVjdG9yL3V0aWwuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcXVlcnktc2VsZWN0b3IvbGliL3F1ZXJ5LXNlbGVjdG9yL3BhcnNlci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9xdWVyeS1zZWxlY3Rvci9saWIvcXVlcnktc2VsZWN0b3IuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcXVlcnktc2VsZWN0b3IvaW5kZXguanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZmF1eC1kb20vbGliL3V0aWxzL2NhbWVsQ2FzZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1mYXV4LWRvbS9saWIvdXRpbHMvaXNTdHJpbmcuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZmF1eC1kb20vbGliL3V0aWxzL2lzVW5kZWZpbmVkLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZhdXgtZG9tL2xpYi91dGlscy9hc3NpZ24uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZmF1eC1kb20vbGliL3V0aWxzL21hcFZhbHVlcy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1mYXV4LWRvbS9saWIvdXRpbHMvc3R5bGVDYW1lbENhc2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZmF1eC1kb20vbGliL19lbGVtZW50LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZhdXgtZG9tL2xpYi9fd2luZG93LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NyZWF0ZS1yZWFjdC1jbGFzcy9mYWN0b3J5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2NyZWF0ZS1yZWFjdC1jbGFzcy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9kaXN0L2hvaXN0LW5vbi1yZWFjdC1zdGF0aWNzLmNqcy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1mYXV4LWRvbS9saWIvX3dpdGhGYXV4RE9NLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZhdXgtZG9tL2xpYi9mYWN0b3J5LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZhdXgtZG9tL2xpYi9SZWFjdEZhdXhET00uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZDMtZGlzcGF0Y2gvc3JjL2Rpc3BhdGNoLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2QzLWNsb3VkL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWZhc3QtY29tcGFyZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9uYW1lc3BhY2VzLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jcmVhdG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3QuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvYXJyYXkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0b3JBbGwuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdEFsbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9tYXRjaGVyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3RDaGlsZC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0Q2hpbGRyZW4uanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2ZpbHRlci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc3BhcnNlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lbnRlci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jb25zdGFudC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGF0YS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZXhpdC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vam9pbi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbWVyZ2UuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL29yZGVyLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zb3J0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9jYWxsLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9ub2Rlcy5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbm9kZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2l6ZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZW1wdHkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VhY2guanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2F0dHIuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvd2luZG93LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zdHlsZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vcHJvcGVydHkuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2NsYXNzZWQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3RleHQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2h0bWwuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3JhaXNlLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9sb3dlci5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vYXBwZW5kLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9pbnNlcnQuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3JlbW92ZS5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xvbmUuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2RhdHVtLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9vbi5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGlzcGF0Y2guanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2l0ZXJhdG9yLmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9pbmRleC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3QuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9pbml0LmpzIiwiLi4vLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3JlYWN0LWQzLWNsb3VkL25vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvb3JkaW5hbC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9ub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jb2xvcnMuanMiLCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvcmVhY3QtZDMtY2xvdWQvbm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvY2F0ZWdvcmljYWwvY2F0ZWdvcnkxMC5qcyIsIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9yZWFjdC1kMy1jbG91ZC9saWIvZXNtL1dvcmRDbG91ZC5qcyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1dvcmRDbG91ZFdpZGdldENvbXBvbmVudC5qc3giLCIuLi8uLi8uLi8uLi8uLi9zcmMvV29yZENsb3VkLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9IDc7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyIHNwbGl0ID0gJycuc3BsaXQ7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICFPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PSAnU3RyaW5nJyA/IHNwbGl0LmNhbGwoaXQsICcnKSA6IE9iamVjdChpdCk7XG59IDogT2JqZWN0O1xuIiwiLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCIvLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwidmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IGlzQ2FsbGFibGUoaXQpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKGdsb2JhbFtuYW1lc3BhY2VdKSA6IGdsb2JhbFtuYW1lc3BhY2VdICYmIGdsb2JhbFtuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwidmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignbmF2aWdhdG9yJywgJ3VzZXJBZ2VudCcpIHx8ICcnO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgdmVyc2lvbiA9IG1hdGNoWzBdIDwgNCA/IDEgOiBtYXRjaFswXSArIG1hdGNoWzFdO1xufSBlbHNlIGlmICh1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSBtYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb24gJiYgK3ZlcnNpb247XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICByZXR1cm4gIVN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0xcbiAgJiYgIVN5bWJvbC5zaGFtXG4gICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCJ2YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBPYmplY3QoaXQpIGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiBTdHJpbmcoYXJndW1lbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxufTtcbiIsInZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG59O1xuIiwidmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gZnVuYyA9PSBudWxsID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcbiIsInZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbCwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNldEdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZ2xvYmFsJyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IHNldEdsb2JhbChTSEFSRUQsIHt9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZTtcbiIsInZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246ICczLjE4LjMnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMjEgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsInZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwidmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbCh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwidmFyIGlkID0gMDtcbnZhciBwb3N0Zml4ID0gTWF0aC5yYW5kb20oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyBTdHJpbmcoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgKCsraWQgKyBwb3N0Zml4KS50b1N0cmluZygzNik7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSB8fCAhKE5BVElWRV9TWU1CT0wgfHwgdHlwZW9mIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9PSAnc3RyaW5nJykpIHtcbiAgICBpZiAoTkFUSVZFX1NZTUJPTCAmJiBoYXNPd24oU3ltYm9sLCBuYW1lKSkge1xuICAgICAgV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdID0gU3ltYm9sW25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gICAgfVxuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIGlmICghaXNPYmplY3QoaW5wdXQpIHx8IGlzU3ltYm9sKGlucHV0KSkgcmV0dXJuIGlucHV0O1xuICB2YXIgZXhvdGljVG9QcmltID0gZ2V0TWV0aG9kKGlucHV0LCBUT19QUklNSVRJVkUpO1xuICB2YXIgcmVzdWx0O1xuICBpZiAoZXhvdGljVG9QcmltKSB7XG4gICAgaWYgKHByZWYgPT09IHVuZGVmaW5lZCkgcHJlZiA9ICdkZWZhdWx0JztcbiAgICByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcbiIsInZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcblxuLy8gYFRvUHJvcGVydHlLZXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3Byb3BlcnR5a2V5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIga2V5ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdzdHJpbmcnKTtcbiAgcmV0dXJuIGlzU3ltYm9sKGtleSkgPyBrZXkgOiBTdHJpbmcoa2V5KTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG4vLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgVHlwZUVycm9yKFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IEZ1bmN0aW9uLnRvU3RyaW5nO1xuXG4vLyB0aGlzIGhlbHBlciBicm9rZW4gaW4gYGNvcmUtanNAMy40LjEtMy40LjRgLCBzbyB3ZSBjYW4ndCB1c2UgYHNoYXJlZGAgaGVscGVyXG5pZiAoIWlzQ2FsbGFibGUoc3RvcmUuaW5zcGVjdFNvdXJjZSkpIHtcbiAgc3RvcmUuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBmdW5jdGlvblRvU3RyaW5nLmNhbGwoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoaW5zcGVjdFNvdXJjZShXZWFrTWFwKSk7XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcblxudmFyIGtleXMgPSBzaGFyZWQoJ2tleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBrZXlzW2tleV0gfHwgKGtleXNba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwidmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFdlYWtNYXAgPSBnbG9iYWwuV2Vha01hcDtcbnZhciBzZXQsIGdldCwgaGFzO1xuXG52YXIgZW5mb3JjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaGFzKGl0KSA/IGdldChpdCkgOiBzZXQoaXQsIHt9KTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIHN0YXRlO1xuICAgIGlmICghaXNPYmplY3QoaXQpIHx8IChzdGF0ZSA9IGdldChpdCkpLnR5cGUgIT09IFRZUEUpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIHZhciB3bWdldCA9IHN0b3JlLmdldDtcbiAgdmFyIHdtaGFzID0gc3RvcmUuaGFzO1xuICB2YXIgd21zZXQgPSBzdG9yZS5zZXQ7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAod21oYXMuY2FsbChzdG9yZSwgaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICB3bXNldC5jYWxsKHN0b3JlLCBpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHdtZ2V0LmNhbGwoc3RvcmUsIGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHdtaGFzLmNhbGwoc3RvcmUsIGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIHNldEdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtZ2xvYmFsJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xuXG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIFRFTVBMQVRFID0gU3RyaW5nKFN0cmluZykuc3BsaXQoJ1N0cmluZycpO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICB2YXIgdW5zYWZlID0gb3B0aW9ucyA/ICEhb3B0aW9ucy51bnNhZmUgOiBmYWxzZTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMgPyAhIW9wdGlvbnMuZW51bWVyYWJsZSA6IGZhbHNlO1xuICB2YXIgbm9UYXJnZXRHZXQgPSBvcHRpb25zID8gISFvcHRpb25zLm5vVGFyZ2V0R2V0IDogZmFsc2U7XG4gIHZhciBuYW1lID0gb3B0aW9ucyAmJiBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgdmFyIHN0YXRlO1xuICBpZiAoaXNDYWxsYWJsZSh2YWx1ZSkpIHtcbiAgICBpZiAoU3RyaW5nKG5hbWUpLnNsaWNlKDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICAgIG5hbWUgPSAnWycgKyBTdHJpbmcobmFtZSkucmVwbGFjZSgvXlN5bWJvbFxcKChbXildKilcXCkvLCAnJDEnKSArICddJztcbiAgICB9XG4gICAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodmFsdWUsICduYW1lJywgbmFtZSk7XG4gICAgfVxuICAgIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICAgIGlmICghc3RhdGUuc291cmNlKSB7XG4gICAgICBzdGF0ZS5zb3VyY2UgPSBURU1QTEFURS5qb2luKHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgICB9XG4gIH1cbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2Ugc2V0R2xvYmFsKGtleSwgdmFsdWUpO1xuICAgIHJldHVybjtcbiAgfSBlbHNlIGlmICghdW5zYWZlKSB7XG4gICAgZGVsZXRlIE9ba2V5XTtcbiAgfSBlbHNlIGlmICghbm9UYXJnZXRHZXQgJiYgT1trZXldKSB7XG4gICAgc2ltcGxlID0gdHJ1ZTtcbiAgfVxuICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgZWxzZSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoTywga2V5LCB2YWx1ZSk7XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHRoaXMpICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59KTtcbiIsInZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIHNhZmVcbiAgcmV0dXJuIG51bWJlciAhPT0gbnVtYmVyIHx8IG51bWJlciA9PT0gMCA/IDAgOiAobnVtYmVyID4gMCA/IGZsb29yIDogY2VpbCkobnVtYmVyKTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gSGVscGVyIGZvciBhIHBvcHVsYXIgcmVwZWF0aW5nIGNhc2Ugb2YgdGhlIHNwZWM6XG4vLyBMZXQgaW50ZWdlciBiZSA/IFRvSW50ZWdlcihpbmRleCkuXG4vLyBJZiBpbnRlZ2VyIDwgMCwgbGV0IHJlc3VsdCBiZSBtYXgoKGxlbmd0aCArIGludGVnZXIpLCAwKTsgZWxzZSBsZXQgcmVzdWx0IGJlIG1pbihpbnRlZ2VyLCBsZW5ndGgpLlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICB2YXIgaW50ZWdlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICByZXR1cm4gaW50ZWdlciA8IDAgPyBtYXgoaW50ZWdlciArIGxlbmd0aCwgMCkgOiBtaW4oaW50ZWdlciwgbGVuZ3RoKTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBhcmd1bWVudCA+IDAgPyBtaW4odG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCksIDB4MUZGRkZGRkZGRkZGRkYpIDogMDsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsInZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcblxuLy8gYExlbmd0aE9mQXJyYXlMaWtlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGVuZ3Rob2ZhcnJheWxpa2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdG9MZW5ndGgob2JqLmxlbmd0aCk7XG59O1xuIiwidmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCJ2YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyBJRTgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gW1xuICAnY29uc3RydWN0b3InLFxuICAnaGFzT3duUHJvcGVydHknLFxuICAnaXNQcm90b3R5cGVPZicsXG4gICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG4gICd0b0xvY2FsZVN0cmluZycsXG4gICd0b1N0cmluZycsXG4gICd2YWx1ZU9mJ1xuXTtcbiIsInZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsInZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3duLWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgdmFyIGtleXMgPSBvd25LZXlzKHNvdXJjZSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgaWYgKCFoYXNPd24odGFyZ2V0LCBrZXkpKSBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gIH1cbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciBzZXRHbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LWdsb2JhbCcpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMubm9UYXJnZXRHZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBGT1JDRUQsIHRhcmdldCwga2V5LCB0YXJnZXRQcm9wZXJ0eSwgc291cmNlUHJvcGVydHksIGRlc2NyaXB0b3I7XG4gIGlmIChHTE9CQUwpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWw7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsW1RBUkdFVF0gfHwgc2V0R2xvYmFsKFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IChnbG9iYWxbVEFSR0VUXSB8fCB7fSkucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMubm9UYXJnZXRHZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PT0gdHlwZW9mIHRhcmdldFByb3BlcnR5KSBjb250aW51ZTtcbiAgICAgIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5KTtcbiAgICB9XG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoc291cmNlUHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuICAgIC8vIGV4dGVuZCBnbG9iYWxcbiAgICByZWRlZmluZSh0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYElzQXJyYXlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2FycmF5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT0gJ0FycmF5Jztcbn07XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIHRlc3QgPSB7fTtcblxudGVzdFtUT19TVFJJTkdfVEFHXSA9ICd6JztcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmcodGVzdCkgPT09ICdbb2JqZWN0IHpdJztcbiIsInZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIENPUlJFQ1RfQVJHVU1FTlRTID0gY2xhc3NvZlJhdyhmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT0gJ09iamVjdCcgJiYgaXNDYWxsYWJsZShPLmNhbGxlZSkgPyAnQXJndW1lbnRzJyA6IHJlc3VsdDtcbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ1N5bWJvbCcpIHRocm93IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcnKTtcbiAgcmV0dXJuIFN0cmluZyhhcmd1bWVudCk7XG59O1xuIiwidmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qta2V5cyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsZW5ndGggPiBpbmRleCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXkgPSBrZXlzW2luZGV4KytdLCBQcm9wZXJ0aWVzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdkb2N1bWVudCcsICdkb2N1bWVudEVsZW1lbnQnKTtcbiIsIi8qIGdsb2JhbCBBY3RpdmVYT2JqZWN0IC0tIG9sZCBJRSwgV1NIICovXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG5cbnZhciBHVCA9ICc+JztcbnZhciBMVCA9ICc8JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBTQ1JJUFQgPSAnc2NyaXB0JztcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIEVtcHR5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cbnZhciBzY3JpcHRUYWcgPSBmdW5jdGlvbiAoY29udGVudCkge1xuICByZXR1cm4gTFQgKyBTQ1JJUFQgKyBHVCArIGNvbnRlbnQgKyBMVCArICcvJyArIFNDUklQVCArIEdUO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIEFjdGl2ZVggT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYID0gZnVuY3Rpb24gKGFjdGl2ZVhEb2N1bWVudCkge1xuICBhY3RpdmVYRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCcnKSk7XG4gIGFjdGl2ZVhEb2N1bWVudC5jbG9zZSgpO1xuICB2YXIgdGVtcCA9IGFjdGl2ZVhEb2N1bWVudC5wYXJlbnRXaW5kb3cuT2JqZWN0O1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsOyAvLyBhdm9pZCBtZW1vcnkgbGVha1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgYWN0aXZlWERvY3VtZW50ID0gbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJ1xuICAgID8gZG9jdW1lbnQuZG9tYWluICYmIGFjdGl2ZVhEb2N1bWVudFxuICAgICAgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgLy8gb2xkIElFXG4gICAgICA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpXG4gICAgOiBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCk7IC8vIFdTSFxuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlICovXG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKS5mO1xuXG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHdpbmRvd05hbWVzLnNsaWNlKCk7XG4gIH1cbn07XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiB0b1N0cmluZy5jYWxsKGl0KSA9PSAnW29iamVjdCBXaW5kb3ddJ1xuICAgID8gZ2V0V2luZG93TmFtZXMoaXQpXG4gICAgOiAkZ2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoaXQpKTtcbn07XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbmV4cG9ydHMuZiA9IHdlbGxLbm93blN5bWJvbDtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsO1xuIiwidmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgdmFyIFN5bWJvbCA9IHBhdGguU3ltYm9sIHx8IChwYXRoLlN5bWJvbCA9IHt9KTtcbiAgaWYgKCFoYXNPd24oU3ltYm9sLCBOQU1FKSkgZGVmaW5lUHJvcGVydHkoU3ltYm9sLCBOQU1FLCB7XG4gICAgdmFsdWU6IHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUuZihOQU1FKVxuICB9KTtcbn07XG4iLCJ2YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUQUcsIFNUQVRJQykge1xuICBpZiAoaXQgJiYgIWhhc093bihpdCA9IFNUQVRJQyA/IGl0IDogaXQucHJvdG90eXBlLCBUT19TVFJJTkdfVEFHKSkge1xuICAgIGRlZmluZVByb3BlcnR5KGl0LCBUT19TVFJJTkdfVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IFRBRyB9KTtcbiAgfVxufTtcbiIsInZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG4vLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUNhbGxhYmxlKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQpO1xuICAgIH07XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xuXG52YXIgZW1wdHkgPSBbXTtcbnZhciBjb25zdHJ1Y3QgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ2NvbnN0cnVjdCcpO1xudmFyIGNvbnN0cnVjdG9yUmVnRXhwID0gL15cXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXFxiLztcbnZhciBleGVjID0gY29uc3RydWN0b3JSZWdFeHAuZXhlYztcbnZhciBJTkNPUlJFQ1RfVE9fU1RSSU5HID0gIWNvbnN0cnVjdG9yUmVnRXhwLmV4ZWMoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcblxudmFyIGlzQ29uc3RydWN0b3JNb2Rlcm4gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0cnVjdChPYmplY3QsIGVtcHR5LCBhcmd1bWVudCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG52YXIgaXNDb25zdHJ1Y3RvckxlZ2FjeSA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHN3aXRjaCAoY2xhc3NvZihhcmd1bWVudCkpIHtcbiAgICBjYXNlICdBc3luY0Z1bmN0aW9uJzpcbiAgICBjYXNlICdHZW5lcmF0b3JGdW5jdGlvbic6XG4gICAgY2FzZSAnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbic6IHJldHVybiBmYWxzZTtcbiAgICAvLyB3ZSBjYW4ndCBjaGVjayAucHJvdG90eXBlIHNpbmNlIGNvbnN0cnVjdG9ycyBwcm9kdWNlZCBieSAuYmluZCBoYXZlbid0IGl0XG4gIH0gcmV0dXJuIElOQ09SUkVDVF9UT19TVFJJTkcgfHwgISFleGVjLmNhbGwoY29uc3RydWN0b3JSZWdFeHAsIGluc3BlY3RTb3VyY2UoYXJndW1lbnQpKTtcbn07XG5cbi8vIGBJc0NvbnN0cnVjdG9yYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjb25zdHJ1Y3RvclxubW9kdWxlLmV4cG9ydHMgPSAhY29uc3RydWN0IHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGNhbGxlZDtcbiAgcmV0dXJuIGlzQ29uc3RydWN0b3JNb2Rlcm4oaXNDb25zdHJ1Y3Rvck1vZGVybi5jYWxsKVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKE9iamVjdClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihmdW5jdGlvbiAoKSB7IGNhbGxlZCA9IHRydWU7IH0pXG4gICAgfHwgY2FsbGVkO1xufSkgPyBpc0NvbnN0cnVjdG9yTGVnYWN5IDogaXNDb25zdHJ1Y3Rvck1vZGVybjtcbiIsInZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG4vLyBhIHBhcnQgb2YgYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWxBcnJheSkpIHtcbiAgICBDID0gb3JpZ2luYWxBcnJheS5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmIChpc0NvbnN0cnVjdG9yKEMpICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEM7XG59O1xuIiwidmFyIGFycmF5U3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxuLy8gYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKGFycmF5U3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsQXJyYXkpKShsZW5ndGggPT09IDAgPyAwIDogbGVuZ3RoKTtcbn07XG4iLCJ2YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgZm9yRWFjaCwgbWFwLCBmaWx0ZXIsIHNvbWUsIGV2ZXJ5LCBmaW5kLCBmaW5kSW5kZXgsIGZpbHRlclJlamVjdCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09IDY7XG4gIHZhciBJU19GSUxURVJfUkVKRUNUID0gVFlQRSA9PSA3O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShzZWxmKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjcmVhdGUgPSBzcGVjaWZpY0NyZWF0ZSB8fCBhcnJheVNwZWNpZXNDcmVhdGU7XG4gICAgdmFyIHRhcmdldCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiB8fCBJU19GSUxURVJfUkVKRUNUID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaC5jYWxsKHRhcmdldCwgdmFsdWUpOyAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAvLyBldmVyeVxuICAgICAgICAgIGNhc2UgNzogcHVzaC5jYWxsKHRhcmdldCwgdmFsdWUpOyAvLyBmaWx0ZXJSZWplY3RcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiAgZm9yRWFjaDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiAgc29tZTogY3JlYXRlTWV0aG9kKDMpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZEluZGV4XG4gIGZpbmRJbmRleDogY3JlYXRlTWV0aG9kKDYpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlclJlamVjdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbHRlcmluZ1xuICBmaWx0ZXJSZWplY3Q6IGNyZWF0ZU1ldGhvZCg3KVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgbmF0aXZlT2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC13cmFwcGVkJyk7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS13ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG5cbnZhciBISURERU4gPSBzaGFyZWRLZXkoJ2hpZGRlbicpO1xudmFyIFNZTUJPTCA9ICdTeW1ib2wnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFRPX1BSSU1JVElWRSA9IHdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNZTUJPTCk7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJHN0cmluZ2lmeSA9IGdldEJ1aWx0SW4oJ0pTT04nLCAnc3RyaW5naWZ5Jyk7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZjtcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvdHlwZVN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeScpO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgUU9iamVjdCA9IGdsb2JhbC5RT2JqZWN0O1xuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgVVNFX1NFVFRFUiA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RDcmVhdGUobmF0aXZlRGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgdmFyIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0UHJvdG90eXBlLCBQKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpIGRlbGV0ZSBPYmplY3RQcm90b3R5cGVbUF07XG4gIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciAmJiBPICE9PSBPYmplY3RQcm90b3R5cGUpIHtcbiAgICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90b3R5cGUsIFAsIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpO1xuICB9XG59IDogbmF0aXZlRGVmaW5lUHJvcGVydHk7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZywgZGVzY3JpcHRpb24pIHtcbiAgdmFyIHN5bWJvbCA9IEFsbFN5bWJvbHNbdGFnXSA9IG5hdGl2ZU9iamVjdENyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzZXRJbnRlcm5hbFN0YXRlKHN5bWJvbCwge1xuICAgIHR5cGU6IFNZTUJPTCxcbiAgICB0YWc6IHRhZyxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25cbiAgfSk7XG4gIGlmICghREVTQ1JJUFRPUlMpIHN5bWJvbC5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICByZXR1cm4gc3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgaWYgKE8gPT09IE9iamVjdFByb3RvdHlwZSkgJGRlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFAsIEF0dHJpYnV0ZXMpO1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoaGFzT3duKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUF0dHJpYnV0ZXMuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXNPd24oTywgSElEREVOKSkgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgSElEREVOLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwge30pKTtcbiAgICAgIE9bSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc093bihPLCBISURERU4pICYmIE9bSElEREVOXVtrZXldKSBPW0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgQXR0cmlidXRlcyA9IG5hdGl2ZU9iamVjdENyZWF0ZShBdHRyaWJ1dGVzLCB7IGVudW1lcmFibGU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzY3JpcHRvcihPLCBrZXksIEF0dHJpYnV0ZXMpO1xuICB9IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBrZXksIEF0dHJpYnV0ZXMpO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcGVydGllcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKHByb3BlcnRpZXMpLmNvbmNhdCgkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHByb3BlcnRpZXMpKTtcbiAgJGZvckVhY2goa2V5cywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghREVTQ1JJUFRPUlMgfHwgJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocHJvcGVydGllcywga2V5KSkgJGRlZmluZVByb3BlcnR5KE8sIGtleSwgcHJvcGVydGllc1trZXldKTtcbiAgfSk7XG4gIHJldHVybiBPO1xufTtcblxudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gbmF0aXZlT2JqZWN0Q3JlYXRlKE8pIDogJGRlZmluZVByb3BlcnRpZXMobmF0aXZlT2JqZWN0Q3JlYXRlKE8pLCBQcm9wZXJ0aWVzKTtcbn07XG5cbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBQID0gdG9Qcm9wZXJ0eUtleShWKTtcbiAgdmFyIGVudW1lcmFibGUgPSBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHRoaXMsIFApO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBQKSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFApKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBlbnVtZXJhYmxlIHx8ICFoYXNPd24odGhpcywgUCkgfHwgIWhhc093bihBbGxTeW1ib2xzLCBQKSB8fCBoYXNPd24odGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1bUF1cbiAgICA/IGVudW1lcmFibGUgOiB0cnVlO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICB2YXIgaXQgPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIHZhciBrZXkgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvdHlwZSAmJiBoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIGRlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSk7XG4gIGlmIChkZXNjcmlwdG9yICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzT3duKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIHtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSB0cnVlO1xuICB9XG4gIHJldHVybiBkZXNjcmlwdG9yO1xufTtcblxudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXModG9JbmRleGVkT2JqZWN0KE8pKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICAkZm9yRWFjaChuYW1lcywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpKSByZXN1bHQucHVzaChrZXkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKE8pIHtcbiAgdmFyIElTX09CSkVDVF9QUk9UT1RZUEUgPSBPID09PSBPYmplY3RQcm90b3R5cGU7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMoSVNfT0JKRUNUX1BST1RPVFlQRSA/IE9iamVjdFByb3RvdHlwZVN5bWJvbHMgOiB0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICghSVNfT0JKRUNUX1BST1RPVFlQRSB8fCBoYXNPd24oT2JqZWN0UHJvdG90eXBlLCBrZXkpKSkge1xuICAgICAgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gYFN5bWJvbGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLWNvbnN0cnVjdG9yXG5pZiAoIU5BVElWRV9TWU1CT0wpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gIWFyZ3VtZW50cy5sZW5ndGggfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiAkdG9TdHJpbmcoYXJndW1lbnRzWzBdKTtcbiAgICB2YXIgdGFnID0gdWlkKGRlc2NyaXB0aW9uKTtcbiAgICB2YXIgc2V0dGVyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlKSBzZXR0ZXIuY2FsbChPYmplY3RQcm90b3R5cGVTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzT3duKHRoaXMsIEhJRERFTikgJiYgaGFzT3duKHRoaXNbSElEREVOXSwgdGFnKSkgdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHNldFN5bWJvbERlc2NyaXB0b3IodGhpcywgdGFnLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBVU0VfU0VUVEVSKSBzZXRTeW1ib2xEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiBzZXR0ZXIgfSk7XG4gICAgcmV0dXJuIHdyYXAodGFnLCBkZXNjcmlwdGlvbik7XG4gIH07XG5cbiAgcmVkZWZpbmUoJFN5bWJvbFtQUk9UT1RZUEVdLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS50YWc7XG4gIH0pO1xuXG4gIHJlZGVmaW5lKCRTeW1ib2wsICd3aXRob3V0U2V0dGVyJywgZnVuY3Rpb24gKGRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIHdyYXAodWlkKGRlc2NyaXB0aW9uKSwgZGVzY3JpcHRpb24pO1xuICB9KTtcblxuICBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mID0gJGRlZmluZVByb3BlcnR5O1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdlbGxLbm93blN5bWJvbChuYW1lKSwgbmFtZSk7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtU3ltYm9sLWRlc2NyaXB0aW9uXG4gICAgbmF0aXZlRGVmaW5lUHJvcGVydHkoJFN5bWJvbFtQUk9UT1RZUEVdLCAnZGVzY3JpcHRpb24nLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGRlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5kZXNjcmlwdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIUlTX1BVUkUpIHtcbiAgICAgIHJlZGVmaW5lKE9iamVjdFByb3RvdHlwZSwgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuJCh7IGdsb2JhbDogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCwgc2hhbTogIU5BVElWRV9TWU1CT0wgfSwge1xuICBTeW1ib2w6ICRTeW1ib2xcbn0pO1xuXG4kZm9yRWFjaChvYmplY3RLZXlzKFdlbGxLbm93blN5bWJvbHNTdG9yZSksIGZ1bmN0aW9uIChuYW1lKSB7XG4gIGRlZmluZVdlbGxLbm93blN5bWJvbChuYW1lKTtcbn0pO1xuXG4kKHsgdGFyZ2V0OiBTWU1CT0wsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICAvLyBgU3ltYm9sLmZvcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmZvclxuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBzdHJpbmcgPSAkdG9TdHJpbmcoa2V5KTtcbiAgICBpZiAoaGFzT3duKFN0cmluZ1RvU3ltYm9sUmVnaXN0cnksIHN0cmluZykpIHJldHVybiBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ107XG4gICAgdmFyIHN5bWJvbCA9ICRTeW1ib2woc3RyaW5nKTtcbiAgICBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ10gPSBzeW1ib2w7XG4gICAgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1ib2xdID0gc3RyaW5nO1xuICAgIHJldHVybiBzeW1ib2w7XG4gIH0sXG4gIC8vIGBTeW1ib2wua2V5Rm9yYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wua2V5Zm9yXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sJyk7XG4gICAgaWYgKGhhc093bihTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5LCBzeW0pKSByZXR1cm4gU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1dO1xuICB9LFxuICB1c2VTZXR0ZXI6IGZ1bmN0aW9uICgpIHsgVVNFX1NFVFRFUiA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gZmFsc2U7IH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvclxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eXN5bWJvbHNcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogZmFpbHMoZnVuY3Rpb24gKCkgeyBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZigxKTsgfSkgfSwge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHJldHVybiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZih0b09iamVjdChpdCkpO1xuICB9XG59KTtcblxuLy8gYEpTT04uc3RyaW5naWZ5YCBtZXRob2QgYmVoYXZpb3Igd2l0aCBzeW1ib2xzXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWpzb24uc3RyaW5naWZ5XG5pZiAoJHN0cmluZ2lmeSkge1xuICB2YXIgRk9SQ0VEX0pTT05fU1RSSU5HSUZZID0gIU5BVElWRV9TWU1CT0wgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBzeW1ib2wgPSAkU3ltYm9sKCk7XG4gICAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgICByZXR1cm4gJHN0cmluZ2lmeShbc3ltYm9sXSkgIT0gJ1tudWxsXSdcbiAgICAgIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAgICAgfHwgJHN0cmluZ2lmeSh7IGE6IHN5bWJvbCB9KSAhPSAne30nXG4gICAgICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICAgICAgfHwgJHN0cmluZ2lmeShPYmplY3Qoc3ltYm9sKSkgIT0gJ3t9JztcbiAgfSk7XG5cbiAgJCh7IHRhcmdldDogJ0pTT04nLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRF9KU09OX1NUUklOR0lGWSB9LCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCwgcmVwbGFjZXIsIHNwYWNlKSB7XG4gICAgICB2YXIgYXJncyA9IFtpdF07XG4gICAgICB2YXIgaW5kZXggPSAxO1xuICAgICAgdmFyICRyZXBsYWNlcjtcbiAgICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaW5kZXgpIGFyZ3MucHVzaChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgICAgJHJlcGxhY2VyID0gcmVwbGFjZXI7XG4gICAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXBsYWNlciA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmIChpc0NhbGxhYmxlKCRyZXBsYWNlcikpIHZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgICAgcmV0dXJuICRzdHJpbmdpZnkuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgfVxuICB9KTtcbn1cblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmlmICghJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0pIHtcbiAgdmFyIHZhbHVlT2YgPSAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZjtcbiAgcmVkZWZpbmUoJFN5bWJvbFtQUk9UT1RZUEVdLCBUT19QUklNSVRJVkUsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdmFsdWVPZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9KTtcbn1cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsIFNZTUJPTCk7XG5cbmhpZGRlbktleXNbSElEREVOXSA9IHRydWU7XG4iLCIvLyBgU3ltYm9sLnByb3RvdHlwZS5kZXNjcmlwdGlvbmAgZ2V0dGVyXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUuZGVzY3JpcHRpb25cbid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG5cbnZhciBOYXRpdmVTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xuXG5pZiAoREVTQ1JJUFRPUlMgJiYgaXNDYWxsYWJsZShOYXRpdmVTeW1ib2wpICYmICghKCdkZXNjcmlwdGlvbicgaW4gTmF0aXZlU3ltYm9sLnByb3RvdHlwZSkgfHxcbiAgLy8gU2FmYXJpIDEyIGJ1Z1xuICBOYXRpdmVTeW1ib2woKS5kZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkXG4pKSB7XG4gIHZhciBFbXB0eVN0cmluZ0Rlc2NyaXB0aW9uU3RvcmUgPSB7fTtcbiAgLy8gd3JhcCBTeW1ib2wgY29uc3RydWN0b3IgZm9yIGNvcnJlY3Qgd29yayB3aXRoIHVuZGVmaW5lZCBkZXNjcmlwdGlvblxuICB2YXIgU3ltYm9sV3JhcHBlciA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSBhcmd1bWVudHMubGVuZ3RoIDwgMSB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IFN0cmluZyhhcmd1bWVudHNbMF0pO1xuICAgIHZhciByZXN1bHQgPSB0aGlzIGluc3RhbmNlb2YgU3ltYm9sV3JhcHBlclxuICAgICAgPyBuZXcgTmF0aXZlU3ltYm9sKGRlc2NyaXB0aW9uKVxuICAgICAgLy8gaW4gRWRnZSAxMywgU3RyaW5nKFN5bWJvbCh1bmRlZmluZWQpKSA9PT0gJ1N5bWJvbCh1bmRlZmluZWQpJ1xuICAgICAgOiBkZXNjcmlwdGlvbiA9PT0gdW5kZWZpbmVkID8gTmF0aXZlU3ltYm9sKCkgOiBOYXRpdmVTeW1ib2woZGVzY3JpcHRpb24pO1xuICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gJycpIEVtcHR5U3RyaW5nRGVzY3JpcHRpb25TdG9yZVtyZXN1bHRdID0gdHJ1ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKFN5bWJvbFdyYXBwZXIsIE5hdGl2ZVN5bWJvbCk7XG4gIHZhciBzeW1ib2xQcm90b3R5cGUgPSBTeW1ib2xXcmFwcGVyLnByb3RvdHlwZSA9IE5hdGl2ZVN5bWJvbC5wcm90b3R5cGU7XG4gIHN5bWJvbFByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN5bWJvbFdyYXBwZXI7XG5cbiAgdmFyIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG90eXBlLnRvU3RyaW5nO1xuICB2YXIgbmF0aXZlU3ltYm9sID0gU3RyaW5nKE5hdGl2ZVN5bWJvbCgndGVzdCcpKSA9PSAnU3ltYm9sKHRlc3QpJztcbiAgdmFyIHJlZ2V4cCA9IC9eU3ltYm9sXFwoKC4qKVxcKVteKV0rJC87XG4gIGRlZmluZVByb3BlcnR5KHN5bWJvbFByb3RvdHlwZSwgJ2Rlc2NyaXB0aW9uJywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGRlc2NyaXB0aW9uKCkge1xuICAgICAgdmFyIHN5bWJvbCA9IGlzT2JqZWN0KHRoaXMpID8gdGhpcy52YWx1ZU9mKCkgOiB0aGlzO1xuICAgICAgdmFyIHN0cmluZyA9IHN5bWJvbFRvU3RyaW5nLmNhbGwoc3ltYm9sKTtcbiAgICAgIGlmIChoYXNPd24oRW1wdHlTdHJpbmdEZXNjcmlwdGlvblN0b3JlLCBzeW1ib2wpKSByZXR1cm4gJyc7XG4gICAgICB2YXIgZGVzYyA9IG5hdGl2ZVN5bWJvbCA/IHN0cmluZy5zbGljZSg3LCAtMSkgOiBzdHJpbmcucmVwbGFjZShyZWdleHAsICckMScpO1xuICAgICAgcmV0dXJuIGRlc2MgPT09ICcnID8gdW5kZWZpbmVkIDogZGVzYztcbiAgICB9XG4gIH0pO1xuXG4gICQoeyBnbG9iYWw6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgU3ltYm9sOiBTeW1ib2xXcmFwcGVyXG4gIH0pO1xufVxuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC5hc3luY0l0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuYXN5bmNpdGVyYXRvclxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdhc3luY0l0ZXJhdG9yJyk7XG4iLCJ2YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS13ZWxsLWtub3duLXN5bWJvbCcpO1xuXG4vLyBgU3ltYm9sLmhhc0luc3RhbmNlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaGFzaW5zdGFuY2VcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaGFzSW5zdGFuY2UnKTtcbiIsInZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLXdlbGwta25vd24tc3ltYm9sJyk7XG5cbi8vIGBTeW1ib2wuaXNDb25jYXRTcHJlYWRhYmxlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXNjb25jYXRzcHJlYWRhYmxlXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC5pdGVyYXRvcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLml0ZXJhdG9yXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG4iLCJ2YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS13ZWxsLWtub3duLXN5bWJvbCcpO1xuXG4vLyBgU3ltYm9sLm1hdGNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wubWF0Y2hcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcbiIsInZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLXdlbGwta25vd24tc3ltYm9sJyk7XG5cbi8vIGBTeW1ib2wubWF0Y2hBbGxgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5tYXRjaGFsbFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdtYXRjaEFsbCcpO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC5yZXBsYWNlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucmVwbGFjZVxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdyZXBsYWNlJyk7XG4iLCJ2YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS13ZWxsLWtub3duLXN5bWJvbCcpO1xuXG4vLyBgU3ltYm9sLnNlYXJjaGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNlYXJjaFxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdzZWFyY2gnKTtcbiIsInZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLXdlbGwta25vd24tc3ltYm9sJyk7XG5cbi8vIGBTeW1ib2wuc3BlY2llc2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNwZWNpZXNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC5zcGxpdGAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnNwbGl0XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3NwbGl0Jyk7XG4iLCJ2YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS13ZWxsLWtub3duLXN5bWJvbCcpO1xuXG4vLyBgU3ltYm9sLnRvUHJpbWl0aXZlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudG9wcmltaXRpdmVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcbiIsInZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLXdlbGwta25vd24tc3ltYm9sJyk7XG5cbi8vIGBTeW1ib2wudG9TdHJpbmdUYWdgIHdlbGwta25vd24gc3ltYm9sXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC50b3N0cmluZ3RhZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC51bnNjb3BhYmxlc2Agd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnVuc2NvcGFibGVzXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3Vuc2NvcGFibGVzJyk7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIEYucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbnVsbDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBGKCkpICE9PSBGLnByb3RvdHlwZTtcbn0pO1xuIiwidmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIChPKSB7XG4gIHZhciBvYmplY3QgPSB0b09iamVjdChPKTtcbiAgaWYgKGhhc093bihvYmplY3QsIElFX1BST1RPKSkgcmV0dXJuIG9iamVjdFtJRV9QUk9UT107XG4gIHZhciBjb25zdHJ1Y3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgaWYgKGlzQ2FsbGFibGUoY29uc3RydWN0b3IpICYmIG9iamVjdCBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG90eXBlIDogbnVsbDtcbn07XG4iLCJ2YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAodHlwZW9mIGFyZ3VtZW50ID09PSAnb2JqZWN0JyB8fCBpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyBTdHJpbmcoYXJndW1lbnQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xufTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvIC0tIHNhZmUgKi9cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5zZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZXRwcm90b3R5cGVvZlxuLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LXNldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IGZ1bmN0aW9uICgpIHtcbiAgdmFyIENPUlJFQ1RfU0VUVEVSID0gZmFsc2U7XG4gIHZhciB0ZXN0ID0ge307XG4gIHZhciBzZXR0ZXI7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICAgIHNldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldDtcbiAgICBzZXR0ZXIuY2FsbCh0ZXN0LCBbXSk7XG4gICAgQ09SUkVDVF9TRVRURVIgPSB0ZXN0IGluc3RhbmNlb2YgQXJyYXk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgYW5PYmplY3QoTyk7XG4gICAgYVBvc3NpYmxlUHJvdG90eXBlKHByb3RvKTtcbiAgICBpZiAoQ09SUkVDVF9TRVRURVIpIHNldHRlci5jYWxsKE8sIHByb3RvKTtcbiAgICBlbHNlIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgcmV0dXJuIE87XG4gIH07XG59KCkgOiB1bmRlZmluZWQpO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxuLy8gYEluc3RhbGxFcnJvckNhdXNlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1lcnJvci1jYXVzZS8jc2VjLWVycm9yb2JqZWN0cy1pbnN0YWxsLWVycm9yLWNhdXNlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBvcHRpb25zKSB7XG4gIGlmIChpc09iamVjdChvcHRpb25zKSAmJiAnY2F1c2UnIGluIG9wdGlvbnMpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoTywgJ2NhdXNlJywgb3B0aW9ucy5jYXVzZSk7XG4gIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvdHlwZVtJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGdldE1ldGhvZChpdCwgSVRFUkFUT1IpXG4gICAgfHwgZ2V0TWV0aG9kKGl0LCAnQEBpdGVyYXRvcicpXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCJ2YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50LCB1c2luZ0l0ZXJhdG9yKSB7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gZ2V0SXRlcmF0b3JNZXRob2QoYXJndW1lbnQpIDogdXNpbmdJdGVyYXRvcjtcbiAgaWYgKGFDYWxsYWJsZShpdGVyYXRvck1ldGhvZCkpIHJldHVybiBhbk9iamVjdChpdGVyYXRvck1ldGhvZC5jYWxsKGFyZ3VtZW50KSk7XG4gIHRocm93IFR5cGVFcnJvcihTdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGtpbmQsIHZhbHVlKSB7XG4gIHZhciBpbm5lclJlc3VsdCwgaW5uZXJFcnJvcjtcbiAgYW5PYmplY3QoaXRlcmF0b3IpO1xuICB0cnkge1xuICAgIGlubmVyUmVzdWx0ID0gZ2V0TWV0aG9kKGl0ZXJhdG9yLCAncmV0dXJuJyk7XG4gICAgaWYgKCFpbm5lclJlc3VsdCkge1xuICAgICAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpbm5lclJlc3VsdCA9IGlubmVyUmVzdWx0LmNhbGwoaXRlcmF0b3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlubmVyRXJyb3IgPSB0cnVlO1xuICAgIGlubmVyUmVzdWx0ID0gZXJyb3I7XG4gIH1cbiAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICBpZiAoaW5uZXJFcnJvcikgdGhyb3cgaW5uZXJSZXN1bHQ7XG4gIGFuT2JqZWN0KGlubmVyUmVzdWx0KTtcbiAgcmV0dXJuIHZhbHVlO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbnZhciBSZXN1bHQgPSBmdW5jdGlvbiAoc3RvcHBlZCwgcmVzdWx0KSB7XG4gIHRoaXMuc3RvcHBlZCA9IHN0b3BwZWQ7XG4gIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIHVuYm91bmRGdW5jdGlvbiwgb3B0aW9ucykge1xuICB2YXIgdGhhdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50aGF0O1xuICB2YXIgQVNfRU5UUklFUyA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5BU19FTlRSSUVTKTtcbiAgdmFyIElTX0lURVJBVE9SID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX0lURVJBVE9SKTtcbiAgdmFyIElOVEVSUlVQVEVEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklOVEVSUlVQVEVEKTtcbiAgdmFyIGZuID0gYmluZCh1bmJvdW5kRnVuY3Rpb24sIHRoYXQsIDEgKyBBU19FTlRSSUVTICsgSU5URVJSVVBURUQpO1xuICB2YXIgaXRlcmF0b3IsIGl0ZXJGbiwgaW5kZXgsIGxlbmd0aCwgcmVzdWx0LCBuZXh0LCBzdGVwO1xuXG4gIHZhciBzdG9wID0gZnVuY3Rpb24gKGNvbmRpdGlvbikge1xuICAgIGlmIChpdGVyYXRvcikgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGNvbmRpdGlvbik7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQodHJ1ZSwgY29uZGl0aW9uKTtcbiAgfTtcblxuICB2YXIgY2FsbEZuID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKEFTX0VOVFJJRVMpIHtcbiAgICAgIGFuT2JqZWN0KHZhbHVlKTtcbiAgICAgIHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSwgc3RvcCkgOiBmbih2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgIH0gcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWUsIHN0b3ApIDogZm4odmFsdWUpO1xuICB9O1xuXG4gIGlmIChJU19JVEVSQVRPUikge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGU7XG4gIH0gZWxzZSB7XG4gICAgaXRlckZuID0gZ2V0SXRlcmF0b3JNZXRob2QoaXRlcmFibGUpO1xuICAgIGlmICghaXRlckZuKSB0aHJvdyBUeXBlRXJyb3IoU3RyaW5nKGl0ZXJhYmxlKSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG4gICAgLy8gb3B0aW1pc2F0aW9uIGZvciBhcnJheSBpdGVyYXRvcnNcbiAgICBpZiAoaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShpdGVyYWJsZSk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxGbihpdGVyYWJsZVtpbmRleF0pO1xuICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdCBpbnN0YW5jZW9mIFJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xuICAgIH1cbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKGl0ZXJhYmxlLCBpdGVyRm4pO1xuICB9XG5cbiAgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7XG4gIHdoaWxlICghKHN0ZXAgPSBuZXh0LmNhbGwoaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGNhbGxGbihzdGVwLnZhbHVlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PSAnb2JqZWN0JyAmJiByZXN1bHQgJiYgcmVzdWx0IGluc3RhbmNlb2YgUmVzdWx0KSByZXR1cm4gcmVzdWx0O1xuICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBpbnN0YWxsRXJyb3JDYXVzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbnZhciAkQWdncmVnYXRlRXJyb3IgPSBmdW5jdGlvbiBBZ2dyZWdhdGVFcnJvcihlcnJvcnMsIG1lc3NhZ2UgLyogLCBvcHRpb25zICovKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgaWYgKCEodGhhdCBpbnN0YW5jZW9mICRBZ2dyZWdhdGVFcnJvcikpIHJldHVybiBuZXcgJEFnZ3JlZ2F0ZUVycm9yKGVycm9ycywgbWVzc2FnZSwgb3B0aW9ucyk7XG4gIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2Vycm9yLW1lc3NhZ2UgLS0gZXhwZWN0ZWRcbiAgICB0aGF0ID0gc2V0UHJvdG90eXBlT2YobmV3IEVycm9yKHVuZGVmaW5lZCksIGdldFByb3RvdHlwZU9mKHRoYXQpKTtcbiAgfVxuICBpZiAobWVzc2FnZSAhPT0gdW5kZWZpbmVkKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkodGhhdCwgJ21lc3NhZ2UnLCB0b1N0cmluZyhtZXNzYWdlKSk7XG4gIGluc3RhbGxFcnJvckNhdXNlKHRoYXQsIG9wdGlvbnMpO1xuICB2YXIgZXJyb3JzQXJyYXkgPSBbXTtcbiAgaXRlcmF0ZShlcnJvcnMsIGVycm9yc0FycmF5LnB1c2gsIHsgdGhhdDogZXJyb3JzQXJyYXkgfSk7XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSh0aGF0LCAnZXJyb3JzJywgZXJyb3JzQXJyYXkpO1xuICByZXR1cm4gdGhhdDtcbn07XG5cbmlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoJEFnZ3JlZ2F0ZUVycm9yLCBFcnJvcik7XG5lbHNlIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoJEFnZ3JlZ2F0ZUVycm9yLCBFcnJvcik7XG5cbiRBZ2dyZWdhdGVFcnJvci5wcm90b3R5cGUgPSBjcmVhdGUoRXJyb3IucHJvdG90eXBlLCB7XG4gIGNvbnN0cnVjdG9yOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgJEFnZ3JlZ2F0ZUVycm9yKSxcbiAgbWVzc2FnZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICcnKSxcbiAgbmFtZTogY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsICdBZ2dyZWdhdGVFcnJvcicpXG59KTtcblxuLy8gYEFnZ3JlZ2F0ZUVycm9yYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hZ2dyZWdhdGUtZXJyb3ItY29uc3RydWN0b3JcbiQoeyBnbG9iYWw6IHRydWUgfSwge1xuICBBZ2dyZWdhdGVFcnJvcjogJEFnZ3JlZ2F0ZUVycm9yXG59KTtcbiIsInZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxudmFyIFVOU0NPUEFCTEVTID0gd2VsbEtub3duU3ltYm9sKCd1bnNjb3BhYmxlcycpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmlmIChBcnJheVByb3RvdHlwZVtVTlNDT1BBQkxFU10gPT0gdW5kZWZpbmVkKSB7XG4gIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoQXJyYXlQcm90b3R5cGUsIFVOU0NPUEFCTEVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiBjcmVhdGUobnVsbClcbiAgfSk7XG59XG5cbi8vIGFkZCBhIGtleSB0byBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICBBcnJheVByb3RvdHlwZVtVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmF0YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXJlbGF0aXZlLWluZGV4aW5nLW1ldGhvZFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUgfSwge1xuICBhdDogZnVuY3Rpb24gYXQoaW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgcmVsYXRpdmVJbmRleCA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICAgIHZhciBrID0gcmVsYXRpdmVJbmRleCA+PSAwID8gcmVsYXRpdmVJbmRleCA6IGxlbiArIHJlbGF0aXZlSW5kZXg7XG4gICAgcmV0dXJuIChrIDwgMCB8fCBrID49IGxlbikgPyB1bmRlZmluZWQgOiBPW2tdO1xuICB9XG59KTtcblxuYWRkVG9VbnNjb3BhYmxlcygnYXQnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHZhciBwcm9wZXJ0eUtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKHByb3BlcnR5S2V5IGluIG9iamVjdCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIHByb3BlcnR5S2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3RbcHJvcGVydHlLZXldID0gdmFsdWU7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICAvLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3N1xuICByZXR1cm4gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IGFycmF5LmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBmb286IDEgfTtcbiAgICB9O1xuICAgIHJldHVybiBhcnJheVtNRVRIT0RfTkFNRV0oQm9vbGVhbikuZm9vICE9PSAxO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRSA9IHdlbGxLbm93blN5bWJvbCgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7XG52YXIgTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEID0gJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCc7XG5cbi8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUID0gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgYXJyYXkgPSBbXTtcbiAgYXJyYXlbSVNfQ09OQ0FUX1NQUkVBREFCTEVdID0gZmFsc2U7XG4gIHJldHVybiBhcnJheS5jb25jYXQoKVswXSAhPT0gYXJyYXk7XG59KTtcblxudmFyIFNQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2NvbmNhdCcpO1xuXG52YXIgaXNDb25jYXRTcHJlYWRhYmxlID0gZnVuY3Rpb24gKE8pIHtcbiAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgc3ByZWFkYWJsZSA9IE9bSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICByZXR1cm4gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShPKTtcbn07XG5cbnZhciBGT1JDRUQgPSAhSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCB8fCAhU1BFQ0lFU19TVVBQT1JUO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmNvbmNhdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5jb25jYXRcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBpc0NvbmNhdFNwcmVhZGFibGUgYW5kIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgY29uY2F0OiBmdW5jdGlvbiBjb25jYXQoYXJnKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGksIGssIGxlbmd0aCwgbGVuLCBFO1xuICAgIGZvciAoaSA9IC0xLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIEUgPSBpID09PSAtMSA/IE8gOiBhcmd1bWVudHNbaV07XG4gICAgICBpZiAoaXNDb25jYXRTcHJlYWRhYmxlKEUpKSB7XG4gICAgICAgIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKEUpO1xuICAgICAgICBpZiAobiArIGxlbiA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93IFR5cGVFcnJvcihNQVhJTVVNX0FMTE9XRURfSU5ERVhfRVhDRUVERUQpO1xuICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbGVuOyBrKyssIG4rKykgaWYgKGsgaW4gRSkgY3JlYXRlUHJvcGVydHkoQSwgbiwgRVtrXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobiA+PSBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyBUeXBlRXJyb3IoTUFYSU1VTV9BTExPV0VEX0lOREVYX0VYQ0VFREVEKTtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkoQSwgbisrLCBFKTtcbiAgICAgIH1cbiAgICB9XG4gICAgQS5sZW5ndGggPSBuO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbmAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5jb3B5d2l0aGluXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWNvcHl3aXRoaW4gLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBbXS5jb3B5V2l0aGluIHx8IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0IC8qID0gMCAqLywgc3RhcnQgLyogPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgdmFyIHRvID0gdG9BYnNvbHV0ZUluZGV4KHRhcmdldCwgbGVuKTtcbiAgdmFyIGZyb20gPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gIHZhciBlbmQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGNvdW50ID0gbWluKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbikpIC0gZnJvbSwgbGVuIC0gdG8pO1xuICB2YXIgaW5jID0gMTtcbiAgaWYgKGZyb20gPCB0byAmJiB0byA8IGZyb20gKyBjb3VudCkge1xuICAgIGluYyA9IC0xO1xuICAgIGZyb20gKz0gY291bnQgLSAxO1xuICAgIHRvICs9IGNvdW50IC0gMTtcbiAgfVxuICB3aGlsZSAoY291bnQtLSA+IDApIHtcbiAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgZWxzZSBkZWxldGUgT1t0b107XG4gICAgdG8gKz0gaW5jO1xuICAgIGZyb20gKz0gaW5jO1xuICB9IHJldHVybiBPO1xufTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNvcHlXaXRoaW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktY29weS13aXRoaW4nKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW5gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuY29weXdpdGhpblxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUgfSwge1xuICBjb3B5V2l0aGluOiBjb3B5V2l0aGluXG59KTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygnY29weVdpdGhpbicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwsbm8tdGhyb3ctbGl0ZXJhbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgIG1ldGhvZC5jYWxsKG51bGwsIGFyZ3VtZW50IHx8IGZ1bmN0aW9uICgpIHsgdGhyb3cgMTsgfSwgMSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRldmVyeSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5ldmVyeTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdldmVyeScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmV2ZXJ5XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhU1RSSUNUX01FVEhPRCB9LCB7XG4gIGV2ZXJ5OiBmdW5jdGlvbiBldmVyeShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZXZlcnkodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbGxgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmlsbFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQgPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChhcmd1bWVudHNMZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBsZW5ndGgpO1xuICB2YXIgZW5kID0gYXJndW1lbnRzTGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGVuZFBvcyA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKTtcbiAgd2hpbGUgKGVuZFBvcyA+IGluZGV4KSBPW2luZGV4KytdID0gdmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZpbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZmlsbCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWxsXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSB9LCB7XG4gIGZpbGw6IGZpbGxcbn0pO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdmaWxsJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbHRlcjtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnZmlsdGVyJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmluZDtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xuXG52YXIgRklORCA9ICdmaW5kJztcbnZhciBTS0lQU19IT0xFUyA9IHRydWU7XG5cbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoRklORCBpbiBbXSkgQXJyYXkoMSlbRklORF0oZnVuY3Rpb24gKCkgeyBTS0lQU19IT0xFUyA9IGZhbHNlOyB9KTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbmRcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IFNLSVBTX0hPTEVTIH0sIHtcbiAgZmluZDogZnVuY3Rpb24gZmluZChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKEZJTkQpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbmRJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maW5kSW5kZXg7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcblxudmFyIEZJTkRfSU5ERVggPSAnZmluZEluZGV4JztcbnZhciBTS0lQU19IT0xFUyA9IHRydWU7XG5cbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoRklORF9JTkRFWCBpbiBbXSkgQXJyYXkoMSlbRklORF9JTkRFWF0oZnVuY3Rpb24gKCkgeyBTS0lQU19IT0xFUyA9IGZhbHNlOyB9KTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZGluZGV4XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBTS0lQU19IT0xFUyB9LCB7XG4gIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kSW5kZXgodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcyhGSU5EX0lOREVYKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xuXG4vLyBgRmxhdHRlbkludG9BcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1GbGF0dGVuSW50b0FycmF5XG52YXIgZmxhdHRlbkludG9BcnJheSA9IGZ1bmN0aW9uICh0YXJnZXQsIG9yaWdpbmFsLCBzb3VyY2UsIHNvdXJjZUxlbiwgc3RhcnQsIGRlcHRoLCBtYXBwZXIsIHRoaXNBcmcpIHtcbiAgdmFyIHRhcmdldEluZGV4ID0gc3RhcnQ7XG4gIHZhciBzb3VyY2VJbmRleCA9IDA7XG4gIHZhciBtYXBGbiA9IG1hcHBlciA/IGJpbmQobWFwcGVyLCB0aGlzQXJnLCAzKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgZWxlbWVudExlbjtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgaWYgKGRlcHRoID4gMCAmJiBpc0FycmF5KGVsZW1lbnQpKSB7XG4gICAgICAgIGVsZW1lbnRMZW4gPSBsZW5ndGhPZkFycmF5TGlrZShlbGVtZW50KTtcbiAgICAgICAgdGFyZ2V0SW5kZXggPSBmbGF0dGVuSW50b0FycmF5KHRhcmdldCwgb3JpZ2luYWwsIGVsZW1lbnQsIGVsZW1lbnRMZW4sIHRhcmdldEluZGV4LCBkZXB0aCAtIDEpIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0YXJnZXRJbmRleCA+PSAweDFGRkZGRkZGRkZGRkZGKSB0aHJvdyBUeXBlRXJyb3IoJ0V4Y2VlZCB0aGUgYWNjZXB0YWJsZSBhcnJheSBsZW5ndGgnKTtcbiAgICAgICAgdGFyZ2V0W3RhcmdldEluZGV4XSA9IGVsZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIHRhcmdldEluZGV4Kys7XG4gICAgfVxuICAgIHNvdXJjZUluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIHRhcmdldEluZGV4O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mbGF0dGVuLWludG8tYXJyYXknKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZsYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmxhdFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUgfSwge1xuICBmbGF0OiBmdW5jdGlvbiBmbGF0KC8qIGRlcHRoQXJnID0gMSAqLykge1xuICAgIHZhciBkZXB0aEFyZyA9IGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgQS5sZW5ndGggPSBmbGF0dGVuSW50b0FycmF5KEEsIE8sIE8sIHNvdXJjZUxlbiwgMCwgZGVwdGhBcmcgPT09IHVuZGVmaW5lZCA/IDEgOiB0b0ludGVnZXJPckluZmluaXR5KGRlcHRoQXJnKSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mbGF0dGVuLWludG8tYXJyYXknKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmxhdE1hcGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mbGF0bWFwXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSB9LCB7XG4gIGZsYXRNYXA6IGZ1bmN0aW9uIGZsYXRNYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBzb3VyY2VMZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgQTtcbiAgICBhQ2FsbGFibGUoY2FsbGJhY2tmbik7XG4gICAgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICBBLmxlbmd0aCA9IGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCAxLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnZm9yRWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxubW9kdWxlLmV4cG9ydHMgPSAhU1RSSUNUX01FVEhPRCA/IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG59IDogW10uZm9yRWFjaDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBbXS5mb3JFYWNoICE9IGZvckVhY2ggfSwge1xuICBmb3JFYWNoOiBmb3JFYWNoXG59KTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIEVOVFJJRVMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRU5UUklFUyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gIHZhciBJU19DT05TVFJVQ1RPUiA9IGlzQ29uc3RydWN0b3IodGhpcyk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgbWFwZm4gPSBhcmd1bWVudHNMZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gIGlmIChtYXBwaW5nKSBtYXBmbiA9IGJpbmQobWFwZm4sIGFyZ3VtZW50c0xlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQsIDIpO1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBnZXRJdGVyYXRvck1ldGhvZChPKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvciwgbmV4dCwgdmFsdWU7XG4gIC8vIGlmIHRoZSB0YXJnZXQgaXMgbm90IGl0ZXJhYmxlIG9yIGl0J3MgYW4gYXJyYXkgd2l0aCB0aGUgZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBhIHNpbXBsZSBjYXNlXG4gIGlmIChpdGVyYXRvck1ldGhvZCAmJiAhKHRoaXMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJhdG9yTWV0aG9kKSkpIHtcbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKE8sIGl0ZXJhdG9yTWV0aG9kKTtcbiAgICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKCkgOiBbXTtcbiAgICBmb3IgKDshKHN0ZXAgPSBuZXh0LmNhbGwoaXRlcmF0b3IpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICB2YWx1ZSA9IG1hcHBpbmcgPyBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlO1xuICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgdmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKGxlbmd0aCkgOiBBcnJheShsZW5ndGgpO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICB2YWx1ZSA9IG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF07XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIGNhbGxlZCA9IDA7XG4gIHZhciBpdGVyYXRvcldpdGhSZXR1cm4gPSB7XG4gICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZG9uZTogISFjYWxsZWQrKyB9O1xuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICgpIHtcbiAgICAgIFNBRkVfQ0xPU0lORyA9IHRydWU7XG4gICAgfVxuICB9O1xuICBpdGVyYXRvcldpdGhSZXR1cm5bSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgbm8tdGhyb3ctbGl0ZXJhbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhdG9yV2l0aFJldHVybiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgU0tJUF9DTE9TSU5HKSB7XG4gIGlmICghU0tJUF9DTE9TSU5HICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIElURVJBVElPTl9TVVBQT1JUID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIG9iamVjdCA9IHt9O1xuICAgIG9iamVjdFtJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogSVRFUkFUSU9OX1NVUFBPUlQgPSB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBleGVjKG9iamVjdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIElURVJBVElPTl9TVVBQT1JUO1xufTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhYmxlKTtcbn0pO1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGZyb206IGZyb21cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGluY2x1ZGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5jbHVkZXM7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUgfSwge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygnaW5jbHVkZXMnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLWFycmF5LXByb3RvdHlwZS1pbmRleG9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBuYXRpdmVJbmRleE9mID0gW10uaW5kZXhPZjtcblxudmFyIE5FR0FUSVZFX1pFUk8gPSAhIW5hdGl2ZUluZGV4T2YgJiYgMSAvIFsxXS5pbmRleE9mKDEsIC0wKSA8IDA7XG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ2luZGV4T2YnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IE5FR0FUSVZFX1pFUk8gfHwgIVNUUklDVF9NRVRIT0QgfSwge1xuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuIE5FR0FUSVZFX1pFUk9cbiAgICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICAgID8gbmF0aXZlSW5kZXhPZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDBcbiAgICAgIDogJGluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxuLy8gYEFycmF5LmlzQXJyYXlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5pc2FycmF5XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNBcnJheTogaXNBcnJheVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1vYmplY3RcbnZhciBJdGVyYXRvclByb3RvdHlwZSwgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBhcnJheUl0ZXJhdG9yO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1hcnJheS1wcm90b3R5cGUta2V5cyAtLSBzYWZlICovXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbnZhciBORVdfSVRFUkFUT1JfUFJPVE9UWVBFID0gSXRlcmF0b3JQcm90b3R5cGUgPT0gdW5kZWZpbmVkIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgLy8gRkY0NC0gbGVnYWN5IGl0ZXJhdG9ycyBjYXNlXG4gIHJldHVybiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0uY2FsbCh0ZXN0KSAhPT0gdGVzdDtcbn0pO1xuXG5pZiAoTkVXX0lURVJBVE9SX1BST1RPVFlQRSkgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbmVsc2UgaWYgKElTX1BVUkUpIEl0ZXJhdG9yUHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtQEBpdGVyYXRvclxuaWYgKCFpc0NhbGxhYmxlKEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgcmVkZWZpbmUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yQ29uc3RydWN0b3IsIFRPX1NUUklOR19UQUcsIGZhbHNlLCB0cnVlKTtcbiAgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgcmV0dXJuIEl0ZXJhdG9yQ29uc3RydWN0b3I7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgRnVuY3Rpb25OYW1lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlcmF0b3ItY29uc3RydWN0b3InKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSXRlcmF0b3JzQ29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpO1xuXG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuUFJPUEVSO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLkNPTkZJR1VSQUJMRTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IEl0ZXJhdG9yc0NvcmUuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IEl0ZXJhdG9yc0NvcmUuQlVHR1lfU0FGQVJJX0lURVJBVE9SUztcbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xudmFyIEVOVFJJRVMgPSAnZW50cmllcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmFibGUsIE5BTUUsIEl0ZXJhdG9yQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG5cbiAgdmFyIGdldEl0ZXJhdGlvbk1ldGhvZCA9IGZ1bmN0aW9uIChLSU5EKSB7XG4gICAgaWYgKEtJTkQgPT09IERFRkFVTFQgJiYgZGVmYXVsdEl0ZXJhdG9yKSByZXR1cm4gZGVmYXVsdEl0ZXJhdG9yO1xuICAgIGlmICghQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT0gJ0FycmF5JyA/IEl0ZXJhYmxlUHJvdG90eXBlLmVudHJpZXMgfHwgbmF0aXZlSXRlcmF0b3IgOiBuYXRpdmVJdGVyYXRvcjtcbiAgdmFyIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgbWV0aG9kcywgS0VZO1xuXG4gIC8vIGZpeCBuYXRpdmVcbiAgaWYgKGFueU5hdGl2ZUl0ZXJhdG9yKSB7XG4gICAgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoYW55TmF0aXZlSXRlcmF0b3IuY2FsbChuZXcgSXRlcmFibGUoKSkpO1xuICAgIGlmIChDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIGlmICghSVNfUFVSRSAmJiBnZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUpICE9PSBJdGVyYXRvclByb3RvdHlwZSkge1xuICAgICAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICBzZXRQcm90b3R5cGVPZihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNDYWxsYWJsZShDdXJyZW50SXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICAgICAgICAgIHJlZGVmaW5lKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHRydWUsIHRydWUpO1xuICAgICAgaWYgKElTX1BVUkUpIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gICAgfVxuICB9XG5cbiAgLy8gZml4IEFycmF5LnByb3RvdHlwZS57IHZhbHVlcywgQEBpdGVyYXRvciB9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgREVGQVVMVCA9PSBWQUxVRVMgJiYgbmF0aXZlSXRlcmF0b3IgJiYgbmF0aXZlSXRlcmF0b3IubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgaWYgKCFJU19QVVJFICYmIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoSXRlcmFibGVQcm90b3R5cGUsICduYW1lJywgVkFMVUVTKTtcbiAgICB9IGVsc2Uge1xuICAgICAgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gdHJ1ZTtcbiAgICAgIGRlZmF1bHRJdGVyYXRvciA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5hdGl2ZUl0ZXJhdG9yLmNhbGwodGhpcyk7IH07XG4gICAgfVxuICB9XG5cbiAgLy8gZXhwb3J0IGFkZGl0aW9uYWwgbWV0aG9kc1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gZGVmYXVsdEl0ZXJhdG9yIDogZ2V0SXRlcmF0aW9uTWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogZ2V0SXRlcmF0aW9uTWV0aG9kKEVOVFJJRVMpXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKEtFWSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfHwgIShLRVkgaW4gSXRlcmFibGVQcm90b3R5cGUpKSB7XG4gICAgICAgIHJlZGVmaW5lKEl0ZXJhYmxlUHJvdG90eXBlLCBLRVksIG1ldGhvZHNbS0VZXSk7XG4gICAgICB9XG4gICAgfSBlbHNlICQoeyB0YXJnZXQ6IE5BTUUsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgfHwgSU5DT1JSRUNUX1ZBTFVFU19OQU1FIH0sIG1ldGhvZHMpO1xuICB9XG5cbiAgLy8gZGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUlTX1BVUkUgfHwgRk9SQ0VEKSAmJiBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl0gIT09IGRlZmF1bHRJdGVyYXRvcikge1xuICAgIHJlZGVmaW5lKEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yLCB7IG5hbWU6IERFRkFVTFQgfSk7XG4gIH1cbiAgSXRlcmF0b3JzW05BTUVdID0gZGVmYXVsdEl0ZXJhdG9yO1xuXG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yJyk7XG5cbnZhciBBUlJBWV9JVEVSQVRPUiA9ICdBcnJheSBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihBUlJBWV9JVEVSQVRPUik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5lbnRyaWVzXG4vLyBgQXJyYXkucHJvdG90eXBlLmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUua2V5c1xuLy8gYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudmFsdWVzXG4vLyBgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAaXRlcmF0b3Jcbi8vIGBDcmVhdGVBcnJheUl0ZXJhdG9yYCBpbnRlcm5hbCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlYXJyYXlpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVJdGVyYXRvcihBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IEFSUkFZX0lURVJBVE9SLFxuICAgIHRhcmdldDogdG9JbmRleGVkT2JqZWN0KGl0ZXJhdGVkKSwgLy8gdGFyZ2V0XG4gICAgaW5kZXg6IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gICAga2luZDoga2luZCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gIH0pO1xuLy8gYCVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWFycmF5aXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiB7IHZhbHVlOiBpbmRleCwgZG9uZTogZmFsc2UgfTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiB7IHZhbHVlOiB0YXJnZXRbaW5kZXhdLCBkb25lOiBmYWxzZSB9O1xuICByZXR1cm4geyB2YWx1ZTogW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZG9uZTogZmFsc2UgfTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBuYXRpdmVKb2luID0gW10uam9pbjtcblxudmFyIEVTM19TVFJJTkdTID0gSW5kZXhlZE9iamVjdCAhPSBPYmplY3Q7XG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ2pvaW4nLCAnLCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmpvaW5gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuam9pblxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRVMzX1NUUklOR1MgfHwgIVNUUklDVF9NRVRIT0QgfSwge1xuICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikge1xuICAgIHJldHVybiBuYXRpdmVKb2luLmNhbGwodG9JbmRleGVkT2JqZWN0KHRoaXMpLCBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCA/ICcsJyA6IHNlcGFyYXRvcik7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWxhc3RpbmRleG9mIC0tIHNhZmUgKi9cbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG52YXIgJGxhc3RJbmRleE9mID0gW10ubGFzdEluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJGxhc3RJbmRleE9mICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnbGFzdEluZGV4T2YnKTtcbnZhciBGT1JDRUQgPSBORUdBVElWRV9aRVJPIHx8ICFTVFJJQ1RfTUVUSE9EO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmxhc3RpbmRleG9mXG5tb2R1bGUuZXhwb3J0cyA9IEZPUkNFRCA/IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgLy8gY29udmVydCAtMCB0byArMFxuICBpZiAoTkVHQVRJVkVfWkVSTykgcmV0dXJuICRsYXN0SW5kZXhPZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDA7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgaW5kZXggPSBtaW4oaW5kZXgsIHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnRzWzFdKSk7XG4gIGlmIChpbmRleCA8IDApIGluZGV4ID0gbGVuZ3RoICsgaW5kZXg7XG4gIGZvciAoO2luZGV4ID49IDA7IGluZGV4LS0pIGlmIChpbmRleCBpbiBPICYmIE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgcmV0dXJuIC0xO1xufSA6ICRsYXN0SW5kZXhPZjtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGxhc3RJbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWxhc3QtaW5kZXgtb2YnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5sYXN0aW5kZXhvZlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1sYXN0aW5kZXhvZiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogbGFzdEluZGV4T2YgIT09IFtdLmxhc3RJbmRleE9mIH0sIHtcbiAgbGFzdEluZGV4T2Y6IGxhc3RJbmRleE9mXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykubWFwO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdtYXAnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4vLyB3aXRoIGFkZGluZyBzdXBwb3J0IG9mIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogIUhBU19TUEVDSUVTX1NVUFBPUlQgfSwge1xuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxudmFyIElTTlRfR0VORVJJQyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktb2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuICEoQXJyYXkub2YuY2FsbChGKSBpbnN0YW5jZW9mIEYpO1xufSk7XG5cbi8vIGBBcnJheS5vZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5Lm9mXG4vLyBXZWJLaXQgQXJyYXkub2YgaXNuJ3QgZ2VuZXJpY1xuJCh7IHRhcmdldDogJ0FycmF5Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJU05UX0dFTkVSSUMgfSwge1xuICBvZjogZnVuY3Rpb24gb2YoLyogLi4uYXJncyAqLykge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAoaXNDb25zdHJ1Y3Rvcih0aGlzKSA/IHRoaXMgOiBBcnJheSkoYXJndW1lbnRzTGVuZ3RoKTtcbiAgICB3aGlsZSAoYXJndW1lbnRzTGVuZ3RoID4gaW5kZXgpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGFyZ3VtZW50c0xlbmd0aDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsInZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgcmVkdWNlLCByZWR1Y2VSaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX1JJR0hUKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgY2FsbGJhY2tmbiwgYXJndW1lbnRzTGVuZ3RoLCBtZW1vKSB7XG4gICAgYUNhbGxhYmxlKGNhbGxiYWNrZm4pO1xuICAgIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgaW5kZXggPSBJU19SSUdIVCA/IGxlbmd0aCAtIDEgOiAwO1xuICAgIHZhciBpID0gSVNfUklHSFQgPyAtMSA6IDE7XG4gICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA8IDIpIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaW5kZXggKz0gaTtcbiAgICAgIGlmIChJU19SSUdIVCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yICg7SVNfUklHSFQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICBtZW1vID0gY2FsbGJhY2tmbihtZW1vLCBzZWxmW2luZGV4XSwgaW5kZXgsIE8pO1xuICAgIH1cbiAgICByZXR1cm4gbWVtbztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZVxuICBsZWZ0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlcmlnaHRcbiAgcmlnaHQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzb2YoZ2xvYmFsLnByb2Nlc3MpID09ICdwcm9jZXNzJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktcmVkdWNlJykubGVmdDtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcbnZhciBDSFJPTUVfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdyZWR1Y2UnKTtcbi8vIENocm9tZSA4MC04MiBoYXMgYSBjcml0aWNhbCBidWdcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTEwNDk5ODJcbnZhciBDSFJPTUVfQlVHID0gIUlTX05PREUgJiYgQ0hST01FX1ZFUlNJT04gPiA3OSAmJiBDSFJPTUVfVkVSU0lPTiA8IDgzO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFTVFJJQ1RfTUVUSE9EIHx8IENIUk9NRV9CVUcgfSwge1xuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRyZWR1Y2VSaWdodCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1yZWR1Y2UnKS5yaWdodDtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcbnZhciBDSFJPTUVfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdyZWR1Y2VSaWdodCcpO1xuLy8gQ2hyb21lIDgwLTgyIGhhcyBhIGNyaXRpY2FsIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MTA0OTk4MlxudmFyIENIUk9NRV9CVUcgPSAhSVNfTk9ERSAmJiBDSFJPTUVfVkVSU0lPTiA+IDc5ICYmIENIUk9NRV9WRVJTSU9OIDwgODM7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlcmlnaHRcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFTVFJJQ1RfTUVUSE9EIHx8IENIUk9NRV9CVUcgfSwge1xuICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlUmlnaHQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcblxudmFyIG5hdGl2ZVJldmVyc2UgPSBbXS5yZXZlcnNlO1xudmFyIHRlc3QgPSBbMSwgMl07XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucmV2ZXJzZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZXZlcnNlXG4vLyBmaXggZm9yIFNhZmFyaSAxMi4wIGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODc5NFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogU3RyaW5nKHRlc3QpID09PSBTdHJpbmcodGVzdC5yZXZlcnNlKCkpIH0sIHtcbiAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1hc3NpZ24gLS0gZGlydHkgaGFja1xuICAgIGlmIChpc0FycmF5KHRoaXMpKSB0aGlzLmxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHJldHVybiBuYXRpdmVSZXZlcnNlLmNhbGwodGhpcyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdzbGljZScpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIG5hdGl2ZVNsaWNlID0gW10uc2xpY2U7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc2xpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc2xpY2Vcbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZCwgbGVuZ3RoKTtcbiAgICAvLyBpbmxpbmUgYEFycmF5U3BlY2llc0NyZWF0ZWAgZm9yIHVzYWdlIG5hdGl2ZSBgQXJyYXkjc2xpY2VgIHdoZXJlIGl0J3MgcG9zc2libGVcbiAgICB2YXIgQ29uc3RydWN0b3IsIHJlc3VsdCwgbjtcbiAgICBpZiAoaXNBcnJheShPKSkge1xuICAgICAgQ29uc3RydWN0b3IgPSBPLmNvbnN0cnVjdG9yO1xuICAgICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICAgIGlmIChpc0NvbnN0cnVjdG9yKENvbnN0cnVjdG9yKSAmJiAoQ29uc3RydWN0b3IgPT09IEFycmF5IHx8IGlzQXJyYXkoQ29uc3RydWN0b3IucHJvdG90eXBlKSkpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KENvbnN0cnVjdG9yKSkge1xuICAgICAgICBDb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yW1NQRUNJRVNdO1xuICAgICAgICBpZiAoQ29uc3RydWN0b3IgPT09IG51bGwpIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKENvbnN0cnVjdG9yID09PSBBcnJheSB8fCBDb25zdHJ1Y3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBuYXRpdmVTbGljZS5jYWxsKE8sIGssIGZpbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdCA9IG5ldyAoQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQ29uc3RydWN0b3IpKG1heChmaW4gLSBrLCAwKSk7XG4gICAgZm9yIChuID0gMDsgayA8IGZpbjsgaysrLCBuKyspIGlmIChrIGluIE8pIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgbiwgT1trXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IG47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5zb21lO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgU1RSSUNUX01FVEhPRCA9IGFycmF5TWV0aG9kSXNTdHJpY3QoJ3NvbWUnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFTVFJJQ1RfTUVUSE9EIH0sIHtcbiAgc29tZTogZnVuY3Rpb24gc29tZShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkc29tZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiLy8gVE9ETzogdXNlIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggbGlrZSB0aW1zb3J0P1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxudmFyIG1lcmdlU29ydCA9IGZ1bmN0aW9uIChhcnJheSwgY29tcGFyZWZuKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHZhciBtaWRkbGUgPSBmbG9vcihsZW5ndGggLyAyKTtcbiAgcmV0dXJuIGxlbmd0aCA8IDggPyBpbnNlcnRpb25Tb3J0KGFycmF5LCBjb21wYXJlZm4pIDogbWVyZ2UoXG4gICAgbWVyZ2VTb3J0KGFycmF5LnNsaWNlKDAsIG1pZGRsZSksIGNvbXBhcmVmbiksXG4gICAgbWVyZ2VTb3J0KGFycmF5LnNsaWNlKG1pZGRsZSksIGNvbXBhcmVmbiksXG4gICAgY29tcGFyZWZuXG4gICk7XG59O1xuXG52YXIgaW5zZXJ0aW9uU29ydCA9IGZ1bmN0aW9uIChhcnJheSwgY29tcGFyZWZuKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHZhciBpID0gMTtcbiAgdmFyIGVsZW1lbnQsIGo7XG5cbiAgd2hpbGUgKGkgPCBsZW5ndGgpIHtcbiAgICBqID0gaTtcbiAgICBlbGVtZW50ID0gYXJyYXlbaV07XG4gICAgd2hpbGUgKGogJiYgY29tcGFyZWZuKGFycmF5W2ogLSAxXSwgZWxlbWVudCkgPiAwKSB7XG4gICAgICBhcnJheVtqXSA9IGFycmF5Wy0tal07XG4gICAgfVxuICAgIGlmIChqICE9PSBpKyspIGFycmF5W2pdID0gZWxlbWVudDtcbiAgfSByZXR1cm4gYXJyYXk7XG59O1xuXG52YXIgbWVyZ2UgPSBmdW5jdGlvbiAobGVmdCwgcmlnaHQsIGNvbXBhcmVmbikge1xuICB2YXIgbGxlbmd0aCA9IGxlZnQubGVuZ3RoO1xuICB2YXIgcmxlbmd0aCA9IHJpZ2h0Lmxlbmd0aDtcbiAgdmFyIGxpbmRleCA9IDA7XG4gIHZhciByaW5kZXggPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG5cbiAgd2hpbGUgKGxpbmRleCA8IGxsZW5ndGggfHwgcmluZGV4IDwgcmxlbmd0aCkge1xuICAgIGlmIChsaW5kZXggPCBsbGVuZ3RoICYmIHJpbmRleCA8IHJsZW5ndGgpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGNvbXBhcmVmbihsZWZ0W2xpbmRleF0sIHJpZ2h0W3JpbmRleF0pIDw9IDAgPyBsZWZ0W2xpbmRleCsrXSA6IHJpZ2h0W3JpbmRleCsrXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5wdXNoKGxpbmRleCA8IGxsZW5ndGggPyBsZWZ0W2xpbmRleCsrXSA6IHJpZ2h0W3JpbmRleCsrXSk7XG4gICAgfVxuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlU29ydDtcbiIsInZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIGZpcmVmb3ggPSB1c2VyQWdlbnQubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvaSk7XG5cbm1vZHVsZS5leHBvcnRzID0gISFmaXJlZm94ICYmICtmaXJlZm94WzFdO1xuIiwidmFyIFVBID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL01TSUV8VHJpZGVudC8udGVzdChVQSk7XG4iLCJ2YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciB3ZWJraXQgPSB1c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XFwvKFxcZCspXFwuLyk7XG5cbm1vZHVsZS5leHBvcnRzID0gISF3ZWJraXQgJiYgK3dlYmtpdFsxXTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGludGVybmFsU29ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zb3J0Jyk7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG52YXIgRkYgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWZmLXZlcnNpb24nKTtcbnZhciBJRV9PUl9FREdFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pZS1vci1lZGdlJyk7XG52YXIgVjggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcbnZhciBXRUJLSVQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXdlYmtpdC12ZXJzaW9uJyk7XG5cbnZhciB0ZXN0ID0gW107XG52YXIgbmF0aXZlU29ydCA9IHRlc3Quc29ydDtcblxuLy8gSUU4LVxudmFyIEZBSUxTX09OX1VOREVGSU5FRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KTtcbi8vIFY4IGJ1Z1xudmFyIEZBSUxTX09OX05VTEwgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHRlc3Quc29ydChudWxsKTtcbn0pO1xuLy8gT2xkIFdlYktpdFxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb3J0Jyk7XG5cbnZhciBTVEFCTEVfU09SVCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGZlYXR1cmUgZGV0ZWN0aW9uIGNhbiBiZSB0b28gc2xvdywgc28gY2hlY2sgZW5naW5lcyB2ZXJzaW9uc1xuICBpZiAoVjgpIHJldHVybiBWOCA8IDcwO1xuICBpZiAoRkYgJiYgRkYgPiAzKSByZXR1cm47XG4gIGlmIChJRV9PUl9FREdFKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKFdFQktJVCkgcmV0dXJuIFdFQktJVCA8IDYwMztcblxuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHZhciBjb2RlLCBjaHIsIHZhbHVlLCBpbmRleDtcblxuICAvLyBnZW5lcmF0ZSBhbiBhcnJheSB3aXRoIG1vcmUgNTEyIGVsZW1lbnRzIChDaGFrcmEgYW5kIG9sZCBWOCBmYWlscyBvbmx5IGluIHRoaXMgY2FzZSlcbiAgZm9yIChjb2RlID0gNjU7IGNvZGUgPCA3NjsgY29kZSsrKSB7XG4gICAgY2hyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcblxuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgY2FzZSA2NjogY2FzZSA2OTogY2FzZSA3MDogY2FzZSA3MjogdmFsdWUgPSAzOyBicmVhaztcbiAgICAgIGNhc2UgNjg6IGNhc2UgNzE6IHZhbHVlID0gNDsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiB2YWx1ZSA9IDI7XG4gICAgfVxuXG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgNDc7IGluZGV4KyspIHtcbiAgICAgIHRlc3QucHVzaCh7IGs6IGNociArIGluZGV4LCB2OiB2YWx1ZSB9KTtcbiAgICB9XG4gIH1cblxuICB0ZXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIudiAtIGEudjsgfSk7XG5cbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGVzdC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjaHIgPSB0ZXN0W2luZGV4XS5rLmNoYXJBdCgwKTtcbiAgICBpZiAocmVzdWx0LmNoYXJBdChyZXN1bHQubGVuZ3RoIC0gMSkgIT09IGNocikgcmVzdWx0ICs9IGNocjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQgIT09ICdER0JFRkhBQ0lKSyc7XG59KTtcblxudmFyIEZPUkNFRCA9IEZBSUxTX09OX1VOREVGSU5FRCB8fCAhRkFJTFNfT05fTlVMTCB8fCAhU1RSSUNUX01FVEhPRCB8fCAhU1RBQkxFX1NPUlQ7XG5cbnZhciBnZXRTb3J0Q29tcGFyZSA9IGZ1bmN0aW9uIChjb21wYXJlZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIC0xO1xuICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHJldHVybiAxO1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgcmV0dXJuICtjb21wYXJlZm4oeCwgeSkgfHwgMDtcbiAgICByZXR1cm4gdG9TdHJpbmcoeCkgPiB0b1N0cmluZyh5KSA/IDEgOiAtMTtcbiAgfTtcbn07XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29ydGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb3J0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgYUNhbGxhYmxlKGNvbXBhcmVmbik7XG5cbiAgICB2YXIgYXJyYXkgPSB0b09iamVjdCh0aGlzKTtcblxuICAgIGlmIChTVEFCTEVfU09SVCkgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkID8gbmF0aXZlU29ydC5jYWxsKGFycmF5KSA6IG5hdGl2ZVNvcnQuY2FsbChhcnJheSwgY29tcGFyZWZuKTtcblxuICAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHZhciBhcnJheUxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGFycmF5KTtcbiAgICB2YXIgaXRlbXNMZW5ndGgsIGluZGV4O1xuXG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGlmIChpbmRleCBpbiBhcnJheSkgaXRlbXMucHVzaChhcnJheVtpbmRleF0pO1xuICAgIH1cblxuICAgIGl0ZW1zID0gaW50ZXJuYWxTb3J0KGl0ZW1zLCBnZXRTb3J0Q29tcGFyZShjb21wYXJlZm4pKTtcbiAgICBpdGVtc0xlbmd0aCA9IGl0ZW1zLmxlbmd0aDtcbiAgICBpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBpdGVtc0xlbmd0aCkgYXJyYXlbaW5kZXhdID0gaXRlbXNbaW5kZXgrK107XG4gICAgd2hpbGUgKGluZGV4IDwgYXJyYXlMZW5ndGgpIGRlbGV0ZSBhcnJheVtpbmRleCsrXTtcblxuICAgIHJldHVybiBhcnJheTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSkge1xuICB2YXIgQ29uc3RydWN0b3IgPSBnZXRCdWlsdEluKENPTlNUUlVDVE9SX05BTUUpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiBDb25zdHJ1Y3RvciAmJiAhQ29uc3RydWN0b3JbU1BFQ0lFU10pIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCJ2YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xuXG4vLyBgQXJyYXlbQEBzcGVjaWVzXWAgZ2V0dGVyXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1hcnJheS1AQHNwZWNpZXNcbnNldFNwZWNpZXMoJ0FycmF5Jyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcblxudmFyIEhBU19TUEVDSUVTX1NVUFBPUlQgPSBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0KCdzcGxpY2UnKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGO1xudmFyIE1BWElNVU1fQUxMT1dFRF9MRU5HVEhfRVhDRUVERUQgPSAnTWF4aW11bSBhbGxvd2VkIGxlbmd0aCBleGNlZWRlZCc7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc3BsaWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNwbGljZVxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgc3BsaWNlOiBmdW5jdGlvbiBzcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50IC8qICwgLi4uaXRlbXMgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgYWN0dWFsU3RhcnQgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gICAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGluc2VydENvdW50LCBhY3R1YWxEZWxldGVDb3VudCwgQSwgaywgZnJvbSwgdG87XG4gICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA9PT0gMCkge1xuICAgICAgaW5zZXJ0Q291bnQgPSBhY3R1YWxEZWxldGVDb3VudCA9IDA7XG4gICAgfSBlbHNlIGlmIChhcmd1bWVudHNMZW5ndGggPT09IDEpIHtcbiAgICAgIGluc2VydENvdW50ID0gMDtcbiAgICAgIGFjdHVhbERlbGV0ZUNvdW50ID0gbGVuIC0gYWN0dWFsU3RhcnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc2VydENvdW50ID0gYXJndW1lbnRzTGVuZ3RoIC0gMjtcbiAgICAgIGFjdHVhbERlbGV0ZUNvdW50ID0gbWluKG1heCh0b0ludGVnZXJPckluZmluaXR5KGRlbGV0ZUNvdW50KSwgMCksIGxlbiAtIGFjdHVhbFN0YXJ0KTtcbiAgICB9XG4gICAgaWYgKGxlbiArIGluc2VydENvdW50IC0gYWN0dWFsRGVsZXRlQ291bnQgPiBNQVhfU0FGRV9JTlRFR0VSKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoTUFYSU1VTV9BTExPV0VEX0xFTkdUSF9FWENFRURFRCk7XG4gICAgfVxuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgYWN0dWFsRGVsZXRlQ291bnQpO1xuICAgIGZvciAoayA9IDA7IGsgPCBhY3R1YWxEZWxldGVDb3VudDsgaysrKSB7XG4gICAgICBmcm9tID0gYWN0dWFsU3RhcnQgKyBrO1xuICAgICAgaWYgKGZyb20gaW4gTykgY3JlYXRlUHJvcGVydHkoQSwgaywgT1tmcm9tXSk7XG4gICAgfVxuICAgIEEubGVuZ3RoID0gYWN0dWFsRGVsZXRlQ291bnQ7XG4gICAgaWYgKGluc2VydENvdW50IDwgYWN0dWFsRGVsZXRlQ291bnQpIHtcbiAgICAgIGZvciAoayA9IGFjdHVhbFN0YXJ0OyBrIDwgbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQ7IGsrKykge1xuICAgICAgICBmcm9tID0gayArIGFjdHVhbERlbGV0ZUNvdW50O1xuICAgICAgICB0byA9IGsgKyBpbnNlcnRDb3VudDtcbiAgICAgICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgICAgICBlbHNlIGRlbGV0ZSBPW3RvXTtcbiAgICAgIH1cbiAgICAgIGZvciAoayA9IGxlbjsgayA+IGxlbiAtIGFjdHVhbERlbGV0ZUNvdW50ICsgaW5zZXJ0Q291bnQ7IGstLSkgZGVsZXRlIE9bayAtIDFdO1xuICAgIH0gZWxzZSBpZiAoaW5zZXJ0Q291bnQgPiBhY3R1YWxEZWxldGVDb3VudCkge1xuICAgICAgZm9yIChrID0gbGVuIC0gYWN0dWFsRGVsZXRlQ291bnQ7IGsgPiBhY3R1YWxTdGFydDsgay0tKSB7XG4gICAgICAgIGZyb20gPSBrICsgYWN0dWFsRGVsZXRlQ291bnQgLSAxO1xuICAgICAgICB0byA9IGsgKyBpbnNlcnRDb3VudCAtIDE7XG4gICAgICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICAgICAgZWxzZSBkZWxldGUgT1t0b107XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoayA9IDA7IGsgPCBpbnNlcnRDb3VudDsgaysrKSB7XG4gICAgICBPW2sgKyBhY3R1YWxTdGFydF0gPSBhcmd1bWVudHNbayArIDJdO1xuICAgIH1cbiAgICBPLmxlbmd0aCA9IGxlbiAtIGFjdHVhbERlbGV0ZUNvdW50ICsgaW5zZXJ0Q291bnQ7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuIiwiLy8gdGhpcyBtZXRob2Qgd2FzIGFkZGVkIHRvIHVuc2NvcGFibGVzIGFmdGVyIGltcGxlbWVudGF0aW9uXG4vLyBpbiBwb3B1bGFyIGVuZ2luZXMsIHNvIGl0J3MgbW92ZWQgdG8gYSBzZXBhcmF0ZSBtb2R1bGVcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5hZGRUb1Vuc2NvcGFibGVzKCdmbGF0Jyk7XG4iLCIvLyB0aGlzIG1ldGhvZCB3YXMgYWRkZWQgdG8gdW5zY29wYWJsZXMgYWZ0ZXIgaW1wbGVtZW50YXRpb25cbi8vIGluIHBvcHVsYXIgZW5naW5lcywgc28gaXQncyBtb3ZlZCB0byBhIHNlcGFyYXRlIG1vZHVsZVxudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2ZsYXRNYXAnKTtcbiIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby10eXBlZC1hcnJheXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBEYXRhVmlldyAhPT0gJ3VuZGVmaW5lZCc7XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBvcHRpb25zKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUpIHtcbiAgaWYgKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHJldHVybiBpdDtcbiAgdGhyb3cgVHlwZUVycm9yKCdJbmNvcnJlY3QgJyArIChuYW1lID8gbmFtZSArICcgJyA6ICcnKSArICdpbnZvY2F0aW9uJyk7XG59O1xuIiwidmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgVG9JbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvaW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMDtcbiAgdmFyIG51bWJlciA9IHRvSW50ZWdlck9ySW5maW5pdHkoaXQpO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgobnVtYmVyKTtcbiAgaWYgKG51bWJlciAhPT0gbGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBsZW5ndGggb3IgaW5kZXgnKTtcbiAgcmV0dXJuIGxlbmd0aDtcbn07XG4iLCIvLyBJRUVFNzU0IGNvbnZlcnNpb25zIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvaWVlZTc1NFxudmFyIGFicyA9IE1hdGguYWJzO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBMTjIgPSBNYXRoLkxOMjtcblxudmFyIHBhY2sgPSBmdW5jdGlvbiAobnVtYmVyLCBtYW50aXNzYUxlbmd0aCwgYnl0ZXMpIHtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShieXRlcyk7XG4gIHZhciBleHBvbmVudExlbmd0aCA9IGJ5dGVzICogOCAtIG1hbnRpc3NhTGVuZ3RoIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBleHBvbmVudExlbmd0aCkgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBydCA9IG1hbnRpc3NhTGVuZ3RoID09PSAyMyA/IHBvdygyLCAtMjQpIC0gcG93KDIsIC03NykgOiAwO1xuICB2YXIgc2lnbiA9IG51bWJlciA8IDAgfHwgbnVtYmVyID09PSAwICYmIDEgLyBudW1iZXIgPCAwID8gMSA6IDA7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBleHBvbmVudCwgbWFudGlzc2EsIGM7XG4gIG51bWJlciA9IGFicyhudW1iZXIpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICBpZiAobnVtYmVyICE9IG51bWJlciB8fCBudW1iZXIgPT09IEluZmluaXR5KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBtYW50aXNzYSA9IG51bWJlciAhPSBudW1iZXIgPyAxIDogMDtcbiAgICBleHBvbmVudCA9IGVNYXg7XG4gIH0gZWxzZSB7XG4gICAgZXhwb25lbnQgPSBmbG9vcihsb2cobnVtYmVyKSAvIExOMik7XG4gICAgaWYgKG51bWJlciAqIChjID0gcG93KDIsIC1leHBvbmVudCkpIDwgMSkge1xuICAgICAgZXhwb25lbnQtLTtcbiAgICAgIGMgKj0gMjtcbiAgICB9XG4gICAgaWYgKGV4cG9uZW50ICsgZUJpYXMgPj0gMSkge1xuICAgICAgbnVtYmVyICs9IHJ0IC8gYztcbiAgICB9IGVsc2Uge1xuICAgICAgbnVtYmVyICs9IHJ0ICogcG93KDIsIDEgLSBlQmlhcyk7XG4gICAgfVxuICAgIGlmIChudW1iZXIgKiBjID49IDIpIHtcbiAgICAgIGV4cG9uZW50Kys7XG4gICAgICBjIC89IDI7XG4gICAgfVxuICAgIGlmIChleHBvbmVudCArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG1hbnRpc3NhID0gMDtcbiAgICAgIGV4cG9uZW50ID0gZU1heDtcbiAgICB9IGVsc2UgaWYgKGV4cG9uZW50ICsgZUJpYXMgPj0gMSkge1xuICAgICAgbWFudGlzc2EgPSAobnVtYmVyICogYyAtIDEpICogcG93KDIsIG1hbnRpc3NhTGVuZ3RoKTtcbiAgICAgIGV4cG9uZW50ID0gZXhwb25lbnQgKyBlQmlhcztcbiAgICB9IGVsc2Uge1xuICAgICAgbWFudGlzc2EgPSBudW1iZXIgKiBwb3coMiwgZUJpYXMgLSAxKSAqIHBvdygyLCBtYW50aXNzYUxlbmd0aCk7XG4gICAgICBleHBvbmVudCA9IDA7XG4gICAgfVxuICB9XG4gIGZvciAoOyBtYW50aXNzYUxlbmd0aCA+PSA4OyBidWZmZXJbaW5kZXgrK10gPSBtYW50aXNzYSAmIDI1NSwgbWFudGlzc2EgLz0gMjU2LCBtYW50aXNzYUxlbmd0aCAtPSA4KTtcbiAgZXhwb25lbnQgPSBleHBvbmVudCA8PCBtYW50aXNzYUxlbmd0aCB8IG1hbnRpc3NhO1xuICBleHBvbmVudExlbmd0aCArPSBtYW50aXNzYUxlbmd0aDtcbiAgZm9yICg7IGV4cG9uZW50TGVuZ3RoID4gMDsgYnVmZmVyW2luZGV4KytdID0gZXhwb25lbnQgJiAyNTUsIGV4cG9uZW50IC89IDI1NiwgZXhwb25lbnRMZW5ndGggLT0gOCk7XG4gIGJ1ZmZlclstLWluZGV4XSB8PSBzaWduICogMTI4O1xuICByZXR1cm4gYnVmZmVyO1xufTtcblxudmFyIHVucGFjayA9IGZ1bmN0aW9uIChidWZmZXIsIG1hbnRpc3NhTGVuZ3RoKSB7XG4gIHZhciBieXRlcyA9IGJ1ZmZlci5sZW5ndGg7XG4gIHZhciBleHBvbmVudExlbmd0aCA9IGJ5dGVzICogOCAtIG1hbnRpc3NhTGVuZ3RoIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBleHBvbmVudExlbmd0aCkgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBuQml0cyA9IGV4cG9uZW50TGVuZ3RoIC0gNztcbiAgdmFyIGluZGV4ID0gYnl0ZXMgLSAxO1xuICB2YXIgc2lnbiA9IGJ1ZmZlcltpbmRleC0tXTtcbiAgdmFyIGV4cG9uZW50ID0gc2lnbiAmIDEyNztcbiAgdmFyIG1hbnRpc3NhO1xuICBzaWduID4+PSA3O1xuICBmb3IgKDsgbkJpdHMgPiAwOyBleHBvbmVudCA9IGV4cG9uZW50ICogMjU2ICsgYnVmZmVyW2luZGV4XSwgaW5kZXgtLSwgbkJpdHMgLT0gOCk7XG4gIG1hbnRpc3NhID0gZXhwb25lbnQgJiAoMSA8PCAtbkJpdHMpIC0gMTtcbiAgZXhwb25lbnQgPj49IC1uQml0cztcbiAgbkJpdHMgKz0gbWFudGlzc2FMZW5ndGg7XG4gIGZvciAoOyBuQml0cyA+IDA7IG1hbnRpc3NhID0gbWFudGlzc2EgKiAyNTYgKyBidWZmZXJbaW5kZXhdLCBpbmRleC0tLCBuQml0cyAtPSA4KTtcbiAgaWYgKGV4cG9uZW50ID09PSAwKSB7XG4gICAgZXhwb25lbnQgPSAxIC0gZUJpYXM7XG4gIH0gZWxzZSBpZiAoZXhwb25lbnQgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbWFudGlzc2EgPyBOYU4gOiBzaWduID8gLUluZmluaXR5IDogSW5maW5pdHk7XG4gIH0gZWxzZSB7XG4gICAgbWFudGlzc2EgPSBtYW50aXNzYSArIHBvdygyLCBtYW50aXNzYUxlbmd0aCk7XG4gICAgZXhwb25lbnQgPSBleHBvbmVudCAtIGVCaWFzO1xuICB9IHJldHVybiAoc2lnbiA/IC0xIDogMSkgKiBtYW50aXNzYSAqIHBvdygyLCBleHBvbmVudCAtIG1hbnRpc3NhTGVuZ3RoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYWNrOiBwYWNrLFxuICB1bnBhY2s6IHVucGFja1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBOQVRJVkVfQVJSQVlfQlVGRkVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1uYXRpdmUnKTtcbnZhciBGdW5jdGlvbk5hbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZS1hbGwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4Jyk7XG52YXIgSUVFRTc1NCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZWVlNzU0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKS5mO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGFycmF5RmlsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1maWxsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5QUk9QRVI7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuQ09ORklHVVJBQkxFO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbnZhciBEQVRBX1ZJRVcgPSAnRGF0YVZpZXcnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGgnO1xudmFyIFdST05HX0lOREVYID0gJ1dyb25nIGluZGV4JztcbnZhciBOYXRpdmVBcnJheUJ1ZmZlciA9IGdsb2JhbFtBUlJBWV9CVUZGRVJdO1xudmFyICRBcnJheUJ1ZmZlciA9IE5hdGl2ZUFycmF5QnVmZmVyO1xudmFyICREYXRhVmlldyA9IGdsb2JhbFtEQVRBX1ZJRVddO1xudmFyICREYXRhVmlld1Byb3RvdHlwZSA9ICREYXRhVmlldyAmJiAkRGF0YVZpZXdbUFJPVE9UWVBFXTtcbnZhciBPYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcblxudmFyIHBhY2tJRUVFNzU0ID0gSUVFRTc1NC5wYWNrO1xudmFyIHVucGFja0lFRUU3NTQgPSBJRUVFNzU0LnVucGFjaztcblxudmFyIHBhY2tJbnQ4ID0gZnVuY3Rpb24gKG51bWJlcikge1xuICByZXR1cm4gW251bWJlciAmIDB4RkZdO1xufTtcblxudmFyIHBhY2tJbnQxNiA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgcmV0dXJuIFtudW1iZXIgJiAweEZGLCBudW1iZXIgPj4gOCAmIDB4RkZdO1xufTtcblxudmFyIHBhY2tJbnQzMiA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgcmV0dXJuIFtudW1iZXIgJiAweEZGLCBudW1iZXIgPj4gOCAmIDB4RkYsIG51bWJlciA+PiAxNiAmIDB4RkYsIG51bWJlciA+PiAyNCAmIDB4RkZdO1xufTtcblxudmFyIHVucGFja0ludDMyID0gZnVuY3Rpb24gKGJ1ZmZlcikge1xuICByZXR1cm4gYnVmZmVyWzNdIDw8IDI0IHwgYnVmZmVyWzJdIDw8IDE2IHwgYnVmZmVyWzFdIDw8IDggfCBidWZmZXJbMF07XG59O1xuXG52YXIgcGFja0Zsb2F0MzIgPSBmdW5jdGlvbiAobnVtYmVyKSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChudW1iZXIsIDIzLCA0KTtcbn07XG5cbnZhciBwYWNrRmxvYXQ2NCA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KG51bWJlciwgNTIsIDgpO1xufTtcblxudmFyIGFkZEdldHRlciA9IGZ1bmN0aW9uIChDb25zdHJ1Y3Rvciwga2V5KSB7XG4gIGRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yW1BST1RPVFlQRV0sIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcylba2V5XTsgfSB9KTtcbn07XG5cbnZhciBnZXQgPSBmdW5jdGlvbiAodmlldywgY291bnQsIGluZGV4LCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KGluZGV4KTtcbiAgdmFyIHN0b3JlID0gZ2V0SW50ZXJuYWxTdGF0ZSh2aWV3KTtcbiAgaWYgKGludEluZGV4ICsgY291bnQgPiBzdG9yZS5ieXRlTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIGJ5dGVzID0gZ2V0SW50ZXJuYWxTdGF0ZShzdG9yZS5idWZmZXIpLmJ5dGVzO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHN0b3JlLmJ5dGVPZmZzZXQ7XG4gIHZhciBwYWNrID0gYnl0ZXMuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgY291bnQpO1xuICByZXR1cm4gaXNMaXR0bGVFbmRpYW4gPyBwYWNrIDogcGFjay5yZXZlcnNlKCk7XG59O1xuXG52YXIgc2V0ID0gZnVuY3Rpb24gKHZpZXcsIGNvdW50LCBpbmRleCwgY29udmVyc2lvbiwgdmFsdWUsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgoaW5kZXgpO1xuICB2YXIgc3RvcmUgPSBnZXRJbnRlcm5hbFN0YXRlKHZpZXcpO1xuICBpZiAoaW50SW5kZXggKyBjb3VudCA+IHN0b3JlLmJ5dGVMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgYnl0ZXMgPSBnZXRJbnRlcm5hbFN0YXRlKHN0b3JlLmJ1ZmZlcikuYnl0ZXM7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgc3RvcmUuYnl0ZU9mZnNldDtcbiAgdmFyIHBhY2sgPSBjb252ZXJzaW9uKCt2YWx1ZSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykgYnl0ZXNbc3RhcnQgKyBpXSA9IHBhY2tbaXNMaXR0bGVFbmRpYW4gPyBpIDogY291bnQgLSBpIC0gMV07XG59O1xuXG5pZiAoIU5BVElWRV9BUlJBWV9CVUZGRVIpIHtcbiAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG4gICAgdmFyIGJ5dGVMZW5ndGggPSB0b0luZGV4KGxlbmd0aCk7XG4gICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICBieXRlczogYXJyYXlGaWxsLmNhbGwobmV3IEFycmF5KGJ5dGVMZW5ndGgpLCAwKSxcbiAgICAgIGJ5dGVMZW5ndGg6IGJ5dGVMZW5ndGhcbiAgICB9KTtcbiAgICBpZiAoIURFU0NSSVBUT1JTKSB0aGlzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gICREYXRhVmlldyA9IGZ1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuICAgIGFuSW5zdGFuY2UoYnVmZmVyLCAkQXJyYXlCdWZmZXIsIERBVEFfVklFVyk7XG4gICAgdmFyIGJ1ZmZlckxlbmd0aCA9IGdldEludGVybmFsU3RhdGUoYnVmZmVyKS5ieXRlTGVuZ3RoO1xuICAgIHZhciBvZmZzZXQgPSB0b0ludGVnZXJPckluZmluaXR5KGJ5dGVPZmZzZXQpO1xuICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0Jyk7XG4gICAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPT09IHVuZGVmaW5lZCA/IGJ1ZmZlckxlbmd0aCAtIG9mZnNldCA6IHRvTGVuZ3RoKGJ5dGVMZW5ndGgpO1xuICAgIGlmIChvZmZzZXQgKyBieXRlTGVuZ3RoID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICBidWZmZXI6IGJ1ZmZlcixcbiAgICAgIGJ5dGVMZW5ndGg6IGJ5dGVMZW5ndGgsXG4gICAgICBieXRlT2Zmc2V0OiBvZmZzZXRcbiAgICB9KTtcbiAgICBpZiAoIURFU0NSSVBUT1JTKSB7XG4gICAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcbiAgICAgIHRoaXMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGg7XG4gICAgICB0aGlzLmJ5dGVPZmZzZXQgPSBvZmZzZXQ7XG4gICAgfVxuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIGFkZEdldHRlcigkQXJyYXlCdWZmZXIsICdieXRlTGVuZ3RoJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgJ2J1ZmZlcicpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsICdieXRlTGVuZ3RoJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgJ2J5dGVPZmZzZXQnKTtcbiAgfVxuXG4gIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgZ2V0SW50ODogZnVuY3Rpb24gZ2V0SW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdIDw8IDI0ID4+IDI0O1xuICAgIH0sXG4gICAgZ2V0VWludDg6IGZ1bmN0aW9uIGdldFVpbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF07XG4gICAgfSxcbiAgICBnZXRJbnQxNjogZnVuY3Rpb24gZ2V0SW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICAgIHJldHVybiAoYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdKSA8PCAxNiA+PiAxNjtcbiAgICB9LFxuICAgIGdldFVpbnQxNjogZnVuY3Rpb24gZ2V0VWludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm4gYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MzI6IGZ1bmN0aW9uIGdldEludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJbnQzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpKTtcbiAgICB9LFxuICAgIGdldFVpbnQzMjogZnVuY3Rpb24gZ2V0VWludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJbnQzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpKSA+Pj4gMDtcbiAgICB9LFxuICAgIGdldEZsb2F0MzI6IGZ1bmN0aW9uIGdldEZsb2F0MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSwgMjMpO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQ2NDogZnVuY3Rpb24gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpLCA1Mik7XG4gICAgfSxcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0ludDgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJbnQ4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRJbnQxNjogZnVuY3Rpb24gc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSW50MTYsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzZXRVaW50MTY6IGZ1bmN0aW9uIHNldFVpbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJbnQxNiwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIHNldEludDMyOiBmdW5jdGlvbiBzZXRJbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJbnQzMiwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIHNldFVpbnQzMjogZnVuY3Rpb24gc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0ludDMyLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgc2V0RmxvYXQzMjogZnVuY3Rpb24gc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tGbG9hdDMyLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgc2V0RmxvYXQ2NDogZnVuY3Rpb24gc2V0RmxvYXQ2NChieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIHBhY2tGbG9hdDY0LCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICB2YXIgSU5DT1JSRUNUX0FSUkFZX0JVRkZFUl9OQU1FID0gUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgTmF0aXZlQXJyYXlCdWZmZXIubmFtZSAhPT0gQVJSQVlfQlVGRkVSO1xuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXcgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbiAgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgTmF0aXZlQXJyYXlCdWZmZXIoMSk7XG4gIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3IE5hdGl2ZUFycmF5QnVmZmVyKC0xKTtcbiAgfSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBOYXRpdmVBcnJheUJ1ZmZlcigpO1xuICAgIG5ldyBOYXRpdmVBcnJheUJ1ZmZlcigxLjUpO1xuICAgIG5ldyBOYXRpdmVBcnJheUJ1ZmZlcihOYU4pO1xuICAgIHJldHVybiBJTkNPUlJFQ1RfQVJSQVlfQlVGRkVSX05BTUUgJiYgIUNPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FO1xuICB9KSkge1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLW5ldyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xuICAgICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIpO1xuICAgICAgcmV0dXJuIG5ldyBOYXRpdmVBcnJheUJ1ZmZlcih0b0luZGV4KGxlbmd0aCkpO1xuICAgIH07XG4gICAgdmFyIEFycmF5QnVmZmVyUHJvdG90eXBlID0gJEFycmF5QnVmZmVyW1BST1RPVFlQRV0gPSBOYXRpdmVBcnJheUJ1ZmZlcltQUk9UT1RZUEVdO1xuICAgIGZvciAodmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKE5hdGl2ZUFycmF5QnVmZmVyKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOykge1xuICAgICAgaWYgKCEoKGtleSA9IGtleXNbaisrXSkgaW4gJEFycmF5QnVmZmVyKSkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoJEFycmF5QnVmZmVyLCBrZXksIE5hdGl2ZUFycmF5QnVmZmVyW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBBcnJheUJ1ZmZlclByb3RvdHlwZS5jb25zdHJ1Y3RvciA9ICRBcnJheUJ1ZmZlcjtcbiAgfSBlbHNlIGlmIChJTkNPUlJFQ1RfQVJSQVlfQlVGRkVSX05BTUUgJiYgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoTmF0aXZlQXJyYXlCdWZmZXIsICduYW1lJywgQVJSQVlfQlVGRkVSKTtcbiAgfVxuXG4gIC8vIFdlYktpdCBidWcgLSB0aGUgc2FtZSBwYXJlbnQgcHJvdG90eXBlIGZvciB0eXBlZCBhcnJheXMgYW5kIGRhdGEgdmlld1xuICBpZiAoc2V0UHJvdG90eXBlT2YgJiYgZ2V0UHJvdG90eXBlT2YoJERhdGFWaWV3UHJvdG90eXBlKSAhPT0gT2JqZWN0UHJvdG90eXBlKSB7XG4gICAgc2V0UHJvdG90eXBlT2YoJERhdGFWaWV3UHJvdG90eXBlLCBPYmplY3RQcm90b3R5cGUpO1xuICB9XG5cbiAgLy8gaU9TIFNhZmFyaSA3LnggYnVnXG4gIHZhciB0ZXN0VmlldyA9IG5ldyAkRGF0YVZpZXcobmV3ICRBcnJheUJ1ZmZlcigyKSk7XG4gIHZhciAkc2V0SW50OCA9ICREYXRhVmlld1Byb3RvdHlwZS5zZXRJbnQ4O1xuICB0ZXN0Vmlldy5zZXRJbnQ4KDAsIDIxNDc0ODM2NDgpO1xuICB0ZXN0Vmlldy5zZXRJbnQ4KDEsIDIxNDc0ODM2NDkpO1xuICBpZiAodGVzdFZpZXcuZ2V0SW50OCgwKSB8fCAhdGVzdFZpZXcuZ2V0SW50OCgxKSkgcmVkZWZpbmVBbGwoJERhdGFWaWV3UHJvdG90eXBlLCB7XG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH1cbiAgfSwgeyB1bnNhZmU6IHRydWUgfSk7XG59XG5cbnNldFRvU3RyaW5nVGFnKCRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbnNldFRvU3RyaW5nVGFnKCREYXRhVmlldywgREFUQV9WSUVXKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFycmF5QnVmZmVyOiAkQXJyYXlCdWZmZXIsXG4gIERhdGFWaWV3OiAkRGF0YVZpZXdcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYXJyYXlCdWZmZXJNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyJyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xuXG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbnZhciBBcnJheUJ1ZmZlciA9IGFycmF5QnVmZmVyTW9kdWxlW0FSUkFZX0JVRkZFUl07XG52YXIgTmF0aXZlQXJyYXlCdWZmZXIgPSBnbG9iYWxbQVJSQVlfQlVGRkVSXTtcblxuLy8gYEFycmF5QnVmZmVyYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheWJ1ZmZlci1jb25zdHJ1Y3RvclxuJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiBOYXRpdmVBcnJheUJ1ZmZlciAhPT0gQXJyYXlCdWZmZXIgfSwge1xuICBBcnJheUJ1ZmZlcjogQXJyYXlCdWZmZXJcbn0pO1xuXG5zZXRTcGVjaWVzKEFSUkFZX0JVRkZFUik7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0FSUkFZX0JVRkZFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItbmF0aXZlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBJbnQ4QXJyYXkgPSBnbG9iYWwuSW50OEFycmF5O1xudmFyIEludDhBcnJheVByb3RvdHlwZSA9IEludDhBcnJheSAmJiBJbnQ4QXJyYXkucHJvdG90eXBlO1xudmFyIFVpbnQ4Q2xhbXBlZEFycmF5ID0gZ2xvYmFsLlVpbnQ4Q2xhbXBlZEFycmF5O1xudmFyIFVpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlID0gVWludDhDbGFtcGVkQXJyYXkgJiYgVWludDhDbGFtcGVkQXJyYXkucHJvdG90eXBlO1xudmFyIFR5cGVkQXJyYXkgPSBJbnQ4QXJyYXkgJiYgZ2V0UHJvdG90eXBlT2YoSW50OEFycmF5KTtcbnZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gSW50OEFycmF5UHJvdG90eXBlICYmIGdldFByb3RvdHlwZU9mKEludDhBcnJheVByb3RvdHlwZSk7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbnZhciBpc1Byb3RvdHlwZU9mID0gT2JqZWN0UHJvdG90eXBlLmlzUHJvdG90eXBlT2Y7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyIFRZUEVEX0FSUkFZX1RBRyA9IHVpZCgnVFlQRURfQVJSQVlfVEFHJyk7XG52YXIgVFlQRURfQVJSQVlfQ09OU1RSVUNUT1IgPSB1aWQoJ1RZUEVEX0FSUkFZX0NPTlNUUlVDVE9SJyk7XG4vLyBGaXhpbmcgbmF0aXZlIHR5cGVkIGFycmF5cyBpbiBPcGVyYSBQcmVzdG8gY3Jhc2hlcyB0aGUgYnJvd3Nlciwgc2VlICM1OTVcbnZhciBOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTID0gTkFUSVZFX0FSUkFZX0JVRkZFUiAmJiAhIXNldFByb3RvdHlwZU9mICYmIGNsYXNzb2YoZ2xvYmFsLm9wZXJhKSAhPT0gJ09wZXJhJztcbnZhciBUWVBFRF9BUlJBWV9UQUdfUkVRSVJFRCA9IGZhbHNlO1xudmFyIE5BTUUsIENvbnN0cnVjdG9yLCBQcm90b3R5cGU7XG5cbnZhciBUeXBlZEFycmF5Q29uc3RydWN0b3JzTGlzdCA9IHtcbiAgSW50OEFycmF5OiAxLFxuICBVaW50OEFycmF5OiAxLFxuICBVaW50OENsYW1wZWRBcnJheTogMSxcbiAgSW50MTZBcnJheTogMixcbiAgVWludDE2QXJyYXk6IDIsXG4gIEludDMyQXJyYXk6IDQsXG4gIFVpbnQzMkFycmF5OiA0LFxuICBGbG9hdDMyQXJyYXk6IDQsXG4gIEZsb2F0NjRBcnJheTogOFxufTtcblxudmFyIEJpZ0ludEFycmF5Q29uc3RydWN0b3JzTGlzdCA9IHtcbiAgQmlnSW50NjRBcnJheTogOCxcbiAgQmlnVWludDY0QXJyYXk6IDhcbn07XG5cbnZhciBpc1ZpZXcgPSBmdW5jdGlvbiBpc1ZpZXcoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBmYWxzZTtcbiAgdmFyIGtsYXNzID0gY2xhc3NvZihpdCk7XG4gIHJldHVybiBrbGFzcyA9PT0gJ0RhdGFWaWV3J1xuICAgIHx8IGhhc093bihUeXBlZEFycmF5Q29uc3RydWN0b3JzTGlzdCwga2xhc3MpXG4gICAgfHwgaGFzT3duKEJpZ0ludEFycmF5Q29uc3RydWN0b3JzTGlzdCwga2xhc3MpO1xufTtcblxudmFyIGlzVHlwZWRBcnJheSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGZhbHNlO1xuICB2YXIga2xhc3MgPSBjbGFzc29mKGl0KTtcbiAgcmV0dXJuIGhhc093bihUeXBlZEFycmF5Q29uc3RydWN0b3JzTGlzdCwga2xhc3MpXG4gICAgfHwgaGFzT3duKEJpZ0ludEFycmF5Q29uc3RydWN0b3JzTGlzdCwga2xhc3MpO1xufTtcblxudmFyIGFUeXBlZEFycmF5ID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc1R5cGVkQXJyYXkoaXQpKSByZXR1cm4gaXQ7XG4gIHRocm93IFR5cGVFcnJvcignVGFyZ2V0IGlzIG5vdCBhIHR5cGVkIGFycmF5Jyk7XG59O1xuXG52YXIgYVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChDKSB7XG4gIGlmIChpc0NhbGxhYmxlKEMpICYmICghc2V0UHJvdG90eXBlT2YgfHwgaXNQcm90b3R5cGVPZi5jYWxsKFR5cGVkQXJyYXksIEMpKSkgcmV0dXJuIEM7XG4gIHRocm93IFR5cGVFcnJvcih0cnlUb1N0cmluZyhDKSArICcgaXMgbm90IGEgdHlwZWQgYXJyYXkgY29uc3RydWN0b3InKTtcbn07XG5cbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gZnVuY3Rpb24gKEtFWSwgcHJvcGVydHksIGZvcmNlZCkge1xuICBpZiAoIURFU0NSSVBUT1JTKSByZXR1cm47XG4gIGlmIChmb3JjZWQpIGZvciAodmFyIEFSUkFZIGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0KSB7XG4gICAgdmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IGdsb2JhbFtBUlJBWV07XG4gICAgaWYgKFR5cGVkQXJyYXlDb25zdHJ1Y3RvciAmJiBoYXNPd24oVHlwZWRBcnJheUNvbnN0cnVjdG9yLnByb3RvdHlwZSwgS0VZKSkgdHJ5IHtcbiAgICAgIGRlbGV0ZSBUeXBlZEFycmF5Q29uc3RydWN0b3IucHJvdG90eXBlW0tFWV07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICB9XG4gIGlmICghVHlwZWRBcnJheVByb3RvdHlwZVtLRVldIHx8IGZvcmNlZCkge1xuICAgIHJlZGVmaW5lKFR5cGVkQXJyYXlQcm90b3R5cGUsIEtFWSwgZm9yY2VkID8gcHJvcGVydHlcbiAgICAgIDogTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyAmJiBJbnQ4QXJyYXlQcm90b3R5cGVbS0VZXSB8fCBwcm9wZXJ0eSk7XG4gIH1cbn07XG5cbnZhciBleHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kID0gZnVuY3Rpb24gKEtFWSwgcHJvcGVydHksIGZvcmNlZCkge1xuICB2YXIgQVJSQVksIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcjtcbiAgaWYgKCFERVNDUklQVE9SUykgcmV0dXJuO1xuICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICBpZiAoZm9yY2VkKSBmb3IgKEFSUkFZIGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0KSB7XG4gICAgICBUeXBlZEFycmF5Q29uc3RydWN0b3IgPSBnbG9iYWxbQVJSQVldO1xuICAgICAgaWYgKFR5cGVkQXJyYXlDb25zdHJ1Y3RvciAmJiBoYXNPd24oVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBLRVkpKSB0cnkge1xuICAgICAgICBkZWxldGUgVHlwZWRBcnJheUNvbnN0cnVjdG9yW0tFWV07XG4gICAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gICAgfVxuICAgIGlmICghVHlwZWRBcnJheVtLRVldIHx8IGZvcmNlZCkge1xuICAgICAgLy8gVjggfiBDaHJvbWUgNDktNTAgYCVUeXBlZEFycmF5JWAgbWV0aG9kcyBhcmUgbm9uLXdyaXRhYmxlIG5vbi1jb25maWd1cmFibGVcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZWRlZmluZShUeXBlZEFycmF5LCBLRVksIGZvcmNlZCA/IHByb3BlcnR5IDogTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyAmJiBUeXBlZEFycmF5W0tFWV0gfHwgcHJvcGVydHkpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIH0gZWxzZSByZXR1cm47XG4gIH1cbiAgZm9yIChBUlJBWSBpbiBUeXBlZEFycmF5Q29uc3RydWN0b3JzTGlzdCkge1xuICAgIFR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IGdsb2JhbFtBUlJBWV07XG4gICAgaWYgKFR5cGVkQXJyYXlDb25zdHJ1Y3RvciAmJiAoIVR5cGVkQXJyYXlDb25zdHJ1Y3RvcltLRVldIHx8IGZvcmNlZCkpIHtcbiAgICAgIHJlZGVmaW5lKFR5cGVkQXJyYXlDb25zdHJ1Y3RvciwgS0VZLCBwcm9wZXJ0eSk7XG4gICAgfVxuICB9XG59O1xuXG5mb3IgKE5BTUUgaW4gVHlwZWRBcnJheUNvbnN0cnVjdG9yc0xpc3QpIHtcbiAgQ29uc3RydWN0b3IgPSBnbG9iYWxbTkFNRV07XG4gIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yICYmIENvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgaWYgKFByb3RvdHlwZSkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFByb3RvdHlwZSwgVFlQRURfQVJSQVlfQ09OU1RSVUNUT1IsIENvbnN0cnVjdG9yKTtcbiAgZWxzZSBOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTID0gZmFsc2U7XG59XG5cbmZvciAoTkFNRSBpbiBCaWdJbnRBcnJheUNvbnN0cnVjdG9yc0xpc3QpIHtcbiAgQ29uc3RydWN0b3IgPSBnbG9iYWxbTkFNRV07XG4gIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yICYmIENvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgaWYgKFByb3RvdHlwZSkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFByb3RvdHlwZSwgVFlQRURfQVJSQVlfQ09OU1RSVUNUT1IsIENvbnN0cnVjdG9yKTtcbn1cblxuLy8gV2ViS2l0IGJ1ZyAtIHR5cGVkIGFycmF5cyBjb25zdHJ1Y3RvcnMgcHJvdG90eXBlIGlzIE9iamVjdC5wcm90b3R5cGVcbmlmICghTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyB8fCAhaXNDYWxsYWJsZShUeXBlZEFycmF5KSB8fCBUeXBlZEFycmF5ID09PSBGdW5jdGlvbi5wcm90b3R5cGUpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvdyAtLSBzYWZlXG4gIFR5cGVkQXJyYXkgPSBmdW5jdGlvbiBUeXBlZEFycmF5KCkge1xuICAgIHRocm93IFR5cGVFcnJvcignSW5jb3JyZWN0IGludm9jYXRpb24nKTtcbiAgfTtcbiAgaWYgKE5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MpIGZvciAoTkFNRSBpbiBUeXBlZEFycmF5Q29uc3RydWN0b3JzTGlzdCkge1xuICAgIGlmIChnbG9iYWxbTkFNRV0pIHNldFByb3RvdHlwZU9mKGdsb2JhbFtOQU1FXSwgVHlwZWRBcnJheSk7XG4gIH1cbn1cblxuaWYgKCFOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTIHx8ICFUeXBlZEFycmF5UHJvdG90eXBlIHx8IFR5cGVkQXJyYXlQcm90b3R5cGUgPT09IE9iamVjdFByb3RvdHlwZSkge1xuICBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheS5wcm90b3R5cGU7XG4gIGlmIChOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTKSBmb3IgKE5BTUUgaW4gVHlwZWRBcnJheUNvbnN0cnVjdG9yc0xpc3QpIHtcbiAgICBpZiAoZ2xvYmFsW05BTUVdKSBzZXRQcm90b3R5cGVPZihnbG9iYWxbTkFNRV0ucHJvdG90eXBlLCBUeXBlZEFycmF5UHJvdG90eXBlKTtcbiAgfVxufVxuXG4vLyBXZWJLaXQgYnVnIC0gb25lIG1vcmUgb2JqZWN0IGluIFVpbnQ4Q2xhbXBlZEFycmF5IHByb3RvdHlwZSBjaGFpblxuaWYgKE5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MgJiYgZ2V0UHJvdG90eXBlT2YoVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUpICE9PSBUeXBlZEFycmF5UHJvdG90eXBlKSB7XG4gIHNldFByb3RvdHlwZU9mKFVpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlLCBUeXBlZEFycmF5UHJvdG90eXBlKTtcbn1cblxuaWYgKERFU0NSSVBUT1JTICYmICFoYXNPd24oVHlwZWRBcnJheVByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRykpIHtcbiAgVFlQRURfQVJSQVlfVEFHX1JFUUlSRUQgPSB0cnVlO1xuICBkZWZpbmVQcm9wZXJ0eShUeXBlZEFycmF5UHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB7IGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpc09iamVjdCh0aGlzKSA/IHRoaXNbVFlQRURfQVJSQVlfVEFHXSA6IHVuZGVmaW5lZDtcbiAgfSB9KTtcbiAgZm9yIChOQU1FIGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0KSBpZiAoZ2xvYmFsW05BTUVdKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbFtOQU1FXSwgVFlQRURfQVJSQVlfVEFHLCBOQU1FKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUzogTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyxcbiAgVFlQRURfQVJSQVlfQ09OU1RSVUNUT1I6IFRZUEVEX0FSUkFZX0NPTlNUUlVDVE9SLFxuICBUWVBFRF9BUlJBWV9UQUc6IFRZUEVEX0FSUkFZX1RBR19SRVFJUkVEICYmIFRZUEVEX0FSUkFZX1RBRyxcbiAgYVR5cGVkQXJyYXk6IGFUeXBlZEFycmF5LFxuICBhVHlwZWRBcnJheUNvbnN0cnVjdG9yOiBhVHlwZWRBcnJheUNvbnN0cnVjdG9yLFxuICBleHBvcnRUeXBlZEFycmF5TWV0aG9kOiBleHBvcnRUeXBlZEFycmF5TWV0aG9kLFxuICBleHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kOiBleHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kLFxuICBpc1ZpZXc6IGlzVmlldyxcbiAgaXNUeXBlZEFycmF5OiBpc1R5cGVkQXJyYXksXG4gIFR5cGVkQXJyYXk6IFR5cGVkQXJyYXksXG4gIFR5cGVkQXJyYXlQcm90b3R5cGU6IFR5cGVkQXJyYXlQcm90b3R5cGVcbn07XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcblxudmFyIE5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLk5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1M7XG5cbi8vIGBBcnJheUJ1ZmZlci5pc1ZpZXdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheWJ1ZmZlci5pc3ZpZXdcbiQoeyB0YXJnZXQ6ICdBcnJheUJ1ZmZlcicsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MgfSwge1xuICBpc1ZpZXc6IEFycmF5QnVmZmVyVmlld0NvcmUuaXNWaWV3XG59KTtcbiIsInZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG4vLyBgQXNzZXJ0OiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ29uc3RydWN0b3IoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IFR5cGVFcnJvcih0cnlUb1N0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNvbnN0cnVjdG9yJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBTcGVjaWVzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zcGVjaWVzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGRlZmF1bHRDb25zdHJ1Y3Rvcikge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBkZWZhdWx0Q29uc3RydWN0b3IgOiBhQ29uc3RydWN0b3IoUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBBcnJheUJ1ZmZlck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG52YXIgQXJyYXlCdWZmZXIgPSBBcnJheUJ1ZmZlck1vZHVsZS5BcnJheUJ1ZmZlcjtcbnZhciBEYXRhVmlldyA9IEFycmF5QnVmZmVyTW9kdWxlLkRhdGFWaWV3O1xudmFyIG5hdGl2ZUFycmF5QnVmZmVyU2xpY2UgPSBBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2U7XG5cbnZhciBJTkNPUlJFQ1RfU0xJQ0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhbmV3IEFycmF5QnVmZmVyKDIpLnNsaWNlKDEsIHVuZGVmaW5lZCkuYnl0ZUxlbmd0aDtcbn0pO1xuXG4vLyBgQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlidWZmZXIucHJvdG90eXBlLnNsaWNlXG4kKHsgdGFyZ2V0OiAnQXJyYXlCdWZmZXInLCBwcm90bzogdHJ1ZSwgdW5zYWZlOiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVF9TTElDRSB9LCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgaWYgKG5hdGl2ZUFycmF5QnVmZmVyU2xpY2UgIT09IHVuZGVmaW5lZCAmJiBlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5hdGl2ZUFycmF5QnVmZmVyU2xpY2UuY2FsbChhbk9iamVjdCh0aGlzKSwgc3RhcnQpOyAvLyBGRiBmaXhcbiAgICB9XG4gICAgdmFyIGxlbmd0aCA9IGFuT2JqZWN0KHRoaXMpLmJ5dGVMZW5ndGg7XG4gICAgdmFyIGZpcnN0ID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW5ndGgpO1xuICAgIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIEFycmF5QnVmZmVyKSkodG9MZW5ndGgoZmluIC0gZmlyc3QpKTtcbiAgICB2YXIgdmlld1NvdXJjZSA9IG5ldyBEYXRhVmlldyh0aGlzKTtcbiAgICB2YXIgdmlld1RhcmdldCA9IG5ldyBEYXRhVmlldyhyZXN1bHQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGZpcnN0IDwgZmluKSB7XG4gICAgICB2aWV3VGFyZ2V0LnNldFVpbnQ4KGluZGV4KyssIHZpZXdTb3VyY2UuZ2V0VWludDgoZmlyc3QrKykpO1xuICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBBcnJheUJ1ZmZlck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXInKTtcbnZhciBOQVRJVkVfQVJSQVlfQlVGRkVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1uYXRpdmUnKTtcblxuLy8gYERhdGFWaWV3YCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1kYXRhdmlldy1jb25zdHJ1Y3RvclxuJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX0FSUkFZX0JVRkZFUiB9LCB7XG4gIERhdGFWaWV3OiBBcnJheUJ1ZmZlck1vZHVsZS5EYXRhVmlld1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRk9SQ0VEID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IERhdGUoMTZlMTEpLmdldFllYXIoKSAhPT0gMTIwO1xufSk7XG5cbnZhciBnZXRGdWxsWWVhciA9IERhdGUucHJvdG90eXBlLmdldEZ1bGxZZWFyO1xuXG4vLyBgRGF0ZS5wcm90b3R5cGUuZ2V0WWVhcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWRhdGUucHJvdG90eXBlLmdldHllYXJcbiQoeyB0YXJnZXQ6ICdEYXRlJywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgZ2V0WWVhcjogZnVuY3Rpb24gZ2V0WWVhcigpIHtcbiAgICByZXR1cm4gZ2V0RnVsbFllYXIuY2FsbCh0aGlzKSAtIDE5MDA7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGBEYXRlLm5vd2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWRhdGUubm93XG4kKHsgdGFyZ2V0OiAnRGF0ZScsIHN0YXQ6IHRydWUgfSwge1xuICBub3c6IGZ1bmN0aW9uIG5vdygpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBnZXRUaW1lID0gRGF0ZS5wcm90b3R5cGUuZ2V0VGltZTtcbnZhciBzZXRGdWxsWWVhciA9IERhdGUucHJvdG90eXBlLnNldEZ1bGxZZWFyO1xuXG4vLyBgRGF0ZS5wcm90b3R5cGUuc2V0WWVhcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWRhdGUucHJvdG90eXBlLnNldHllYXJcbiQoeyB0YXJnZXQ6ICdEYXRlJywgcHJvdG86IHRydWUgfSwge1xuICBzZXRZZWFyOiBmdW5jdGlvbiBzZXRZZWFyKHllYXIpIHtcbiAgICAvLyB2YWxpZGF0ZVxuICAgIGdldFRpbWUuY2FsbCh0aGlzKTtcbiAgICB2YXIgeWkgPSB0b0ludGVnZXJPckluZmluaXR5KHllYXIpO1xuICAgIHZhciB5eXl5ID0gMCA8PSB5aSAmJiB5aSA8PSA5OSA/IHlpICsgMTkwMCA6IHlpO1xuICAgIHJldHVybiBzZXRGdWxsWWVhci5jYWxsKHRoaXMsIHl5eXkpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG4vLyBgRGF0ZS5wcm90b3R5cGUudG9HTVRTdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1kYXRlLnByb3RvdHlwZS50b2dtdHN0cmluZ1xuJCh7IHRhcmdldDogJ0RhdGUnLCBwcm90bzogdHJ1ZSB9LCB7XG4gIHRvR01UU3RyaW5nOiBEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZ1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUucmVwZWF0YCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBlYXRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVwZWF0KGNvdW50KSB7XG4gIHZhciBzdHIgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgbiA9IHRvSW50ZWdlck9ySW5maW5pdHkoY291bnQpO1xuICBpZiAobiA8IDAgfHwgbiA9PSBJbmZpbml0eSkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbnVtYmVyIG9mIHJlcGV0aXRpb25zJyk7XG4gIGZvciAoO24gPiAwOyAobiA+Pj49IDEpICYmIChzdHIgKz0gc3RyKSkgaWYgKG4gJiAxKSByZXN1bHQgKz0gc3RyO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1yZXBlYXQnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyBwYWRTdGFydCwgcGFkRW5kIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfRU5EKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIG1heExlbmd0aCwgZmlsbFN0cmluZykge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBpbnRNYXhMZW5ndGggPSB0b0xlbmd0aChtYXhMZW5ndGgpO1xuICAgIHZhciBzdHJpbmdMZW5ndGggPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlsbFN0ciA9IGZpbGxTdHJpbmcgPT09IHVuZGVmaW5lZCA/ICcgJyA6IHRvU3RyaW5nKGZpbGxTdHJpbmcpO1xuICAgIHZhciBmaWxsTGVuLCBzdHJpbmdGaWxsZXI7XG4gICAgaWYgKGludE1heExlbmd0aCA8PSBzdHJpbmdMZW5ndGggfHwgZmlsbFN0ciA9PSAnJykgcmV0dXJuIFM7XG4gICAgZmlsbExlbiA9IGludE1heExlbmd0aCAtIHN0cmluZ0xlbmd0aDtcbiAgICBzdHJpbmdGaWxsZXIgPSByZXBlYXQuY2FsbChmaWxsU3RyLCBjZWlsKGZpbGxMZW4gLyBmaWxsU3RyLmxlbmd0aCkpO1xuICAgIGlmIChzdHJpbmdGaWxsZXIubGVuZ3RoID4gZmlsbExlbikgc3RyaW5nRmlsbGVyID0gc3RyaW5nRmlsbGVyLnNsaWNlKDAsIGZpbGxMZW4pO1xuICAgIHJldHVybiBJU19FTkQgPyBTICsgc3RyaW5nRmlsbGVyIDogc3RyaW5nRmlsbGVyICsgUztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5wYWRTdGFydGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5wYWRzdGFydFxuICBzdGFydDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUucGFkRW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnBhZGVuZFxuICBlbmQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHBhZFN0YXJ0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1wYWQnKS5zdGFydDtcblxudmFyIGFicyA9IE1hdGguYWJzO1xudmFyIERhdGVQcm90b3R5cGUgPSBEYXRlLnByb3RvdHlwZTtcbnZhciBnZXRUaW1lID0gRGF0ZVByb3RvdHlwZS5nZXRUaW1lO1xudmFyIG5hdGl2ZURhdGVUb0lTT1N0cmluZyA9IERhdGVQcm90b3R5cGUudG9JU09TdHJpbmc7XG5cbi8vIGBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWRhdGUucHJvdG90eXBlLnRvaXNvc3RyaW5nXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGZhaWxzIGhlcmU6XG5tb2R1bGUuZXhwb3J0cyA9IChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuYXRpdmVEYXRlVG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZSgtNWUxMyAtIDEpKSAhPSAnMDM4NS0wNy0yNVQwNzowNjozOS45OTlaJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIG5hdGl2ZURhdGVUb0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKE5hTikpO1xufSkpID8gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7XG4gIGlmICghaXNGaW5pdGUoZ2V0VGltZS5jYWxsKHRoaXMpKSkgdGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIHZhciBkYXRlID0gdGhpcztcbiAgdmFyIHllYXIgPSBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBtaWxsaXNlY29uZHMgPSBkYXRlLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICB2YXIgc2lnbiA9IHllYXIgPCAwID8gJy0nIDogeWVhciA+IDk5OTkgPyAnKycgOiAnJztcbiAgcmV0dXJuIHNpZ24gKyBwYWRTdGFydChhYnMoeWVhciksIHNpZ24gPyA2IDogNCwgMCkgK1xuICAgICctJyArIHBhZFN0YXJ0KGRhdGUuZ2V0VVRDTW9udGgoKSArIDEsIDIsIDApICtcbiAgICAnLScgKyBwYWRTdGFydChkYXRlLmdldFVUQ0RhdGUoKSwgMiwgMCkgK1xuICAgICdUJyArIHBhZFN0YXJ0KGRhdGUuZ2V0VVRDSG91cnMoKSwgMiwgMCkgK1xuICAgICc6JyArIHBhZFN0YXJ0KGRhdGUuZ2V0VVRDTWludXRlcygpLCAyLCAwKSArXG4gICAgJzonICsgcGFkU3RhcnQoZGF0ZS5nZXRVVENTZWNvbmRzKCksIDIsIDApICtcbiAgICAnLicgKyBwYWRTdGFydChtaWxsaXNlY29uZHMsIDMsIDApICtcbiAgICAnWic7XG59IDogbmF0aXZlRGF0ZVRvSVNPU3RyaW5nO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9JU09TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGF0ZS10by1pc28tc3RyaW5nJyk7XG5cbi8vIGBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWRhdGUucHJvdG90eXBlLnRvaXNvc3RyaW5nXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbiQoeyB0YXJnZXQ6ICdEYXRlJywgcHJvdG86IHRydWUsIGZvcmNlZDogRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcgIT09IHRvSVNPU3RyaW5nIH0sIHtcbiAgdG9JU09TdHJpbmc6IHRvSVNPU3RyaW5nXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG5cbnZhciBGT1JDRUQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pO1xuXG4vLyBgRGF0ZS5wcm90b3R5cGUudG9KU09OYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZGF0ZS5wcm90b3R5cGUudG9qc29uXG4kKHsgdGFyZ2V0OiAnRGF0ZScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTywgJ251bWJlcicpO1xuICAgIHJldHVybiB0eXBlb2YgcHYgPT0gJ251bWJlcicgJiYgIWlzRmluaXRlKHB2KSA/IG51bGwgOiBPLnRvSVNPU3RyaW5nKCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG5cbi8vIGBEYXRlLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWRhdGUucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhpbnQpIHtcbiAgYW5PYmplY3QodGhpcyk7XG4gIGlmIChoaW50ID09PSAnc3RyaW5nJyB8fCBoaW50ID09PSAnZGVmYXVsdCcpIGhpbnQgPSAnc3RyaW5nJztcbiAgZWxzZSBpZiAoaGludCAhPT0gJ251bWJlcicpIHRocm93IFR5cGVFcnJvcignSW5jb3JyZWN0IGhpbnQnKTtcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUodGhpcywgaGludCk7XG59O1xuIiwidmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgZGF0ZVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RhdGUtdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG52YXIgRGF0ZVByb3RvdHlwZSA9IERhdGUucHJvdG90eXBlO1xuXG4vLyBgRGF0ZS5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1kYXRlLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5pZiAoIShUT19QUklNSVRJVkUgaW4gRGF0ZVByb3RvdHlwZSkpIHtcbiAgcmVkZWZpbmUoRGF0ZVByb3RvdHlwZSwgVE9fUFJJTUlUSVZFLCBkYXRlVG9QcmltaXRpdmUpO1xufVxuIiwidmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG5cbnZhciBEYXRlUHJvdG90eXBlID0gRGF0ZS5wcm90b3R5cGU7XG52YXIgSU5WQUxJRF9EQVRFID0gJ0ludmFsaWQgRGF0ZSc7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBuYXRpdmVEYXRlVG9TdHJpbmcgPSBEYXRlUHJvdG90eXBlW1RPX1NUUklOR107XG52YXIgZ2V0VGltZSA9IERhdGVQcm90b3R5cGUuZ2V0VGltZTtcblxuLy8gYERhdGUucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZGF0ZS5wcm90b3R5cGUudG9zdHJpbmdcbmlmIChTdHJpbmcobmV3IERhdGUoTmFOKSkgIT0gSU5WQUxJRF9EQVRFKSB7XG4gIHJlZGVmaW5lKERhdGVQcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIHZhbHVlID0gZ2V0VGltZS5jYWxsKHRoaXMpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/IG5hdGl2ZURhdGVUb1N0cmluZy5jYWxsKHRoaXMpIDogSU5WQUxJRF9EQVRFO1xuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xuXG52YXIgcmF3ID0gL1tcXHcqK1xcLS4vQF0vO1xuXG52YXIgaGV4ID0gZnVuY3Rpb24gKGNvZGUsIGxlbmd0aCkge1xuICB2YXIgcmVzdWx0ID0gY29kZS50b1N0cmluZygxNik7XG4gIHdoaWxlIChyZXN1bHQubGVuZ3RoIDwgbGVuZ3RoKSByZXN1bHQgPSAnMCcgKyByZXN1bHQ7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBgZXNjYXBlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZXNjYXBlLXN0cmluZ1xuJCh7IGdsb2JhbDogdHJ1ZSB9LCB7XG4gIGVzY2FwZTogZnVuY3Rpb24gZXNjYXBlKHN0cmluZykge1xuICAgIHZhciBzdHIgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgIHZhciByZXN1bHQgPSAnJztcbiAgICB2YXIgbGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjaHIsIGNvZGU7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBjaHIgPSBzdHIuY2hhckF0KGluZGV4KyspO1xuICAgICAgaWYgKHJhdy50ZXN0KGNocikpIHtcbiAgICAgICAgcmVzdWx0ICs9IGNocjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvZGUgPSBjaHIuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgaWYgKGNvZGUgPCAyNTYpIHtcbiAgICAgICAgICByZXN1bHQgKz0gJyUnICsgaGV4KGNvZGUsIDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdCArPSAnJXUnICsgaGV4KGNvZGUsIDQpLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBzbGljZSA9IFtdLnNsaWNlO1xudmFyIGZhY3RvcmllcyA9IHt9O1xuXG52YXIgY29uc3RydWN0ID0gZnVuY3Rpb24gKEMsIGFyZ3NMZW5ndGgsIGFyZ3MpIHtcbiAgaWYgKCEoYXJnc0xlbmd0aCBpbiBmYWN0b3JpZXMpKSB7XG4gICAgZm9yICh2YXIgbGlzdCA9IFtdLCBpID0gMDsgaSA8IGFyZ3NMZW5ndGg7IGkrKykgbGlzdFtpXSA9ICdhWycgKyBpICsgJ10nO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSB3ZSBoYXZlIG5vIHByb3BlciBhbHRlcm5hdGl2ZXMsIElFOC0gb25seVxuICAgIGZhY3Rvcmllc1thcmdzTGVuZ3RoXSA9IEZ1bmN0aW9uKCdDLGEnLCAncmV0dXJuIG5ldyBDKCcgKyBsaXN0LmpvaW4oJywnKSArICcpJyk7XG4gIH0gcmV0dXJuIGZhY3Rvcmllc1thcmdzTGVuZ3RoXShDLCBhcmdzKTtcbn07XG5cbi8vIGBGdW5jdGlvbi5wcm90b3R5cGUuYmluZGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG5tb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmJpbmQgfHwgZnVuY3Rpb24gYmluZCh0aGF0IC8qICwgLi4uYXJncyAqLykge1xuICB2YXIgZm4gPSBhQ2FsbGFibGUodGhpcyk7XG4gIHZhciBwYXJ0QXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgdmFyIGJvdW5kRnVuY3Rpb24gPSBmdW5jdGlvbiBib3VuZCgvKiBhcmdzLi4uICovKSB7XG4gICAgdmFyIGFyZ3MgPSBwYXJ0QXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJvdW5kRnVuY3Rpb24gPyBjb25zdHJ1Y3QoZm4sIGFyZ3MubGVuZ3RoLCBhcmdzKSA6IGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9O1xuICBpZiAoaXNPYmplY3QoZm4ucHJvdG90eXBlKSkgYm91bmRGdW5jdGlvbi5wcm90b3R5cGUgPSBmbi5wcm90b3R5cGU7XG4gIHJldHVybiBib3VuZEZ1bmN0aW9uO1xufTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZCcpO1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxuJCh7IHRhcmdldDogJ0Z1bmN0aW9uJywgcHJvdG86IHRydWUgfSwge1xuICBiaW5kOiBiaW5kXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBIQVNfSU5TVEFOQ0UgPSB3ZWxsS25vd25TeW1ib2woJ2hhc0luc3RhbmNlJyk7XG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8vIGBGdW5jdGlvbi5wcm90b3R5cGVbQEBoYXNJbnN0YW5jZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUtQEBoYXNpbnN0YW5jZVxuaWYgKCEoSEFTX0lOU1RBTkNFIGluIEZ1bmN0aW9uUHJvdG90eXBlKSkge1xuICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKEZ1bmN0aW9uUHJvdG90eXBlLCBIQVNfSU5TVEFOQ0UsIHsgdmFsdWU6IGZ1bmN0aW9uIChPKSB7XG4gICAgaWYgKCFpc0NhbGxhYmxlKHRoaXMpIHx8ICFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gICAgLy8gZm9yIGVudmlyb25tZW50IHcvbyBuYXRpdmUgYEBAaGFzSW5zdGFuY2VgIGxvZ2ljIGVub3VnaCBgaW5zdGFuY2VvZmAsIGJ1dCBhZGQgdGhpczpcbiAgICB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKSBpZiAodGhpcy5wcm90b3R5cGUgPT09IE8pIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSB9KTtcbn1cbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIEZVTkNUSU9OX05BTUVfRVhJU1RTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5FWElTVFM7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBGdW5jdGlvblByb3RvdHlwZVRvU3RyaW5nID0gRnVuY3Rpb25Qcm90b3R5cGUudG9TdHJpbmc7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIEZ1bmN0aW9uIGluc3RhbmNlcyBgLm5hbWVgIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWZ1bmN0aW9uLWluc3RhbmNlcy1uYW1lXG5pZiAoREVTQ1JJUFRPUlMgJiYgIUZVTkNUSU9OX05BTUVfRVhJU1RTKSB7XG4gIGRlZmluZVByb3BlcnR5KEZ1bmN0aW9uUHJvdG90eXBlLCBOQU1FLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHJvdG90eXBlVG9TdHJpbmcuY2FsbCh0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbi8vIGBnbG9iYWxUaGlzYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2xvYmFsdGhpc1xuJCh7IGdsb2JhbDogdHJ1ZSB9LCB7XG4gIGdsb2JhbFRoaXM6IGdsb2JhbFxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciAkc3RyaW5naWZ5ID0gZ2V0QnVpbHRJbignSlNPTicsICdzdHJpbmdpZnknKTtcbnZhciByZSA9IC9bXFx1RDgwMC1cXHVERkZGXS9nO1xudmFyIGxvdyA9IC9eW1xcdUQ4MDAtXFx1REJGRl0kLztcbnZhciBoaSA9IC9eW1xcdURDMDAtXFx1REZGRl0kLztcblxudmFyIGZpeCA9IGZ1bmN0aW9uIChtYXRjaCwgb2Zmc2V0LCBzdHJpbmcpIHtcbiAgdmFyIHByZXYgPSBzdHJpbmcuY2hhckF0KG9mZnNldCAtIDEpO1xuICB2YXIgbmV4dCA9IHN0cmluZy5jaGFyQXQob2Zmc2V0ICsgMSk7XG4gIGlmICgobG93LnRlc3QobWF0Y2gpICYmICFoaS50ZXN0KG5leHQpKSB8fCAoaGkudGVzdChtYXRjaCkgJiYgIWxvdy50ZXN0KHByZXYpKSkge1xuICAgIHJldHVybiAnXFxcXHUnICsgbWF0Y2guY2hhckNvZGVBdCgwKS50b1N0cmluZygxNik7XG4gIH0gcmV0dXJuIG1hdGNoO1xufTtcblxudmFyIEZPUkNFRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICRzdHJpbmdpZnkoJ1xcdURGMDZcXHVEODM0JykgIT09ICdcIlxcXFx1ZGYwNlxcXFx1ZDgzNFwiJ1xuICAgIHx8ICRzdHJpbmdpZnkoJ1xcdURFQUQnKSAhPT0gJ1wiXFxcXHVkZWFkXCInO1xufSk7XG5cbmlmICgkc3RyaW5naWZ5KSB7XG4gIC8vIGBKU09OLnN0cmluZ2lmeWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtanNvbi5zdHJpbmdpZnlcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtd2VsbC1mb3JtZWQtc3RyaW5naWZ5XG4gICQoeyB0YXJnZXQ6ICdKU09OJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gICAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICAgICAgdmFyIHJlc3VsdCA9ICRzdHJpbmdpZnkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgIHJldHVybiB0eXBlb2YgcmVzdWx0ID09ICdzdHJpbmcnID8gcmVzdWx0LnJlcGxhY2UocmUsIGZpeCkgOiByZXN1bHQ7XG4gICAgfVxuICB9KTtcbn1cbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcblxuLy8gSlNPTltAQHRvU3RyaW5nVGFnXSBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1qc29uLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUsIGVzL25vLW9iamVjdC1wcmV2ZW50ZXh0ZW5zaW9ucyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBGUkVFWklORyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mcmVlemluZycpO1xuXG52YXIgUkVRVUlSRUQgPSBmYWxzZTtcbnZhciBNRVRBREFUQSA9IHVpZCgnbWV0YScpO1xudmFyIGlkID0gMDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUgLS0gc2FmZVxudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciBzZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBkZWZpbmVQcm9wZXJ0eShpdCwgTUVUQURBVEEsIHsgdmFsdWU6IHtcbiAgICBvYmplY3RJRDogJ08nICsgaWQrKywgLy8gb2JqZWN0IElEXG4gICAgd2Vha0RhdGE6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xuXG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBhIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXNPd24oaXQsIE1FVEFEQVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhZGF0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQURBVEFdLm9iamVjdElEO1xufTtcblxudmFyIGdldFdlYWtEYXRhID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXNPd24oaXQsIE1FVEFEQVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhZGF0YShpdCk7XG4gIC8vIHJldHVybiB0aGUgc3RvcmUgb2Ygd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQURBVEFdLndlYWtEYXRhO1xufTtcblxuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaSU5HICYmIFJFUVVJUkVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhc093bihpdCwgTUVUQURBVEEpKSBzZXRNZXRhZGF0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG5cbnZhciBlbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gIG1ldGEuZW5hYmxlID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuICBSRVFVSVJFRCA9IHRydWU7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mO1xuICB2YXIgc3BsaWNlID0gW10uc3BsaWNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB0ZXN0W01FVEFEQVRBXSA9IDE7XG5cbiAgLy8gcHJldmVudCBleHBvc2luZyBvZiBtZXRhZGF0YSBrZXlcbiAgaWYgKGdldE93blByb3BlcnR5TmFtZXModGVzdCkubGVuZ3RoKSB7XG4gICAgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChyZXN1bHRbaV0gPT09IE1FVEFEQVRBKSB7XG4gICAgICAgICAgc3BsaWNlLmNhbGwocmVzdWx0LCBpLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAkKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICAgIGdldE93blByb3BlcnR5TmFtZXM6IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZS5mXG4gICAgfSk7XG4gIH1cbn07XG5cbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVuYWJsZTogZW5hYmxlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrRGF0YTogZ2V0V2Vha0RhdGEsXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcblxuaGlkZGVuS2V5c1tNRVRBREFUQV0gPSB0cnVlO1xuIiwidmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xuXG4vLyBtYWtlcyBzdWJjbGFzc2luZyB3b3JrIGNvcnJlY3QgZm9yIHdyYXBwZWQgYnVpbHQtaW5zXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgkdGhpcywgZHVtbXksIFdyYXBwZXIpIHtcbiAgdmFyIE5ld1RhcmdldCwgTmV3VGFyZ2V0UHJvdG90eXBlO1xuICBpZiAoXG4gICAgLy8gaXQgY2FuIHdvcmsgb25seSB3aXRoIG5hdGl2ZSBgc2V0UHJvdG90eXBlT2ZgXG4gICAgc2V0UHJvdG90eXBlT2YgJiZcbiAgICAvLyB3ZSBoYXZlbid0IGNvbXBsZXRlbHkgY29ycmVjdCBwcmUtRVM2IHdheSBmb3IgZ2V0dGluZyBgbmV3LnRhcmdldGAsIHNvIHVzZSB0aGlzXG4gICAgaXNDYWxsYWJsZShOZXdUYXJnZXQgPSBkdW1teS5jb25zdHJ1Y3RvcikgJiZcbiAgICBOZXdUYXJnZXQgIT09IFdyYXBwZXIgJiZcbiAgICBpc09iamVjdChOZXdUYXJnZXRQcm90b3R5cGUgPSBOZXdUYXJnZXQucHJvdG90eXBlKSAmJlxuICAgIE5ld1RhcmdldFByb3RvdHlwZSAhPT0gV3JhcHBlci5wcm90b3R5cGVcbiAgKSBzZXRQcm90b3R5cGVPZigkdGhpcywgTmV3VGFyZ2V0UHJvdG90eXBlKTtcbiAgcmV0dXJuICR0aGlzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIEludGVybmFsTWV0YWRhdGFNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FLCB3cmFwcGVyLCBjb21tb24pIHtcbiAgdmFyIElTX01BUCA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignTWFwJykgIT09IC0xO1xuICB2YXIgSVNfV0VBSyA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignV2VhaycpICE9PSAtMTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIE5hdGl2ZUNvbnN0cnVjdG9yID0gZ2xvYmFsW0NPTlNUUlVDVE9SX05BTUVdO1xuICB2YXIgTmF0aXZlUHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IgJiYgTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICB2YXIgQ29uc3RydWN0b3IgPSBOYXRpdmVDb25zdHJ1Y3RvcjtcbiAgdmFyIGV4cG9ydGVkID0ge307XG5cbiAgdmFyIGZpeE1ldGhvZCA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICB2YXIgbmF0aXZlTWV0aG9kID0gTmF0aXZlUHJvdG90eXBlW0tFWV07XG4gICAgcmVkZWZpbmUoTmF0aXZlUHJvdG90eXBlLCBLRVksXG4gICAgICBLRVkgPT0gJ2FkZCcgPyBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICAgICAgbmF0aXZlTWV0aG9kLmNhbGwodGhpcywgdmFsdWUgPT09IDAgPyAwIDogdmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0gOiBLRVkgPT0gJ2RlbGV0ZScgPyBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChrZXkpID8gZmFsc2UgOiBuYXRpdmVNZXRob2QuY2FsbCh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5KTtcbiAgICAgIH0gOiBLRVkgPT0gJ2dldCcgPyBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChrZXkpID8gdW5kZWZpbmVkIDogbmF0aXZlTWV0aG9kLmNhbGwodGhpcywga2V5ID09PSAwID8gMCA6IGtleSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3Qoa2V5KSA/IGZhbHNlIDogbmF0aXZlTWV0aG9kLmNhbGwodGhpcywga2V5ID09PSAwID8gMCA6IGtleSk7XG4gICAgICB9IDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgbmF0aXZlTWV0aG9kLmNhbGwodGhpcywga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICApO1xuICB9O1xuXG4gIHZhciBSRVBMQUNFID0gaXNGb3JjZWQoXG4gICAgQ09OU1RSVUNUT1JfTkFNRSxcbiAgICAhaXNDYWxsYWJsZShOYXRpdmVDb25zdHJ1Y3RvcikgfHwgIShJU19XRUFLIHx8IE5hdGl2ZVByb3RvdHlwZS5mb3JFYWNoICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKS5lbnRyaWVzKCkubmV4dCgpO1xuICAgIH0pKVxuICApO1xuXG4gIGlmIChSRVBMQUNFKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDb25zdHJ1Y3RvciA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlLmVuYWJsZSgpO1xuICB9IGVsc2UgaWYgKGlzRm9yY2VkKENPTlNUUlVDVE9SX05BTUUsIHRydWUpKSB7XG4gICAgdmFyIGluc3RhbmNlID0gbmV3IENvbnN0cnVjdG9yKCk7XG4gICAgLy8gZWFybHkgaW1wbGVtZW50YXRpb25zIG5vdCBzdXBwb3J0cyBjaGFpbmluZ1xuICAgIHZhciBIQVNOVF9DSEFJTklORyA9IGluc3RhbmNlW0FEREVSXShJU19XRUFLID8ge30gOiAtMCwgMSkgIT0gaW5zdGFuY2U7XG4gICAgLy8gVjggfiBDaHJvbWl1bSA0MC0gd2Vhay1jb2xsZWN0aW9ucyB0aHJvd3Mgb24gcHJpbWl0aXZlcywgYnV0IHNob3VsZCByZXR1cm4gZmFsc2VcbiAgICB2YXIgVEhST1dTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IGluc3RhbmNlLmhhcygxKTsgfSk7XG4gICAgLy8gbW9zdCBlYXJseSBpbXBsZW1lbnRhdGlvbnMgZG9lc24ndCBzdXBwb3J0cyBpdGVyYWJsZXMsIG1vc3QgbW9kZXJuIC0gbm90IGNsb3NlIGl0IGNvcnJlY3RseVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXcgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgICB2YXIgQUNDRVBUX0lURVJBQkxFUyA9IGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHsgbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKGl0ZXJhYmxlKTsgfSk7XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgTmF0aXZlQ29uc3RydWN0b3IoKTtcbiAgICAgIHZhciBpbmRleCA9IDU7XG4gICAgICB3aGlsZSAoaW5kZXgtLSkgJGluc3RhbmNlW0FEREVSXShpbmRleCwgaW5kZXgpO1xuICAgICAgcmV0dXJuICEkaW5zdGFuY2UuaGFzKC0wKTtcbiAgICB9KTtcblxuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uIChkdW1teSwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZShkdW1teSwgQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpLCBkdW1teSwgQ29uc3RydWN0b3IpO1xuICAgICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBpdGVyYXRlKGl0ZXJhYmxlLCB0aGF0W0FEREVSXSwgeyB0aGF0OiB0aGF0LCBBU19FTlRSSUVTOiBJU19NQVAgfSk7XG4gICAgICAgIHJldHVybiB0aGF0O1xuICAgICAgfSk7XG4gICAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBOYXRpdmVQcm90b3R5cGU7XG4gICAgICBOYXRpdmVQcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcjtcbiAgICB9XG5cbiAgICBpZiAoVEhST1dTX09OX1BSSU1JVElWRVMgfHwgQlVHR1lfWkVSTykge1xuICAgICAgZml4TWV0aG9kKCdkZWxldGUnKTtcbiAgICAgIGZpeE1ldGhvZCgnaGFzJyk7XG4gICAgICBJU19NQVAgJiYgZml4TWV0aG9kKCdnZXQnKTtcbiAgICB9XG5cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcblxuICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgc2hvdWxkIG5vdCBjb250YWlucyAuY2xlYXIgbWV0aG9kXG4gICAgaWYgKElTX1dFQUsgJiYgTmF0aXZlUHJvdG90eXBlLmNsZWFyKSBkZWxldGUgTmF0aXZlUHJvdG90eXBlLmNsZWFyO1xuICB9XG5cbiAgZXhwb3J0ZWRbQ09OU1RSVUNUT1JfTkFNRV0gPSBDb25zdHJ1Y3RvcjtcbiAgJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiBDb25zdHJ1Y3RvciAhPSBOYXRpdmVDb25zdHJ1Y3RvciB9LCBleHBvcnRlZCk7XG5cbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUpO1xuXG4gIGlmICghSVNfV0VBSykgY29tbW9uLnNldFN0cm9uZyhDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQ29uc3RydWN0b3I7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUtYWxsJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWl0ZXJhdG9yJyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFzdEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpLmZhc3RLZXk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgQ09OU1RSVUNUT1JfTkFNRSk7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoYXQsIHtcbiAgICAgICAgdHlwZTogQ09OU1RSVUNUT1JfTkFNRSxcbiAgICAgICAgaW5kZXg6IGNyZWF0ZShudWxsKSxcbiAgICAgICAgZmlyc3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgbGFzdDogdW5kZWZpbmVkLFxuICAgICAgICBzaXplOiAwXG4gICAgICB9KTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMpIHRoYXQuc2l6ZSA9IDA7XG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBpdGVyYXRlKGl0ZXJhYmxlLCB0aGF0W0FEREVSXSwgeyB0aGF0OiB0aGF0LCBBU19FTlRSSUVTOiBJU19NQVAgfSk7XG4gICAgfSk7XG5cbiAgICB2YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgICB2YXIgZGVmaW5lID0gZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgdmFyIHByZXZpb3VzLCBpbmRleDtcbiAgICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGVudHJ5LnZhbHVlID0gdmFsdWU7XG4gICAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS5sYXN0ID0gZW50cnkgPSB7XG4gICAgICAgICAgaW5kZXg6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLFxuICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICBwcmV2aW91czogcHJldmlvdXMgPSBzdGF0ZS5sYXN0LFxuICAgICAgICAgIG5leHQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICByZW1vdmVkOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXN0YXRlLmZpcnN0KSBzdGF0ZS5maXJzdCA9IGVudHJ5O1xuICAgICAgICBpZiAocHJldmlvdXMpIHByZXZpb3VzLm5leHQgPSBlbnRyeTtcbiAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplKys7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplKys7XG4gICAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgICBpZiAoaW5kZXggIT09ICdGJykgc3RhdGUuaW5kZXhbaW5kZXhdID0gZW50cnk7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH07XG5cbiAgICB2YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgLy8gZmFzdCBjYXNlXG4gICAgICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gICAgICB2YXIgZW50cnk7XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgcmV0dXJuIHN0YXRlLmluZGV4W2luZGV4XTtcbiAgICAgIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICAgICAgZm9yIChlbnRyeSA9IHN0YXRlLmZpcnN0OyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uZXh0KSB7XG4gICAgICAgIGlmIChlbnRyeS5rZXkgPT0ga2V5KSByZXR1cm4gZW50cnk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5jbGVhcigpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuY2xlYXJcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5jbGVhclxuICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAgIHZhciBkYXRhID0gc3RhdGUuaW5kZXg7XG4gICAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmZpcnN0O1xuICAgICAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgICAgICBlbnRyeS5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoZW50cnkucHJldmlvdXMpIGVudHJ5LnByZXZpb3VzID0gZW50cnkucHJldmlvdXMubmV4dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWxldGUgZGF0YVtlbnRyeS5pbmRleF07XG4gICAgICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmZpcnN0ID0gc3RhdGUubGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplID0gMDtcbiAgICAgICAgZWxzZSB0aGF0LnNpemUgPSAwO1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmRlbGV0ZShrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubmV4dDtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5pbmRleFtlbnRyeS5pbmRleF07XG4gICAgICAgICAgZW50cnkucmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubmV4dCA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucHJldmlvdXMgPSBwcmV2O1xuICAgICAgICAgIGlmIChzdGF0ZS5maXJzdCA9PSBlbnRyeSkgc3RhdGUuZmlyc3QgPSBuZXh0O1xuICAgICAgICAgIGlmIChzdGF0ZS5sYXN0ID09IGVudHJ5KSBzdGF0ZS5sYXN0ID0gcHJldjtcbiAgICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUtLTtcbiAgICAgICAgICBlbHNlIHRoYXQuc2l6ZS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDMpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLmZpcnN0KSB7XG4gICAgICAgICAgYm91bmRGdW5jdGlvbihlbnRyeS52YWx1ZSwgZW50cnkua2V5LCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0fS5wcm90b3R5cGUuaGFzKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5oYXNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5oYXNcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIElTX01BUCA/IHtcbiAgICAgIC8vIGBNYXAucHJvdG90eXBlLmdldChrZXkpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5nZXRcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudmFsdWU7XG4gICAgICB9LFxuICAgICAgLy8gYE1hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5zZXRcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZSh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSA6IHtcbiAgICAgIC8vIGBTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmFkZFxuICAgICAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZSh0aGlzLCB2YWx1ZSA9IHZhbHVlID09PSAwID8gMCA6IHZhbHVlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eShDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQztcbiAgfSxcbiAgc2V0U3Ryb25nOiBmdW5jdGlvbiAoQywgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKSB7XG4gICAgdmFyIElURVJBVE9SX05BTUUgPSBDT05TVFJVQ1RPUl9OQU1FICsgJyBJdGVyYXRvcic7XG4gICAgdmFyIGdldEludGVybmFsQ29sbGVjdGlvblN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcbiAgICB2YXIgZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihJVEVSQVRPUl9OQU1FKTtcbiAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS57IGtleXMsIHZhbHVlcywgZW50cmllcywgQEBpdGVyYXRvciB9KClgIG1ldGhvZHNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmVudHJpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUua2V5c1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS52YWx1ZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUtQEBpdGVyYXRvclxuICAgIGRlZmluZUl0ZXJhdG9yKEMsIENPTlNUUlVDVE9SX05BTUUsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICAgIHR5cGU6IElURVJBVE9SX05BTUUsXG4gICAgICAgIHRhcmdldDogaXRlcmF0ZWQsXG4gICAgICAgIHN0YXRlOiBnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZShpdGVyYXRlZCksXG4gICAgICAgIGtpbmQ6IGtpbmQsXG4gICAgICAgIGxhc3Q6IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlKHRoaXMpO1xuICAgICAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICAgICAgdmFyIGVudHJ5ID0gc3RhdGUubGFzdDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnJlbW92ZWQpIGVudHJ5ID0gZW50cnkucHJldmlvdXM7XG4gICAgICAvLyBnZXQgbmV4dCBlbnRyeVxuICAgICAgaWYgKCFzdGF0ZS50YXJnZXQgfHwgIShzdGF0ZS5sYXN0ID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm5leHQgOiBzdGF0ZS5zdGF0ZS5maXJzdCkpIHtcbiAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cbiAgICAgICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiB7IHZhbHVlOiBlbnRyeS5rZXksIGRvbmU6IGZhbHNlIH07XG4gICAgICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHsgdmFsdWU6IGVudHJ5LnZhbHVlLCBkb25lOiBmYWxzZSB9O1xuICAgICAgcmV0dXJuIHsgdmFsdWU6IFtlbnRyeS5rZXksIGVudHJ5LnZhbHVlXSwgZG9uZTogZmFsc2UgfTtcbiAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJywgIUlTX01BUCwgdHJ1ZSk7XG5cbiAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZVtAQHNwZWNpZXNdYCBhY2Nlc3NvcnNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1tYXAtQEBzcGVjaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtc2V0LUBAc3BlY2llc1xuICAgIHNldFNwZWNpZXMoQ09OU1RSVUNUT1JfTkFNRSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyBgTWFwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAtb2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSBjb2xsZWN0aW9uKCdNYXAnLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCkgeyByZXR1cm4gaW5pdCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIGNvbGxlY3Rpb25TdHJvbmcpO1xuIiwidmFyIGxvZyA9IE1hdGgubG9nO1xuXG4vLyBgTWF0aC5sb2cxcGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgubG9nMXBcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLWxvZzFwIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5sb2cxcCB8fCBmdW5jdGlvbiBsb2cxcCh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA+IC0xZS04ICYmIHggPCAxZS04ID8geCAtIHggKiB4IC8gMiA6IGxvZygxICsgeCk7XG59O1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbG9nMXAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC1sb2cxcCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC1hY29zaCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyICRhY29zaCA9IE1hdGguYWNvc2g7XG52YXIgbG9nID0gTWF0aC5sb2c7XG52YXIgc3FydCA9IE1hdGguc3FydDtcbnZhciBMTjIgPSBNYXRoLkxOMjtcblxudmFyIEZPUkNFRCA9ICEkYWNvc2hcbiAgLy8gVjggYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzUwOVxuICB8fCBNYXRoLmZsb29yKCRhY29zaChOdW1iZXIuTUFYX1ZBTFVFKSkgIT0gNzEwXG4gIC8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hY29zaChJbmZpbml0eSkgLT4gTmFOXG4gIHx8ICRhY29zaChJbmZpbml0eSkgIT0gSW5maW5pdHk7XG5cbi8vIGBNYXRoLmFjb3NoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC5hY29zaFxuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGFjb3NoOiBmdW5jdGlvbiBhY29zaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpIDwgMSA/IE5hTiA6IHggPiA5NDkwNjI2NS42MjQyNTE1NlxuICAgICAgPyBsb2coeCkgKyBMTjJcbiAgICAgIDogbG9nMXAoeCAtIDEgKyBzcXJ0KHggLSAxKSAqIHNxcnQoeCArIDEpKTtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtYXNpbmggLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciAkYXNpbmggPSBNYXRoLmFzaW5oO1xudmFyIGxvZyA9IE1hdGgubG9nO1xudmFyIHNxcnQgPSBNYXRoLnNxcnQ7XG5cbmZ1bmN0aW9uIGFzaW5oKHgpIHtcbiAgcmV0dXJuICFpc0Zpbml0ZSh4ID0gK3gpIHx8IHggPT0gMCA/IHggOiB4IDwgMCA/IC1hc2luaCgteCkgOiBsb2coeCArIHNxcnQoeCAqIHggKyAxKSk7XG59XG5cbi8vIGBNYXRoLmFzaW5oYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC5hc2luaFxuLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFzaW5oKDApIC0+IC0wXG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogISgkYXNpbmggJiYgMSAvICRhc2luaCgwKSA+IDApIH0sIHtcbiAgYXNpbmg6IGFzaW5oXG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC1hdGFuaCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyICRhdGFuaCA9IE1hdGguYXRhbmg7XG52YXIgbG9nID0gTWF0aC5sb2c7XG5cbi8vIGBNYXRoLmF0YW5oYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC5hdGFuaFxuLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmF0YW5oKC0wKSAtPiAwXG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogISgkYXRhbmggJiYgMSAvICRhdGFuaCgtMCkgPCAwKSB9LCB7XG4gIGF0YW5oOiBmdW5jdGlvbiBhdGFuaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogbG9nKCgxICsgeCkgLyAoMSAtIHgpKSAvIDI7XG4gIH1cbn0pO1xuIiwiLy8gYE1hdGguc2lnbmAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGguc2lnblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtc2lnbiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2lnbiB8fCBmdW5jdGlvbiBzaWduKHgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgfHwgeCAhPSB4ID8geCA6IHggPCAwID8gLTEgOiAxO1xufTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHNpZ24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC1zaWduJyk7XG5cbnZhciBhYnMgPSBNYXRoLmFicztcbnZhciBwb3cgPSBNYXRoLnBvdztcblxuLy8gYE1hdGguY2JydGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGguY2JydFxuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlIH0sIHtcbiAgY2JydDogZnVuY3Rpb24gY2JydCh4KSB7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIHBvdyhhYnMoeCksIDEgLyAzKTtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcblxudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBMT0cyRSA9IE1hdGguTE9HMkU7XG5cbi8vIGBNYXRoLmNsejMyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC5jbHozMlxuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlIH0sIHtcbiAgY2x6MzI6IGZ1bmN0aW9uIGNsejMyKHgpIHtcbiAgICByZXR1cm4gKHggPj4+PSAwKSA/IDMxIC0gZmxvb3IobG9nKHggKyAwLjUpICogTE9HMkUpIDogMzI7XG4gIH1cbn0pO1xuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtZXhwbTEgLS0gc2FmZVxudmFyICRleHBtMSA9IE1hdGguZXhwbTE7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbi8vIGBNYXRoLmV4cG0xYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC5leHBtMVxubW9kdWxlLmV4cG9ydHMgPSAoISRleHBtMVxuICAvLyBPbGQgRkYgYnVnXG4gIHx8ICRleHBtMSgxMCkgPiAyMjAyNS40NjU3OTQ4MDY3MTkgfHwgJGV4cG0xKDEwKSA8IDIyMDI1LjQ2NTc5NDgwNjcxNjUxNjhcbiAgLy8gVG9yIEJyb3dzZXIgYnVnXG4gIHx8ICRleHBtMSgtMmUtMTcpICE9IC0yZS0xN1xuKSA/IGZ1bmN0aW9uIGV4cG0xKHgpIHtcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogeCA+IC0xZS02ICYmIHggPCAxZS02ID8geCArIHggKiB4IC8gMiA6IGV4cCh4KSAtIDE7XG59IDogJGV4cG0xO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC1leHBtMScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC1jb3NoIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgJGNvc2ggPSBNYXRoLmNvc2g7XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgRSA9IE1hdGguRTtcblxuLy8gYE1hdGguY29zaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGguY29zaFxuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICEkY29zaCB8fCAkY29zaCg3MTApID09PSBJbmZpbml0eSB9LCB7XG4gIGNvc2g6IGZ1bmN0aW9uIGNvc2goeCkge1xuICAgIHZhciB0ID0gZXhwbTEoYWJzKHgpIC0gMSkgKyAxO1xuICAgIHJldHVybiAodCArIDEgLyAodCAqIEUgKiBFKSkgKiAoRSAvIDIpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGV4cG0xID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtZXhwbTEnKTtcblxuLy8gYE1hdGguZXhwbTFgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLmV4cG0xXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC1leHBtMSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IGV4cG0xICE9IE1hdGguZXhwbTEgfSwgeyBleHBtMTogZXhwbTEgfSk7XG4iLCJ2YXIgc2lnbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLXNpZ24nKTtcblxudmFyIGFicyA9IE1hdGguYWJzO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIEVQU0lMT04gPSBwb3coMiwgLTUyKTtcbnZhciBFUFNJTE9OMzIgPSBwb3coMiwgLTIzKTtcbnZhciBNQVgzMiA9IHBvdygyLCAxMjcpICogKDIgLSBFUFNJTE9OMzIpO1xudmFyIE1JTjMyID0gcG93KDIsIC0xMjYpO1xuXG52YXIgcm91bmRUaWVzVG9FdmVuID0gZnVuY3Rpb24gKG4pIHtcbiAgcmV0dXJuIG4gKyAxIC8gRVBTSUxPTiAtIDEgLyBFUFNJTE9OO1xufTtcblxuLy8gYE1hdGguZnJvdW5kYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC5mcm91bmRcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLWZyb3VuZCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguZnJvdW5kIHx8IGZ1bmN0aW9uIGZyb3VuZCh4KSB7XG4gIHZhciAkYWJzID0gYWJzKHgpO1xuICB2YXIgJHNpZ24gPSBzaWduKHgpO1xuICB2YXIgYSwgcmVzdWx0O1xuICBpZiAoJGFicyA8IE1JTjMyKSByZXR1cm4gJHNpZ24gKiByb3VuZFRpZXNUb0V2ZW4oJGFicyAvIE1JTjMyIC8gRVBTSUxPTjMyKSAqIE1JTjMyICogRVBTSUxPTjMyO1xuICBhID0gKDEgKyBFUFNJTE9OMzIgLyBFUFNJTE9OKSAqICRhYnM7XG4gIHJlc3VsdCA9IGEgLSAoYSAtICRhYnMpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICBpZiAocmVzdWx0ID4gTUFYMzIgfHwgcmVzdWx0ICE9IHJlc3VsdCkgcmV0dXJuICRzaWduICogSW5maW5pdHk7XG4gIHJldHVybiAkc2lnbiAqIHJlc3VsdDtcbn07XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmcm91bmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC1mcm91bmQnKTtcblxuLy8gYE1hdGguZnJvdW5kYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC5mcm91bmRcbiQoeyB0YXJnZXQ6ICdNYXRoJywgc3RhdDogdHJ1ZSB9LCB7IGZyb3VuZDogZnJvdW5kIH0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLWh5cG90IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgJGh5cG90ID0gTWF0aC5oeXBvdDtcbnZhciBhYnMgPSBNYXRoLmFicztcbnZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xuXG4vLyBDaHJvbWUgNzcgYnVnXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD05NTQ2XG52YXIgQlVHR1kgPSAhISRoeXBvdCAmJiAkaHlwb3QoSW5maW5pdHksIE5hTikgIT09IEluZmluaXR5O1xuXG4vLyBgTWF0aC5oeXBvdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGguaHlwb3RcbiQoeyB0YXJnZXQ6ICdNYXRoJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBCVUdHWSB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIGh5cG90OiBmdW5jdGlvbiBoeXBvdCh2YWx1ZTEsIHZhbHVlMikge1xuICAgIHZhciBzdW0gPSAwO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGxhcmcgPSAwO1xuICAgIHZhciBhcmcsIGRpdjtcbiAgICB3aGlsZSAoaSA8IGFMZW4pIHtcbiAgICAgIGFyZyA9IGFicyhhcmd1bWVudHNbaSsrXSk7XG4gICAgICBpZiAobGFyZyA8IGFyZykge1xuICAgICAgICBkaXYgPSBsYXJnIC8gYXJnO1xuICAgICAgICBzdW0gPSBzdW0gKiBkaXYgKiBkaXYgKyAxO1xuICAgICAgICBsYXJnID0gYXJnO1xuICAgICAgfSBlbHNlIGlmIChhcmcgPiAwKSB7XG4gICAgICAgIGRpdiA9IGFyZyAvIGxhcmc7XG4gICAgICAgIHN1bSArPSBkaXYgKiBkaXY7XG4gICAgICB9IGVsc2Ugc3VtICs9IGFyZztcbiAgICB9XG4gICAgcmV0dXJuIGxhcmcgPT09IEluZmluaXR5ID8gSW5maW5pdHkgOiBsYXJnICogc3FydChzdW0pO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLWltdWwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciAkaW11bCA9IE1hdGguaW11bDtcblxudmFyIEZPUkNFRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICRpbXVsKDB4RkZGRkZGRkYsIDUpICE9IC01IHx8ICRpbXVsLmxlbmd0aCAhPSAyO1xufSk7XG5cbi8vIGBNYXRoLmltdWxgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLmltdWxcbi8vIHNvbWUgV2ViS2l0IHZlcnNpb25zIGZhaWxzIHdpdGggYmlnIG51bWJlcnMsIHNvbWUgaGFzIHdyb25nIGFyaXR5XG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgaW11bDogZnVuY3Rpb24gaW11bCh4LCB5KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4RkZGRjtcbiAgICB2YXIgeG4gPSAreDtcbiAgICB2YXIgeW4gPSAreTtcbiAgICB2YXIgeGwgPSBVSU5UMTYgJiB4bjtcbiAgICB2YXIgeWwgPSBVSU5UMTYgJiB5bjtcbiAgICByZXR1cm4gMCB8IHhsICogeWwgKyAoKFVJTlQxNiAmIHhuID4+PiAxNikgKiB5bCArIHhsICogKFVJTlQxNiAmIHluID4+PiAxNikgPDwgMTYgPj4+IDApO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG52YXIgbG9nID0gTWF0aC5sb2c7XG52YXIgTE9HMTBFID0gTWF0aC5MT0cxMEU7XG5cbi8vIGBNYXRoLmxvZzEwYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC5sb2cxMFxuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlIH0sIHtcbiAgbG9nMTA6IGZ1bmN0aW9uIGxvZzEwKHgpIHtcbiAgICByZXR1cm4gbG9nKHgpICogTE9HMTBFO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGxvZzFwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtbG9nMXAnKTtcblxuLy8gYE1hdGgubG9nMXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLmxvZzFwXG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUgfSwgeyBsb2cxcDogbG9nMXAgfSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcblxudmFyIGxvZyA9IE1hdGgubG9nO1xudmFyIExOMiA9IE1hdGguTE4yO1xuXG4vLyBgTWF0aC5sb2cyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC5sb2cyXG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUgfSwge1xuICBsb2cyOiBmdW5jdGlvbiBsb2cyKHgpIHtcbiAgICByZXR1cm4gbG9nKHgpIC8gTE4yO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHNpZ24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC1zaWduJyk7XG5cbi8vIGBNYXRoLnNpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnNpZ25cbiQoeyB0YXJnZXQ6ICdNYXRoJywgc3RhdDogdHJ1ZSB9LCB7XG4gIHNpZ246IHNpZ25cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXRoLWV4cG0xJyk7XG5cbnZhciBhYnMgPSBNYXRoLmFicztcbnZhciBleHAgPSBNYXRoLmV4cDtcbnZhciBFID0gTWF0aC5FO1xuXG52YXIgRk9SQ0VEID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC1zaW5oIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBNYXRoLnNpbmgoLTJlLTE3KSAhPSAtMmUtMTc7XG59KTtcblxuLy8gYE1hdGguc2luaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGguc2luaFxuLy8gVjggbmVhciBDaHJvbWl1bSAzOCBoYXMgYSBwcm9ibGVtIHdpdGggdmVyeSBzbWFsbCBudW1iZXJzXG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgc2luaDogZnVuY3Rpb24gc2luaCh4KSB7XG4gICAgcmV0dXJuIGFicyh4ID0gK3gpIDwgMSA/IChleHBtMSh4KSAtIGV4cG0xKC14KSkgLyAyIDogKGV4cCh4IC0gMSkgLSBleHAoLXggLSAxKSkgKiAoRSAvIDIpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGV4cG0xID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtZXhwbTEnKTtcblxudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4vLyBgTWF0aC50YW5oYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50YW5oXG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUgfSwge1xuICB0YW5oOiBmdW5jdGlvbiB0YW5oKHgpIHtcbiAgICB2YXIgYSA9IGV4cG0xKHggPSAreCk7XG4gICAgdmFyIGIgPSBleHBtMSgteCk7XG4gICAgcmV0dXJuIGEgPT0gSW5maW5pdHkgPyAxIDogYiA9PSBJbmZpbml0eSA/IC0xIDogKGEgLSBiKSAvIChleHAoeCkgKyBleHAoLXgpKTtcbiAgfVxufSk7XG4iLCJ2YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcblxuLy8gTWF0aFtAQHRvU3RyaW5nVGFnXSBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKE1hdGgsICdNYXRoJywgdHJ1ZSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcblxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgTWF0aC50cnVuY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hdGgudHJ1bmNcbiQoeyB0YXJnZXQ6ICdNYXRoJywgc3RhdDogdHJ1ZSB9LCB7XG4gIHRydW5jOiBmdW5jdGlvbiB0cnVuYyhpdCkge1xuICAgIHJldHVybiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG4gIH1cbn0pO1xuIiwidmFyIHZhbHVlT2YgPSAxLjAudmFsdWVPZjtcblxuLy8gYHRoaXNOdW1iZXJWYWx1ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRoaXNudW1iZXJ2YWx1ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlT2YuY2FsbCh2YWx1ZSk7XG59O1xuIiwiLy8gYSBzdHJpbmcgb2YgYWxsIHZhbGlkIHVuaWNvZGUgd2hpdGVzcGFjZXNcbm1vZHVsZS5leHBvcnRzID0gJ1xcdTAwMDlcXHUwMDBBXFx1MDAwQlxcdTAwMENcXHUwMDBEXFx1MDAyMFxcdTAwQTBcXHUxNjgwXFx1MjAwMFxcdTIwMDFcXHUyMDAyJyArXG4gICdcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjhcXHUyMDI5XFx1RkVGRic7XG4iLCJ2YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgd2hpdGVzcGFjZSA9ICdbJyArIHdoaXRlc3BhY2VzICsgJ10nO1xudmFyIGx0cmltID0gUmVnRXhwKCdeJyArIHdoaXRlc3BhY2UgKyB3aGl0ZXNwYWNlICsgJyonKTtcbnZhciBydHJpbSA9IFJlZ0V4cCh3aGl0ZXNwYWNlICsgd2hpdGVzcGFjZSArICcqJCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW0sIHRyaW1TdGFydCwgdHJpbUVuZCwgdHJpbUxlZnQsIHRyaW1SaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcykge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICAgIGlmIChUWVBFICYgMikgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocnRyaW0sICcnKTtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbUxlZnQsIHRyaW1TdGFydCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltc3RhcnRcbiAgc3RhcnQ6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltUmlnaHQsIHRyaW1FbmQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbWVuZFxuICBlbmQ6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUudHJpbWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltXG4gIHRyaW06IGNyZWF0ZU1ldGhvZCgzKVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpLmY7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIHRoaXNOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90aGlzLW51bWJlci12YWx1ZScpO1xudmFyIHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xuXG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgTmF0aXZlTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgTnVtYmVyUHJvdG90eXBlID0gTmF0aXZlTnVtYmVyLnByb3RvdHlwZTtcblxuLy8gYFRvTnVtZXJpY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbnVtZXJpY1xudmFyIHRvTnVtZXJpYyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJpbVZhbHVlID0gdG9QcmltaXRpdmUodmFsdWUsICdudW1iZXInKTtcbiAgcmV0dXJuIHR5cGVvZiBwcmltVmFsdWUgPT09ICdiaWdpbnQnID8gcHJpbVZhbHVlIDogdG9OdW1iZXIocHJpbVZhbHVlKTtcbn07XG5cbi8vIGBUb051bWJlcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbnVtYmVyXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdudW1iZXInKTtcbiAgdmFyIGZpcnN0LCB0aGlyZCwgcmFkaXgsIG1heENvZGUsIGRpZ2l0cywgbGVuZ3RoLCBpbmRleCwgY29kZTtcbiAgaWYgKGlzU3ltYm9sKGl0KSkgdGhyb3cgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIG51bWJlcicpO1xuICBpZiAodHlwZW9mIGl0ID09ICdzdHJpbmcnICYmIGl0Lmxlbmd0aCA+IDIpIHtcbiAgICBpdCA9IHRyaW0oaXQpO1xuICAgIGZpcnN0ID0gaXQuY2hhckNvZGVBdCgwKTtcbiAgICBpZiAoZmlyc3QgPT09IDQzIHx8IGZpcnN0ID09PSA0NSkge1xuICAgICAgdGhpcmQgPSBpdC5jaGFyQ29kZUF0KDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoaXQuY2hhckNvZGVBdCgxKSkge1xuICAgICAgICBjYXNlIDY2OiBjYXNlIDk4OiByYWRpeCA9IDI7IG1heENvZGUgPSA0OTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgb2YgL14wYlswMV0rJC9pXG4gICAgICAgIGNhc2UgNzk6IGNhc2UgMTExOiByYWRpeCA9IDg7IG1heENvZGUgPSA1NTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgb2YgL14wb1swLTddKyQvaVxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZGlnaXRzID0gaXQuc2xpY2UoMik7XG4gICAgICBsZW5ndGggPSBkaWdpdHMubGVuZ3RoO1xuICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGNvZGUgPSBkaWdpdHMuY2hhckNvZGVBdChpbmRleCk7XG4gICAgICAgIC8vIHBhcnNlSW50IHBhcnNlcyBhIHN0cmluZyB0byBhIGZpcnN0IHVuYXZhaWxhYmxlIHN5bWJvbFxuICAgICAgICAvLyBidXQgVG9OdW1iZXIgc2hvdWxkIHJldHVybiBOYU4gaWYgYSBzdHJpbmcgY29udGFpbnMgdW5hdmFpbGFibGUgc3ltYm9sc1xuICAgICAgICBpZiAoY29kZSA8IDQ4IHx8IGNvZGUgPiBtYXhDb2RlKSByZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG4vLyBgTnVtYmVyYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXItY29uc3RydWN0b3JcbmlmIChpc0ZvcmNlZChOVU1CRVIsICFOYXRpdmVOdW1iZXIoJyAwbzEnKSB8fCAhTmF0aXZlTnVtYmVyKCcwYjEnKSB8fCBOYXRpdmVOdW1iZXIoJysweDEnKSkpIHtcbiAgdmFyIE51bWJlcldyYXBwZXIgPSBmdW5jdGlvbiBOdW1iZXIodmFsdWUpIHtcbiAgICB2YXIgbiA9IGFyZ3VtZW50cy5sZW5ndGggPCAxID8gMCA6IE5hdGl2ZU51bWJlcih0b051bWVyaWModmFsdWUpKTtcbiAgICB2YXIgZHVtbXkgPSB0aGlzO1xuICAgIC8vIGNoZWNrIG9uIDEuLmNvbnN0cnVjdG9yKGZvbykgY2FzZVxuICAgIHJldHVybiBkdW1teSBpbnN0YW5jZW9mIE51bWJlcldyYXBwZXIgJiYgZmFpbHMoZnVuY3Rpb24gKCkgeyB0aGlzTnVtYmVyVmFsdWUoZHVtbXkpOyB9KVxuICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChPYmplY3QobiksIGR1bW15LCBOdW1iZXJXcmFwcGVyKSA6IG47XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBERVNDUklQVE9SUyA/IGdldE93blByb3BlcnR5TmFtZXMoTmF0aXZlTnVtYmVyKSA6IChcbiAgICAvLyBFUzM6XG4gICAgJ01BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLCcgK1xuICAgIC8vIEVTMjAxNSAoaW4gY2FzZSwgaWYgbW9kdWxlcyB3aXRoIEVTMjAxNSBOdW1iZXIgc3RhdGljcyByZXF1aXJlZCBiZWZvcmUpOlxuICAgICdFUFNJTE9OLE1BWF9TQUZFX0lOVEVHRVIsTUlOX1NBRkVfSU5URUdFUixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixwYXJzZUZsb2F0LHBhcnNlSW50LCcgK1xuICAgIC8vIEVTTmV4dFxuICAgICdmcm9tU3RyaW5nLHJhbmdlJ1xuICApLnNwbGl0KCcsJyksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajsgaisrKSB7XG4gICAgaWYgKGhhc093bihOYXRpdmVOdW1iZXIsIGtleSA9IGtleXNbal0pICYmICFoYXNPd24oTnVtYmVyV3JhcHBlciwga2V5KSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkoTnVtYmVyV3JhcHBlciwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTmF0aXZlTnVtYmVyLCBrZXkpKTtcbiAgICB9XG4gIH1cbiAgTnVtYmVyV3JhcHBlci5wcm90b3R5cGUgPSBOdW1iZXJQcm90b3R5cGU7XG4gIE51bWJlclByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE51bWJlcldyYXBwZXI7XG4gIHJlZGVmaW5lKGdsb2JhbCwgTlVNQkVSLCBOdW1iZXJXcmFwcGVyKTtcbn1cbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG4vLyBgTnVtYmVyLkVQU0lMT05gIGNvbnN0YW50XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW51bWJlci5lcHNpbG9uXG4kKHsgdGFyZ2V0OiAnTnVtYmVyJywgc3RhdDogdHJ1ZSB9LCB7XG4gIEVQU0lMT046IE1hdGgucG93KDIsIC01Milcbn0pO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxudmFyIGdsb2JhbElzRmluaXRlID0gZ2xvYmFsLmlzRmluaXRlO1xuXG4vLyBgTnVtYmVyLmlzRmluaXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbnVtYmVyLmlzZmluaXRlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbnVtYmVyLWlzZmluaXRlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzRmluaXRlIHx8IGZ1bmN0aW9uIGlzRmluaXRlKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ251bWJlcicgJiYgZ2xvYmFsSXNGaW5pdGUoaXQpO1xufTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG51bWJlcklzRmluaXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL251bWJlci1pcy1maW5pdGUnKTtcblxuLy8gYE51bWJlci5pc0Zpbml0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW51bWJlci5pc2Zpbml0ZVxuJCh7IHRhcmdldDogJ051bWJlcicsIHN0YXQ6IHRydWUgfSwgeyBpc0Zpbml0ZTogbnVtYmVySXNGaW5pdGUgfSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBJc0ludGVncmFsTnVtYmVyYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNpbnRlZ3JhbG51bWJlclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW51bWJlci1pc2ludGVnZXIgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNJbnRlZ2VyIHx8IGZ1bmN0aW9uIGlzSW50ZWdlcihpdCkge1xuICByZXR1cm4gIWlzT2JqZWN0KGl0KSAmJiBpc0Zpbml0ZShpdCkgJiYgZmxvb3IoaXQpID09PSBpdDtcbn07XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0ludGVncmFsTnVtYmVyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWludGVncmFsLW51bWJlcicpO1xuXG4vLyBgTnVtYmVyLmlzSW50ZWdlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW51bWJlci5pc2ludGVnZXJcbiQoeyB0YXJnZXQ6ICdOdW1iZXInLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNJbnRlZ2VyOiBpc0ludGVncmFsTnVtYmVyXG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG4vLyBgTnVtYmVyLmlzTmFOYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbnVtYmVyLmlzbmFuXG4kKHsgdGFyZ2V0OiAnTnVtYmVyJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGlzTmFOOiBmdW5jdGlvbiBpc05hTihudW1iZXIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIHJldHVybiBudW1iZXIgIT0gbnVtYmVyO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGlzSW50ZWdyYWxOdW1iZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtaW50ZWdyYWwtbnVtYmVyJyk7XG5cbnZhciBhYnMgPSBNYXRoLmFicztcblxuLy8gYE51bWJlci5pc1NhZmVJbnRlZ2VyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbnVtYmVyLmlzc2FmZWludGVnZXJcbiQoeyB0YXJnZXQ6ICdOdW1iZXInLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXNTYWZlSW50ZWdlcjogZnVuY3Rpb24gaXNTYWZlSW50ZWdlcihudW1iZXIpIHtcbiAgICByZXR1cm4gaXNJbnRlZ3JhbE51bWJlcihudW1iZXIpICYmIGFicyhudW1iZXIpIDw9IDB4MUZGRkZGRkZGRkZGRkY7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUmAgY29uc3RhbnRcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbnVtYmVyLm1heF9zYWZlX2ludGVnZXJcbiQoeyB0YXJnZXQ6ICdOdW1iZXInLCBzdGF0OiB0cnVlIH0sIHtcbiAgTUFYX1NBRkVfSU5URUdFUjogMHgxRkZGRkZGRkZGRkZGRlxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcblxuLy8gYE51bWJlci5NSU5fU0FGRV9JTlRFR0VSYCBjb25zdGFudFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIubWluX3NhZmVfaW50ZWdlclxuJCh7IHRhcmdldDogJ051bWJlcicsIHN0YXQ6IHRydWUgfSwge1xuICBNSU5fU0FGRV9JTlRFR0VSOiAtMHgxRkZGRkZGRkZGRkZGRlxufSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgdHJpbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctdHJpbScpLnRyaW07XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyICRwYXJzZUZsb2F0ID0gZ2xvYmFsLnBhcnNlRmxvYXQ7XG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBJVEVSQVRPUiA9IFN5bWJvbCAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRk9SQ0VEID0gMSAvICRwYXJzZUZsb2F0KHdoaXRlc3BhY2VzICsgJy0wJykgIT09IC1JbmZpbml0eVxuICAvLyBNUyBFZGdlIDE4LSBicm9rZW4gd2l0aCBib3hlZCBzeW1ib2xzXG4gIHx8IChJVEVSQVRPUiAmJiAhZmFpbHMoZnVuY3Rpb24gKCkgeyAkcGFyc2VGbG9hdChPYmplY3QoSVRFUkFUT1IpKTsgfSkpO1xuXG4vLyBgcGFyc2VGbG9hdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXBhcnNlZmxvYXQtc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IEZPUkNFRCA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyaW5nKSB7XG4gIHZhciB0cmltbWVkU3RyaW5nID0gdHJpbSh0b1N0cmluZyhzdHJpbmcpKTtcbiAgdmFyIHJlc3VsdCA9ICRwYXJzZUZsb2F0KHRyaW1tZWRTdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIHRyaW1tZWRTdHJpbmcuY2hhckF0KDApID09ICctJyA/IC0wIDogcmVzdWx0O1xufSA6ICRwYXJzZUZsb2F0O1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9udW1iZXItcGFyc2UtZmxvYXQnKTtcblxuLy8gYE51bWJlci5wYXJzZUZsb2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbnVtYmVyLnBhcnNlRmxvYXRcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1udW1iZXItcGFyc2VmbG9hdCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuJCh7IHRhcmdldDogJ051bWJlcicsIHN0YXQ6IHRydWUsIGZvcmNlZDogTnVtYmVyLnBhcnNlRmxvYXQgIT0gcGFyc2VGbG9hdCB9LCB7XG4gIHBhcnNlRmxvYXQ6IHBhcnNlRmxvYXRcbn0pO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciAkcGFyc2VJbnQgPSBnbG9iYWwucGFyc2VJbnQ7XG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBJVEVSQVRPUiA9IFN5bWJvbCAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgaGV4ID0gL15bKy1dPzB4L2k7XG52YXIgRk9SQ0VEID0gJHBhcnNlSW50KHdoaXRlc3BhY2VzICsgJzA4JykgIT09IDggfHwgJHBhcnNlSW50KHdoaXRlc3BhY2VzICsgJzB4MTYnKSAhPT0gMjJcbiAgLy8gTVMgRWRnZSAxOC0gYnJva2VuIHdpdGggYm94ZWQgc3ltYm9sc1xuICB8fCAoSVRFUkFUT1IgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHsgJHBhcnNlSW50KE9iamVjdChJVEVSQVRPUikpOyB9KSk7XG5cbi8vIGBwYXJzZUludGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXBhcnNlaW50LXN0cmluZy1yYWRpeFxubW9kdWxlLmV4cG9ydHMgPSBGT1JDRUQgPyBmdW5jdGlvbiBwYXJzZUludChzdHJpbmcsIHJhZGl4KSB7XG4gIHZhciBTID0gdHJpbSh0b1N0cmluZyhzdHJpbmcpKTtcbiAgcmV0dXJuICRwYXJzZUludChTLCAocmFkaXggPj4+IDApIHx8IChoZXgudGVzdChTKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBwYXJzZUludCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9udW1iZXItcGFyc2UtaW50Jyk7XG5cbi8vIGBOdW1iZXIucGFyc2VJbnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1udW1iZXIucGFyc2VpbnRcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1udW1iZXItcGFyc2VpbnQgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiQoeyB0YXJnZXQ6ICdOdW1iZXInLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IE51bWJlci5wYXJzZUludCAhPSBwYXJzZUludCB9LCB7XG4gIHBhcnNlSW50OiBwYXJzZUludFxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0aGlzTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGhpcy1udW1iZXItdmFsdWUnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXJlcGVhdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBuYXRpdmVUb0ZpeGVkID0gMS4wLnRvRml4ZWQ7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG52YXIgcG93ID0gZnVuY3Rpb24gKHgsIG4sIGFjYykge1xuICByZXR1cm4gbiA9PT0gMCA/IGFjYyA6IG4gJSAyID09PSAxID8gcG93KHgsIG4gLSAxLCBhY2MgKiB4KSA6IHBvdyh4ICogeCwgbiAvIDIsIGFjYyk7XG59O1xuXG52YXIgbG9nID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIG4gPSAwO1xuICB2YXIgeDIgPSB4O1xuICB3aGlsZSAoeDIgPj0gNDA5Nikge1xuICAgIG4gKz0gMTI7XG4gICAgeDIgLz0gNDA5NjtcbiAgfVxuICB3aGlsZSAoeDIgPj0gMikge1xuICAgIG4gKz0gMTtcbiAgICB4MiAvPSAyO1xuICB9IHJldHVybiBuO1xufTtcblxudmFyIG11bHRpcGx5ID0gZnVuY3Rpb24gKGRhdGEsIG4sIGMpIHtcbiAgdmFyIGluZGV4ID0gLTE7XG4gIHZhciBjMiA9IGM7XG4gIHdoaWxlICgrK2luZGV4IDwgNikge1xuICAgIGMyICs9IG4gKiBkYXRhW2luZGV4XTtcbiAgICBkYXRhW2luZGV4XSA9IGMyICUgMWU3O1xuICAgIGMyID0gZmxvb3IoYzIgLyAxZTcpO1xuICB9XG59O1xuXG52YXIgZGl2aWRlID0gZnVuY3Rpb24gKGRhdGEsIG4pIHtcbiAgdmFyIGluZGV4ID0gNjtcbiAgdmFyIGMgPSAwO1xuICB3aGlsZSAoLS1pbmRleCA+PSAwKSB7XG4gICAgYyArPSBkYXRhW2luZGV4XTtcbiAgICBkYXRhW2luZGV4XSA9IGZsb29yKGMgLyBuKTtcbiAgICBjID0gKGMgJSBuKSAqIDFlNztcbiAgfVxufTtcblxudmFyIGRhdGFUb1N0cmluZyA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIHZhciBpbmRleCA9IDY7XG4gIHZhciBzID0gJyc7XG4gIHdoaWxlICgtLWluZGV4ID49IDApIHtcbiAgICBpZiAocyAhPT0gJycgfHwgaW5kZXggPT09IDAgfHwgZGF0YVtpbmRleF0gIT09IDApIHtcbiAgICAgIHZhciB0ID0gU3RyaW5nKGRhdGFbaW5kZXhdKTtcbiAgICAgIHMgPSBzID09PSAnJyA/IHQgOiBzICsgcmVwZWF0LmNhbGwoJzAnLCA3IC0gdC5sZW5ndGgpICsgdDtcbiAgICB9XG4gIH0gcmV0dXJuIHM7XG59O1xuXG52YXIgRk9SQ0VEID0gbmF0aXZlVG9GaXhlZCAmJiAoXG4gIDAuMDAwMDgudG9GaXhlZCgzKSAhPT0gJzAuMDAwJyB8fFxuICAwLjkudG9GaXhlZCgwKSAhPT0gJzEnIHx8XG4gIDEuMjU1LnRvRml4ZWQoMikgIT09ICcxLjI1JyB8fFxuICAxMDAwMDAwMDAwMDAwMDAwMTI4LjAudG9GaXhlZCgwKSAhPT0gJzEwMDAwMDAwMDAwMDAwMDAxMjgnXG4pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gIG5hdGl2ZVRvRml4ZWQuY2FsbCh7fSk7XG59KTtcblxuLy8gYE51bWJlci5wcm90b3R5cGUudG9GaXhlZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW51bWJlci5wcm90b3R5cGUudG9maXhlZFxuJCh7IHRhcmdldDogJ051bWJlcicsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIHRvRml4ZWQ6IGZ1bmN0aW9uIHRvRml4ZWQoZnJhY3Rpb25EaWdpdHMpIHtcbiAgICB2YXIgbnVtYmVyID0gdGhpc051bWJlclZhbHVlKHRoaXMpO1xuICAgIHZhciBmcmFjdERpZ2l0cyA9IHRvSW50ZWdlck9ySW5maW5pdHkoZnJhY3Rpb25EaWdpdHMpO1xuICAgIHZhciBkYXRhID0gWzAsIDAsIDAsIDAsIDAsIDBdO1xuICAgIHZhciBzaWduID0gJyc7XG4gICAgdmFyIHJlc3VsdCA9ICcwJztcbiAgICB2YXIgZSwgeiwgaiwgaztcblxuICAgIGlmIChmcmFjdERpZ2l0cyA8IDAgfHwgZnJhY3REaWdpdHMgPiAyMCkgdGhyb3cgUmFuZ2VFcnJvcignSW5jb3JyZWN0IGZyYWN0aW9uIGRpZ2l0cycpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKG51bWJlciAhPSBudW1iZXIpIHJldHVybiAnTmFOJztcbiAgICBpZiAobnVtYmVyIDw9IC0xZTIxIHx8IG51bWJlciA+PSAxZTIxKSByZXR1cm4gU3RyaW5nKG51bWJlcik7XG4gICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgIHNpZ24gPSAnLSc7XG4gICAgICBudW1iZXIgPSAtbnVtYmVyO1xuICAgIH1cbiAgICBpZiAobnVtYmVyID4gMWUtMjEpIHtcbiAgICAgIGUgPSBsb2cobnVtYmVyICogcG93KDIsIDY5LCAxKSkgLSA2OTtcbiAgICAgIHogPSBlIDwgMCA/IG51bWJlciAqIHBvdygyLCAtZSwgMSkgOiBudW1iZXIgLyBwb3coMiwgZSwgMSk7XG4gICAgICB6ICo9IDB4MTAwMDAwMDAwMDAwMDA7XG4gICAgICBlID0gNTIgLSBlO1xuICAgICAgaWYgKGUgPiAwKSB7XG4gICAgICAgIG11bHRpcGx5KGRhdGEsIDAsIHopO1xuICAgICAgICBqID0gZnJhY3REaWdpdHM7XG4gICAgICAgIHdoaWxlIChqID49IDcpIHtcbiAgICAgICAgICBtdWx0aXBseShkYXRhLCAxZTcsIDApO1xuICAgICAgICAgIGogLT0gNztcbiAgICAgICAgfVxuICAgICAgICBtdWx0aXBseShkYXRhLCBwb3coMTAsIGosIDEpLCAwKTtcbiAgICAgICAgaiA9IGUgLSAxO1xuICAgICAgICB3aGlsZSAoaiA+PSAyMykge1xuICAgICAgICAgIGRpdmlkZShkYXRhLCAxIDw8IDIzKTtcbiAgICAgICAgICBqIC09IDIzO1xuICAgICAgICB9XG4gICAgICAgIGRpdmlkZShkYXRhLCAxIDw8IGopO1xuICAgICAgICBtdWx0aXBseShkYXRhLCAxLCAxKTtcbiAgICAgICAgZGl2aWRlKGRhdGEsIDIpO1xuICAgICAgICByZXN1bHQgPSBkYXRhVG9TdHJpbmcoZGF0YSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtdWx0aXBseShkYXRhLCAwLCB6KTtcbiAgICAgICAgbXVsdGlwbHkoZGF0YSwgMSA8PCAtZSwgMCk7XG4gICAgICAgIHJlc3VsdCA9IGRhdGFUb1N0cmluZyhkYXRhKSArIHJlcGVhdC5jYWxsKCcwJywgZnJhY3REaWdpdHMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZnJhY3REaWdpdHMgPiAwKSB7XG4gICAgICBrID0gcmVzdWx0Lmxlbmd0aDtcbiAgICAgIHJlc3VsdCA9IHNpZ24gKyAoayA8PSBmcmFjdERpZ2l0c1xuICAgICAgICA/ICcwLicgKyByZXBlYXQuY2FsbCgnMCcsIGZyYWN0RGlnaXRzIC0gaykgKyByZXN1bHRcbiAgICAgICAgOiByZXN1bHQuc2xpY2UoMCwgayAtIGZyYWN0RGlnaXRzKSArICcuJyArIHJlc3VsdC5zbGljZShrIC0gZnJhY3REaWdpdHMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gc2lnbiArIHJlc3VsdDtcbiAgICB9IHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB0aGlzTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGhpcy1udW1iZXItdmFsdWUnKTtcblxudmFyIG5hdGl2ZVRvUHJlY2lzaW9uID0gMS4wLnRvUHJlY2lzaW9uO1xuXG52YXIgRk9SQ0VEID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTctXG4gIHJldHVybiBuYXRpdmVUb1ByZWNpc2lvbi5jYWxsKDEsIHVuZGVmaW5lZCkgIT09ICcxJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gIG5hdGl2ZVRvUHJlY2lzaW9uLmNhbGwoe30pO1xufSk7XG5cbi8vIGBOdW1iZXIucHJvdG90eXBlLnRvUHJlY2lzaW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbnVtYmVyLnByb3RvdHlwZS50b3ByZWNpc2lvblxuJCh7IHRhcmdldDogJ051bWJlcicsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIHRvUHJlY2lzaW9uOiBmdW5jdGlvbiB0b1ByZWNpc2lvbihwcmVjaXNpb24pIHtcbiAgICByZXR1cm4gcHJlY2lzaW9uID09PSB1bmRlZmluZWRcbiAgICAgID8gbmF0aXZlVG9QcmVjaXNpb24uY2FsbCh0aGlzTnVtYmVyVmFsdWUodGhpcykpXG4gICAgICA6IG5hdGl2ZVRvUHJlY2lzaW9uLmNhbGwodGhpc051bWJlclZhbHVlKHRoaXMpLCBwcmVjaXNpb24pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHNhZmVcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuLy8gYE9iamVjdC5hc3NpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gc2hvdWxkIGhhdmUgY29ycmVjdCBvcmRlciBvZiBvcGVyYXRpb25zIChFZGdlIGJ1ZylcbiAgaWYgKERFU0NSSVBUT1JTICYmICRhc3NpZ24oeyBiOiAxIH0sICRhc3NpZ24oZGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYicsIHtcbiAgICAgICAgdmFsdWU6IDMsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gIH0pLCB7IGI6IDIgfSkpLmIgIT09IDEpIHJldHVybiB0cnVlO1xuICAvLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1ZylcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXN5bWJvbCAtLSBzYWZlXG4gIHZhciBzeW1ib2wgPSBTeW1ib2woKTtcbiAgdmFyIGFscGhhYmV0ID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtzeW1ib2xdID0gNztcbiAgYWxwaGFiZXQuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGNocikgeyBCW2Nocl0gPSBjaHI7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbc3ltYm9sXSAhPSA3IHx8IG9iamVjdEtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IGFscGhhYmV0O1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgdmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbiAgd2hpbGUgKGFyZ3VtZW50c0xlbmd0aCA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJbmRleGVkT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBvYmplY3RLZXlzKFMpLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoUykpIDogb2JqZWN0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuYXNzaWduICE9PSBhc3NpZ24gfSwge1xuICBhc3NpZ246IGFzc2lnblxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGNyZWF0ZTogY3JlYXRlXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBXRUJLSVQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXdlYmtpdC12ZXJzaW9uJyk7XG5cbi8vIEZvcmNlZCByZXBsYWNlbWVudCBvYmplY3QgcHJvdG90eXBlIGFjY2Vzc29ycyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IElTX1BVUkUgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhpcyBmZWF0dXJlIGRldGVjdGlvbiBjcmFzaGVzIG9sZCBXZWJLaXRcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzIzMlxuICBpZiAoV0VCS0lUICYmIFdFQktJVCA8IDUzNSkgcmV0dXJuO1xuICB2YXIga2V5ID0gTWF0aC5yYW5kb20oKTtcbiAgLy8gSW4gRkYgdGhyb3dzIG9ubHkgZGVmaW5lIG1ldGhvZHNcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmLCBuby11c2VsZXNzLWNhbGwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG51bGwsIGtleSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbiAgZGVsZXRlIGdsb2JhbFtrZXldO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIEZPUkNFRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvdG90eXBlLWFjY2Vzc29ycy1mb3JjZWQnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfX2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfX1xuaWYgKERFU0NSSVBUT1JTKSB7XG4gICQoeyB0YXJnZXQ6ICdPYmplY3QnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAgIF9fZGVmaW5lR2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKHRvT2JqZWN0KHRoaXMpLCBQLCB7IGdldDogYUNhbGxhYmxlKGdldHRlciksIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH0pO1xufVxuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIURFU0NSSVBUT1JTLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0aWVzOiBkZWZpbmVQcm9wZXJ0aWVzXG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgb2JqZWN0RGVmaW5lUHJvcGVydHlNb2RpbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhREVTQ1JJUFRPUlMsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGRlZmluZVByb3BlcnR5OiBvYmplY3REZWZpbmVQcm9wZXJ0eU1vZGlsZS5mXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgRk9SQ0VEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm90b3R5cGUtYWNjZXNzb3JzLWZvcmNlZCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5fX2RlZmluZVNldHRlcl9fYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5fX2RlZmluZVNldHRlcl9fXG5pZiAoREVTQ1JJUFRPUlMpIHtcbiAgJCh7IHRhcmdldDogJ09iamVjdCcsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gICAgX19kZWZpbmVTZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVTZXR0ZXJfXyhQLCBzZXR0ZXIpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5TW9kdWxlLmYodG9PYmplY3QodGhpcyksIFAsIHsgc2V0OiBhQ2FsbGFibGUoc2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKS5mO1xuXG4vLyBgT2JqZWN0LnsgZW50cmllcywgdmFsdWVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVE9fRU5UUklFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3QoaXQpO1xuICAgIHZhciBrZXlzID0gb2JqZWN0S2V5cyhPKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBpKSB7XG4gICAgICBrZXkgPSBrZXlzW2krK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoTywga2V5KSkge1xuICAgICAgICByZXN1bHQucHVzaChUT19FTlRSSUVTID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYE9iamVjdC5lbnRyaWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZW50cmllc1xuICBlbnRyaWVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBPYmplY3QudmFsdWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QudmFsdWVzXG4gIHZhbHVlczogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRlbnRyaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC10by1hcnJheScpLmVudHJpZXM7XG5cbi8vIGBPYmplY3QuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5lbnRyaWVzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoTykge1xuICAgIHJldHVybiAkZW50cmllcyhPKTtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBGUkVFWklORyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mcmVlemluZycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgb25GcmVlemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKS5vbkZyZWV6ZTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1mcmVlemUgLS0gc2FmZVxudmFyICRmcmVlemUgPSBPYmplY3QuZnJlZXplO1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7ICRmcmVlemUoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmZyZWV6ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5mcmVlemVcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZBSUxTX09OX1BSSU1JVElWRVMsIHNoYW06ICFGUkVFWklORyB9LCB7XG4gIGZyZWV6ZTogZnVuY3Rpb24gZnJlZXplKGl0KSB7XG4gICAgcmV0dXJuICRmcmVlemUgJiYgaXNPYmplY3QoaXQpID8gJGZyZWV6ZShvbkZyZWV6ZShpdCkpIDogaXQ7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG5cbi8vIGBPYmplY3QuZnJvbUVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LWZyb20tZW50cmllc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBmcm9tRW50cmllczogZnVuY3Rpb24gZnJvbUVudHJpZXMoaXRlcmFibGUpIHtcbiAgICB2YXIgb2JqID0ge307XG4gICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKGssIHYpIHtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KG9iaiwgaywgdik7XG4gICAgfSwgeyBBU19FTlRSSUVTOiB0cnVlIH0pO1xuICAgIHJldHVybiBvYmo7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcigxKTsgfSk7XG52YXIgRk9SQ0VEID0gIURFU0NSSVBUT1JTIHx8IEZBSUxTX09OX1BSSU1JVElWRVM7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0luZGV4ZWRPYmplY3QoaXQpLCBrZXkpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICAgIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGtleSwgZGVzY3JpcHRvcjtcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpbmRleCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBrZXkgPSBrZXlzW2luZGV4KytdKTtcbiAgICAgIGlmIChkZXNjcmlwdG9yICE9PSB1bmRlZmluZWQpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKS5mO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyByZXR1cm4gIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZBSUxTX09OX1BSSU1JVElWRVMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiBnZXRPd25Qcm9wZXJ0eU5hbWVzXG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbmF0aXZlR2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyJyk7XG5cbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVHZXRQcm90b3R5cGVPZigxKTsgfSk7XG5cbi8vIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0cHJvdG90eXBlb2ZcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZBSUxTX09OX1BSSU1JVElWRVMsIHNoYW06ICFDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgfSwge1xuICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YoaXQpIHtcbiAgICByZXR1cm4gbmF0aXZlR2V0UHJvdG90eXBlT2YodG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG5cbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbi8vIGBPYmplY3QuaGFzT3duYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFjY2Vzc2libGUtb2JqZWN0LWhhc293bnByb3BlcnR5XG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGhhc093bjogaGFzT3duXG59KTtcbiIsIi8vIGBTYW1lVmFsdWVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zYW1ldmFsdWVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaXMgfHwgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4geCA9PT0geSA/IHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5IDogeCAhPSB4ICYmIHkgIT0geTtcbn07XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zYW1lLXZhbHVlJyk7XG5cbi8vIGBPYmplY3QuaXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuaXNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXM6IGlzXG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlIC0tIHNhZmVcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyAkaXNFeHRlbnNpYmxlKDEpOyB9KTtcblxuLy8gYE9iamVjdC5pc0V4dGVuc2libGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuaXNleHRlbnNpYmxlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAgaXNFeHRlbnNpYmxlOiBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZSA6IGZhbHNlO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNmcm96ZW4gLS0gc2FmZVxudmFyICRpc0Zyb3plbiA9IE9iamVjdC5pc0Zyb3plbjtcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyAkaXNGcm96ZW4oMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmlzRnJvemVuYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmlzZnJvemVuXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTIH0sIHtcbiAgaXNGcm96ZW46IGZ1bmN0aW9uIGlzRnJvemVuKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0Zyb3plbiA/ICRpc0Zyb3plbihpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc3NlYWxlZCAtLSBzYWZlXG52YXIgJGlzU2VhbGVkID0gT2JqZWN0LmlzU2VhbGVkO1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7ICRpc1NlYWxlZCgxKTsgfSk7XG5cbi8vIGBPYmplY3QuaXNTZWFsZWRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuaXNzZWFsZWRcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZBSUxTX09OX1BSSU1JVElWRVMgfSwge1xuICBpc1NlYWxlZDogZnVuY3Rpb24gaXNTZWFsZWQoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzU2VhbGVkID8gJGlzU2VhbGVkKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUtleXMoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyh0b09iamVjdChpdCkpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgRk9SQ0VEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm90b3R5cGUtYWNjZXNzb3JzLWZvcmNlZCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwR2V0dGVyX19gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLl9fbG9va3VwR2V0dGVyX19cbmlmIChERVNDUklQVE9SUykge1xuICAkKHsgdGFyZ2V0OiAnT2JqZWN0JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgICBfX2xvb2t1cEdldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cEdldHRlcl9fKFApIHtcbiAgICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgICAgIHZhciBkZXNjO1xuICAgICAgZG8ge1xuICAgICAgICBpZiAoZGVzYyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBrZXkpKSByZXR1cm4gZGVzYy5nZXQ7XG4gICAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICAgIH1cbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIEZPUkNFRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvdG90eXBlLWFjY2Vzc29ycy1mb3JjZWQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5fX2xvb2t1cFNldHRlcl9fYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5fX2xvb2t1cFNldHRlcl9fXG5pZiAoREVTQ1JJUFRPUlMpIHtcbiAgJCh7IHRhcmdldDogJ09iamVjdCcsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gICAgX19sb29rdXBTZXR0ZXJfXzogZnVuY3Rpb24gX19sb29rdXBTZXR0ZXJfXyhQKSB7XG4gICAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgICAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gICAgICB2YXIgZGVzYztcbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKGRlc2MgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywga2V5KSkgcmV0dXJuIGRlc2Muc2V0O1xuICAgICAgfSB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKTtcbiAgICB9XG4gIH0pO1xufVxuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgb25GcmVlemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKS5vbkZyZWV6ZTtcbnZhciBGUkVFWklORyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mcmVlemluZycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtcHJldmVudGV4dGVuc2lvbnMgLS0gc2FmZVxudmFyICRwcmV2ZW50RXh0ZW5zaW9ucyA9IE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucztcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyAkcHJldmVudEV4dGVuc2lvbnMoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByZXZlbnRleHRlbnNpb25zXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTLCBzaGFtOiAhRlJFRVpJTkcgfSwge1xuICBwcmV2ZW50RXh0ZW5zaW9uczogZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnMoaXQpIHtcbiAgICByZXR1cm4gJHByZXZlbnRFeHRlbnNpb25zICYmIGlzT2JqZWN0KGl0KSA/ICRwcmV2ZW50RXh0ZW5zaW9ucyhvbkZyZWV6ZShpdCkpIDogaXQ7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgb25GcmVlemUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKS5vbkZyZWV6ZTtcbnZhciBGUkVFWklORyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mcmVlemluZycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qtc2VhbCAtLSBzYWZlXG52YXIgJHNlYWwgPSBPYmplY3Quc2VhbDtcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyAkc2VhbCgxKTsgfSk7XG5cbi8vIGBPYmplY3Quc2VhbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5zZWFsXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTLCBzaGFtOiAhRlJFRVpJTkcgfSwge1xuICBzZWFsOiBmdW5jdGlvbiBzZWFsKGl0KSB7XG4gICAgcmV0dXJuICRzZWFsICYmIGlzT2JqZWN0KGl0KSA/ICRzZWFsKG9uRnJlZXplKGl0KSkgOiBpdDtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIHNldFByb3RvdHlwZU9mOiBzZXRQcm90b3R5cGVPZlxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcbiIsInZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKCFUT19TVFJJTkdfVEFHX1NVUFBPUlQpIHtcbiAgcmVkZWZpbmUoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgdG9TdHJpbmcsIHsgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHZhbHVlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tYXJyYXknKS52YWx1ZXM7XG5cbi8vIGBPYmplY3QudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnZhbHVlc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcyhPKSB7XG4gICAgcmV0dXJuICR2YWx1ZXMoTyk7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbnVtYmVyLXBhcnNlLWZsb2F0Jyk7XG5cbi8vIGBwYXJzZUZsb2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcGFyc2VmbG9hdC1zdHJpbmdcbiQoeyBnbG9iYWw6IHRydWUsIGZvcmNlZDogcGFyc2VGbG9hdCAhPSAkcGFyc2VGbG9hdCB9LCB7XG4gIHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRwYXJzZUludCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9udW1iZXItcGFyc2UtaW50Jyk7XG5cbi8vIGBwYXJzZUludGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXBhcnNlaW50LXN0cmluZy1yYWRpeFxuJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiBwYXJzZUludCAhPSAkcGFyc2VJbnQgfSwge1xuICBwYXJzZUludDogJHBhcnNlSW50XG59KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLlByb21pc2U7XG4iLCJ2YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gLyg/OmlwYWR8aXBob25lfGlwb2QpLiphcHBsZXdlYmtpdC9pLnRlc3QodXNlckFnZW50KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgSVNfSU9TID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MnKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG5cbnZhciBzZXQgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGxvY2F0aW9uLCBkZWZlciwgY2hhbm5lbCwgcG9ydDtcblxudHJ5IHtcbiAgLy8gRGVubyB0aHJvd3MgYSBSZWZlcmVuY2VFcnJvciBvbiBgbG9jYXRpb25gIGFjY2VzcyB3aXRob3V0IGAtLWxvY2F0aW9uYCBmbGFnXG4gIGxvY2F0aW9uID0gZ2xvYmFsLmxvY2F0aW9uO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG52YXIgcnVuID0gZnVuY3Rpb24gKGlkKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcblxudmFyIHJ1bm5lciA9IGZ1bmN0aW9uIChpZCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJ1bihpZCk7XG4gIH07XG59O1xuXG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuKGV2ZW50LmRhdGEpO1xufTtcblxudmFyIHBvc3QgPSBmdW5jdGlvbiAoaWQpIHtcbiAgLy8gb2xkIGVuZ2luZXMgaGF2ZSBub3QgbG9jYXRpb24ub3JpZ2luXG4gIGdsb2JhbC5wb3N0TWVzc2FnZShTdHJpbmcoaWQpLCBsb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyBsb2NhdGlvbi5ob3N0KTtcbn07XG5cbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0IHx8ICFjbGVhcikge1xuICBzZXQgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoZm4pIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpID0gMTtcbiAgICB3aGlsZSAoYXJndW1lbnRzTGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIHNwZWMgcmVxdWlyZW1lbnRcbiAgICAgIChpc0NhbGxhYmxlKGZuKSA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKElTX05PREUpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgLy8gZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82MjRcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCAmJiAhSVNfSU9TKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBiaW5kKHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJlxuICAgIGlzQ2FsbGFibGUoZ2xvYmFsLnBvc3RNZXNzYWdlKSAmJlxuICAgICFnbG9iYWwuaW1wb3J0U2NyaXB0cyAmJlxuICAgIGxvY2F0aW9uICYmIGxvY2F0aW9uLnByb3RvY29sICE9PSAnZmlsZTonICYmXG4gICAgIWZhaWxzKHBvc3QpXG4gICkge1xuICAgIGRlZmVyID0gcG9zdDtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChydW5uZXIoaWQpLCAwKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldCxcbiAgY2xlYXI6IGNsZWFyXG59O1xuIiwidmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvaXBhZHxpcGhvbmV8aXBvZC9pLnRlc3QodXNlckFnZW50KSAmJiBnbG9iYWwuUGViYmxlICE9PSB1bmRlZmluZWQ7XG4iLCJ2YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL3dlYjBzKD8hLipjaHJvbWUpL2kudGVzdCh1c2VyQWdlbnQpO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgSVNfSU9TID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MnKTtcbnZhciBJU19JT1NfUEVCQkxFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MtcGViYmxlJyk7XG52YXIgSVNfV0VCT1NfV0VCS0lUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy13ZWJvcy13ZWJraXQnKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG5cbnZhciBNdXRhdGlvbk9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbi8vIE5vZGUuanMgMTEgc2hvd3MgRXhwZXJpbWVudGFsV2FybmluZyBvbiBnZXR0aW5nIGBxdWV1ZU1pY3JvdGFza2BcbnZhciBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAncXVldWVNaWNyb3Rhc2snKTtcbnZhciBxdWV1ZU1pY3JvdGFzayA9IHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvciAmJiBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IudmFsdWU7XG5cbnZhciBmbHVzaCwgaGVhZCwgbGFzdCwgbm90aWZ5LCB0b2dnbGUsIG5vZGUsIHByb21pc2UsIHRoZW47XG5cbi8vIG1vZGVybiBlbmdpbmVzIGhhdmUgcXVldWVNaWNyb3Rhc2sgbWV0aG9kXG5pZiAoIXF1ZXVlTWljcm90YXNrKSB7XG4gIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChJU19OT0RFICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIC8vIGFsc28gZXhjZXB0IFdlYk9TIFdlYmtpdCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODk4XG4gIGlmICghSVNfSU9TICYmICFJU19OT0RFICYmICFJU19XRUJPU19XRUJLSVQgJiYgTXV0YXRpb25PYnNlcnZlciAmJiBkb2N1bWVudCkge1xuICAgIHRvZ2dsZSA9IHRydWU7XG4gICAgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKCFJU19JT1NfUEVCQkxFICYmIFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgLy8gd29ya2Fyb3VuZCBvZiBXZWJLaXQgfiBpT1MgU2FmYXJpIDEwLjEgYnVnXG4gICAgcHJvbWlzZS5jb25zdHJ1Y3RvciA9IFByb21pc2U7XG4gICAgdGhlbiA9IHByb21pc2UudGhlbjtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGVuLmNhbGwocHJvbWlzZSwgZmx1c2gpO1xuICAgIH07XG4gIC8vIE5vZGUuanMgd2l0aG91dCBwcm9taXNlc1xuICB9IGVsc2UgaWYgKElTX05PREUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHF1ZXVlTWljcm90YXNrIHx8IGZ1bmN0aW9uIChmbikge1xuICB2YXIgdGFzayA9IHsgZm46IGZuLCBuZXh0OiB1bmRlZmluZWQgfTtcbiAgaWYgKGxhc3QpIGxhc3QubmV4dCA9IHRhc2s7XG4gIGlmICghaGVhZCkge1xuICAgIGhlYWQgPSB0YXNrO1xuICAgIG5vdGlmeSgpO1xuICB9IGxhc3QgPSB0YXNrO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG52YXIgUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUNhbGxhYmxlKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFDYWxsYWJsZShyZWplY3QpO1xufTtcblxuLy8gYE5ld1Byb21pc2VDYXBhYmlsaXR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbmV3cHJvbWlzZWNhcGFiaWxpdHlcbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gIHZhciBjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGU7XG4gIGlmIChjb25zb2xlICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gY29uc29sZS5lcnJvcihhKSA6IGNvbnNvbGUuZXJyb3IoYSwgYik7XG4gIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGZhbHNlLCB2YWx1ZTogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIHZhbHVlOiBlcnJvciB9O1xuICB9XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgTmF0aXZlUHJvbWlzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtcHJvbWlzZS1jb25zdHJ1Y3RvcicpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUtYWxsJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWljcm90YXNrJyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlJyk7XG52YXIgaG9zdFJlcG9ydEVycm9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX0JST1dTRVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWJyb3dzZXInKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFBST01JU0UpO1xudmFyIE5hdGl2ZVByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlICYmIE5hdGl2ZVByb21pc2UucHJvdG90eXBlO1xudmFyIFByb21pc2VDb25zdHJ1Y3RvciA9IE5hdGl2ZVByb21pc2U7XG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZVByb3RvdHlwZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG52YXIgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHk7XG52YXIgRElTUEFUQ0hfRVZFTlQgPSAhIShkb2N1bWVudCAmJiBkb2N1bWVudC5jcmVhdGVFdmVudCAmJiBnbG9iYWwuZGlzcGF0Y2hFdmVudCk7XG52YXIgTkFUSVZFX1JFSkVDVElPTl9FVkVOVCA9IGlzQ2FsbGFibGUoZ2xvYmFsLlByb21pc2VSZWplY3Rpb25FdmVudCk7XG52YXIgVU5IQU5ETEVEX1JFSkVDVElPTiA9ICd1bmhhbmRsZWRyZWplY3Rpb24nO1xudmFyIFJFSkVDVElPTl9IQU5ETEVEID0gJ3JlamVjdGlvbmhhbmRsZWQnO1xudmFyIFBFTkRJTkcgPSAwO1xudmFyIEZVTEZJTExFRCA9IDE7XG52YXIgUkVKRUNURUQgPSAyO1xudmFyIEhBTkRMRUQgPSAxO1xudmFyIFVOSEFORExFRCA9IDI7XG52YXIgU1VCQ0xBU1NJTkcgPSBmYWxzZTtcbnZhciBJbnRlcm5hbCwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFByb21pc2VXcmFwcGVyLCBuYXRpdmVUaGVuO1xuXG52YXIgRk9SQ0VEID0gaXNGb3JjZWQoUFJPTUlTRSwgZnVuY3Rpb24gKCkge1xuICB2YXIgUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UgPSBpbnNwZWN0U291cmNlKFByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIHZhciBHTE9CQUxfQ09SRV9KU19QUk9NSVNFID0gUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UgIT09IFN0cmluZyhQcm9taXNlQ29uc3RydWN0b3IpO1xuICAvLyBWOCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAvLyBXZSBjYW4ndCBkZXRlY3QgaXQgc3luY2hyb25vdXNseSwgc28ganVzdCBjaGVjayB2ZXJzaW9uc1xuICBpZiAoIUdMT0JBTF9DT1JFX0pTX1BST01JU0UgJiYgVjhfVkVSU0lPTiA9PT0gNjYpIHJldHVybiB0cnVlO1xuICAvLyBXZSBuZWVkIFByb21pc2UjZmluYWxseSBpbiB0aGUgcHVyZSB2ZXJzaW9uIGZvciBwcmV2ZW50aW5nIHByb3RvdHlwZSBwb2xsdXRpb25cbiAgaWYgKElTX1BVUkUgJiYgIVByb21pc2VDb25zdHJ1Y3RvclByb3RvdHlwZVsnZmluYWxseSddKSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgY2FuJ3QgdXNlIEBAc3BlY2llcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbiAgaWYgKFY4X1ZFUlNJT04gPj0gNTEgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFKSkgcmV0dXJuIGZhbHNlO1xuICAvLyBEZXRlY3QgY29ycmVjdG5lc3Mgb2Ygc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSgxKTsgfSk7XG4gIHZhciBGYWtlUHJvbWlzZSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgZXhlYyhmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gIH07XG4gIHZhciBjb25zdHJ1Y3RvciA9IHByb21pc2UuY29uc3RydWN0b3IgPSB7fTtcbiAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBGYWtlUHJvbWlzZTtcbiAgU1VCQ0xBU1NJTkcgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlO1xuICBpZiAoIVNVQkNMQVNTSU5HKSByZXR1cm4gdHJ1ZTtcbiAgLy8gVW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICByZXR1cm4gIUdMT0JBTF9DT1JFX0pTX1BST01JU0UgJiYgSVNfQlJPV1NFUiAmJiAhTkFUSVZFX1JFSkVDVElPTl9FVkVOVDtcbn0pO1xuXG52YXIgSU5DT1JSRUNUX0lURVJBVElPTiA9IEZPUkNFRCB8fCAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICBQcm9taXNlQ29uc3RydWN0b3IuYWxsKGl0ZXJhYmxlKVsnY2F0Y2gnXShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIGlzQ2FsbGFibGUodGhlbiA9IGl0LnRoZW4pID8gdGhlbiA6IGZhbHNlO1xufTtcblxudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChzdGF0ZSwgaXNSZWplY3QpIHtcbiAgaWYgKHN0YXRlLm5vdGlmaWVkKSByZXR1cm47XG4gIHN0YXRlLm5vdGlmaWVkID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gc3RhdGUucmVhY3Rpb25zO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBvayA9IHN0YXRlLnN0YXRlID09IEZVTEZJTExFRDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIC8vIHZhcmlhYmxlIGxlbmd0aCAtIGNhbid0IHVzZSBmb3JFYWNoXG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBjaGFpbltpbmRleCsrXTtcbiAgICAgIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gICAgICB2YXIgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmU7XG4gICAgICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICAgICAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgICAgIHZhciByZXN1bHQsIHRoZW4sIGV4aXRlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgICAgaWYgKHN0YXRlLnJlamVjdGlvbiA9PT0gVU5IQU5ETEVEKSBvbkhhbmRsZVVuaGFuZGxlZChzdGF0ZSk7XG4gICAgICAgICAgICBzdGF0ZS5yZWplY3Rpb24gPSBIQU5ETEVEO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBjYW4gdGhyb3dcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZG9tYWluICYmICFleGl0ZWQpIGRvbWFpbi5leGl0KCk7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICAgIHN0YXRlLnJlYWN0aW9ucyA9IFtdO1xuICAgIHN0YXRlLm5vdGlmaWVkID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFzdGF0ZS5yZWplY3Rpb24pIG9uVW5oYW5kbGVkKHN0YXRlKTtcbiAgfSk7XG59O1xuXG52YXIgZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uIChuYW1lLCBwcm9taXNlLCByZWFzb24pIHtcbiAgdmFyIGV2ZW50LCBoYW5kbGVyO1xuICBpZiAoRElTUEFUQ0hfRVZFTlQpIHtcbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2ZW50LnByb21pc2UgPSBwcm9taXNlO1xuICAgIGV2ZW50LnJlYXNvbiA9IHJlYXNvbjtcbiAgICBldmVudC5pbml0RXZlbnQobmFtZSwgZmFsc2UsIHRydWUpO1xuICAgIGdsb2JhbC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfSBlbHNlIGV2ZW50ID0geyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHJlYXNvbiB9O1xuICBpZiAoIU5BVElWRV9SRUpFQ1RJT05fRVZFTlQgJiYgKGhhbmRsZXIgPSBnbG9iYWxbJ29uJyArIG5hbWVdKSkgaGFuZGxlcihldmVudCk7XG4gIGVsc2UgaWYgKG5hbWUgPT09IFVOSEFORExFRF9SRUpFQ1RJT04pIGhvc3RSZXBvcnRFcnJvcnMoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHJlYXNvbik7XG59O1xuXG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gc3RhdGUuZmFjYWRlO1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBJU19VTkhBTkRMRUQgPSBpc1VuaGFuZGxlZChzdGF0ZSk7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBpZiAoSVNfVU5IQU5ETEVEKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKElTX05PREUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoVU5IQU5ETEVEX1JFSkVDVElPTiwgcHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgc3RhdGUucmVqZWN0aW9uID0gSVNfTk9ERSB8fCBpc1VuaGFuZGxlZChzdGF0ZSkgPyBVTkhBTkRMRUQgOiBIQU5ETEVEO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikgdGhyb3cgcmVzdWx0LnZhbHVlO1xuICAgIH1cbiAgfSk7XG59O1xuXG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLnJlamVjdGlvbiAhPT0gSEFORExFRCAmJiAhc3RhdGUucGFyZW50O1xufTtcblxudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHN0YXRlLmZhY2FkZTtcbiAgICBpZiAoSVNfTk9ERSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoUkVKRUNUSU9OX0hBTkRMRUQsIHByb21pc2UsIHN0YXRlLnZhbHVlKTtcbiAgfSk7XG59O1xuXG52YXIgYmluZCA9IGZ1bmN0aW9uIChmbiwgc3RhdGUsIHVud3JhcCkge1xuICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgZm4oc3RhdGUsIHZhbHVlLCB1bndyYXApO1xuICB9O1xufTtcblxudmFyIGludGVybmFsUmVqZWN0ID0gZnVuY3Rpb24gKHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgc3RhdGUuc3RhdGUgPSBSRUpFQ1RFRDtcbiAgbm90aWZ5KHN0YXRlLCB0cnVlKTtcbn07XG5cbnZhciBpbnRlcm5hbFJlc29sdmUgPSBmdW5jdGlvbiAoc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICB0cnkge1xuICAgIGlmIChzdGF0ZS5mYWNhZGUgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICB2YXIgdGhlbiA9IGlzVGhlbmFibGUodmFsdWUpO1xuICAgIGlmICh0aGVuKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGVuLmNhbGwodmFsdWUsXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVzb2x2ZSwgd3JhcHBlciwgc3RhdGUpLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlamVjdCwgd3JhcHBlciwgc3RhdGUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBpbnRlcm5hbFJlamVjdCh3cmFwcGVyLCBlcnJvciwgc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHN0YXRlLnN0YXRlID0gRlVMRklMTEVEO1xuICAgICAgbm90aWZ5KHN0YXRlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGludGVybmFsUmVqZWN0KHsgZG9uZTogZmFsc2UgfSwgZXJyb3IsIHN0YXRlKTtcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmIChGT1JDRUQpIHtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgUHJvbWlzZUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIGFuSW5zdGFuY2UodGhpcywgUHJvbWlzZUNvbnN0cnVjdG9yLCBQUk9NSVNFKTtcbiAgICBhQ2FsbGFibGUoZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICB0cnkge1xuICAgICAgZXhlY3V0b3IoYmluZChpbnRlcm5hbFJlc29sdmUsIHN0YXRlKSwgYmluZChpbnRlcm5hbFJlamVjdCwgc3RhdGUpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaW50ZXJuYWxSZWplY3Qoc3RhdGUsIGVycm9yKTtcbiAgICB9XG4gIH07XG4gIFByb21pc2VDb25zdHJ1Y3RvclByb3RvdHlwZSA9IFByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgdHlwZTogUFJPTUlTRSxcbiAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgbm90aWZpZWQ6IGZhbHNlLFxuICAgICAgcGFyZW50OiBmYWxzZSxcbiAgICAgIHJlYWN0aW9uczogW10sXG4gICAgICByZWplY3Rpb246IGZhbHNlLFxuICAgICAgc3RhdGU6IFBFTkRJTkcsXG4gICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgfSk7XG4gIH07XG4gIEludGVybmFsLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKFByb21pc2VDb25zdHJ1Y3RvclByb3RvdHlwZSwge1xuICAgIC8vIGBQcm9taXNlLnByb3RvdHlwZS50aGVuYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLnRoZW5cbiAgICB0aGVuOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSh0aGlzKTtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBQcm9taXNlQ29uc3RydWN0b3IpKTtcbiAgICAgIHJlYWN0aW9uLm9rID0gaXNDYWxsYWJsZShvbkZ1bGZpbGxlZCkgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgICByZWFjdGlvbi5mYWlsID0gaXNDYWxsYWJsZShvblJlamVjdGVkKSAmJiBvblJlamVjdGVkO1xuICAgICAgcmVhY3Rpb24uZG9tYWluID0gSVNfTk9ERSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgICAgc3RhdGUucGFyZW50ID0gdHJ1ZTtcbiAgICAgIHN0YXRlLnJlYWN0aW9ucy5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmIChzdGF0ZS5zdGF0ZSAhPSBQRU5ESU5HKSBub3RpZnkoc3RhdGUsIGZhbHNlKTtcbiAgICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICAgIH0sXG4gICAgLy8gYFByb21pc2UucHJvdG90eXBlLmNhdGNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLmNhdGNoXG4gICAgJ2NhdGNoJzogZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgICB9XG4gIH0pO1xuICBPd25Qcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUocHJvbWlzZSk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBiaW5kKGludGVybmFsUmVzb2x2ZSwgc3RhdGUpO1xuICAgIHRoaXMucmVqZWN0ID0gYmluZChpbnRlcm5hbFJlamVjdCwgc3RhdGUpO1xuICB9O1xuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSBQcm9taXNlQ29uc3RydWN0b3IgfHwgQyA9PT0gUHJvbWlzZVdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcblxuICBpZiAoIUlTX1BVUkUgJiYgaXNDYWxsYWJsZShOYXRpdmVQcm9taXNlKSAmJiBOYXRpdmVQcm9taXNlUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgbmF0aXZlVGhlbiA9IE5hdGl2ZVByb21pc2VQcm90b3R5cGUudGhlbjtcblxuICAgIGlmICghU1VCQ0xBU1NJTkcpIHtcbiAgICAgIC8vIG1ha2UgYFByb21pc2UjdGhlbmAgcmV0dXJuIGEgcG9seWZpbGxlZCBgUHJvbWlzZWAgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICAgIHJlZGVmaW5lKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsICd0aGVuJywgZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUNvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBuYXRpdmVUaGVuLmNhbGwodGhhdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSkudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjQwXG4gICAgICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcblxuICAgICAgLy8gbWFrZXMgc3VyZSB0aGF0IG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXMgYFByb21pc2UjY2F0Y2hgIHByb3Blcmx5IHdvcmtzIHdpdGggcGF0Y2hlZCBgUHJvbWlzZSN0aGVuYFxuICAgICAgcmVkZWZpbmUoTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ2NhdGNoJywgUHJvbWlzZUNvbnN0cnVjdG9yUHJvdG90eXBlWydjYXRjaCddLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIGAuY29uc3RydWN0b3IgPT09IFByb21pc2VgIHdvcmsgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICB0cnkge1xuICAgICAgZGVsZXRlIE5hdGl2ZVByb21pc2VQcm90b3R5cGUuY29uc3RydWN0b3I7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG4gICAgLy8gbWFrZSBgaW5zdGFuY2VvZiBQcm9taXNlYCB3b3JrIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICBzZXRQcm90b3R5cGVPZihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCBQcm9taXNlQ29uc3RydWN0b3JQcm90b3R5cGUpO1xuICAgIH1cbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIFByb21pc2U6IFByb21pc2VDb25zdHJ1Y3RvclxufSk7XG5cbnNldFRvU3RyaW5nVGFnKFByb21pc2VDb25zdHJ1Y3RvciwgUFJPTUlTRSwgZmFsc2UsIHRydWUpO1xuc2V0U3BlY2llcyhQUk9NSVNFKTtcblxuUHJvbWlzZVdyYXBwZXIgPSBnZXRCdWlsdEluKFBST01JU0UpO1xuXG4vLyBzdGF0aWNzXG4kKHsgdGFyZ2V0OiBQUk9NSVNFLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGBQcm9taXNlLnJlamVjdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZWplY3RcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgY2FwYWJpbGl0eS5yZWplY3QuY2FsbCh1bmRlZmluZWQsIHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiBQUk9NSVNFLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfHwgRk9SQ0VEIH0sIHtcbiAgLy8gYFByb21pc2UucmVzb2x2ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZXNvbHZlXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShJU19QVVJFICYmIHRoaXMgPT09IFByb21pc2VXcmFwcGVyID8gUHJvbWlzZUNvbnN0cnVjdG9yIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiBQUk9NSVNFLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICAvLyBgUHJvbWlzZS5hbGxgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UuYWxsXG4gIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciAkcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgJHByb21pc2VSZXNvbHZlLmNhbGwoQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyBgUHJvbWlzZS5yYWNlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJhY2VcbiAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICAkcHJvbWlzZVJlc29sdmUuY2FsbChDLCBwcm9taXNlKS50aGVuKGNhcGFiaWxpdHkucmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG5cbi8vIGBQcm9taXNlLmFsbFNldHRsZWRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFsbHNldHRsZWRcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGFsbFNldHRsZWQ6IGZ1bmN0aW9uIGFsbFNldHRsZWQoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBhQ2FsbGFibGUoQy5yZXNvbHZlKTtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY291bnRlcisrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgcHJvbWlzZVJlc29sdmUuY2FsbChDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHsgc3RhdHVzOiAnZnVsZmlsbGVkJywgdmFsdWU6IHZhbHVlIH07XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB7IHN0YXR1czogJ3JlamVjdGVkJywgcmVhc29uOiBlcnJvciB9O1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG5cbnZhciBQUk9NSVNFX0FOWV9FUlJPUiA9ICdObyBvbmUgcHJvbWlzZSByZXNvbHZlZCc7XG5cbi8vIGBQcm9taXNlLmFueWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UuYW55XG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUgfSwge1xuICBhbnk6IGZ1bmN0aW9uIGFueShpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgdmFyIGVycm9ycyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICB2YXIgYWxyZWFkeVJlc29sdmVkID0gZmFsc2U7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5UmVqZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgZXJyb3JzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIHByb21pc2VSZXNvbHZlLmNhbGwoQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeVJlamVjdGVkIHx8IGFscmVhZHlSZXNvbHZlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlSZXNvbHZlZCA9IHRydWU7XG4gICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIGlmIChhbHJlYWR5UmVqZWN0ZWQgfHwgYWxyZWFkeVJlc29sdmVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeVJlamVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICBlcnJvcnNbaW5kZXhdID0gZXJyb3I7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVqZWN0KG5ldyAoZ2V0QnVpbHRJbignQWdncmVnYXRlRXJyb3InKSkoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVqZWN0KG5ldyAoZ2V0QnVpbHRJbignQWdncmVnYXRlRXJyb3InKSkoZXJyb3JzLCBQUk9NSVNFX0FOWV9FUlJPUikpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgTmF0aXZlUHJvbWlzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtcHJvbWlzZS1jb25zdHJ1Y3RvcicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xuXG4vLyBTYWZhcmkgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA4MjlcbnZhciBOT05fR0VORVJJQyA9ICEhTmF0aXZlUHJvbWlzZSAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIE5hdGl2ZVByb21pc2UucHJvdG90eXBlWydmaW5hbGx5J10uY2FsbCh7IHRoZW46IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSB9LCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbi8vIGBQcm9taXNlLnByb3RvdHlwZS5maW5hbGx5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5wcm90b3R5cGUuZmluYWxseVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBOT05fR0VORVJJQyB9LCB7XG4gICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGdldEJ1aWx0SW4oJ1Byb21pc2UnKSk7XG4gICAgdmFyIGlzRnVuY3Rpb24gPSBpc0NhbGxhYmxlKG9uRmluYWxseSk7XG4gICAgcmV0dXJuIHRoaXMudGhlbihcbiAgICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgICB9IDogb25GaW5hbGx5LFxuICAgICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgICAgfSA6IG9uRmluYWxseVxuICAgICk7XG4gIH1cbn0pO1xuXG4vLyBtYWtlcyBzdXJlIHRoYXQgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJcyBgUHJvbWlzZSNmaW5hbGx5YCBwcm9wZXJseSB3b3JrcyB3aXRoIHBhdGNoZWQgYFByb21pc2UjdGhlbmBcbmlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2UpKSB7XG4gIHZhciBtZXRob2QgPSBnZXRCdWlsdEluKCdQcm9taXNlJykucHJvdG90eXBlWydmaW5hbGx5J107XG4gIGlmIChOYXRpdmVQcm9taXNlLnByb3RvdHlwZVsnZmluYWxseSddICE9PSBtZXRob2QpIHtcbiAgICByZWRlZmluZShOYXRpdmVQcm9taXNlLnByb3RvdHlwZSwgJ2ZpbmFsbHknLCBtZXRob2QsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICB9XG59XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIG5hdGl2ZUFwcGx5ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdhcHBseScpO1xudmFyIGZ1bmN0aW9uQXBwbHkgPSBGdW5jdGlvbi5hcHBseTtcblxuLy8gTVMgRWRnZSBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG52YXIgT1BUSU9OQUxfQVJHVU1FTlRTX0xJU1QgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBuYXRpdmVBcHBseShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbi8vIGBSZWZsZWN0LmFwcGx5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5hcHBseVxuJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IE9QVElPTkFMX0FSR1VNRU5UU19MSVNUIH0sIHtcbiAgYXBwbHk6IGZ1bmN0aW9uIGFwcGx5KHRhcmdldCwgdGhpc0FyZ3VtZW50LCBhcmd1bWVudHNMaXN0KSB7XG4gICAgYUNhbGxhYmxlKHRhcmdldCk7XG4gICAgYW5PYmplY3QoYXJndW1lbnRzTGlzdCk7XG4gICAgcmV0dXJuIG5hdGl2ZUFwcGx5XG4gICAgICA/IG5hdGl2ZUFwcGx5KHRhcmdldCwgdGhpc0FyZ3VtZW50LCBhcmd1bWVudHNMaXN0KVxuICAgICAgOiBmdW5jdGlvbkFwcGx5LmNhbGwodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3InKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBuYXRpdmVDb25zdHJ1Y3QgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ2NvbnN0cnVjdCcpO1xuXG4vLyBgUmVmbGVjdC5jb25zdHJ1Y3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWZsZWN0LmNvbnN0cnVjdFxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEobmF0aXZlQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgW10sIEYpIGluc3RhbmNlb2YgRik7XG59KTtcbnZhciBBUkdTX0JVRyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIG5hdGl2ZUNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG52YXIgRk9SQ0VEID0gTkVXX1RBUkdFVF9CVUcgfHwgQVJHU19CVUc7XG5cbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06IEZPUkNFRCB9LCB7XG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gY29uc3RydWN0KFRhcmdldCwgYXJncyAvKiAsIG5ld1RhcmdldCAqLykge1xuICAgIGFDb25zdHJ1Y3RvcihUYXJnZXQpO1xuICAgIGFuT2JqZWN0KGFyZ3MpO1xuICAgIHZhciBuZXdUYXJnZXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IFRhcmdldCA6IGFDb25zdHJ1Y3Rvcihhcmd1bWVudHNbMl0pO1xuICAgIGlmIChBUkdTX0JVRyAmJiAhTkVXX1RBUkdFVF9CVUcpIHJldHVybiBuYXRpdmVDb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzLCBuZXdUYXJnZXQpO1xuICAgIGlmIChUYXJnZXQgPT0gbmV3VGFyZ2V0KSB7XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIG9wdGltaXphdGlvbiBmb3IgMC00IGFyZ3VtZW50c1xuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgVGFyZ2V0KCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICB9XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIGxvdCBvZiBhcmd1bWVudHMgY2FzZVxuICAgICAgdmFyICRhcmdzID0gW251bGxdO1xuICAgICAgJGFyZ3MucHVzaC5hcHBseSgkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChiaW5kLmFwcGx5KFRhcmdldCwgJGFyZ3MpKSgpO1xuICAgIH1cbiAgICAvLyB3aXRoIGFsdGVyZWQgbmV3VGFyZ2V0LCBub3Qgc3VwcG9ydCBidWlsdC1pbiBjb25zdHJ1Y3RvcnNcbiAgICB2YXIgcHJvdG8gPSBuZXdUYXJnZXQucHJvdG90eXBlO1xuICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZShpc09iamVjdChwcm90bykgPyBwcm90byA6IE9iamVjdC5wcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBGdW5jdGlvbi5hcHBseS5jYWxsKFRhcmdldCwgaW5zdGFuY2UsIGFyZ3MpO1xuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogaW5zdGFuY2U7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBNUyBFZGdlIGhhcyBicm9rZW4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSAtIHRocm93aW5nIGluc3RlYWQgb2YgcmV0dXJuaW5nIGZhbHNlXG52YXIgRVJST1JfSU5TVEVBRF9PRl9GQUxTRSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXJlZmxlY3QgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKHt9LCAxLCB7IHZhbHVlOiAxIH0pLCAxLCB7IHZhbHVlOiAyIH0pO1xufSk7XG5cbi8vIGBSZWZsZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5kZWZpbmVwcm9wZXJ0eVxuJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEVSUk9SX0lOU1RFQURfT0ZfRkFMU0UsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGRlZmluZVByb3BlcnR5OiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKSB7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShwcm9wZXJ0eUtleSk7XG4gICAgYW5PYmplY3QoYXR0cmlidXRlcyk7XG4gICAgdHJ5IHtcbiAgICAgIGRlZmluZVByb3BlcnR5TW9kdWxlLmYodGFyZ2V0LCBrZXksIGF0dHJpYnV0ZXMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xuXG4vLyBgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZmxlY3QuZGVsZXRlcHJvcGVydHlcbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGRlbGV0ZVByb3BlcnR5OiBmdW5jdGlvbiBkZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICAgIHJldHVybiBkZXNjcmlwdG9yICYmICFkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA/IGZhbHNlIDogZGVsZXRlIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIH1cbn0pO1xuIiwidmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRlc2NyaXB0b3IpIHtcbiAgcmV0dXJuIGRlc2NyaXB0b3IgIT09IHVuZGVmaW5lZCAmJiAoaGFzT3duKGRlc2NyaXB0b3IsICd2YWx1ZScpIHx8IGhhc093bihkZXNjcmlwdG9yLCAnd3JpdGFibGUnKSk7XG59O1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNEYXRhRGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1kYXRhLWRlc2NyaXB0b3InKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIGBSZWZsZWN0LmdldGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZmxlY3QuZ2V0XG5mdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogYXJndW1lbnRzWzJdO1xuICB2YXIgZGVzY3JpcHRvciwgcHJvdG90eXBlO1xuICBpZiAoYW5PYmplY3QodGFyZ2V0KSA9PT0gcmVjZWl2ZXIpIHJldHVybiB0YXJnZXRbcHJvcGVydHlLZXldO1xuICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmYodGFyZ2V0LCBwcm9wZXJ0eUtleSk7XG4gIGlmIChkZXNjcmlwdG9yKSByZXR1cm4gaXNEYXRhRGVzY3JpcHRvcihkZXNjcmlwdG9yKVxuICAgID8gZGVzY3JpcHRvci52YWx1ZVxuICAgIDogZGVzY3JpcHRvci5nZXQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGRlc2NyaXB0b3IuZ2V0LmNhbGwocmVjZWl2ZXIpO1xuICBpZiAoaXNPYmplY3QocHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG90eXBlLCBwcm9wZXJ0eUtleSwgcmVjZWl2ZXIpO1xufVxuXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBnZXQ6IGdldFxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbi8vIGBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZmxlY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIG9iamVjdEdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG4vLyBgUmVmbGVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZmxlY3QuZ2V0cHJvdG90eXBlb2ZcbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIUNPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiB9LCB7XG4gIGdldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZih0YXJnZXQpIHtcbiAgICByZXR1cm4gb2JqZWN0R2V0UHJvdG90eXBlT2YoYW5PYmplY3QodGFyZ2V0KSk7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGBSZWZsZWN0Lmhhc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZmxlY3QuaGFzXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBoYXM6IGZ1bmN0aW9uIGhhcyh0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgcmV0dXJuIHByb3BlcnR5S2V5IGluIHRhcmdldDtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUgLS0gc2FmZVxudmFyIG9iamVjdElzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG5cbi8vIGBSZWZsZWN0LmlzRXh0ZW5zaWJsZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZmxlY3QuaXNleHRlbnNpYmxlXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBpc0V4dGVuc2libGU6IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZSh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHJldHVybiBvYmplY3RJc0V4dGVuc2libGUgPyBvYmplY3RJc0V4dGVuc2libGUodGFyZ2V0KSA6IHRydWU7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xuXG4vLyBgUmVmbGVjdC5vd25LZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5vd25rZXlzXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBvd25LZXlzOiBvd25LZXlzXG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgRlJFRVpJTkcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnJlZXppbmcnKTtcblxuLy8gYFJlZmxlY3QucHJldmVudEV4dGVuc2lvbnNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWZsZWN0LnByZXZlbnRleHRlbnNpb25zXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUsIHNoYW06ICFGUkVFWklORyB9LCB7XG4gIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHRyeSB7XG4gICAgICB2YXIgb2JqZWN0UHJldmVudEV4dGVuc2lvbnMgPSBnZXRCdWlsdEluKCdPYmplY3QnLCAncHJldmVudEV4dGVuc2lvbnMnKTtcbiAgICAgIGlmIChvYmplY3RQcmV2ZW50RXh0ZW5zaW9ucykgb2JqZWN0UHJldmVudEV4dGVuc2lvbnModGFyZ2V0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzRGF0YURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZGF0YS1kZXNjcmlwdG9yJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG4vLyBgUmVmbGVjdC5zZXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWZsZWN0LnNldFxuZnVuY3Rpb24gc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgNCA/IHRhcmdldCA6IGFyZ3VtZW50c1szXTtcbiAgdmFyIG93bkRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZihhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gIHZhciBleGlzdGluZ0Rlc2NyaXB0b3IsIHByb3RvdHlwZSwgc2V0dGVyO1xuICBpZiAoIW93bkRlc2NyaXB0b3IpIHtcbiAgICBpZiAoaXNPYmplY3QocHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHtcbiAgICAgIHJldHVybiBzZXQocHJvdG90eXBlLCBwcm9wZXJ0eUtleSwgViwgcmVjZWl2ZXIpO1xuICAgIH1cbiAgICBvd25EZXNjcmlwdG9yID0gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDApO1xuICB9XG4gIGlmIChpc0RhdGFEZXNjcmlwdG9yKG93bkRlc2NyaXB0b3IpKSB7XG4gICAgaWYgKG93bkRlc2NyaXB0b3Iud3JpdGFibGUgPT09IGZhbHNlIHx8ICFpc09iamVjdChyZWNlaXZlcikpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5KSkge1xuICAgICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvci5nZXQgfHwgZXhpc3RpbmdEZXNjcmlwdG9yLnNldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iud3JpdGFibGUgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICBleGlzdGluZ0Rlc2NyaXB0b3IudmFsdWUgPSBWO1xuICAgICAgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGV4aXN0aW5nRGVzY3JpcHRvcik7XG4gICAgfSBlbHNlIGRlZmluZVByb3BlcnR5TW9kdWxlLmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgVikpO1xuICB9IGVsc2Uge1xuICAgIHNldHRlciA9IG93bkRlc2NyaXB0b3Iuc2V0O1xuICAgIGlmIChzZXR0ZXIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuICAgIHNldHRlci5jYWxsKHJlY2VpdmVyLCBWKTtcbiAgfSByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gTVMgRWRnZSAxNy0xOCBSZWZsZWN0LnNldCBhbGxvd3Mgc2V0dGluZyB0aGUgcHJvcGVydHkgdG8gb2JqZWN0XG4vLyB3aXRoIG5vbi13cml0YWJsZSBwcm9wZXJ0eSBvbiB0aGUgcHJvdG90eXBlXG52YXIgTVNfRURHRV9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiAgdmFyIG9iamVjdCA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmYobmV3IENvbnN0cnVjdG9yKCksICdhJywgeyBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1yZWZsZWN0IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBSZWZsZWN0LnNldChDb25zdHJ1Y3Rvci5wcm90b3R5cGUsICdhJywgMSwgb2JqZWN0KSAhPT0gZmFsc2U7XG59KTtcblxuJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IE1TX0VER0VfQlVHIH0sIHtcbiAgc2V0OiBzZXRcbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlJyk7XG52YXIgb2JqZWN0U2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcblxuLy8gYFJlZmxlY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWZsZWN0LnNldHByb3RvdHlwZW9mXG5pZiAob2JqZWN0U2V0UHJvdG90eXBlT2YpICQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIHNldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKSB7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICBhUG9zc2libGVQcm90b3R5cGUocHJvdG8pO1xuICAgIHRyeSB7XG4gICAgICBvYmplY3RTZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xuXG4kKHsgZ2xvYmFsOiB0cnVlIH0sIHsgUmVmbGVjdDoge30gfSk7XG5cbi8vIFJlZmxlY3RbQEB0b1N0cmluZ1RhZ10gcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuUmVmbGVjdCwgJ1JlZmxlY3QnLCB0cnVlKTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcblxuLy8gYElzUmVnRXhwYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNyZWdleHBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNsYXNzb2YoaXQpID09ICdSZWdFeHAnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXIgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3Ncbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC5kb3RBbGwpIHJlc3VsdCArPSAncyc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnN0aWNreSkgcmVzdWx0ICs9ICd5JztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnYScsICd5JykgLT4gL2EveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG5cbmV4cG9ydHMuVU5TVVBQT1JURURfWSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gJFJlZ0V4cCgnYScsICd5Jyk7XG4gIHJlLmxhc3RJbmRleCA9IDI7XG4gIHJldHVybiByZS5leGVjKCdhYmNkJykgIT0gbnVsbDtcbn0pO1xuXG5leHBvcnRzLkJST0tFTl9DQVJFVCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczNjg3XG4gIHZhciByZSA9ICRSZWdFeHAoJ15yJywgJ2d5Jyk7XG4gIHJlLmxhc3RJbmRleCA9IDI7XG4gIHJldHVybiByZS5leGVjKCdzdHInKSAhPSBudWxsO1xufSk7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnLicsICdzJykgLT4gLy4vcyBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG5cbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAkUmVnRXhwKCcuJywgJ3MnKTtcbiAgcmV0dXJuICEocmUuZG90QWxsICYmIHJlLmV4ZWMoJ1xcbicpICYmIHJlLmZsYWdzID09PSAncycpO1xufSk7XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnKD88YT5iKScsICdnJykgLT4gLyg/PGE+YikvZyBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG5cbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAkUmVnRXhwKCcoPzxhPmIpJywgJ2cnKTtcbiAgcmV0dXJuIHJlLmV4ZWMoJ2InKS5ncm91cHMuYSAhPT0gJ2InIHx8XG4gICAgJ2InLnJlcGxhY2UocmUsICckPGE+YycpICE9PSAnYmMnO1xufSk7XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1yZWdleHAnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBnZXRGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcbnZhciBzdGlja3lIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJykuZW5mb3JjZTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVU5TVVBQT1JURURfRE9UX0FMTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtZG90LWFsbCcpO1xudmFyIFVOU1VQUE9SVEVEX05DRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnJyk7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcbnZhciBOYXRpdmVSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IE5hdGl2ZVJlZ0V4cC5wcm90b3R5cGU7XG4vLyBUT0RPOiBVc2Ugb25seSBwcm9wcGVyIFJlZ0V4cElkZW50aWZpZXJOYW1lXG52YXIgSVNfTkNHID0gL15cXD88W15cXHNcXGQhIyUmKis8PT5AXl1bXlxccyEjJSYqKzw9PkBeXSo+LztcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG5cbi8vIFwibmV3XCIgc2hvdWxkIGNyZWF0ZSBhIG5ldyBvYmplY3QsIG9sZCB3ZWJraXQgYnVnXG52YXIgQ09SUkVDVF9ORVcgPSBuZXcgTmF0aXZlUmVnRXhwKHJlMSkgIT09IHJlMTtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBzdGlja3lIZWxwZXJzLlVOU1VQUE9SVEVEX1k7XG5cbnZhciBCQVNFX0ZPUkNFRCA9IERFU0NSSVBUT1JTICYmXG4gICghQ09SUkVDVF9ORVcgfHwgVU5TVVBQT1JURURfWSB8fCBVTlNVUFBPUlRFRF9ET1RfQUxMIHx8IFVOU1VQUE9SVEVEX05DRyB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmUyW01BVENIXSA9IGZhbHNlO1xuICAgIC8vIFJlZ0V4cCBjb25zdHJ1Y3RvciBjYW4gYWx0ZXIgZmxhZ3MgYW5kIElzUmVnRXhwIHdvcmtzIGNvcnJlY3Qgd2l0aCBAQG1hdGNoXG4gICAgcmV0dXJuIE5hdGl2ZVJlZ0V4cChyZTEpICE9IHJlMSB8fCBOYXRpdmVSZWdFeHAocmUyKSA9PSByZTIgfHwgTmF0aXZlUmVnRXhwKHJlMSwgJ2knKSAhPSAnL2EvaSc7XG4gIH0pKTtcblxudmFyIGhhbmRsZURvdEFsbCA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIGJyYWNrZXRzID0gZmFsc2U7XG4gIHZhciBjaHI7XG4gIGZvciAoOyBpbmRleCA8PSBsZW5ndGg7IGluZGV4KyspIHtcbiAgICBjaHIgPSBzdHJpbmcuY2hhckF0KGluZGV4KTtcbiAgICBpZiAoY2hyID09PSAnXFxcXCcpIHtcbiAgICAgIHJlc3VsdCArPSBjaHIgKyBzdHJpbmcuY2hhckF0KCsraW5kZXgpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICghYnJhY2tldHMgJiYgY2hyID09PSAnLicpIHtcbiAgICAgIHJlc3VsdCArPSAnW1xcXFxzXFxcXFNdJztcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNociA9PT0gJ1snKSB7XG4gICAgICAgIGJyYWNrZXRzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoY2hyID09PSAnXScpIHtcbiAgICAgICAgYnJhY2tldHMgPSBmYWxzZTtcbiAgICAgIH0gcmVzdWx0ICs9IGNocjtcbiAgICB9XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciBoYW5kbGVOQ0cgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHZhciBuYW1lZCA9IFtdO1xuICB2YXIgbmFtZXMgPSB7fTtcbiAgdmFyIGJyYWNrZXRzID0gZmFsc2U7XG4gIHZhciBuY2cgPSBmYWxzZTtcbiAgdmFyIGdyb3VwaWQgPSAwO1xuICB2YXIgZ3JvdXBuYW1lID0gJyc7XG4gIHZhciBjaHI7XG4gIGZvciAoOyBpbmRleCA8PSBsZW5ndGg7IGluZGV4KyspIHtcbiAgICBjaHIgPSBzdHJpbmcuY2hhckF0KGluZGV4KTtcbiAgICBpZiAoY2hyID09PSAnXFxcXCcpIHtcbiAgICAgIGNociA9IGNociArIHN0cmluZy5jaGFyQXQoKytpbmRleCk7XG4gICAgfSBlbHNlIGlmIChjaHIgPT09ICddJykge1xuICAgICAgYnJhY2tldHMgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKCFicmFja2V0cykgc3dpdGNoICh0cnVlKSB7XG4gICAgICBjYXNlIGNociA9PT0gJ1snOlxuICAgICAgICBicmFja2V0cyA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBjaHIgPT09ICcoJzpcbiAgICAgICAgaWYgKElTX05DRy50ZXN0KHN0cmluZy5zbGljZShpbmRleCArIDEpKSkge1xuICAgICAgICAgIGluZGV4ICs9IDI7XG4gICAgICAgICAgbmNnID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgKz0gY2hyO1xuICAgICAgICBncm91cGlkKys7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgY2FzZSBjaHIgPT09ICc+JyAmJiBuY2c6XG4gICAgICAgIGlmIChncm91cG5hbWUgPT09ICcnIHx8IGhhc093bihuYW1lcywgZ3JvdXBuYW1lKSkge1xuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignSW52YWxpZCBjYXB0dXJlIGdyb3VwIG5hbWUnKTtcbiAgICAgICAgfVxuICAgICAgICBuYW1lc1tncm91cG5hbWVdID0gdHJ1ZTtcbiAgICAgICAgbmFtZWQucHVzaChbZ3JvdXBuYW1lLCBncm91cGlkXSk7XG4gICAgICAgIG5jZyA9IGZhbHNlO1xuICAgICAgICBncm91cG5hbWUgPSAnJztcbiAgICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChuY2cpIGdyb3VwbmFtZSArPSBjaHI7XG4gICAgZWxzZSByZXN1bHQgKz0gY2hyO1xuICB9IHJldHVybiBbcmVzdWx0LCBuYW1lZF07XG59O1xuXG4vLyBgUmVnRXhwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAtY29uc3RydWN0b3JcbmlmIChpc0ZvcmNlZCgnUmVnRXhwJywgQkFTRV9GT1JDRUQpKSB7XG4gIHZhciBSZWdFeHBXcmFwcGVyID0gZnVuY3Rpb24gUmVnRXhwKHBhdHRlcm4sIGZsYWdzKSB7XG4gICAgdmFyIHRoaXNJc1JlZ0V4cCA9IHRoaXMgaW5zdGFuY2VvZiBSZWdFeHBXcmFwcGVyO1xuICAgIHZhciBwYXR0ZXJuSXNSZWdFeHAgPSBpc1JlZ0V4cChwYXR0ZXJuKTtcbiAgICB2YXIgZmxhZ3NBcmVVbmRlZmluZWQgPSBmbGFncyA9PT0gdW5kZWZpbmVkO1xuICAgIHZhciBncm91cHMgPSBbXTtcbiAgICB2YXIgcmF3UGF0dGVybiA9IHBhdHRlcm47XG4gICAgdmFyIHJhd0ZsYWdzLCBkb3RBbGwsIHN0aWNreSwgaGFuZGxlZCwgcmVzdWx0LCBzdGF0ZTtcblxuICAgIGlmICghdGhpc0lzUmVnRXhwICYmIHBhdHRlcm5Jc1JlZ0V4cCAmJiBmbGFnc0FyZVVuZGVmaW5lZCAmJiBwYXR0ZXJuLmNvbnN0cnVjdG9yID09PSBSZWdFeHBXcmFwcGVyKSB7XG4gICAgICByZXR1cm4gcGF0dGVybjtcbiAgICB9XG5cbiAgICBpZiAocGF0dGVybklzUmVnRXhwIHx8IHBhdHRlcm4gaW5zdGFuY2VvZiBSZWdFeHBXcmFwcGVyKSB7XG4gICAgICBwYXR0ZXJuID0gcGF0dGVybi5zb3VyY2U7XG4gICAgICBpZiAoZmxhZ3NBcmVVbmRlZmluZWQpIGZsYWdzID0gJ2ZsYWdzJyBpbiByYXdQYXR0ZXJuID8gcmF3UGF0dGVybi5mbGFncyA6IGdldEZsYWdzLmNhbGwocmF3UGF0dGVybik7XG4gICAgfVxuXG4gICAgcGF0dGVybiA9IHBhdHRlcm4gPT09IHVuZGVmaW5lZCA/ICcnIDogdG9TdHJpbmcocGF0dGVybik7XG4gICAgZmxhZ3MgPSBmbGFncyA9PT0gdW5kZWZpbmVkID8gJycgOiB0b1N0cmluZyhmbGFncyk7XG4gICAgcmF3UGF0dGVybiA9IHBhdHRlcm47XG5cbiAgICBpZiAoVU5TVVBQT1JURURfRE9UX0FMTCAmJiAnZG90QWxsJyBpbiByZTEpIHtcbiAgICAgIGRvdEFsbCA9ICEhZmxhZ3MgJiYgZmxhZ3MuaW5kZXhPZigncycpID4gLTE7XG4gICAgICBpZiAoZG90QWxsKSBmbGFncyA9IGZsYWdzLnJlcGxhY2UoL3MvZywgJycpO1xuICAgIH1cblxuICAgIHJhd0ZsYWdzID0gZmxhZ3M7XG5cbiAgICBpZiAoVU5TVVBQT1JURURfWSAmJiAnc3RpY2t5JyBpbiByZTEpIHtcbiAgICAgIHN0aWNreSA9ICEhZmxhZ3MgJiYgZmxhZ3MuaW5kZXhPZigneScpID4gLTE7XG4gICAgICBpZiAoc3RpY2t5KSBmbGFncyA9IGZsYWdzLnJlcGxhY2UoL3kvZywgJycpO1xuICAgIH1cblxuICAgIGlmIChVTlNVUFBPUlRFRF9OQ0cpIHtcbiAgICAgIGhhbmRsZWQgPSBoYW5kbGVOQ0cocGF0dGVybik7XG4gICAgICBwYXR0ZXJuID0gaGFuZGxlZFswXTtcbiAgICAgIGdyb3VwcyA9IGhhbmRsZWRbMV07XG4gICAgfVxuXG4gICAgcmVzdWx0ID0gaW5oZXJpdElmUmVxdWlyZWQoTmF0aXZlUmVnRXhwKHBhdHRlcm4sIGZsYWdzKSwgdGhpc0lzUmVnRXhwID8gdGhpcyA6IFJlZ0V4cFByb3RvdHlwZSwgUmVnRXhwV3JhcHBlcik7XG5cbiAgICBpZiAoZG90QWxsIHx8IHN0aWNreSB8fCBncm91cHMubGVuZ3RoKSB7XG4gICAgICBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHJlc3VsdCk7XG4gICAgICBpZiAoZG90QWxsKSB7XG4gICAgICAgIHN0YXRlLmRvdEFsbCA9IHRydWU7XG4gICAgICAgIHN0YXRlLnJhdyA9IFJlZ0V4cFdyYXBwZXIoaGFuZGxlRG90QWxsKHBhdHRlcm4pLCByYXdGbGFncyk7XG4gICAgICB9XG4gICAgICBpZiAoc3RpY2t5KSBzdGF0ZS5zdGlja3kgPSB0cnVlO1xuICAgICAgaWYgKGdyb3Vwcy5sZW5ndGgpIHN0YXRlLmdyb3VwcyA9IGdyb3VwcztcbiAgICB9XG5cbiAgICBpZiAocGF0dGVybiAhPT0gcmF3UGF0dGVybikgdHJ5IHtcbiAgICAgIC8vIGZhaWxzIGluIG9sZCBlbmdpbmVzLCBidXQgd2UgaGF2ZSBubyBhbHRlcm5hdGl2ZXMgZm9yIHVuc3VwcG9ydGVkIHJlZ2V4IHN5bnRheFxuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHJlc3VsdCwgJ3NvdXJjZScsIHJhd1BhdHRlcm4gPT09ICcnID8gJyg/OiknIDogcmF3UGF0dGVybik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluIFJlZ0V4cFdyYXBwZXIgfHwgZGVmaW5lUHJvcGVydHkoUmVnRXhwV3JhcHBlciwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5hdGl2ZVJlZ0V4cFtrZXldOyB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAoaXQpIHsgTmF0aXZlUmVnRXhwW2tleV0gPSBpdDsgfVxuICAgIH0pO1xuICB9O1xuXG4gIGZvciAodmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKE5hdGl2ZVJlZ0V4cCksIGluZGV4ID0gMDsga2V5cy5sZW5ndGggPiBpbmRleDspIHtcbiAgICBwcm94eShrZXlzW2luZGV4KytdKTtcbiAgfVxuXG4gIFJlZ0V4cFByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlZ0V4cFdyYXBwZXI7XG4gIFJlZ0V4cFdyYXBwZXIucHJvdG90eXBlID0gUmVnRXhwUHJvdG90eXBlO1xuICByZWRlZmluZShnbG9iYWwsICdSZWdFeHAnLCBSZWdFeHBXcmFwcGVyKTtcbn1cblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLUBAc3BlY2llc1xuc2V0U3BlY2llcygnUmVnRXhwJyk7XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBVTlNVUFBPUlRFRF9ET1RfQUxMID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1kb3QtYWxsJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpLmdldDtcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5kb3RBbGxgIGdldHRlclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLnByb3RvdHlwZS5kb3RhbGxcbmlmIChERVNDUklQVE9SUyAmJiBVTlNVUFBPUlRFRF9ET1RfQUxMKSB7XG4gIGRlZmluZVByb3BlcnR5KFJlZ0V4cFByb3RvdHlwZSwgJ2RvdEFsbCcsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAodGhpcyA9PT0gUmVnRXhwUHJvdG90eXBlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgLy8gV2UgY2FuJ3QgdXNlIEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yIGJlY2F1c2VcbiAgICAgIC8vIHdlIGRvbid0IGFkZCBtZXRhZGF0YSBmb3IgcmVnZXhwcyBjcmVhdGVkIGJ5IGEgbGl0ZXJhbC5cbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIHJldHVybiAhIWdldEludGVybmFsU3RhdGUodGhpcykuZG90QWxsO1xuICAgICAgfVxuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsIFJlZ0V4cCByZXF1aXJlZCcpO1xuICAgIH1cbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tZW1wdHktY2FwdHVyaW5nLWdyb3VwLCByZWdleHAvbm8tZW1wdHktZ3JvdXAsIHJlZ2V4cC9uby1sYXp5LWVuZHMgLS0gdGVzdGluZyAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVnZXhwL25vLXVzZWxlc3MtcXVhbnRpZmllciAtLSB0ZXN0aW5nICovXG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzJyk7XG52YXIgc3RpY2t5SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtc3RpY2t5LWhlbHBlcnMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJykuZ2V0O1xudmFyIFVOU1VQUE9SVEVEX0RPVF9BTEwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLWRvdC1hbGwnKTtcbnZhciBVTlNVUFBPUlRFRF9OQ0cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLW5jZycpO1xuXG52YXIgbmF0aXZlRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcbnZhciBuYXRpdmVSZXBsYWNlID0gc2hhcmVkKCduYXRpdmUtc3RyaW5nLXJlcGxhY2UnLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xuXG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xuXG52YXIgVVBEQVRFU19MQVNUX0lOREVYX1dST05HID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlMSA9IC9hLztcbiAgdmFyIHJlMiA9IC9iKi9nO1xuICBuYXRpdmVFeGVjLmNhbGwocmUxLCAnYScpO1xuICBuYXRpdmVFeGVjLmNhbGwocmUyLCAnYScpO1xuICByZXR1cm4gcmUxLmxhc3RJbmRleCAhPT0gMCB8fCByZTIubGFzdEluZGV4ICE9PSAwO1xufSkoKTtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBzdGlja3lIZWxwZXJzLlVOU1VQUE9SVEVEX1kgfHwgc3RpY2t5SGVscGVycy5CUk9LRU5fQ0FSRVQ7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEIHx8IFVOU1VQUE9SVEVEX1kgfHwgVU5TVVBQT1JURURfRE9UX0FMTCB8fCBVTlNVUFBPUlRFRF9OQ0c7XG5cbmlmIChQQVRDSCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHMgLS0gVE9ET1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyaW5nKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHJlKTtcbiAgICB2YXIgc3RyID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICB2YXIgcmF3ID0gc3RhdGUucmF3O1xuICAgIHZhciByZXN1bHQsIHJlQ29weSwgbGFzdEluZGV4LCBtYXRjaCwgaSwgb2JqZWN0LCBncm91cDtcblxuICAgIGlmIChyYXcpIHtcbiAgICAgIHJhdy5sYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICByZXN1bHQgPSBwYXRjaGVkRXhlYy5jYWxsKHJhdywgc3RyKTtcbiAgICAgIHJlLmxhc3RJbmRleCA9IHJhdy5sYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHZhciBncm91cHMgPSBzdGF0ZS5ncm91cHM7XG4gICAgdmFyIHN0aWNreSA9IFVOU1VQUE9SVEVEX1kgJiYgcmUuc3RpY2t5O1xuICAgIHZhciBmbGFncyA9IHJlZ2V4cEZsYWdzLmNhbGwocmUpO1xuICAgIHZhciBzb3VyY2UgPSByZS5zb3VyY2U7XG4gICAgdmFyIGNoYXJzQWRkZWQgPSAwO1xuICAgIHZhciBzdHJDb3B5ID0gc3RyO1xuXG4gICAgaWYgKHN0aWNreSkge1xuICAgICAgZmxhZ3MgPSBmbGFncy5yZXBsYWNlKCd5JywgJycpO1xuICAgICAgaWYgKGZsYWdzLmluZGV4T2YoJ2cnKSA9PT0gLTEpIHtcbiAgICAgICAgZmxhZ3MgKz0gJ2cnO1xuICAgICAgfVxuXG4gICAgICBzdHJDb3B5ID0gc3RyLnNsaWNlKHJlLmxhc3RJbmRleCk7XG4gICAgICAvLyBTdXBwb3J0IGFuY2hvcmVkIHN0aWNreSBiZWhhdmlvci5cbiAgICAgIGlmIChyZS5sYXN0SW5kZXggPiAwICYmICghcmUubXVsdGlsaW5lIHx8IHJlLm11bHRpbGluZSAmJiBzdHIuY2hhckF0KHJlLmxhc3RJbmRleCAtIDEpICE9PSAnXFxuJykpIHtcbiAgICAgICAgc291cmNlID0gJyg/OiAnICsgc291cmNlICsgJyknO1xuICAgICAgICBzdHJDb3B5ID0gJyAnICsgc3RyQ29weTtcbiAgICAgICAgY2hhcnNBZGRlZCsrO1xuICAgICAgfVxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIHN0ciBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXig/OicgKyBzb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICB9XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyBzb3VyY2UgKyAnJCg/IVxcXFxzKScsIGZsYWdzKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmUubGFzdEluZGV4O1xuXG4gICAgbWF0Y2ggPSBuYXRpdmVFeGVjLmNhbGwoc3RpY2t5ID8gcmVDb3B5IDogcmUsIHN0ckNvcHkpO1xuXG4gICAgaWYgKHN0aWNreSkge1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIG1hdGNoLmlucHV0ID0gbWF0Y2guaW5wdXQuc2xpY2UoY2hhcnNBZGRlZCk7XG4gICAgICAgIG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoY2hhcnNBZGRlZCk7XG4gICAgICAgIG1hdGNoLmluZGV4ID0gcmUubGFzdEluZGV4O1xuICAgICAgICByZS5sYXN0SW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgfSBlbHNlIHJlLmxhc3RJbmRleCA9IDA7XG4gICAgfSBlbHNlIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlLmxhc3RJbmRleCA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJyB3b3JrIGZvciAvKC4/KT8vXG4gICAgICBuYXRpdmVSZXBsYWNlLmNhbGwobWF0Y2hbMF0sIHJlQ29weSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDI7IGkrKykge1xuICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0gPT09IHVuZGVmaW5lZCkgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChtYXRjaCAmJiBncm91cHMpIHtcbiAgICAgIG1hdGNoLmdyb3VwcyA9IG9iamVjdCA9IGNyZWF0ZShudWxsKTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBncm91cHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZ3JvdXAgPSBncm91cHNbaV07XG4gICAgICAgIG9iamVjdFtncm91cFswXV0gPSBtYXRjaFtncm91cFsxXV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoZWRFeGVjO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYycpO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5leGVjYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS5leGVjXG4kKHsgdGFyZ2V0OiAnUmVnRXhwJywgcHJvdG86IHRydWUsIGZvcmNlZDogLy4vLmV4ZWMgIT09IGV4ZWMgfSwge1xuICBleGVjOiBleGVjXG59KTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIG9iamVjdERlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciByZWdFeHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgRk9SQ0VEID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJlZ0V4cC5wcm90b3R5cGUsICdmbGFncycpLmdldC5jYWxsKHsgZG90QWxsOiB0cnVlLCBzdGlja3k6IHRydWUgfSkgIT09ICdzeSc7XG59KTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NgIGdldHRlclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLnByb3RvdHlwZS5mbGFnc1xuaWYgKEZPUkNFRCkgb2JqZWN0RGVmaW5lUHJvcGVydHlNb2R1bGUuZihSZWdFeHAucHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZWdFeHBGbGFnc1xufSk7XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBVTlNVUFBPUlRFRF9ZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycycpLlVOU1VQUE9SVEVEX1k7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpLmdldDtcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5zdGlja3lgIGdldHRlclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLnByb3RvdHlwZS5zdGlja3lcbmlmIChERVNDUklQVE9SUyAmJiBVTlNVUFBPUlRFRF9ZKSB7XG4gIGRlZmluZVByb3BlcnR5KFJlZ0V4cFByb3RvdHlwZSwgJ3N0aWNreScsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAodGhpcyA9PT0gUmVnRXhwUHJvdG90eXBlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgLy8gV2UgY2FuJ3QgdXNlIEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yIGJlY2F1c2VcbiAgICAgIC8vIHdlIGRvbid0IGFkZCBtZXRhZGF0YSBmb3IgcmVnZXhwcyBjcmVhdGVkIGJ5IGEgbGl0ZXJhbC5cbiAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIHJldHVybiAhIWdldEludGVybmFsU3RhdGUodGhpcykuc3RpY2t5O1xuICAgICAgfVxuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsIFJlZ0V4cCByZXF1aXJlZCcpO1xuICAgIH1cbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIG1vdmVkIHRvIGVudHJ5IHBvaW50c1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5yZWdleHAuZXhlYycpO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gIHZhciByZSA9IC9bYWNdLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBleGVjQ2FsbGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gLy4vLmV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIHJlLnRlc3QoJ2FiYycpID09PSB0cnVlICYmIGV4ZWNDYWxsZWQ7XG59KCk7XG5cbnZhciBuYXRpdmVUZXN0ID0gLy4vLnRlc3Q7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLnRlc3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLnRlc3RcbiQoeyB0YXJnZXQ6ICdSZWdFeHAnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhREVMRUdBVEVTX1RPX0VYRUMgfSwge1xuICB0ZXN0OiBmdW5jdGlvbiAoc3RyKSB7XG4gICAgdmFyIGV4ZWMgPSB0aGlzLmV4ZWM7XG4gICAgaWYgKCFpc0NhbGxhYmxlKGV4ZWMpKSByZXR1cm4gbmF0aXZlVGVzdC5jYWxsKHRoaXMsIHN0cik7XG4gICAgdmFyIHJlc3VsdCA9IGV4ZWMuY2FsbCh0aGlzLCBzdHIpO1xuICAgIGlmIChyZXN1bHQgIT09IG51bGwgJiYgIWlzT2JqZWN0KHJlc3VsdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuICAgIHJldHVybiAhIXJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLlBST1BFUjtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xuXG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xudmFyIG5hdGl2ZVRvU3RyaW5nID0gUmVnRXhwUHJvdG90eXBlW1RPX1NUUklOR107XG5cbnZhciBOT1RfR0VORVJJQyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZVRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPSAnL2EvYic7IH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbnZhciBJTkNPUlJFQ1RfTkFNRSA9IFBST1BFUl9GVU5DVElPTl9OQU1FICYmIG5hdGl2ZVRvU3RyaW5nLm5hbWUgIT0gVE9fU1RSSU5HO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbmlmIChOT1RfR0VORVJJQyB8fCBJTkNPUlJFQ1RfTkFNRSkge1xuICByZWRlZmluZShSZWdFeHAucHJvdG90eXBlLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIHAgPSAkdG9TdHJpbmcoUi5zb3VyY2UpO1xuICAgIHZhciByZiA9IFIuZmxhZ3M7XG4gICAgdmFyIGYgPSAkdG9TdHJpbmcocmYgPT09IHVuZGVmaW5lZCAmJiBSIGluc3RhbmNlb2YgUmVnRXhwICYmICEoJ2ZsYWdzJyBpbiBSZWdFeHBQcm90b3R5cGUpID8gZmxhZ3MuY2FsbChSKSA6IHJmKTtcbiAgICByZXR1cm4gJy8nICsgcCArICcvJyArIGY7XG4gIH0sIHsgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNvbGxlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbicpO1xudmFyIGNvbGxlY3Rpb25TdHJvbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcnKTtcblxuLy8gYFNldGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LW9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gY29sbGVjdGlvbignU2V0JywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFNldCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uU3Ryb25nKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIEZPUkNFRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICfwoK63Jy5hdCgwKSAhPT0gJ1xcdUQ4NDInO1xufSk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXJlbGF0aXZlLWluZGV4aW5nLW1ldGhvZFxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGF0OiBmdW5jdGlvbiBhdChpbmRleCkge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSk7XG4gICAgdmFyIGxlbiA9IFMubGVuZ3RoO1xuICAgIHZhciByZWxhdGl2ZUluZGV4ID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gICAgdmFyIGsgPSByZWxhdGl2ZUluZGV4ID49IDAgPyByZWxhdGl2ZUluZGV4IDogbGVuICsgcmVsYXRpdmVJbmRleDtcbiAgICByZXR1cm4gKGsgPCAwIHx8IGsgPj0gbGVuKSA/IHVuZGVmaW5lZCA6IFMuY2hhckF0KGspO1xuICB9XG59KTtcbiIsInZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKENPTlZFUlRfVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIHBvcykge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlck9ySW5maW5pdHkocG9zKTtcbiAgICB2YXIgc2l6ZSA9IFMubGVuZ3RoO1xuICAgIHZhciBmaXJzdCwgc2Vjb25kO1xuICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gc2l6ZSkgcmV0dXJuIENPTlZFUlRfVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgZmlyc3QgPSBTLmNoYXJDb2RlQXQocG9zaXRpb24pO1xuICAgIHJldHVybiBmaXJzdCA8IDB4RDgwMCB8fCBmaXJzdCA+IDB4REJGRiB8fCBwb3NpdGlvbiArIDEgPT09IHNpemVcbiAgICAgIHx8IChzZWNvbmQgPSBTLmNoYXJDb2RlQXQocG9zaXRpb24gKyAxKSkgPCAweERDMDAgfHwgc2Vjb25kID4gMHhERkZGXG4gICAgICAgID8gQ09OVkVSVF9UT19TVFJJTkcgPyBTLmNoYXJBdChwb3NpdGlvbikgOiBmaXJzdFxuICAgICAgICA6IENPTlZFUlRfVE9fU1RSSU5HID8gUy5zbGljZShwb3NpdGlvbiwgcG9zaXRpb24gKyAyKSA6IChmaXJzdCAtIDB4RDgwMCA8PCAxMCkgKyAoc2Vjb25kIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjb2RlQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNvZGVBdDtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmNvZGVwb2ludGF0XG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUgfSwge1xuICBjb2RlUG9pbnRBdDogZnVuY3Rpb24gY29kZVBvaW50QXQocG9zKSB7XG4gICAgcmV0dXJuIGNvZGVBdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiIsInZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1yZWdleHAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzUmVnRXhwKGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihcIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9uc1wiKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgTUFUQ0ggPSB3ZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIHZhciByZWdleHAgPSAvLi87XG4gIHRyeSB7XG4gICAgJy8uLydbTUVUSE9EX05BTUVdKHJlZ2V4cCk7XG4gIH0gY2F0Y2ggKGVycm9yMSkge1xuICAgIHRyeSB7XG4gICAgICByZWdleHBbTUFUQ0hdID0gZmFsc2U7XG4gICAgICByZXR1cm4gJy8uLydbTUVUSE9EX05BTUVdKHJlZ2V4cCk7XG4gICAgfSBjYXRjaCAoZXJyb3IyKSB7IC8qIGVtcHR5ICovIH1cbiAgfSByZXR1cm4gZmFsc2U7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIG5vdEFSZWdFeHAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm90LWEtcmVnZXhwJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBjb3JyZWN0SXNSZWdFeHBMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc3RyaW5nLXByb3RvdHlwZS1lbmRzd2l0aCAtLSBzYWZlXG52YXIgJGVuZHNXaXRoID0gJycuZW5kc1dpdGg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbnZhciBDT1JSRUNUX0lTX1JFR0VYUF9MT0dJQyA9IGNvcnJlY3RJc1JlZ0V4cExvZ2ljKCdlbmRzV2l0aCcpO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvcHVsbC83MDJcbnZhciBNRE5fUE9MWUZJTExfQlVHID0gIUlTX1BVUkUgJiYgIUNPUlJFQ1RfSVNfUkVHRVhQX0xPR0lDICYmICEhZnVuY3Rpb24gKCkge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihTdHJpbmcucHJvdG90eXBlLCAnZW5kc1dpdGgnKTtcbiAgcmV0dXJuIGRlc2NyaXB0b3IgJiYgIWRlc2NyaXB0b3Iud3JpdGFibGU7XG59KCk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5lbmRzd2l0aFxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFNRE5fUE9MWUZJTExfQlVHICYmICFDT1JSRUNUX0lTX1JFR0VYUF9MT0dJQyB9LCB7XG4gIGVuZHNXaXRoOiBmdW5jdGlvbiBlbmRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBlbmRQb3NpdGlvbiA9IEBsZW5ndGggKi8pIHtcbiAgICB2YXIgdGhhdCA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpO1xuICAgIG5vdEFSZWdFeHAoc2VhcmNoU3RyaW5nKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdGhhdC5sZW5ndGg7XG4gICAgdmFyIGVuZCA9IGVuZFBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBsZW4gOiBtaW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSB0b1N0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkZW5kc1dpdGhcbiAgICAgID8gJGVuZHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBlbmQpXG4gICAgICA6IHRoYXQuc2xpY2UoZW5kIC0gc2VhcmNoLmxlbmd0aCwgZW5kKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xuXG52YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zdHJpbmctZnJvbWNvZGVwb2ludCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbnZhciBJTkNPUlJFQ1RfTEVOR1RIID0gISEkZnJvbUNvZGVQb2ludCAmJiAkZnJvbUNvZGVQb2ludC5sZW5ndGggIT0gMTtcblxuLy8gYFN0cmluZy5mcm9tQ29kZVBvaW50YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLmZyb21jb2RlcG9pbnRcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVF9MRU5HVEggfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHtcbiAgICB2YXIgZWxlbWVudHMgPSBbXTtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGNvZGU7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgIGNvZGUgPSArYXJndW1lbnRzW2krK107XG4gICAgICBpZiAodG9BYnNvbHV0ZUluZGV4KGNvZGUsIDB4MTBGRkZGKSAhPT0gY29kZSkgdGhyb3cgUmFuZ2VFcnJvcihjb2RlICsgJyBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Jyk7XG4gICAgICBlbGVtZW50cy5wdXNoKGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweEQ4MDAsIGNvZGUgJSAweDQwMCArIDB4REMwMClcbiAgICAgICk7XG4gICAgfSByZXR1cm4gZWxlbWVudHMuam9pbignJyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgbm90QVJlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ub3QtYS1yZWdleHAnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGNvcnJlY3RJc1JlZ0V4cExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtaXMtcmVnZXhwLWxvZ2ljJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlc1xuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFjb3JyZWN0SXNSZWdFeHBMb2dpYygnaW5jbHVkZXMnKSB9LCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICByZXR1cm4gISF+dG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSlcbiAgICAgIC5pbmRleE9mKHRvU3RyaW5nKG5vdEFSZWdFeHAoc2VhcmNoU3RyaW5nKSksIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2hhckF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jaGFyQXQ7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1pdGVyYXRvcicpO1xuXG52YXIgU1RSSU5HX0lURVJBVE9SID0gJ1N0cmluZyBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTVFJJTkdfSVRFUkFUT1IpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUtQEBpdGVyYXRvclxuZGVmaW5lSXRlcmF0b3IoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFNUUklOR19JVEVSQVRPUixcbiAgICBzdHJpbmc6IHRvU3RyaW5nKGl0ZXJhdGVkKSxcbiAgICBpbmRleDogMFxuICB9KTtcbi8vIGAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lc3RyaW5naXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciBzdHJpbmcgPSBzdGF0ZS5zdHJpbmc7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4O1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBzdHJpbmcubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHBvaW50ID0gY2hhckF0KHN0cmluZywgaW5kZXgpO1xuICBzdGF0ZS5pbmRleCArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7IHZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2UgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBtb3ZlZCB0byBlbnRyeSBwb2ludHNcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMsIEZPUkNFRCwgU0hBTSkge1xuICB2YXIgU1lNQk9MID0gd2VsbEtub3duU3ltYm9sKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0VwIG1ldGhvZHNcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG5cbiAgICBpZiAoS0VZID09PSAnc3BsaXQnKSB7XG4gICAgICAvLyBXZSBjYW4ndCB1c2UgcmVhbCByZWdleCBoZXJlIHNpbmNlIGl0IGNhdXNlcyBkZW9wdGltaXphdGlvblxuICAgICAgLy8gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gaW4gVjhcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMDZcbiAgICAgIHJlID0ge307XG4gICAgICAvLyBSZWdFeHBbQEBzcGxpdF0gZG9lc24ndCBjYWxsIHRoZSByZWdleCdzIGV4ZWMgbWV0aG9kLCBidXQgZmlyc3QgY3JlYXRlc1xuICAgICAgLy8gYSBuZXcgb25lLiBXZSBuZWVkIHRvIHJldHVybiB0aGUgcGF0Y2hlZCByZWdleCB3aGVuIGNyZWF0aW5nIHRoZSBuZXcgb25lLlxuICAgICAgcmUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgIHJlLmNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmU7IH07XG4gICAgICByZS5mbGFncyA9ICcnO1xuICAgICAgcmVbU1lNQk9MXSA9IC8uL1tTWU1CT0xdO1xuICAgIH1cblxuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IGV4ZWNDYWxsZWQgPSB0cnVlOyByZXR1cm4gbnVsbDsgfTtcblxuICAgIHJlW1NZTUJPTF0oJycpO1xuICAgIHJldHVybiAhZXhlY0NhbGxlZDtcbiAgfSk7XG5cbiAgaWYgKFxuICAgICFERUxFR0FURVNfVE9fU1lNQk9MIHx8XG4gICAgIURFTEVHQVRFU19UT19FWEVDIHx8XG4gICAgRk9SQ0VEXG4gICkge1xuICAgIHZhciBuYXRpdmVSZWdFeHBNZXRob2QgPSAvLi9bU1lNQk9MXTtcbiAgICB2YXIgbWV0aG9kcyA9IGV4ZWMoU1lNQk9MLCAnJ1tLRVldLCBmdW5jdGlvbiAobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgIHZhciAkZXhlYyA9IHJlZ2V4cC5leGVjO1xuICAgICAgaWYgKCRleGVjID09PSByZWdleHBFeGVjIHx8ICRleGVjID09PSBSZWdFeHBQcm90b3R5cGUuZXhlYykge1xuICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAvLyBwb2x5ZmlsbGVkIGZ1bmN0aW9uKSwgbGVhc2luZyB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlUmVnRXhwTWV0aG9kLmNhbGwocmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZU1ldGhvZC5jYWxsKHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICB9KTtcblxuICAgIHJlZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIEtFWSwgbWV0aG9kc1swXSk7XG4gICAgcmVkZWZpbmUoUmVnRXhwUHJvdG90eXBlLCBTWU1CT0wsIG1ldGhvZHNbMV0pO1xuICB9XG5cbiAgaWYgKFNIQU0pIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShSZWdFeHBQcm90b3R5cGVbU1lNQk9MXSwgJ3NoYW0nLCB0cnVlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2hhckF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jaGFyQXQ7XG5cbi8vIGBBZHZhbmNlU3RyaW5nSW5kZXhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gY2hhckF0KFMsIGluZGV4KS5sZW5ndGggOiAxKTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG5cbi8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKGlzQ2FsbGFibGUoZXhlYykpIHtcbiAgICB2YXIgcmVzdWx0ID0gZXhlYy5jYWxsKFIsIFMpO1xuICAgIGlmIChyZXN1bHQgIT09IG51bGwpIGFuT2JqZWN0KHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoY2xhc3NvZihSKSA9PT0gJ1JlZ0V4cCcpIHJldHVybiByZWdleHBFeGVjLmNhbGwoUiwgUyk7XG4gIHRocm93IFR5cGVFcnJvcignUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlcicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ21hdGNoJywgZnVuY3Rpb24gKE1BVENILCBuYXRpdmVNYXRjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUubWF0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgICAgdmFyIG1hdGNoZXIgPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogZ2V0TWV0aG9kKHJlZ2V4cCwgTUFUQ0gpO1xuICAgICAgcmV0dXJuIG1hdGNoZXIgPyBtYXRjaGVyLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0odG9TdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQG1hdGNoXG4gICAgZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QodGhpcyk7XG4gICAgICB2YXIgUyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZU1hdGNoLCByeCwgUyk7XG5cbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcblxuICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgdmFyIG4gPSAwO1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHdoaWxlICgocmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUykpICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN0cmluZy1wcm90b3R5cGUtbWF0Y2hhbGwgLS0gc2FmZSAqL1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlcmF0b3ItY29uc3RydWN0b3InKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1yZWdleHAnKTtcbnZhciBnZXRSZWdFeHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBNQVRDSF9BTEwgPSB3ZWxsS25vd25TeW1ib2woJ21hdGNoQWxsJyk7XG52YXIgUkVHRVhQX1NUUklORyA9ICdSZWdFeHAgU3RyaW5nJztcbnZhciBSRUdFWFBfU1RSSU5HX0lURVJBVE9SID0gUkVHRVhQX1NUUklORyArICcgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoUkVHRVhQX1NUUklOR19JVEVSQVRPUik7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcbnZhciBuYXRpdmVNYXRjaEFsbCA9ICcnLm1hdGNoQWxsO1xuXG52YXIgV09SS1NfV0lUSF9OT05fR0xPQkFMX1JFR0VYID0gISFuYXRpdmVNYXRjaEFsbCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAnYScubWF0Y2hBbGwoLy4vKTtcbn0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlbiAtLSBpZ25vcmVcbnZhciAkUmVnRXhwU3RyaW5nSXRlcmF0b3IgPSBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKGZ1bmN0aW9uIFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKHJlZ2V4cCwgc3RyaW5nLCBnbG9iYWwsIGZ1bGxVbmljb2RlKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFJFR0VYUF9TVFJJTkdfSVRFUkFUT1IsXG4gICAgcmVnZXhwOiByZWdleHAsXG4gICAgc3RyaW5nOiBzdHJpbmcsXG4gICAgZ2xvYmFsOiBnbG9iYWwsXG4gICAgdW5pY29kZTogZnVsbFVuaWNvZGUsXG4gICAgZG9uZTogZmFsc2VcbiAgfSk7XG59LCBSRUdFWFBfU1RSSU5HLCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB2YXIgUiA9IHN0YXRlLnJlZ2V4cDtcbiAgdmFyIFMgPSBzdGF0ZS5zdHJpbmc7XG4gIHZhciBtYXRjaCA9IHJlZ0V4cEV4ZWMoUiwgUyk7XG4gIGlmIChtYXRjaCA9PT0gbnVsbCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogc3RhdGUuZG9uZSA9IHRydWUgfTtcbiAgaWYgKHN0YXRlLmdsb2JhbCkge1xuICAgIGlmICh0b1N0cmluZyhtYXRjaFswXSkgPT09ICcnKSBSLmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChSLmxhc3RJbmRleCksIHN0YXRlLnVuaWNvZGUpO1xuICAgIHJldHVybiB7IHZhbHVlOiBtYXRjaCwgZG9uZTogZmFsc2UgfTtcbiAgfVxuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgcmV0dXJuIHsgdmFsdWU6IG1hdGNoLCBkb25lOiBmYWxzZSB9O1xufSk7XG5cbnZhciAkbWF0Y2hBbGwgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciBTID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgdmFyIEMsIGZsYWdzVmFsdWUsIGZsYWdzLCBtYXRjaGVyLCBnbG9iYWwsIGZ1bGxVbmljb2RlO1xuICBDID0gc3BlY2llc0NvbnN0cnVjdG9yKFIsIFJlZ0V4cCk7XG4gIGZsYWdzVmFsdWUgPSBSLmZsYWdzO1xuICBpZiAoZmxhZ3NWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIFIgaW5zdGFuY2VvZiBSZWdFeHAgJiYgISgnZmxhZ3MnIGluIFJlZ0V4cFByb3RvdHlwZSkpIHtcbiAgICBmbGFnc1ZhbHVlID0gZ2V0UmVnRXhwRmxhZ3MuY2FsbChSKTtcbiAgfVxuICBmbGFncyA9IGZsYWdzVmFsdWUgPT09IHVuZGVmaW5lZCA/ICcnIDogdG9TdHJpbmcoZmxhZ3NWYWx1ZSk7XG4gIG1hdGNoZXIgPSBuZXcgQyhDID09PSBSZWdFeHAgPyBSLnNvdXJjZSA6IFIsIGZsYWdzKTtcbiAgZ2xvYmFsID0gISF+ZmxhZ3MuaW5kZXhPZignZycpO1xuICBmdWxsVW5pY29kZSA9ICEhfmZsYWdzLmluZGV4T2YoJ3UnKTtcbiAgbWF0Y2hlci5sYXN0SW5kZXggPSB0b0xlbmd0aChSLmxhc3RJbmRleCk7XG4gIHJldHVybiBuZXcgJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKG1hdGNoZXIsIFMsIGdsb2JhbCwgZnVsbFVuaWNvZGUpO1xufTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGxgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLm1hdGNoYWxsXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogV09SS1NfV0lUSF9OT05fR0xPQkFMX1JFR0VYIH0sIHtcbiAgbWF0Y2hBbGw6IGZ1bmN0aW9uIG1hdGNoQWxsKHJlZ2V4cCkge1xuICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICB2YXIgZmxhZ3MsIFMsIG1hdGNoZXIsIHJ4O1xuICAgIGlmIChyZWdleHAgIT0gbnVsbCkge1xuICAgICAgaWYgKGlzUmVnRXhwKHJlZ2V4cCkpIHtcbiAgICAgICAgZmxhZ3MgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCdmbGFncycgaW4gUmVnRXhwUHJvdG90eXBlXG4gICAgICAgICAgPyByZWdleHAuZmxhZ3NcbiAgICAgICAgICA6IGdldFJlZ0V4cEZsYWdzLmNhbGwocmVnZXhwKVxuICAgICAgICApKTtcbiAgICAgICAgaWYgKCF+ZmxhZ3MuaW5kZXhPZignZycpKSB0aHJvdyBUeXBlRXJyb3IoJ2AubWF0Y2hBbGxgIGRvZXMgbm90IGFsbG93IG5vbi1nbG9iYWwgcmVnZXhlcycpO1xuICAgICAgfVxuICAgICAgaWYgKFdPUktTX1dJVEhfTk9OX0dMT0JBTF9SRUdFWCkgcmV0dXJuIG5hdGl2ZU1hdGNoQWxsLmFwcGx5KE8sIGFyZ3VtZW50cyk7XG4gICAgICBtYXRjaGVyID0gZ2V0TWV0aG9kKHJlZ2V4cCwgTUFUQ0hfQUxMKTtcbiAgICAgIGlmIChtYXRjaGVyID09PSB1bmRlZmluZWQgJiYgSVNfUFVSRSAmJiBjbGFzc29mKHJlZ2V4cCkgPT0gJ1JlZ0V4cCcpIG1hdGNoZXIgPSAkbWF0Y2hBbGw7XG4gICAgICBpZiAobWF0Y2hlcikgcmV0dXJuIG1hdGNoZXIuY2FsbChyZWdleHAsIE8pO1xuICAgIH0gZWxzZSBpZiAoV09SS1NfV0lUSF9OT05fR0xPQkFMX1JFR0VYKSByZXR1cm4gbmF0aXZlTWF0Y2hBbGwuYXBwbHkoTywgYXJndW1lbnRzKTtcbiAgICBTID0gdG9TdHJpbmcoTyk7XG4gICAgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cCwgJ2cnKTtcbiAgICByZXR1cm4gSVNfUFVSRSA/ICRtYXRjaEFsbC5jYWxsKHJ4LCBTKSA6IHJ4W01BVENIX0FMTF0oUyk7XG4gIH1cbn0pO1xuXG5JU19QVVJFIHx8IE1BVENIX0FMTCBpbiBSZWdFeHBQcm90b3R5cGUgfHwgcmVkZWZpbmUoUmVnRXhwUHJvdG90eXBlLCBNQVRDSF9BTEwsICRtYXRjaEFsbCk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMjgwXG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL1ZlcnNpb25cXC8xMCg/OlxcLlxcZCspezEsMn0oPzogW1xcdy4vXSspPyg/OiBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkcGFkRW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1wYWQnKS5lbmQ7XG52YXIgV0VCS0lUX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctcGFkLXdlYmtpdC1idWcnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUucGFkRW5kYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5wYWRlbmRcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBXRUJLSVRfQlVHIH0sIHtcbiAgcGFkRW5kOiBmdW5jdGlvbiBwYWRFbmQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkRW5kKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRwYWRTdGFydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctcGFkJykuc3RhcnQ7XG52YXIgV0VCS0lUX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctcGFkLXdlYmtpdC1idWcnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUucGFkU3RhcnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnBhZHN0YXJ0XG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogV0VCS0lUX0JVRyB9LCB7XG4gIHBhZFN0YXJ0OiBmdW5jdGlvbiBwYWRTdGFydChtYXhMZW5ndGggLyogLCBmaWxsU3RyaW5nID0gJyAnICovKSB7XG4gICAgcmV0dXJuICRwYWRTdGFydCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xuXG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG52YXIgcHVzaCA9IEFycmF5UHJvdG90eXBlLnB1c2g7XG52YXIgam9pbiA9IEFycmF5UHJvdG90eXBlLmpvaW47XG5cbi8vIGBTdHJpbmcucmF3YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnJhd1xuJCh7IHRhcmdldDogJ1N0cmluZycsIHN0YXQ6IHRydWUgfSwge1xuICByYXc6IGZ1bmN0aW9uIHJhdyh0ZW1wbGF0ZSkge1xuICAgIHZhciByYXdUZW1wbGF0ZSA9IHRvSW5kZXhlZE9iamVjdCh0b09iamVjdCh0ZW1wbGF0ZSkucmF3KTtcbiAgICB2YXIgbGl0ZXJhbFNlZ21lbnRzID0gbGVuZ3RoT2ZBcnJheUxpa2UocmF3VGVtcGxhdGUpO1xuICAgIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBlbGVtZW50cyA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAobGl0ZXJhbFNlZ21lbnRzID4gaSkge1xuICAgICAgcHVzaC5jYWxsKGVsZW1lbnRzLCB0b1N0cmluZyhyYXdUZW1wbGF0ZVtpKytdKSk7XG4gICAgICBpZiAoaSA9PT0gbGl0ZXJhbFNlZ21lbnRzKSByZXR1cm4gam9pbi5jYWxsKGVsZW1lbnRzLCAnJyk7XG4gICAgICBpZiAoaSA8IGFyZ3VtZW50c0xlbmd0aCkgcHVzaC5jYWxsKGVsZW1lbnRzLCB0b1N0cmluZyhhcmd1bWVudHNbaV0pKTtcbiAgICB9XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1yZXBlYXQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUucmVwZWF0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBlYXRcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSB9LCB7XG4gIHJlcGVhdDogcmVwZWF0XG59KTtcbiIsInZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciByZXBsYWNlID0gJycucmVwbGFjZTtcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MUyA9IC9cXCQoWyQmJ2BdfFxcZHsxLDJ9fDxbXj5dKj4pL2c7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQgPSAvXFwkKFskJidgXXxcXGR7MSwyfSkvZztcblxuLy8gYEdldFN1YnN0aXR1dGlvbmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldHN1YnN0aXR1dGlvblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWF0Y2hlZCwgc3RyLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VtZW50KSB7XG4gIHZhciB0YWlsUG9zID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gIHZhciBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQ7XG4gIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTO1xuICB9XG4gIHJldHVybiByZXBsYWNlLmNhbGwocmVwbGFjZW1lbnQsIHN5bWJvbHMsIGZ1bmN0aW9uIChtYXRjaCwgY2gpIHtcbiAgICB2YXIgY2FwdHVyZTtcbiAgICBzd2l0Y2ggKGNoLmNoYXJBdCgwKSkge1xuICAgICAgY2FzZSAnJCc6IHJldHVybiAnJCc7XG4gICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICBjYXNlICdgJzogcmV0dXJuIHN0ci5zbGljZSgwLCBwb3NpdGlvbik7XG4gICAgICBjYXNlIFwiJ1wiOiByZXR1cm4gc3RyLnNsaWNlKHRhaWxQb3MpO1xuICAgICAgY2FzZSAnPCc6XG4gICAgICAgIGNhcHR1cmUgPSBuYW1lZENhcHR1cmVzW2NoLnNsaWNlKDEsIC0xKV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgaWYgKG4gPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgIGlmIChmID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfVxuICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgIH1cbiAgICByZXR1cm4gY2FwdHVyZSA9PT0gdW5kZWZpbmVkID8gJycgOiBjYXB0dXJlO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBnZXRTdWJzdGl0dXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXN1YnN0aXR1dGlvbicpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFJFUExBQ0UgPSB3ZWxsS25vd25TeW1ib2woJ3JlcGxhY2UnKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBJRSA8PSAxMSByZXBsYWNlcyAkMCB3aXRoIHRoZSB3aG9sZSBtYXRjaCwgYXMgaWYgaXQgd2FzICQmXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy82MDI0NjY2L2dldHRpbmctaWUtdG8tcmVwbGFjZS1hLXJlZ2V4LXdpdGgtdGhlLWxpdGVyYWwtc3RyaW5nLTBcbnZhciBSRVBMQUNFX0tFRVBTXyQwID0gKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9wcmVmZXItZXNjYXBlLXJlcGxhY2VtZW50LWRvbGxhci1jaGFyIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiAnYScucmVwbGFjZSgvLi8sICckMCcpID09PSAnJDAnO1xufSkoKTtcblxuLy8gU2FmYXJpIDw9IDEzLjAuMyg/KSBzdWJzdGl0dXRlcyBudGggY2FwdHVyZSB3aGVyZSBuPm0gd2l0aCBhbiBlbXB0eSBzdHJpbmdcbnZhciBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSA9IChmdW5jdGlvbiAoKSB7XG4gIGlmICgvLi9bUkVQTEFDRV0pIHtcbiAgICByZXR1cm4gLy4vW1JFUExBQ0VdKCdhJywgJyQwJykgPT09ICcnO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn0pKCk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9IC8uLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0Lmdyb3VwcyA9IHsgYTogJzcnIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby11c2VsZXNzLWRvbGxhci1yZXBsYWNlbWVudHMgLS0gZmFsc2UgcG9zaXRpdmVcbiAgcmV0dXJuICcnLnJlcGxhY2UocmUsICckPGE+JykgIT09ICc3Jztcbn0pO1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbmZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljKCdyZXBsYWNlJywgZnVuY3Rpb24gKF8sIG5hdGl2ZVJlcGxhY2UsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgVU5TQUZFX1NVQlNUSVRVVEUgPSBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSA/ICckJyA6ICckMCc7XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucmVwbGFjZVxuICAgIGZ1bmN0aW9uIHJlcGxhY2Uoc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgICAgdmFyIHJlcGxhY2VyID0gc2VhcmNoVmFsdWUgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogZ2V0TWV0aG9kKHNlYXJjaFZhbHVlLCBSRVBMQUNFKTtcbiAgICAgIHJldHVybiByZXBsYWNlclxuICAgICAgICA/IHJlcGxhY2VyLmNhbGwoc2VhcmNoVmFsdWUsIE8sIHJlcGxhY2VWYWx1ZSlcbiAgICAgICAgOiBuYXRpdmVSZXBsYWNlLmNhbGwodG9TdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAcmVwbGFjZVxuICAgIGZ1bmN0aW9uIChzdHJpbmcsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QodGhpcyk7XG4gICAgICB2YXIgUyA9IHRvU3RyaW5nKHN0cmluZyk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHJlcGxhY2VWYWx1ZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgcmVwbGFjZVZhbHVlLmluZGV4T2YoVU5TQUZFX1NVQlNUSVRVVEUpID09PSAtMSAmJlxuICAgICAgICByZXBsYWNlVmFsdWUuaW5kZXhPZignJDwnKSA9PT0gLTFcbiAgICAgICkge1xuICAgICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZVJlcGxhY2UsIHJ4LCBTLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IGlzQ2FsbGFibGUocmVwbGFjZVZhbHVlKTtcbiAgICAgIGlmICghZnVuY3Rpb25hbFJlcGxhY2UpIHJlcGxhY2VWYWx1ZSA9IHRvU3RyaW5nKHJlcGxhY2VWYWx1ZSk7XG5cbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcblxuICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgaWYgKCFnbG9iYWwpIGJyZWFrO1xuXG4gICAgICAgIHZhciBtYXRjaFN0ciA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcblxuICAgICAgICB2YXIgbWF0Y2hlZCA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyT3JJbmZpbml0eShyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIC8vICAgY2FwdHVyZXMgPSByZXN1bHQuc2xpY2UoMSkubWFwKG1heWJlVG9TdHJpbmcpXG4gICAgICAgIC8vIGJ1dCBmb3Igc29tZSByZWFzb24gYG5hdGl2ZVNsaWNlLmNhbGwocmVzdWx0LCAxLCByZXN1bHQubGVuZ3RoKWAgKGNhbGxlZCBpblxuICAgICAgICAvLyB0aGUgc2xpY2UgcG9seWZpbGwgd2hlbiBzbGljaW5nIG5hdGl2ZSBhcnJheXMpIFwiZG9lc24ndCB3b3JrXCIgaW4gc2FmYXJpIDkgYW5kXG4gICAgICAgIC8vIGNhdXNlcyBhIGNyYXNoIChodHRwczovL3Bhc3RlYmluLmNvbS9OMjFRemVRQSkgd2hlbiB0cnlpbmcgdG8gZGVidWcgaXQuXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSBjYXB0dXJlcy5wdXNoKG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IFttYXRjaGVkXS5jb25jYXQoY2FwdHVyZXMsIHBvc2l0aW9uLCBTKTtcbiAgICAgICAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSByZXBsYWNlckFyZ3MucHVzaChuYW1lZENhcHR1cmVzKTtcbiAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSB0b1N0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xufSwgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTIHx8ICFSRVBMQUNFX0tFRVBTXyQwIHx8IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXJlZ2V4cCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgZ2V0UmVnRXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzJyk7XG52YXIgZ2V0U3Vic3RpdHV0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zdWJzdGl0dXRpb24nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxudmFyIFJFUExBQ0UgPSB3ZWxsS25vd25TeW1ib2woJ3JlcGxhY2UnKTtcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG52YXIgc3RyaW5nSW5kZXhPZiA9IGZ1bmN0aW9uIChzdHJpbmcsIHNlYXJjaFZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgaWYgKGZyb21JbmRleCA+IHN0cmluZy5sZW5ndGgpIHJldHVybiAtMTtcbiAgaWYgKHNlYXJjaFZhbHVlID09PSAnJykgcmV0dXJuIGZyb21JbmRleDtcbiAgcmV0dXJuIHN0cmluZy5pbmRleE9mKHNlYXJjaFZhbHVlLCBmcm9tSW5kZXgpO1xufTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZUFsbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucmVwbGFjZWFsbFxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlIH0sIHtcbiAgcmVwbGFjZUFsbDogZnVuY3Rpb24gcmVwbGFjZUFsbChzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgIHZhciBJU19SRUdfRVhQLCBmbGFncywgcmVwbGFjZXIsIHN0cmluZywgc2VhcmNoU3RyaW5nLCBmdW5jdGlvbmFsUmVwbGFjZSwgc2VhcmNoTGVuZ3RoLCBhZHZhbmNlQnksIHJlcGxhY2VtZW50O1xuICAgIHZhciBwb3NpdGlvbiA9IDA7XG4gICAgdmFyIGVuZE9mTGFzdE1hdGNoID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgaWYgKHNlYXJjaFZhbHVlICE9IG51bGwpIHtcbiAgICAgIElTX1JFR19FWFAgPSBpc1JlZ0V4cChzZWFyY2hWYWx1ZSk7XG4gICAgICBpZiAoSVNfUkVHX0VYUCkge1xuICAgICAgICBmbGFncyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJ2ZsYWdzJyBpbiBSZWdFeHBQcm90b3R5cGVcbiAgICAgICAgICA/IHNlYXJjaFZhbHVlLmZsYWdzXG4gICAgICAgICAgOiBnZXRSZWdFeHBGbGFncy5jYWxsKHNlYXJjaFZhbHVlKVxuICAgICAgICApKTtcbiAgICAgICAgaWYgKCF+ZmxhZ3MuaW5kZXhPZignZycpKSB0aHJvdyBUeXBlRXJyb3IoJ2AucmVwbGFjZUFsbGAgZG9lcyBub3QgYWxsb3cgbm9uLWdsb2JhbCByZWdleGVzJyk7XG4gICAgICB9XG4gICAgICByZXBsYWNlciA9IGdldE1ldGhvZChzZWFyY2hWYWx1ZSwgUkVQTEFDRSk7XG4gICAgICBpZiAocmVwbGFjZXIpIHtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VyLmNhbGwoc2VhcmNoVmFsdWUsIE8sIHJlcGxhY2VWYWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKElTX1BVUkUgJiYgSVNfUkVHX0VYUCkge1xuICAgICAgICByZXR1cm4gdG9TdHJpbmcoTykucmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgc3RyaW5nID0gdG9TdHJpbmcoTyk7XG4gICAgc2VhcmNoU3RyaW5nID0gdG9TdHJpbmcoc2VhcmNoVmFsdWUpO1xuICAgIGZ1bmN0aW9uYWxSZXBsYWNlID0gaXNDYWxsYWJsZShyZXBsYWNlVmFsdWUpO1xuICAgIGlmICghZnVuY3Rpb25hbFJlcGxhY2UpIHJlcGxhY2VWYWx1ZSA9IHRvU3RyaW5nKHJlcGxhY2VWYWx1ZSk7XG4gICAgc2VhcmNoTGVuZ3RoID0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgICBhZHZhbmNlQnkgPSBtYXgoMSwgc2VhcmNoTGVuZ3RoKTtcbiAgICBwb3NpdGlvbiA9IHN0cmluZ0luZGV4T2Yoc3RyaW5nLCBzZWFyY2hTdHJpbmcsIDApO1xuICAgIHdoaWxlIChwb3NpdGlvbiAhPT0gLTEpIHtcbiAgICAgIGlmIChmdW5jdGlvbmFsUmVwbGFjZSkge1xuICAgICAgICByZXBsYWNlbWVudCA9IHRvU3RyaW5nKHJlcGxhY2VWYWx1ZShzZWFyY2hTdHJpbmcsIHBvc2l0aW9uLCBzdHJpbmcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0aW9uKHNlYXJjaFN0cmluZywgc3RyaW5nLCBwb3NpdGlvbiwgW10sIHVuZGVmaW5lZCwgcmVwbGFjZVZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCArPSBzdHJpbmcuc2xpY2UoZW5kT2ZMYXN0TWF0Y2gsIHBvc2l0aW9uKSArIHJlcGxhY2VtZW50O1xuICAgICAgZW5kT2ZMYXN0TWF0Y2ggPSBwb3NpdGlvbiArIHNlYXJjaExlbmd0aDtcbiAgICAgIHBvc2l0aW9uID0gc3RyaW5nSW5kZXhPZihzdHJpbmcsIHNlYXJjaFN0cmluZywgcG9zaXRpb24gKyBhZHZhbmNlQnkpO1xuICAgIH1cbiAgICBpZiAoZW5kT2ZMYXN0TWF0Y2ggPCBzdHJpbmcubGVuZ3RoKSB7XG4gICAgICByZXN1bHQgKz0gc3RyaW5nLnNsaWNlKGVuZE9mTGFzdE1hdGNoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NhbWUtdmFsdWUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBzZWFyY2ggbG9naWNcbmZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljKCdzZWFyY2gnLCBmdW5jdGlvbiAoU0VBUkNILCBuYXRpdmVTZWFyY2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNlYXJjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNlYXJjaFxuICAgIGZ1bmN0aW9uIHNlYXJjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICAgIHZhciBzZWFyY2hlciA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBnZXRNZXRob2QocmVnZXhwLCBTRUFSQ0gpO1xuICAgICAgcmV0dXJuIHNlYXJjaGVyID8gc2VhcmNoZXIuY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW1NFQVJDSF0odG9TdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzZWFyY2hcbiAgICBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdCh0aGlzKTtcbiAgICAgIHZhciBTID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUobmF0aXZlU2VhcmNoLCByeCwgUyk7XG5cbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1yZWdleHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBjYWxsUmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcbnZhciBzdGlja3lIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBVTlNVUFBPUlRFRF9ZID0gc3RpY2t5SGVscGVycy5VTlNVUFBPUlRFRF9ZO1xudmFyIGFycmF5UHVzaCA9IFtdLnB1c2g7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgTUFYX1VJTlQzMiA9IDB4RkZGRkZGRkY7XG5cbi8vIENocm9tZSA1MSBoYXMgYSBidWdneSBcInNwbGl0XCIgaW1wbGVtZW50YXRpb24gd2hlbiBSZWdFeHAjZXhlYyAhPT0gbmF0aXZlRXhlY1xuLy8gV2VleCBKUyBoYXMgZnJvemVuIGJ1aWx0LWluIHByb3RvdHlwZXMsIHNvIHVzZSB0cnkgLyBjYXRjaCB3cmFwcGVyXG52YXIgU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1lbXB0eS1ncm91cCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICB2YXIgcmUgPSAvKD86KS87XG4gIHZhciBvcmlnaW5hbEV4ZWMgPSByZS5leGVjO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3JpZ2luYWxFeGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gIHZhciByZXN1bHQgPSAnYWInLnNwbGl0KHJlKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggIT09IDIgfHwgcmVzdWx0WzBdICE9PSAnYScgfHwgcmVzdWx0WzFdICE9PSAnYic7XG59KTtcblxuLy8gQEBzcGxpdCBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ3NwbGl0JywgZnVuY3Rpb24gKFNQTElULCBuYXRpdmVTcGxpdCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBpbnRlcm5hbFNwbGl0O1xuICBpZiAoXG4gICAgJ2FiYmMnLnNwbGl0KC8oYikqLylbMV0gPT0gJ2MnIHx8XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1lbXB0eS1ncm91cCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgICd0ZXN0Jy5zcGxpdCgvKD86KS8sIC0xKS5sZW5ndGggIT0gNCB8fFxuICAgICdhYicuc3BsaXQoLyg/OmFiKSovKS5sZW5ndGggIT0gMiB8fFxuICAgICcuJy5zcGxpdCgvKC4/KSguPykvKS5sZW5ndGggIT0gNCB8fFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tZW1wdHktY2FwdHVyaW5nLWdyb3VwLCByZWdleHAvbm8tZW1wdHktZ3JvdXAgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgICAnLicuc3BsaXQoLygpKCkvKS5sZW5ndGggPiAxIHx8XG4gICAgJycuc3BsaXQoLy4/LykubGVuZ3RoXG4gICkge1xuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQpIHJldHVybiBbc3RyaW5nXTtcbiAgICAgIC8vIElmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1c2UgbmF0aXZlIHNwbGl0XG4gICAgICBpZiAoIWlzUmVnRXhwKHNlcGFyYXRvcikpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNwbGl0LmNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbSk7XG4gICAgICB9XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHkubGFzdEluZGV4O1xuICAgICAgICBpZiAobGFzdEluZGV4ID4gbGFzdExhc3RJbmRleCkge1xuICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIGlmIChtYXRjaC5sZW5ndGggPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nLmxlbmd0aCkgYXJyYXlQdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDtcbiAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aCA+PSBsaW0pIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5Lmxhc3RJbmRleCA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHkubGFzdEluZGV4Kys7IC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3BcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBzdHJpbmcubGVuZ3RoKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3JDb3B5LnRlc3QoJycpKSBvdXRwdXQucHVzaCgnJyk7XG4gICAgICB9IGVsc2Ugb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKTtcbiAgICAgIHJldHVybiBvdXRwdXQubGVuZ3RoID4gbGltID8gb3V0cHV0LnNsaWNlKDAsIGxpbSkgOiBvdXRwdXQ7XG4gICAgfTtcbiAgLy8gQ2hha3JhLCBWOFxuICB9IGVsc2UgaWYgKCcwJy5zcGxpdCh1bmRlZmluZWQsIDApLmxlbmd0aCkge1xuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgcmV0dXJuIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwID8gW10gOiBuYXRpdmVTcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSBpbnRlcm5hbFNwbGl0ID0gbmF0aXZlU3BsaXQ7XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zcGxpdGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNwbGl0XG4gICAgZnVuY3Rpb24gc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgICAgdmFyIHNwbGl0dGVyID0gc2VwYXJhdG9yID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGdldE1ldGhvZChzZXBhcmF0b3IsIFNQTElUKTtcbiAgICAgIHJldHVybiBzcGxpdHRlclxuICAgICAgICA/IHNwbGl0dGVyLmNhbGwoc2VwYXJhdG9yLCBPLCBsaW1pdClcbiAgICAgICAgOiBpbnRlcm5hbFNwbGl0LmNhbGwodG9TdHJpbmcoTyksIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNwbGl0XG4gICAgLy9cbiAgICAvLyBOT1RFOiBUaGlzIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIGVuZ2luZXMgdGhhdCBkb24ndCBzdXBwb3J0XG4gICAgLy8gdGhlICd5JyBmbGFnLlxuICAgIGZ1bmN0aW9uIChzdHJpbmcsIGxpbWl0KSB7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdCh0aGlzKTtcbiAgICAgIHZhciBTID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoaW50ZXJuYWxTcGxpdCwgcngsIFMsIGxpbWl0LCBpbnRlcm5hbFNwbGl0ICE9PSBuYXRpdmVTcGxpdCk7XG5cbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IocngsIFJlZ0V4cCk7XG5cbiAgICAgIHZhciB1bmljb2RlTWF0Y2hpbmcgPSByeC51bmljb2RlO1xuICAgICAgdmFyIGZsYWdzID0gKHJ4Lmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4Lm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoVU5TVVBQT1JURURfWSA/ICdnJyA6ICd5Jyk7XG5cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBTIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICB2YXIgc3BsaXR0ZXIgPSBuZXcgQyhVTlNVUFBPUlRFRF9ZID8gJ14oPzonICsgcnguc291cmNlICsgJyknIDogcngsIGZsYWdzKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKFMubGVuZ3RoID09PSAwKSByZXR1cm4gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFMpID09PSBudWxsID8gW1NdIDogW107XG4gICAgICB2YXIgcCA9IDA7XG4gICAgICB2YXIgcSA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgd2hpbGUgKHEgPCBTLmxlbmd0aCkge1xuICAgICAgICBzcGxpdHRlci5sYXN0SW5kZXggPSBVTlNVUFBPUlRFRF9ZID8gMCA6IHE7XG4gICAgICAgIHZhciB6ID0gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFVOU1VQUE9SVEVEX1kgPyBTLnNsaWNlKHEpIDogUyk7XG4gICAgICAgIHZhciBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgeiA9PT0gbnVsbCB8fFxuICAgICAgICAgIChlID0gbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChVTlNVUFBPUlRFRF9ZID8gcSA6IDApKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0sICFTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMsIFVOU1VQUE9SVEVEX1kpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIG5vdEFSZWdFeHAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm90LWEtcmVnZXhwJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBjb3JyZWN0SXNSZWdFeHBMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc3RyaW5nLXByb3RvdHlwZS1zdGFydHN3aXRoIC0tIHNhZmVcbnZhciAkc3RhcnRzV2l0aCA9ICcnLnN0YXJ0c1dpdGg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbnZhciBDT1JSRUNUX0lTX1JFR0VYUF9MT0dJQyA9IGNvcnJlY3RJc1JlZ0V4cExvZ2ljKCdzdGFydHNXaXRoJyk7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9wdWxsLzcwMlxudmFyIE1ETl9QT0xZRklMTF9CVUcgPSAhSVNfUFVSRSAmJiAhQ09SUkVDVF9JU19SRUdFWFBfTE9HSUMgJiYgISFmdW5jdGlvbiAoKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFN0cmluZy5wcm90b3R5cGUsICdzdGFydHNXaXRoJyk7XG4gIHJldHVybiBkZXNjcmlwdG9yICYmICFkZXNjcmlwdG9yLndyaXRhYmxlO1xufSgpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zdGFydHN3aXRoXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogIU1ETl9QT0xZRklMTF9CVUcgJiYgIUNPUlJFQ1RfSVNfUkVHRVhQX0xPR0lDIH0sIHtcbiAgc3RhcnRzV2l0aDogZnVuY3Rpb24gc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICB2YXIgdGhhdCA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpO1xuICAgIG5vdEFSZWdFeHAoc2VhcmNoU3RyaW5nKTtcbiAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChtaW4oYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRoYXQubGVuZ3RoKSk7XG4gICAgdmFyIHNlYXJjaCA9IHRvU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRzdGFydHNXaXRoXG4gICAgICA/ICRzdGFydHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBpbmRleClcbiAgICAgIDogdGhhdC5zbGljZShpbmRleCwgaW5kZXggKyBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbnZhciBzbGljZSA9ICcnLnNsaWNlO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItc3RyaW5nLXNsaWNlIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgRk9SQ0VEID0gIScnLnN1YnN0ciB8fCAnYWInLnN1YnN0cigtMSkgIT09ICdiJztcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuc3Vic3RyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zdWJzdHJcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBzdWJzdHI6IGZ1bmN0aW9uIHN1YnN0cihzdGFydCwgbGVuZ3RoKSB7XG4gICAgdmFyIHRoYXQgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpKTtcbiAgICB2YXIgc2l6ZSA9IHRoYXQubGVuZ3RoO1xuICAgIHZhciBpbnRTdGFydCA9IHRvSW50ZWdlck9ySW5maW5pdHkoc3RhcnQpO1xuICAgIHZhciBpbnRMZW5ndGgsIGludEVuZDtcbiAgICBpZiAoaW50U3RhcnQgPT09IEluZmluaXR5KSBpbnRTdGFydCA9IDA7XG4gICAgaWYgKGludFN0YXJ0IDwgMCkgaW50U3RhcnQgPSBtYXgoc2l6ZSArIGludFN0YXJ0LCAwKTtcbiAgICBpbnRMZW5ndGggPSBsZW5ndGggPT09IHVuZGVmaW5lZCA/IHNpemUgOiB0b0ludGVnZXJPckluZmluaXR5KGxlbmd0aCk7XG4gICAgaWYgKGludExlbmd0aCA8PSAwIHx8IGludExlbmd0aCA9PT0gSW5maW5pdHkpIHJldHVybiAnJztcbiAgICBpbnRFbmQgPSBtaW4oaW50U3RhcnQgKyBpbnRMZW5ndGgsIHNpemUpO1xuICAgIHJldHVybiBpbnRTdGFydCA+PSBpbnRFbmQgPyAnJyA6IHNsaWNlLmNhbGwodGhhdCwgaW50U3RhcnQsIGludEVuZCk7XG4gIH1cbn0pO1xuIiwidmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5QUk9QRVI7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgbm9uID0gJ1xcdTIwMEJcXHUwMDg1XFx1MTgwRSc7XG5cbi8vIGNoZWNrIHRoYXQgYSBtZXRob2Qgd29ya3Mgd2l0aCB0aGUgY29ycmVjdCBsaXN0XG4vLyBvZiB3aGl0ZXNwYWNlcyBhbmQgaGFzIGEgY29ycmVjdCBuYW1lXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICByZXR1cm4gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIXdoaXRlc3BhY2VzW01FVEhPRF9OQU1FXSgpXG4gICAgICB8fCBub25bTUVUSE9EX05BTUVdKCkgIT09IG5vblxuICAgICAgfHwgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIHdoaXRlc3BhY2VzW01FVEhPRF9OQU1FXS5uYW1lICE9PSBNRVRIT0RfTkFNRSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICR0cmltID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltJykudHJpbTtcbnZhciBmb3JjZWRTdHJpbmdUcmltTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltLWZvcmNlZCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCgndHJpbScpIH0sIHtcbiAgdHJpbTogZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHRyaW1FbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS5lbmQ7XG52YXIgZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctdHJpbS1mb3JjZWQnKTtcblxudmFyIEZPUkNFRCA9IGZvcmNlZFN0cmluZ1RyaW1NZXRob2QoJ3RyaW1FbmQnKTtcblxudmFyIHRyaW1FbmQgPSBGT1JDRUQgPyBmdW5jdGlvbiB0cmltRW5kKCkge1xuICByZXR1cm4gJHRyaW1FbmQodGhpcyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc3RyaW5nLXByb3RvdHlwZS10cmltc3RhcnQtdHJpbWVuZCAtLSBzYWZlXG59IDogJycudHJpbUVuZDtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltRW5kLCB0cmltUmlnaHQgfWAgbWV0aG9kc1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1lbmRcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNTdHJpbmcucHJvdG90eXBlLnRyaW1yaWdodFxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBuYW1lOiAndHJpbUVuZCcsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgdHJpbUVuZDogdHJpbUVuZCxcbiAgdHJpbVJpZ2h0OiB0cmltRW5kXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICR0cmltU3RhcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS5zdGFydDtcbnZhciBmb3JjZWRTdHJpbmdUcmltTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltLWZvcmNlZCcpO1xuXG52YXIgRk9SQ0VEID0gZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCgndHJpbVN0YXJ0Jyk7XG5cbnZhciB0cmltU3RhcnQgPSBGT1JDRUQgPyBmdW5jdGlvbiB0cmltU3RhcnQoKSB7XG4gIHJldHVybiAkdHJpbVN0YXJ0KHRoaXMpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXN0cmluZy1wcm90b3R5cGUtdHJpbXN0YXJ0LXRyaW1lbmQgLS0gc2FmZVxufSA6ICcnLnRyaW1TdGFydDtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltU3RhcnQsIHRyaW1MZWZ0IH1gIG1ldGhvZHNcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltc3RhcnRcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNTdHJpbmcucHJvdG90eXBlLnRyaW1sZWZ0XG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIG5hbWU6ICd0cmltU3RhcnQnLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIHRyaW1TdGFydDogdHJpbVN0YXJ0LFxuICB0cmltTGVmdDogdHJpbVN0YXJ0XG59KTtcbiIsInZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xuXG52YXIgcXVvdCA9IC9cIi9nO1xuXG4vLyBgQ3JlYXRlSFRNTGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWh0bWxcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZShzdHJpbmcpKTtcbiAgdmFyIHAxID0gJzwnICsgdGFnO1xuICBpZiAoYXR0cmlidXRlICE9PSAnJykgcDEgKz0gJyAnICsgYXR0cmlidXRlICsgJz1cIicgKyB0b1N0cmluZyh2YWx1ZSkucmVwbGFjZShxdW90LCAnJnF1b3Q7JykgKyAnXCInO1xuICByZXR1cm4gcDEgKyAnPicgKyBTICsgJzwvJyArIHRhZyArICc+Jztcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gY2hlY2sgdGhlIGV4aXN0ZW5jZSBvZiBhIG1ldGhvZCwgbG93ZXJjYXNlXG4vLyBvZiBhIHRhZyBhbmQgZXNjYXBpbmcgcXVvdGVzIGluIGFyZ3VtZW50c1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgcmV0dXJuIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdGVzdCA9ICcnW01FVEhPRF9OQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY3JlYXRlSFRNTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaHRtbCcpO1xudmFyIGZvcmNlZFN0cmluZ0hUTUxNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLWh0bWwtZm9yY2VkJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLmFuY2hvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuYW5jaG9yXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCgnYW5jaG9yJykgfSwge1xuICBhbmNob3I6IGZ1bmN0aW9uIGFuY2hvcihuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnbmFtZScsIG5hbWUpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNyZWF0ZUhUTUwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWh0bWwnKTtcbnZhciBmb3JjZWRTdHJpbmdIVE1MTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1odG1sLWZvcmNlZCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5iaWdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmJpZ1xuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGZvcmNlZFN0cmluZ0hUTUxNZXRob2QoJ2JpZycpIH0sIHtcbiAgYmlnOiBmdW5jdGlvbiBiaWcoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JpZycsICcnLCAnJyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY3JlYXRlSFRNTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaHRtbCcpO1xudmFyIGZvcmNlZFN0cmluZ0hUTUxNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLWh0bWwtZm9yY2VkJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLmJsaW5rYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5ibGlua1xuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGZvcmNlZFN0cmluZ0hUTUxNZXRob2QoJ2JsaW5rJykgfSwge1xuICBibGluazogZnVuY3Rpb24gYmxpbmsoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JsaW5rJywgJycsICcnKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjcmVhdGVIVE1MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1odG1sJyk7XG52YXIgZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctaHRtbC1mb3JjZWQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuYm9sZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuYm9sZFxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGZvcmNlZFN0cmluZ0hUTUxNZXRob2QoJ2JvbGQnKSB9LCB7XG4gIGJvbGQ6IGZ1bmN0aW9uIGJvbGQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2InLCAnJywgJycpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNyZWF0ZUhUTUwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWh0bWwnKTtcbnZhciBmb3JjZWRTdHJpbmdIVE1MTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1odG1sLWZvcmNlZCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5maXhlZGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuZml4ZWRcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBmb3JjZWRTdHJpbmdIVE1MTWV0aG9kKCdmaXhlZCcpIH0sIHtcbiAgZml4ZWQ6IGZ1bmN0aW9uIGZpeGVkKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICd0dCcsICcnLCAnJyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY3JlYXRlSFRNTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaHRtbCcpO1xudmFyIGZvcmNlZFN0cmluZ0hUTUxNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLWh0bWwtZm9yY2VkJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLmZvbnRjb2xvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuZm9udGNvbG9yXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCgnZm9udGNvbG9yJykgfSwge1xuICBmb250Y29sb3I6IGZ1bmN0aW9uIGZvbnRjb2xvcihjb2xvcikge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdmb250JywgJ2NvbG9yJywgY29sb3IpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNyZWF0ZUhUTUwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWh0bWwnKTtcbnZhciBmb3JjZWRTdHJpbmdIVE1MTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1odG1sLWZvcmNlZCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5mb250c2l6ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuZm9udHNpemVcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBmb3JjZWRTdHJpbmdIVE1MTWV0aG9kKCdmb250c2l6ZScpIH0sIHtcbiAgZm9udHNpemU6IGZ1bmN0aW9uIGZvbnRzaXplKHNpemUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdzaXplJywgc2l6ZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY3JlYXRlSFRNTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaHRtbCcpO1xudmFyIGZvcmNlZFN0cmluZ0hUTUxNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLWh0bWwtZm9yY2VkJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLml0YWxpY3NgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLml0YWxpY3NcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBmb3JjZWRTdHJpbmdIVE1MTWV0aG9kKCdpdGFsaWNzJykgfSwge1xuICBpdGFsaWNzOiBmdW5jdGlvbiBpdGFsaWNzKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdpJywgJycsICcnKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjcmVhdGVIVE1MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1odG1sJyk7XG52YXIgZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctaHRtbC1mb3JjZWQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUubGlua2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUubGlua1xuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGZvcmNlZFN0cmluZ0hUTUxNZXRob2QoJ2xpbmsnKSB9LCB7XG4gIGxpbms6IGZ1bmN0aW9uIGxpbmsodXJsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnaHJlZicsIHVybCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY3JlYXRlSFRNTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaHRtbCcpO1xudmFyIGZvcmNlZFN0cmluZ0hUTUxNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLWh0bWwtZm9yY2VkJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnNtYWxsYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zbWFsbFxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGZvcmNlZFN0cmluZ0hUTUxNZXRob2QoJ3NtYWxsJykgfSwge1xuICBzbWFsbDogZnVuY3Rpb24gc21hbGwoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3NtYWxsJywgJycsICcnKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjcmVhdGVIVE1MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1odG1sJyk7XG52YXIgZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctaHRtbC1mb3JjZWQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuc3RyaWtlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zdHJpa2VcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBmb3JjZWRTdHJpbmdIVE1MTWV0aG9kKCdzdHJpa2UnKSB9LCB7XG4gIHN0cmlrZTogZnVuY3Rpb24gc3RyaWtlKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdHJpa2UnLCAnJywgJycpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNyZWF0ZUhUTUwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWh0bWwnKTtcbnZhciBmb3JjZWRTdHJpbmdIVE1MTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1odG1sLWZvcmNlZCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5zdWJgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnN1YlxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGZvcmNlZFN0cmluZ0hUTUxNZXRob2QoJ3N1YicpIH0sIHtcbiAgc3ViOiBmdW5jdGlvbiBzdWIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1YicsICcnLCAnJyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY3JlYXRlSFRNTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaHRtbCcpO1xudmFyIGZvcmNlZFN0cmluZ0hUTUxNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLWh0bWwtZm9yY2VkJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnN1cGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3VwXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCgnc3VwJykgfSwge1xuICBzdXA6IGZ1bmN0aW9uIHN1cCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3VwJywgJycsICcnKTtcbiAgfVxufSk7XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXcgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG52YXIgTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJykuTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUztcblxudmFyIEFycmF5QnVmZmVyID0gZ2xvYmFsLkFycmF5QnVmZmVyO1xudmFyIEludDhBcnJheSA9IGdsb2JhbC5JbnQ4QXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gIU5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgSW50OEFycmF5KDEpO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgbmV3IEludDhBcnJheSgtMSk7XG59KSB8fCAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICBuZXcgSW50OEFycmF5KCk7XG4gIG5ldyBJbnQ4QXJyYXkobnVsbCk7XG4gIG5ldyBJbnQ4QXJyYXkoMS41KTtcbiAgbmV3IEludDhBcnJheShpdGVyYWJsZSk7XG59LCB0cnVlKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFNhZmFyaSAoMTErKSBidWcgLSBhIHJlYXNvbiB3aHkgZXZlbiBTYWZhcmkgMTMgc2hvdWxkIGxvYWQgYSB0eXBlZCBhcnJheSBwb2x5ZmlsbFxuICByZXR1cm4gbmV3IEludDhBcnJheShuZXcgQXJyYXlCdWZmZXIoMiksIDEsIHVuZGVmaW5lZCkubGVuZ3RoICE9PSAxO1xufSk7XG4iLCJ2YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSB0b0ludGVnZXJPckluZmluaXR5KGl0KTtcbiAgaWYgKHJlc3VsdCA8IDApIHRocm93IFJhbmdlRXJyb3IoXCJUaGUgYXJndW1lbnQgY2FuJ3QgYmUgbGVzcyB0aGFuIDBcIik7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyIHRvUG9zaXRpdmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXBvc2l0aXZlLWludGVnZXInKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIEJZVEVTKSB7XG4gIHZhciBvZmZzZXQgPSB0b1Bvc2l0aXZlSW50ZWdlcihpdCk7XG4gIGlmIChvZmZzZXQgJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0Jyk7XG4gIHJldHVybiBvZmZzZXQ7XG59O1xuIiwidmFyIGFDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNvbnN0cnVjdG9yJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgYVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJykuYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcGZuLCB0aGlzQXJnICovKSB7XG4gIHZhciBDID0gYUNvbnN0cnVjdG9yKHRoaXMpO1xuICB2YXIgTyA9IHRvT2JqZWN0KHNvdXJjZSk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgbWFwZm4gPSBhcmd1bWVudHNMZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGdldEl0ZXJhdG9yTWV0aG9kKE8pO1xuICB2YXIgaSwgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yLCBuZXh0O1xuICBpZiAoaXRlcmF0b3JNZXRob2QgJiYgIWlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyYXRvck1ldGhvZCkpIHtcbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKE8sIGl0ZXJhdG9yTWV0aG9kKTtcbiAgICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgICBPID0gW107XG4gICAgd2hpbGUgKCEoc3RlcCA9IG5leHQuY2FsbChpdGVyYXRvcikpLmRvbmUpIHtcbiAgICAgIE8ucHVzaChzdGVwLnZhbHVlKTtcbiAgICB9XG4gIH1cbiAgaWYgKG1hcHBpbmcgJiYgYXJndW1lbnRzTGVuZ3RoID4gMikge1xuICAgIG1hcGZuID0gYmluZChtYXBmbiwgYXJndW1lbnRzWzJdLCAyKTtcbiAgfVxuICBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgcmVzdWx0ID0gbmV3IChhVHlwZWRBcnJheUNvbnN0cnVjdG9yKEMpKShsZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBsZW5ndGggPiBpOyBpKyspIHtcbiAgICByZXN1bHRbaV0gPSBtYXBwaW5nID8gbWFwZm4oT1tpXSwgaSkgOiBPW2ldO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVFlQRURfQVJSQVlTX0NPTlNUUlVDVE9SU19SRVFVSVJFU19XUkFQUEVSUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1jb25zdHJ1Y3RvcnMtcmVxdWlyZS13cmFwcGVycycpO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyIEFycmF5QnVmZmVyTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlcicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaXNJbnRlZ3JhbE51bWJlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1pbnRlZ3JhbC1udW1iZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4Jyk7XG52YXIgdG9PZmZzZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2Zmc2V0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJykuZjtcbnZhciB0eXBlZEFycmF5RnJvbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1mcm9tJyk7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xuXG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG52YXIgcm91bmQgPSBNYXRoLnJvdW5kO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbnZhciBBcnJheUJ1ZmZlciA9IEFycmF5QnVmZmVyTW9kdWxlLkFycmF5QnVmZmVyO1xudmFyIERhdGFWaWV3ID0gQXJyYXlCdWZmZXJNb2R1bGUuRGF0YVZpZXc7XG52YXIgTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyA9IEFycmF5QnVmZmVyVmlld0NvcmUuTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUztcbnZhciBUWVBFRF9BUlJBWV9DT05TVFJVQ1RPUiA9IEFycmF5QnVmZmVyVmlld0NvcmUuVFlQRURfQVJSQVlfQ09OU1RSVUNUT1I7XG52YXIgVFlQRURfQVJSQVlfVEFHID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5UWVBFRF9BUlJBWV9UQUc7XG52YXIgVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuVHlwZWRBcnJheTtcbnZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5UeXBlZEFycmF5UHJvdG90eXBlO1xudmFyIGFUeXBlZEFycmF5Q29uc3RydWN0b3IgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5Q29uc3RydWN0b3I7XG52YXIgaXNUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5pc1R5cGVkQXJyYXk7XG52YXIgQllURVNfUEVSX0VMRU1FTlQgPSAnQllURVNfUEVSX0VMRU1FTlQnO1xudmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGgnO1xuXG52YXIgZnJvbUxpc3QgPSBmdW5jdGlvbiAoQywgbGlzdCkge1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoID0gbGlzdC5sZW5ndGg7XG4gIHZhciByZXN1bHQgPSBuZXcgKGFUeXBlZEFycmF5Q29uc3RydWN0b3IoQykpKGxlbmd0aCk7XG4gIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgbmF0aXZlRGVmaW5lUHJvcGVydHkoaXQsIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKVtrZXldO1xuICB9IH0pO1xufTtcblxudmFyIGlzQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGtsYXNzO1xuICByZXR1cm4gaXQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCAoa2xhc3MgPSBjbGFzc29mKGl0KSkgPT0gJ0FycmF5QnVmZmVyJyB8fCBrbGFzcyA9PSAnU2hhcmVkQXJyYXlCdWZmZXInO1xufTtcblxudmFyIGlzVHlwZWRBcnJheUluZGV4ID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gIHJldHVybiBpc1R5cGVkQXJyYXkodGFyZ2V0KVxuICAgICYmICFpc1N5bWJvbChrZXkpXG4gICAgJiYga2V5IGluIHRhcmdldFxuICAgICYmIGlzSW50ZWdyYWxOdW1iZXIoK2tleSlcbiAgICAmJiBrZXkgPj0gMDtcbn07XG5cbnZhciB3cmFwcGVkR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgcmV0dXJuIGlzVHlwZWRBcnJheUluZGV4KHRhcmdldCwga2V5KVxuICAgID8gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDIsIHRhcmdldFtrZXldKVxuICAgIDogbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbn07XG5cbnZhciB3cmFwcGVkRGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzY3JpcHRvcikge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChpc1R5cGVkQXJyYXlJbmRleCh0YXJnZXQsIGtleSlcbiAgICAmJiBpc09iamVjdChkZXNjcmlwdG9yKVxuICAgICYmIGhhc093bihkZXNjcmlwdG9yLCAndmFsdWUnKVxuICAgICYmICFoYXNPd24oZGVzY3JpcHRvciwgJ2dldCcpXG4gICAgJiYgIWhhc093bihkZXNjcmlwdG9yLCAnc2V0JylcbiAgICAvLyBUT0RPOiBhZGQgdmFsaWRhdGlvbiBkZXNjcmlwdG9yIHcvbyBjYWxsaW5nIGFjY2Vzc29yc1xuICAgICYmICFkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZVxuICAgICYmICghaGFzT3duKGRlc2NyaXB0b3IsICd3cml0YWJsZScpIHx8IGRlc2NyaXB0b3Iud3JpdGFibGUpXG4gICAgJiYgKCFoYXNPd24oZGVzY3JpcHRvciwgJ2VudW1lcmFibGUnKSB8fCBkZXNjcmlwdG9yLmVudW1lcmFibGUpXG4gICkge1xuICAgIHRhcmdldFtrZXldID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzY3JpcHRvcik7XG59O1xuXG5pZiAoREVTQ1JJUFRPUlMpIHtcbiAgaWYgKCFOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTKSB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmYgPSB3cmFwcGVkR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAgIGRlZmluZVByb3BlcnR5TW9kdWxlLmYgPSB3cmFwcGVkRGVmaW5lUHJvcGVydHk7XG4gICAgYWRkR2V0dGVyKFR5cGVkQXJyYXlQcm90b3R5cGUsICdidWZmZXInKTtcbiAgICBhZGRHZXR0ZXIoVHlwZWRBcnJheVByb3RvdHlwZSwgJ2J5dGVPZmZzZXQnKTtcbiAgICBhZGRHZXR0ZXIoVHlwZWRBcnJheVByb3RvdHlwZSwgJ2J5dGVMZW5ndGgnKTtcbiAgICBhZGRHZXR0ZXIoVHlwZWRBcnJheVByb3RvdHlwZSwgJ2xlbmd0aCcpO1xuICB9XG5cbiAgJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MgfSwge1xuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogd3JhcHBlZEdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgICBkZWZpbmVQcm9wZXJ0eTogd3JhcHBlZERlZmluZVByb3BlcnR5XG4gIH0pO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRZUEUsIHdyYXBwZXIsIENMQU1QRUQpIHtcbiAgICB2YXIgQllURVMgPSBUWVBFLm1hdGNoKC9cXGQrJC8pWzBdIC8gODtcbiAgICB2YXIgQ09OU1RSVUNUT1JfTkFNRSA9IFRZUEUgKyAoQ0xBTVBFRCA/ICdDbGFtcGVkJyA6ICcnKSArICdBcnJheSc7XG4gICAgdmFyIEdFVFRFUiA9ICdnZXQnICsgVFlQRTtcbiAgICB2YXIgU0VUVEVSID0gJ3NldCcgKyBUWVBFO1xuICAgIHZhciBOYXRpdmVUeXBlZEFycmF5Q29uc3RydWN0b3IgPSBnbG9iYWxbQ09OU1RSVUNUT1JfTkFNRV07XG4gICAgdmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IE5hdGl2ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjtcbiAgICB2YXIgVHlwZWRBcnJheUNvbnN0cnVjdG9yUHJvdG90eXBlID0gVHlwZWRBcnJheUNvbnN0cnVjdG9yICYmIFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gICAgdmFyIGV4cG9ydGVkID0ge307XG5cbiAgICB2YXIgZ2V0dGVyID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICB2YXIgZGF0YSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICByZXR1cm4gZGF0YS52aWV3W0dFVFRFUl0oaW5kZXggKiBCWVRFUyArIGRhdGEuYnl0ZU9mZnNldCwgdHJ1ZSk7XG4gICAgfTtcblxuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICBpZiAoQ0xBTVBFRCkgdmFsdWUgPSAodmFsdWUgPSByb3VuZCh2YWx1ZSkpIDwgMCA/IDAgOiB2YWx1ZSA+IDB4RkYgPyAweEZGIDogdmFsdWUgJiAweEZGO1xuICAgICAgZGF0YS52aWV3W1NFVFRFUl0oaW5kZXggKiBCWVRFUyArIGRhdGEuYnl0ZU9mZnNldCwgdmFsdWUsIHRydWUpO1xuICAgIH07XG5cbiAgICB2YXIgYWRkRWxlbWVudCA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgbmF0aXZlRGVmaW5lUHJvcGVydHkodGhhdCwgaW5kZXgsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGdldHRlcih0aGlzLCBpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHNldHRlcih0aGlzLCBpbmRleCwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaWYgKCFOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTKSB7XG4gICAgICBUeXBlZEFycmF5Q29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCBvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5Q29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUpO1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICB2YXIgYnl0ZU9mZnNldCA9IDA7XG4gICAgICAgIHZhciBidWZmZXIsIGJ5dGVMZW5ndGgsIGxlbmd0aDtcbiAgICAgICAgaWYgKCFpc09iamVjdChkYXRhKSkge1xuICAgICAgICAgIGxlbmd0aCA9IHRvSW5kZXgoZGF0YSk7XG4gICAgICAgICAgYnl0ZUxlbmd0aCA9IGxlbmd0aCAqIEJZVEVTO1xuICAgICAgICAgIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihieXRlTGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAgICAgYnVmZmVyID0gZGF0YTtcbiAgICAgICAgICBieXRlT2Zmc2V0ID0gdG9PZmZzZXQob2Zmc2V0LCBCWVRFUyk7XG4gICAgICAgICAgdmFyICRsZW4gPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgaWYgKCRsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKCRsZW4gJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9ICRsZW4gLSBieXRlT2Zmc2V0O1xuICAgICAgICAgICAgaWYgKGJ5dGVMZW5ndGggPCAwKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ5dGVMZW5ndGggPSB0b0xlbmd0aCgkbGVuZ3RoKSAqIEJZVEVTO1xuICAgICAgICAgICAgaWYgKGJ5dGVMZW5ndGggKyBieXRlT2Zmc2V0ID4gJGxlbikgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGggPSBieXRlTGVuZ3RoIC8gQllURVM7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNUeXBlZEFycmF5KGRhdGEpKSB7XG4gICAgICAgICAgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXlDb25zdHJ1Y3RvciwgZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHR5cGVkQXJyYXlGcm9tLmNhbGwoVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoYXQsIHtcbiAgICAgICAgICBidWZmZXI6IGJ1ZmZlcixcbiAgICAgICAgICBieXRlT2Zmc2V0OiBieXRlT2Zmc2V0LFxuICAgICAgICAgIGJ5dGVMZW5ndGg6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgbGVuZ3RoOiBsZW5ndGgsXG4gICAgICAgICAgdmlldzogbmV3IERhdGFWaWV3KGJ1ZmZlcilcbiAgICAgICAgfSk7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgYWRkRWxlbWVudCh0aGF0LCBpbmRleCsrKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHNldFByb3RvdHlwZU9mKFR5cGVkQXJyYXlDb25zdHJ1Y3RvciwgVHlwZWRBcnJheSk7XG4gICAgICBUeXBlZEFycmF5Q29uc3RydWN0b3JQcm90b3R5cGUgPSBUeXBlZEFycmF5Q29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKFR5cGVkQXJyYXlQcm90b3R5cGUpO1xuICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVlTX0NPTlNUUlVDVE9SU19SRVFVSVJFU19XUkFQUEVSUykge1xuICAgICAgVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAoZHVtbXksIGRhdGEsIHR5cGVkQXJyYXlPZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZShkdW1teSwgVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FKTtcbiAgICAgICAgcmV0dXJuIGluaGVyaXRJZlJlcXVpcmVkKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IE5hdGl2ZVR5cGVkQXJyYXlDb25zdHJ1Y3Rvcih0b0luZGV4KGRhdGEpKTtcbiAgICAgICAgICBpZiAoaXNBcnJheUJ1ZmZlcihkYXRhKSkgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgTmF0aXZlVHlwZWRBcnJheUNvbnN0cnVjdG9yKGRhdGEsIHRvT2Zmc2V0KHR5cGVkQXJyYXlPZmZzZXQsIEJZVEVTKSwgJGxlbmd0aClcbiAgICAgICAgICAgIDogdHlwZWRBcnJheU9mZnNldCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gbmV3IE5hdGl2ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihkYXRhLCB0b09mZnNldCh0eXBlZEFycmF5T2Zmc2V0LCBCWVRFUykpXG4gICAgICAgICAgICAgIDogbmV3IE5hdGl2ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihkYXRhKTtcbiAgICAgICAgICBpZiAoaXNUeXBlZEFycmF5KGRhdGEpKSByZXR1cm4gZnJvbUxpc3QoVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBkYXRhKTtcbiAgICAgICAgICByZXR1cm4gdHlwZWRBcnJheUZyb20uY2FsbChUeXBlZEFycmF5Q29uc3RydWN0b3IsIGRhdGEpO1xuICAgICAgICB9KCksIGR1bW15LCBUeXBlZEFycmF5Q29uc3RydWN0b3IpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBUeXBlZEFycmF5KTtcbiAgICAgIGZvckVhY2goZ2V0T3duUHJvcGVydHlOYW1lcyhOYXRpdmVUeXBlZEFycmF5Q29uc3RydWN0b3IpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiBUeXBlZEFycmF5Q29uc3RydWN0b3IpKSB7XG4gICAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFR5cGVkQXJyYXlDb25zdHJ1Y3Rvciwga2V5LCBOYXRpdmVUeXBlZEFycmF5Q29uc3RydWN0b3Jba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheUNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IFR5cGVkQXJyYXlDb25zdHJ1Y3RvclByb3RvdHlwZTtcbiAgICB9XG5cbiAgICBpZiAoVHlwZWRBcnJheUNvbnN0cnVjdG9yUHJvdG90eXBlLmNvbnN0cnVjdG9yICE9PSBUeXBlZEFycmF5Q29uc3RydWN0b3IpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShUeXBlZEFycmF5Q29uc3RydWN0b3JQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIFR5cGVkQXJyYXlDb25zdHJ1Y3Rvcik7XG4gICAgfVxuXG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFR5cGVkQXJyYXlDb25zdHJ1Y3RvclByb3RvdHlwZSwgVFlQRURfQVJSQVlfQ09OU1RSVUNUT1IsIFR5cGVkQXJyYXlDb25zdHJ1Y3Rvcik7XG5cbiAgICBpZiAoVFlQRURfQVJSQVlfVEFHKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoVHlwZWRBcnJheUNvbnN0cnVjdG9yUHJvdG90eXBlLCBUWVBFRF9BUlJBWV9UQUcsIENPTlNUUlVDVE9SX05BTUUpO1xuICAgIH1cblxuICAgIGV4cG9ydGVkW0NPTlNUUlVDVE9SX05BTUVdID0gVHlwZWRBcnJheUNvbnN0cnVjdG9yO1xuXG4gICAgJCh7XG4gICAgICBnbG9iYWw6IHRydWUsIGZvcmNlZDogVHlwZWRBcnJheUNvbnN0cnVjdG9yICE9IE5hdGl2ZVR5cGVkQXJyYXlDb25zdHJ1Y3Rvciwgc2hhbTogIU5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1NcbiAgICB9LCBleHBvcnRlZCk7XG5cbiAgICBpZiAoIShCWVRFU19QRVJfRUxFTUVOVCBpbiBUeXBlZEFycmF5Q29uc3RydWN0b3IpKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBCWVRFU19QRVJfRUxFTUVOVCwgQllURVMpO1xuICAgIH1cblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvclByb3RvdHlwZSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShUeXBlZEFycmF5Q29uc3RydWN0b3JQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG4gICAgfVxuXG4gICAgc2V0U3BlY2llcyhDT05TVFJVQ1RPUl9OQU1FKTtcbiAgfTtcbn0gZWxzZSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiIsInZhciBjcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHlwZWQtYXJyYXktY29uc3RydWN0b3InKTtcblxuLy8gYEZsb2F0MzJBcnJheWAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdHlwZWRhcnJheS1vYmplY3RzXG5jcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IoJ0Zsb2F0MzInLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRmxvYXQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInZhciBjcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHlwZWQtYXJyYXktY29uc3RydWN0b3InKTtcblxuLy8gYEZsb2F0NjRBcnJheWAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdHlwZWRhcnJheS1vYmplY3RzXG5jcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IoJ0Zsb2F0NjQnLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRmxvYXQ2NEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInZhciBjcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHlwZWQtYXJyYXktY29uc3RydWN0b3InKTtcblxuLy8gYEludDhBcnJheWAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdHlwZWRhcnJheS1vYmplY3RzXG5jcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IoJ0ludDgnLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInZhciBjcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHlwZWQtYXJyYXktY29uc3RydWN0b3InKTtcblxuLy8gYEludDE2QXJyYXlgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXR5cGVkYXJyYXktb2JqZWN0c1xuY3JlYXRlVHlwZWRBcnJheUNvbnN0cnVjdG9yKCdJbnQxNicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQxNkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInZhciBjcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHlwZWQtYXJyYXktY29uc3RydWN0b3InKTtcblxuLy8gYEludDMyQXJyYXlgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXR5cGVkYXJyYXktb2JqZWN0c1xuY3JlYXRlVHlwZWRBcnJheUNvbnN0cnVjdG9yKCdJbnQzMicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInZhciBjcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHlwZWQtYXJyYXktY29uc3RydWN0b3InKTtcblxuLy8gYFVpbnQ4QXJyYXlgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXR5cGVkYXJyYXktb2JqZWN0c1xuY3JlYXRlVHlwZWRBcnJheUNvbnN0cnVjdG9yKCdVaW50OCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInZhciBjcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHlwZWQtYXJyYXktY29uc3RydWN0b3InKTtcblxuLy8gYFVpbnQ4Q2xhbXBlZEFycmF5YCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10eXBlZGFycmF5LW9iamVjdHNcbmNyZWF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcignVWludDgnLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhDbGFtcGVkQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0sIHRydWUpO1xuIiwidmFyIGNyZWF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgVWludDE2QXJyYXlgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXR5cGVkYXJyYXktb2JqZWN0c1xuY3JlYXRlVHlwZWRBcnJheUNvbnN0cnVjdG9yKCdVaW50MTYnLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDE2QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwidmFyIGNyZWF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgVWludDMyQXJyYXlgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXR5cGVkYXJyYXktb2JqZWN0c1xuY3JlYXRlVHlwZWRBcnJheUNvbnN0cnVjdG9yKCdVaW50MzInLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUuYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcmVsYXRpdmUtaW5kZXhpbmctbWV0aG9kXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdhdCcsIGZ1bmN0aW9uIGF0KGluZGV4KSB7XG4gIHZhciBPID0gYVR5cGVkQXJyYXkodGhpcyk7XG4gIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgdmFyIHJlbGF0aXZlSW5kZXggPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgdmFyIGsgPSByZWxhdGl2ZUluZGV4ID49IDAgPyByZWxhdGl2ZUluZGV4IDogbGVuICsgcmVsYXRpdmVJbmRleDtcbiAgcmV0dXJuIChrIDwgMCB8fCBrID49IGxlbikgPyB1bmRlZmluZWQgOiBPW2tdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgJGNvcHlXaXRoaW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktY29weS13aXRoaW4nKTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5jb3B5V2l0aGluYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5jb3B5d2l0aGluXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdjb3B5V2l0aGluJywgZnVuY3Rpb24gY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0IC8qICwgZW5kICovKSB7XG4gIHJldHVybiAkY29weVdpdGhpbi5jYWxsKGFUeXBlZEFycmF5KHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciAkZXZlcnkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZXZlcnk7XG5cbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLmV2ZXJ5XG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdldmVyeScsIGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkZXZlcnkoYVR5cGVkQXJyYXkodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyICRmaWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZpbGwnKTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5maWxsYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5maWxsXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnZmlsbCcsIGZ1bmN0aW9uIGZpbGwodmFsdWUgLyogLCBzdGFydCwgZW5kICovKSB7XG4gIHJldHVybiAkZmlsbC5hcHBseShhVHlwZWRBcnJheSh0aGlzKSwgYXJndW1lbnRzKTtcbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIGxpc3QpIHtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICB2YXIgcmVzdWx0ID0gbmV3IENvbnN0cnVjdG9yKGxlbmd0aCk7XG4gIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbnZhciBUWVBFRF9BUlJBWV9DT05TVFJVQ1RPUiA9IEFycmF5QnVmZmVyVmlld0NvcmUuVFlQRURfQVJSQVlfQ09OU1RSVUNUT1I7XG52YXIgYVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjtcblxuLy8gYSBwYXJ0IG9mIGBUeXBlZEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jdHlwZWRhcnJheS1zcGVjaWVzLWNyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSkge1xuICByZXR1cm4gYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihzcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWxBcnJheSwgb3JpZ2luYWxBcnJheVtUWVBFRF9BUlJBWV9DT05TVFJVQ1RPUl0pKTtcbn07XG4iLCJ2YXIgYXJyYXlGcm9tQ29uc3RydWN0b3JBbmRMaXN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZyb20tY29uc3RydWN0b3ItYW5kLWxpc3QnKTtcbnZhciB0eXBlZEFycmF5U3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3R5cGVkLWFycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIGxpc3QpIHtcbiAgcmV0dXJuIGFycmF5RnJvbUNvbnN0cnVjdG9yQW5kTGlzdCh0eXBlZEFycmF5U3BlY2llc0NvbnN0cnVjdG9yKGluc3RhbmNlKSwgbGlzdCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmlsdGVyO1xudmFyIGZyb21TcGVjaWVzQW5kTGlzdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1mcm9tLXNwZWNpZXMtYW5kLWxpc3QnKTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLmZpbHRlclxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnZmlsdGVyJywgZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHZhciBsaXN0ID0gJGZpbHRlcihhVHlwZWRBcnJheSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICByZXR1cm4gZnJvbVNwZWNpZXNBbmRMaXN0KHRoaXMsIGxpc3QpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmluZDtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5maW5kYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5maW5kXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdmaW5kJywgZnVuY3Rpb24gZmluZChwcmVkaWNhdGUgLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkZmluZChhVHlwZWRBcnJheSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciAkZmluZEluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbmRJbmRleDtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLmZpbmRpbmRleFxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnZmluZEluZGV4JywgZnVuY3Rpb24gZmluZEluZGV4KHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgcmV0dXJuICRmaW5kSW5kZXgoYVR5cGVkQXJyYXkodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5mb3JlYWNoXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdmb3JFYWNoJywgZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAkZm9yRWFjaChhVHlwZWRBcnJheSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgVFlQRURfQVJSQVlTX0NPTlNUUlVDVE9SU19SRVFVSVJFU19XUkFQUEVSUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1jb25zdHJ1Y3RvcnMtcmVxdWlyZS13cmFwcGVycycpO1xudmFyIGV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpLmV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2Q7XG52YXIgdHlwZWRBcnJheUZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHlwZWQtYXJyYXktZnJvbScpO1xuXG4vLyBgJVR5cGVkQXJyYXklLmZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUuZnJvbVxuZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZCgnZnJvbScsIHR5cGVkQXJyYXlGcm9tLCBUWVBFRF9BUlJBWVNfQ09OU1RSVUNUT1JTX1JFUVVJUkVTX1dSQVBQRVJTKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmNsdWRlcztcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUuaW5jbHVkZXNcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ2luY2x1ZGVzJywgZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICByZXR1cm4gJGluY2x1ZGVzKGFUeXBlZEFycmF5KHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciAkaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG5cbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUuaW5kZXhvZlxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnaW5kZXhPZicsIGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICByZXR1cm4gJGluZGV4T2YoYVR5cGVkQXJyYXkodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuUFJPUEVSO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyIEFycmF5SXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xudmFyIGFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvcnMudmFsdWVzO1xudmFyIGFycmF5S2V5cyA9IEFycmF5SXRlcmF0b3JzLmtleXM7XG52YXIgYXJyYXlFbnRyaWVzID0gQXJyYXlJdGVyYXRvcnMuZW50cmllcztcbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcbnZhciBuYXRpdmVUeXBlZEFycmF5SXRlcmF0b3IgPSBVaW50OEFycmF5ICYmIFVpbnQ4QXJyYXkucHJvdG90eXBlW0lURVJBVE9SXTtcblxudmFyIFBST1BFUl9BUlJBWV9WQUxVRVNfTkFNRSA9ICEhbmF0aXZlVHlwZWRBcnJheUl0ZXJhdG9yICYmIG5hdGl2ZVR5cGVkQXJyYXlJdGVyYXRvci5uYW1lID09PSAndmFsdWVzJztcblxudmFyIHR5cGVkQXJyYXlWYWx1ZXMgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7XG4gIHJldHVybiBhcnJheVZhbHVlcy5jYWxsKGFUeXBlZEFycmF5KHRoaXMpKTtcbn07XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLmVudHJpZXNcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ2VudHJpZXMnLCBmdW5jdGlvbiBlbnRyaWVzKCkge1xuICByZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwoYVR5cGVkQXJyYXkodGhpcykpO1xufSk7XG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5rZXlzXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdrZXlzJywgZnVuY3Rpb24ga2V5cygpIHtcbiAgcmV0dXJuIGFycmF5S2V5cy5jYWxsKGFUeXBlZEFycmF5KHRoaXMpKTtcbn0pO1xuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS52YWx1ZXNcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ3ZhbHVlcycsIHR5cGVkQXJyYXlWYWx1ZXMsIFBST1BFUl9GVU5DVElPTl9OQU1FICYmICFQUk9QRVJfQVJSQVlfVkFMVUVTX05BTUUpO1xuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLUBAaXRlcmF0b3JcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoSVRFUkFUT1IsIHR5cGVkQXJyYXlWYWx1ZXMsIFBST1BFUl9GVU5DVElPTl9OQU1FICYmICFQUk9QRVJfQVJSQVlfVkFMVUVTX05BTUUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG52YXIgJGpvaW4gPSBbXS5qb2luO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5qb2luYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5qb2luXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnam9pbicsIGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gIHJldHVybiAkam9pbi5hcHBseShhVHlwZWRBcnJheSh0aGlzKSwgYXJndW1lbnRzKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyICRsYXN0SW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1sYXN0LWluZGV4LW9mJyk7XG5cbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUubGFzdEluZGV4T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLmxhc3RpbmRleG9mXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnbGFzdEluZGV4T2YnLCBmdW5jdGlvbiBsYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gIHJldHVybiAkbGFzdEluZGV4T2YuYXBwbHkoYVR5cGVkQXJyYXkodGhpcyksIGFyZ3VtZW50cyk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLm1hcDtcbnZhciB0eXBlZEFycmF5U3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3R5cGVkLWFycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5tYXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLm1hcFxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnbWFwJywgZnVuY3Rpb24gbWFwKG1hcGZuIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJG1hcChhVHlwZWRBcnJheSh0aGlzKSwgbWFwZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIG5ldyAodHlwZWRBcnJheVNwZWNpZXNDb25zdHJ1Y3RvcihPKSkobGVuZ3RoKTtcbiAgfSk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciBUWVBFRF9BUlJBWVNfQ09OU1RSVUNUT1JTX1JFUVVJUkVTX1dSQVBQRVJTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3R5cGVkLWFycmF5LWNvbnN0cnVjdG9ycy1yZXF1aXJlLXdyYXBwZXJzJyk7XG5cbnZhciBhVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheUNvbnN0cnVjdG9yO1xudmFyIGV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUub2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUub2ZcbmV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2QoJ29mJywgZnVuY3Rpb24gb2YoLyogLi4uaXRlbXMgKi8pIHtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciByZXN1bHQgPSBuZXcgKGFUeXBlZEFycmF5Q29uc3RydWN0b3IodGhpcykpKGxlbmd0aCk7XG4gIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCsrXTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0sIFRZUEVEX0FSUkFZU19DT05TVFJVQ1RPUlNfUkVRVUlSRVNfV1JBUFBFUlMpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktcmVkdWNlJykubGVmdDtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLnJlZHVjZVxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgncmVkdWNlJywgZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgcmV0dXJuICRyZWR1Y2UoYVR5cGVkQXJyYXkodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyICRyZWR1Y2VSaWdodCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1yZWR1Y2UnKS5yaWdodDtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5yZWR1Y2VSaWNodGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUucmVkdWNlcmlnaHRcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ3JlZHVjZVJpZ2h0JywgZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICByZXR1cm4gJHJlZHVjZVJpZ2h0KGFUeXBlZEFycmF5KHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUucmV2ZXJzZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUucmV2ZXJzZVxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgncmV2ZXJzZScsIGZ1bmN0aW9uIHJldmVyc2UoKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIGxlbmd0aCA9IGFUeXBlZEFycmF5KHRoYXQpLmxlbmd0aDtcbiAgdmFyIG1pZGRsZSA9IGZsb29yKGxlbmd0aCAvIDIpO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgdmFsdWU7XG4gIHdoaWxlIChpbmRleCA8IG1pZGRsZSkge1xuICAgIHZhbHVlID0gdGhhdFtpbmRleF07XG4gICAgdGhhdFtpbmRleCsrXSA9IHRoYXRbLS1sZW5ndGhdO1xuICAgIHRoYXRbbGVuZ3RoXSA9IHZhbHVlO1xuICB9IHJldHVybiB0aGF0O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciB0b09mZnNldCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vZmZzZXQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbnZhciBGT1JDRUQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby10eXBlZC1hcnJheXMgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgbmV3IEludDhBcnJheSgxKS5zZXQoe30pO1xufSk7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLnNldGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUuc2V0XG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdzZXQnLCBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gIGFUeXBlZEFycmF5KHRoaXMpO1xuICB2YXIgb2Zmc2V0ID0gdG9PZmZzZXQoYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDEpO1xuICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gIHZhciBzcmMgPSB0b09iamVjdChhcnJheUxpa2UpO1xuICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2Uoc3JjKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgaWYgKGxlbiArIG9mZnNldCA+IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoJyk7XG4gIHdoaWxlIChpbmRleCA8IGxlbikgdGhpc1tvZmZzZXQgKyBpbmRleF0gPSBzcmNbaW5kZXgrK107XG59LCBGT1JDRUQpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyIHR5cGVkQXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHlwZWQtYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcbnZhciAkc2xpY2UgPSBbXS5zbGljZTtcblxudmFyIEZPUkNFRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXR5cGVkLWFycmF5cyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBuZXcgSW50OEFycmF5KDEpLnNsaWNlKCk7XG59KTtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUuc2xpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLnNsaWNlXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdzbGljZScsIGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxpc3QgPSAkc2xpY2UuY2FsbChhVHlwZWRBcnJheSh0aGlzKSwgc3RhcnQsIGVuZCk7XG4gIHZhciBDID0gdHlwZWRBcnJheVNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICB2YXIgcmVzdWx0ID0gbmV3IEMobGVuZ3RoKTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gbGlzdFtpbmRleCsrXTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0sIEZPUkNFRCk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgJHNvbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuc29tZTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5zb21lYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5zb21lXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdzb21lJywgZnVuY3Rpb24gc29tZShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJHNvbWUoYVR5cGVkQXJyYXkodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBpbnRlcm5hbFNvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc29ydCcpO1xudmFyIEZGID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1mZi12ZXJzaW9uJyk7XG52YXIgSUVfT1JfRURHRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaWUtb3ItZWRnZScpO1xudmFyIFY4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG52YXIgV0VCS0lUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS13ZWJraXQtdmVyc2lvbicpO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG52YXIgVWludDE2QXJyYXkgPSBnbG9iYWwuVWludDE2QXJyYXk7XG52YXIgbmF0aXZlU29ydCA9IFVpbnQxNkFycmF5ICYmIFVpbnQxNkFycmF5LnByb3RvdHlwZS5zb3J0O1xuXG4vLyBXZWJLaXRcbnZhciBBQ0NFUFRfSU5DT1JSRUNUX0FSR1VNRU5UUyA9ICEhbmF0aXZlU29ydCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgYXJyYXkgPSBuZXcgVWludDE2QXJyYXkoMik7XG4gIGFycmF5LnNvcnQobnVsbCk7XG4gIGFycmF5LnNvcnQoe30pO1xufSk7XG5cbnZhciBTVEFCTEVfU09SVCA9ICEhbmF0aXZlU29ydCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBmZWF0dXJlIGRldGVjdGlvbiBjYW4gYmUgdG9vIHNsb3csIHNvIGNoZWNrIGVuZ2luZXMgdmVyc2lvbnNcbiAgaWYgKFY4KSByZXR1cm4gVjggPCA3NDtcbiAgaWYgKEZGKSByZXR1cm4gRkYgPCA2NztcbiAgaWYgKElFX09SX0VER0UpIHJldHVybiB0cnVlO1xuICBpZiAoV0VCS0lUKSByZXR1cm4gV0VCS0lUIDwgNjAyO1xuXG4gIHZhciBhcnJheSA9IG5ldyBVaW50MTZBcnJheSg1MTYpO1xuICB2YXIgZXhwZWN0ZWQgPSBBcnJheSg1MTYpO1xuICB2YXIgaW5kZXgsIG1vZDtcblxuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCA1MTY7IGluZGV4KyspIHtcbiAgICBtb2QgPSBpbmRleCAlIDQ7XG4gICAgYXJyYXlbaW5kZXhdID0gNTE1IC0gaW5kZXg7XG4gICAgZXhwZWN0ZWRbaW5kZXhdID0gaW5kZXggLSAyICogbW9kICsgMztcbiAgfVxuXG4gIGFycmF5LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gKGEgLyA0IHwgMCkgLSAoYiAvIDQgfCAwKTtcbiAgfSk7XG5cbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgNTE2OyBpbmRleCsrKSB7XG4gICAgaWYgKGFycmF5W2luZGV4XSAhPT0gZXhwZWN0ZWRbaW5kZXhdKSByZXR1cm4gdHJ1ZTtcbiAgfVxufSk7XG5cbnZhciBnZXRTb3J0Q29tcGFyZSA9IGZ1bmN0aW9uIChjb21wYXJlZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgaWYgKGNvbXBhcmVmbiAhPT0gdW5kZWZpbmVkKSByZXR1cm4gK2NvbXBhcmVmbih4LCB5KSB8fCAwO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKHkgIT09IHkpIHJldHVybiAtMTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmICh4ICE9PSB4KSByZXR1cm4gMTtcbiAgICBpZiAoeCA9PT0gMCAmJiB5ID09PSAwKSByZXR1cm4gMSAvIHggPiAwICYmIDEgLyB5IDwgMCA/IDEgOiAtMTtcbiAgICByZXR1cm4geCA+IHk7XG4gIH07XG59O1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5zb3J0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5zb3J0XG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdzb3J0JywgZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgdmFyIGFycmF5ID0gdGhpcztcbiAgaWYgKGNvbXBhcmVmbiAhPT0gdW5kZWZpbmVkKSBhQ2FsbGFibGUoY29tcGFyZWZuKTtcbiAgaWYgKFNUQUJMRV9TT1JUKSByZXR1cm4gbmF0aXZlU29ydC5jYWxsKGFycmF5LCBjb21wYXJlZm4pO1xuXG4gIGFUeXBlZEFycmF5KGFycmF5KTtcbiAgdmFyIGFycmF5TGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoYXJyYXkpO1xuICB2YXIgaXRlbXMgPSBBcnJheShhcnJheUxlbmd0aCk7XG4gIHZhciBpbmRleDtcblxuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheUxlbmd0aDsgaW5kZXgrKykge1xuICAgIGl0ZW1zW2luZGV4XSA9IGFycmF5W2luZGV4XTtcbiAgfVxuXG4gIGl0ZW1zID0gaW50ZXJuYWxTb3J0KGFycmF5LCBnZXRTb3J0Q29tcGFyZShjb21wYXJlZm4pKTtcblxuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheUxlbmd0aDsgaW5kZXgrKykge1xuICAgIGFycmF5W2luZGV4XSA9IGl0ZW1zW2luZGV4XTtcbiAgfVxuXG4gIHJldHVybiBhcnJheTtcbn0sICFTVEFCTEVfU09SVCB8fCBBQ0NFUFRfSU5DT1JSRUNUX0FSR1VNRU5UUyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdHlwZWRBcnJheVNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUuc3ViYXJyYXlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLnN1YmFycmF5XG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdzdWJhcnJheScsIGZ1bmN0aW9uIHN1YmFycmF5KGJlZ2luLCBlbmQpIHtcbiAgdmFyIE8gPSBhVHlwZWRBcnJheSh0aGlzKTtcbiAgdmFyIGxlbmd0aCA9IE8ubGVuZ3RoO1xuICB2YXIgYmVnaW5JbmRleCA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuZ3RoKTtcbiAgdmFyIEMgPSB0eXBlZEFycmF5U3BlY2llc0NvbnN0cnVjdG9yKE8pO1xuICByZXR1cm4gbmV3IEMoXG4gICAgTy5idWZmZXIsXG4gICAgTy5ieXRlT2Zmc2V0ICsgYmVnaW5JbmRleCAqIE8uQllURVNfUEVSX0VMRU1FTlQsXG4gICAgdG9MZW5ndGgoKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKSkgLSBiZWdpbkluZGV4KVxuICApO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBJbnQ4QXJyYXkgPSBnbG9iYWwuSW50OEFycmF5O1xudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xudmFyICR0b0xvY2FsZVN0cmluZyA9IFtdLnRvTG9jYWxlU3RyaW5nO1xudmFyICRzbGljZSA9IFtdLnNsaWNlO1xuXG4vLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG52YXIgVE9fTE9DQUxFX1NUUklOR19CVUcgPSAhIUludDhBcnJheSAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICR0b0xvY2FsZVN0cmluZy5jYWxsKG5ldyBJbnQ4QXJyYXkoMSkpO1xufSk7XG5cbnZhciBGT1JDRUQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbMSwgMl0udG9Mb2NhbGVTdHJpbmcoKSAhPSBuZXcgSW50OEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIEludDhBcnJheS5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcuY2FsbChbMSwgMl0pO1xufSk7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS50b2xvY2FsZXN0cmluZ1xuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgndG9Mb2NhbGVTdHJpbmcnLCBmdW5jdGlvbiB0b0xvY2FsZVN0cmluZygpIHtcbiAgcmV0dXJuICR0b0xvY2FsZVN0cmluZy5hcHBseShUT19MT0NBTEVfU1RSSU5HX0JVRyA/ICRzbGljZS5jYWxsKGFUeXBlZEFycmF5KHRoaXMpKSA6IGFUeXBlZEFycmF5KHRoaXMpLCBhcmd1bWVudHMpO1xufSwgRk9SQ0VEKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG52YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xudmFyIFVpbnQ4QXJyYXlQcm90b3R5cGUgPSBVaW50OEFycmF5ICYmIFVpbnQ4QXJyYXkucHJvdG90eXBlIHx8IHt9O1xudmFyIGFycmF5VG9TdHJpbmcgPSBbXS50b1N0cmluZztcbnZhciBhcnJheUpvaW4gPSBbXS5qb2luO1xuXG5pZiAoZmFpbHMoZnVuY3Rpb24gKCkgeyBhcnJheVRvU3RyaW5nLmNhbGwoe30pOyB9KSkge1xuICBhcnJheVRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRoaXMpO1xuICB9O1xufVxuXG52YXIgSVNfTk9UX0FSUkFZX01FVEhPRCA9IFVpbnQ4QXJyYXlQcm90b3R5cGUudG9TdHJpbmcgIT0gYXJyYXlUb1N0cmluZztcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLnRvc3RyaW5nXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCd0b1N0cmluZycsIGFycmF5VG9TdHJpbmcsIElTX05PVF9BUlJBWV9NRVRIT0QpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyIGhleDIgPSAvXltcXGRhLWZdezJ9JC9pO1xudmFyIGhleDQgPSAvXltcXGRhLWZdezR9JC9pO1xuXG4vLyBgdW5lc2NhcGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy11bmVzY2FwZS1zdHJpbmdcbiQoeyBnbG9iYWw6IHRydWUgfSwge1xuICB1bmVzY2FwZTogZnVuY3Rpb24gdW5lc2NhcGUoc3RyaW5nKSB7XG4gICAgdmFyIHN0ciA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBsZW5ndGggPSBzdHIubGVuZ3RoO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNociwgc2xpY2U7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgICBjaHIgPSBzdHIuY2hhckF0KGluZGV4KyspO1xuICAgICAgaWYgKGNociA9PT0gJyUnKSB7XG4gICAgICAgIGlmIChzdHIuY2hhckF0KGluZGV4KSA9PT0gJ3UnKSB7XG4gICAgICAgICAgc2xpY2UgPSBzdHIuc2xpY2UoaW5kZXggKyAxLCBpbmRleCArIDUpO1xuICAgICAgICAgIGlmIChoZXg0LnRlc3Qoc2xpY2UpKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gZnJvbUNoYXJDb2RlKHBhcnNlSW50KHNsaWNlLCAxNikpO1xuICAgICAgICAgICAgaW5kZXggKz0gNTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzbGljZSA9IHN0ci5zbGljZShpbmRleCwgaW5kZXggKyAyKTtcbiAgICAgICAgICBpZiAoaGV4Mi50ZXN0KHNsaWNlKSkge1xuICAgICAgICAgICAgcmVzdWx0ICs9IGZyb21DaGFyQ29kZShwYXJzZUludChzbGljZSwgMTYpKTtcbiAgICAgICAgICAgIGluZGV4ICs9IDI7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlc3VsdCArPSBjaHI7XG4gICAgfSByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZS1hbGwnKTtcbnZhciBnZXRXZWFrRGF0YSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpLmdldFdlYWtEYXRhO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBBcnJheUl0ZXJhdGlvbk1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3I7XG52YXIgZmluZCA9IEFycmF5SXRlcmF0aW9uTW9kdWxlLmZpbmQ7XG52YXIgZmluZEluZGV4ID0gQXJyYXlJdGVyYXRpb25Nb2R1bGUuZmluZEluZGV4O1xudmFyIGlkID0gMDtcblxuLy8gZmFsbGJhY2sgZm9yIHVuY2F1Z2h0IGZyb3plbiBrZXlzXG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uIChzdG9yZSkge1xuICByZXR1cm4gc3RvcmUuZnJvemVuIHx8IChzdG9yZS5mcm96ZW4gPSBuZXcgVW5jYXVnaHRGcm96ZW5TdG9yZSgpKTtcbn07XG5cbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmVudHJpZXMgPSBbXTtcbn07XG5cbnZhciBmaW5kVW5jYXVnaHRGcm96ZW4gPSBmdW5jdGlvbiAoc3RvcmUsIGtleSkge1xuICByZXR1cm4gZmluZChzdG9yZS5lbnRyaWVzLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuXG5VbmNhdWdodEZyb3plblN0b3JlLnByb3RvdHlwZSA9IHtcbiAgZ2V0OiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSByZXR1cm4gZW50cnlbMV07XG4gIH0sXG4gIGhhczogZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiAhIWZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSBlbnRyeVsxXSA9IHZhbHVlO1xuICAgIGVsc2UgdGhpcy5lbnRyaWVzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSxcbiAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgaW5kZXggPSBmaW5kSW5kZXgodGhpcy5lbnRyaWVzLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHRoaXMuZW50cmllcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiAhIX5pbmRleDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgQ09OU1RSVUNUT1JfTkFNRSk7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoYXQsIHtcbiAgICAgICAgdHlwZTogQ09OU1RSVUNUT1JfTkFNRSxcbiAgICAgICAgaWQ6IGlkKyssXG4gICAgICAgIGZyb3plbjogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGl0ZXJhdGUoaXRlcmFibGUsIHRoYXRbQURERVJdLCB7IHRoYXQ6IHRoYXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICB9KTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIHZhciBkZWZpbmUgPSBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHZhciBkYXRhID0gZ2V0V2Vha0RhdGEoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgdW5jYXVnaHRGcm96ZW5TdG9yZShzdGF0ZSkuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgZWxzZSBkYXRhW3N0YXRlLmlkXSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgfTtcblxuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyBgeyBXZWFrTWFwLCBXZWFrU2V0IH0ucHJvdG90eXBlLmRlbGV0ZShrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWttYXAucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrc2V0LnByb3RvdHlwZS5kZWxldGVcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIGlmICghaXNPYmplY3Qoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgZGF0YSA9IGdldFdlYWtEYXRhKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZShzdGF0ZSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmIGhhc093bihkYXRhLCBzdGF0ZS5pZCkgJiYgZGVsZXRlIGRhdGFbc3RhdGUuaWRdO1xuICAgICAgfSxcbiAgICAgIC8vIGB7IFdlYWtNYXAsIFdlYWtTZXQgfS5wcm90b3R5cGUuaGFzKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha21hcC5wcm90b3R5cGUuaGFzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWtzZXQucHJvdG90eXBlLmhhc1xuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIGlmICghaXNPYmplY3Qoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgZGF0YSA9IGdldFdlYWtEYXRhKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZShzdGF0ZSkuaGFzKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmIGhhc093bihkYXRhLCBzdGF0ZS5pZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgSVNfTUFQID8ge1xuICAgICAgLy8gYFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha21hcC5wcm90b3R5cGUuZ2V0XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKGlzT2JqZWN0KGtleSkpIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IGdldFdlYWtEYXRhKGtleSk7XG4gICAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHN0YXRlKS5nZXQoa2V5KTtcbiAgICAgICAgICByZXR1cm4gZGF0YSA/IGRhdGFbc3RhdGUuaWRdIDogdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gYFdlYWtNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWttYXAucHJvdG90eXBlLnNldFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gOiB7XG4gICAgICAvLyBgV2Vha1NldC5wcm90b3R5cGUuYWRkKHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWtzZXQucHJvdG90eXBlLmFkZFxuICAgICAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZSh0aGlzLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gQztcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUtYWxsJyk7XG52YXIgSW50ZXJuYWxNZXRhZGF0YU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpO1xudmFyIGNvbGxlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbicpO1xudmFyIGNvbGxlY3Rpb25XZWFrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGVuZm9yY2VJdGVybmFsU3RhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKS5lbmZvcmNlO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAnKTtcblxudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNleHRlbnNpYmxlIC0tIHNhZmVcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xudmFyIEludGVybmFsV2Vha01hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha01hcCgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgfTtcbn07XG5cbi8vIGBXZWFrTWFwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrbWFwLWNvbnN0cnVjdG9yXG52YXIgJFdlYWtNYXAgPSBtb2R1bGUuZXhwb3J0cyA9IGNvbGxlY3Rpb24oJ1dlYWtNYXAnLCB3cmFwcGVyLCBjb2xsZWN0aW9uV2Vhayk7XG5cbi8vIElFMTEgV2Vha01hcCBmcm96ZW4ga2V5cyBmaXhcbi8vIFdlIGNhbid0IHVzZSBmZWF0dXJlIGRldGVjdGlvbiBiZWNhdXNlIGl0IGNyYXNoIHNvbWUgb2xkIElFIGJ1aWxkc1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ4NVxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsV2Vha01hcCA9IGNvbGxlY3Rpb25XZWFrLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsICdXZWFrTWFwJywgdHJ1ZSk7XG4gIEludGVybmFsTWV0YWRhdGFNb2R1bGUuZW5hYmxlKCk7XG4gIHZhciBXZWFrTWFwUHJvdG90eXBlID0gJFdlYWtNYXAucHJvdG90eXBlO1xuICB2YXIgbmF0aXZlRGVsZXRlID0gV2Vha01hcFByb3RvdHlwZVsnZGVsZXRlJ107XG4gIHZhciBuYXRpdmVIYXMgPSBXZWFrTWFwUHJvdG90eXBlLmhhcztcbiAgdmFyIG5hdGl2ZUdldCA9IFdlYWtNYXBQcm90b3R5cGUuZ2V0O1xuICB2YXIgbmF0aXZlU2V0ID0gV2Vha01hcFByb3RvdHlwZS5zZXQ7XG4gIHJlZGVmaW5lQWxsKFdlYWtNYXBQcm90b3R5cGUsIHtcbiAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgaWYgKGlzT2JqZWN0KGtleSkgJiYgIWlzRXh0ZW5zaWJsZShrZXkpKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGVuZm9yY2VJdGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIGlmICghc3RhdGUuZnJvemVuKSBzdGF0ZS5mcm96ZW4gPSBuZXcgSW50ZXJuYWxXZWFrTWFwKCk7XG4gICAgICAgIHJldHVybiBuYXRpdmVEZWxldGUuY2FsbCh0aGlzLCBrZXkpIHx8IHN0YXRlLmZyb3plblsnZGVsZXRlJ10oa2V5KTtcbiAgICAgIH0gcmV0dXJuIG5hdGl2ZURlbGV0ZS5jYWxsKHRoaXMsIGtleSk7XG4gICAgfSxcbiAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgIGlmIChpc09iamVjdChrZXkpICYmICFpc0V4dGVuc2libGUoa2V5KSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBlbmZvcmNlSXRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIXN0YXRlLmZyb3plbikgc3RhdGUuZnJvemVuID0gbmV3IEludGVybmFsV2Vha01hcCgpO1xuICAgICAgICByZXR1cm4gbmF0aXZlSGFzLmNhbGwodGhpcywga2V5KSB8fCBzdGF0ZS5mcm96ZW4uaGFzKGtleSk7XG4gICAgICB9IHJldHVybiBuYXRpdmVIYXMuY2FsbCh0aGlzLCBrZXkpO1xuICAgIH0sXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICBpZiAoaXNPYmplY3Qoa2V5KSAmJiAhaXNFeHRlbnNpYmxlKGtleSkpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZW5mb3JjZUl0ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKCFzdGF0ZS5mcm96ZW4pIHN0YXRlLmZyb3plbiA9IG5ldyBJbnRlcm5hbFdlYWtNYXAoKTtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZUhhcy5jYWxsKHRoaXMsIGtleSkgPyBuYXRpdmVHZXQuY2FsbCh0aGlzLCBrZXkpIDogc3RhdGUuZnJvemVuLmdldChrZXkpO1xuICAgICAgfSByZXR1cm4gbmF0aXZlR2V0LmNhbGwodGhpcywga2V5KTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgIGlmIChpc09iamVjdChrZXkpICYmICFpc0V4dGVuc2libGUoa2V5KSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBlbmZvcmNlSXRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIXN0YXRlLmZyb3plbikgc3RhdGUuZnJvemVuID0gbmV3IEludGVybmFsV2Vha01hcCgpO1xuICAgICAgICBuYXRpdmVIYXMuY2FsbCh0aGlzLCBrZXkpID8gbmF0aXZlU2V0LmNhbGwodGhpcywga2V5LCB2YWx1ZSkgOiBzdGF0ZS5mcm96ZW4uc2V0KGtleSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIG5hdGl2ZVNldC5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjb2xsZWN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24nKTtcbnZhciBjb2xsZWN0aW9uV2VhayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXdlYWsnKTtcblxuLy8gYFdlYWtTZXRgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWtzZXQtY29uc3RydWN0b3JcbmNvbGxlY3Rpb24oJ1dlYWtTZXQnLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha1NldCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uV2Vhayk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBVU0VfRlVOQ1RJT05fQ09OU1RSVUNUT1IgPSAnVVNFX0ZVTkNUSU9OX0NPTlNUUlVDVE9SJztcbnZhciBBU1lOQ19JVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnYXN5bmNJdGVyYXRvcicpO1xudmFyIEFzeW5jSXRlcmF0b3IgPSBnbG9iYWwuQXN5bmNJdGVyYXRvcjtcbnZhciBQYXNzZWRBc3luY0l0ZXJhdG9yUHJvdG90eXBlID0gc2hhcmVkLkFzeW5jSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgQXN5bmNJdGVyYXRvclByb3RvdHlwZSwgcHJvdG90eXBlO1xuXG5pZiAoUGFzc2VkQXN5bmNJdGVyYXRvclByb3RvdHlwZSkge1xuICBBc3luY0l0ZXJhdG9yUHJvdG90eXBlID0gUGFzc2VkQXN5bmNJdGVyYXRvclByb3RvdHlwZTtcbn0gZWxzZSBpZiAoaXNDYWxsYWJsZShBc3luY0l0ZXJhdG9yKSkge1xuICBBc3luY0l0ZXJhdG9yUHJvdG90eXBlID0gQXN5bmNJdGVyYXRvci5wcm90b3R5cGU7XG59IGVsc2UgaWYgKHNoYXJlZFtVU0VfRlVOQ1RJT05fQ09OU1RSVUNUT1JdIHx8IGdsb2JhbFtVU0VfRlVOQ1RJT05fQ09OU1RSVUNUT1JdKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIHdlIGhhdmUgbm8gYWx0ZXJuYXRpdmVzIHdpdGhvdXQgdXNhZ2Ugb2YgbW9kZXJuIHN5bnRheFxuICAgIHByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGdldFByb3RvdHlwZU9mKGdldFByb3RvdHlwZU9mKEZ1bmN0aW9uKCdyZXR1cm4gYXN5bmMgZnVuY3Rpb24qKCl7fSgpJykoKSkpKTtcbiAgICBpZiAoZ2V0UHJvdG90eXBlT2YocHJvdG90eXBlKSA9PT0gT2JqZWN0LnByb3RvdHlwZSkgQXN5bmNJdGVyYXRvclByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufVxuXG5pZiAoIUFzeW5jSXRlcmF0b3JQcm90b3R5cGUpIEFzeW5jSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbmVsc2UgaWYgKElTX1BVUkUpIEFzeW5jSXRlcmF0b3JQcm90b3R5cGUgPSBjcmVhdGUoQXN5bmNJdGVyYXRvclByb3RvdHlwZSk7XG5cbmlmICghaXNDYWxsYWJsZShBc3luY0l0ZXJhdG9yUHJvdG90eXBlW0FTWU5DX0lURVJBVE9SXSkpIHtcbiAgcmVkZWZpbmUoQXN5bmNJdGVyYXRvclByb3RvdHlwZSwgQVNZTkNfSVRFUkFUT1IsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQXN5bmNJdGVyYXRvclByb3RvdHlwZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUtYWxsJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgQXN5bmNJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hc3luYy1pdGVyYXRvci1wcm90b3R5cGUnKTtcblxudmFyIFByb21pc2UgPSBnZXRCdWlsdEluKCdQcm9taXNlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xuXG52YXIgYXN5bmNGcm9tU3luY0l0ZXJhdG9yQ29udGludWF0aW9uID0gZnVuY3Rpb24gKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gIHZhciBkb25lID0gcmVzdWx0LmRvbmU7XG4gIFByb21pc2UucmVzb2x2ZShyZXN1bHQudmFsdWUpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmVzb2x2ZSh7IGRvbmU6IGRvbmUsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgfSwgcmVqZWN0KTtcbn07XG5cbnZhciBBc3luY0Zyb21TeW5jSXRlcmF0b3IgPSBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGl0ZXJhdG9yKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIGl0ZXJhdG9yOiBhbk9iamVjdChpdGVyYXRvciksXG4gICAgbmV4dDogaXRlcmF0b3IubmV4dFxuICB9KTtcbn07XG5cbkFzeW5jRnJvbVN5bmNJdGVyYXRvci5wcm90b3R5cGUgPSByZWRlZmluZUFsbChjcmVhdGUoQXN5bmNJdGVyYXRvclByb3RvdHlwZSksIHtcbiAgbmV4dDogZnVuY3Rpb24gbmV4dChhcmcpIHtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgIHZhciBoYXNBcmcgPSAhIWFyZ3VtZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZXN1bHQgPSBhbk9iamVjdChzdGF0ZS5uZXh0LmFwcGx5KHN0YXRlLml0ZXJhdG9yLCBoYXNBcmcgPyBbYXJnXSA6IFtdKSk7XG4gICAgICBhc3luY0Zyb21TeW5jSXRlcmF0b3JDb250aW51YXRpb24ocmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgIH0pO1xuICB9LFxuICAncmV0dXJuJzogZnVuY3Rpb24gKGFyZykge1xuICAgIHZhciBpdGVyYXRvciA9IGdldEludGVybmFsU3RhdGUodGhpcykuaXRlcmF0b3I7XG4gICAgdmFyIGhhc0FyZyA9ICEhYXJndW1lbnRzLmxlbmd0aDtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyICRyZXR1cm4gPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICAgIGlmICgkcmV0dXJuID09PSB1bmRlZmluZWQpIHJldHVybiByZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IGFyZyB9KTtcbiAgICAgIHZhciByZXN1bHQgPSBhbk9iamVjdCgkcmV0dXJuLmFwcGx5KGl0ZXJhdG9yLCBoYXNBcmcgPyBbYXJnXSA6IFtdKSk7XG4gICAgICBhc3luY0Zyb21TeW5jSXRlcmF0b3JDb250aW51YXRpb24ocmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgIH0pO1xuICB9LFxuICAndGhyb3cnOiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgdmFyIGl0ZXJhdG9yID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5pdGVyYXRvcjtcbiAgICB2YXIgaGFzQXJnID0gISFhcmd1bWVudHMubGVuZ3RoO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgJHRocm93ID0gZ2V0TWV0aG9kKGl0ZXJhdG9yLCAndGhyb3cnKTtcbiAgICAgIGlmICgkdGhyb3cgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHJlamVjdChhcmcpO1xuICAgICAgdmFyIHJlc3VsdCA9IGFuT2JqZWN0KCR0aHJvdy5hcHBseShpdGVyYXRvciwgaGFzQXJnID8gW2FyZ10gOiBbXSkpO1xuICAgICAgYXN5bmNGcm9tU3luY0l0ZXJhdG9yQ29udGludWF0aW9uKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXN5bmNGcm9tU3luY0l0ZXJhdG9yO1xuIiwidmFyIEFzeW5jRnJvbVN5bmNJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hc3luYy1mcm9tLXN5bmMtaXRlcmF0b3InKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgQVNZTkNfSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2FzeW5jSXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHVzaW5nSXRlcmF0b3IpIHtcbiAgdmFyIG1ldGhvZCA9IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gZ2V0TWV0aG9kKGl0LCBBU1lOQ19JVEVSQVRPUikgOiB1c2luZ0l0ZXJhdG9yO1xuICByZXR1cm4gbWV0aG9kID8gYW5PYmplY3QobWV0aG9kLmNhbGwoaXQpKSA6IG5ldyBBc3luY0Zyb21TeW5jSXRlcmF0b3IoZ2V0SXRlcmF0b3IoaXQpKTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUikge1xuICByZXR1cm4gZ2xvYmFsW0NPTlNUUlVDVE9SXS5wcm90b3R5cGU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVyc1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZnJvbS1hc3luY1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7XG5cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfVE9fQVJSQVkgPSBUWVBFID09IDA7XG4gIHZhciBJU19GT1JfRUFDSCA9IFRZUEUgPT0gMTtcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHRhcmdldCkge1xuICAgIGFuT2JqZWN0KGl0ZXJhdG9yKTtcbiAgICB2YXIgUHJvbWlzZSA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKTtcbiAgICB2YXIgbmV4dCA9IGFDYWxsYWJsZShpdGVyYXRvci5uZXh0KTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBNQVBQSU5HID0gZm4gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAoTUFQUElORyB8fCAhSVNfVE9fQVJSQVkpIGFDYWxsYWJsZShmbik7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIGNsb3NlSXRlcmF0aW9uID0gZnVuY3Rpb24gKG1ldGhvZCwgYXJndW1lbnQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgcmV0dXJuTWV0aG9kID0gZ2V0TWV0aG9kKGl0ZXJhdG9yLCAncmV0dXJuJyk7XG4gICAgICAgICAgaWYgKHJldHVybk1ldGhvZCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXR1cm5NZXRob2QuY2FsbChpdGVyYXRvcikpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBtZXRob2QoYXJndW1lbnQpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yMikge1xuICAgICAgICAgIHJldHVybiByZWplY3QoZXJyb3IyKTtcbiAgICAgICAgfSBtZXRob2QoYXJndW1lbnQpO1xuICAgICAgfTtcblxuICAgICAgdmFyIG9uRXJyb3IgPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgY2xvc2VJdGVyYXRpb24ocmVqZWN0LCBlcnJvcik7XG4gICAgICB9O1xuXG4gICAgICB2YXIgbG9vcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoSVNfVE9fQVJSQVkgJiYgKGluZGV4ID4gTUFYX1NBRkVfSU5URUdFUikgJiYgTUFQUElORykge1xuICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdUaGUgYWxsb3dlZCBudW1iZXIgb2YgaXRlcmF0aW9ucyBoYXMgYmVlbiBleGNlZWRlZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBQcm9taXNlLnJlc29sdmUoYW5PYmplY3QobmV4dC5jYWxsKGl0ZXJhdG9yKSkpLnRoZW4oZnVuY3Rpb24gKHN0ZXApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGlmIChhbk9iamVjdChzdGVwKS5kb25lKSB7XG4gICAgICAgICAgICAgICAgaWYgKElTX1RPX0FSUkFZKSB7XG4gICAgICAgICAgICAgICAgICB0YXJnZXQubGVuZ3RoID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKHRhcmdldCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHJlc29sdmUoSVNfU09NRSA/IGZhbHNlIDogSVNfRVZFUlkgfHwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChNQVBQSU5HKSB7XG4gICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoSVNfVE9fQVJSQVkgPyBmbih2YWx1ZSwgaW5kZXgpIDogZm4odmFsdWUpKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKElTX0ZPUl9FQUNIKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbG9vcCgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKElTX0VWRVJZKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID8gbG9vcCgpIDogY2xvc2VJdGVyYXRpb24ocmVzb2x2ZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKElTX1RPX0FSUkFZKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2luZGV4KytdID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgIGxvb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPyBjbG9zZUl0ZXJhdGlvbihyZXNvbHZlLCBJU19TT01FIHx8IHZhbHVlKSA6IGxvb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSwgb25FcnJvcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRhcmdldFtpbmRleCsrXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgbG9vcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgb25FcnJvcihlcnJvcik7IH1cbiAgICAgICAgICB9LCBvbkVycm9yKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IyKSB7IG9uRXJyb3IoZXJyb3IyKTsgfVxuICAgICAgfTtcblxuICAgICAgbG9vcCgpO1xuICAgIH0pO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHRvQXJyYXk6IGNyZWF0ZU1ldGhvZCgwKSxcbiAgZm9yRWFjaDogY3JlYXRlTWV0aG9kKDEpLFxuICBldmVyeTogY3JlYXRlTWV0aG9kKDIpLFxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIGZpbmQ6IGNyZWF0ZU1ldGhvZCg0KVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBnZXRBc3luY0l0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1hc3luYy1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIGdldFZpcnR1YWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW50cnktdmlydHVhbCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgQXN5bmNGcm9tU3luY0l0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FzeW5jLWZyb20tc3luYy1pdGVyYXRvcicpO1xudmFyIHRvQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXN5bmMtaXRlcmF0b3ItaXRlcmF0aW9uJykudG9BcnJheTtcblxudmFyIEFTWU5DX0lURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdhc3luY0l0ZXJhdG9yJyk7XG52YXIgYXJyYXlJdGVyYXRvciA9IGdldFZpcnR1YWwoJ0FycmF5JykudmFsdWVzO1xuXG4vLyBgQXJyYXkuZnJvbUFzeW5jYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZyb20tYXN5bmNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZnJvbUFzeW5jKGFzeW5jSXRlbXMgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICB2YXIgQyA9IHRoaXM7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgbWFwZm4gPSBhcmd1bWVudHNMZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50c0xlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHJldHVybiBuZXcgKGdldEJ1aWx0SW4oJ1Byb21pc2UnKSkoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KGFzeW5jSXRlbXMpO1xuICAgIGlmIChtYXBmbiAhPT0gdW5kZWZpbmVkKSBtYXBmbiA9IGJpbmQobWFwZm4sIHRoaXNBcmcsIDIpO1xuICAgIHZhciB1c2luZ0FzeW5jSXRlcmF0b3IgPSBnZXRNZXRob2QoTywgQVNZTkNfSVRFUkFUT1IpO1xuICAgIHZhciB1c2luZ1N5bmNJdGVyYXRvciA9IHVzaW5nQXN5bmNJdGVyYXRvciA/IHVuZGVmaW5lZCA6IGdldEl0ZXJhdG9yTWV0aG9kKE8pIHx8IGFycmF5SXRlcmF0b3I7XG4gICAgdmFyIEEgPSBpc0NvbnN0cnVjdG9yKEMpID8gbmV3IEMoKSA6IFtdO1xuICAgIHZhciBpdGVyYXRvciA9IHVzaW5nQXN5bmNJdGVyYXRvclxuICAgICAgPyBnZXRBc3luY0l0ZXJhdG9yKE8sIHVzaW5nQXN5bmNJdGVyYXRvcilcbiAgICAgIDogbmV3IEFzeW5jRnJvbVN5bmNJdGVyYXRvcihnZXRJdGVyYXRvcihPLCB1c2luZ1N5bmNJdGVyYXRvcikpO1xuICAgIHJlc29sdmUodG9BcnJheShpdGVyYXRvciwgbWFwZm4sIEEpKTtcbiAgfSk7XG59O1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZnJvbUFzeW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZyb20tYXN5bmMnKTtcblxuLy8gYEFycmF5LmZyb21Bc3luY2AgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1mcm9tLWFzeW5jXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBzdGF0OiB0cnVlIH0sIHtcbiAgZnJvbUFzeW5jOiBmcm9tQXN5bmNcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogcmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaWx0ZXJSZWplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmlsdGVyUmVqZWN0O1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyT3V0YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbHRlcmluZ1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUgfSwge1xuICBmaWx0ZXJPdXQ6IGZ1bmN0aW9uIGZpbHRlck91dChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZmlsdGVyUmVqZWN0KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2ZpbHRlck91dCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbHRlclJlamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXJSZWplY3Q7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJSZWplY3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmlsdGVyaW5nXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSB9LCB7XG4gIGZpbHRlclJlamVjdDogZnVuY3Rpb24gZmlsdGVyUmVqZWN0KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXJSZWplY3QodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxuYWRkVG9VbnNjb3BhYmxlcygnZmlsdGVyUmVqZWN0Jyk7XG4iLCJ2YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGZpbmRMYXN0LCBmaW5kTGFzdEluZGV4IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfRklORF9MQVNUX0lOREVYID0gVFlQRSA9PSAxO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICB2YXIgaW5kZXggPSBsZW5ndGhPZkFycmF5TGlrZShzZWxmKTtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICB3aGlsZSAoaW5kZXgtLSA+IDApIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gdmFsdWU7IC8vIGZpbmRMYXN0XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIGluZGV4OyAvLyBmaW5kTGFzdEluZGV4XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0xBU1RfSU5ERVggPyAtMSA6IHVuZGVmaW5lZDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRMYXN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmluZC1mcm9tLWxhc3RcbiAgZmluZExhc3Q6IGNyZWF0ZU1ldGhvZCgwKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kTGFzdEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmluZC1mcm9tLWxhc3RcbiAgZmluZExhc3RJbmRleDogY3JlYXRlTWV0aG9kKDEpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbmRMYXN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi1mcm9tLWxhc3QnKS5maW5kTGFzdDtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbmRMYXN0YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbmQtZnJvbS1sYXN0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSB9LCB7XG4gIGZpbmRMYXN0OiBmdW5jdGlvbiBmaW5kTGFzdChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZExhc3QodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxuYWRkVG9VbnNjb3BhYmxlcygnZmluZExhc3QnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaW5kTGFzdEluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi1mcm9tLWxhc3QnKS5maW5kTGFzdEluZGV4O1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmluZExhc3RJbmRleGAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1maW5kLWZyb20tbGFzdFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUgfSwge1xuICBmaW5kTGFzdEluZGV4OiBmdW5jdGlvbiBmaW5kTGFzdEluZGV4KGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kTGFzdEluZGV4KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2ZpbmRMYXN0SW5kZXgnKTtcbiIsInZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgb2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBhcnJheUZyb21Db25zdHJ1Y3RvckFuZExpc3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbS1jb25zdHJ1Y3Rvci1hbmQtbGlzdCcpO1xuXG52YXIgcHVzaCA9IFtdLnB1c2g7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0LCBzcGVjaWZpY0NvbnN0cnVjdG9yKSB7XG4gIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgdmFyIHRhcmdldCA9IG9iamVjdENyZWF0ZShudWxsKTtcbiAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKHNlbGYpO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgQ29uc3RydWN0b3IsIGtleSwgdmFsdWU7XG4gIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICBrZXkgPSB0b1Byb3BlcnR5S2V5KGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKSk7XG4gICAgLy8gaW4gc29tZSBJRTEwIGJ1aWxkcywgYGhhc093blByb3BlcnR5YCByZXR1cm5zIGluY29ycmVjdCByZXN1bHQgb24gaW50ZWdlciBrZXlzXG4gICAgLy8gYnV0IHNpbmNlIGl0J3MgYSBgbnVsbGAgcHJvdG90eXBlIG9iamVjdCwgd2UgY2FuIHNhZmVseSB1c2UgYGluYFxuICAgIGlmIChrZXkgaW4gdGFyZ2V0KSBwdXNoLmNhbGwodGFyZ2V0W2tleV0sIHZhbHVlKTtcbiAgICBlbHNlIHRhcmdldFtrZXldID0gW3ZhbHVlXTtcbiAgfVxuICBpZiAoc3BlY2lmaWNDb25zdHJ1Y3Rvcikge1xuICAgIENvbnN0cnVjdG9yID0gc3BlY2lmaWNDb25zdHJ1Y3RvcihPKTtcbiAgICBpZiAoQ29uc3RydWN0b3IgIT09IEFycmF5KSB7XG4gICAgICBmb3IgKGtleSBpbiB0YXJnZXQpIHRhcmdldFtrZXldID0gYXJyYXlGcm9tQ29uc3RydWN0b3JBbmRMaXN0KENvbnN0cnVjdG9yLCB0YXJnZXRba2V5XSk7XG4gICAgfVxuICB9IHJldHVybiB0YXJnZXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGdyb3VwQnkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZ3JvdXAtYnknKTtcbnZhciBhcnJheVNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5ncm91cEJ5YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWdyb3VwaW5nXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSB9LCB7XG4gIGdyb3VwQnk6IGZ1bmN0aW9uIGdyb3VwQnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiAkZ3JvdXBCeSh0aGlzLCBjYWxsYmFja2ZuLCB0aGlzQXJnLCBhcnJheVNwZWNpZXNDb25zdHJ1Y3Rvcik7XG4gIH1cbn0pO1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdncm91cEJ5Jyk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXNmcm96ZW4gLS0gc2FmZVxudmFyIGlzRnJvemVuID0gT2JqZWN0LmlzRnJvemVuO1xuXG52YXIgaXNGcm96ZW5TdHJpbmdBcnJheSA9IGZ1bmN0aW9uIChhcnJheSwgYWxsb3dVbmRlZmluZWQpIHtcbiAgaWYgKCFpc0Zyb3plbiB8fCAhaXNBcnJheShhcnJheSkgfHwgIWlzRnJvemVuKGFycmF5KSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB2YXIgZWxlbWVudDtcbiAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgZWxlbWVudCA9IGFycmF5W2luZGV4KytdO1xuICAgIGlmICghKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJyB8fCAoYWxsb3dVbmRlZmluZWQgJiYgdHlwZW9mIGVsZW1lbnQgPT09ICd1bmRlZmluZWQnKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gcmV0dXJuIGxlbmd0aCAhPT0gMDtcbn07XG5cbi8vIGBBcnJheS5pc1RlbXBsYXRlT2JqZWN0YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWlzLXRlbXBsYXRlLW9iamVjdFxuJCh7IHRhcmdldDogJ0FycmF5Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGlzVGVtcGxhdGVPYmplY3Q6IGZ1bmN0aW9uIGlzVGVtcGxhdGVPYmplY3QodmFsdWUpIHtcbiAgICBpZiAoIWlzRnJvemVuU3RyaW5nQXJyYXkodmFsdWUsIHRydWUpKSByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHJhdyA9IHZhbHVlLnJhdztcbiAgICBpZiAocmF3Lmxlbmd0aCAhPT0gdmFsdWUubGVuZ3RoIHx8ICFpc0Zyb3plblN0cmluZ0FycmF5KHJhdywgZmFsc2UpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleGAgZ2V0dGVyXG4vLyBodHRwczovL2dpdGh1Yi5jb20va2VpdGhhbXVzL3Byb3Bvc2FsLWFycmF5LWxhc3RcbmlmIChERVNDUklQVE9SUyAmJiAhKCdsYXN0SW5kZXgnIGluIFtdKSkge1xuICBkZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICdsYXN0SW5kZXgnLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gbGFzdEluZGV4KCkge1xuICAgICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICAgIHJldHVybiBsZW4gPT0gMCA/IDAgOiBsZW4gLSAxO1xuICAgIH1cbiAgfSk7XG5cbiAgYWRkVG9VbnNjb3BhYmxlcygnbGFzdEluZGV4Jyk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4YCBhY2Nlc3NvclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2tlaXRoYW11cy9wcm9wb3NhbC1hcnJheS1sYXN0XG5pZiAoREVTQ1JJUFRPUlMgJiYgISgnbGFzdEl0ZW0nIGluIFtdKSkge1xuICBkZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICdsYXN0SXRlbScsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBsYXN0SXRlbSgpIHtcbiAgICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgICByZXR1cm4gbGVuID09IDAgPyB1bmRlZmluZWQgOiBPW2xlbiAtIDFdO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBsYXN0SXRlbSh2YWx1ZSkge1xuICAgICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICAgIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICAgIHJldHVybiBPW2xlbiA9PSAwID8gMCA6IGxlbiAtIDFdID0gdmFsdWU7XG4gICAgfVxuICB9KTtcblxuICBhZGRUb1Vuc2NvcGFibGVzKCdsYXN0SXRlbScpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG52YXIgcHVzaCA9IFtdLnB1c2g7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUudW5pcXVlQnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktdW5pcXVlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHVuaXF1ZUJ5KHJlc29sdmVyKSB7XG4gIHZhciB0aGF0ID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZSh0aGF0KTtcbiAgdmFyIHJlc3VsdCA9IGFycmF5U3BlY2llc0NyZWF0ZSh0aGF0LCAwKTtcbiAgdmFyIE1hcCA9IGdldEJ1aWx0SW4oJ01hcCcpO1xuICB2YXIgbWFwID0gbmV3IE1hcCgpO1xuICB2YXIgcmVzb2x2ZXJGdW5jdGlvbiwgaW5kZXgsIGl0ZW0sIGtleTtcbiAgaWYgKHJlc29sdmVyICE9IG51bGwpIHJlc29sdmVyRnVuY3Rpb24gPSBhQ2FsbGFibGUocmVzb2x2ZXIpO1xuICBlbHNlIHJlc29sdmVyRnVuY3Rpb24gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIGl0ZW0gPSB0aGF0W2luZGV4XTtcbiAgICBrZXkgPSByZXNvbHZlckZ1bmN0aW9uKGl0ZW0pO1xuICAgIGlmICghbWFwLmhhcyhrZXkpKSBtYXAuc2V0KGtleSwgaXRlbSk7XG4gIH1cbiAgbWFwLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcHVzaC5jYWxsKHJlc3VsdCwgdmFsdWUpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHVuaXF1ZUJ5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXVuaXF1ZS1ieScpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnVuaXF1ZUJ5YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LXVuaXF1ZVxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUgfSwge1xuICB1bmlxdWVCeTogdW5pcXVlQnlcbn0pO1xuXG5hZGRUb1Vuc2NvcGFibGVzKCd1bmlxdWVCeScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVyc1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEFzeW5jSXRlcmF0b3JQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXN5bmMtaXRlcmF0b3ItcHJvdG90eXBlJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG52YXIgQXN5bmNJdGVyYXRvckNvbnN0cnVjdG9yID0gZnVuY3Rpb24gQXN5bmNJdGVyYXRvcigpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCBBc3luY0l0ZXJhdG9yQ29uc3RydWN0b3IpO1xufTtcblxuQXN5bmNJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IEFzeW5jSXRlcmF0b3JQcm90b3R5cGU7XG5cbmlmICghaGFzT3duKEFzeW5jSXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcpKSB7XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShBc3luY0l0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCAnQXN5bmNJdGVyYXRvcicpO1xufVxuXG5pZiAoSVNfUFVSRSB8fCAhaGFzT3duKEFzeW5jSXRlcmF0b3JQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicpIHx8IEFzeW5jSXRlcmF0b3JQcm90b3R5cGUuY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xuICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQXN5bmNJdGVyYXRvclByb3RvdHlwZSwgJ2NvbnN0cnVjdG9yJywgQXN5bmNJdGVyYXRvckNvbnN0cnVjdG9yKTtcbn1cblxuJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAgQXN5bmNJdGVyYXRvcjogQXN5bmNJdGVyYXRvckNvbnN0cnVjdG9yXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lLWFsbCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgQXN5bmNJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hc3luYy1pdGVyYXRvci1wcm90b3R5cGUnKTtcblxudmFyIFByb21pc2UgPSBnZXRCdWlsdEluKCdQcm9taXNlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmV4dEhhbmRsZXIsIElTX0lURVJBVE9SKSB7XG4gIHZhciBBc3luY0l0ZXJhdG9yUHJveHkgPSBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKHN0YXRlKSB7XG4gICAgc3RhdGUubmV4dCA9IGFDYWxsYWJsZShzdGF0ZS5pdGVyYXRvci5uZXh0KTtcbiAgICBzdGF0ZS5kb25lID0gZmFsc2U7XG4gICAgc3RhdGUuaWdub3JlQXJndW1lbnQgPSAhSVNfSVRFUkFUT1I7XG4gICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCBzdGF0ZSk7XG4gIH07XG5cbiAgQXN5bmNJdGVyYXRvclByb3h5LnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKGNyZWF0ZShBc3luY0l0ZXJhdG9yUHJvdG90eXBlKSwge1xuICAgIG5leHQ6IGZ1bmN0aW9uIG5leHQoYXJnKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIgaGFzQXJndW1lbnQgPSAhIWFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGFyZ3MgPSBoYXNBcmd1bWVudCA/IFtzdGF0ZS5pZ25vcmVBcmd1bWVudCA/IHVuZGVmaW5lZCA6IGFyZ10gOiBJU19JVEVSQVRPUiA/IFtdIDogW3VuZGVmaW5lZF07XG4gICAgICAgIHN0YXRlLmlnbm9yZUFyZ3VtZW50ID0gZmFsc2U7XG4gICAgICAgIHJlc29sdmUoc3RhdGUuZG9uZSA/IHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9IDogYW5PYmplY3QobmV4dEhhbmRsZXIuY2FsbChzdGF0ZSwgUHJvbWlzZSwgYXJncykpKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGl0ZXJhdG9yID0gc3RhdGUuaXRlcmF0b3I7XG4gICAgICAgIHN0YXRlLmRvbmUgPSB0cnVlO1xuICAgICAgICB2YXIgJCRyZXR1cm4gPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICAgICAgaWYgKCQkcmV0dXJuID09PSB1bmRlZmluZWQpIHJldHVybiByZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoJCRyZXR1cm4uY2FsbChpdGVyYXRvciwgdmFsdWUpKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICBhbk9iamVjdChyZXN1bHQpO1xuICAgICAgICAgIHJlc29sdmUoeyBkb25lOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgICd0aHJvdyc6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGl0ZXJhdG9yID0gc3RhdGUuaXRlcmF0b3I7XG4gICAgICAgIHN0YXRlLmRvbmUgPSB0cnVlO1xuICAgICAgICB2YXIgJCR0aHJvdyA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3Rocm93Jyk7XG4gICAgICAgIGlmICgkJHRocm93ID09PSB1bmRlZmluZWQpIHJldHVybiByZWplY3QodmFsdWUpO1xuICAgICAgICByZXNvbHZlKCQkdGhyb3cuY2FsbChpdGVyYXRvciwgdmFsdWUpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKCFJU19JVEVSQVRPUikge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShBc3luY0l0ZXJhdG9yUHJveHkucHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCAnR2VuZXJhdG9yJyk7XG4gIH1cblxuICByZXR1cm4gQXN5bmNJdGVyYXRvclByb3h5O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnNcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGNyZWF0ZUFzeW5jSXRlcmF0b3JQcm94eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hc3luYy1pdGVyYXRvci1jcmVhdGUtcHJveHknKTtcblxudmFyIEFzeW5jSXRlcmF0b3JQcm94eSA9IGNyZWF0ZUFzeW5jSXRlcmF0b3JQcm94eShmdW5jdGlvbiAoUHJvbWlzZSwgYXJncykge1xuICB2YXIgc3RhdGUgPSB0aGlzO1xuICB2YXIgaXRlcmF0b3IgPSBzdGF0ZS5pdGVyYXRvcjtcblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGFuT2JqZWN0KHN0YXRlLm5leHQuYXBwbHkoaXRlcmF0b3IsIGFyZ3MpKSkudGhlbihmdW5jdGlvbiAoc3RlcCkge1xuICAgIGlmIChhbk9iamVjdChzdGVwKS5kb25lKSB7XG4gICAgICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBbc3RhdGUuaW5kZXgrKywgc3RlcC52YWx1ZV0gfTtcbiAgfSk7XG59KTtcblxuJCh7IHRhcmdldDogJ0FzeW5jSXRlcmF0b3InLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSB9LCB7XG4gIGFzSW5kZXhlZFBhaXJzOiBmdW5jdGlvbiBhc0luZGV4ZWRQYWlycygpIHtcbiAgICByZXR1cm4gbmV3IEFzeW5jSXRlcmF0b3JQcm94eSh7XG4gICAgICBpdGVyYXRvcjogYW5PYmplY3QodGhpcyksXG4gICAgICBpbmRleDogMFxuICAgIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnNcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUG9zaXRpdmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXBvc2l0aXZlLWludGVnZXInKTtcbnZhciBjcmVhdGVBc3luY0l0ZXJhdG9yUHJveHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXN5bmMtaXRlcmF0b3ItY3JlYXRlLXByb3h5Jyk7XG5cbnZhciBBc3luY0l0ZXJhdG9yUHJveHkgPSBjcmVhdGVBc3luY0l0ZXJhdG9yUHJveHkoZnVuY3Rpb24gKFByb21pc2UsIGFyZ3MpIHtcbiAgdmFyIHN0YXRlID0gdGhpcztcblxuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciBsb29wID0gZnVuY3Rpb24gKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgIGFuT2JqZWN0KHN0YXRlLm5leHQuYXBwbHkoc3RhdGUuaXRlcmF0b3IsIHN0YXRlLnJlbWFpbmluZyA/IFtdIDogYXJncykpXG4gICAgICAgICkudGhlbihmdW5jdGlvbiAoc3RlcCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoYW5PYmplY3Qoc3RlcCkuZG9uZSkge1xuICAgICAgICAgICAgICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnJlbWFpbmluZykge1xuICAgICAgICAgICAgICBzdGF0ZS5yZW1haW5pbmctLTtcbiAgICAgICAgICAgICAgbG9vcCgpO1xuICAgICAgICAgICAgfSBlbHNlIHJlc29sdmUoeyBkb25lOiBmYWxzZSwgdmFsdWU6IHN0ZXAudmFsdWUgfSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7IHJlamVjdChlcnIpOyB9XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyB9XG4gICAgfTtcblxuICAgIGxvb3AoKTtcbiAgfSk7XG59KTtcblxuJCh7IHRhcmdldDogJ0FzeW5jSXRlcmF0b3InLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSB9LCB7XG4gIGRyb3A6IGZ1bmN0aW9uIGRyb3AobGltaXQpIHtcbiAgICByZXR1cm4gbmV3IEFzeW5jSXRlcmF0b3JQcm94eSh7XG4gICAgICBpdGVyYXRvcjogYW5PYmplY3QodGhpcyksXG4gICAgICByZW1haW5pbmc6IHRvUG9zaXRpdmVJbnRlZ2VyKGxpbWl0KVxuICAgIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnNcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRldmVyeSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hc3luYy1pdGVyYXRvci1pdGVyYXRpb24nKS5ldmVyeTtcblxuJCh7IHRhcmdldDogJ0FzeW5jSXRlcmF0b3InLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSB9LCB7XG4gIGV2ZXJ5OiBmdW5jdGlvbiBldmVyeShmbikge1xuICAgIHJldHVybiAkZXZlcnkodGhpcywgZm4pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnNcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgY3JlYXRlQXN5bmNJdGVyYXRvclByb3h5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FzeW5jLWl0ZXJhdG9yLWNyZWF0ZS1wcm94eScpO1xuXG52YXIgQXN5bmNJdGVyYXRvclByb3h5ID0gY3JlYXRlQXN5bmNJdGVyYXRvclByb3h5KGZ1bmN0aW9uIChQcm9taXNlLCBhcmdzKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXM7XG4gIHZhciBmaWx0ZXJlciA9IHN0YXRlLmZpbHRlcmVyO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIGxvb3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoYW5PYmplY3Qoc3RhdGUubmV4dC5hcHBseShzdGF0ZS5pdGVyYXRvciwgYXJncykpKS50aGVuKGZ1bmN0aW9uIChzdGVwKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChhbk9iamVjdChzdGVwKS5kb25lKSB7XG4gICAgICAgICAgICAgIHN0YXRlLmRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICByZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHN0ZXAudmFsdWU7XG4gICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShmaWx0ZXJlcih2YWx1ZSkpLnRoZW4oZnVuY3Rpb24gKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQgPyByZXNvbHZlKHsgZG9uZTogZmFsc2UsIHZhbHVlOiB2YWx1ZSB9KSA6IGxvb3AoKTtcbiAgICAgICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsgcmVqZWN0KGVycik7IH1cbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7IHJlamVjdChlcnJvcik7IH1cbiAgICB9O1xuXG4gICAgbG9vcCgpO1xuICB9KTtcbn0pO1xuXG4kKHsgdGFyZ2V0OiAnQXN5bmNJdGVyYXRvcicsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoZmlsdGVyZXIpIHtcbiAgICByZXR1cm4gbmV3IEFzeW5jSXRlcmF0b3JQcm94eSh7XG4gICAgICBpdGVyYXRvcjogYW5PYmplY3QodGhpcyksXG4gICAgICBmaWx0ZXJlcjogYUNhbGxhYmxlKGZpbHRlcmVyKVxuICAgIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnNcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FzeW5jLWl0ZXJhdG9yLWl0ZXJhdGlvbicpLmZpbmQ7XG5cbiQoeyB0YXJnZXQ6ICdBc3luY0l0ZXJhdG9yJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUgfSwge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGZuKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGZuKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGNyZWF0ZUFzeW5jSXRlcmF0b3JQcm94eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hc3luYy1pdGVyYXRvci1jcmVhdGUtcHJveHknKTtcbnZhciBnZXRBc3luY0l0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1hc3luYy1pdGVyYXRvcicpO1xuXG52YXIgQXN5bmNJdGVyYXRvclByb3h5ID0gY3JlYXRlQXN5bmNJdGVyYXRvclByb3h5KGZ1bmN0aW9uIChQcm9taXNlKSB7XG4gIHZhciBzdGF0ZSA9IHRoaXM7XG4gIHZhciBtYXBwZXIgPSBzdGF0ZS5tYXBwZXI7XG4gIHZhciBpbm5lckl0ZXJhdG9yO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgdmFyIG91dGVyTG9vcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShhbk9iamVjdChzdGF0ZS5uZXh0LmNhbGwoc3RhdGUuaXRlcmF0b3IpKSkudGhlbihmdW5jdGlvbiAoc3RlcCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoYW5PYmplY3Qoc3RlcCkuZG9uZSkge1xuICAgICAgICAgICAgICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgcmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUobWFwcGVyKHN0ZXAudmFsdWUpKS50aGVuKGZ1bmN0aW9uIChtYXBwZWQpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgc3RhdGUuaW5uZXJJdGVyYXRvciA9IGlubmVySXRlcmF0b3IgPSBnZXRBc3luY0l0ZXJhdG9yKG1hcHBlZCk7XG4gICAgICAgICAgICAgICAgICBzdGF0ZS5pbm5lck5leHQgPSBhQ2FsbGFibGUoaW5uZXJJdGVyYXRvci5uZXh0KTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpbm5lckxvb3AoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcjIpIHsgcmVqZWN0KGVycm9yMik7IH1cbiAgICAgICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlcnJvcjEpIHsgcmVqZWN0KGVycm9yMSk7IH1cbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7IHJlamVjdChlcnJvcik7IH1cbiAgICB9O1xuXG4gICAgdmFyIGlubmVyTG9vcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChpbm5lckl0ZXJhdG9yID0gc3RhdGUuaW5uZXJJdGVyYXRvcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIFByb21pc2UucmVzb2x2ZShhbk9iamVjdChzdGF0ZS5pbm5lck5leHQuY2FsbChpbm5lckl0ZXJhdG9yKSkpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaWYgKGFuT2JqZWN0KHJlc3VsdCkuZG9uZSkge1xuICAgICAgICAgICAgICAgIHN0YXRlLmlubmVySXRlcmF0b3IgPSBzdGF0ZS5pbm5lck5leHQgPSBudWxsO1xuICAgICAgICAgICAgICAgIG91dGVyTG9vcCgpO1xuICAgICAgICAgICAgICB9IGVsc2UgcmVzb2x2ZSh7IGRvbmU6IGZhbHNlLCB2YWx1ZTogcmVzdWx0LnZhbHVlIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IxKSB7IHJlamVjdChlcnJvcjEpOyB9XG4gICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgcmVqZWN0KGVycm9yKTsgfVxuICAgICAgfSBlbHNlIG91dGVyTG9vcCgpO1xuICAgIH07XG5cbiAgICBpbm5lckxvb3AoKTtcbiAgfSk7XG59KTtcblxuJCh7IHRhcmdldDogJ0FzeW5jSXRlcmF0b3InLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSB9LCB7XG4gIGZsYXRNYXA6IGZ1bmN0aW9uIGZsYXRNYXAobWFwcGVyKSB7XG4gICAgcmV0dXJuIG5ldyBBc3luY0l0ZXJhdG9yUHJveHkoe1xuICAgICAgaXRlcmF0b3I6IGFuT2JqZWN0KHRoaXMpLFxuICAgICAgbWFwcGVyOiBhQ2FsbGFibGUobWFwcGVyKSxcbiAgICAgIGlubmVySXRlcmF0b3I6IG51bGwsXG4gICAgICBpbm5lck5leHQ6IG51bGxcbiAgICB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hc3luYy1pdGVyYXRvci1pdGVyYXRpb24nKS5mb3JFYWNoO1xuXG4kKHsgdGFyZ2V0OiAnQXN5bmNJdGVyYXRvcicsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlIH0sIHtcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICAgIHJldHVybiAkZm9yRWFjaCh0aGlzLCBmbik7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVyc1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgQXN5bmNJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hc3luYy1pdGVyYXRvci1wcm90b3R5cGUnKTtcbnZhciBjcmVhdGVBc3luY0l0ZXJhdG9yUHJveHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXN5bmMtaXRlcmF0b3ItY3JlYXRlLXByb3h5Jyk7XG52YXIgZ2V0QXN5bmNJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYXN5bmMtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBBc3luY0Zyb21TeW5jSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXN5bmMtZnJvbS1zeW5jLWl0ZXJhdG9yJyk7XG5cbnZhciBBU1lOQ19JVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnYXN5bmNJdGVyYXRvcicpO1xuXG52YXIgaXNQcm90b3R5cGVPZiA9IHt9LmlzUHJvdG90eXBlT2Y7XG5cbnZhciBBc3luY0l0ZXJhdG9yUHJveHkgPSBjcmVhdGVBc3luY0l0ZXJhdG9yUHJveHkoZnVuY3Rpb24gKFByb21pc2UsIGFyZ3MpIHtcbiAgcmV0dXJuIGFuT2JqZWN0KHRoaXMubmV4dC5hcHBseSh0aGlzLml0ZXJhdG9yLCBhcmdzKSk7XG59LCB0cnVlKTtcblxuJCh7IHRhcmdldDogJ0FzeW5jSXRlcmF0b3InLCBzdGF0OiB0cnVlIH0sIHtcbiAgZnJvbTogZnVuY3Rpb24gZnJvbShPKSB7XG4gICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KE8pO1xuICAgIHZhciB1c2luZ0l0ZXJhdG9yID0gZ2V0TWV0aG9kKG9iamVjdCwgQVNZTkNfSVRFUkFUT1IpO1xuICAgIHZhciBpdGVyYXRvcjtcbiAgICBpZiAodXNpbmdJdGVyYXRvcikge1xuICAgICAgaXRlcmF0b3IgPSBnZXRBc3luY0l0ZXJhdG9yKG9iamVjdCwgdXNpbmdJdGVyYXRvcik7XG4gICAgICBpZiAoaXNQcm90b3R5cGVPZi5jYWxsKEFzeW5jSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yKSkgcmV0dXJuIGl0ZXJhdG9yO1xuICAgIH1cbiAgICBpZiAoaXRlcmF0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdXNpbmdJdGVyYXRvciA9IGdldEl0ZXJhdG9yTWV0aG9kKG9iamVjdCk7XG4gICAgICBpZiAodXNpbmdJdGVyYXRvcikgcmV0dXJuIG5ldyBBc3luY0Zyb21TeW5jSXRlcmF0b3IoZ2V0SXRlcmF0b3Iob2JqZWN0LCB1c2luZ0l0ZXJhdG9yKSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQXN5bmNJdGVyYXRvclByb3h5KHsgaXRlcmF0b3I6IGl0ZXJhdG9yICE9PSB1bmRlZmluZWQgPyBpdGVyYXRvciA6IG9iamVjdCB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGNyZWF0ZUFzeW5jSXRlcmF0b3JQcm94eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hc3luYy1pdGVyYXRvci1jcmVhdGUtcHJveHknKTtcblxudmFyIEFzeW5jSXRlcmF0b3JQcm94eSA9IGNyZWF0ZUFzeW5jSXRlcmF0b3JQcm94eShmdW5jdGlvbiAoUHJvbWlzZSwgYXJncykge1xuICB2YXIgc3RhdGUgPSB0aGlzO1xuICB2YXIgbWFwcGVyID0gc3RhdGUubWFwcGVyO1xuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoYW5PYmplY3Qoc3RhdGUubmV4dC5hcHBseShzdGF0ZS5pdGVyYXRvciwgYXJncykpKS50aGVuKGZ1bmN0aW9uIChzdGVwKSB7XG4gICAgaWYgKGFuT2JqZWN0KHN0ZXApLmRvbmUpIHtcbiAgICAgIHN0YXRlLmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1hcHBlcihzdGVwLnZhbHVlKSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogdmFsdWUgfTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuJCh7IHRhcmdldDogJ0FzeW5jSXRlcmF0b3InLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSB9LCB7XG4gIG1hcDogZnVuY3Rpb24gbWFwKG1hcHBlcikge1xuICAgIHJldHVybiBuZXcgQXN5bmNJdGVyYXRvclByb3h5KHtcbiAgICAgIGl0ZXJhdG9yOiBhbk9iamVjdCh0aGlzKSxcbiAgICAgIG1hcHBlcjogYUNhbGxhYmxlKG1hcHBlcilcbiAgICB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbnZhciBQcm9taXNlID0gZ2V0QnVpbHRJbignUHJvbWlzZScpO1xuXG4kKHsgdGFyZ2V0OiAnQXN5bmNJdGVyYXRvcicsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlIH0sIHtcbiAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UocmVkdWNlciAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHZhciBpdGVyYXRvciA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBuZXh0ID0gYUNhbGxhYmxlKGl0ZXJhdG9yLm5leHQpO1xuICAgIHZhciBub0luaXRpYWwgPSBhcmd1bWVudHMubGVuZ3RoIDwgMjtcbiAgICB2YXIgYWNjdW11bGF0b3IgPSBub0luaXRpYWwgPyB1bmRlZmluZWQgOiBhcmd1bWVudHNbMV07XG4gICAgYUNhbGxhYmxlKHJlZHVjZXIpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBsb29wID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIFByb21pc2UucmVzb2x2ZShhbk9iamVjdChuZXh0LmNhbGwoaXRlcmF0b3IpKSkudGhlbihmdW5jdGlvbiAoc3RlcCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaWYgKGFuT2JqZWN0KHN0ZXApLmRvbmUpIHtcbiAgICAgICAgICAgICAgICBub0luaXRpYWwgPyByZWplY3QoVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgaXRlcmF0b3Igd2l0aCBubyBpbml0aWFsIHZhbHVlJykpIDogcmVzb2x2ZShhY2N1bXVsYXRvcik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAobm9Jbml0aWFsKSB7XG4gICAgICAgICAgICAgICAgICBub0luaXRpYWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICBsb29wKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShyZWR1Y2VyKGFjY3VtdWxhdG9yLCB2YWx1ZSkpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRvciA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgbG9vcCgpO1xuICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgeyByZWplY3QoZXJyKTsgfVxuICAgICAgICAgIH0sIHJlamVjdCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7IHJlamVjdChlcnJvcik7IH1cbiAgICAgIH07XG5cbiAgICAgIGxvb3AoKTtcbiAgICB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hc3luYy1pdGVyYXRvci1pdGVyYXRpb24nKS5zb21lO1xuXG4kKHsgdGFyZ2V0OiAnQXN5bmNJdGVyYXRvcicsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlIH0sIHtcbiAgc29tZTogZnVuY3Rpb24gc29tZShmbikge1xuICAgIHJldHVybiAkc29tZSh0aGlzLCBmbik7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVyc1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qb3NpdGl2ZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcG9zaXRpdmUtaW50ZWdlcicpO1xudmFyIGNyZWF0ZUFzeW5jSXRlcmF0b3JQcm94eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hc3luYy1pdGVyYXRvci1jcmVhdGUtcHJveHknKTtcblxudmFyIEFzeW5jSXRlcmF0b3JQcm94eSA9IGNyZWF0ZUFzeW5jSXRlcmF0b3JQcm94eShmdW5jdGlvbiAoUHJvbWlzZSwgYXJncykge1xuICB2YXIgaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yO1xuICB2YXIgcmV0dXJuTWV0aG9kLCByZXN1bHQ7XG4gIGlmICghdGhpcy5yZW1haW5pbmctLSkge1xuICAgIHJlc3VsdCA9IHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9O1xuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgcmV0dXJuTWV0aG9kID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXR1cm5NZXRob2QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXR1cm5NZXRob2QuY2FsbChpdGVyYXRvcikpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0gcmV0dXJuIHRoaXMubmV4dC5hcHBseShpdGVyYXRvciwgYXJncyk7XG59KTtcblxuJCh7IHRhcmdldDogJ0FzeW5jSXRlcmF0b3InLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSB9LCB7XG4gIHRha2U6IGZ1bmN0aW9uIHRha2UobGltaXQpIHtcbiAgICByZXR1cm4gbmV3IEFzeW5jSXRlcmF0b3JQcm94eSh7XG4gICAgICBpdGVyYXRvcjogYW5PYmplY3QodGhpcyksXG4gICAgICByZW1haW5pbmc6IHRvUG9zaXRpdmVJbnRlZ2VyKGxpbWl0KVxuICAgIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnNcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICR0b0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FzeW5jLWl0ZXJhdG9yLWl0ZXJhdGlvbicpLnRvQXJyYXk7XG5cbiQoeyB0YXJnZXQ6ICdBc3luY0l0ZXJhdG9yJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUgfSwge1xuICB0b0FycmF5OiBmdW5jdGlvbiB0b0FycmF5KCkge1xuICAgIHJldHVybiAkdG9BcnJheSh0aGlzLCB1bmRlZmluZWQsIFtdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgSU5DT1JSRUNUX1JBTkdFID0gJ0luY29ycmVjdCBOdW1iZXIucmFuZ2UgYXJndW1lbnRzJztcbnZhciBOVU1FUklDX1JBTkdFX0lURVJBVE9SID0gJ051bWVyaWNSYW5nZUl0ZXJhdG9yJztcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoTlVNRVJJQ19SQU5HRV9JVEVSQVRPUik7XG5cbnZhciAkUmFuZ2VJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoZnVuY3Rpb24gTnVtZXJpY1JhbmdlSXRlcmF0b3Ioc3RhcnQsIGVuZCwgb3B0aW9uLCB0eXBlLCB6ZXJvLCBvbmUpIHtcbiAgaWYgKHR5cGVvZiBzdGFydCAhPSB0eXBlIHx8IChlbmQgIT09IEluZmluaXR5ICYmIGVuZCAhPT0gLUluZmluaXR5ICYmIHR5cGVvZiBlbmQgIT0gdHlwZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKElOQ09SUkVDVF9SQU5HRSk7XG4gIH1cbiAgaWYgKHN0YXJ0ID09PSBJbmZpbml0eSB8fCBzdGFydCA9PT0gLUluZmluaXR5KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoSU5DT1JSRUNUX1JBTkdFKTtcbiAgfVxuICB2YXIgaWZJbmNyZWFzZSA9IGVuZCA+IHN0YXJ0O1xuICB2YXIgaW5jbHVzaXZlRW5kID0gZmFsc2U7XG4gIHZhciBzdGVwO1xuICBpZiAob3B0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICBzdGVwID0gdW5kZWZpbmVkO1xuICB9IGVsc2UgaWYgKGlzT2JqZWN0KG9wdGlvbikpIHtcbiAgICBzdGVwID0gb3B0aW9uLnN0ZXA7XG4gICAgaW5jbHVzaXZlRW5kID0gISFvcHRpb24uaW5jbHVzaXZlO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb24gPT0gdHlwZSkge1xuICAgIHN0ZXAgPSBvcHRpb247XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihJTkNPUlJFQ1RfUkFOR0UpO1xuICB9XG4gIGlmIChzdGVwID09IG51bGwpIHtcbiAgICBzdGVwID0gaWZJbmNyZWFzZSA/IG9uZSA6IC1vbmU7XG4gIH1cbiAgaWYgKHR5cGVvZiBzdGVwICE9IHR5cGUpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKElOQ09SUkVDVF9SQU5HRSk7XG4gIH1cbiAgaWYgKHN0ZXAgPT09IEluZmluaXR5IHx8IHN0ZXAgPT09IC1JbmZpbml0eSB8fCAoc3RlcCA9PT0gemVybyAmJiBzdGFydCAhPT0gZW5kKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKElOQ09SUkVDVF9SQU5HRSk7XG4gIH1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgdmFyIGhpdHNFbmQgPSBzdGFydCAhPSBzdGFydCB8fCBlbmQgIT0gZW5kIHx8IHN0ZXAgIT0gc3RlcCB8fCAoZW5kID4gc3RhcnQpICE9PSAoc3RlcCA+IHplcm8pO1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBOVU1FUklDX1JBTkdFX0lURVJBVE9SLFxuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBlbmQ6IGVuZCxcbiAgICBzdGVwOiBzdGVwLFxuICAgIGluY2x1c2l2ZUVuZDogaW5jbHVzaXZlRW5kLFxuICAgIGhpdHNFbmQ6IGhpdHNFbmQsXG4gICAgY3VycmVudENvdW50OiB6ZXJvLFxuICAgIHplcm86IHplcm9cbiAgfSk7XG4gIGlmICghREVTQ1JJUFRPUlMpIHtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gICAgdGhpcy5zdGVwID0gc3RlcDtcbiAgICB0aGlzLmluY2x1c2l2ZSA9IGluY2x1c2l2ZUVuZDtcbiAgfVxufSwgTlVNRVJJQ19SQU5HRV9JVEVSQVRPUiwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgaWYgKHN0YXRlLmhpdHNFbmQpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgdmFyIHN0YXJ0ID0gc3RhdGUuc3RhcnQ7XG4gIHZhciBlbmQgPSBzdGF0ZS5lbmQ7XG4gIHZhciBzdGVwID0gc3RhdGUuc3RlcDtcbiAgdmFyIGN1cnJlbnRZaWVsZGluZ1ZhbHVlID0gc3RhcnQgKyAoc3RlcCAqIHN0YXRlLmN1cnJlbnRDb3VudCsrKTtcbiAgaWYgKGN1cnJlbnRZaWVsZGluZ1ZhbHVlID09PSBlbmQpIHN0YXRlLmhpdHNFbmQgPSB0cnVlO1xuICB2YXIgaW5jbHVzaXZlRW5kID0gc3RhdGUuaW5jbHVzaXZlRW5kO1xuICB2YXIgZW5kQ29uZGl0aW9uO1xuICBpZiAoZW5kID4gc3RhcnQpIHtcbiAgICBlbmRDb25kaXRpb24gPSBpbmNsdXNpdmVFbmQgPyBjdXJyZW50WWllbGRpbmdWYWx1ZSA+IGVuZCA6IGN1cnJlbnRZaWVsZGluZ1ZhbHVlID49IGVuZDtcbiAgfSBlbHNlIHtcbiAgICBlbmRDb25kaXRpb24gPSBpbmNsdXNpdmVFbmQgPyBlbmQgPiBjdXJyZW50WWllbGRpbmdWYWx1ZSA6IGVuZCA+PSBjdXJyZW50WWllbGRpbmdWYWx1ZTtcbiAgfVxuICBpZiAoZW5kQ29uZGl0aW9uKSB7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogc3RhdGUuaGl0c0VuZCA9IHRydWUgfTtcbiAgfSByZXR1cm4geyB2YWx1ZTogY3VycmVudFlpZWxkaW5nVmFsdWUsIGRvbmU6IGZhbHNlIH07XG59KTtcblxudmFyIGdldHRlciA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4geyBnZXQ6IGZuLCBzZXQ6IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiBmYWxzZSB9O1xufTtcblxuaWYgKERFU0NSSVBUT1JTKSB7XG4gIGRlZmluZVByb3BlcnRpZXMoJFJhbmdlSXRlcmF0b3IucHJvdG90eXBlLCB7XG4gICAgc3RhcnQ6IGdldHRlcihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zdGFydDtcbiAgICB9KSxcbiAgICBlbmQ6IGdldHRlcihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5lbmQ7XG4gICAgfSksXG4gICAgaW5jbHVzaXZlOiBnZXR0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuaW5jbHVzaXZlRW5kO1xuICAgIH0pLFxuICAgIHN0ZXA6IGdldHRlcihmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zdGVwO1xuICAgIH0pXG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9ICRSYW5nZUl0ZXJhdG9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYmlnaW50IC0tIHNhZmUgKi9cbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIE51bWVyaWNSYW5nZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL251bWVyaWMtcmFuZ2UtaXRlcmF0b3InKTtcblxuLy8gYEJpZ0ludC5yYW5nZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1OdW1iZXIucmFuZ2VcbmlmICh0eXBlb2YgQmlnSW50ID09ICdmdW5jdGlvbicpIHtcbiAgJCh7IHRhcmdldDogJ0JpZ0ludCcsIHN0YXQ6IHRydWUgfSwge1xuICAgIHJhbmdlOiBmdW5jdGlvbiByYW5nZShzdGFydCwgZW5kLCBvcHRpb24pIHtcbiAgICAgIHJldHVybiBuZXcgTnVtZXJpY1JhbmdlSXRlcmF0b3Ioc3RhcnQsIGVuZCwgb3B0aW9uLCAnYmlnaW50JywgQmlnSW50KDApLCBCaWdJbnQoMSkpO1xuICAgIH1cbiAgfSk7XG59XG4iLCIvLyBUT0RPOiBpbiBjb3JlLWpzQDQsIG1vdmUgL21vZHVsZXMvIGRlcGVuZGVuY2llcyB0byBwdWJsaWMgZW50cmllcyBmb3IgYmV0dGVyIG9wdGltaXphdGlvbiBieSB0b29scyBsaWtlIGBwcmVzZXQtZW52YFxudmFyIE1hcCA9IHJlcXVpcmUoJy4uL21vZHVsZXMvZXMubWFwJyk7XG52YXIgV2Vha01hcCA9IHJlcXVpcmUoJy4uL21vZHVsZXMvZXMud2Vhay1tYXAnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgTm9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8ga2V5c1xuICB0aGlzLm9iamVjdCA9IG51bGw7XG4gIHRoaXMuc3ltYm9sID0gbnVsbDtcbiAgLy8gY2hpbGQgbm9kZXNcbiAgdGhpcy5wcmltaXRpdmVzID0gbnVsbDtcbiAgdGhpcy5vYmplY3RzQnlJbmRleCA9IGNyZWF0ZShudWxsKTtcbn07XG5cbk5vZGUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXksIGluaXRpYWxpemVyKSB7XG4gIHJldHVybiB0aGlzW2tleV0gfHwgKHRoaXNba2V5XSA9IGluaXRpYWxpemVyKCkpO1xufTtcblxuTm9kZS5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uIChpLCBpdCwgSVNfT0JKRUNUKSB7XG4gIHZhciBzdG9yZSA9IElTX09CSkVDVFxuICAgID8gdGhpcy5vYmplY3RzQnlJbmRleFtpXSB8fCAodGhpcy5vYmplY3RzQnlJbmRleFtpXSA9IG5ldyBXZWFrTWFwKCkpXG4gICAgOiB0aGlzLnByaW1pdGl2ZXMgfHwgKHRoaXMucHJpbWl0aXZlcyA9IG5ldyBNYXAoKSk7XG4gIHZhciBlbnRyeSA9IHN0b3JlLmdldChpdCk7XG4gIGlmICghZW50cnkpIHN0b3JlLnNldChpdCwgZW50cnkgPSBuZXcgTm9kZSgpKTtcbiAgcmV0dXJuIGVudHJ5O1xufTtcblxudmFyIHJvb3QgPSBuZXcgTm9kZSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFjdGl2ZSA9IHJvb3Q7XG4gIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaSwgaXQ7XG4gIC8vIGZvciBwcmV2ZW50IGxlYWtpbmcsIHN0YXJ0IGZyb20gb2JqZWN0c1xuICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaXNPYmplY3QoaXQgPSBhcmd1bWVudHNbaV0pKSBhY3RpdmUgPSBhY3RpdmUubmV4dChpLCBpdCwgdHJ1ZSk7XG4gIH1cbiAgaWYgKHRoaXMgPT09IE9iamVjdCAmJiBhY3RpdmUgPT09IHJvb3QpIHRocm93IFR5cGVFcnJvcignQ29tcG9zaXRlIGtleXMgbXVzdCBjb250YWluIGEgbm9uLXByaW1pdGl2ZSBjb21wb25lbnQnKTtcbiAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCFpc09iamVjdChpdCA9IGFyZ3VtZW50c1tpXSkpIGFjdGl2ZSA9IGFjdGl2ZS5uZXh0KGksIGl0LCBmYWxzZSk7XG4gIH0gcmV0dXJuIGFjdGl2ZTtcbn07XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRDb21wb3NpdGVLZXlOb2RlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbXBvc2l0ZS1rZXknKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG5cbnZhciBpbml0aWFsaXplciA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGZyZWV6ZSA9IGdldEJ1aWx0SW4oJ09iamVjdCcsICdmcmVlemUnKTtcbiAgcmV0dXJuIGZyZWV6ZSA/IGZyZWV6ZShjcmVhdGUobnVsbCkpIDogY3JlYXRlKG51bGwpO1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcmljaGVyLWtleXMvdHJlZS9tYXN0ZXIvY29tcG9zaXRlS2V5XG4kKHsgZ2xvYmFsOiB0cnVlIH0sIHtcbiAgY29tcG9zaXRlS2V5OiBmdW5jdGlvbiBjb21wb3NpdGVLZXkoKSB7XG4gICAgcmV0dXJuIGdldENvbXBvc2l0ZUtleU5vZGUuYXBwbHkoT2JqZWN0LCBhcmd1bWVudHMpLmdldCgnb2JqZWN0JywgaW5pdGlhbGl6ZXIpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldENvbXBvc2l0ZUtleU5vZGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29tcG9zaXRlLWtleScpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXJpY2hlci1rZXlzL3RyZWUvbWFzdGVyL2NvbXBvc2l0ZUtleVxuJCh7IGdsb2JhbDogdHJ1ZSB9LCB7XG4gIGNvbXBvc2l0ZVN5bWJvbDogZnVuY3Rpb24gY29tcG9zaXRlU3ltYm9sKCkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdzdHJpbmcnKSByZXR1cm4gZ2V0QnVpbHRJbignU3ltYm9sJylbJ2ZvciddKGFyZ3VtZW50c1swXSk7XG4gICAgcmV0dXJuIGdldENvbXBvc2l0ZUtleU5vZGUuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5nZXQoJ3N5bWJvbCcsIGdldEJ1aWx0SW4oJ1N5bWJvbCcpKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG52YXIgTmF0aXZlSXRlcmF0b3IgPSBnbG9iYWwuSXRlcmF0b3I7XG5cbi8vIEZGNTYtIGhhdmUgbm9uLXN0YW5kYXJkIGdsb2JhbCBoZWxwZXIgYEl0ZXJhdG9yYFxudmFyIEZPUkNFRCA9IElTX1BVUkVcbiAgfHwgIWlzQ2FsbGFibGUoTmF0aXZlSXRlcmF0b3IpXG4gIHx8IE5hdGl2ZUl0ZXJhdG9yLnByb3RvdHlwZSAhPT0gSXRlcmF0b3JQcm90b3R5cGVcbiAgLy8gRkY0NC0gbm9uLXN0YW5kYXJkIGBJdGVyYXRvcmAgcGFzc2VzIHByZXZpb3VzIHRlc3RzXG4gIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7IE5hdGl2ZUl0ZXJhdG9yKHt9KTsgfSk7XG5cbnZhciBJdGVyYXRvckNvbnN0cnVjdG9yID0gZnVuY3Rpb24gSXRlcmF0b3IoKSB7XG4gIGFuSW5zdGFuY2UodGhpcywgSXRlcmF0b3JDb25zdHJ1Y3Rvcik7XG59O1xuXG5pZiAoIWhhc093bihJdGVyYXRvclByb3RvdHlwZSwgVE9fU1RSSU5HX1RBRykpIHtcbiAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCAnSXRlcmF0b3InKTtcbn1cblxuaWYgKEZPUkNFRCB8fCAhaGFzT3duKEl0ZXJhdG9yUHJvdG90eXBlLCAnY29uc3RydWN0b3InKSB8fCBJdGVyYXRvclByb3RvdHlwZS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XG4gIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYXRvclByb3RvdHlwZSwgJ2NvbnN0cnVjdG9yJywgSXRlcmF0b3JDb25zdHJ1Y3Rvcik7XG59XG5cbkl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gSXRlcmF0b3JQcm90b3R5cGU7XG5cbiQoeyBnbG9iYWw6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgSXRlcmF0b3I6IEl0ZXJhdG9yQ29uc3RydWN0b3Jcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUtYWxsJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKS5JdGVyYXRvclByb3RvdHlwZTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuZXh0SGFuZGxlciwgSVNfSVRFUkFUT1IpIHtcbiAgdmFyIEl0ZXJhdG9yUHJveHkgPSBmdW5jdGlvbiBJdGVyYXRvcihzdGF0ZSkge1xuICAgIHN0YXRlLm5leHQgPSBhQ2FsbGFibGUoc3RhdGUuaXRlcmF0b3IubmV4dCk7XG4gICAgc3RhdGUuZG9uZSA9IGZhbHNlO1xuICAgIHN0YXRlLmlnbm9yZUFyZyA9ICFJU19JVEVSQVRPUjtcbiAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHN0YXRlKTtcbiAgfTtcblxuICBJdGVyYXRvclByb3h5LnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSksIHtcbiAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KGFyZykge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzLmxlbmd0aCA/IFtzdGF0ZS5pZ25vcmVBcmcgPyB1bmRlZmluZWQgOiBhcmddIDogSVNfSVRFUkFUT1IgPyBbXSA6IFt1bmRlZmluZWRdO1xuICAgICAgc3RhdGUuaWdub3JlQXJnID0gZmFsc2U7XG4gICAgICB2YXIgcmVzdWx0ID0gc3RhdGUuZG9uZSA/IHVuZGVmaW5lZCA6IG5leHRIYW5kbGVyLmNhbGwoc3RhdGUsIGFyZ3MpO1xuICAgICAgcmV0dXJuIHsgZG9uZTogc3RhdGUuZG9uZSwgdmFsdWU6IHJlc3VsdCB9O1xuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgIHZhciBpdGVyYXRvciA9IHN0YXRlLml0ZXJhdG9yO1xuICAgICAgc3RhdGUuZG9uZSA9IHRydWU7XG4gICAgICB2YXIgJCRyZXR1cm4gPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiAkJHJldHVybiA/IGFuT2JqZWN0KCQkcmV0dXJuLmNhbGwoaXRlcmF0b3IsIHZhbHVlKSkudmFsdWUgOiB2YWx1ZSB9O1xuICAgIH0sXG4gICAgJ3Rocm93JzogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgdmFyIGl0ZXJhdG9yID0gc3RhdGUuaXRlcmF0b3I7XG4gICAgICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgICAgIHZhciAkJHRocm93ID0gZ2V0TWV0aG9kKGl0ZXJhdG9yLCAndGhyb3cnKTtcbiAgICAgIGlmICgkJHRocm93KSByZXR1cm4gJCR0aHJvdy5jYWxsKGl0ZXJhdG9yLCB2YWx1ZSk7XG4gICAgICB0aHJvdyB2YWx1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIGlmICghSVNfSVRFUkFUT1IpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoSXRlcmF0b3JQcm94eS5wcm90b3R5cGUsIFRPX1NUUklOR19UQUcsICdHZW5lcmF0b3InKTtcbiAgfVxuXG4gIHJldHVybiBJdGVyYXRvclByb3h5O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnNcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yUHJveHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLXByb3h5Jyk7XG5cbnZhciBJdGVyYXRvclByb3h5ID0gY3JlYXRlSXRlcmF0b3JQcm94eShmdW5jdGlvbiAoYXJncykge1xuICB2YXIgcmVzdWx0ID0gYW5PYmplY3QodGhpcy5uZXh0LmFwcGx5KHRoaXMuaXRlcmF0b3IsIGFyZ3MpKTtcbiAgdmFyIGRvbmUgPSB0aGlzLmRvbmUgPSAhIXJlc3VsdC5kb25lO1xuICBpZiAoIWRvbmUpIHJldHVybiBbdGhpcy5pbmRleCsrLCByZXN1bHQudmFsdWVdO1xufSk7XG5cbiQoeyB0YXJnZXQ6ICdJdGVyYXRvcicsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlIH0sIHtcbiAgYXNJbmRleGVkUGFpcnM6IGZ1bmN0aW9uIGFzSW5kZXhlZFBhaXJzKCkge1xuICAgIHJldHVybiBuZXcgSXRlcmF0b3JQcm94eSh7XG4gICAgICBpdGVyYXRvcjogYW5PYmplY3QodGhpcyksXG4gICAgICBpbmRleDogMFxuICAgIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnNcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvUG9zaXRpdmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXBvc2l0aXZlLWludGVnZXInKTtcbnZhciBjcmVhdGVJdGVyYXRvclByb3h5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1wcm94eScpO1xuXG52YXIgSXRlcmF0b3JQcm94eSA9IGNyZWF0ZUl0ZXJhdG9yUHJveHkoZnVuY3Rpb24gKGFyZ3MpIHtcbiAgdmFyIGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcjtcbiAgdmFyIG5leHQgPSB0aGlzLm5leHQ7XG4gIHZhciByZXN1bHQsIGRvbmU7XG4gIHdoaWxlICh0aGlzLnJlbWFpbmluZykge1xuICAgIHRoaXMucmVtYWluaW5nLS07XG4gICAgcmVzdWx0ID0gYW5PYmplY3QobmV4dC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgZG9uZSA9IHRoaXMuZG9uZSA9ICEhcmVzdWx0LmRvbmU7XG4gICAgaWYgKGRvbmUpIHJldHVybjtcbiAgfVxuICByZXN1bHQgPSBhbk9iamVjdChuZXh0LmFwcGx5KGl0ZXJhdG9yLCBhcmdzKSk7XG4gIGRvbmUgPSB0aGlzLmRvbmUgPSAhIXJlc3VsdC5kb25lO1xuICBpZiAoIWRvbmUpIHJldHVybiByZXN1bHQudmFsdWU7XG59KTtcblxuJCh7IHRhcmdldDogJ0l0ZXJhdG9yJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUgfSwge1xuICBkcm9wOiBmdW5jdGlvbiBkcm9wKGxpbWl0KSB7XG4gICAgcmV0dXJuIG5ldyBJdGVyYXRvclByb3h5KHtcbiAgICAgIGl0ZXJhdG9yOiBhbk9iamVjdCh0aGlzKSxcbiAgICAgIHJlbWFpbmluZzogdG9Qb3NpdGl2ZUludGVnZXIobGltaXQpXG4gICAgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVyc1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuJCh7IHRhcmdldDogJ0l0ZXJhdG9yJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUgfSwge1xuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoZm4pIHtcbiAgICBhbk9iamVjdCh0aGlzKTtcbiAgICBhQ2FsbGFibGUoZm4pO1xuICAgIHJldHVybiAhaXRlcmF0ZSh0aGlzLCBmdW5jdGlvbiAodmFsdWUsIHN0b3ApIHtcbiAgICAgIGlmICghZm4odmFsdWUpKSByZXR1cm4gc3RvcCgpO1xuICAgIH0sIHsgSVNfSVRFUkFUT1I6IHRydWUsIElOVEVSUlVQVEVEOiB0cnVlIH0pLnN0b3BwZWQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVyc1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBjcmVhdGVJdGVyYXRvclByb3h5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1wcm94eScpO1xudmFyIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcnKTtcblxudmFyIEl0ZXJhdG9yUHJveHkgPSBjcmVhdGVJdGVyYXRvclByb3h5KGZ1bmN0aW9uIChhcmdzKSB7XG4gIHZhciBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3I7XG4gIHZhciBmaWx0ZXJlciA9IHRoaXMuZmlsdGVyZXI7XG4gIHZhciBuZXh0ID0gdGhpcy5uZXh0O1xuICB2YXIgcmVzdWx0LCBkb25lLCB2YWx1ZTtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICByZXN1bHQgPSBhbk9iamVjdChuZXh0LmFwcGx5KGl0ZXJhdG9yLCBhcmdzKSk7XG4gICAgZG9uZSA9IHRoaXMuZG9uZSA9ICEhcmVzdWx0LmRvbmU7XG4gICAgaWYgKGRvbmUpIHJldHVybjtcbiAgICB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICBpZiAoY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgZmlsdGVyZXIsIHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICB9XG59KTtcblxuJCh7IHRhcmdldDogJ0l0ZXJhdG9yJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUgfSwge1xuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihmaWx0ZXJlcikge1xuICAgIHJldHVybiBuZXcgSXRlcmF0b3JQcm94eSh7XG4gICAgICBpdGVyYXRvcjogYW5PYmplY3QodGhpcyksXG4gICAgICBmaWx0ZXJlcjogYUNhbGxhYmxlKGZpbHRlcmVyKVxuICAgIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnNcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbiQoeyB0YXJnZXQ6ICdJdGVyYXRvcicsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlIH0sIHtcbiAgZmluZDogZnVuY3Rpb24gZmluZChmbikge1xuICAgIGFuT2JqZWN0KHRoaXMpO1xuICAgIGFDYWxsYWJsZShmbik7XG4gICAgcmV0dXJuIGl0ZXJhdGUodGhpcywgZnVuY3Rpb24gKHZhbHVlLCBzdG9wKSB7XG4gICAgICBpZiAoZm4odmFsdWUpKSByZXR1cm4gc3RvcCh2YWx1ZSk7XG4gICAgfSwgeyBJU19JVEVSQVRPUjogdHJ1ZSwgSU5URVJSVVBURUQ6IHRydWUgfSkucmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnNcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yUHJveHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLXByb3h5Jyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG52YXIgSXRlcmF0b3JQcm94eSA9IGNyZWF0ZUl0ZXJhdG9yUHJveHkoZnVuY3Rpb24gKCkge1xuICB2YXIgaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yO1xuICB2YXIgbWFwcGVyID0gdGhpcy5tYXBwZXI7XG4gIHZhciByZXN1bHQsIG1hcHBlZCwgaXRlcmF0b3JNZXRob2QsIGlubmVySXRlcmF0b3I7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKGlubmVySXRlcmF0b3IgPSB0aGlzLmlubmVySXRlcmF0b3IpIHtcbiAgICAgICAgcmVzdWx0ID0gYW5PYmplY3QodGhpcy5pbm5lck5leHQuY2FsbChpbm5lckl0ZXJhdG9yKSk7XG4gICAgICAgIGlmICghcmVzdWx0LmRvbmUpIHJldHVybiByZXN1bHQudmFsdWU7XG4gICAgICAgIHRoaXMuaW5uZXJJdGVyYXRvciA9IHRoaXMuaW5uZXJOZXh0ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0ID0gYW5PYmplY3QodGhpcy5uZXh0LmNhbGwoaXRlcmF0b3IpKTtcblxuICAgICAgaWYgKHRoaXMuZG9uZSA9ICEhcmVzdWx0LmRvbmUpIHJldHVybjtcblxuICAgICAgbWFwcGVkID0gbWFwcGVyKHJlc3VsdC52YWx1ZSk7XG4gICAgICBpdGVyYXRvck1ldGhvZCA9IGdldEl0ZXJhdG9yTWV0aG9kKG1hcHBlZCk7XG5cbiAgICAgIGlmICghaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKCcuZmxhdE1hcCBjYWxsYmFjayBzaG91bGQgcmV0dXJuIGFuIGl0ZXJhYmxlIG9iamVjdCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlubmVySXRlcmF0b3IgPSBpbm5lckl0ZXJhdG9yID0gYW5PYmplY3QoaXRlcmF0b3JNZXRob2QuY2FsbChtYXBwZWQpKTtcbiAgICAgIHRoaXMuaW5uZXJOZXh0ID0gYUNhbGxhYmxlKGlubmVySXRlcmF0b3IubmV4dCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgICB9XG4gIH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiAnSXRlcmF0b3InLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSB9LCB7XG4gIGZsYXRNYXA6IGZ1bmN0aW9uIGZsYXRNYXAobWFwcGVyKSB7XG4gICAgcmV0dXJuIG5ldyBJdGVyYXRvclByb3h5KHtcbiAgICAgIGl0ZXJhdG9yOiBhbk9iamVjdCh0aGlzKSxcbiAgICAgIG1hcHBlcjogYUNhbGxhYmxlKG1hcHBlciksXG4gICAgICBpbm5lckl0ZXJhdG9yOiBudWxsLFxuICAgICAgaW5uZXJOZXh0OiBudWxsXG4gICAgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVyc1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbiQoeyB0YXJnZXQ6ICdJdGVyYXRvcicsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlIH0sIHtcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICAgIGl0ZXJhdGUoYW5PYmplY3QodGhpcyksIGZuLCB7IElTX0lURVJBVE9SOiB0cnVlIH0pO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnNcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlSXRlcmF0b3JQcm94eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtcHJveHknKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciBpc1Byb3RvdHlwZU9mID0ge30uaXNQcm90b3R5cGVPZjtcblxudmFyIEl0ZXJhdG9yUHJveHkgPSBjcmVhdGVJdGVyYXRvclByb3h5KGZ1bmN0aW9uIChhcmdzKSB7XG4gIHZhciByZXN1bHQgPSBhbk9iamVjdCh0aGlzLm5leHQuYXBwbHkodGhpcy5pdGVyYXRvciwgYXJncykpO1xuICB2YXIgZG9uZSA9IHRoaXMuZG9uZSA9ICEhcmVzdWx0LmRvbmU7XG4gIGlmICghZG9uZSkgcmV0dXJuIHJlc3VsdC52YWx1ZTtcbn0sIHRydWUpO1xuXG4kKHsgdGFyZ2V0OiAnSXRlcmF0b3InLCBzdGF0OiB0cnVlIH0sIHtcbiAgZnJvbTogZnVuY3Rpb24gZnJvbShPKSB7XG4gICAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KE8pO1xuICAgIHZhciB1c2luZ0l0ZXJhdG9yID0gZ2V0SXRlcmF0b3JNZXRob2Qob2JqZWN0KTtcbiAgICB2YXIgaXRlcmF0b3I7XG4gICAgaWYgKHVzaW5nSXRlcmF0b3IpIHtcbiAgICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3Iob2JqZWN0LCB1c2luZ0l0ZXJhdG9yKTtcbiAgICAgIGlmIChpc1Byb3RvdHlwZU9mLmNhbGwoSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yKSkgcmV0dXJuIGl0ZXJhdG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVyYXRvciA9IG9iamVjdDtcbiAgICB9IHJldHVybiBuZXcgSXRlcmF0b3JQcm94eSh7IGl0ZXJhdG9yOiBpdGVyYXRvciB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yUHJveHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLXByb3h5Jyk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZycpO1xuXG52YXIgSXRlcmF0b3JQcm94eSA9IGNyZWF0ZUl0ZXJhdG9yUHJveHkoZnVuY3Rpb24gKGFyZ3MpIHtcbiAgdmFyIGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcjtcbiAgdmFyIHJlc3VsdCA9IGFuT2JqZWN0KHRoaXMubmV4dC5hcHBseShpdGVyYXRvciwgYXJncykpO1xuICB2YXIgZG9uZSA9IHRoaXMuZG9uZSA9ICEhcmVzdWx0LmRvbmU7XG4gIGlmICghZG9uZSkgcmV0dXJuIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcoaXRlcmF0b3IsIHRoaXMubWFwcGVyLCByZXN1bHQudmFsdWUpO1xufSk7XG5cbiQoeyB0YXJnZXQ6ICdJdGVyYXRvcicsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlIH0sIHtcbiAgbWFwOiBmdW5jdGlvbiBtYXAobWFwcGVyKSB7XG4gICAgcmV0dXJuIG5ldyBJdGVyYXRvclByb3h5KHtcbiAgICAgIGl0ZXJhdG9yOiBhbk9iamVjdCh0aGlzKSxcbiAgICAgIG1hcHBlcjogYUNhbGxhYmxlKG1hcHBlcilcbiAgICB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG4kKHsgdGFyZ2V0OiAnSXRlcmF0b3InLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSB9LCB7XG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKHJlZHVjZXIgLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICBhbk9iamVjdCh0aGlzKTtcbiAgICBhQ2FsbGFibGUocmVkdWNlcik7XG4gICAgdmFyIG5vSW5pdGlhbCA9IGFyZ3VtZW50cy5sZW5ndGggPCAyO1xuICAgIHZhciBhY2N1bXVsYXRvciA9IG5vSW5pdGlhbCA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1sxXTtcbiAgICBpdGVyYXRlKHRoaXMsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKG5vSW5pdGlhbCkge1xuICAgICAgICBub0luaXRpYWwgPSBmYWxzZTtcbiAgICAgICAgYWNjdW11bGF0b3IgPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjY3VtdWxhdG9yID0gcmVkdWNlcihhY2N1bXVsYXRvciwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0sIHsgSVNfSVRFUkFUT1I6IHRydWUgfSk7XG4gICAgaWYgKG5vSW5pdGlhbCkgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgaXRlcmF0b3Igd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnNcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbiQoeyB0YXJnZXQ6ICdJdGVyYXRvcicsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlIH0sIHtcbiAgc29tZTogZnVuY3Rpb24gc29tZShmbikge1xuICAgIGFuT2JqZWN0KHRoaXMpO1xuICAgIGFDYWxsYWJsZShmbik7XG4gICAgcmV0dXJuIGl0ZXJhdGUodGhpcywgZnVuY3Rpb24gKHZhbHVlLCBzdG9wKSB7XG4gICAgICBpZiAoZm4odmFsdWUpKSByZXR1cm4gc3RvcCgpO1xuICAgIH0sIHsgSVNfSVRFUkFUT1I6IHRydWUsIElOVEVSUlVQVEVEOiB0cnVlIH0pLnN0b3BwZWQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtaXRlcmF0b3ItaGVscGVyc1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qb3NpdGl2ZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcG9zaXRpdmUtaW50ZWdlcicpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yUHJveHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLXByb3h5Jyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG52YXIgSXRlcmF0b3JQcm94eSA9IGNyZWF0ZUl0ZXJhdG9yUHJveHkoZnVuY3Rpb24gKGFyZ3MpIHtcbiAgdmFyIGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcjtcbiAgaWYgKCF0aGlzLnJlbWFpbmluZy0tKSB7XG4gICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICByZXR1cm4gaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIHVuZGVmaW5lZCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IGFuT2JqZWN0KHRoaXMubmV4dC5hcHBseShpdGVyYXRvciwgYXJncykpO1xuICB2YXIgZG9uZSA9IHRoaXMuZG9uZSA9ICEhcmVzdWx0LmRvbmU7XG4gIGlmICghZG9uZSkgcmV0dXJuIHJlc3VsdC52YWx1ZTtcbn0pO1xuXG4kKHsgdGFyZ2V0OiAnSXRlcmF0b3InLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSB9LCB7XG4gIHRha2U6IGZ1bmN0aW9uIHRha2UobGltaXQpIHtcbiAgICByZXR1cm4gbmV3IEl0ZXJhdG9yUHJveHkoe1xuICAgICAgaXRlcmF0b3I6IGFuT2JqZWN0KHRoaXMpLFxuICAgICAgcmVtYWluaW5nOiB0b1Bvc2l0aXZlSW50ZWdlcihsaW1pdClcbiAgICB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1pdGVyYXRvci1oZWxwZXJzXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIHB1c2ggPSBbXS5wdXNoO1xuXG4kKHsgdGFyZ2V0OiAnSXRlcmF0b3InLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSB9LCB7XG4gIHRvQXJyYXk6IGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIGl0ZXJhdGUoYW5PYmplY3QodGhpcyksIHB1c2gsIHsgdGhhdDogcmVzdWx0LCBJU19JVEVSQVRPUjogdHJ1ZSB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9jb2xsZWN0aW9uLW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKC8qIC4uLmVsZW1lbnRzICovKSB7XG4gIHZhciBjb2xsZWN0aW9uID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciByZW1vdmVyID0gYUNhbGxhYmxlKGNvbGxlY3Rpb25bJ2RlbGV0ZSddKTtcbiAgdmFyIGFsbERlbGV0ZWQgPSB0cnVlO1xuICB2YXIgd2FzRGVsZXRlZDtcbiAgZm9yICh2YXIgayA9IDAsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGsgPCBsZW47IGsrKykge1xuICAgIHdhc0RlbGV0ZWQgPSByZW1vdmVyLmNhbGwoY29sbGVjdGlvbiwgYXJndW1lbnRzW2tdKTtcbiAgICBhbGxEZWxldGVkID0gYWxsRGVsZXRlZCAmJiB3YXNEZWxldGVkO1xuICB9XG4gIHJldHVybiAhIWFsbERlbGV0ZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgY29sbGVjdGlvbkRlbGV0ZUFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLWRlbGV0ZS1hbGwnKTtcblxuLy8gYE1hcC5wcm90b3R5cGUuZGVsZXRlQWxsYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNvbGxlY3Rpb24tbWV0aG9kc1xuJCh7IHRhcmdldDogJ01hcCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICBkZWxldGVBbGw6IGZ1bmN0aW9uIGRlbGV0ZUFsbCgvKiAuLi5lbGVtZW50cyAqLykge1xuICAgIHJldHVybiBjb2xsZWN0aW9uRGVsZXRlQWxsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG4vLyBgTWFwLnByb3RvdHlwZS5lbXBsYWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90aHVtYnN1cGVwL3Byb3Bvc2FsLXVwc2VydFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlbXBsYWNlKGtleSwgaGFuZGxlcikge1xuICB2YXIgbWFwID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciB2YWx1ZSA9IChtYXAuaGFzKGtleSkgJiYgJ3VwZGF0ZScgaW4gaGFuZGxlcilcbiAgICA/IGhhbmRsZXIudXBkYXRlKG1hcC5nZXQoa2V5KSwga2V5LCBtYXApXG4gICAgOiBoYW5kbGVyLmluc2VydChrZXksIG1hcCk7XG4gIG1hcC5zZXQoa2V5LCB2YWx1ZSk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciAkZW1wbGFjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXAtZW1wbGFjZScpO1xuXG4vLyBgTWFwLnByb3RvdHlwZS5lbXBsYWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90aHVtYnN1cGVwL3Byb3Bvc2FsLXVwc2VydFxuJCh7IHRhcmdldDogJ01hcCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICBlbXBsYWNlOiAkZW1wbGFjZVxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWFwIC0tIHNhZmVcbiAgcmV0dXJuIE1hcC5wcm90b3R5cGUuZW50cmllcy5jYWxsKGl0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGdldE1hcEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tYXAtaXRlcmF0b3InKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcblxuLy8gYE1hcC5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnTWFwJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIGV2ZXJ5OiBmdW5jdGlvbiBldmVyeShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBtYXAgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgaXRlcmF0b3IgPSBnZXRNYXBJdGVyYXRvcihtYXApO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMyk7XG4gICAgcmV0dXJuICFpdGVyYXRlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgc3RvcCkge1xuICAgICAgaWYgKCFib3VuZEZ1bmN0aW9uKHZhbHVlLCBrZXksIG1hcCkpIHJldHVybiBzdG9wKCk7XG4gICAgfSwgeyBBU19FTlRSSUVTOiB0cnVlLCBJU19JVEVSQVRPUjogdHJ1ZSwgSU5URVJSVVBURUQ6IHRydWUgfSkuc3RvcHBlZDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIGdldE1hcEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tYXAtaXRlcmF0b3InKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcblxuLy8gYE1hcC5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNvbGxlY3Rpb24tbWV0aG9kc1xuJCh7IHRhcmdldDogJ01hcCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBtYXAgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgaXRlcmF0b3IgPSBnZXRNYXBJdGVyYXRvcihtYXApO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMyk7XG4gICAgdmFyIG5ld01hcCA9IG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKG1hcCwgZ2V0QnVpbHRJbignTWFwJykpKSgpO1xuICAgIHZhciBzZXR0ZXIgPSBhQ2FsbGFibGUobmV3TWFwLnNldCk7XG4gICAgaXRlcmF0ZShpdGVyYXRvciwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmIChib3VuZEZ1bmN0aW9uKHZhbHVlLCBrZXksIG1hcCkpIHNldHRlci5jYWxsKG5ld01hcCwga2V5LCB2YWx1ZSk7XG4gICAgfSwgeyBBU19FTlRSSUVTOiB0cnVlLCBJU19JVEVSQVRPUjogdHJ1ZSB9KTtcbiAgICByZXR1cm4gbmV3TWFwO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgZ2V0TWFwSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1hcC1pdGVyYXRvcicpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG4vLyBgTWFwLnByb3RvdHlwZS5maW5kYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNvbGxlY3Rpb24tbWV0aG9kc1xuJCh7IHRhcmdldDogJ01hcCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIG1hcCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBpdGVyYXRvciA9IGdldE1hcEl0ZXJhdG9yKG1hcCk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICByZXR1cm4gaXRlcmF0ZShpdGVyYXRvciwgZnVuY3Rpb24gKGtleSwgdmFsdWUsIHN0b3ApIHtcbiAgICAgIGlmIChib3VuZEZ1bmN0aW9uKHZhbHVlLCBrZXksIG1hcCkpIHJldHVybiBzdG9wKHZhbHVlKTtcbiAgICB9LCB7IEFTX0VOVFJJRVM6IHRydWUsIElTX0lURVJBVE9SOiB0cnVlLCBJTlRFUlJVUFRFRDogdHJ1ZSB9KS5yZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBnZXRNYXBJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWFwLWl0ZXJhdG9yJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG5cbi8vIGBNYXAucHJvdG90eXBlLmZpbmRLZXlgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnTWFwJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIGZpbmRLZXk6IGZ1bmN0aW9uIGZpbmRLZXkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgbWFwID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIGl0ZXJhdG9yID0gZ2V0TWFwSXRlcmF0b3IobWFwKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDMpO1xuICAgIHJldHVybiBpdGVyYXRlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgc3RvcCkge1xuICAgICAgaWYgKGJvdW5kRnVuY3Rpb24odmFsdWUsIGtleSwgbWFwKSkgcmV0dXJuIHN0b3Aoa2V5KTtcbiAgICB9LCB7IEFTX0VOVFJJRVM6IHRydWUsIElTX0lURVJBVE9SOiB0cnVlLCBJTlRFUlJVUFRFRDogdHJ1ZSB9KS5yZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3InKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwRm4sIHRoaXNBcmcgKi8pIHtcbiAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBtYXBGbiA9IGxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBtYXBwaW5nLCBhcnJheSwgbiwgYm91bmRGdW5jdGlvbjtcbiAgYUNvbnN0cnVjdG9yKHRoaXMpO1xuICBtYXBwaW5nID0gbWFwRm4gIT09IHVuZGVmaW5lZDtcbiAgaWYgKG1hcHBpbmcpIGFDYWxsYWJsZShtYXBGbik7XG4gIGlmIChzb3VyY2UgPT0gdW5kZWZpbmVkKSByZXR1cm4gbmV3IHRoaXMoKTtcbiAgYXJyYXkgPSBbXTtcbiAgaWYgKG1hcHBpbmcpIHtcbiAgICBuID0gMDtcbiAgICBib3VuZEZ1bmN0aW9uID0gYmluZChtYXBGbiwgbGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgaXRlcmF0ZShzb3VyY2UsIGZ1bmN0aW9uIChuZXh0SXRlbSkge1xuICAgICAgYXJyYXkucHVzaChib3VuZEZ1bmN0aW9uKG5leHRJdGVtLCBuKyspKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyYXRlKHNvdXJjZSwgYXJyYXkucHVzaCwgeyB0aGF0OiBhcnJheSB9KTtcbiAgfVxuICByZXR1cm4gbmV3IHRoaXMoYXJyYXkpO1xufTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1mcm9tJyk7XG5cbi8vIGBNYXAuZnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1tYXAuZnJvbVxuJCh7IHRhcmdldDogJ01hcCcsIHN0YXQ6IHRydWUgfSwge1xuICBmcm9tOiBmcm9tXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG5cbi8vIGBNYXAuZ3JvdXBCeWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdNYXAnLCBzdGF0OiB0cnVlIH0sIHtcbiAgZ3JvdXBCeTogZnVuY3Rpb24gZ3JvdXBCeShpdGVyYWJsZSwga2V5RGVyaXZhdGl2ZSkge1xuICAgIGFDYWxsYWJsZShrZXlEZXJpdmF0aXZlKTtcbiAgICB2YXIgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihpdGVyYWJsZSk7XG4gICAgdmFyIG5ld01hcCA9IG5ldyB0aGlzKCk7XG4gICAgdmFyIGhhcyA9IGFDYWxsYWJsZShuZXdNYXAuaGFzKTtcbiAgICB2YXIgZ2V0ID0gYUNhbGxhYmxlKG5ld01hcC5nZXQpO1xuICAgIHZhciBzZXQgPSBhQ2FsbGFibGUobmV3TWFwLnNldCk7XG4gICAgaXRlcmF0ZShpdGVyYXRvciwgZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgIHZhciBkZXJpdmVkS2V5ID0ga2V5RGVyaXZhdGl2ZShlbGVtZW50KTtcbiAgICAgIGlmICghaGFzLmNhbGwobmV3TWFwLCBkZXJpdmVkS2V5KSkgc2V0LmNhbGwobmV3TWFwLCBkZXJpdmVkS2V5LCBbZWxlbWVudF0pO1xuICAgICAgZWxzZSBnZXQuY2FsbChuZXdNYXAsIGRlcml2ZWRLZXkpLnB1c2goZWxlbWVudCk7XG4gICAgfSwgeyBJU19JVEVSQVRPUjogdHJ1ZSB9KTtcbiAgICByZXR1cm4gbmV3TWFwO1xuICB9XG59KTtcbiIsIi8vIGBTYW1lVmFsdWVaZXJvYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2FtZXZhbHVlemVyb1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoeCwgeSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4geCA9PT0geSB8fCB4ICE9IHggJiYgeSAhPSB5O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE1hcEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tYXAtaXRlcmF0b3InKTtcbnZhciBzYW1lVmFsdWVaZXJvID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NhbWUtdmFsdWUtemVybycpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG4vLyBgTWFwLnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdNYXAnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaEVsZW1lbnQpIHtcbiAgICByZXR1cm4gaXRlcmF0ZShnZXRNYXBJdGVyYXRvcihhbk9iamVjdCh0aGlzKSksIGZ1bmN0aW9uIChrZXksIHZhbHVlLCBzdG9wKSB7XG4gICAgICBpZiAoc2FtZVZhbHVlWmVybyh2YWx1ZSwgc2VhcmNoRWxlbWVudCkpIHJldHVybiBzdG9wKCk7XG4gICAgfSwgeyBBU19FTlRSSUVTOiB0cnVlLCBJU19JVEVSQVRPUjogdHJ1ZSwgSU5URVJSVVBURUQ6IHRydWUgfSkuc3RvcHBlZDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG4vLyBgTWFwLmtleUJ5YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNvbGxlY3Rpb24tbWV0aG9kc1xuJCh7IHRhcmdldDogJ01hcCcsIHN0YXQ6IHRydWUgfSwge1xuICBrZXlCeTogZnVuY3Rpb24ga2V5QnkoaXRlcmFibGUsIGtleURlcml2YXRpdmUpIHtcbiAgICB2YXIgbmV3TWFwID0gbmV3IHRoaXMoKTtcbiAgICBhQ2FsbGFibGUoa2V5RGVyaXZhdGl2ZSk7XG4gICAgdmFyIHNldHRlciA9IGFDYWxsYWJsZShuZXdNYXAuc2V0KTtcbiAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgc2V0dGVyLmNhbGwobmV3TWFwLCBrZXlEZXJpdmF0aXZlKGVsZW1lbnQpLCBlbGVtZW50KTtcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3TWFwO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE1hcEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tYXAtaXRlcmF0b3InKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcblxuLy8gYE1hcC5wcm90b3R5cGUua2V5T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnTWFwJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIGtleU9mOiBmdW5jdGlvbiBrZXlPZihzZWFyY2hFbGVtZW50KSB7XG4gICAgcmV0dXJuIGl0ZXJhdGUoZ2V0TWFwSXRlcmF0b3IoYW5PYmplY3QodGhpcykpLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgc3RvcCkge1xuICAgICAgaWYgKHZhbHVlID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gc3RvcChrZXkpO1xuICAgIH0sIHsgQVNfRU5UUklFUzogdHJ1ZSwgSVNfSVRFUkFUT1I6IHRydWUsIElOVEVSUlVQVEVEOiB0cnVlIH0pLnJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIGdldE1hcEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tYXAtaXRlcmF0b3InKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcblxuLy8gYE1hcC5wcm90b3R5cGUubWFwS2V5c2AgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdNYXAnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAgbWFwS2V5czogZnVuY3Rpb24gbWFwS2V5cyhjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBtYXAgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgaXRlcmF0b3IgPSBnZXRNYXBJdGVyYXRvcihtYXApO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMyk7XG4gICAgdmFyIG5ld01hcCA9IG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKG1hcCwgZ2V0QnVpbHRJbignTWFwJykpKSgpO1xuICAgIHZhciBzZXR0ZXIgPSBhQ2FsbGFibGUobmV3TWFwLnNldCk7XG4gICAgaXRlcmF0ZShpdGVyYXRvciwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIHNldHRlci5jYWxsKG5ld01hcCwgYm91bmRGdW5jdGlvbih2YWx1ZSwga2V5LCBtYXApLCB2YWx1ZSk7XG4gICAgfSwgeyBBU19FTlRSSUVTOiB0cnVlLCBJU19JVEVSQVRPUjogdHJ1ZSB9KTtcbiAgICByZXR1cm4gbmV3TWFwO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0TWFwSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1hcC1pdGVyYXRvcicpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG4vLyBgTWFwLnByb3RvdHlwZS5tYXBWYWx1ZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnTWFwJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIG1hcFZhbHVlczogZnVuY3Rpb24gbWFwVmFsdWVzKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIG1hcCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBpdGVyYXRvciA9IGdldE1hcEl0ZXJhdG9yKG1hcCk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICB2YXIgbmV3TWFwID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IobWFwLCBnZXRCdWlsdEluKCdNYXAnKSkpKCk7XG4gICAgdmFyIHNldHRlciA9IGFDYWxsYWJsZShuZXdNYXAuc2V0KTtcbiAgICBpdGVyYXRlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgc2V0dGVyLmNhbGwobmV3TWFwLCBrZXksIGJvdW5kRnVuY3Rpb24odmFsdWUsIGtleSwgbWFwKSk7XG4gICAgfSwgeyBBU19FTlRSSUVTOiB0cnVlLCBJU19JVEVSQVRPUjogdHJ1ZSB9KTtcbiAgICByZXR1cm4gbmV3TWFwO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG5cbi8vIGBNYXAucHJvdG90eXBlLm1lcmdlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNvbGxlY3Rpb24tbWV0aG9kc1xuJCh7IHRhcmdldDogJ01hcCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBtZXJnZTogZnVuY3Rpb24gbWVyZ2UoaXRlcmFibGUgLyogLi4uaXRlcmJsZXMgKi8pIHtcbiAgICB2YXIgbWFwID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIHNldHRlciA9IGFDYWxsYWJsZShtYXAuc2V0KTtcbiAgICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBhcmd1bWVudHNMZW5ndGgpIHtcbiAgICAgIGl0ZXJhdGUoYXJndW1lbnRzW2krK10sIHNldHRlciwgeyB0aGF0OiBtYXAsIEFTX0VOVFJJRVM6IHRydWUgfSk7XG4gICAgfVxuICAgIHJldHVybiBtYXA7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBvZigpIHtcbiAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBBID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gIHdoaWxlIChsZW5ndGgtLSkgQVtsZW5ndGhdID0gYXJndW1lbnRzW2xlbmd0aF07XG4gIHJldHVybiBuZXcgdGhpcyhBKTtcbn07XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLW9mJyk7XG5cbi8vIGBNYXAub2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLm9mXG4kKHsgdGFyZ2V0OiAnTWFwJywgc3RhdDogdHJ1ZSB9LCB7XG4gIG9mOiBvZlxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGdldE1hcEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tYXAtaXRlcmF0b3InKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcblxuLy8gYE1hcC5wcm90b3R5cGUucmVkdWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNvbGxlY3Rpb24tbWV0aG9kc1xuJCh7IHRhcmdldDogJ01hcCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgdmFyIG1hcCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBpdGVyYXRvciA9IGdldE1hcEl0ZXJhdG9yKG1hcCk7XG4gICAgdmFyIG5vSW5pdGlhbCA9IGFyZ3VtZW50cy5sZW5ndGggPCAyO1xuICAgIHZhciBhY2N1bXVsYXRvciA9IG5vSW5pdGlhbCA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1sxXTtcbiAgICBhQ2FsbGFibGUoY2FsbGJhY2tmbik7XG4gICAgaXRlcmF0ZShpdGVyYXRvciwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmIChub0luaXRpYWwpIHtcbiAgICAgICAgbm9Jbml0aWFsID0gZmFsc2U7XG4gICAgICAgIGFjY3VtdWxhdG9yID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY2N1bXVsYXRvciA9IGNhbGxiYWNrZm4oYWNjdW11bGF0b3IsIHZhbHVlLCBrZXksIG1hcCk7XG4gICAgICB9XG4gICAgfSwgeyBBU19FTlRSSUVTOiB0cnVlLCBJU19JVEVSQVRPUjogdHJ1ZSB9KTtcbiAgICBpZiAobm9Jbml0aWFsKSB0aHJvdyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBtYXAgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgZ2V0TWFwSXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1hcC1pdGVyYXRvcicpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5zb21lYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNvbGxlY3Rpb24tbWV0aG9kc1xuJCh7IHRhcmdldDogJ01hcCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIG1hcCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBpdGVyYXRvciA9IGdldE1hcEl0ZXJhdG9yKG1hcCk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICByZXR1cm4gaXRlcmF0ZShpdGVyYXRvciwgZnVuY3Rpb24gKGtleSwgdmFsdWUsIHN0b3ApIHtcbiAgICAgIGlmIChib3VuZEZ1bmN0aW9uKHZhbHVlLCBrZXksIG1hcCkpIHJldHVybiBzdG9wKCk7XG4gICAgfSwgeyBBU19FTlRSSUVTOiB0cnVlLCBJU19JVEVSQVRPUjogdHJ1ZSwgSU5URVJSVVBURUQ6IHRydWUgfSkuc3RvcHBlZDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS51cGRhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnTWFwJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKGtleSwgY2FsbGJhY2sgLyogLCB0aHVuayAqLykge1xuICAgIHZhciBtYXAgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBhQ2FsbGFibGUoY2FsbGJhY2spO1xuICAgIHZhciBpc1ByZXNlbnRJbk1hcCA9IG1hcC5oYXMoa2V5KTtcbiAgICBpZiAoIWlzUHJlc2VudEluTWFwICYmIGxlbmd0aCA8IDMpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignVXBkYXRpbmcgYWJzZW50IHZhbHVlJyk7XG4gICAgfVxuICAgIHZhciB2YWx1ZSA9IGlzUHJlc2VudEluTWFwID8gbWFwLmdldChrZXkpIDogYUNhbGxhYmxlKGxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpKGtleSwgbWFwKTtcbiAgICBtYXAuc2V0KGtleSwgY2FsbGJhY2sodmFsdWUsIGtleSwgbWFwKSk7XG4gICAgcmV0dXJuIG1hcDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG4vLyBgTWFwLnByb3RvdHlwZS51cHNlcnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RodW1ic3VwZXAvcHJvcG9zYWwtdXBzZXJ0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHVwc2VydChrZXksIHVwZGF0ZUZuIC8qICwgaW5zZXJ0Rm4gKi8pIHtcbiAgdmFyIG1hcCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgaW5zZXJ0Rm4gPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIHZhbHVlO1xuICBpZiAoIWlzQ2FsbGFibGUodXBkYXRlRm4pICYmICFpc0NhbGxhYmxlKGluc2VydEZuKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignQXQgbGVhc3Qgb25lIGNhbGxiYWNrIHJlcXVpcmVkJyk7XG4gIH1cbiAgaWYgKG1hcC5oYXMoa2V5KSkge1xuICAgIHZhbHVlID0gbWFwLmdldChrZXkpO1xuICAgIGlmIChpc0NhbGxhYmxlKHVwZGF0ZUZuKSkge1xuICAgICAgdmFsdWUgPSB1cGRhdGVGbih2YWx1ZSk7XG4gICAgICBtYXAuc2V0KGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc0NhbGxhYmxlKGluc2VydEZuKSkge1xuICAgIHZhbHVlID0gaW5zZXJ0Rm4oKTtcbiAgICBtYXAuc2V0KGtleSwgdmFsdWUpO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgJHVwc2VydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXAtdXBzZXJ0Jyk7XG5cbi8vIGBNYXAucHJvdG90eXBlLnVwZGF0ZU9ySW5zZXJ0YCBtZXRob2QgKHJlcGxhY2VkIGJ5IGBNYXAucHJvdG90eXBlLmVtcGxhY2VgKVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RodW1ic3VwZXAvcHJvcG9zYWwtdXBzZXJ0XG4kKHsgdGFyZ2V0OiAnTWFwJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIG5hbWU6ICd1cHNlcnQnLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICB1cGRhdGVPckluc2VydDogJHVwc2VydFxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiByZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgJHVwc2VydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYXAtdXBzZXJ0Jyk7XG5cbi8vIGBNYXAucHJvdG90eXBlLnVwc2VydGAgbWV0aG9kIChyZXBsYWNlZCBieSBgTWFwLnByb3RvdHlwZS5lbXBsYWNlYClcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90aHVtYnN1cGVwL3Byb3Bvc2FsLXVwc2VydFxuJCh7IHRhcmdldDogJ01hcCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICB1cHNlcnQ6ICR1cHNlcnRcbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBtYXggPSBNYXRoLm1heDtcblxuLy8gYE1hdGguY2xhbXBgIG1ldGhvZFxuLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlIH0sIHtcbiAgY2xhbXA6IGZ1bmN0aW9uIGNsYW1wKHgsIGxvd2VyLCB1cHBlcikge1xuICAgIHJldHVybiBtaW4odXBwZXIsIG1heChsb3dlciwgeCkpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG4vLyBgTWF0aC5ERUdfUEVSX1JBRGAgY29uc3RhbnRcbi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbiQoeyB0YXJnZXQ6ICdNYXRoJywgc3RhdDogdHJ1ZSB9LCB7XG4gIERFR19QRVJfUkFEOiBNYXRoLlBJIC8gMTgwXG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG52YXIgUkFEX1BFUl9ERUcgPSAxODAgLyBNYXRoLlBJO1xuXG4vLyBgTWF0aC5kZWdyZWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbiQoeyB0YXJnZXQ6ICdNYXRoJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGRlZ3JlZXM6IGZ1bmN0aW9uIGRlZ3JlZXMocmFkaWFucykge1xuICAgIHJldHVybiByYWRpYW5zICogUkFEX1BFUl9ERUc7XG4gIH1cbn0pO1xuIiwiLy8gYE1hdGguc2NhbGVgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnNjYWxlIHx8IGZ1bmN0aW9uIHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkge1xuICBpZiAoXG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMFxuICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVjayAqL1xuICAgICAgfHwgeCAhPSB4XG4gICAgICB8fCBpbkxvdyAhPSBpbkxvd1xuICAgICAgfHwgaW5IaWdoICE9IGluSGlnaFxuICAgICAgfHwgb3V0TG93ICE9IG91dExvd1xuICAgICAgfHwgb3V0SGlnaCAhPSBvdXRIaWdoXG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2sgKi9cbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcblxudmFyIHNjYWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtc2NhbGUnKTtcbnZhciBmcm91bmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC1mcm91bmQnKTtcblxuLy8gYE1hdGguZnNjYWxlYCBtZXRob2Rcbi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbiQoeyB0YXJnZXQ6ICdNYXRoJywgc3RhdDogdHJ1ZSB9LCB7XG4gIGZzY2FsZTogZnVuY3Rpb24gZnNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkge1xuICAgIHJldHVybiBmcm91bmQoc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSk7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGBNYXRoLmlhZGRoYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlIH0sIHtcbiAgaWFkZGg6IGZ1bmN0aW9uIGlhZGRoKHgwLCB4MSwgeTAsIHkxKSB7XG4gICAgdmFyICR4MCA9IHgwID4+PiAwO1xuICAgIHZhciAkeDEgPSB4MSA+Pj4gMDtcbiAgICB2YXIgJHkwID0geTAgPj4+IDA7XG4gICAgcmV0dXJuICR4MSArICh5MSA+Pj4gMCkgKyAoKCR4MCAmICR5MCB8ICgkeDAgfCAkeTApICYgfigkeDAgKyAkeTAgPj4+IDApKSA+Pj4gMzEpIHwgMDtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcblxuLy8gYE1hdGguaW11bGhgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUgfSwge1xuICBpbXVsaDogZnVuY3Rpb24gaW11bGgodSwgdikge1xuICAgIHZhciBVSU5UMTYgPSAweEZGRkY7XG4gICAgdmFyICR1ID0gK3U7XG4gICAgdmFyICR2ID0gK3Y7XG4gICAgdmFyIHUwID0gJHUgJiBVSU5UMTY7XG4gICAgdmFyIHYwID0gJHYgJiBVSU5UMTY7XG4gICAgdmFyIHUxID0gJHUgPj4gMTY7XG4gICAgdmFyIHYxID0gJHYgPj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4gMTYpICsgKCh1MCAqIHYxID4+PiAwKSArICh0ICYgVUlOVDE2KSA+PiAxNik7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGBNYXRoLmlzdWJoYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXN1Ymg6IGZ1bmN0aW9uIGlzdWJoKHgwLCB4MSwgeTAsIHkxKSB7XG4gICAgdmFyICR4MCA9IHgwID4+PiAwO1xuICAgIHZhciAkeDEgPSB4MSA+Pj4gMDtcbiAgICB2YXIgJHkwID0geTAgPj4+IDA7XG4gICAgcmV0dXJuICR4MSAtICh5MSA+Pj4gMCkgLSAoKH4keDAgJiAkeTAgfCB+KCR4MCBeICR5MCkgJiAkeDAgLSAkeTAgPj4+IDApID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG4vLyBgTWF0aC5SQURfUEVSX0RFR2AgY29uc3RhbnRcbi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbiQoeyB0YXJnZXQ6ICdNYXRoJywgc3RhdDogdHJ1ZSB9LCB7XG4gIFJBRF9QRVJfREVHOiAxODAgLyBNYXRoLlBJXG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG52YXIgREVHX1BFUl9SQUQgPSBNYXRoLlBJIC8gMTgwO1xuXG4vLyBgTWF0aC5yYWRpYW5zYCBtZXRob2Rcbi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbiQoeyB0YXJnZXQ6ICdNYXRoJywgc3RhdDogdHJ1ZSB9LCB7XG4gIHJhZGlhbnM6IGZ1bmN0aW9uIHJhZGlhbnMoZGVncmVlcykge1xuICAgIHJldHVybiBkZWdyZWVzICogREVHX1BFUl9SQUQ7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgc2NhbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWF0aC1zY2FsZScpO1xuXG4vLyBgTWF0aC5zY2FsZWAgbWV0aG9kXG4vLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUgfSwge1xuICBzY2FsZTogc2NhbGVcbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgbnVtYmVySXNGaW5pdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbnVtYmVyLWlzLWZpbml0ZScpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgU0VFREVEX1JBTkRPTSA9ICdTZWVkZWQgUmFuZG9tJztcbnZhciBTRUVERURfUkFORE9NX0dFTkVSQVRPUiA9IFNFRURFRF9SQU5ET00gKyAnIEdlbmVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTRUVERURfUkFORE9NX0dFTkVSQVRPUik7XG52YXIgU0VFRF9UWVBFX0VSUk9SID0gJ01hdGguc2VlZGVkUFJORygpIGFyZ3VtZW50IHNob3VsZCBoYXZlIGEgXCJzZWVkXCIgZmllbGQgd2l0aCBhIGZpbml0ZSB2YWx1ZS4nO1xuXG52YXIgJFNlZWRlZFJhbmRvbUdlbmVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoZnVuY3Rpb24gU2VlZGVkUmFuZG9tR2VuZXJhdG9yKHNlZWQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogU0VFREVEX1JBTkRPTV9HRU5FUkFUT1IsXG4gICAgc2VlZDogc2VlZCAlIDIxNDc0ODM2NDdcbiAgfSk7XG59LCBTRUVERURfUkFORE9NLCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgc2VlZCA9IHN0YXRlLnNlZWQgPSAoc3RhdGUuc2VlZCAqIDExMDM1MTUyNDUgKyAxMjM0NSkgJSAyMTQ3NDgzNjQ3O1xuICByZXR1cm4geyB2YWx1ZTogKHNlZWQgJiAxMDczNzQxODIzKSAvIDEwNzM3NDE4MjMsIGRvbmU6IGZhbHNlIH07XG59KTtcblxuLy8gYE1hdGguc2VlZGVkUFJOR2AgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZWVkZWQtcmFuZG9tXG4vLyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZWVkZWQtcmFuZG9tL2Jsb2IvNzhiODI1ODgzNWI1N2ZjMjEwMGQwNzYxNTFhYjUwNmJjMzIwMmFlNi9kZW1vLmh0bWxcbiQoeyB0YXJnZXQ6ICdNYXRoJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgc2VlZGVkUFJORzogZnVuY3Rpb24gc2VlZGVkUFJORyhpdCkge1xuICAgIHZhciBzZWVkID0gYW5PYmplY3QoaXQpLnNlZWQ7XG4gICAgaWYgKCFudW1iZXJJc0Zpbml0ZShzZWVkKSkgdGhyb3cgVHlwZUVycm9yKFNFRURfVFlQRV9FUlJPUik7XG4gICAgcmV0dXJuIG5ldyAkU2VlZGVkUmFuZG9tR2VuZXJhdG9yKHNlZWQpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuXG4vLyBgTWF0aC5zaWduYml0YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLU1hdGguc2lnbmJpdFxuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlIH0sIHtcbiAgc2lnbmJpdDogZnVuY3Rpb24gc2lnbmJpdCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpID09IHggJiYgeCA9PSAwID8gMSAvIHggPT0gLUluZmluaXR5IDogeCA8IDA7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGBNYXRoLnVtdWxoYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxuJCh7IHRhcmdldDogJ01hdGgnLCBzdGF0OiB0cnVlIH0sIHtcbiAgdW11bGg6IGZ1bmN0aW9uIHVtdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhGRkZGO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+Pj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4+IDE2KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciBwYXJzZUludCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9udW1iZXItcGFyc2UtaW50Jyk7XG5cbnZhciBJTlZBTElEX05VTUJFUl9SRVBSRVNFTlRBVElPTiA9ICdJbnZhbGlkIG51bWJlciByZXByZXNlbnRhdGlvbic7XG52YXIgSU5WQUxJRF9SQURJWCA9ICdJbnZhbGlkIHJhZGl4JztcbnZhciB2YWxpZCA9IC9eW1xcZGEtel0rJC87XG5cbi8vIGBOdW1iZXIuZnJvbVN0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1udW1iZXItZnJvbXN0cmluZ1xuJCh7IHRhcmdldDogJ051bWJlcicsIHN0YXQ6IHRydWUgfSwge1xuICBmcm9tU3RyaW5nOiBmdW5jdGlvbiBmcm9tU3RyaW5nKHN0cmluZywgcmFkaXgpIHtcbiAgICB2YXIgc2lnbiA9IDE7XG4gICAgdmFyIFIsIG1hdGhOdW07XG4gICAgaWYgKHR5cGVvZiBzdHJpbmcgIT0gJ3N0cmluZycpIHRocm93IFR5cGVFcnJvcihJTlZBTElEX05VTUJFUl9SRVBSRVNFTlRBVElPTik7XG4gICAgaWYgKCFzdHJpbmcubGVuZ3RoKSB0aHJvdyBTeW50YXhFcnJvcihJTlZBTElEX05VTUJFUl9SRVBSRVNFTlRBVElPTik7XG4gICAgaWYgKHN0cmluZy5jaGFyQXQoMCkgPT0gJy0nKSB7XG4gICAgICBzaWduID0gLTE7XG4gICAgICBzdHJpbmcgPSBzdHJpbmcuc2xpY2UoMSk7XG4gICAgICBpZiAoIXN0cmluZy5sZW5ndGgpIHRocm93IFN5bnRheEVycm9yKElOVkFMSURfTlVNQkVSX1JFUFJFU0VOVEFUSU9OKTtcbiAgICB9XG4gICAgUiA9IHJhZGl4ID09PSB1bmRlZmluZWQgPyAxMCA6IHRvSW50ZWdlck9ySW5maW5pdHkocmFkaXgpO1xuICAgIGlmIChSIDwgMiB8fCBSID4gMzYpIHRocm93IFJhbmdlRXJyb3IoSU5WQUxJRF9SQURJWCk7XG4gICAgaWYgKCF2YWxpZC50ZXN0KHN0cmluZykgfHwgKG1hdGhOdW0gPSBwYXJzZUludChzdHJpbmcsIFIpKS50b1N0cmluZyhSKSAhPT0gc3RyaW5nKSB7XG4gICAgICB0aHJvdyBTeW50YXhFcnJvcihJTlZBTElEX05VTUJFUl9SRVBSRVNFTlRBVElPTik7XG4gICAgfVxuICAgIHJldHVybiBzaWduICogbWF0aE51bTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBOdW1lcmljUmFuZ2VJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9udW1lcmljLXJhbmdlLWl0ZXJhdG9yJyk7XG5cbi8vIGBOdW1iZXIucmFuZ2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtTnVtYmVyLnJhbmdlXG4kKHsgdGFyZ2V0OiAnTnVtYmVyJywgc3RhdDogdHJ1ZSB9LCB7XG4gIHJhbmdlOiBmdW5jdGlvbiByYW5nZShzdGFydCwgZW5kLCBvcHRpb24pIHtcbiAgICByZXR1cm4gbmV3IE51bWVyaWNSYW5nZUl0ZXJhdG9yKHN0YXJ0LCBlbmQsIG9wdGlvbiwgJ251bWJlcicsIDAsIDEpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlcmF0b3ItY29uc3RydWN0b3InKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIE9CSkVDVF9JVEVSQVRPUiA9ICdPYmplY3QgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoT0JKRUNUX0lURVJBVE9SKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKGZ1bmN0aW9uIE9iamVjdEl0ZXJhdG9yKHNvdXJjZSwgbW9kZSkge1xuICB2YXIgb2JqZWN0ID0gdG9PYmplY3Qoc291cmNlKTtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogT0JKRUNUX0lURVJBVE9SLFxuICAgIG1vZGU6IG1vZGUsXG4gICAgb2JqZWN0OiBvYmplY3QsXG4gICAga2V5czogb2JqZWN0S2V5cyhvYmplY3QpLFxuICAgIGluZGV4OiAwXG4gIH0pO1xufSwgJ09iamVjdCcsIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciBrZXlzID0gc3RhdGUua2V5cztcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAoa2V5cyA9PT0gbnVsbCB8fCBzdGF0ZS5pbmRleCA+PSBrZXlzLmxlbmd0aCkge1xuICAgICAgc3RhdGUub2JqZWN0ID0gc3RhdGUua2V5cyA9IG51bGw7XG4gICAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gICAgfVxuICAgIHZhciBrZXkgPSBrZXlzW3N0YXRlLmluZGV4KytdO1xuICAgIHZhciBvYmplY3QgPSBzdGF0ZS5vYmplY3Q7XG4gICAgaWYgKCFoYXNPd24ob2JqZWN0LCBrZXkpKSBjb250aW51ZTtcbiAgICBzd2l0Y2ggKHN0YXRlLm1vZGUpIHtcbiAgICAgIGNhc2UgJ2tleXMnOiByZXR1cm4geyB2YWx1ZToga2V5LCBkb25lOiBmYWxzZSB9O1xuICAgICAgY2FzZSAndmFsdWVzJzogcmV0dXJuIHsgdmFsdWU6IG9iamVjdFtrZXldLCBkb25lOiBmYWxzZSB9O1xuICAgIH0gLyogZW50cmllcyAqLyByZXR1cm4geyB2YWx1ZTogW2tleSwgb2JqZWN0W2tleV1dLCBkb25lOiBmYWxzZSB9O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIE9iamVjdEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pdGVyYXRvcicpO1xuXG4vLyBgT2JqZWN0Lml0ZXJhdGVFbnRyaWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC1pdGVyYXRpb25cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXRlcmF0ZUVudHJpZXM6IGZ1bmN0aW9uIGl0ZXJhdGVFbnRyaWVzKG9iamVjdCkge1xuICAgIHJldHVybiBuZXcgT2JqZWN0SXRlcmF0b3Iob2JqZWN0LCAnZW50cmllcycpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIE9iamVjdEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pdGVyYXRvcicpO1xuXG4vLyBgT2JqZWN0Lml0ZXJhdGVLZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC1pdGVyYXRpb25cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgaXRlcmF0ZUtleXM6IGZ1bmN0aW9uIGl0ZXJhdGVLZXlzKG9iamVjdCkge1xuICAgIHJldHVybiBuZXcgT2JqZWN0SXRlcmF0b3Iob2JqZWN0LCAna2V5cycpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIE9iamVjdEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pdGVyYXRvcicpO1xuXG4vLyBgT2JqZWN0Lml0ZXJhdGVWYWx1ZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LWl0ZXJhdGlvblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBpdGVyYXRlVmFsdWVzOiBmdW5jdGlvbiBpdGVyYXRlVmFsdWVzKG9iamVjdCkge1xuICAgIHJldHVybiBuZXcgT2JqZWN0SXRlcmF0b3Iob2JqZWN0LCAndmFsdWVzJyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JzZXJ2YWJsZVxudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lLWFsbCcpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgaG9zdFJlcG9ydEVycm9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9ob3N0LXJlcG9ydC1lcnJvcnMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBPQlNFUlZBQkxFID0gd2VsbEtub3duU3ltYm9sKCdvYnNlcnZhYmxlJyk7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcblxudmFyIGNsZWFudXBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uU3RhdGUpIHtcbiAgdmFyIGNsZWFudXAgPSBzdWJzY3JpcHRpb25TdGF0ZS5jbGVhbnVwO1xuICBpZiAoY2xlYW51cCkge1xuICAgIHN1YnNjcmlwdGlvblN0YXRlLmNsZWFudXAgPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGNsZWFudXAoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaG9zdFJlcG9ydEVycm9ycyhlcnJvcik7XG4gICAgfVxuICB9XG59O1xuXG52YXIgc3Vic2NyaXB0aW9uQ2xvc2VkID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvblN0YXRlKSB7XG4gIHJldHVybiBzdWJzY3JpcHRpb25TdGF0ZS5vYnNlcnZlciA9PT0gdW5kZWZpbmVkO1xufTtcblxudmFyIGNsb3NlID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvblN0YXRlKSB7XG4gIHZhciBzdWJzY3JpcHRpb24gPSBzdWJzY3JpcHRpb25TdGF0ZS5mYWNhZGU7XG4gIGlmICghREVTQ1JJUFRPUlMpIHtcbiAgICBzdWJzY3JpcHRpb24uY2xvc2VkID0gdHJ1ZTtcbiAgICB2YXIgc3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb25TdGF0ZS5zdWJzY3JpcHRpb25PYnNlcnZlcjtcbiAgICBpZiAoc3Vic2NyaXB0aW9uT2JzZXJ2ZXIpIHN1YnNjcmlwdGlvbk9ic2VydmVyLmNsb3NlZCA9IHRydWU7XG4gIH0gc3Vic2NyaXB0aW9uU3RhdGUub2JzZXJ2ZXIgPSB1bmRlZmluZWQ7XG59O1xuXG52YXIgU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzdWJzY3JpYmVyKSB7XG4gIHZhciBzdWJzY3JpcHRpb25TdGF0ZSA9IHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIGNsZWFudXA6IHVuZGVmaW5lZCxcbiAgICBvYnNlcnZlcjogYW5PYmplY3Qob2JzZXJ2ZXIpLFxuICAgIHN1YnNjcmlwdGlvbk9ic2VydmVyOiB1bmRlZmluZWRcbiAgfSk7XG4gIHZhciBzdGFydDtcbiAgaWYgKCFERVNDUklQVE9SUykgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICBpZiAoc3RhcnQgPSBnZXRNZXRob2Qob2JzZXJ2ZXIsICdzdGFydCcpKSBzdGFydC5jYWxsKG9ic2VydmVyLCB0aGlzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBob3N0UmVwb3J0RXJyb3JzKGVycm9yKTtcbiAgfVxuICBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvblN0YXRlKSkgcmV0dXJuO1xuICB2YXIgc3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb25TdGF0ZS5zdWJzY3JpcHRpb25PYnNlcnZlciA9IG5ldyBTdWJzY3JpcHRpb25PYnNlcnZlcih0aGlzKTtcbiAgdHJ5IHtcbiAgICB2YXIgY2xlYW51cCA9IHN1YnNjcmliZXIoc3Vic2NyaXB0aW9uT2JzZXJ2ZXIpO1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSBjbGVhbnVwO1xuICAgIGlmIChjbGVhbnVwICE9IG51bGwpIHN1YnNjcmlwdGlvblN0YXRlLmNsZWFudXAgPSBpc0NhbGxhYmxlKGNsZWFudXAudW5zdWJzY3JpYmUpXG4gICAgICA/IGZ1bmN0aW9uICgpIHsgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IH1cbiAgICAgIDogYUNhbGxhYmxlKGNsZWFudXApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHN1YnNjcmlwdGlvbk9ic2VydmVyLmVycm9yKGVycm9yKTtcbiAgICByZXR1cm47XG4gIH0gaWYgKHN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb25TdGF0ZSkpIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uU3RhdGUpO1xufTtcblxuU3Vic2NyaXB0aW9uLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIHVuc3Vic2NyaWJlOiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uU3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvblN0YXRlKSkge1xuICAgICAgY2xvc2Uoc3Vic2NyaXB0aW9uU3RhdGUpO1xuICAgICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb25TdGF0ZSk7XG4gICAgfVxuICB9XG59KTtcblxuaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eShTdWJzY3JpcHRpb24ucHJvdG90eXBlLCAnY2xvc2VkJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBzdWJzY3JpcHRpb25DbG9zZWQoZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKSk7XG4gIH1cbn0pO1xuXG52YXIgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywgeyBzdWJzY3JpcHRpb246IHN1YnNjcmlwdGlvbiB9KTtcbiAgaWYgKCFERVNDUklQVE9SUykgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbn07XG5cblN1YnNjcmlwdGlvbk9ic2VydmVyLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIG5leHQ6IGZ1bmN0aW9uIG5leHQodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uU3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKGdldEludGVybmFsU3RhdGUodGhpcykuc3Vic2NyaXB0aW9uKTtcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb25TdGF0ZSkpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvblN0YXRlLm9ic2VydmVyO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG5leHRNZXRob2QgPSBnZXRNZXRob2Qob2JzZXJ2ZXIsICduZXh0Jyk7XG4gICAgICAgIGlmIChuZXh0TWV0aG9kKSBuZXh0TWV0aG9kLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhvc3RSZXBvcnRFcnJvcnMoZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZXJyb3I6IGZ1bmN0aW9uIGVycm9yKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvblN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZShnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnN1YnNjcmlwdGlvbik7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uU3RhdGUpKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb25TdGF0ZS5vYnNlcnZlcjtcbiAgICAgIGNsb3NlKHN1YnNjcmlwdGlvblN0YXRlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBlcnJvck1ldGhvZCA9IGdldE1ldGhvZChvYnNlcnZlciwgJ2Vycm9yJyk7XG4gICAgICAgIGlmIChlcnJvck1ldGhvZCkgZXJyb3JNZXRob2QuY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgICAgICBlbHNlIGhvc3RSZXBvcnRFcnJvcnModmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGhvc3RSZXBvcnRFcnJvcnMoZXJyKTtcbiAgICAgIH0gY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb25TdGF0ZSk7XG4gICAgfVxuICB9LFxuICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUoKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvblN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZShnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLnN1YnNjcmlwdGlvbik7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uU3RhdGUpKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb25TdGF0ZS5vYnNlcnZlcjtcbiAgICAgIGNsb3NlKHN1YnNjcmlwdGlvblN0YXRlKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBjb21wbGV0ZU1ldGhvZCA9IGdldE1ldGhvZChvYnNlcnZlciwgJ2NvbXBsZXRlJyk7XG4gICAgICAgIGlmIChjb21wbGV0ZU1ldGhvZCkgY29tcGxldGVNZXRob2QuY2FsbChvYnNlcnZlcik7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBob3N0UmVwb3J0RXJyb3JzKGVycm9yKTtcbiAgICAgIH0gY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb25TdGF0ZSk7XG4gICAgfVxuICB9XG59KTtcblxuaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eShTdWJzY3JpcHRpb25PYnNlcnZlci5wcm90b3R5cGUsICdjbG9zZWQnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHN1YnNjcmlwdGlvbkNsb3NlZChnZXRJbnRlcm5hbFN0YXRlKGdldEludGVybmFsU3RhdGUodGhpcykuc3Vic2NyaXB0aW9uKSk7XG4gIH1cbn0pO1xuXG52YXIgJE9ic2VydmFibGUgPSBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZXIpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCAkT2JzZXJ2YWJsZSwgJ09ic2VydmFibGUnKTtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7IHN1YnNjcmliZXI6IGFDYWxsYWJsZShzdWJzY3JpYmVyKSB9KTtcbn07XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwge1xuICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGlzQ2FsbGFibGUob2JzZXJ2ZXIpID8ge1xuICAgICAgbmV4dDogb2JzZXJ2ZXIsXG4gICAgICBlcnJvcjogbGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCxcbiAgICAgIGNvbXBsZXRlOiBsZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkXG4gICAgfSA6IGlzT2JqZWN0KG9ic2VydmVyKSA/IG9ic2VydmVyIDoge30sIGdldEludGVybmFsU3RhdGUodGhpcykuc3Vic2NyaWJlcik7XG4gIH1cbn0pO1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZSwge1xuICBmcm9tOiBmdW5jdGlvbiBmcm9tKHgpIHtcbiAgICB2YXIgQyA9IGlzQ29uc3RydWN0b3IodGhpcykgPyB0aGlzIDogJE9ic2VydmFibGU7XG4gICAgdmFyIG9ic2VydmFibGVNZXRob2QgPSBnZXRNZXRob2QoYW5PYmplY3QoeCksIE9CU0VSVkFCTEUpO1xuICAgIGlmIChvYnNlcnZhYmxlTWV0aG9kKSB7XG4gICAgICB2YXIgb2JzZXJ2YWJsZSA9IGFuT2JqZWN0KG9ic2VydmFibGVNZXRob2QuY2FsbCh4KSk7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZS5jb25zdHJ1Y3RvciA9PT0gQyA/IG9ic2VydmFibGUgOiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB2YXIgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcih4KTtcbiAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICBpdGVyYXRlKGl0ZXJhdG9yLCBmdW5jdGlvbiAoaXQsIHN0b3ApIHtcbiAgICAgICAgb2JzZXJ2ZXIubmV4dChpdCk7XG4gICAgICAgIGlmIChvYnNlcnZlci5jbG9zZWQpIHJldHVybiBzdG9wKCk7XG4gICAgICB9LCB7IElTX0lURVJBVE9SOiB0cnVlLCBJTlRFUlJVUFRFRDogdHJ1ZSB9KTtcbiAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG4gIH0sXG4gIG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICB2YXIgQyA9IGlzQ29uc3RydWN0b3IodGhpcykgPyB0aGlzIDogJE9ic2VydmFibGU7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGl0ZW1zID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIGl0ZW1zW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCsrXTtcbiAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG9ic2VydmVyLm5leHQoaXRlbXNbaV0pO1xuICAgICAgICBpZiAob2JzZXJ2ZXIuY2xvc2VkKSByZXR1cm47XG4gICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5yZWRlZmluZSgkT2JzZXJ2YWJsZS5wcm90b3R5cGUsIE9CU0VSVkFCTEUsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG4kKHsgZ2xvYmFsOiB0cnVlIH0sIHtcbiAgT2JzZXJ2YWJsZTogJE9ic2VydmFibGVcbn0pO1xuXG5zZXRTcGVjaWVzKCdPYnNlcnZhYmxlJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wZXJmb3JtJyk7XG5cbi8vIGBQcm9taXNlLnRyeWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXRyeVxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlIH0sIHtcbiAgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZih0aGlzKTtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgICAocmVzdWx0LmVycm9yID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIvLyBUT0RPOiBpbiBjb3JlLWpzQDQsIG1vdmUgL21vZHVsZXMvIGRlcGVuZGVuY2llcyB0byBwdWJsaWMgZW50cmllcyBmb3IgYmV0dGVyIG9wdGltaXphdGlvbiBieSB0b29scyBsaWtlIGBwcmVzZXQtZW52YFxudmFyIE1hcCA9IHJlcXVpcmUoJy4uL21vZHVsZXMvZXMubWFwJyk7XG52YXIgV2Vha01hcCA9IHJlcXVpcmUoJy4uL21vZHVsZXMvZXMud2Vhay1tYXAnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG5cbnZhciBtZXRhZGF0YSA9IHNoYXJlZCgnbWV0YWRhdGEnKTtcbnZhciBzdG9yZSA9IG1ldGFkYXRhLnN0b3JlIHx8IChtZXRhZGF0YS5zdG9yZSA9IG5ldyBXZWFrTWFwKCkpO1xuXG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSwgY3JlYXRlKSB7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICBpZiAoIXRhcmdldE1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybjtcbiAgICBzdG9yZS5zZXQodGFyZ2V0LCB0YXJnZXRNZXRhZGF0YSA9IG5ldyBNYXAoKSk7XG4gIH1cbiAgdmFyIGtleU1ldGFkYXRhID0gdGFyZ2V0TWV0YWRhdGEuZ2V0KHRhcmdldEtleSk7XG4gIGlmICgha2V5TWV0YWRhdGEpIHtcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuO1xuICAgIHRhcmdldE1ldGFkYXRhLnNldCh0YXJnZXRLZXksIGtleU1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfSByZXR1cm4ga2V5TWV0YWRhdGE7XG59O1xuXG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG1ldGFkYXRhTWFwLmhhcyhNZXRhZGF0YUtleSk7XG59O1xuXG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBtZXRhZGF0YU1hcC5nZXQoTWV0YWRhdGFLZXkpO1xufTtcblxudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUsIE8sIFApIHtcbiAgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCB0cnVlKS5zZXQoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUpO1xufTtcblxudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAodGFyZ2V0LCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgdmFyIGtleXMgPSBbXTtcbiAgaWYgKG1ldGFkYXRhTWFwKSBtZXRhZGF0YU1hcC5mb3JFYWNoKGZ1bmN0aW9uIChfLCBrZXkpIHsga2V5cy5wdXNoKGtleSk7IH0pO1xuICByZXR1cm4ga2V5cztcbn07XG5cbnZhciB0b01ldGFkYXRhS2V5ID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdG9yZTogc3RvcmUsXG4gIGdldE1hcDogZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCxcbiAgaGFzOiBvcmRpbmFyeUhhc093bk1ldGFkYXRhLFxuICBnZXQ6IG9yZGluYXJ5R2V0T3duTWV0YWRhdGEsXG4gIHNldDogb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSxcbiAga2V5czogb3JkaW5hcnlPd25NZXRhZGF0YUtleXMsXG4gIHRvS2V5OiB0b01ldGFkYXRhS2V5XG59O1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgUmVmbGVjdE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZmxlY3QtbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxudmFyIHRvTWV0YWRhdGFLZXkgPSBSZWZsZWN0TWV0YWRhdGFNb2R1bGUudG9LZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IFJlZmxlY3RNZXRhZGF0YU1vZHVsZS5zZXQ7XG5cbi8vIGBSZWZsZWN0LmRlZmluZU1ldGFkYXRhYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yYnVja3Rvbi9yZWZsZWN0LW1ldGFkYXRhXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBkZWZpbmVNZXRhZGF0YTogZnVuY3Rpb24gZGVmaW5lTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICAgIHZhciB0YXJnZXRLZXkgPSBhcmd1bWVudHMubGVuZ3RoIDwgNCA/IHVuZGVmaW5lZCA6IHRvTWV0YWRhdGFLZXkoYXJndW1lbnRzWzNdKTtcbiAgICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCBhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXkpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIFJlZmxlY3RNZXRhZGF0YU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWZsZWN0LW1ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciB0b01ldGFkYXRhS2V5ID0gUmVmbGVjdE1ldGFkYXRhTW9kdWxlLnRvS2V5O1xudmFyIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAgPSBSZWZsZWN0TWV0YWRhdGFNb2R1bGUuZ2V0TWFwO1xudmFyIHN0b3JlID0gUmVmbGVjdE1ldGFkYXRhTW9kdWxlLnN0b3JlO1xuXG4vLyBgUmVmbGVjdC5kZWxldGVNZXRhZGF0YWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vcmJ1Y2t0b24vcmVmbGVjdC1tZXRhZGF0YVxuJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgZGVsZXRlTWV0YWRhdGE6IGZ1bmN0aW9uIGRlbGV0ZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgICB2YXIgdGFyZ2V0S2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFkYXRhS2V5KGFyZ3VtZW50c1syXSk7XG4gICAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgICBpZiAobWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCB8fCAhbWV0YWRhdGFNYXBbJ2RlbGV0ZSddKG1ldGFkYXRhS2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChtZXRhZGF0YU1hcC5zaXplKSByZXR1cm4gdHJ1ZTtcbiAgICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgICB0YXJnZXRNZXRhZGF0YVsnZGVsZXRlJ10odGFyZ2V0S2V5KTtcbiAgICByZXR1cm4gISF0YXJnZXRNZXRhZGF0YS5zaXplIHx8IHN0b3JlWydkZWxldGUnXSh0YXJnZXQpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIFJlZmxlY3RNZXRhZGF0YU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWZsZWN0LW1ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcblxudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBSZWZsZWN0TWV0YWRhdGFNb2R1bGUuaGFzO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBSZWZsZWN0TWV0YWRhdGFNb2R1bGUuZ2V0O1xudmFyIHRvTWV0YWRhdGFLZXkgPSBSZWZsZWN0TWV0YWRhdGFNb2R1bGUudG9LZXk7XG5cbnZhciBvcmRpbmFyeUdldE1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIHJldHVybiBwYXJlbnQgIT09IG51bGwgPyBvcmRpbmFyeUdldE1ldGFkYXRhKE1ldGFkYXRhS2V5LCBwYXJlbnQsIFApIDogdW5kZWZpbmVkO1xufTtcblxuLy8gYFJlZmxlY3QuZ2V0TWV0YWRhdGFgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3JidWNrdG9uL3JlZmxlY3QtbWV0YWRhdGFcbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGdldE1ldGFkYXRhOiBmdW5jdGlvbiBnZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gICAgdmFyIHRhcmdldEtleSA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhZGF0YUtleShhcmd1bWVudHNbMl0pO1xuICAgIHJldHVybiBvcmRpbmFyeUdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXkpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xuLy8gVE9ETzogaW4gY29yZS1qc0A0LCBtb3ZlIC9tb2R1bGVzLyBkZXBlbmRlbmNpZXMgdG8gcHVibGljIGVudHJpZXMgZm9yIGJldHRlciBvcHRpbWl6YXRpb24gYnkgdG9vbHMgbGlrZSBgcHJlc2V0LWVudmBcbnZhciBTZXQgPSByZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnNldCcpO1xudmFyIFJlZmxlY3RNZXRhZGF0YU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWZsZWN0LW1ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcblxudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gUmVmbGVjdE1ldGFkYXRhTW9kdWxlLmtleXM7XG52YXIgdG9NZXRhZGF0YUtleSA9IFJlZmxlY3RNZXRhZGF0YU1vZHVsZS50b0tleTtcblxudmFyIGZyb20gPSBmdW5jdGlvbiAoaXRlcikge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGl0ZXJhdGUoaXRlciwgcmVzdWx0LnB1c2gsIHsgdGhhdDogcmVzdWx0IH0pO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyIG9yZGluYXJ5TWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKE8sIFApIHtcbiAgdmFyIG9LZXlzID0gb3JkaW5hcnlPd25NZXRhZGF0YUtleXMoTywgUCk7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgaWYgKHBhcmVudCA9PT0gbnVsbCkgcmV0dXJuIG9LZXlzO1xuICB2YXIgcEtleXMgPSBvcmRpbmFyeU1ldGFkYXRhS2V5cyhwYXJlbnQsIFApO1xuICByZXR1cm4gcEtleXMubGVuZ3RoID8gb0tleXMubGVuZ3RoID8gZnJvbShuZXcgU2V0KG9LZXlzLmNvbmNhdChwS2V5cykpKSA6IHBLZXlzIDogb0tleXM7XG59O1xuXG4vLyBgUmVmbGVjdC5nZXRNZXRhZGF0YUtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3JidWNrdG9uL3JlZmxlY3QtbWV0YWRhdGFcbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGdldE1ldGFkYXRhS2V5czogZnVuY3Rpb24gZ2V0TWV0YWRhdGFLZXlzKHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICAgIHZhciB0YXJnZXRLZXkgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YWRhdGFLZXkoYXJndW1lbnRzWzFdKTtcbiAgICByZXR1cm4gb3JkaW5hcnlNZXRhZGF0YUtleXMoYW5PYmplY3QodGFyZ2V0KSwgdGFyZ2V0S2V5KTtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBSZWZsZWN0TWV0YWRhdGFNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVmbGVjdC1tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IFJlZmxlY3RNZXRhZGF0YU1vZHVsZS5nZXQ7XG52YXIgdG9NZXRhZGF0YUtleSA9IFJlZmxlY3RNZXRhZGF0YU1vZHVsZS50b0tleTtcblxuLy8gYFJlZmxlY3QuZ2V0T3duTWV0YWRhdGFgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3JidWNrdG9uL3JlZmxlY3QtbWV0YWRhdGFcbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGdldE93bk1ldGFkYXRhOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gICAgdmFyIHRhcmdldEtleSA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhZGF0YUtleShhcmd1bWVudHNbMl0pO1xuICAgIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXkpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIFJlZmxlY3RNZXRhZGF0YU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWZsZWN0LW1ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IFJlZmxlY3RNZXRhZGF0YU1vZHVsZS5rZXlzO1xudmFyIHRvTWV0YWRhdGFLZXkgPSBSZWZsZWN0TWV0YWRhdGFNb2R1bGUudG9LZXk7XG5cbi8vIGBSZWZsZWN0LmdldE93bk1ldGFkYXRhS2V5c2AgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vcmJ1Y2t0b24vcmVmbGVjdC1tZXRhZGF0YVxuJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgZ2V0T3duTWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gICAgdmFyIHRhcmdldEtleSA9IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gdW5kZWZpbmVkIDogdG9NZXRhZGF0YUtleShhcmd1bWVudHNbMV0pO1xuICAgIHJldHVybiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXkpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIFJlZmxlY3RNZXRhZGF0YU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWZsZWN0LW1ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcblxudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBSZWZsZWN0TWV0YWRhdGFNb2R1bGUuaGFzO1xudmFyIHRvTWV0YWRhdGFLZXkgPSBSZWZsZWN0TWV0YWRhdGFNb2R1bGUudG9LZXk7XG5cbnZhciBvcmRpbmFyeUhhc01ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIHRydWU7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5SGFzTWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiBmYWxzZTtcbn07XG5cbi8vIGBSZWZsZWN0Lmhhc01ldGFkYXRhYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yYnVja3Rvbi9yZWZsZWN0LW1ldGFkYXRhXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBoYXNNZXRhZGF0YTogZnVuY3Rpb24gaGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICAgIHZhciB0YXJnZXRLZXkgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YWRhdGFLZXkoYXJndW1lbnRzWzJdKTtcbiAgICByZXR1cm4gb3JkaW5hcnlIYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KSwgdGFyZ2V0S2V5KTtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBSZWZsZWN0TWV0YWRhdGFNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVmbGVjdC1tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IFJlZmxlY3RNZXRhZGF0YU1vZHVsZS5oYXM7XG52YXIgdG9NZXRhZGF0YUtleSA9IFJlZmxlY3RNZXRhZGF0YU1vZHVsZS50b0tleTtcblxuLy8gYFJlZmxlY3QuaGFzT3duTWV0YWRhdGFgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3JidWNrdG9uL3JlZmxlY3QtbWV0YWRhdGFcbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGhhc093bk1ldGFkYXRhOiBmdW5jdGlvbiBoYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gICAgdmFyIHRhcmdldEtleSA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhZGF0YUtleShhcmd1bWVudHNbMl0pO1xuICAgIHJldHVybiBvcmRpbmFyeUhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXkpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIFJlZmxlY3RNZXRhZGF0YU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWZsZWN0LW1ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciB0b01ldGFkYXRhS2V5ID0gUmVmbGVjdE1ldGFkYXRhTW9kdWxlLnRvS2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBSZWZsZWN0TWV0YWRhdGFNb2R1bGUuc2V0O1xuXG4vLyBgUmVmbGVjdC5tZXRhZGF0YWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vcmJ1Y2t0b24vcmVmbGVjdC1tZXRhZGF0YVxuJCh7IHRhcmdldDogJ1JlZmxlY3QnLCBzdGF0OiB0cnVlIH0sIHtcbiAgbWV0YWRhdGE6IGZ1bmN0aW9uIG1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGRlY29yYXRvcih0YXJnZXQsIGtleSkge1xuICAgICAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgYW5PYmplY3QodGFyZ2V0KSwgdG9NZXRhZGF0YUtleShrZXkpKTtcbiAgICB9O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9jb2xsZWN0aW9uLW1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKC8qIC4uLmVsZW1lbnRzICovKSB7XG4gIHZhciBzZXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIGFkZGVyID0gYUNhbGxhYmxlKHNldC5hZGQpO1xuICBmb3IgKHZhciBrID0gMCwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsgayA8IGxlbjsgaysrKSB7XG4gICAgYWRkZXIuY2FsbChzZXQsIGFyZ3VtZW50c1trXSk7XG4gIH1cbiAgcmV0dXJuIHNldDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBjb2xsZWN0aW9uQWRkQWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24tYWRkLWFsbCcpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5hZGRBbGxgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIGFkZEFsbDogZnVuY3Rpb24gYWRkQWxsKC8qIC4uLmVsZW1lbnRzICovKSB7XG4gICAgcmV0dXJuIGNvbGxlY3Rpb25BZGRBbGwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBjb2xsZWN0aW9uRGVsZXRlQWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24tZGVsZXRlLWFsbCcpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5kZWxldGVBbGxgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIGRlbGV0ZUFsbDogZnVuY3Rpb24gZGVsZXRlQWxsKC8qIC4uLmVsZW1lbnRzICovKSB7XG4gICAgcmV0dXJuIGNvbGxlY3Rpb25EZWxldGVBbGwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuZGlmZmVyZW5jZWAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICBkaWZmZXJlbmNlOiBmdW5jdGlvbiBkaWZmZXJlbmNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIHNldCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBuZXdTZXQgPSBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihzZXQsIGdldEJ1aWx0SW4oJ1NldCcpKSkoc2V0KTtcbiAgICB2YXIgcmVtb3ZlciA9IGFDYWxsYWJsZShuZXdTZXRbJ2RlbGV0ZSddKTtcbiAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJlbW92ZXIuY2FsbChuZXdTZXQsIHZhbHVlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gbmV3U2V0O1xuICB9XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1zZXQgLS0gc2FmZVxuICByZXR1cm4gU2V0LnByb3RvdHlwZS52YWx1ZXMuY2FsbChpdCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBnZXRTZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LWl0ZXJhdG9yJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNvbGxlY3Rpb24tbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgc2V0ID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIGl0ZXJhdG9yID0gZ2V0U2V0SXRlcmF0b3Ioc2V0KTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDMpO1xuICAgIHJldHVybiAhaXRlcmF0ZShpdGVyYXRvciwgZnVuY3Rpb24gKHZhbHVlLCBzdG9wKSB7XG4gICAgICBpZiAoIWJvdW5kRnVuY3Rpb24odmFsdWUsIHZhbHVlLCBzZXQpKSByZXR1cm4gc3RvcCgpO1xuICAgIH0sIHsgSVNfSVRFUkFUT1I6IHRydWUsIElOVEVSUlVQVEVEOiB0cnVlIH0pLnN0b3BwZWQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBnZXRTZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LWl0ZXJhdG9yJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgc2V0ID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIGl0ZXJhdG9yID0gZ2V0U2V0SXRlcmF0b3Ioc2V0KTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDMpO1xuICAgIHZhciBuZXdTZXQgPSBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihzZXQsIGdldEJ1aWx0SW4oJ1NldCcpKSkoKTtcbiAgICB2YXIgYWRkZXIgPSBhQ2FsbGFibGUobmV3U2V0LmFkZCk7XG4gICAgaXRlcmF0ZShpdGVyYXRvciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAoYm91bmRGdW5jdGlvbih2YWx1ZSwgdmFsdWUsIHNldCkpIGFkZGVyLmNhbGwobmV3U2V0LCB2YWx1ZSk7XG4gICAgfSwgeyBJU19JVEVSQVRPUjogdHJ1ZSB9KTtcbiAgICByZXR1cm4gbmV3U2V0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgZ2V0U2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1pdGVyYXRvcicpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5maW5kYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNvbGxlY3Rpb24tbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIHNldCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBpdGVyYXRvciA9IGdldFNldEl0ZXJhdG9yKHNldCk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICByZXR1cm4gaXRlcmF0ZShpdGVyYXRvciwgZnVuY3Rpb24gKHZhbHVlLCBzdG9wKSB7XG4gICAgICBpZiAoYm91bmRGdW5jdGlvbih2YWx1ZSwgdmFsdWUsIHNldCkpIHJldHVybiBzdG9wKHZhbHVlKTtcbiAgICB9LCB7IElTX0lURVJBVE9SOiB0cnVlLCBJTlRFUlJVUFRFRDogdHJ1ZSB9KS5yZXN1bHQ7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLWZyb20nKTtcblxuLy8gYFNldC5mcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5mcm9tXG4kKHsgdGFyZ2V0OiAnU2V0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIGZyb206IGZyb21cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLmludGVyc2VjdGlvbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zZXQtbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICBpbnRlcnNlY3Rpb246IGZ1bmN0aW9uIGludGVyc2VjdGlvbihpdGVyYWJsZSkge1xuICAgIHZhciBzZXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgbmV3U2V0ID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3Ioc2V0LCBnZXRCdWlsdEluKCdTZXQnKSkpKCk7XG4gICAgdmFyIGhhc0NoZWNrID0gYUNhbGxhYmxlKHNldC5oYXMpO1xuICAgIHZhciBhZGRlciA9IGFDYWxsYWJsZShuZXdTZXQuYWRkKTtcbiAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmIChoYXNDaGVjay5jYWxsKHNldCwgdmFsdWUpKSBhZGRlci5jYWxsKG5ld1NldCwgdmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBuZXdTZXQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNEaXNqb2ludEZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc0Rpc2pvaW50RnJvbVxuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICBpc0Rpc2pvaW50RnJvbTogZnVuY3Rpb24gaXNEaXNqb2ludEZyb20oaXRlcmFibGUpIHtcbiAgICB2YXIgc2V0ID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIGhhc0NoZWNrID0gYUNhbGxhYmxlKHNldC5oYXMpO1xuICAgIHJldHVybiAhaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHZhbHVlLCBzdG9wKSB7XG4gICAgICBpZiAoaGFzQ2hlY2suY2FsbChzZXQsIHZhbHVlKSA9PT0gdHJ1ZSkgcmV0dXJuIHN0b3AoKTtcbiAgICB9LCB7IElOVEVSUlVQVEVEOiB0cnVlIH0pLnN0b3BwZWQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuaXNTdWJzZXRPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldC1tZXRob2RzLyNTZXQucHJvdG90eXBlLmlzU3Vic2V0T2ZcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAgaXNTdWJzZXRPZjogZnVuY3Rpb24gaXNTdWJzZXRPZihpdGVyYWJsZSkge1xuICAgIHZhciBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKHRoaXMpO1xuICAgIHZhciBvdGhlclNldCA9IGFuT2JqZWN0KGl0ZXJhYmxlKTtcbiAgICB2YXIgaGFzQ2hlY2sgPSBvdGhlclNldC5oYXM7XG4gICAgaWYgKCFpc0NhbGxhYmxlKGhhc0NoZWNrKSkge1xuICAgICAgb3RoZXJTZXQgPSBuZXcgKGdldEJ1aWx0SW4oJ1NldCcpKShpdGVyYWJsZSk7XG4gICAgICBoYXNDaGVjayA9IGFDYWxsYWJsZShvdGhlclNldC5oYXMpO1xuICAgIH1cbiAgICByZXR1cm4gIWl0ZXJhdGUoaXRlcmF0b3IsIGZ1bmN0aW9uICh2YWx1ZSwgc3RvcCkge1xuICAgICAgaWYgKGhhc0NoZWNrLmNhbGwob3RoZXJTZXQsIHZhbHVlKSA9PT0gZmFsc2UpIHJldHVybiBzdG9wKCk7XG4gICAgfSwgeyBJU19JVEVSQVRPUjogdHJ1ZSwgSU5URVJSVVBURUQ6IHRydWUgfSkuc3RvcHBlZDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5pc1N1cGVyc2V0T2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXQtbWV0aG9kcy8jU2V0LnByb3RvdHlwZS5pc1N1cGVyc2V0T2ZcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAgaXNTdXBlcnNldE9mOiBmdW5jdGlvbiBpc1N1cGVyc2V0T2YoaXRlcmFibGUpIHtcbiAgICB2YXIgc2V0ID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIGhhc0NoZWNrID0gYUNhbGxhYmxlKHNldC5oYXMpO1xuICAgIHJldHVybiAhaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHZhbHVlLCBzdG9wKSB7XG4gICAgICBpZiAoaGFzQ2hlY2suY2FsbChzZXQsIHZhbHVlKSA9PT0gZmFsc2UpIHJldHVybiBzdG9wKCk7XG4gICAgfSwgeyBJTlRFUlJVUFRFRDogdHJ1ZSB9KS5zdG9wcGVkO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldFNldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtaXRlcmF0b3InKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcblxuLy8gYFNldC5wcm90b3R5cGUuam9pbmAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdTZXQnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAgam9pbjogZnVuY3Rpb24gam9pbihzZXBhcmF0b3IpIHtcbiAgICB2YXIgc2V0ID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIGl0ZXJhdG9yID0gZ2V0U2V0SXRlcmF0b3Ioc2V0KTtcbiAgICB2YXIgc2VwID0gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBTdHJpbmcoc2VwYXJhdG9yKTtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgaXRlcmF0ZShpdGVyYXRvciwgcmVzdWx0LnB1c2gsIHsgdGhhdDogcmVzdWx0LCBJU19JVEVSQVRPUjogdHJ1ZSB9KTtcbiAgICByZXR1cm4gcmVzdWx0LmpvaW4oc2VwKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFNldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zZXQtaXRlcmF0b3InKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcblxuLy8gYFNldC5wcm90b3R5cGUubWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNvbGxlY3Rpb24tbWV0aG9kc1xuJCh7IHRhcmdldDogJ1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBzZXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgaXRlcmF0b3IgPSBnZXRTZXRJdGVyYXRvcihzZXQpO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMyk7XG4gICAgdmFyIG5ld1NldCA9IG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKHNldCwgZ2V0QnVpbHRJbignU2V0JykpKSgpO1xuICAgIHZhciBhZGRlciA9IGFDYWxsYWJsZShuZXdTZXQuYWRkKTtcbiAgICBpdGVyYXRlKGl0ZXJhdG9yLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGFkZGVyLmNhbGwobmV3U2V0LCBib3VuZEZ1bmN0aW9uKHZhbHVlLCB2YWx1ZSwgc2V0KSk7XG4gICAgfSwgeyBJU19JVEVSQVRPUjogdHJ1ZSB9KTtcbiAgICByZXR1cm4gbmV3U2V0O1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24tb2YnKTtcblxuLy8gYFNldC5vZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQub2ZcbiQoeyB0YXJnZXQ6ICdTZXQnLCBzdGF0OiB0cnVlIH0sIHtcbiAgb2Y6IG9mXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZ2V0U2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXNldC1pdGVyYXRvcicpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICB2YXIgc2V0ID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIGl0ZXJhdG9yID0gZ2V0U2V0SXRlcmF0b3Ioc2V0KTtcbiAgICB2YXIgbm9Jbml0aWFsID0gYXJndW1lbnRzLmxlbmd0aCA8IDI7XG4gICAgdmFyIGFjY3VtdWxhdG9yID0gbm9Jbml0aWFsID8gdW5kZWZpbmVkIDogYXJndW1lbnRzWzFdO1xuICAgIGFDYWxsYWJsZShjYWxsYmFja2ZuKTtcbiAgICBpdGVyYXRlKGl0ZXJhdG9yLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmIChub0luaXRpYWwpIHtcbiAgICAgICAgbm9Jbml0aWFsID0gZmFsc2U7XG4gICAgICAgIGFjY3VtdWxhdG9yID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY2N1bXVsYXRvciA9IGNhbGxiYWNrZm4oYWNjdW11bGF0b3IsIHZhbHVlLCB2YWx1ZSwgc2V0KTtcbiAgICAgIH1cbiAgICB9LCB7IElTX0lURVJBVE9SOiB0cnVlIH0pO1xuICAgIGlmIChub0luaXRpYWwpIHRocm93IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IHNldCB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBnZXRTZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc2V0LWl0ZXJhdG9yJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnNvbWVgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgc2V0ID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIGl0ZXJhdG9yID0gZ2V0U2V0SXRlcmF0b3Ioc2V0KTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDMpO1xuICAgIHJldHVybiBpdGVyYXRlKGl0ZXJhdG9yLCBmdW5jdGlvbiAodmFsdWUsIHN0b3ApIHtcbiAgICAgIGlmIChib3VuZEZ1bmN0aW9uKHZhbHVlLCB2YWx1ZSwgc2V0KSkgcmV0dXJuIHN0b3AoKTtcbiAgICB9LCB7IElTX0lURVJBVE9SOiB0cnVlLCBJTlRFUlJVUFRFRDogdHJ1ZSB9KS5zdG9wcGVkO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xuXG4vLyBgU2V0LnByb3RvdHlwZS5zeW1tZXRyaWNEaWZmZXJlbmNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIHN5bW1ldHJpY0RpZmZlcmVuY2U6IGZ1bmN0aW9uIHN5bW1ldHJpY0RpZmZlcmVuY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgc2V0ID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIG5ld1NldCA9IG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKHNldCwgZ2V0QnVpbHRJbignU2V0JykpKShzZXQpO1xuICAgIHZhciByZW1vdmVyID0gYUNhbGxhYmxlKG5ld1NldFsnZGVsZXRlJ10pO1xuICAgIHZhciBhZGRlciA9IGFDYWxsYWJsZShuZXdTZXQuYWRkKTtcbiAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJlbW92ZXIuY2FsbChuZXdTZXQsIHZhbHVlKSB8fCBhZGRlci5jYWxsKG5ld1NldCwgdmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBuZXdTZXQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG5cbi8vIGBTZXQucHJvdG90eXBlLnVuaW9uYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNldC1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIHVuaW9uOiBmdW5jdGlvbiB1bmlvbihpdGVyYWJsZSkge1xuICAgIHZhciBzZXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgbmV3U2V0ID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3Ioc2V0LCBnZXRCdWlsdEluKCdTZXQnKSkpKHNldCk7XG4gICAgaXRlcmF0ZShpdGVyYWJsZSwgYUNhbGxhYmxlKG5ld1NldC5hZGQpLCB7IHRoYXQ6IG5ld1NldCB9KTtcbiAgICByZXR1cm4gbmV3U2V0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNoYXJBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY2hhckF0O1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBGT1JDRUQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAn8KCutycuYXQoMCkgIT09ICfwoK63Jztcbn0pO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgYXQ6IGZ1bmN0aW9uIGF0KHBvcykge1xuICAgIHJldHVybiBjaGFyQXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyYXRvci1jb25zdHJ1Y3RvcicpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIFN0cmluZ011bHRpYnl0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJyk7XG5cbnZhciBjb2RlQXQgPSBTdHJpbmdNdWx0aWJ5dGVNb2R1bGUuY29kZUF0O1xudmFyIGNoYXJBdCA9IFN0cmluZ011bHRpYnl0ZU1vZHVsZS5jaGFyQXQ7XG52YXIgU1RSSU5HX0lURVJBVE9SID0gJ1N0cmluZyBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTVFJJTkdfSVRFUkFUT1IpO1xuXG4vLyBUT0RPOiB1bmlmeSB3aXRoIFN0cmluZyNAQGl0ZXJhdG9yXG52YXIgJFN0cmluZ0l0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihmdW5jdGlvbiBTdHJpbmdJdGVyYXRvcihzdHJpbmcpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogU1RSSU5HX0lURVJBVE9SLFxuICAgIHN0cmluZzogc3RyaW5nLFxuICAgIGluZGV4OiAwXG4gIH0pO1xufSwgJ1N0cmluZycsIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciBzdHJpbmcgPSBzdGF0ZS5zdHJpbmc7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4O1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBzdHJpbmcubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHBvaW50ID0gY2hhckF0KHN0cmluZywgaW5kZXgpO1xuICBzdGF0ZS5pbmRleCArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7IHZhbHVlOiB7IGNvZGVQb2ludDogY29kZUF0KHBvaW50LCAwKSwgcG9zaXRpb246IGluZGV4IH0sIGRvbmU6IGZhbHNlIH07XG59KTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50c2AgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcHJvdG90eXBlLWNvZGVwb2ludHNcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSB9LCB7XG4gIGNvZGVQb2ludHM6IGZ1bmN0aW9uIGNvZGVQb2ludHMoKSB7XG4gICAgcmV0dXJuIG5ldyAkU3RyaW5nSXRlcmF0b3IodG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSkpO1xuICB9XG59KTtcbiIsInZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLXdlbGwta25vd24tc3ltYm9sJyk7XG5cbi8vIGBTeW1ib2wuYXN5bmNEaXNwb3NlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtdXNpbmctc3RhdGVtZW50XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2FzeW5jRGlzcG9zZScpO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC5kaXNwb3NlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtdXNpbmctc3RhdGVtZW50XG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ2Rpc3Bvc2UnKTtcbiIsInZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLXdlbGwta25vd24tc3ltYm9sJyk7XG5cbi8vIGBTeW1ib2wubWF0Y2hlcmAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXBhdHRlcm4tbWF0Y2hpbmdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWF0Y2hlcicpO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC5tZXRhZGF0YWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWRlY29yYXRvcnNcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnbWV0YWRhdGEnKTtcbiIsInZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLXdlbGwta25vd24tc3ltYm9sJyk7XG5cbi8vIGBTeW1ib2wub2JzZXJ2YWJsZWAgd2VsbC1rbm93biBzeW1ib2xcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9ic2VydmFibGVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnb2JzZXJ2YWJsZScpO1xuIiwiLy8gVE9ETzogcmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLXdlbGwta25vd24tc3ltYm9sJyk7XG5cbi8vIGBTeW1ib2wucGF0dGVybk1hdGNoYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcGF0dGVybi1tYXRjaGluZ1xuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdwYXR0ZXJuTWF0Y2gnKTtcbiIsIi8vIFRPRE86IHJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgXG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS13ZWxsLWtub3duLXN5bWJvbCcpO1xuXG5kZWZpbmVXZWxsS25vd25TeW1ib2woJ3JlcGxhY2VBbGwnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNvbnN0cnVjdG9yJyk7XG52YXIgYXJyYXlGcm9tQXN5bmMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbS1hc3luYycpO1xudmFyIFRZUEVEX0FSUkFZU19DT05TVFJVQ1RPUlNfUkVRVUlSRVNfV1JBUFBFUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHlwZWQtYXJyYXktY29uc3RydWN0b3JzLXJlcXVpcmUtd3JhcHBlcnMnKTtcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciBhcnJheUZyb21Db25zdHJ1Y3RvckFuZExpc3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbS1jb25zdHJ1Y3Rvci1hbmQtbGlzdCcpO1xuXG52YXIgYVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjtcbnZhciBleHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLmZyb21Bc3luY2AgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1mcm9tLWFzeW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgLS0gcmVxdWlyZWQgZm9yIC5sZW5ndGhcbmV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2QoJ2Zyb21Bc3luYycsIGZ1bmN0aW9uIGZyb21Bc3luYyhhc3luY0l0ZW1zIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgdmFyIEMgPSB0aGlzO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIG1hcGZuID0gYXJndW1lbnRzTGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIHRoaXNBcmcgPSBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICByZXR1cm4gbmV3IChnZXRCdWlsdEluKCdQcm9taXNlJykpKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgYUNvbnN0cnVjdG9yKEMpO1xuICAgIHJlc29sdmUoYXJyYXlGcm9tQXN5bmMoYXN5bmNJdGVtcywgbWFwZm4sIHRoaXNBcmcpKTtcbiAgfSkudGhlbihmdW5jdGlvbiAobGlzdCkge1xuICAgIHJldHVybiBhcnJheUZyb21Db25zdHJ1Y3RvckFuZExpc3QoYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihDKSwgbGlzdCk7XG4gIH0pO1xufSwgVFlQRURfQVJSQVlTX0NPTlNUUlVDVE9SU19SRVFVSVJFU19XUkFQUEVSUyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YFxudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyICRmaWx0ZXJSZWplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmlsdGVyUmVqZWN0O1xudmFyIGZyb21TcGVjaWVzQW5kTGlzdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1mcm9tLXNwZWNpZXMtYW5kLWxpc3QnKTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5maWx0ZXJPdXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmlsdGVyaW5nXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdmaWx0ZXJPdXQnLCBmdW5jdGlvbiBmaWx0ZXJPdXQoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgdmFyIGxpc3QgPSAkZmlsdGVyUmVqZWN0KGFUeXBlZEFycmF5KHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIHJldHVybiBmcm9tU3BlY2llc0FuZExpc3QodGhpcywgbGlzdCk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciAkZmlsdGVyUmVqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbHRlclJlamVjdDtcbnZhciBmcm9tU3BlY2llc0FuZExpc3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHlwZWQtYXJyYXktZnJvbS1zcGVjaWVzLWFuZC1saXN0Jyk7XG5cbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUuZmlsdGVyUmVqZWN0YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbHRlcmluZ1xuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnZmlsdGVyUmVqZWN0JywgZnVuY3Rpb24gZmlsdGVyUmVqZWN0KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHZhciBsaXN0ID0gJGZpbHRlclJlamVjdChhVHlwZWRBcnJheSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICByZXR1cm4gZnJvbVNwZWNpZXNBbmRMaXN0KHRoaXMsIGxpc3QpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgJGZpbmRMYXN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi1mcm9tLWxhc3QnKS5maW5kTGFzdDtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5maW5kTGFzdGAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1maW5kLWZyb20tbGFzdFxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnZmluZExhc3QnLCBmdW5jdGlvbiBmaW5kTGFzdChwcmVkaWNhdGUgLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkZmluZExhc3QoYVR5cGVkQXJyYXkodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgJGZpbmRMYXN0SW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLWZyb20tbGFzdCcpLmZpbmRMYXN0SW5kZXg7XG5cbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUuZmluZExhc3RJbmRleGAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1maW5kLWZyb20tbGFzdFxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnZmluZExhc3RJbmRleCcsIGZ1bmN0aW9uIGZpbmRMYXN0SW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJGZpbmRMYXN0SW5kZXgoYVR5cGVkQXJyYXkodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgJGdyb3VwQnkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZ3JvdXAtYnknKTtcbnZhciB0eXBlZEFycmF5U3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3R5cGVkLWFycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5ncm91cEJ5YCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWdyb3VwaW5nXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdncm91cEJ5JywgZnVuY3Rpb24gZ3JvdXBCeShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICB2YXIgdGhpc0FyZyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICByZXR1cm4gJGdyb3VwQnkoYVR5cGVkQXJyYXkodGhpcyksIGNhbGxiYWNrZm4sIHRoaXNBcmcsIHR5cGVkQXJyYXlTcGVjaWVzQ29uc3RydWN0b3IpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgYXJyYXlVbmlxdWVCeSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS11bmlxdWUtYnknKTtcbnZhciBmcm9tU3BlY2llc0FuZExpc3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHlwZWQtYXJyYXktZnJvbS1zcGVjaWVzLWFuZC1saXN0Jyk7XG5cbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUudW5pcXVlQnlgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktdW5pcXVlXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCd1bmlxdWVCeScsIGZ1bmN0aW9uIHVuaXF1ZUJ5KHJlc29sdmVyKSB7XG4gIHJldHVybiBmcm9tU3BlY2llc0FuZExpc3QodGhpcywgYXJyYXlVbmlxdWVCeS5jYWxsKGFUeXBlZEFycmF5KHRoaXMpLCByZXNvbHZlcikpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBjb2xsZWN0aW9uRGVsZXRlQWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24tZGVsZXRlLWFsbCcpO1xuXG4vLyBgV2Vha01hcC5wcm90b3R5cGUuZGVsZXRlQWxsYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNvbGxlY3Rpb24tbWV0aG9kc1xuJCh7IHRhcmdldDogJ1dlYWtNYXAnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAgZGVsZXRlQWxsOiBmdW5jdGlvbiBkZWxldGVBbGwoLyogLi4uZWxlbWVudHMgKi8pIHtcbiAgICByZXR1cm4gY29sbGVjdGlvbkRlbGV0ZUFsbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1mcm9tJyk7XG5cbi8vIGBXZWFrTWFwLmZyb21gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5mcm9tXG4kKHsgdGFyZ2V0OiAnV2Vha01hcCcsIHN0YXQ6IHRydWUgfSwge1xuICBmcm9tOiBmcm9tXG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIG9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24tb2YnKTtcblxuLy8gYFdlYWtNYXAub2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5vZlxuJCh7IHRhcmdldDogJ1dlYWtNYXAnLCBzdGF0OiB0cnVlIH0sIHtcbiAgb2Y6IG9mXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyICRlbXBsYWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hcC1lbXBsYWNlJyk7XG5cbi8vIGBXZWFrTWFwLnByb3RvdHlwZS5lbXBsYWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXVwc2VydFxuJCh7IHRhcmdldDogJ1dlYWtNYXAnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAgZW1wbGFjZTogJGVtcGxhY2Vcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogcmVtb3ZlIGZyb20gYGNvcmUtanNANGBcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyICR1cHNlcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFwLXVwc2VydCcpO1xuXG4vLyBgV2Vha01hcC5wcm90b3R5cGUudXBzZXJ0YCBtZXRob2QgKHJlcGxhY2VkIGJ5IGBXZWFrTWFwLnByb3RvdHlwZS5lbXBsYWNlYClcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXVwc2VydFxuJCh7IHRhcmdldDogJ1dlYWtNYXAnLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAgdXBzZXJ0OiAkdXBzZXJ0XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGNvbGxlY3Rpb25BZGRBbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi1hZGQtYWxsJyk7XG5cbi8vIGBXZWFrU2V0LnByb3RvdHlwZS5hZGRBbGxgIG1ldGhvZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtY29sbGVjdGlvbi1tZXRob2RzXG4kKHsgdGFyZ2V0OiAnV2Vha1NldCcsIHByb3RvOiB0cnVlLCByZWFsOiB0cnVlLCBmb3JjZWQ6IElTX1BVUkUgfSwge1xuICBhZGRBbGw6IGZ1bmN0aW9uIGFkZEFsbCgvKiAuLi5lbGVtZW50cyAqLykge1xuICAgIHJldHVybiBjb2xsZWN0aW9uQWRkQWxsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgY29sbGVjdGlvbkRlbGV0ZUFsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLWRlbGV0ZS1hbGwnKTtcblxuLy8gYFdlYWtTZXQucHJvdG90eXBlLmRlbGV0ZUFsbGAgbWV0aG9kXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1jb2xsZWN0aW9uLW1ldGhvZHNcbiQoeyB0YXJnZXQ6ICdXZWFrU2V0JywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIGRlbGV0ZUFsbDogZnVuY3Rpb24gZGVsZXRlQWxsKC8qIC4uLmVsZW1lbnRzICovKSB7XG4gICAgcmV0dXJuIGNvbGxlY3Rpb25EZWxldGVBbGwuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24tZnJvbScpO1xuXG4vLyBgV2Vha1NldC5mcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWtzZXQuZnJvbVxuJCh7IHRhcmdldDogJ1dlYWtTZXQnLCBzdGF0OiB0cnVlIH0sIHtcbiAgZnJvbTogZnJvbVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLW9mJyk7XG5cbi8vIGBXZWFrU2V0Lm9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWtzZXQub2ZcbiQoeyB0YXJnZXQ6ICdXZWFrU2V0Jywgc3RhdDogdHJ1ZSB9LCB7XG4gIG9mOiBvZlxufSk7XG4iLCIvLyBpdGVyYWJsZSBET00gY29sbGVjdGlvbnNcbi8vIGZsYWcgLSBgaXRlcmFibGVgIGludGVyZmFjZSAtICdlbnRyaWVzJywgJ2tleXMnLCAndmFsdWVzJywgJ2ZvckVhY2gnIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBDU1NSdWxlTGlzdDogMCxcbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogMCxcbiAgQ1NTVmFsdWVMaXN0OiAwLFxuICBDbGllbnRSZWN0TGlzdDogMCxcbiAgRE9NUmVjdExpc3Q6IDAsXG4gIERPTVN0cmluZ0xpc3Q6IDAsXG4gIERPTVRva2VuTGlzdDogMSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IDAsXG4gIEZpbGVMaXN0OiAwLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogMCxcbiAgSFRNTENvbGxlY3Rpb246IDAsXG4gIEhUTUxGb3JtRWxlbWVudDogMCxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IDAsXG4gIE1lZGlhTGlzdDogMCxcbiAgTWltZVR5cGVBcnJheTogMCxcbiAgTmFtZWROb2RlTWFwOiAwLFxuICBOb2RlTGlzdDogMSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogMCxcbiAgUGx1Z2luOiAwLFxuICBQbHVnaW5BcnJheTogMCxcbiAgU1ZHTGVuZ3RoTGlzdDogMCxcbiAgU1ZHTnVtYmVyTGlzdDogMCxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IDAsXG4gIFNWR1BvaW50TGlzdDogMCxcbiAgU1ZHU3RyaW5nTGlzdDogMCxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogMCxcbiAgU291cmNlQnVmZmVyTGlzdDogMCxcbiAgU3R5bGVTaGVldExpc3Q6IDAsXG4gIFRleHRUcmFja0N1ZUxpc3Q6IDAsXG4gIFRleHRUcmFja0xpc3Q6IDAsXG4gIFRvdWNoTGlzdDogMFxufTtcbiIsIi8vIGluIG9sZCBXZWJLaXQgdmVyc2lvbnMsIGBlbGVtZW50LmNsYXNzTGlzdGAgaXMgbm90IGFuIGluc3RhbmNlIG9mIGdsb2JhbCBgRE9NVG9rZW5MaXN0YFxudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG52YXIgY2xhc3NMaXN0ID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdzcGFuJykuY2xhc3NMaXN0O1xudmFyIERPTVRva2VuTGlzdFByb3RvdHlwZSA9IGNsYXNzTGlzdCAmJiBjbGFzc0xpc3QuY29uc3RydWN0b3IgJiYgY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBET01Ub2tlbkxpc3RQcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgPyB1bmRlZmluZWQgOiBET01Ub2tlbkxpc3RQcm90b3R5cGU7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIERPTUl0ZXJhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb20taXRlcmFibGVzJyk7XG52YXIgRE9NVG9rZW5MaXN0UHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvbS10b2tlbi1saXN0LXByb3RvdHlwZScpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2gnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbnZhciBoYW5kbGVQcm90b3R5cGUgPSBmdW5jdGlvbiAoQ29sbGVjdGlvblByb3RvdHlwZSkge1xuICAvLyBzb21lIENocm9tZSB2ZXJzaW9ucyBoYXZlIG5vbi1jb25maWd1cmFibGUgbWV0aG9kcyBvbiBET01Ub2tlbkxpc3RcbiAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGUgJiYgQ29sbGVjdGlvblByb3RvdHlwZS5mb3JFYWNoICE9PSBmb3JFYWNoKSB0cnkge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCAnZm9yRWFjaCcsIGZvckVhY2gpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIENvbGxlY3Rpb25Qcm90b3R5cGUuZm9yRWFjaCA9IGZvckVhY2g7XG4gIH1cbn07XG5cbmZvciAodmFyIENPTExFQ1RJT05fTkFNRSBpbiBET01JdGVyYWJsZXMpIHtcbiAgaWYgKERPTUl0ZXJhYmxlc1tDT0xMRUNUSU9OX05BTUVdKSB7XG4gICAgaGFuZGxlUHJvdG90eXBlKGdsb2JhbFtDT0xMRUNUSU9OX05BTUVdICYmIGdsb2JhbFtDT0xMRUNUSU9OX05BTUVdLnByb3RvdHlwZSk7XG4gIH1cbn1cblxuaGFuZGxlUHJvdG90eXBlKERPTVRva2VuTGlzdFByb3RvdHlwZSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIERPTUl0ZXJhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb20taXRlcmFibGVzJyk7XG52YXIgRE9NVG9rZW5MaXN0UHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvbS10b2tlbi1saXN0LXByb3RvdHlwZScpO1xudmFyIEFycmF5SXRlcmF0b3JNZXRob2RzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBBcnJheUl0ZXJhdG9yTWV0aG9kcy52YWx1ZXM7XG5cbnZhciBoYW5kbGVQcm90b3R5cGUgPSBmdW5jdGlvbiAoQ29sbGVjdGlvblByb3RvdHlwZSwgQ09MTEVDVElPTl9OQU1FKSB7XG4gIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlKSB7XG4gICAgLy8gc29tZSBDaHJvbWUgdmVyc2lvbnMgaGF2ZSBub24tY29uZmlndXJhYmxlIG1ldGhvZHMgb24gRE9NVG9rZW5MaXN0XG4gICAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGVbSVRFUkFUT1JdICE9PSBBcnJheVZhbHVlcykgdHJ5IHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBDb2xsZWN0aW9uUHJvdG90eXBlW0lURVJBVE9SXSA9IEFycmF5VmFsdWVzO1xuICAgIH1cbiAgICBpZiAoIUNvbGxlY3Rpb25Qcm90b3R5cGVbVE9fU1RSSU5HX1RBR10pIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCBDT0xMRUNUSU9OX05BTUUpO1xuICAgIH1cbiAgICBpZiAoRE9NSXRlcmFibGVzW0NPTExFQ1RJT05fTkFNRV0pIGZvciAodmFyIE1FVEhPRF9OQU1FIGluIEFycmF5SXRlcmF0b3JNZXRob2RzKSB7XG4gICAgICAvLyBzb21lIENocm9tZSB2ZXJzaW9ucyBoYXZlIG5vbi1jb25maWd1cmFibGUgbWV0aG9kcyBvbiBET01Ub2tlbkxpc3RcbiAgICAgIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlW01FVEhPRF9OQU1FXSAhPT0gQXJyYXlJdGVyYXRvck1ldGhvZHNbTUVUSE9EX05BTUVdKSB0cnkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgTUVUSE9EX05BTUUsIEFycmF5SXRlcmF0b3JNZXRob2RzW01FVEhPRF9OQU1FXSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBDb2xsZWN0aW9uUHJvdG90eXBlW01FVEhPRF9OQU1FXSA9IEFycmF5SXRlcmF0b3JNZXRob2RzW01FVEhPRF9OQU1FXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmZvciAodmFyIENPTExFQ1RJT05fTkFNRSBpbiBET01JdGVyYWJsZXMpIHtcbiAgaGFuZGxlUHJvdG90eXBlKGdsb2JhbFtDT0xMRUNUSU9OX05BTUVdICYmIGdsb2JhbFtDT0xMRUNUSU9OX05BTUVdLnByb3RvdHlwZSwgQ09MTEVDVElPTl9OQU1FKTtcbn1cblxuaGFuZGxlUHJvdG90eXBlKERPTVRva2VuTGlzdFByb3RvdHlwZSwgJ0RPTVRva2VuTGlzdCcpO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdGFzaycpO1xuXG52YXIgRk9SQ0VEID0gIWdsb2JhbC5zZXRJbW1lZGlhdGUgfHwgIWdsb2JhbC5jbGVhckltbWVkaWF0ZTtcblxuLy8gaHR0cDovL3czYy5naXRodWIuaW8vc2V0SW1tZWRpYXRlL1xuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICAvLyBgc2V0SW1tZWRpYXRlYCBtZXRob2RcbiAgLy8gaHR0cDovL3czYy5naXRodWIuaW8vc2V0SW1tZWRpYXRlLyNzaS1zZXRJbW1lZGlhdGVcbiAgc2V0SW1tZWRpYXRlOiB0YXNrLnNldCxcbiAgLy8gYGNsZWFySW1tZWRpYXRlYCBtZXRob2RcbiAgLy8gaHR0cDovL3czYy5naXRodWIuaW8vc2V0SW1tZWRpYXRlLyNzaS1jbGVhckltbWVkaWF0ZVxuICBjbGVhckltbWVkaWF0ZTogdGFzay5jbGVhclxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21pY3JvdGFzaycpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcblxuLy8gYHF1ZXVlTWljcm90YXNrYCBtZXRob2Rcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3RpbWVycy1hbmQtdXNlci1wcm9tcHRzLmh0bWwjZG9tLXF1ZXVlbWljcm90YXNrXG4kKHsgZ2xvYmFsOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCBub1RhcmdldEdldDogdHJ1ZSB9LCB7XG4gIHF1ZXVlTWljcm90YXNrOiBmdW5jdGlvbiBxdWV1ZU1pY3JvdGFzayhmbikge1xuICAgIHZhciBkb21haW4gPSBJU19OT0RFICYmIHByb2Nlc3MuZG9tYWluO1xuICAgIG1pY3JvdGFzayhkb21haW4gPyBkb21haW4uYmluZChmbikgOiBmbik7XG4gIH1cbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0IC8qICwgLi4uYXJndW1lbnRzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBzY2hlZHVsZXIoYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIHNwZWMgcmVxdWlyZW1lbnRcbiAgICAgIChpc0NhbGxhYmxlKGhhbmRsZXIpID8gaGFuZGxlciA6IEZ1bmN0aW9uKGhhbmRsZXIpKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogaGFuZGxlciwgdGltZW91dCk7XG4gIH07XG59O1xuXG4vLyBpZTktIHNldFRpbWVvdXQgJiBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI3RpbWVyc1xuJCh7IGdsb2JhbDogdHJ1ZSwgYmluZDogdHJ1ZSwgZm9yY2VkOiBNU0lFIH0sIHtcbiAgLy8gYHNldFRpbWVvdXRgIG1ldGhvZFxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXR0aW1lb3V0XG4gIHNldFRpbWVvdXQ6IHdyYXAoZ2xvYmFsLnNldFRpbWVvdXQpLFxuICAvLyBgc2V0SW50ZXJ2YWxgIG1ldGhvZFxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS90aW1lcnMtYW5kLXVzZXItcHJvbXB0cy5odG1sI2RvbS1zZXRpbnRlcnZhbFxuICBzZXRJbnRlcnZhbDogd3JhcChnbG9iYWwuc2V0SW50ZXJ2YWwpXG59KTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHVybCA9IG5ldyBVUkwoJ2I/YT0xJmI9MiZjPTMnLCAnaHR0cDovL2EnKTtcbiAgdmFyIHNlYXJjaFBhcmFtcyA9IHVybC5zZWFyY2hQYXJhbXM7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdXJsLnBhdGhuYW1lID0gJ2MlMjBkJztcbiAgc2VhcmNoUGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICBzZWFyY2hQYXJhbXNbJ2RlbGV0ZSddKCdiJyk7XG4gICAgcmVzdWx0ICs9IGtleSArIHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIChJU19QVVJFICYmICF1cmwudG9KU09OKVxuICAgIHx8ICFzZWFyY2hQYXJhbXMuc29ydFxuICAgIHx8IHVybC5ocmVmICE9PSAnaHR0cDovL2EvYyUyMGQ/YT0xJmM9MydcbiAgICB8fCBzZWFyY2hQYXJhbXMuZ2V0KCdjJykgIT09ICczJ1xuICAgIHx8IFN0cmluZyhuZXcgVVJMU2VhcmNoUGFyYW1zKCc/YT0xJykpICE9PSAnYT0xJ1xuICAgIHx8ICFzZWFyY2hQYXJhbXNbSVRFUkFUT1JdXG4gICAgLy8gdGhyb3dzIGluIEVkZ2VcbiAgICB8fCBuZXcgVVJMKCdodHRwczovL2FAYicpLnVzZXJuYW1lICE9PSAnYSdcbiAgICB8fCBuZXcgVVJMU2VhcmNoUGFyYW1zKG5ldyBVUkxTZWFyY2hQYXJhbXMoJ2E9YicpKS5nZXQoJ2EnKSAhPT0gJ2InXG4gICAgLy8gbm90IHB1bnljb2RlZCBpbiBFZGdlXG4gICAgfHwgbmV3IFVSTCgnaHR0cDovL9GC0LXRgdGCJykuaG9zdCAhPT0gJ3huLS1lMWF5YmMnXG4gICAgLy8gbm90IGVzY2FwZWQgaW4gQ2hyb21lIDYyLVxuICAgIHx8IG5ldyBVUkwoJ2h0dHA6Ly9hI9CxJykuaGFzaCAhPT0gJyMlRDAlQjEnXG4gICAgLy8gZmFpbHMgaW4gQ2hyb21lIDY2LVxuICAgIHx8IHJlc3VsdCAhPT0gJ2ExYzMnXG4gICAgLy8gdGhyb3dzIGluIFNhZmFyaVxuICAgIHx8IG5ldyBVUkwoJ2h0dHA6Ly94JywgdW5kZWZpbmVkKS5ob3N0ICE9PSAneCc7XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9wdW55Y29kZS5qcy9ibG9iL21hc3Rlci9wdW55Y29kZS5qc1xudmFyIG1heEludCA9IDIxNDc0ODM2NDc7IC8vIGFrYS4gMHg3RkZGRkZGRiBvciAyXjMxLTFcbnZhciBiYXNlID0gMzY7XG52YXIgdE1pbiA9IDE7XG52YXIgdE1heCA9IDI2O1xudmFyIHNrZXcgPSAzODtcbnZhciBkYW1wID0gNzAwO1xudmFyIGluaXRpYWxCaWFzID0gNzI7XG52YXIgaW5pdGlhbE4gPSAxMjg7IC8vIDB4ODBcbnZhciBkZWxpbWl0ZXIgPSAnLSc7IC8vICdcXHgyRCdcbnZhciByZWdleE5vbkFTQ0lJID0gL1teXFwwLVxcdTAwN0VdLzsgLy8gbm9uLUFTQ0lJIGNoYXJzXG52YXIgcmVnZXhTZXBhcmF0b3JzID0gL1suXFx1MzAwMlxcdUZGMEVcXHVGRjYxXS9nOyAvLyBSRkMgMzQ5MCBzZXBhcmF0b3JzXG52YXIgT1ZFUkZMT1dfRVJST1IgPSAnT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MnO1xudmFyIGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbjtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgc3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG4gKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG4gKiB0aGlzIGZ1bmN0aW9uIHdpbGwgY29udmVydCBhIHBhaXIgb2Ygc3Vycm9nYXRlIGhhbHZlcyAoZWFjaCBvZiB3aGljaFxuICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG4gKiBtYXRjaGluZyBVVEYtMTYuXG4gKi9cbnZhciB1Y3MyZGVjb2RlID0gZnVuY3Rpb24gKHN0cmluZykge1xuICB2YXIgb3V0cHV0ID0gW107XG4gIHZhciBjb3VudGVyID0gMDtcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcbiAgICBpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG4gICAgICAvLyBJdCdzIGEgaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyLlxuICAgICAgdmFyIGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcbiAgICAgIGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBMb3cgc3Vycm9nYXRlLlxuICAgICAgICBvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSXQncyBhbiB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGVcbiAgICAgICAgLy8gbmV4dCBjb2RlIHVuaXQgaXMgdGhlIGhpZ2ggc3Vycm9nYXRlIG9mIGEgc3Vycm9nYXRlIHBhaXIuXG4gICAgICAgIG91dHB1dC5wdXNoKHZhbHVlKTtcbiAgICAgICAgY291bnRlci0tO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cbiAqL1xudmFyIGRpZ2l0VG9CYXNpYyA9IGZ1bmN0aW9uIChkaWdpdCkge1xuICAvLyAgMC4uMjUgbWFwIHRvIEFTQ0lJIGEuLnogb3IgQS4uWlxuICAvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcbiAgcmV0dXJuIGRpZ2l0ICsgMjIgKyA3NSAqIChkaWdpdCA8IDI2KTtcbn07XG5cbi8qKlxuICogQmlhcyBhZGFwdGF0aW9uIGZ1bmN0aW9uIGFzIHBlciBzZWN0aW9uIDMuNCBvZiBSRkMgMzQ5Mi5cbiAqIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzNDkyI3NlY3Rpb24tMy40XG4gKi9cbnZhciBhZGFwdCA9IGZ1bmN0aW9uIChkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcbiAgdmFyIGsgPSAwO1xuICBkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuICBkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG4gIGZvciAoOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuICAgIGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcbiAgfVxuICByZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcbiAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50cyAtLSBUT0RPXG52YXIgZW5jb2RlID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gIHZhciBvdXRwdXQgPSBbXTtcblxuICAvLyBDb252ZXJ0IHRoZSBpbnB1dCBpbiBVQ1MtMiB0byBhbiBhcnJheSBvZiBVbmljb2RlIGNvZGUgcG9pbnRzLlxuICBpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG4gIC8vIENhY2hlIHRoZSBsZW5ndGguXG4gIHZhciBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblxuICAvLyBJbml0aWFsaXplIHRoZSBzdGF0ZS5cbiAgdmFyIG4gPSBpbml0aWFsTjtcbiAgdmFyIGRlbHRhID0gMDtcbiAgdmFyIGJpYXMgPSBpbml0aWFsQmlhcztcbiAgdmFyIGksIGN1cnJlbnRWYWx1ZTtcblxuICAvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzLlxuICBmb3IgKGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICBjdXJyZW50VmFsdWUgPSBpbnB1dFtpXTtcbiAgICBpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuICAgICAgb3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGN1cnJlbnRWYWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7IC8vIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cbiAgdmFyIGhhbmRsZWRDUENvdW50ID0gYmFzaWNMZW5ndGg7IC8vIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXG4gIC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIHdpdGggYSBkZWxpbWl0ZXIgdW5sZXNzIGl0J3MgZW1wdHkuXG4gIGlmIChiYXNpY0xlbmd0aCkge1xuICAgIG91dHB1dC5wdXNoKGRlbGltaXRlcik7XG4gIH1cblxuICAvLyBNYWluIGVuY29kaW5nIGxvb3A6XG4gIHdoaWxlIChoYW5kbGVkQ1BDb3VudCA8IGlucHV0TGVuZ3RoKSB7XG4gICAgLy8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dCBsYXJnZXIgb25lOlxuICAgIHZhciBtID0gbWF4SW50O1xuICAgIGZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgY3VycmVudFZhbHVlID0gaW5wdXRbaV07XG4gICAgICBpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuICAgICAgICBtID0gY3VycmVudFZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPiwgYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3cuXG4gICAgdmFyIGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcbiAgICBpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuICAgICAgdGhyb3cgUmFuZ2VFcnJvcihPVkVSRkxPV19FUlJPUik7XG4gICAgfVxuXG4gICAgZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcbiAgICBuID0gbTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgY3VycmVudFZhbHVlID0gaW5wdXRbaV07XG4gICAgICBpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG4gICAgICAgIHRocm93IFJhbmdlRXJyb3IoT1ZFUkZMT1dfRVJST1IpO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA9PSBuKSB7XG4gICAgICAgIC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyLlxuICAgICAgICB2YXIgcSA9IGRlbHRhO1xuICAgICAgICBmb3IgKHZhciBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcbiAgICAgICAgICB2YXIgdCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG4gICAgICAgICAgaWYgKHEgPCB0KSBicmVhaztcbiAgICAgICAgICB2YXIgcU1pbnVzVCA9IHEgLSB0O1xuICAgICAgICAgIHZhciBiYXNlTWludXNUID0gYmFzZSAtIHQ7XG4gICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QpKSk7XG4gICAgICAgICAgcSA9IGZsb29yKHFNaW51c1QgLyBiYXNlTWludXNUKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSkpKTtcbiAgICAgICAgYmlhcyA9IGFkYXB0KGRlbHRhLCBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsIGhhbmRsZWRDUENvdW50ID09IGJhc2ljTGVuZ3RoKTtcbiAgICAgICAgZGVsdGEgPSAwO1xuICAgICAgICArK2hhbmRsZWRDUENvdW50O1xuICAgICAgfVxuICAgIH1cblxuICAgICsrZGVsdGE7XG4gICAgKytuO1xuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICB2YXIgZW5jb2RlZCA9IFtdO1xuICB2YXIgbGFiZWxzID0gaW5wdXQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xcdTAwMkUnKS5zcGxpdCgnLicpO1xuICB2YXIgaSwgbGFiZWw7XG4gIGZvciAoaSA9IDA7IGkgPCBsYWJlbHMubGVuZ3RoOyBpKyspIHtcbiAgICBsYWJlbCA9IGxhYmVsc1tpXTtcbiAgICBlbmNvZGVkLnB1c2gocmVnZXhOb25BU0NJSS50ZXN0KGxhYmVsKSA/ICd4bi0tJyArIGVuY29kZShsYWJlbCkgOiBsYWJlbCk7XG4gIH1cbiAgcmV0dXJuIGVuY29kZWQuam9pbignLicpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IGluIGNvcmUtanNANCwgbW92ZSAvbW9kdWxlcy8gZGVwZW5kZW5jaWVzIHRvIHB1YmxpYyBlbnRyaWVzIGZvciBiZXR0ZXIgb3B0aW1pemF0aW9uIGJ5IHRvb2xzIGxpa2UgYHByZXNldC1lbnZgXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIFVTRV9OQVRJVkVfVVJMID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS11cmwnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lLWFsbCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlcmF0b3ItY29uc3RydWN0b3InKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgbmF0aXZlRmV0Y2ggPSBnZXRCdWlsdEluKCdmZXRjaCcpO1xudmFyIE5hdGl2ZVJlcXVlc3QgPSBnZXRCdWlsdEluKCdSZXF1ZXN0Jyk7XG52YXIgUmVxdWVzdFByb3RvdHlwZSA9IE5hdGl2ZVJlcXVlc3QgJiYgTmF0aXZlUmVxdWVzdC5wcm90b3R5cGU7XG52YXIgSGVhZGVycyA9IGdldEJ1aWx0SW4oJ0hlYWRlcnMnKTtcbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBVUkxfU0VBUkNIX1BBUkFNUyA9ICdVUkxTZWFyY2hQYXJhbXMnO1xudmFyIFVSTF9TRUFSQ0hfUEFSQU1TX0lURVJBVE9SID0gVVJMX1NFQVJDSF9QQVJBTVMgKyAnSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoVVJMX1NFQVJDSF9QQVJBTVMpO1xudmFyIGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFVSTF9TRUFSQ0hfUEFSQU1TX0lURVJBVE9SKTtcblxudmFyIHBsdXMgPSAvXFwrL2c7XG52YXIgc2VxdWVuY2VzID0gQXJyYXkoNCk7XG5cbnZhciBwZXJjZW50U2VxdWVuY2UgPSBmdW5jdGlvbiAoYnl0ZXMpIHtcbiAgcmV0dXJuIHNlcXVlbmNlc1tieXRlcyAtIDFdIHx8IChzZXF1ZW5jZXNbYnl0ZXMgLSAxXSA9IFJlZ0V4cCgnKCg/OiVbXFxcXGRhLWZdezJ9KXsnICsgYnl0ZXMgKyAnfSknLCAnZ2knKSk7XG59O1xuXG52YXIgcGVyY2VudERlY29kZSA9IGZ1bmN0aW9uIChzZXF1ZW5jZSkge1xuICB0cnkge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoc2VxdWVuY2UpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBzZXF1ZW5jZTtcbiAgfVxufTtcblxudmFyIGRlc2VyaWFsaXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBpdC5yZXBsYWNlKHBsdXMsICcgJyk7XG4gIHZhciBieXRlcyA9IDQ7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChyZXN1bHQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHdoaWxlIChieXRlcykge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UocGVyY2VudFNlcXVlbmNlKGJ5dGVzLS0pLCBwZXJjZW50RGVjb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcblxudmFyIGZpbmQgPSAvWyEnKCl+XXwlMjAvZztcblxudmFyIHJlcGxhY2UgPSB7XG4gICchJzogJyUyMScsXG4gIFwiJ1wiOiAnJTI3JyxcbiAgJygnOiAnJTI4JyxcbiAgJyknOiAnJTI5JyxcbiAgJ34nOiAnJTdFJyxcbiAgJyUyMCc6ICcrJ1xufTtcblxudmFyIHJlcGxhY2VyID0gZnVuY3Rpb24gKG1hdGNoKSB7XG4gIHJldHVybiByZXBsYWNlW21hdGNoXTtcbn07XG5cbnZhciBzZXJpYWxpemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChpdCkucmVwbGFjZShmaW5kLCByZXBsYWNlcik7XG59O1xuXG52YXIgcGFyc2VTZWFyY2hQYXJhbXMgPSBmdW5jdGlvbiAocmVzdWx0LCBxdWVyeSkge1xuICBpZiAocXVlcnkpIHtcbiAgICB2YXIgYXR0cmlidXRlcyA9IHF1ZXJ5LnNwbGl0KCcmJyk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgYXR0cmlidXRlLCBlbnRyeTtcbiAgICB3aGlsZSAoaW5kZXggPCBhdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgYXR0cmlidXRlID0gYXR0cmlidXRlc1tpbmRleCsrXTtcbiAgICAgIGlmIChhdHRyaWJ1dGUubGVuZ3RoKSB7XG4gICAgICAgIGVudHJ5ID0gYXR0cmlidXRlLnNwbGl0KCc9Jyk7XG4gICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICBrZXk6IGRlc2VyaWFsaXplKGVudHJ5LnNoaWZ0KCkpLFxuICAgICAgICAgIHZhbHVlOiBkZXNlcmlhbGl6ZShlbnRyeS5qb2luKCc9JykpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxudmFyIHVwZGF0ZVNlYXJjaFBhcmFtcyA9IGZ1bmN0aW9uIChxdWVyeSkge1xuICB0aGlzLmVudHJpZXMubGVuZ3RoID0gMDtcbiAgcGFyc2VTZWFyY2hQYXJhbXModGhpcy5lbnRyaWVzLCBxdWVyeSk7XG59O1xuXG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSBmdW5jdGlvbiAocGFzc2VkLCByZXF1aXJlZCkge1xuICBpZiAocGFzc2VkIDwgcmVxdWlyZWQpIHRocm93IFR5cGVFcnJvcignTm90IGVub3VnaCBhcmd1bWVudHMnKTtcbn07XG5cbnZhciBVUkxTZWFyY2hQYXJhbXNJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoZnVuY3Rpb24gSXRlcmF0b3IocGFyYW1zLCBraW5kKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFVSTF9TRUFSQ0hfUEFSQU1TX0lURVJBVE9SLFxuICAgIGl0ZXJhdG9yOiBnZXRJdGVyYXRvcihnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHBhcmFtcykuZW50cmllcyksXG4gICAga2luZDoga2luZFxuICB9KTtcbn0sICdJdGVyYXRvcicsIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSh0aGlzKTtcbiAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICB2YXIgc3RlcCA9IHN0YXRlLml0ZXJhdG9yLm5leHQoKTtcbiAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgaWYgKCFzdGVwLmRvbmUpIHtcbiAgICBzdGVwLnZhbHVlID0ga2luZCA9PT0gJ2tleXMnID8gZW50cnkua2V5IDoga2luZCA9PT0gJ3ZhbHVlcycgPyBlbnRyeS52YWx1ZSA6IFtlbnRyeS5rZXksIGVudHJ5LnZhbHVlXTtcbiAgfSByZXR1cm4gc3RlcDtcbn0pO1xuXG4vLyBgVVJMU2VhcmNoUGFyYW1zYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNpbnRlcmZhY2UtdXJsc2VhcmNocGFyYW1zXG52YXIgVVJMU2VhcmNoUGFyYW1zQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBVUkxTZWFyY2hQYXJhbXMoLyogaW5pdCAqLykge1xuICBhbkluc3RhbmNlKHRoaXMsIFVSTFNlYXJjaFBhcmFtc0NvbnN0cnVjdG9yLCBVUkxfU0VBUkNIX1BBUkFNUyk7XG4gIHZhciBpbml0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQ7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIGVudHJpZXMgPSBbXTtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kLCBpdGVyYXRvciwgbmV4dCwgc3RlcCwgZW50cnlJdGVyYXRvciwgZW50cnlOZXh0LCBmaXJzdCwgc2Vjb25kLCBrZXk7XG5cbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGF0LCB7XG4gICAgdHlwZTogVVJMX1NFQVJDSF9QQVJBTVMsXG4gICAgZW50cmllczogZW50cmllcyxcbiAgICB1cGRhdGVVUkw6IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSxcbiAgICB1cGRhdGVTZWFyY2hQYXJhbXM6IHVwZGF0ZVNlYXJjaFBhcmFtc1xuICB9KTtcblxuICBpZiAoaW5pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGlzT2JqZWN0KGluaXQpKSB7XG4gICAgICBpdGVyYXRvck1ldGhvZCA9IGdldEl0ZXJhdG9yTWV0aG9kKGluaXQpO1xuICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoaW5pdCwgaXRlcmF0b3JNZXRob2QpO1xuICAgICAgICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgICAgICAgd2hpbGUgKCEoc3RlcCA9IG5leHQuY2FsbChpdGVyYXRvcikpLmRvbmUpIHtcbiAgICAgICAgICBlbnRyeUl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoYW5PYmplY3Qoc3RlcC52YWx1ZSkpO1xuICAgICAgICAgIGVudHJ5TmV4dCA9IGVudHJ5SXRlcmF0b3IubmV4dDtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoZmlyc3QgPSBlbnRyeU5leHQuY2FsbChlbnRyeUl0ZXJhdG9yKSkuZG9uZSB8fFxuICAgICAgICAgICAgKHNlY29uZCA9IGVudHJ5TmV4dC5jYWxsKGVudHJ5SXRlcmF0b3IpKS5kb25lIHx8XG4gICAgICAgICAgICAhZW50cnlOZXh0LmNhbGwoZW50cnlJdGVyYXRvcikuZG9uZVxuICAgICAgICAgICkgdGhyb3cgVHlwZUVycm9yKCdFeHBlY3RlZCBzZXF1ZW5jZSB3aXRoIGxlbmd0aCAyJyk7XG4gICAgICAgICAgZW50cmllcy5wdXNoKHsga2V5OiAkdG9TdHJpbmcoZmlyc3QudmFsdWUpLCB2YWx1ZTogJHRvU3RyaW5nKHNlY29uZC52YWx1ZSkgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBmb3IgKGtleSBpbiBpbml0KSBpZiAoaGFzT3duKGluaXQsIGtleSkpIGVudHJpZXMucHVzaCh7IGtleToga2V5LCB2YWx1ZTogJHRvU3RyaW5nKGluaXRba2V5XSkgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlU2VhcmNoUGFyYW1zKFxuICAgICAgICBlbnRyaWVzLFxuICAgICAgICB0eXBlb2YgaW5pdCA9PT0gJ3N0cmluZycgPyBpbml0LmNoYXJBdCgwKSA9PT0gJz8nID8gaW5pdC5zbGljZSgxKSA6IGluaXQgOiAkdG9TdHJpbmcoaW5pdClcbiAgICAgICk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlID0gVVJMU2VhcmNoUGFyYW1zQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG5yZWRlZmluZUFsbChVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUsIHtcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuYXBwZW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLWFwcGVuZFxuICBhcHBlbmQ6IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDIpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcyk7XG4gICAgc3RhdGUuZW50cmllcy5wdXNoKHsga2V5OiAkdG9TdHJpbmcobmFtZSksIHZhbHVlOiAkdG9TdHJpbmcodmFsdWUpIH0pO1xuICAgIHN0YXRlLnVwZGF0ZVVSTCgpO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5kZWxldGVgIG1ldGhvZFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtZGVsZXRlXG4gICdkZWxldGUnOiBmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcyk7XG4gICAgdmFyIGVudHJpZXMgPSBzdGF0ZS5lbnRyaWVzO1xuICAgIHZhciBrZXkgPSAkdG9TdHJpbmcobmFtZSk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoaW5kZXggPCBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgaWYgKGVudHJpZXNbaW5kZXhdLmtleSA9PT0ga2V5KSBlbnRyaWVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICBlbHNlIGluZGV4Kys7XG4gICAgfVxuICAgIHN0YXRlLnVwZGF0ZVVSTCgpO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5nZXRgIG1ldGhvZFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtZ2V0XG4gIGdldDogZnVuY3Rpb24gZ2V0KG5hbWUpIHtcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIgZW50cmllcyA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcykuZW50cmllcztcbiAgICB2YXIga2V5ID0gJHRvU3RyaW5nKG5hbWUpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgZm9yICg7IGluZGV4IDwgZW50cmllcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGlmIChlbnRyaWVzW2luZGV4XS5rZXkgPT09IGtleSkgcmV0dXJuIGVudHJpZXNbaW5kZXhdLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuZ2V0QWxsYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLWdldGFsbFxuICBnZXRBbGw6IGZ1bmN0aW9uIGdldEFsbChuYW1lKSB7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIGVudHJpZXMgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpLmVudHJpZXM7XG4gICAgdmFyIGtleSA9ICR0b1N0cmluZyhuYW1lKTtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBmb3IgKDsgaW5kZXggPCBlbnRyaWVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKGVudHJpZXNbaW5kZXhdLmtleSA9PT0ga2V5KSByZXN1bHQucHVzaChlbnRyaWVzW2luZGV4XS52YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmhhc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1oYXNcbiAgaGFzOiBmdW5jdGlvbiBoYXMobmFtZSkge1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBlbnRyaWVzID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKS5lbnRyaWVzO1xuICAgIHZhciBrZXkgPSAkdG9TdHJpbmcobmFtZSk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoaW5kZXggPCBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgaWYgKGVudHJpZXNbaW5kZXgrK10ua2V5ID09PSBrZXkpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLnNldGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1zZXRcbiAgc2V0OiBmdW5jdGlvbiBzZXQobmFtZSwgdmFsdWUpIHtcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpO1xuICAgIHZhciBlbnRyaWVzID0gc3RhdGUuZW50cmllcztcbiAgICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgICB2YXIga2V5ID0gJHRvU3RyaW5nKG5hbWUpO1xuICAgIHZhciB2YWwgPSAkdG9TdHJpbmcodmFsdWUpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGVudHJ5O1xuICAgIGZvciAoOyBpbmRleCA8IGVudHJpZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgICAgaWYgKGVudHJ5LmtleSA9PT0ga2V5KSB7XG4gICAgICAgIGlmIChmb3VuZCkgZW50cmllcy5zcGxpY2UoaW5kZXgtLSwgMSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICBlbnRyeS52YWx1ZSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWZvdW5kKSBlbnRyaWVzLnB1c2goeyBrZXk6IGtleSwgdmFsdWU6IHZhbCB9KTtcbiAgICBzdGF0ZS51cGRhdGVVUkwoKTtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuc29ydGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1zb3J0XG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoKSB7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKTtcbiAgICB2YXIgZW50cmllcyA9IHN0YXRlLmVudHJpZXM7XG4gICAgLy8gQXJyYXkjc29ydCBpcyBub3Qgc3RhYmxlIGluIHNvbWUgZW5naW5lc1xuICAgIHZhciBzbGljZSA9IGVudHJpZXMuc2xpY2UoKTtcbiAgICB2YXIgZW50cnksIGVudHJpZXNJbmRleCwgc2xpY2VJbmRleDtcbiAgICBlbnRyaWVzLmxlbmd0aCA9IDA7XG4gICAgZm9yIChzbGljZUluZGV4ID0gMDsgc2xpY2VJbmRleCA8IHNsaWNlLmxlbmd0aDsgc2xpY2VJbmRleCsrKSB7XG4gICAgICBlbnRyeSA9IHNsaWNlW3NsaWNlSW5kZXhdO1xuICAgICAgZm9yIChlbnRyaWVzSW5kZXggPSAwOyBlbnRyaWVzSW5kZXggPCBzbGljZUluZGV4OyBlbnRyaWVzSW5kZXgrKykge1xuICAgICAgICBpZiAoZW50cmllc1tlbnRyaWVzSW5kZXhdLmtleSA+IGVudHJ5LmtleSkge1xuICAgICAgICAgIGVudHJpZXMuc3BsaWNlKGVudHJpZXNJbmRleCwgMCwgZW50cnkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZW50cmllc0luZGV4ID09PSBzbGljZUluZGV4KSBlbnRyaWVzLnB1c2goZW50cnkpO1xuICAgIH1cbiAgICBzdGF0ZS51cGRhdGVVUkwoKTtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2sgLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIGVudHJpZXMgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpLmVudHJpZXM7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMyk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgZW50cnk7XG4gICAgd2hpbGUgKGluZGV4IDwgZW50cmllcy5sZW5ndGgpIHtcbiAgICAgIGVudHJ5ID0gZW50cmllc1tpbmRleCsrXTtcbiAgICAgIGJvdW5kRnVuY3Rpb24oZW50cnkudmFsdWUsIGVudHJ5LmtleSwgdGhpcyk7XG4gICAgfVxuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5rZXlzYCBtZXRob2RcbiAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtc0l0ZXJhdG9yKHRoaXMsICdrZXlzJyk7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4gIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKCkge1xuICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zSXRlcmF0b3IodGhpcywgJ3ZhbHVlcycpO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5lbnRyaWVzYCBtZXRob2RcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcygpIHtcbiAgICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtc0l0ZXJhdG9yKHRoaXMsICdlbnRyaWVzJyk7XG4gIH1cbn0sIHsgZW51bWVyYWJsZTogdHJ1ZSB9KTtcblxuLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxucmVkZWZpbmUoVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLCBJVEVSQVRPUiwgVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLmVudHJpZXMsIHsgbmFtZTogJ2VudHJpZXMnIH0pO1xuXG4vLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHNlYXJjaHBhcmFtcy1zdHJpbmdpZmljYXRpb24tYmVoYXZpb3JcbnJlZGVmaW5lKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHZhciBlbnRyaWVzID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKS5lbnRyaWVzO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBlbnRyeTtcbiAgd2hpbGUgKGluZGV4IDwgZW50cmllcy5sZW5ndGgpIHtcbiAgICBlbnRyeSA9IGVudHJpZXNbaW5kZXgrK107XG4gICAgcmVzdWx0LnB1c2goc2VyaWFsaXplKGVudHJ5LmtleSkgKyAnPScgKyBzZXJpYWxpemUoZW50cnkudmFsdWUpKTtcbiAgfSByZXR1cm4gcmVzdWx0LmpvaW4oJyYnKTtcbn0sIHsgZW51bWVyYWJsZTogdHJ1ZSB9KTtcblxuc2V0VG9TdHJpbmdUYWcoVVJMU2VhcmNoUGFyYW1zQ29uc3RydWN0b3IsIFVSTF9TRUFSQ0hfUEFSQU1TKTtcblxuJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiAhVVNFX05BVElWRV9VUkwgfSwge1xuICBVUkxTZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtc0NvbnN0cnVjdG9yXG59KTtcblxuLy8gV3JhcCBgZmV0Y2hgIGFuZCBgUmVxdWVzdGAgZm9yIGNvcnJlY3Qgd29yayB3aXRoIHBvbHlmaWxsZWQgYFVSTFNlYXJjaFBhcmFtc2BcbmlmICghVVNFX05BVElWRV9VUkwgJiYgaXNDYWxsYWJsZShIZWFkZXJzKSkge1xuICB2YXIgd3JhcFJlcXVlc3RPcHRpb25zID0gZnVuY3Rpb24gKGluaXQpIHtcbiAgICBpZiAoaXNPYmplY3QoaW5pdCkpIHtcbiAgICAgIHZhciBib2R5ID0gaW5pdC5ib2R5O1xuICAgICAgdmFyIGhlYWRlcnM7XG4gICAgICBpZiAoY2xhc3NvZihib2R5KSA9PT0gVVJMX1NFQVJDSF9QQVJBTVMpIHtcbiAgICAgICAgaGVhZGVycyA9IGluaXQuaGVhZGVycyA/IG5ldyBIZWFkZXJzKGluaXQuaGVhZGVycykgOiBuZXcgSGVhZGVycygpO1xuICAgICAgICBpZiAoIWhlYWRlcnMuaGFzKCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICAgIGhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlKGluaXQsIHtcbiAgICAgICAgICBib2R5OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgU3RyaW5nKGJvZHkpKSxcbiAgICAgICAgICBoZWFkZXJzOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgaGVhZGVycylcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSByZXR1cm4gaW5pdDtcbiAgfTtcblxuICBpZiAoaXNDYWxsYWJsZShuYXRpdmVGZXRjaCkpIHtcbiAgICAkKHsgZ2xvYmFsOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgZmV0Y2g6IGZ1bmN0aW9uIGZldGNoKGlucHV0IC8qICwgaW5pdCAqLykge1xuICAgICAgICByZXR1cm4gbmF0aXZlRmV0Y2goaW5wdXQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gd3JhcFJlcXVlc3RPcHRpb25zKGFyZ3VtZW50c1sxXSkgOiB7fSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoaXNDYWxsYWJsZShOYXRpdmVSZXF1ZXN0KSkge1xuICAgIHZhciBSZXF1ZXN0Q29uc3RydWN0b3IgPSBmdW5jdGlvbiBSZXF1ZXN0KGlucHV0IC8qICwgaW5pdCAqLykge1xuICAgICAgYW5JbnN0YW5jZSh0aGlzLCBSZXF1ZXN0Q29uc3RydWN0b3IsICdSZXF1ZXN0Jyk7XG4gICAgICByZXR1cm4gbmV3IE5hdGl2ZVJlcXVlc3QoaW5wdXQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gd3JhcFJlcXVlc3RPcHRpb25zKGFyZ3VtZW50c1sxXSkgOiB7fSk7XG4gICAgfTtcblxuICAgIFJlcXVlc3RQcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZXF1ZXN0Q29uc3RydWN0b3I7XG4gICAgUmVxdWVzdENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IFJlcXVlc3RQcm90b3R5cGU7XG5cbiAgICAkKHsgZ2xvYmFsOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgUmVxdWVzdDogUmVxdWVzdENvbnN0cnVjdG9yXG4gICAgfSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFVSTFNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zQ29uc3RydWN0b3IsXG4gIGdldFN0YXRlOiBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogaW4gY29yZS1qc0A0LCBtb3ZlIC9tb2R1bGVzLyBkZXBlbmRlbmNpZXMgdG8gcHVibGljIGVudHJpZXMgZm9yIGJldHRlciBvcHRpbWl6YXRpb24gYnkgdG9vbHMgbGlrZSBgcHJlc2V0LWVudmBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yJyk7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFVTRV9OQVRJVkVfVVJMID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS11cmwnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZGVmaW5lUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWRlZmluZScpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtYXNzaWduJyk7XG52YXIgYXJyYXlGcm9tID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWZyb20nKTtcbnZhciBjb2RlQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNvZGVBdDtcbnZhciB0b0FTQ0lJID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1wdW55Y29kZS10by1hc2NpaScpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIFVSTFNlYXJjaFBhcmFtc01vZHVsZSA9IHJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xuXG52YXIgTmF0aXZlVVJMID0gZ2xvYmFsLlVSTDtcbnZhciBVUkxTZWFyY2hQYXJhbXMgPSBVUkxTZWFyY2hQYXJhbXNNb2R1bGUuVVJMU2VhcmNoUGFyYW1zO1xudmFyIGdldEludGVybmFsU2VhcmNoUGFyYW1zU3RhdGUgPSBVUkxTZWFyY2hQYXJhbXNNb2R1bGUuZ2V0U3RhdGU7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsVVJMU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcignVVJMJyk7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIHBvdyA9IE1hdGgucG93O1xuXG52YXIgSU5WQUxJRF9BVVRIT1JJVFkgPSAnSW52YWxpZCBhdXRob3JpdHknO1xudmFyIElOVkFMSURfU0NIRU1FID0gJ0ludmFsaWQgc2NoZW1lJztcbnZhciBJTlZBTElEX0hPU1QgPSAnSW52YWxpZCBob3N0JztcbnZhciBJTlZBTElEX1BPUlQgPSAnSW52YWxpZCBwb3J0JztcblxudmFyIEFMUEhBID0gL1thLXpdL2k7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLW9ic2N1cmUtcmFuZ2UgLS0gc2FmZVxudmFyIEFMUEhBTlVNRVJJQyA9IC9bXFxkKy0uYS16XS9pO1xudmFyIERJR0lUID0gL1xcZC87XG52YXIgSEVYX1NUQVJUID0gL14weC9pO1xudmFyIE9DVCA9IC9eWzAtN10rJC87XG52YXIgREVDID0gL15cXGQrJC87XG52YXIgSEVYID0gL15bXFxkYS1mXSskL2k7XG4vKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tY29udHJvbC1jaGFyYWN0ZXIgLS0gc2FmZSAqL1xudmFyIEZPUkJJRERFTl9IT1NUX0NPREVfUE9JTlQgPSAvW1xcMFxcdFxcblxcciAjJS86PD4/QFtcXFxcXFxdXnxdLztcbnZhciBGT1JCSURERU5fSE9TVF9DT0RFX1BPSU5UX0VYQ0xVRElOR19QRVJDRU5UID0gL1tcXDBcXHRcXG5cXHIgIy86PD4/QFtcXFxcXFxdXnxdLztcbnZhciBMRUFESU5HX0FORF9UUkFJTElOR19DMF9DT05UUk9MX09SX1NQQUNFID0gL15bXFx1MDAwMC1cXHUwMDIwXSt8W1xcdTAwMDAtXFx1MDAyMF0rJC9nO1xudmFyIFRBQl9BTkRfTkVXX0xJTkUgPSAvW1xcdFxcblxccl0vZztcbi8qIGVzbGludC1lbmFibGUgcmVnZXhwL25vLWNvbnRyb2wtY2hhcmFjdGVyIC0tIHNhZmUgKi9cbnZhciBFT0Y7XG5cbnZhciBwYXJzZUhvc3QgPSBmdW5jdGlvbiAodXJsLCBpbnB1dCkge1xuICB2YXIgcmVzdWx0LCBjb2RlUG9pbnRzLCBpbmRleDtcbiAgaWYgKGlucHV0LmNoYXJBdCgwKSA9PSAnWycpIHtcbiAgICBpZiAoaW5wdXQuY2hhckF0KGlucHV0Lmxlbmd0aCAtIDEpICE9ICddJykgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICByZXN1bHQgPSBwYXJzZUlQdjYoaW5wdXQuc2xpY2UoMSwgLTEpKTtcbiAgICBpZiAoIXJlc3VsdCkgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICB1cmwuaG9zdCA9IHJlc3VsdDtcbiAgLy8gb3BhcXVlIGhvc3RcbiAgfSBlbHNlIGlmICghaXNTcGVjaWFsKHVybCkpIHtcbiAgICBpZiAoRk9SQklEREVOX0hPU1RfQ09ERV9QT0lOVF9FWENMVURJTkdfUEVSQ0VOVC50ZXN0KGlucHV0KSkgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICByZXN1bHQgPSAnJztcbiAgICBjb2RlUG9pbnRzID0gYXJyYXlGcm9tKGlucHV0KTtcbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBjb2RlUG9pbnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgcmVzdWx0ICs9IHBlcmNlbnRFbmNvZGUoY29kZVBvaW50c1tpbmRleF0sIEMwQ29udHJvbFBlcmNlbnRFbmNvZGVTZXQpO1xuICAgIH1cbiAgICB1cmwuaG9zdCA9IHJlc3VsdDtcbiAgfSBlbHNlIHtcbiAgICBpbnB1dCA9IHRvQVNDSUkoaW5wdXQpO1xuICAgIGlmIChGT1JCSURERU5fSE9TVF9DT0RFX1BPSU5ULnRlc3QoaW5wdXQpKSByZXR1cm4gSU5WQUxJRF9IT1NUO1xuICAgIHJlc3VsdCA9IHBhcnNlSVB2NChpbnB1dCk7XG4gICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICB1cmwuaG9zdCA9IHJlc3VsdDtcbiAgfVxufTtcblxudmFyIHBhcnNlSVB2NCA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICB2YXIgcGFydHMgPSBpbnB1dC5zcGxpdCgnLicpO1xuICB2YXIgcGFydHNMZW5ndGgsIG51bWJlcnMsIGluZGV4LCBwYXJ0LCByYWRpeCwgbnVtYmVyLCBpcHY0O1xuICBpZiAocGFydHMubGVuZ3RoICYmIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09ICcnKSB7XG4gICAgcGFydHMucG9wKCk7XG4gIH1cbiAgcGFydHNMZW5ndGggPSBwYXJ0cy5sZW5ndGg7XG4gIGlmIChwYXJ0c0xlbmd0aCA+IDQpIHJldHVybiBpbnB1dDtcbiAgbnVtYmVycyA9IFtdO1xuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBwYXJ0c0xlbmd0aDsgaW5kZXgrKykge1xuICAgIHBhcnQgPSBwYXJ0c1tpbmRleF07XG4gICAgaWYgKHBhcnQgPT0gJycpIHJldHVybiBpbnB1dDtcbiAgICByYWRpeCA9IDEwO1xuICAgIGlmIChwYXJ0Lmxlbmd0aCA+IDEgJiYgcGFydC5jaGFyQXQoMCkgPT0gJzAnKSB7XG4gICAgICByYWRpeCA9IEhFWF9TVEFSVC50ZXN0KHBhcnQpID8gMTYgOiA4O1xuICAgICAgcGFydCA9IHBhcnQuc2xpY2UocmFkaXggPT0gOCA/IDEgOiAyKTtcbiAgICB9XG4gICAgaWYgKHBhcnQgPT09ICcnKSB7XG4gICAgICBudW1iZXIgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIShyYWRpeCA9PSAxMCA/IERFQyA6IHJhZGl4ID09IDggPyBPQ1QgOiBIRVgpLnRlc3QocGFydCkpIHJldHVybiBpbnB1dDtcbiAgICAgIG51bWJlciA9IHBhcnNlSW50KHBhcnQsIHJhZGl4KTtcbiAgICB9XG4gICAgbnVtYmVycy5wdXNoKG51bWJlcik7XG4gIH1cbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcGFydHNMZW5ndGg7IGluZGV4KyspIHtcbiAgICBudW1iZXIgPSBudW1iZXJzW2luZGV4XTtcbiAgICBpZiAoaW5kZXggPT0gcGFydHNMZW5ndGggLSAxKSB7XG4gICAgICBpZiAobnVtYmVyID49IHBvdygyNTYsIDUgLSBwYXJ0c0xlbmd0aCkpIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAobnVtYmVyID4gMjU1KSByZXR1cm4gbnVsbDtcbiAgfVxuICBpcHY0ID0gbnVtYmVycy5wb3AoKTtcbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbnVtYmVycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBpcHY0ICs9IG51bWJlcnNbaW5kZXhdICogcG93KDI1NiwgMyAtIGluZGV4KTtcbiAgfVxuICByZXR1cm4gaXB2NDtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50cyAtLSBUT0RPXG52YXIgcGFyc2VJUHY2ID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gIHZhciBhZGRyZXNzID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdO1xuICB2YXIgcGllY2VJbmRleCA9IDA7XG4gIHZhciBjb21wcmVzcyA9IG51bGw7XG4gIHZhciBwb2ludGVyID0gMDtcbiAgdmFyIHZhbHVlLCBsZW5ndGgsIG51bWJlcnNTZWVuLCBpcHY0UGllY2UsIG51bWJlciwgc3dhcHMsIHN3YXA7XG5cbiAgdmFyIGNociA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaW5wdXQuY2hhckF0KHBvaW50ZXIpO1xuICB9O1xuXG4gIGlmIChjaHIoKSA9PSAnOicpIHtcbiAgICBpZiAoaW5wdXQuY2hhckF0KDEpICE9ICc6JykgcmV0dXJuO1xuICAgIHBvaW50ZXIgKz0gMjtcbiAgICBwaWVjZUluZGV4Kys7XG4gICAgY29tcHJlc3MgPSBwaWVjZUluZGV4O1xuICB9XG4gIHdoaWxlIChjaHIoKSkge1xuICAgIGlmIChwaWVjZUluZGV4ID09IDgpIHJldHVybjtcbiAgICBpZiAoY2hyKCkgPT0gJzonKSB7XG4gICAgICBpZiAoY29tcHJlc3MgIT09IG51bGwpIHJldHVybjtcbiAgICAgIHBvaW50ZXIrKztcbiAgICAgIHBpZWNlSW5kZXgrKztcbiAgICAgIGNvbXByZXNzID0gcGllY2VJbmRleDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB2YWx1ZSA9IGxlbmd0aCA9IDA7XG4gICAgd2hpbGUgKGxlbmd0aCA8IDQgJiYgSEVYLnRlc3QoY2hyKCkpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlICogMTYgKyBwYXJzZUludChjaHIoKSwgMTYpO1xuICAgICAgcG9pbnRlcisrO1xuICAgICAgbGVuZ3RoKys7XG4gICAgfVxuICAgIGlmIChjaHIoKSA9PSAnLicpIHtcbiAgICAgIGlmIChsZW5ndGggPT0gMCkgcmV0dXJuO1xuICAgICAgcG9pbnRlciAtPSBsZW5ndGg7XG4gICAgICBpZiAocGllY2VJbmRleCA+IDYpIHJldHVybjtcbiAgICAgIG51bWJlcnNTZWVuID0gMDtcbiAgICAgIHdoaWxlIChjaHIoKSkge1xuICAgICAgICBpcHY0UGllY2UgPSBudWxsO1xuICAgICAgICBpZiAobnVtYmVyc1NlZW4gPiAwKSB7XG4gICAgICAgICAgaWYgKGNocigpID09ICcuJyAmJiBudW1iZXJzU2VlbiA8IDQpIHBvaW50ZXIrKztcbiAgICAgICAgICBlbHNlIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIURJR0lULnRlc3QoY2hyKCkpKSByZXR1cm47XG4gICAgICAgIHdoaWxlIChESUdJVC50ZXN0KGNocigpKSkge1xuICAgICAgICAgIG51bWJlciA9IHBhcnNlSW50KGNocigpLCAxMCk7XG4gICAgICAgICAgaWYgKGlwdjRQaWVjZSA9PT0gbnVsbCkgaXB2NFBpZWNlID0gbnVtYmVyO1xuICAgICAgICAgIGVsc2UgaWYgKGlwdjRQaWVjZSA9PSAwKSByZXR1cm47XG4gICAgICAgICAgZWxzZSBpcHY0UGllY2UgPSBpcHY0UGllY2UgKiAxMCArIG51bWJlcjtcbiAgICAgICAgICBpZiAoaXB2NFBpZWNlID4gMjU1KSByZXR1cm47XG4gICAgICAgICAgcG9pbnRlcisrO1xuICAgICAgICB9XG4gICAgICAgIGFkZHJlc3NbcGllY2VJbmRleF0gPSBhZGRyZXNzW3BpZWNlSW5kZXhdICogMjU2ICsgaXB2NFBpZWNlO1xuICAgICAgICBudW1iZXJzU2VlbisrO1xuICAgICAgICBpZiAobnVtYmVyc1NlZW4gPT0gMiB8fCBudW1iZXJzU2VlbiA9PSA0KSBwaWVjZUluZGV4Kys7XG4gICAgICB9XG4gICAgICBpZiAobnVtYmVyc1NlZW4gIT0gNCkgcmV0dXJuO1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIGlmIChjaHIoKSA9PSAnOicpIHtcbiAgICAgIHBvaW50ZXIrKztcbiAgICAgIGlmICghY2hyKCkpIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGNocigpKSByZXR1cm47XG4gICAgYWRkcmVzc1twaWVjZUluZGV4KytdID0gdmFsdWU7XG4gIH1cbiAgaWYgKGNvbXByZXNzICE9PSBudWxsKSB7XG4gICAgc3dhcHMgPSBwaWVjZUluZGV4IC0gY29tcHJlc3M7XG4gICAgcGllY2VJbmRleCA9IDc7XG4gICAgd2hpbGUgKHBpZWNlSW5kZXggIT0gMCAmJiBzd2FwcyA+IDApIHtcbiAgICAgIHN3YXAgPSBhZGRyZXNzW3BpZWNlSW5kZXhdO1xuICAgICAgYWRkcmVzc1twaWVjZUluZGV4LS1dID0gYWRkcmVzc1tjb21wcmVzcyArIHN3YXBzIC0gMV07XG4gICAgICBhZGRyZXNzW2NvbXByZXNzICsgLS1zd2Fwc10gPSBzd2FwO1xuICAgIH1cbiAgfSBlbHNlIGlmIChwaWVjZUluZGV4ICE9IDgpIHJldHVybjtcbiAgcmV0dXJuIGFkZHJlc3M7XG59O1xuXG52YXIgZmluZExvbmdlc3RaZXJvU2VxdWVuY2UgPSBmdW5jdGlvbiAoaXB2Nikge1xuICB2YXIgbWF4SW5kZXggPSBudWxsO1xuICB2YXIgbWF4TGVuZ3RoID0gMTtcbiAgdmFyIGN1cnJTdGFydCA9IG51bGw7XG4gIHZhciBjdXJyTGVuZ3RoID0gMDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgZm9yICg7IGluZGV4IDwgODsgaW5kZXgrKykge1xuICAgIGlmIChpcHY2W2luZGV4XSAhPT0gMCkge1xuICAgICAgaWYgKGN1cnJMZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICAgICAgbWF4SW5kZXggPSBjdXJyU3RhcnQ7XG4gICAgICAgIG1heExlbmd0aCA9IGN1cnJMZW5ndGg7XG4gICAgICB9XG4gICAgICBjdXJyU3RhcnQgPSBudWxsO1xuICAgICAgY3Vyckxlbmd0aCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjdXJyU3RhcnQgPT09IG51bGwpIGN1cnJTdGFydCA9IGluZGV4O1xuICAgICAgKytjdXJyTGVuZ3RoO1xuICAgIH1cbiAgfVxuICBpZiAoY3Vyckxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgIG1heEluZGV4ID0gY3VyclN0YXJ0O1xuICAgIG1heExlbmd0aCA9IGN1cnJMZW5ndGg7XG4gIH1cbiAgcmV0dXJuIG1heEluZGV4O1xufTtcblxudmFyIHNlcmlhbGl6ZUhvc3QgPSBmdW5jdGlvbiAoaG9zdCkge1xuICB2YXIgcmVzdWx0LCBpbmRleCwgY29tcHJlc3MsIGlnbm9yZTA7XG4gIC8vIGlwdjRcbiAgaWYgKHR5cGVvZiBob3N0ID09ICdudW1iZXInKSB7XG4gICAgcmVzdWx0ID0gW107XG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgNDsgaW5kZXgrKykge1xuICAgICAgcmVzdWx0LnVuc2hpZnQoaG9zdCAlIDI1Nik7XG4gICAgICBob3N0ID0gZmxvb3IoaG9zdCAvIDI1Nik7XG4gICAgfSByZXR1cm4gcmVzdWx0LmpvaW4oJy4nKTtcbiAgLy8gaXB2NlxuICB9IGVsc2UgaWYgKHR5cGVvZiBob3N0ID09ICdvYmplY3QnKSB7XG4gICAgcmVzdWx0ID0gJyc7XG4gICAgY29tcHJlc3MgPSBmaW5kTG9uZ2VzdFplcm9TZXF1ZW5jZShob3N0KTtcbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCA4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoaWdub3JlMCAmJiBob3N0W2luZGV4XSA9PT0gMCkgY29udGludWU7XG4gICAgICBpZiAoaWdub3JlMCkgaWdub3JlMCA9IGZhbHNlO1xuICAgICAgaWYgKGNvbXByZXNzID09PSBpbmRleCkge1xuICAgICAgICByZXN1bHQgKz0gaW5kZXggPyAnOicgOiAnOjonO1xuICAgICAgICBpZ25vcmUwID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCArPSBob3N0W2luZGV4XS50b1N0cmluZygxNik7XG4gICAgICAgIGlmIChpbmRleCA8IDcpIHJlc3VsdCArPSAnOic7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnWycgKyByZXN1bHQgKyAnXSc7XG4gIH0gcmV0dXJuIGhvc3Q7XG59O1xuXG52YXIgQzBDb250cm9sUGVyY2VudEVuY29kZVNldCA9IHt9O1xudmFyIGZyYWdtZW50UGVyY2VudEVuY29kZVNldCA9IGFzc2lnbih7fSwgQzBDb250cm9sUGVyY2VudEVuY29kZVNldCwge1xuICAnICc6IDEsICdcIic6IDEsICc8JzogMSwgJz4nOiAxLCAnYCc6IDFcbn0pO1xudmFyIHBhdGhQZXJjZW50RW5jb2RlU2V0ID0gYXNzaWduKHt9LCBmcmFnbWVudFBlcmNlbnRFbmNvZGVTZXQsIHtcbiAgJyMnOiAxLCAnPyc6IDEsICd7JzogMSwgJ30nOiAxXG59KTtcbnZhciB1c2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQgPSBhc3NpZ24oe30sIHBhdGhQZXJjZW50RW5jb2RlU2V0LCB7XG4gICcvJzogMSwgJzonOiAxLCAnOyc6IDEsICc9JzogMSwgJ0AnOiAxLCAnWyc6IDEsICdcXFxcJzogMSwgJ10nOiAxLCAnXic6IDEsICd8JzogMVxufSk7XG5cbnZhciBwZXJjZW50RW5jb2RlID0gZnVuY3Rpb24gKGNociwgc2V0KSB7XG4gIHZhciBjb2RlID0gY29kZUF0KGNociwgMCk7XG4gIHJldHVybiBjb2RlID4gMHgyMCAmJiBjb2RlIDwgMHg3RiAmJiAhaGFzT3duKHNldCwgY2hyKSA/IGNociA6IGVuY29kZVVSSUNvbXBvbmVudChjaHIpO1xufTtcblxudmFyIHNwZWNpYWxTY2hlbWVzID0ge1xuICBmdHA6IDIxLFxuICBmaWxlOiBudWxsLFxuICBodHRwOiA4MCxcbiAgaHR0cHM6IDQ0MyxcbiAgd3M6IDgwLFxuICB3c3M6IDQ0M1xufTtcblxudmFyIGlzU3BlY2lhbCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgcmV0dXJuIGhhc093bihzcGVjaWFsU2NoZW1lcywgdXJsLnNjaGVtZSk7XG59O1xuXG52YXIgaW5jbHVkZXNDcmVkZW50aWFscyA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgcmV0dXJuIHVybC51c2VybmFtZSAhPSAnJyB8fCB1cmwucGFzc3dvcmQgIT0gJyc7XG59O1xuXG52YXIgY2Fubm90SGF2ZVVzZXJuYW1lUGFzc3dvcmRQb3J0ID0gZnVuY3Rpb24gKHVybCkge1xuICByZXR1cm4gIXVybC5ob3N0IHx8IHVybC5jYW5ub3RCZUFCYXNlVVJMIHx8IHVybC5zY2hlbWUgPT0gJ2ZpbGUnO1xufTtcblxudmFyIGlzV2luZG93c0RyaXZlTGV0dGVyID0gZnVuY3Rpb24gKHN0cmluZywgbm9ybWFsaXplZCkge1xuICB2YXIgc2Vjb25kO1xuICByZXR1cm4gc3RyaW5nLmxlbmd0aCA9PSAyICYmIEFMUEhBLnRlc3Qoc3RyaW5nLmNoYXJBdCgwKSlcbiAgICAmJiAoKHNlY29uZCA9IHN0cmluZy5jaGFyQXQoMSkpID09ICc6JyB8fCAoIW5vcm1hbGl6ZWQgJiYgc2Vjb25kID09ICd8JykpO1xufTtcblxudmFyIHN0YXJ0c1dpdGhXaW5kb3dzRHJpdmVMZXR0ZXIgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHZhciB0aGlyZDtcbiAgcmV0dXJuIHN0cmluZy5sZW5ndGggPiAxICYmIGlzV2luZG93c0RyaXZlTGV0dGVyKHN0cmluZy5zbGljZSgwLCAyKSkgJiYgKFxuICAgIHN0cmluZy5sZW5ndGggPT0gMiB8fFxuICAgICgodGhpcmQgPSBzdHJpbmcuY2hhckF0KDIpKSA9PT0gJy8nIHx8IHRoaXJkID09PSAnXFxcXCcgfHwgdGhpcmQgPT09ICc/JyB8fCB0aGlyZCA9PT0gJyMnKVxuICApO1xufTtcblxudmFyIHNob3J0ZW5VUkxzUGF0aCA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgdmFyIHBhdGggPSB1cmwucGF0aDtcbiAgdmFyIHBhdGhTaXplID0gcGF0aC5sZW5ndGg7XG4gIGlmIChwYXRoU2l6ZSAmJiAodXJsLnNjaGVtZSAhPSAnZmlsZScgfHwgcGF0aFNpemUgIT0gMSB8fCAhaXNXaW5kb3dzRHJpdmVMZXR0ZXIocGF0aFswXSwgdHJ1ZSkpKSB7XG4gICAgcGF0aC5wb3AoKTtcbiAgfVxufTtcblxudmFyIGlzU2luZ2xlRG90ID0gZnVuY3Rpb24gKHNlZ21lbnQpIHtcbiAgcmV0dXJuIHNlZ21lbnQgPT09ICcuJyB8fCBzZWdtZW50LnRvTG93ZXJDYXNlKCkgPT09ICclMmUnO1xufTtcblxudmFyIGlzRG91YmxlRG90ID0gZnVuY3Rpb24gKHNlZ21lbnQpIHtcbiAgc2VnbWVudCA9IHNlZ21lbnQudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIHNlZ21lbnQgPT09ICcuLicgfHwgc2VnbWVudCA9PT0gJyUyZS4nIHx8IHNlZ21lbnQgPT09ICcuJTJlJyB8fCBzZWdtZW50ID09PSAnJTJlJTJlJztcbn07XG5cbi8vIFN0YXRlczpcbnZhciBTQ0hFTUVfU1RBUlQgPSB7fTtcbnZhciBTQ0hFTUUgPSB7fTtcbnZhciBOT19TQ0hFTUUgPSB7fTtcbnZhciBTUEVDSUFMX1JFTEFUSVZFX09SX0FVVEhPUklUWSA9IHt9O1xudmFyIFBBVEhfT1JfQVVUSE9SSVRZID0ge307XG52YXIgUkVMQVRJVkUgPSB7fTtcbnZhciBSRUxBVElWRV9TTEFTSCA9IHt9O1xudmFyIFNQRUNJQUxfQVVUSE9SSVRZX1NMQVNIRVMgPSB7fTtcbnZhciBTUEVDSUFMX0FVVEhPUklUWV9JR05PUkVfU0xBU0hFUyA9IHt9O1xudmFyIEFVVEhPUklUWSA9IHt9O1xudmFyIEhPU1QgPSB7fTtcbnZhciBIT1NUTkFNRSA9IHt9O1xudmFyIFBPUlQgPSB7fTtcbnZhciBGSUxFID0ge307XG52YXIgRklMRV9TTEFTSCA9IHt9O1xudmFyIEZJTEVfSE9TVCA9IHt9O1xudmFyIFBBVEhfU1RBUlQgPSB7fTtcbnZhciBQQVRIID0ge307XG52YXIgQ0FOTk9UX0JFX0FfQkFTRV9VUkxfUEFUSCA9IHt9O1xudmFyIFFVRVJZID0ge307XG52YXIgRlJBR01FTlQgPSB7fTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzIC0tIFRPRE9cbnZhciBwYXJzZVVSTCA9IGZ1bmN0aW9uICh1cmwsIGlucHV0LCBzdGF0ZU92ZXJyaWRlLCBiYXNlKSB7XG4gIHZhciBzdGF0ZSA9IHN0YXRlT3ZlcnJpZGUgfHwgU0NIRU1FX1NUQVJUO1xuICB2YXIgcG9pbnRlciA9IDA7XG4gIHZhciBidWZmZXIgPSAnJztcbiAgdmFyIHNlZW5BdCA9IGZhbHNlO1xuICB2YXIgc2VlbkJyYWNrZXQgPSBmYWxzZTtcbiAgdmFyIHNlZW5QYXNzd29yZFRva2VuID0gZmFsc2U7XG4gIHZhciBjb2RlUG9pbnRzLCBjaHIsIGJ1ZmZlckNvZGVQb2ludHMsIGZhaWx1cmU7XG5cbiAgaWYgKCFzdGF0ZU92ZXJyaWRlKSB7XG4gICAgdXJsLnNjaGVtZSA9ICcnO1xuICAgIHVybC51c2VybmFtZSA9ICcnO1xuICAgIHVybC5wYXNzd29yZCA9ICcnO1xuICAgIHVybC5ob3N0ID0gbnVsbDtcbiAgICB1cmwucG9ydCA9IG51bGw7XG4gICAgdXJsLnBhdGggPSBbXTtcbiAgICB1cmwucXVlcnkgPSBudWxsO1xuICAgIHVybC5mcmFnbWVudCA9IG51bGw7XG4gICAgdXJsLmNhbm5vdEJlQUJhc2VVUkwgPSBmYWxzZTtcbiAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoTEVBRElOR19BTkRfVFJBSUxJTkdfQzBfQ09OVFJPTF9PUl9TUEFDRSwgJycpO1xuICB9XG5cbiAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKFRBQl9BTkRfTkVXX0xJTkUsICcnKTtcblxuICBjb2RlUG9pbnRzID0gYXJyYXlGcm9tKGlucHV0KTtcblxuICB3aGlsZSAocG9pbnRlciA8PSBjb2RlUG9pbnRzLmxlbmd0aCkge1xuICAgIGNociA9IGNvZGVQb2ludHNbcG9pbnRlcl07XG4gICAgc3dpdGNoIChzdGF0ZSkge1xuICAgICAgY2FzZSBTQ0hFTUVfU1RBUlQ6XG4gICAgICAgIGlmIChjaHIgJiYgQUxQSEEudGVzdChjaHIpKSB7XG4gICAgICAgICAgYnVmZmVyICs9IGNoci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIHN0YXRlID0gU0NIRU1FO1xuICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICAgICAgc3RhdGUgPSBOT19TQ0hFTUU7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSByZXR1cm4gSU5WQUxJRF9TQ0hFTUU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNDSEVNRTpcbiAgICAgICAgaWYgKGNociAmJiAoQUxQSEFOVU1FUklDLnRlc3QoY2hyKSB8fCBjaHIgPT0gJysnIHx8IGNociA9PSAnLScgfHwgY2hyID09ICcuJykpIHtcbiAgICAgICAgICBidWZmZXIgKz0gY2hyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hyID09ICc6Jykge1xuICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlICYmIChcbiAgICAgICAgICAgIChpc1NwZWNpYWwodXJsKSAhPSBoYXNPd24oc3BlY2lhbFNjaGVtZXMsIGJ1ZmZlcikpIHx8XG4gICAgICAgICAgICAoYnVmZmVyID09ICdmaWxlJyAmJiAoaW5jbHVkZXNDcmVkZW50aWFscyh1cmwpIHx8IHVybC5wb3J0ICE9PSBudWxsKSkgfHxcbiAgICAgICAgICAgICh1cmwuc2NoZW1lID09ICdmaWxlJyAmJiAhdXJsLmhvc3QpXG4gICAgICAgICAgKSkgcmV0dXJuO1xuICAgICAgICAgIHVybC5zY2hlbWUgPSBidWZmZXI7XG4gICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgIGlmIChpc1NwZWNpYWwodXJsKSAmJiBzcGVjaWFsU2NoZW1lc1t1cmwuc2NoZW1lXSA9PSB1cmwucG9ydCkgdXJsLnBvcnQgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICBpZiAodXJsLnNjaGVtZSA9PSAnZmlsZScpIHtcbiAgICAgICAgICAgIHN0YXRlID0gRklMRTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzU3BlY2lhbCh1cmwpICYmIGJhc2UgJiYgYmFzZS5zY2hlbWUgPT0gdXJsLnNjaGVtZSkge1xuICAgICAgICAgICAgc3RhdGUgPSBTUEVDSUFMX1JFTEFUSVZFX09SX0FVVEhPUklUWTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzU3BlY2lhbCh1cmwpKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IFNQRUNJQUxfQVVUSE9SSVRZX1NMQVNIRVM7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2RlUG9pbnRzW3BvaW50ZXIgKyAxXSA9PSAnLycpIHtcbiAgICAgICAgICAgIHN0YXRlID0gUEFUSF9PUl9BVVRIT1JJVFk7XG4gICAgICAgICAgICBwb2ludGVyKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVybC5jYW5ub3RCZUFCYXNlVVJMID0gdHJ1ZTtcbiAgICAgICAgICAgIHVybC5wYXRoLnB1c2goJycpO1xuICAgICAgICAgICAgc3RhdGUgPSBDQU5OT1RfQkVfQV9CQVNFX1VSTF9QQVRIO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghc3RhdGVPdmVycmlkZSkge1xuICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgIHN0YXRlID0gTk9fU0NIRU1FO1xuICAgICAgICAgIHBvaW50ZXIgPSAwO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgcmV0dXJuIElOVkFMSURfU0NIRU1FO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBOT19TQ0hFTUU6XG4gICAgICAgIGlmICghYmFzZSB8fCAoYmFzZS5jYW5ub3RCZUFCYXNlVVJMICYmIGNociAhPSAnIycpKSByZXR1cm4gSU5WQUxJRF9TQ0hFTUU7XG4gICAgICAgIGlmIChiYXNlLmNhbm5vdEJlQUJhc2VVUkwgJiYgY2hyID09ICcjJykge1xuICAgICAgICAgIHVybC5zY2hlbWUgPSBiYXNlLnNjaGVtZTtcbiAgICAgICAgICB1cmwucGF0aCA9IGJhc2UucGF0aC5zbGljZSgpO1xuICAgICAgICAgIHVybC5xdWVyeSA9IGJhc2UucXVlcnk7XG4gICAgICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICAgICAgdXJsLmNhbm5vdEJlQUJhc2VVUkwgPSB0cnVlO1xuICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUgPSBiYXNlLnNjaGVtZSA9PSAnZmlsZScgPyBGSUxFIDogUkVMQVRJVkU7XG4gICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICBjYXNlIFNQRUNJQUxfUkVMQVRJVkVfT1JfQVVUSE9SSVRZOlxuICAgICAgICBpZiAoY2hyID09ICcvJyAmJiBjb2RlUG9pbnRzW3BvaW50ZXIgKyAxXSA9PSAnLycpIHtcbiAgICAgICAgICBzdGF0ZSA9IFNQRUNJQUxfQVVUSE9SSVRZX0lHTk9SRV9TTEFTSEVTO1xuICAgICAgICAgIHBvaW50ZXIrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZSA9IFJFTEFUSVZFO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGJyZWFrO1xuXG4gICAgICBjYXNlIFBBVEhfT1JfQVVUSE9SSVRZOlxuICAgICAgICBpZiAoY2hyID09ICcvJykge1xuICAgICAgICAgIHN0YXRlID0gQVVUSE9SSVRZO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFJFTEFUSVZFOlxuICAgICAgICB1cmwuc2NoZW1lID0gYmFzZS5zY2hlbWU7XG4gICAgICAgIGlmIChjaHIgPT0gRU9GKSB7XG4gICAgICAgICAgdXJsLnVzZXJuYW1lID0gYmFzZS51c2VybmFtZTtcbiAgICAgICAgICB1cmwucGFzc3dvcmQgPSBiYXNlLnBhc3N3b3JkO1xuICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgIHVybC5wb3J0ID0gYmFzZS5wb3J0O1xuICAgICAgICAgIHVybC5wYXRoID0gYmFzZS5wYXRoLnNsaWNlKCk7XG4gICAgICAgICAgdXJsLnF1ZXJ5ID0gYmFzZS5xdWVyeTtcbiAgICAgICAgfSBlbHNlIGlmIChjaHIgPT0gJy8nIHx8IChjaHIgPT0gJ1xcXFwnICYmIGlzU3BlY2lhbCh1cmwpKSkge1xuICAgICAgICAgIHN0YXRlID0gUkVMQVRJVkVfU0xBU0g7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hyID09ICc/Jykge1xuICAgICAgICAgIHVybC51c2VybmFtZSA9IGJhc2UudXNlcm5hbWU7XG4gICAgICAgICAgdXJsLnBhc3N3b3JkID0gYmFzZS5wYXNzd29yZDtcbiAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICB1cmwucG9ydCA9IGJhc2UucG9ydDtcbiAgICAgICAgICB1cmwucGF0aCA9IGJhc2UucGF0aC5zbGljZSgpO1xuICAgICAgICAgIHVybC5xdWVyeSA9ICcnO1xuICAgICAgICAgIHN0YXRlID0gUVVFUlk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hyID09ICcjJykge1xuICAgICAgICAgIHVybC51c2VybmFtZSA9IGJhc2UudXNlcm5hbWU7XG4gICAgICAgICAgdXJsLnBhc3N3b3JkID0gYmFzZS5wYXNzd29yZDtcbiAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICB1cmwucG9ydCA9IGJhc2UucG9ydDtcbiAgICAgICAgICB1cmwucGF0aCA9IGJhc2UucGF0aC5zbGljZSgpO1xuICAgICAgICAgIHVybC5xdWVyeSA9IGJhc2UucXVlcnk7XG4gICAgICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICAgICAgc3RhdGUgPSBGUkFHTUVOVDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1cmwudXNlcm5hbWUgPSBiYXNlLnVzZXJuYW1lO1xuICAgICAgICAgIHVybC5wYXNzd29yZCA9IGJhc2UucGFzc3dvcmQ7XG4gICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgdXJsLnBvcnQgPSBiYXNlLnBvcnQ7XG4gICAgICAgICAgdXJsLnBhdGggPSBiYXNlLnBhdGguc2xpY2UoKTtcbiAgICAgICAgICB1cmwucGF0aC5wb3AoKTtcbiAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gYnJlYWs7XG5cbiAgICAgIGNhc2UgUkVMQVRJVkVfU0xBU0g6XG4gICAgICAgIGlmIChpc1NwZWNpYWwodXJsKSAmJiAoY2hyID09ICcvJyB8fCBjaHIgPT0gJ1xcXFwnKSkge1xuICAgICAgICAgIHN0YXRlID0gU1BFQ0lBTF9BVVRIT1JJVFlfSUdOT1JFX1NMQVNIRVM7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hyID09ICcvJykge1xuICAgICAgICAgIHN0YXRlID0gQVVUSE9SSVRZO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVybC51c2VybmFtZSA9IGJhc2UudXNlcm5hbWU7XG4gICAgICAgICAgdXJsLnBhc3N3b3JkID0gYmFzZS5wYXNzd29yZDtcbiAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICB1cmwucG9ydCA9IGJhc2UucG9ydDtcbiAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gYnJlYWs7XG5cbiAgICAgIGNhc2UgU1BFQ0lBTF9BVVRIT1JJVFlfU0xBU0hFUzpcbiAgICAgICAgc3RhdGUgPSBTUEVDSUFMX0FVVEhPUklUWV9JR05PUkVfU0xBU0hFUztcbiAgICAgICAgaWYgKGNociAhPSAnLycgfHwgYnVmZmVyLmNoYXJBdChwb2ludGVyICsgMSkgIT0gJy8nKSBjb250aW51ZTtcbiAgICAgICAgcG9pbnRlcisrO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTUEVDSUFMX0FVVEhPUklUWV9JR05PUkVfU0xBU0hFUzpcbiAgICAgICAgaWYgKGNociAhPSAnLycgJiYgY2hyICE9ICdcXFxcJykge1xuICAgICAgICAgIHN0YXRlID0gQVVUSE9SSVRZO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGJyZWFrO1xuXG4gICAgICBjYXNlIEFVVEhPUklUWTpcbiAgICAgICAgaWYgKGNociA9PSAnQCcpIHtcbiAgICAgICAgICBpZiAoc2VlbkF0KSBidWZmZXIgPSAnJTQwJyArIGJ1ZmZlcjtcbiAgICAgICAgICBzZWVuQXQgPSB0cnVlO1xuICAgICAgICAgIGJ1ZmZlckNvZGVQb2ludHMgPSBhcnJheUZyb20oYnVmZmVyKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmZlckNvZGVQb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjb2RlUG9pbnQgPSBidWZmZXJDb2RlUG9pbnRzW2ldO1xuICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA9PSAnOicgJiYgIXNlZW5QYXNzd29yZFRva2VuKSB7XG4gICAgICAgICAgICAgIHNlZW5QYXNzd29yZFRva2VuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZW5jb2RlZENvZGVQb2ludHMgPSBwZXJjZW50RW5jb2RlKGNvZGVQb2ludCwgdXNlcmluZm9QZXJjZW50RW5jb2RlU2V0KTtcbiAgICAgICAgICAgIGlmIChzZWVuUGFzc3dvcmRUb2tlbikgdXJsLnBhc3N3b3JkICs9IGVuY29kZWRDb2RlUG9pbnRzO1xuICAgICAgICAgICAgZWxzZSB1cmwudXNlcm5hbWUgKz0gZW5jb2RlZENvZGVQb2ludHM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGNociA9PSBFT0YgfHwgY2hyID09ICcvJyB8fCBjaHIgPT0gJz8nIHx8IGNociA9PSAnIycgfHxcbiAgICAgICAgICAoY2hyID09ICdcXFxcJyAmJiBpc1NwZWNpYWwodXJsKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHNlZW5BdCAmJiBidWZmZXIgPT0gJycpIHJldHVybiBJTlZBTElEX0FVVEhPUklUWTtcbiAgICAgICAgICBwb2ludGVyIC09IGFycmF5RnJvbShidWZmZXIpLmxlbmd0aCArIDE7XG4gICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgc3RhdGUgPSBIT1NUO1xuICAgICAgICB9IGVsc2UgYnVmZmVyICs9IGNocjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgSE9TVDpcbiAgICAgIGNhc2UgSE9TVE5BTUU6XG4gICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlICYmIHVybC5zY2hlbWUgPT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgc3RhdGUgPSBGSUxFX0hPU1Q7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hyID09ICc6JyAmJiAhc2VlbkJyYWNrZXQpIHtcbiAgICAgICAgICBpZiAoYnVmZmVyID09ICcnKSByZXR1cm4gSU5WQUxJRF9IT1NUO1xuICAgICAgICAgIGZhaWx1cmUgPSBwYXJzZUhvc3QodXJsLCBidWZmZXIpO1xuICAgICAgICAgIGlmIChmYWlsdXJlKSByZXR1cm4gZmFpbHVyZTtcbiAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICBzdGF0ZSA9IFBPUlQ7XG4gICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUgPT0gSE9TVE5BTUUpIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBjaHIgPT0gRU9GIHx8IGNociA9PSAnLycgfHwgY2hyID09ICc/JyB8fCBjaHIgPT0gJyMnIHx8XG4gICAgICAgICAgKGNociA9PSAnXFxcXCcgJiYgaXNTcGVjaWFsKHVybCkpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChpc1NwZWNpYWwodXJsKSAmJiBidWZmZXIgPT0gJycpIHJldHVybiBJTlZBTElEX0hPU1Q7XG4gICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUgJiYgYnVmZmVyID09ICcnICYmIChpbmNsdWRlc0NyZWRlbnRpYWxzKHVybCkgfHwgdXJsLnBvcnQgIT09IG51bGwpKSByZXR1cm47XG4gICAgICAgICAgZmFpbHVyZSA9IHBhcnNlSG9zdCh1cmwsIGJ1ZmZlcik7XG4gICAgICAgICAgaWYgKGZhaWx1cmUpIHJldHVybiBmYWlsdXJlO1xuICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgIHN0YXRlID0gUEFUSF9TVEFSVDtcbiAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSkgcmV0dXJuO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChjaHIgPT0gJ1snKSBzZWVuQnJhY2tldCA9IHRydWU7XG4gICAgICAgICAgZWxzZSBpZiAoY2hyID09ICddJykgc2VlbkJyYWNrZXQgPSBmYWxzZTtcbiAgICAgICAgICBidWZmZXIgKz0gY2hyO1xuICAgICAgICB9IGJyZWFrO1xuXG4gICAgICBjYXNlIFBPUlQ6XG4gICAgICAgIGlmIChESUdJVC50ZXN0KGNocikpIHtcbiAgICAgICAgICBidWZmZXIgKz0gY2hyO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGNociA9PSBFT0YgfHwgY2hyID09ICcvJyB8fCBjaHIgPT0gJz8nIHx8IGNociA9PSAnIycgfHxcbiAgICAgICAgICAoY2hyID09ICdcXFxcJyAmJiBpc1NwZWNpYWwodXJsKSkgfHxcbiAgICAgICAgICBzdGF0ZU92ZXJyaWRlXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChidWZmZXIgIT0gJycpIHtcbiAgICAgICAgICAgIHZhciBwb3J0ID0gcGFyc2VJbnQoYnVmZmVyLCAxMCk7XG4gICAgICAgICAgICBpZiAocG9ydCA+IDB4RkZGRikgcmV0dXJuIElOVkFMSURfUE9SVDtcbiAgICAgICAgICAgIHVybC5wb3J0ID0gKGlzU3BlY2lhbCh1cmwpICYmIHBvcnQgPT09IHNwZWNpYWxTY2hlbWVzW3VybC5zY2hlbWVdKSA/IG51bGwgOiBwb3J0O1xuICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSByZXR1cm47XG4gICAgICAgICAgc3RhdGUgPSBQQVRIX1NUQVJUO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgcmV0dXJuIElOVkFMSURfUE9SVDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRklMRTpcbiAgICAgICAgdXJsLnNjaGVtZSA9ICdmaWxlJztcbiAgICAgICAgaWYgKGNociA9PSAnLycgfHwgY2hyID09ICdcXFxcJykgc3RhdGUgPSBGSUxFX1NMQVNIO1xuICAgICAgICBlbHNlIGlmIChiYXNlICYmIGJhc2Uuc2NoZW1lID09ICdmaWxlJykge1xuICAgICAgICAgIGlmIChjaHIgPT0gRU9GKSB7XG4gICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgIHVybC5wYXRoID0gYmFzZS5wYXRoLnNsaWNlKCk7XG4gICAgICAgICAgICB1cmwucXVlcnkgPSBiYXNlLnF1ZXJ5O1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyID09ICc/Jykge1xuICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICB1cmwucGF0aCA9IGJhc2UucGF0aC5zbGljZSgpO1xuICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IFFVRVJZO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyID09ICcjJykge1xuICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICB1cmwucGF0aCA9IGJhc2UucGF0aC5zbGljZSgpO1xuICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gYmFzZS5xdWVyeTtcbiAgICAgICAgICAgIHVybC5mcmFnbWVudCA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBGUkFHTUVOVDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFzdGFydHNXaXRoV2luZG93c0RyaXZlTGV0dGVyKGNvZGVQb2ludHMuc2xpY2UocG9pbnRlcikuam9pbignJykpKSB7XG4gICAgICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgICB1cmwucGF0aCA9IGJhc2UucGF0aC5zbGljZSgpO1xuICAgICAgICAgICAgICBzaG9ydGVuVVJMc1BhdGgodXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gYnJlYWs7XG5cbiAgICAgIGNhc2UgRklMRV9TTEFTSDpcbiAgICAgICAgaWYgKGNociA9PSAnLycgfHwgY2hyID09ICdcXFxcJykge1xuICAgICAgICAgIHN0YXRlID0gRklMRV9IT1NUO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiYXNlICYmIGJhc2Uuc2NoZW1lID09ICdmaWxlJyAmJiAhc3RhcnRzV2l0aFdpbmRvd3NEcml2ZUxldHRlcihjb2RlUG9pbnRzLnNsaWNlKHBvaW50ZXIpLmpvaW4oJycpKSkge1xuICAgICAgICAgIGlmIChpc1dpbmRvd3NEcml2ZUxldHRlcihiYXNlLnBhdGhbMF0sIHRydWUpKSB1cmwucGF0aC5wdXNoKGJhc2UucGF0aFswXSk7XG4gICAgICAgICAgZWxzZSB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICBjYXNlIEZJTEVfSE9TVDpcbiAgICAgICAgaWYgKGNociA9PSBFT0YgfHwgY2hyID09ICcvJyB8fCBjaHIgPT0gJ1xcXFwnIHx8IGNociA9PSAnPycgfHwgY2hyID09ICcjJykge1xuICAgICAgICAgIGlmICghc3RhdGVPdmVycmlkZSAmJiBpc1dpbmRvd3NEcml2ZUxldHRlcihidWZmZXIpKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgfSBlbHNlIGlmIChidWZmZXIgPT0gJycpIHtcbiAgICAgICAgICAgIHVybC5ob3N0ID0gJyc7XG4gICAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSkgcmV0dXJuO1xuICAgICAgICAgICAgc3RhdGUgPSBQQVRIX1NUQVJUO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmYWlsdXJlID0gcGFyc2VIb3N0KHVybCwgYnVmZmVyKTtcbiAgICAgICAgICAgIGlmIChmYWlsdXJlKSByZXR1cm4gZmFpbHVyZTtcbiAgICAgICAgICAgIGlmICh1cmwuaG9zdCA9PSAnbG9jYWxob3N0JykgdXJsLmhvc3QgPSAnJztcbiAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSByZXR1cm47XG4gICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gUEFUSF9TVEFSVDtcbiAgICAgICAgICB9IGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgYnVmZmVyICs9IGNocjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUEFUSF9TVEFSVDpcbiAgICAgICAgaWYgKGlzU3BlY2lhbCh1cmwpKSB7XG4gICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgIGlmIChjaHIgIT0gJy8nICYmIGNociAhPSAnXFxcXCcpIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZU92ZXJyaWRlICYmIGNociA9PSAnPycpIHtcbiAgICAgICAgICB1cmwucXVlcnkgPSAnJztcbiAgICAgICAgICBzdGF0ZSA9IFFVRVJZO1xuICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZU92ZXJyaWRlICYmIGNociA9PSAnIycpIHtcbiAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICBzdGF0ZSA9IEZSQUdNRU5UO1xuICAgICAgICB9IGVsc2UgaWYgKGNociAhPSBFT0YpIHtcbiAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgaWYgKGNociAhPSAnLycpIGNvbnRpbnVlO1xuICAgICAgICB9IGJyZWFrO1xuXG4gICAgICBjYXNlIFBBVEg6XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaHIgPT0gRU9GIHx8IGNociA9PSAnLycgfHxcbiAgICAgICAgICAoY2hyID09ICdcXFxcJyAmJiBpc1NwZWNpYWwodXJsKSkgfHxcbiAgICAgICAgICAoIXN0YXRlT3ZlcnJpZGUgJiYgKGNociA9PSAnPycgfHwgY2hyID09ICcjJykpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChpc0RvdWJsZURvdChidWZmZXIpKSB7XG4gICAgICAgICAgICBzaG9ydGVuVVJMc1BhdGgodXJsKTtcbiAgICAgICAgICAgIGlmIChjaHIgIT0gJy8nICYmICEoY2hyID09ICdcXFxcJyAmJiBpc1NwZWNpYWwodXJsKSkpIHtcbiAgICAgICAgICAgICAgdXJsLnBhdGgucHVzaCgnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1NpbmdsZURvdChidWZmZXIpKSB7XG4gICAgICAgICAgICBpZiAoY2hyICE9ICcvJyAmJiAhKGNociA9PSAnXFxcXCcgJiYgaXNTcGVjaWFsKHVybCkpKSB7XG4gICAgICAgICAgICAgIHVybC5wYXRoLnB1c2goJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodXJsLnNjaGVtZSA9PSAnZmlsZScgJiYgIXVybC5wYXRoLmxlbmd0aCAmJiBpc1dpbmRvd3NEcml2ZUxldHRlcihidWZmZXIpKSB7XG4gICAgICAgICAgICAgIGlmICh1cmwuaG9zdCkgdXJsLmhvc3QgPSAnJztcbiAgICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVyLmNoYXJBdCgwKSArICc6JzsgLy8gbm9ybWFsaXplIHdpbmRvd3MgZHJpdmUgbGV0dGVyXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cmwucGF0aC5wdXNoKGJ1ZmZlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgIGlmICh1cmwuc2NoZW1lID09ICdmaWxlJyAmJiAoY2hyID09IEVPRiB8fCBjaHIgPT0gJz8nIHx8IGNociA9PSAnIycpKSB7XG4gICAgICAgICAgICB3aGlsZSAodXJsLnBhdGgubGVuZ3RoID4gMSAmJiB1cmwucGF0aFswXSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgdXJsLnBhdGguc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNociA9PSAnPycpIHtcbiAgICAgICAgICAgIHVybC5xdWVyeSA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBRVUVSWTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNociA9PSAnIycpIHtcbiAgICAgICAgICAgIHVybC5mcmFnbWVudCA9ICcnO1xuICAgICAgICAgICAgc3RhdGUgPSBGUkFHTUVOVDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVmZmVyICs9IHBlcmNlbnRFbmNvZGUoY2hyLCBwYXRoUGVyY2VudEVuY29kZVNldCk7XG4gICAgICAgIH0gYnJlYWs7XG5cbiAgICAgIGNhc2UgQ0FOTk9UX0JFX0FfQkFTRV9VUkxfUEFUSDpcbiAgICAgICAgaWYgKGNociA9PSAnPycpIHtcbiAgICAgICAgICB1cmwucXVlcnkgPSAnJztcbiAgICAgICAgICBzdGF0ZSA9IFFVRVJZO1xuICAgICAgICB9IGVsc2UgaWYgKGNociA9PSAnIycpIHtcbiAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICBzdGF0ZSA9IEZSQUdNRU5UO1xuICAgICAgICB9IGVsc2UgaWYgKGNociAhPSBFT0YpIHtcbiAgICAgICAgICB1cmwucGF0aFswXSArPSBwZXJjZW50RW5jb2RlKGNociwgQzBDb250cm9sUGVyY2VudEVuY29kZVNldCk7XG4gICAgICAgIH0gYnJlYWs7XG5cbiAgICAgIGNhc2UgUVVFUlk6XG4gICAgICAgIGlmICghc3RhdGVPdmVycmlkZSAmJiBjaHIgPT0gJyMnKSB7XG4gICAgICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICAgICAgc3RhdGUgPSBGUkFHTUVOVDtcbiAgICAgICAgfSBlbHNlIGlmIChjaHIgIT0gRU9GKSB7XG4gICAgICAgICAgaWYgKGNociA9PSBcIidcIiAmJiBpc1NwZWNpYWwodXJsKSkgdXJsLnF1ZXJ5ICs9ICclMjcnO1xuICAgICAgICAgIGVsc2UgaWYgKGNociA9PSAnIycpIHVybC5xdWVyeSArPSAnJTIzJztcbiAgICAgICAgICBlbHNlIHVybC5xdWVyeSArPSBwZXJjZW50RW5jb2RlKGNociwgQzBDb250cm9sUGVyY2VudEVuY29kZVNldCk7XG4gICAgICAgIH0gYnJlYWs7XG5cbiAgICAgIGNhc2UgRlJBR01FTlQ6XG4gICAgICAgIGlmIChjaHIgIT0gRU9GKSB1cmwuZnJhZ21lbnQgKz0gcGVyY2VudEVuY29kZShjaHIsIGZyYWdtZW50UGVyY2VudEVuY29kZVNldCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHBvaW50ZXIrKztcbiAgfVxufTtcblxuLy8gYFVSTGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsLWNsYXNzXG52YXIgVVJMQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBVUkwodXJsIC8qICwgYmFzZSAqLykge1xuICB2YXIgdGhhdCA9IGFuSW5zdGFuY2UodGhpcywgVVJMQ29uc3RydWN0b3IsICdVUkwnKTtcbiAgdmFyIGJhc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIHVybFN0cmluZyA9ICR0b1N0cmluZyh1cmwpO1xuICB2YXIgc3RhdGUgPSBzZXRJbnRlcm5hbFN0YXRlKHRoYXQsIHsgdHlwZTogJ1VSTCcgfSk7XG4gIHZhciBiYXNlU3RhdGUsIGZhaWx1cmU7XG4gIGlmIChiYXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoYmFzZSBpbnN0YW5jZW9mIFVSTENvbnN0cnVjdG9yKSBiYXNlU3RhdGUgPSBnZXRJbnRlcm5hbFVSTFN0YXRlKGJhc2UpO1xuICAgIGVsc2Uge1xuICAgICAgZmFpbHVyZSA9IHBhcnNlVVJMKGJhc2VTdGF0ZSA9IHt9LCAkdG9TdHJpbmcoYmFzZSkpO1xuICAgICAgaWYgKGZhaWx1cmUpIHRocm93IFR5cGVFcnJvcihmYWlsdXJlKTtcbiAgICB9XG4gIH1cbiAgZmFpbHVyZSA9IHBhcnNlVVJMKHN0YXRlLCB1cmxTdHJpbmcsIG51bGwsIGJhc2VTdGF0ZSk7XG4gIGlmIChmYWlsdXJlKSB0aHJvdyBUeXBlRXJyb3IoZmFpbHVyZSk7XG4gIHZhciBzZWFyY2hQYXJhbXMgPSBzdGF0ZS5zZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gIHZhciBzZWFyY2hQYXJhbXNTdGF0ZSA9IGdldEludGVybmFsU2VhcmNoUGFyYW1zU3RhdGUoc2VhcmNoUGFyYW1zKTtcbiAgc2VhcmNoUGFyYW1zU3RhdGUudXBkYXRlU2VhcmNoUGFyYW1zKHN0YXRlLnF1ZXJ5KTtcbiAgc2VhcmNoUGFyYW1zU3RhdGUudXBkYXRlVVJMID0gZnVuY3Rpb24gKCkge1xuICAgIHN0YXRlLnF1ZXJ5ID0gU3RyaW5nKHNlYXJjaFBhcmFtcykgfHwgbnVsbDtcbiAgfTtcbiAgaWYgKCFERVNDUklQVE9SUykge1xuICAgIHRoYXQuaHJlZiA9IHNlcmlhbGl6ZVVSTC5jYWxsKHRoYXQpO1xuICAgIHRoYXQub3JpZ2luID0gZ2V0T3JpZ2luLmNhbGwodGhhdCk7XG4gICAgdGhhdC5wcm90b2NvbCA9IGdldFByb3RvY29sLmNhbGwodGhhdCk7XG4gICAgdGhhdC51c2VybmFtZSA9IGdldFVzZXJuYW1lLmNhbGwodGhhdCk7XG4gICAgdGhhdC5wYXNzd29yZCA9IGdldFBhc3N3b3JkLmNhbGwodGhhdCk7XG4gICAgdGhhdC5ob3N0ID0gZ2V0SG9zdC5jYWxsKHRoYXQpO1xuICAgIHRoYXQuaG9zdG5hbWUgPSBnZXRIb3N0bmFtZS5jYWxsKHRoYXQpO1xuICAgIHRoYXQucG9ydCA9IGdldFBvcnQuY2FsbCh0aGF0KTtcbiAgICB0aGF0LnBhdGhuYW1lID0gZ2V0UGF0aG5hbWUuY2FsbCh0aGF0KTtcbiAgICB0aGF0LnNlYXJjaCA9IGdldFNlYXJjaC5jYWxsKHRoYXQpO1xuICAgIHRoYXQuc2VhcmNoUGFyYW1zID0gZ2V0U2VhcmNoUGFyYW1zLmNhbGwodGhhdCk7XG4gICAgdGhhdC5oYXNoID0gZ2V0SGFzaC5jYWxsKHRoYXQpO1xuICB9XG59O1xuXG52YXIgVVJMUHJvdG90eXBlID0gVVJMQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG52YXIgc2VyaWFsaXplVVJMID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdXJsID0gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKTtcbiAgdmFyIHNjaGVtZSA9IHVybC5zY2hlbWU7XG4gIHZhciB1c2VybmFtZSA9IHVybC51c2VybmFtZTtcbiAgdmFyIHBhc3N3b3JkID0gdXJsLnBhc3N3b3JkO1xuICB2YXIgaG9zdCA9IHVybC5ob3N0O1xuICB2YXIgcG9ydCA9IHVybC5wb3J0O1xuICB2YXIgcGF0aCA9IHVybC5wYXRoO1xuICB2YXIgcXVlcnkgPSB1cmwucXVlcnk7XG4gIHZhciBmcmFnbWVudCA9IHVybC5mcmFnbWVudDtcbiAgdmFyIG91dHB1dCA9IHNjaGVtZSArICc6JztcbiAgaWYgKGhvc3QgIT09IG51bGwpIHtcbiAgICBvdXRwdXQgKz0gJy8vJztcbiAgICBpZiAoaW5jbHVkZXNDcmVkZW50aWFscyh1cmwpKSB7XG4gICAgICBvdXRwdXQgKz0gdXNlcm5hbWUgKyAocGFzc3dvcmQgPyAnOicgKyBwYXNzd29yZCA6ICcnKSArICdAJztcbiAgICB9XG4gICAgb3V0cHV0ICs9IHNlcmlhbGl6ZUhvc3QoaG9zdCk7XG4gICAgaWYgKHBvcnQgIT09IG51bGwpIG91dHB1dCArPSAnOicgKyBwb3J0O1xuICB9IGVsc2UgaWYgKHNjaGVtZSA9PSAnZmlsZScpIG91dHB1dCArPSAnLy8nO1xuICBvdXRwdXQgKz0gdXJsLmNhbm5vdEJlQUJhc2VVUkwgPyBwYXRoWzBdIDogcGF0aC5sZW5ndGggPyAnLycgKyBwYXRoLmpvaW4oJy8nKSA6ICcnO1xuICBpZiAocXVlcnkgIT09IG51bGwpIG91dHB1dCArPSAnPycgKyBxdWVyeTtcbiAgaWYgKGZyYWdtZW50ICE9PSBudWxsKSBvdXRwdXQgKz0gJyMnICsgZnJhZ21lbnQ7XG4gIHJldHVybiBvdXRwdXQ7XG59O1xuXG52YXIgZ2V0T3JpZ2luID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdXJsID0gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKTtcbiAgdmFyIHNjaGVtZSA9IHVybC5zY2hlbWU7XG4gIHZhciBwb3J0ID0gdXJsLnBvcnQ7XG4gIGlmIChzY2hlbWUgPT0gJ2Jsb2InKSB0cnkge1xuICAgIHJldHVybiBuZXcgVVJMQ29uc3RydWN0b3Ioc2NoZW1lLnBhdGhbMF0pLm9yaWdpbjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ251bGwnO1xuICB9XG4gIGlmIChzY2hlbWUgPT0gJ2ZpbGUnIHx8ICFpc1NwZWNpYWwodXJsKSkgcmV0dXJuICdudWxsJztcbiAgcmV0dXJuIHNjaGVtZSArICc6Ly8nICsgc2VyaWFsaXplSG9zdCh1cmwuaG9zdCkgKyAocG9ydCAhPT0gbnVsbCA/ICc6JyArIHBvcnQgOiAnJyk7XG59O1xuXG52YXIgZ2V0UHJvdG9jb2wgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpLnNjaGVtZSArICc6Jztcbn07XG5cbnZhciBnZXRVc2VybmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGdldEludGVybmFsVVJMU3RhdGUodGhpcykudXNlcm5hbWU7XG59O1xuXG52YXIgZ2V0UGFzc3dvcmQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpLnBhc3N3b3JkO1xufTtcblxudmFyIGdldEhvc3QgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB1cmwgPSBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpO1xuICB2YXIgaG9zdCA9IHVybC5ob3N0O1xuICB2YXIgcG9ydCA9IHVybC5wb3J0O1xuICByZXR1cm4gaG9zdCA9PT0gbnVsbCA/ICcnXG4gICAgOiBwb3J0ID09PSBudWxsID8gc2VyaWFsaXplSG9zdChob3N0KVxuICAgIDogc2VyaWFsaXplSG9zdChob3N0KSArICc6JyArIHBvcnQ7XG59O1xuXG52YXIgZ2V0SG9zdG5hbWUgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBob3N0ID0gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKS5ob3N0O1xuICByZXR1cm4gaG9zdCA9PT0gbnVsbCA/ICcnIDogc2VyaWFsaXplSG9zdChob3N0KTtcbn07XG5cbnZhciBnZXRQb3J0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgcG9ydCA9IGdldEludGVybmFsVVJMU3RhdGUodGhpcykucG9ydDtcbiAgcmV0dXJuIHBvcnQgPT09IG51bGwgPyAnJyA6IFN0cmluZyhwb3J0KTtcbn07XG5cbnZhciBnZXRQYXRobmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHVybCA9IGdldEludGVybmFsVVJMU3RhdGUodGhpcyk7XG4gIHZhciBwYXRoID0gdXJsLnBhdGg7XG4gIHJldHVybiB1cmwuY2Fubm90QmVBQmFzZVVSTCA/IHBhdGhbMF0gOiBwYXRoLmxlbmd0aCA/ICcvJyArIHBhdGguam9pbignLycpIDogJyc7XG59O1xuXG52YXIgZ2V0U2VhcmNoID0gZnVuY3Rpb24gKCkge1xuICB2YXIgcXVlcnkgPSBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpLnF1ZXJ5O1xuICByZXR1cm4gcXVlcnkgPyAnPycgKyBxdWVyeSA6ICcnO1xufTtcblxudmFyIGdldFNlYXJjaFBhcmFtcyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGdldEludGVybmFsVVJMU3RhdGUodGhpcykuc2VhcmNoUGFyYW1zO1xufTtcblxudmFyIGdldEhhc2ggPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBmcmFnbWVudCA9IGdldEludGVybmFsVVJMU3RhdGUodGhpcykuZnJhZ21lbnQ7XG4gIHJldHVybiBmcmFnbWVudCA/ICcjJyArIGZyYWdtZW50IDogJyc7XG59O1xuXG52YXIgYWNjZXNzb3JEZXNjcmlwdG9yID0gZnVuY3Rpb24gKGdldHRlciwgc2V0dGVyKSB7XG4gIHJldHVybiB7IGdldDogZ2V0dGVyLCBzZXQ6IHNldHRlciwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlIH07XG59O1xuXG5pZiAoREVTQ1JJUFRPUlMpIHtcbiAgZGVmaW5lUHJvcGVydGllcyhVUkxQcm90b3R5cGUsIHtcbiAgICAvLyBgVVJMLnByb3RvdHlwZS5ocmVmYCBhY2Nlc3NvcnMgcGFpclxuICAgIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1ocmVmXG4gICAgaHJlZjogYWNjZXNzb3JEZXNjcmlwdG9yKHNlcmlhbGl6ZVVSTCwgZnVuY3Rpb24gKGhyZWYpIHtcbiAgICAgIHZhciB1cmwgPSBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpO1xuICAgICAgdmFyIHVybFN0cmluZyA9ICR0b1N0cmluZyhocmVmKTtcbiAgICAgIHZhciBmYWlsdXJlID0gcGFyc2VVUkwodXJsLCB1cmxTdHJpbmcpO1xuICAgICAgaWYgKGZhaWx1cmUpIHRocm93IFR5cGVFcnJvcihmYWlsdXJlKTtcbiAgICAgIGdldEludGVybmFsU2VhcmNoUGFyYW1zU3RhdGUodXJsLnNlYXJjaFBhcmFtcykudXBkYXRlU2VhcmNoUGFyYW1zKHVybC5xdWVyeSk7XG4gICAgfSksXG4gICAgLy8gYFVSTC5wcm90b3R5cGUub3JpZ2luYCBnZXR0ZXJcbiAgICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtb3JpZ2luXG4gICAgb3JpZ2luOiBhY2Nlc3NvckRlc2NyaXB0b3IoZ2V0T3JpZ2luKSxcbiAgICAvLyBgVVJMLnByb3RvdHlwZS5wcm90b2NvbGAgYWNjZXNzb3JzIHBhaXJcbiAgICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtcHJvdG9jb2xcbiAgICBwcm90b2NvbDogYWNjZXNzb3JEZXNjcmlwdG9yKGdldFByb3RvY29sLCBmdW5jdGlvbiAocHJvdG9jb2wpIHtcbiAgICAgIHZhciB1cmwgPSBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpO1xuICAgICAgcGFyc2VVUkwodXJsLCAkdG9TdHJpbmcocHJvdG9jb2wpICsgJzonLCBTQ0hFTUVfU1RBUlQpO1xuICAgIH0pLFxuICAgIC8vIGBVUkwucHJvdG90eXBlLnVzZXJuYW1lYCBhY2Nlc3NvcnMgcGFpclxuICAgIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC11c2VybmFtZVxuICAgIHVzZXJuYW1lOiBhY2Nlc3NvckRlc2NyaXB0b3IoZ2V0VXNlcm5hbWUsIGZ1bmN0aW9uICh1c2VybmFtZSkge1xuICAgICAgdmFyIHVybCA9IGdldEludGVybmFsVVJMU3RhdGUodGhpcyk7XG4gICAgICB2YXIgY29kZVBvaW50cyA9IGFycmF5RnJvbSgkdG9TdHJpbmcodXNlcm5hbWUpKTtcbiAgICAgIGlmIChjYW5ub3RIYXZlVXNlcm5hbWVQYXNzd29yZFBvcnQodXJsKSkgcmV0dXJuO1xuICAgICAgdXJsLnVzZXJuYW1lID0gJyc7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvZGVQb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdXJsLnVzZXJuYW1lICs9IHBlcmNlbnRFbmNvZGUoY29kZVBvaW50c1tpXSwgdXNlcmluZm9QZXJjZW50RW5jb2RlU2V0KTtcbiAgICAgIH1cbiAgICB9KSxcbiAgICAvLyBgVVJMLnByb3RvdHlwZS5wYXNzd29yZGAgYWNjZXNzb3JzIHBhaXJcbiAgICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtcGFzc3dvcmRcbiAgICBwYXNzd29yZDogYWNjZXNzb3JEZXNjcmlwdG9yKGdldFBhc3N3b3JkLCBmdW5jdGlvbiAocGFzc3dvcmQpIHtcbiAgICAgIHZhciB1cmwgPSBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpO1xuICAgICAgdmFyIGNvZGVQb2ludHMgPSBhcnJheUZyb20oJHRvU3RyaW5nKHBhc3N3b3JkKSk7XG4gICAgICBpZiAoY2Fubm90SGF2ZVVzZXJuYW1lUGFzc3dvcmRQb3J0KHVybCkpIHJldHVybjtcbiAgICAgIHVybC5wYXNzd29yZCA9ICcnO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2RlUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHVybC5wYXNzd29yZCArPSBwZXJjZW50RW5jb2RlKGNvZGVQb2ludHNbaV0sIHVzZXJpbmZvUGVyY2VudEVuY29kZVNldCk7XG4gICAgICB9XG4gICAgfSksXG4gICAgLy8gYFVSTC5wcm90b3R5cGUuaG9zdGAgYWNjZXNzb3JzIHBhaXJcbiAgICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtaG9zdFxuICAgIGhvc3Q6IGFjY2Vzc29yRGVzY3JpcHRvcihnZXRIb3N0LCBmdW5jdGlvbiAoaG9zdCkge1xuICAgICAgdmFyIHVybCA9IGdldEludGVybmFsVVJMU3RhdGUodGhpcyk7XG4gICAgICBpZiAodXJsLmNhbm5vdEJlQUJhc2VVUkwpIHJldHVybjtcbiAgICAgIHBhcnNlVVJMKHVybCwgJHRvU3RyaW5nKGhvc3QpLCBIT1NUKTtcbiAgICB9KSxcbiAgICAvLyBgVVJMLnByb3RvdHlwZS5ob3N0bmFtZWAgYWNjZXNzb3JzIHBhaXJcbiAgICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtaG9zdG5hbWVcbiAgICBob3N0bmFtZTogYWNjZXNzb3JEZXNjcmlwdG9yKGdldEhvc3RuYW1lLCBmdW5jdGlvbiAoaG9zdG5hbWUpIHtcbiAgICAgIHZhciB1cmwgPSBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpO1xuICAgICAgaWYgKHVybC5jYW5ub3RCZUFCYXNlVVJMKSByZXR1cm47XG4gICAgICBwYXJzZVVSTCh1cmwsICR0b1N0cmluZyhob3N0bmFtZSksIEhPU1ROQU1FKTtcbiAgICB9KSxcbiAgICAvLyBgVVJMLnByb3RvdHlwZS5wb3J0YCBhY2Nlc3NvcnMgcGFpclxuICAgIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1wb3J0XG4gICAgcG9ydDogYWNjZXNzb3JEZXNjcmlwdG9yKGdldFBvcnQsIGZ1bmN0aW9uIChwb3J0KSB7XG4gICAgICB2YXIgdXJsID0gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKTtcbiAgICAgIGlmIChjYW5ub3RIYXZlVXNlcm5hbWVQYXNzd29yZFBvcnQodXJsKSkgcmV0dXJuO1xuICAgICAgcG9ydCA9ICR0b1N0cmluZyhwb3J0KTtcbiAgICAgIGlmIChwb3J0ID09ICcnKSB1cmwucG9ydCA9IG51bGw7XG4gICAgICBlbHNlIHBhcnNlVVJMKHVybCwgcG9ydCwgUE9SVCk7XG4gICAgfSksXG4gICAgLy8gYFVSTC5wcm90b3R5cGUucGF0aG5hbWVgIGFjY2Vzc29ycyBwYWlyXG4gICAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXBhdGhuYW1lXG4gICAgcGF0aG5hbWU6IGFjY2Vzc29yRGVzY3JpcHRvcihnZXRQYXRobmFtZSwgZnVuY3Rpb24gKHBhdGhuYW1lKSB7XG4gICAgICB2YXIgdXJsID0gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKTtcbiAgICAgIGlmICh1cmwuY2Fubm90QmVBQmFzZVVSTCkgcmV0dXJuO1xuICAgICAgdXJsLnBhdGggPSBbXTtcbiAgICAgIHBhcnNlVVJMKHVybCwgJHRvU3RyaW5nKHBhdGhuYW1lKSwgUEFUSF9TVEFSVCk7XG4gICAgfSksXG4gICAgLy8gYFVSTC5wcm90b3R5cGUuc2VhcmNoYCBhY2Nlc3NvcnMgcGFpclxuICAgIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1zZWFyY2hcbiAgICBzZWFyY2g6IGFjY2Vzc29yRGVzY3JpcHRvcihnZXRTZWFyY2gsIGZ1bmN0aW9uIChzZWFyY2gpIHtcbiAgICAgIHZhciB1cmwgPSBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpO1xuICAgICAgc2VhcmNoID0gJHRvU3RyaW5nKHNlYXJjaCk7XG4gICAgICBpZiAoc2VhcmNoID09ICcnKSB7XG4gICAgICAgIHVybC5xdWVyeSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoJz8nID09IHNlYXJjaC5jaGFyQXQoMCkpIHNlYXJjaCA9IHNlYXJjaC5zbGljZSgxKTtcbiAgICAgICAgdXJsLnF1ZXJ5ID0gJyc7XG4gICAgICAgIHBhcnNlVVJMKHVybCwgc2VhcmNoLCBRVUVSWSk7XG4gICAgICB9XG4gICAgICBnZXRJbnRlcm5hbFNlYXJjaFBhcmFtc1N0YXRlKHVybC5zZWFyY2hQYXJhbXMpLnVwZGF0ZVNlYXJjaFBhcmFtcyh1cmwucXVlcnkpO1xuICAgIH0pLFxuICAgIC8vIGBVUkwucHJvdG90eXBlLnNlYXJjaFBhcmFtc2AgZ2V0dGVyXG4gICAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXNlYXJjaHBhcmFtc1xuICAgIHNlYXJjaFBhcmFtczogYWNjZXNzb3JEZXNjcmlwdG9yKGdldFNlYXJjaFBhcmFtcyksXG4gICAgLy8gYFVSTC5wcm90b3R5cGUuaGFzaGAgYWNjZXNzb3JzIHBhaXJcbiAgICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtaGFzaFxuICAgIGhhc2g6IGFjY2Vzc29yRGVzY3JpcHRvcihnZXRIYXNoLCBmdW5jdGlvbiAoaGFzaCkge1xuICAgICAgdmFyIHVybCA9IGdldEludGVybmFsVVJMU3RhdGUodGhpcyk7XG4gICAgICBoYXNoID0gJHRvU3RyaW5nKGhhc2gpO1xuICAgICAgaWYgKGhhc2ggPT0gJycpIHtcbiAgICAgICAgdXJsLmZyYWdtZW50ID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCcjJyA9PSBoYXNoLmNoYXJBdCgwKSkgaGFzaCA9IGhhc2guc2xpY2UoMSk7XG4gICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgIHBhcnNlVVJMKHVybCwgaGFzaCwgRlJBR01FTlQpO1xuICAgIH0pXG4gIH0pO1xufVxuXG4vLyBgVVJMLnByb3RvdHlwZS50b0pTT05gIG1ldGhvZFxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXRvanNvblxucmVkZWZpbmUoVVJMUHJvdG90eXBlLCAndG9KU09OJywgZnVuY3Rpb24gdG9KU09OKCkge1xuICByZXR1cm4gc2VyaWFsaXplVVJMLmNhbGwodGhpcyk7XG59LCB7IGVudW1lcmFibGU6IHRydWUgfSk7XG5cbi8vIGBVUkwucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jVVJMLXN0cmluZ2lmaWNhdGlvbi1iZWhhdmlvclxucmVkZWZpbmUoVVJMUHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHNlcmlhbGl6ZVVSTC5jYWxsKHRoaXMpO1xufSwgeyBlbnVtZXJhYmxlOiB0cnVlIH0pO1xuXG5pZiAoTmF0aXZlVVJMKSB7XG4gIHZhciBuYXRpdmVDcmVhdGVPYmplY3RVUkwgPSBOYXRpdmVVUkwuY3JlYXRlT2JqZWN0VVJMO1xuICB2YXIgbmF0aXZlUmV2b2tlT2JqZWN0VVJMID0gTmF0aXZlVVJMLnJldm9rZU9iamVjdFVSTDtcbiAgLy8gYFVSTC5jcmVhdGVPYmplY3RVUkxgIG1ldGhvZFxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVVJML2NyZWF0ZU9iamVjdFVSTFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBpZiAobmF0aXZlQ3JlYXRlT2JqZWN0VVJMKSByZWRlZmluZShVUkxDb25zdHJ1Y3RvciwgJ2NyZWF0ZU9iamVjdFVSTCcsIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdFVSTChibG9iKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUNyZWF0ZU9iamVjdFVSTC5hcHBseShOYXRpdmVVUkwsIGFyZ3VtZW50cyk7XG4gIH0pO1xuICAvLyBgVVJMLnJldm9rZU9iamVjdFVSTGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9VUkwvcmV2b2tlT2JqZWN0VVJMXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIGlmIChuYXRpdmVSZXZva2VPYmplY3RVUkwpIHJlZGVmaW5lKFVSTENvbnN0cnVjdG9yLCAncmV2b2tlT2JqZWN0VVJMJywgZnVuY3Rpb24gcmV2b2tlT2JqZWN0VVJMKHVybCkge1xuICAgIHJldHVybiBuYXRpdmVSZXZva2VPYmplY3RVUkwuYXBwbHkoTmF0aXZlVVJMLCBhcmd1bWVudHMpO1xuICB9KTtcbn1cblxuc2V0VG9TdHJpbmdUYWcoVVJMQ29uc3RydWN0b3IsICdVUkwnKTtcblxuJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiAhVVNFX05BVElWRV9VUkwsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIFVSTDogVVJMQ29uc3RydWN0b3Jcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG5cbi8vIGBVUkwucHJvdG90eXBlLnRvSlNPTmAgbWV0aG9kXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtdG9qc29uXG4kKHsgdGFyZ2V0OiAnVVJMJywgcHJvdG86IHRydWUsIGVudW1lcmFibGU6IHRydWUgfSwge1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4gVVJMLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMpO1xuICB9XG59KTtcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTMuMVxuICogcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cblxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBoYXNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIDogMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucG9ydGFsJykgOiAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50JykgOiAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN0cmljdF9tb2RlJykgOiAweGVhY2M7XG52YXIgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb2ZpbGVyJykgOiAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJykgOiAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29udGV4dCcpIDogMHhlYWNlOyAvLyBUT0RPOiBXZSBkb24ndCB1c2UgQXN5bmNNb2RlIG9yIENvbmN1cnJlbnRNb2RlIGFueW1vcmUuIFRoZXkgd2VyZSB0ZW1wb3Jhcnlcbi8vICh1bnN0YWJsZSkgQVBJcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkLiBDYW4gd2UgcmVtb3ZlIHRoZSBzeW1ib2xzP1xuXG52YXIgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYXN5bmNfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuY29uY3VycmVudF9tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJykgOiAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlJykgOiAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpIDogMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKSA6IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5JykgOiAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmJsb2NrJykgOiAweGVhZDk7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJykgOiAweGVhZDU7XG52YXIgUkVBQ1RfUkVTUE9OREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5yZXNwb25kZXInKSA6IDB4ZWFkNjtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc2NvcGUnKSA6IDB4ZWFkNztcblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCAvLyBOb3RlOiBpdHMgdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgaWYgaXQncyBhIHBvbHlmaWxsLlxuICB0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9QUk9WSURFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUkVTUE9OREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfU0NPUEVfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFKTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKG9iamVjdCkge1xuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyICQkdHlwZW9mID0gb2JqZWN0LiQkdHlwZW9mO1xuXG4gICAgc3dpdGNoICgkJHR5cGVvZikge1xuICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgIHZhciB0eXBlID0gb2JqZWN0LnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB2YXIgJCR0eXBlb2ZUeXBlID0gdHlwZSAmJiB0eXBlLiQkdHlwZW9mO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKCQkdHlwZW9mVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2ZUeXBlO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgcmV0dXJuICQkdHlwZW9mO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59IC8vIEFzeW5jTW9kZSBpcyBkZXByZWNhdGVkIGFsb25nIHdpdGggaXNBc3luY01vZGVcblxudmFyIEFzeW5jTW9kZSA9IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbnZhciBDb25jdXJyZW50TW9kZSA9IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xudmFyIENvbnRleHRDb25zdW1lciA9IFJFQUNUX0NPTlRFWFRfVFlQRTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSBSRUFDVF9QUk9WSURFUl9UWVBFO1xudmFyIEVsZW1lbnQgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG52YXIgRm9yd2FyZFJlZiA9IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG52YXIgRnJhZ21lbnQgPSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xudmFyIExhenkgPSBSRUFDVF9MQVpZX1RZUEU7XG52YXIgTWVtbyA9IFJFQUNUX01FTU9fVFlQRTtcbnZhciBQb3J0YWwgPSBSRUFDVF9QT1JUQUxfVFlQRTtcbnZhciBQcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG52YXIgU3RyaWN0TW9kZSA9IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG52YXIgU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xudmFyIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gZmFsc2U7IC8vIEFzeW5jTW9kZSBzaG91bGQgYmUgZGVwcmVjYXRlZFxuXG5mdW5jdGlvbiBpc0FzeW5jTW9kZShvYmplY3QpIHtcbiAge1xuICAgIGlmICghaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUpIHtcbiAgICAgIGhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlID0gdHJ1ZTsgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcblxuICAgICAgY29uc29sZVsnd2FybiddKCdUaGUgUmVhY3RJcy5pc0FzeW5jTW9kZSgpIGFsaWFzIGhhcyBiZWVuIGRlcHJlY2F0ZWQsICcgKyAnYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCAxNysuIFVwZGF0ZSB5b3VyIGNvZGUgdG8gdXNlICcgKyAnUmVhY3RJcy5pc0NvbmN1cnJlbnRNb2RlKCkgaW5zdGVhZC4gSXQgaGFzIHRoZSBleGFjdCBzYW1lIEFQSS4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHx8IHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0Q29uc3VtZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb250ZXh0UHJvdmlkZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRm9yd2FyZFJlZihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xufVxuZnVuY3Rpb24gaXNGcmFnbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNMYXp5KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0xBWllfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTWVtbyhvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9NRU1PX1RZUEU7XG59XG5mdW5jdGlvbiBpc1BvcnRhbChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QT1JUQUxfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUHJvZmlsZXIob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3RyaWN0TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xufVxuXG5leHBvcnRzLkFzeW5jTW9kZSA9IEFzeW5jTW9kZTtcbmV4cG9ydHMuQ29uY3VycmVudE1vZGUgPSBDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuQ29udGV4dENvbnN1bWVyID0gQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5Db250ZXh0UHJvdmlkZXIgPSBDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLkVsZW1lbnQgPSBFbGVtZW50O1xuZXhwb3J0cy5Gb3J3YXJkUmVmID0gRm9yd2FyZFJlZjtcbmV4cG9ydHMuRnJhZ21lbnQgPSBGcmFnbWVudDtcbmV4cG9ydHMuTGF6eSA9IExhenk7XG5leHBvcnRzLk1lbW8gPSBNZW1vO1xuZXhwb3J0cy5Qb3J0YWwgPSBQb3J0YWw7XG5leHBvcnRzLlByb2ZpbGVyID0gUHJvZmlsZXI7XG5leHBvcnRzLlN0cmljdE1vZGUgPSBTdHJpY3RNb2RlO1xuZXhwb3J0cy5TdXNwZW5zZSA9IFN1c3BlbnNlO1xuZXhwb3J0cy5pc0FzeW5jTW9kZSA9IGlzQXN5bmNNb2RlO1xuZXhwb3J0cy5pc0NvbmN1cnJlbnRNb2RlID0gaXNDb25jdXJyZW50TW9kZTtcbmV4cG9ydHMuaXNDb250ZXh0Q29uc3VtZXIgPSBpc0NvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuaXNDb250ZXh0UHJvdmlkZXIgPSBpc0NvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuaXNFbGVtZW50ID0gaXNFbGVtZW50O1xuZXhwb3J0cy5pc0ZvcndhcmRSZWYgPSBpc0ZvcndhcmRSZWY7XG5leHBvcnRzLmlzRnJhZ21lbnQgPSBpc0ZyYWdtZW50O1xuZXhwb3J0cy5pc0xhenkgPSBpc0xhenk7XG5leHBvcnRzLmlzTWVtbyA9IGlzTWVtbztcbmV4cG9ydHMuaXNQb3J0YWwgPSBpc1BvcnRhbDtcbmV4cG9ydHMuaXNQcm9maWxlciA9IGlzUHJvZmlsZXI7XG5leHBvcnRzLmlzU3RyaWN0TW9kZSA9IGlzU3RyaWN0TW9kZTtcbmV4cG9ydHMuaXNTdXNwZW5zZSA9IGlzU3VzcGVuc2U7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50VHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZTtcbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuICB9KSgpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG4gIHZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcblxuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcbn1cblxuLyoqXG4gKiBBc3NlcnQgdGhhdCB0aGUgdmFsdWVzIG1hdGNoIHdpdGggdGhlIHR5cGUgc3BlY3MuXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdHlwZVNwZWNzIE1hcCBvZiBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiBcInByb3BcIiwgXCJjb250ZXh0XCIsIFwiY2hpbGQgY29udGV4dFwiXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICogQHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoXG4gICAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArXG4gICAgICAgICAgICAgICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJyArXG4gICAgICAgICAgICBsb2NhdGlvbiArICcgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICcgKyB0eXBlb2YgZXJyb3IgKyAnLiAnICtcbiAgICAgICAgICAgICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgK1xuICAgICAgICAgICAgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcblxuICAgICAgICAgIHZhciBzdGFjayA9IGdldFN0YWNrID8gZ2V0U3RhY2soKSA6ICcnO1xuXG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ZhaWxlZCAnICsgbG9jYXRpb24gKyAnIHR5cGU6ICcgKyBlcnJvci5tZXNzYWdlICsgKHN0YWNrICE9IG51bGwgPyBzdGFjayA6ICcnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNldHMgd2FybmluZyBjYWNoZSB3aGVuIHRlc3RpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNoZWNrUHJvcFR5cGVzO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG52YXIgY2hlY2tQcm9wVHlwZXMgPSByZXF1aXJlKCcuL2NoZWNrUHJvcFR5cGVzJyk7XG5cbnZhciBoYXMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHt9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwoKSB7XG4gIHJldHVybiBudWxsO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gIC8qIGdsb2JhbCBTeW1ib2wgKi9cbiAgdmFyIElURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xuICB2YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7IC8vIEJlZm9yZSBTeW1ib2wgc3BlYy5cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgaXRlcmF0b3IgbWV0aG9kIGZ1bmN0aW9uIGNvbnRhaW5lZCBvbiB0aGUgaXRlcmFibGUgb2JqZWN0LlxuICAgKlxuICAgKiBCZSBzdXJlIHRvIGludm9rZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgaXRlcmFibGUgYXMgY29udGV4dDpcbiAgICpcbiAgICogICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihteUl0ZXJhYmxlKTtcbiAgICogICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAqICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChteUl0ZXJhYmxlKTtcbiAgICogICAgICAgLi4uXG4gICAqICAgICB9XG4gICAqXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbWF5YmVJdGVyYWJsZVxuICAgKiBAcmV0dXJuIHs/ZnVuY3Rpb259XG4gICAqL1xuICBmdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IG1heWJlSXRlcmFibGUgJiYgKElURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF0pO1xuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yRm47XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbGxlY3Rpb24gb2YgbWV0aG9kcyB0aGF0IGFsbG93IGRlY2xhcmF0aW9uIGFuZCB2YWxpZGF0aW9uIG9mIHByb3BzIHRoYXQgYXJlXG4gICAqIHN1cHBsaWVkIHRvIFJlYWN0IGNvbXBvbmVudHMuIEV4YW1wbGUgdXNhZ2U6XG4gICAqXG4gICAqICAgdmFyIFByb3BzID0gcmVxdWlyZSgnUmVhY3RQcm9wVHlwZXMnKTtcbiAgICogICB2YXIgTXlBcnRpY2xlID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICAgcHJvcFR5cGVzOiB7XG4gICAqICAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBwcm9wIG5hbWVkIFwiZGVzY3JpcHRpb25cIi5cbiAgICogICAgICAgZGVzY3JpcHRpb246IFByb3BzLnN0cmluZyxcbiAgICpcbiAgICogICAgICAgLy8gQSByZXF1aXJlZCBlbnVtIHByb3AgbmFtZWQgXCJjYXRlZ29yeVwiLlxuICAgKiAgICAgICBjYXRlZ29yeTogUHJvcHMub25lT2YoWydOZXdzJywnUGhvdG9zJ10pLmlzUmVxdWlyZWQsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcHJvcCBuYW1lZCBcImRpYWxvZ1wiIHRoYXQgcmVxdWlyZXMgYW4gaW5zdGFuY2Ugb2YgRGlhbG9nLlxuICAgKiAgICAgICBkaWFsb2c6IFByb3BzLmluc3RhbmNlT2YoRGlhbG9nKS5pc1JlcXVpcmVkXG4gICAqICAgICB9LFxuICAgKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHsgLi4uIH1cbiAgICogICB9KTtcbiAgICpcbiAgICogQSBtb3JlIGZvcm1hbCBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGVzZSBtZXRob2RzIGFyZSB1c2VkOlxuICAgKlxuICAgKiAgIHR5cGUgOj0gYXJyYXl8Ym9vbHxmdW5jfG9iamVjdHxudW1iZXJ8c3RyaW5nfG9uZU9mKFsuLi5dKXxpbnN0YW5jZU9mKC4uLilcbiAgICogICBkZWNsIDo9IFJlYWN0UHJvcFR5cGVzLnt0eXBlfSguaXNSZXF1aXJlZCk/XG4gICAqXG4gICAqIEVhY2ggYW5kIGV2ZXJ5IGRlY2xhcmF0aW9uIHByb2R1Y2VzIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUuIFRoaXNcbiAgICogYWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbnMuIEZvciBleGFtcGxlOlxuICAgKlxuICAgKiAgdmFyIE15TGluayA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgcHJvcFR5cGVzOiB7XG4gICAqICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIG9yIFVSSSBwcm9wIG5hbWVkIFwiaHJlZlwiLlxuICAgKiAgICAgIGhyZWY6IGZ1bmN0aW9uKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgKiAgICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICogICAgICAgIGlmIChwcm9wVmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgcHJvcFZhbHVlICE9PSAnc3RyaW5nJyAmJlxuICAgKiAgICAgICAgICAgICEocHJvcFZhbHVlIGluc3RhbmNlb2YgVVJJKSkge1xuICAgKiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKFxuICAgKiAgICAgICAgICAgICdFeHBlY3RlZCBhIHN0cmluZyBvciBhbiBVUkkgZm9yICcgKyBwcm9wTmFtZSArICcgaW4gJyArXG4gICAqICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgKiAgICAgICAgICApO1xuICAgKiAgICAgICAgfVxuICAgKiAgICAgIH1cbiAgICogICAgfSxcbiAgICogICAgcmVuZGVyOiBmdW5jdGlvbigpIHsuLi59XG4gICAqICB9KTtcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuXG4gIHZhciBBTk9OWU1PVVMgPSAnPDxhbm9ueW1vdXM+Pic7XG5cbiAgLy8gSW1wb3J0YW50IVxuICAvLyBLZWVwIHRoaXMgbGlzdCBpbiBzeW5jIHdpdGggcHJvZHVjdGlvbiB2ZXJzaW9uIGluIGAuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qc2AuXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcbiAgICBhcnJheTogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2FycmF5JyksXG4gICAgYm9vbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Jvb2xlYW4nKSxcbiAgICBmdW5jOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignZnVuY3Rpb24nKSxcbiAgICBudW1iZXI6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdudW1iZXInKSxcbiAgICBvYmplY3Q6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdvYmplY3QnKSxcbiAgICBzdHJpbmc6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzdHJpbmcnKSxcbiAgICBzeW1ib2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzeW1ib2wnKSxcblxuICAgIGFueTogY3JlYXRlQW55VHlwZUNoZWNrZXIoKSxcbiAgICBhcnJheU9mOiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIsXG4gICAgZWxlbWVudDogY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCksXG4gICAgZWxlbWVudFR5cGU6IGNyZWF0ZUVsZW1lbnRUeXBlVHlwZUNoZWNrZXIoKSxcbiAgICBpbnN0YW5jZU9mOiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyLFxuICAgIG5vZGU6IGNyZWF0ZU5vZGVDaGVja2VyKCksXG4gICAgb2JqZWN0T2Y6IGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIsXG4gICAgb25lT2Y6IGNyZWF0ZUVudW1UeXBlQ2hlY2tlcixcbiAgICBvbmVPZlR5cGU6IGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIsXG4gICAgc2hhcGU6IGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIsXG4gICAgZXhhY3Q6IGNyZWF0ZVN0cmljdFNoYXBlVHlwZUNoZWNrZXIsXG4gIH07XG5cbiAgLyoqXG4gICAqIGlubGluZWQgT2JqZWN0LmlzIHBvbHlmaWxsIHRvIGF2b2lkIHJlcXVpcmluZyBjb25zdW1lcnMgc2hpcCB0aGVpciBvd25cbiAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXG4gICAqL1xuICAvKmVzbGludC1kaXNhYmxlIG5vLXNlbGYtY29tcGFyZSovXG4gIGZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgICAvLyBTYW1lVmFsdWUgYWxnb3JpdGhtXG4gICAgaWYgKHggPT09IHkpIHtcbiAgICAgIC8vIFN0ZXBzIDEtNSwgNy0xMFxuICAgICAgLy8gU3RlcHMgNi5iLTYuZTogKzAgIT0gLTBcbiAgICAgIHJldHVybiB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3RlcCA2LmE6IE5hTiA9PSBOYU5cbiAgICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XG4gICAgfVxuICB9XG4gIC8qZXNsaW50LWVuYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuXG4gIC8qKlxuICAgKiBXZSB1c2UgYW4gRXJyb3ItbGlrZSBvYmplY3QgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYXMgcGVvcGxlIG1heSBjYWxsXG4gICAqIFByb3BUeXBlcyBkaXJlY3RseSBhbmQgaW5zcGVjdCB0aGVpciBvdXRwdXQuIEhvd2V2ZXIsIHdlIGRvbid0IHVzZSByZWFsXG4gICAqIEVycm9ycyBhbnltb3JlLiBXZSBkb24ndCBpbnNwZWN0IHRoZWlyIHN0YWNrIGFueXdheSwgYW5kIGNyZWF0aW5nIHRoZW1cbiAgICogaXMgcHJvaGliaXRpdmVseSBleHBlbnNpdmUgaWYgdGhleSBhcmUgY3JlYXRlZCB0b28gb2Z0ZW4sIHN1Y2ggYXMgd2hhdFxuICAgKiBoYXBwZW5zIGluIG9uZU9mVHlwZSgpIGZvciBhbnkgdHlwZSBiZWZvcmUgdGhlIG9uZSB0aGF0IG1hdGNoZWQuXG4gICAqL1xuICBmdW5jdGlvbiBQcm9wVHlwZUVycm9yKG1lc3NhZ2UpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgfVxuICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3JrIGZvciByZXR1cm5lZCBlcnJvcnMuXG4gIFByb3BUeXBlRXJyb3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZSA9IHt9O1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50ID0gMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tUeXBlKGlzUmVxdWlyZWQsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICBwcm9wRnVsbE5hbWUgPSBwcm9wRnVsbE5hbWUgfHwgcHJvcE5hbWU7XG5cbiAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAgIGlmICh0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gICAgICAgICAgLy8gTmV3IGJlaGF2aW9yIG9ubHkgZm9yIHVzZXJzIG9mIGBwcm9wLXR5cGVzYCBwYWNrYWdlXG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICdVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAvLyBPbGQgYmVoYXZpb3IgZm9yIHBlb3BsZSB1c2luZyBSZWFjdC5Qcm9wVHlwZXNcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIW1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSAmJlxuICAgICAgICAgICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICAgJ1lvdSBhcmUgbWFudWFsbHkgY2FsbGluZyBhIFJlYWN0LlByb3BUeXBlcyB2YWxpZGF0aW9uICcgK1xuICAgICAgICAgICAgICAnZnVuY3Rpb24gZm9yIHRoZSBgJyArIHByb3BGdWxsTmFtZSArICdgIHByb3Agb24gYCcgKyBjb21wb25lbnROYW1lICArICdgLiBUaGlzIGlzIGRlcHJlY2F0ZWQgJyArXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAgICdZb3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5pbmcgZHVlIHRvIGEgdGhpcmQtcGFydHkgUHJvcFR5cGVzICcgK1xuICAgICAgICAgICAgICAnbGlicmFyeS4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVzICcgKyAnZm9yIGRldGFpbHMuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSA9IHRydWU7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGB1bmRlZmluZWRgLicpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGFpbmVkQ2hlY2tUeXBlID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgZmFsc2UpO1xuICAgIGNoYWluZWRDaGVja1R5cGUuaXNSZXF1aXJlZCA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIHRydWUpO1xuXG4gICAgcmV0dXJuIGNoYWluZWRDaGVja1R5cGU7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcihleHBlY3RlZFR5cGUpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09IGV4cGVjdGVkVHlwZSkge1xuICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcbiAgICAgICAgLy8gY2hlY2ssIGJ1dCB3ZSBjYW4gb2ZmZXIgYSBtb3JlIHByZWNpc2UgZXJyb3IgbWVzc2FnZSBoZXJlIHJhdGhlciB0aGFuXG4gICAgICAgIC8vICdvZiB0eXBlIGBvYmplY3RgJy5cbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcmVjaXNlVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnYCcgKyBleHBlY3RlZFR5cGUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcihlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghUmVhY3RJcy5pc1ZhbGlkRWxlbWVudFR5cGUocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQgdHlwZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBhY3R1YWxDbGFzc05hbWUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2luc3RhbmNlIG9mIGAnICsgZXhwZWN0ZWRDbGFzc05hbWUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVudW1UeXBlQ2hlY2tlcihleHBlY3RlZFZhbHVlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50cyBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXksIGdvdCAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgYXJndW1lbnRzLiAnICtcbiAgICAgICAgICAgICdBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHdyaXRlIG9uZU9mKHgsIHksIHopIGluc3RlYWQgb2Ygb25lT2YoW3gsIHksIHpdKS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGFycmF5LicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShleHBlY3RlZFZhbHVlcywgZnVuY3Rpb24gcmVwbGFjZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHZhbHVlIGAnICsgU3RyaW5nKHByb3BWYWx1ZSkgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgb25lIG9mICcgKyB2YWx1ZXNTdHJpbmcgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wVmFsdWUpIHtcbiAgICAgICAgaWYgKGhhcyhwcm9wVmFsdWUsIGtleSkpIHtcbiAgICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9mVHlwZUNoZWNrZXJzKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUsIGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwO1xuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZS4gRXhwZWN0ZWQgYW4gYXJyYXkgb2YgY2hlY2sgZnVuY3Rpb25zLCBidXQgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkICcgKyBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcoY2hlY2tlcikgKyAnIGF0IGluZGV4ICcgKyBpICsgJy4nXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgICAgaWYgKGNoZWNrZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBSZWFjdFByb3BUeXBlc1NlY3JldCkgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIWlzTm9kZShwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVN0cmljdFNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSBgJyArIHByb3BUeXBlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGBvYmplY3RgLicpKTtcbiAgICAgIH1cbiAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgYWxsIGtleXMgaW4gY2FzZSBzb21lIGFyZSByZXF1aXJlZCBidXQgbWlzc2luZyBmcm9tXG4gICAgICAvLyBwcm9wcy5cbiAgICAgIHZhciBhbGxLZXlzID0gYXNzaWduKHt9LCBwcm9wc1twcm9wTmFtZV0sIHNoYXBlVHlwZXMpO1xuICAgICAgZm9yICh2YXIga2V5IGluIGFsbEtleXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgICAgICAgICdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBrZXkgYCcgKyBrZXkgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nICtcbiAgICAgICAgICAgICdcXG5CYWQgb2JqZWN0OiAnICsgSlNPTi5zdHJpbmdpZnkocHJvcHNbcHJvcE5hbWVdLCBudWxsLCAnICAnKSArXG4gICAgICAgICAgICAnXFxuVmFsaWQga2V5czogJyArICBKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhzaGFwZVR5cGVzKSwgbnVsbCwgJyAgJylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNOb2RlKHByb3BWYWx1ZSkge1xuICAgIHN3aXRjaCAodHlwZW9mIHByb3BWYWx1ZSkge1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICByZXR1cm4gIXByb3BWYWx1ZTtcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gcHJvcFZhbHVlLmV2ZXJ5KGlzTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BWYWx1ZSA9PT0gbnVsbCB8fCBpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4ocHJvcFZhbHVlKTtcbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwocHJvcFZhbHVlKTtcbiAgICAgICAgICB2YXIgc3RlcDtcbiAgICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gcHJvcFZhbHVlLmVudHJpZXMpIHtcbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgaWYgKCFpc05vZGUoc3RlcC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5IFtrLHZdIHR1cGxlcyByYXRoZXIgdGhhbiB2YWx1ZXMuXG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIHZhciBlbnRyeSA9IHN0ZXAudmFsdWU7XG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICAgIGlmICghaXNOb2RlKGVudHJ5WzFdKSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSB7XG4gICAgLy8gTmF0aXZlIFN5bWJvbC5cbiAgICBpZiAocHJvcFR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBmYWxzeSB2YWx1ZSBjYW4ndCBiZSBhIFN5bWJvbFxuICAgIGlmICghcHJvcFZhbHVlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXSA9PT0gJ1N5bWJvbCdcbiAgICBpZiAocHJvcFZhbHVlWydAQHRvU3RyaW5nVGFnJ10gPT09ICdTeW1ib2wnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayBmb3Igbm9uLXNwZWMgY29tcGxpYW50IFN5bWJvbHMgd2hpY2ggYXJlIHBvbHlmaWxsZWQuXG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgcHJvcFZhbHVlIGluc3RhbmNlb2YgU3ltYm9sKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBFcXVpdmFsZW50IG9mIGB0eXBlb2ZgIGJ1dCB3aXRoIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGFycmF5IGFuZCByZWdleHAuXG4gIGZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkge1xuICAgIHZhciBwcm9wVHlwZSA9IHR5cGVvZiBwcm9wVmFsdWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgfVxuICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIC8vIE9sZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lkIDQuMCkgcmV0dXJuICdmdW5jdGlvbicgcmF0aGVyIHRoYW5cbiAgICAgIC8vICdvYmplY3QnIGZvciB0eXBlb2YgYSBSZWdFeHAuIFdlJ2xsIG5vcm1hbGl6ZSB0aGlzIGhlcmUgc28gdGhhdCAvYmxhL1xuICAgICAgLy8gcGFzc2VzIFByb3BUeXBlcy5vYmplY3QuXG4gICAgICByZXR1cm4gJ29iamVjdCc7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdzeW1ib2wnO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBUaGlzIGhhbmRsZXMgbW9yZSB0eXBlcyB0aGFuIGBnZXRQcm9wVHlwZWAuIE9ubHkgdXNlZCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gIC8vIFNlZSBgY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXJgLlxuICBmdW5jdGlvbiBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvcFZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJycgKyBwcm9wVmFsdWU7XG4gICAgfVxuICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuICdkYXRlJztcbiAgICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIHJldHVybiAncmVnZXhwJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIHN0cmluZyB0aGF0IGlzIHBvc3RmaXhlZCB0byBhIHdhcm5pbmcgYWJvdXQgYW4gaW52YWxpZCB0eXBlLlxuICAvLyBGb3IgZXhhbXBsZSwgXCJ1bmRlZmluZWRcIiBvciBcIm9mIHR5cGUgYXJyYXlcIlxuICBmdW5jdGlvbiBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcodmFsdWUpIHtcbiAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHJldHVybiAnYW4gJyArIHR5cGU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgY2FzZSAncmVnZXhwJzpcbiAgICAgICAgcmV0dXJuICdhICcgKyB0eXBlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0dXJucyBjbGFzcyBuYW1lIG9mIHRoZSBvYmplY3QsIGlmIGFueS5cbiAgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHByb3BWYWx1ZSkge1xuICAgIGlmICghcHJvcFZhbHVlLmNvbnN0cnVjdG9yIHx8ICFwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZSkge1xuICAgICAgcmV0dXJuIEFOT05ZTU9VUztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG5cbiAgUmVhY3RQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMgPSBjaGVja1Byb3BUeXBlcztcbiAgUmVhY3RQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGUgPSBjaGVja1Byb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZTtcbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xuXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IGRldmVsb3BtZW50IGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIHZhciB0aHJvd09uRGlyZWN0QWNjZXNzID0gdHJ1ZTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzJykoUmVhY3RJcy5pc0VsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpO1xufSBlbHNlIHtcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgcHJvZHVjdGlvbiBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zJykoKTtcbn1cbiIsIlxuXG4vKjo6IHR5cGUgQXR0ciA9IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIH0gKi9cbi8qOjogdHlwZSBPcHRzID0geyBwcmVzZXJ2ZU51bWJlcnM6ID9ib29sZWFuIH0gKi9cblxuLypcblxuc3R5bGUtYXR0clxuPT09PVxuXG5WZXJ5IHNpbXBsZSBwYXJzaW5nIGFuZCBzdHJpbmdpZnlpbmcgb2Ygc3R5bGUgYXR0cmlidXRlcy5cblxuYHBhcnNlYFxuLS0tLVxuXG5Db252ZXJ0IGEgc3R5bGUgYXR0cmlidXRlIHN0cmluZyB0byBhbiBvYmplY3QuXG5cbiovXG5cbi8qOjogZGVjbGFyZSBmdW5jdGlvbiBwYXJzZSAocmF3OiBzdHJpbmcsIG9wdHM6ID9PcHRzKTogQXR0ciAqL1xuZnVuY3Rpb24gcGFyc2UocmF3LCBvcHRzKSB7XG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gIHZhciBwcmVzZXJ2ZU51bWJlcnMgPSBvcHRzLnByZXNlcnZlTnVtYmVycztcbiAgdmFyIHRyaW0gPSBmdW5jdGlvbiAocykge1xuICAgIHJldHVybiBzLnRyaW0oKTtcbiAgfTtcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGdldEtleVZhbHVlQ2h1bmtzKHJhdykubWFwKHRyaW0pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgLy8gc3BsaXQgd2l0aCBgLmluZGV4T2ZgIHJhdGhlciB0aGFuIGAuc3BsaXRgIGJlY2F1c2UgdGhlIHZhbHVlIG1heSBhbHNvIGNvbnRhaW4gY29sb25zLlxuICAgIHZhciBwb3MgPSBpdGVtLmluZGV4T2YoJzonKTtcbiAgICB2YXIga2V5ID0gaXRlbS5zdWJzdHIoMCwgcG9zKS50cmltKCk7XG4gICAgdmFyIHZhbCA9IGl0ZW0uc3Vic3RyKHBvcyArIDEpLnRyaW0oKTtcbiAgICBpZiAocHJlc2VydmVOdW1iZXJzICYmIGlzTnVtZXJpYyh2YWwpKSB7XG4gICAgICB2YWwgPSBOdW1iZXIodmFsKTtcbiAgICB9XG5cbiAgICBvYmpba2V5XSA9IHZhbDtcbiAgfSk7XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuLypcblxuYGlzTnVtZXJpY2Bcbi0tLS1cblxuQ2hlY2sgaWYgYSB2YWx1ZSBpcyBudW1lcmljLlxuVmlhOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTgzMDg0NC85MzI0XG5cbiovXG5cbi8qOjogZGVjbGFyZSBmdW5jdGlvbiBpc051bWVyaWMgKG46IGFueSk6IGJvb2xlYW4gKi9cblxuZnVuY3Rpb24gaXNOdW1lcmljKG4pIHtcbiAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcbn1cblxuLypcblxuYGdldEtleVZhbHVlQ2h1bmtzYFxuLS0tLVxuXG5TcGxpdCBhIHN0cmluZyBpbnRvIGNodW5rcyBtYXRjaGluZyBgPGtleT46IDx2YWx1ZT5gXG5cbiovXG4vKjo6IGRlY2xhcmUgZnVuY3Rpb24gZ2V0S2V5VmFsdWVDaHVua3MgKHJhdzogc3RyaW5nKTogQXJyYXk8c3RyaW5nPiAqL1xuZnVuY3Rpb24gZ2V0S2V5VmFsdWVDaHVua3MocmF3KSB7XG4gIHZhciBjaHVua3MgPSBbXTtcbiAgdmFyIG9mZnNldCA9IDA7XG4gIHZhciBzZXAgPSAnOyc7XG4gIHZhciBoYXNVbmNsb3NlZFVybCA9IC91cmxcXChbXlxcKV0rJC87XG4gIHZhciBjaHVuayA9ICcnO1xuICB2YXIgbmV4dFNwbGl0O1xuICB3aGlsZSAob2Zmc2V0IDwgcmF3Lmxlbmd0aCkge1xuICAgIG5leHRTcGxpdCA9IHJhdy5pbmRleE9mKHNlcCwgb2Zmc2V0KTtcbiAgICBpZiAobmV4dFNwbGl0ID09PSAtMSkge1xuICAgICAgbmV4dFNwbGl0ID0gcmF3Lmxlbmd0aDtcbiAgICB9XG5cbiAgICBjaHVuayArPSByYXcuc3Vic3RyaW5nKG9mZnNldCwgbmV4dFNwbGl0KTtcblxuICAgIC8vIGRhdGEgVVJJcyBjYW4gY29udGFpbiBzZW1pY29sb25zLCBzbyBtYWtlIHN1cmUgd2UgZ2V0IHRoZSB3aG9sZSB0aGluZ1xuICAgIGlmIChoYXNVbmNsb3NlZFVybC50ZXN0KGNodW5rKSkge1xuICAgICAgY2h1bmsgKz0gJzsnO1xuICAgICAgb2Zmc2V0ID0gbmV4dFNwbGl0ICsgMTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICBjaHVuayA9ICcnO1xuICAgIG9mZnNldCA9IG5leHRTcGxpdCArIDE7XG4gIH1cblxuICByZXR1cm4gY2h1bmtzO1xufVxuXG4vKlxuXG5gc3RyaW5naWZ5YFxuLS0tLVxuXG5Db252ZXJ0IGFuIG9iamVjdCBpbnRvIGFuIGF0dHJpYnV0ZSBzdHJpbmdcblxuKi9cbi8qOjogZGVjbGFyZSBmdW5jdGlvbiBzdHJpbmdpZnkgKG9iajogQXR0cik6IHN0cmluZyAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5KG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBrZXkgKyAnOicgKyBvYmpba2V5XTtcbiAgfSkuam9pbignOycpO1xufVxuXG4vKlxuXG5gbm9ybWFsaXplYFxuLS0tLVxuXG5Ob3JtYWxpemUgYW4gYXR0cmlidXRlIHN0cmluZyAoZWcuIGNvbGxhcHNlIGR1cGxpY2F0ZXMpXG5cbiovXG4vKjo6IGRlY2xhcmUgZnVuY3Rpb24gbm9ybWFsaXplIChzdHI6IHN0cmluZywgb3B0czogP09wdHMpOiBzdHJpbmcgKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZShzdHIsIG9wdHMpIHtcbiAgcmV0dXJuIHN0cmluZ2lmeShwYXJzZShzdHIsIG9wdHMpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbm1vZHVsZS5leHBvcnRzLnN0cmluZ2lmeSA9IHN0cmluZ2lmeTtcbm1vZHVsZS5leHBvcnRzLm5vcm1hbGl6ZSA9IG5vcm1hbGl6ZTsiLCIvKipcbiAqIGF0dHIgZml4IGZvciBvbGQgaWVcbiAqIEBhdXRob3IgeWltaW5naGVAZ21haWwuY29tXG4gKi9cbnZhciBSX0JPT0xFQU4gPSAvXig/OmF1dG9mb2N1c3xhdXRvcGxheXxhc3luY3xjaGVja2VkfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkfHNlbGVjdGVkKSQvaSxcbiAgUl9GT0NVU0FCTEUgPSAvXig/OmJ1dHRvbnxpbnB1dHxvYmplY3R8c2VsZWN0fHRleHRhcmVhKSQvaSxcbiAgUl9DTElDS0FCTEUgPSAvXmEoPzpyZWEpPyQvaSxcbiAgUl9JTlZBTElEX0NIQVIgPSAvOnxeb24vO1xuXG52YXIgYXR0ckZpeCA9IHt9LFxuICBwcm9wRml4LFxuICBhdHRySG9va3MgPSB7XG4gICAgLy8gaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvYmxvZy8yMDA4LzAxLzA5L2dldHRpbmctc2V0dGluZy1hbmQtcmVtb3ZpbmctdGFiaW5kZXgtdmFsdWVzLXdpdGgtamF2YXNjcmlwdC9cbiAgICB0YWJpbmRleDoge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgLy8gZWxlbS50YWJJbmRleCBkb2Vzbid0IGFsd2F5cyByZXR1cm4gdGhlIGNvcnJlY3QgdmFsdWUgd2hlbiBpdCBoYXNuJ3QgYmVlbiBleHBsaWNpdGx5IHNldFxuICAgICAgICB2YXIgYXR0cmlidXRlTm9kZSA9IGVsLmdldEF0dHJpYnV0ZU5vZGUoJ3RhYmluZGV4Jyk7XG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGVOb2RlICYmIGF0dHJpYnV0ZU5vZGUuc3BlY2lmaWVkID9cbiAgICAgICAgICBwYXJzZUludChhdHRyaWJ1dGVOb2RlLnZhbHVlLCAxMCkgOlxuICAgICAgICAgIFJfRk9DVVNBQkxFLnRlc3QoZWwubm9kZU5hbWUpIHx8XG4gICAgICAgICAgUl9DTElDS0FCTEUudGVzdChlbC5ub2RlTmFtZSkgJiYgZWwuaHJlZiA/XG4gICAgICAgICAgICAwIDpcbiAgICAgICAgICAgIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGJvb2xIb29rID0ge1xuICAgIGdldDogZnVuY3Rpb24gKGVsZW0sIG5hbWUpIHtcbiAgICAgIC8vIOi9rOWPkeWIsCBwcm9wIOaWueazlVxuICAgICAgcmV0dXJuIGVsZW1bcHJvcEZpeFtuYW1lXSB8fCBuYW1lXSA/XG4gICAgICAgIC8vIOagueaNriB3M2MgYXR0cmlidXRlICwgdHJ1ZSDml7bov5Tlm57lsZ7mgKflkI3lrZfnrKbkuLJcbiAgICAgICAgbmFtZS50b0xvd2VyQ2FzZSgpIDpcbiAgICAgICAgdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgYXR0ck5vZGVIb29rID0ge307XG5cbmF0dHJIb29rcy5zdHlsZSA9IHtcbiAgZ2V0OiBmdW5jdGlvbiAoZWwpIHtcbiAgICByZXR1cm4gZWwuc3R5bGUuY3NzVGV4dDtcbiAgfVxufTtcblxucHJvcEZpeCA9IHtcbiAgaGlkZWZvY3VzOiAnaGlkZUZvY3VzJyxcbiAgdGFiaW5kZXg6ICd0YWJJbmRleCcsXG4gIHJlYWRvbmx5OiAncmVhZE9ubHknLFxuICAnZm9yJzogJ2h0bWxGb3InLFxuICAnY2xhc3MnOiAnY2xhc3NOYW1lJyxcbiAgbWF4bGVuZ3RoOiAnbWF4TGVuZ3RoJyxcbiAgY2VsbHNwYWNpbmc6ICdjZWxsU3BhY2luZycsXG4gIGNlbGxwYWRkaW5nOiAnY2VsbFBhZGRpbmcnLFxuICByb3dzcGFuOiAncm93U3BhbicsXG4gIGNvbHNwYW46ICdjb2xTcGFuJyxcbiAgdXNlbWFwOiAndXNlTWFwJyxcbiAgZnJhbWVib3JkZXI6ICdmcmFtZUJvcmRlcicsXG4gIGNvbnRlbnRlZGl0YWJsZTogJ2NvbnRlbnRFZGl0YWJsZSdcbn07XG5cbnZhciB1YSA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnID8gbmF2aWdhdG9yLnVzZXJBZ2VudCA6ICcnO1xudmFyIGRvYyA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudCA6IHt9O1xuXG5mdW5jdGlvbiBudW1iZXJpZnkocykge1xuICB2YXIgYyA9IDA7XG4gIC8vIGNvbnZlcnQgJzEuMi4zLjQnIHRvIDEuMjM0XG4gIHJldHVybiBwYXJzZUZsb2F0KHMucmVwbGFjZSgvXFwuL2csIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKGMrKyA9PT0gMCkgPyAnLicgOiAnJztcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBpZVZlcnNpb24oKSB7XG4gIHZhciBtLCB2O1xuICBpZiAoKG0gPSB1YS5tYXRjaCgvTVNJRSAoW147XSopfFRyaWRlbnQuKjsgcnYoPzpcXHN8Oik/KFswLTkuXSspLykpICYmXG4gICAgKHYgPSAobVsxXSB8fCBtWzJdKSkpIHtcbiAgICByZXR1cm4gZG9jLmRvY3VtZW50TW9kZSB8fCBudW1iZXJpZnkodik7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWl4KHMsIHQpIHtcbiAgZm9yICh2YXIgcCBpbiB0KSB7XG4gICAgc1twXSA9IHRbcF07XG4gIH1cbn1cblxuZnVuY3Rpb24gZWFjaChhcnIsIGZuKSB7XG4gIHZhciBpID0gMCwgbCA9IGFyci5sZW5ndGg7XG4gIGZvciAoOyBpIDwgbDsgaSsrKSB7XG4gICAgaWYgKGZuKGFycltpXSwgaSkgPT09IGZhbHNlKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbn1cbnZhciBpZSA9IGllVmVyc2lvbigpO1xuXG5pZiAoaWUgJiYgaWUgPCA4KSB7XG4gIGF0dHJIb29rcy5zdHlsZS5zZXQgPSBmdW5jdGlvbiAoZWwsIHZhbCkge1xuICAgIGVsLnN0eWxlLmNzc1RleHQgPSB2YWw7XG4gIH07XG5cbiAgLy8gZ2V0IGF0dHJpYnV0ZSB2YWx1ZSBmcm9tIGF0dHJpYnV0ZSBub2RlIGZvciBpZVxuICBtaXgoYXR0ck5vZGVIb29rLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoZWxlbSwgbmFtZSkge1xuICAgICAgdmFyIHJldCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZShuYW1lKTtcbiAgICAgIC8vIFJldHVybiB1bmRlZmluZWQgaWYgYXR0cmlidXRlIG5vZGUgc3BlY2lmaWVkIGJ5IHVzZXJcbiAgICAgIHJldHVybiByZXQgJiYgKFxuICAgICAgICAvLyBmaXggIzEwMFxuICAgICAgcmV0LnNwZWNpZmllZCB8fCByZXQubm9kZVZhbHVlKSA/XG4gICAgICAgIHJldC5ub2RlVmFsdWUgOlxuICAgICAgICB1bmRlZmluZWQ7XG4gICAgfVxuICB9KTtcblxuICAvLyBpZTYsNyDkuI3ljLrliIYgYXR0cmlidXRlIOS4jiBwcm9wZXJ0eVxuICBtaXgoYXR0ckZpeCwgcHJvcEZpeCk7XG5cbiAgLy8gaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvYmxvZy8yMDA4LzAxLzA5L2dldHRpbmctc2V0dGluZy1hbmQtcmVtb3ZpbmctdGFiaW5kZXgtdmFsdWVzLXdpdGgtamF2YXNjcmlwdC9cbiAgYXR0ckhvb2tzLnRhYkluZGV4ID0gYXR0ckhvb2tzLnRhYmluZGV4O1xuXG4gIC8vIOS4jeWFieaYryBocmVmLCBzcmMsIOi/mOaciSByb3dzcGFuIOetiemdniBtYXBwaW5nIOWxnuaAp++8jOS5n+mcgOimgeeUqOesrCAyIOS4quWPguaVsOadpeiOt+WPluWOn+Wni+WAvFxuICAvLyDms6jmhI8gY29sU3BhbiByb3dTcGFuIOW3sue7j+eUsSBwcm9wRml4IOi9rOS4uuWkp+WGmVxuICBlYWNoKFsnaHJlZicsICdzcmMnLCAnd2lkdGgnLCAnaGVpZ2h0JywgJ2NvbFNwYW4nLCAncm93U3BhbiddLCBmdW5jdGlvbiAobmFtZSkge1xuICAgIGF0dHJIb29rc1tuYW1lXSA9IHtcbiAgICAgIGdldDogZnVuY3Rpb24gKGVsZW0pIHtcbiAgICAgICAgdmFyIHJldCA9IGVsZW0uZ2V0QXR0cmlidXRlKG5hbWUsIDIpO1xuICAgICAgICByZXR1cm4gcmV0ID09PSBudWxsID8gdW5kZWZpbmVkIDogcmV0O1xuICAgICAgfVxuICAgIH07XG4gIH0pO1xuXG4gIGF0dHJIb29rcy5wbGFjZWhvbGRlciA9IHtcbiAgICBnZXQ6IGZ1bmN0aW9uIChlbGVtLCBuYW1lKSB7XG4gICAgICByZXR1cm4gZWxlbVtuYW1lXSB8fCBhdHRyTm9kZUhvb2suZ2V0KGVsZW0sIG5hbWUpO1xuICAgIH1cbiAgfTtcbn1cblxuaWYgKGllKSB7XG4gIHZhciBocmVmRml4ID0gYXR0ckhvb2tzLmhyZWYgPSBhdHRySG9va3MuaHJlZiB8fCB7fTtcbiAgaHJlZkZpeC5zZXQgPSBmdW5jdGlvbiAoZWwsIHZhbCwgbmFtZSkge1xuICAgIHZhciBjaGlsZE5vZGVzID0gZWwuY2hpbGROb2RlcyxcbiAgICAgIGIsXG4gICAgICBsZW4gPSBjaGlsZE5vZGVzLmxlbmd0aCxcbiAgICAgIGFsbFRleHQgPSBsZW4gPiAwO1xuICAgIGZvciAobGVuID0gbGVuIC0gMTsgbGVuID49IDA7IGxlbi0tKSB7XG4gICAgICBpZiAoY2hpbGROb2Rlc1tsZW5dLm5vZGVUeXBlICE9PSAzKSB7XG4gICAgICAgIGFsbFRleHQgPSAwO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWxsVGV4dCkge1xuICAgICAgYiA9IGVsLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYicpO1xuICAgICAgYi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgZWwuYXBwZW5kQ2hpbGQoYik7XG4gICAgfVxuICAgIGVsLnNldEF0dHJpYnV0ZShuYW1lLCAnJyArIHZhbCk7XG4gICAgaWYgKGIpIHtcbiAgICAgIGVsLnJlbW92ZUNoaWxkKGIpO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIFJFX1RSSU0gPSAvXltcXHNcXHhhMF0rfFtcXHNcXHhhMF0rJC9nLFxuICB0cmltID0gU3RyaW5nLnByb3RvdHlwZS50cmltO1xudmFyIFNQQUNFID0gJyAnO1xuXG52YXIgZ2V0RWxlbWVudHNCeVRhZ05hbWU7XG5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IGZ1bmN0aW9uIChuYW1lLCBjb250ZXh0KSB7XG4gIHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKG5hbWUpO1xufTtcblxuaWYgKGRvYy5jcmVhdGVFbGVtZW50KSB7XG4gIHZhciBkaXYgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVDb21tZW50KCcnKSk7XG4gIGlmIChkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKS5sZW5ndGgpIHtcbiAgICBnZXRFbGVtZW50c0J5VGFnTmFtZSA9IGZ1bmN0aW9uIChuYW1lLCBjb250ZXh0KSB7XG4gICAgICB2YXIgbm9kZXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKG5hbWUpLFxuICAgICAgICBuZWVkc0ZpbHRlciA9IG5hbWUgPT09ICcqJztcbiAgICAgIC8vIDxpbnB1dCBpZD0nbGVuZ3RoJz5cbiAgICAgIGlmIChuZWVkc0ZpbHRlciB8fCB0eXBlb2Ygbm9kZXMubGVuZ3RoICE9PSAnbnVtYmVyJykge1xuICAgICAgICB2YXIgcmV0ID0gW10sXG4gICAgICAgICAgaSA9IDAsXG4gICAgICAgICAgZWw7XG4gICAgICAgIHdoaWxlICgoZWwgPSBub2Rlc1tpKytdKSkge1xuICAgICAgICAgIGlmICghbmVlZHNGaWx0ZXIgfHwgZWwubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgICAgIHJldC5wdXNoKGVsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBub2RlcztcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbnZhciBjb21wYXJlTm9kZU9yZGVyID0gKCdzb3VyY2VJbmRleCcgaW4gKGRvYyAmJiBkb2MuZG9jdW1lbnRFbGVtZW50IHx8IHt9KSkgPyBmdW5jdGlvbiAoYSwgYikge1xuICByZXR1cm4gYS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7XG59IDogZnVuY3Rpb24gKGEsIGIpIHtcbiAgaWYgKCFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIHx8ICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSB7XG4gICAgcmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gPyAtMSA6IDE7XG4gIH1cbiAgdmFyIGJpdCA9IGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiA0O1xuICByZXR1cm4gYml0ID8gLTEgOiAxO1xufTtcblxudmFyIHV0aWwgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgaWU6IGllLFxuXG4gIHVuaXF1ZTogKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFzRHVwbGljYXRlLFxuICAgICAgYmFzZUhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cbiAgICAvLyBIZXJlIHdlIGNoZWNrIGlmIHRoZSBKYXZhU2NyaXB0IGVuZ2luZSBpcyB1c2luZyBzb21lIHNvcnQgb2ZcbiAgICAvLyBvcHRpbWl6YXRpb24gd2hlcmUgaXQgZG9lcyBub3QgYWx3YXlzIGNhbGwgb3VyIGNvbXBhcmlzb25cbiAgICAvLyBmdW5jdGlvbi4gSWYgdGhhdCBpcyB0aGUgY2FzZSwgZGlzY2FyZCB0aGUgaGFzRHVwbGljYXRlIHZhbHVlLlxuICAgIC8vIFRodXMgZmFyIHRoYXQgaW5jbHVkZXMgR29vZ2xlIENocm9tZS5cbiAgICBbMCwgMF0uc29ydChmdW5jdGlvbiAoKSB7XG4gICAgICBiYXNlSGFzRHVwbGljYXRlID0gZmFsc2U7XG4gICAgICByZXR1cm4gMDtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIHNvcnRPcmRlcihhLCBiKSB7XG4gICAgICBpZiAoYSA9PT0gYikge1xuICAgICAgICBoYXNEdXBsaWNhdGUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbXBhcmVOb2RlT3JkZXIoYSwgYik7XG4gICAgfVxuXG4gICAgLy8g5o6S5bqP5Y676YeNXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50cykge1xuICAgICAgaGFzRHVwbGljYXRlID0gYmFzZUhhc0R1cGxpY2F0ZTtcbiAgICAgIGVsZW1lbnRzLnNvcnQoc29ydE9yZGVyKTtcblxuICAgICAgaWYgKGhhc0R1cGxpY2F0ZSkge1xuICAgICAgICB2YXIgaSA9IDEsIGxlbiA9IGVsZW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgICBpZiAoZWxlbWVudHNbaV0gPT09IGVsZW1lbnRzW2kgLSAxXSkge1xuICAgICAgICAgICAgZWxlbWVudHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgLS1sZW47XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICB9O1xuICB9KSgpLFxuXG4gIGdldEVsZW1lbnRzQnlUYWdOYW1lOiBnZXRFbGVtZW50c0J5VGFnTmFtZSxcblxuICBnZXRTaW1wbGVBdHRyOiBmdW5jdGlvbiAoZWwsIG5hbWUpIHtcbiAgICB2YXIgcmV0ID0gZWwgJiYgZWwuZ2V0QXR0cmlidXRlTm9kZShuYW1lKTtcbiAgICBpZiAocmV0ICYmIHJldC5zcGVjaWZpZWQpIHtcbiAgICAgIHJldHVybiAndmFsdWUnIGluIHJldCA/IHJldC52YWx1ZSA6IHJldC5ub2RlVmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sXG5cbiAgY29udGFpbnM6IGllID8gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICBpZiAoYS5ub2RlVHlwZSA9PT0gOSkge1xuICAgICAgYSA9IGEuZG9jdW1lbnRFbGVtZW50O1xuICAgIH1cbiAgICAvLyAhYS5jb250YWlucyA9PiBhPT09ZG9jdW1lbnQgfHwgdGV4dFxuICAgIC8vIOazqOaEj+WOn+eUnyBjb250YWlucyDliKTmlq3ml7YgYT09PWIg5Lmf6L+U5ZueIHRydWVcbiAgICBiID0gYi5wYXJlbnROb2RlO1xuXG4gICAgaWYgKGEgPT09IGIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIHdoZW4gYiBpcyBkb2N1bWVudCwgYS5jb250YWlucyhiKSDkuI3mlK/mjIHnmoTmjqXlj6MgaW4gaWVcbiAgICBpZiAoYiAmJiBiLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICByZXR1cm4gYS5jb250YWlucyAmJiBhLmNvbnRhaW5zKGIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9IDogZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gISEoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSAmIDE2KTtcbiAgfSxcblxuICBpc1RhZzogZnVuY3Rpb24gKGVsLCB2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gJyonIHx8IGVsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gIH0sXG5cbiAgaGFzU2luZ2xlQ2xhc3M6IGZ1bmN0aW9uIChlbCwgY2xzKSB7XG4gICAgLy8gY29uc2lkZXIgeG1sXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2tpc3N5dGVhbS9raXNzeS9pc3N1ZXMvNTMyXG4gICAgdmFyIGNsYXNzTmFtZSA9IGVsICYmIHV0aWwuZ2V0U2ltcGxlQXR0cihlbCwgJ2NsYXNzJyk7XG4gICAgcmV0dXJuIGNsYXNzTmFtZSAmJiAoY2xhc3NOYW1lID0gY2xhc3NOYW1lLnJlcGxhY2UoL1tcXHJcXHRcXG5dL2csIFNQQUNFKSkgJiZcbiAgICAgIChTUEFDRSArIGNsYXNzTmFtZSArIFNQQUNFKS5pbmRleE9mKFNQQUNFICsgY2xzICsgU1BBQ0UpID4gLTE7XG4gIH0sXG5cbiAgc3RhcnRzV2l0aDogZnVuY3Rpb24gKHN0ciwgcHJlZml4KSB7XG4gICAgcmV0dXJuIHN0ci5sYXN0SW5kZXhPZihwcmVmaXgsIDApID09PSAwO1xuICB9LFxuXG4gIGVuZHNXaXRoOiBmdW5jdGlvbiAoc3RyLCBzdWZmaXgpIHtcbiAgICB2YXIgaW5kID0gc3RyLmxlbmd0aCAtIHN1ZmZpeC5sZW5ndGg7XG4gICAgcmV0dXJuIGluZCA+PSAwICYmIHN0ci5pbmRleE9mKHN1ZmZpeCwgaW5kKSA9PT0gaW5kO1xuICB9LFxuXG4gIHRyaW06IHRyaW0gP1xuICAgIGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgIHJldHVybiBzdHIgPT0gbnVsbCA/ICcnIDogdHJpbS5jYWxsKHN0cik7XG4gICAgfSA6XG4gICAgZnVuY3Rpb24gKHN0cikge1xuICAgICAgcmV0dXJuIHN0ciA9PSBudWxsID8gJycgOiAoc3RyICsgJycpLnJlcGxhY2UoUkVfVFJJTSwgJycpO1xuICAgIH0sXG5cbiAgYXR0cjogZnVuY3Rpb24gKGVsLCBuYW1lKSB7XG4gICAgdmFyIGF0dHJOb3JtYWxpemVyLCByZXQ7XG4gICAgLy8gc2Nyb2xsTGVmdFxuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgLy8gY3VzdG9tIGF0dHJzXG4gICAgbmFtZSA9IGF0dHJGaXhbbmFtZV0gfHwgbmFtZTtcbiAgICBpZiAoUl9CT09MRUFOLnRlc3QobmFtZSkpIHtcbiAgICAgIGF0dHJOb3JtYWxpemVyID0gYm9vbEhvb2s7XG4gICAgfSBlbHNlIGlmIChSX0lOVkFMSURfQ0hBUi50ZXN0KG5hbWUpKSB7XG4gICAgICAvLyBvbmx5IG9sZCBpZT9cbiAgICAgIGF0dHJOb3JtYWxpemVyID0gYXR0ck5vZGVIb29rO1xuICAgIH0gZWxzZSB7XG4gICAgICBhdHRyTm9ybWFsaXplciA9IGF0dHJIb29rc1tuYW1lXTtcbiAgICB9XG4gICAgaWYgKGVsICYmIGVsLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAvLyBicm93c2VycyBpbmRleCBlbGVtZW50cyBieSBpZC9uYW1lIG9uIGZvcm1zLCBnaXZlIHByaW9yaXR5IHRvIGF0dHJpYnV0ZXMuXG4gICAgICBpZiAoZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2Zvcm0nKSB7XG4gICAgICAgIGF0dHJOb3JtYWxpemVyID0gYXR0ck5vZGVIb29rO1xuICAgICAgfVxuICAgICAgaWYgKGF0dHJOb3JtYWxpemVyICYmIGF0dHJOb3JtYWxpemVyLmdldCkge1xuICAgICAgICByZXR1cm4gYXR0ck5vcm1hbGl6ZXIuZ2V0KGVsLCBuYW1lKTtcbiAgICAgIH1cbiAgICAgIHJldCA9IGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIGlmIChyZXQgPT09ICcnKSB7XG4gICAgICAgIHZhciBhdHRyTm9kZSA9IGVsLmdldEF0dHJpYnV0ZU5vZGUobmFtZSk7XG4gICAgICAgIGlmICghYXR0ck5vZGUgfHwgIWF0dHJOb2RlLnNwZWNpZmllZCkge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHN0YW5kYXJkIGJyb3dzZXIgbm9uLWV4aXN0aW5nIGF0dHJpYnV0ZSByZXR1cm4gbnVsbFxuICAgICAgLy8gaWU8OCB3aWxsIHJldHVybiB1bmRlZmluZWQgLCBiZWNhdXNlIGl0IHJldHVybiBwcm9wZXJ0eVxuICAgICAgLy8gc28gbm9ybSB0byB1bmRlZmluZWRcbiAgICAgIHJldHVybiByZXQgPT09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7XG4gICAgfVxuICB9XG59OyIsIi8qXG4gIEdlbmVyYXRlZCBieSBraXNvbi4qL1xudmFyIHBhcnNlciA9IChmdW5jdGlvbiAodW5kZWZpbmVkKSB7XG4gICAgLypqc2hpbnQgcXVvdG1hcms6ZmFsc2UsIGxvb3BmdW5jOnRydWUsIGluZGVudDpmYWxzZSwgdW51c2VkOmZhbHNlLCBhc2k6dHJ1ZSwgYm9zczp0cnVlKi9cbiAgICAvKiBHZW5lcmF0ZWQgYnkga2lzb24gKi9cbiAgICB2YXIgcGFyc2VyID0ge30sXG4gICAgICAgIEdyYW1tYXJDb25zdCA9IHtcbiAgICAgICAgICAgICdTSElGVF9UWVBFJzogMSxcbiAgICAgICAgICAgICdSRURVQ0VfVFlQRSc6IDIsXG4gICAgICAgICAgICAnQUNDRVBUX1RZUEUnOiAwLFxuICAgICAgICAgICAgJ1RZUEVfSU5ERVgnOiAwLFxuICAgICAgICAgICAgJ1BST0RVQ1RJT05fSU5ERVgnOiAxLFxuICAgICAgICAgICAgJ1RPX0lOREVYJzogMlxuICAgICAgICB9O1xuICAgIC8qanNsaW50IHF1b3RtYXJrOiBmYWxzZSovXG4gICAgZnVuY3Rpb24gbWl4KHRvLCBmcm9tKSB7XG4gICAgICAgIGZvciAodmFyIGYgaW4gZnJvbSkge1xuICAgICAgICAgICAgdG9bZl0gPSBmcm9tW2ZdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBcnJheShvYmopIHtcbiAgICAgICAgcmV0dXJuICdbb2JqZWN0IEFycmF5XScgPT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVhY2gob2JqZWN0LCBmbiwgY29udGV4dCkge1xuICAgICAgICBpZiAob2JqZWN0KSB7XG4gICAgICAgICAgICB2YXIga2V5LFxuICAgICAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgICAgICAgaSA9IDA7XG5cbiAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNhbiBub3QgdXNlIGhhc093blByb3BlcnR5XG4gICAgICAgICAgICAgICAgICAgIGlmIChmbi5jYWxsKGNvbnRleHQsIG9iamVjdFtrZXldLCBrZXksIG9iamVjdCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhbCA9IG9iamVjdFswXTsgaSA8IGxlbmd0aDsgdmFsID0gb2JqZWN0WysraV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZuLmNhbGwoY29udGV4dCwgdmFsLCBpLCBvYmplY3QpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbkFycmF5KGl0ZW0sIGFycikge1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFyci5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciBMZXhlciA9IGZ1bmN0aW9uIExleGVyKGNmZykge1xuXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgICAvKlxuICAgICBsZXggcnVsZXMuXG4gICAgIEB0eXBlIHtPYmplY3RbXX1cbiAgICAgQGV4YW1wbGVcbiAgICAgW1xuICAgICB7XG4gICAgIHJlZ2V4cDonXFxcXHcrJyxcbiAgICAgc3RhdGU6Wyd4eCddLFxuICAgICB0b2tlbjonYycsXG4gICAgIC8vIHRoaXMgPT4gbGV4XG4gICAgIGFjdGlvbjpmdW5jdGlvbigpe31cbiAgICAgfVxuICAgICBdXG4gICAgICovXG4gICAgICAgIHNlbGYucnVsZXMgPSBbXTtcblxuICAgICAgICBtaXgoc2VsZiwgY2ZnKTtcblxuICAgICAgICAvKlxuICAgICBJbnB1dCBsYW5ndWFnZXNcbiAgICAgQHR5cGUge1N0cmluZ31cbiAgICAgKi9cblxuICAgICAgICBzZWxmLnJlc2V0SW5wdXQoc2VsZi5pbnB1dCk7XG4gICAgfTtcbiAgICBMZXhlci5wcm90b3R5cGUgPSB7XG4gICAgICAgICdyZXNldElucHV0JzogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgICAgICBtaXgodGhpcywge1xuICAgICAgICAgICAgICAgIGlucHV0OiBpbnB1dCxcbiAgICAgICAgICAgICAgICBtYXRjaGVkOiAnJyxcbiAgICAgICAgICAgICAgICBzdGF0ZVN0YWNrOiBbTGV4ZXIuU1RBVElDLklOSVRJQUxdLFxuICAgICAgICAgICAgICAgIG1hdGNoOiAnJyxcbiAgICAgICAgICAgICAgICB0ZXh0OiAnJyxcbiAgICAgICAgICAgICAgICBmaXJzdExpbmU6IDEsXG4gICAgICAgICAgICAgICAgbGluZU51bWJlcjogMSxcbiAgICAgICAgICAgICAgICBsYXN0TGluZTogMSxcbiAgICAgICAgICAgICAgICBmaXJzdENvbHVtbjogMSxcbiAgICAgICAgICAgICAgICBsYXN0Q29sdW1uOiAxXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgJ2dldEN1cnJlbnRSdWxlcyc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBzZWxmLnN0YXRlU3RhY2tbc2VsZi5zdGF0ZVN0YWNrLmxlbmd0aCAtIDFdLFxuICAgICAgICAgICAgICAgIHJ1bGVzID0gW107XG4gICAgICAgICAgICAvLyNKU0NPVkVSQUdFX0lGXG4gICAgICAgICAgICBpZiAoc2VsZi5tYXBTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IHNlbGYubWFwU3RhdGUoY3VycmVudFN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVhY2goc2VsZi5ydWxlcywgZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSByLnN0YXRlIHx8IHJbM107XG4gICAgICAgICAgICAgICAgaWYgKCFzdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlID09PSBMZXhlci5TVEFUSUMuSU5JVElBTCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcnVsZXMucHVzaChyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5BcnJheShjdXJyZW50U3RhdGUsIHN0YXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBydWxlcy5wdXNoKHIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJ1bGVzO1xuICAgICAgICB9LFxuICAgICAgICAncHVzaFN0YXRlJzogZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlU3RhY2sucHVzaChzdGF0ZSk7XG4gICAgICAgIH0sXG4gICAgICAgICdwb3BTdGF0ZSc6IGZ1bmN0aW9uIChudW0pIHtcbiAgICAgICAgICAgIG51bSA9IG51bSB8fCAxO1xuICAgICAgICAgICAgdmFyIHJldDtcbiAgICAgICAgICAgIHdoaWxlIChudW0tLSkge1xuICAgICAgICAgICAgICAgIHJldCA9IHRoaXMuc3RhdGVTdGFjay5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH0sXG4gICAgICAgICdzaG93RGVidWdJbmZvJzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICAgICAgICAgIERFQlVHX0NPTlRFWFRfTElNSVQgPSBMZXhlci5TVEFUSUMuREVCVUdfQ09OVEVYVF9MSU1JVCxcbiAgICAgICAgICAgICAgICBtYXRjaGVkID0gc2VsZi5tYXRjaGVkLFxuICAgICAgICAgICAgICAgIG1hdGNoID0gc2VsZi5tYXRjaCxcbiAgICAgICAgICAgICAgICBpbnB1dCA9IHNlbGYuaW5wdXQ7XG4gICAgICAgICAgICBtYXRjaGVkID0gbWF0Y2hlZC5zbGljZSgwLCBtYXRjaGVkLmxlbmd0aCAtIG1hdGNoLmxlbmd0aCk7XG4gICAgICAgICAgICAvLyNKU0NPVkVSQUdFX0lGIDBcbiAgICAgICAgICAgIHZhciBwYXN0ID0gKG1hdGNoZWQubGVuZ3RoID4gREVCVUdfQ09OVEVYVF9MSU1JVCA/ICcuLi4nIDogJycpICtcbiAgICAgICAgICAgICAgICBtYXRjaGVkLnNsaWNlKDAgLSBERUJVR19DT05URVhUX0xJTUlUKS5yZXBsYWNlKC9cXG4vLCAnICcpLFxuICAgICAgICAgICAgICAgIG5leHQgPSBtYXRjaCArIGlucHV0O1xuICAgICAgICAgICAgLy8jSlNDT1ZFUkFHRV9FTkRJRlxuICAgICAgICAgICAgbmV4dCA9IG5leHQuc2xpY2UoMCwgREVCVUdfQ09OVEVYVF9MSU1JVCkgK1xuICAgICAgICAgICAgICAgIChuZXh0Lmxlbmd0aCA+IERFQlVHX0NPTlRFWFRfTElNSVQgPyAnLi4uJyA6ICcnKTtcbiAgICAgICAgICAgIHJldHVybiBwYXN0ICsgbmV4dCArICdcXG4nICsgbmV3IEFycmF5KHBhc3QubGVuZ3RoICsgMSkuam9pbignLScpICsgJ14nO1xuICAgICAgICB9LFxuICAgICAgICAnbWFwU3ltYm9sJzogZnVuY3Rpb24gbWFwU3ltYm9sRm9yQ29kZUdlbih0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xNYXBbdF07XG4gICAgICAgIH0sXG4gICAgICAgICdtYXBSZXZlcnNlU3ltYm9sJzogZnVuY3Rpb24gKHJzKSB7XG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXMsXG4gICAgICAgICAgICAgICAgc3ltYm9sTWFwID0gc2VsZi5zeW1ib2xNYXAsXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICByZXZlcnNlU3ltYm9sTWFwID0gc2VsZi5yZXZlcnNlU3ltYm9sTWFwO1xuICAgICAgICAgICAgaWYgKCFyZXZlcnNlU3ltYm9sTWFwICYmIHN5bWJvbE1hcCkge1xuICAgICAgICAgICAgICAgIHJldmVyc2VTeW1ib2xNYXAgPSBzZWxmLnJldmVyc2VTeW1ib2xNYXAgPSB7fTtcbiAgICAgICAgICAgICAgICBmb3IgKGkgaW4gc3ltYm9sTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldmVyc2VTeW1ib2xNYXBbc3ltYm9sTWFwW2ldXSA9IGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8jSlNDT1ZFUkFHRV9JRlxuICAgICAgICAgICAgaWYgKHJldmVyc2VTeW1ib2xNYXApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV2ZXJzZVN5bWJvbE1hcFtyc107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgJ2xleCc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgICAgICAgICBpbnB1dCA9IHNlbGYuaW5wdXQsXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICBydWxlLFxuICAgICAgICAgICAgICAgIG0sXG4gICAgICAgICAgICAgICAgcmV0LFxuICAgICAgICAgICAgICAgIGxpbmVzLFxuICAgICAgICAgICAgICAgIHJ1bGVzID0gc2VsZi5nZXRDdXJyZW50UnVsZXMoKTtcblxuICAgICAgICAgICAgc2VsZi5tYXRjaCA9IHNlbGYudGV4dCA9ICcnO1xuXG4gICAgICAgICAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubWFwU3ltYm9sKExleGVyLlNUQVRJQy5FTkRfVEFHKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcnVsZSA9IHJ1bGVzW2ldO1xuICAgICAgICAgICAgICAgIC8vI0pTQ09WRVJBR0VfSUYgMFxuICAgICAgICAgICAgICAgIHZhciByZWdleHAgPSBydWxlLnJlZ2V4cCB8fCBydWxlWzFdLFxuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHJ1bGUudG9rZW4gfHwgcnVsZVswXSxcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gcnVsZS5hY3Rpb24gfHwgcnVsZVsyXSB8fCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgLy8jSlNDT1ZFUkFHRV9FTkRJRlxuICAgICAgICAgICAgICAgIGlmICgobSA9IGlucHV0Lm1hdGNoKHJlZ2V4cCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVzID0gbVswXS5tYXRjaCgvXFxuLiovZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsaW5lcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5saW5lTnVtYmVyICs9IGxpbmVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBtaXgoc2VsZiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RMaW5lOiBzZWxmLmxhc3RMaW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdExpbmU6IHNlbGYubGluZU51bWJlciArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdENvbHVtbjogc2VsZi5sYXN0Q29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENvbHVtbjogbGluZXMgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCAtIDEgOiBzZWxmLmxhc3RDb2x1bW4gKyBtWzBdLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoO1xuICAgICAgICAgICAgICAgICAgICAvLyBmb3IgZXJyb3IgcmVwb3J0XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoID0gc2VsZi5tYXRjaCA9IG1bMF07XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gYWxsIG1hdGNoZXNcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXRjaGVzID0gbTtcbiAgICAgICAgICAgICAgICAgICAgLy8gbWF5IGNoYW5nZSBieSB1c2VyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYudGV4dCA9IG1hdGNoO1xuICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaGVkIGNvbnRlbnQgdXRpbHMgbm93XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubWF0Y2hlZCArPSBtYXRjaDtcbiAgICAgICAgICAgICAgICAgICAgcmV0ID0gYWN0aW9uICYmIGFjdGlvbi5jYWxsKHNlbGYpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHRva2VuO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gc2VsZi5tYXBTeW1ib2wocmV0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKG1hdGNoLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQgPSBpbnB1dDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5sZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgTGV4ZXIuU1RBVElDID0ge1xuICAgICAgICAnSU5JVElBTCc6ICdJJyxcbiAgICAgICAgJ0RFQlVHX0NPTlRFWFRfTElNSVQnOiAyMCxcbiAgICAgICAgJ0VORF9UQUcnOiAnJEVPRidcbiAgICB9O1xuICAgIHZhciBsZXhlciA9IG5ldyBMZXhlcih7XG4gICAgICAgICdydWxlcyc6IFtcbiAgICAgICAgICAgIFsnYicsIC9eXFxbKD86W1xcdFxcclxcblxcZlxceDIwXSopLyxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCA9IHRoaXMueXkudHJpbSh0aGlzLnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbJ2MnLCAvXig/OltcXHRcXHJcXG5cXGZcXHgyMF0qKVxcXS8sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnl5LnRyaW0odGhpcy50ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgWydkJywgL14oPzpbXFx0XFxyXFxuXFxmXFx4MjBdKil+PSg/OltcXHRcXHJcXG5cXGZcXHgyMF0qKS8sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnl5LnRyaW0odGhpcy50ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgWydlJywgL14oPzpbXFx0XFxyXFxuXFxmXFx4MjBdKilcXHw9KD86W1xcdFxcclxcblxcZlxceDIwXSopLyxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCA9IHRoaXMueXkudHJpbSh0aGlzLnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbJ2YnLCAvXig/OltcXHRcXHJcXG5cXGZcXHgyMF0qKVxcXj0oPzpbXFx0XFxyXFxuXFxmXFx4MjBdKikvLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy55eS50cmltKHRoaXMudGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFsnZycsIC9eKD86W1xcdFxcclxcblxcZlxceDIwXSopXFwkPSg/OltcXHRcXHJcXG5cXGZcXHgyMF0qKS8sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnl5LnRyaW0odGhpcy50ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgWydoJywgL14oPzpbXFx0XFxyXFxuXFxmXFx4MjBdKilcXCo9KD86W1xcdFxcclxcblxcZlxceDIwXSopLyxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCA9IHRoaXMueXkudHJpbSh0aGlzLnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbJ2knLCAvXig/OltcXHRcXHJcXG5cXGZcXHgyMF0qKVxcPSg/OltcXHRcXHJcXG5cXGZcXHgyMF0qKS8sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnl5LnRyaW0odGhpcy50ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgWydqJywgL14oPzooPzpbXFx3XXxbXlxceDAwLVxceGEwXXwoPzpcXFxcW15cXG5cXHJcXGYwLTlhLWZdKSkoPzpbXFx3XFxkLV18W15cXHgwMC1cXHhhMF18KD86XFxcXFteXFxuXFxyXFxmMC05YS1mXSkpKilcXCgvLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy55eS50cmltKHRoaXMudGV4dCkuc2xpY2UoMCwgLTEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2hTdGF0ZSgnZm4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgWydrJywgL15bXlxcKV0qLyxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFsnZm4nXVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFsnbCcsIC9eKD86W1xcdFxcclxcblxcZlxceDIwXSopXFwpLyxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCA9IHRoaXMueXkudHJpbSh0aGlzLnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbJ20nLCAvXjpub3RcXCgoPzpbXFx0XFxyXFxuXFxmXFx4MjBdKikvaSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCA9IHRoaXMueXkudHJpbSh0aGlzLnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbJ24nLCAvXig/Oig/OltcXHddfFteXFx4MDAtXFx4YTBdfCg/OlxcXFxbXlxcblxcclxcZjAtOWEtZl0pKSg/OltcXHdcXGQtXXxbXlxceDAwLVxceGEwXXwoPzpcXFxcW15cXG5cXHJcXGYwLTlhLWZdKSkqKS8sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnl5LnVuRXNjYXBlKHRoaXMudGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFsnbycsIC9eXCIoXFxcXFwifFteXCJdKSpcIi8sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnl5LnVuRXNjYXBlU3RyKHRoaXMudGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFsnbycsIC9eJyhcXFxcJ3xbXiddKSonLyxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCA9IHRoaXMueXkudW5Fc2NhcGVTdHIodGhpcy50ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgWydwJywgL14jKD86KD86W1xcd1xcZC1dfFteXFx4MDAtXFx4YTBdfCg/OlxcXFxbXlxcblxcclxcZjAtOWEtZl0pKSspLyxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCA9IHRoaXMueXkudW5Fc2NhcGUodGhpcy50ZXh0LnNsaWNlKDEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgWydxJywgL15cXC4oPzooPzpbXFx3XXxbXlxceDAwLVxceGEwXXwoPzpcXFxcW15cXG5cXHJcXGYwLTlhLWZdKSkoPzpbXFx3XFxkLV18W15cXHgwMC1cXHhhMF18KD86XFxcXFteXFxuXFxyXFxmMC05YS1mXSkpKikvLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy55eS51bkVzY2FwZSh0aGlzLnRleHQuc2xpY2UoMSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbJ3InLCAvXig/OltcXHRcXHJcXG5cXGZcXHgyMF0qKSwoPzpbXFx0XFxyXFxuXFxmXFx4MjBdKikvLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy55eS50cmltKHRoaXMudGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFsncycsIC9eOjo/LywgMF0sXG4gICAgICAgICAgICBbJ3QnLCAvXig/OltcXHRcXHJcXG5cXGZcXHgyMF0qKVxcKyg/OltcXHRcXHJcXG5cXGZcXHgyMF0qKS8sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnl5LnRyaW0odGhpcy50ZXh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgWyd1JywgL14oPzpbXFx0XFxyXFxuXFxmXFx4MjBdKik+KD86W1xcdFxcclxcblxcZlxceDIwXSopLyxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCA9IHRoaXMueXkudHJpbSh0aGlzLnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbJ3YnLCAvXig/OltcXHRcXHJcXG5cXGZcXHgyMF0qKX4oPzpbXFx0XFxyXFxuXFxmXFx4MjBdKikvLFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy55eS50cmltKHRoaXMudGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFsndycsIC9eXFwqLywgMF0sXG4gICAgICAgICAgICBbJ3gnLCAvXig/OltcXHRcXHJcXG5cXGZcXHgyMF0rKS8sIDBdLFxuICAgICAgICAgICAgWyd5JywgL14uLywgMF1cbiAgICAgICAgXVxuICAgIH0pO1xuICAgIHBhcnNlci5sZXhlciA9IGxleGVyO1xuICAgIGxleGVyLnN5bWJvbE1hcCA9IHtcbiAgICAgICAgJyRFT0YnOiAnYScsXG4gICAgICAgICdMRUZUX0JSQUNLRVQnOiAnYicsXG4gICAgICAgICdSSUdIVF9CUkFDS0VUJzogJ2MnLFxuICAgICAgICAnSU5DTFVERVMnOiAnZCcsXG4gICAgICAgICdEQVNIX01BVENIJzogJ2UnLFxuICAgICAgICAnUFJFRklYX01BVENIJzogJ2YnLFxuICAgICAgICAnU1VGRklYX01BVENIJzogJ2cnLFxuICAgICAgICAnU1VCU1RSSU5HX01BVENIJzogJ2gnLFxuICAgICAgICAnQUxMX01BVENIJzogJ2knLFxuICAgICAgICAnRlVOQ1RJT04nOiAnaicsXG4gICAgICAgICdQQVJBTUVURVInOiAnaycsXG4gICAgICAgICdSSUdIVF9QQVJFTlRIRVNFUyc6ICdsJyxcbiAgICAgICAgJ05PVCc6ICdtJyxcbiAgICAgICAgJ0lERU5UJzogJ24nLFxuICAgICAgICAnU1RSSU5HJzogJ28nLFxuICAgICAgICAnSEFTSCc6ICdwJyxcbiAgICAgICAgJ0NMQVNTJzogJ3EnLFxuICAgICAgICAnQ09NTUEnOiAncicsXG4gICAgICAgICdDT0xPTic6ICdzJyxcbiAgICAgICAgJ1BMVVMnOiAndCcsXG4gICAgICAgICdHUkVBVEVSJzogJ3UnLFxuICAgICAgICAnVElMREUnOiAndicsXG4gICAgICAgICdVTklWRVJTQUwnOiAndycsXG4gICAgICAgICdTJzogJ3gnLFxuICAgICAgICAnSU5WQUxJRCc6ICd5JyxcbiAgICAgICAgJyRTVEFSVCc6ICd6JyxcbiAgICAgICAgJ3NlbGVjdG9yc19ncm91cCc6ICdhYScsXG4gICAgICAgICdzZWxlY3Rvcic6ICdhYicsXG4gICAgICAgICdzaW1wbGVfc2VsZWN0b3Jfc2VxdWVuY2UnOiAnYWMnLFxuICAgICAgICAnY29tYmluYXRvcic6ICdhZCcsXG4gICAgICAgICd0eXBlX3NlbGVjdG9yJzogJ2FlJyxcbiAgICAgICAgJ2lkX3NlbGVjdG9yJzogJ2FmJyxcbiAgICAgICAgJ2NsYXNzX3NlbGVjdG9yJzogJ2FnJyxcbiAgICAgICAgJ2F0dHJpYl9tYXRjaCc6ICdhaCcsXG4gICAgICAgICdhdHRyaWInOiAnYWknLFxuICAgICAgICAnYXR0cmliX3ZhbCc6ICdhaicsXG4gICAgICAgICdwc2V1ZG8nOiAnYWsnLFxuICAgICAgICAnbmVnYXRpb24nOiAnYWwnLFxuICAgICAgICAnbmVnYXRpb25fYXJnJzogJ2FtJyxcbiAgICAgICAgJ3N1ZmZpeF9zZWxlY3Rvcic6ICdhbicsXG4gICAgICAgICdzdWZmaXhfc2VsZWN0b3JzJzogJ2FvJ1xuICAgIH07XG4gICAgcGFyc2VyLnByb2R1Y3Rpb25zID0gW1xuICAgICAgICBbJ3onLCBbJ2FhJ11dLFxuICAgICAgICBbJ2FhJywgWydhYiddLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBbdGhpcy4kMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIFsnYWEnLCBbJ2FhJywgJ3InLCAnYWInXSxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiQxLnB1c2godGhpcy4kMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIFsnYWInLCBbJ2FjJ11dLFxuICAgICAgICBbJ2FiJywgWydhYicsICdhZCcsICdhYyddLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIC8vIExpbmtlZExpc3RcblxuICAgICAgICAgICAgICAgIHRoaXMuJDEubmV4dENvbWJpbmF0b3IgPSB0aGlzLiQzLnByZXZDb21iaW5hdG9yID0gdGhpcy4kMjtcbiAgICAgICAgICAgICAgICB2YXIgb3JkZXI7XG4gICAgICAgICAgICAgICAgb3JkZXIgPSB0aGlzLiQxLm9yZGVyID0gdGhpcy4kMS5vcmRlciB8fCAwO1xuICAgICAgICAgICAgICAgIHRoaXMuJDMub3JkZXIgPSBvcmRlciArIDE7XG4gICAgICAgICAgICAgICAgdGhpcy4kMy5wcmV2ID0gdGhpcy4kMTtcbiAgICAgICAgICAgICAgICB0aGlzLiQxLm5leHQgPSB0aGlzLiQzO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiQzO1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBbJ2FkJywgWyd0J11dLFxuICAgICAgICBbJ2FkJywgWyd1J11dLFxuICAgICAgICBbJ2FkJywgWyd2J11dLFxuICAgICAgICBbJ2FkJywgWyd4J10sXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgWydhZScsIFsnbiddLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHQ6ICd0YWcnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy4kMVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIFsnYWUnLCBbJ3cnXSxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0OiAndGFnJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuJDFcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBbJ2FmJywgWydwJ10sXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdDogJ2lkJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuJDFcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBbJ2FnJywgWydxJ10sXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdDogJ2NscycsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLiQxXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgWydhaCcsIFsnZiddXSxcbiAgICAgICAgWydhaCcsIFsnZyddXSxcbiAgICAgICAgWydhaCcsIFsnaCddXSxcbiAgICAgICAgWydhaCcsIFsnaSddXSxcbiAgICAgICAgWydhaCcsIFsnZCddXSxcbiAgICAgICAgWydhaCcsIFsnZSddXSxcbiAgICAgICAgWydhaScsIFsnYicsICduJywgJ2MnXSxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0OiAnYXR0cmliJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50OiB0aGlzLiQyXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBbJ2FqJywgWyduJ11dLFxuICAgICAgICBbJ2FqJywgWydvJ11dLFxuICAgICAgICBbJ2FpJywgWydiJywgJ24nLCAnYWgnLCAnYWonLCAnYyddLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHQ6ICdhdHRyaWInLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQ6IHRoaXMuJDIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaDogdGhpcy4kMyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLiQ0XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBbJ2FrJywgWydzJywgJ2onLCAnaycsICdsJ10sXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdDogJ3BzZXVkbycsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbjogdGhpcy4kMi50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW06IHRoaXMuJDNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIFsnYWsnLCBbJ3MnLCAnbiddLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHQ6ICdwc2V1ZG8nLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQ6IHRoaXMuJDIudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgWydhbCcsIFsnbScsICdhbScsICdsJ10sXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdDogJ3BzZXVkbycsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbjogJ25vdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbTogdGhpcy4kMlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgWydhbScsIFsnYWUnXV0sXG4gICAgICAgIFsnYW0nLCBbJ2FmJ11dLFxuICAgICAgICBbJ2FtJywgWydhZyddXSxcbiAgICAgICAgWydhbScsIFsnYWknXV0sXG4gICAgICAgIFsnYW0nLCBbJ2FrJ11dLFxuICAgICAgICBbJ2FuJywgWydhZiddXSxcbiAgICAgICAgWydhbicsIFsnYWcnXV0sXG4gICAgICAgIFsnYW4nLCBbJ2FpJ11dLFxuICAgICAgICBbJ2FuJywgWydhayddXSxcbiAgICAgICAgWydhbicsIFsnYWwnXV0sXG4gICAgICAgIFsnYW8nLCBbJ2FuJ10sXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFt0aGlzLiQxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgWydhbycsIFsnYW8nLCAnYW4nXSxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiQxLnB1c2godGhpcy4kMik7XG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIFsnYWMnLCBbJ2FlJ11dLFxuICAgICAgICBbJ2FjJywgWydhbyddLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHN1ZmZpeDogdGhpcy4kMVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIFsnYWMnLCBbJ2FlJywgJ2FvJ10sXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdDogJ3RhZycsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLiQxLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBzdWZmaXg6IHRoaXMuJDJcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICBdXG4gICAgXTtcbiAgICBwYXJzZXIudGFibGUgPSB7XG4gICAgICAgICdnb3Rvcyc6IHtcbiAgICAgICAgICAgICcwJzoge1xuICAgICAgICAgICAgICAgICdhYSc6IDgsXG4gICAgICAgICAgICAgICAgJ2FiJzogOSxcbiAgICAgICAgICAgICAgICAnYWUnOiAxMCxcbiAgICAgICAgICAgICAgICAnYWYnOiAxMSxcbiAgICAgICAgICAgICAgICAnYWcnOiAxMixcbiAgICAgICAgICAgICAgICAnYWknOiAxMyxcbiAgICAgICAgICAgICAgICAnYWsnOiAxNCxcbiAgICAgICAgICAgICAgICAnYWwnOiAxNSxcbiAgICAgICAgICAgICAgICAnYW4nOiAxNixcbiAgICAgICAgICAgICAgICAnYW8nOiAxNyxcbiAgICAgICAgICAgICAgICAnYWMnOiAxOFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcyJzoge1xuICAgICAgICAgICAgICAgICdhZSc6IDIwLFxuICAgICAgICAgICAgICAgICdhZic6IDIxLFxuICAgICAgICAgICAgICAgICdhZyc6IDIyLFxuICAgICAgICAgICAgICAgICdhaSc6IDIzLFxuICAgICAgICAgICAgICAgICdhayc6IDI0LFxuICAgICAgICAgICAgICAgICdhbSc6IDI1XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzknOiB7XG4gICAgICAgICAgICAgICAgJ2FkJzogMzNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMTAnOiB7XG4gICAgICAgICAgICAgICAgJ2FmJzogMTEsXG4gICAgICAgICAgICAgICAgJ2FnJzogMTIsXG4gICAgICAgICAgICAgICAgJ2FpJzogMTMsXG4gICAgICAgICAgICAgICAgJ2FrJzogMTQsXG4gICAgICAgICAgICAgICAgJ2FsJzogMTUsXG4gICAgICAgICAgICAgICAgJ2FuJzogMTYsXG4gICAgICAgICAgICAgICAgJ2FvJzogMzRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMTcnOiB7XG4gICAgICAgICAgICAgICAgJ2FmJzogMTEsXG4gICAgICAgICAgICAgICAgJ2FnJzogMTIsXG4gICAgICAgICAgICAgICAgJ2FpJzogMTMsXG4gICAgICAgICAgICAgICAgJ2FrJzogMTQsXG4gICAgICAgICAgICAgICAgJ2FsJzogMTUsXG4gICAgICAgICAgICAgICAgJ2FuJzogMzVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMTknOiB7XG4gICAgICAgICAgICAgICAgJ2FoJzogNDNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMjgnOiB7XG4gICAgICAgICAgICAgICAgJ2FiJzogNDYsXG4gICAgICAgICAgICAgICAgJ2FlJzogMTAsXG4gICAgICAgICAgICAgICAgJ2FmJzogMTEsXG4gICAgICAgICAgICAgICAgJ2FnJzogMTIsXG4gICAgICAgICAgICAgICAgJ2FpJzogMTMsXG4gICAgICAgICAgICAgICAgJ2FrJzogMTQsXG4gICAgICAgICAgICAgICAgJ2FsJzogMTUsXG4gICAgICAgICAgICAgICAgJ2FuJzogMTYsXG4gICAgICAgICAgICAgICAgJ2FvJzogMTcsXG4gICAgICAgICAgICAgICAgJ2FjJzogMThcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMzMnOiB7XG4gICAgICAgICAgICAgICAgJ2FlJzogMTAsXG4gICAgICAgICAgICAgICAgJ2FmJzogMTEsXG4gICAgICAgICAgICAgICAgJ2FnJzogMTIsXG4gICAgICAgICAgICAgICAgJ2FpJzogMTMsXG4gICAgICAgICAgICAgICAgJ2FrJzogMTQsXG4gICAgICAgICAgICAgICAgJ2FsJzogMTUsXG4gICAgICAgICAgICAgICAgJ2FuJzogMTYsXG4gICAgICAgICAgICAgICAgJ2FvJzogMTcsXG4gICAgICAgICAgICAgICAgJ2FjJzogNDdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMzQnOiB7XG4gICAgICAgICAgICAgICAgJ2FmJzogMTEsXG4gICAgICAgICAgICAgICAgJ2FnJzogMTIsXG4gICAgICAgICAgICAgICAgJ2FpJzogMTMsXG4gICAgICAgICAgICAgICAgJ2FrJzogMTQsXG4gICAgICAgICAgICAgICAgJ2FsJzogMTUsXG4gICAgICAgICAgICAgICAgJ2FuJzogMzVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnNDMnOiB7XG4gICAgICAgICAgICAgICAgJ2FqJzogNTBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnNDYnOiB7XG4gICAgICAgICAgICAgICAgJ2FkJzogMzNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgJ2FjdGlvbic6IHtcbiAgICAgICAgICAgICcwJzoge1xuICAgICAgICAgICAgICAgICdiJzogWzEsIHVuZGVmaW5lZCwgMV0sXG4gICAgICAgICAgICAgICAgJ20nOiBbMSwgdW5kZWZpbmVkLCAyXSxcbiAgICAgICAgICAgICAgICAnbic6IFsxLCB1bmRlZmluZWQsIDNdLFxuICAgICAgICAgICAgICAgICdwJzogWzEsIHVuZGVmaW5lZCwgNF0sXG4gICAgICAgICAgICAgICAgJ3EnOiBbMSwgdW5kZWZpbmVkLCA1XSxcbiAgICAgICAgICAgICAgICAncyc6IFsxLCB1bmRlZmluZWQsIDZdLFxuICAgICAgICAgICAgICAgICd3JzogWzEsIHVuZGVmaW5lZCwgN11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMSc6IHtcbiAgICAgICAgICAgICAgICAnbic6IFsxLCB1bmRlZmluZWQsIDE5XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcyJzoge1xuICAgICAgICAgICAgICAgICdiJzogWzEsIHVuZGVmaW5lZCwgMV0sXG4gICAgICAgICAgICAgICAgJ24nOiBbMSwgdW5kZWZpbmVkLCAzXSxcbiAgICAgICAgICAgICAgICAncCc6IFsxLCB1bmRlZmluZWQsIDRdLFxuICAgICAgICAgICAgICAgICdxJzogWzEsIHVuZGVmaW5lZCwgNV0sXG4gICAgICAgICAgICAgICAgJ3MnOiBbMSwgdW5kZWZpbmVkLCA2XSxcbiAgICAgICAgICAgICAgICAndyc6IFsxLCB1bmRlZmluZWQsIDddXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzMnOiB7XG4gICAgICAgICAgICAgICAgJ2EnOiBbMiwgOV0sXG4gICAgICAgICAgICAgICAgJ3InOiBbMiwgOV0sXG4gICAgICAgICAgICAgICAgJ3QnOiBbMiwgOV0sXG4gICAgICAgICAgICAgICAgJ3UnOiBbMiwgOV0sXG4gICAgICAgICAgICAgICAgJ3YnOiBbMiwgOV0sXG4gICAgICAgICAgICAgICAgJ3gnOiBbMiwgOV0sXG4gICAgICAgICAgICAgICAgJ3AnOiBbMiwgOV0sXG4gICAgICAgICAgICAgICAgJ3EnOiBbMiwgOV0sXG4gICAgICAgICAgICAgICAgJ2InOiBbMiwgOV0sXG4gICAgICAgICAgICAgICAgJ3MnOiBbMiwgOV0sXG4gICAgICAgICAgICAgICAgJ20nOiBbMiwgOV0sXG4gICAgICAgICAgICAgICAgJ2wnOiBbMiwgOV1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnNCc6IHtcbiAgICAgICAgICAgICAgICAnYSc6IFsyLCAxMV0sXG4gICAgICAgICAgICAgICAgJ3InOiBbMiwgMTFdLFxuICAgICAgICAgICAgICAgICd0JzogWzIsIDExXSxcbiAgICAgICAgICAgICAgICAndSc6IFsyLCAxMV0sXG4gICAgICAgICAgICAgICAgJ3YnOiBbMiwgMTFdLFxuICAgICAgICAgICAgICAgICd4JzogWzIsIDExXSxcbiAgICAgICAgICAgICAgICAncCc6IFsyLCAxMV0sXG4gICAgICAgICAgICAgICAgJ3EnOiBbMiwgMTFdLFxuICAgICAgICAgICAgICAgICdiJzogWzIsIDExXSxcbiAgICAgICAgICAgICAgICAncyc6IFsyLCAxMV0sXG4gICAgICAgICAgICAgICAgJ20nOiBbMiwgMTFdLFxuICAgICAgICAgICAgICAgICdsJzogWzIsIDExXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICc1Jzoge1xuICAgICAgICAgICAgICAgICdhJzogWzIsIDEyXSxcbiAgICAgICAgICAgICAgICAncic6IFsyLCAxMl0sXG4gICAgICAgICAgICAgICAgJ3QnOiBbMiwgMTJdLFxuICAgICAgICAgICAgICAgICd1JzogWzIsIDEyXSxcbiAgICAgICAgICAgICAgICAndic6IFsyLCAxMl0sXG4gICAgICAgICAgICAgICAgJ3gnOiBbMiwgMTJdLFxuICAgICAgICAgICAgICAgICdwJzogWzIsIDEyXSxcbiAgICAgICAgICAgICAgICAncSc6IFsyLCAxMl0sXG4gICAgICAgICAgICAgICAgJ2InOiBbMiwgMTJdLFxuICAgICAgICAgICAgICAgICdzJzogWzIsIDEyXSxcbiAgICAgICAgICAgICAgICAnbSc6IFsyLCAxMl0sXG4gICAgICAgICAgICAgICAgJ2wnOiBbMiwgMTJdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzYnOiB7XG4gICAgICAgICAgICAgICAgJ2onOiBbMSwgdW5kZWZpbmVkLCAyNl0sXG4gICAgICAgICAgICAgICAgJ24nOiBbMSwgdW5kZWZpbmVkLCAyN11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnNyc6IHtcbiAgICAgICAgICAgICAgICAnYSc6IFsyLCAxMF0sXG4gICAgICAgICAgICAgICAgJ3InOiBbMiwgMTBdLFxuICAgICAgICAgICAgICAgICd0JzogWzIsIDEwXSxcbiAgICAgICAgICAgICAgICAndSc6IFsyLCAxMF0sXG4gICAgICAgICAgICAgICAgJ3YnOiBbMiwgMTBdLFxuICAgICAgICAgICAgICAgICd4JzogWzIsIDEwXSxcbiAgICAgICAgICAgICAgICAncCc6IFsyLCAxMF0sXG4gICAgICAgICAgICAgICAgJ3EnOiBbMiwgMTBdLFxuICAgICAgICAgICAgICAgICdiJzogWzIsIDEwXSxcbiAgICAgICAgICAgICAgICAncyc6IFsyLCAxMF0sXG4gICAgICAgICAgICAgICAgJ20nOiBbMiwgMTBdLFxuICAgICAgICAgICAgICAgICdsJzogWzIsIDEwXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICc4Jzoge1xuICAgICAgICAgICAgICAgICdhJzogWzBdLFxuICAgICAgICAgICAgICAgICdyJzogWzEsIHVuZGVmaW5lZCwgMjhdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzknOiB7XG4gICAgICAgICAgICAgICAgJ2EnOiBbMiwgMV0sXG4gICAgICAgICAgICAgICAgJ3InOiBbMiwgMV0sXG4gICAgICAgICAgICAgICAgJ3QnOiBbMSwgdW5kZWZpbmVkLCAyOV0sXG4gICAgICAgICAgICAgICAgJ3UnOiBbMSwgdW5kZWZpbmVkLCAzMF0sXG4gICAgICAgICAgICAgICAgJ3YnOiBbMSwgdW5kZWZpbmVkLCAzMV0sXG4gICAgICAgICAgICAgICAgJ3gnOiBbMSwgdW5kZWZpbmVkLCAzMl1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMTAnOiB7XG4gICAgICAgICAgICAgICAgJ2EnOiBbMiwgMzhdLFxuICAgICAgICAgICAgICAgICdyJzogWzIsIDM4XSxcbiAgICAgICAgICAgICAgICAndCc6IFsyLCAzOF0sXG4gICAgICAgICAgICAgICAgJ3UnOiBbMiwgMzhdLFxuICAgICAgICAgICAgICAgICd2JzogWzIsIDM4XSxcbiAgICAgICAgICAgICAgICAneCc6IFsyLCAzOF0sXG4gICAgICAgICAgICAgICAgJ2InOiBbMSwgdW5kZWZpbmVkLCAxXSxcbiAgICAgICAgICAgICAgICAnbSc6IFsxLCB1bmRlZmluZWQsIDJdLFxuICAgICAgICAgICAgICAgICdwJzogWzEsIHVuZGVmaW5lZCwgNF0sXG4gICAgICAgICAgICAgICAgJ3EnOiBbMSwgdW5kZWZpbmVkLCA1XSxcbiAgICAgICAgICAgICAgICAncyc6IFsxLCB1bmRlZmluZWQsIDZdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzExJzoge1xuICAgICAgICAgICAgICAgICdhJzogWzIsIDMxXSxcbiAgICAgICAgICAgICAgICAncic6IFsyLCAzMV0sXG4gICAgICAgICAgICAgICAgJ3QnOiBbMiwgMzFdLFxuICAgICAgICAgICAgICAgICd1JzogWzIsIDMxXSxcbiAgICAgICAgICAgICAgICAndic6IFsyLCAzMV0sXG4gICAgICAgICAgICAgICAgJ3gnOiBbMiwgMzFdLFxuICAgICAgICAgICAgICAgICdwJzogWzIsIDMxXSxcbiAgICAgICAgICAgICAgICAncSc6IFsyLCAzMV0sXG4gICAgICAgICAgICAgICAgJ2InOiBbMiwgMzFdLFxuICAgICAgICAgICAgICAgICdzJzogWzIsIDMxXSxcbiAgICAgICAgICAgICAgICAnbSc6IFsyLCAzMV1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMTInOiB7XG4gICAgICAgICAgICAgICAgJ2EnOiBbMiwgMzJdLFxuICAgICAgICAgICAgICAgICdyJzogWzIsIDMyXSxcbiAgICAgICAgICAgICAgICAndCc6IFsyLCAzMl0sXG4gICAgICAgICAgICAgICAgJ3UnOiBbMiwgMzJdLFxuICAgICAgICAgICAgICAgICd2JzogWzIsIDMyXSxcbiAgICAgICAgICAgICAgICAneCc6IFsyLCAzMl0sXG4gICAgICAgICAgICAgICAgJ3AnOiBbMiwgMzJdLFxuICAgICAgICAgICAgICAgICdxJzogWzIsIDMyXSxcbiAgICAgICAgICAgICAgICAnYic6IFsyLCAzMl0sXG4gICAgICAgICAgICAgICAgJ3MnOiBbMiwgMzJdLFxuICAgICAgICAgICAgICAgICdtJzogWzIsIDMyXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcxMyc6IHtcbiAgICAgICAgICAgICAgICAnYSc6IFsyLCAzM10sXG4gICAgICAgICAgICAgICAgJ3InOiBbMiwgMzNdLFxuICAgICAgICAgICAgICAgICd0JzogWzIsIDMzXSxcbiAgICAgICAgICAgICAgICAndSc6IFsyLCAzM10sXG4gICAgICAgICAgICAgICAgJ3YnOiBbMiwgMzNdLFxuICAgICAgICAgICAgICAgICd4JzogWzIsIDMzXSxcbiAgICAgICAgICAgICAgICAncCc6IFsyLCAzM10sXG4gICAgICAgICAgICAgICAgJ3EnOiBbMiwgMzNdLFxuICAgICAgICAgICAgICAgICdiJzogWzIsIDMzXSxcbiAgICAgICAgICAgICAgICAncyc6IFsyLCAzM10sXG4gICAgICAgICAgICAgICAgJ20nOiBbMiwgMzNdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzE0Jzoge1xuICAgICAgICAgICAgICAgICdhJzogWzIsIDM0XSxcbiAgICAgICAgICAgICAgICAncic6IFsyLCAzNF0sXG4gICAgICAgICAgICAgICAgJ3QnOiBbMiwgMzRdLFxuICAgICAgICAgICAgICAgICd1JzogWzIsIDM0XSxcbiAgICAgICAgICAgICAgICAndic6IFsyLCAzNF0sXG4gICAgICAgICAgICAgICAgJ3gnOiBbMiwgMzRdLFxuICAgICAgICAgICAgICAgICdwJzogWzIsIDM0XSxcbiAgICAgICAgICAgICAgICAncSc6IFsyLCAzNF0sXG4gICAgICAgICAgICAgICAgJ2InOiBbMiwgMzRdLFxuICAgICAgICAgICAgICAgICdzJzogWzIsIDM0XSxcbiAgICAgICAgICAgICAgICAnbSc6IFsyLCAzNF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMTUnOiB7XG4gICAgICAgICAgICAgICAgJ2EnOiBbMiwgMzVdLFxuICAgICAgICAgICAgICAgICdyJzogWzIsIDM1XSxcbiAgICAgICAgICAgICAgICAndCc6IFsyLCAzNV0sXG4gICAgICAgICAgICAgICAgJ3UnOiBbMiwgMzVdLFxuICAgICAgICAgICAgICAgICd2JzogWzIsIDM1XSxcbiAgICAgICAgICAgICAgICAneCc6IFsyLCAzNV0sXG4gICAgICAgICAgICAgICAgJ3AnOiBbMiwgMzVdLFxuICAgICAgICAgICAgICAgICdxJzogWzIsIDM1XSxcbiAgICAgICAgICAgICAgICAnYic6IFsyLCAzNV0sXG4gICAgICAgICAgICAgICAgJ3MnOiBbMiwgMzVdLFxuICAgICAgICAgICAgICAgICdtJzogWzIsIDM1XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcxNic6IHtcbiAgICAgICAgICAgICAgICAnYSc6IFsyLCAzNl0sXG4gICAgICAgICAgICAgICAgJ3InOiBbMiwgMzZdLFxuICAgICAgICAgICAgICAgICd0JzogWzIsIDM2XSxcbiAgICAgICAgICAgICAgICAndSc6IFsyLCAzNl0sXG4gICAgICAgICAgICAgICAgJ3YnOiBbMiwgMzZdLFxuICAgICAgICAgICAgICAgICd4JzogWzIsIDM2XSxcbiAgICAgICAgICAgICAgICAncCc6IFsyLCAzNl0sXG4gICAgICAgICAgICAgICAgJ3EnOiBbMiwgMzZdLFxuICAgICAgICAgICAgICAgICdiJzogWzIsIDM2XSxcbiAgICAgICAgICAgICAgICAncyc6IFsyLCAzNl0sXG4gICAgICAgICAgICAgICAgJ20nOiBbMiwgMzZdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzE3Jzoge1xuICAgICAgICAgICAgICAgICdhJzogWzIsIDM5XSxcbiAgICAgICAgICAgICAgICAncic6IFsyLCAzOV0sXG4gICAgICAgICAgICAgICAgJ3QnOiBbMiwgMzldLFxuICAgICAgICAgICAgICAgICd1JzogWzIsIDM5XSxcbiAgICAgICAgICAgICAgICAndic6IFsyLCAzOV0sXG4gICAgICAgICAgICAgICAgJ3gnOiBbMiwgMzldLFxuICAgICAgICAgICAgICAgICdiJzogWzEsIHVuZGVmaW5lZCwgMV0sXG4gICAgICAgICAgICAgICAgJ20nOiBbMSwgdW5kZWZpbmVkLCAyXSxcbiAgICAgICAgICAgICAgICAncCc6IFsxLCB1bmRlZmluZWQsIDRdLFxuICAgICAgICAgICAgICAgICdxJzogWzEsIHVuZGVmaW5lZCwgNV0sXG4gICAgICAgICAgICAgICAgJ3MnOiBbMSwgdW5kZWZpbmVkLCA2XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcxOCc6IHtcbiAgICAgICAgICAgICAgICAnYSc6IFsyLCAzXSxcbiAgICAgICAgICAgICAgICAncic6IFsyLCAzXSxcbiAgICAgICAgICAgICAgICAndCc6IFsyLCAzXSxcbiAgICAgICAgICAgICAgICAndSc6IFsyLCAzXSxcbiAgICAgICAgICAgICAgICAndic6IFsyLCAzXSxcbiAgICAgICAgICAgICAgICAneCc6IFsyLCAzXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcxOSc6IHtcbiAgICAgICAgICAgICAgICAnYyc6IFsxLCB1bmRlZmluZWQsIDM2XSxcbiAgICAgICAgICAgICAgICAnZCc6IFsxLCB1bmRlZmluZWQsIDM3XSxcbiAgICAgICAgICAgICAgICAnZSc6IFsxLCB1bmRlZmluZWQsIDM4XSxcbiAgICAgICAgICAgICAgICAnZic6IFsxLCB1bmRlZmluZWQsIDM5XSxcbiAgICAgICAgICAgICAgICAnZyc6IFsxLCB1bmRlZmluZWQsIDQwXSxcbiAgICAgICAgICAgICAgICAnaCc6IFsxLCB1bmRlZmluZWQsIDQxXSxcbiAgICAgICAgICAgICAgICAnaSc6IFsxLCB1bmRlZmluZWQsIDQyXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcyMCc6IHtcbiAgICAgICAgICAgICAgICAnbCc6IFsyLCAyNl1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMjEnOiB7XG4gICAgICAgICAgICAgICAgJ2wnOiBbMiwgMjddXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzIyJzoge1xuICAgICAgICAgICAgICAgICdsJzogWzIsIDI4XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICcyMyc6IHtcbiAgICAgICAgICAgICAgICAnbCc6IFsyLCAyOV1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMjQnOiB7XG4gICAgICAgICAgICAgICAgJ2wnOiBbMiwgMzBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzI1Jzoge1xuICAgICAgICAgICAgICAgICdsJzogWzEsIHVuZGVmaW5lZCwgNDRdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzI2Jzoge1xuICAgICAgICAgICAgICAgICdrJzogWzEsIHVuZGVmaW5lZCwgNDVdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzI3Jzoge1xuICAgICAgICAgICAgICAgICdhJzogWzIsIDI0XSxcbiAgICAgICAgICAgICAgICAncic6IFsyLCAyNF0sXG4gICAgICAgICAgICAgICAgJ3QnOiBbMiwgMjRdLFxuICAgICAgICAgICAgICAgICd1JzogWzIsIDI0XSxcbiAgICAgICAgICAgICAgICAndic6IFsyLCAyNF0sXG4gICAgICAgICAgICAgICAgJ3gnOiBbMiwgMjRdLFxuICAgICAgICAgICAgICAgICdwJzogWzIsIDI0XSxcbiAgICAgICAgICAgICAgICAncSc6IFsyLCAyNF0sXG4gICAgICAgICAgICAgICAgJ2InOiBbMiwgMjRdLFxuICAgICAgICAgICAgICAgICdzJzogWzIsIDI0XSxcbiAgICAgICAgICAgICAgICAnbSc6IFsyLCAyNF0sXG4gICAgICAgICAgICAgICAgJ2wnOiBbMiwgMjRdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzI4Jzoge1xuICAgICAgICAgICAgICAgICdiJzogWzEsIHVuZGVmaW5lZCwgMV0sXG4gICAgICAgICAgICAgICAgJ20nOiBbMSwgdW5kZWZpbmVkLCAyXSxcbiAgICAgICAgICAgICAgICAnbic6IFsxLCB1bmRlZmluZWQsIDNdLFxuICAgICAgICAgICAgICAgICdwJzogWzEsIHVuZGVmaW5lZCwgNF0sXG4gICAgICAgICAgICAgICAgJ3EnOiBbMSwgdW5kZWZpbmVkLCA1XSxcbiAgICAgICAgICAgICAgICAncyc6IFsxLCB1bmRlZmluZWQsIDZdLFxuICAgICAgICAgICAgICAgICd3JzogWzEsIHVuZGVmaW5lZCwgN11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMjknOiB7XG4gICAgICAgICAgICAgICAgJ24nOiBbMiwgNV0sXG4gICAgICAgICAgICAgICAgJ3cnOiBbMiwgNV0sXG4gICAgICAgICAgICAgICAgJ3AnOiBbMiwgNV0sXG4gICAgICAgICAgICAgICAgJ3EnOiBbMiwgNV0sXG4gICAgICAgICAgICAgICAgJ2InOiBbMiwgNV0sXG4gICAgICAgICAgICAgICAgJ3MnOiBbMiwgNV0sXG4gICAgICAgICAgICAgICAgJ20nOiBbMiwgNV1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMzAnOiB7XG4gICAgICAgICAgICAgICAgJ24nOiBbMiwgNl0sXG4gICAgICAgICAgICAgICAgJ3cnOiBbMiwgNl0sXG4gICAgICAgICAgICAgICAgJ3AnOiBbMiwgNl0sXG4gICAgICAgICAgICAgICAgJ3EnOiBbMiwgNl0sXG4gICAgICAgICAgICAgICAgJ2InOiBbMiwgNl0sXG4gICAgICAgICAgICAgICAgJ3MnOiBbMiwgNl0sXG4gICAgICAgICAgICAgICAgJ20nOiBbMiwgNl1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMzEnOiB7XG4gICAgICAgICAgICAgICAgJ24nOiBbMiwgN10sXG4gICAgICAgICAgICAgICAgJ3cnOiBbMiwgN10sXG4gICAgICAgICAgICAgICAgJ3AnOiBbMiwgN10sXG4gICAgICAgICAgICAgICAgJ3EnOiBbMiwgN10sXG4gICAgICAgICAgICAgICAgJ2InOiBbMiwgN10sXG4gICAgICAgICAgICAgICAgJ3MnOiBbMiwgN10sXG4gICAgICAgICAgICAgICAgJ20nOiBbMiwgN11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMzInOiB7XG4gICAgICAgICAgICAgICAgJ24nOiBbMiwgOF0sXG4gICAgICAgICAgICAgICAgJ3cnOiBbMiwgOF0sXG4gICAgICAgICAgICAgICAgJ3AnOiBbMiwgOF0sXG4gICAgICAgICAgICAgICAgJ3EnOiBbMiwgOF0sXG4gICAgICAgICAgICAgICAgJ2InOiBbMiwgOF0sXG4gICAgICAgICAgICAgICAgJ3MnOiBbMiwgOF0sXG4gICAgICAgICAgICAgICAgJ20nOiBbMiwgOF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMzMnOiB7XG4gICAgICAgICAgICAgICAgJ2InOiBbMSwgdW5kZWZpbmVkLCAxXSxcbiAgICAgICAgICAgICAgICAnbSc6IFsxLCB1bmRlZmluZWQsIDJdLFxuICAgICAgICAgICAgICAgICduJzogWzEsIHVuZGVmaW5lZCwgM10sXG4gICAgICAgICAgICAgICAgJ3AnOiBbMSwgdW5kZWZpbmVkLCA0XSxcbiAgICAgICAgICAgICAgICAncSc6IFsxLCB1bmRlZmluZWQsIDVdLFxuICAgICAgICAgICAgICAgICdzJzogWzEsIHVuZGVmaW5lZCwgNl0sXG4gICAgICAgICAgICAgICAgJ3cnOiBbMSwgdW5kZWZpbmVkLCA3XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICczNCc6IHtcbiAgICAgICAgICAgICAgICAnYSc6IFsyLCA0MF0sXG4gICAgICAgICAgICAgICAgJ3InOiBbMiwgNDBdLFxuICAgICAgICAgICAgICAgICd0JzogWzIsIDQwXSxcbiAgICAgICAgICAgICAgICAndSc6IFsyLCA0MF0sXG4gICAgICAgICAgICAgICAgJ3YnOiBbMiwgNDBdLFxuICAgICAgICAgICAgICAgICd4JzogWzIsIDQwXSxcbiAgICAgICAgICAgICAgICAnYic6IFsxLCB1bmRlZmluZWQsIDFdLFxuICAgICAgICAgICAgICAgICdtJzogWzEsIHVuZGVmaW5lZCwgMl0sXG4gICAgICAgICAgICAgICAgJ3AnOiBbMSwgdW5kZWZpbmVkLCA0XSxcbiAgICAgICAgICAgICAgICAncSc6IFsxLCB1bmRlZmluZWQsIDVdLFxuICAgICAgICAgICAgICAgICdzJzogWzEsIHVuZGVmaW5lZCwgNl1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMzUnOiB7XG4gICAgICAgICAgICAgICAgJ2EnOiBbMiwgMzddLFxuICAgICAgICAgICAgICAgICdyJzogWzIsIDM3XSxcbiAgICAgICAgICAgICAgICAndCc6IFsyLCAzN10sXG4gICAgICAgICAgICAgICAgJ3UnOiBbMiwgMzddLFxuICAgICAgICAgICAgICAgICd2JzogWzIsIDM3XSxcbiAgICAgICAgICAgICAgICAneCc6IFsyLCAzN10sXG4gICAgICAgICAgICAgICAgJ3AnOiBbMiwgMzddLFxuICAgICAgICAgICAgICAgICdxJzogWzIsIDM3XSxcbiAgICAgICAgICAgICAgICAnYic6IFsyLCAzN10sXG4gICAgICAgICAgICAgICAgJ3MnOiBbMiwgMzddLFxuICAgICAgICAgICAgICAgICdtJzogWzIsIDM3XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICczNic6IHtcbiAgICAgICAgICAgICAgICAnYSc6IFsyLCAxOV0sXG4gICAgICAgICAgICAgICAgJ3InOiBbMiwgMTldLFxuICAgICAgICAgICAgICAgICd0JzogWzIsIDE5XSxcbiAgICAgICAgICAgICAgICAndSc6IFsyLCAxOV0sXG4gICAgICAgICAgICAgICAgJ3YnOiBbMiwgMTldLFxuICAgICAgICAgICAgICAgICd4JzogWzIsIDE5XSxcbiAgICAgICAgICAgICAgICAncCc6IFsyLCAxOV0sXG4gICAgICAgICAgICAgICAgJ3EnOiBbMiwgMTldLFxuICAgICAgICAgICAgICAgICdiJzogWzIsIDE5XSxcbiAgICAgICAgICAgICAgICAncyc6IFsyLCAxOV0sXG4gICAgICAgICAgICAgICAgJ20nOiBbMiwgMTldLFxuICAgICAgICAgICAgICAgICdsJzogWzIsIDE5XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICczNyc6IHtcbiAgICAgICAgICAgICAgICAnbic6IFsyLCAxN10sXG4gICAgICAgICAgICAgICAgJ28nOiBbMiwgMTddXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzM4Jzoge1xuICAgICAgICAgICAgICAgICduJzogWzIsIDE4XSxcbiAgICAgICAgICAgICAgICAnbyc6IFsyLCAxOF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnMzknOiB7XG4gICAgICAgICAgICAgICAgJ24nOiBbMiwgMTNdLFxuICAgICAgICAgICAgICAgICdvJzogWzIsIDEzXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICc0MCc6IHtcbiAgICAgICAgICAgICAgICAnbic6IFsyLCAxNF0sXG4gICAgICAgICAgICAgICAgJ28nOiBbMiwgMTRdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzQxJzoge1xuICAgICAgICAgICAgICAgICduJzogWzIsIDE1XSxcbiAgICAgICAgICAgICAgICAnbyc6IFsyLCAxNV1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnNDInOiB7XG4gICAgICAgICAgICAgICAgJ24nOiBbMiwgMTZdLFxuICAgICAgICAgICAgICAgICdvJzogWzIsIDE2XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICc0Myc6IHtcbiAgICAgICAgICAgICAgICAnbic6IFsxLCB1bmRlZmluZWQsIDQ4XSxcbiAgICAgICAgICAgICAgICAnbyc6IFsxLCB1bmRlZmluZWQsIDQ5XVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICc0NCc6IHtcbiAgICAgICAgICAgICAgICAnYSc6IFsyLCAyNV0sXG4gICAgICAgICAgICAgICAgJ3InOiBbMiwgMjVdLFxuICAgICAgICAgICAgICAgICd0JzogWzIsIDI1XSxcbiAgICAgICAgICAgICAgICAndSc6IFsyLCAyNV0sXG4gICAgICAgICAgICAgICAgJ3YnOiBbMiwgMjVdLFxuICAgICAgICAgICAgICAgICd4JzogWzIsIDI1XSxcbiAgICAgICAgICAgICAgICAncCc6IFsyLCAyNV0sXG4gICAgICAgICAgICAgICAgJ3EnOiBbMiwgMjVdLFxuICAgICAgICAgICAgICAgICdiJzogWzIsIDI1XSxcbiAgICAgICAgICAgICAgICAncyc6IFsyLCAyNV0sXG4gICAgICAgICAgICAgICAgJ20nOiBbMiwgMjVdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzQ1Jzoge1xuICAgICAgICAgICAgICAgICdsJzogWzEsIHVuZGVmaW5lZCwgNTFdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzQ2Jzoge1xuICAgICAgICAgICAgICAgICdhJzogWzIsIDJdLFxuICAgICAgICAgICAgICAgICdyJzogWzIsIDJdLFxuICAgICAgICAgICAgICAgICd0JzogWzEsIHVuZGVmaW5lZCwgMjldLFxuICAgICAgICAgICAgICAgICd1JzogWzEsIHVuZGVmaW5lZCwgMzBdLFxuICAgICAgICAgICAgICAgICd2JzogWzEsIHVuZGVmaW5lZCwgMzFdLFxuICAgICAgICAgICAgICAgICd4JzogWzEsIHVuZGVmaW5lZCwgMzJdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzQ3Jzoge1xuICAgICAgICAgICAgICAgICdhJzogWzIsIDRdLFxuICAgICAgICAgICAgICAgICdyJzogWzIsIDRdLFxuICAgICAgICAgICAgICAgICd0JzogWzIsIDRdLFxuICAgICAgICAgICAgICAgICd1JzogWzIsIDRdLFxuICAgICAgICAgICAgICAgICd2JzogWzIsIDRdLFxuICAgICAgICAgICAgICAgICd4JzogWzIsIDRdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJzQ4Jzoge1xuICAgICAgICAgICAgICAgICdjJzogWzIsIDIwXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICc0OSc6IHtcbiAgICAgICAgICAgICAgICAnYyc6IFsyLCAyMV1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnNTAnOiB7XG4gICAgICAgICAgICAgICAgJ2MnOiBbMSwgdW5kZWZpbmVkLCA1Ml1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnNTEnOiB7XG4gICAgICAgICAgICAgICAgJ2EnOiBbMiwgMjNdLFxuICAgICAgICAgICAgICAgICdyJzogWzIsIDIzXSxcbiAgICAgICAgICAgICAgICAndCc6IFsyLCAyM10sXG4gICAgICAgICAgICAgICAgJ3UnOiBbMiwgMjNdLFxuICAgICAgICAgICAgICAgICd2JzogWzIsIDIzXSxcbiAgICAgICAgICAgICAgICAneCc6IFsyLCAyM10sXG4gICAgICAgICAgICAgICAgJ3AnOiBbMiwgMjNdLFxuICAgICAgICAgICAgICAgICdxJzogWzIsIDIzXSxcbiAgICAgICAgICAgICAgICAnYic6IFsyLCAyM10sXG4gICAgICAgICAgICAgICAgJ3MnOiBbMiwgMjNdLFxuICAgICAgICAgICAgICAgICdtJzogWzIsIDIzXSxcbiAgICAgICAgICAgICAgICAnbCc6IFsyLCAyM11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnNTInOiB7XG4gICAgICAgICAgICAgICAgJ2EnOiBbMiwgMjJdLFxuICAgICAgICAgICAgICAgICdyJzogWzIsIDIyXSxcbiAgICAgICAgICAgICAgICAndCc6IFsyLCAyMl0sXG4gICAgICAgICAgICAgICAgJ3UnOiBbMiwgMjJdLFxuICAgICAgICAgICAgICAgICd2JzogWzIsIDIyXSxcbiAgICAgICAgICAgICAgICAneCc6IFsyLCAyMl0sXG4gICAgICAgICAgICAgICAgJ3AnOiBbMiwgMjJdLFxuICAgICAgICAgICAgICAgICdxJzogWzIsIDIyXSxcbiAgICAgICAgICAgICAgICAnYic6IFsyLCAyMl0sXG4gICAgICAgICAgICAgICAgJ3MnOiBbMiwgMjJdLFxuICAgICAgICAgICAgICAgICdtJzogWzIsIDIyXSxcbiAgICAgICAgICAgICAgICAnbCc6IFsyLCAyMl1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgcGFyc2VyLnBhcnNlID0gZnVuY3Rpb24gcGFyc2UoaW5wdXQsIGZpbGVuYW1lKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgICAgICAgIGxleGVyID0gc2VsZi5sZXhlcixcbiAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgc3ltYm9sLFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgdGFibGUgPSBzZWxmLnRhYmxlLFxuICAgICAgICAgICAgZ290b3MgPSB0YWJsZS5nb3RvcyxcbiAgICAgICAgICAgIHRhYmxlQWN0aW9uID0gdGFibGUuYWN0aW9uLFxuICAgICAgICAgICAgcHJvZHVjdGlvbnMgPSBzZWxmLnByb2R1Y3Rpb25zLFxuICAgICAgICAgICAgdmFsdWVTdGFjayA9IFtudWxsXSxcbiAgICAgICAgICAgIC8vIGZvciBkZWJ1ZyBpbmZvXG4gICAgICAgICAgICBwcmVmaXggPSBmaWxlbmFtZSA/ICgnaW4gZmlsZTogJyArIGZpbGVuYW1lICsgJyAnKSA6ICcnLFxuICAgICAgICAgICAgc3RhY2sgPSBbMF07XG5cbiAgICAgICAgbGV4ZXIucmVzZXRJbnB1dChpbnB1dCk7XG5cbiAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgIC8vIHJldHJpZXZlIHN0YXRlIG51bWJlciBmcm9tIHRvcCBvZiBzdGFja1xuICAgICAgICAgICAgc3RhdGUgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgICAgICAgICAgaWYgKCFzeW1ib2wpIHtcbiAgICAgICAgICAgICAgICBzeW1ib2wgPSBsZXhlci5sZXgoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN5bWJvbCkge1xuICAgICAgICAgICAgICAgIC8vIHJlYWQgYWN0aW9uIGZvciBjdXJyZW50IHN0YXRlIGFuZCBmaXJzdCBpbnB1dFxuICAgICAgICAgICAgICAgIGFjdGlvbiA9IHRhYmxlQWN0aW9uW3N0YXRlXSAmJiB0YWJsZUFjdGlvbltzdGF0ZV1bc3ltYm9sXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I7XG4gICAgICAgICAgICAgICAgLy8jSlNDT1ZFUkFHRV9JRlxuICAgICAgICAgICAgICAgIGlmICh0YWJsZUFjdGlvbltzdGF0ZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgc3ltYm9sRm9yU3RhdGUgaW4gdGFibGVBY3Rpb25bc3RhdGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKHNlbGYubGV4ZXIubWFwUmV2ZXJzZVN5bWJvbChzeW1ib2xGb3JTdGF0ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVycm9yID0gcHJlZml4ICsgJ3N5bnRheCBlcnJvciBhdCBsaW5lICcgKyBsZXhlci5saW5lTnVtYmVyICtcbiAgICAgICAgICAgICAgICAgICAgJzpcXG4nICsgbGV4ZXIuc2hvd0RlYnVnSW5mbygpICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbicgKyAnZXhwZWN0ICcgKyBleHBlY3RlZC5qb2luKCcsICcpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uW0dyYW1tYXJDb25zdC5UWVBFX0lOREVYXSkge1xuICAgICAgICAgICAgY2FzZSBHcmFtbWFyQ29uc3QuU0hJRlRfVFlQRTpcbiAgICAgICAgICAgICAgICBzdGFjay5wdXNoKHN5bWJvbCk7XG5cbiAgICAgICAgICAgICAgICB2YWx1ZVN0YWNrLnB1c2gobGV4ZXIudGV4dCk7XG5cbiAgICAgICAgICAgICAgICAvLyBwdXNoIHN0YXRlXG4gICAgICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bR3JhbW1hckNvbnN0LlRPX0lOREVYXSk7XG5cbiAgICAgICAgICAgICAgICAvLyBhbGxvdyB0byByZWFkIG1vcmVcbiAgICAgICAgICAgICAgICBzeW1ib2wgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgR3JhbW1hckNvbnN0LlJFRFVDRV9UWVBFOlxuICAgICAgICAgICAgICAgIHZhciBwcm9kdWN0aW9uID0gcHJvZHVjdGlvbnNbYWN0aW9uW0dyYW1tYXJDb25zdC5QUk9EVUNUSU9OX0lOREVYXV0sXG4gICAgICAgICAgICAgICAgICAgIHJlZHVjZWRTeW1ib2wgPSBwcm9kdWN0aW9uLnN5bWJvbCB8fCBwcm9kdWN0aW9uWzBdLFxuICAgICAgICAgICAgICAgICAgICByZWR1Y2VkQWN0aW9uID0gcHJvZHVjdGlvbi5hY3Rpb24gfHwgcHJvZHVjdGlvblsyXSxcbiAgICAgICAgICAgICAgICAgICAgcmVkdWNlZFJocyA9IHByb2R1Y3Rpb24ucmhzIHx8IHByb2R1Y3Rpb25bMV0sXG4gICAgICAgICAgICAgICAgICAgIGxlbiA9IHJlZHVjZWRSaHMubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBpID0gMCxcbiAgICAgICAgICAgICAgICAgICAgcmV0LFxuICAgICAgICAgICAgICAgICAgICAkJCA9IHZhbHVlU3RhY2tbdmFsdWVTdGFjay5sZW5ndGggLSBsZW5dOyAvLyBkZWZhdWx0IHRvICQkID0gJDFcblxuICAgICAgICAgICAgICAgIHJldCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgIHNlbGYuJCQgPSAkJDtcblxuICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZlsnJCcgKyAobGVuIC0gaSldID0gdmFsdWVTdGFja1t2YWx1ZVN0YWNrLmxlbmd0aCAtIDEgLSBpXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmVkdWNlZEFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICByZXQgPSByZWR1Y2VkQWN0aW9uLmNhbGwoc2VsZik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICQkID0gcmV0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICQkID0gc2VsZi4kJDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgICAgdmFsdWVTdGFjayA9IHZhbHVlU3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuXG4gICAgICAgICAgICAgICAgc3RhY2sucHVzaChyZWR1Y2VkU3ltYm9sKTtcblxuICAgICAgICAgICAgICAgIHZhbHVlU3RhY2sucHVzaCgkJCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgbmV3U3RhdGUgPSBnb3Rvc1tzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuXG4gICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBHcmFtbWFyQ29uc3QuQUNDRVBUX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gcGFyc2VyO1xufSkoKTtcbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gcGFyc2VyO1xufSIsIi8qKlxuICogQGlnbm9yZVxuICogY3NzMyBzZWxlY3RvciBlbmdpbmUgZm9yIGllNi04XG4gKiBAYXV0aG9yIHlpbWluZ2hlQGdtYWlsLmNvbVxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi9xdWVyeS1zZWxlY3Rvci91dGlsJyk7XG52YXIgcGFyc2VyID0gcmVxdWlyZSgnLi9xdWVyeS1zZWxlY3Rvci9wYXJzZXInKTtcblxudmFyIEVYUEFORE9fU0VMRUNUT1JfS0VZID0gJ19rc19kYXRhX3NlbGVjdG9yX2lkXycsXG4gIGNhY2hlcyA9IHt9LFxuICBpc0NvbnRleHRYTUwsXG4gIHV1aWQgPSAwLFxuICBzdWJNYXRjaGVzQ2FjaGUgPSB7fSxcbiAgZ2V0QXR0ciA9IGZ1bmN0aW9uIChlbCwgbmFtZSkge1xuICAgIGlmIChpc0NvbnRleHRYTUwpIHtcbiAgICAgIHJldHVybiB1dGlsLmdldFNpbXBsZUF0dHIoZWwsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdXRpbC5hdHRyKGVsLCBuYW1lKTtcbiAgICB9XG4gIH0sXG4gIGhhc1NpbmdsZUNsYXNzID0gdXRpbC5oYXNTaW5nbGVDbGFzcyxcbiAgaXNUYWcgPSB1dGlsLmlzVGFnLFxuICBhTlBsdXNCID0gL14oKFsrLV0/KD86XFxkKyk/KT9uKT8oWystXT9cXGQrKT8kLztcblxuLy8gQ1NTIGVzY2FwZXMgaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI2VzY2FwZWQtY2hhcmFjdGVyc1xudmFyIHVuZXNjYXBlID0gL1xcXFwoW1xcZGEtZkEtRl17MSw2fVtcXHgyMFxcdFxcclxcblxcZl0/fC4pL2csXG4gIHVuZXNjYXBlRm4gPSBmdW5jdGlvbiAoXywgZXNjYXBlZCkge1xuICAgIHZhciBoaWdoID0gJzB4JyArIGVzY2FwZWQgLSAweDEwMDAwO1xuICAgIC8vIE5hTiBtZWFucyBub24tY29kZXBvaW50XG4gICAgcmV0dXJuIGlzTmFOKGhpZ2gpID9cbiAgICAgIGVzY2FwZWQgOlxuICAgICAgLy8gQk1QIGNvZGVwb2ludFxuICAgICAgaGlnaCA8IDAgP1xuICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKGhpZ2ggKyAweDEwMDAwKSA6XG4gICAgICAgIC8vIFN1cHBsZW1lbnRhbCBQbGFuZSBjb2RlcG9pbnQgKHN1cnJvZ2F0ZSBwYWlyKVxuICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKGhpZ2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCk7XG4gIH07XG5cbnZhciBtYXRjaEV4cHI7XG5cbnZhciBwc2V1ZG9GbkV4cHIgPSB7XG4gICdudGgtY2hpbGQnOiBmdW5jdGlvbiAoZWwsIHBhcmFtKSB7XG4gICAgdmFyIGFiID0gZ2V0QWIocGFyYW0pLFxuICAgICAgYSA9IGFiLmEsXG4gICAgICBiID0gYWIuYjtcbiAgICBpZiAoYSA9PT0gMCAmJiBiID09PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgdmFyIGluZGV4ID0gMCxcbiAgICAgIHBhcmVudCA9IGVsLnBhcmVudE5vZGU7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgdmFyIGNoaWxkTm9kZXMgPSBwYXJlbnQuY2hpbGROb2RlcyxcbiAgICAgICAgY291bnQgPSAwLFxuICAgICAgICBjaGlsZCxcbiAgICAgICAgcmV0LFxuICAgICAgICBsZW4gPSBjaGlsZE5vZGVzLmxlbmd0aDtcbiAgICAgIGZvciAoOyBjb3VudCA8IGxlbjsgY291bnQrKykge1xuICAgICAgICBjaGlsZCA9IGNoaWxkTm9kZXNbY291bnRdO1xuICAgICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgIHJldCA9IG1hdGNoSW5kZXhCeUFiKGluZGV4LCBhLCBiLCBjaGlsZCA9PT0gZWwpO1xuICAgICAgICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH0sXG4gICdudGgtbGFzdC1jaGlsZCc6IGZ1bmN0aW9uIChlbCwgcGFyYW0pIHtcbiAgICB2YXIgYWIgPSBnZXRBYihwYXJhbSksXG4gICAgICBhID0gYWIuYSxcbiAgICAgIGIgPSBhYi5iO1xuICAgIGlmIChhID09PSAwICYmIGIgPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSAwLFxuICAgICAgcGFyZW50ID0gZWwucGFyZW50Tm9kZTtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICB2YXIgY2hpbGROb2RlcyA9IHBhcmVudC5jaGlsZE5vZGVzLFxuICAgICAgICBsZW4gPSBjaGlsZE5vZGVzLmxlbmd0aCxcbiAgICAgICAgY291bnQgPSBsZW4gLSAxLFxuICAgICAgICBjaGlsZCxcbiAgICAgICAgcmV0O1xuICAgICAgZm9yICg7IGNvdW50ID49IDA7IGNvdW50LS0pIHtcbiAgICAgICAgY2hpbGQgPSBjaGlsZE5vZGVzW2NvdW50XTtcbiAgICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICByZXQgPSBtYXRjaEluZGV4QnlBYihpbmRleCwgYSwgYiwgY2hpbGQgPT09IGVsKTtcbiAgICAgICAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9LFxuICAnbnRoLW9mLXR5cGUnOiBmdW5jdGlvbiAoZWwsIHBhcmFtKSB7XG4gICAgdmFyIGFiID0gZ2V0QWIocGFyYW0pLFxuICAgICAgYSA9IGFiLmEsXG4gICAgICBiID0gYWIuYjtcbiAgICBpZiAoYSA9PT0gMCAmJiBiID09PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgdmFyIGluZGV4ID0gMCxcbiAgICAgIHBhcmVudCA9IGVsLnBhcmVudE5vZGU7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgdmFyIGNoaWxkTm9kZXMgPSBwYXJlbnQuY2hpbGROb2RlcyxcbiAgICAgICAgZWxUeXBlID0gZWwudGFnTmFtZSxcbiAgICAgICAgY291bnQgPSAwLFxuICAgICAgICBjaGlsZCxcbiAgICAgICAgcmV0LFxuICAgICAgICBsZW4gPSBjaGlsZE5vZGVzLmxlbmd0aDtcbiAgICAgIGZvciAoOyBjb3VudCA8IGxlbjsgY291bnQrKykge1xuICAgICAgICBjaGlsZCA9IGNoaWxkTm9kZXNbY291bnRdO1xuICAgICAgICBpZiAoY2hpbGQudGFnTmFtZSA9PT0gZWxUeXBlKSB7XG4gICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICByZXQgPSBtYXRjaEluZGV4QnlBYihpbmRleCwgYSwgYiwgY2hpbGQgPT09IGVsKTtcbiAgICAgICAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9LFxuICAnbnRoLWxhc3Qtb2YtdHlwZSc6IGZ1bmN0aW9uIChlbCwgcGFyYW0pIHtcbiAgICB2YXIgYWIgPSBnZXRBYihwYXJhbSksXG4gICAgICBhID0gYWIuYSxcbiAgICAgIGIgPSBhYi5iO1xuICAgIGlmIChhID09PSAwICYmIGIgPT09IDApIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICB2YXIgaW5kZXggPSAwLFxuICAgICAgcGFyZW50ID0gZWwucGFyZW50Tm9kZTtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICB2YXIgY2hpbGROb2RlcyA9IHBhcmVudC5jaGlsZE5vZGVzLFxuICAgICAgICBsZW4gPSBjaGlsZE5vZGVzLmxlbmd0aCxcbiAgICAgICAgZWxUeXBlID0gZWwudGFnTmFtZSxcbiAgICAgICAgY291bnQgPSBsZW4gLSAxLFxuICAgICAgICBjaGlsZCxcbiAgICAgICAgcmV0O1xuICAgICAgZm9yICg7IGNvdW50ID49IDA7IGNvdW50LS0pIHtcbiAgICAgICAgY2hpbGQgPSBjaGlsZE5vZGVzW2NvdW50XTtcbiAgICAgICAgaWYgKGNoaWxkLnRhZ05hbWUgPT09IGVsVHlwZSkge1xuICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgcmV0ID0gbWF0Y2hJbmRleEJ5QWIoaW5kZXgsIGEsIGIsIGNoaWxkID09PSBlbCk7XG4gICAgICAgICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfSxcbiAgbGFuZzogZnVuY3Rpb24gKGVsLCBsYW5nKSB7XG4gICAgdmFyIGVsTGFuZztcbiAgICBsYW5nID0gdW5Fc2NhcGUobGFuZy50b0xvd2VyQ2FzZSgpKTtcbiAgICBkbyB7XG4gICAgICBpZiAoKGVsTGFuZyA9IChpc0NvbnRleHRYTUwgP1xuICAgICAgICBlbC5nZXRBdHRyaWJ1dGUoJ3htbDpsYW5nJykgfHwgZWwuZ2V0QXR0cmlidXRlKCdsYW5nJykgOlxuICAgICAgICAgIGVsLmxhbmcpKSkge1xuICAgICAgICBlbExhbmcgPSBlbExhbmcudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGVsTGFuZyA9PT0gbGFuZyB8fCBlbExhbmcuaW5kZXhPZihsYW5nICsgJy0nKSA9PT0gMDtcbiAgICAgIH1cbiAgICB9IHdoaWxlICgoZWwgPSBlbC5wYXJlbnROb2RlKSAmJiBlbC5ub2RlVHlwZSA9PT0gMSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICBub3Q6IGZ1bmN0aW9uIChlbCwgbmVnYXRpb25BcmcpIHtcbiAgICByZXR1cm4gIW1hdGNoRXhwcltuZWdhdGlvbkFyZy50XShlbCwgbmVnYXRpb25BcmcudmFsdWUpO1xuICB9XG59O1xuXG52YXIgcHNldWRvSWRlbnRFeHByID0ge1xuICBlbXB0eTogZnVuY3Rpb24gKGVsKSB7XG4gICAgdmFyIGNoaWxkTm9kZXMgPSBlbC5jaGlsZE5vZGVzLFxuICAgICAgaW5kZXggPSAwLFxuICAgICAgbGVuID0gY2hpbGROb2Rlcy5sZW5ndGggLSAxLFxuICAgICAgY2hpbGQsXG4gICAgICBub2RlVHlwZTtcbiAgICBmb3IgKDsgaW5kZXggPCBsZW47IGluZGV4KyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGROb2Rlc1tpbmRleF07XG4gICAgICBub2RlVHlwZSA9IGNoaWxkLm5vZGVUeXBlO1xuICAgICAgLy8gb25seSBlbGVtZW50IG5vZGVzIGFuZCBjb250ZW50IG5vZGVzXG4gICAgICAvLyAoc3VjaCBhcyBEb20gW0RvbS1MRVZFTC0zLUNPUkVdIHRleHQgbm9kZXMsXG4gICAgICAvLyBDREFUQSBub2RlcywgYW5kIGVudGl0eSByZWZlcmVuY2VzXG4gICAgICBpZiAobm9kZVR5cGUgPT09IDEgfHwgbm9kZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgfHwgbm9kZVR5cGUgPT09IDUpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAxO1xuICB9LFxuICByb290OiBmdW5jdGlvbiAoZWwpIHtcbiAgICBpZiAoZWwubm9kZVR5cGUgPT09IDkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZWwub3duZXJEb2N1bWVudCAmJlxuICAgICAgZWwgPT09IGVsLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9LFxuICAnZmlyc3QtY2hpbGQnOiBmdW5jdGlvbiAoZWwpIHtcbiAgICByZXR1cm4gcHNldWRvRm5FeHByWydudGgtY2hpbGQnXShlbCwgMSk7XG4gIH0sXG4gICdsYXN0LWNoaWxkJzogZnVuY3Rpb24gKGVsKSB7XG4gICAgcmV0dXJuIHBzZXVkb0ZuRXhwclsnbnRoLWxhc3QtY2hpbGQnXShlbCwgMSk7XG4gIH0sXG4gICdmaXJzdC1vZi10eXBlJzogZnVuY3Rpb24gKGVsKSB7XG4gICAgcmV0dXJuIHBzZXVkb0ZuRXhwclsnbnRoLW9mLXR5cGUnXShlbCwgMSk7XG4gIH0sXG4gICdsYXN0LW9mLXR5cGUnOiBmdW5jdGlvbiAoZWwpIHtcbiAgICByZXR1cm4gcHNldWRvRm5FeHByWydudGgtbGFzdC1vZi10eXBlJ10oZWwsIDEpO1xuICB9LFxuICAnb25seS1jaGlsZCc6IGZ1bmN0aW9uIChlbCkge1xuICAgIHJldHVybiBwc2V1ZG9JZGVudEV4cHJbJ2ZpcnN0LWNoaWxkJ10oZWwpICYmXG4gICAgICBwc2V1ZG9JZGVudEV4cHJbJ2xhc3QtY2hpbGQnXShlbCk7XG4gIH0sXG4gICdvbmx5LW9mLXR5cGUnOiBmdW5jdGlvbiAoZWwpIHtcbiAgICByZXR1cm4gcHNldWRvSWRlbnRFeHByWydmaXJzdC1vZi10eXBlJ10oZWwpICYmXG4gICAgICBwc2V1ZG9JZGVudEV4cHJbJ2xhc3Qtb2YtdHlwZSddKGVsKTtcbiAgfSxcbiAgZm9jdXM6IGZ1bmN0aW9uIChlbCkge1xuICAgIHZhciBkb2MgPSBlbC5vd25lckRvY3VtZW50O1xuICAgIHJldHVybiBkb2MgJiYgZWwgPT09IGRvYy5hY3RpdmVFbGVtZW50ICYmXG4gICAgICAoIWRvYy5oYXNGb2N1cyB8fCBkb2MuaGFzRm9jdXMoKSkgJiYgISEoZWwudHlwZSB8fCBlbC5ocmVmIHx8IGVsLnRhYkluZGV4ID49IDApO1xuICB9LFxuICB0YXJnZXQ6IGZ1bmN0aW9uIChlbCkge1xuICAgIHZhciBoYXNoID0gbG9jYXRpb24uaGFzaDtcbiAgICByZXR1cm4gaGFzaCAmJiBoYXNoLnNsaWNlKDEpID09PSBnZXRBdHRyKGVsLCAnaWQnKTtcbiAgfSxcbiAgZW5hYmxlZDogZnVuY3Rpb24gKGVsKSB7XG4gICAgcmV0dXJuICFlbC5kaXNhYmxlZDtcbiAgfSxcbiAgZGlzYWJsZWQ6IGZ1bmN0aW9uIChlbCkge1xuICAgIHJldHVybiBlbC5kaXNhYmxlZDtcbiAgfSxcbiAgY2hlY2tlZDogZnVuY3Rpb24gKGVsKSB7XG4gICAgdmFyIG5vZGVOYW1lID0gZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gKG5vZGVOYW1lID09PSAnaW5wdXQnICYmIGVsLmNoZWNrZWQpIHx8XG4gICAgICAobm9kZU5hbWUgPT09ICdvcHRpb24nICYmIGVsLnNlbGVjdGVkKTtcbiAgfVxufTtcblxudmFyIGF0dHJpYnV0ZUV4cHIgPSB7XG4gICd+PSc6IGZ1bmN0aW9uIChlbFZhbHVlLCB2YWx1ZSkge1xuICAgIGlmICghdmFsdWUgfHwgdmFsdWUuaW5kZXhPZignICcpID4gLTEpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICByZXR1cm4gKCcgJyArIGVsVmFsdWUgKyAnICcpLmluZGV4T2YoJyAnICsgdmFsdWUgKyAnICcpICE9PSAtMTtcbiAgfSxcbiAgJ3w9JzogZnVuY3Rpb24gKGVsVmFsdWUsIHZhbHVlKSB7XG4gICAgcmV0dXJuICgnICcgKyBlbFZhbHVlKS5pbmRleE9mKCcgJyArIHZhbHVlICsgJy0nKSAhPT0gLTE7XG4gIH0sXG4gICdePSc6IGZ1bmN0aW9uIChlbFZhbHVlLCB2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiB1dGlsLnN0YXJ0c1dpdGgoZWxWYWx1ZSwgdmFsdWUpO1xuICB9LFxuICAnJD0nOiBmdW5jdGlvbiAoZWxWYWx1ZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdXRpbC5lbmRzV2l0aChlbFZhbHVlLCB2YWx1ZSk7XG4gIH0sXG4gICcqPSc6IGZ1bmN0aW9uIChlbFZhbHVlLCB2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiBlbFZhbHVlLmluZGV4T2YodmFsdWUpICE9PSAtMTtcbiAgfSxcbiAgJz0nOiBmdW5jdGlvbiAoZWxWYWx1ZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gZWxWYWx1ZSA9PT0gdmFsdWU7XG4gIH1cbn07XG5cbnZhciByZWxhdGl2ZUV4cHIgPSB7XG4gICc+Jzoge1xuICAgIGRpcjogJ3BhcmVudE5vZGUnLFxuICAgIGltbWVkaWF0ZTogMVxuICB9LFxuICAnICc6IHtcbiAgICBkaXI6ICdwYXJlbnROb2RlJ1xuICB9LFxuICAnKyc6IHtcbiAgICBkaXI6ICdwcmV2aW91c1NpYmxpbmcnLFxuICAgIGltbWVkaWF0ZTogMVxuICB9LFxuICAnfic6IHtcbiAgICBkaXI6ICdwcmV2aW91c1NpYmxpbmcnXG4gIH1cbn07XG5cbm1hdGNoRXhwciA9IHtcbiAgdGFnOiBpc1RhZyxcbiAgY2xzOiBoYXNTaW5nbGVDbGFzcyxcbiAgaWQ6IGZ1bmN0aW9uIChlbCwgdmFsdWUpIHtcbiAgICByZXR1cm4gZ2V0QXR0cihlbCwgJ2lkJykgPT09IHZhbHVlO1xuICB9LFxuICBhdHRyaWI6IGZ1bmN0aW9uIChlbCwgdmFsdWUpIHtcbiAgICB2YXIgbmFtZSA9IHZhbHVlLmlkZW50O1xuICAgIGlmICghaXNDb250ZXh0WE1MKSB7XG4gICAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICB2YXIgZWxWYWx1ZSA9IGdldEF0dHIoZWwsIG5hbWUpO1xuICAgIHZhciBtYXRjaCA9IHZhbHVlLm1hdGNoO1xuICAgIGlmICghbWF0Y2ggJiYgZWxWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKG1hdGNoKSB7XG4gICAgICBpZiAoZWxWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgICAgdmFyIG1hdGNoRm4gPSBhdHRyaWJ1dGVFeHByW21hdGNoXTtcbiAgICAgIGlmIChtYXRjaEZuKSB7XG4gICAgICAgIHJldHVybiBtYXRjaEZuKGVsVmFsdWUgKyAnJywgdmFsdWUudmFsdWUgKyAnJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9LFxuICBwc2V1ZG86IGZ1bmN0aW9uIChlbCwgdmFsdWUpIHtcbiAgICB2YXIgZm4sIGZuU3RyLCBpZGVudDtcbiAgICBpZiAoKGZuU3RyID0gdmFsdWUuZm4pKSB7XG4gICAgICBpZiAoIShmbiA9IHBzZXVkb0ZuRXhwcltmblN0cl0pKSB7XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignU3ludGF4IGVycm9yOiBub3Qgc3VwcG9ydCBwc2V1ZG86ICcgKyBmblN0cik7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm4oZWwsIHZhbHVlLnBhcmFtKTtcbiAgICB9XG4gICAgaWYgKChpZGVudCA9IHZhbHVlLmlkZW50KSkge1xuICAgICAgaWYgKCFwc2V1ZG9JZGVudEV4cHJbaWRlbnRdKSB7XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignU3ludGF4IGVycm9yOiBub3Qgc3VwcG9ydCBwc2V1ZG86ICcgKyBpZGVudCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHNldWRvSWRlbnRFeHByW2lkZW50XShlbCk7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG5mdW5jdGlvbiB1bkVzY2FwZShzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKHVuZXNjYXBlLCB1bmVzY2FwZUZuKTtcbn1cblxucGFyc2VyLmxleGVyLnl5ID0ge1xuICB0cmltOiB1dGlsLnRyaW0sXG4gIHVuRXNjYXBlOiB1bkVzY2FwZSxcbiAgdW5Fc2NhcGVTdHI6IGZ1bmN0aW9uIChzdHIpIHtcbiAgICByZXR1cm4gdGhpcy51bkVzY2FwZShzdHIuc2xpY2UoMSwgLTEpKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gcmVzZXRTdGF0dXMoKSB7XG4gIHN1Yk1hdGNoZXNDYWNoZSA9IHt9O1xufVxuXG5mdW5jdGlvbiBkaXIoZWwsIGRpcmVjdGlvbikge1xuICBkbyB7XG4gICAgZWwgPSBlbFtkaXJlY3Rpb25dO1xuICB9IHdoaWxlIChlbCAmJiBlbC5ub2RlVHlwZSAhPT0gMSk7XG4gIHJldHVybiBlbDtcbn1cblxuZnVuY3Rpb24gZ2V0QWIocGFyYW0pIHtcbiAgdmFyIGEgPSAwLFxuICAgIG1hdGNoLFxuICAgIGIgPSAwO1xuICBpZiAodHlwZW9mIHBhcmFtID09PSAnbnVtYmVyJykge1xuICAgIGIgPSBwYXJhbTtcbiAgfSBlbHNlIGlmIChwYXJhbSA9PT0gJ29kZCcpIHtcbiAgICBhID0gMjtcbiAgICBiID0gMTtcbiAgfSBlbHNlIGlmIChwYXJhbSA9PT0gJ2V2ZW4nKSB7XG4gICAgYSA9IDI7XG4gICAgYiA9IDA7XG4gIH0gZWxzZSBpZiAoKG1hdGNoID0gcGFyYW0ucmVwbGFjZSgvXFxzL2csICcnKS5tYXRjaChhTlBsdXNCKSkpIHtcbiAgICBpZiAobWF0Y2hbMV0pIHtcbiAgICAgIGEgPSBwYXJzZUludChtYXRjaFsyXSwgMTApO1xuICAgICAgaWYgKGlzTmFOKGEpKSB7XG4gICAgICAgIGlmIChtYXRjaFsyXSA9PT0gJy0nKSB7XG4gICAgICAgICAgYSA9IC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGEgPSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSAwO1xuICAgIH1cbiAgICBiID0gcGFyc2VJbnQobWF0Y2hbM10sIDEwKSB8fCAwO1xuICB9XG4gIHJldHVybiB7XG4gICAgYTogYSxcbiAgICBiOiBiXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1hdGNoSW5kZXhCeUFiKGluZGV4LCBhLCBiLCBlcSkge1xuICBpZiAoYSA9PT0gMCkge1xuICAgIGlmIChpbmRleCA9PT0gYikge1xuICAgICAgcmV0dXJuIGVxO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoKGluZGV4IC0gYikgLyBhID49IDAgJiYgKGluZGV4IC0gYikgJSBhID09PSAwICYmIGVxKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaXNYTUwoZWxlbSkge1xuICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZWxlbSAmJiAoZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0pLmRvY3VtZW50RWxlbWVudDtcbiAgcmV0dXJuIGRvY3VtZW50RWxlbWVudCA/IGRvY3VtZW50RWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnaHRtbCcgOiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlcyhzdHIsIHNlZWRzKSB7XG4gIHJldHVybiBzZWxlY3Qoc3RyLCBudWxsLCBzZWVkcyk7XG59XG5cbmZ1bmN0aW9uIHNpbmdsZU1hdGNoKGVsLCBtYXRjaCkge1xuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKCFlbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChlbC5ub2RlVHlwZSA9PT0gOSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBtYXRjaGVkID0gMSxcbiAgICBtYXRjaFN1ZmZpeCA9IG1hdGNoLnN1ZmZpeCxcbiAgICBtYXRjaFN1ZmZpeExlbixcbiAgICBtYXRjaFN1ZmZpeEluZGV4O1xuXG4gIGlmIChtYXRjaC50ID09PSAndGFnJykge1xuICAgIG1hdGNoZWQgJj0gbWF0Y2hFeHByLnRhZyhlbCwgbWF0Y2gudmFsdWUpO1xuICB9XG5cbiAgaWYgKG1hdGNoZWQgJiYgbWF0Y2hTdWZmaXgpIHtcbiAgICBtYXRjaFN1ZmZpeExlbiA9IG1hdGNoU3VmZml4Lmxlbmd0aDtcbiAgICBtYXRjaFN1ZmZpeEluZGV4ID0gMDtcbiAgICBmb3IgKDsgbWF0Y2hlZCAmJiBtYXRjaFN1ZmZpeEluZGV4IDwgbWF0Y2hTdWZmaXhMZW47IG1hdGNoU3VmZml4SW5kZXgrKykge1xuICAgICAgdmFyIHNpbmdsZU1hdGNoU3VmZml4ID0gbWF0Y2hTdWZmaXhbbWF0Y2hTdWZmaXhJbmRleF0sXG4gICAgICAgIHNpbmdsZU1hdGNoU3VmZml4VHlwZSA9IHNpbmdsZU1hdGNoU3VmZml4LnQ7XG4gICAgICBpZiAobWF0Y2hFeHByW3NpbmdsZU1hdGNoU3VmZml4VHlwZV0pIHtcbiAgICAgICAgbWF0Y2hlZCAmPSBtYXRjaEV4cHJbc2luZ2xlTWF0Y2hTdWZmaXhUeXBlXShlbCwgc2luZ2xlTWF0Y2hTdWZmaXgudmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYXRjaGVkO1xufVxuXG4vLyBtYXRjaCBieSBhZGphY2VudCBpbW1lZGlhdGUgc2luZ2xlIHNlbGVjdG9yIG1hdGNoXG5mdW5jdGlvbiBtYXRjaEltbWVkaWF0ZShlbCwgbWF0Y2gpIHtcbiAgdmFyIG1hdGNoZWQgPSAxLFxuICAgIHN0YXJ0RWwgPSBlbCxcbiAgICByZWxhdGl2ZU9wLFxuICAgIHN0YXJ0TWF0Y2ggPSBtYXRjaDtcblxuICBkbyB7XG4gICAgbWF0Y2hlZCAmPSBzaW5nbGVNYXRjaChlbCwgbWF0Y2gpO1xuICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICAvLyBhZHZhbmNlXG4gICAgICBtYXRjaCA9IG1hdGNoICYmIG1hdGNoLnByZXY7XG4gICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmVsYXRpdmVPcCA9IHJlbGF0aXZlRXhwclttYXRjaC5uZXh0Q29tYmluYXRvcl07XG4gICAgICBlbCA9IGRpcihlbCwgcmVsYXRpdmVPcC5kaXIpO1xuICAgICAgaWYgKCFyZWxhdGl2ZU9wLmltbWVkaWF0ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC8vIGFkdmFuY2UgZm9yIG5vbi1pbW1lZGlhdGVcbiAgICAgICAgICBlbDogZWwsXG4gICAgICAgICAgbWF0Y2g6IG1hdGNoXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbGF0aXZlT3AgPSByZWxhdGl2ZUV4cHJbbWF0Y2gubmV4dENvbWJpbmF0b3JdO1xuICAgICAgaWYgKHJlbGF0aXZlT3AuaW1tZWRpYXRlKSB7XG4gICAgICAgIC8vIHJldHJlYXQgYnV0IGFkdmFuY2Ugc3RhcnRFbFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVsOiBkaXIoc3RhcnRFbCwgcmVsYXRpdmVFeHByW3N0YXJ0TWF0Y2gubmV4dENvbWJpbmF0b3JdLmRpciksXG4gICAgICAgICAgbWF0Y2g6IHN0YXJ0TWF0Y2hcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFkdmFuY2UgKGJlZm9yZSBpbW1lZGlhdGUgbWF0Y2ggKyBqdW1wIHVubWF0Y2hlZClcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbDogZWwgJiYgZGlyKGVsLCByZWxhdGl2ZU9wLmRpciksXG4gICAgICAgICAgbWF0Y2g6IG1hdGNoXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9IHdoaWxlIChlbCk7XG5cbiAgLy8gb25seSBvY2N1ciB3aGVuIG1hdGNoIGltbWVkaWF0ZVxuICByZXR1cm4ge1xuICAgIGVsOiBkaXIoc3RhcnRFbCwgcmVsYXRpdmVFeHByW3N0YXJ0TWF0Y2gubmV4dENvbWJpbmF0b3JdLmRpciksXG4gICAgbWF0Y2g6IHN0YXJ0TWF0Y2hcbiAgfTtcbn1cblxuLy8gZmluZCBmaXhlZCBwYXJ0LCBmaXhlZCB3aXRoIHNlZWRzXG5mdW5jdGlvbiBmaW5kRml4ZWRNYXRjaEZyb21IZWFkKGVsLCBoZWFkKSB7XG4gIHZhciByZWxhdGl2ZU9wLFxuICAgIGN1ciA9IGhlYWQ7XG5cbiAgZG8ge1xuICAgIGlmICghc2luZ2xlTWF0Y2goZWwsIGN1cikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjdXIgPSBjdXIucHJldjtcbiAgICBpZiAoIWN1cikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJlbGF0aXZlT3AgPSByZWxhdGl2ZUV4cHJbY3VyLm5leHRDb21iaW5hdG9yXTtcbiAgICBlbCA9IGRpcihlbCwgcmVsYXRpdmVPcC5kaXIpO1xuICB9IHdoaWxlIChlbCAmJiByZWxhdGl2ZU9wLmltbWVkaWF0ZSk7XG4gIGlmICghZWwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4ge1xuICAgIGVsOiBlbCxcbiAgICBtYXRjaDogY3VyXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdlbklkKGVsKSB7XG4gIHZhciBzZWxlY3RvcklkO1xuXG4gIGlmIChpc0NvbnRleHRYTUwpIHtcbiAgICBpZiAoIShzZWxlY3RvcklkID0gZWwuZ2V0QXR0cmlidXRlKEVYUEFORE9fU0VMRUNUT1JfS0VZKSkpIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZShFWFBBTkRPX1NFTEVDVE9SX0tFWSwgc2VsZWN0b3JJZCA9ICgrbmV3IERhdGUoKSArICdfJyArICgrK3V1aWQpKSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICghKHNlbGVjdG9ySWQgPSBlbFtFWFBBTkRPX1NFTEVDVE9SX0tFWV0pKSB7XG4gICAgICBzZWxlY3RvcklkID0gZWxbRVhQQU5ET19TRUxFQ1RPUl9LRVldID0gKCtuZXcgRGF0ZSgpKSArICdfJyArICgrK3V1aWQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzZWxlY3RvcklkO1xufVxuXG5mdW5jdGlvbiBtYXRjaFN1YihlbCwgbWF0Y2gpIHtcbiAgdmFyIHNlbGVjdG9ySWQgPSBnZW5JZChlbCksXG4gICAgbWF0Y2hLZXk7XG4gIG1hdGNoS2V5ID0gc2VsZWN0b3JJZCArICdfJyArIChtYXRjaC5vcmRlciB8fCAwKTtcbiAgaWYgKG1hdGNoS2V5IGluIHN1Yk1hdGNoZXNDYWNoZSkge1xuICAgIHJldHVybiBzdWJNYXRjaGVzQ2FjaGVbbWF0Y2hLZXldO1xuICB9XG4gIHN1Yk1hdGNoZXNDYWNoZVttYXRjaEtleV0gPSBtYXRjaFN1YkludGVybmFsKGVsLCBtYXRjaCk7XG4gIHJldHVybiBzdWJNYXRjaGVzQ2FjaGVbbWF0Y2hLZXldO1xufVxuXG4vLyByZWN1cnNpdmUgbWF0Y2ggYnkgc3ViIHNlbGVjdG9yIHN0cmluZyBmcm9tIHJpZ2h0IHRvIGxlZnRcbi8vIGdyb3VwZWQgYnkgaW1tZWRpYXRlIHNlbGVjdG9yc1xuZnVuY3Rpb24gbWF0Y2hTdWJJbnRlcm5hbChlbCwgbWF0Y2gpIHtcbiAgdmFyIG1hdGNoSW1tZWRpYXRlUmV0ID0gbWF0Y2hJbW1lZGlhdGUoZWwsIG1hdGNoKTtcbiAgaWYgKG1hdGNoSW1tZWRpYXRlUmV0ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgZWwgPSBtYXRjaEltbWVkaWF0ZVJldC5lbDtcbiAgICBtYXRjaCA9IG1hdGNoSW1tZWRpYXRlUmV0Lm1hdGNoO1xuICAgIHdoaWxlIChlbCkge1xuICAgICAgaWYgKG1hdGNoU3ViKGVsLCBtYXRjaCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBlbCA9IGRpcihlbCwgcmVsYXRpdmVFeHByW21hdGNoLm5leHRDb21iaW5hdG9yXS5kaXIpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2VsZWN0KHN0ciwgY29udGV4dCwgc2VlZHMpIHtcbiAgaWYgKCFjYWNoZXNbc3RyXSkge1xuICAgIGNhY2hlc1tzdHJdID0gcGFyc2VyLnBhcnNlKHN0cik7XG4gIH1cblxuICB2YXIgc2VsZWN0b3IgPSBjYWNoZXNbc3RyXSxcbiAgICBncm91cEluZGV4ID0gMCxcbiAgICBncm91cExlbiA9IHNlbGVjdG9yLmxlbmd0aCxcbiAgICBjb250ZXh0RG9jdW1lbnQsXG4gICAgZ3JvdXAsXG4gICAgcmV0ID0gW107XG5cbiAgaWYgKHNlZWRzKSB7XG4gICAgY29udGV4dCA9IGNvbnRleHQgfHwgc2VlZHNbMF0ub3duZXJEb2N1bWVudDtcbiAgfVxuXG4gIGNvbnRleHREb2N1bWVudCA9IGNvbnRleHQgJiYgY29udGV4dC5vd25lckRvY3VtZW50IHx8IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQ7XG5cbiAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiAhY29udGV4dERvY3VtZW50KSB7XG4gICAgY29udGV4dERvY3VtZW50ID0gY29udGV4dDtcbiAgfVxuXG4gIGNvbnRleHQgPSBjb250ZXh0IHx8IGNvbnRleHREb2N1bWVudDtcblxuICBpc0NvbnRleHRYTUwgPSBpc1hNTChjb250ZXh0KTtcblxuICBmb3IgKDsgZ3JvdXBJbmRleCA8IGdyb3VwTGVuOyBncm91cEluZGV4KyspIHtcbiAgICByZXNldFN0YXR1cygpO1xuXG4gICAgZ3JvdXAgPSBzZWxlY3Rvcltncm91cEluZGV4XTtcblxuICAgIHZhciBzdWZmaXggPSBncm91cC5zdWZmaXgsXG4gICAgICBzdWZmaXhJbmRleCxcbiAgICAgIHN1ZmZpeExlbixcbiAgICAgIHNlZWRzSW5kZXgsXG4gICAgICBteVNlZWRzID0gc2VlZHMsXG4gICAgICBzZWVkc0xlbixcbiAgICAgIGlkID0gbnVsbDtcblxuICAgIGlmICghbXlTZWVkcykge1xuICAgICAgaWYgKHN1ZmZpeCAmJiAhaXNDb250ZXh0WE1MKSB7XG4gICAgICAgIHN1ZmZpeEluZGV4ID0gMDtcbiAgICAgICAgc3VmZml4TGVuID0gc3VmZml4Lmxlbmd0aDtcbiAgICAgICAgZm9yICg7IHN1ZmZpeEluZGV4IDwgc3VmZml4TGVuOyBzdWZmaXhJbmRleCsrKSB7XG4gICAgICAgICAgdmFyIHNpbmdsZVN1ZmZpeCA9IHN1ZmZpeFtzdWZmaXhJbmRleF07XG4gICAgICAgICAgaWYgKHNpbmdsZVN1ZmZpeC50ID09PSAnaWQnKSB7XG4gICAgICAgICAgICBpZCA9IHNpbmdsZVN1ZmZpeC52YWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaWQpIHtcbiAgICAgICAgLy8gaHR0cDovL3lpbWluZ2hlLmdpdGh1Yi5pby9sYWIvcGxheWdyb3VuZC9mcmFnbWVudC1zZWxlY3Rvci9zZWxlY3Rvci5odG1sXG4gICAgICAgIHZhciBkb2VzTm90SGFzQnlJZCA9ICFjb250ZXh0LmdldEVsZW1lbnRCeUlkLFxuICAgICAgICAgIGNvbnRleHRJbkRvbSA9IHV0aWwuY29udGFpbnMoY29udGV4dERvY3VtZW50LCBjb250ZXh0KSxcbiAgICAgICAgICB0bXAgPSBkb2VzTm90SGFzQnlJZCA/IChcbiAgICAgICAgICAgIGNvbnRleHRJbkRvbSA/XG4gICAgICAgICAgICAgIGNvbnRleHREb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkgOlxuICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgKSA6IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgICAgICAvLyBpZCBidWdcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2tpc3N5dGVhbS9raXNzeS9pc3N1ZXMvNjdcbiAgICAgICAgaWYgKCF0bXAgJiYgZG9lc05vdEhhc0J5SWQgfHwgdG1wICYmIGdldEF0dHIodG1wLCAnaWQnKSAhPT0gaWQpIHtcbiAgICAgICAgICB2YXIgdG1wcyA9IHV0aWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJyonLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHRtcExlbiA9IHRtcHMubGVuZ3RoLFxuICAgICAgICAgICAgdG1wSSA9IDA7XG4gICAgICAgICAgZm9yICg7IHRtcEkgPCB0bXBMZW47IHRtcEkrKykge1xuICAgICAgICAgICAgdG1wID0gdG1wc1t0bXBJXTtcbiAgICAgICAgICAgIGlmIChnZXRBdHRyKHRtcCwgJ2lkJykgPT09IGlkKSB7XG4gICAgICAgICAgICAgIG15U2VlZHMgPSBbdG1wXTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0bXBJID09PSB0bXBMZW4pIHtcbiAgICAgICAgICAgIG15U2VlZHMgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGNvbnRleHRJbkRvbSAmJiB0bXAgJiYgY29udGV4dCAhPT0gY29udGV4dERvY3VtZW50KSB7XG4gICAgICAgICAgICB0bXAgPSB1dGlsLmNvbnRhaW5zKGNvbnRleHQsIHRtcCkgPyB0bXAgOiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBteVNlZWRzID0gdG1wID8gW3RtcF0gOiBbXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXlTZWVkcyA9IHV0aWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZ3JvdXAudmFsdWUgfHwgJyonLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZWVkc0luZGV4ID0gMDtcbiAgICBzZWVkc0xlbiA9IG15U2VlZHMubGVuZ3RoO1xuXG4gICAgaWYgKCFzZWVkc0xlbikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZm9yICg7IHNlZWRzSW5kZXggPCBzZWVkc0xlbjsgc2VlZHNJbmRleCsrKSB7XG4gICAgICB2YXIgc2VlZCA9IG15U2VlZHNbc2VlZHNJbmRleF07XG4gICAgICB2YXIgbWF0Y2hIZWFkID0gZmluZEZpeGVkTWF0Y2hGcm9tSGVhZChzZWVkLCBncm91cCk7XG4gICAgICBpZiAobWF0Y2hIZWFkID09PSB0cnVlKSB7XG4gICAgICAgIHJldC5wdXNoKHNlZWQpO1xuICAgICAgfSBlbHNlIGlmIChtYXRjaEhlYWQpIHtcbiAgICAgICAgaWYgKG1hdGNoU3ViKG1hdGNoSGVhZC5lbCwgbWF0Y2hIZWFkLm1hdGNoKSkge1xuICAgICAgICAgIHJldC5wdXNoKHNlZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGdyb3VwTGVuID4gMSkge1xuICAgIHJldCA9IHV0aWwudW5pcXVlKHJldCk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNlbGVjdDtcblxuc2VsZWN0LnBhcnNlID0gZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gcGFyc2VyLnBhcnNlKHN0cik7XG59O1xuXG5zZWxlY3QubWF0Y2hlcyA9IG1hdGNoZXM7XG5cbnNlbGVjdC51dGlsID0gdXRpbDtcblxuc2VsZWN0LnZlcnNpb24gPSAnQFZFUlNJT05AJztcbi8qKlxuICogQGlnbm9yZVxuICogbm90ZSAyMDEzLTAzLTI4XG4gKiAgLSB1c2UgcmVjdXJzaXZlIGNhbGwgdG8gcmVwbGFjZSBiYWNrdHJhY2tpbmcgYWxnb3JpdGhtXG4gKlxuICogcmVmZXJcbiAqICAtIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy9cbiAqICAtIGh0dHA6Ly93d3cuaW1wcmVzc2l2ZXdlYnMuY29tL2Jyb3dzZXItc3VwcG9ydC1jc3MzLXNlbGVjdG9ycy9cbiAqICAtIGh0dHA6Ly9ibG9ncy5tc2RuLmNvbS9pZS9hcmNoaXZlLzIwMTAvMDUvMTMvdGhlLWNzcy1jb3JuZXItY3NzMy1zZWxlY3RvcnMuYXNweFxuICogIC0gaHR0cDovL3NpenpsZWpzLmNvbS9cbiAqLyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvcXVlcnktc2VsZWN0b3InKTsiLCJ2YXIgaHlwaGVuRXhwcmVzc2lvbiA9IC8tKyhbYS16XSkvZ2lcblxuZnVuY3Rpb24gdXBwZXJDYXNlRmlyc3RNYXRjaCAobWF0Y2gsIGMsIG9mZnNldCkge1xuICBpZiAob2Zmc2V0ICE9PSAwKSB7XG4gICAgcmV0dXJuIGMudG9VcHBlckNhc2UoKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBjXG4gIH1cbn1cblxuZnVuY3Rpb24gY2FtZWxDYXNlIChzdHIpIHtcbiAgdmFyIGNhbWVsQ2FzZWQgPSBzdHIucmVwbGFjZShoeXBoZW5FeHByZXNzaW9uLCB1cHBlckNhc2VGaXJzdE1hdGNoKVxuICBoeXBoZW5FeHByZXNzaW9uLmxhc3RJbmRleCA9IDBcbiAgcmV0dXJuIGNhbWVsQ2FzZWRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYW1lbENhc2VcbiIsImZ1bmN0aW9uIGlzU3RyaW5nICh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyaW5nXG4iLCJmdW5jdGlvbiBpc1VuZGVmaW5lZCAodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCdcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1VuZGVmaW5lZFxuIiwiZnVuY3Rpb24gYXNzaWduIChkZXN0KSB7XG4gIHZhciBhcmdzID0gYXJndW1lbnRzXG4gIHZhciBzb3VyY2VcblxuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBzb3VyY2UgPSBhcmdzW2ldXG5cbiAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICBkZXN0W2tleV0gPSBzb3VyY2Vba2V5XVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkZXN0XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzaWduXG4iLCJmdW5jdGlvbiBtYXBWYWx1ZXMgKHNvdXJjZSwgZm4pIHtcbiAgdmFyIGRlc3RpbmF0aW9uID0ge31cblxuICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICBkZXN0aW5hdGlvbltrZXldID0gZm4oc291cmNlW2tleV0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRlc3RpbmF0aW9uXG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwVmFsdWVzXG4iLCJ2YXIgY2FtZWxDYXNlID0gcmVxdWlyZSgnLi9jYW1lbENhc2UnKVxuXG5mdW5jdGlvbiBzdHlsZUNhbWVsQ2FzZSAobmFtZSkge1xuICB2YXIgY2FtZWwgPSBjYW1lbENhc2UobmFtZSlcblxuICAvLyBEZXRlY3QgaWYgdGhlIHN0eWxlIHByb3BlcnR5IGlzIGFscmVhZHkgY2FtZWxDYXNlZFxuICAvLyBUbyBub3QgY29udmVydCBXZWJraXQqLCBNb3oqIGFuZCBPKiB0byBsb3dlcmNhc2VcbiAgaWYgKGNhbWVsLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpID09PSBuYW1lLmNoYXJBdCgwKSkge1xuICAgIHJldHVybiBuYW1lLmNoYXJBdCgwKSArIGNhbWVsLnNsaWNlKDEpXG4gIH1cblxuICBpZiAobmFtZS5jaGFyQXQoMCkgPT09ICctJykge1xuICAgIHJldHVybiBjYW1lbC5pbmRleE9mKCdtcycpID09PSAwID8gY2FtZWxcbiAgICAgIDogY2FtZWwuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBjYW1lbC5zbGljZSgxKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBjYW1lbFxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R5bGVDYW1lbENhc2VcbiIsInZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0JylcbnZhciBzdHlsZUF0dHIgPSByZXF1aXJlKCdzdHlsZS1hdHRyJylcbnZhciBxdWVyeVNlbGVjdG9yQWxsID0gcmVxdWlyZSgncXVlcnktc2VsZWN0b3InKVxudmFyIGNhbWVsQ2FzZSA9IHJlcXVpcmUoJy4vdXRpbHMvY2FtZWxDYXNlJylcbnZhciBpc1N0cmluZyA9IHJlcXVpcmUoJy4vdXRpbHMvaXNTdHJpbmcnKVxudmFyIGlzVW5kZWZpbmVkID0gcmVxdWlyZSgnLi91dGlscy9pc1VuZGVmaW5lZCcpXG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi91dGlscy9hc3NpZ24nKVxudmFyIG1hcFZhbHVlcyA9IHJlcXVpcmUoJy4vdXRpbHMvbWFwVmFsdWVzJylcbnZhciBzdHlsZUNhbWVsQ2FzZSA9IHJlcXVpcmUoJy4vdXRpbHMvc3R5bGVDYW1lbENhc2UnKVxuXG5mdW5jdGlvbiBlbGVtZW50ICgpIHtcbiAgZnVuY3Rpb24gRWxlbWVudCAobm9kZU5hbWUsIHBhcmVudE5vZGUpIHtcbiAgICB0aGlzLm5vZGVOYW1lID0gbm9kZU5hbWVcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlXG4gICAgdGhpcy5jaGlsZE5vZGVzID0gW11cbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzID0ge31cbiAgICB0aGlzLnRleHQgPSAnJ1xuICAgIHZhciBzZWxmID0gdGhpc1xuICAgIHZhciBwcm9wcyA9IHRoaXMucHJvcHMgPSB7XG4gICAgICByZWY6IGZ1bmN0aW9uIChjb21wb25lbnQpIHtcbiAgICAgICAgc2VsZi5jb21wb25lbnQgPSBjb21wb25lbnRcbiAgICAgIH0sXG4gICAgICBzdHlsZToge1xuICAgICAgICBzZXRQcm9wZXJ0eTogZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgICAgICAgcHJvcHMuc3R5bGVbc3R5bGVDYW1lbENhc2UobmFtZSldID0gdmFsdWVcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0UHJvcGVydHk6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BzLnN0eWxlW3N0eWxlQ2FtZWxDYXNlKG5hbWUpXSB8fCAnJ1xuICAgICAgICB9LFxuICAgICAgICBnZXRQcm9wZXJ0eVZhbHVlOiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgIHJldHVybiBwcm9wcy5zdHlsZS5nZXRQcm9wZXJ0eShuYW1lKVxuICAgICAgICB9LFxuICAgICAgICByZW1vdmVQcm9wZXJ0eTogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICBkZWxldGUgcHJvcHMuc3R5bGVbc3R5bGVDYW1lbENhc2UobmFtZSldXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnN0eWxlID0gcHJvcHMuc3R5bGVcbiAgfVxuXG4gIEVsZW1lbnQuRUxFTUVOVF9OT0RFID0gMVxuICBFbGVtZW50LkRPQ1VNRU5UX1BPU0lUSU9OX0RJU0NPTk5FQ1RFRCA9IDFcbiAgRWxlbWVudC5ET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkcgPSAyXG4gIEVsZW1lbnQuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HID0gNFxuICBFbGVtZW50LkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5TID0gOFxuICBFbGVtZW50LkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWSA9IDE2XG5cbiAgRWxlbWVudC5wcm90b3R5cGUubm9kZVR5cGUgPSAxXG5cbiAgLy8gVGhpcyB3YXMgZWFzeSB0byBkbyB3aXRoIFZpbS5cbiAgLy8gSnVzdCBzYXlpbmcuXG4gIEVsZW1lbnQucHJvdG90eXBlLmV2ZW50TmFtZU1hcHBpbmdzID0ge1xuICAgICdibHVyJzogJ29uQmx1cicsXG4gICAgJ2NoYW5nZSc6ICdvbkNoYW5nZScsXG4gICAgJ2NsaWNrJzogJ29uQ2xpY2snLFxuICAgICdjb250ZXh0bWVudSc6ICdvbkNvbnRleHRNZW51JyxcbiAgICAnY29weSc6ICdvbkNvcHknLFxuICAgICdjdXQnOiAnb25DdXQnLFxuICAgICdkb3VibGVjbGljayc6ICdvbkRvdWJsZUNsaWNrJyxcbiAgICAnZHJhZyc6ICdvbkRyYWcnLFxuICAgICdkcmFnZW5kJzogJ29uRHJhZ0VuZCcsXG4gICAgJ2RyYWdlbnRlcic6ICdvbkRyYWdFbnRlcicsXG4gICAgJ2RyYWdleGl0JzogJ29uRHJhZ0V4aXQnLFxuICAgICdkcmFnbGVhdmUnOiAnb25EcmFnTGVhdmUnLFxuICAgICdkcmFnb3Zlcic6ICdvbkRyYWdPdmVyJyxcbiAgICAnZHJhZ3N0YXJ0JzogJ29uRHJhZ1N0YXJ0JyxcbiAgICAnZHJvcCc6ICdvbkRyb3AnLFxuICAgICdlcnJvcic6ICdvbkVycm9yJyxcbiAgICAnZm9jdXMnOiAnb25Gb2N1cycsXG4gICAgJ2lucHV0JzogJ29uSW5wdXQnLFxuICAgICdrZXlkb3duJzogJ29uS2V5RG93bicsXG4gICAgJ2tleXByZXNzJzogJ29uS2V5UHJlc3MnLFxuICAgICdrZXl1cCc6ICdvbktleVVwJyxcbiAgICAnbG9hZCc6ICdvbkxvYWQnLFxuICAgICdtb3VzZWRvd24nOiAnb25Nb3VzZURvd24nLFxuICAgICdtb3VzZWVudGVyJzogJ29uTW91c2VFbnRlcicsXG4gICAgJ21vdXNlbGVhdmUnOiAnb25Nb3VzZUxlYXZlJyxcbiAgICAnbW91c2Vtb3ZlJzogJ29uTW91c2VNb3ZlJyxcbiAgICAnbW91c2VvdXQnOiAnb25Nb3VzZU91dCcsXG4gICAgJ21vdXNlb3Zlcic6ICdvbk1vdXNlT3ZlcicsXG4gICAgJ21vdXNldXAnOiAnb25Nb3VzZVVwJyxcbiAgICAncGFzdGUnOiAnb25QYXN0ZScsXG4gICAgJ3Njcm9sbCc6ICdvblNjcm9sbCcsXG4gICAgJ3N1Ym1pdCc6ICdvblN1Ym1pdCcsXG4gICAgJ3RvdWNoY2FuY2VsJzogJ29uVG91Y2hDYW5jZWwnLFxuICAgICd0b3VjaGVuZCc6ICdvblRvdWNoRW5kJyxcbiAgICAndG91Y2htb3ZlJzogJ29uVG91Y2hNb3ZlJyxcbiAgICAndG91Y2hzdGFydCc6ICdvblRvdWNoU3RhcnQnLFxuICAgICd3aGVlbCc6ICdvbldoZWVsJ1xuICB9XG5cbiAgRWxlbWVudC5wcm90b3R5cGUuc2tpcE5hbWVUcmFuc2Zvcm1hdGlvbkV4cHJlc3Npb25zID0gW1xuICAgIC9eZGF0YS0vLFxuICAgIC9eYXJpYS0vXG4gIF1cblxuICBFbGVtZW50LnByb3RvdHlwZS5hdHRyaWJ1dGVOYW1lTWFwcGluZ3MgPSB7XG4gICAgJ2NsYXNzJzogJ2NsYXNzTmFtZSdcbiAgfVxuXG4gIEVsZW1lbnQucHJvdG90eXBlLmF0dHJpYnV0ZVRvUHJvcE5hbWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBza2lwVHJhbnNmb3JtTWF0Y2hlcyA9IHRoaXMuc2tpcE5hbWVUcmFuc2Zvcm1hdGlvbkV4cHJlc3Npb25zLm1hcChmdW5jdGlvbiAoZXhwcikge1xuICAgICAgcmV0dXJuIGV4cHIudGVzdChuYW1lKVxuICAgIH0pXG5cbiAgICBpZiAoc2tpcFRyYW5zZm9ybU1hdGNoZXMuc29tZShCb29sZWFuKSkge1xuICAgICAgcmV0dXJuIG5hbWVcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlTmFtZU1hcHBpbmdzW25hbWVdIHx8IGNhbWVsQ2FzZShuYW1lKVxuICAgIH1cbiAgfVxuXG4gIEVsZW1lbnQucHJvdG90eXBlLnNldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGlmIChuYW1lID09PSAnc3R5bGUnICYmIGlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgdmFyIHN0eWxlcyA9IHN0eWxlQXR0ci5wYXJzZSh2YWx1ZSlcblxuICAgICAgZm9yICh2YXIga2V5IGluIHN0eWxlcykge1xuICAgICAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KGtleSwgc3R5bGVzW2tleV0pXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvcHNbdGhpcy5hdHRyaWJ1dGVUb1Byb3BOYW1lKG5hbWUpXSA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgRWxlbWVudC5wcm90b3R5cGUuZ2V0QXR0cmlidXRlID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wc1t0aGlzLmF0dHJpYnV0ZVRvUHJvcE5hbWUobmFtZSldXG4gIH1cblxuICBFbGVtZW50LnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVOb2RlID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShuYW1lKVxuXG4gICAgaWYgKCFpc1VuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgc3BlY2lmaWVkOiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5wcm9wc1t0aGlzLmF0dHJpYnV0ZVRvUHJvcE5hbWUobmFtZSldXG4gIH1cblxuICBFbGVtZW50LnByb3RvdHlwZS5ldmVudFRvUHJvcE5hbWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB0aGlzLmV2ZW50TmFtZU1hcHBpbmdzW25hbWVdIHx8IG5hbWVcbiAgfVxuXG4gIEVsZW1lbnQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAobmFtZSwgZm4pIHtcbiAgICB2YXIgcHJvcCA9IHRoaXMuZXZlbnRUb1Byb3BOYW1lKG5hbWUpXG4gICAgdGhpcy5ldmVudExpc3RlbmVyc1twcm9wXSA9IHRoaXMuZXZlbnRMaXN0ZW5lcnNbcHJvcF0gfHwgW11cbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzW3Byb3BdLnB1c2goZm4pXG4gIH1cblxuICBFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKG5hbWUsIGZuKSB7XG4gICAgdmFyIGxpc3RlbmVycyA9IHRoaXMuZXZlbnRMaXN0ZW5lcnNbdGhpcy5ldmVudFRvUHJvcE5hbWUobmFtZSldXG5cbiAgICBpZiAobGlzdGVuZXJzKSB7XG4gICAgICB2YXIgbWF0Y2ggPSBsaXN0ZW5lcnMuaW5kZXhPZihmbilcblxuICAgICAgaWYgKG1hdGNoICE9PSAtMSkge1xuICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKG1hdGNoLCAxKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEVsZW1lbnQucHJvdG90eXBlLmFwcGVuZENoaWxkID0gZnVuY3Rpb24gKGVsKSB7XG4gICAgaWYgKGVsIGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgZWwucGFyZW50Tm9kZSA9IHRoaXNcbiAgICB9XG5cbiAgICB0aGlzLmNoaWxkTm9kZXMucHVzaChlbClcbiAgICByZXR1cm4gZWxcbiAgfVxuXG4gIEVsZW1lbnQucHJvdG90eXBlLmluc2VydEJlZm9yZSA9IGZ1bmN0aW9uIChlbCwgYmVmb3JlKSB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5jaGlsZE5vZGVzLmluZGV4T2YoYmVmb3JlKVxuICAgIGVsLnBhcmVudE5vZGUgPSB0aGlzXG5cbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKGluZGV4LCAwLCBlbClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jaGlsZE5vZGVzLnB1c2goZWwpXG4gICAgfVxuXG4gICAgcmV0dXJuIGVsXG4gIH1cblxuICBFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHZhciB0YXJnZXQgPSB0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihjaGlsZClcbiAgICB0aGlzLmNoaWxkTm9kZXMuc3BsaWNlKHRhcmdldCwgMSlcbiAgfVxuXG4gIEVsZW1lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpWzBdIHx8IG51bGxcbiAgfVxuXG4gIEVsZW1lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGwgPSBmdW5jdGlvbiAoc2VsZWN0b3IpIHtcbiAgICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBlbm91Z2ggYXJndW1lbnRzJylcbiAgICB9XG5cbiAgICByZXR1cm4gcXVlcnlTZWxlY3RvckFsbChzZWxlY3RvciwgdGhpcylcbiAgfVxuXG4gIEVsZW1lbnQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lID0gZnVuY3Rpb24gKG5vZGVOYW1lKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlblxuXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBtYXRjaGVzXG5cbiAgICAgIGlmIChub2RlTmFtZSAhPT0gJyonKSB7XG4gICAgICAgIG1hdGNoZXMgPSBjaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgcmV0dXJuIGVsLm5vZGVOYW1lID09PSBub2RlTmFtZVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWF0Y2hlcyA9IGNoaWxkcmVuXG4gICAgICB9XG5cbiAgICAgIHZhciBjaGlsZE1hdGNoZXMgPSBjaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgIHJldHVybiBlbC5nZXRFbGVtZW50c0J5VGFnTmFtZShub2RlTmFtZSlcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiBtYXRjaGVzLmNvbmNhdC5hcHBseShtYXRjaGVzLCBjaGlsZE1hdGNoZXMpXG4gICAgfVxuICB9XG5cbiAgRWxlbWVudC5wcm90b3R5cGUuZ2V0RWxlbWVudEJ5SWQgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuXG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbWF0Y2ggPSBjaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUoJ2lkJykgPT09IGlkXG4gICAgICB9KVswXVxuXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgY2hpbGRNYXRjaGVzID0gY2hpbGRyZW4ubWFwKGZ1bmN0aW9uIChlbCkge1xuICAgICAgICAgIHJldHVybiBlbC5nZXRFbGVtZW50QnlJZChpZClcbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm4gY2hpbGRNYXRjaGVzLmZpbHRlcihmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICByZXR1cm4gbWF0Y2ggIT09IG51bGxcbiAgICAgICAgfSlbMF0gfHwgbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEVsZW1lbnQucHJvdG90eXBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gIH1cblxuICBFbGVtZW50LnByb3RvdHlwZS5jbG9uZU5vZGUgPSBmdW5jdGlvbiAoZGVlcCkge1xuICAgIC8vIGlmIGRlZXAgaXMgbm90IHByb3ZpZGVkLCBpdCBkZWZhdWx0IHRvIHRydWVcbiAgICBpZiAoZGVlcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWVwID0gdHJ1ZVxuICAgIH1cbiAgICB2YXIgZWwgPSBuZXcgRWxlbWVudCh0aGlzLm5vZGVOYW1lLCB0aGlzLnBhcmVudE5vZGUpXG4gICAgLy8gY29weSBub2RlVHlwZVxuICAgIGlmICh0aGlzLm5vZGVUeXBlKSB7XG4gICAgICBlbC5ub2RlVHlwZSA9IHRoaXMubm9kZVR5cGVcbiAgICB9XG5cbiAgICB2YXIga1xuXG4gICAgLy8gY29weSB0aGUgcHJvcHNcbiAgICBmb3IgKGsgaW4gdGhpcy5wcm9wcykge1xuICAgICAgaWYgKHRoaXMucHJvcHMuaGFzT3duUHJvcGVydHkoaykgJiYgayAhPT0gJ3JlZicgJiYgayAhPT0gJ3N0eWxlJykge1xuICAgICAgICBlbC5wcm9wc1trXSA9IHRoaXMucHJvcHNba11cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gY29weSB0aGUgc3R5bGVzXG4gICAgZm9yIChrIGluIHRoaXMuc3R5bGUpIHtcbiAgICAgIGlmICh0aGlzLnN0eWxlLmhhc093blByb3BlcnR5KGspICYmIFtcbiAgICAgICAgJ3NldFByb3BlcnR5JyxcbiAgICAgICAgJ2dldFByb3BlcnR5JyxcbiAgICAgICAgJ2dldFByb3BlcnR5VmFsdWUnLFxuICAgICAgICAncmVtb3ZlUHJvcGVydHknXG4gICAgICBdLmluZGV4T2YoaykgPT09IC0xKSB7XG4gICAgICAgIGVsLnN0eWxlW2tdID0gdGhpcy5zdHlsZVtrXVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGVlcCkge1xuICAgICAgZWwuY2hpbGROb2RlcyA9IHRoaXMuY2hpbGROb2Rlcy5tYXAoZnVuY3Rpb24gKGNoaWxkRWwpIHtcbiAgICAgICAgaWYgKCFjaGlsZEVsLm5vZGVUeXBlKSB7XG4gICAgICAgICAgLy8gSXQncyBhIFJlYWN0IGVsZW1lbnQsIGxldCBSZWFjdCBjbG9uZSBpdFxuICAgICAgICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRFbClcbiAgICAgICAgfVxuICAgICAgICAvLyBlaXRoZXIgRWxlbWVudCBvciB0cnVlIGRvbSBlbGVtZW50XG4gICAgICAgIGNoaWxkRWwgPSBjaGlsZEVsLmNsb25lTm9kZSh0cnVlKVxuICAgICAgICAvLyBpZiBhIGZhdXggZG9tIGVsZW1lbnQsIG1vZGlmeSBwYXJlbnROb2RlXG4gICAgICAgIGlmIChjaGlsZEVsIGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgICAgIGNoaWxkRWwucGFyZW50Tm9kZSA9IGVsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNoaWxkRWxcbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBlbFxuICB9XG5cbiAgRWxlbWVudC5wcm90b3R5cGUudG9SZWFjdCA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgIGluZGV4ID0gaW5kZXggfHwgMFxuICAgIHZhciBwcm9wcyA9IGFzc2lnbih7fSwgdGhpcy5wcm9wcylcbiAgICBwcm9wcy5zdHlsZSA9IGFzc2lnbih7fSwgcHJvcHMuc3R5bGUpXG5cbiAgICB2YXIgb3JpZ2luYWxFbGVtZW50ID0gdGhpc1xuXG4gICAgZnVuY3Rpb24gdW5pcXVlS2V5ICgpIHtcbiAgICAgIHJldHVybiAnZmF1eC1kb20tJyArIGluZGV4XG4gICAgfVxuXG4gICAgaWYgKGlzVW5kZWZpbmVkKHByb3BzLmtleSkpIHtcbiAgICAgIHByb3BzLmtleSA9IHVuaXF1ZUtleSgpXG4gICAgfVxuXG4gICAgZGVsZXRlIHByb3BzLnN0eWxlLnNldFByb3BlcnR5XG4gICAgZGVsZXRlIHByb3BzLnN0eWxlLmdldFByb3BlcnR5XG4gICAgZGVsZXRlIHByb3BzLnN0eWxlLmdldFByb3BlcnR5VmFsdWVcbiAgICBkZWxldGUgcHJvcHMuc3R5bGUucmVtb3ZlUHJvcGVydHlcblxuICAgIGFzc2lnbihwcm9wcywgbWFwVmFsdWVzKHRoaXMuZXZlbnRMaXN0ZW5lcnMsIGZ1bmN0aW9uIChsaXN0ZW5lcnMpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoc3ludGhldGljRXZlbnQpIHtcbiAgICAgICAgdmFyIGV2ZW50XG5cbiAgICAgICAgaWYgKHN5bnRoZXRpY0V2ZW50KSB7XG4gICAgICAgICAgZXZlbnQgPSBzeW50aGV0aWNFdmVudC5uYXRpdmVFdmVudFxuICAgICAgICAgIGV2ZW50LnN5bnRoZXRpY0V2ZW50ID0gc3ludGhldGljRXZlbnRcbiAgICAgICAgfVxuXG4gICAgICAgIG1hcFZhbHVlcyhsaXN0ZW5lcnMsIGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICAgIGxpc3RlbmVyLmNhbGwob3JpZ2luYWxFbGVtZW50LCBldmVudClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KSlcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KHRoaXMubm9kZU5hbWUsIHByb3BzLCB0aGlzLnRleHQgfHwgdGhpcy5jaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGVsLCBpKSB7XG4gICAgICBpZiAoZWwgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbC50b1JlYWN0KGkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZWxcbiAgICAgIH1cbiAgICB9KSlcbiAgfVxuXG4gIEVsZW1lbnQucHJvdG90eXBlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgZnVuY3Rpb24gZ2V0Rmlyc3ROb2RlQnlPcmRlciAobm9kZXMsIG5vZGVPbmUsIG5vZGVUd28pIHtcbiAgICAgIHJldHVybiBub2Rlcy5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwgbm9kZSkge1xuICAgICAgICBpZiAocmVzdWx0ICE9PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfSBlbHNlIGlmIChub2RlID09PSBub2RlT25lKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGVPbmVcbiAgICAgICAgfSBlbHNlIGlmIChub2RlID09PSBub2RlVHdvKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGVUd29cbiAgICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkTm9kZXMpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0Rmlyc3ROb2RlQnlPcmRlcihub2RlLmNoaWxkTm9kZXMsIG5vZGVPbmUsIG5vZGVUd28pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0sIGZhbHNlKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQW5jZXN0b3IgKHNvdXJjZSwgdGFyZ2V0KSB7XG4gICAgICB3aGlsZSAodGFyZ2V0LnBhcmVudE5vZGUpIHtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGVcbiAgICAgICAgaWYgKHRhcmdldCA9PT0gc291cmNlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZWl0aGVyQ29udGFpbnMgKGxlZnQsIHJpZ2h0KSB7XG4gICAgICByZXR1cm4gaXNBbmNlc3RvcihsZWZ0LCByaWdodClcbiAgICAgICAgPyBFbGVtZW50LkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWSArIEVsZW1lbnQuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HXG4gICAgICAgIDogaXNBbmNlc3RvcihyaWdodCwgbGVmdClcbiAgICAgICAgICA/IEVsZW1lbnQuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTlMgKyBFbGVtZW50LkRPQ1VNRU5UX1BPU0lUSU9OX1BSRUNFRElOR1xuICAgICAgICAgIDogZmFsc2VcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRSb290Tm9kZSAobm9kZSkge1xuICAgICAgd2hpbGUgKG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlXG4gICAgICB9XG4gICAgICByZXR1cm4gbm9kZVxuICAgIH1cblxuICAgIGlmICh0aGlzID09PSBvdGhlcikge1xuICAgICAgcmV0dXJuIDBcbiAgICB9XG5cbiAgICB2YXIgcmVmZXJlbmNlUm9vdCA9IGdldFJvb3ROb2RlKHRoaXMpXG4gICAgdmFyIG90aGVyUm9vdCA9IGdldFJvb3ROb2RlKG90aGVyKVxuXG4gICAgaWYgKHJlZmVyZW5jZVJvb3QgIT09IG90aGVyUm9vdCkge1xuICAgICAgcmV0dXJuIEVsZW1lbnQuRE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEXG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdCA9IGVpdGhlckNvbnRhaW5zKHRoaXMsIG90aGVyKVxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG5cbiAgICB2YXIgZmlyc3QgPSBnZXRGaXJzdE5vZGVCeU9yZGVyKFtyZWZlcmVuY2VSb290XSwgdGhpcywgb3RoZXIpXG4gICAgcmV0dXJuIGZpcnN0ID09PSB0aGlzXG4gICAgICA/IEVsZW1lbnQuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HXG4gICAgICA6IGZpcnN0ID09PSBvdGhlclxuICAgICAgICA/IEVsZW1lbnQuRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HXG4gICAgICAgIDogRWxlbWVudC5ET0NVTUVOVF9QT1NJVElPTl9ESVNDT05ORUNURURcbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEVsZW1lbnQucHJvdG90eXBlLCB7XG4gICAgbmV4dFNpYmxpbmc6IHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc2libGluZ3MgPSB0aGlzLnBhcmVudE5vZGUuY2hpbGRyZW5cbiAgICAgICAgdmFyIG1lID0gc2libGluZ3MuaW5kZXhPZih0aGlzKVxuICAgICAgICByZXR1cm4gc2libGluZ3NbbWUgKyAxXVxuICAgICAgfVxuICAgIH0sXG4gICAgcHJldmlvdXNTaWJsaW5nOiB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNpYmxpbmdzID0gdGhpcy5wYXJlbnROb2RlLmNoaWxkcmVuXG4gICAgICAgIHZhciBtZSA9IHNpYmxpbmdzLmluZGV4T2YodGhpcylcbiAgICAgICAgcmV0dXJuIHNpYmxpbmdzW21lIC0gMV1cbiAgICAgIH1cbiAgICB9LFxuICAgIGlubmVySFRNTDoge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHRcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICAgIHRoaXMudGV4dCA9IHRleHRcbiAgICAgIH1cbiAgICB9LFxuICAgIHRleHRDb250ZW50OiB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dFxuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dFxuICAgICAgfVxuICAgIH0sXG4gICAgY2hpbGRyZW46IHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBTbyBmYXIgbm9kZXMgY3JlYXRlZCBieSB0aGlzIGxpYnJhcnkgYXJlIGFsbCBvZiBub2RlVHlwZSAxIChlbGVtZW50cyksXG4gICAgICAgIC8vIGJ1dCB0aGlzIGNvdWxkIGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzLmZpbHRlcihmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICBpZiAoIWVsLm5vZGVUeXBlKSB7XG4gICAgICAgICAgICAvLyBJdCdzIGEgUmVhY3QgZWxlbWVudCwgd2UgYWx3YXlzIGFkZCBpdFxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBJdCdzIGEgSFRNTCBub2RlLiBXZSB3YW50IHRvIGZpbHRlciB0byBoYXZlIG9ubHkgbm9kZXMgd2l0aCB0eXBlIDFcbiAgICAgICAgICByZXR1cm4gZWwubm9kZVR5cGUgPT09IDFcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgLy8gVGhlc2UgTlMgbWV0aG9kcyBhcmUgY2FsbGVkIGJ5IHRoaW5ncyBsaWtlIEQzIGlmIGl0IHNwb3RzIGEgbmFtZXNwYWNlLlxuICAvLyBMaWtlIHhsaW5rOmhyZWYuIEkgZG9uJ3QgY2FyZSBhYm91dCBuYW1lc3BhY2VzLCBzbyB0aGVzZSBmdW5jdGlvbnMgaGF2ZSBOUyBhbGlhc2VzIGNyZWF0ZWQuXG4gIHZhciBuYW1lc3BhY2VNZXRob2RzID0gW1xuICAgICdzZXRBdHRyaWJ1dGUnLFxuICAgICdnZXRBdHRyaWJ1dGUnLFxuICAgICdnZXRBdHRyaWJ1dGVOb2RlJyxcbiAgICAncmVtb3ZlQXR0cmlidXRlJyxcbiAgICAnZ2V0RWxlbWVudHNCeVRhZ05hbWUnLFxuICAgICdnZXRFbGVtZW50QnlJZCdcbiAgXVxuXG4gIG5hbWVzcGFjZU1ldGhvZHMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBmbiA9IEVsZW1lbnQucHJvdG90eXBlW25hbWVdXG4gICAgRWxlbWVudC5wcm90b3R5cGVbbmFtZSArICdOUyddID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBFbGVtZW50XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZWxlbWVudFxuIiwiZnVuY3Rpb24gd2luZG93ICgpIHtcbiAgdmFyIFdpbmRvdyA9IHtcbiAgICBnZXRDb21wdXRlZFN0eWxlOiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0UHJvcGVydHlWYWx1ZTogbm9kZS5zdHlsZS5nZXRQcm9wZXJ0eVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBXaW5kb3dcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3aW5kb3dcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbi8vIC0tIElubGluZWQgZnJvbSBmYmpzIC0tXG5cbnZhciBlbXB0eU9iamVjdCA9IHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBPYmplY3QuZnJlZXplKGVtcHR5T2JqZWN0KTtcbn1cblxudmFyIHZhbGlkYXRlRm9ybWF0ID0gZnVuY3Rpb24gdmFsaWRhdGVGb3JtYXQoZm9ybWF0KSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFsaWRhdGVGb3JtYXQgPSBmdW5jdGlvbiB2YWxpZGF0ZUZvcm1hdChmb3JtYXQpIHtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YXJpYW50IHJlcXVpcmVzIGFuIGVycm9yIG1lc3NhZ2UgYXJndW1lbnQnKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIF9pbnZhcmlhbnQoY29uZGl0aW9uLCBmb3JtYXQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgdmFsaWRhdGVGb3JtYXQoZm9ybWF0KTtcblxuICBpZiAoIWNvbmRpdGlvbikge1xuICAgIHZhciBlcnJvcjtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKCdNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCAnICsgJ2ZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBhcmdzID0gW2EsIGIsIGMsIGQsIGUsIGZdO1xuICAgICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgICAgfSkpO1xuICAgICAgZXJyb3IubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB9XG5cbiAgICBlcnJvci5mcmFtZXNUb1BvcCA9IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgaW52YXJpYW50J3Mgb3duIGZyYW1lXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxudmFyIHdhcm5pbmcgPSBmdW5jdGlvbigpe307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbiBwcmludFdhcm5pbmcoZm9ybWF0KSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgYXJnSW5kZXggPSAwO1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107XG4gICAgfSk7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcblxuICB3YXJuaW5nID0gZnVuY3Rpb24gd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCkge1xuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdgd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICsgJ21lc3NhZ2UgYXJndW1lbnQnKTtcbiAgICB9XG5cbiAgICBpZiAoZm9ybWF0LmluZGV4T2YoJ0ZhaWxlZCBDb21wb3NpdGUgcHJvcFR5cGU6ICcpID09PSAwKSB7XG4gICAgICByZXR1cm47IC8vIElnbm9yZSBDb21wb3NpdGVDb21wb25lbnQgcHJvcHR5cGUgY2hlY2suXG4gICAgfVxuXG4gICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4yID4gMiA/IF9sZW4yIC0gMiA6IDApLCBfa2V5MiA9IDI7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MiAtIDJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcHJpbnRXYXJuaW5nLmFwcGx5KHVuZGVmaW5lZCwgW2Zvcm1hdF0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gIH07XG59XG5cbi8vIC8tLSBJbmxpbmVkIGZyb20gZmJqcyAtLVxuXG52YXIgTUlYSU5TX0tFWSA9ICdtaXhpbnMnO1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gYWxsb3cgdGhlIGNyZWF0aW9uIG9mIGFub255bW91cyBmdW5jdGlvbnMgd2hpY2ggZG8gbm90XG4vLyBoYXZlIC5uYW1lIHNldCB0byB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgYmVpbmcgYXNzaWduZWQgdG8uXG5mdW5jdGlvbiBpZGVudGl0eShmbikge1xuICByZXR1cm4gZm47XG59XG5cbnZhciBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcztcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0ge1xuICAgIHByb3A6ICdwcm9wJyxcbiAgICBjb250ZXh0OiAnY29udGV4dCcsXG4gICAgY2hpbGRDb250ZXh0OiAnY2hpbGQgY29udGV4dCdcbiAgfTtcbn0gZWxzZSB7XG4gIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0ge307XG59XG5cbmZ1bmN0aW9uIGZhY3RvcnkoUmVhY3RDb21wb25lbnQsIGlzVmFsaWRFbGVtZW50LCBSZWFjdE5vb3BVcGRhdGVRdWV1ZSkge1xuICAvKipcbiAgICogUG9saWNpZXMgdGhhdCBkZXNjcmliZSBtZXRob2RzIGluIGBSZWFjdENsYXNzSW50ZXJmYWNlYC5cbiAgICovXG5cbiAgdmFyIGluamVjdGVkTWl4aW5zID0gW107XG5cbiAgLyoqXG4gICAqIENvbXBvc2l0ZSBjb21wb25lbnRzIGFyZSBoaWdoZXItbGV2ZWwgY29tcG9uZW50cyB0aGF0IGNvbXBvc2Ugb3RoZXIgY29tcG9zaXRlXG4gICAqIG9yIGhvc3QgY29tcG9uZW50cy5cbiAgICpcbiAgICogVG8gY3JlYXRlIGEgbmV3IHR5cGUgb2YgYFJlYWN0Q2xhc3NgLCBwYXNzIGEgc3BlY2lmaWNhdGlvbiBvZlxuICAgKiB5b3VyIG5ldyBjbGFzcyB0byBgUmVhY3QuY3JlYXRlQ2xhc3NgLiBUaGUgb25seSByZXF1aXJlbWVudCBvZiB5b3VyIGNsYXNzXG4gICAqIHNwZWNpZmljYXRpb24gaXMgdGhhdCB5b3UgaW1wbGVtZW50IGEgYHJlbmRlcmAgbWV0aG9kLlxuICAgKlxuICAgKiAgIHZhciBNeUNvbXBvbmVudCA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAqICAgICAgIHJldHVybiA8ZGl2PkhlbGxvIFdvcmxkPC9kaXY+O1xuICAgKiAgICAgfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBUaGUgY2xhc3Mgc3BlY2lmaWNhdGlvbiBzdXBwb3J0cyBhIHNwZWNpZmljIHByb3RvY29sIG9mIG1ldGhvZHMgdGhhdCBoYXZlXG4gICAqIHNwZWNpYWwgbWVhbmluZyAoZS5nLiBgcmVuZGVyYCkuIFNlZSBgUmVhY3RDbGFzc0ludGVyZmFjZWAgZm9yXG4gICAqIG1vcmUgdGhlIGNvbXByZWhlbnNpdmUgcHJvdG9jb2wuIEFueSBvdGhlciBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIGluIHRoZVxuICAgKiBjbGFzcyBzcGVjaWZpY2F0aW9uIHdpbGwgYmUgYXZhaWxhYmxlIG9uIHRoZSBwcm90b3R5cGUuXG4gICAqXG4gICAqIEBpbnRlcmZhY2UgUmVhY3RDbGFzc0ludGVyZmFjZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHZhciBSZWFjdENsYXNzSW50ZXJmYWNlID0ge1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIE1peGluIG9iamVjdHMgdG8gaW5jbHVkZSB3aGVuIGRlZmluaW5nIHlvdXIgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogQHR5cGUge2FycmF5fVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIG1peGluczogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgdGhhdCBzaG91bGQgYmUgZGVmaW5lZCBvblxuICAgICAqIHRoZSBjb21wb25lbnQncyBjb25zdHJ1Y3RvciBpbnN0ZWFkIG9mIGl0cyBwcm90b3R5cGUgKHN0YXRpYyBtZXRob2RzKS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtvYmplY3R9XG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgc3RhdGljczogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIERlZmluaXRpb24gb2YgcHJvcCB0eXBlcyBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIHByb3BUeXBlczogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIERlZmluaXRpb24gb2YgY29udGV4dCB0eXBlcyBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGNvbnRleHRUeXBlczogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIERlZmluaXRpb24gb2YgY29udGV4dCB0eXBlcyB0aGlzIGNvbXBvbmVudCBzZXRzIGZvciBpdHMgY2hpbGRyZW4uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGNoaWxkQ29udGV4dFR5cGVzOiAnREVGSU5FX01BTlknLFxuXG4gICAgLy8gPT09PSBEZWZpbml0aW9uIG1ldGhvZHMgPT09PVxuXG4gICAgLyoqXG4gICAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbW91bnRlZC4gVmFsdWVzIGluIHRoZSBtYXBwaW5nIHdpbGwgYmUgc2V0IG9uXG4gICAgICogYHRoaXMucHJvcHNgIGlmIHRoYXQgcHJvcCBpcyBub3Qgc3BlY2lmaWVkIChpLmUuIHVzaW5nIGFuIGBpbmAgY2hlY2spLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgaW52b2tlZCBiZWZvcmUgYGdldEluaXRpYWxTdGF0ZWAgYW5kIHRoZXJlZm9yZSBjYW5ub3QgcmVseVxuICAgICAqIG9uIGB0aGlzLnN0YXRlYCBvciB1c2UgYHRoaXMuc2V0U3RhdGVgLlxuICAgICAqXG4gICAgICogQHJldHVybiB7b2JqZWN0fVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGdldERlZmF1bHRQcm9wczogJ0RFRklORV9NQU5ZX01FUkdFRCcsXG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIG9uY2UgYmVmb3JlIHRoZSBjb21wb25lbnQgaXMgbW91bnRlZC4gVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIHVzZWRcbiAgICAgKiBhcyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBgdGhpcy5zdGF0ZWAuXG4gICAgICpcbiAgICAgKiAgIGdldEluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICogICAgIHJldHVybiB7XG4gICAgICogICAgICAgaXNPbjogZmFsc2UsXG4gICAgICogICAgICAgZm9vQmF6OiBuZXcgQmF6Rm9vKClcbiAgICAgKiAgICAgfVxuICAgICAqICAgfVxuICAgICAqXG4gICAgICogQHJldHVybiB7b2JqZWN0fVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGdldEluaXRpYWxTdGF0ZTogJ0RFRklORV9NQU5ZX01FUkdFRCcsXG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9XG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgZ2V0Q2hpbGRDb250ZXh0OiAnREVGSU5FX01BTllfTUVSR0VEJyxcblxuICAgIC8qKlxuICAgICAqIFVzZXMgcHJvcHMgZnJvbSBgdGhpcy5wcm9wc2AgYW5kIHN0YXRlIGZyb20gYHRoaXMuc3RhdGVgIHRvIHJlbmRlciB0aGVcbiAgICAgKiBzdHJ1Y3R1cmUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIE5vIGd1YXJhbnRlZXMgYXJlIG1hZGUgYWJvdXQgd2hlbiBvciBob3cgb2Z0ZW4gdGhpcyBtZXRob2QgaXMgaW52b2tlZCwgc29cbiAgICAgKiBpdCBtdXN0IG5vdCBoYXZlIHNpZGUgZWZmZWN0cy5cbiAgICAgKlxuICAgICAqICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgdmFyIG5hbWUgPSB0aGlzLnByb3BzLm5hbWU7XG4gICAgICogICAgIHJldHVybiA8ZGl2PkhlbGxvLCB7bmFtZX0hPC9kaXY+O1xuICAgICAqICAgfVxuICAgICAqXG4gICAgICogQHJldHVybiB7UmVhY3RDb21wb25lbnR9XG4gICAgICogQHJlcXVpcmVkXG4gICAgICovXG4gICAgcmVuZGVyOiAnREVGSU5FX09OQ0UnLFxuXG4gICAgLy8gPT09PSBEZWxlZ2F0ZSBtZXRob2RzID09PT1cblxuICAgIC8qKlxuICAgICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxseSBjcmVhdGVkIGFuZCBhYm91dCB0byBiZSBtb3VudGVkLlxuICAgICAqIFRoaXMgbWF5IGhhdmUgc2lkZSBlZmZlY3RzLCBidXQgYW55IGV4dGVybmFsIHN1YnNjcmlwdGlvbnMgb3IgZGF0YSBjcmVhdGVkXG4gICAgICogYnkgdGhpcyBtZXRob2QgbXVzdCBiZSBjbGVhbmVkIHVwIGluIGBjb21wb25lbnRXaWxsVW5tb3VudGAuXG4gICAgICpcbiAgICAgKiBAb3B0aW9uYWxcbiAgICAgKi9cbiAgICBjb21wb25lbnRXaWxsTW91bnQ6ICdERUZJTkVfTUFOWScsXG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgYmVlbiBtb3VudGVkIGFuZCBoYXMgYSBET00gcmVwcmVzZW50YXRpb24uXG4gICAgICogSG93ZXZlciwgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIERPTSBub2RlIGlzIGluIHRoZSBkb2N1bWVudC5cbiAgICAgKlxuICAgICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIG9wZXJhdGUgb24gdGhlIERPTSB3aGVuIHRoZSBjb21wb25lbnQgaGFzXG4gICAgICogYmVlbiBtb3VudGVkIChpbml0aWFsaXplZCBhbmQgcmVuZGVyZWQpIGZvciB0aGUgZmlyc3QgdGltZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gcm9vdE5vZGUgRE9NIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQuXG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgY29tcG9uZW50RGlkTW91bnQ6ICdERUZJTkVfTUFOWScsXG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIGJlZm9yZSB0aGUgY29tcG9uZW50IHJlY2VpdmVzIG5ldyBwcm9wcy5cbiAgICAgKlxuICAgICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIHJlYWN0IHRvIGEgcHJvcCB0cmFuc2l0aW9uIGJ5IHVwZGF0aW5nIHRoZVxuICAgICAqIHN0YXRlIHVzaW5nIGB0aGlzLnNldFN0YXRlYC4gQ3VycmVudCBwcm9wcyBhcmUgYWNjZXNzZWQgdmlhIGB0aGlzLnByb3BzYC5cbiAgICAgKlxuICAgICAqICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wczogZnVuY3Rpb24obmV4dFByb3BzLCBuZXh0Q29udGV4dCkge1xuICAgICAqICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgKiAgICAgICBsaWtlc0luY3JlYXNpbmc6IG5leHRQcm9wcy5saWtlQ291bnQgPiB0aGlzLnByb3BzLmxpa2VDb3VudFxuICAgICAqICAgICB9KTtcbiAgICAgKiAgIH1cbiAgICAgKlxuICAgICAqIE5PVEU6IFRoZXJlIGlzIG5vIGVxdWl2YWxlbnQgYGNvbXBvbmVudFdpbGxSZWNlaXZlU3RhdGVgLiBBbiBpbmNvbWluZyBwcm9wXG4gICAgICogdHJhbnNpdGlvbiBtYXkgY2F1c2UgYSBzdGF0ZSBjaGFuZ2UsIGJ1dCB0aGUgb3Bwb3NpdGUgaXMgbm90IHRydWUuIElmIHlvdVxuICAgICAqIG5lZWQgaXQsIHlvdSBhcmUgcHJvYmFibHkgbG9va2luZyBmb3IgYGNvbXBvbmVudFdpbGxVcGRhdGVgLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG5leHRQcm9wc1xuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM6ICdERUZJTkVfTUFOWScsXG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIHdoaWxlIGRlY2lkaW5nIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkIGJlIHVwZGF0ZWQgYXMgYSByZXN1bHQgb2ZcbiAgICAgKiByZWNlaXZpbmcgbmV3IHByb3BzLCBzdGF0ZSBhbmQvb3IgY29udGV4dC5cbiAgICAgKlxuICAgICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIGByZXR1cm4gZmFsc2VgIHdoZW4geW91J3JlIGNlcnRhaW4gdGhhdCB0aGVcbiAgICAgKiB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgcHJvcHMvc3RhdGUvY29udGV4dCB3aWxsIG5vdCByZXF1aXJlIGEgY29tcG9uZW50XG4gICAgICogdXBkYXRlLlxuICAgICAqXG4gICAgICogICBzaG91bGRDb21wb25lbnRVcGRhdGU6IGZ1bmN0aW9uKG5leHRQcm9wcywgbmV4dFN0YXRlLCBuZXh0Q29udGV4dCkge1xuICAgICAqICAgICByZXR1cm4gIWVxdWFsKG5leHRQcm9wcywgdGhpcy5wcm9wcykgfHxcbiAgICAgKiAgICAgICAhZXF1YWwobmV4dFN0YXRlLCB0aGlzLnN0YXRlKSB8fFxuICAgICAqICAgICAgICFlcXVhbChuZXh0Q29udGV4dCwgdGhpcy5jb250ZXh0KTtcbiAgICAgKiAgIH1cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHNcbiAgICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRTdGF0ZVxuICAgICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dENvbnRleHRcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkIHVwZGF0ZS5cbiAgICAgKiBAb3B0aW9uYWxcbiAgICAgKi9cbiAgICBzaG91bGRDb21wb25lbnRVcGRhdGU6ICdERUZJTkVfT05DRScsXG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBhYm91dCB0byB1cGRhdGUgZHVlIHRvIGEgdHJhbnNpdGlvbiBmcm9tXG4gICAgICogYHRoaXMucHJvcHNgLCBgdGhpcy5zdGF0ZWAgYW5kIGB0aGlzLmNvbnRleHRgIHRvIGBuZXh0UHJvcHNgLCBgbmV4dFN0YXRlYFxuICAgICAqIGFuZCBgbmV4dENvbnRleHRgLlxuICAgICAqXG4gICAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gcGVyZm9ybSBwcmVwYXJhdGlvbiBiZWZvcmUgYW4gdXBkYXRlIG9jY3Vycy5cbiAgICAgKlxuICAgICAqIE5PVEU6IFlvdSAqKmNhbm5vdCoqIHVzZSBgdGhpcy5zZXRTdGF0ZSgpYCBpbiB0aGlzIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHNcbiAgICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRTdGF0ZVxuICAgICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dENvbnRleHRcbiAgICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgY29tcG9uZW50V2lsbFVwZGF0ZTogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50J3MgRE9NIHJlcHJlc2VudGF0aW9uIGhhcyBiZWVuIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBvcGVyYXRlIG9uIHRoZSBET00gd2hlbiB0aGUgY29tcG9uZW50IGhhc1xuICAgICAqIGJlZW4gdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwcmV2UHJvcHNcbiAgICAgKiBAcGFyYW0gez9vYmplY3R9IHByZXZTdGF0ZVxuICAgICAqIEBwYXJhbSB7P29iamVjdH0gcHJldkNvbnRleHRcbiAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IHJvb3ROb2RlIERPTSBlbGVtZW50IHJlcHJlc2VudGluZyB0aGUgY29tcG9uZW50LlxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGNvbXBvbmVudERpZFVwZGF0ZTogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGFib3V0IHRvIGJlIHJlbW92ZWQgZnJvbSBpdHMgcGFyZW50IGFuZCBoYXZlXG4gICAgICogaXRzIERPTSByZXByZXNlbnRhdGlvbiBkZXN0cm95ZWQuXG4gICAgICpcbiAgICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBkZWFsbG9jYXRlIGFueSBleHRlcm5hbCByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBOT1RFOiBUaGVyZSBpcyBubyBgY29tcG9uZW50RGlkVW5tb3VudGAgc2luY2UgeW91ciBjb21wb25lbnQgd2lsbCBoYXZlIGJlZW5cbiAgICAgKiBkZXN0cm95ZWQgYnkgdGhhdCBwb2ludC5cbiAgICAgKlxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50OiAnREVGSU5FX01BTlknLFxuXG4gICAgLyoqXG4gICAgICogUmVwbGFjZW1lbnQgZm9yIChkZXByZWNhdGVkKSBgY29tcG9uZW50V2lsbE1vdW50YC5cbiAgICAgKlxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQ6ICdERUZJTkVfTUFOWScsXG5cbiAgICAvKipcbiAgICAgKiBSZXBsYWNlbWVudCBmb3IgKGRlcHJlY2F0ZWQpIGBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzYC5cbiAgICAgKlxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzOiAnREVGSU5FX01BTlknLFxuXG4gICAgLyoqXG4gICAgICogUmVwbGFjZW1lbnQgZm9yIChkZXByZWNhdGVkKSBgY29tcG9uZW50V2lsbFVwZGF0ZWAuXG4gICAgICpcbiAgICAgKiBAb3B0aW9uYWxcbiAgICAgKi9cbiAgICBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZTogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8vID09PT0gQWR2YW5jZWQgbWV0aG9kcyA9PT09XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBjb21wb25lbnQncyBjdXJyZW50bHkgbW91bnRlZCBET00gcmVwcmVzZW50YXRpb24uXG4gICAgICpcbiAgICAgKiBCeSBkZWZhdWx0LCB0aGlzIGltcGxlbWVudHMgUmVhY3QncyByZW5kZXJpbmcgYW5kIHJlY29uY2lsaWF0aW9uIGFsZ29yaXRobS5cbiAgICAgKiBTb3BoaXN0aWNhdGVkIGNsaWVudHMgbWF5IHdpc2ggdG8gb3ZlcnJpZGUgdGhpcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKiBAb3ZlcnJpZGFibGVcbiAgICAgKi9cbiAgICB1cGRhdGVDb21wb25lbnQ6ICdPVkVSUklERV9CQVNFJ1xuICB9O1xuXG4gIC8qKlxuICAgKiBTaW1pbGFyIHRvIFJlYWN0Q2xhc3NJbnRlcmZhY2UgYnV0IGZvciBzdGF0aWMgbWV0aG9kcy5cbiAgICovXG4gIHZhciBSZWFjdENsYXNzU3RhdGljSW50ZXJmYWNlID0ge1xuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgYWZ0ZXIgYSBjb21wb25lbnQgaXMgaW5zdGFudGlhdGVkIGFuZCB3aGVuIGl0XG4gICAgICogcmVjZWl2ZXMgbmV3IHByb3BzLiBSZXR1cm4gYW4gb2JqZWN0IHRvIHVwZGF0ZSBzdGF0ZSBpbiByZXNwb25zZSB0b1xuICAgICAqIHByb3AgY2hhbmdlcy4gUmV0dXJuIG51bGwgdG8gaW5kaWNhdGUgbm8gY2hhbmdlIHRvIHN0YXRlLlxuICAgICAqXG4gICAgICogSWYgYW4gb2JqZWN0IGlzIHJldHVybmVkLCBpdHMga2V5cyB3aWxsIGJlIG1lcmdlZCBpbnRvIHRoZSBleGlzdGluZyBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge29iamVjdCB8fCBudWxsfVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczogJ0RFRklORV9NQU5ZX01FUkdFRCdcbiAgfTtcblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIGNsYXNzIHNwZWNpZmljYXRpb24ga2V5cyB0byBzcGVjaWFsIHByb2Nlc3NpbmcgZnVuY3Rpb25zLlxuICAgKlxuICAgKiBBbHRob3VnaCB0aGVzZSBhcmUgZGVjbGFyZWQgbGlrZSBpbnN0YW5jZSBwcm9wZXJ0aWVzIGluIHRoZSBzcGVjaWZpY2F0aW9uXG4gICAqIHdoZW4gZGVmaW5pbmcgY2xhc3NlcyB1c2luZyBgUmVhY3QuY3JlYXRlQ2xhc3NgLCB0aGV5IGFyZSBhY3R1YWxseSBzdGF0aWNcbiAgICogYW5kIGFyZSBhY2Nlc3NpYmxlIG9uIHRoZSBjb25zdHJ1Y3RvciBpbnN0ZWFkIG9mIHRoZSBwcm90b3R5cGUuIERlc3BpdGVcbiAgICogYmVpbmcgc3RhdGljLCB0aGV5IG11c3QgYmUgZGVmaW5lZCBvdXRzaWRlIG9mIHRoZSBcInN0YXRpY3NcIiBrZXkgdW5kZXJcbiAgICogd2hpY2ggYWxsIG90aGVyIHN0YXRpYyBtZXRob2RzIGFyZSBkZWZpbmVkLlxuICAgKi9cbiAgdmFyIFJFU0VSVkVEX1NQRUNfS0VZUyA9IHtcbiAgICBkaXNwbGF5TmFtZTogZnVuY3Rpb24oQ29uc3RydWN0b3IsIGRpc3BsYXlOYW1lKSB7XG4gICAgICBDb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSA9IGRpc3BsYXlOYW1lO1xuICAgIH0sXG4gICAgbWl4aW5zOiBmdW5jdGlvbihDb25zdHJ1Y3RvciwgbWl4aW5zKSB7XG4gICAgICBpZiAobWl4aW5zKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWl4aW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbWl4U3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIG1peGluc1tpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGNoaWxkQ29udGV4dFR5cGVzOiBmdW5jdGlvbihDb25zdHJ1Y3RvciwgY2hpbGRDb250ZXh0VHlwZXMpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhbGlkYXRlVHlwZURlZihDb25zdHJ1Y3RvciwgY2hpbGRDb250ZXh0VHlwZXMsICdjaGlsZENvbnRleHQnKTtcbiAgICAgIH1cbiAgICAgIENvbnN0cnVjdG9yLmNoaWxkQ29udGV4dFR5cGVzID0gX2Fzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIENvbnN0cnVjdG9yLmNoaWxkQ29udGV4dFR5cGVzLFxuICAgICAgICBjaGlsZENvbnRleHRUeXBlc1xuICAgICAgKTtcbiAgICB9LFxuICAgIGNvbnRleHRUeXBlczogZnVuY3Rpb24oQ29uc3RydWN0b3IsIGNvbnRleHRUeXBlcykge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgdmFsaWRhdGVUeXBlRGVmKENvbnN0cnVjdG9yLCBjb250ZXh0VHlwZXMsICdjb250ZXh0Jyk7XG4gICAgICB9XG4gICAgICBDb25zdHJ1Y3Rvci5jb250ZXh0VHlwZXMgPSBfYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAgQ29uc3RydWN0b3IuY29udGV4dFR5cGVzLFxuICAgICAgICBjb250ZXh0VHlwZXNcbiAgICAgICk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBTcGVjaWFsIGNhc2UgZ2V0RGVmYXVsdFByb3BzIHdoaWNoIHNob3VsZCBtb3ZlIGludG8gc3RhdGljcyBidXQgcmVxdWlyZXNcbiAgICAgKiBhdXRvbWF0aWMgbWVyZ2luZy5cbiAgICAgKi9cbiAgICBnZXREZWZhdWx0UHJvcHM6IGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBnZXREZWZhdWx0UHJvcHMpIHtcbiAgICAgIGlmIChDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMpIHtcbiAgICAgICAgQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzID0gY3JlYXRlTWVyZ2VkUmVzdWx0RnVuY3Rpb24oXG4gICAgICAgICAgQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzLFxuICAgICAgICAgIGdldERlZmF1bHRQcm9wc1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzID0gZ2V0RGVmYXVsdFByb3BzO1xuICAgICAgfVxuICAgIH0sXG4gICAgcHJvcFR5cGVzOiBmdW5jdGlvbihDb25zdHJ1Y3RvciwgcHJvcFR5cGVzKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB2YWxpZGF0ZVR5cGVEZWYoQ29uc3RydWN0b3IsIHByb3BUeXBlcywgJ3Byb3AnKTtcbiAgICAgIH1cbiAgICAgIENvbnN0cnVjdG9yLnByb3BUeXBlcyA9IF9hc3NpZ24oe30sIENvbnN0cnVjdG9yLnByb3BUeXBlcywgcHJvcFR5cGVzKTtcbiAgICB9LFxuICAgIHN0YXRpY3M6IGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBzdGF0aWNzKSB7XG4gICAgICBtaXhTdGF0aWNTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwgc3RhdGljcyk7XG4gICAgfSxcbiAgICBhdXRvYmluZDogZnVuY3Rpb24oKSB7fVxuICB9O1xuXG4gIGZ1bmN0aW9uIHZhbGlkYXRlVHlwZURlZihDb25zdHJ1Y3RvciwgdHlwZURlZiwgbG9jYXRpb24pIHtcbiAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiB0eXBlRGVmKSB7XG4gICAgICBpZiAodHlwZURlZi5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgLy8gdXNlIGEgd2FybmluZyBpbnN0ZWFkIG9mIGFuIF9pbnZhcmlhbnQgc28gY29tcG9uZW50c1xuICAgICAgICAvLyBkb24ndCBzaG93IHVwIGluIHByb2QgYnV0IG9ubHkgaW4gX19ERVZfX1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHdhcm5pbmcoXG4gICAgICAgICAgICB0eXBlb2YgdHlwZURlZltwcm9wTmFtZV0gPT09ICdmdW5jdGlvbicsXG4gICAgICAgICAgICAnJXM6ICVzIHR5cGUgYCVzYCBpcyBpbnZhbGlkOyBpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSAnICtcbiAgICAgICAgICAgICAgJ1JlYWN0LlByb3BUeXBlcy4nLFxuICAgICAgICAgICAgQ29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgJ1JlYWN0Q2xhc3MnLFxuICAgICAgICAgICAgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dLFxuICAgICAgICAgICAgcHJvcE5hbWVcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdmFsaWRhdGVNZXRob2RPdmVycmlkZShpc0FscmVhZHlEZWZpbmVkLCBuYW1lKSB7XG4gICAgdmFyIHNwZWNQb2xpY3kgPSBSZWFjdENsYXNzSW50ZXJmYWNlLmhhc093blByb3BlcnR5KG5hbWUpXG4gICAgICA/IFJlYWN0Q2xhc3NJbnRlcmZhY2VbbmFtZV1cbiAgICAgIDogbnVsbDtcblxuICAgIC8vIERpc2FsbG93IG92ZXJyaWRpbmcgb2YgYmFzZSBjbGFzcyBtZXRob2RzIHVubGVzcyBleHBsaWNpdGx5IGFsbG93ZWQuXG4gICAgaWYgKFJlYWN0Q2xhc3NNaXhpbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgX2ludmFyaWFudChcbiAgICAgICAgc3BlY1BvbGljeSA9PT0gJ09WRVJSSURFX0JBU0UnLFxuICAgICAgICAnUmVhY3RDbGFzc0ludGVyZmFjZTogWW91IGFyZSBhdHRlbXB0aW5nIHRvIG92ZXJyaWRlICcgK1xuICAgICAgICAgICdgJXNgIGZyb20geW91ciBjbGFzcyBzcGVjaWZpY2F0aW9uLiBFbnN1cmUgdGhhdCB5b3VyIG1ldGhvZCBuYW1lcyAnICtcbiAgICAgICAgICAnZG8gbm90IG92ZXJsYXAgd2l0aCBSZWFjdCBtZXRob2RzLicsXG4gICAgICAgIG5hbWVcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRGlzYWxsb3cgZGVmaW5pbmcgbWV0aG9kcyBtb3JlIHRoYW4gb25jZSB1bmxlc3MgZXhwbGljaXRseSBhbGxvd2VkLlxuICAgIGlmIChpc0FscmVhZHlEZWZpbmVkKSB7XG4gICAgICBfaW52YXJpYW50KFxuICAgICAgICBzcGVjUG9saWN5ID09PSAnREVGSU5FX01BTlknIHx8IHNwZWNQb2xpY3kgPT09ICdERUZJTkVfTUFOWV9NRVJHRUQnLFxuICAgICAgICAnUmVhY3RDbGFzc0ludGVyZmFjZTogWW91IGFyZSBhdHRlbXB0aW5nIHRvIGRlZmluZSAnICtcbiAgICAgICAgICAnYCVzYCBvbiB5b3VyIGNvbXBvbmVudCBtb3JlIHRoYW4gb25jZS4gVGhpcyBjb25mbGljdCBtYXkgYmUgZHVlICcgK1xuICAgICAgICAgICd0byBhIG1peGluLicsXG4gICAgICAgIG5hbWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1peGluIGhlbHBlciB3aGljaCBoYW5kbGVzIHBvbGljeSB2YWxpZGF0aW9uIGFuZCByZXNlcnZlZFxuICAgKiBzcGVjaWZpY2F0aW9uIGtleXMgd2hlbiBidWlsZGluZyBSZWFjdCBjbGFzc2VzLlxuICAgKi9cbiAgZnVuY3Rpb24gbWl4U3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIHNwZWMpIHtcbiAgICBpZiAoIXNwZWMpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhciB0eXBlb2ZTcGVjID0gdHlwZW9mIHNwZWM7XG4gICAgICAgIHZhciBpc01peGluVmFsaWQgPSB0eXBlb2ZTcGVjID09PSAnb2JqZWN0JyAmJiBzcGVjICE9PSBudWxsO1xuXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgd2FybmluZyhcbiAgICAgICAgICAgIGlzTWl4aW5WYWxpZCxcbiAgICAgICAgICAgIFwiJXM6IFlvdSdyZSBhdHRlbXB0aW5nIHRvIGluY2x1ZGUgYSBtaXhpbiB0aGF0IGlzIGVpdGhlciBudWxsIFwiICtcbiAgICAgICAgICAgICAgJ29yIG5vdCBhbiBvYmplY3QuIENoZWNrIHRoZSBtaXhpbnMgaW5jbHVkZWQgYnkgdGhlIGNvbXBvbmVudCwgJyArXG4gICAgICAgICAgICAgICdhcyB3ZWxsIGFzIGFueSBtaXhpbnMgdGhleSBpbmNsdWRlIHRoZW1zZWx2ZXMuICcgK1xuICAgICAgICAgICAgICAnRXhwZWN0ZWQgb2JqZWN0IGJ1dCBnb3QgJXMuJyxcbiAgICAgICAgICAgIENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8ICdSZWFjdENsYXNzJyxcbiAgICAgICAgICAgIHNwZWMgPT09IG51bGwgPyBudWxsIDogdHlwZW9mU3BlY1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIF9pbnZhcmlhbnQoXG4gICAgICB0eXBlb2Ygc3BlYyAhPT0gJ2Z1bmN0aW9uJyxcbiAgICAgIFwiUmVhY3RDbGFzczogWW91J3JlIGF0dGVtcHRpbmcgdG8gXCIgK1xuICAgICAgICAndXNlIGEgY29tcG9uZW50IGNsYXNzIG9yIGZ1bmN0aW9uIGFzIGEgbWl4aW4uIEluc3RlYWQsIGp1c3QgdXNlIGEgJyArXG4gICAgICAgICdyZWd1bGFyIG9iamVjdC4nXG4gICAgKTtcbiAgICBfaW52YXJpYW50KFxuICAgICAgIWlzVmFsaWRFbGVtZW50KHNwZWMpLFxuICAgICAgXCJSZWFjdENsYXNzOiBZb3UncmUgYXR0ZW1wdGluZyB0byBcIiArXG4gICAgICAgICd1c2UgYSBjb21wb25lbnQgYXMgYSBtaXhpbi4gSW5zdGVhZCwganVzdCB1c2UgYSByZWd1bGFyIG9iamVjdC4nXG4gICAgKTtcblxuICAgIHZhciBwcm90byA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgICB2YXIgYXV0b0JpbmRQYWlycyA9IHByb3RvLl9fcmVhY3RBdXRvQmluZFBhaXJzO1xuXG4gICAgLy8gQnkgaGFuZGxpbmcgbWl4aW5zIGJlZm9yZSBhbnkgb3RoZXIgcHJvcGVydGllcywgd2UgZW5zdXJlIHRoZSBzYW1lXG4gICAgLy8gY2hhaW5pbmcgb3JkZXIgaXMgYXBwbGllZCB0byBtZXRob2RzIHdpdGggREVGSU5FX01BTlkgcG9saWN5LCB3aGV0aGVyXG4gICAgLy8gbWl4aW5zIGFyZSBsaXN0ZWQgYmVmb3JlIG9yIGFmdGVyIHRoZXNlIG1ldGhvZHMgaW4gdGhlIHNwZWMuXG4gICAgaWYgKHNwZWMuaGFzT3duUHJvcGVydHkoTUlYSU5TX0tFWSkpIHtcbiAgICAgIFJFU0VSVkVEX1NQRUNfS0VZUy5taXhpbnMoQ29uc3RydWN0b3IsIHNwZWMubWl4aW5zKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBuYW1lIGluIHNwZWMpIHtcbiAgICAgIGlmICghc3BlYy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5hbWUgPT09IE1JWElOU19LRVkpIHtcbiAgICAgICAgLy8gV2UgaGF2ZSBhbHJlYWR5IGhhbmRsZWQgbWl4aW5zIGluIGEgc3BlY2lhbCBjYXNlIGFib3ZlLlxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb3BlcnR5ID0gc3BlY1tuYW1lXTtcbiAgICAgIHZhciBpc0FscmVhZHlEZWZpbmVkID0gcHJvdG8uaGFzT3duUHJvcGVydHkobmFtZSk7XG4gICAgICB2YWxpZGF0ZU1ldGhvZE92ZXJyaWRlKGlzQWxyZWFkeURlZmluZWQsIG5hbWUpO1xuXG4gICAgICBpZiAoUkVTRVJWRURfU1BFQ19LRVlTLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIFJFU0VSVkVEX1NQRUNfS0VZU1tuYW1lXShDb25zdHJ1Y3RvciwgcHJvcGVydHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2V0dXAgbWV0aG9kcyBvbiBwcm90b3R5cGU6XG4gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgbWVtYmVyIG1ldGhvZHMgc2hvdWxkIG5vdCBiZSBhdXRvbWF0aWNhbGx5IGJvdW5kOlxuICAgICAgICAvLyAxLiBFeHBlY3RlZCBSZWFjdENsYXNzIG1ldGhvZHMgKGluIHRoZSBcImludGVyZmFjZVwiKS5cbiAgICAgICAgLy8gMi4gT3ZlcnJpZGRlbiBtZXRob2RzICh0aGF0IHdlcmUgbWl4ZWQgaW4pLlxuICAgICAgICB2YXIgaXNSZWFjdENsYXNzTWV0aG9kID0gUmVhY3RDbGFzc0ludGVyZmFjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgICAgICAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgcHJvcGVydHkgPT09ICdmdW5jdGlvbic7XG4gICAgICAgIHZhciBzaG91bGRBdXRvQmluZCA9XG4gICAgICAgICAgaXNGdW5jdGlvbiAmJlxuICAgICAgICAgICFpc1JlYWN0Q2xhc3NNZXRob2QgJiZcbiAgICAgICAgICAhaXNBbHJlYWR5RGVmaW5lZCAmJlxuICAgICAgICAgIHNwZWMuYXV0b2JpbmQgIT09IGZhbHNlO1xuXG4gICAgICAgIGlmIChzaG91bGRBdXRvQmluZCkge1xuICAgICAgICAgIGF1dG9CaW5kUGFpcnMucHVzaChuYW1lLCBwcm9wZXJ0eSk7XG4gICAgICAgICAgcHJvdG9bbmFtZV0gPSBwcm9wZXJ0eTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaXNBbHJlYWR5RGVmaW5lZCkge1xuICAgICAgICAgICAgdmFyIHNwZWNQb2xpY3kgPSBSZWFjdENsYXNzSW50ZXJmYWNlW25hbWVdO1xuXG4gICAgICAgICAgICAvLyBUaGVzZSBjYXNlcyBzaG91bGQgYWxyZWFkeSBiZSBjYXVnaHQgYnkgdmFsaWRhdGVNZXRob2RPdmVycmlkZS5cbiAgICAgICAgICAgIF9pbnZhcmlhbnQoXG4gICAgICAgICAgICAgIGlzUmVhY3RDbGFzc01ldGhvZCAmJlxuICAgICAgICAgICAgICAgIChzcGVjUG9saWN5ID09PSAnREVGSU5FX01BTllfTUVSR0VEJyB8fFxuICAgICAgICAgICAgICAgICAgc3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZJyksXG4gICAgICAgICAgICAgICdSZWFjdENsYXNzOiBVbmV4cGVjdGVkIHNwZWMgcG9saWN5ICVzIGZvciBrZXkgJXMgJyArXG4gICAgICAgICAgICAgICAgJ3doZW4gbWl4aW5nIGluIGNvbXBvbmVudCBzcGVjcy4nLFxuICAgICAgICAgICAgICBzcGVjUG9saWN5LFxuICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBGb3IgbWV0aG9kcyB3aGljaCBhcmUgZGVmaW5lZCBtb3JlIHRoYW4gb25jZSwgY2FsbCB0aGUgZXhpc3RpbmdcbiAgICAgICAgICAgIC8vIG1ldGhvZHMgYmVmb3JlIGNhbGxpbmcgdGhlIG5ldyBwcm9wZXJ0eSwgbWVyZ2luZyBpZiBhcHByb3ByaWF0ZS5cbiAgICAgICAgICAgIGlmIChzcGVjUG9saWN5ID09PSAnREVGSU5FX01BTllfTUVSR0VEJykge1xuICAgICAgICAgICAgICBwcm90b1tuYW1lXSA9IGNyZWF0ZU1lcmdlZFJlc3VsdEZ1bmN0aW9uKHByb3RvW25hbWVdLCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNwZWNQb2xpY3kgPT09ICdERUZJTkVfTUFOWScpIHtcbiAgICAgICAgICAgICAgcHJvdG9bbmFtZV0gPSBjcmVhdGVDaGFpbmVkRnVuY3Rpb24ocHJvdG9bbmFtZV0sIHByb3BlcnR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJvdG9bbmFtZV0gPSBwcm9wZXJ0eTtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgIC8vIEFkZCB2ZXJib3NlIGRpc3BsYXlOYW1lIHRvIHRoZSBmdW5jdGlvbiwgd2hpY2ggaGVscHMgd2hlbiBsb29raW5nXG4gICAgICAgICAgICAgIC8vIGF0IHByb2ZpbGluZyB0b29scy5cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJyAmJiBzcGVjLmRpc3BsYXlOYW1lKSB7XG4gICAgICAgICAgICAgICAgcHJvdG9bbmFtZV0uZGlzcGxheU5hbWUgPSBzcGVjLmRpc3BsYXlOYW1lICsgJ18nICsgbmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1peFN0YXRpY1NwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBzdGF0aWNzKSB7XG4gICAgaWYgKCFzdGF0aWNzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yICh2YXIgbmFtZSBpbiBzdGF0aWNzKSB7XG4gICAgICB2YXIgcHJvcGVydHkgPSBzdGF0aWNzW25hbWVdO1xuICAgICAgaWYgKCFzdGF0aWNzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgaXNSZXNlcnZlZCA9IG5hbWUgaW4gUkVTRVJWRURfU1BFQ19LRVlTO1xuICAgICAgX2ludmFyaWFudChcbiAgICAgICAgIWlzUmVzZXJ2ZWQsXG4gICAgICAgICdSZWFjdENsYXNzOiBZb3UgYXJlIGF0dGVtcHRpbmcgdG8gZGVmaW5lIGEgcmVzZXJ2ZWQgJyArXG4gICAgICAgICAgJ3Byb3BlcnR5LCBgJXNgLCB0aGF0IHNob3VsZG5cXCd0IGJlIG9uIHRoZSBcInN0YXRpY3NcIiBrZXkuIERlZmluZSBpdCAnICtcbiAgICAgICAgICAnYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgaW5zdGVhZDsgaXQgd2lsbCBzdGlsbCBiZSBhY2Nlc3NpYmxlIG9uIHRoZSAnICtcbiAgICAgICAgICAnY29uc3RydWN0b3IuJyxcbiAgICAgICAgbmFtZVxuICAgICAgKTtcblxuICAgICAgdmFyIGlzQWxyZWFkeURlZmluZWQgPSBuYW1lIGluIENvbnN0cnVjdG9yO1xuICAgICAgaWYgKGlzQWxyZWFkeURlZmluZWQpIHtcbiAgICAgICAgdmFyIHNwZWNQb2xpY3kgPSBSZWFjdENsYXNzU3RhdGljSW50ZXJmYWNlLmhhc093blByb3BlcnR5KG5hbWUpXG4gICAgICAgICAgPyBSZWFjdENsYXNzU3RhdGljSW50ZXJmYWNlW25hbWVdXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgIF9pbnZhcmlhbnQoXG4gICAgICAgICAgc3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZX01FUkdFRCcsXG4gICAgICAgICAgJ1JlYWN0Q2xhc3M6IFlvdSBhcmUgYXR0ZW1wdGluZyB0byBkZWZpbmUgJyArXG4gICAgICAgICAgICAnYCVzYCBvbiB5b3VyIGNvbXBvbmVudCBtb3JlIHRoYW4gb25jZS4gVGhpcyBjb25mbGljdCBtYXkgYmUgJyArXG4gICAgICAgICAgICAnZHVlIHRvIGEgbWl4aW4uJyxcbiAgICAgICAgICBuYW1lXG4gICAgICAgICk7XG5cbiAgICAgICAgQ29uc3RydWN0b3JbbmFtZV0gPSBjcmVhdGVNZXJnZWRSZXN1bHRGdW5jdGlvbihDb25zdHJ1Y3RvcltuYW1lXSwgcHJvcGVydHkpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgQ29uc3RydWN0b3JbbmFtZV0gPSBwcm9wZXJ0eTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2UgdHdvIG9iamVjdHMsIGJ1dCB0aHJvdyBpZiBib3RoIGNvbnRhaW4gdGhlIHNhbWUga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb25lIFRoZSBmaXJzdCBvYmplY3QsIHdoaWNoIGlzIG11dGF0ZWQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSB0d28gVGhlIHNlY29uZCBvYmplY3RcbiAgICogQHJldHVybiB7b2JqZWN0fSBvbmUgYWZ0ZXIgaXQgaGFzIGJlZW4gbXV0YXRlZCB0byBjb250YWluIGV2ZXJ5dGhpbmcgaW4gdHdvLlxuICAgKi9cbiAgZnVuY3Rpb24gbWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cyhvbmUsIHR3bykge1xuICAgIF9pbnZhcmlhbnQoXG4gICAgICBvbmUgJiYgdHdvICYmIHR5cGVvZiBvbmUgPT09ICdvYmplY3QnICYmIHR5cGVvZiB0d28gPT09ICdvYmplY3QnLFxuICAgICAgJ21lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMoKTogQ2Fubm90IG1lcmdlIG5vbi1vYmplY3RzLidcbiAgICApO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHR3bykge1xuICAgICAgaWYgKHR3by5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIF9pbnZhcmlhbnQoXG4gICAgICAgICAgb25lW2tleV0gPT09IHVuZGVmaW5lZCxcbiAgICAgICAgICAnbWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cygpOiAnICtcbiAgICAgICAgICAgICdUcmllZCB0byBtZXJnZSB0d28gb2JqZWN0cyB3aXRoIHRoZSBzYW1lIGtleTogYCVzYC4gVGhpcyBjb25mbGljdCAnICtcbiAgICAgICAgICAgICdtYXkgYmUgZHVlIHRvIGEgbWl4aW47IGluIHBhcnRpY3VsYXIsIHRoaXMgbWF5IGJlIGNhdXNlZCBieSB0d28gJyArXG4gICAgICAgICAgICAnZ2V0SW5pdGlhbFN0YXRlKCkgb3IgZ2V0RGVmYXVsdFByb3BzKCkgbWV0aG9kcyByZXR1cm5pbmcgb2JqZWN0cyAnICtcbiAgICAgICAgICAgICd3aXRoIGNsYXNoaW5nIGtleXMuJyxcbiAgICAgICAgICBrZXlcbiAgICAgICAgKTtcbiAgICAgICAgb25lW2tleV0gPSB0d29ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9uZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHR3byBmdW5jdGlvbnMgYW5kIG1lcmdlcyB0aGVpciByZXR1cm4gdmFsdWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBvbmUgRnVuY3Rpb24gdG8gaW52b2tlIGZpcnN0LlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSB0d28gRnVuY3Rpb24gdG8gaW52b2tlIHNlY29uZC5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgdHdvIGFyZ3VtZW50IGZ1bmN0aW9ucy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGZ1bmN0aW9uIGNyZWF0ZU1lcmdlZFJlc3VsdEZ1bmN0aW9uKG9uZSwgdHdvKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdlZFJlc3VsdCgpIHtcbiAgICAgIHZhciBhID0gb25lLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB2YXIgYiA9IHR3by5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgaWYgKGEgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gYjtcbiAgICAgIH0gZWxzZSBpZiAoYiA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBhO1xuICAgICAgfVxuICAgICAgdmFyIGMgPSB7fTtcbiAgICAgIG1lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMoYywgYSk7XG4gICAgICBtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKGMsIGIpO1xuICAgICAgcmV0dXJuIGM7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIHR3byBmdW5jdGlvbnMgYW5kIGlnbm9yZXMgdGhlaXIgcmV0dXJuIHZhbGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBvbmUgRnVuY3Rpb24gdG8gaW52b2tlIGZpcnN0LlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSB0d28gRnVuY3Rpb24gdG8gaW52b2tlIHNlY29uZC5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IEZ1bmN0aW9uIHRoYXQgaW52b2tlcyB0aGUgdHdvIGFyZ3VtZW50IGZ1bmN0aW9ucy5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluZWRGdW5jdGlvbihvbmUsIHR3bykge1xuICAgIHJldHVybiBmdW5jdGlvbiBjaGFpbmVkRnVuY3Rpb24oKSB7XG4gICAgICBvbmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHR3by5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgYSBtZXRob2QgdG8gdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbXBvbmVudCBDb21wb25lbnQgd2hvc2UgbWV0aG9kIGlzIGdvaW5nIHRvIGJlIGJvdW5kLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXRob2QgTWV0aG9kIHRvIGJlIGJvdW5kLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gVGhlIGJvdW5kIG1ldGhvZC5cbiAgICovXG4gIGZ1bmN0aW9uIGJpbmRBdXRvQmluZE1ldGhvZChjb21wb25lbnQsIG1ldGhvZCkge1xuICAgIHZhciBib3VuZE1ldGhvZCA9IG1ldGhvZC5iaW5kKGNvbXBvbmVudCk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZENvbnRleHQgPSBjb21wb25lbnQ7XG4gICAgICBib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRNZXRob2QgPSBtZXRob2Q7XG4gICAgICBib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRBcmd1bWVudHMgPSBudWxsO1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBjb21wb25lbnQuY29uc3RydWN0b3IuZGlzcGxheU5hbWU7XG4gICAgICB2YXIgX2JpbmQgPSBib3VuZE1ldGhvZC5iaW5kO1xuICAgICAgYm91bmRNZXRob2QuYmluZCA9IGZ1bmN0aW9uKG5ld1RoaXMpIHtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICB2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgICAgICBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLFxuICAgICAgICAgICAgX2tleSA9IDE7XG4gICAgICAgICAgX2tleSA8IF9sZW47XG4gICAgICAgICAgX2tleSsrXG4gICAgICAgICkge1xuICAgICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXNlciBpcyB0cnlpbmcgdG8gYmluZCgpIGFuIGF1dG9ib3VuZCBtZXRob2Q7IHdlIGVmZmVjdGl2ZWx5IHdpbGxcbiAgICAgICAgLy8gaWdub3JlIHRoZSB2YWx1ZSBvZiBcInRoaXNcIiB0aGF0IHRoZSB1c2VyIGlzIHRyeWluZyB0byB1c2UsIHNvXG4gICAgICAgIC8vIGxldCdzIHdhcm4uXG4gICAgICAgIGlmIChuZXdUaGlzICE9PSBjb21wb25lbnQgJiYgbmV3VGhpcyAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICB3YXJuaW5nKFxuICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgJ2JpbmQoKTogUmVhY3QgY29tcG9uZW50IG1ldGhvZHMgbWF5IG9ubHkgYmUgYm91bmQgdG8gdGhlICcgK1xuICAgICAgICAgICAgICAgICdjb21wb25lbnQgaW5zdGFuY2UuIFNlZSAlcycsXG4gICAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFhcmdzLmxlbmd0aCkge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICB3YXJuaW5nKFxuICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgJ2JpbmQoKTogWW91IGFyZSBiaW5kaW5nIGEgY29tcG9uZW50IG1ldGhvZCB0byB0aGUgY29tcG9uZW50LiAnICtcbiAgICAgICAgICAgICAgICAnUmVhY3QgZG9lcyB0aGlzIGZvciB5b3UgYXV0b21hdGljYWxseSBpbiBhIGhpZ2gtcGVyZm9ybWFuY2UgJyArXG4gICAgICAgICAgICAgICAgJ3dheSwgc28geW91IGNhbiBzYWZlbHkgcmVtb3ZlIHRoaXMgY2FsbC4gU2VlICVzJyxcbiAgICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGJvdW5kTWV0aG9kO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZWJvdW5kTWV0aG9kID0gX2JpbmQuYXBwbHkoYm91bmRNZXRob2QsIGFyZ3VtZW50cyk7XG4gICAgICAgIHJlYm91bmRNZXRob2QuX19yZWFjdEJvdW5kQ29udGV4dCA9IGNvbXBvbmVudDtcbiAgICAgICAgcmVib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRNZXRob2QgPSBtZXRob2Q7XG4gICAgICAgIHJlYm91bmRNZXRob2QuX19yZWFjdEJvdW5kQXJndW1lbnRzID0gYXJncztcbiAgICAgICAgcmV0dXJuIHJlYm91bmRNZXRob2Q7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gYm91bmRNZXRob2Q7XG4gIH1cblxuICAvKipcbiAgICogQmluZHMgYWxsIGF1dG8tYm91bmQgbWV0aG9kcyBpbiBhIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbXBvbmVudCBDb21wb25lbnQgd2hvc2UgbWV0aG9kIGlzIGdvaW5nIHRvIGJlIGJvdW5kLlxuICAgKi9cbiAgZnVuY3Rpb24gYmluZEF1dG9CaW5kTWV0aG9kcyhjb21wb25lbnQpIHtcbiAgICB2YXIgcGFpcnMgPSBjb21wb25lbnQuX19yZWFjdEF1dG9CaW5kUGFpcnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYWlycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgdmFyIGF1dG9CaW5kS2V5ID0gcGFpcnNbaV07XG4gICAgICB2YXIgbWV0aG9kID0gcGFpcnNbaSArIDFdO1xuICAgICAgY29tcG9uZW50W2F1dG9CaW5kS2V5XSA9IGJpbmRBdXRvQmluZE1ldGhvZChjb21wb25lbnQsIG1ldGhvZCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIElzTW91bnRlZFByZU1peGluID0ge1xuICAgIGNvbXBvbmVudERpZE1vdW50OiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuX19pc01vdW50ZWQgPSB0cnVlO1xuICAgIH1cbiAgfTtcblxuICB2YXIgSXNNb3VudGVkUG9zdE1peGluID0ge1xuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50OiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuX19pc01vdW50ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEFkZCBtb3JlIHRvIHRoZSBSZWFjdENsYXNzIGJhc2UgY2xhc3MuIFRoZXNlIGFyZSBhbGwgbGVnYWN5IGZlYXR1cmVzIGFuZFxuICAgKiB0aGVyZWZvcmUgbm90IGFscmVhZHkgcGFydCBvZiB0aGUgbW9kZXJuIFJlYWN0Q29tcG9uZW50LlxuICAgKi9cbiAgdmFyIFJlYWN0Q2xhc3NNaXhpbiA9IHtcbiAgICAvKipcbiAgICAgKiBUT0RPOiBUaGlzIHdpbGwgYmUgZGVwcmVjYXRlZCBiZWNhdXNlIHN0YXRlIHNob3VsZCBhbHdheXMga2VlcCBhIGNvbnNpc3RlbnRcbiAgICAgKiB0eXBlIHNpZ25hdHVyZSBhbmQgdGhlIG9ubHkgdXNlIGNhc2UgZm9yIHRoaXMsIGlzIHRvIGF2b2lkIHRoYXQuXG4gICAgICovXG4gICAgcmVwbGFjZVN0YXRlOiBmdW5jdGlvbihuZXdTdGF0ZSwgY2FsbGJhY2spIHtcbiAgICAgIHRoaXMudXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKHRoaXMsIG5ld1N0YXRlLCBjYWxsYmFjayk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvbXBvc2l0ZSBjb21wb25lbnQgaXMgbW91bnRlZC5cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIG1vdW50ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICogQGZpbmFsXG4gICAgICovXG4gICAgaXNNb3VudGVkOiBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm5pbmcoXG4gICAgICAgICAgdGhpcy5fX2RpZFdhcm5Jc01vdW50ZWQsXG4gICAgICAgICAgJyVzOiBpc01vdW50ZWQgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgbWFrZSBzdXJlIHRvIGNsZWFuIHVwICcgK1xuICAgICAgICAgICAgJ3N1YnNjcmlwdGlvbnMgYW5kIHBlbmRpbmcgcmVxdWVzdHMgaW4gY29tcG9uZW50V2lsbFVubW91bnQgdG8gJyArXG4gICAgICAgICAgICAncHJldmVudCBtZW1vcnkgbGVha3MuJyxcbiAgICAgICAgICAodGhpcy5jb25zdHJ1Y3RvciAmJiB0aGlzLmNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lKSB8fFxuICAgICAgICAgICAgdGhpcy5uYW1lIHx8XG4gICAgICAgICAgICAnQ29tcG9uZW50J1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl9fZGlkV2FybklzTW91bnRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gISF0aGlzLl9faXNNb3VudGVkO1xuICAgIH1cbiAgfTtcblxuICB2YXIgUmVhY3RDbGFzc0NvbXBvbmVudCA9IGZ1bmN0aW9uKCkge307XG4gIF9hc3NpZ24oXG4gICAgUmVhY3RDbGFzc0NvbXBvbmVudC5wcm90b3R5cGUsXG4gICAgUmVhY3RDb21wb25lbnQucHJvdG90eXBlLFxuICAgIFJlYWN0Q2xhc3NNaXhpblxuICApO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY29tcG9zaXRlIGNvbXBvbmVudCBjbGFzcyBnaXZlbiBhIGNsYXNzIHNwZWNpZmljYXRpb24uXG4gICAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3RvcC1sZXZlbC1hcGkuaHRtbCNyZWFjdC5jcmVhdGVjbGFzc1xuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gc3BlYyBDbGFzcyBzcGVjaWZpY2F0aW9uICh3aGljaCBtdXN0IGRlZmluZSBgcmVuZGVyYCkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBDb21wb25lbnQgY29uc3RydWN0b3IgZnVuY3Rpb24uXG4gICAqIEBwdWJsaWNcbiAgICovXG4gIGZ1bmN0aW9uIGNyZWF0ZUNsYXNzKHNwZWMpIHtcbiAgICAvLyBUbyBrZWVwIG91ciB3YXJuaW5ncyBtb3JlIHVuZGVyc3RhbmRhYmxlLCB3ZSdsbCB1c2UgYSBsaXR0bGUgaGFjayBoZXJlIHRvXG4gICAgLy8gZW5zdXJlIHRoYXQgQ29uc3RydWN0b3IubmFtZSAhPT0gJ0NvbnN0cnVjdG9yJy4gVGhpcyBtYWtlcyBzdXJlIHdlIGRvbid0XG4gICAgLy8gdW5uZWNlc3NhcmlseSBpZGVudGlmeSBhIGNsYXNzIHdpdGhvdXQgZGlzcGxheU5hbWUgYXMgJ0NvbnN0cnVjdG9yJy5cbiAgICB2YXIgQ29uc3RydWN0b3IgPSBpZGVudGl0eShmdW5jdGlvbihwcm9wcywgY29udGV4dCwgdXBkYXRlcikge1xuICAgICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBnZXRzIG92ZXJyaWRkZW4gYnkgbW9ja3MuIFRoZSBhcmd1bWVudCBpcyB1c2VkXG4gICAgICAvLyBieSBtb2NrcyB0byBhc3NlcnQgb24gd2hhdCBnZXRzIG1vdW50ZWQuXG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHdhcm5pbmcoXG4gICAgICAgICAgdGhpcyBpbnN0YW5jZW9mIENvbnN0cnVjdG9yLFxuICAgICAgICAgICdTb21ldGhpbmcgaXMgY2FsbGluZyBhIFJlYWN0IGNvbXBvbmVudCBkaXJlY3RseS4gVXNlIGEgZmFjdG9yeSBvciAnICtcbiAgICAgICAgICAgICdKU1ggaW5zdGVhZC4gU2VlOiBodHRwczovL2ZiLm1lL3JlYWN0LWxlZ2FjeWZhY3RvcnknXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFdpcmUgdXAgYXV0by1iaW5kaW5nXG4gICAgICBpZiAodGhpcy5fX3JlYWN0QXV0b0JpbmRQYWlycy5sZW5ndGgpIHtcbiAgICAgICAgYmluZEF1dG9CaW5kTWV0aG9kcyh0aGlzKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0O1xuICAgICAgdGhpcy51cGRhdGVyID0gdXBkYXRlciB8fCBSZWFjdE5vb3BVcGRhdGVRdWV1ZTtcblxuICAgICAgdGhpcy5zdGF0ZSA9IG51bGw7XG5cbiAgICAgIC8vIFJlYWN0Q2xhc3NlcyBkb2Vzbid0IGhhdmUgY29uc3RydWN0b3JzLiBJbnN0ZWFkLCB0aGV5IHVzZSB0aGVcbiAgICAgIC8vIGdldEluaXRpYWxTdGF0ZSBhbmQgY29tcG9uZW50V2lsbE1vdW50IG1ldGhvZHMgZm9yIGluaXRpYWxpemF0aW9uLlxuXG4gICAgICB2YXIgaW5pdGlhbFN0YXRlID0gdGhpcy5nZXRJbml0aWFsU3RhdGUgPyB0aGlzLmdldEluaXRpYWxTdGF0ZSgpIDogbnVsbDtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIC8vIFdlIGFsbG93IGF1dG8tbW9ja3MgdG8gcHJvY2VlZCBhcyBpZiB0aGV5J3JlIHJldHVybmluZyBudWxsLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgaW5pdGlhbFN0YXRlID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICB0aGlzLmdldEluaXRpYWxTdGF0ZS5faXNNb2NrRnVuY3Rpb25cbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBwcm9iYWJseSBiYWQgcHJhY3RpY2UuIENvbnNpZGVyIHdhcm5pbmcgaGVyZSBhbmRcbiAgICAgICAgICAvLyBkZXByZWNhdGluZyB0aGlzIGNvbnZlbmllbmNlLlxuICAgICAgICAgIGluaXRpYWxTdGF0ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIF9pbnZhcmlhbnQoXG4gICAgICAgIHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGluaXRpYWxTdGF0ZSksXG4gICAgICAgICclcy5nZXRJbml0aWFsU3RhdGUoKTogbXVzdCByZXR1cm4gYW4gb2JqZWN0IG9yIG51bGwnLFxuICAgICAgICBDb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnXG4gICAgICApO1xuXG4gICAgICB0aGlzLnN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICAgIH0pO1xuICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IG5ldyBSZWFjdENsYXNzQ29tcG9uZW50KCk7XG4gICAgQ29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3I7XG4gICAgQ29uc3RydWN0b3IucHJvdG90eXBlLl9fcmVhY3RBdXRvQmluZFBhaXJzID0gW107XG5cbiAgICBpbmplY3RlZE1peGlucy5mb3JFYWNoKG1peFNwZWNJbnRvQ29tcG9uZW50LmJpbmQobnVsbCwgQ29uc3RydWN0b3IpKTtcblxuICAgIG1peFNwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBJc01vdW50ZWRQcmVNaXhpbik7XG4gICAgbWl4U3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIHNwZWMpO1xuICAgIG1peFNwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBJc01vdW50ZWRQb3N0TWl4aW4pO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVmYXVsdFByb3BzIHByb3BlcnR5IGFmdGVyIGFsbCBtaXhpbnMgaGF2ZSBiZWVuIG1lcmdlZC5cbiAgICBpZiAoQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzKSB7XG4gICAgICBDb25zdHJ1Y3Rvci5kZWZhdWx0UHJvcHMgPSBDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMoKTtcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgLy8gVGhpcyBpcyBhIHRhZyB0byBpbmRpY2F0ZSB0aGF0IHRoZSB1c2Ugb2YgdGhlc2UgbWV0aG9kIG5hbWVzIGlzIG9rLFxuICAgICAgLy8gc2luY2UgaXQncyB1c2VkIHdpdGggY3JlYXRlQ2xhc3MuIElmIGl0J3Mgbm90LCB0aGVuIGl0J3MgbGlrZWx5IGFcbiAgICAgIC8vIG1pc3Rha2Ugc28gd2UnbGwgd2FybiB5b3UgdG8gdXNlIHRoZSBzdGF0aWMgcHJvcGVydHksIHByb3BlcnR5XG4gICAgICAvLyBpbml0aWFsaXplciBvciBjb25zdHJ1Y3RvciByZXNwZWN0aXZlbHkuXG4gICAgICBpZiAoQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzKSB7XG4gICAgICAgIENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCA9IHt9O1xuICAgICAgfVxuICAgICAgaWYgKENvbnN0cnVjdG9yLnByb3RvdHlwZS5nZXRJbml0aWFsU3RhdGUpIHtcbiAgICAgICAgQ29uc3RydWN0b3IucHJvdG90eXBlLmdldEluaXRpYWxTdGF0ZS5pc1JlYWN0Q2xhc3NBcHByb3ZlZCA9IHt9O1xuICAgICAgfVxuICAgIH1cblxuICAgIF9pbnZhcmlhbnQoXG4gICAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUucmVuZGVyLFxuICAgICAgJ2NyZWF0ZUNsYXNzKC4uLik6IENsYXNzIHNwZWNpZmljYXRpb24gbXVzdCBpbXBsZW1lbnQgYSBgcmVuZGVyYCBtZXRob2QuJ1xuICAgICk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgd2FybmluZyhcbiAgICAgICAgIUNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb21wb25lbnRTaG91bGRVcGRhdGUsXG4gICAgICAgICclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgK1xuICAgICAgICAgICdjb21wb25lbnRTaG91bGRVcGRhdGUoKS4gRGlkIHlvdSBtZWFuIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpPyAnICtcbiAgICAgICAgICAnVGhlIG5hbWUgaXMgcGhyYXNlZCBhcyBhIHF1ZXN0aW9uIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzICcgK1xuICAgICAgICAgICdleHBlY3RlZCB0byByZXR1cm4gYSB2YWx1ZS4nLFxuICAgICAgICBzcGVjLmRpc3BsYXlOYW1lIHx8ICdBIGNvbXBvbmVudCdcbiAgICAgICk7XG4gICAgICB3YXJuaW5nKFxuICAgICAgICAhQ29uc3RydWN0b3IucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMsXG4gICAgICAgICclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgK1xuICAgICAgICAgICdjb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzKCkuIERpZCB5b3UgbWVhbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCk/JyxcbiAgICAgICAgc3BlYy5kaXNwbGF5TmFtZSB8fCAnQSBjb21wb25lbnQnXG4gICAgICApO1xuICAgICAgd2FybmluZyhcbiAgICAgICAgIUNvbnN0cnVjdG9yLnByb3RvdHlwZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyxcbiAgICAgICAgJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMoKS4gJyArXG4gICAgICAgICAgJ0RpZCB5b3UgbWVhbiBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpPycsXG4gICAgICAgIHNwZWMuZGlzcGxheU5hbWUgfHwgJ0EgY29tcG9uZW50J1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBSZWR1Y2UgdGltZSBzcGVudCBkb2luZyBsb29rdXBzIGJ5IHNldHRpbmcgdGhlc2Ugb24gdGhlIHByb3RvdHlwZS5cbiAgICBmb3IgKHZhciBtZXRob2ROYW1lIGluIFJlYWN0Q2xhc3NJbnRlcmZhY2UpIHtcbiAgICAgIGlmICghQ29uc3RydWN0b3IucHJvdG90eXBlW21ldGhvZE5hbWVdKSB7XG4gICAgICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZVttZXRob2ROYW1lXSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUNsYXNzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZhY3Rvcnk7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG52YXIgZmFjdG9yeSA9IHJlcXVpcmUoJy4vZmFjdG9yeScpO1xuXG5pZiAodHlwZW9mIFJlYWN0ID09PSAndW5kZWZpbmVkJykge1xuICB0aHJvdyBFcnJvcihcbiAgICAnY3JlYXRlLXJlYWN0LWNsYXNzIGNvdWxkIG5vdCBmaW5kIHRoZSBSZWFjdCBvYmplY3QuIElmIHlvdSBhcmUgdXNpbmcgc2NyaXB0IHRhZ3MsICcgK1xuICAgICAgJ21ha2Ugc3VyZSB0aGF0IFJlYWN0IGlzIGJlaW5nIGxvYWRlZCBiZWZvcmUgY3JlYXRlLXJlYWN0LWNsYXNzLidcbiAgKTtcbn1cblxuLy8gSGFjayB0byBncmFiIE5vb3BVcGRhdGVRdWV1ZSBmcm9tIGlzb21vcnBoaWMgUmVhY3RcbnZhciBSZWFjdE5vb3BVcGRhdGVRdWV1ZSA9IG5ldyBSZWFjdC5Db21wb25lbnQoKS51cGRhdGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoXG4gIFJlYWN0LkNvbXBvbmVudCxcbiAgUmVhY3QuaXNWYWxpZEVsZW1lbnQsXG4gIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbi8qKlxuICogQ29weXJpZ2h0IDIwMTUsIFlhaG9vISBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbnZhciBSRUFDVF9TVEFUSUNTID0ge1xuICBjaGlsZENvbnRleHRUeXBlczogdHJ1ZSxcbiAgY29udGV4dFR5cGU6IHRydWUsXG4gIGNvbnRleHRUeXBlczogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgZ2V0RGVmYXVsdFByb3BzOiB0cnVlLFxuICBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I6IHRydWUsXG4gIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczogdHJ1ZSxcbiAgbWl4aW5zOiB0cnVlLFxuICBwcm9wVHlwZXM6IHRydWUsXG4gIHR5cGU6IHRydWVcbn07XG52YXIgS05PV05fU1RBVElDUyA9IHtcbiAgbmFtZTogdHJ1ZSxcbiAgbGVuZ3RoOiB0cnVlLFxuICBwcm90b3R5cGU6IHRydWUsXG4gIGNhbGxlcjogdHJ1ZSxcbiAgY2FsbGVlOiB0cnVlLFxuICBhcmd1bWVudHM6IHRydWUsXG4gIGFyaXR5OiB0cnVlXG59O1xudmFyIEZPUldBUkRfUkVGX1NUQVRJQ1MgPSB7XG4gICckJHR5cGVvZic6IHRydWUsXG4gIHJlbmRlcjogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlXG59O1xudmFyIE1FTU9fU1RBVElDUyA9IHtcbiAgJyQkdHlwZW9mJzogdHJ1ZSxcbiAgY29tcGFyZTogdHJ1ZSxcbiAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICBkaXNwbGF5TmFtZTogdHJ1ZSxcbiAgcHJvcFR5cGVzOiB0cnVlLFxuICB0eXBlOiB0cnVlXG59O1xudmFyIFRZUEVfU1RBVElDUyA9IHt9O1xuVFlQRV9TVEFUSUNTW3JlYWN0SXMuRm9yd2FyZFJlZl0gPSBGT1JXQVJEX1JFRl9TVEFUSUNTO1xuVFlQRV9TVEFUSUNTW3JlYWN0SXMuTWVtb10gPSBNRU1PX1NUQVRJQ1M7XG5cbmZ1bmN0aW9uIGdldFN0YXRpY3MoY29tcG9uZW50KSB7XG4gIC8vIFJlYWN0IHYxNi4xMSBhbmQgYmVsb3dcbiAgaWYgKHJlYWN0SXMuaXNNZW1vKGNvbXBvbmVudCkpIHtcbiAgICByZXR1cm4gTUVNT19TVEFUSUNTO1xuICB9IC8vIFJlYWN0IHYxNi4xMiBhbmQgYWJvdmVcblxuXG4gIHJldHVybiBUWVBFX1NUQVRJQ1NbY29tcG9uZW50WyckJHR5cGVvZiddXSB8fCBSRUFDVF9TVEFUSUNTO1xufVxuXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbnZhciBvYmplY3RQcm90b3R5cGUgPSBPYmplY3QucHJvdG90eXBlO1xuZnVuY3Rpb24gaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBzb3VyY2VDb21wb25lbnQsIGJsYWNrbGlzdCkge1xuICBpZiAodHlwZW9mIHNvdXJjZUNvbXBvbmVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAoaHRtbCkgY29tcG9uZW50c1xuICAgIGlmIChvYmplY3RQcm90b3R5cGUpIHtcbiAgICAgIHZhciBpbmhlcml0ZWRDb21wb25lbnQgPSBnZXRQcm90b3R5cGVPZihzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgICBpZiAoaW5oZXJpdGVkQ29tcG9uZW50ICYmIGluaGVyaXRlZENvbXBvbmVudCAhPT0gb2JqZWN0UHJvdG90eXBlKSB7XG4gICAgICAgIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgaW5oZXJpdGVkQ29tcG9uZW50LCBibGFja2xpc3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VDb21wb25lbnQpO1xuXG4gICAgaWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgICAga2V5cyA9IGtleXMuY29uY2F0KGdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2VDb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFyZ2V0U3RhdGljcyA9IGdldFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50KTtcbiAgICB2YXIgc291cmNlU3RhdGljcyA9IGdldFN0YXRpY3Moc291cmNlQ29tcG9uZW50KTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmICghS05PV05fU1RBVElDU1trZXldICYmICEoYmxhY2tsaXN0ICYmIGJsYWNrbGlzdFtrZXldKSAmJiAhKHNvdXJjZVN0YXRpY3MgJiYgc291cmNlU3RhdGljc1trZXldKSAmJiAhKHRhcmdldFN0YXRpY3MgJiYgdGFyZ2V0U3RhdGljc1trZXldKSkge1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2VDb21wb25lbnQsIGtleSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBBdm9pZCBmYWlsdXJlcyBmcm9tIHJlYWQtb25seSBwcm9wZXJ0aWVzXG4gICAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29tcG9uZW50LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXRDb21wb25lbnQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaG9pc3ROb25SZWFjdFN0YXRpY3M7XG4iLCJ2YXIgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpXG52YXIgY3JlYXRlUmVhY3RDbGFzcyA9IHJlcXVpcmUoJ2NyZWF0ZS1yZWFjdC1jbGFzcycpXG52YXIgbWFwVmFsdWVzID0gcmVxdWlyZSgnLi91dGlscy9tYXBWYWx1ZXMnKVxudmFyIGhvaXN0Tm9uUmVhY3RTdGF0aWNzID0gcmVxdWlyZSgnaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MnKVxuXG5mdW5jdGlvbiB3aXRoRmF1eERPTUZhY3RvcnkgKEVsZW1lbnQpIHtcbiAgZnVuY3Rpb24gd2l0aEZhdXhET00gKFdyYXBwZWRDb21wb25lbnQpIHtcbiAgICB2YXIgV2l0aEZhdXhET00gPSBjcmVhdGVSZWFjdENsYXNzKHtcbiAgICAgIGNvbXBvbmVudFdpbGxNb3VudDogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNvbm5lY3RlZEZhdXhET00gPSB7fVxuICAgICAgICB0aGlzLmFuaW1hdGVGYXV4RE9NVW50aWwgPSAwXG4gICAgICB9LFxuICAgICAgY29tcG9uZW50V2lsbFVubW91bnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zdG9wQW5pbWF0aW5nRmF1eERPTSgpXG4gICAgICAgIHRoaXMuc3RvcERyYXdGYXV4RE9NKClcbiAgICAgIH0sXG4gICAgICBjb25uZWN0RmF1eERPTTogZnVuY3Rpb24gKG5vZGUsIG5hbWUsIGRpc2NhcmROb2RlKSB7XG4gICAgICAgIGlmICghdGhpcy5jb25uZWN0ZWRGYXV4RE9NW25hbWVdIHx8IGRpc2NhcmROb2RlKSB7XG4gICAgICAgICAgdGhpcy5jb25uZWN0ZWRGYXV4RE9NW25hbWVdID0gdHlwZW9mIG5vZGUgIT09ICdzdHJpbmcnID8gbm9kZSA6IG5ldyBFbGVtZW50KG5vZGUpXG4gICAgICAgICAgdGhpcy5kcmF3RmF1eERPTVRpbWVvdXQgPSBzZXRUaW1lb3V0KHRoaXMuZHJhd0ZhdXhET00pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdGVkRmF1eERPTVtuYW1lXVxuICAgICAgfSxcbiAgICAgIGRyYXdGYXV4RE9NOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2aXJ0dWFsRE9NID0gbWFwVmFsdWVzKHRoaXMuY29ubmVjdGVkRmF1eERPTSwgZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgICByZXR1cm4gbi50b1JlYWN0KClcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh2aXJ0dWFsRE9NKVxuICAgICAgfSxcbiAgICAgIGFuaW1hdGVGYXV4RE9NOiBmdW5jdGlvbiAoZHVyYXRpb24pIHtcbiAgICAgICAgdGhpcy5hbmltYXRlRmF1eERPTVVudGlsID0gTWF0aC5tYXgoRGF0ZS5ub3coKSArIGR1cmF0aW9uLCB0aGlzLmFuaW1hdGVGYXV4RE9NVW50aWwpXG4gICAgICAgIGlmICghdGhpcy5mYXV4RE9NQW5pbWF0aW9uSW50ZXJ2YWwpIHtcbiAgICAgICAgICB0aGlzLmZhdXhET01BbmltYXRpb25JbnRlcnZhbCA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChEYXRlLm5vdygpIDwgdGhpcy5hbmltYXRlRmF1eERPTVVudGlsKSB7XG4gICAgICAgICAgICAgIHRoaXMuZHJhd0ZhdXhET00oKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zdG9wQW5pbWF0aW5nRmF1eERPTSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfS5iaW5kKHRoaXMpLCAxNilcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHN0b3BBbmltYXRpbmdGYXV4RE9NOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZmF1eERPTUFuaW1hdGlvbkludGVydmFsID0gY2xlYXJJbnRlcnZhbCh0aGlzLmZhdXhET01BbmltYXRpb25JbnRlcnZhbClcbiAgICAgICAgdGhpcy5hbmltYXRlRmF1eERPTVVudGlsID0gMFxuICAgICAgfSxcbiAgICAgIHN0b3BEcmF3RmF1eERPTTogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmRyYXdGYXV4RE9NVGltZW91dCA9IGNsZWFyVGltZW91dCh0aGlzLmRyYXdGYXV4RE9NVGltZW91dClcbiAgICAgIH0sXG4gICAgICBpc0FuaW1hdGluZ0ZhdXhET006IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5mYXV4RE9NQW5pbWF0aW9uSW50ZXJ2YWxcbiAgICAgIH0sXG4gICAgICByZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByb3BzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5wcm9wcywgdGhpcy5zdGF0ZSwge1xuICAgICAgICAgIGNvbm5lY3RGYXV4RE9NOiB0aGlzLmNvbm5lY3RGYXV4RE9NLFxuICAgICAgICAgIGRyYXdGYXV4RE9NOiB0aGlzLmRyYXdGYXV4RE9NLFxuICAgICAgICAgIGFuaW1hdGVGYXV4RE9NOiB0aGlzLmFuaW1hdGVGYXV4RE9NLFxuICAgICAgICAgIHN0b3BBbmltYXRpbmdGYXV4RE9NOiB0aGlzLnN0b3BBbmltYXRpbmdGYXV4RE9NLFxuICAgICAgICAgIGlzQW5pbWF0aW5nRmF1eERPTTogdGhpcy5pc0FuaW1hdGluZ0ZhdXhET01cbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoV3JhcHBlZENvbXBvbmVudCwgcHJvcHMpXG4gICAgICB9XG4gICAgfSlcbiAgICBXaXRoRmF1eERPTS5kaXNwbGF5TmFtZSA9ICdXaXRoRmF1eERPTSgnICsgZ2V0RGlzcGxheU5hbWUoV3JhcHBlZENvbXBvbmVudCkgKyAnKSdcbiAgICBob2lzdE5vblJlYWN0U3RhdGljcyhXaXRoRmF1eERPTSwgV3JhcHBlZENvbXBvbmVudClcbiAgICByZXR1cm4gV2l0aEZhdXhET01cbiAgfVxuXG4gIHJldHVybiB3aXRoRmF1eERPTVxufVxuXG5mdW5jdGlvbiBnZXREaXNwbGF5TmFtZSAoV3JhcHBlZENvbXBvbmVudCkge1xuICByZXR1cm4gV3JhcHBlZENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBXcmFwcGVkQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCdcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3aXRoRmF1eERPTUZhY3RvcnlcbiIsInZhciBlbGVtZW50ID0gcmVxdWlyZSgnLi9fZWxlbWVudCcpXG52YXIgd2luZG93ID0gcmVxdWlyZSgnLi9fd2luZG93JylcbnZhciB3aXRoRmF1eERPTSA9IHJlcXVpcmUoJy4vX3dpdGhGYXV4RE9NJylcblxuZnVuY3Rpb24gZmFjdG9yeSAoKSB7XG4gIHZhciBFbGVtZW50ID0gZWxlbWVudCgpXG4gIHZhciBXaW5kb3cgPSB3aW5kb3coKVxuICB2YXIgUmVhY3RGYXV4RE9NID0ge1xuICAgIEVsZW1lbnQ6IEVsZW1lbnQsXG4gICAgZGVmYXVsdFZpZXc6IFdpbmRvdyxcbiAgICB3aXRoRmF1eERPTTogd2l0aEZhdXhET00oRWxlbWVudCksXG4gICAgY3JlYXRlRWxlbWVudDogZnVuY3Rpb24gKG5vZGVOYW1lKSB7XG4gICAgICByZXR1cm4gbmV3IEVsZW1lbnQobm9kZU5hbWUpXG4gICAgfSxcbiAgICBjcmVhdGVFbGVtZW50TlM6IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG5vZGVOYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVFbGVtZW50KG5vZGVOYW1lKVxuICAgIH0sXG4gICAgY29tcGFyZURvY3VtZW50UG9zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRoZSBzZWxlY3RvciBlbmdpbmUgdHJpZXMgdG8gdmFsaWRhdGUgd2l0aCB0aGlzLCBidXQgd2UgZG9uJ3QgY2FyZS5cbiAgICAgIC8vIDggPSBET0NVTUVOVF9QT1NJVElPTl9DT05UQUlOUywgc28gd2Ugc2F5IGFsbCBub2RlcyBhcmUgaW4gdGhpcyBkb2N1bWVudC5cbiAgICAgIHJldHVybiA4XG4gICAgfVxuICB9XG5cbiAgRWxlbWVudC5wcm90b3R5cGUub3duZXJEb2N1bWVudCA9IFJlYWN0RmF1eERPTVxuICByZXR1cm4gUmVhY3RGYXV4RE9NXG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmFjdG9yeVxuIiwidmFyIGZhY3RvcnkgPSByZXF1aXJlKCcuL2ZhY3RvcnknKVxubW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KClcbiIsInZhciBub29wID0ge3ZhbHVlOiBmdW5jdGlvbigpIHt9fTtcblxuZnVuY3Rpb24gZGlzcGF0Y2goKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gYXJndW1lbnRzLmxlbmd0aCwgXyA9IHt9LCB0OyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKCEodCA9IGFyZ3VtZW50c1tpXSArIFwiXCIpIHx8ICh0IGluIF8pIHx8IC9bXFxzLl0vLnRlc3QodCkpIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgdHlwZTogXCIgKyB0KTtcbiAgICBfW3RdID0gW107XG4gIH1cbiAgcmV0dXJuIG5ldyBEaXNwYXRjaChfKTtcbn1cblxuZnVuY3Rpb24gRGlzcGF0Y2goXykge1xuICB0aGlzLl8gPSBfO1xufVxuXG5mdW5jdGlvbiBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZXMsIHR5cGVzKSB7XG4gIHJldHVybiB0eXBlbmFtZXMudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCkge1xuICAgIHZhciBuYW1lID0gXCJcIiwgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGkgPj0gMCkgbmFtZSA9IHQuc2xpY2UoaSArIDEpLCB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICBpZiAodCAmJiAhdHlwZXMuaGFzT3duUHJvcGVydHkodCkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0KTtcbiAgICByZXR1cm4ge3R5cGU6IHQsIG5hbWU6IG5hbWV9O1xuICB9KTtcbn1cblxuRGlzcGF0Y2gucHJvdG90eXBlID0gZGlzcGF0Y2gucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogRGlzcGF0Y2gsXG4gIG9uOiBmdW5jdGlvbih0eXBlbmFtZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgXyA9IHRoaXMuXyxcbiAgICAgICAgVCA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiwgXyksXG4gICAgICAgIHQsXG4gICAgICAgIGkgPSAtMSxcbiAgICAgICAgbiA9IFQubGVuZ3RoO1xuXG4gICAgLy8gSWYgbm8gY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmV0dXJuIHRoZSBjYWxsYmFjayBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSAmJiAodCA9IGdldChfW3RdLCB0eXBlbmFtZS5uYW1lKSkpIHJldHVybiB0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIGEgdHlwZSB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGNhbGxiYWNrIGZvciB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICAvLyBPdGhlcndpc2UsIGlmIGEgbnVsbCBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCByZW1vdmUgY2FsbGJhY2tzIG9mIHRoZSBnaXZlbiBuYW1lLlxuICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNhbGxiYWNrOiBcIiArIGNhbGxiYWNrKTtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIGVsc2UgaWYgKGNhbGxiYWNrID09IG51bGwpIGZvciAodCBpbiBfKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBjb3B5OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgY29weSA9IHt9LCBfID0gdGhpcy5fO1xuICAgIGZvciAodmFyIHQgaW4gXykgY29weVt0XSA9IF9bdF0uc2xpY2UoKTtcbiAgICByZXR1cm4gbmV3IERpc3BhdGNoKGNvcHkpO1xuICB9LFxuICBjYWxsOiBmdW5jdGlvbih0eXBlLCB0aGF0KSB7XG4gICAgaWYgKChuID0gYXJndW1lbnRzLmxlbmd0aCAtIDIpID4gMCkgZm9yICh2YXIgYXJncyA9IG5ldyBBcnJheShuKSwgaSA9IDAsIG4sIHQ7IGkgPCBuOyArK2kpIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh0ID0gdGhpcy5fW3R5cGVdLCBpID0gMCwgbiA9IHQubGVuZ3RoOyBpIDwgbjsgKytpKSB0W2ldLnZhbHVlLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9LFxuICBhcHBseTogZnVuY3Rpb24odHlwZSwgdGhhdCwgYXJncykge1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh2YXIgdCA9IHRoaXMuX1t0eXBlXSwgaSA9IDAsIG4gPSB0Lmxlbmd0aDsgaSA8IG47ICsraSkgdFtpXS52YWx1ZS5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2V0KHR5cGUsIG5hbWUpIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aCwgYzsgaSA8IG47ICsraSkge1xuICAgIGlmICgoYyA9IHR5cGVbaV0pLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHJldHVybiBjLnZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXQodHlwZSwgbmFtZSwgY2FsbGJhY2spIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIGlmICh0eXBlW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHR5cGVbaV0gPSBub29wLCB0eXBlID0gdHlwZS5zbGljZSgwLCBpKS5jb25jYXQodHlwZS5zbGljZShpICsgMSkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChjYWxsYmFjayAhPSBudWxsKSB0eXBlLnB1c2goe25hbWU6IG5hbWUsIHZhbHVlOiBjYWxsYmFja30pO1xuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGlzcGF0Y2g7XG4iLCIvLyBXb3JkIGNsb3VkIGxheW91dCBieSBKYXNvbiBEYXZpZXMsIGh0dHBzOi8vd3d3Lmphc29uZGF2aWVzLmNvbS93b3JkY2xvdWQvXG4vLyBBbGdvcml0aG0gZHVlIHRvIEpvbmF0aGFuIEZlaW5iZXJnLCBodHRwOi8vc3RhdGljLm1yZmVpbmJlcmcuY29tL2J2X2NoMDMucGRmXG5cbnZhciBkaXNwYXRjaCA9IHJlcXVpcmUoXCJkMy1kaXNwYXRjaFwiKS5kaXNwYXRjaDtcblxudmFyIGNsb3VkUmFkaWFucyA9IE1hdGguUEkgLyAxODAsXG4gICAgY3cgPSAxIDw8IDExID4+IDUsXG4gICAgY2ggPSAxIDw8IDExO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgc2l6ZSA9IFsyNTYsIDI1Nl0sXG4gICAgICB0ZXh0ID0gY2xvdWRUZXh0LFxuICAgICAgZm9udCA9IGNsb3VkRm9udCxcbiAgICAgIGZvbnRTaXplID0gY2xvdWRGb250U2l6ZSxcbiAgICAgIGZvbnRTdHlsZSA9IGNsb3VkRm9udE5vcm1hbCxcbiAgICAgIGZvbnRXZWlnaHQgPSBjbG91ZEZvbnROb3JtYWwsXG4gICAgICByb3RhdGUgPSBjbG91ZFJvdGF0ZSxcbiAgICAgIHBhZGRpbmcgPSBjbG91ZFBhZGRpbmcsXG4gICAgICBzcGlyYWwgPSBhcmNoaW1lZGVhblNwaXJhbCxcbiAgICAgIHdvcmRzID0gW10sXG4gICAgICB0aW1lSW50ZXJ2YWwgPSBJbmZpbml0eSxcbiAgICAgIGV2ZW50ID0gZGlzcGF0Y2goXCJ3b3JkXCIsIFwiZW5kXCIpLFxuICAgICAgdGltZXIgPSBudWxsLFxuICAgICAgcmFuZG9tID0gTWF0aC5yYW5kb20sXG4gICAgICBjbG91ZCA9IHt9LFxuICAgICAgY2FudmFzID0gY2xvdWRDYW52YXM7XG5cbiAgY2xvdWQuY2FudmFzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNhbnZhcyA9IGZ1bmN0b3IoXyksIGNsb3VkKSA6IGNhbnZhcztcbiAgfTtcblxuICBjbG91ZC5zdGFydCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBjb250ZXh0QW5kUmF0aW8gPSBnZXRDb250ZXh0KGNhbnZhcygpKSxcbiAgICAgICAgYm9hcmQgPSB6ZXJvQXJyYXkoKHNpemVbMF0gPj4gNSkgKiBzaXplWzFdKSxcbiAgICAgICAgYm91bmRzID0gbnVsbCxcbiAgICAgICAgbiA9IHdvcmRzLmxlbmd0aCxcbiAgICAgICAgaSA9IC0xLFxuICAgICAgICB0YWdzID0gW10sXG4gICAgICAgIGRhdGEgPSB3b3Jkcy5tYXAoZnVuY3Rpb24oZCwgaSkge1xuICAgICAgICAgIGQudGV4dCA9IHRleHQuY2FsbCh0aGlzLCBkLCBpKTtcbiAgICAgICAgICBkLmZvbnQgPSBmb250LmNhbGwodGhpcywgZCwgaSk7XG4gICAgICAgICAgZC5zdHlsZSA9IGZvbnRTdHlsZS5jYWxsKHRoaXMsIGQsIGkpO1xuICAgICAgICAgIGQud2VpZ2h0ID0gZm9udFdlaWdodC5jYWxsKHRoaXMsIGQsIGkpO1xuICAgICAgICAgIGQucm90YXRlID0gcm90YXRlLmNhbGwodGhpcywgZCwgaSk7XG4gICAgICAgICAgZC5zaXplID0gfn5mb250U2l6ZS5jYWxsKHRoaXMsIGQsIGkpO1xuICAgICAgICAgIGQucGFkZGluZyA9IHBhZGRpbmcuY2FsbCh0aGlzLCBkLCBpKTtcbiAgICAgICAgICByZXR1cm4gZDtcbiAgICAgICAgfSkuc29ydChmdW5jdGlvbihhLCBiKSB7IHJldHVybiBiLnNpemUgLSBhLnNpemU7IH0pO1xuXG4gICAgaWYgKHRpbWVyKSBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICB0aW1lciA9IHNldEludGVydmFsKHN0ZXAsIDApO1xuICAgIHN0ZXAoKTtcblxuICAgIHJldHVybiBjbG91ZDtcblxuICAgIGZ1bmN0aW9uIHN0ZXAoKSB7XG4gICAgICB2YXIgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydCA8IHRpbWVJbnRlcnZhbCAmJiArK2kgPCBuICYmIHRpbWVyKSB7XG4gICAgICAgIHZhciBkID0gZGF0YVtpXTtcbiAgICAgICAgZC54ID0gKHNpemVbMF0gKiAocmFuZG9tKCkgKyAuNSkpID4+IDE7XG4gICAgICAgIGQueSA9IChzaXplWzFdICogKHJhbmRvbSgpICsgLjUpKSA+PiAxO1xuICAgICAgICBjbG91ZFNwcml0ZShjb250ZXh0QW5kUmF0aW8sIGQsIGRhdGEsIGkpO1xuICAgICAgICBpZiAoZC5oYXNUZXh0ICYmIHBsYWNlKGJvYXJkLCBkLCBib3VuZHMpKSB7XG4gICAgICAgICAgdGFncy5wdXNoKGQpO1xuICAgICAgICAgIGV2ZW50LmNhbGwoXCJ3b3JkXCIsIGNsb3VkLCBkKTtcbiAgICAgICAgICBpZiAoYm91bmRzKSBjbG91ZEJvdW5kcyhib3VuZHMsIGQpO1xuICAgICAgICAgIGVsc2UgYm91bmRzID0gW3t4OiBkLnggKyBkLngwLCB5OiBkLnkgKyBkLnkwfSwge3g6IGQueCArIGQueDEsIHk6IGQueSArIGQueTF9XTtcbiAgICAgICAgICAvLyBUZW1wb3JhcnkgaGFja1xuICAgICAgICAgIGQueCAtPSBzaXplWzBdID4+IDE7XG4gICAgICAgICAgZC55IC09IHNpemVbMV0gPj4gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGkgPj0gbikge1xuICAgICAgICBjbG91ZC5zdG9wKCk7XG4gICAgICAgIGV2ZW50LmNhbGwoXCJlbmRcIiwgY2xvdWQsIHRhZ3MsIGJvdW5kcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2xvdWQuc3RvcCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjbG91ZDtcbiAgfTtcblxuICBmdW5jdGlvbiBnZXRDb250ZXh0KGNhbnZhcykge1xuICAgIGNhbnZhcy53aWR0aCA9IGNhbnZhcy5oZWlnaHQgPSAxO1xuICAgIHZhciByYXRpbyA9IE1hdGguc3FydChjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpLmdldEltYWdlRGF0YSgwLCAwLCAxLCAxKS5kYXRhLmxlbmd0aCA+PiAyKTtcbiAgICBjYW52YXMud2lkdGggPSAoY3cgPDwgNSkgLyByYXRpbztcbiAgICBjYW52YXMuaGVpZ2h0ID0gY2ggLyByYXRpbztcblxuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9IGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBcInJlZFwiO1xuICAgIGNvbnRleHQudGV4dEFsaWduID0gXCJjZW50ZXJcIjtcblxuICAgIHJldHVybiB7Y29udGV4dDogY29udGV4dCwgcmF0aW86IHJhdGlvfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBsYWNlKGJvYXJkLCB0YWcsIGJvdW5kcykge1xuICAgIHZhciBwZXJpbWV0ZXIgPSBbe3g6IDAsIHk6IDB9LCB7eDogc2l6ZVswXSwgeTogc2l6ZVsxXX1dLFxuICAgICAgICBzdGFydFggPSB0YWcueCxcbiAgICAgICAgc3RhcnRZID0gdGFnLnksXG4gICAgICAgIG1heERlbHRhID0gTWF0aC5zcXJ0KHNpemVbMF0gKiBzaXplWzBdICsgc2l6ZVsxXSAqIHNpemVbMV0pLFxuICAgICAgICBzID0gc3BpcmFsKHNpemUpLFxuICAgICAgICBkdCA9IHJhbmRvbSgpIDwgLjUgPyAxIDogLTEsXG4gICAgICAgIHQgPSAtZHQsXG4gICAgICAgIGR4ZHksXG4gICAgICAgIGR4LFxuICAgICAgICBkeTtcblxuICAgIHdoaWxlIChkeGR5ID0gcyh0ICs9IGR0KSkge1xuICAgICAgZHggPSB+fmR4ZHlbMF07XG4gICAgICBkeSA9IH5+ZHhkeVsxXTtcblxuICAgICAgaWYgKE1hdGgubWluKE1hdGguYWJzKGR4KSwgTWF0aC5hYnMoZHkpKSA+PSBtYXhEZWx0YSkgYnJlYWs7XG5cbiAgICAgIHRhZy54ID0gc3RhcnRYICsgZHg7XG4gICAgICB0YWcueSA9IHN0YXJ0WSArIGR5O1xuXG4gICAgICBpZiAodGFnLnggKyB0YWcueDAgPCAwIHx8IHRhZy55ICsgdGFnLnkwIDwgMCB8fFxuICAgICAgICAgIHRhZy54ICsgdGFnLngxID4gc2l6ZVswXSB8fCB0YWcueSArIHRhZy55MSA+IHNpemVbMV0pIGNvbnRpbnVlO1xuICAgICAgLy8gVE9ETyBvbmx5IGNoZWNrIGZvciBjb2xsaXNpb25zIHdpdGhpbiBjdXJyZW50IGJvdW5kcy5cbiAgICAgIGlmICghYm91bmRzIHx8ICFjbG91ZENvbGxpZGUodGFnLCBib2FyZCwgc2l6ZVswXSkpIHtcbiAgICAgICAgaWYgKCFib3VuZHMgfHwgY29sbGlkZVJlY3RzKHRhZywgYm91bmRzKSkge1xuICAgICAgICAgIHZhciBzcHJpdGUgPSB0YWcuc3ByaXRlLFxuICAgICAgICAgICAgICB3ID0gdGFnLndpZHRoID4+IDUsXG4gICAgICAgICAgICAgIHN3ID0gc2l6ZVswXSA+PiA1LFxuICAgICAgICAgICAgICBseCA9IHRhZy54IC0gKHcgPDwgNCksXG4gICAgICAgICAgICAgIHN4ID0gbHggJiAweDdmLFxuICAgICAgICAgICAgICBtc3ggPSAzMiAtIHN4LFxuICAgICAgICAgICAgICBoID0gdGFnLnkxIC0gdGFnLnkwLFxuICAgICAgICAgICAgICB4ID0gKHRhZy55ICsgdGFnLnkwKSAqIHN3ICsgKGx4ID4+IDUpLFxuICAgICAgICAgICAgICBsYXN0O1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaDsgaisrKSB7XG4gICAgICAgICAgICBsYXN0ID0gMDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IHc7IGkrKykge1xuICAgICAgICAgICAgICBib2FyZFt4ICsgaV0gfD0gKGxhc3QgPDwgbXN4KSB8IChpIDwgdyA/IChsYXN0ID0gc3ByaXRlW2ogKiB3ICsgaV0pID4+PiBzeCA6IDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeCArPSBzdztcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVsZXRlIHRhZy5zcHJpdGU7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY2xvdWQudGltZUludGVydmFsID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpbWVJbnRlcnZhbCA9IF8gPT0gbnVsbCA/IEluZmluaXR5IDogXywgY2xvdWQpIDogdGltZUludGVydmFsO1xuICB9O1xuXG4gIGNsb3VkLndvcmRzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHdvcmRzID0gXywgY2xvdWQpIDogd29yZHM7XG4gIH07XG5cbiAgY2xvdWQuc2l6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzaXplID0gWytfWzBdLCArX1sxXV0sIGNsb3VkKSA6IHNpemU7XG4gIH07XG5cbiAgY2xvdWQuZm9udCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChmb250ID0gZnVuY3RvcihfKSwgY2xvdWQpIDogZm9udDtcbiAgfTtcblxuICBjbG91ZC5mb250U3R5bGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZm9udFN0eWxlID0gZnVuY3RvcihfKSwgY2xvdWQpIDogZm9udFN0eWxlO1xuICB9O1xuXG4gIGNsb3VkLmZvbnRXZWlnaHQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZm9udFdlaWdodCA9IGZ1bmN0b3IoXyksIGNsb3VkKSA6IGZvbnRXZWlnaHQ7XG4gIH07XG5cbiAgY2xvdWQucm90YXRlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJvdGF0ZSA9IGZ1bmN0b3IoXyksIGNsb3VkKSA6IHJvdGF0ZTtcbiAgfTtcblxuICBjbG91ZC50ZXh0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRleHQgPSBmdW5jdG9yKF8pLCBjbG91ZCkgOiB0ZXh0O1xuICB9O1xuXG4gIGNsb3VkLnNwaXJhbCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzcGlyYWwgPSBzcGlyYWxzW19dIHx8IF8sIGNsb3VkKSA6IHNwaXJhbDtcbiAgfTtcblxuICBjbG91ZC5mb250U2l6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChmb250U2l6ZSA9IGZ1bmN0b3IoXyksIGNsb3VkKSA6IGZvbnRTaXplO1xuICB9O1xuXG4gIGNsb3VkLnBhZGRpbmcgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkZGluZyA9IGZ1bmN0b3IoXyksIGNsb3VkKSA6IHBhZGRpbmc7XG4gIH07XG5cbiAgY2xvdWQucmFuZG9tID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHJhbmRvbSA9IF8sIGNsb3VkKSA6IHJhbmRvbTtcbiAgfTtcblxuICBjbG91ZC5vbiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZSA9IGV2ZW50Lm9uLmFwcGx5KGV2ZW50LCBhcmd1bWVudHMpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gZXZlbnQgPyBjbG91ZCA6IHZhbHVlO1xuICB9O1xuXG4gIHJldHVybiBjbG91ZDtcbn07XG5cbmZ1bmN0aW9uIGNsb3VkVGV4dChkKSB7XG4gIHJldHVybiBkLnRleHQ7XG59XG5cbmZ1bmN0aW9uIGNsb3VkRm9udCgpIHtcbiAgcmV0dXJuIFwic2VyaWZcIjtcbn1cblxuZnVuY3Rpb24gY2xvdWRGb250Tm9ybWFsKCkge1xuICByZXR1cm4gXCJub3JtYWxcIjtcbn1cblxuZnVuY3Rpb24gY2xvdWRGb250U2l6ZShkKSB7XG4gIHJldHVybiBNYXRoLnNxcnQoZC52YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGNsb3VkUm90YXRlKCkge1xuICByZXR1cm4gKH5+KE1hdGgucmFuZG9tKCkgKiA2KSAtIDMpICogMzA7XG59XG5cbmZ1bmN0aW9uIGNsb3VkUGFkZGluZygpIHtcbiAgcmV0dXJuIDE7XG59XG5cbi8vIEZldGNoZXMgYSBtb25vY2hyb21lIHNwcml0ZSBiaXRtYXAgZm9yIHRoZSBzcGVjaWZpZWQgdGV4dC5cbi8vIExvYWQgaW4gYmF0Y2hlcyBmb3Igc3BlZWQuXG5mdW5jdGlvbiBjbG91ZFNwcml0ZShjb250ZXh0QW5kUmF0aW8sIGQsIGRhdGEsIGRpKSB7XG4gIGlmIChkLnNwcml0ZSkgcmV0dXJuO1xuICB2YXIgYyA9IGNvbnRleHRBbmRSYXRpby5jb250ZXh0LFxuICAgICAgcmF0aW8gPSBjb250ZXh0QW5kUmF0aW8ucmF0aW87XG5cbiAgYy5jbGVhclJlY3QoMCwgMCwgKGN3IDw8IDUpIC8gcmF0aW8sIGNoIC8gcmF0aW8pO1xuICB2YXIgeCA9IDAsXG4gICAgICB5ID0gMCxcbiAgICAgIG1heGggPSAwLFxuICAgICAgbiA9IGRhdGEubGVuZ3RoO1xuICAtLWRpO1xuICB3aGlsZSAoKytkaSA8IG4pIHtcbiAgICBkID0gZGF0YVtkaV07XG4gICAgYy5zYXZlKCk7XG4gICAgYy5mb250ID0gZC5zdHlsZSArIFwiIFwiICsgZC53ZWlnaHQgKyBcIiBcIiArIH5+KChkLnNpemUgKyAxKSAvIHJhdGlvKSArIFwicHggXCIgKyBkLmZvbnQ7XG4gICAgdmFyIHcgPSBjLm1lYXN1cmVUZXh0KGQudGV4dCArIFwibVwiKS53aWR0aCAqIHJhdGlvLFxuICAgICAgICBoID0gZC5zaXplIDw8IDE7XG4gICAgaWYgKGQucm90YXRlKSB7XG4gICAgICB2YXIgc3IgPSBNYXRoLnNpbihkLnJvdGF0ZSAqIGNsb3VkUmFkaWFucyksXG4gICAgICAgICAgY3IgPSBNYXRoLmNvcyhkLnJvdGF0ZSAqIGNsb3VkUmFkaWFucyksXG4gICAgICAgICAgd2NyID0gdyAqIGNyLFxuICAgICAgICAgIHdzciA9IHcgKiBzcixcbiAgICAgICAgICBoY3IgPSBoICogY3IsXG4gICAgICAgICAgaHNyID0gaCAqIHNyO1xuICAgICAgdyA9IChNYXRoLm1heChNYXRoLmFicyh3Y3IgKyBoc3IpLCBNYXRoLmFicyh3Y3IgLSBoc3IpKSArIDB4MWYpID4+IDUgPDwgNTtcbiAgICAgIGggPSB+fk1hdGgubWF4KE1hdGguYWJzKHdzciArIGhjciksIE1hdGguYWJzKHdzciAtIGhjcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3ID0gKHcgKyAweDFmKSA+PiA1IDw8IDU7XG4gICAgfVxuICAgIGlmIChoID4gbWF4aCkgbWF4aCA9IGg7XG4gICAgaWYgKHggKyB3ID49IChjdyA8PCA1KSkge1xuICAgICAgeCA9IDA7XG4gICAgICB5ICs9IG1heGg7XG4gICAgICBtYXhoID0gMDtcbiAgICB9XG4gICAgaWYgKHkgKyBoID49IGNoKSBicmVhaztcbiAgICBjLnRyYW5zbGF0ZSgoeCArICh3ID4+IDEpKSAvIHJhdGlvLCAoeSArIChoID4+IDEpKSAvIHJhdGlvKTtcbiAgICBpZiAoZC5yb3RhdGUpIGMucm90YXRlKGQucm90YXRlICogY2xvdWRSYWRpYW5zKTtcbiAgICBjLmZpbGxUZXh0KGQudGV4dCwgMCwgMCk7XG4gICAgaWYgKGQucGFkZGluZykgYy5saW5lV2lkdGggPSAyICogZC5wYWRkaW5nLCBjLnN0cm9rZVRleHQoZC50ZXh0LCAwLCAwKTtcbiAgICBjLnJlc3RvcmUoKTtcbiAgICBkLndpZHRoID0gdztcbiAgICBkLmhlaWdodCA9IGg7XG4gICAgZC54b2ZmID0geDtcbiAgICBkLnlvZmYgPSB5O1xuICAgIGQueDEgPSB3ID4+IDE7XG4gICAgZC55MSA9IGggPj4gMTtcbiAgICBkLngwID0gLWQueDE7XG4gICAgZC55MCA9IC1kLnkxO1xuICAgIGQuaGFzVGV4dCA9IHRydWU7XG4gICAgeCArPSB3O1xuICB9XG4gIHZhciBwaXhlbHMgPSBjLmdldEltYWdlRGF0YSgwLCAwLCAoY3cgPDwgNSkgLyByYXRpbywgY2ggLyByYXRpbykuZGF0YSxcbiAgICAgIHNwcml0ZSA9IFtdO1xuICB3aGlsZSAoLS1kaSA+PSAwKSB7XG4gICAgZCA9IGRhdGFbZGldO1xuICAgIGlmICghZC5oYXNUZXh0KSBjb250aW51ZTtcbiAgICB2YXIgdyA9IGQud2lkdGgsXG4gICAgICAgIHczMiA9IHcgPj4gNSxcbiAgICAgICAgaCA9IGQueTEgLSBkLnkwO1xuICAgIC8vIFplcm8gdGhlIGJ1ZmZlclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaCAqIHczMjsgaSsrKSBzcHJpdGVbaV0gPSAwO1xuICAgIHggPSBkLnhvZmY7XG4gICAgaWYgKHggPT0gbnVsbCkgcmV0dXJuO1xuICAgIHkgPSBkLnlvZmY7XG4gICAgdmFyIHNlZW4gPSAwLFxuICAgICAgICBzZWVuUm93ID0gLTE7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBoOyBqKyspIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdzsgaSsrKSB7XG4gICAgICAgIHZhciBrID0gdzMyICogaiArIChpID4+IDUpLFxuICAgICAgICAgICAgbSA9IHBpeGVsc1soKHkgKyBqKSAqIChjdyA8PCA1KSArICh4ICsgaSkpIDw8IDJdID8gMSA8PCAoMzEgLSAoaSAlIDMyKSkgOiAwO1xuICAgICAgICBzcHJpdGVba10gfD0gbTtcbiAgICAgICAgc2VlbiB8PSBtO1xuICAgICAgfVxuICAgICAgaWYgKHNlZW4pIHNlZW5Sb3cgPSBqO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGQueTArKztcbiAgICAgICAgaC0tO1xuICAgICAgICBqLS07XG4gICAgICAgIHkrKztcbiAgICAgIH1cbiAgICB9XG4gICAgZC55MSA9IGQueTAgKyBzZWVuUm93O1xuICAgIGQuc3ByaXRlID0gc3ByaXRlLnNsaWNlKDAsIChkLnkxIC0gZC55MCkgKiB3MzIpO1xuICB9XG59XG5cbi8vIFVzZSBtYXNrLWJhc2VkIGNvbGxpc2lvbiBkZXRlY3Rpb24uXG5mdW5jdGlvbiBjbG91ZENvbGxpZGUodGFnLCBib2FyZCwgc3cpIHtcbiAgc3cgPj49IDU7XG4gIHZhciBzcHJpdGUgPSB0YWcuc3ByaXRlLFxuICAgICAgdyA9IHRhZy53aWR0aCA+PiA1LFxuICAgICAgbHggPSB0YWcueCAtICh3IDw8IDQpLFxuICAgICAgc3ggPSBseCAmIDB4N2YsXG4gICAgICBtc3ggPSAzMiAtIHN4LFxuICAgICAgaCA9IHRhZy55MSAtIHRhZy55MCxcbiAgICAgIHggPSAodGFnLnkgKyB0YWcueTApICogc3cgKyAobHggPj4gNSksXG4gICAgICBsYXN0O1xuICBmb3IgKHZhciBqID0gMDsgaiA8IGg7IGorKykge1xuICAgIGxhc3QgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IHc7IGkrKykge1xuICAgICAgaWYgKCgobGFzdCA8PCBtc3gpIHwgKGkgPCB3ID8gKGxhc3QgPSBzcHJpdGVbaiAqIHcgKyBpXSkgPj4+IHN4IDogMCkpXG4gICAgICAgICAgJiBib2FyZFt4ICsgaV0pIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB4ICs9IHN3O1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY2xvdWRCb3VuZHMoYm91bmRzLCBkKSB7XG4gIHZhciBiMCA9IGJvdW5kc1swXSxcbiAgICAgIGIxID0gYm91bmRzWzFdO1xuICBpZiAoZC54ICsgZC54MCA8IGIwLngpIGIwLnggPSBkLnggKyBkLngwO1xuICBpZiAoZC55ICsgZC55MCA8IGIwLnkpIGIwLnkgPSBkLnkgKyBkLnkwO1xuICBpZiAoZC54ICsgZC54MSA+IGIxLngpIGIxLnggPSBkLnggKyBkLngxO1xuICBpZiAoZC55ICsgZC55MSA+IGIxLnkpIGIxLnkgPSBkLnkgKyBkLnkxO1xufVxuXG5mdW5jdGlvbiBjb2xsaWRlUmVjdHMoYSwgYikge1xuICByZXR1cm4gYS54ICsgYS54MSA+IGJbMF0ueCAmJiBhLnggKyBhLngwIDwgYlsxXS54ICYmIGEueSArIGEueTEgPiBiWzBdLnkgJiYgYS55ICsgYS55MCA8IGJbMV0ueTtcbn1cblxuZnVuY3Rpb24gYXJjaGltZWRlYW5TcGlyYWwoc2l6ZSkge1xuICB2YXIgZSA9IHNpemVbMF0gLyBzaXplWzFdO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBbZSAqICh0ICo9IC4xKSAqIE1hdGguY29zKHQpLCB0ICogTWF0aC5zaW4odCldO1xuICB9O1xufVxuXG5mdW5jdGlvbiByZWN0YW5ndWxhclNwaXJhbChzaXplKSB7XG4gIHZhciBkeSA9IDQsXG4gICAgICBkeCA9IGR5ICogc2l6ZVswXSAvIHNpemVbMV0sXG4gICAgICB4ID0gMCxcbiAgICAgIHkgPSAwO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHZhciBzaWduID0gdCA8IDAgPyAtMSA6IDE7XG4gICAgLy8gU2VlIHRyaWFuZ3VsYXIgbnVtYmVyczogVF9uID0gbiAqIChuICsgMSkgLyAyLlxuICAgIHN3aXRjaCAoKE1hdGguc3FydCgxICsgNCAqIHNpZ24gKiB0KSAtIHNpZ24pICYgMykge1xuICAgICAgY2FzZSAwOiAgeCArPSBkeDsgYnJlYWs7XG4gICAgICBjYXNlIDE6ICB5ICs9IGR5OyBicmVhaztcbiAgICAgIGNhc2UgMjogIHggLT0gZHg7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogeSAtPSBkeTsgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiBbeCwgeV07XG4gIH07XG59XG5cbi8vIFRPRE8gcmV1c2UgYXJyYXlzP1xuZnVuY3Rpb24gemVyb0FycmF5KG4pIHtcbiAgdmFyIGEgPSBbXSxcbiAgICAgIGkgPSAtMTtcbiAgd2hpbGUgKCsraSA8IG4pIGFbaV0gPSAwO1xuICByZXR1cm4gYTtcbn1cblxuZnVuY3Rpb24gY2xvdWRDYW52YXMoKSB7XG4gIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xufVxuXG5mdW5jdGlvbiBmdW5jdG9yKGQpIHtcbiAgcmV0dXJuIHR5cGVvZiBkID09PSBcImZ1bmN0aW9uXCIgPyBkIDogZnVuY3Rpb24oKSB7IHJldHVybiBkOyB9O1xufVxuXG52YXIgc3BpcmFscyA9IHtcbiAgYXJjaGltZWRlYW46IGFyY2hpbWVkZWFuU3BpcmFsLFxuICByZWN0YW5ndWxhcjogcmVjdGFuZ3VsYXJTcGlyYWxcbn07XG4iLCIvKiBnbG9iYWwgTWFwOnJlYWRvbmx5LCBTZXQ6cmVhZG9ubHksIEFycmF5QnVmZmVyOnJlYWRvbmx5ICovXG5cbnZhciBoYXNFbGVtZW50VHlwZSA9IHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJztcbnZhciBoYXNNYXAgPSB0eXBlb2YgTWFwID09PSAnZnVuY3Rpb24nO1xudmFyIGhhc1NldCA9IHR5cGVvZiBTZXQgPT09ICdmdW5jdGlvbic7XG52YXIgaGFzQXJyYXlCdWZmZXIgPSB0eXBlb2YgQXJyYXlCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgISFBcnJheUJ1ZmZlci5pc1ZpZXc7XG5cbi8vIE5vdGU6IFdlICoqZG9uJ3QqKiBuZWVkIGBlbnZIYXNCaWdJbnQ2NEFycmF5YCBpbiBmZGUgZXM2L2luZGV4LmpzXG5cbmZ1bmN0aW9uIGVxdWFsKGEsIGIpIHtcbiAgLy8gU1RBUlQ6IGZhc3QtZGVlcC1lcXVhbCBlczYvaW5kZXguanMgMy4xLjFcbiAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuXG4gIGlmIChhICYmIGIgJiYgdHlwZW9mIGEgPT0gJ29iamVjdCcgJiYgdHlwZW9mIGIgPT0gJ29iamVjdCcpIHtcbiAgICBpZiAoYS5jb25zdHJ1Y3RvciAhPT0gYi5jb25zdHJ1Y3RvcikgcmV0dXJuIGZhbHNlO1xuXG4gICAgdmFyIGxlbmd0aCwgaSwga2V5cztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSAhPT0gMDspXG4gICAgICAgIGlmICghZXF1YWwoYVtpXSwgYltpXSkpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFNUQVJUOiBNb2RpZmljYXRpb25zOlxuICAgIC8vIDEuIEV4dHJhIGBoYXM8VHlwZT4gJiZgIGhlbHBlcnMgaW4gaW5pdGlhbCBjb25kaXRpb24gYWxsb3cgZXM2IGNvZGVcbiAgICAvLyAgICB0byBjby1leGlzdCB3aXRoIGVzNS5cbiAgICAvLyAyLiBSZXBsYWNlIGBmb3Igb2ZgIHdpdGggZXM1IGNvbXBsaWFudCBpdGVyYXRpb24gdXNpbmcgYGZvcmAuXG4gICAgLy8gICAgQmFzaWNhbGx5LCB0YWtlOlxuICAgIC8vXG4gICAgLy8gICAgYGBganNcbiAgICAvLyAgICBmb3IgKGkgb2YgYS5lbnRyaWVzKCkpXG4gICAgLy8gICAgICBpZiAoIWIuaGFzKGlbMF0pKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gICAgYGBgXG4gICAgLy9cbiAgICAvLyAgICAuLi4gYW5kIGNvbnZlcnQgdG86XG4gICAgLy9cbiAgICAvLyAgICBgYGBqc1xuICAgIC8vICAgIGl0ID0gYS5lbnRyaWVzKCk7XG4gICAgLy8gICAgd2hpbGUgKCEoaSA9IGl0Lm5leHQoKSkuZG9uZSlcbiAgICAvLyAgICAgIGlmICghYi5oYXMoaS52YWx1ZVswXSkpIHJldHVybiBmYWxzZTtcbiAgICAvLyAgICBgYGBcbiAgICAvL1xuICAgIC8vICAgICoqTm90ZSoqOiBgaWAgYWNjZXNzIHN3aXRjaGVzIHRvIGBpLnZhbHVlYC5cbiAgICB2YXIgaXQ7XG4gICAgaWYgKGhhc01hcCAmJiAoYSBpbnN0YW5jZW9mIE1hcCkgJiYgKGIgaW5zdGFuY2VvZiBNYXApKSB7XG4gICAgICBpZiAoYS5zaXplICE9PSBiLnNpemUpIHJldHVybiBmYWxzZTtcbiAgICAgIGl0ID0gYS5lbnRyaWVzKCk7XG4gICAgICB3aGlsZSAoIShpID0gaXQubmV4dCgpKS5kb25lKVxuICAgICAgICBpZiAoIWIuaGFzKGkudmFsdWVbMF0pKSByZXR1cm4gZmFsc2U7XG4gICAgICBpdCA9IGEuZW50cmllcygpO1xuICAgICAgd2hpbGUgKCEoaSA9IGl0Lm5leHQoKSkuZG9uZSlcbiAgICAgICAgaWYgKCFlcXVhbChpLnZhbHVlWzFdLCBiLmdldChpLnZhbHVlWzBdKSkpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChoYXNTZXQgJiYgKGEgaW5zdGFuY2VvZiBTZXQpICYmIChiIGluc3RhbmNlb2YgU2V0KSkge1xuICAgICAgaWYgKGEuc2l6ZSAhPT0gYi5zaXplKSByZXR1cm4gZmFsc2U7XG4gICAgICBpdCA9IGEuZW50cmllcygpO1xuICAgICAgd2hpbGUgKCEoaSA9IGl0Lm5leHQoKSkuZG9uZSlcbiAgICAgICAgaWYgKCFiLmhhcyhpLnZhbHVlWzBdKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIEVORDogTW9kaWZpY2F0aW9uc1xuXG4gICAgaWYgKGhhc0FycmF5QnVmZmVyICYmIEFycmF5QnVmZmVyLmlzVmlldyhhKSAmJiBBcnJheUJ1ZmZlci5pc1ZpZXcoYikpIHtcbiAgICAgIGxlbmd0aCA9IGEubGVuZ3RoO1xuICAgICAgaWYgKGxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KVxuICAgICAgICBpZiAoYVtpXSAhPT0gYltpXSkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGEuY29uc3RydWN0b3IgPT09IFJlZ0V4cCkgcmV0dXJuIGEuc291cmNlID09PSBiLnNvdXJjZSAmJiBhLmZsYWdzID09PSBiLmZsYWdzO1xuICAgIGlmIChhLnZhbHVlT2YgIT09IE9iamVjdC5wcm90b3R5cGUudmFsdWVPZikgcmV0dXJuIGEudmFsdWVPZigpID09PSBiLnZhbHVlT2YoKTtcbiAgICBpZiAoYS50b1N0cmluZyAhPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZykgcmV0dXJuIGEudG9TdHJpbmcoKSA9PT0gYi50b1N0cmluZygpO1xuXG4gICAga2V5cyA9IE9iamVjdC5rZXlzKGEpO1xuICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIGlmIChsZW5ndGggIT09IE9iamVjdC5rZXlzKGIpLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KVxuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwga2V5c1tpXSkpIHJldHVybiBmYWxzZTtcbiAgICAvLyBFTkQ6IGZhc3QtZGVlcC1lcXVhbFxuXG4gICAgLy8gU1RBUlQ6IHJlYWN0LWZhc3QtY29tcGFyZVxuICAgIC8vIGN1c3RvbSBoYW5kbGluZyBmb3IgRE9NIGVsZW1lbnRzXG4gICAgaWYgKGhhc0VsZW1lbnRUeXBlICYmIGEgaW5zdGFuY2VvZiBFbGVtZW50KSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBjdXN0b20gaGFuZGxpbmcgZm9yIFJlYWN0L1ByZWFjdFxuICAgIGZvciAoaSA9IGxlbmd0aDsgaS0tICE9PSAwOykge1xuICAgICAgaWYgKChrZXlzW2ldID09PSAnX293bmVyJyB8fCBrZXlzW2ldID09PSAnX192JyB8fCBrZXlzW2ldID09PSAnX19vJykgJiYgYS4kJHR5cGVvZikge1xuICAgICAgICAvLyBSZWFjdC1zcGVjaWZpYzogYXZvaWQgdHJhdmVyc2luZyBSZWFjdCBlbGVtZW50cycgX293bmVyXG4gICAgICAgIC8vIFByZWFjdC1zcGVjaWZpYzogYXZvaWQgdHJhdmVyc2luZyBQcmVhY3QgZWxlbWVudHMnIF9fdiBhbmQgX19vXG4gICAgICAgIC8vICAgIF9fdiA9ICRfb3JpZ2luYWwgLyAkX3Zub2RlXG4gICAgICAgIC8vICAgIF9fbyA9ICRfb3duZXJcbiAgICAgICAgLy8gVGhlc2UgcHJvcGVydGllcyBjb250YWluIGNpcmN1bGFyIHJlZmVyZW5jZXMgYW5kIGFyZSBub3QgbmVlZGVkIHdoZW5cbiAgICAgICAgLy8gY29tcGFyaW5nIHRoZSBhY3R1YWwgZWxlbWVudHMgKGFuZCBub3QgdGhlaXIgb3duZXJzKVxuICAgICAgICAvLyAuJCR0eXBlb2YgYW5kIC5fc3RvcmUgb24ganVzdCByZWFzb25hYmxlIG1hcmtlcnMgb2YgZWxlbWVudHNcblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gYWxsIG90aGVyIHByb3BlcnRpZXMgc2hvdWxkIGJlIHRyYXZlcnNlZCBhcyB1c3VhbFxuICAgICAgaWYgKCFlcXVhbChhW2tleXNbaV1dLCBiW2tleXNbaV1dKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBFTkQ6IHJlYWN0LWZhc3QtY29tcGFyZVxuXG4gICAgLy8gU1RBUlQ6IGZhc3QtZGVlcC1lcXVhbFxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGEgIT09IGEgJiYgYiAhPT0gYjtcbn1cbi8vIGVuZCBmYXN0LWRlZXAtZXF1YWxcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0VxdWFsKGEsIGIpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZXF1YWwoYSwgYik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKCgoZXJyb3IubWVzc2FnZSB8fCAnJykubWF0Y2goL3N0YWNrfHJlY3Vyc2lvbi9pKSkpIHtcbiAgICAgIC8vIHdhcm4gb24gY2lyY3VsYXIgcmVmZXJlbmNlcywgZG9uJ3QgY3Jhc2hcbiAgICAgIC8vIGJyb3dzZXJzIGdpdmUgdGhpcyBkaWZmZXJlbnQgZXJyb3JzIG5hbWUgYW5kIG1lc3NhZ2VzOlxuICAgICAgLy8gY2hyb21lL3NhZmFyaTogXCJSYW5nZUVycm9yXCIsIFwiTWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIlxuICAgICAgLy8gZmlyZWZveDogXCJJbnRlcm5hbEVycm9yXCIsIHRvbyBtdWNoIHJlY3Vyc2lvblwiXG4gICAgICAvLyBlZGdlOiBcIkVycm9yXCIsIFwiT3V0IG9mIHN0YWNrIHNwYWNlXCJcbiAgICAgIGNvbnNvbGUud2FybigncmVhY3QtZmFzdC1jb21wYXJlIGNhbm5vdCBoYW5kbGUgY2lyY3VsYXIgcmVmcycpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBzb21lIG90aGVyIGVycm9yLiB3ZSBzaG91bGQgZGVmaW5pdGVseSBrbm93IGFib3V0IHRoZXNlXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG4iLCJleHBvcnQgdmFyIHhodG1sID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc3ZnOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gIHhodG1sOiB4aHRtbCxcbiAgeGxpbms6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFxuICB4bWw6IFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsXG4gIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCJcbn07XG4iLCJpbXBvcnQgbmFtZXNwYWNlcyBmcm9tIFwiLi9uYW1lc3BhY2VzLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIHByZWZpeCA9IG5hbWUgKz0gXCJcIiwgaSA9IHByZWZpeC5pbmRleE9mKFwiOlwiKTtcbiAgaWYgKGkgPj0gMCAmJiAocHJlZml4ID0gbmFtZS5zbGljZSgwLCBpKSkgIT09IFwieG1sbnNcIikgbmFtZSA9IG5hbWUuc2xpY2UoaSArIDEpO1xuICByZXR1cm4gbmFtZXNwYWNlcy5oYXNPd25Qcm9wZXJ0eShwcmVmaXgpID8ge3NwYWNlOiBuYW1lc3BhY2VzW3ByZWZpeF0sIGxvY2FsOiBuYW1lfSA6IG5hbWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG59XG4iLCJpbXBvcnQgbmFtZXNwYWNlIGZyb20gXCIuL25hbWVzcGFjZS5qc1wiO1xuaW1wb3J0IHt4aHRtbH0gZnJvbSBcIi4vbmFtZXNwYWNlcy5qc1wiO1xuXG5mdW5jdGlvbiBjcmVhdG9ySW5oZXJpdChuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgZG9jdW1lbnQgPSB0aGlzLm93bmVyRG9jdW1lbnQsXG4gICAgICAgIHVyaSA9IHRoaXMubmFtZXNwYWNlVVJJO1xuICAgIHJldHVybiB1cmkgPT09IHhodG1sICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IHhodG1sXG4gICAgICAgID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuYW1lKVxuICAgICAgICA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh1cmksIG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdG9yRml4ZWQoZnVsbG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpO1xuICByZXR1cm4gKGZ1bGxuYW1lLmxvY2FsXG4gICAgICA/IGNyZWF0b3JGaXhlZFxuICAgICAgOiBjcmVhdG9ySW5oZXJpdCkoZnVsbG5hbWUpO1xufVxuIiwiZnVuY3Rpb24gbm9uZSgpIHt9XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiBzZWxlY3RvciA9PSBudWxsID8gbm9uZSA6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICB9O1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2VsZWN0b3IgZnJvbSBcIi4uL3NlbGVjdG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvcihzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIHN1Ym5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKHN1Ym5vZGUgPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpKSB7XG4gICAgICAgIGlmIChcIl9fZGF0YV9fXCIgaW4gbm9kZSkgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19kYXRhX187XG4gICAgICAgIHN1Ymdyb3VwW2ldID0gc3Vibm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09IFwib2JqZWN0XCIgJiYgXCJsZW5ndGhcIiBpbiB4XG4gICAgPyB4IC8vIEFycmF5LCBUeXBlZEFycmF5LCBOb2RlTGlzdCwgYXJyYXktbGlrZVxuICAgIDogQXJyYXkuZnJvbSh4KTsgLy8gTWFwLCBTZXQsIGl0ZXJhYmxlLCBzdHJpbmcsIG9yIGFueXRoaW5nIGVsc2Vcbn1cbiIsImZ1bmN0aW9uIGVtcHR5KCkge1xuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiBzZWxlY3RvciA9PSBudWxsID8gZW1wdHkgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IGFycmF5IGZyb20gXCIuLi9hcnJheS5qc1wiO1xuaW1wb3J0IHNlbGVjdG9yQWxsIGZyb20gXCIuLi9zZWxlY3RvckFsbC5qc1wiO1xuXG5mdW5jdGlvbiBhcnJheUFsbChzZWxlY3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBncm91cCA9IHNlbGVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiBncm91cCA9PSBudWxsID8gW10gOiBhcnJheShncm91cCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICBpZiAodHlwZW9mIHNlbGVjdCA9PT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBhcnJheUFsbChzZWxlY3QpO1xuICBlbHNlIHNlbGVjdCA9IHNlbGVjdG9yQWxsKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gW10sIHBhcmVudHMgPSBbXSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc3ViZ3JvdXBzLnB1c2goc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKTtcbiAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgcGFyZW50cyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMubWF0Y2hlcyhzZWxlY3Rvcik7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGlsZE1hdGNoZXIoc2VsZWN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgfTtcbn1cblxuIiwiaW1wb3J0IHtjaGlsZE1hdGNoZXJ9IGZyb20gXCIuLi9tYXRjaGVyLmpzXCI7XG5cbnZhciBmaW5kID0gQXJyYXkucHJvdG90eXBlLmZpbmQ7XG5cbmZ1bmN0aW9uIGNoaWxkRmluZChtYXRjaCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGZpbmQuY2FsbCh0aGlzLmNoaWxkcmVuLCBtYXRjaCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoaWxkRmlyc3QoKSB7XG4gIHJldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3QobWF0Y2ggPT0gbnVsbCA/IGNoaWxkRmlyc3RcbiAgICAgIDogY2hpbGRGaW5kKHR5cGVvZiBtYXRjaCA9PT0gXCJmdW5jdGlvblwiID8gbWF0Y2ggOiBjaGlsZE1hdGNoZXIobWF0Y2gpKSk7XG59XG4iLCJpbXBvcnQge2NoaWxkTWF0Y2hlcn0gZnJvbSBcIi4uL21hdGNoZXIuanNcIjtcblxudmFyIGZpbHRlciA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXI7XG5cbmZ1bmN0aW9uIGNoaWxkcmVuKCkge1xuICByZXR1cm4gdGhpcy5jaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gY2hpbGRyZW5GaWx0ZXIobWF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmaWx0ZXIuY2FsbCh0aGlzLmNoaWxkcmVuLCBtYXRjaCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hdGNoKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdEFsbChtYXRjaCA9PSBudWxsID8gY2hpbGRyZW5cbiAgICAgIDogY2hpbGRyZW5GaWx0ZXIodHlwZW9mIG1hdGNoID09PSBcImZ1bmN0aW9uXCIgPyBtYXRjaCA6IGNoaWxkTWF0Y2hlcihtYXRjaCkpKTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IG1hdGNoZXIgZnJvbSBcIi4uL21hdGNoZXIuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgaWYgKHR5cGVvZiBtYXRjaCAhPT0gXCJmdW5jdGlvblwiKSBtYXRjaCA9IG1hdGNoZXIobWF0Y2gpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBbXSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiBtYXRjaC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkge1xuICAgICAgICBzdWJncm91cC5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih1cGRhdGUpIHtcbiAgcmV0dXJuIG5ldyBBcnJheSh1cGRhdGUubGVuZ3RoKTtcbn1cbiIsImltcG9ydCBzcGFyc2UgZnJvbSBcIi4vc3BhcnNlLmpzXCI7XG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHRoaXMuX2VudGVyIHx8IHRoaXMuX2dyb3Vwcy5tYXAoc3BhcnNlKSwgdGhpcy5fcGFyZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFbnRlck5vZGUocGFyZW50LCBkYXR1bSkge1xuICB0aGlzLm93bmVyRG9jdW1lbnQgPSBwYXJlbnQub3duZXJEb2N1bWVudDtcbiAgdGhpcy5uYW1lc3BhY2VVUkkgPSBwYXJlbnQubmFtZXNwYWNlVVJJO1xuICB0aGlzLl9uZXh0ID0gbnVsbDtcbiAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICB0aGlzLl9fZGF0YV9fID0gZGF0dW07XG59XG5cbkVudGVyTm9kZS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBFbnRlck5vZGUsXG4gIGFwcGVuZENoaWxkOiBmdW5jdGlvbihjaGlsZCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgdGhpcy5fbmV4dCk7IH0sXG4gIGluc2VydEJlZm9yZTogZnVuY3Rpb24oY2hpbGQsIG5leHQpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIG5leHQpOyB9LFxuICBxdWVyeVNlbGVjdG9yOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOyB9LFxuICBxdWVyeVNlbGVjdG9yQWxsOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOyB9XG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJpbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCB7RW50ZXJOb2RlfSBmcm9tIFwiLi9lbnRlci5qc1wiO1xuaW1wb3J0IGFycmF5IGZyb20gXCIuLi9hcnJheS5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuLi9jb25zdGFudC5qc1wiO1xuXG5mdW5jdGlvbiBiaW5kSW5kZXgocGFyZW50LCBncm91cCwgZW50ZXIsIHVwZGF0ZSwgZXhpdCwgZGF0YSkge1xuICB2YXIgaSA9IDAsXG4gICAgICBub2RlLFxuICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG5cbiAgLy8gUHV0IGFueSBub24tbnVsbCBub2RlcyB0aGF0IGZpdCBpbnRvIHVwZGF0ZS5cbiAgLy8gUHV0IGFueSBudWxsIG5vZGVzIGludG8gZW50ZXIuXG4gIC8vIFB1dCBhbnkgcmVtYWluaW5nIGRhdGEgaW50byBlbnRlci5cbiAgZm9yICg7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBub2RlLl9fZGF0YV9fID0gZGF0YVtpXTtcbiAgICAgIHVwZGF0ZVtpXSA9IG5vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVudGVyW2ldID0gbmV3IEVudGVyTm9kZShwYXJlbnQsIGRhdGFbaV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFB1dCBhbnkgbm9uLW51bGwgbm9kZXMgdGhhdCBkb27igJl0IGZpdCBpbnRvIGV4aXQuXG4gIGZvciAoOyBpIDwgZ3JvdXBMZW5ndGg7ICsraSkge1xuICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBiaW5kS2V5KHBhcmVudCwgZ3JvdXAsIGVudGVyLCB1cGRhdGUsIGV4aXQsIGRhdGEsIGtleSkge1xuICB2YXIgaSxcbiAgICAgIG5vZGUsXG4gICAgICBub2RlQnlLZXlWYWx1ZSA9IG5ldyBNYXAsXG4gICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aCxcbiAgICAgIGtleVZhbHVlcyA9IG5ldyBBcnJheShncm91cExlbmd0aCksXG4gICAgICBrZXlWYWx1ZTtcblxuICAvLyBDb21wdXRlIHRoZSBrZXkgZm9yIGVhY2ggbm9kZS5cbiAgLy8gSWYgbXVsdGlwbGUgbm9kZXMgaGF2ZSB0aGUgc2FtZSBrZXksIHRoZSBkdXBsaWNhdGVzIGFyZSBhZGRlZCB0byBleGl0LlxuICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBMZW5ndGg7ICsraSkge1xuICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgIGtleVZhbHVlc1tpXSA9IGtleVZhbHVlID0ga2V5LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApICsgXCJcIjtcbiAgICAgIGlmIChub2RlQnlLZXlWYWx1ZS5oYXMoa2V5VmFsdWUpKSB7XG4gICAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZUJ5S2V5VmFsdWUuc2V0KGtleVZhbHVlLCBub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDb21wdXRlIHRoZSBrZXkgZm9yIGVhY2ggZGF0dW0uXG4gIC8vIElmIHRoZXJlIGEgbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBrZXksIGpvaW4gYW5kIGFkZCBpdCB0byB1cGRhdGUuXG4gIC8vIElmIHRoZXJlIGlzIG5vdCAob3IgdGhlIGtleSBpcyBhIGR1cGxpY2F0ZSksIGFkZCBpdCB0byBlbnRlci5cbiAgZm9yIChpID0gMDsgaSA8IGRhdGFMZW5ndGg7ICsraSkge1xuICAgIGtleVZhbHVlID0ga2V5LmNhbGwocGFyZW50LCBkYXRhW2ldLCBpLCBkYXRhKSArIFwiXCI7XG4gICAgaWYgKG5vZGUgPSBub2RlQnlLZXlWYWx1ZS5nZXQoa2V5VmFsdWUpKSB7XG4gICAgICB1cGRhdGVbaV0gPSBub2RlO1xuICAgICAgbm9kZS5fX2RhdGFfXyA9IGRhdGFbaV07XG4gICAgICBub2RlQnlLZXlWYWx1ZS5kZWxldGUoa2V5VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnRlcltpXSA9IG5ldyBFbnRlck5vZGUocGFyZW50LCBkYXRhW2ldKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgYW55IHJlbWFpbmluZyBub2RlcyB0aGF0IHdlcmUgbm90IGJvdW5kIHRvIGRhdGEgdG8gZXhpdC5cbiAgZm9yIChpID0gMDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKG5vZGVCeUtleVZhbHVlLmdldChrZXlWYWx1ZXNbaV0pID09PSBub2RlKSkge1xuICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRhdHVtKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuX19kYXRhX187XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLCBkYXR1bSk7XG5cbiAgdmFyIGJpbmQgPSBrZXkgPyBiaW5kS2V5IDogYmluZEluZGV4LFxuICAgICAgcGFyZW50cyA9IHRoaXMuX3BhcmVudHMsXG4gICAgICBncm91cHMgPSB0aGlzLl9ncm91cHM7XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB2YWx1ZSA9IGNvbnN0YW50KHZhbHVlKTtcblxuICBmb3IgKHZhciBtID0gZ3JvdXBzLmxlbmd0aCwgdXBkYXRlID0gbmV3IEFycmF5KG0pLCBlbnRlciA9IG5ldyBBcnJheShtKSwgZXhpdCA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICB2YXIgcGFyZW50ID0gcGFyZW50c1tqXSxcbiAgICAgICAgZ3JvdXAgPSBncm91cHNbal0sXG4gICAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgICBkYXRhID0gYXJyYXkodmFsdWUuY2FsbChwYXJlbnQsIHBhcmVudCAmJiBwYXJlbnQuX19kYXRhX18sIGosIHBhcmVudHMpKSxcbiAgICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoLFxuICAgICAgICBlbnRlckdyb3VwID0gZW50ZXJbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXG4gICAgICAgIHVwZGF0ZUdyb3VwID0gdXBkYXRlW2pdID0gbmV3IEFycmF5KGRhdGFMZW5ndGgpLFxuICAgICAgICBleGl0R3JvdXAgPSBleGl0W2pdID0gbmV3IEFycmF5KGdyb3VwTGVuZ3RoKTtcblxuICAgIGJpbmQocGFyZW50LCBncm91cCwgZW50ZXJHcm91cCwgdXBkYXRlR3JvdXAsIGV4aXRHcm91cCwgZGF0YSwga2V5KTtcblxuICAgIC8vIE5vdyBjb25uZWN0IHRoZSBlbnRlciBub2RlcyB0byB0aGVpciBmb2xsb3dpbmcgdXBkYXRlIG5vZGUsIHN1Y2ggdGhhdFxuICAgIC8vIGFwcGVuZENoaWxkIGNhbiBpbnNlcnQgdGhlIG1hdGVyaWFsaXplZCBlbnRlciBub2RlIGJlZm9yZSB0aGlzIG5vZGUsXG4gICAgLy8gcmF0aGVyIHRoYW4gYXQgdGhlIGVuZCBvZiB0aGUgcGFyZW50IG5vZGUuXG4gICAgZm9yICh2YXIgaTAgPSAwLCBpMSA9IDAsIHByZXZpb3VzLCBuZXh0OyBpMCA8IGRhdGFMZW5ndGg7ICsraTApIHtcbiAgICAgIGlmIChwcmV2aW91cyA9IGVudGVyR3JvdXBbaTBdKSB7XG4gICAgICAgIGlmIChpMCA+PSBpMSkgaTEgPSBpMCArIDE7XG4gICAgICAgIHdoaWxlICghKG5leHQgPSB1cGRhdGVHcm91cFtpMV0pICYmICsraTEgPCBkYXRhTGVuZ3RoKTtcbiAgICAgICAgcHJldmlvdXMuX25leHQgPSBuZXh0IHx8IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlID0gbmV3IFNlbGVjdGlvbih1cGRhdGUsIHBhcmVudHMpO1xuICB1cGRhdGUuX2VudGVyID0gZW50ZXI7XG4gIHVwZGF0ZS5fZXhpdCA9IGV4aXQ7XG4gIHJldHVybiB1cGRhdGU7XG59XG4iLCJpbXBvcnQgc3BhcnNlIGZyb20gXCIuL3NwYXJzZS5qc1wiO1xuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbih0aGlzLl9leGl0IHx8IHRoaXMuX2dyb3Vwcy5tYXAoc3BhcnNlKSwgdGhpcy5fcGFyZW50cyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvbmVudGVyLCBvbnVwZGF0ZSwgb25leGl0KSB7XG4gIHZhciBlbnRlciA9IHRoaXMuZW50ZXIoKSwgdXBkYXRlID0gdGhpcywgZXhpdCA9IHRoaXMuZXhpdCgpO1xuICBlbnRlciA9IHR5cGVvZiBvbmVudGVyID09PSBcImZ1bmN0aW9uXCIgPyBvbmVudGVyKGVudGVyKSA6IGVudGVyLmFwcGVuZChvbmVudGVyICsgXCJcIik7XG4gIGlmIChvbnVwZGF0ZSAhPSBudWxsKSB1cGRhdGUgPSBvbnVwZGF0ZSh1cGRhdGUpO1xuICBpZiAob25leGl0ID09IG51bGwpIGV4aXQucmVtb3ZlKCk7IGVsc2Ugb25leGl0KGV4aXQpO1xuICByZXR1cm4gZW50ZXIgJiYgdXBkYXRlID8gZW50ZXIubWVyZ2UodXBkYXRlKS5vcmRlcigpIDogdXBkYXRlO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdGlvbikge1xuICBpZiAoIShzZWxlY3Rpb24gaW5zdGFuY2VvZiBTZWxlY3Rpb24pKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIG1lcmdlXCIpO1xuXG4gIGZvciAodmFyIGdyb3VwczAgPSB0aGlzLl9ncm91cHMsIGdyb3VwczEgPSBzZWxlY3Rpb24uX2dyb3VwcywgbTAgPSBncm91cHMwLmxlbmd0aCwgbTEgPSBncm91cHMxLmxlbmd0aCwgbSA9IE1hdGgubWluKG0wLCBtMSksIG1lcmdlcyA9IG5ldyBBcnJheShtMCksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAwID0gZ3JvdXBzMFtqXSwgZ3JvdXAxID0gZ3JvdXBzMVtqXSwgbiA9IGdyb3VwMC5sZW5ndGgsIG1lcmdlID0gbWVyZ2VzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cDBbaV0gfHwgZ3JvdXAxW2ldKSB7XG4gICAgICAgIG1lcmdlW2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKDsgaiA8IG0wOyArK2opIHtcbiAgICBtZXJnZXNbal0gPSBncm91cHMwW2pdO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24obWVyZ2VzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IC0xLCBtID0gZ3JvdXBzLmxlbmd0aDsgKytqIDwgbTspIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IGdyb3VwLmxlbmd0aCAtIDEsIG5leHQgPSBncm91cFtpXSwgbm9kZTsgLS1pID49IDA7KSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIGlmIChuZXh0ICYmIG5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24obmV4dCkgXiA0KSBuZXh0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIG5leHQpO1xuICAgICAgICBuZXh0ID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb21wYXJlKSB7XG4gIGlmICghY29tcGFyZSkgY29tcGFyZSA9IGFzY2VuZGluZztcblxuICBmdW5jdGlvbiBjb21wYXJlTm9kZShhLCBiKSB7XG4gICAgcmV0dXJuIGEgJiYgYiA/IGNvbXBhcmUoYS5fX2RhdGFfXywgYi5fX2RhdGFfXykgOiAhYSAtICFiO1xuICB9XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc29ydGdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc29ydGdyb3VwID0gc29ydGdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc29ydGdyb3VwW2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc29ydGdyb3VwLnNvcnQoY29tcGFyZU5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc29ydGdyb3VwcywgdGhpcy5fcGFyZW50cykub3JkZXIoKTtcbn1cblxuZnVuY3Rpb24gYXNjZW5kaW5nKGEsIGIpIHtcbiAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiBhID49IGIgPyAwIDogTmFOO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1swXTtcbiAgYXJndW1lbnRzWzBdID0gdGhpcztcbiAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20odGhpcyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgdmFyIG5vZGUgPSBncm91cFtpXTtcbiAgICAgIGlmIChub2RlKSByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICBsZXQgc2l6ZSA9IDA7XG4gIGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzKSArK3NpemU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgcmV0dXJuIHNpemU7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICF0aGlzLm5vZGUoKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGgsIG5vZGU7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIGNhbGxiYWNrLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IG5hbWVzcGFjZSBmcm9tIFwiLi4vbmFtZXNwYWNlLmpzXCI7XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmVOUyhmdWxsbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnQobmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50TlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgdmFsdWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHYpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb25OUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgZWxzZSB0aGlzLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgdik7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMubm9kZSgpO1xuICAgIHJldHVybiBmdWxsbmFtZS5sb2NhbFxuICAgICAgICA/IG5vZGUuZ2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKVxuICAgICAgICA6IG5vZGUuZ2V0QXR0cmlidXRlKGZ1bGxuYW1lKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0clJlbW92ZU5TIDogYXR0clJlbW92ZSkgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckZ1bmN0aW9uTlMgOiBhdHRyRnVuY3Rpb24pXG4gICAgICA6IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJDb25zdGFudE5TIDogYXR0ckNvbnN0YW50KSkpKGZ1bGxuYW1lLCB2YWx1ZSkpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSkge1xuICByZXR1cm4gKG5vZGUub3duZXJEb2N1bWVudCAmJiBub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpIC8vIG5vZGUgaXMgYSBOb2RlXG4gICAgICB8fCAobm9kZS5kb2N1bWVudCAmJiBub2RlKSAvLyBub2RlIGlzIGEgV2luZG93XG4gICAgICB8fCBub2RlLmRlZmF1bHRWaWV3OyAvLyBub2RlIGlzIGEgRG9jdW1lbnRcbn1cbiIsImltcG9ydCBkZWZhdWx0VmlldyBmcm9tIFwiLi4vd2luZG93LmpzXCI7XG5cbmZ1bmN0aW9uIHN0eWxlUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlQ29uc3RhbnQobmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbHVlLCBwcmlvcml0eSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlRnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgICBlbHNlIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdiwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICA/IHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgPyBzdHlsZVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IHN0eWxlRnVuY3Rpb25cbiAgICAgICAgICAgIDogc3R5bGVDb25zdGFudCkobmFtZSwgdmFsdWUsIHByaW9yaXR5ID09IG51bGwgPyBcIlwiIDogcHJpb3JpdHkpKVxuICAgICAgOiBzdHlsZVZhbHVlKHRoaXMubm9kZSgpLCBuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0eWxlVmFsdWUobm9kZSwgbmFtZSkge1xuICByZXR1cm4gbm9kZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpXG4gICAgICB8fCBkZWZhdWx0Vmlldyhub2RlKS5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpLmdldFByb3BlcnR5VmFsdWUobmFtZSk7XG59XG4iLCJmdW5jdGlvbiBwcm9wZXJ0eVJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBkZWxldGUgdGhpc1tuYW1lXTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvcGVydHlDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpc1tuYW1lXSA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgZGVsZXRlIHRoaXNbbmFtZV07XG4gICAgZWxzZSB0aGlzW25hbWVdID0gdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICA/IHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgICAgID8gcHJvcGVydHlSZW1vdmUgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gcHJvcGVydHlGdW5jdGlvblxuICAgICAgICAgIDogcHJvcGVydHlDb25zdGFudCkobmFtZSwgdmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKVtuYW1lXTtcbn1cbiIsImZ1bmN0aW9uIGNsYXNzQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcudHJpbSgpLnNwbGl0KC9efFxccysvKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NMaXN0KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuY2xhc3NMaXN0IHx8IG5ldyBDbGFzc0xpc3Qobm9kZSk7XG59XG5cbmZ1bmN0aW9uIENsYXNzTGlzdChub2RlKSB7XG4gIHRoaXMuX25vZGUgPSBub2RlO1xuICB0aGlzLl9uYW1lcyA9IGNsYXNzQXJyYXkobm9kZS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSB8fCBcIlwiKTtcbn1cblxuQ2xhc3NMaXN0LnByb3RvdHlwZSA9IHtcbiAgYWRkOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIGkgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgIGlmIChpIDwgMCkge1xuICAgICAgdGhpcy5fbmFtZXMucHVzaChuYW1lKTtcbiAgICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdGhpcy5fbmFtZXMuam9pbihcIiBcIikpO1xuICAgIH1cbiAgfSxcbiAgcmVtb3ZlOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIGkgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgIGlmIChpID49IDApIHtcbiAgICAgIHRoaXMuX25hbWVzLnNwbGljZShpLCAxKTtcbiAgICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdGhpcy5fbmFtZXMuam9pbihcIiBcIikpO1xuICAgIH1cbiAgfSxcbiAgY29udGFpbnM6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKSA+PSAwO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjbGFzc2VkQWRkKG5vZGUsIG5hbWVzKSB7XG4gIHZhciBsaXN0ID0gY2xhc3NMaXN0KG5vZGUpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gIHdoaWxlICgrK2kgPCBuKSBsaXN0LmFkZChuYW1lc1tpXSk7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRSZW1vdmUobm9kZSwgbmFtZXMpIHtcbiAgdmFyIGxpc3QgPSBjbGFzc0xpc3Qobm9kZSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIGxpc3QucmVtb3ZlKG5hbWVzW2ldKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZFRydWUobmFtZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGNsYXNzZWRBZGQodGhpcywgbmFtZXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkRmFsc2UobmFtZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGNsYXNzZWRSZW1vdmUodGhpcywgbmFtZXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkRnVuY3Rpb24obmFtZXMsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAodmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKSA/IGNsYXNzZWRBZGQgOiBjbGFzc2VkUmVtb3ZlKSh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBuYW1lcyA9IGNsYXNzQXJyYXkobmFtZSArIFwiXCIpO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBsaXN0ID0gY2xhc3NMaXN0KHRoaXMubm9kZSgpKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoIWxpc3QuY29udGFpbnMobmFtZXNbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBjbGFzc2VkRnVuY3Rpb24gOiB2YWx1ZVxuICAgICAgPyBjbGFzc2VkVHJ1ZVxuICAgICAgOiBjbGFzc2VkRmFsc2UpKG5hbWVzLCB2YWx1ZSkpO1xufVxuIiwiZnVuY3Rpb24gdGV4dFJlbW92ZSgpIHtcbiAgdGhpcy50ZXh0Q29udGVudCA9IFwiXCI7XG59XG5cbmZ1bmN0aW9uIHRleHRDb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0RnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyB0ZXh0UmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyB0ZXh0RnVuY3Rpb25cbiAgICAgICAgICA6IHRleHRDb25zdGFudCkodmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKS50ZXh0Q29udGVudDtcbn1cbiIsImZ1bmN0aW9uIGh0bWxSZW1vdmUoKSB7XG4gIHRoaXMuaW5uZXJIVE1MID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gaHRtbENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlubmVySFRNTCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBodG1sRnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLmlubmVySFRNTCA9IHYgPT0gbnVsbCA/IFwiXCIgOiB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2godmFsdWUgPT0gbnVsbFxuICAgICAgICAgID8gaHRtbFJlbW92ZSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gaHRtbEZ1bmN0aW9uXG4gICAgICAgICAgOiBodG1sQ29uc3RhbnQpKHZhbHVlKSlcbiAgICAgIDogdGhpcy5ub2RlKCkuaW5uZXJIVE1MO1xufVxuIiwiZnVuY3Rpb24gcmFpc2UoKSB7XG4gIGlmICh0aGlzLm5leHRTaWJsaW5nKSB0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKHJhaXNlKTtcbn1cbiIsImZ1bmN0aW9uIGxvd2VyKCkge1xuICBpZiAodGhpcy5wcmV2aW91c1NpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcywgdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChsb3dlcik7XG59XG4iLCJpbXBvcnQgY3JlYXRvciBmcm9tIFwiLi4vY3JlYXRvci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSk7XG4gIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChjcmVhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH0pO1xufVxuIiwiaW1wb3J0IGNyZWF0b3IgZnJvbSBcIi4uL2NyZWF0b3IuanNcIjtcbmltcG9ydCBzZWxlY3RvciBmcm9tIFwiLi4vc2VsZWN0b3IuanNcIjtcblxuZnVuY3Rpb24gY29uc3RhbnROdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgYmVmb3JlKSB7XG4gIHZhciBjcmVhdGUgPSB0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiID8gbmFtZSA6IGNyZWF0b3IobmFtZSksXG4gICAgICBzZWxlY3QgPSBiZWZvcmUgPT0gbnVsbCA/IGNvbnN0YW50TnVsbCA6IHR5cGVvZiBiZWZvcmUgPT09IFwiZnVuY3Rpb25cIiA/IGJlZm9yZSA6IHNlbGVjdG9yKGJlZm9yZSk7XG4gIHJldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoY3JlYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHNlbGVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IG51bGwpO1xuICB9KTtcbn1cbiIsImZ1bmN0aW9uIHJlbW92ZSgpIHtcbiAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChyZW1vdmUpO1xufVxuIiwiZnVuY3Rpb24gc2VsZWN0aW9uX2Nsb25lU2hhbGxvdygpIHtcbiAgdmFyIGNsb25lID0gdGhpcy5jbG9uZU5vZGUoZmFsc2UpLCBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gIHJldHVybiBwYXJlbnQgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNsb25lLCB0aGlzLm5leHRTaWJsaW5nKSA6IGNsb25lO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb25fY2xvbmVEZWVwKCkge1xuICB2YXIgY2xvbmUgPSB0aGlzLmNsb25lTm9kZSh0cnVlKSwgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICByZXR1cm4gcGFyZW50ID8gcGFyZW50Lmluc2VydEJlZm9yZShjbG9uZSwgdGhpcy5uZXh0U2libGluZykgOiBjbG9uZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZGVlcCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZGVlcCA/IHNlbGVjdGlvbl9jbG9uZURlZXAgOiBzZWxlY3Rpb25fY2xvbmVTaGFsbG93KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMucHJvcGVydHkoXCJfX2RhdGFfX1wiLCB2YWx1ZSlcbiAgICAgIDogdGhpcy5ub2RlKCkuX19kYXRhX187XG59XG4iLCJmdW5jdGlvbiBjb250ZXh0TGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBldmVudCwgdGhpcy5fX2RhdGFfXyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lcykge1xuICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uUmVtb3ZlKHR5cGVuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgb24gPSB0aGlzLl9fb247XG4gICAgaWYgKCFvbikgcmV0dXJuO1xuICAgIGZvciAodmFyIGogPSAwLCBpID0gLTEsIG0gPSBvbi5sZW5ndGgsIG87IGogPCBtOyArK2opIHtcbiAgICAgIGlmIChvID0gb25bal0sICghdHlwZW5hbWUudHlwZSB8fCBvLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUpICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLm9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25bKytpXSA9IG87XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgrK2kpIG9uLmxlbmd0aCA9IGk7XG4gICAgZWxzZSBkZWxldGUgdGhpcy5fX29uO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbkFkZCh0eXBlbmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBvbiA9IHRoaXMuX19vbiwgbywgbGlzdGVuZXIgPSBjb250ZXh0TGlzdGVuZXIodmFsdWUpO1xuICAgIGlmIChvbikgZm9yICh2YXIgaiA9IDAsIG0gPSBvbi5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICAgIGlmICgobyA9IG9uW2pdKS50eXBlID09PSB0eXBlbmFtZS50eXBlICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyID0gbGlzdGVuZXIsIG8ub3B0aW9ucyA9IG9wdGlvbnMpO1xuICAgICAgICBvLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGVuYW1lLnR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgICBvID0ge3R5cGU6IHR5cGVuYW1lLnR5cGUsIG5hbWU6IHR5cGVuYW1lLm5hbWUsIHZhbHVlOiB2YWx1ZSwgbGlzdGVuZXI6IGxpc3RlbmVyLCBvcHRpb25zOiBvcHRpb25zfTtcbiAgICBpZiAoIW9uKSB0aGlzLl9fb24gPSBbb107XG4gICAgZWxzZSBvbi5wdXNoKG8pO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlbmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHR5cGVuYW1lcyA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiksIGksIG4gPSB0eXBlbmFtZXMubGVuZ3RoLCB0O1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBvbiA9IHRoaXMubm9kZSgpLl9fb247XG4gICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aCwgbzsgaiA8IG07ICsraikge1xuICAgICAgZm9yIChpID0gMCwgbyA9IG9uW2pdOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICgodCA9IHR5cGVuYW1lc1tpXSkudHlwZSA9PT0gby50eXBlICYmIHQubmFtZSA9PT0gby5uYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIG8udmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgb24gPSB2YWx1ZSA/IG9uQWRkIDogb25SZW1vdmU7XG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHRoaXMuZWFjaChvbih0eXBlbmFtZXNbaV0sIHZhbHVlLCBvcHRpb25zKSk7XG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IGRlZmF1bHRWaWV3IGZyb20gXCIuLi93aW5kb3cuanNcIjtcblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChub2RlLCB0eXBlLCBwYXJhbXMpIHtcbiAgdmFyIHdpbmRvdyA9IGRlZmF1bHRWaWV3KG5vZGUpLFxuICAgICAgZXZlbnQgPSB3aW5kb3cuQ3VzdG9tRXZlbnQ7XG5cbiAgaWYgKHR5cGVvZiBldmVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZXZlbnQgPSBuZXcgZXZlbnQodHlwZSwgcGFyYW1zKTtcbiAgfSBlbHNlIHtcbiAgICBldmVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpO1xuICAgIGlmIChwYXJhbXMpIGV2ZW50LmluaXRFdmVudCh0eXBlLCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibGUpLCBldmVudC5kZXRhaWwgPSBwYXJhbXMuZGV0YWlsO1xuICAgIGVsc2UgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICBub2RlLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaENvbnN0YW50KHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hGdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KHRoaXMsIHR5cGUsIHBhcmFtcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiBwYXJhbXMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBkaXNwYXRjaEZ1bmN0aW9uXG4gICAgICA6IGRpc3BhdGNoQ29uc3RhbnQpKHR5cGUsIHBhcmFtcykpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24qKCkge1xuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZTsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkgeWllbGQgbm9kZTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBzZWxlY3Rpb25fc2VsZWN0IGZyb20gXCIuL3NlbGVjdC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zZWxlY3RBbGwgZnJvbSBcIi4vc2VsZWN0QWxsLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NlbGVjdENoaWxkIGZyb20gXCIuL3NlbGVjdENoaWxkLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NlbGVjdENoaWxkcmVuIGZyb20gXCIuL3NlbGVjdENoaWxkcmVuLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2ZpbHRlciBmcm9tIFwiLi9maWx0ZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGF0YSBmcm9tIFwiLi9kYXRhLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VudGVyIGZyb20gXCIuL2VudGVyLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2V4aXQgZnJvbSBcIi4vZXhpdC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9qb2luIGZyb20gXCIuL2pvaW4uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbWVyZ2UgZnJvbSBcIi4vbWVyZ2UuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fb3JkZXIgZnJvbSBcIi4vb3JkZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc29ydCBmcm9tIFwiLi9zb3J0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2NhbGwgZnJvbSBcIi4vY2FsbC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9ub2RlcyBmcm9tIFwiLi9ub2Rlcy5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9ub2RlIGZyb20gXCIuL25vZGUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2l6ZSBmcm9tIFwiLi9zaXplLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VtcHR5IGZyb20gXCIuL2VtcHR5LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VhY2ggZnJvbSBcIi4vZWFjaC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9hdHRyIGZyb20gXCIuL2F0dHIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc3R5bGUgZnJvbSBcIi4vc3R5bGUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fcHJvcGVydHkgZnJvbSBcIi4vcHJvcGVydHkuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2xhc3NlZCBmcm9tIFwiLi9jbGFzc2VkLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3RleHQgZnJvbSBcIi4vdGV4dC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9odG1sIGZyb20gXCIuL2h0bWwuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fcmFpc2UgZnJvbSBcIi4vcmFpc2UuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbG93ZXIgZnJvbSBcIi4vbG93ZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fYXBwZW5kIGZyb20gXCIuL2FwcGVuZC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9pbnNlcnQgZnJvbSBcIi4vaW5zZXJ0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3JlbW92ZSBmcm9tIFwiLi9yZW1vdmUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2xvbmUgZnJvbSBcIi4vY2xvbmUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGF0dW0gZnJvbSBcIi4vZGF0dW0uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fb24gZnJvbSBcIi4vb24uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGlzcGF0Y2ggZnJvbSBcIi4vZGlzcGF0Y2guanNcIjtcbmltcG9ydCBzZWxlY3Rpb25faXRlcmF0b3IgZnJvbSBcIi4vaXRlcmF0b3IuanNcIjtcblxuZXhwb3J0IHZhciByb290ID0gW251bGxdO1xuXG5leHBvcnQgZnVuY3Rpb24gU2VsZWN0aW9uKGdyb3VwcywgcGFyZW50cykge1xuICB0aGlzLl9ncm91cHMgPSBncm91cHM7XG4gIHRoaXMuX3BhcmVudHMgPSBwYXJlbnRzO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sIHJvb3QpO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb25fc2VsZWN0aW9uKCkge1xuICByZXR1cm4gdGhpcztcbn1cblxuU2VsZWN0aW9uLnByb3RvdHlwZSA9IHNlbGVjdGlvbi5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBTZWxlY3Rpb24sXG4gIHNlbGVjdDogc2VsZWN0aW9uX3NlbGVjdCxcbiAgc2VsZWN0QWxsOiBzZWxlY3Rpb25fc2VsZWN0QWxsLFxuICBzZWxlY3RDaGlsZDogc2VsZWN0aW9uX3NlbGVjdENoaWxkLFxuICBzZWxlY3RDaGlsZHJlbjogc2VsZWN0aW9uX3NlbGVjdENoaWxkcmVuLFxuICBmaWx0ZXI6IHNlbGVjdGlvbl9maWx0ZXIsXG4gIGRhdGE6IHNlbGVjdGlvbl9kYXRhLFxuICBlbnRlcjogc2VsZWN0aW9uX2VudGVyLFxuICBleGl0OiBzZWxlY3Rpb25fZXhpdCxcbiAgam9pbjogc2VsZWN0aW9uX2pvaW4sXG4gIG1lcmdlOiBzZWxlY3Rpb25fbWVyZ2UsXG4gIHNlbGVjdGlvbjogc2VsZWN0aW9uX3NlbGVjdGlvbixcbiAgb3JkZXI6IHNlbGVjdGlvbl9vcmRlcixcbiAgc29ydDogc2VsZWN0aW9uX3NvcnQsXG4gIGNhbGw6IHNlbGVjdGlvbl9jYWxsLFxuICBub2Rlczogc2VsZWN0aW9uX25vZGVzLFxuICBub2RlOiBzZWxlY3Rpb25fbm9kZSxcbiAgc2l6ZTogc2VsZWN0aW9uX3NpemUsXG4gIGVtcHR5OiBzZWxlY3Rpb25fZW1wdHksXG4gIGVhY2g6IHNlbGVjdGlvbl9lYWNoLFxuICBhdHRyOiBzZWxlY3Rpb25fYXR0cixcbiAgc3R5bGU6IHNlbGVjdGlvbl9zdHlsZSxcbiAgcHJvcGVydHk6IHNlbGVjdGlvbl9wcm9wZXJ0eSxcbiAgY2xhc3NlZDogc2VsZWN0aW9uX2NsYXNzZWQsXG4gIHRleHQ6IHNlbGVjdGlvbl90ZXh0LFxuICBodG1sOiBzZWxlY3Rpb25faHRtbCxcbiAgcmFpc2U6IHNlbGVjdGlvbl9yYWlzZSxcbiAgbG93ZXI6IHNlbGVjdGlvbl9sb3dlcixcbiAgYXBwZW5kOiBzZWxlY3Rpb25fYXBwZW5kLFxuICBpbnNlcnQ6IHNlbGVjdGlvbl9pbnNlcnQsXG4gIHJlbW92ZTogc2VsZWN0aW9uX3JlbW92ZSxcbiAgY2xvbmU6IHNlbGVjdGlvbl9jbG9uZSxcbiAgZGF0dW06IHNlbGVjdGlvbl9kYXR1bSxcbiAgb246IHNlbGVjdGlvbl9vbixcbiAgZGlzcGF0Y2g6IHNlbGVjdGlvbl9kaXNwYXRjaCxcbiAgW1N5bWJvbC5pdGVyYXRvcl06IHNlbGVjdGlvbl9pdGVyYXRvclxufTtcblxuZXhwb3J0IGRlZmF1bHQgc2VsZWN0aW9uO1xuIiwiaW1wb3J0IHtTZWxlY3Rpb24sIHJvb3R9IGZyb20gXCIuL3NlbGVjdGlvbi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiXG4gICAgICA/IG5ldyBTZWxlY3Rpb24oW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKV1dLCBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSlcbiAgICAgIDogbmV3IFNlbGVjdGlvbihbW3NlbGVjdG9yXV0sIHJvb3QpO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGluaXRSYW5nZShkb21haW4sIHJhbmdlKSB7XG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogYnJlYWs7XG4gICAgY2FzZSAxOiB0aGlzLnJhbmdlKGRvbWFpbik7IGJyZWFrO1xuICAgIGRlZmF1bHQ6IHRoaXMucmFuZ2UocmFuZ2UpLmRvbWFpbihkb21haW4pOyBicmVhaztcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRJbnRlcnBvbGF0b3IoZG9tYWluLCBpbnRlcnBvbGF0b3IpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiBicmVhaztcbiAgICBjYXNlIDE6IHtcbiAgICAgIGlmICh0eXBlb2YgZG9tYWluID09PSBcImZ1bmN0aW9uXCIpIHRoaXMuaW50ZXJwb2xhdG9yKGRvbWFpbik7XG4gICAgICBlbHNlIHRoaXMucmFuZ2UoZG9tYWluKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICB0aGlzLmRvbWFpbihkb21haW4pO1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcnBvbGF0b3IgPT09IFwiZnVuY3Rpb25cIikgdGhpcy5pbnRlcnBvbGF0b3IoaW50ZXJwb2xhdG9yKTtcbiAgICAgIGVsc2UgdGhpcy5yYW5nZShpbnRlcnBvbGF0b3IpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXQuanNcIjtcblxuZXhwb3J0IGNvbnN0IGltcGxpY2l0ID0gU3ltYm9sKFwiaW1wbGljaXRcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9yZGluYWwoKSB7XG4gIHZhciBpbmRleCA9IG5ldyBNYXAoKSxcbiAgICAgIGRvbWFpbiA9IFtdLFxuICAgICAgcmFuZ2UgPSBbXSxcbiAgICAgIHVua25vd24gPSBpbXBsaWNpdDtcblxuICBmdW5jdGlvbiBzY2FsZShkKSB7XG4gICAgdmFyIGtleSA9IGQgKyBcIlwiLCBpID0gaW5kZXguZ2V0KGtleSk7XG4gICAgaWYgKCFpKSB7XG4gICAgICBpZiAodW5rbm93biAhPT0gaW1wbGljaXQpIHJldHVybiB1bmtub3duO1xuICAgICAgaW5kZXguc2V0KGtleSwgaSA9IGRvbWFpbi5wdXNoKGQpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJhbmdlWyhpIC0gMSkgJSByYW5nZS5sZW5ndGhdO1xuICB9XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGRvbWFpbi5zbGljZSgpO1xuICAgIGRvbWFpbiA9IFtdLCBpbmRleCA9IG5ldyBNYXAoKTtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIF8pIHtcbiAgICAgIGNvbnN0IGtleSA9IHZhbHVlICsgXCJcIjtcbiAgICAgIGlmIChpbmRleC5oYXMoa2V5KSkgY29udGludWU7XG4gICAgICBpbmRleC5zZXQoa2V5LCBkb21haW4ucHVzaCh2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gc2NhbGU7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBBcnJheS5mcm9tKF8pLCBzY2FsZSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBvcmRpbmFsKGRvbWFpbiwgcmFuZ2UpLnVua25vd24odW5rbm93bik7XG4gIH07XG5cbiAgaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xuXG4gIHJldHVybiBzY2FsZTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICB2YXIgbiA9IHNwZWNpZmllci5sZW5ndGggLyA2IHwgMCwgY29sb3JzID0gbmV3IEFycmF5KG4pLCBpID0gMDtcbiAgd2hpbGUgKGkgPCBuKSBjb2xvcnNbaV0gPSBcIiNcIiArIHNwZWNpZmllci5zbGljZShpICogNiwgKytpICogNik7XG4gIHJldHVybiBjb2xvcnM7XG59XG4iLCJpbXBvcnQgY29sb3JzIGZyb20gXCIuLi9jb2xvcnMuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY29sb3JzKFwiMWY3N2I0ZmY3ZjBlMmNhMDJjZDYyNzI4OTQ2N2JkOGM1NjRiZTM3N2MyN2Y3ZjdmYmNiZDIyMTdiZWNmXCIpO1xuIiwiaW1wb3J0IF9wdCBmcm9tIFwicHJvcC10eXBlc1wiO1xuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgPT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl07IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbmltcG9ydCBSZWFjdCwgeyB1c2VSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RGYXV4RG9tIGZyb20gJ3JlYWN0LWZhdXgtZG9tJztcbmltcG9ydCBjbG91ZCBmcm9tICdkMy1jbG91ZCc7XG5pbXBvcnQgaXNEZWVwRXF1YWwgZnJvbSAncmVhY3QtZmFzdC1jb21wYXJlJztcbmltcG9ydCB7IHNlbGVjdCB9IGZyb20gJ2QzLXNlbGVjdGlvbic7XG5pbXBvcnQgeyBzY2FsZU9yZGluYWwgfSBmcm9tICdkMy1zY2FsZSc7XG5pbXBvcnQgeyBzY2hlbWVDYXRlZ29yeTEwIH0gZnJvbSAnZDMtc2NhbGUtY2hyb21hdGljJztcbnZhciBkZWZhdWx0U2NhbGVPcmRpbmFsID0gc2NhbGVPcmRpbmFsKHNjaGVtZUNhdGVnb3J5MTApO1xuXG5mdW5jdGlvbiBXb3JkQ2xvdWQoX3JlZikge1xuICB2YXIgZGF0YSA9IF9yZWYuZGF0YSxcbiAgICAgIF9yZWYkd2lkdGggPSBfcmVmLndpZHRoLFxuICAgICAgd2lkdGggPSBfcmVmJHdpZHRoID09PSB2b2lkIDAgPyA3MDAgOiBfcmVmJHdpZHRoLFxuICAgICAgX3JlZiRoZWlnaHQgPSBfcmVmLmhlaWdodCxcbiAgICAgIGhlaWdodCA9IF9yZWYkaGVpZ2h0ID09PSB2b2lkIDAgPyA2MDAgOiBfcmVmJGhlaWdodCxcbiAgICAgIF9yZWYkZm9udCA9IF9yZWYuZm9udCxcbiAgICAgIGZvbnQgPSBfcmVmJGZvbnQgPT09IHZvaWQgMCA/ICdzZXJpZicgOiBfcmVmJGZvbnQsXG4gICAgICBfcmVmJGZvbnRTdHlsZSA9IF9yZWYuZm9udFN0eWxlLFxuICAgICAgZm9udFN0eWxlID0gX3JlZiRmb250U3R5bGUgPT09IHZvaWQgMCA/ICdub3JtYWwnIDogX3JlZiRmb250U3R5bGUsXG4gICAgICBfcmVmJGZvbnRXZWlnaHQgPSBfcmVmLmZvbnRXZWlnaHQsXG4gICAgICBmb250V2VpZ2h0ID0gX3JlZiRmb250V2VpZ2h0ID09PSB2b2lkIDAgPyAnbm9ybWFsJyA6IF9yZWYkZm9udFdlaWdodCxcbiAgICAgIF9yZWYkZm9udFNpemUgPSBfcmVmLmZvbnRTaXplLFxuICAgICAgZm9udFNpemUgPSBfcmVmJGZvbnRTaXplID09PSB2b2lkIDAgPyBmdW5jdGlvbiAoZCkge1xuICAgIHJldHVybiBNYXRoLnNxcnQoZC52YWx1ZSk7XG4gIH0gOiBfcmVmJGZvbnRTaXplLFxuICAgICAgX3JlZiRyb3RhdGUgPSBfcmVmLnJvdGF0ZSxcbiAgICAgIHJvdGF0ZSA9IF9yZWYkcm90YXRlID09PSB2b2lkIDAgPyBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICh+fihNYXRoLnJhbmRvbSgpICogNikgLSAzKSAqIDMwO1xuICB9IDogX3JlZiRyb3RhdGUsXG4gICAgICBfcmVmJHNwaXJhbCA9IF9yZWYuc3BpcmFsLFxuICAgICAgc3BpcmFsID0gX3JlZiRzcGlyYWwgPT09IHZvaWQgMCA/ICdhcmNoaW1lZGVhbicgOiBfcmVmJHNwaXJhbCxcbiAgICAgIF9yZWYkcGFkZGluZyA9IF9yZWYucGFkZGluZyxcbiAgICAgIHBhZGRpbmcgPSBfcmVmJHBhZGRpbmcgPT09IHZvaWQgMCA/IDEgOiBfcmVmJHBhZGRpbmcsXG4gICAgICBfcmVmJHJhbmRvbSA9IF9yZWYucmFuZG9tLFxuICAgICAgcmFuZG9tID0gX3JlZiRyYW5kb20gPT09IHZvaWQgMCA/IE1hdGgucmFuZG9tIDogX3JlZiRyYW5kb20sXG4gICAgICBfcmVmJGZpbGwgPSBfcmVmLmZpbGwsXG4gICAgICBmaWxsID0gX3JlZiRmaWxsID09PSB2b2lkIDAgPyBmdW5jdGlvbiAoXywgaSkge1xuICAgIHJldHVybiBkZWZhdWx0U2NhbGVPcmRpbmFsKGkpO1xuICB9IDogX3JlZiRmaWxsLFxuICAgICAgb25Xb3JkQ2xpY2sgPSBfcmVmLm9uV29yZENsaWNrLFxuICAgICAgb25Xb3JkTW91c2VPdmVyID0gX3JlZi5vbldvcmRNb3VzZU92ZXIsXG4gICAgICBvbldvcmRNb3VzZU91dCA9IF9yZWYub25Xb3JkTW91c2VPdXQ7XG4gIHZhciBlbGVtZW50UmVmID0gdXNlUmVmKCk7XG5cbiAgaWYgKCFlbGVtZW50UmVmLmN1cnJlbnQpIHtcbiAgICBlbGVtZW50UmVmLmN1cnJlbnQgPSBSZWFjdEZhdXhEb20uY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIH1cblxuICB2YXIgZWwgPSBlbGVtZW50UmVmLmN1cnJlbnQ7IC8vIGNsZWFyIG9sZCB3b3Jkc1xuXG4gIHNlbGVjdChlbCkuc2VsZWN0QWxsKCcqJykucmVtb3ZlKCk7IC8vIHJlbmRlciBiYXNlZCBvbiBuZXcgZGF0YVxuXG4gIHZhciBsYXlvdXQgPSBjbG91ZCgpLndvcmRzKGRhdGEpLnNpemUoW3dpZHRoLCBoZWlnaHRdKS5mb250KGZvbnQpLmZvbnRTdHlsZShmb250U3R5bGUpLmZvbnRXZWlnaHQoZm9udFdlaWdodCkuZm9udFNpemUoZm9udFNpemUpLnJvdGF0ZShyb3RhdGUpLnNwaXJhbChzcGlyYWwpLnBhZGRpbmcocGFkZGluZykucmFuZG9tKHJhbmRvbSkub24oJ2VuZCcsIGZ1bmN0aW9uICh3b3Jkcykge1xuICAgIHZhciBfbGF5b3V0JHNpemUgPSBsYXlvdXQuc2l6ZSgpLFxuICAgICAgICBfbGF5b3V0JHNpemUyID0gX3NsaWNlZFRvQXJyYXkoX2xheW91dCRzaXplLCAyKSxcbiAgICAgICAgdyA9IF9sYXlvdXQkc2l6ZTJbMF0sXG4gICAgICAgIGggPSBfbGF5b3V0JHNpemUyWzFdO1xuXG4gICAgdmFyIHRleHRzID0gc2VsZWN0KGVsKS5hcHBlbmQoJ3N2ZycpLmF0dHIoJ3ZpZXdCb3gnLCBcIjAgMCBcIi5jb25jYXQodywgXCIgXCIpLmNvbmNhdChoKSkuYXR0cigncHJlc2VydmVBc3BlY3RSYXRpbycsICd4TWluWU1pbiBtZWV0JykuYXBwZW5kKCdnJykuYXR0cigndHJhbnNmb3JtJywgXCJ0cmFuc2xhdGUoXCIuY29uY2F0KHcgLyAyLCBcIixcIikuY29uY2F0KGggLyAyLCBcIilcIikpLnNlbGVjdEFsbCgndGV4dCcpLmRhdGEod29yZHMpLmVudGVyKCkuYXBwZW5kKCd0ZXh0Jykuc3R5bGUoJ2ZvbnQtZmFtaWx5JywgZnVuY3Rpb24gKGQpIHtcbiAgICAgIHJldHVybiBkLmZvbnQ7XG4gICAgfSkuc3R5bGUoJ2ZvbnQtc3R5bGUnLCBmdW5jdGlvbiAoZCkge1xuICAgICAgcmV0dXJuIGQuc3R5bGU7XG4gICAgfSkuc3R5bGUoJ2ZvbnQtd2VpZ2h0JywgZnVuY3Rpb24gKGQpIHtcbiAgICAgIHJldHVybiBkLndlaWdodDtcbiAgICB9KS5zdHlsZSgnZm9udC1zaXplJywgZnVuY3Rpb24gKGQpIHtcbiAgICAgIHJldHVybiBcIlwiLmNvbmNhdChkLnNpemUsIFwicHhcIik7XG4gICAgfSkuc3R5bGUoJ2ZpbGwnLCBmaWxsKS5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKS5hdHRyKCd0cmFuc2Zvcm0nLCBmdW5jdGlvbiAoZCkge1xuICAgICAgcmV0dXJuIFwidHJhbnNsYXRlKFwiLmNvbmNhdChbZC54LCBkLnldLCBcIilyb3RhdGUoXCIpLmNvbmNhdChkLnJvdGF0ZSwgXCIpXCIpO1xuICAgIH0pLnRleHQoZnVuY3Rpb24gKGQpIHtcbiAgICAgIHJldHVybiBkLnRleHQ7XG4gICAgfSk7XG5cbiAgICBpZiAob25Xb3JkQ2xpY2spIHtcbiAgICAgIHRleHRzLm9uKCdjbGljaycsIG9uV29yZENsaWNrKTtcbiAgICB9XG5cbiAgICBpZiAob25Xb3JkTW91c2VPdmVyKSB7XG4gICAgICB0ZXh0cy5vbignbW91c2VvdmVyJywgb25Xb3JkTW91c2VPdmVyKTtcbiAgICB9XG5cbiAgICBpZiAob25Xb3JkTW91c2VPdXQpIHtcbiAgICAgIHRleHRzLm9uKCdtb3VzZW91dCcsIG9uV29yZE1vdXNlT3V0KTtcbiAgICB9XG4gIH0pO1xuICBsYXlvdXQuc3RhcnQoKTtcbiAgcmV0dXJuIGVsLnRvUmVhY3QoKTtcbn1cblxuV29yZENsb3VkLnByb3BUeXBlcyA9IHtcbiAgZGF0YTogX3B0LmFycmF5T2YoX3B0LnNoYXBlKHtcbiAgICB0ZXh0OiBfcHQuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IF9wdC5udW1iZXIuaXNSZXF1aXJlZFxuICB9KSkuaXNSZXF1aXJlZCxcbiAgd2lkdGg6IF9wdC5udW1iZXIsXG4gIGhlaWdodDogX3B0Lm51bWJlcixcbiAgZm9udDogX3B0Lm9uZU9mVHlwZShbX3B0LnN0cmluZywgX3B0LmZ1bmNdKSxcbiAgZm9udFN0eWxlOiBfcHQub25lT2ZUeXBlKFtfcHQuc3RyaW5nLCBfcHQuZnVuY10pLFxuICBmb250V2VpZ2h0OiBfcHQub25lT2ZUeXBlKFtfcHQuc3RyaW5nLCBfcHQubnVtYmVyLCBfcHQuZnVuY10pLFxuICBmb250U2l6ZTogX3B0Lm9uZU9mVHlwZShbX3B0Lm51bWJlciwgX3B0LmZ1bmNdKSxcbiAgcm90YXRlOiBfcHQub25lT2ZUeXBlKFtfcHQubnVtYmVyLCBfcHQuZnVuY10pLFxuICBzcGlyYWw6IF9wdC5vbmVPZlR5cGUoW19wdC5vbmVPZihbJ2FyY2hpbWVkZWFuJ10pLCBfcHQub25lT2YoWydyZWN0YW5ndWxhciddKSwgX3B0LmZ1bmNdKSxcbiAgcGFkZGluZzogX3B0Lm9uZU9mVHlwZShbX3B0Lm51bWJlciwgX3B0LmZ1bmNdKSxcbiAgcmFuZG9tOiBfcHQuZnVuYyxcbiAgb25Xb3JkQ2xpY2s6IF9wdC5mdW5jLFxuICBvbldvcmRNb3VzZU92ZXI6IF9wdC5mdW5jLFxuICBvbldvcmRNb3VzZU91dDogX3B0LmZ1bmNcbn07XG5leHBvcnQgZGVmYXVsdCAvKiNfX1BVUkVfXyovUmVhY3QubWVtbyhXb3JkQ2xvdWQsIGlzRGVlcEVxdWFsKTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIGNyZWF0ZUVsZW1lbnQsIHJlbmRlciB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgJ2NvcmUtanMnO1xyXG5pbXBvcnQgV29yZENsb3VkIGZyb20gXCJyZWFjdC1kMy1jbG91ZFwiO1xyXG5cclxuXHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gV29yZENsb3VkV2lkZ2V0Q29tcG9uZW50KHByb3BzKSB7XHJcbiAgXHJcbiAgY29uc3QgZGF0YSA9IHByb3BzLmlucHV0RGF0YTtcclxuICBjb25zdCBmb250U2l6ZU1hcHBlciA9IHdvcmQgPT4gTWF0aC5sb2cyKHdvcmQudmFsdWUpICogNTtcclxuICBjb25zdCByb3RhdGUgPSB3b3JkID0+IChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyKSAqIDkwKTtcclxuICBjb25zdCBvbkNsaWNrSGFuZGxlID0gKHRleHQpID0+IHtcclxuICAgIFxyXG4gICAgKHByb3BzLm9uQ2xpY2tBY3Rpb24uY2FuRXhlY3V0ZSAmJiAhcHJvcHMub25DbGlja0FjdGlvbi5pc0V4ZWN1dGluZylcclxuICAgIFxyXG4gICAge1xyXG4gICAgICBwcm9wcy5jaG9zZW5Xb3JkLnNldFZhbHVlKHRleHQpO1xyXG4gICAgICBwcm9wcy5vbkNsaWNrQWN0aW9uLmV4ZWN1dGUoKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICByZXR1cm4gKFxyXG5cclxuICAgIDxXb3JkQ2xvdWQgZGF0YT17ZGF0YX0gZm9udFNpemVNYXBwZXI9e2ZvbnRTaXplTWFwcGVyfSByb3RhdGU9e3JvdGF0ZX0gb25Xb3JkQ2xpY2s9eyhldmVudCwgd29yZCkgPT4gb25DbGlja0hhbmRsZSh3b3JkLnRleHQpfSAvPlxyXG5cclxuICApO1xyXG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcclxuaW1wb3J0ICdjb3JlLWpzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBjcmVhdGVFbGVtZW50LCByZW5kZXIgfSBmcm9tIFwicmVhY3RcIjtcclxuXHJcblxyXG5cclxuaW1wb3J0IFdvcmRDbG91ZFdpZGdldENvbXBvbmVudCBmcm9tIFwiLi9jb21wb25lbnRzL1dvcmRDbG91ZFdpZGdldENvbXBvbmVudFwiO1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdvcmRDbG91ZFdpZGdldCBleHRlbmRzIENvbXBvbmVudCB7XHJcbiAgICBcclxuXHJcbiAgICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXh0UHJvcHMuZGF0YVNvdXJjZSAhPT0gdGhpcy5wcm9wcy5kYXRhU291cmNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuXHJcbiAgICAgICAgdmFyIGRhdGFUb1JlbmRlciA9IFtdO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLmRhdGFTb3VyY2Uuc3RhdHVzID09PSBcImF2YWlsYWJsZVwiICYmIHRoaXMucHJvcHMuZGF0YVNvdXJjZS5pdGVtcykge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIGkgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5wcm9wcy5kYXRhU291cmNlLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhVG9SZW5kZXIucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogdGhpcy5wcm9wcy50ZXh0QXR0cmliLmdldCgodGhpcy5wcm9wcy5kYXRhU291cmNlLml0ZW1zW2ldKSkudmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMucHJvcHMuaW50QXR0cmliLmdldCgodGhpcy5wcm9wcy5kYXRhU291cmNlLml0ZW1zW2ldKSkudmFsdWVcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiA8V29yZENsb3VkV2lkZ2V0Q29tcG9uZW50IGlucHV0RGF0YT17ZGF0YVRvUmVuZGVyfSBjaG9zZW5Xb3JkPXt0aGlzLnByb3BzLmNob3NlbldvcmR9IG9uQ2xpY2tBY3Rpb249e3RoaXMucHJvcHMub25DbGlja0FjdGlvbn0gLz47XHJcblxyXG4gICAgfVxyXG59XHJcbiJdLCJuYW1lcyI6WyJjaGVjayIsIml0IiwiTWF0aCIsIm1vZHVsZSIsImdsb2JhbFRoaXMiLCJ3aW5kb3ciLCJzZWxmIiwiZ2xvYmFsIiwiRnVuY3Rpb24iLCJleGVjIiwiZXJyb3IiLCJmYWlscyIsInJlcXVpcmUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsIiRwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiTkFTSE9STl9CVUciLCJjYWxsIiwiViIsImRlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwiYml0bWFwIiwidmFsdWUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsInRvU3RyaW5nIiwic2xpY2UiLCJjbGFzc29mIiwic3BsaXQiLCJ1bmRlZmluZWQiLCJUeXBlRXJyb3IiLCJJbmRleGVkT2JqZWN0IiwicmVxdWlyZU9iamVjdENvZXJjaWJsZSIsImFyZ3VtZW50IiwiaXNDYWxsYWJsZSIsImFGdW5jdGlvbiIsIm5hbWVzcGFjZSIsIm1ldGhvZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImdldEJ1aWx0SW4iLCJ1c2VyQWdlbnQiLCJwcm9jZXNzIiwiRGVubyIsInZlcnNpb25zIiwidmVyc2lvbiIsInY4IiwibWF0Y2giLCJWOF9WRVJTSU9OIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwic3ltYm9sIiwiU3ltYm9sIiwiU3RyaW5nIiwic2hhbSIsIk5BVElWRV9TWU1CT0wiLCJpdGVyYXRvciIsIlVTRV9TWU1CT0xfQVNfVUlEIiwiJFN5bWJvbCIsInRyeVRvU3RyaW5nIiwiYUNhbGxhYmxlIiwiUCIsImZ1bmMiLCJpc09iamVjdCIsImlucHV0IiwicHJlZiIsImZuIiwidmFsIiwidmFsdWVPZiIsImtleSIsInNldEdsb2JhbCIsIlNIQVJFRCIsInN0b3JlIiwicHVzaCIsIm1vZGUiLCJjb3B5cmlnaHQiLCJ0b09iamVjdCIsImhhc093blByb3BlcnR5IiwiaGFzT3duIiwiaWQiLCJwb3N0Zml4IiwicmFuZG9tIiwic2hhcmVkIiwidWlkIiwiV2VsbEtub3duU3ltYm9sc1N0b3JlIiwiY3JlYXRlV2VsbEtub3duU3ltYm9sIiwid2l0aG91dFNldHRlciIsIm5hbWUiLCJpc1N5bWJvbCIsImdldE1ldGhvZCIsIm9yZGluYXJ5VG9QcmltaXRpdmUiLCJ3ZWxsS25vd25TeW1ib2wiLCJUT19QUklNSVRJVkUiLCJleG90aWNUb1ByaW0iLCJyZXN1bHQiLCJ0b1ByaW1pdGl2ZSIsImRvY3VtZW50IiwiRVhJU1RTIiwiY3JlYXRlRWxlbWVudCIsIkRFU0NSSVBUT1JTIiwiYSIsInByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlIiwiY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yIiwidG9JbmRleGVkT2JqZWN0IiwidG9Qcm9wZXJ0eUtleSIsIklFOF9ET01fREVGSU5FIiwiJGdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIk8iLCJmIiwiYW5PYmplY3QiLCIkZGVmaW5lUHJvcGVydHkiLCJBdHRyaWJ1dGVzIiwiZGVmaW5lUHJvcGVydHlNb2R1bGUiLCJvYmplY3QiLCJmdW5jdGlvblRvU3RyaW5nIiwiaW5zcGVjdFNvdXJjZSIsIldlYWtNYXAiLCJ0ZXN0Iiwia2V5cyIsIk5BVElWRV9XRUFLX01BUCIsImNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSIsInNoYXJlZEtleSIsImhpZGRlbktleXMiLCJPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCIsInNldCIsImhhcyIsImVuZm9yY2UiLCJnZXR0ZXJGb3IiLCJUWVBFIiwic3RhdGUiLCJ0eXBlIiwid21nZXQiLCJ3bWhhcyIsIndtc2V0IiwibWV0YWRhdGEiLCJmYWNhZGUiLCJTVEFURSIsIkZ1bmN0aW9uUHJvdG90eXBlIiwicHJvdG90eXBlIiwiZ2V0RGVzY3JpcHRvciIsIlBST1BFUiIsInNvbWV0aGluZyIsIkNPTkZJR1VSQUJMRSIsIkludGVybmFsU3RhdGVNb2R1bGUiLCJDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSIsImdldEludGVybmFsU3RhdGUiLCJlbmZvcmNlSW50ZXJuYWxTdGF0ZSIsIlRFTVBMQVRFIiwib3B0aW9ucyIsInVuc2FmZSIsInNpbXBsZSIsIm5vVGFyZ2V0R2V0IiwicmVwbGFjZSIsInNvdXJjZSIsImpvaW4iLCJjZWlsIiwiZmxvb3IiLCJudW1iZXIiLCJ0b0ludGVnZXJPckluZmluaXR5IiwibWF4IiwibWluIiwiaW5kZXgiLCJpbnRlZ2VyIiwidG9MZW5ndGgiLCJvYmoiLCJ0b0Fic29sdXRlSW5kZXgiLCJsZW5ndGhPZkFycmF5TGlrZSIsImNyZWF0ZU1ldGhvZCIsIklTX0lOQ0xVREVTIiwiJHRoaXMiLCJlbCIsImZyb21JbmRleCIsImluY2x1ZGVzIiwiaW5kZXhPZiIsIm5hbWVzIiwiaSIsImludGVybmFsT2JqZWN0S2V5cyIsImVudW1CdWdLZXlzIiwiY29uY2F0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImdldE93blByb3BlcnR5TmFtZXNNb2R1bGUiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUiLCJvd25LZXlzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlIiwidGFyZ2V0IiwicmVwbGFjZW1lbnQiLCJpc0ZvcmNlZCIsImZlYXR1cmUiLCJkZXRlY3Rpb24iLCJkYXRhIiwibm9ybWFsaXplIiwiUE9MWUZJTEwiLCJOQVRJVkUiLCJzdHJpbmciLCJ0b0xvd2VyQ2FzZSIsInJlZGVmaW5lIiwiY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyIsIlRBUkdFVCIsIkdMT0JBTCIsIlNUQVRJQyIsInN0YXQiLCJGT1JDRUQiLCJ0YXJnZXRQcm9wZXJ0eSIsInNvdXJjZVByb3BlcnR5IiwiZm9yY2VkIiwiQXJyYXkiLCJpc0FycmF5IiwiVE9fU1RSSU5HX1RBRyIsIlRPX1NUUklOR19UQUdfU1VQUE9SVCIsImNsYXNzb2ZSYXciLCJDT1JSRUNUX0FSR1VNRU5UUyIsInRyeUdldCIsInRhZyIsImNhbGxlZSIsIm9iamVjdEtleXMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiUHJvcGVydGllcyIsImh0bWwiLCJkb2N1bWVudENyZWF0ZUVsZW1lbnQiLCJHVCIsIkxUIiwiUFJPVE9UWVBFIiwiU0NSSVBUIiwiSUVfUFJPVE8iLCJFbXB0eUNvbnN0cnVjdG9yIiwic2NyaXB0VGFnIiwiY29udGVudCIsIk51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgiLCJhY3RpdmVYRG9jdW1lbnQiLCJ3cml0ZSIsImNsb3NlIiwidGVtcCIsInBhcmVudFdpbmRvdyIsIk51bGxQcm90b09iamVjdFZpYUlGcmFtZSIsImlmcmFtZSIsIkpTIiwiaWZyYW1lRG9jdW1lbnQiLCJzdHlsZSIsImRpc3BsYXkiLCJhcHBlbmRDaGlsZCIsInNyYyIsImNvbnRlbnRXaW5kb3ciLCJvcGVuIiwiRiIsIk51bGxQcm90b09iamVjdCIsIkFjdGl2ZVhPYmplY3QiLCJkb21haW4iLCJjcmVhdGUiLCIkZ2V0T3duUHJvcGVydHlOYW1lcyIsIndpbmRvd05hbWVzIiwiZ2V0V2luZG93TmFtZXMiLCJwYXRoIiwid3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZSIsIk5BTUUiLCJUQUciLCJ0aGF0IiwiYiIsImMiLCJhcHBseSIsImVtcHR5IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3JSZWdFeHAiLCJJTkNPUlJFQ1RfVE9fU1RSSU5HIiwiaXNDb25zdHJ1Y3Rvck1vZGVybiIsImlzQ29uc3RydWN0b3JMZWdhY3kiLCJjYWxsZWQiLCJpc0NvbnN0cnVjdG9yIiwiU1BFQ0lFUyIsIm9yaWdpbmFsQXJyYXkiLCJDIiwiY29uc3RydWN0b3IiLCJhcnJheVNwZWNpZXNDb25zdHJ1Y3RvciIsImJpbmQiLCJhcnJheVNwZWNpZXNDcmVhdGUiLCJJU19NQVAiLCJJU19GSUxURVIiLCJJU19TT01FIiwiSVNfRVZFUlkiLCJJU19GSU5EX0lOREVYIiwiSVNfRklMVEVSX1JFSkVDVCIsIk5PX0hPTEVTIiwiY2FsbGJhY2tmbiIsInNwZWNpZmljQ3JlYXRlIiwiYm91bmRGdW5jdGlvbiIsImZvckVhY2giLCJtYXAiLCJmaWx0ZXIiLCJzb21lIiwiZXZlcnkiLCJmaW5kIiwiZmluZEluZGV4IiwiZmlsdGVyUmVqZWN0IiwiJCIsIiR0b1N0cmluZyIsIm5hdGl2ZU9iamVjdENyZWF0ZSIsImdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbCIsImRlZmluZVdlbGxLbm93blN5bWJvbCIsInNldFRvU3RyaW5nVGFnIiwiJGZvckVhY2giLCJISURERU4iLCJTWU1CT0wiLCJzZXRJbnRlcm5hbFN0YXRlIiwiT2JqZWN0UHJvdG90eXBlIiwiJHN0cmluZ2lmeSIsIm5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIm5hdGl2ZURlZmluZVByb3BlcnR5IiwibmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyIsIm5hdGl2ZVByb3BlcnR5SXNFbnVtZXJhYmxlIiwiQWxsU3ltYm9scyIsIk9iamVjdFByb3RvdHlwZVN5bWJvbHMiLCJTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5IiwiU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSIsIlFPYmplY3QiLCJVU0VfU0VUVEVSIiwiZmluZENoaWxkIiwic2V0U3ltYm9sRGVzY3JpcHRvciIsIk9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IiLCJ3cmFwIiwiZGVzY3JpcHRpb24iLCIkZGVmaW5lUHJvcGVydGllcyIsInByb3BlcnRpZXMiLCIkZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiJGNyZWF0ZSIsIklTX09CSkVDVF9QUk9UT1RZUEUiLCJzZXR0ZXIiLCJrZXlGb3IiLCJzeW0iLCJ1c2VTZXR0ZXIiLCJ1c2VTaW1wbGUiLCJGT1JDRURfSlNPTl9TVFJJTkdJRlkiLCJzdHJpbmdpZnkiLCJyZXBsYWNlciIsInNwYWNlIiwiYXJncyIsIiRyZXBsYWNlciIsIk5hdGl2ZVN5bWJvbCIsIkVtcHR5U3RyaW5nRGVzY3JpcHRpb25TdG9yZSIsIlN5bWJvbFdyYXBwZXIiLCJzeW1ib2xQcm90b3R5cGUiLCJzeW1ib2xUb1N0cmluZyIsIm5hdGl2ZVN5bWJvbCIsInJlZ2V4cCIsImRlc2MiLCJnZXRQcm90b3R5cGVPZiIsIkNPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiIsImFQb3NzaWJsZVByb3RvdHlwZSIsInNldFByb3RvdHlwZU9mIiwiQ09SUkVDVF9TRVRURVIiLCJwcm90byIsIl9fcHJvdG9fXyIsImNhdXNlIiwiSXRlcmF0b3JzIiwiSVRFUkFUT1IiLCJBcnJheVByb3RvdHlwZSIsImdldEl0ZXJhdG9yTWV0aG9kIiwidXNpbmdJdGVyYXRvciIsIml0ZXJhdG9yTWV0aG9kIiwia2luZCIsImlubmVyUmVzdWx0IiwiaW5uZXJFcnJvciIsImlzQXJyYXlJdGVyYXRvck1ldGhvZCIsImdldEl0ZXJhdG9yIiwiaXRlcmF0b3JDbG9zZSIsIlJlc3VsdCIsInN0b3BwZWQiLCJpdGVyYWJsZSIsInVuYm91bmRGdW5jdGlvbiIsIkFTX0VOVFJJRVMiLCJJU19JVEVSQVRPUiIsIklOVEVSUlVQVEVEIiwiaXRlckZuIiwibmV4dCIsInN0ZXAiLCJzdG9wIiwiY29uZGl0aW9uIiwiY2FsbEZuIiwiZG9uZSIsImluc3RhbGxFcnJvckNhdXNlIiwiaXRlcmF0ZSIsIiRBZ2dyZWdhdGVFcnJvciIsIkFnZ3JlZ2F0ZUVycm9yIiwiZXJyb3JzIiwibWVzc2FnZSIsIkVycm9yIiwiZXJyb3JzQXJyYXkiLCJVTlNDT1BBQkxFUyIsImFkZFRvVW5zY29wYWJsZXMiLCJhdCIsImxlbiIsInJlbGF0aXZlSW5kZXgiLCJrIiwicHJvcGVydHlLZXkiLCJNRVRIT0RfTkFNRSIsImFycmF5IiwiZm9vIiwiQm9vbGVhbiIsImNyZWF0ZVByb3BlcnR5IiwiYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCIsIklTX0NPTkNBVF9TUFJFQURBQkxFIiwiTUFYX1NBRkVfSU5URUdFUiIsIk1BWElNVU1fQUxMT1dFRF9JTkRFWF9FWENFRURFRCIsIklTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQiLCJTUEVDSUVTX1NVUFBPUlQiLCJpc0NvbmNhdFNwcmVhZGFibGUiLCJzcHJlYWRhYmxlIiwiYXJnIiwiQSIsIm4iLCJFIiwiY29weVdpdGhpbiIsInN0YXJ0IiwidG8iLCJmcm9tIiwiZW5kIiwiY291bnQiLCJpbmMiLCIkZXZlcnkiLCJhcnJheU1ldGhvZElzU3RyaWN0IiwiU1RSSUNUX01FVEhPRCIsImZpbGwiLCJhcmd1bWVudHNMZW5ndGgiLCJlbmRQb3MiLCIkZmlsdGVyIiwiSEFTX1NQRUNJRVNfU1VQUE9SVCIsIiRmaW5kIiwiRklORCIsIlNLSVBTX0hPTEVTIiwiJGZpbmRJbmRleCIsIkZJTkRfSU5ERVgiLCJmbGF0dGVuSW50b0FycmF5Iiwib3JpZ2luYWwiLCJzb3VyY2VMZW4iLCJkZXB0aCIsIm1hcHBlciIsInRoaXNBcmciLCJ0YXJnZXRJbmRleCIsInNvdXJjZUluZGV4IiwibWFwRm4iLCJlbGVtZW50IiwiZWxlbWVudExlbiIsImZsYXQiLCJkZXB0aEFyZyIsImZsYXRNYXAiLCJFTlRSSUVTIiwiY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyIsImFycmF5TGlrZSIsIklTX0NPTlNUUlVDVE9SIiwibWFwZm4iLCJtYXBwaW5nIiwiU0FGRV9DTE9TSU5HIiwiaXRlcmF0b3JXaXRoUmV0dXJuIiwiU0tJUF9DTE9TSU5HIiwiSVRFUkFUSU9OX1NVUFBPUlQiLCJjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24iLCJJTkNPUlJFQ1RfSVRFUkFUSU9OIiwiJGluY2x1ZGVzIiwiJGluZGV4T2YiLCJuYXRpdmVJbmRleE9mIiwiTkVHQVRJVkVfWkVSTyIsInNlYXJjaEVsZW1lbnQiLCJCVUdHWV9TQUZBUklfSVRFUkFUT1JTIiwiSXRlcmF0b3JQcm90b3R5cGUiLCJQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUiLCJhcnJheUl0ZXJhdG9yIiwiTkVXX0lURVJBVE9SX1BST1RPVFlQRSIsInJldHVyblRoaXMiLCJJdGVyYXRvckNvbnN0cnVjdG9yIiwiRnVuY3Rpb25OYW1lIiwiY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvciIsIkl0ZXJhdG9yc0NvcmUiLCJQUk9QRVJfRlVOQ1RJT05fTkFNRSIsIktFWVMiLCJWQUxVRVMiLCJJdGVyYWJsZSIsIkRFRkFVTFQiLCJJU19TRVQiLCJnZXRJdGVyYXRpb25NZXRob2QiLCJLSU5EIiwiZGVmYXVsdEl0ZXJhdG9yIiwiSXRlcmFibGVQcm90b3R5cGUiLCJ2YWx1ZXMiLCJlbnRyaWVzIiwiSU5DT1JSRUNUX1ZBTFVFU19OQU1FIiwibmF0aXZlSXRlcmF0b3IiLCJhbnlOYXRpdmVJdGVyYXRvciIsIkN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSIsIm1ldGhvZHMiLCJLRVkiLCJkZWZpbmVJdGVyYXRvciIsIkFSUkFZX0lURVJBVE9SIiwiaXRlcmF0ZWQiLCJBcmd1bWVudHMiLCJuYXRpdmVKb2luIiwiRVMzX1NUUklOR1MiLCJzZXBhcmF0b3IiLCIkbGFzdEluZGV4T2YiLCJsYXN0SW5kZXhPZiIsIiRtYXAiLCJJU05UX0dFTkVSSUMiLCJvZiIsIklTX1JJR0hUIiwibWVtbyIsImxlZnQiLCJyaWdodCIsIiRyZWR1Y2UiLCJDSFJPTUVfVkVSU0lPTiIsIklTX05PREUiLCJDSFJPTUVfQlVHIiwicmVkdWNlIiwiJHJlZHVjZVJpZ2h0IiwicmVkdWNlUmlnaHQiLCJuYXRpdmVSZXZlcnNlIiwicmV2ZXJzZSIsIm5hdGl2ZVNsaWNlIiwiZmluIiwiQ29uc3RydWN0b3IiLCIkc29tZSIsIm1lcmdlU29ydCIsImNvbXBhcmVmbiIsIm1pZGRsZSIsImluc2VydGlvblNvcnQiLCJtZXJnZSIsImoiLCJsbGVuZ3RoIiwicmxlbmd0aCIsImxpbmRleCIsInJpbmRleCIsImZpcmVmb3giLCJVQSIsIndlYmtpdCIsImludGVybmFsU29ydCIsIkZGIiwiSUVfT1JfRURHRSIsIlY4IiwiV0VCS0lUIiwibmF0aXZlU29ydCIsInNvcnQiLCJGQUlMU19PTl9VTkRFRklORUQiLCJGQUlMU19PTl9OVUxMIiwiU1RBQkxFX1NPUlQiLCJjb2RlIiwiY2hyIiwiZnJvbUNoYXJDb2RlIiwidiIsImNoYXJBdCIsImdldFNvcnRDb21wYXJlIiwieCIsInkiLCJpdGVtcyIsImFycmF5TGVuZ3RoIiwiaXRlbXNMZW5ndGgiLCJDT05TVFJVQ1RPUl9OQU1FIiwic2V0U3BlY2llcyIsIk1BWElNVU1fQUxMT1dFRF9MRU5HVEhfRVhDRUVERUQiLCJzcGxpY2UiLCJkZWxldGVDb3VudCIsImFjdHVhbFN0YXJ0IiwiaW5zZXJ0Q291bnQiLCJhY3R1YWxEZWxldGVDb3VudCIsIkFycmF5QnVmZmVyIiwiRGF0YVZpZXciLCJSYW5nZUVycm9yIiwiYWJzIiwicG93IiwibG9nIiwiTE4yIiwicGFjayIsIm1hbnRpc3NhTGVuZ3RoIiwiYnl0ZXMiLCJidWZmZXIiLCJleHBvbmVudExlbmd0aCIsImVNYXgiLCJlQmlhcyIsInJ0Iiwic2lnbiIsImV4cG9uZW50IiwibWFudGlzc2EiLCJJbmZpbml0eSIsInVucGFjayIsIm5CaXRzIiwiTmFOIiwiTkFUSVZFX0FSUkFZX0JVRkZFUiIsInJlZGVmaW5lQWxsIiwiYW5JbnN0YW5jZSIsInRvSW5kZXgiLCJJRUVFNzU0IiwiYXJyYXlGaWxsIiwiQVJSQVlfQlVGRkVSIiwiREFUQV9WSUVXIiwiV1JPTkdfTEVOR1RIIiwiV1JPTkdfSU5ERVgiLCJOYXRpdmVBcnJheUJ1ZmZlciIsIiRBcnJheUJ1ZmZlciIsIiREYXRhVmlldyIsIiREYXRhVmlld1Byb3RvdHlwZSIsInBhY2tJRUVFNzU0IiwidW5wYWNrSUVFRTc1NCIsInBhY2tJbnQ4IiwicGFja0ludDE2IiwicGFja0ludDMyIiwidW5wYWNrSW50MzIiLCJwYWNrRmxvYXQzMiIsInBhY2tGbG9hdDY0IiwiYWRkR2V0dGVyIiwidmlldyIsImlzTGl0dGxlRW5kaWFuIiwiaW50SW5kZXgiLCJieXRlTGVuZ3RoIiwiYnl0ZU9mZnNldCIsImNvbnZlcnNpb24iLCJidWZmZXJMZW5ndGgiLCJvZmZzZXQiLCJnZXRJbnQ4IiwiZ2V0VWludDgiLCJnZXRJbnQxNiIsImdldFVpbnQxNiIsImdldEludDMyIiwiZ2V0VWludDMyIiwiZ2V0RmxvYXQzMiIsImdldEZsb2F0NjQiLCJzZXRJbnQ4Iiwic2V0VWludDgiLCJzZXRJbnQxNiIsInNldFVpbnQxNiIsInNldEludDMyIiwic2V0VWludDMyIiwic2V0RmxvYXQzMiIsInNldEZsb2F0NjQiLCJJTkNPUlJFQ1RfQVJSQVlfQlVGRkVSX05BTUUiLCJBcnJheUJ1ZmZlclByb3RvdHlwZSIsInRlc3RWaWV3IiwiJHNldEludDgiLCJhcnJheUJ1ZmZlck1vZHVsZSIsIkludDhBcnJheSIsIkludDhBcnJheVByb3RvdHlwZSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUiLCJUeXBlZEFycmF5IiwiVHlwZWRBcnJheVByb3RvdHlwZSIsImlzUHJvdG90eXBlT2YiLCJUWVBFRF9BUlJBWV9UQUciLCJUWVBFRF9BUlJBWV9DT05TVFJVQ1RPUiIsIk5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MiLCJvcGVyYSIsIlRZUEVEX0FSUkFZX1RBR19SRVFJUkVEIiwiUHJvdG90eXBlIiwiVHlwZWRBcnJheUNvbnN0cnVjdG9yc0xpc3QiLCJVaW50OEFycmF5IiwiSW50MTZBcnJheSIsIlVpbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIlVpbnQzMkFycmF5IiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiQmlnSW50QXJyYXlDb25zdHJ1Y3RvcnNMaXN0IiwiQmlnSW50NjRBcnJheSIsIkJpZ1VpbnQ2NEFycmF5IiwiaXNWaWV3Iiwia2xhc3MiLCJpc1R5cGVkQXJyYXkiLCJhVHlwZWRBcnJheSIsImFUeXBlZEFycmF5Q29uc3RydWN0b3IiLCJleHBvcnRUeXBlZEFycmF5TWV0aG9kIiwicHJvcGVydHkiLCJBUlJBWSIsIlR5cGVkQXJyYXlDb25zdHJ1Y3RvciIsImV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2QiLCJBcnJheUJ1ZmZlclZpZXdDb3JlIiwiYUNvbnN0cnVjdG9yIiwiZGVmYXVsdENvbnN0cnVjdG9yIiwiUyIsIkFycmF5QnVmZmVyTW9kdWxlIiwic3BlY2llc0NvbnN0cnVjdG9yIiwibmF0aXZlQXJyYXlCdWZmZXJTbGljZSIsIklOQ09SUkVDVF9TTElDRSIsImZpcnN0Iiwidmlld1NvdXJjZSIsInZpZXdUYXJnZXQiLCJEYXRlIiwiZ2V0WWVhciIsImdldEZ1bGxZZWFyIiwibm93IiwiZ2V0VGltZSIsInNldEZ1bGxZZWFyIiwic2V0WWVhciIsInllYXIiLCJ5aSIsInl5eXkiLCJ0b0dNVFN0cmluZyIsInRvVVRDU3RyaW5nIiwicmVwZWF0Iiwic3RyIiwiSVNfRU5EIiwibWF4TGVuZ3RoIiwiZmlsbFN0cmluZyIsImludE1heExlbmd0aCIsInN0cmluZ0xlbmd0aCIsImZpbGxTdHIiLCJmaWxsTGVuIiwic3RyaW5nRmlsbGVyIiwicGFkU3RhcnQiLCJEYXRlUHJvdG90eXBlIiwibmF0aXZlRGF0ZVRvSVNPU3RyaW5nIiwidG9JU09TdHJpbmciLCJpc0Zpbml0ZSIsImRhdGUiLCJnZXRVVENGdWxsWWVhciIsIm1pbGxpc2Vjb25kcyIsImdldFVUQ01pbGxpc2Vjb25kcyIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImdldFVUQ0hvdXJzIiwiZ2V0VVRDTWludXRlcyIsImdldFVUQ1NlY29uZHMiLCJ0b0pTT04iLCJwdiIsImhpbnQiLCJkYXRlVG9QcmltaXRpdmUiLCJJTlZBTElEX0RBVEUiLCJUT19TVFJJTkciLCJuYXRpdmVEYXRlVG9TdHJpbmciLCJyYXciLCJoZXgiLCJlc2NhcGUiLCJjaGFyQ29kZUF0IiwidG9VcHBlckNhc2UiLCJmYWN0b3JpZXMiLCJhcmdzTGVuZ3RoIiwibGlzdCIsInBhcnRBcmdzIiwiYm91bmQiLCJIQVNfSU5TVEFOQ0UiLCJGVU5DVElPTl9OQU1FX0VYSVNUUyIsIkZ1bmN0aW9uUHJvdG90eXBlVG9TdHJpbmciLCJuYW1lUkUiLCJyZSIsImxvdyIsImhpIiwiZml4IiwicHJldiIsIkpTT04iLCJpc0V4dGVuc2libGUiLCJwcmV2ZW50RXh0ZW5zaW9ucyIsImdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZSIsIkZSRUVaSU5HIiwiUkVRVUlSRUQiLCJNRVRBREFUQSIsInNldE1ldGFkYXRhIiwib2JqZWN0SUQiLCJ3ZWFrRGF0YSIsImZhc3RLZXkiLCJnZXRXZWFrRGF0YSIsIm9uRnJlZXplIiwiZW5hYmxlIiwibWV0YSIsImR1bW15IiwiV3JhcHBlciIsIk5ld1RhcmdldCIsIk5ld1RhcmdldFByb3RvdHlwZSIsIkludGVybmFsTWV0YWRhdGFNb2R1bGUiLCJpbmhlcml0SWZSZXF1aXJlZCIsIndyYXBwZXIiLCJjb21tb24iLCJJU19XRUFLIiwiQURERVIiLCJOYXRpdmVDb25zdHJ1Y3RvciIsIk5hdGl2ZVByb3RvdHlwZSIsImV4cG9ydGVkIiwiZml4TWV0aG9kIiwibmF0aXZlTWV0aG9kIiwiYWRkIiwiUkVQTEFDRSIsImdldENvbnN0cnVjdG9yIiwiaW5zdGFuY2UiLCJIQVNOVF9DSEFJTklORyIsIlRIUk9XU19PTl9QUklNSVRJVkVTIiwiQUNDRVBUX0lURVJBQkxFUyIsIkJVR0dZX1pFUk8iLCIkaW5zdGFuY2UiLCJjbGVhciIsInNldFN0cm9uZyIsImludGVybmFsU3RhdGVHZXR0ZXJGb3IiLCJsYXN0Iiwic2l6ZSIsImRlZmluZSIsImVudHJ5IiwiZ2V0RW50cnkiLCJwcmV2aW91cyIsInJlbW92ZWQiLCJJVEVSQVRPUl9OQU1FIiwiZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUiLCJnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUiLCJjb2xsZWN0aW9uIiwiY29sbGVjdGlvblN0cm9uZyIsImluaXQiLCJNYXAiLCJsb2cxcCIsIiRhY29zaCIsImFjb3NoIiwic3FydCIsIk51bWJlciIsIk1BWF9WQUxVRSIsIiRhc2luaCIsImFzaW5oIiwiJGF0YW5oIiwiYXRhbmgiLCJjYnJ0IiwiTE9HMkUiLCJjbHozMiIsIiRleHBtMSIsImV4cG0xIiwiZXhwIiwiJGNvc2giLCJjb3NoIiwidCIsIkVQU0lMT04iLCJFUFNJTE9OMzIiLCJNQVgzMiIsIk1JTjMyIiwicm91bmRUaWVzVG9FdmVuIiwiZnJvdW5kIiwiJGFicyIsIiRzaWduIiwiJGh5cG90IiwiaHlwb3QiLCJCVUdHWSIsInZhbHVlMSIsInZhbHVlMiIsInN1bSIsImFMZW4iLCJsYXJnIiwiZGl2IiwiJGltdWwiLCJpbXVsIiwiVUlOVDE2IiwieG4iLCJ5biIsInhsIiwieWwiLCJMT0cxMEUiLCJsb2cxMCIsImxvZzIiLCJzaW5oIiwidGFuaCIsInRydW5jIiwid2hpdGVzcGFjZXMiLCJ3aGl0ZXNwYWNlIiwibHRyaW0iLCJSZWdFeHAiLCJydHJpbSIsInRyaW0iLCJ0aGlzTnVtYmVyVmFsdWUiLCJOVU1CRVIiLCJOYXRpdmVOdW1iZXIiLCJOdW1iZXJQcm90b3R5cGUiLCJ0b051bWVyaWMiLCJwcmltVmFsdWUiLCJ0b051bWJlciIsInRoaXJkIiwicmFkaXgiLCJtYXhDb2RlIiwiZGlnaXRzIiwicGFyc2VJbnQiLCJOdW1iZXJXcmFwcGVyIiwiZ2xvYmFsSXNGaW5pdGUiLCJudW1iZXJJc0Zpbml0ZSIsImlzSW50ZWdlciIsImlzSW50ZWdyYWxOdW1iZXIiLCJpc05hTiIsImlzU2FmZUludGVnZXIiLCJNSU5fU0FGRV9JTlRFR0VSIiwiJHBhcnNlRmxvYXQiLCJwYXJzZUZsb2F0IiwidHJpbW1lZFN0cmluZyIsIiRwYXJzZUludCIsIm5hdGl2ZVRvRml4ZWQiLCJ0b0ZpeGVkIiwiYWNjIiwieDIiLCJtdWx0aXBseSIsImMyIiwiZGl2aWRlIiwiZGF0YVRvU3RyaW5nIiwicyIsImZyYWN0aW9uRGlnaXRzIiwiZnJhY3REaWdpdHMiLCJlIiwieiIsIm5hdGl2ZVRvUHJlY2lzaW9uIiwidG9QcmVjaXNpb24iLCJwcmVjaXNpb24iLCIkYXNzaWduIiwiYXNzaWduIiwiQiIsImFscGhhYmV0IiwiVCIsIl9fZGVmaW5lU2V0dGVyX18iLCJfX2RlZmluZUdldHRlcl9fIiwiZ2V0dGVyIiwib2JqZWN0RGVmaW5lUHJvcGVydHlNb2RpbGUiLCJUT19FTlRSSUVTIiwiJGVudHJpZXMiLCIkZnJlZXplIiwiZnJlZXplIiwiRkFJTFNfT05fUFJJTUlUSVZFUyIsImZyb21FbnRyaWVzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsIm5hdGl2ZUdldFByb3RvdHlwZU9mIiwiaXMiLCIkaXNFeHRlbnNpYmxlIiwiJGlzRnJvemVuIiwiaXNGcm96ZW4iLCIkaXNTZWFsZWQiLCJpc1NlYWxlZCIsIm5hdGl2ZUtleXMiLCJfX2xvb2t1cEdldHRlcl9fIiwiX19sb29rdXBTZXR0ZXJfXyIsIiRwcmV2ZW50RXh0ZW5zaW9ucyIsIiRzZWFsIiwic2VhbCIsIiR2YWx1ZXMiLCJQcm9taXNlIiwiSVNfSU9TIiwic2V0SW1tZWRpYXRlIiwiY2xlYXJJbW1lZGlhdGUiLCJNZXNzYWdlQ2hhbm5lbCIsIkRpc3BhdGNoIiwiY291bnRlciIsInF1ZXVlIiwiT05SRUFEWVNUQVRFQ0hBTkdFIiwibG9jYXRpb24iLCJkZWZlciIsImNoYW5uZWwiLCJwb3J0IiwicnVuIiwicnVubmVyIiwibGlzdGVuZXIiLCJldmVudCIsInBvc3QiLCJwb3N0TWVzc2FnZSIsInByb3RvY29sIiwiaG9zdCIsIm5leHRUaWNrIiwicG9ydDIiLCJwb3J0MSIsIm9ubWVzc2FnZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJpbXBvcnRTY3JpcHRzIiwicmVtb3ZlQ2hpbGQiLCJzZXRUaW1lb3V0IiwiUGViYmxlIiwibWFjcm90YXNrIiwiSVNfSU9TX1BFQkJMRSIsIklTX1dFQk9TX1dFQktJVCIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJXZWJLaXRNdXRhdGlvbk9ic2VydmVyIiwicXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yIiwicXVldWVNaWNyb3Rhc2siLCJmbHVzaCIsImhlYWQiLCJub3RpZnkiLCJ0b2dnbGUiLCJub2RlIiwicHJvbWlzZSIsInRoZW4iLCJwYXJlbnQiLCJleGl0IiwiZW50ZXIiLCJjcmVhdGVUZXh0Tm9kZSIsIm9ic2VydmUiLCJjaGFyYWN0ZXJEYXRhIiwicmVzb2x2ZSIsInRhc2siLCJQcm9taXNlQ2FwYWJpbGl0eSIsInJlamVjdCIsIiQkcmVzb2x2ZSIsIiQkcmVqZWN0IiwibmV3UHJvbWlzZUNhcGFiaWxpdHkiLCJwcm9taXNlQ2FwYWJpbGl0eSIsImNvbnNvbGUiLCJOYXRpdmVQcm9taXNlIiwibWljcm90YXNrIiwicHJvbWlzZVJlc29sdmUiLCJob3N0UmVwb3J0RXJyb3JzIiwibmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUiLCJwZXJmb3JtIiwiSVNfQlJPV1NFUiIsIlBST01JU0UiLCJnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSIsIk5hdGl2ZVByb21pc2VQcm90b3R5cGUiLCJQcm9taXNlQ29uc3RydWN0b3IiLCJQcm9taXNlQ29uc3RydWN0b3JQcm90b3R5cGUiLCJuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkiLCJESVNQQVRDSF9FVkVOVCIsImNyZWF0ZUV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsIk5BVElWRV9SRUpFQ1RJT05fRVZFTlQiLCJQcm9taXNlUmVqZWN0aW9uRXZlbnQiLCJVTkhBTkRMRURfUkVKRUNUSU9OIiwiUkVKRUNUSU9OX0hBTkRMRUQiLCJQRU5ESU5HIiwiRlVMRklMTEVEIiwiUkVKRUNURUQiLCJIQU5ETEVEIiwiVU5IQU5ETEVEIiwiU1VCQ0xBU1NJTkciLCJJbnRlcm5hbCIsIk93blByb21pc2VDYXBhYmlsaXR5IiwiUHJvbWlzZVdyYXBwZXIiLCJuYXRpdmVUaGVuIiwiUFJPTUlTRV9DT05TVFJVQ1RPUl9TT1VSQ0UiLCJHTE9CQUxfQ09SRV9KU19QUk9NSVNFIiwiRmFrZVByb21pc2UiLCJhbGwiLCJpc1RoZW5hYmxlIiwiaXNSZWplY3QiLCJub3RpZmllZCIsImNoYWluIiwicmVhY3Rpb25zIiwib2siLCJyZWFjdGlvbiIsImhhbmRsZXIiLCJmYWlsIiwiZXhpdGVkIiwicmVqZWN0aW9uIiwib25IYW5kbGVVbmhhbmRsZWQiLCJvblVuaGFuZGxlZCIsInJlYXNvbiIsImluaXRFdmVudCIsIklTX1VOSEFORExFRCIsImlzVW5oYW5kbGVkIiwiZW1pdCIsInVud3JhcCIsImludGVybmFsUmVqZWN0IiwiaW50ZXJuYWxSZXNvbHZlIiwiZXhlY3V0b3IiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJyIiwiY2FwYWJpbGl0eSIsIiRwcm9taXNlUmVzb2x2ZSIsInJlbWFpbmluZyIsImFscmVhZHlDYWxsZWQiLCJyYWNlIiwiYWxsU2V0dGxlZCIsInN0YXR1cyIsIlBST01JU0VfQU5ZX0VSUk9SIiwiYW55IiwiYWxyZWFkeVJlc29sdmVkIiwiYWxyZWFkeVJlamVjdGVkIiwiTk9OX0dFTkVSSUMiLCJyZWFsIiwib25GaW5hbGx5IiwiaXNGdW5jdGlvbiIsIm5hdGl2ZUFwcGx5IiwiZnVuY3Rpb25BcHBseSIsIk9QVElPTkFMX0FSR1VNRU5UU19MSVNUIiwidGhpc0FyZ3VtZW50IiwiYXJndW1lbnRzTGlzdCIsIm5hdGl2ZUNvbnN0cnVjdCIsIk5FV19UQVJHRVRfQlVHIiwiQVJHU19CVUciLCJUYXJnZXQiLCJuZXdUYXJnZXQiLCIkYXJncyIsIkVSUk9SX0lOU1RFQURfT0ZfRkFMU0UiLCJSZWZsZWN0IiwiYXR0cmlidXRlcyIsImRlbGV0ZVByb3BlcnR5IiwiaXNEYXRhRGVzY3JpcHRvciIsInJlY2VpdmVyIiwib2JqZWN0R2V0UHJvdG90eXBlT2YiLCJvYmplY3RJc0V4dGVuc2libGUiLCJvYmplY3RQcmV2ZW50RXh0ZW5zaW9ucyIsIm93bkRlc2NyaXB0b3IiLCJleGlzdGluZ0Rlc2NyaXB0b3IiLCJNU19FREdFX0JVRyIsIm9iamVjdFNldFByb3RvdHlwZU9mIiwiTUFUQ0giLCJpc1JlZ0V4cCIsImlnbm9yZUNhc2UiLCJtdWx0aWxpbmUiLCJkb3RBbGwiLCJ1bmljb2RlIiwic3RpY2t5IiwiJFJlZ0V4cCIsImxhc3RJbmRleCIsImZsYWdzIiwiZ3JvdXBzIiwiZ2V0RmxhZ3MiLCJzdGlja3lIZWxwZXJzIiwiVU5TVVBQT1JURURfRE9UX0FMTCIsIlVOU1VQUE9SVEVEX05DRyIsIk5hdGl2ZVJlZ0V4cCIsIlJlZ0V4cFByb3RvdHlwZSIsIklTX05DRyIsInJlMSIsInJlMiIsIkNPUlJFQ1RfTkVXIiwiVU5TVVBQT1JURURfWSIsIkJBU0VfRk9SQ0VEIiwiaGFuZGxlRG90QWxsIiwiYnJhY2tldHMiLCJoYW5kbGVOQ0ciLCJuYW1lZCIsIm5jZyIsImdyb3VwaWQiLCJncm91cG5hbWUiLCJTeW50YXhFcnJvciIsIlJlZ0V4cFdyYXBwZXIiLCJwYXR0ZXJuIiwidGhpc0lzUmVnRXhwIiwicGF0dGVybklzUmVnRXhwIiwiZmxhZ3NBcmVVbmRlZmluZWQiLCJyYXdQYXR0ZXJuIiwicmF3RmxhZ3MiLCJoYW5kbGVkIiwicHJveHkiLCJyZWdleHBGbGFncyIsIm5hdGl2ZUV4ZWMiLCJuYXRpdmVSZXBsYWNlIiwicGF0Y2hlZEV4ZWMiLCJVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkciLCJCUk9LRU5fQ0FSRVQiLCJOUENHX0lOQ0xVREVEIiwiUEFUQ0giLCJyZUNvcHkiLCJncm91cCIsImNoYXJzQWRkZWQiLCJzdHJDb3B5Iiwib2JqZWN0RGVmaW5lUHJvcGVydHlNb2R1bGUiLCJyZWdFeHBGbGFncyIsIkRFTEVHQVRFU19UT19FWEVDIiwiZXhlY0NhbGxlZCIsIm5hdGl2ZVRlc3QiLCJuYXRpdmVUb1N0cmluZyIsIk5PVF9HRU5FUklDIiwiSU5DT1JSRUNUX05BTUUiLCJSIiwicCIsInJmIiwiU2V0IiwiQ09OVkVSVF9UT19TVFJJTkciLCJwb3MiLCJwb3NpdGlvbiIsInNlY29uZCIsImNvZGVBdCIsImNvZGVQb2ludEF0IiwiZXJyb3IxIiwiZXJyb3IyIiwibm90QVJlZ0V4cCIsImNvcnJlY3RJc1JlZ0V4cExvZ2ljIiwiJGVuZHNXaXRoIiwiZW5kc1dpdGgiLCJDT1JSRUNUX0lTX1JFR0VYUF9MT0dJQyIsIk1ETl9QT0xZRklMTF9CVUciLCJzZWFyY2hTdHJpbmciLCJlbmRQb3NpdGlvbiIsInNlYXJjaCIsIiRmcm9tQ29kZVBvaW50IiwiZnJvbUNvZGVQb2ludCIsIklOQ09SUkVDVF9MRU5HVEgiLCJlbGVtZW50cyIsIlNUUklOR19JVEVSQVRPUiIsInBvaW50IiwicmVnZXhwRXhlYyIsIlNIQU0iLCJERUxFR0FURVNfVE9fU1lNQk9MIiwibmF0aXZlUmVnRXhwTWV0aG9kIiwiYXJnMiIsImZvcmNlU3RyaW5nTWV0aG9kIiwiJGV4ZWMiLCJmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyIsImFkdmFuY2VTdHJpbmdJbmRleCIsInJlZ0V4cEV4ZWMiLCJuYXRpdmVNYXRjaCIsIm1heWJlQ2FsbE5hdGl2ZSIsIm1hdGNoZXIiLCJyeCIsInJlcyIsImZ1bGxVbmljb2RlIiwibWF0Y2hTdHIiLCJnZXRSZWdFeHBGbGFncyIsIklTX1BVUkUiLCJNQVRDSF9BTEwiLCJSRUdFWFBfU1RSSU5HIiwiUkVHRVhQX1NUUklOR19JVEVSQVRPUiIsIm5hdGl2ZU1hdGNoQWxsIiwibWF0Y2hBbGwiLCJXT1JLU19XSVRIX05PTl9HTE9CQUxfUkVHRVgiLCIkUmVnRXhwU3RyaW5nSXRlcmF0b3IiLCJSZWdFeHBTdHJpbmdJdGVyYXRvciIsIiRtYXRjaEFsbCIsImZsYWdzVmFsdWUiLCIkcGFkRW5kIiwiV0VCS0lUX0JVRyIsInBhZEVuZCIsIiRwYWRTdGFydCIsInRlbXBsYXRlIiwicmF3VGVtcGxhdGUiLCJsaXRlcmFsU2VnbWVudHMiLCJTVUJTVElUVVRJT05fU1lNQk9MUyIsIlNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEIiwibWF0Y2hlZCIsImNhcHR1cmVzIiwibmFtZWRDYXB0dXJlcyIsInRhaWxQb3MiLCJtIiwic3ltYm9scyIsImNoIiwiY2FwdHVyZSIsImdldFN1YnN0aXR1dGlvbiIsIm1heWJlVG9TdHJpbmciLCJSRVBMQUNFX0tFRVBTXyQwIiwiUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUiLCJSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyIsIl8iLCJVTlNBRkVfU1VCU1RJVFVURSIsInNlYXJjaFZhbHVlIiwicmVwbGFjZVZhbHVlIiwiZnVuY3Rpb25hbFJlcGxhY2UiLCJyZXN1bHRzIiwiYWNjdW11bGF0ZWRSZXN1bHQiLCJuZXh0U291cmNlUG9zaXRpb24iLCJyZXBsYWNlckFyZ3MiLCJzdHJpbmdJbmRleE9mIiwicmVwbGFjZUFsbCIsIklTX1JFR19FWFAiLCJzZWFyY2hMZW5ndGgiLCJhZHZhbmNlQnkiLCJlbmRPZkxhc3RNYXRjaCIsInNhbWVWYWx1ZSIsIlNFQVJDSCIsIm5hdGl2ZVNlYXJjaCIsInNlYXJjaGVyIiwicHJldmlvdXNMYXN0SW5kZXgiLCJjYWxsUmVnRXhwRXhlYyIsImFycmF5UHVzaCIsIk1BWF9VSU5UMzIiLCJTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMiLCJvcmlnaW5hbEV4ZWMiLCJTUExJVCIsIm5hdGl2ZVNwbGl0IiwiaW50ZXJuYWxTcGxpdCIsImxpbWl0IiwibGltIiwib3V0cHV0IiwibGFzdExhc3RJbmRleCIsInNlcGFyYXRvckNvcHkiLCJsYXN0TGVuZ3RoIiwic3BsaXR0ZXIiLCJ1bmljb2RlTWF0Y2hpbmciLCJxIiwiJHN0YXJ0c1dpdGgiLCJzdGFydHNXaXRoIiwic3Vic3RyIiwiaW50U3RhcnQiLCJpbnRMZW5ndGgiLCJpbnRFbmQiLCJub24iLCIkdHJpbSIsImZvcmNlZFN0cmluZ1RyaW1NZXRob2QiLCIkdHJpbUVuZCIsInRyaW1FbmQiLCJ0cmltUmlnaHQiLCIkdHJpbVN0YXJ0IiwidHJpbVN0YXJ0IiwidHJpbUxlZnQiLCJxdW90IiwiYXR0cmlidXRlIiwicDEiLCJjcmVhdGVIVE1MIiwiZm9yY2VkU3RyaW5nSFRNTE1ldGhvZCIsImFuY2hvciIsImJpZyIsImJsaW5rIiwiYm9sZCIsImZpeGVkIiwiZm9udGNvbG9yIiwiY29sb3IiLCJmb250c2l6ZSIsIml0YWxpY3MiLCJsaW5rIiwidXJsIiwic21hbGwiLCJzdHJpa2UiLCJzdWIiLCJzdXAiLCJ0b1Bvc2l0aXZlSW50ZWdlciIsIkJZVEVTIiwiVFlQRURfQVJSQVlTX0NPTlNUUlVDVE9SU19SRVFVSVJFU19XUkFQUEVSUyIsInRvT2Zmc2V0IiwidHlwZWRBcnJheUZyb20iLCJyb3VuZCIsIkJZVEVTX1BFUl9FTEVNRU5UIiwiZnJvbUxpc3QiLCJpc0FycmF5QnVmZmVyIiwiaXNUeXBlZEFycmF5SW5kZXgiLCJ3cmFwcGVkR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwid3JhcHBlZERlZmluZVByb3BlcnR5IiwiQ0xBTVBFRCIsIkdFVFRFUiIsIlNFVFRFUiIsIk5hdGl2ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvciIsIlR5cGVkQXJyYXlDb25zdHJ1Y3RvclByb3RvdHlwZSIsImFkZEVsZW1lbnQiLCIkbGVuZ3RoIiwiJGxlbiIsInR5cGVkQXJyYXlPZmZzZXQiLCJjcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IiLCIkY29weVdpdGhpbiIsIiRmaWxsIiwiYXJyYXlGcm9tQ29uc3RydWN0b3JBbmRMaXN0IiwidHlwZWRBcnJheVNwZWNpZXNDb25zdHJ1Y3RvciIsImZyb21TcGVjaWVzQW5kTGlzdCIsInByZWRpY2F0ZSIsIkFycmF5SXRlcmF0b3JzIiwiYXJyYXlWYWx1ZXMiLCJhcnJheUtleXMiLCJhcnJheUVudHJpZXMiLCJuYXRpdmVUeXBlZEFycmF5SXRlcmF0b3IiLCJQUk9QRVJfQVJSQVlfVkFMVUVTX05BTUUiLCJ0eXBlZEFycmF5VmFsdWVzIiwiJGpvaW4iLCIkc2xpY2UiLCJBQ0NFUFRfSU5DT1JSRUNUX0FSR1VNRU5UUyIsImV4cGVjdGVkIiwibW9kIiwic3ViYXJyYXkiLCJiZWdpbiIsImJlZ2luSW5kZXgiLCIkdG9Mb2NhbGVTdHJpbmciLCJ0b0xvY2FsZVN0cmluZyIsIlRPX0xPQ0FMRV9TVFJJTkdfQlVHIiwiVWludDhBcnJheVByb3RvdHlwZSIsImFycmF5VG9TdHJpbmciLCJhcnJheUpvaW4iLCJJU19OT1RfQVJSQVlfTUVUSE9EIiwiaGV4MiIsImhleDQiLCJ1bmVzY2FwZSIsIkFycmF5SXRlcmF0aW9uTW9kdWxlIiwidW5jYXVnaHRGcm96ZW5TdG9yZSIsImZyb3plbiIsIlVuY2F1Z2h0RnJvemVuU3RvcmUiLCJmaW5kVW5jYXVnaHRGcm96ZW4iLCJjb2xsZWN0aW9uV2VhayIsImVuZm9yY2VJdGVybmFsU3RhdGUiLCJJU19JRTExIiwiSW50ZXJuYWxXZWFrTWFwIiwiJFdlYWtNYXAiLCJXZWFrTWFwUHJvdG90eXBlIiwibmF0aXZlRGVsZXRlIiwibmF0aXZlSGFzIiwibmF0aXZlR2V0IiwibmF0aXZlU2V0IiwiV2Vha1NldCIsIlVTRV9GVU5DVElPTl9DT05TVFJVQ1RPUiIsIkFTWU5DX0lURVJBVE9SIiwiQXN5bmNJdGVyYXRvciIsIlBhc3NlZEFzeW5jSXRlcmF0b3JQcm90b3R5cGUiLCJBc3luY0l0ZXJhdG9yUHJvdG90eXBlIiwiYXN5bmNGcm9tU3luY0l0ZXJhdG9yQ29udGludWF0aW9uIiwiQXN5bmNGcm9tU3luY0l0ZXJhdG9yIiwiaGFzQXJnIiwiJHJldHVybiIsIiR0aHJvdyIsIkNPTlNUUlVDVE9SIiwiSVNfVE9fQVJSQVkiLCJJU19GT1JfRUFDSCIsIk1BUFBJTkciLCJjbG9zZUl0ZXJhdGlvbiIsInJldHVybk1ldGhvZCIsIm9uRXJyb3IiLCJsb29wIiwidG9BcnJheSIsImdldEFzeW5jSXRlcmF0b3IiLCJnZXRWaXJ0dWFsIiwiZnJvbUFzeW5jIiwiYXN5bmNJdGVtcyIsInVzaW5nQXN5bmNJdGVyYXRvciIsInVzaW5nU3luY0l0ZXJhdG9yIiwiJGZpbHRlclJlamVjdCIsImZpbHRlck91dCIsIklTX0ZJTkRfTEFTVF9JTkRFWCIsImZpbmRMYXN0IiwiZmluZExhc3RJbmRleCIsIiRmaW5kTGFzdCIsIiRmaW5kTGFzdEluZGV4Iiwib2JqZWN0Q3JlYXRlIiwic3BlY2lmaWNDb25zdHJ1Y3RvciIsIiRncm91cEJ5IiwiZ3JvdXBCeSIsImlzRnJvemVuU3RyaW5nQXJyYXkiLCJhbGxvd1VuZGVmaW5lZCIsImlzVGVtcGxhdGVPYmplY3QiLCJsYXN0SXRlbSIsInVuaXF1ZUJ5IiwicmVzb2x2ZXIiLCJyZXNvbHZlckZ1bmN0aW9uIiwiaXRlbSIsIkFzeW5jSXRlcmF0b3JDb25zdHJ1Y3RvciIsIm5leHRIYW5kbGVyIiwiQXN5bmNJdGVyYXRvclByb3h5IiwiaWdub3JlQXJndW1lbnQiLCJoYXNBcmd1bWVudCIsIiQkcmV0dXJuIiwiJCR0aHJvdyIsImNyZWF0ZUFzeW5jSXRlcmF0b3JQcm94eSIsImFzSW5kZXhlZFBhaXJzIiwiZXJyIiwiZHJvcCIsImZpbHRlcmVyIiwic2VsZWN0ZWQiLCJpbm5lckl0ZXJhdG9yIiwib3V0ZXJMb29wIiwibWFwcGVkIiwiaW5uZXJOZXh0IiwiaW5uZXJMb29wIiwicmVkdWNlciIsIm5vSW5pdGlhbCIsImFjY3VtdWxhdG9yIiwidGFrZSIsIiR0b0FycmF5IiwiSU5DT1JSRUNUX1JBTkdFIiwiTlVNRVJJQ19SQU5HRV9JVEVSQVRPUiIsIiRSYW5nZUl0ZXJhdG9yIiwiTnVtZXJpY1JhbmdlSXRlcmF0b3IiLCJvcHRpb24iLCJ6ZXJvIiwib25lIiwiaWZJbmNyZWFzZSIsImluY2x1c2l2ZUVuZCIsImluY2x1c2l2ZSIsImhpdHNFbmQiLCJjdXJyZW50Q291bnQiLCJjdXJyZW50WWllbGRpbmdWYWx1ZSIsImVuZENvbmRpdGlvbiIsIkJpZ0ludCIsInJhbmdlIiwiTm9kZSIsInByaW1pdGl2ZXMiLCJvYmplY3RzQnlJbmRleCIsImluaXRpYWxpemVyIiwiSVNfT0JKRUNUIiwicm9vdCIsImFjdGl2ZSIsImdldENvbXBvc2l0ZUtleU5vZGUiLCJjb21wb3NpdGVLZXkiLCJjb21wb3NpdGVTeW1ib2wiLCJOYXRpdmVJdGVyYXRvciIsIkl0ZXJhdG9yIiwiSXRlcmF0b3JQcm94eSIsImlnbm9yZUFyZyIsImNyZWF0ZUl0ZXJhdG9yUHJveHkiLCJyZW1vdmVyIiwiYWxsRGVsZXRlZCIsIndhc0RlbGV0ZWQiLCJjb2xsZWN0aW9uRGVsZXRlQWxsIiwiZGVsZXRlQWxsIiwiZW1wbGFjZSIsInVwZGF0ZSIsImluc2VydCIsIiRlbXBsYWNlIiwiZ2V0TWFwSXRlcmF0b3IiLCJuZXdNYXAiLCJmaW5kS2V5IiwibmV4dEl0ZW0iLCJrZXlEZXJpdmF0aXZlIiwiZGVyaXZlZEtleSIsInNhbWVWYWx1ZVplcm8iLCJrZXlCeSIsImtleU9mIiwibWFwS2V5cyIsIm1hcFZhbHVlcyIsImNhbGxiYWNrIiwiaXNQcmVzZW50SW5NYXAiLCJ1cHNlcnQiLCJ1cGRhdGVGbiIsImluc2VydEZuIiwiJHVwc2VydCIsInVwZGF0ZU9ySW5zZXJ0IiwiY2xhbXAiLCJsb3dlciIsInVwcGVyIiwiREVHX1BFUl9SQUQiLCJQSSIsIlJBRF9QRVJfREVHIiwiZGVncmVlcyIsInJhZGlhbnMiLCJzY2FsZSIsImluTG93IiwiaW5IaWdoIiwib3V0TG93Iiwib3V0SGlnaCIsImZzY2FsZSIsImlhZGRoIiwieDAiLCJ4MSIsInkwIiwieTEiLCIkeDAiLCIkeDEiLCIkeTAiLCJpbXVsaCIsInUiLCIkdSIsIiR2IiwidTAiLCJ2MCIsInUxIiwidjEiLCJpc3ViaCIsIlNFRURFRF9SQU5ET00iLCJTRUVERURfUkFORE9NX0dFTkVSQVRPUiIsIlNFRURfVFlQRV9FUlJPUiIsIiRTZWVkZWRSYW5kb21HZW5lcmF0b3IiLCJTZWVkZWRSYW5kb21HZW5lcmF0b3IiLCJzZWVkIiwic2VlZGVkUFJORyIsInNpZ25iaXQiLCJ1bXVsaCIsIklOVkFMSURfTlVNQkVSX1JFUFJFU0VOVEFUSU9OIiwiSU5WQUxJRF9SQURJWCIsInZhbGlkIiwiZnJvbVN0cmluZyIsIm1hdGhOdW0iLCJPQkpFQ1RfSVRFUkFUT1IiLCJPYmplY3RJdGVyYXRvciIsIml0ZXJhdGVFbnRyaWVzIiwiaXRlcmF0ZUtleXMiLCJpdGVyYXRlVmFsdWVzIiwiT0JTRVJWQUJMRSIsImNsZWFudXBTdWJzY3JpcHRpb24iLCJzdWJzY3JpcHRpb25TdGF0ZSIsImNsZWFudXAiLCJzdWJzY3JpcHRpb25DbG9zZWQiLCJvYnNlcnZlciIsInN1YnNjcmlwdGlvbiIsImNsb3NlZCIsInN1YnNjcmlwdGlvbk9ic2VydmVyIiwiU3Vic2NyaXB0aW9uIiwic3Vic2NyaWJlciIsIlN1YnNjcmlwdGlvbk9ic2VydmVyIiwidW5zdWJzY3JpYmUiLCJuZXh0TWV0aG9kIiwiZXJyb3JNZXRob2QiLCJjb21wbGV0ZSIsImNvbXBsZXRlTWV0aG9kIiwiJE9ic2VydmFibGUiLCJPYnNlcnZhYmxlIiwic3Vic2NyaWJlIiwib2JzZXJ2YWJsZU1ldGhvZCIsIm9ic2VydmFibGUiLCJnZXRPckNyZWF0ZU1ldGFkYXRhTWFwIiwidGFyZ2V0S2V5IiwidGFyZ2V0TWV0YWRhdGEiLCJrZXlNZXRhZGF0YSIsIm9yZGluYXJ5SGFzT3duTWV0YWRhdGEiLCJNZXRhZGF0YUtleSIsIm1ldGFkYXRhTWFwIiwib3JkaW5hcnlHZXRPd25NZXRhZGF0YSIsIm9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEiLCJNZXRhZGF0YVZhbHVlIiwib3JkaW5hcnlPd25NZXRhZGF0YUtleXMiLCJ0b01ldGFkYXRhS2V5IiwiZ2V0TWFwIiwidG9LZXkiLCJSZWZsZWN0TWV0YWRhdGFNb2R1bGUiLCJkZWZpbmVNZXRhZGF0YSIsIm1ldGFkYXRhS2V5IiwibWV0YWRhdGFWYWx1ZSIsImRlbGV0ZU1ldGFkYXRhIiwib3JkaW5hcnlHZXRNZXRhZGF0YSIsImdldE1ldGFkYXRhIiwiaXRlciIsIm9yZGluYXJ5TWV0YWRhdGFLZXlzIiwib0tleXMiLCJwS2V5cyIsImdldE1ldGFkYXRhS2V5cyIsImdldE93bk1ldGFkYXRhIiwiZ2V0T3duTWV0YWRhdGFLZXlzIiwib3JkaW5hcnlIYXNNZXRhZGF0YSIsImhhc01ldGFkYXRhIiwiaGFzT3duTWV0YWRhdGEiLCJkZWNvcmF0b3IiLCJhZGRlciIsImNvbGxlY3Rpb25BZGRBbGwiLCJhZGRBbGwiLCJkaWZmZXJlbmNlIiwibmV3U2V0IiwiZ2V0U2V0SXRlcmF0b3IiLCJpbnRlcnNlY3Rpb24iLCJoYXNDaGVjayIsImlzRGlzam9pbnRGcm9tIiwiaXNTdWJzZXRPZiIsIm90aGVyU2V0IiwiaXNTdXBlcnNldE9mIiwic2VwIiwic3ltbWV0cmljRGlmZmVyZW5jZSIsInVuaW9uIiwiU3RyaW5nTXVsdGlieXRlTW9kdWxlIiwiJFN0cmluZ0l0ZXJhdG9yIiwiU3RyaW5nSXRlcmF0b3IiLCJjb2RlUG9pbnQiLCJjb2RlUG9pbnRzIiwiYXJyYXlGcm9tQXN5bmMiLCJhcnJheVVuaXF1ZUJ5IiwiQ1NTUnVsZUxpc3QiLCJDU1NTdHlsZURlY2xhcmF0aW9uIiwiQ1NTVmFsdWVMaXN0IiwiQ2xpZW50UmVjdExpc3QiLCJET01SZWN0TGlzdCIsIkRPTVN0cmluZ0xpc3QiLCJET01Ub2tlbkxpc3QiLCJEYXRhVHJhbnNmZXJJdGVtTGlzdCIsIkZpbGVMaXN0IiwiSFRNTEFsbENvbGxlY3Rpb24iLCJIVE1MQ29sbGVjdGlvbiIsIkhUTUxGb3JtRWxlbWVudCIsIkhUTUxTZWxlY3RFbGVtZW50IiwiTWVkaWFMaXN0IiwiTWltZVR5cGVBcnJheSIsIk5hbWVkTm9kZU1hcCIsIk5vZGVMaXN0IiwiUGFpbnRSZXF1ZXN0TGlzdCIsIlBsdWdpbiIsIlBsdWdpbkFycmF5IiwiU1ZHTGVuZ3RoTGlzdCIsIlNWR051bWJlckxpc3QiLCJTVkdQYXRoU2VnTGlzdCIsIlNWR1BvaW50TGlzdCIsIlNWR1N0cmluZ0xpc3QiLCJTVkdUcmFuc2Zvcm1MaXN0IiwiU291cmNlQnVmZmVyTGlzdCIsIlN0eWxlU2hlZXRMaXN0IiwiVGV4dFRyYWNrQ3VlTGlzdCIsIlRleHRUcmFja0xpc3QiLCJUb3VjaExpc3QiLCJjbGFzc0xpc3QiLCJET01Ub2tlbkxpc3RQcm90b3R5cGUiLCJET01JdGVyYWJsZXMiLCJoYW5kbGVQcm90b3R5cGUiLCJDb2xsZWN0aW9uUHJvdG90eXBlIiwiQ09MTEVDVElPTl9OQU1FIiwiQXJyYXlJdGVyYXRvck1ldGhvZHMiLCJBcnJheVZhbHVlcyIsIk1TSUUiLCJzY2hlZHVsZXIiLCJ0aW1lb3V0IiwiYm91bmRBcmdzIiwic2V0SW50ZXJ2YWwiLCJVUkwiLCJzZWFyY2hQYXJhbXMiLCJwYXRobmFtZSIsImhyZWYiLCJVUkxTZWFyY2hQYXJhbXMiLCJ1c2VybmFtZSIsImhhc2giLCJtYXhJbnQiLCJiYXNlIiwidE1pbiIsInRNYXgiLCJza2V3IiwiZGFtcCIsImluaXRpYWxCaWFzIiwiaW5pdGlhbE4iLCJkZWxpbWl0ZXIiLCJyZWdleE5vbkFTQ0lJIiwicmVnZXhTZXBhcmF0b3JzIiwiT1ZFUkZMT1dfRVJST1IiLCJiYXNlTWludXNUTWluIiwic3RyaW5nRnJvbUNoYXJDb2RlIiwidWNzMmRlY29kZSIsImV4dHJhIiwiZGlnaXRUb0Jhc2ljIiwiZGlnaXQiLCJhZGFwdCIsImRlbHRhIiwibnVtUG9pbnRzIiwiZmlyc3RUaW1lIiwiZW5jb2RlIiwiaW5wdXRMZW5ndGgiLCJiaWFzIiwiY3VycmVudFZhbHVlIiwiYmFzaWNMZW5ndGgiLCJoYW5kbGVkQ1BDb3VudCIsImhhbmRsZWRDUENvdW50UGx1c09uZSIsInFNaW51c1QiLCJiYXNlTWludXNUIiwiZW5jb2RlZCIsImxhYmVscyIsImxhYmVsIiwiVVNFX05BVElWRV9VUkwiLCJuYXRpdmVGZXRjaCIsIk5hdGl2ZVJlcXVlc3QiLCJSZXF1ZXN0UHJvdG90eXBlIiwiSGVhZGVycyIsIlVSTF9TRUFSQ0hfUEFSQU1TIiwiVVJMX1NFQVJDSF9QQVJBTVNfSVRFUkFUT1IiLCJnZXRJbnRlcm5hbFBhcmFtc1N0YXRlIiwicGx1cyIsInNlcXVlbmNlcyIsInBlcmNlbnRTZXF1ZW5jZSIsInBlcmNlbnREZWNvZGUiLCJzZXF1ZW5jZSIsImRlY29kZVVSSUNvbXBvbmVudCIsImRlc2VyaWFsaXplIiwic2VyaWFsaXplIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicGFyc2VTZWFyY2hQYXJhbXMiLCJxdWVyeSIsInNoaWZ0IiwidXBkYXRlU2VhcmNoUGFyYW1zIiwidmFsaWRhdGVBcmd1bWVudHNMZW5ndGgiLCJwYXNzZWQiLCJyZXF1aXJlZCIsIlVSTFNlYXJjaFBhcmFtc0l0ZXJhdG9yIiwicGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zQ29uc3RydWN0b3IiLCJlbnRyeUl0ZXJhdG9yIiwiZW50cnlOZXh0IiwidXBkYXRlVVJMIiwiVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlIiwiYXBwZW5kIiwiZ2V0QWxsIiwiZm91bmQiLCJlbnRyaWVzSW5kZXgiLCJzbGljZUluZGV4Iiwid3JhcFJlcXVlc3RPcHRpb25zIiwiYm9keSIsImhlYWRlcnMiLCJmZXRjaCIsIlJlcXVlc3RDb25zdHJ1Y3RvciIsIlJlcXVlc3QiLCJnZXRTdGF0ZSIsImFycmF5RnJvbSIsInRvQVNDSUkiLCJVUkxTZWFyY2hQYXJhbXNNb2R1bGUiLCJOYXRpdmVVUkwiLCJnZXRJbnRlcm5hbFNlYXJjaFBhcmFtc1N0YXRlIiwiZ2V0SW50ZXJuYWxVUkxTdGF0ZSIsIklOVkFMSURfQVVUSE9SSVRZIiwiSU5WQUxJRF9TQ0hFTUUiLCJJTlZBTElEX0hPU1QiLCJJTlZBTElEX1BPUlQiLCJBTFBIQSIsIkFMUEhBTlVNRVJJQyIsIkRJR0lUIiwiSEVYX1NUQVJUIiwiT0NUIiwiREVDIiwiSEVYIiwiRk9SQklEREVOX0hPU1RfQ09ERV9QT0lOVCIsIkZPUkJJRERFTl9IT1NUX0NPREVfUE9JTlRfRVhDTFVESU5HX1BFUkNFTlQiLCJMRUFESU5HX0FORF9UUkFJTElOR19DMF9DT05UUk9MX09SX1NQQUNFIiwiVEFCX0FORF9ORVdfTElORSIsIkVPRiIsInBhcnNlSG9zdCIsInBhcnNlSVB2NiIsImlzU3BlY2lhbCIsInBlcmNlbnRFbmNvZGUiLCJDMENvbnRyb2xQZXJjZW50RW5jb2RlU2V0IiwicGFyc2VJUHY0IiwicGFydHMiLCJwYXJ0c0xlbmd0aCIsIm51bWJlcnMiLCJwYXJ0IiwiaXB2NCIsInBvcCIsImFkZHJlc3MiLCJwaWVjZUluZGV4IiwiY29tcHJlc3MiLCJwb2ludGVyIiwibnVtYmVyc1NlZW4iLCJpcHY0UGllY2UiLCJzd2FwcyIsInN3YXAiLCJmaW5kTG9uZ2VzdFplcm9TZXF1ZW5jZSIsImlwdjYiLCJtYXhJbmRleCIsImN1cnJTdGFydCIsImN1cnJMZW5ndGgiLCJzZXJpYWxpemVIb3N0IiwiaWdub3JlMCIsInVuc2hpZnQiLCJmcmFnbWVudFBlcmNlbnRFbmNvZGVTZXQiLCJwYXRoUGVyY2VudEVuY29kZVNldCIsInVzZXJpbmZvUGVyY2VudEVuY29kZVNldCIsInNwZWNpYWxTY2hlbWVzIiwiZnRwIiwiZmlsZSIsImh0dHAiLCJodHRwcyIsIndzIiwid3NzIiwic2NoZW1lIiwiaW5jbHVkZXNDcmVkZW50aWFscyIsInBhc3N3b3JkIiwiY2Fubm90SGF2ZVVzZXJuYW1lUGFzc3dvcmRQb3J0IiwiY2Fubm90QmVBQmFzZVVSTCIsImlzV2luZG93c0RyaXZlTGV0dGVyIiwibm9ybWFsaXplZCIsInN0YXJ0c1dpdGhXaW5kb3dzRHJpdmVMZXR0ZXIiLCJzaG9ydGVuVVJMc1BhdGgiLCJwYXRoU2l6ZSIsImlzU2luZ2xlRG90Iiwic2VnbWVudCIsImlzRG91YmxlRG90IiwiU0NIRU1FX1NUQVJUIiwiU0NIRU1FIiwiTk9fU0NIRU1FIiwiU1BFQ0lBTF9SRUxBVElWRV9PUl9BVVRIT1JJVFkiLCJQQVRIX09SX0FVVEhPUklUWSIsIlJFTEFUSVZFIiwiUkVMQVRJVkVfU0xBU0giLCJTUEVDSUFMX0FVVEhPUklUWV9TTEFTSEVTIiwiU1BFQ0lBTF9BVVRIT1JJVFlfSUdOT1JFX1NMQVNIRVMiLCJBVVRIT1JJVFkiLCJIT1NUIiwiSE9TVE5BTUUiLCJQT1JUIiwiRklMRSIsIkZJTEVfU0xBU0giLCJGSUxFX0hPU1QiLCJQQVRIX1NUQVJUIiwiUEFUSCIsIkNBTk5PVF9CRV9BX0JBU0VfVVJMX1BBVEgiLCJRVUVSWSIsIkZSQUdNRU5UIiwicGFyc2VVUkwiLCJzdGF0ZU92ZXJyaWRlIiwic2VlbkF0Iiwic2VlbkJyYWNrZXQiLCJzZWVuUGFzc3dvcmRUb2tlbiIsImJ1ZmZlckNvZGVQb2ludHMiLCJmYWlsdXJlIiwiZnJhZ21lbnQiLCJlbmNvZGVkQ29kZVBvaW50cyIsIlVSTENvbnN0cnVjdG9yIiwidXJsU3RyaW5nIiwiYmFzZVN0YXRlIiwic2VhcmNoUGFyYW1zU3RhdGUiLCJzZXJpYWxpemVVUkwiLCJvcmlnaW4iLCJnZXRPcmlnaW4iLCJnZXRQcm90b2NvbCIsImdldFVzZXJuYW1lIiwiZ2V0UGFzc3dvcmQiLCJnZXRIb3N0IiwiaG9zdG5hbWUiLCJnZXRIb3N0bmFtZSIsImdldFBvcnQiLCJnZXRQYXRobmFtZSIsImdldFNlYXJjaCIsImdldFNlYXJjaFBhcmFtcyIsImdldEhhc2giLCJVUkxQcm90b3R5cGUiLCJhY2Nlc3NvckRlc2NyaXB0b3IiLCJuYXRpdmVDcmVhdGVPYmplY3RVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJuYXRpdmVSZXZva2VPYmplY3RVUkwiLCJyZXZva2VPYmplY3RVUkwiLCJibG9iIiwiaGFzU3ltYm9sIiwiZm9yIiwiUkVBQ1RfRUxFTUVOVF9UWVBFIiwiUkVBQ1RfUE9SVEFMX1RZUEUiLCJSRUFDVF9GUkFHTUVOVF9UWVBFIiwiUkVBQ1RfU1RSSUNUX01PREVfVFlQRSIsIlJFQUNUX1BST0ZJTEVSX1RZUEUiLCJSRUFDVF9QUk9WSURFUl9UWVBFIiwiUkVBQ1RfQ09OVEVYVF9UWVBFIiwiUkVBQ1RfQVNZTkNfTU9ERV9UWVBFIiwiUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUiLCJSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIiwiUkVBQ1RfU1VTUEVOU0VfVFlQRSIsIlJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSIsIlJFQUNUX01FTU9fVFlQRSIsIlJFQUNUX0xBWllfVFlQRSIsIlJFQUNUX0JMT0NLX1RZUEUiLCJSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIiwiUkVBQ1RfUkVTUE9OREVSX1RZUEUiLCJSRUFDVF9TQ09QRV9UWVBFIiwiaXNWYWxpZEVsZW1lbnRUeXBlIiwiJCR0eXBlb2YiLCJ0eXBlT2YiLCIkJHR5cGVvZlR5cGUiLCJBc3luY01vZGUiLCJDb25jdXJyZW50TW9kZSIsIkNvbnRleHRDb25zdW1lciIsIkNvbnRleHRQcm92aWRlciIsIkVsZW1lbnQiLCJGb3J3YXJkUmVmIiwiRnJhZ21lbnQiLCJMYXp5IiwiTWVtbyIsIlBvcnRhbCIsIlByb2ZpbGVyIiwiU3RyaWN0TW9kZSIsIlN1c3BlbnNlIiwiaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUiLCJpc0FzeW5jTW9kZSIsImlzQ29uY3VycmVudE1vZGUiLCJpc0NvbnRleHRDb25zdW1lciIsImlzQ29udGV4dFByb3ZpZGVyIiwiaXNFbGVtZW50IiwiaXNGb3J3YXJkUmVmIiwiaXNGcmFnbWVudCIsImlzTGF6eSIsImlzTWVtbyIsImlzUG9ydGFsIiwiaXNQcm9maWxlciIsImlzU3RyaWN0TW9kZSIsImlzU3VzcGVuc2UiLCJleHBvcnRzIiwicHJvcElzRW51bWVyYWJsZSIsInNob3VsZFVzZU5hdGl2ZSIsInRlc3QxIiwidGVzdDIiLCJvcmRlcjIiLCJ0ZXN0MyIsImxldHRlciIsIlJlYWN0UHJvcFR5cGVzU2VjcmV0IiwicHJpbnRXYXJuaW5nIiwibG9nZ2VkVHlwZUZhaWx1cmVzIiwidGV4dCIsImNoZWNrUHJvcFR5cGVzIiwidHlwZVNwZWNzIiwiY29tcG9uZW50TmFtZSIsImdldFN0YWNrIiwidHlwZVNwZWNOYW1lIiwiZXgiLCJzdGFjayIsInJlc2V0V2FybmluZ0NhY2hlIiwiUmVhY3RJcyIsImVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwiLCJpc1ZhbGlkRWxlbWVudCIsInRocm93T25EaXJlY3RBY2Nlc3MiLCJJVEVSQVRPUl9TWU1CT0wiLCJGQVVYX0lURVJBVE9SX1NZTUJPTCIsImdldEl0ZXJhdG9yRm4iLCJtYXliZUl0ZXJhYmxlIiwiaXRlcmF0b3JGbiIsIkFOT05ZTU9VUyIsIlJlYWN0UHJvcFR5cGVzIiwiY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIiLCJib29sIiwiY3JlYXRlQW55VHlwZUNoZWNrZXIiLCJhcnJheU9mIiwiY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyIiwiY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyIiwiZWxlbWVudFR5cGUiLCJjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyIiwiaW5zdGFuY2VPZiIsImNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIiLCJjcmVhdGVOb2RlQ2hlY2tlciIsIm9iamVjdE9mIiwiY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlciIsIm9uZU9mIiwiY3JlYXRlRW51bVR5cGVDaGVja2VyIiwib25lT2ZUeXBlIiwiY3JlYXRlVW5pb25UeXBlQ2hlY2tlciIsInNoYXBlIiwiY3JlYXRlU2hhcGVUeXBlQ2hlY2tlciIsImV4YWN0IiwiY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlciIsIlByb3BUeXBlRXJyb3IiLCJjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlciIsInZhbGlkYXRlIiwibWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUiLCJtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCIsImNoZWNrVHlwZSIsImlzUmVxdWlyZWQiLCJwcm9wcyIsInByb3BOYW1lIiwicHJvcEZ1bGxOYW1lIiwic2VjcmV0IiwiY2FjaGVLZXkiLCJjaGFpbmVkQ2hlY2tUeXBlIiwiZXhwZWN0ZWRUeXBlIiwicHJvcFZhbHVlIiwicHJvcFR5cGUiLCJnZXRQcm9wVHlwZSIsInByZWNpc2VUeXBlIiwiZ2V0UHJlY2lzZVR5cGUiLCJ0eXBlQ2hlY2tlciIsImV4cGVjdGVkQ2xhc3MiLCJleHBlY3RlZENsYXNzTmFtZSIsImFjdHVhbENsYXNzTmFtZSIsImdldENsYXNzTmFtZSIsImV4cGVjdGVkVmFsdWVzIiwidmFsdWVzU3RyaW5nIiwiYXJyYXlPZlR5cGVDaGVja2VycyIsImNoZWNrZXIiLCJnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmciLCJpc05vZGUiLCJzaGFwZVR5cGVzIiwiYWxsS2V5cyIsIlByb3BUeXBlcyIsInBhcnNlIiwib3B0cyIsInByZXNlcnZlTnVtYmVycyIsImdldEtleVZhbHVlQ2h1bmtzIiwiaXNOdW1lcmljIiwiY2h1bmtzIiwiaGFzVW5jbG9zZWRVcmwiLCJjaHVuayIsIm5leHRTcGxpdCIsInN1YnN0cmluZyIsIlJfQk9PTEVBTiIsIlJfRk9DVVNBQkxFIiwiUl9DTElDS0FCTEUiLCJSX0lOVkFMSURfQ0hBUiIsImF0dHJGaXgiLCJwcm9wRml4IiwiYXR0ckhvb2tzIiwidGFiaW5kZXgiLCJhdHRyaWJ1dGVOb2RlIiwiZ2V0QXR0cmlidXRlTm9kZSIsInNwZWNpZmllZCIsIm5vZGVOYW1lIiwiYm9vbEhvb2siLCJlbGVtIiwiYXR0ck5vZGVIb29rIiwiY3NzVGV4dCIsImhpZGVmb2N1cyIsInJlYWRvbmx5IiwibWF4bGVuZ3RoIiwiY2VsbHNwYWNpbmciLCJjZWxscGFkZGluZyIsInJvd3NwYW4iLCJjb2xzcGFuIiwidXNlbWFwIiwiZnJhbWVib3JkZXIiLCJjb250ZW50ZWRpdGFibGUiLCJ1YSIsIm5hdmlnYXRvciIsImRvYyIsIm51bWJlcmlmeSIsImllVmVyc2lvbiIsImRvY3VtZW50TW9kZSIsIm1peCIsImVhY2giLCJhcnIiLCJsIiwiaWUiLCJyZXQiLCJub2RlVmFsdWUiLCJ0YWJJbmRleCIsImdldEF0dHJpYnV0ZSIsInBsYWNlaG9sZGVyIiwiaHJlZkZpeCIsImNoaWxkTm9kZXMiLCJhbGxUZXh0Iiwibm9kZVR5cGUiLCJvd25lckRvY3VtZW50Iiwic2V0QXR0cmlidXRlIiwiUkVfVFJJTSIsIlNQQUNFIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJjb250ZXh0IiwiY3JlYXRlQ29tbWVudCIsIm5vZGVzIiwibmVlZHNGaWx0ZXIiLCJjb21wYXJlTm9kZU9yZGVyIiwiZG9jdW1lbnRFbGVtZW50IiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJiaXQiLCJ1dGlsIiwidW5pcXVlIiwiaGFzRHVwbGljYXRlIiwiYmFzZUhhc0R1cGxpY2F0ZSIsInNvcnRPcmRlciIsImdldFNpbXBsZUF0dHIiLCJjb250YWlucyIsInBhcmVudE5vZGUiLCJpc1RhZyIsImhhc1NpbmdsZUNsYXNzIiwiY2xzIiwiY2xhc3NOYW1lIiwicHJlZml4Iiwic3VmZml4IiwiaW5kIiwiYXR0ciIsImF0dHJOb3JtYWxpemVyIiwiYXR0ck5vZGUiLCJwYXJzZXIiLCJHcmFtbWFyQ29uc3QiLCJpbkFycmF5IiwiTGV4ZXIiLCJjZmciLCJydWxlcyIsInJlc2V0SW5wdXQiLCJzdGF0ZVN0YWNrIiwiSU5JVElBTCIsImZpcnN0TGluZSIsImxpbmVOdW1iZXIiLCJsYXN0TGluZSIsImZpcnN0Q29sdW1uIiwibGFzdENvbHVtbiIsImN1cnJlbnRTdGF0ZSIsIm1hcFN0YXRlIiwibnVtIiwiREVCVUdfQ09OVEVYVF9MSU1JVCIsInBhc3QiLCJtYXBTeW1ib2xGb3JDb2RlR2VuIiwic3ltYm9sTWFwIiwicnMiLCJyZXZlcnNlU3ltYm9sTWFwIiwicnVsZSIsImxpbmVzIiwiZ2V0Q3VycmVudFJ1bGVzIiwibWFwU3ltYm9sIiwiRU5EX1RBRyIsInRva2VuIiwiYWN0aW9uIiwibWF0Y2hlcyIsImxleCIsImxleGVyIiwieXkiLCJwdXNoU3RhdGUiLCJwb3BTdGF0ZSIsInVuRXNjYXBlIiwidW5Fc2NhcGVTdHIiLCJwcm9kdWN0aW9ucyIsIiQxIiwiJDMiLCJuZXh0Q29tYmluYXRvciIsInByZXZDb21iaW5hdG9yIiwiJDIiLCJvcmRlciIsImlkZW50IiwiJDQiLCJwYXJhbSIsInRhYmxlIiwiZmlsZW5hbWUiLCJnb3RvcyIsInRhYmxlQWN0aW9uIiwidmFsdWVTdGFjayIsInN5bWJvbEZvclN0YXRlIiwibWFwUmV2ZXJzZVN5bWJvbCIsInNob3dEZWJ1Z0luZm8iLCJUWVBFX0lOREVYIiwiU0hJRlRfVFlQRSIsIlRPX0lOREVYIiwiUkVEVUNFX1RZUEUiLCJwcm9kdWN0aW9uIiwiUFJPRFVDVElPTl9JTkRFWCIsInJlZHVjZWRTeW1ib2wiLCJyZWR1Y2VkQWN0aW9uIiwicmVkdWNlZFJocyIsInJocyIsIiQkIiwibmV3U3RhdGUiLCJBQ0NFUFRfVFlQRSIsIkVYUEFORE9fU0VMRUNUT1JfS0VZIiwiY2FjaGVzIiwiaXNDb250ZXh0WE1MIiwidXVpZCIsInN1Yk1hdGNoZXNDYWNoZSIsImdldEF0dHIiLCJhTlBsdXNCIiwidW5lc2NhcGVGbiIsImVzY2FwZWQiLCJoaWdoIiwibWF0Y2hFeHByIiwicHNldWRvRm5FeHByIiwiYWIiLCJnZXRBYiIsImNoaWxkIiwibWF0Y2hJbmRleEJ5QWIiLCJlbFR5cGUiLCJ0YWdOYW1lIiwibGFuZyIsImVsTGFuZyIsIm5vdCIsIm5lZ2F0aW9uQXJnIiwicHNldWRvSWRlbnRFeHByIiwiZm9jdXMiLCJhY3RpdmVFbGVtZW50IiwiaGFzRm9jdXMiLCJlbmFibGVkIiwiZGlzYWJsZWQiLCJjaGVja2VkIiwiYXR0cmlidXRlRXhwciIsImVsVmFsdWUiLCJyZWxhdGl2ZUV4cHIiLCJkaXIiLCJpbW1lZGlhdGUiLCJhdHRyaWIiLCJtYXRjaEZuIiwicHNldWRvIiwiZm5TdHIiLCJyZXNldFN0YXR1cyIsImRpcmVjdGlvbiIsImVxIiwiaXNYTUwiLCJzZWVkcyIsInNlbGVjdCIsInNpbmdsZU1hdGNoIiwibWF0Y2hTdWZmaXgiLCJtYXRjaFN1ZmZpeExlbiIsIm1hdGNoU3VmZml4SW5kZXgiLCJzaW5nbGVNYXRjaFN1ZmZpeCIsInNpbmdsZU1hdGNoU3VmZml4VHlwZSIsIm1hdGNoSW1tZWRpYXRlIiwic3RhcnRFbCIsInJlbGF0aXZlT3AiLCJzdGFydE1hdGNoIiwiZmluZEZpeGVkTWF0Y2hGcm9tSGVhZCIsImN1ciIsImdlbklkIiwic2VsZWN0b3JJZCIsIm1hdGNoU3ViIiwibWF0Y2hLZXkiLCJtYXRjaFN1YkludGVybmFsIiwibWF0Y2hJbW1lZGlhdGVSZXQiLCJzZWxlY3RvciIsImdyb3VwSW5kZXgiLCJncm91cExlbiIsImNvbnRleHREb2N1bWVudCIsInN1ZmZpeEluZGV4Iiwic3VmZml4TGVuIiwic2VlZHNJbmRleCIsIm15U2VlZHMiLCJzZWVkc0xlbiIsInNpbmdsZVN1ZmZpeCIsImRvZXNOb3RIYXNCeUlkIiwiZ2V0RWxlbWVudEJ5SWQiLCJjb250ZXh0SW5Eb20iLCJ0bXAiLCJ0bXBzIiwidG1wTGVuIiwidG1wSSIsIm1hdGNoSGVhZCIsImh5cGhlbkV4cHJlc3Npb24iLCJ1cHBlckNhc2VGaXJzdE1hdGNoIiwiY2FtZWxDYXNlIiwiY2FtZWxDYXNlZCIsImlzU3RyaW5nIiwiaXNVbmRlZmluZWQiLCJkZXN0IiwiZGVzdGluYXRpb24iLCJzdHlsZUNhbWVsQ2FzZSIsImNhbWVsIiwiUmVhY3QiLCJzdHlsZUF0dHIiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZXZlbnRMaXN0ZW5lcnMiLCJyZWYiLCJjb21wb25lbnQiLCJzZXRQcm9wZXJ0eSIsImdldFByb3BlcnR5IiwiZ2V0UHJvcGVydHlWYWx1ZSIsInJlbW92ZVByb3BlcnR5IiwiRUxFTUVOVF9OT0RFIiwiRE9DVU1FTlRfUE9TSVRJT05fRElTQ09OTkVDVEVEIiwiRE9DVU1FTlRfUE9TSVRJT05fUFJFQ0VESU5HIiwiRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HIiwiRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTlMiLCJET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkiLCJldmVudE5hbWVNYXBwaW5ncyIsInNraXBOYW1lVHJhbnNmb3JtYXRpb25FeHByZXNzaW9ucyIsImF0dHJpYnV0ZU5hbWVNYXBwaW5ncyIsImF0dHJpYnV0ZVRvUHJvcE5hbWUiLCJza2lwVHJhbnNmb3JtTWF0Y2hlcyIsImV4cHIiLCJzdHlsZXMiLCJyZW1vdmVBdHRyaWJ1dGUiLCJldmVudFRvUHJvcE5hbWUiLCJwcm9wIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImxpc3RlbmVycyIsImluc2VydEJlZm9yZSIsImJlZm9yZSIsInF1ZXJ5U2VsZWN0b3IiLCJjaGlsZHJlbiIsImNoaWxkTWF0Y2hlcyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImNsb25lTm9kZSIsImRlZXAiLCJjaGlsZEVsIiwiY2xvbmVFbGVtZW50IiwidG9SZWFjdCIsIm9yaWdpbmFsRWxlbWVudCIsInVuaXF1ZUtleSIsInN5bnRoZXRpY0V2ZW50IiwibmF0aXZlRXZlbnQiLCJvdGhlciIsImdldEZpcnN0Tm9kZUJ5T3JkZXIiLCJub2RlT25lIiwibm9kZVR3byIsImlzQW5jZXN0b3IiLCJlaXRoZXJDb250YWlucyIsImdldFJvb3ROb2RlIiwicmVmZXJlbmNlUm9vdCIsIm90aGVyUm9vdCIsIm5leHRTaWJsaW5nIiwic2libGluZ3MiLCJtZSIsInByZXZpb3VzU2libGluZyIsImlubmVySFRNTCIsInRleHRDb250ZW50IiwibmFtZXNwYWNlTWV0aG9kcyIsIldpbmRvdyIsImdldENvbXB1dGVkU3R5bGUiLCJfYXNzaWduIiwiZW1wdHlPYmplY3QiLCJ2YWxpZGF0ZUZvcm1hdCIsImZvcm1hdCIsIl9pbnZhcmlhbnQiLCJkIiwiYXJnSW5kZXgiLCJmcmFtZXNUb1BvcCIsIndhcm5pbmciLCJfbGVuIiwiX2tleSIsIl9sZW4yIiwiX2tleTIiLCJNSVhJTlNfS0VZIiwiaWRlbnRpdHkiLCJSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcyIsImNoaWxkQ29udGV4dCIsImZhY3RvcnkiLCJSZWFjdENvbXBvbmVudCIsIlJlYWN0Tm9vcFVwZGF0ZVF1ZXVlIiwiaW5qZWN0ZWRNaXhpbnMiLCJSZWFjdENsYXNzSW50ZXJmYWNlIiwibWl4aW5zIiwic3RhdGljcyIsInByb3BUeXBlcyIsImNvbnRleHRUeXBlcyIsImNoaWxkQ29udGV4dFR5cGVzIiwiZ2V0RGVmYXVsdFByb3BzIiwiZ2V0SW5pdGlhbFN0YXRlIiwiZ2V0Q2hpbGRDb250ZXh0IiwicmVuZGVyIiwiY29tcG9uZW50V2lsbE1vdW50IiwiY29tcG9uZW50RGlkTW91bnQiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwic2hvdWxkQ29tcG9uZW50VXBkYXRlIiwiY29tcG9uZW50V2lsbFVwZGF0ZSIsImNvbXBvbmVudERpZFVwZGF0ZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCIsIlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUiLCJ1cGRhdGVDb21wb25lbnQiLCJSZWFjdENsYXNzU3RhdGljSW50ZXJmYWNlIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwiUkVTRVJWRURfU1BFQ19LRVlTIiwiZGlzcGxheU5hbWUiLCJtaXhTcGVjSW50b0NvbXBvbmVudCIsInZhbGlkYXRlVHlwZURlZiIsImNyZWF0ZU1lcmdlZFJlc3VsdEZ1bmN0aW9uIiwibWl4U3RhdGljU3BlY0ludG9Db21wb25lbnQiLCJhdXRvYmluZCIsInR5cGVEZWYiLCJ2YWxpZGF0ZU1ldGhvZE92ZXJyaWRlIiwiaXNBbHJlYWR5RGVmaW5lZCIsInNwZWNQb2xpY3kiLCJSZWFjdENsYXNzTWl4aW4iLCJzcGVjIiwidHlwZW9mU3BlYyIsImlzTWl4aW5WYWxpZCIsImF1dG9CaW5kUGFpcnMiLCJfX3JlYWN0QXV0b0JpbmRQYWlycyIsImlzUmVhY3RDbGFzc01ldGhvZCIsInNob3VsZEF1dG9CaW5kIiwiY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uIiwiaXNSZXNlcnZlZCIsIm1lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMiLCJ0d28iLCJtZXJnZWRSZXN1bHQiLCJjaGFpbmVkRnVuY3Rpb24iLCJiaW5kQXV0b0JpbmRNZXRob2QiLCJib3VuZE1ldGhvZCIsIl9fcmVhY3RCb3VuZENvbnRleHQiLCJfX3JlYWN0Qm91bmRNZXRob2QiLCJfX3JlYWN0Qm91bmRBcmd1bWVudHMiLCJfYmluZCIsIm5ld1RoaXMiLCJyZWJvdW5kTWV0aG9kIiwiYmluZEF1dG9CaW5kTWV0aG9kcyIsInBhaXJzIiwiYXV0b0JpbmRLZXkiLCJJc01vdW50ZWRQcmVNaXhpbiIsIl9faXNNb3VudGVkIiwiSXNNb3VudGVkUG9zdE1peGluIiwicmVwbGFjZVN0YXRlIiwidXBkYXRlciIsImVucXVldWVSZXBsYWNlU3RhdGUiLCJpc01vdW50ZWQiLCJfX2RpZFdhcm5Jc01vdW50ZWQiLCJSZWFjdENsYXNzQ29tcG9uZW50IiwiY3JlYXRlQ2xhc3MiLCJyZWZzIiwiaW5pdGlhbFN0YXRlIiwiX2lzTW9ja0Z1bmN0aW9uIiwiZGVmYXVsdFByb3BzIiwiaXNSZWFjdENsYXNzQXBwcm92ZWQiLCJjb21wb25lbnRTaG91bGRVcGRhdGUiLCJjb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzIiwiVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMiLCJtZXRob2ROYW1lIiwiQ29tcG9uZW50IiwicmVhY3RJcyIsIlJFQUNUX1NUQVRJQ1MiLCJjb250ZXh0VHlwZSIsImdldERlcml2ZWRTdGF0ZUZyb21FcnJvciIsIktOT1dOX1NUQVRJQ1MiLCJjYWxsZXIiLCJhcml0eSIsIkZPUldBUkRfUkVGX1NUQVRJQ1MiLCJNRU1PX1NUQVRJQ1MiLCJjb21wYXJlIiwiVFlQRV9TVEFUSUNTIiwiZ2V0U3RhdGljcyIsIm9iamVjdFByb3RvdHlwZSIsImhvaXN0Tm9uUmVhY3RTdGF0aWNzIiwidGFyZ2V0Q29tcG9uZW50Iiwic291cmNlQ29tcG9uZW50IiwiYmxhY2tsaXN0IiwiaW5oZXJpdGVkQ29tcG9uZW50IiwidGFyZ2V0U3RhdGljcyIsInNvdXJjZVN0YXRpY3MiLCJjcmVhdGVSZWFjdENsYXNzIiwid2l0aEZhdXhET01GYWN0b3J5Iiwid2l0aEZhdXhET00iLCJXcmFwcGVkQ29tcG9uZW50IiwiV2l0aEZhdXhET00iLCJjb25uZWN0ZWRGYXV4RE9NIiwiYW5pbWF0ZUZhdXhET01VbnRpbCIsInN0b3BBbmltYXRpbmdGYXV4RE9NIiwic3RvcERyYXdGYXV4RE9NIiwiY29ubmVjdEZhdXhET00iLCJkaXNjYXJkTm9kZSIsImRyYXdGYXV4RE9NVGltZW91dCIsImRyYXdGYXV4RE9NIiwidmlydHVhbERPTSIsInNldFN0YXRlIiwiYW5pbWF0ZUZhdXhET00iLCJkdXJhdGlvbiIsImZhdXhET01BbmltYXRpb25JbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJjbGVhclRpbWVvdXQiLCJpc0FuaW1hdGluZ0ZhdXhET00iLCJnZXREaXNwbGF5TmFtZSIsIlJlYWN0RmF1eERPTSIsImRlZmF1bHRWaWV3IiwiY3JlYXRlRWxlbWVudE5TIiwibm9vcCIsImRpc3BhdGNoIiwicGFyc2VUeXBlbmFtZXMiLCJ0eXBlbmFtZXMiLCJ0eXBlcyIsIm9uIiwidHlwZW5hbWUiLCJjb3B5IiwiY2xvdWRSYWRpYW5zIiwiY3ciLCJjbG91ZFRleHQiLCJmb250IiwiY2xvdWRGb250IiwiZm9udFNpemUiLCJjbG91ZEZvbnRTaXplIiwiZm9udFN0eWxlIiwiY2xvdWRGb250Tm9ybWFsIiwiZm9udFdlaWdodCIsInJvdGF0ZSIsImNsb3VkUm90YXRlIiwicGFkZGluZyIsImNsb3VkUGFkZGluZyIsInNwaXJhbCIsImFyY2hpbWVkZWFuU3BpcmFsIiwid29yZHMiLCJ0aW1lSW50ZXJ2YWwiLCJ0aW1lciIsImNsb3VkIiwiY2FudmFzIiwiY2xvdWRDYW52YXMiLCJmdW5jdG9yIiwiY29udGV4dEFuZFJhdGlvIiwiZ2V0Q29udGV4dCIsImJvYXJkIiwiemVyb0FycmF5IiwiYm91bmRzIiwidGFncyIsIndlaWdodCIsImNsb3VkU3ByaXRlIiwiaGFzVGV4dCIsInBsYWNlIiwiY2xvdWRCb3VuZHMiLCJ3aWR0aCIsImhlaWdodCIsInJhdGlvIiwiZ2V0SW1hZ2VEYXRhIiwiZmlsbFN0eWxlIiwic3Ryb2tlU3R5bGUiLCJ0ZXh0QWxpZ24iLCJzdGFydFgiLCJzdGFydFkiLCJtYXhEZWx0YSIsImR0IiwiZHhkeSIsImR4IiwiZHkiLCJjbG91ZENvbGxpZGUiLCJjb2xsaWRlUmVjdHMiLCJzcHJpdGUiLCJ3Iiwic3ciLCJseCIsInN4IiwibXN4IiwiaCIsInNwaXJhbHMiLCJkaSIsImNsZWFyUmVjdCIsIm1heGgiLCJzYXZlIiwibWVhc3VyZVRleHQiLCJzciIsInNpbiIsImNyIiwiY29zIiwid2NyIiwid3NyIiwiaGNyIiwiaHNyIiwidHJhbnNsYXRlIiwiZmlsbFRleHQiLCJsaW5lV2lkdGgiLCJzdHJva2VUZXh0IiwicmVzdG9yZSIsInhvZmYiLCJ5b2ZmIiwicGl4ZWxzIiwidzMyIiwic2VlbiIsInNlZW5Sb3ciLCJiMCIsImIxIiwicmVjdGFuZ3VsYXJTcGlyYWwiLCJhcmNoaW1lZGVhbiIsInJlY3Rhbmd1bGFyIiwiaGFzRWxlbWVudFR5cGUiLCJoYXNNYXAiLCJoYXNTZXQiLCJoYXNBcnJheUJ1ZmZlciIsImVxdWFsIiwiaXNFcXVhbCIsIndhcm4iLCJ4aHRtbCIsInN2ZyIsInhsaW5rIiwieG1sIiwieG1sbnMiLCJuYW1lc3BhY2VzIiwibG9jYWwiLCJjcmVhdG9ySW5oZXJpdCIsInVyaSIsIm5hbWVzcGFjZVVSSSIsImNyZWF0b3JGaXhlZCIsImZ1bGxuYW1lIiwibm9uZSIsIl9ncm91cHMiLCJzdWJncm91cHMiLCJzdWJncm91cCIsInN1Ym5vZGUiLCJfX2RhdGFfXyIsIlNlbGVjdGlvbiIsIl9wYXJlbnRzIiwiYXJyYXlBbGwiLCJzZWxlY3RvckFsbCIsInBhcmVudHMiLCJjaGlsZE1hdGNoZXIiLCJjaGlsZEZpbmQiLCJjaGlsZEZpcnN0IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJjaGlsZHJlbkZpbHRlciIsInNlbGVjdEFsbCIsIl9lbnRlciIsInNwYXJzZSIsIkVudGVyTm9kZSIsImRhdHVtIiwiX25leHQiLCJfcGFyZW50IiwiYmluZEluZGV4IiwiZ3JvdXBMZW5ndGgiLCJkYXRhTGVuZ3RoIiwiYmluZEtleSIsIm5vZGVCeUtleVZhbHVlIiwia2V5VmFsdWVzIiwia2V5VmFsdWUiLCJkZWxldGUiLCJjb25zdGFudCIsImVudGVyR3JvdXAiLCJ1cGRhdGVHcm91cCIsImV4aXRHcm91cCIsImkwIiwiaTEiLCJfZXhpdCIsIm9uZW50ZXIiLCJvbnVwZGF0ZSIsIm9uZXhpdCIsInJlbW92ZSIsInNlbGVjdGlvbiIsImdyb3VwczAiLCJncm91cHMxIiwibTAiLCJtMSIsIm1lcmdlcyIsImdyb3VwMCIsImdyb3VwMSIsImFzY2VuZGluZyIsImNvbXBhcmVOb2RlIiwic29ydGdyb3VwcyIsInNvcnRncm91cCIsImF0dHJSZW1vdmUiLCJhdHRyUmVtb3ZlTlMiLCJyZW1vdmVBdHRyaWJ1dGVOUyIsImF0dHJDb25zdGFudCIsImF0dHJDb25zdGFudE5TIiwic2V0QXR0cmlidXRlTlMiLCJhdHRyRnVuY3Rpb24iLCJhdHRyRnVuY3Rpb25OUyIsImdldEF0dHJpYnV0ZU5TIiwic3R5bGVSZW1vdmUiLCJzdHlsZUNvbnN0YW50IiwicHJpb3JpdHkiLCJzdHlsZUZ1bmN0aW9uIiwic3R5bGVWYWx1ZSIsInByb3BlcnR5UmVtb3ZlIiwicHJvcGVydHlDb25zdGFudCIsInByb3BlcnR5RnVuY3Rpb24iLCJjbGFzc0FycmF5IiwiQ2xhc3NMaXN0IiwiX25vZGUiLCJfbmFtZXMiLCJjbGFzc2VkQWRkIiwiY2xhc3NlZFJlbW92ZSIsImNsYXNzZWRUcnVlIiwiY2xhc3NlZEZhbHNlIiwiY2xhc3NlZEZ1bmN0aW9uIiwidGV4dFJlbW92ZSIsInRleHRDb25zdGFudCIsInRleHRGdW5jdGlvbiIsImh0bWxSZW1vdmUiLCJodG1sQ29uc3RhbnQiLCJodG1sRnVuY3Rpb24iLCJyYWlzZSIsImZpcnN0Q2hpbGQiLCJjcmVhdG9yIiwiY29uc3RhbnROdWxsIiwic2VsZWN0aW9uX2Nsb25lU2hhbGxvdyIsImNsb25lIiwic2VsZWN0aW9uX2Nsb25lRGVlcCIsImNvbnRleHRMaXN0ZW5lciIsIm9uUmVtb3ZlIiwiX19vbiIsIm8iLCJvbkFkZCIsIkN1c3RvbUV2ZW50IiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJkZXRhaWwiLCJkaXNwYXRjaENvbnN0YW50IiwiZGlzcGF0Y2hGdW5jdGlvbiIsInNlbGVjdGlvbl9zZWxlY3Rpb24iLCJzZWxlY3Rpb25fc2VsZWN0Iiwic2VsZWN0aW9uX3NlbGVjdEFsbCIsInNlbGVjdENoaWxkIiwic2VsZWN0aW9uX3NlbGVjdENoaWxkIiwic2VsZWN0Q2hpbGRyZW4iLCJzZWxlY3Rpb25fc2VsZWN0Q2hpbGRyZW4iLCJzZWxlY3Rpb25fZmlsdGVyIiwic2VsZWN0aW9uX2RhdGEiLCJzZWxlY3Rpb25fZW50ZXIiLCJzZWxlY3Rpb25fZXhpdCIsInNlbGVjdGlvbl9qb2luIiwic2VsZWN0aW9uX21lcmdlIiwic2VsZWN0aW9uX29yZGVyIiwic2VsZWN0aW9uX3NvcnQiLCJzZWxlY3Rpb25fY2FsbCIsInNlbGVjdGlvbl9ub2RlcyIsInNlbGVjdGlvbl9ub2RlIiwic2VsZWN0aW9uX3NpemUiLCJzZWxlY3Rpb25fZW1wdHkiLCJzZWxlY3Rpb25fZWFjaCIsInNlbGVjdGlvbl9hdHRyIiwic2VsZWN0aW9uX3N0eWxlIiwic2VsZWN0aW9uX3Byb3BlcnR5IiwiY2xhc3NlZCIsInNlbGVjdGlvbl9jbGFzc2VkIiwic2VsZWN0aW9uX3RleHQiLCJzZWxlY3Rpb25faHRtbCIsInNlbGVjdGlvbl9yYWlzZSIsInNlbGVjdGlvbl9sb3dlciIsInNlbGVjdGlvbl9hcHBlbmQiLCJzZWxlY3Rpb25faW5zZXJ0Iiwic2VsZWN0aW9uX3JlbW92ZSIsInNlbGVjdGlvbl9jbG9uZSIsInNlbGVjdGlvbl9kYXR1bSIsInNlbGVjdGlvbl9vbiIsInNlbGVjdGlvbl9kaXNwYXRjaCIsInNlbGVjdGlvbl9pdGVyYXRvciIsImluaXRSYW5nZSIsImltcGxpY2l0Iiwib3JkaW5hbCIsInVua25vd24iLCJzcGVjaWZpZXIiLCJjb2xvcnMiLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJtaW5MZW4iLCJfYXJyYXlMaWtlVG9BcnJheSIsImFycjIiLCJfaSIsIl9hcnIiLCJfbiIsIl9kIiwiX3MiLCJfZSIsImRlZmF1bHRTY2FsZU9yZGluYWwiLCJzY2FsZU9yZGluYWwiLCJzY2hlbWVDYXRlZ29yeTEwIiwiV29yZENsb3VkIiwiX3JlZiIsIl9yZWYkd2lkdGgiLCJfcmVmJGhlaWdodCIsIl9yZWYkZm9udCIsIl9yZWYkZm9udFN0eWxlIiwiX3JlZiRmb250V2VpZ2h0IiwiX3JlZiRmb250U2l6ZSIsIl9yZWYkcm90YXRlIiwiX3JlZiRzcGlyYWwiLCJfcmVmJHBhZGRpbmciLCJfcmVmJHJhbmRvbSIsIl9yZWYkZmlsbCIsIm9uV29yZENsaWNrIiwib25Xb3JkTW91c2VPdmVyIiwib25Xb3JkTW91c2VPdXQiLCJlbGVtZW50UmVmIiwidXNlUmVmIiwiY3VycmVudCIsIlJlYWN0RmF1eERvbSIsImxheW91dCIsIl9sYXlvdXQkc2l6ZSIsIl9sYXlvdXQkc2l6ZTIiLCJ0ZXh0cyIsIl9wdCIsImlzRGVlcEVxdWFsIiwiV29yZENsb3VkV2lkZ2V0Q29tcG9uZW50IiwiaW5wdXREYXRhIiwiZm9udFNpemVNYXBwZXIiLCJ3b3JkIiwib25DbGlja0hhbmRsZSIsIm9uQ2xpY2tBY3Rpb24iLCJjYW5FeGVjdXRlIiwiaXNFeGVjdXRpbmciLCJjaG9zZW5Xb3JkIiwic2V0VmFsdWUiLCJleGVjdXRlIiwiV29yZENsb3VkV2lkZ2V0IiwibmV4dFByb3BzIiwiZGF0YVNvdXJjZSIsImRhdGFUb1JlbmRlciIsInRleHRBdHRyaWIiLCJpbnRBdHRyaWIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBSUEsS0FBSyxHQUFHLFVBQVVDLEVBQVYsRUFBYztBQUN4QixTQUFPQSxFQUFFLElBQUlBLEVBQUUsQ0FBQ0MsSUFBSCxJQUFXQSxJQUFqQixJQUF5QkQsRUFBaEM7QUFDRCxDQUZEOzs7SUFLQUUsUUFBQTtBQUVFSCxLQUFLLENBQUMsT0FBT0ksVUFBUCxJQUFxQixRQUFyQixJQUFpQ0EsVUFBbEMsQ0FBTCxJQUNBSixLQUFLLENBQUMsT0FBT0ssTUFBUCxJQUFpQixRQUFqQixJQUE2QkEsTUFBOUIsQ0FETDtBQUdBTCxLQUFLLENBQUMsT0FBT00sSUFBUCxJQUFlLFFBQWYsSUFBMkJBLElBQTVCLENBSEwsSUFJQU4sS0FBSyxDQUFDLE9BQU9PLGNBQVAsSUFBaUIsUUFBakIsSUFBNkJBLGNBQTlCLENBSkw7QUFNQyxZQUFZO0FBQUUsU0FBTyxJQUFQO0FBQWMsQ0FBN0IsRUFOQSxJQU1vQ0MsUUFBUSxDQUFDLGFBQUQsQ0FBUixFQVJ0Qzs7OztJQ0xBTCxRQUFBLEdBQWlCLFVBQVVNLElBQVYsRUFBZ0I7QUFDL0IsTUFBSTtBQUNGLFdBQU8sQ0FBQyxDQUFDQSxJQUFJLEVBQWI7QUFDRCxHQUZELENBRUUsT0FBT0MsS0FBUCxFQUFjO0FBQ2QsV0FBTyxJQUFQO0FBQ0Q7QUFDRixDQU5EOztBQ0FBLElBQUlDLFFBQUssR0FBR0MsUUFBWjs7O0lBR0FULFdBQUEsR0FBaUIsQ0FBQ1EsUUFBSyxDQUFDLFlBQVk7QUFDbEM7QUFDQSxTQUFPRSxNQUFNLENBQUNDLGNBQVAsQ0FBc0IsRUFBdEIsRUFBMEIsQ0FBMUIsRUFBNkI7QUFBRUMsSUFBQUEsR0FBRyxFQUFFLFlBQVk7QUFBRSxhQUFPLENBQVA7QUFBVztBQUFoQyxHQUE3QixFQUFpRSxDQUFqRSxLQUF1RSxDQUE5RTtBQUNELENBSHNCLENBQXZCOzs7O0FDRkEsSUFBSUMsdUJBQXFCLEdBQUcsR0FBR0Msb0JBQS9COztBQUVBLElBQUlDLDBCQUF3QixHQUFHTCxNQUFNLENBQUNLLHdCQUF0Qzs7QUFHQSxJQUFJQyxXQUFXLEdBQUdELDBCQUF3QixJQUFJLENBQUNGLHVCQUFxQixDQUFDSSxJQUF0QixDQUEyQjtBQUFFLEtBQUc7QUFBTCxDQUEzQixFQUFxQyxDQUFyQyxDQUEvQztBQUdBOzs0QkFDQSxHQUFZRCxXQUFXLEdBQUcsU0FBU0Ysb0JBQVQsQ0FBOEJJLENBQTlCLEVBQWlDO0FBQ3pELE1BQUlDLFVBQVUsR0FBR0osMEJBQXdCLENBQUMsSUFBRCxFQUFPRyxDQUFQLENBQXpDO0FBQ0EsU0FBTyxDQUFDLENBQUNDLFVBQUYsSUFBZ0JBLFVBQVUsQ0FBQ0MsVUFBbEM7QUFDRCxDQUhzQixHQUduQlA7O0lDYkpiLDBCQUFBLEdBQWlCLFVBQVVxQixNQUFWLEVBQWtCQyxLQUFsQixFQUF5QjtBQUN4QyxTQUFPO0FBQ0xGLElBQUFBLFVBQVUsRUFBRSxFQUFFQyxNQUFNLEdBQUcsQ0FBWCxDQURQO0FBRUxFLElBQUFBLFlBQVksRUFBRSxFQUFFRixNQUFNLEdBQUcsQ0FBWCxDQUZUO0FBR0xHLElBQUFBLFFBQVEsRUFBRSxFQUFFSCxNQUFNLEdBQUcsQ0FBWCxDQUhMO0FBSUxDLElBQUFBLEtBQUssRUFBRUE7QUFKRixHQUFQO0FBTUQsQ0FQRDs7QUNBQSxJQUFJRyxVQUFRLEdBQUcsR0FBR0EsUUFBbEI7O0lBRUF6QixZQUFBLEdBQWlCLFVBQVVGLEVBQVYsRUFBYztBQUM3QixTQUFPMkIsVUFBUSxDQUFDUixJQUFULENBQWNuQixFQUFkLEVBQWtCNEIsS0FBbEIsQ0FBd0IsQ0FBeEIsRUFBMkIsQ0FBQyxDQUE1QixDQUFQO0FBQ0QsQ0FGRDs7QUNGQSxJQUFJbEIsUUFBSyxHQUFHQyxRQUFaOztBQUNBLElBQUlrQixTQUFPLEdBQUdsQixZQUFkOztBQUVBLElBQUltQixLQUFLLEdBQUcsR0FBR0EsS0FBZjs7SUFHQTVCLGFBQUEsR0FBaUJRLFFBQUssQ0FBQyxZQUFZO0FBQ2pDO0FBQ0E7QUFDQSxTQUFPLENBQUNFLE1BQU0sQ0FBQyxHQUFELENBQU4sQ0FBWUksb0JBQVosQ0FBaUMsQ0FBakMsQ0FBUjtBQUNELENBSnFCLENBQUwsR0FJWixVQUFVaEIsRUFBVixFQUFjO0FBQ2pCLFNBQU82QixTQUFPLENBQUM3QixFQUFELENBQVAsSUFBZSxRQUFmLEdBQTBCOEIsS0FBSyxDQUFDWCxJQUFOLENBQVduQixFQUFYLEVBQWUsRUFBZixDQUExQixHQUErQ1ksTUFBTSxDQUFDWixFQUFELENBQTVEO0FBQ0QsQ0FOZ0IsR0FNYlksTUFOSjs7QUNOQTtBQUNBO0lBQ0FWLHdCQUFBLEdBQWlCLFVBQVVGLEVBQVYsRUFBYztBQUM3QixNQUFJQSxFQUFFLElBQUkrQixTQUFWLEVBQXFCLE1BQU1DLFNBQVMsQ0FBQywwQkFBMEJoQyxFQUEzQixDQUFmO0FBQ3JCLFNBQU9BLEVBQVA7QUFDRCxDQUhEOztBQ0ZBO0FBQ0EsSUFBSWlDLGVBQWEsR0FBR3RCLGFBQXBCOztBQUNBLElBQUl1Qix3QkFBc0IsR0FBR3ZCLHdCQUE3Qjs7SUFFQVQsaUJBQUEsR0FBaUIsVUFBVUYsRUFBVixFQUFjO0FBQzdCLFNBQU9pQyxlQUFhLENBQUNDLHdCQUFzQixDQUFDbEMsRUFBRCxDQUF2QixDQUFwQjtBQUNELENBRkQ7O0FDSkE7QUFDQTtJQUNBRSxZQUFBLEdBQWlCLFVBQVVpQyxRQUFWLEVBQW9CO0FBQ25DLFNBQU8sT0FBT0EsUUFBUCxLQUFvQixVQUEzQjtBQUNELENBRkQ7O0FDRkEsSUFBSUMsWUFBVSxHQUFHekIsWUFBakI7O0lBRUFULFVBQUEsR0FBaUIsVUFBVUYsRUFBVixFQUFjO0FBQzdCLFNBQU8sT0FBT0EsRUFBUCxLQUFjLFFBQWQsR0FBeUJBLEVBQUUsS0FBSyxJQUFoQyxHQUF1Q29DLFlBQVUsQ0FBQ3BDLEVBQUQsQ0FBeEQ7QUFDRCxDQUZEOztBQ0ZBLElBQUlNLFFBQU0sR0FBR0ssUUFBYjs7QUFDQSxJQUFJeUIsWUFBVSxHQUFHekIsWUFBakI7O0FBRUEsSUFBSTBCLFNBQVMsR0FBRyxVQUFVRixRQUFWLEVBQW9CO0FBQ2xDLFNBQU9DLFlBQVUsQ0FBQ0QsUUFBRCxDQUFWLEdBQXVCQSxRQUF2QixHQUFrQ0osU0FBekM7QUFDRCxDQUZEOztJQUlBN0IsWUFBQSxHQUFpQixVQUFVb0MsU0FBVixFQUFxQkMsTUFBckIsRUFBNkI7QUFDNUMsU0FBT0MsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCSixTQUFTLENBQUMvQixRQUFNLENBQUNnQyxTQUFELENBQVAsQ0FBaEMsR0FBc0RoQyxRQUFNLENBQUNnQyxTQUFELENBQU4sSUFBcUJoQyxRQUFNLENBQUNnQyxTQUFELENBQU4sQ0FBa0JDLE1BQWxCLENBQWxGO0FBQ0QsQ0FGRDs7QUNQQSxJQUFJRyxZQUFVLEdBQUcvQixZQUFqQjs7SUFFQVQsZUFBQSxHQUFpQndDLFlBQVUsQ0FBQyxXQUFELEVBQWMsV0FBZCxDQUFWLElBQXdDLEVBQXpEOztBQ0ZBLElBQUlwQyxRQUFNLEdBQUdLLFFBQWI7O0FBQ0EsSUFBSWdDLFdBQVMsR0FBR2hDLGVBQWhCOztBQUVBLElBQUlpQyxTQUFPLEdBQUd0QyxRQUFNLENBQUNzQyxPQUFyQjtBQUNBLElBQUlDLElBQUksR0FBR3ZDLFFBQU0sQ0FBQ3VDLElBQWxCO0FBQ0EsSUFBSUMsUUFBUSxHQUFHRixTQUFPLElBQUlBLFNBQU8sQ0FBQ0UsUUFBbkIsSUFBK0JELElBQUksSUFBSUEsSUFBSSxDQUFDRSxPQUEzRDtBQUNBLElBQUlDLEVBQUUsR0FBR0YsUUFBUSxJQUFJQSxRQUFRLENBQUNFLEVBQTlCO0FBQ0EsSUFBSUMsS0FBSixFQUFXRixPQUFYOztBQUVBLElBQUlDLEVBQUosRUFBUTtBQUNOQyxFQUFBQSxLQUFLLEdBQUdELEVBQUUsQ0FBQ2xCLEtBQUgsQ0FBUyxHQUFULENBQVI7QUFDQWlCLEVBQUFBLE9BQU8sR0FBR0UsS0FBSyxDQUFDLENBQUQsQ0FBTCxHQUFXLENBQVgsR0FBZSxDQUFmLEdBQW1CQSxLQUFLLENBQUMsQ0FBRCxDQUFMLEdBQVdBLEtBQUssQ0FBQyxDQUFELENBQTdDO0FBQ0QsQ0FIRCxNQUdPLElBQUlOLFdBQUosRUFBZTtBQUNwQk0sRUFBQUEsS0FBSyxHQUFHTixXQUFTLENBQUNNLEtBQVYsQ0FBZ0IsYUFBaEIsQ0FBUjs7QUFDQSxNQUFJLENBQUNBLEtBQUQsSUFBVUEsS0FBSyxDQUFDLENBQUQsQ0FBTCxJQUFZLEVBQTFCLEVBQThCO0FBQzVCQSxJQUFBQSxLQUFLLEdBQUdOLFdBQVMsQ0FBQ00sS0FBVixDQUFnQixlQUFoQixDQUFSO0FBQ0EsUUFBSUEsS0FBSixFQUFXRixPQUFPLEdBQUdFLEtBQUssQ0FBQyxDQUFELENBQWY7QUFDWjtBQUNGOztJQUVEL0MsZUFBQSxHQUFpQjZDLE9BQU8sSUFBSSxDQUFDQSxPQUE3Qjs7OztBQ25CQSxJQUFJRyxZQUFVLEdBQUd2QyxlQUFqQjs7QUFDQSxJQUFJRCxRQUFLLEdBQUdDLFFBQVo7OztJQUdBVCxjQUFBLEdBQWlCLENBQUMsQ0FBQ1UsTUFBTSxDQUFDdUMscUJBQVQsSUFBa0MsQ0FBQ3pDLFFBQUssQ0FBQyxZQUFZO0FBQ3BFLE1BQUkwQyxNQUFNLEdBQUdDLE1BQU0sRUFBbkIsQ0FEb0U7QUFHcEU7O0FBQ0EsU0FBTyxDQUFDQyxNQUFNLENBQUNGLE1BQUQsQ0FBUCxJQUFtQixFQUFFeEMsTUFBTSxDQUFDd0MsTUFBRCxDQUFOLFlBQTBCQyxNQUE1QixDQUFuQjtBQUVMLEdBQUNBLE1BQU0sQ0FBQ0UsSUFBUixJQUFnQkwsWUFBaEIsSUFBOEJBLFlBQVUsR0FBRyxFQUY3QztBQUdELENBUHdELENBQXpEOzs7O0FDSkEsSUFBSU0sZUFBYSxHQUFHN0MsY0FBcEI7O0lBRUFULGNBQUEsR0FBaUJzRCxlQUFhLElBQ3pCLENBQUNILE1BQU0sQ0FBQ0UsSUFESSxJQUVaLE9BQU9GLE1BQU0sQ0FBQ0ksUUFBZCxJQUEwQixRQUYvQjs7QUNIQSxJQUFJckIsWUFBVSxHQUFHekIsWUFBakI7O0FBQ0EsSUFBSStCLFlBQVUsR0FBRy9CLFlBQWpCOztBQUNBLElBQUkrQyxtQkFBaUIsR0FBRy9DLGNBQXhCOztJQUVBVCxVQUFBLEdBQWlCd0QsbUJBQWlCLEdBQUcsVUFBVTFELEVBQVYsRUFBYztBQUNqRCxTQUFPLE9BQU9BLEVBQVAsSUFBYSxRQUFwQjtBQUNELENBRmlDLEdBRTlCLFVBQVVBLEVBQVYsRUFBYztBQUNoQixNQUFJMkQsT0FBTyxHQUFHakIsWUFBVSxDQUFDLFFBQUQsQ0FBeEI7QUFDQSxTQUFPTixZQUFVLENBQUN1QixPQUFELENBQVYsSUFBdUIvQyxNQUFNLENBQUNaLEVBQUQsQ0FBTixZQUFzQjJELE9BQXBEO0FBQ0QsQ0FMRDs7SUNKQXpELGFBQUEsR0FBaUIsVUFBVWlDLFFBQVYsRUFBb0I7QUFDbkMsTUFBSTtBQUNGLFdBQU9tQixNQUFNLENBQUNuQixRQUFELENBQWI7QUFDRCxHQUZELENBRUUsT0FBTzFCLEtBQVAsRUFBYztBQUNkLFdBQU8sUUFBUDtBQUNEO0FBQ0YsQ0FORDs7QUNBQSxJQUFJMkIsWUFBVSxHQUFHekIsWUFBakI7O0FBQ0EsSUFBSWlELGFBQVcsR0FBR2pELGFBQWxCOzs7SUFHQVQsV0FBQSxHQUFpQixVQUFVaUMsUUFBVixFQUFvQjtBQUNuQyxNQUFJQyxZQUFVLENBQUNELFFBQUQsQ0FBZCxFQUEwQixPQUFPQSxRQUFQO0FBQzFCLFFBQU1ILFNBQVMsQ0FBQzRCLGFBQVcsQ0FBQ3pCLFFBQUQsQ0FBWCxHQUF3QixvQkFBekIsQ0FBZjtBQUNELENBSEQ7O0FDSkEsSUFBSTBCLFdBQVMsR0FBR2xELFdBQWhCO0FBR0E7OztJQUNBVCxXQUFBLEdBQWlCLFVBQVVrQixDQUFWLEVBQWEwQyxDQUFiLEVBQWdCO0FBQy9CLE1BQUlDLElBQUksR0FBRzNDLENBQUMsQ0FBQzBDLENBQUQsQ0FBWjtBQUNBLFNBQU9DLElBQUksSUFBSSxJQUFSLEdBQWVoQyxTQUFmLEdBQTJCOEIsV0FBUyxDQUFDRSxJQUFELENBQTNDO0FBQ0QsQ0FIRDs7QUNKQSxJQUFJM0IsWUFBVSxHQUFHekIsWUFBakI7O0FBQ0EsSUFBSXFELFVBQVEsR0FBR3JELFVBQWY7QUFHQTs7O0lBQ0FULHFCQUFBLEdBQWlCLFVBQVUrRCxLQUFWLEVBQWlCQyxJQUFqQixFQUF1QjtBQUN0QyxNQUFJQyxFQUFKLEVBQVFDLEdBQVI7QUFDQSxNQUFJRixJQUFJLEtBQUssUUFBVCxJQUFxQjlCLFlBQVUsQ0FBQytCLEVBQUUsR0FBR0YsS0FBSyxDQUFDdEMsUUFBWixDQUEvQixJQUF3RCxDQUFDcUMsVUFBUSxDQUFDSSxHQUFHLEdBQUdELEVBQUUsQ0FBQ2hELElBQUgsQ0FBUThDLEtBQVIsQ0FBUCxDQUFyRSxFQUE2RixPQUFPRyxHQUFQO0FBQzdGLE1BQUloQyxZQUFVLENBQUMrQixFQUFFLEdBQUdGLEtBQUssQ0FBQ0ksT0FBWixDQUFWLElBQWtDLENBQUNMLFVBQVEsQ0FBQ0ksR0FBRyxHQUFHRCxFQUFFLENBQUNoRCxJQUFILENBQVE4QyxLQUFSLENBQVAsQ0FBL0MsRUFBdUUsT0FBT0csR0FBUDtBQUN2RSxNQUFJRixJQUFJLEtBQUssUUFBVCxJQUFxQjlCLFlBQVUsQ0FBQytCLEVBQUUsR0FBR0YsS0FBSyxDQUFDdEMsUUFBWixDQUEvQixJQUF3RCxDQUFDcUMsVUFBUSxDQUFDSSxHQUFHLEdBQUdELEVBQUUsQ0FBQ2hELElBQUgsQ0FBUThDLEtBQVIsQ0FBUCxDQUFyRSxFQUE2RixPQUFPRyxHQUFQO0FBQzdGLFFBQU1wQyxTQUFTLENBQUMseUNBQUQsQ0FBZjtBQUNELENBTkQ7Ozs7SUNMQTlCLE1BQUEsR0FBaUIsS0FBakI7O0FDQUEsSUFBSUksUUFBTSxHQUFHSyxRQUFiOztJQUVBVCxXQUFBLEdBQWlCLFVBQVVvRSxHQUFWLEVBQWU5QyxLQUFmLEVBQXNCO0FBQ3JDLE1BQUk7QUFDRjtBQUNBWixJQUFBQSxNQUFNLENBQUNDLGNBQVAsQ0FBc0JQLFFBQXRCLEVBQThCZ0UsR0FBOUIsRUFBbUM7QUFBRTlDLE1BQUFBLEtBQUssRUFBRUEsS0FBVDtBQUFnQkMsTUFBQUEsWUFBWSxFQUFFLElBQTlCO0FBQW9DQyxNQUFBQSxRQUFRLEVBQUU7QUFBOUMsS0FBbkM7QUFDRCxHQUhELENBR0UsT0FBT2pCLEtBQVAsRUFBYztBQUNkSCxJQUFBQSxRQUFNLENBQUNnRSxHQUFELENBQU4sR0FBYzlDLEtBQWQ7QUFDRDs7QUFBQyxTQUFPQSxLQUFQO0FBQ0gsQ0FQRDs7QUNGQSxJQUFJbEIsUUFBTSxHQUFHSyxRQUFiOztBQUNBLElBQUk0RCxXQUFTLEdBQUc1RCxXQUFoQjs7QUFFQSxJQUFJNkQsTUFBTSxHQUFHLG9CQUFiO0FBQ0EsSUFBSUMsT0FBSyxHQUFHbkUsUUFBTSxDQUFDa0UsTUFBRCxDQUFOLElBQWtCRCxXQUFTLENBQUNDLE1BQUQsRUFBUyxFQUFULENBQXZDO0lBRUF0RSxXQUFBLEdBQWlCdUUsT0FBakI7O0FDTEEsSUFBSUEsT0FBSyxHQUFHOUQsV0FBWjs7QUFFQSxDQUFDVCxnQkFBQSxHQUFpQixVQUFVb0UsR0FBVixFQUFlOUMsS0FBZixFQUFzQjtBQUN0QyxTQUFPaUQsT0FBSyxDQUFDSCxHQUFELENBQUwsS0FBZUcsT0FBSyxDQUFDSCxHQUFELENBQUwsR0FBYTlDLEtBQUssS0FBS08sU0FBVixHQUFzQlAsS0FBdEIsR0FBOEIsRUFBMUQsQ0FBUDtBQUNELENBRkQsRUFFRyxVQUZILEVBRWUsRUFGZixFQUVtQmtELElBRm5CLENBRXdCO0FBQ3RCM0IsRUFBQUEsT0FBTyxFQUFFLFFBRGE7QUFFdEI0QixFQUFBQSxJQUFJLEVBQXFCLFFBRkg7QUFHdEJDLEVBQUFBLFNBQVMsRUFBRTtBQUhXLENBRnhCOztBQ0hBLElBQUkxQyx3QkFBc0IsR0FBR3ZCLHdCQUE3QjtBQUdBOzs7SUFDQVQsVUFBQSxHQUFpQixVQUFVaUMsUUFBVixFQUFvQjtBQUNuQyxTQUFPdkIsTUFBTSxDQUFDc0Isd0JBQXNCLENBQUNDLFFBQUQsQ0FBdkIsQ0FBYjtBQUNELENBRkQ7O0FDSkEsSUFBSTBDLFVBQVEsR0FBR2xFLFVBQWY7O0FBRUEsSUFBSW1FLGdCQUFjLEdBQUcsR0FBR0EsY0FBeEI7QUFHQTs7SUFDQTVFLGdCQUFBLEdBQWlCVSxNQUFNLENBQUNtRSxNQUFQLElBQWlCLFNBQVNBLE1BQVQsQ0FBZ0IvRSxFQUFoQixFQUFvQnNFLEdBQXBCLEVBQXlCO0FBQ3pELFNBQU9RLGdCQUFjLENBQUMzRCxJQUFmLENBQW9CMEQsVUFBUSxDQUFDN0UsRUFBRCxDQUE1QixFQUFrQ3NFLEdBQWxDLENBQVA7QUFDRCxDQUZEOztBQ05BLElBQUlVLElBQUUsR0FBRyxDQUFUO0FBQ0EsSUFBSUMsT0FBTyxHQUFHaEYsSUFBSSxDQUFDaUYsTUFBTCxFQUFkOztJQUVBaEYsS0FBQSxHQUFpQixVQUFVb0UsR0FBVixFQUFlO0FBQzlCLFNBQU8sWUFBWWhCLE1BQU0sQ0FBQ2dCLEdBQUcsS0FBS3ZDLFNBQVIsR0FBb0IsRUFBcEIsR0FBeUJ1QyxHQUExQixDQUFsQixHQUFtRCxJQUFuRCxHQUEwRCxDQUFDLEVBQUVVLElBQUYsR0FBT0MsT0FBUixFQUFpQnRELFFBQWpCLENBQTBCLEVBQTFCLENBQWpFO0FBQ0QsQ0FGRDs7QUNIQSxJQUFJckIsUUFBTSxHQUFHSyxRQUFiOztBQUNBLElBQUl3RSxRQUFNLEdBQUd4RSxnQkFBYjs7QUFDQSxJQUFJb0UsUUFBTSxHQUFHcEUsZ0JBQWI7O0FBQ0EsSUFBSXlFLEtBQUcsR0FBR3pFLEtBQVY7O0FBQ0EsSUFBSTZDLGVBQWEsR0FBRzdDLGNBQXBCOztBQUNBLElBQUkrQyxpQkFBaUIsR0FBRy9DLGNBQXhCOztBQUVBLElBQUkwRSx1QkFBcUIsR0FBR0YsUUFBTSxDQUFDLEtBQUQsQ0FBbEM7QUFDQSxJQUFJOUIsUUFBTSxHQUFHL0MsUUFBTSxDQUFDK0MsTUFBcEI7QUFDQSxJQUFJaUMscUJBQXFCLEdBQUc1QixpQkFBaUIsR0FBR0wsUUFBSCxHQUFZQSxRQUFNLElBQUlBLFFBQU0sQ0FBQ2tDLGFBQWpCLElBQWtDSCxLQUEzRjs7SUFFQWxGLGlCQUFBLEdBQWlCLFVBQVVzRixJQUFWLEVBQWdCO0FBQy9CLE1BQUksQ0FBQ1QsUUFBTSxDQUFDTSx1QkFBRCxFQUF3QkcsSUFBeEIsQ0FBUCxJQUF3QyxFQUFFaEMsZUFBYSxJQUFJLE9BQU82Qix1QkFBcUIsQ0FBQ0csSUFBRCxDQUE1QixJQUFzQyxRQUF6RCxDQUE1QyxFQUFnSDtBQUM5RyxRQUFJaEMsZUFBYSxJQUFJdUIsUUFBTSxDQUFDMUIsUUFBRCxFQUFTbUMsSUFBVCxDQUEzQixFQUEyQztBQUN6Q0gsTUFBQUEsdUJBQXFCLENBQUNHLElBQUQsQ0FBckIsR0FBOEJuQyxRQUFNLENBQUNtQyxJQUFELENBQXBDO0FBQ0QsS0FGRCxNQUVPO0FBQ0xILE1BQUFBLHVCQUFxQixDQUFDRyxJQUFELENBQXJCLEdBQThCRixxQkFBcUIsQ0FBQyxZQUFZRSxJQUFiLENBQW5EO0FBQ0Q7QUFDRjs7QUFBQyxTQUFPSCx1QkFBcUIsQ0FBQ0csSUFBRCxDQUE1QjtBQUNILENBUkQ7O0FDWEEsSUFBSXhCLFVBQVEsR0FBR3JELFVBQWY7O0FBQ0EsSUFBSThFLFVBQVEsR0FBRzlFLFVBQWY7O0FBQ0EsSUFBSStFLFdBQVMsR0FBRy9FLFdBQWhCOztBQUNBLElBQUlnRixxQkFBbUIsR0FBR2hGLHFCQUExQjs7QUFDQSxJQUFJaUYsaUJBQWUsR0FBR2pGLGlCQUF0Qjs7QUFFQSxJQUFJa0YsY0FBWSxHQUFHRCxpQkFBZSxDQUFDLGFBQUQsQ0FBbEM7QUFHQTs7SUFDQTFGLGFBQUEsR0FBaUIsVUFBVStELEtBQVYsRUFBaUJDLElBQWpCLEVBQXVCO0FBQ3RDLE1BQUksQ0FBQ0YsVUFBUSxDQUFDQyxLQUFELENBQVQsSUFBb0J3QixVQUFRLENBQUN4QixLQUFELENBQWhDLEVBQXlDLE9BQU9BLEtBQVA7QUFDekMsTUFBSTZCLFlBQVksR0FBR0osV0FBUyxDQUFDekIsS0FBRCxFQUFRNEIsY0FBUixDQUE1QjtBQUNBLE1BQUlFLE1BQUo7O0FBQ0EsTUFBSUQsWUFBSixFQUFrQjtBQUNoQixRQUFJNUIsSUFBSSxLQUFLbkMsU0FBYixFQUF3Qm1DLElBQUksR0FBRyxTQUFQO0FBQ3hCNkIsSUFBQUEsTUFBTSxHQUFHRCxZQUFZLENBQUMzRSxJQUFiLENBQWtCOEMsS0FBbEIsRUFBeUJDLElBQXpCLENBQVQ7QUFDQSxRQUFJLENBQUNGLFVBQVEsQ0FBQytCLE1BQUQsQ0FBVCxJQUFxQk4sVUFBUSxDQUFDTSxNQUFELENBQWpDLEVBQTJDLE9BQU9BLE1BQVA7QUFDM0MsVUFBTS9ELFNBQVMsQ0FBQyx5Q0FBRCxDQUFmO0FBQ0Q7O0FBQ0QsTUFBSWtDLElBQUksS0FBS25DLFNBQWIsRUFBd0JtQyxJQUFJLEdBQUcsUUFBUDtBQUN4QixTQUFPeUIscUJBQW1CLENBQUMxQixLQUFELEVBQVFDLElBQVIsQ0FBMUI7QUFDRCxDQVpEOztBQ1ZBLElBQUk4QixhQUFXLEdBQUdyRixhQUFsQjs7QUFDQSxJQUFJOEUsVUFBUSxHQUFHOUUsVUFBZjtBQUdBOzs7SUFDQVQsZUFBQSxHQUFpQixVQUFVaUMsUUFBVixFQUFvQjtBQUNuQyxNQUFJbUMsR0FBRyxHQUFHMEIsYUFBVyxDQUFDN0QsUUFBRCxFQUFXLFFBQVgsQ0FBckI7QUFDQSxTQUFPc0QsVUFBUSxDQUFDbkIsR0FBRCxDQUFSLEdBQWdCQSxHQUFoQixHQUFzQmhCLE1BQU0sQ0FBQ2dCLEdBQUQsQ0FBbkM7QUFDRCxDQUhEOztBQ0xBLElBQUloRSxRQUFNLEdBQUdLLFFBQWI7O0FBQ0EsSUFBSXFELFVBQVEsR0FBR3JELFVBQWY7O0FBRUEsSUFBSXNGLFVBQVEsR0FBRzNGLFFBQU0sQ0FBQzJGLFFBQXRCOztBQUVBLElBQUlDLFFBQU0sR0FBR2xDLFVBQVEsQ0FBQ2lDLFVBQUQsQ0FBUixJQUFzQmpDLFVBQVEsQ0FBQ2lDLFVBQVEsQ0FBQ0UsYUFBVixDQUEzQzs7SUFFQWpHLHVCQUFBLEdBQWlCLFVBQVVGLEVBQVYsRUFBYztBQUM3QixTQUFPa0csUUFBTSxHQUFHRCxVQUFRLENBQUNFLGFBQVQsQ0FBdUJuRyxFQUF2QixDQUFILEdBQWdDLEVBQTdDO0FBQ0QsQ0FGRDs7QUNQQSxJQUFJb0csYUFBVyxHQUFHekYsV0FBbEI7O0FBQ0EsSUFBSUQsUUFBSyxHQUFHQyxRQUFaOztBQUNBLElBQUl3RixlQUFhLEdBQUd4Rix1QkFBcEI7OztJQUdBVCxZQUFBLEdBQWlCLENBQUNrRyxhQUFELElBQWdCLENBQUMxRixRQUFLLENBQUMsWUFBWTtBQUNsRDtBQUNBLFNBQU9FLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQnNGLGVBQWEsQ0FBQyxLQUFELENBQW5DLEVBQTRDLEdBQTVDLEVBQWlEO0FBQ3REckYsSUFBQUEsR0FBRyxFQUFFLFlBQVk7QUFBRSxhQUFPLENBQVA7QUFBVztBQUR3QixHQUFqRCxFQUVKdUYsQ0FGSSxJQUVDLENBRlI7QUFHRCxDQUxzQyxDQUF2Qzs7QUNMQSxJQUFJRCxhQUFXLEdBQUd6RixXQUFsQjs7QUFDQSxJQUFJMkYsNEJBQTBCLEdBQUczRiwwQkFBakM7O0FBQ0EsSUFBSTRGLDBCQUF3QixHQUFHNUYsMEJBQS9COztBQUNBLElBQUk2RixpQkFBZSxHQUFHN0YsaUJBQXRCOztBQUNBLElBQUk4RixlQUFhLEdBQUc5RixlQUFwQjs7QUFDQSxJQUFJb0UsUUFBTSxHQUFHcEUsZ0JBQWI7O0FBQ0EsSUFBSStGLGdCQUFjLEdBQUcvRixZQUFyQjs7O0FBR0EsSUFBSWdHLDJCQUF5QixHQUFHL0YsTUFBTSxDQUFDSyx3QkFBdkM7QUFHQTs7Z0NBQ0EsR0FBWW1GLGFBQVcsR0FBR08sMkJBQUgsR0FBK0IsU0FBUzFGLHdCQUFULENBQWtDMkYsQ0FBbEMsRUFBcUM5QyxDQUFyQyxFQUF3QztBQUM1RjhDLEVBQUFBLENBQUMsR0FBR0osaUJBQWUsQ0FBQ0ksQ0FBRCxDQUFuQjtBQUNBOUMsRUFBQUEsQ0FBQyxHQUFHMkMsZUFBYSxDQUFDM0MsQ0FBRCxDQUFqQjtBQUNBLE1BQUk0QyxnQkFBSixFQUFvQixJQUFJO0FBQ3RCLFdBQU9DLDJCQUF5QixDQUFDQyxDQUFELEVBQUk5QyxDQUFKLENBQWhDO0FBQ0QsR0FGbUIsQ0FFbEIsT0FBT3JELEtBQVAsRUFBYztBQUFFO0FBQWE7QUFDL0IsTUFBSXNFLFFBQU0sQ0FBQzZCLENBQUQsRUFBSTlDLENBQUosQ0FBVixFQUFrQixPQUFPeUMsMEJBQXdCLENBQUMsQ0FBQ0QsNEJBQTBCLENBQUNPLENBQTNCLENBQTZCMUYsSUFBN0IsQ0FBa0N5RixDQUFsQyxFQUFxQzlDLENBQXJDLENBQUYsRUFBMkM4QyxDQUFDLENBQUM5QyxDQUFELENBQTVDLENBQS9CO0FBQ25COzs7O0FDcEJELElBQUlFLFVBQVEsR0FBR3JELFVBQWY7OztJQUdBVCxXQUFBLEdBQWlCLFVBQVVpQyxRQUFWLEVBQW9CO0FBQ25DLE1BQUk2QixVQUFRLENBQUM3QixRQUFELENBQVosRUFBd0IsT0FBT0EsUUFBUDtBQUN4QixRQUFNSCxTQUFTLENBQUNzQixNQUFNLENBQUNuQixRQUFELENBQU4sR0FBbUIsbUJBQXBCLENBQWY7QUFDRCxDQUhEOztBQ0hBLElBQUlpRSxhQUFXLEdBQUd6RixXQUFsQjs7QUFDQSxJQUFJK0YsY0FBYyxHQUFHL0YsWUFBckI7O0FBQ0EsSUFBSW1HLFdBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSThGLGVBQWEsR0FBRzlGLGVBQXBCOzs7QUFHQSxJQUFJb0csaUJBQWUsR0FBR25HLE1BQU0sQ0FBQ0MsY0FBN0I7QUFHQTs7c0JBQ0EsR0FBWXVGLGFBQVcsR0FBR1csaUJBQUgsR0FBcUIsU0FBU2xHLGNBQVQsQ0FBd0IrRixDQUF4QixFQUEyQjlDLENBQTNCLEVBQThCa0QsVUFBOUIsRUFBMEM7QUFDcEZGLEVBQUFBLFdBQVEsQ0FBQ0YsQ0FBRCxDQUFSO0FBQ0E5QyxFQUFBQSxDQUFDLEdBQUcyQyxlQUFhLENBQUMzQyxDQUFELENBQWpCO0FBQ0FnRCxFQUFBQSxXQUFRLENBQUNFLFVBQUQsQ0FBUjtBQUNBLE1BQUlOLGNBQUosRUFBb0IsSUFBSTtBQUN0QixXQUFPSyxpQkFBZSxDQUFDSCxDQUFELEVBQUk5QyxDQUFKLEVBQU9rRCxVQUFQLENBQXRCO0FBQ0QsR0FGbUIsQ0FFbEIsT0FBT3ZHLEtBQVAsRUFBYztBQUFFO0FBQWE7QUFDL0IsTUFBSSxTQUFTdUcsVUFBVCxJQUF1QixTQUFTQSxVQUFwQyxFQUFnRCxNQUFNaEYsU0FBUyxDQUFDLHlCQUFELENBQWY7QUFDaEQsTUFBSSxXQUFXZ0YsVUFBZixFQUEyQkosQ0FBQyxDQUFDOUMsQ0FBRCxDQUFELEdBQU9rRCxVQUFVLENBQUN4RixLQUFsQjtBQUMzQixTQUFPb0YsQ0FBUDtBQUNEOztBQ3BCRCxJQUFJUixhQUFXLEdBQUd6RixXQUFsQjs7QUFDQSxJQUFJc0csc0JBQW9CLEdBQUd0RyxvQkFBM0I7O0FBQ0EsSUFBSTRGLDBCQUF3QixHQUFHNUYsMEJBQS9COztJQUVBVCw2QkFBQSxHQUFpQmtHLGFBQVcsR0FBRyxVQUFVYyxNQUFWLEVBQWtCNUMsR0FBbEIsRUFBdUI5QyxLQUF2QixFQUE4QjtBQUMzRCxTQUFPeUYsc0JBQW9CLENBQUNKLENBQXJCLENBQXVCSyxNQUF2QixFQUErQjVDLEdBQS9CLEVBQW9DaUMsMEJBQXdCLENBQUMsQ0FBRCxFQUFJL0UsS0FBSixDQUE1RCxDQUFQO0FBQ0QsQ0FGMkIsR0FFeEIsVUFBVTBGLE1BQVYsRUFBa0I1QyxHQUFsQixFQUF1QjlDLEtBQXZCLEVBQThCO0FBQ2hDMEYsRUFBQUEsTUFBTSxDQUFDNUMsR0FBRCxDQUFOLEdBQWM5QyxLQUFkO0FBQ0EsU0FBTzBGLE1BQVA7QUFDRCxDQUxEOzs7O0FDSkEsSUFBSTlFLFlBQVUsR0FBR3pCLFlBQWpCOztBQUNBLElBQUk4RCxPQUFLLEdBQUc5RCxXQUFaOztBQUVBLElBQUl3RyxnQkFBZ0IsR0FBRzVHLFFBQVEsQ0FBQ29CLFFBQWhDOztBQUdBLElBQUksQ0FBQ1MsWUFBVSxDQUFDcUMsT0FBSyxDQUFDMkMsYUFBUCxDQUFmLEVBQXNDO0FBQ3BDM0MsRUFBQUEsT0FBSyxDQUFDMkMsYUFBTixHQUFzQixVQUFVcEgsRUFBVixFQUFjO0FBQ2xDLFdBQU9tSCxnQkFBZ0IsQ0FBQ2hHLElBQWpCLENBQXNCbkIsRUFBdEIsQ0FBUDtBQUNELEdBRkQ7QUFHRDs7SUFFREUsZUFBQSxHQUFpQnVFLE9BQUssQ0FBQzJDLGFBQXZCOztBQ1pBLElBQUk5RyxRQUFNLEdBQUdLLFFBQWI7O0FBQ0EsSUFBSXlCLFlBQVUsR0FBR3pCLFlBQWpCOztBQUNBLElBQUl5RyxlQUFhLEdBQUd6RyxlQUFwQjs7QUFFQSxJQUFJMEcsU0FBTyxHQUFHL0csUUFBTSxDQUFDK0csT0FBckI7SUFFQW5ILGFBQUEsR0FBaUJrQyxZQUFVLENBQUNpRixTQUFELENBQVYsSUFBdUIsY0FBY0MsSUFBZCxDQUFtQkYsZUFBYSxDQUFDQyxTQUFELENBQWhDLENBQXhDOztBQ05BLElBQUlsQyxRQUFNLEdBQUd4RSxnQkFBYjs7QUFDQSxJQUFJeUUsS0FBRyxHQUFHekUsS0FBVjs7QUFFQSxJQUFJNEcsTUFBSSxHQUFHcEMsUUFBTSxDQUFDLE1BQUQsQ0FBakI7O0lBRUFqRixXQUFBLEdBQWlCLFVBQVVvRSxHQUFWLEVBQWU7QUFDOUIsU0FBT2lELE1BQUksQ0FBQ2pELEdBQUQsQ0FBSixLQUFjaUQsTUFBSSxDQUFDakQsR0FBRCxDQUFKLEdBQVljLEtBQUcsQ0FBQ2QsR0FBRCxDQUE3QixDQUFQO0FBQ0QsQ0FGRDs7SUNMQXBFLFlBQUEsR0FBaUIsRUFBakI7O0FDQUEsSUFBSXNILGlCQUFlLEdBQUc3RyxhQUF0Qjs7QUFDQSxJQUFJTCxRQUFNLEdBQUdLLFFBQWI7O0FBQ0EsSUFBSXFELFVBQVEsR0FBR3JELFVBQWY7O0FBQ0EsSUFBSThHLDZCQUEyQixHQUFHOUcsNkJBQWxDOztBQUNBLElBQUlvRSxRQUFNLEdBQUdwRSxnQkFBYjs7QUFDQSxJQUFJd0UsUUFBTSxHQUFHeEUsV0FBYjs7QUFDQSxJQUFJK0csV0FBUyxHQUFHL0csV0FBaEI7O0FBQ0EsSUFBSWdILFlBQVUsR0FBR2hILFlBQWpCOztBQUVBLElBQUlpSCwwQkFBMEIsR0FBRyw0QkFBakM7QUFDQSxJQUFJUCxTQUFPLEdBQUcvRyxRQUFNLENBQUMrRyxPQUFyQjtBQUNBLElBQUlRLEtBQUosRUFBUy9HLEtBQVQsRUFBY2dILEtBQWQ7O0FBRUEsSUFBSUMsT0FBTyxHQUFHLFVBQVUvSCxFQUFWLEVBQWM7QUFDMUIsU0FBTzhILEtBQUcsQ0FBQzlILEVBQUQsQ0FBSCxHQUFVYyxLQUFHLENBQUNkLEVBQUQsQ0FBYixHQUFvQjZILEtBQUcsQ0FBQzdILEVBQUQsRUFBSyxFQUFMLENBQTlCO0FBQ0QsQ0FGRDs7QUFJQSxJQUFJZ0ksU0FBUyxHQUFHLFVBQVVDLElBQVYsRUFBZ0I7QUFDOUIsU0FBTyxVQUFVakksRUFBVixFQUFjO0FBQ25CLFFBQUlrSSxLQUFKOztBQUNBLFFBQUksQ0FBQ2xFLFVBQVEsQ0FBQ2hFLEVBQUQsQ0FBVCxJQUFpQixDQUFDa0ksS0FBSyxHQUFHcEgsS0FBRyxDQUFDZCxFQUFELENBQVosRUFBa0JtSSxJQUFsQixLQUEyQkYsSUFBaEQsRUFBc0Q7QUFDcEQsWUFBTWpHLFNBQVMsQ0FBQyw0QkFBNEJpRyxJQUE1QixHQUFtQyxXQUFwQyxDQUFmO0FBQ0Q7O0FBQUMsV0FBT0MsS0FBUDtBQUNILEdBTEQ7QUFNRCxDQVBEOztBQVNBLElBQUlWLGlCQUFlLElBQUlyQyxRQUFNLENBQUMrQyxLQUE5QixFQUFxQztBQUNuQyxNQUFJekQsT0FBSyxHQUFHVSxRQUFNLENBQUMrQyxLQUFQLEtBQWlCL0MsUUFBTSxDQUFDK0MsS0FBUCxHQUFlLElBQUliLFNBQUosRUFBaEMsQ0FBWjtBQUNBLE1BQUllLEtBQUssR0FBRzNELE9BQUssQ0FBQzNELEdBQWxCO0FBQ0EsTUFBSXVILEtBQUssR0FBRzVELE9BQUssQ0FBQ3FELEdBQWxCO0FBQ0EsTUFBSVEsS0FBSyxHQUFHN0QsT0FBSyxDQUFDb0QsR0FBbEI7O0FBQ0FBLEVBQUFBLEtBQUcsR0FBRyxVQUFVN0gsRUFBVixFQUFjdUksUUFBZCxFQUF3QjtBQUM1QixRQUFJRixLQUFLLENBQUNsSCxJQUFOLENBQVdzRCxPQUFYLEVBQWtCekUsRUFBbEIsQ0FBSixFQUEyQixNQUFNLElBQUlnQyxTQUFKLENBQWM0RiwwQkFBZCxDQUFOO0FBQzNCVyxJQUFBQSxRQUFRLENBQUNDLE1BQVQsR0FBa0J4SSxFQUFsQjtBQUNBc0ksSUFBQUEsS0FBSyxDQUFDbkgsSUFBTixDQUFXc0QsT0FBWCxFQUFrQnpFLEVBQWxCLEVBQXNCdUksUUFBdEI7QUFDQSxXQUFPQSxRQUFQO0FBQ0QsR0FMRDs7QUFNQXpILEVBQUFBLEtBQUcsR0FBRyxVQUFVZCxFQUFWLEVBQWM7QUFDbEIsV0FBT29JLEtBQUssQ0FBQ2pILElBQU4sQ0FBV3NELE9BQVgsRUFBa0J6RSxFQUFsQixLQUF5QixFQUFoQztBQUNELEdBRkQ7O0FBR0E4SCxFQUFBQSxLQUFHLEdBQUcsVUFBVTlILEVBQVYsRUFBYztBQUNsQixXQUFPcUksS0FBSyxDQUFDbEgsSUFBTixDQUFXc0QsT0FBWCxFQUFrQnpFLEVBQWxCLENBQVA7QUFDRCxHQUZEO0FBR0QsQ0FqQkQsTUFpQk87QUFDTCxNQUFJeUksS0FBSyxHQUFHZixXQUFTLENBQUMsT0FBRCxDQUFyQjtBQUNBQyxFQUFBQSxZQUFVLENBQUNjLEtBQUQsQ0FBVixHQUFvQixJQUFwQjs7QUFDQVosRUFBQUEsS0FBRyxHQUFHLFVBQVU3SCxFQUFWLEVBQWN1SSxRQUFkLEVBQXdCO0FBQzVCLFFBQUl4RCxRQUFNLENBQUMvRSxFQUFELEVBQUt5SSxLQUFMLENBQVYsRUFBdUIsTUFBTSxJQUFJekcsU0FBSixDQUFjNEYsMEJBQWQsQ0FBTjtBQUN2QlcsSUFBQUEsUUFBUSxDQUFDQyxNQUFULEdBQWtCeEksRUFBbEI7QUFDQXlILElBQUFBLDZCQUEyQixDQUFDekgsRUFBRCxFQUFLeUksS0FBTCxFQUFZRixRQUFaLENBQTNCO0FBQ0EsV0FBT0EsUUFBUDtBQUNELEdBTEQ7O0FBTUF6SCxFQUFBQSxLQUFHLEdBQUcsVUFBVWQsRUFBVixFQUFjO0FBQ2xCLFdBQU8rRSxRQUFNLENBQUMvRSxFQUFELEVBQUt5SSxLQUFMLENBQU4sR0FBb0J6SSxFQUFFLENBQUN5SSxLQUFELENBQXRCLEdBQWdDLEVBQXZDO0FBQ0QsR0FGRDs7QUFHQVgsRUFBQUEsS0FBRyxHQUFHLFVBQVU5SCxFQUFWLEVBQWM7QUFDbEIsV0FBTytFLFFBQU0sQ0FBQy9FLEVBQUQsRUFBS3lJLEtBQUwsQ0FBYjtBQUNELEdBRkQ7QUFHRDs7SUFFRHZJLGFBQUEsR0FBaUI7QUFDZjJILEVBQUFBLEdBQUcsRUFBRUEsS0FEVTtBQUVmL0csRUFBQUEsR0FBRyxFQUFFQSxLQUZVO0FBR2ZnSCxFQUFBQSxHQUFHLEVBQUVBLEtBSFU7QUFJZkMsRUFBQUEsT0FBTyxFQUFFQSxPQUpNO0FBS2ZDLEVBQUFBLFNBQVMsRUFBRUE7QUFMSSxDQUFqQjs7QUM1REEsSUFBSTVCLGFBQVcsR0FBR3pGLFdBQWxCOztBQUNBLElBQUlvRSxRQUFNLEdBQUdwRSxnQkFBYjs7QUFFQSxJQUFJK0gsbUJBQWlCLEdBQUduSSxRQUFRLENBQUNvSSxTQUFqQzs7QUFFQSxJQUFJQyxhQUFhLEdBQUd4QyxhQUFXLElBQUl4RixNQUFNLENBQUNLLHdCQUExQztBQUVBLElBQUlpRixNQUFNLEdBQUduQixRQUFNLENBQUMyRCxtQkFBRCxFQUFvQixNQUFwQixDQUFuQjs7QUFFQSxJQUFJRyxNQUFNLEdBQUczQyxNQUFNLElBQUssU0FBUzRDLFNBQVQsR0FBcUI7QUFBRTtBQUFhLENBQXJDLENBQXVDdEQsSUFBdkMsS0FBZ0QsV0FBdkU7O0FBQ0EsSUFBSXVELFlBQVksR0FBRzdDLE1BQU0sS0FBSyxDQUFDRSxhQUFELElBQWlCQSxhQUFXLElBQUl3QyxhQUFhLENBQUNGLG1CQUFELEVBQW9CLE1BQXBCLENBQWIsQ0FBeUNqSCxZQUE5RSxDQUF6QjtJQUVBdkIsWUFBQSxHQUFpQjtBQUNmZ0csRUFBQUEsTUFBTSxFQUFFQSxNQURPO0FBRWYyQyxFQUFBQSxNQUFNLEVBQUVBLE1BRk87QUFHZkUsRUFBQUEsWUFBWSxFQUFFQTtBQUhDLENBQWpCOztBQ1pBLElBQUl6SSxRQUFNLEdBQUdLLFFBQWI7O0FBQ0EsSUFBSXlCLFlBQVUsR0FBR3pCLFlBQWpCOztBQUNBLElBQUlvRSxRQUFNLEdBQUdwRSxnQkFBYjs7QUFDQSxJQUFJOEcsNkJBQTJCLEdBQUc5Ryw2QkFBbEM7O0FBQ0EsSUFBSTRELFdBQVMsR0FBRzVELFdBQWhCOztBQUNBLElBQUl5RyxlQUFhLEdBQUd6RyxlQUFwQjs7QUFDQSxJQUFJcUkscUJBQW1CLEdBQUdySSxhQUExQjs7QUFDQSxJQUFJc0ksNEJBQTBCLEdBQUd0SSxZQUFBLENBQXNDb0ksWUFBdkU7O0FBRUEsSUFBSUcsa0JBQWdCLEdBQUdGLHFCQUFtQixDQUFDbEksR0FBM0M7QUFDQSxJQUFJcUksc0JBQW9CLEdBQUdILHFCQUFtQixDQUFDakIsT0FBL0M7QUFDQSxJQUFJcUIsUUFBUSxHQUFHOUYsTUFBTSxDQUFDQSxNQUFELENBQU4sQ0FBZXhCLEtBQWYsQ0FBcUIsUUFBckIsQ0FBZjtBQUVBLENBQUM1QixrQkFBQSxHQUFpQixVQUFVMEcsQ0FBVixFQUFhdEMsR0FBYixFQUFrQjlDLEtBQWxCLEVBQXlCNkgsT0FBekIsRUFBa0M7QUFDbEQsTUFBSUMsTUFBTSxHQUFHRCxPQUFPLEdBQUcsQ0FBQyxDQUFDQSxPQUFPLENBQUNDLE1BQWIsR0FBc0IsS0FBMUM7QUFDQSxNQUFJQyxNQUFNLEdBQUdGLE9BQU8sR0FBRyxDQUFDLENBQUNBLE9BQU8sQ0FBQy9ILFVBQWIsR0FBMEIsS0FBOUM7QUFDQSxNQUFJa0ksV0FBVyxHQUFHSCxPQUFPLEdBQUcsQ0FBQyxDQUFDQSxPQUFPLENBQUNHLFdBQWIsR0FBMkIsS0FBcEQ7QUFDQSxNQUFJaEUsSUFBSSxHQUFHNkQsT0FBTyxJQUFJQSxPQUFPLENBQUM3RCxJQUFSLEtBQWlCekQsU0FBNUIsR0FBd0NzSCxPQUFPLENBQUM3RCxJQUFoRCxHQUF1RGxCLEdBQWxFO0FBQ0EsTUFBSTRELEtBQUo7O0FBQ0EsTUFBSTlGLFlBQVUsQ0FBQ1osS0FBRCxDQUFkLEVBQXVCO0FBQ3JCLFFBQUk4QixNQUFNLENBQUNrQyxJQUFELENBQU4sQ0FBYTVELEtBQWIsQ0FBbUIsQ0FBbkIsRUFBc0IsQ0FBdEIsTUFBNkIsU0FBakMsRUFBNEM7QUFDMUM0RCxNQUFBQSxJQUFJLEdBQUcsTUFBTWxDLE1BQU0sQ0FBQ2tDLElBQUQsQ0FBTixDQUFhaUUsT0FBYixDQUFxQixvQkFBckIsRUFBMkMsSUFBM0MsQ0FBTixHQUF5RCxHQUFoRTtBQUNEOztBQUNELFFBQUksQ0FBQzFFLFFBQU0sQ0FBQ3ZELEtBQUQsRUFBUSxNQUFSLENBQVAsSUFBMkJ5SCw0QkFBMEIsSUFBSXpILEtBQUssQ0FBQ2dFLElBQU4sS0FBZUEsSUFBNUUsRUFBbUY7QUFDakZpQyxNQUFBQSw2QkFBMkIsQ0FBQ2pHLEtBQUQsRUFBUSxNQUFSLEVBQWdCZ0UsSUFBaEIsQ0FBM0I7QUFDRDs7QUFDRDBDLElBQUFBLEtBQUssR0FBR2lCLHNCQUFvQixDQUFDM0gsS0FBRCxDQUE1Qjs7QUFDQSxRQUFJLENBQUMwRyxLQUFLLENBQUN3QixNQUFYLEVBQW1CO0FBQ2pCeEIsTUFBQUEsS0FBSyxDQUFDd0IsTUFBTixHQUFlTixRQUFRLENBQUNPLElBQVQsQ0FBYyxPQUFPbkUsSUFBUCxJQUFlLFFBQWYsR0FBMEJBLElBQTFCLEdBQWlDLEVBQS9DLENBQWY7QUFDRDtBQUNGOztBQUNELE1BQUlvQixDQUFDLEtBQUt0RyxRQUFWLEVBQWtCO0FBQ2hCLFFBQUlpSixNQUFKLEVBQVkzQyxDQUFDLENBQUN0QyxHQUFELENBQUQsR0FBUzlDLEtBQVQsQ0FBWixLQUNLK0MsV0FBUyxDQUFDRCxHQUFELEVBQU05QyxLQUFOLENBQVQ7QUFDTDtBQUNELEdBSkQsTUFJTyxJQUFJLENBQUM4SCxNQUFMLEVBQWE7QUFDbEIsV0FBTzFDLENBQUMsQ0FBQ3RDLEdBQUQsQ0FBUjtBQUNELEdBRk0sTUFFQSxJQUFJLENBQUNrRixXQUFELElBQWdCNUMsQ0FBQyxDQUFDdEMsR0FBRCxDQUFyQixFQUE0QjtBQUNqQ2lGLElBQUFBLE1BQU0sR0FBRyxJQUFUO0FBQ0Q7O0FBQ0QsTUFBSUEsTUFBSixFQUFZM0MsQ0FBQyxDQUFDdEMsR0FBRCxDQUFELEdBQVM5QyxLQUFULENBQVosS0FDS2lHLDZCQUEyQixDQUFDYixDQUFELEVBQUl0QyxHQUFKLEVBQVM5QyxLQUFULENBQTNCLENBNUI2QztBQThCbkQsQ0E5QkQsRUE4QkdqQixRQUFRLENBQUNvSSxTQTlCWixFQThCdUIsVUE5QnZCLEVBOEJtQyxTQUFTaEgsUUFBVCxHQUFvQjtBQUNyRCxTQUFPUyxZQUFVLENBQUMsSUFBRCxDQUFWLElBQW9COEcsa0JBQWdCLENBQUMsSUFBRCxDQUFoQixDQUF1QlEsTUFBM0MsSUFBcUR0QyxlQUFhLENBQUMsSUFBRCxDQUF6RTtBQUNELENBaENEOzs7O0FDYkEsSUFBSXdDLE1BQUksR0FBRzNKLElBQUksQ0FBQzJKLElBQWhCO0FBQ0EsSUFBSUMsT0FBSyxHQUFHNUosSUFBSSxDQUFDNEosS0FBakI7QUFHQTs7SUFDQTNKLHFCQUFBLEdBQWlCLFVBQVVpQyxRQUFWLEVBQW9CO0FBQ25DLE1BQUkySCxNQUFNLEdBQUcsQ0FBQzNILFFBQWQsQ0FEbUM7O0FBR25DLFNBQU8ySCxNQUFNLEtBQUtBLE1BQVgsSUFBcUJBLE1BQU0sS0FBSyxDQUFoQyxHQUFvQyxDQUFwQyxHQUF3QyxDQUFDQSxNQUFNLEdBQUcsQ0FBVCxHQUFhRCxPQUFiLEdBQXFCRCxNQUF0QixFQUE0QkUsTUFBNUIsQ0FBL0M7QUFDRCxDQUpEOztBQ0xBLElBQUlDLHFCQUFtQixHQUFHcEoscUJBQTFCOztBQUVBLElBQUlxSixLQUFHLEdBQUcvSixJQUFJLENBQUMrSixHQUFmO0FBQ0EsSUFBSUMsS0FBRyxHQUFHaEssSUFBSSxDQUFDZ0ssR0FBZjtBQUdBO0FBQ0E7O0lBQ0EvSixpQkFBQSxHQUFpQixVQUFVZ0ssS0FBVixFQUFpQnpILE1BQWpCLEVBQXlCO0FBQ3hDLE1BQUkwSCxPQUFPLEdBQUdKLHFCQUFtQixDQUFDRyxLQUFELENBQWpDO0FBQ0EsU0FBT0MsT0FBTyxHQUFHLENBQVYsR0FBY0gsS0FBRyxDQUFDRyxPQUFPLEdBQUcxSCxNQUFYLEVBQW1CLENBQW5CLENBQWpCLEdBQXlDd0gsS0FBRyxDQUFDRSxPQUFELEVBQVUxSCxNQUFWLENBQW5EO0FBQ0QsQ0FIRDs7QUNSQSxJQUFJc0gscUJBQW1CLEdBQUdwSixxQkFBMUI7O0FBRUEsSUFBSXNKLEtBQUcsR0FBR2hLLElBQUksQ0FBQ2dLLEdBQWY7QUFHQTs7SUFDQS9KLFVBQUEsR0FBaUIsVUFBVWlDLFFBQVYsRUFBb0I7QUFDbkMsU0FBT0EsUUFBUSxHQUFHLENBQVgsR0FBZThILEtBQUcsQ0FBQ0YscUJBQW1CLENBQUM1SCxRQUFELENBQXBCLEVBQWdDLGdCQUFoQyxDQUFsQixHQUFzRSxDQUE3RSxDQURtQztBQUVwQyxDQUZEOztBQ05BLElBQUlpSSxVQUFRLEdBQUd6SixVQUFmO0FBR0E7OztJQUNBVCxtQkFBQSxHQUFpQixVQUFVbUssR0FBVixFQUFlO0FBQzlCLFNBQU9ELFVBQVEsQ0FBQ0MsR0FBRyxDQUFDNUgsTUFBTCxDQUFmO0FBQ0QsQ0FGRDs7QUNKQSxJQUFJK0QsaUJBQWUsR0FBRzdGLGlCQUF0Qjs7QUFDQSxJQUFJMkosaUJBQWUsR0FBRzNKLGlCQUF0Qjs7QUFDQSxJQUFJNEosbUJBQWlCLEdBQUc1SixtQkFBeEI7OztBQUdBLElBQUk2SixjQUFZLEdBQUcsVUFBVUMsV0FBVixFQUF1QjtBQUN4QyxTQUFPLFVBQVVDLEtBQVYsRUFBaUJDLEVBQWpCLEVBQXFCQyxTQUFyQixFQUFnQztBQUNyQyxRQUFJaEUsQ0FBQyxHQUFHSixpQkFBZSxDQUFDa0UsS0FBRCxDQUF2QjtBQUNBLFFBQUlqSSxNQUFNLEdBQUc4SCxtQkFBaUIsQ0FBQzNELENBQUQsQ0FBOUI7QUFDQSxRQUFJc0QsS0FBSyxHQUFHSSxpQkFBZSxDQUFDTSxTQUFELEVBQVluSSxNQUFaLENBQTNCO0FBQ0EsUUFBSWpCLEtBQUosQ0FKcUM7QUFNckM7O0FBQ0EsUUFBSWlKLFdBQVcsSUFBSUUsRUFBRSxJQUFJQSxFQUF6QixFQUE2QixPQUFPbEksTUFBTSxHQUFHeUgsS0FBaEIsRUFBdUI7QUFDbEQxSSxNQUFBQSxLQUFLLEdBQUdvRixDQUFDLENBQUNzRCxLQUFLLEVBQU4sQ0FBVCxDQURrRDs7QUFHbEQsVUFBSTFJLEtBQUssSUFBSUEsS0FBYixFQUFvQixPQUFPLElBQVAsQ0FIOEI7QUFLbkQsS0FMRCxNQUtPLE9BQU1pQixNQUFNLEdBQUd5SCxLQUFmLEVBQXNCQSxLQUFLLEVBQTNCLEVBQStCO0FBQ3BDLFVBQUksQ0FBQ08sV0FBVyxJQUFJUCxLQUFLLElBQUl0RCxDQUF6QixLQUErQkEsQ0FBQyxDQUFDc0QsS0FBRCxDQUFELEtBQWFTLEVBQWhELEVBQW9ELE9BQU9GLFdBQVcsSUFBSVAsS0FBZixJQUF3QixDQUEvQjtBQUNyRDtBQUFDLFdBQU8sQ0FBQ08sV0FBRCxJQUFnQixDQUFDLENBQXhCO0FBQ0gsR0FmRDtBQWdCRCxDQWpCRDs7SUFtQkF2SyxhQUFBLEdBQWlCO0FBQ2Y7QUFDQTtBQUNBMkssRUFBQUEsUUFBUSxFQUFFTCxjQUFZLENBQUMsSUFBRCxDQUhQO0FBSWY7QUFDQTtBQUNBTSxFQUFBQSxPQUFPLEVBQUVOLGNBQVksQ0FBQyxLQUFEO0FBTk4sQ0FBakI7O0FDeEJBLElBQUl6RixRQUFNLEdBQUdwRSxnQkFBYjs7QUFDQSxJQUFJNkYsaUJBQWUsR0FBRzdGLGlCQUF0Qjs7QUFDQSxJQUFJbUssT0FBTyxHQUFHbkssYUFBQSxDQUF1Q21LLE9BQXJEOztBQUNBLElBQUluRCxZQUFVLEdBQUdoSCxZQUFqQjs7SUFFQVQsa0JBQUEsR0FBaUIsVUFBVWdILE1BQVYsRUFBa0I2RCxLQUFsQixFQUF5QjtBQUN4QyxNQUFJbkUsQ0FBQyxHQUFHSixpQkFBZSxDQUFDVSxNQUFELENBQXZCO0FBQ0EsTUFBSThELENBQUMsR0FBRyxDQUFSO0FBQ0EsTUFBSWpGLE1BQU0sR0FBRyxFQUFiO0FBQ0EsTUFBSXpCLEdBQUo7O0FBQ0EsT0FBS0EsR0FBTCxJQUFZc0MsQ0FBWixFQUFlLENBQUM3QixRQUFNLENBQUM0QyxZQUFELEVBQWFyRCxHQUFiLENBQVAsSUFBNEJTLFFBQU0sQ0FBQzZCLENBQUQsRUFBSXRDLEdBQUosQ0FBbEMsSUFBOEN5QixNQUFNLENBQUNyQixJQUFQLENBQVlKLEdBQVosQ0FBOUMsQ0FMeUI7OztBQU94QyxTQUFPeUcsS0FBSyxDQUFDdEksTUFBTixHQUFldUksQ0FBdEIsRUFBeUIsSUFBSWpHLFFBQU0sQ0FBQzZCLENBQUQsRUFBSXRDLEdBQUcsR0FBR3lHLEtBQUssQ0FBQ0MsQ0FBQyxFQUFGLENBQWYsQ0FBVixFQUFpQztBQUN4RCxLQUFDRixPQUFPLENBQUMvRSxNQUFELEVBQVN6QixHQUFULENBQVIsSUFBeUJ5QixNQUFNLENBQUNyQixJQUFQLENBQVlKLEdBQVosQ0FBekI7QUFDRDs7QUFDRCxTQUFPeUIsTUFBUDtBQUNELENBWEQ7O0FDTEE7SUFDQTdGLGFBQUEsR0FBaUIsQ0FDZixhQURlLEVBRWYsZ0JBRmUsRUFHZixlQUhlLEVBSWYsc0JBSmUsRUFLZixnQkFMZSxFQU1mLFVBTmUsRUFPZixTQVBlLENBQWpCOztBQ0RBLElBQUkrSyxvQkFBa0IsR0FBR3RLLGtCQUF6Qjs7QUFDQSxJQUFJdUssYUFBVyxHQUFHdkssYUFBbEI7O0FBRUEsSUFBSWdILFlBQVUsR0FBR3VELGFBQVcsQ0FBQ0MsTUFBWixDQUFtQixRQUFuQixFQUE2QixXQUE3QixDQUFqQjtBQUdBO0FBQ0E7OzJCQUNBLEdBQVl2SyxNQUFNLENBQUN3SyxtQkFBUCxJQUE4QixTQUFTQSxtQkFBVCxDQUE2QnhFLENBQTdCLEVBQWdDO0FBQ3hFLFNBQU9xRSxvQkFBa0IsQ0FBQ3JFLENBQUQsRUFBSWUsWUFBSixDQUF6QjtBQUNEOzs7O0FDVkQ7NkJBQ0EsR0FBWS9HLE1BQU0sQ0FBQ3VDOztBQ0RuQixJQUFJVCxZQUFVLEdBQUcvQixZQUFqQjs7QUFDQSxJQUFJMEssMkJBQXlCLEdBQUcxSyx5QkFBaEM7O0FBQ0EsSUFBSTJLLDZCQUEyQixHQUFHM0ssMkJBQWxDOztBQUNBLElBQUltRyxXQUFRLEdBQUduRyxXQUFmOzs7SUFHQVQsU0FBQSxHQUFpQndDLFlBQVUsQ0FBQyxTQUFELEVBQVksU0FBWixDQUFWLElBQW9DLFNBQVM2SSxPQUFULENBQWlCdkwsRUFBakIsRUFBcUI7QUFDeEUsTUFBSXVILElBQUksR0FBRzhELDJCQUF5QixDQUFDeEUsQ0FBMUIsQ0FBNEJDLFdBQVEsQ0FBQzlHLEVBQUQsQ0FBcEMsQ0FBWDtBQUNBLE1BQUltRCxxQkFBcUIsR0FBR21JLDZCQUEyQixDQUFDekUsQ0FBeEQ7QUFDQSxTQUFPMUQscUJBQXFCLEdBQUdvRSxJQUFJLENBQUM0RCxNQUFMLENBQVloSSxxQkFBcUIsQ0FBQ25ELEVBQUQsQ0FBakMsQ0FBSCxHQUE0Q3VILElBQXhFO0FBQ0QsQ0FKRDs7QUNOQSxJQUFJeEMsUUFBTSxHQUFHcEUsZ0JBQWI7O0FBQ0EsSUFBSTRLLFNBQU8sR0FBRzVLLFNBQWQ7O0FBQ0EsSUFBSTZLLGdDQUE4QixHQUFHN0ssOEJBQXJDOztBQUNBLElBQUlzRyxzQkFBb0IsR0FBR3RHLG9CQUEzQjs7SUFFQVQsMkJBQUEsR0FBaUIsVUFBVXVMLE1BQVYsRUFBa0IvQixNQUFsQixFQUEwQjtBQUN6QyxNQUFJbkMsSUFBSSxHQUFHZ0UsU0FBTyxDQUFDN0IsTUFBRCxDQUFsQjtBQUNBLE1BQUk3SSxjQUFjLEdBQUdvRyxzQkFBb0IsQ0FBQ0osQ0FBMUM7QUFDQSxNQUFJNUYsd0JBQXdCLEdBQUd1SyxnQ0FBOEIsQ0FBQzNFLENBQTlEOztBQUNBLE9BQUssSUFBSW1FLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUd6RCxJQUFJLENBQUM5RSxNQUF6QixFQUFpQ3VJLENBQUMsRUFBbEMsRUFBc0M7QUFDcEMsUUFBSTFHLEdBQUcsR0FBR2lELElBQUksQ0FBQ3lELENBQUQsQ0FBZDtBQUNBLFFBQUksQ0FBQ2pHLFFBQU0sQ0FBQzBHLE1BQUQsRUFBU25ILEdBQVQsQ0FBWCxFQUEwQnpELGNBQWMsQ0FBQzRLLE1BQUQsRUFBU25ILEdBQVQsRUFBY3JELHdCQUF3QixDQUFDeUksTUFBRCxFQUFTcEYsR0FBVCxDQUF0QyxDQUFkO0FBQzNCO0FBQ0YsQ0FSRDs7QUNMQSxJQUFJNUQsUUFBSyxHQUFHQyxRQUFaOztBQUNBLElBQUl5QixZQUFVLEdBQUd6QixZQUFqQjs7QUFFQSxJQUFJK0ssV0FBVyxHQUFHLGlCQUFsQjs7QUFFQSxJQUFJQyxVQUFRLEdBQUcsVUFBVUMsT0FBVixFQUFtQkMsU0FBbkIsRUFBOEI7QUFDM0MsTUFBSXJLLEtBQUssR0FBR3NLLElBQUksQ0FBQ0MsV0FBUyxDQUFDSCxPQUFELENBQVYsQ0FBaEI7QUFDQSxTQUFPcEssS0FBSyxJQUFJd0ssUUFBVCxHQUFvQixJQUFwQixHQUNIeEssS0FBSyxJQUFJeUssTUFBVCxHQUFrQixLQUFsQixHQUNBN0osWUFBVSxDQUFDeUosU0FBRCxDQUFWLEdBQXdCbkwsUUFBSyxDQUFDbUwsU0FBRCxDQUE3QixHQUNBLENBQUMsQ0FBQ0EsU0FITjtBQUlELENBTkQ7O0FBUUEsSUFBSUUsV0FBUyxHQUFHSixVQUFRLENBQUNJLFNBQVQsR0FBcUIsVUFBVUcsTUFBVixFQUFrQjtBQUNyRCxTQUFPNUksTUFBTSxDQUFDNEksTUFBRCxDQUFOLENBQWV6QyxPQUFmLENBQXVCaUMsV0FBdkIsRUFBb0MsR0FBcEMsRUFBeUNTLFdBQXpDLEVBQVA7QUFDRCxDQUZEOztBQUlBLElBQUlMLElBQUksR0FBR0gsVUFBUSxDQUFDRyxJQUFULEdBQWdCLEVBQTNCO0FBQ0EsSUFBSUcsTUFBTSxHQUFHTixVQUFRLENBQUNNLE1BQVQsR0FBa0IsR0FBL0I7QUFDQSxJQUFJRCxRQUFRLEdBQUdMLFVBQVEsQ0FBQ0ssUUFBVCxHQUFvQixHQUFuQztJQUVBOUwsVUFBQSxHQUFpQnlMLFVBQWpCOztBQ3JCQSxJQUFJckwsUUFBTSxHQUFHSyxRQUFiOztBQUNBLElBQUlNLDBCQUF3QixHQUFHTiw4QkFBQSxDQUEyRGtHLENBQTFGOztBQUNBLElBQUlZLDZCQUEyQixHQUFHOUcsNkJBQWxDOztBQUNBLElBQUl5TCxVQUFRLEdBQUd6TCxrQkFBZjs7QUFDQSxJQUFJNEQsU0FBUyxHQUFHNUQsV0FBaEI7O0FBQ0EsSUFBSTBMLDJCQUF5QixHQUFHMUwsMkJBQWhDOztBQUNBLElBQUlnTCxVQUFRLEdBQUdoTCxVQUFmO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7SUFDQVQsT0FBQSxHQUFpQixVQUFVbUosT0FBVixFQUFtQkssTUFBbkIsRUFBMkI7QUFDMUMsTUFBSTRDLE1BQU0sR0FBR2pELE9BQU8sQ0FBQ29DLE1BQXJCO0FBQ0EsTUFBSWMsTUFBTSxHQUFHbEQsT0FBTyxDQUFDL0ksTUFBckI7QUFDQSxNQUFJa00sTUFBTSxHQUFHbkQsT0FBTyxDQUFDb0QsSUFBckI7QUFDQSxNQUFJQyxNQUFKLEVBQVlqQixNQUFaLEVBQW9CbkgsR0FBcEIsRUFBeUJxSSxjQUF6QixFQUF5Q0MsY0FBekMsRUFBeUR2TCxVQUF6RDs7QUFDQSxNQUFJa0wsTUFBSixFQUFZO0FBQ1ZkLElBQUFBLE1BQU0sR0FBR25MLFFBQVQ7QUFDRCxHQUZELE1BRU8sSUFBSWtNLE1BQUosRUFBWTtBQUNqQmYsSUFBQUEsTUFBTSxHQUFHbkwsUUFBTSxDQUFDZ00sTUFBRCxDQUFOLElBQWtCL0gsU0FBUyxDQUFDK0gsTUFBRCxFQUFTLEVBQVQsQ0FBcEM7QUFDRCxHQUZNLE1BRUE7QUFDTGIsSUFBQUEsTUFBTSxHQUFHLENBQUNuTCxRQUFNLENBQUNnTSxNQUFELENBQU4sSUFBa0IsRUFBbkIsRUFBdUIzRCxTQUFoQztBQUNEOztBQUNELE1BQUk4QyxNQUFKLEVBQVksS0FBS25ILEdBQUwsSUFBWW9GLE1BQVosRUFBb0I7QUFDOUJrRCxJQUFBQSxjQUFjLEdBQUdsRCxNQUFNLENBQUNwRixHQUFELENBQXZCOztBQUNBLFFBQUkrRSxPQUFPLENBQUNHLFdBQVosRUFBeUI7QUFDdkJuSSxNQUFBQSxVQUFVLEdBQUdKLDBCQUF3QixDQUFDd0ssTUFBRCxFQUFTbkgsR0FBVCxDQUFyQztBQUNBcUksTUFBQUEsY0FBYyxHQUFHdEwsVUFBVSxJQUFJQSxVQUFVLENBQUNHLEtBQTFDO0FBQ0QsS0FIRCxNQUdPbUwsY0FBYyxHQUFHbEIsTUFBTSxDQUFDbkgsR0FBRCxDQUF2Qjs7QUFDUG9JLElBQUFBLE1BQU0sR0FBR2YsVUFBUSxDQUFDWSxNQUFNLEdBQUdqSSxHQUFILEdBQVNnSSxNQUFNLElBQUlFLE1BQU0sR0FBRyxHQUFILEdBQVMsR0FBbkIsQ0FBTixHQUFnQ2xJLEdBQWhELEVBQXFEK0UsT0FBTyxDQUFDd0QsTUFBN0QsQ0FBakIsQ0FOOEI7O0FBUTlCLFFBQUksQ0FBQ0gsTUFBRCxJQUFXQyxjQUFjLEtBQUs1SyxTQUFsQyxFQUE2QztBQUMzQyxVQUFJLE9BQU82SyxjQUFQLEtBQTBCLE9BQU9ELGNBQXJDLEVBQXFEO0FBQ3JETixNQUFBQSwyQkFBeUIsQ0FBQ08sY0FBRCxFQUFpQkQsY0FBakIsQ0FBekI7QUFDRCxLQVg2Qjs7O0FBYTlCLFFBQUl0RCxPQUFPLENBQUM5RixJQUFSLElBQWlCb0osY0FBYyxJQUFJQSxjQUFjLENBQUNwSixJQUF0RCxFQUE2RDtBQUMzRGtFLE1BQUFBLDZCQUEyQixDQUFDbUYsY0FBRCxFQUFpQixNQUFqQixFQUF5QixJQUF6QixDQUEzQjtBQUNELEtBZjZCOzs7QUFpQjlCUixJQUFBQSxVQUFRLENBQUNYLE1BQUQsRUFBU25ILEdBQVQsRUFBY3NJLGNBQWQsRUFBOEJ2RCxPQUE5QixDQUFSO0FBQ0Q7QUFDRixDQS9CRDs7QUN2QkEsSUFBSXhILFNBQU8sR0FBR2xCLFlBQWQ7QUFHQTtBQUNBOzs7SUFDQVQsU0FBQSxHQUFpQjRNLEtBQUssQ0FBQ0MsT0FBTixJQUFpQixTQUFTQSxPQUFULENBQWlCNUssUUFBakIsRUFBMkI7QUFDM0QsU0FBT04sU0FBTyxDQUFDTSxRQUFELENBQVAsSUFBcUIsT0FBNUI7QUFDRCxDQUZEOztBQ0xBLElBQUl5RCxpQkFBZSxHQUFHakYsaUJBQXRCOztBQUVBLElBQUlxTSxlQUFhLEdBQUdwSCxpQkFBZSxDQUFDLGFBQUQsQ0FBbkM7QUFDQSxJQUFJMEIsTUFBSSxHQUFHLEVBQVg7QUFFQUEsTUFBSSxDQUFDMEYsZUFBRCxDQUFKLEdBQXNCLEdBQXRCO0lBRUE5TSxrQkFBQSxHQUFpQm9ELE1BQU0sQ0FBQ2dFLE1BQUQsQ0FBTixLQUFpQixZQUFsQzs7QUNQQSxJQUFJMkYsdUJBQXFCLEdBQUd0TSxrQkFBNUI7O0FBQ0EsSUFBSXlCLFlBQVUsR0FBR3pCLFlBQWpCOztBQUNBLElBQUl1TSxVQUFVLEdBQUd2TSxZQUFqQjs7QUFDQSxJQUFJaUYsaUJBQWUsR0FBR2pGLGlCQUF0Qjs7QUFFQSxJQUFJcU0sZUFBYSxHQUFHcEgsaUJBQWUsQ0FBQyxhQUFELENBQW5DOztBQUVBLElBQUl1SCxpQkFBaUIsR0FBR0QsVUFBVSxDQUFDLFlBQVk7QUFBRSxTQUFPMUssU0FBUDtBQUFtQixDQUFqQyxFQUFELENBQVYsSUFBbUQsV0FBM0U7O0FBR0EsSUFBSTRLLE1BQU0sR0FBRyxVQUFVcE4sRUFBVixFQUFjc0UsR0FBZCxFQUFtQjtBQUM5QixNQUFJO0FBQ0YsV0FBT3RFLEVBQUUsQ0FBQ3NFLEdBQUQsQ0FBVDtBQUNELEdBRkQsQ0FFRSxPQUFPN0QsS0FBUCxFQUFjO0FBQUU7QUFBYTtBQUNoQyxDQUpEOzs7SUFPQVAsU0FBQSxHQUFpQitNLHVCQUFxQixHQUFHQyxVQUFILEdBQWdCLFVBQVVsTixFQUFWLEVBQWM7QUFDbEUsTUFBSTRHLENBQUosRUFBT3lHLEdBQVAsRUFBWXRILE1BQVo7QUFDQSxTQUFPL0YsRUFBRSxLQUFLK0IsU0FBUCxHQUFtQixXQUFuQixHQUFpQy9CLEVBQUUsS0FBSyxJQUFQLEdBQWMsTUFBZDtBQUFBLElBRXBDLFFBQVFxTixHQUFHLEdBQUdELE1BQU0sQ0FBQ3hHLENBQUMsR0FBR2hHLE1BQU0sQ0FBQ1osRUFBRCxDQUFYLEVBQWlCZ04sZUFBakIsQ0FBcEIsS0FBd0QsUUFBeEQsR0FBbUVLLEdBQW5FO0FBQUEsSUFFQUYsaUJBQWlCLEdBQUdELFVBQVUsQ0FBQ3RHLENBQUQsQ0FBYjtBQUFBLElBRWpCLENBQUNiLE1BQU0sR0FBR21ILFVBQVUsQ0FBQ3RHLENBQUQsQ0FBcEIsS0FBNEIsUUFBNUIsSUFBd0N4RSxZQUFVLENBQUN3RSxDQUFDLENBQUMwRyxNQUFILENBQWxELEdBQStELFdBQS9ELEdBQTZFdkgsTUFOakY7QUFPRCxDQVREOztBQ2pCQSxJQUFJbEUsU0FBTyxHQUFHbEIsU0FBZDs7SUFFQVQsVUFBQSxHQUFpQixVQUFVaUMsUUFBVixFQUFvQjtBQUNuQyxNQUFJTixTQUFPLENBQUNNLFFBQUQsQ0FBUCxLQUFzQixRQUExQixFQUFvQyxNQUFNSCxTQUFTLENBQUMsMkNBQUQsQ0FBZjtBQUNwQyxTQUFPc0IsTUFBTSxDQUFDbkIsUUFBRCxDQUFiO0FBQ0QsQ0FIRDs7QUNGQSxJQUFJOEksa0JBQWtCLEdBQUd0SyxrQkFBekI7O0FBQ0EsSUFBSXVLLGFBQVcsR0FBR3ZLLGFBQWxCO0FBR0E7QUFDQTs7O0lBQ0FULFlBQUEsR0FBaUJVLE1BQU0sQ0FBQzJHLElBQVAsSUFBZSxTQUFTQSxJQUFULENBQWNYLENBQWQsRUFBaUI7QUFDL0MsU0FBT3FFLGtCQUFrQixDQUFDckUsQ0FBRCxFQUFJc0UsYUFBSixDQUF6QjtBQUNELENBRkQ7O0FDTkEsSUFBSTlFLGFBQVcsR0FBR3pGLFdBQWxCOztBQUNBLElBQUlzRyxzQkFBb0IsR0FBR3RHLG9CQUEzQjs7QUFDQSxJQUFJbUcsV0FBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJNE0sWUFBVSxHQUFHNU0sWUFBakI7QUFHQTtBQUNBOzs7SUFDQVQsc0JBQUEsR0FBaUJrRyxhQUFXLEdBQUd4RixNQUFNLENBQUM0TSxnQkFBVixHQUE2QixTQUFTQSxnQkFBVCxDQUEwQjVHLENBQTFCLEVBQTZCNkcsVUFBN0IsRUFBeUM7QUFDaEczRyxFQUFBQSxXQUFRLENBQUNGLENBQUQsQ0FBUjtBQUNBLE1BQUlXLElBQUksR0FBR2dHLFlBQVUsQ0FBQ0UsVUFBRCxDQUFyQjtBQUNBLE1BQUloTCxNQUFNLEdBQUc4RSxJQUFJLENBQUM5RSxNQUFsQjtBQUNBLE1BQUl5SCxLQUFLLEdBQUcsQ0FBWjtBQUNBLE1BQUk1RixHQUFKOztBQUNBLFNBQU83QixNQUFNLEdBQUd5SCxLQUFoQixFQUF1QmpELHNCQUFvQixDQUFDSixDQUFyQixDQUF1QkQsQ0FBdkIsRUFBMEJ0QyxHQUFHLEdBQUdpRCxJQUFJLENBQUMyQyxLQUFLLEVBQU4sQ0FBcEMsRUFBK0N1RCxVQUFVLENBQUNuSixHQUFELENBQXpEOztBQUN2QixTQUFPc0MsQ0FBUDtBQUNELENBUkQ7O0FDUkEsSUFBSWxFLFlBQVUsR0FBRy9CLFlBQWpCOztJQUVBVCxNQUFBLEdBQWlCd0MsWUFBVSxDQUFDLFVBQUQsRUFBYSxpQkFBYixDQUEzQjs7OztBQ0RBLElBQUlvRSxXQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUk2TSxrQkFBZ0IsR0FBRzdNLHNCQUF2Qjs7QUFDQSxJQUFJdUssV0FBVyxHQUFHdkssYUFBbEI7O0FBQ0EsSUFBSWdILFlBQVUsR0FBR2hILFlBQWpCOztBQUNBLElBQUkrTSxNQUFJLEdBQUcvTSxNQUFYOztBQUNBLElBQUlnTix1QkFBcUIsR0FBR2hOLHVCQUE1Qjs7QUFDQSxJQUFJK0csV0FBUyxHQUFHL0csV0FBaEI7O0FBRUEsSUFBSWlOLEVBQUUsR0FBRyxHQUFUO0FBQ0EsSUFBSUMsRUFBRSxHQUFHLEdBQVQ7QUFDQSxJQUFJQyxXQUFTLEdBQUcsV0FBaEI7QUFDQSxJQUFJQyxNQUFNLEdBQUcsUUFBYjtBQUNBLElBQUlDLFVBQVEsR0FBR3RHLFdBQVMsQ0FBQyxVQUFELENBQXhCOztBQUVBLElBQUl1RyxnQkFBZ0IsR0FBRyxZQUFZO0FBQUU7QUFBYSxDQUFsRDs7QUFFQSxJQUFJQyxTQUFTLEdBQUcsVUFBVUMsT0FBVixFQUFtQjtBQUNqQyxTQUFPTixFQUFFLEdBQUdFLE1BQUwsR0FBY0gsRUFBZCxHQUFtQk8sT0FBbkIsR0FBNkJOLEVBQTdCLEdBQWtDLEdBQWxDLEdBQXdDRSxNQUF4QyxHQUFpREgsRUFBeEQ7QUFDRCxDQUZEOzs7QUFLQSxJQUFJUSx5QkFBeUIsR0FBRyxVQUFVQyxlQUFWLEVBQTJCO0FBQ3pEQSxFQUFBQSxlQUFlLENBQUNDLEtBQWhCLENBQXNCSixTQUFTLENBQUMsRUFBRCxDQUEvQjtBQUNBRyxFQUFBQSxlQUFlLENBQUNFLEtBQWhCO0FBQ0EsTUFBSUMsSUFBSSxHQUFHSCxlQUFlLENBQUNJLFlBQWhCLENBQTZCN04sTUFBeEM7QUFDQXlOLEVBQUFBLGVBQWUsR0FBRyxJQUFsQixDQUp5RDs7QUFLekQsU0FBT0csSUFBUDtBQUNELENBTkQ7OztBQVNBLElBQUlFLHdCQUF3QixHQUFHLFlBQVk7QUFDekM7QUFDQSxNQUFJQyxNQUFNLEdBQUdoQix1QkFBcUIsQ0FBQyxRQUFELENBQWxDO0FBQ0EsTUFBSWlCLEVBQUUsR0FBRyxTQUFTYixNQUFULEdBQWtCLEdBQTNCO0FBQ0EsTUFBSWMsY0FBSjtBQUNBRixFQUFBQSxNQUFNLENBQUNHLEtBQVAsQ0FBYUMsT0FBYixHQUF1QixNQUF2QjtBQUNBckIsRUFBQUEsTUFBSSxDQUFDc0IsV0FBTCxDQUFpQkwsTUFBakIsRUFOeUM7O0FBUXpDQSxFQUFBQSxNQUFNLENBQUNNLEdBQVAsR0FBYTNMLE1BQU0sQ0FBQ3NMLEVBQUQsQ0FBbkI7QUFDQUMsRUFBQUEsY0FBYyxHQUFHRixNQUFNLENBQUNPLGFBQVAsQ0FBcUJqSixRQUF0QztBQUNBNEksRUFBQUEsY0FBYyxDQUFDTSxJQUFmO0FBQ0FOLEVBQUFBLGNBQWMsQ0FBQ1AsS0FBZixDQUFxQkosU0FBUyxDQUFDLG1CQUFELENBQTlCO0FBQ0FXLEVBQUFBLGNBQWMsQ0FBQ04sS0FBZjtBQUNBLFNBQU9NLGNBQWMsQ0FBQ08sQ0FBdEI7QUFDRCxDQWREO0FBaUJBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxJQUFJZixlQUFKOztBQUNBLElBQUlnQixlQUFlLEdBQUcsWUFBWTtBQUNoQyxNQUFJO0FBQ0ZoQixJQUFBQSxlQUFlLEdBQUcsSUFBSWlCLGFBQUosQ0FBa0IsVUFBbEIsQ0FBbEI7QUFDRCxHQUZELENBRUUsT0FBTzdPLEtBQVAsRUFBYztBQUFFO0FBQWM7O0FBQ2hDNE8sRUFBQUEsZUFBZSxHQUFHLE9BQU9wSixRQUFQLElBQW1CLFdBQW5CLEdBQ2RBLFFBQVEsQ0FBQ3NKLE1BQVQsSUFBbUJsQixlQUFuQixHQUNFRCx5QkFBeUIsQ0FBQ0MsZUFBRCxDQUQzQjtBQUFBLElBRUVLLHdCQUF3QixFQUhaLEdBSWROLHlCQUF5QixDQUFDQyxlQUFELENBSjdCLENBSmdDOztBQVNoQyxNQUFJNUwsTUFBTSxHQUFHeUksV0FBVyxDQUFDekksTUFBekI7O0FBQ0EsU0FBT0EsTUFBTSxFQUFiLEVBQWlCLE9BQU80TSxlQUFlLENBQUN2QixXQUFELENBQWYsQ0FBMkI1QyxXQUFXLENBQUN6SSxNQUFELENBQXRDLENBQVA7O0FBQ2pCLFNBQU80TSxlQUFlLEVBQXRCO0FBQ0QsQ0FaRDs7QUFjQTFILFlBQVUsQ0FBQ3FHLFVBQUQsQ0FBVixHQUF1QixJQUF2QjtBQUdBOztJQUNBOU4sY0FBQSxHQUFpQlUsTUFBTSxDQUFDNE8sTUFBUCxJQUFpQixTQUFTQSxNQUFULENBQWdCNUksQ0FBaEIsRUFBbUI2RyxVQUFuQixFQUErQjtBQUMvRCxNQUFJMUgsTUFBSjs7QUFDQSxNQUFJYSxDQUFDLEtBQUssSUFBVixFQUFnQjtBQUNkcUgsSUFBQUEsZ0JBQWdCLENBQUNILFdBQUQsQ0FBaEIsR0FBOEJoSCxXQUFRLENBQUNGLENBQUQsQ0FBdEM7QUFDQWIsSUFBQUEsTUFBTSxHQUFHLElBQUlrSSxnQkFBSixFQUFUO0FBQ0FBLElBQUFBLGdCQUFnQixDQUFDSCxXQUFELENBQWhCLEdBQThCLElBQTlCLENBSGM7O0FBS2QvSCxJQUFBQSxNQUFNLENBQUNpSSxVQUFELENBQU4sR0FBbUJwSCxDQUFuQjtBQUNELEdBTkQsTUFNT2IsTUFBTSxHQUFHc0osZUFBZSxFQUF4Qjs7QUFDUCxTQUFPNUIsVUFBVSxLQUFLMUwsU0FBZixHQUEyQmdFLE1BQTNCLEdBQW9DeUgsa0JBQWdCLENBQUN6SCxNQUFELEVBQVMwSCxVQUFULENBQTNEO0FBQ0QsQ0FWRDs7Ozs7O0FDdEVBLElBQUlqSCxpQkFBZSxHQUFHN0YsaUJBQXRCOztBQUNBLElBQUk4TyxzQkFBb0IsR0FBRzlPLHlCQUFBLENBQXNEa0csQ0FBakY7O0FBRUEsSUFBSWxGLFVBQVEsR0FBRyxHQUFHQSxRQUFsQjtBQUVBLElBQUkrTixXQUFXLEdBQUcsT0FBT3RQLE1BQVAsSUFBaUIsUUFBakIsSUFBNkJBLE1BQTdCLElBQXVDUSxNQUFNLENBQUN3SyxtQkFBOUMsR0FDZHhLLE1BQU0sQ0FBQ3dLLG1CQUFQLENBQTJCaEwsTUFBM0IsQ0FEYyxHQUN1QixFQUR6Qzs7QUFHQSxJQUFJdVAsY0FBYyxHQUFHLFVBQVUzUCxFQUFWLEVBQWM7QUFDakMsTUFBSTtBQUNGLFdBQU95UCxzQkFBb0IsQ0FBQ3pQLEVBQUQsQ0FBM0I7QUFDRCxHQUZELENBRUUsT0FBT1MsS0FBUCxFQUFjO0FBQ2QsV0FBT2lQLFdBQVcsQ0FBQzlOLEtBQVosRUFBUDtBQUNEO0FBQ0YsQ0FORDs7O21DQVNBLEdBQW1CLFNBQVN3SixtQkFBVCxDQUE2QnBMLEVBQTdCLEVBQWlDO0FBQ2xELFNBQU8wUCxXQUFXLElBQUkvTixVQUFRLENBQUNSLElBQVQsQ0FBY25CLEVBQWQsS0FBcUIsaUJBQXBDLEdBQ0gyUCxjQUFjLENBQUMzUCxFQUFELENBRFgsR0FFSHlQLHNCQUFvQixDQUFDakosaUJBQWUsQ0FBQ3hHLEVBQUQsQ0FBaEIsQ0FGeEI7QUFHRDs7OztBQ3RCRCxJQUFJNEYsaUJBQWUsR0FBR2pGLGlCQUF0Qjs7d0JBRUEsR0FBWWlGOztBQ0ZaLElBQUl0RixRQUFNLEdBQUdLLFFBQWI7O0lBRUFULE1BQUEsR0FBaUJJLFFBQWpCOztBQ0ZBLElBQUlzUCxJQUFJLEdBQUdqUCxNQUFYOztBQUNBLElBQUlvRSxRQUFNLEdBQUdwRSxnQkFBYjs7QUFDQSxJQUFJa1AsOEJBQTRCLEdBQUdsUCxzQkFBbkM7O0FBQ0EsSUFBSUUsZ0JBQWMsR0FBR0Ysb0JBQUEsQ0FBK0NrRyxDQUFwRTs7SUFFQTNHLHVCQUFBLEdBQWlCLFVBQVU0UCxJQUFWLEVBQWdCO0FBQy9CLE1BQUl6TSxNQUFNLEdBQUd1TSxJQUFJLENBQUN2TSxNQUFMLEtBQWdCdU0sSUFBSSxDQUFDdk0sTUFBTCxHQUFjLEVBQTlCLENBQWI7QUFDQSxNQUFJLENBQUMwQixRQUFNLENBQUMxQixNQUFELEVBQVN5TSxJQUFULENBQVgsRUFBMkJqUCxnQkFBYyxDQUFDd0MsTUFBRCxFQUFTeU0sSUFBVCxFQUFlO0FBQ3REdE8sSUFBQUEsS0FBSyxFQUFFcU8sOEJBQTRCLENBQUNoSixDQUE3QixDQUErQmlKLElBQS9CO0FBRCtDLEdBQWYsQ0FBZDtBQUc1QixDQUxEOztBQ0xBLElBQUlqUCxnQkFBYyxHQUFHRixvQkFBQSxDQUErQ2tHLENBQXBFOztBQUNBLElBQUk5QixRQUFNLEdBQUdwRSxnQkFBYjs7QUFDQSxJQUFJaUYsaUJBQWUsR0FBR2pGLGlCQUF0Qjs7QUFFQSxJQUFJcU0sZUFBYSxHQUFHcEgsaUJBQWUsQ0FBQyxhQUFELENBQW5DOztJQUVBMUYsZ0JBQUEsR0FBaUIsVUFBVUYsRUFBVixFQUFjK1AsR0FBZCxFQUFtQnZELE1BQW5CLEVBQTJCO0FBQzFDLE1BQUl4TSxFQUFFLElBQUksQ0FBQytFLFFBQU0sQ0FBQy9FLEVBQUUsR0FBR3dNLE1BQU0sR0FBR3hNLEVBQUgsR0FBUUEsRUFBRSxDQUFDMkksU0FBdkIsRUFBa0NxRSxlQUFsQyxDQUFqQixFQUFtRTtBQUNqRW5NLElBQUFBLGdCQUFjLENBQUNiLEVBQUQsRUFBS2dOLGVBQUwsRUFBb0I7QUFBRXZMLE1BQUFBLFlBQVksRUFBRSxJQUFoQjtBQUFzQkQsTUFBQUEsS0FBSyxFQUFFdU87QUFBN0IsS0FBcEIsQ0FBZDtBQUNEO0FBQ0YsQ0FKRDs7QUNOQSxJQUFJbE0sV0FBUyxHQUFHbEQsV0FBaEI7OztJQUdBVCxtQkFBQSxHQUFpQixVQUFVaUUsRUFBVixFQUFjNkwsSUFBZCxFQUFvQnZOLE1BQXBCLEVBQTRCO0FBQzNDb0IsRUFBQUEsV0FBUyxDQUFDTSxFQUFELENBQVQ7QUFDQSxNQUFJNkwsSUFBSSxLQUFLak8sU0FBYixFQUF3QixPQUFPb0MsRUFBUDs7QUFDeEIsVUFBUTFCLE1BQVI7QUFDRSxTQUFLLENBQUw7QUFBUSxhQUFPLFlBQVk7QUFDekIsZUFBTzBCLEVBQUUsQ0FBQ2hELElBQUgsQ0FBUTZPLElBQVIsQ0FBUDtBQUNELE9BRk87O0FBR1IsU0FBSyxDQUFMO0FBQVEsYUFBTyxVQUFVM0osQ0FBVixFQUFhO0FBQzFCLGVBQU9sQyxFQUFFLENBQUNoRCxJQUFILENBQVE2TyxJQUFSLEVBQWMzSixDQUFkLENBQVA7QUFDRCxPQUZPOztBQUdSLFNBQUssQ0FBTDtBQUFRLGFBQU8sVUFBVUEsQ0FBVixFQUFhNEosQ0FBYixFQUFnQjtBQUM3QixlQUFPOUwsRUFBRSxDQUFDaEQsSUFBSCxDQUFRNk8sSUFBUixFQUFjM0osQ0FBZCxFQUFpQjRKLENBQWpCLENBQVA7QUFDRCxPQUZPOztBQUdSLFNBQUssQ0FBTDtBQUFRLGFBQU8sVUFBVTVKLENBQVYsRUFBYTRKLENBQWIsRUFBZ0JDLENBQWhCLEVBQW1CO0FBQ2hDLGVBQU8vTCxFQUFFLENBQUNoRCxJQUFILENBQVE2TyxJQUFSLEVBQWMzSixDQUFkLEVBQWlCNEosQ0FBakIsRUFBb0JDLENBQXBCLENBQVA7QUFDRCxPQUZPO0FBVlY7O0FBY0EsU0FBTyxZQUF5QjtBQUM5QixXQUFPL0wsRUFBRSxDQUFDZ00sS0FBSCxDQUFTSCxJQUFULEVBQWV4TixTQUFmLENBQVA7QUFDRCxHQUZEO0FBR0QsQ0FwQkQ7O0FDSEEsSUFBSTlCLE9BQUssR0FBR0MsUUFBWjs7QUFDQSxJQUFJeUIsWUFBVSxHQUFHekIsWUFBakI7O0FBQ0EsSUFBSWtCLFNBQU8sR0FBR2xCLFNBQWQ7O0FBQ0EsSUFBSStCLFlBQVUsR0FBRy9CLFlBQWpCOztBQUNBLElBQUl5RyxlQUFhLEdBQUd6RyxlQUFwQjs7QUFFQSxJQUFJeVAsT0FBSyxHQUFHLEVBQVo7QUFDQSxJQUFJQyxXQUFTLEdBQUczTixZQUFVLENBQUMsU0FBRCxFQUFZLFdBQVosQ0FBMUI7QUFDQSxJQUFJNE4saUJBQWlCLEdBQUcsMEJBQXhCO0FBQ0EsSUFBSTlQLE1BQUksR0FBRzhQLGlCQUFpQixDQUFDOVAsSUFBN0I7QUFDQSxJQUFJK1AsbUJBQW1CLEdBQUcsQ0FBQ0QsaUJBQWlCLENBQUM5UCxJQUFsQixDQUF1QixZQUFZO0FBQUU7QUFBYSxDQUFsRCxDQUEzQjs7QUFFQSxJQUFJZ1EsbUJBQW1CLEdBQUcsVUFBVXJPLFFBQVYsRUFBb0I7QUFDNUMsTUFBSSxDQUFDQyxZQUFVLENBQUNELFFBQUQsQ0FBZixFQUEyQixPQUFPLEtBQVA7O0FBQzNCLE1BQUk7QUFDRmtPLElBQUFBLFdBQVMsQ0FBQ3pQLE1BQUQsRUFBU3dQLE9BQVQsRUFBZ0JqTyxRQUFoQixDQUFUO0FBQ0EsV0FBTyxJQUFQO0FBQ0QsR0FIRCxDQUdFLE9BQU8xQixLQUFQLEVBQWM7QUFDZCxXQUFPLEtBQVA7QUFDRDtBQUNGLENBUkQ7O0FBVUEsSUFBSWdRLG1CQUFtQixHQUFHLFVBQVV0TyxRQUFWLEVBQW9CO0FBQzVDLE1BQUksQ0FBQ0MsWUFBVSxDQUFDRCxRQUFELENBQWYsRUFBMkIsT0FBTyxLQUFQOztBQUMzQixVQUFRTixTQUFPLENBQUNNLFFBQUQsQ0FBZjtBQUNFLFNBQUssZUFBTDtBQUNBLFNBQUssbUJBQUw7QUFDQSxTQUFLLHdCQUFMO0FBQStCLGFBQU8sS0FBUDtBQUMvQjtBQUpGOztBQUtFLFNBQU9vTyxtQkFBbUIsSUFBSSxDQUFDLENBQUMvUCxNQUFJLENBQUNXLElBQUwsQ0FBVW1QLGlCQUFWLEVBQTZCbEosZUFBYSxDQUFDakYsUUFBRCxDQUExQyxDQUFoQztBQUNILENBUkQ7QUFXQTs7O0lBQ0FqQyxlQUFBLEdBQWlCLENBQUNtUSxXQUFELElBQWMzUCxPQUFLLENBQUMsWUFBWTtBQUMvQyxNQUFJZ1EsTUFBSjtBQUNBLFNBQU9GLG1CQUFtQixDQUFDQSxtQkFBbUIsQ0FBQ3JQLElBQXJCLENBQW5CLElBQ0YsQ0FBQ3FQLG1CQUFtQixDQUFDNVAsTUFBRCxDQURsQixJQUVGLENBQUM0UCxtQkFBbUIsQ0FBQyxZQUFZO0FBQUVFLElBQUFBLE1BQU0sR0FBRyxJQUFUO0FBQWdCLEdBQS9CLENBRmxCLElBR0ZBLE1BSEw7QUFJRCxDQU5tQyxDQUFuQixHQU1aRCxtQkFOWSxHQU1VRCxtQkFOM0I7O0FDbENBLElBQUl6RCxTQUFPLEdBQUdwTSxTQUFkOztBQUNBLElBQUlnUSxlQUFhLEdBQUdoUSxlQUFwQjs7QUFDQSxJQUFJcUQsVUFBUSxHQUFHckQsVUFBZjs7QUFDQSxJQUFJaUYsaUJBQWUsR0FBR2pGLGlCQUF0Qjs7QUFFQSxJQUFJaVEsU0FBTyxHQUFHaEwsaUJBQWUsQ0FBQyxTQUFELENBQTdCO0FBR0E7O0lBQ0ExRix5QkFBQSxHQUFpQixVQUFVMlEsYUFBVixFQUF5QjtBQUN4QyxNQUFJQyxDQUFKOztBQUNBLE1BQUkvRCxTQUFPLENBQUM4RCxhQUFELENBQVgsRUFBNEI7QUFDMUJDLElBQUFBLENBQUMsR0FBR0QsYUFBYSxDQUFDRSxXQUFsQixDQUQwQjs7QUFHMUIsUUFBSUosZUFBYSxDQUFDRyxDQUFELENBQWIsS0FBcUJBLENBQUMsS0FBS2hFLEtBQU4sSUFBZUMsU0FBTyxDQUFDK0QsQ0FBQyxDQUFDbkksU0FBSCxDQUEzQyxDQUFKLEVBQStEbUksQ0FBQyxHQUFHL08sU0FBSixDQUEvRCxLQUNLLElBQUlpQyxVQUFRLENBQUM4TSxDQUFELENBQVosRUFBaUI7QUFDcEJBLE1BQUFBLENBQUMsR0FBR0EsQ0FBQyxDQUFDRixTQUFELENBQUw7QUFDQSxVQUFJRSxDQUFDLEtBQUssSUFBVixFQUFnQkEsQ0FBQyxHQUFHL08sU0FBSjtBQUNqQjtBQUNGOztBQUFDLFNBQU8rTyxDQUFDLEtBQUsvTyxTQUFOLEdBQWtCK0ssS0FBbEIsR0FBMEJnRSxDQUFqQztBQUNILENBWEQ7O0FDVEEsSUFBSUUseUJBQXVCLEdBQUdyUSx5QkFBOUI7QUFHQTs7O0lBQ0FULG9CQUFBLEdBQWlCLFVBQVUyUSxhQUFWLEVBQXlCcE8sTUFBekIsRUFBaUM7QUFDaEQsU0FBTyxLQUFLdU8seUJBQXVCLENBQUNILGFBQUQsQ0FBNUIsRUFBNkNwTyxNQUFNLEtBQUssQ0FBWCxHQUFlLENBQWYsR0FBbUJBLE1BQWhFLENBQVA7QUFDRCxDQUZEOztBQ0pBLElBQUl3TyxNQUFJLEdBQUd0USxtQkFBWDs7QUFDQSxJQUFJc0IsZUFBYSxHQUFHdEIsYUFBcEI7O0FBQ0EsSUFBSWtFLFVBQVEsR0FBR2xFLFVBQWY7O0FBQ0EsSUFBSTRKLG1CQUFpQixHQUFHNUosbUJBQXhCOztBQUNBLElBQUl1USxvQkFBa0IsR0FBR3ZRLG9CQUF6Qjs7QUFFQSxJQUFJK0QsTUFBSSxHQUFHLEdBQUdBLElBQWQ7O0FBR0EsSUFBSThGLGNBQVksR0FBRyxVQUFVdkMsSUFBVixFQUFnQjtBQUNqQyxNQUFJa0osTUFBTSxHQUFHbEosSUFBSSxJQUFJLENBQXJCO0FBQ0EsTUFBSW1KLFNBQVMsR0FBR25KLElBQUksSUFBSSxDQUF4QjtBQUNBLE1BQUlvSixPQUFPLEdBQUdwSixJQUFJLElBQUksQ0FBdEI7QUFDQSxNQUFJcUosUUFBUSxHQUFHckosSUFBSSxJQUFJLENBQXZCO0FBQ0EsTUFBSXNKLGFBQWEsR0FBR3RKLElBQUksSUFBSSxDQUE1QjtBQUNBLE1BQUl1SixnQkFBZ0IsR0FBR3ZKLElBQUksSUFBSSxDQUEvQjtBQUNBLE1BQUl3SixRQUFRLEdBQUd4SixJQUFJLElBQUksQ0FBUixJQUFhc0osYUFBNUI7QUFDQSxTQUFPLFVBQVU3RyxLQUFWLEVBQWlCZ0gsVUFBakIsRUFBNkIxQixJQUE3QixFQUFtQzJCLGNBQW5DLEVBQW1EO0FBQ3hELFFBQUkvSyxDQUFDLEdBQUcvQixVQUFRLENBQUM2RixLQUFELENBQWhCO0FBQ0EsUUFBSXJLLElBQUksR0FBRzRCLGVBQWEsQ0FBQzJFLENBQUQsQ0FBeEI7QUFDQSxRQUFJZ0wsYUFBYSxHQUFHWCxNQUFJLENBQUNTLFVBQUQsRUFBYTFCLElBQWIsRUFBbUIsQ0FBbkIsQ0FBeEI7QUFDQSxRQUFJdk4sTUFBTSxHQUFHOEgsbUJBQWlCLENBQUNsSyxJQUFELENBQTlCO0FBQ0EsUUFBSTZKLEtBQUssR0FBRyxDQUFaO0FBQ0EsUUFBSXNGLE1BQU0sR0FBR21DLGNBQWMsSUFBSVQsb0JBQS9CO0FBQ0EsUUFBSXpGLE1BQU0sR0FBRzBGLE1BQU0sR0FBRzNCLE1BQU0sQ0FBQzlFLEtBQUQsRUFBUWpJLE1BQVIsQ0FBVCxHQUEyQjJPLFNBQVMsSUFBSUksZ0JBQWIsR0FBZ0NoQyxNQUFNLENBQUM5RSxLQUFELEVBQVEsQ0FBUixDQUF0QyxHQUFtRDNJLFNBQWpHO0FBQ0EsUUFBSVAsS0FBSixFQUFXdUUsTUFBWDs7QUFDQSxXQUFNdEQsTUFBTSxHQUFHeUgsS0FBZixFQUFzQkEsS0FBSyxFQUEzQixFQUErQixJQUFJdUgsUUFBUSxJQUFJdkgsS0FBSyxJQUFJN0osSUFBekIsRUFBK0I7QUFDNURtQixNQUFBQSxLQUFLLEdBQUduQixJQUFJLENBQUM2SixLQUFELENBQVo7QUFDQW5FLE1BQUFBLE1BQU0sR0FBRzZMLGFBQWEsQ0FBQ3BRLEtBQUQsRUFBUTBJLEtBQVIsRUFBZXRELENBQWYsQ0FBdEI7O0FBQ0EsVUFBSXFCLElBQUosRUFBVTtBQUNSLFlBQUlrSixNQUFKLEVBQVkxRixNQUFNLENBQUN2QixLQUFELENBQU4sR0FBZ0JuRSxNQUFoQixDQUFaO0FBQUEsYUFDSyxJQUFJQSxNQUFKLEVBQVksUUFBUWtDLElBQVI7QUFDZixlQUFLLENBQUw7QUFBUSxtQkFBTyxJQUFQO0FBQTBCOztBQUNsQyxlQUFLLENBQUw7QUFBUSxtQkFBT3pHLEtBQVA7QUFBMEI7O0FBQ2xDLGVBQUssQ0FBTDtBQUFRLG1CQUFPMEksS0FBUDtBQUEwQjs7QUFDbEMsZUFBSyxDQUFMO0FBQVF4RixZQUFBQSxNQUFJLENBQUN2RCxJQUFMLENBQVVzSyxNQUFWLEVBQWtCakssS0FBbEI7QUFBMEI7QUFKbkIsU0FBWixNQUtFLFFBQVF5RyxJQUFSO0FBQ0wsZUFBSyxDQUFMO0FBQVEsbUJBQU8sS0FBUDtBQUEwQjs7QUFDbEMsZUFBSyxDQUFMO0FBQVF2RCxZQUFBQSxNQUFJLENBQUN2RCxJQUFMLENBQVVzSyxNQUFWLEVBQWtCakssS0FBbEI7QUFBMEI7QUFGN0I7QUFJUjtBQUNGOztBQUNELFdBQU8rUCxhQUFhLEdBQUcsQ0FBQyxDQUFKLEdBQVFGLE9BQU8sSUFBSUMsUUFBWCxHQUFzQkEsUUFBdEIsR0FBaUM3RixNQUE3RDtBQUNELEdBMUJEO0FBMkJELENBbkNEOztJQXFDQXZMLGNBQUEsR0FBaUI7QUFDZjtBQUNBO0FBQ0EyUixFQUFBQSxPQUFPLEVBQUVySCxjQUFZLENBQUMsQ0FBRCxDQUhOO0FBSWY7QUFDQTtBQUNBc0gsRUFBQUEsR0FBRyxFQUFFdEgsY0FBWSxDQUFDLENBQUQsQ0FORjtBQU9mO0FBQ0E7QUFDQXVILEVBQUFBLE1BQU0sRUFBRXZILGNBQVksQ0FBQyxDQUFELENBVEw7QUFVZjtBQUNBO0FBQ0F3SCxFQUFBQSxJQUFJLEVBQUV4SCxjQUFZLENBQUMsQ0FBRCxDQVpIO0FBYWY7QUFDQTtBQUNBeUgsRUFBQUEsS0FBSyxFQUFFekgsY0FBWSxDQUFDLENBQUQsQ0FmSjtBQWdCZjtBQUNBO0FBQ0EwSCxFQUFBQSxJQUFJLEVBQUUxSCxjQUFZLENBQUMsQ0FBRCxDQWxCSDtBQW1CZjtBQUNBO0FBQ0EySCxFQUFBQSxTQUFTLEVBQUUzSCxjQUFZLENBQUMsQ0FBRCxDQXJCUjtBQXNCZjtBQUNBO0FBQ0E0SCxFQUFBQSxZQUFZLEVBQUU1SCxjQUFZLENBQUMsQ0FBRDtBQXhCWCxDQUFqQjs7QUM3Q0EsSUFBSTZILElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSUwsUUFBTSxHQUFHSyxRQUFiOztBQUNBLElBQUkrQixZQUFVLEdBQUcvQixZQUFqQjs7QUFFQSxJQUFJeUYsYUFBVyxHQUFHekYsV0FBbEI7O0FBQ0EsSUFBSTZDLGFBQWEsR0FBRzdDLGNBQXBCOztBQUNBLElBQUlELE9BQUssR0FBR0MsUUFBWjs7QUFDQSxJQUFJb0UsUUFBTSxHQUFHcEUsZ0JBQWI7O0FBQ0EsSUFBSW9NLFNBQU8sR0FBR3BNLFNBQWQ7O0FBQ0EsSUFBSXlCLFlBQVUsR0FBR3pCLFlBQWpCOztBQUNBLElBQUlxRCxVQUFRLEdBQUdyRCxVQUFmOztBQUNBLElBQUk4RSxVQUFRLEdBQUc5RSxVQUFmOztBQUNBLElBQUltRyxXQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUlrRSxVQUFRLEdBQUdsRSxVQUFmOztBQUNBLElBQUk2RixpQkFBZSxHQUFHN0YsaUJBQXRCOztBQUNBLElBQUk4RixlQUFhLEdBQUc5RixlQUFwQjs7QUFDQSxJQUFJMlIsV0FBUyxHQUFHM1IsVUFBaEI7O0FBQ0EsSUFBSTRGLDBCQUF3QixHQUFHNUYsMEJBQS9COztBQUNBLElBQUk0UixrQkFBa0IsR0FBRzVSLGNBQXpCOztBQUNBLElBQUk0TSxZQUFVLEdBQUc1TSxZQUFqQjs7QUFDQSxJQUFJMEssMkJBQXlCLEdBQUcxSyx5QkFBaEM7O0FBQ0EsSUFBSTZSLDJCQUEyQixHQUFHN1IsaUNBQWxDOztBQUNBLElBQUkySyw2QkFBMkIsR0FBRzNLLDJCQUFsQzs7QUFDQSxJQUFJNkssZ0NBQThCLEdBQUc3Syw4QkFBckM7O0FBQ0EsSUFBSXNHLHNCQUFvQixHQUFHdEcsb0JBQTNCOztBQUNBLElBQUkyRiw0QkFBMEIsR0FBRzNGLDBCQUFqQzs7QUFDQSxJQUFJeUwsVUFBUSxHQUFHekwsa0JBQWY7O0FBQ0EsSUFBSXdFLFFBQU0sR0FBR3hFLGdCQUFiOztBQUNBLElBQUkrRyxXQUFTLEdBQUcvRyxXQUFoQjs7QUFDQSxJQUFJZ0gsWUFBVSxHQUFHaEgsWUFBakI7O0FBQ0EsSUFBSXlFLEtBQUcsR0FBR3pFLEtBQVY7O0FBQ0EsSUFBSWlGLGlCQUFlLEdBQUdqRixpQkFBdEI7O0FBQ0EsSUFBSWtQLDRCQUE0QixHQUFHbFAsc0JBQW5DOztBQUNBLElBQUk4Uix1QkFBcUIsR0FBRzlSLHVCQUE1Qjs7QUFDQSxJQUFJK1IsZ0JBQWMsR0FBRy9SLGdCQUFyQjs7QUFDQSxJQUFJcUkscUJBQW1CLEdBQUdySSxhQUExQjs7QUFDQSxJQUFJZ1MsVUFBUSxHQUFHaFMsY0FBQSxDQUF3Q2tSLE9BQXZEOztBQUVBLElBQUllLE1BQU0sR0FBR2xMLFdBQVMsQ0FBQyxRQUFELENBQXRCO0FBQ0EsSUFBSW1MLE1BQU0sR0FBRyxRQUFiO0FBQ0EsSUFBSS9FLFdBQVMsR0FBRyxXQUFoQjtBQUNBLElBQUlqSSxjQUFZLEdBQUdELGlCQUFlLENBQUMsYUFBRCxDQUFsQztBQUNBLElBQUlrTixrQkFBZ0IsR0FBRzlKLHFCQUFtQixDQUFDbkIsR0FBM0M7QUFDQSxJQUFJcUIsa0JBQWdCLEdBQUdGLHFCQUFtQixDQUFDaEIsU0FBcEIsQ0FBOEI2SyxNQUE5QixDQUF2QjtBQUNBLElBQUlFLGlCQUFlLEdBQUduUyxNQUFNLENBQUNrTixXQUFELENBQTVCO0FBQ0EsSUFBSW5LLE9BQU8sR0FBR3JELFFBQU0sQ0FBQytDLE1BQXJCO0FBQ0EsSUFBSTJQLFlBQVUsR0FBR3RRLFlBQVUsQ0FBQyxNQUFELEVBQVMsV0FBVCxDQUEzQjtBQUNBLElBQUl1USxnQ0FBOEIsR0FBR3pILGdDQUE4QixDQUFDM0UsQ0FBcEU7QUFDQSxJQUFJcU0sc0JBQW9CLEdBQUdqTSxzQkFBb0IsQ0FBQ0osQ0FBaEQ7QUFDQSxJQUFJc00seUJBQXlCLEdBQUdYLDJCQUEyQixDQUFDM0wsQ0FBNUQ7QUFDQSxJQUFJdU0sMEJBQTBCLEdBQUc5TSw0QkFBMEIsQ0FBQ08sQ0FBNUQ7QUFDQSxJQUFJd00sVUFBVSxHQUFHbE8sUUFBTSxDQUFDLFNBQUQsQ0FBdkI7QUFDQSxJQUFJbU8sc0JBQXNCLEdBQUduTyxRQUFNLENBQUMsWUFBRCxDQUFuQztBQUNBLElBQUlvTyxzQkFBc0IsR0FBR3BPLFFBQU0sQ0FBQywyQkFBRCxDQUFuQztBQUNBLElBQUlxTyxzQkFBc0IsR0FBR3JPLFFBQU0sQ0FBQywyQkFBRCxDQUFuQztBQUNBLElBQUlFLHFCQUFxQixHQUFHRixRQUFNLENBQUMsS0FBRCxDQUFsQztBQUNBLElBQUlzTyxPQUFPLEdBQUduVCxRQUFNLENBQUNtVCxPQUFyQjs7QUFFQSxJQUFJQyxVQUFVLEdBQUcsQ0FBQ0QsT0FBRCxJQUFZLENBQUNBLE9BQU8sQ0FBQzNGLFdBQUQsQ0FBcEIsSUFBbUMsQ0FBQzJGLE9BQU8sQ0FBQzNGLFdBQUQsQ0FBUCxDQUFtQjZGLFNBQXhFOztBQUdBLElBQUlDLG1CQUFtQixHQUFHeE4sYUFBVyxJQUFJMUYsT0FBSyxDQUFDLFlBQVk7QUFDekQsU0FBTzZSLGtCQUFrQixDQUFDVyxzQkFBb0IsQ0FBQyxFQUFELEVBQUssR0FBTCxFQUFVO0FBQ3REcFMsSUFBQUEsR0FBRyxFQUFFLFlBQVk7QUFBRSxhQUFPb1Msc0JBQW9CLENBQUMsSUFBRCxFQUFPLEdBQVAsRUFBWTtBQUFFMVIsUUFBQUEsS0FBSyxFQUFFO0FBQVQsT0FBWixDQUFwQixDQUE4QzZFLENBQXJEO0FBQXlEO0FBRHRCLEdBQVYsQ0FBckIsQ0FBbEIsQ0FFSEEsQ0FGRyxJQUVFLENBRlQ7QUFHRCxDQUo2QyxDQUFwQixHQUlyQixVQUFVTyxDQUFWLEVBQWE5QyxDQUFiLEVBQWdCa0QsVUFBaEIsRUFBNEI7QUFDL0IsTUFBSTZNLHlCQUF5QixHQUFHWixnQ0FBOEIsQ0FBQ0YsaUJBQUQsRUFBa0JqUCxDQUFsQixDQUE5RDtBQUNBLE1BQUkrUCx5QkFBSixFQUErQixPQUFPZCxpQkFBZSxDQUFDalAsQ0FBRCxDQUF0QjtBQUMvQm9QLEVBQUFBLHNCQUFvQixDQUFDdE0sQ0FBRCxFQUFJOUMsQ0FBSixFQUFPa0QsVUFBUCxDQUFwQjs7QUFDQSxNQUFJNk0seUJBQXlCLElBQUlqTixDQUFDLEtBQUttTSxpQkFBdkMsRUFBd0Q7QUFDdERHLElBQUFBLHNCQUFvQixDQUFDSCxpQkFBRCxFQUFrQmpQLENBQWxCLEVBQXFCK1AseUJBQXJCLENBQXBCO0FBQ0Q7QUFDRixDQVh5QixHQVd0Qlgsc0JBWEo7O0FBYUEsSUFBSVksTUFBSSxHQUFHLFVBQVV6RyxHQUFWLEVBQWUwRyxXQUFmLEVBQTRCO0FBQ3JDLE1BQUkzUSxNQUFNLEdBQUdpUSxVQUFVLENBQUNoRyxHQUFELENBQVYsR0FBa0JrRixrQkFBa0IsQ0FBQzVPLE9BQU8sQ0FBQ21LLFdBQUQsQ0FBUixDQUFqRDtBQUNBZ0YsRUFBQUEsa0JBQWdCLENBQUMxUCxNQUFELEVBQVM7QUFDdkIrRSxJQUFBQSxJQUFJLEVBQUUwSyxNQURpQjtBQUV2QnhGLElBQUFBLEdBQUcsRUFBRUEsR0FGa0I7QUFHdkIwRyxJQUFBQSxXQUFXLEVBQUVBO0FBSFUsR0FBVCxDQUFoQjtBQUtBLE1BQUksQ0FBQzNOLGFBQUwsRUFBa0JoRCxNQUFNLENBQUMyUSxXQUFQLEdBQXFCQSxXQUFyQjtBQUNsQixTQUFPM1EsTUFBUDtBQUNELENBVEQ7O0FBV0EsSUFBSTJELGVBQWUsR0FBRyxTQUFTbEcsY0FBVCxDQUF3QitGLENBQXhCLEVBQTJCOUMsQ0FBM0IsRUFBOEJrRCxVQUE5QixFQUEwQztBQUM5RCxNQUFJSixDQUFDLEtBQUttTSxpQkFBVixFQUEyQmhNLGVBQWUsQ0FBQ3VNLHNCQUFELEVBQXlCeFAsQ0FBekIsRUFBNEJrRCxVQUE1QixDQUFmO0FBQzNCRixFQUFBQSxXQUFRLENBQUNGLENBQUQsQ0FBUjtBQUNBLE1BQUl0QyxHQUFHLEdBQUdtQyxlQUFhLENBQUMzQyxDQUFELENBQXZCO0FBQ0FnRCxFQUFBQSxXQUFRLENBQUNFLFVBQUQsQ0FBUjs7QUFDQSxNQUFJakMsUUFBTSxDQUFDc08sVUFBRCxFQUFhL08sR0FBYixDQUFWLEVBQTZCO0FBQzNCLFFBQUksQ0FBQzBDLFVBQVUsQ0FBQzFGLFVBQWhCLEVBQTRCO0FBQzFCLFVBQUksQ0FBQ3lELFFBQU0sQ0FBQzZCLENBQUQsRUFBSWdNLE1BQUosQ0FBWCxFQUF3Qk0sc0JBQW9CLENBQUN0TSxDQUFELEVBQUlnTSxNQUFKLEVBQVlyTSwwQkFBd0IsQ0FBQyxDQUFELEVBQUksRUFBSixDQUFwQyxDQUFwQjtBQUN4QkssTUFBQUEsQ0FBQyxDQUFDZ00sTUFBRCxDQUFELENBQVV0TyxHQUFWLElBQWlCLElBQWpCO0FBQ0QsS0FIRCxNQUdPO0FBQ0wsVUFBSVMsUUFBTSxDQUFDNkIsQ0FBRCxFQUFJZ00sTUFBSixDQUFOLElBQXFCaE0sQ0FBQyxDQUFDZ00sTUFBRCxDQUFELENBQVV0TyxHQUFWLENBQXpCLEVBQXlDc0MsQ0FBQyxDQUFDZ00sTUFBRCxDQUFELENBQVV0TyxHQUFWLElBQWlCLEtBQWpCO0FBQ3pDMEMsTUFBQUEsVUFBVSxHQUFHdUwsa0JBQWtCLENBQUN2TCxVQUFELEVBQWE7QUFBRTFGLFFBQUFBLFVBQVUsRUFBRWlGLDBCQUF3QixDQUFDLENBQUQsRUFBSSxLQUFKO0FBQXRDLE9BQWIsQ0FBL0I7QUFDRDs7QUFBQyxXQUFPcU4sbUJBQW1CLENBQUNoTixDQUFELEVBQUl0QyxHQUFKLEVBQVMwQyxVQUFULENBQTFCO0FBQ0g7O0FBQUMsU0FBT2tNLHNCQUFvQixDQUFDdE0sQ0FBRCxFQUFJdEMsR0FBSixFQUFTMEMsVUFBVCxDQUEzQjtBQUNILENBZEQ7O0FBZ0JBLElBQUlnTixpQkFBaUIsR0FBRyxTQUFTeEcsZ0JBQVQsQ0FBMEI1RyxDQUExQixFQUE2QjZHLFVBQTdCLEVBQXlDO0FBQy9EM0csRUFBQUEsV0FBUSxDQUFDRixDQUFELENBQVI7QUFDQSxNQUFJcU4sVUFBVSxHQUFHek4saUJBQWUsQ0FBQ2lILFVBQUQsQ0FBaEM7QUFDQSxNQUFJbEcsSUFBSSxHQUFHZ0csWUFBVSxDQUFDMEcsVUFBRCxDQUFWLENBQXVCOUksTUFBdkIsQ0FBOEIrSSxzQkFBc0IsQ0FBQ0QsVUFBRCxDQUFwRCxDQUFYO0FBQ0F0QixFQUFBQSxVQUFRLENBQUNwTCxJQUFELEVBQU8sVUFBVWpELEdBQVYsRUFBZTtBQUM1QixRQUFJLENBQUM4QixhQUFELElBQWdCckYscUJBQXFCLENBQUNJLElBQXRCLENBQTJCOFMsVUFBM0IsRUFBdUMzUCxHQUF2QyxDQUFwQixFQUFpRXlDLGVBQWUsQ0FBQ0gsQ0FBRCxFQUFJdEMsR0FBSixFQUFTMlAsVUFBVSxDQUFDM1AsR0FBRCxDQUFuQixDQUFmO0FBQ2xFLEdBRk8sQ0FBUjtBQUdBLFNBQU9zQyxDQUFQO0FBQ0QsQ0FSRDs7QUFVQSxJQUFJdU4sT0FBTyxHQUFHLFNBQVMzRSxNQUFULENBQWdCNUksQ0FBaEIsRUFBbUI2RyxVQUFuQixFQUErQjtBQUMzQyxTQUFPQSxVQUFVLEtBQUsxTCxTQUFmLEdBQTJCd1Esa0JBQWtCLENBQUMzTCxDQUFELENBQTdDLEdBQW1Eb04saUJBQWlCLENBQUN6QixrQkFBa0IsQ0FBQzNMLENBQUQsQ0FBbkIsRUFBd0I2RyxVQUF4QixDQUEzRTtBQUNELENBRkQ7O0FBSUEsSUFBSTFNLHFCQUFxQixHQUFHLFNBQVNDLG9CQUFULENBQThCSSxDQUE5QixFQUFpQztBQUMzRCxNQUFJMEMsQ0FBQyxHQUFHMkMsZUFBYSxDQUFDckYsQ0FBRCxDQUFyQjtBQUNBLE1BQUlFLFVBQVUsR0FBRzhSLDBCQUEwQixDQUFDalMsSUFBM0IsQ0FBZ0MsSUFBaEMsRUFBc0MyQyxDQUF0QyxDQUFqQjtBQUNBLE1BQUksU0FBU2lQLGlCQUFULElBQTRCaE8sUUFBTSxDQUFDc08sVUFBRCxFQUFhdlAsQ0FBYixDQUFsQyxJQUFxRCxDQUFDaUIsUUFBTSxDQUFDdU8sc0JBQUQsRUFBeUJ4UCxDQUF6QixDQUFoRSxFQUE2RixPQUFPLEtBQVA7QUFDN0YsU0FBT3hDLFVBQVUsSUFBSSxDQUFDeUQsUUFBTSxDQUFDLElBQUQsRUFBT2pCLENBQVAsQ0FBckIsSUFBa0MsQ0FBQ2lCLFFBQU0sQ0FBQ3NPLFVBQUQsRUFBYXZQLENBQWIsQ0FBekMsSUFBNERpQixRQUFNLENBQUMsSUFBRCxFQUFPNk4sTUFBUCxDQUFOLElBQXdCLEtBQUtBLE1BQUwsRUFBYTlPLENBQWIsQ0FBcEYsR0FDSHhDLFVBREcsR0FDVSxJQURqQjtBQUVELENBTkQ7O0FBUUEsSUFBSXFGLHlCQUF5QixHQUFHLFNBQVMxRix3QkFBVCxDQUFrQzJGLENBQWxDLEVBQXFDOUMsQ0FBckMsRUFBd0M7QUFDdEUsTUFBSTlELEVBQUUsR0FBR3dHLGlCQUFlLENBQUNJLENBQUQsQ0FBeEI7QUFDQSxNQUFJdEMsR0FBRyxHQUFHbUMsZUFBYSxDQUFDM0MsQ0FBRCxDQUF2QjtBQUNBLE1BQUk5RCxFQUFFLEtBQUsrUyxpQkFBUCxJQUEwQmhPLFFBQU0sQ0FBQ3NPLFVBQUQsRUFBYS9PLEdBQWIsQ0FBaEMsSUFBcUQsQ0FBQ1MsUUFBTSxDQUFDdU8sc0JBQUQsRUFBeUJoUCxHQUF6QixDQUFoRSxFQUErRjtBQUMvRixNQUFJakQsVUFBVSxHQUFHNFIsZ0NBQThCLENBQUNqVCxFQUFELEVBQUtzRSxHQUFMLENBQS9DOztBQUNBLE1BQUlqRCxVQUFVLElBQUkwRCxRQUFNLENBQUNzTyxVQUFELEVBQWEvTyxHQUFiLENBQXBCLElBQXlDLEVBQUVTLFFBQU0sQ0FBQy9FLEVBQUQsRUFBSzRTLE1BQUwsQ0FBTixJQUFzQjVTLEVBQUUsQ0FBQzRTLE1BQUQsQ0FBRixDQUFXdE8sR0FBWCxDQUF4QixDQUE3QyxFQUF1RjtBQUNyRmpELElBQUFBLFVBQVUsQ0FBQ0MsVUFBWCxHQUF3QixJQUF4QjtBQUNEOztBQUNELFNBQU9ELFVBQVA7QUFDRCxDQVREOztBQVdBLElBQUlvTyxvQkFBb0IsR0FBRyxTQUFTckUsbUJBQVQsQ0FBNkJ4RSxDQUE3QixFQUFnQztBQUN6RCxNQUFJbUUsS0FBSyxHQUFHb0kseUJBQXlCLENBQUMzTSxpQkFBZSxDQUFDSSxDQUFELENBQWhCLENBQXJDO0FBQ0EsTUFBSWIsTUFBTSxHQUFHLEVBQWI7QUFDQTRNLEVBQUFBLFVBQVEsQ0FBQzVILEtBQUQsRUFBUSxVQUFVekcsR0FBVixFQUFlO0FBQzdCLFFBQUksQ0FBQ1MsUUFBTSxDQUFDc08sVUFBRCxFQUFhL08sR0FBYixDQUFQLElBQTRCLENBQUNTLFFBQU0sQ0FBQzRDLFlBQUQsRUFBYXJELEdBQWIsQ0FBdkMsRUFBMER5QixNQUFNLENBQUNyQixJQUFQLENBQVlKLEdBQVo7QUFDM0QsR0FGTyxDQUFSO0FBR0EsU0FBT3lCLE1BQVA7QUFDRCxDQVBEOztBQVNBLElBQUltTyxzQkFBc0IsR0FBRyxTQUFTL1EscUJBQVQsQ0FBK0J5RCxDQUEvQixFQUFrQztBQUM3RCxNQUFJd04sbUJBQW1CLEdBQUd4TixDQUFDLEtBQUttTSxpQkFBaEM7QUFDQSxNQUFJaEksS0FBSyxHQUFHb0kseUJBQXlCLENBQUNpQixtQkFBbUIsR0FBR2Qsc0JBQUgsR0FBNEI5TSxpQkFBZSxDQUFDSSxDQUFELENBQS9ELENBQXJDO0FBQ0EsTUFBSWIsTUFBTSxHQUFHLEVBQWI7QUFDQTRNLEVBQUFBLFVBQVEsQ0FBQzVILEtBQUQsRUFBUSxVQUFVekcsR0FBVixFQUFlO0FBQzdCLFFBQUlTLFFBQU0sQ0FBQ3NPLFVBQUQsRUFBYS9PLEdBQWIsQ0FBTixLQUE0QixDQUFDOFAsbUJBQUQsSUFBd0JyUCxRQUFNLENBQUNnTyxpQkFBRCxFQUFrQnpPLEdBQWxCLENBQTFELENBQUosRUFBdUY7QUFDckZ5QixNQUFBQSxNQUFNLENBQUNyQixJQUFQLENBQVkyTyxVQUFVLENBQUMvTyxHQUFELENBQXRCO0FBQ0Q7QUFDRixHQUpPLENBQVI7QUFLQSxTQUFPeUIsTUFBUDtBQUNELENBVkQ7QUFhQTs7O0FBQ0EsSUFBSSxDQUFDdkMsYUFBTCxFQUFvQjtBQUNsQkcsRUFBQUEsT0FBTyxHQUFHLFNBQVNOLE1BQVQsR0FBa0I7QUFDMUIsUUFBSSxnQkFBZ0JNLE9BQXBCLEVBQTZCLE1BQU0zQixTQUFTLENBQUMsNkJBQUQsQ0FBZjtBQUM3QixRQUFJK1IsV0FBVyxHQUFHLENBQUN2UixTQUFTLENBQUNDLE1BQVgsSUFBcUJELFNBQVMsQ0FBQyxDQUFELENBQVQsS0FBaUJULFNBQXRDLEdBQWtEQSxTQUFsRCxHQUE4RHVRLFdBQVMsQ0FBQzlQLFNBQVMsQ0FBQyxDQUFELENBQVYsQ0FBekY7QUFDQSxRQUFJNkssR0FBRyxHQUFHakksS0FBRyxDQUFDMk8sV0FBRCxDQUFiOztBQUNBLFFBQUlNLE1BQU0sR0FBRyxVQUFVN1MsS0FBVixFQUFpQjtBQUM1QixVQUFJLFNBQVN1UixpQkFBYixFQUE4QnNCLE1BQU0sQ0FBQ2xULElBQVAsQ0FBWW1TLHNCQUFaLEVBQW9DOVIsS0FBcEM7QUFDOUIsVUFBSXVELFFBQU0sQ0FBQyxJQUFELEVBQU82TixNQUFQLENBQU4sSUFBd0I3TixRQUFNLENBQUMsS0FBSzZOLE1BQUwsQ0FBRCxFQUFldkYsR0FBZixDQUFsQyxFQUF1RCxLQUFLdUYsTUFBTCxFQUFhdkYsR0FBYixJQUFvQixLQUFwQjtBQUN2RHVHLE1BQUFBLG1CQUFtQixDQUFDLElBQUQsRUFBT3ZHLEdBQVAsRUFBWTlHLDBCQUF3QixDQUFDLENBQUQsRUFBSS9FLEtBQUosQ0FBcEMsQ0FBbkI7QUFDRCxLQUpEOztBQUtBLFFBQUk0RSxhQUFXLElBQUlzTixVQUFuQixFQUErQkUsbUJBQW1CLENBQUNiLGlCQUFELEVBQWtCMUYsR0FBbEIsRUFBdUI7QUFBRTVMLE1BQUFBLFlBQVksRUFBRSxJQUFoQjtBQUFzQm9HLE1BQUFBLEdBQUcsRUFBRXdNO0FBQTNCLEtBQXZCLENBQW5CO0FBQy9CLFdBQU9QLE1BQUksQ0FBQ3pHLEdBQUQsRUFBTTBHLFdBQU4sQ0FBWDtBQUNELEdBWEQ7O0FBYUEzSCxFQUFBQSxVQUFRLENBQUN6SSxPQUFPLENBQUNtSyxXQUFELENBQVIsRUFBcUIsVUFBckIsRUFBaUMsU0FBU25NLFFBQVQsR0FBb0I7QUFDM0QsV0FBT3VILGtCQUFnQixDQUFDLElBQUQsQ0FBaEIsQ0FBdUJtRSxHQUE5QjtBQUNELEdBRk8sQ0FBUjtBQUlBakIsRUFBQUEsVUFBUSxDQUFDekksT0FBRCxFQUFVLGVBQVYsRUFBMkIsVUFBVW9RLFdBQVYsRUFBdUI7QUFDeEQsV0FBT0QsTUFBSSxDQUFDMU8sS0FBRyxDQUFDMk8sV0FBRCxDQUFKLEVBQW1CQSxXQUFuQixDQUFYO0FBQ0QsR0FGTyxDQUFSO0FBSUF6TixFQUFBQSw0QkFBMEIsQ0FBQ08sQ0FBM0IsR0FBK0I5RixxQkFBL0I7QUFDQWtHLEVBQUFBLHNCQUFvQixDQUFDSixDQUFyQixHQUF5QkUsZUFBekI7QUFDQXlFLEVBQUFBLGdDQUE4QixDQUFDM0UsQ0FBL0IsR0FBbUNGLHlCQUFuQztBQUNBMEUsRUFBQUEsMkJBQXlCLENBQUN4RSxDQUExQixHQUE4QjJMLDJCQUEyQixDQUFDM0wsQ0FBNUIsR0FBZ0M0SSxvQkFBOUQ7QUFDQW5FLEVBQUFBLDZCQUEyQixDQUFDekUsQ0FBNUIsR0FBZ0NxTixzQkFBaEM7O0FBRUFyRSxFQUFBQSw0QkFBNEIsQ0FBQ2hKLENBQTdCLEdBQWlDLFVBQVVyQixJQUFWLEVBQWdCO0FBQy9DLFdBQU9zTyxNQUFJLENBQUNsTyxpQkFBZSxDQUFDSixJQUFELENBQWhCLEVBQXdCQSxJQUF4QixDQUFYO0FBQ0QsR0FGRDs7QUFJQSxNQUFJWSxhQUFKLEVBQWlCO0FBQ2Y7QUFDQThNLElBQUFBLHNCQUFvQixDQUFDdlAsT0FBTyxDQUFDbUssV0FBRCxDQUFSLEVBQXFCLGFBQXJCLEVBQW9DO0FBQ3REck0sTUFBQUEsWUFBWSxFQUFFLElBRHdDO0FBRXREWCxNQUFBQSxHQUFHLEVBQUUsU0FBU2lULFdBQVQsR0FBdUI7QUFDMUIsZUFBTzdLLGtCQUFnQixDQUFDLElBQUQsQ0FBaEIsQ0FBdUI2SyxXQUE5QjtBQUNEO0FBSnFELEtBQXBDLENBQXBCOztBQU1BLElBQWM7QUFDWjNILE1BQUFBLFVBQVEsQ0FBQzJHLGlCQUFELEVBQWtCLHNCQUFsQixFQUEwQ2hTLHFCQUExQyxFQUFpRTtBQUFFdUksUUFBQUEsTUFBTSxFQUFFO0FBQVYsT0FBakUsQ0FBUjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCtJLElBQUMsQ0FBQztBQUFFL1IsRUFBQUEsTUFBTSxFQUFFLElBQVY7QUFBZ0J3VCxFQUFBQSxJQUFJLEVBQUUsSUFBdEI7QUFBNEJqSCxFQUFBQSxNQUFNLEVBQUUsQ0FBQ3JKLGFBQXJDO0FBQW9ERCxFQUFBQSxJQUFJLEVBQUUsQ0FBQ0M7QUFBM0QsQ0FBRCxFQUE2RTtBQUM1RUgsRUFBQUEsTUFBTSxFQUFFTTtBQURvRSxDQUE3RSxDQUFEO0FBSUFnUCxVQUFRLENBQUNwRixZQUFVLENBQUNsSSxxQkFBRCxDQUFYLEVBQW9DLFVBQVVHLElBQVYsRUFBZ0I7QUFDMURpTixFQUFBQSx1QkFBcUIsQ0FBQ2pOLElBQUQsQ0FBckI7QUFDRCxDQUZPLENBQVI7QUFJQTZNLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFb0gsTUFBVjtBQUFrQnBHLEVBQUFBLElBQUksRUFBRSxJQUF4QjtBQUE4QkksRUFBQUEsTUFBTSxFQUFFLENBQUNySjtBQUF2QyxDQUFELEVBQXlEO0FBQ3hEO0FBQ0E7QUFDQSxTQUFPLFVBQVVjLEdBQVYsRUFBZTtBQUNwQixRQUFJNEgsTUFBTSxHQUFHb0csV0FBUyxDQUFDaE8sR0FBRCxDQUF0QjtBQUNBLFFBQUlTLFFBQU0sQ0FBQ3dPLHNCQUFELEVBQXlCckgsTUFBekIsQ0FBVixFQUE0QyxPQUFPcUgsc0JBQXNCLENBQUNySCxNQUFELENBQTdCO0FBQzVDLFFBQUk5SSxNQUFNLEdBQUdPLE9BQU8sQ0FBQ3VJLE1BQUQsQ0FBcEI7QUFDQXFILElBQUFBLHNCQUFzQixDQUFDckgsTUFBRCxDQUF0QixHQUFpQzlJLE1BQWpDO0FBQ0FvUSxJQUFBQSxzQkFBc0IsQ0FBQ3BRLE1BQUQsQ0FBdEIsR0FBaUM4SSxNQUFqQztBQUNBLFdBQU85SSxNQUFQO0FBQ0QsR0FWdUQ7QUFXeEQ7QUFDQTtBQUNBa1IsRUFBQUEsTUFBTSxFQUFFLFNBQVNBLE1BQVQsQ0FBZ0JDLEdBQWhCLEVBQXFCO0FBQzNCLFFBQUksQ0FBQzlPLFVBQVEsQ0FBQzhPLEdBQUQsQ0FBYixFQUFvQixNQUFNdlMsU0FBUyxDQUFDdVMsR0FBRyxHQUFHLGtCQUFQLENBQWY7QUFDcEIsUUFBSXhQLFFBQU0sQ0FBQ3lPLHNCQUFELEVBQXlCZSxHQUF6QixDQUFWLEVBQXlDLE9BQU9mLHNCQUFzQixDQUFDZSxHQUFELENBQTdCO0FBQzFDLEdBaEJ1RDtBQWlCeERDLEVBQUFBLFNBQVMsRUFBRSxZQUFZO0FBQUVkLElBQUFBLFVBQVUsR0FBRyxJQUFiO0FBQW9CLEdBakJXO0FBa0J4RGUsRUFBQUEsU0FBUyxFQUFFLFlBQVk7QUFBRWYsSUFBQUEsVUFBVSxHQUFHLEtBQWI7QUFBcUI7QUFsQlUsQ0FBekQsQ0FBRDtBQXFCQXJCLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JnQixFQUFBQSxJQUFJLEVBQUUsSUFBMUI7QUFBZ0NJLEVBQUFBLE1BQU0sRUFBRSxDQUFDckosYUFBekM7QUFBd0RELEVBQUFBLElBQUksRUFBRSxDQUFDNkM7QUFBL0QsQ0FBRCxFQUErRTtBQUM5RTtBQUNBO0FBQ0FvSixFQUFBQSxNQUFNLEVBQUUyRSxPQUhzRTtBQUk5RTtBQUNBO0FBQ0F0VCxFQUFBQSxjQUFjLEVBQUVrRyxlQU44RDtBQU85RTtBQUNBO0FBQ0F5RyxFQUFBQSxnQkFBZ0IsRUFBRXdHLGlCQVQ0RDtBQVU5RTtBQUNBO0FBQ0EvUyxFQUFBQSx3QkFBd0IsRUFBRTBGO0FBWm9ELENBQS9FLENBQUQ7QUFlQTBMLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JnQixFQUFBQSxJQUFJLEVBQUUsSUFBMUI7QUFBZ0NJLEVBQUFBLE1BQU0sRUFBRSxDQUFDcko7QUFBekMsQ0FBRCxFQUEyRDtBQUMxRDtBQUNBO0FBQ0E0SCxFQUFBQSxtQkFBbUIsRUFBRXFFLG9CQUhxQztBQUkxRDtBQUNBO0FBQ0F0TSxFQUFBQSxxQkFBcUIsRUFBRStRO0FBTm1DLENBQTNELENBQUQ7QUFVQTs7QUFDQTdCLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JnQixFQUFBQSxJQUFJLEVBQUUsSUFBMUI7QUFBZ0NJLEVBQUFBLE1BQU0sRUFBRW5NLE9BQUssQ0FBQyxZQUFZO0FBQUU0SyxJQUFBQSw2QkFBMkIsQ0FBQ3pFLENBQTVCLENBQThCLENBQTlCO0FBQW1DLEdBQWxEO0FBQTdDLENBQUQsRUFBcUc7QUFDcEcxRCxFQUFBQSxxQkFBcUIsRUFBRSxTQUFTQSxxQkFBVCxDQUErQm5ELEVBQS9CLEVBQW1DO0FBQ3hELFdBQU9zTCw2QkFBMkIsQ0FBQ3pFLENBQTVCLENBQThCaEMsVUFBUSxDQUFDN0UsRUFBRCxDQUF0QyxDQUFQO0FBQ0Q7QUFIbUcsQ0FBckcsQ0FBRDtBQU9BOztBQUNBLElBQUlnVCxZQUFKLEVBQWdCO0FBQ2QsTUFBSTBCLHFCQUFxQixHQUFHLENBQUNsUixhQUFELElBQWtCOUMsT0FBSyxDQUFDLFlBQVk7QUFDOUQsUUFBSTBDLE1BQU0sR0FBR08sT0FBTyxFQUFwQixDQUQ4RDs7QUFHOUQsV0FBT3FQLFlBQVUsQ0FBQyxDQUFDNVAsTUFBRCxDQUFELENBQVYsSUFBd0IsUUFBeEI7QUFBQSxPQUVGNFAsWUFBVSxDQUFDO0FBQUUzTSxNQUFBQSxDQUFDLEVBQUVqRDtBQUFMLEtBQUQsQ0FBVixJQUE2QixJQUYzQjtBQUFBLE9BSUY0UCxZQUFVLENBQUNwUyxNQUFNLENBQUN3QyxNQUFELENBQVAsQ0FBVixJQUE4QixJQUpuQztBQUtELEdBUmtELENBQW5EO0FBVUFpUCxFQUFBQSxJQUFDLENBQUM7QUFBRTVHLElBQUFBLE1BQU0sRUFBRSxNQUFWO0FBQWtCZ0IsSUFBQUEsSUFBSSxFQUFFLElBQXhCO0FBQThCSSxJQUFBQSxNQUFNLEVBQUU2SDtBQUF0QyxHQUFELEVBQWdFO0FBQy9EO0FBQ0FDLElBQUFBLFNBQVMsRUFBRSxTQUFTQSxTQUFULENBQW1CM1UsRUFBbkIsRUFBdUI0VSxRQUF2QixFQUFpQ0MsS0FBakMsRUFBd0M7QUFDakQsVUFBSUMsSUFBSSxHQUFHLENBQUM5VSxFQUFELENBQVg7QUFDQSxVQUFJa0ssS0FBSyxHQUFHLENBQVo7QUFDQSxVQUFJNkssU0FBSjs7QUFDQSxhQUFPdlMsU0FBUyxDQUFDQyxNQUFWLEdBQW1CeUgsS0FBMUIsRUFBaUM0SyxJQUFJLENBQUNwUSxJQUFMLENBQVVsQyxTQUFTLENBQUMwSCxLQUFLLEVBQU4sQ0FBbkI7O0FBQ2pDNkssTUFBQUEsU0FBUyxHQUFHSCxRQUFaO0FBQ0EsVUFBSSxDQUFDNVEsVUFBUSxDQUFDNFEsUUFBRCxDQUFULElBQXVCNVUsRUFBRSxLQUFLK0IsU0FBOUIsSUFBMkMwRCxVQUFRLENBQUN6RixFQUFELENBQXZELEVBQTZELE9BTlo7O0FBT2pELFVBQUksQ0FBQytNLFNBQU8sQ0FBQzZILFFBQUQsQ0FBWixFQUF3QkEsUUFBUSxHQUFHLFVBQVV0USxHQUFWLEVBQWU5QyxLQUFmLEVBQXNCO0FBQ3ZELFlBQUlZLFlBQVUsQ0FBQzJTLFNBQUQsQ0FBZCxFQUEyQnZULEtBQUssR0FBR3VULFNBQVMsQ0FBQzVULElBQVYsQ0FBZSxJQUFmLEVBQXFCbUQsR0FBckIsRUFBMEI5QyxLQUExQixDQUFSO0FBQzNCLFlBQUksQ0FBQ2lFLFVBQVEsQ0FBQ2pFLEtBQUQsQ0FBYixFQUFzQixPQUFPQSxLQUFQO0FBQ3ZCLE9BSHVCO0FBSXhCc1QsTUFBQUEsSUFBSSxDQUFDLENBQUQsQ0FBSixHQUFVRixRQUFWO0FBQ0EsYUFBTzVCLFlBQVUsQ0FBQzdDLEtBQVgsQ0FBaUIsSUFBakIsRUFBdUIyRSxJQUF2QixDQUFQO0FBQ0Q7QUFmOEQsR0FBaEUsQ0FBRDtBQWlCRDtBQUdEOzs7QUFDQSxJQUFJLENBQUNuUixPQUFPLENBQUNtSyxXQUFELENBQVAsQ0FBbUJqSSxjQUFuQixDQUFMLEVBQXVDO0FBQ3JDLE1BQUl4QixTQUFPLEdBQUdWLE9BQU8sQ0FBQ21LLFdBQUQsQ0FBUCxDQUFtQnpKLE9BQWpDO0FBQ0ErSCxFQUFBQSxVQUFRLENBQUN6SSxPQUFPLENBQUNtSyxXQUFELENBQVIsRUFBcUJqSSxjQUFyQixFQUFtQyxZQUFZO0FBQ3JELFdBQU94QixTQUFPLENBQUM4TCxLQUFSLENBQWMsSUFBZCxFQUFvQjNOLFNBQXBCLENBQVA7QUFDRCxHQUZPLENBQVI7QUFHRDtBQUVEOzs7QUFDQWtRLGdCQUFjLENBQUMvTyxPQUFELEVBQVVrUCxNQUFWLENBQWQ7QUFFQWxMLFlBQVUsQ0FBQ2lMLE1BQUQsQ0FBVixHQUFxQixJQUFyQjs7QUNsVEEsSUFBSVAsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJeUYsYUFBVyxHQUFHekYsV0FBbEI7O0FBQ0EsSUFBSUwsUUFBTSxHQUFHSyxRQUFiOztBQUNBLElBQUlvRSxRQUFNLEdBQUdwRSxnQkFBYjs7QUFDQSxJQUFJeUIsWUFBVSxHQUFHekIsWUFBakI7O0FBQ0EsSUFBSXFELFVBQVEsR0FBR3JELFVBQWY7O0FBQ0EsSUFBSUUsZ0JBQWMsR0FBR0Ysb0JBQUEsQ0FBK0NrRyxDQUFwRTs7QUFDQSxJQUFJd0YsMkJBQXlCLEdBQUcxTCwyQkFBaEM7O0FBRUEsSUFBSXFVLFlBQVksR0FBRzFVLFFBQU0sQ0FBQytDLE1BQTFCOztBQUVBLElBQUkrQyxhQUFXLElBQUloRSxZQUFVLENBQUM0UyxZQUFELENBQXpCLEtBQTRDLEVBQUUsaUJBQWlCQSxZQUFZLENBQUNyTSxTQUFoQztBQUU5Q3FNLFlBQVksR0FBR2pCLFdBQWYsS0FBK0JoUyxTQUY3QixDQUFKLEVBR0c7QUFDRCxNQUFJa1QsMkJBQTJCLEdBQUcsRUFBbEMsQ0FEQzs7QUFHRCxNQUFJQyxhQUFhLEdBQUcsU0FBUzdSLE1BQVQsR0FBa0I7QUFDcEMsUUFBSTBRLFdBQVcsR0FBR3ZSLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixJQUF3QkQsU0FBUyxDQUFDLENBQUQsQ0FBVCxLQUFpQlQsU0FBekMsR0FBcURBLFNBQXJELEdBQWlFdUIsTUFBTSxDQUFDZCxTQUFTLENBQUMsQ0FBRCxDQUFWLENBQXpGO0FBQ0EsUUFBSXVELE1BQU0sR0FBRyxnQkFBZ0JtUCxhQUFoQixHQUNULElBQUlGLFlBQUosQ0FBaUJqQixXQUFqQixDQURTO0FBQUEsTUFHVEEsV0FBVyxLQUFLaFMsU0FBaEIsR0FBNEJpVCxZQUFZLEVBQXhDLEdBQTZDQSxZQUFZLENBQUNqQixXQUFELENBSDdEO0FBSUEsUUFBSUEsV0FBVyxLQUFLLEVBQXBCLEVBQXdCa0IsMkJBQTJCLENBQUNsUCxNQUFELENBQTNCLEdBQXNDLElBQXRDO0FBQ3hCLFdBQU9BLE1BQVA7QUFDRCxHQVJEOztBQVNBc0csRUFBQUEsMkJBQXlCLENBQUM2SSxhQUFELEVBQWdCRixZQUFoQixDQUF6QjtBQUNBLE1BQUlHLGVBQWUsR0FBR0QsYUFBYSxDQUFDdk0sU0FBZCxHQUEwQnFNLFlBQVksQ0FBQ3JNLFNBQTdEO0FBQ0F3TSxFQUFBQSxlQUFlLENBQUNwRSxXQUFoQixHQUE4Qm1FLGFBQTlCO0FBRUEsTUFBSUUsY0FBYyxHQUFHRCxlQUFlLENBQUN4VCxRQUFyQztBQUNBLE1BQUkwVCxZQUFZLEdBQUcvUixNQUFNLENBQUMwUixZQUFZLENBQUMsTUFBRCxDQUFiLENBQU4sSUFBZ0MsY0FBbkQ7QUFDQSxNQUFJTSxNQUFNLEdBQUcsdUJBQWI7QUFDQXpVLEVBQUFBLGdCQUFjLENBQUNzVSxlQUFELEVBQWtCLGFBQWxCLEVBQWlDO0FBQzdDMVQsSUFBQUEsWUFBWSxFQUFFLElBRCtCO0FBRTdDWCxJQUFBQSxHQUFHLEVBQUUsU0FBU2lULFdBQVQsR0FBdUI7QUFDMUIsVUFBSTNRLE1BQU0sR0FBR1ksVUFBUSxDQUFDLElBQUQsQ0FBUixHQUFpQixLQUFLSyxPQUFMLEVBQWpCLEdBQWtDLElBQS9DO0FBQ0EsVUFBSTZILE1BQU0sR0FBR2tKLGNBQWMsQ0FBQ2pVLElBQWYsQ0FBb0JpQyxNQUFwQixDQUFiO0FBQ0EsVUFBSTJCLFFBQU0sQ0FBQ2tRLDJCQUFELEVBQThCN1IsTUFBOUIsQ0FBVixFQUFpRCxPQUFPLEVBQVA7QUFDakQsVUFBSW1TLElBQUksR0FBR0YsWUFBWSxHQUFHbkosTUFBTSxDQUFDdEssS0FBUCxDQUFhLENBQWIsRUFBZ0IsQ0FBQyxDQUFqQixDQUFILEdBQXlCc0ssTUFBTSxDQUFDekMsT0FBUCxDQUFlNkwsTUFBZixFQUF1QixJQUF2QixDQUFoRDtBQUNBLGFBQU9DLElBQUksS0FBSyxFQUFULEdBQWN4VCxTQUFkLEdBQTBCd1QsSUFBakM7QUFDRDtBQVI0QyxHQUFqQyxDQUFkO0FBV0FsRCxFQUFBQSxJQUFDLENBQUM7QUFBRS9SLElBQUFBLE1BQU0sRUFBRSxJQUFWO0FBQWdCdU0sSUFBQUEsTUFBTSxFQUFFO0FBQXhCLEdBQUQsRUFBaUM7QUFDaEN4SixJQUFBQSxNQUFNLEVBQUU2UjtBQUR3QixHQUFqQyxDQUFEO0FBR0Q7O0FDbERELElBQUl6Qyx1QkFBcUIsR0FBRzlSLHVCQUE1QjtBQUdBOzs7QUFDQThSLHVCQUFxQixDQUFDLGVBQUQsQ0FBckI7O0FDSkEsSUFBSUEsdUJBQXFCLEdBQUc5Uix1QkFBNUI7QUFHQTs7O0FBQ0E4Uix1QkFBcUIsQ0FBQyxhQUFELENBQXJCOztBQ0pBLElBQUlBLHVCQUFxQixHQUFHOVIsdUJBQTVCO0FBR0E7OztBQUNBOFIsdUJBQXFCLENBQUMsb0JBQUQsQ0FBckI7O0FDSkEsSUFBSUEsdUJBQXFCLEdBQUc5Uix1QkFBNUI7QUFHQTs7O0FBQ0E4Uix1QkFBcUIsQ0FBQyxVQUFELENBQXJCOztBQ0pBLElBQUlBLHVCQUFxQixHQUFHOVIsdUJBQTVCO0FBR0E7OztBQUNBOFIsdUJBQXFCLENBQUMsT0FBRCxDQUFyQjs7QUNKQSxJQUFJQSx1QkFBcUIsR0FBRzlSLHVCQUE1QjtBQUdBOzs7QUFDQThSLHVCQUFxQixDQUFDLFVBQUQsQ0FBckI7O0FDSkEsSUFBSUEsdUJBQXFCLEdBQUc5Uix1QkFBNUI7QUFHQTs7O0FBQ0E4Uix1QkFBcUIsQ0FBQyxTQUFELENBQXJCOztBQ0pBLElBQUlBLHVCQUFxQixHQUFHOVIsdUJBQTVCO0FBR0E7OztBQUNBOFIsdUJBQXFCLENBQUMsUUFBRCxDQUFyQjs7QUNKQSxJQUFJQSx1QkFBcUIsR0FBRzlSLHVCQUE1QjtBQUdBOzs7QUFDQThSLHVCQUFxQixDQUFDLFNBQUQsQ0FBckI7O0FDSkEsSUFBSUEsdUJBQXFCLEdBQUc5Uix1QkFBNUI7QUFHQTs7O0FBQ0E4Uix1QkFBcUIsQ0FBQyxPQUFELENBQXJCOztBQ0pBLElBQUlBLHVCQUFxQixHQUFHOVIsdUJBQTVCO0FBR0E7OztBQUNBOFIsdUJBQXFCLENBQUMsYUFBRCxDQUFyQjs7QUNKQSxJQUFJQSx1QkFBcUIsR0FBRzlSLHVCQUE1QjtBQUdBOzs7QUFDQThSLHVCQUFxQixDQUFDLGFBQUQsQ0FBckI7O0FDSkEsSUFBSUEsdUJBQXFCLEdBQUc5Uix1QkFBNUI7QUFHQTs7O0FBQ0E4Uix1QkFBcUIsQ0FBQyxhQUFELENBQXJCOztBQ0pBLElBQUkvUixPQUFLLEdBQUdDLFFBQVo7O0lBRUFULHNCQUFBLEdBQWlCLENBQUNRLE9BQUssQ0FBQyxZQUFZO0FBQ2xDLFdBQVMwTyxDQUFULEdBQWE7QUFBRTtBQUFhOztBQUM1QkEsRUFBQUEsQ0FBQyxDQUFDekcsU0FBRixDQUFZb0ksV0FBWixHQUEwQixJQUExQixDQUZrQzs7QUFJbEMsU0FBT25RLE1BQU0sQ0FBQzRVLGNBQVAsQ0FBc0IsSUFBSXBHLENBQUosRUFBdEIsTUFBbUNBLENBQUMsQ0FBQ3pHLFNBQTVDO0FBQ0QsQ0FMc0IsQ0FBdkI7O0FDRkEsSUFBSTVELFFBQU0sR0FBR3BFLGdCQUFiOztBQUNBLElBQUl5QixZQUFVLEdBQUd6QixZQUFqQjs7QUFDQSxJQUFJa0UsVUFBUSxHQUFHbEUsVUFBZjs7QUFDQSxJQUFJK0csU0FBUyxHQUFHL0csV0FBaEI7O0FBQ0EsSUFBSThVLDBCQUF3QixHQUFHOVUsc0JBQS9COztBQUVBLElBQUlxTixRQUFRLEdBQUd0RyxTQUFTLENBQUMsVUFBRCxDQUF4QjtBQUNBLElBQUlxTCxpQkFBZSxHQUFHblMsTUFBTSxDQUFDK0gsU0FBN0I7QUFHQTtBQUNBOztJQUNBekksc0JBQUEsR0FBaUJ1ViwwQkFBd0IsR0FBRzdVLE1BQU0sQ0FBQzRVLGNBQVYsR0FBMkIsVUFBVTVPLENBQVYsRUFBYTtBQUMvRSxNQUFJTSxNQUFNLEdBQUdyQyxVQUFRLENBQUMrQixDQUFELENBQXJCO0FBQ0EsTUFBSTdCLFFBQU0sQ0FBQ21DLE1BQUQsRUFBUzhHLFFBQVQsQ0FBVixFQUE4QixPQUFPOUcsTUFBTSxDQUFDOEcsUUFBRCxDQUFiO0FBQzlCLE1BQUkrQyxXQUFXLEdBQUc3SixNQUFNLENBQUM2SixXQUF6Qjs7QUFDQSxNQUFJM08sWUFBVSxDQUFDMk8sV0FBRCxDQUFWLElBQTJCN0osTUFBTSxZQUFZNkosV0FBakQsRUFBOEQ7QUFDNUQsV0FBT0EsV0FBVyxDQUFDcEksU0FBbkI7QUFDRDs7QUFBQyxTQUFPekIsTUFBTSxZQUFZdEcsTUFBbEIsR0FBMkJtUyxpQkFBM0IsR0FBNkMsSUFBcEQ7QUFDSCxDQVBEOztBQ1pBLElBQUkzUSxZQUFVLEdBQUd6QixZQUFqQjs7SUFFQVQsb0JBQUEsR0FBaUIsVUFBVWlDLFFBQVYsRUFBb0I7QUFDbkMsTUFBSSxPQUFPQSxRQUFQLEtBQW9CLFFBQXBCLElBQWdDQyxZQUFVLENBQUNELFFBQUQsQ0FBOUMsRUFBMEQsT0FBT0EsUUFBUDtBQUMxRCxRQUFNSCxTQUFTLENBQUMsZUFBZXNCLE1BQU0sQ0FBQ25CLFFBQUQsQ0FBckIsR0FBa0MsaUJBQW5DLENBQWY7QUFDRCxDQUhEOzs7O0FDREEsSUFBSTJFLFdBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSStVLG9CQUFrQixHQUFHL1Usb0JBQXpCO0FBR0E7QUFDQTtBQUNBOzs7SUFDQVQsc0JBQUEsR0FBaUJVLE1BQU0sQ0FBQytVLGNBQVAsS0FBMEIsZUFBZSxFQUFmLEdBQW9CLFlBQVk7QUFDekUsTUFBSUMsY0FBYyxHQUFHLEtBQXJCO0FBQ0EsTUFBSXRPLElBQUksR0FBRyxFQUFYO0FBQ0EsTUFBSStNLE1BQUo7O0FBQ0EsTUFBSTtBQUNGO0FBQ0FBLElBQUFBLE1BQU0sR0FBR3pULE1BQU0sQ0FBQ0ssd0JBQVAsQ0FBZ0NMLE1BQU0sQ0FBQytILFNBQXZDLEVBQWtELFdBQWxELEVBQStEZCxHQUF4RTtBQUNBd00sSUFBQUEsTUFBTSxDQUFDbFQsSUFBUCxDQUFZbUcsSUFBWixFQUFrQixFQUFsQjtBQUNBc08sSUFBQUEsY0FBYyxHQUFHdE8sSUFBSSxZQUFZd0YsS0FBakM7QUFDRCxHQUxELENBS0UsT0FBT3JNLEtBQVAsRUFBYztBQUFFO0FBQWE7O0FBQy9CLFNBQU8sU0FBU2tWLGNBQVQsQ0FBd0IvTyxDQUF4QixFQUEyQmlQLEtBQTNCLEVBQWtDO0FBQ3ZDL08sSUFBQUEsV0FBUSxDQUFDRixDQUFELENBQVI7QUFDQThPLElBQUFBLG9CQUFrQixDQUFDRyxLQUFELENBQWxCO0FBQ0EsUUFBSUQsY0FBSixFQUFvQnZCLE1BQU0sQ0FBQ2xULElBQVAsQ0FBWXlGLENBQVosRUFBZWlQLEtBQWYsRUFBcEIsS0FDS2pQLENBQUMsQ0FBQ2tQLFNBQUYsR0FBY0QsS0FBZDtBQUNMLFdBQU9qUCxDQUFQO0FBQ0QsR0FORDtBQU9ELENBakI4RCxFQUFwQixHQWlCckM3RSxTQWpCVyxDQUFqQjs7QUNSQSxJQUFJaUMsVUFBUSxHQUFHckQsVUFBZjs7QUFDQSxJQUFJOEcsNkJBQTJCLEdBQUc5Ryw2QkFBbEM7QUFHQTs7O0lBQ0FULG1CQUFBLEdBQWlCLFVBQVUwRyxDQUFWLEVBQWF5QyxPQUFiLEVBQXNCO0FBQ3JDLE1BQUlyRixVQUFRLENBQUNxRixPQUFELENBQVIsSUFBcUIsV0FBV0EsT0FBcEMsRUFBNkM7QUFDM0M1QixJQUFBQSw2QkFBMkIsQ0FBQ2IsQ0FBRCxFQUFJLE9BQUosRUFBYXlDLE9BQU8sQ0FBQzBNLEtBQXJCLENBQTNCO0FBQ0Q7QUFDRixDQUpEOztJQ0xBN1YsU0FBQSxHQUFpQixFQUFqQjs7QUNBQSxJQUFJMEYsaUJBQWUsR0FBR2pGLGlCQUF0Qjs7QUFDQSxJQUFJcVYsV0FBUyxHQUFHclYsU0FBaEI7O0FBRUEsSUFBSXNWLFVBQVEsR0FBR3JRLGlCQUFlLENBQUMsVUFBRCxDQUE5QjtBQUNBLElBQUlzUSxnQkFBYyxHQUFHcEosS0FBSyxDQUFDbkUsU0FBM0I7O0lBR0F6SSx1QkFBQSxHQUFpQixVQUFVRixFQUFWLEVBQWM7QUFDN0IsU0FBT0EsRUFBRSxLQUFLK0IsU0FBUCxLQUFxQmlVLFdBQVMsQ0FBQ2xKLEtBQVYsS0FBb0I5TSxFQUFwQixJQUEwQmtXLGdCQUFjLENBQUNELFVBQUQsQ0FBZCxLQUE2QmpXLEVBQTVFLENBQVA7QUFDRCxDQUZEOztBQ1BBLElBQUk2QixTQUFPLEdBQUdsQixTQUFkOztBQUNBLElBQUkrRSxXQUFTLEdBQUcvRSxXQUFoQjs7QUFDQSxJQUFJcVYsV0FBUyxHQUFHclYsU0FBaEI7O0FBQ0EsSUFBSWlGLGlCQUFlLEdBQUdqRixpQkFBdEI7O0FBRUEsSUFBSXNWLFVBQVEsR0FBR3JRLGlCQUFlLENBQUMsVUFBRCxDQUE5Qjs7SUFFQTFGLG1CQUFBLEdBQWlCLFVBQVVGLEVBQVYsRUFBYztBQUM3QixNQUFJQSxFQUFFLElBQUkrQixTQUFWLEVBQXFCLE9BQU8yRCxXQUFTLENBQUMxRixFQUFELEVBQUtpVyxVQUFMLENBQVQsSUFDdkJ2USxXQUFTLENBQUMxRixFQUFELEVBQUssWUFBTCxDQURjLElBRXZCZ1csV0FBUyxDQUFDblUsU0FBTyxDQUFDN0IsRUFBRCxDQUFSLENBRk87QUFHdEIsQ0FKRDs7QUNQQSxJQUFJNkQsV0FBUyxHQUFHbEQsV0FBaEI7O0FBQ0EsSUFBSW1HLFdBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSXdWLG1CQUFpQixHQUFHeFYsbUJBQXhCOztJQUVBVCxhQUFBLEdBQWlCLFVBQVVpQyxRQUFWLEVBQW9CaVUsYUFBcEIsRUFBbUM7QUFDbEQsTUFBSUMsY0FBYyxHQUFHN1QsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCMFQsbUJBQWlCLENBQUNoVSxRQUFELENBQXhDLEdBQXFEaVUsYUFBMUU7QUFDQSxNQUFJdlMsV0FBUyxDQUFDd1MsY0FBRCxDQUFiLEVBQStCLE9BQU92UCxXQUFRLENBQUN1UCxjQUFjLENBQUNsVixJQUFmLENBQW9CZ0IsUUFBcEIsQ0FBRCxDQUFmO0FBQy9CLFFBQU1ILFNBQVMsQ0FBQ3NCLE1BQU0sQ0FBQ25CLFFBQUQsQ0FBTixHQUFtQixrQkFBcEIsQ0FBZjtBQUNELENBSkQ7O0FDSkEsSUFBSTJFLFdBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSStFLFdBQVMsR0FBRy9FLFdBQWhCOztJQUVBVCxlQUFBLEdBQWlCLFVBQVV1RCxRQUFWLEVBQW9CNlMsSUFBcEIsRUFBMEI5VSxLQUExQixFQUFpQztBQUNoRCxNQUFJK1UsV0FBSixFQUFpQkMsVUFBakI7QUFDQTFQLEVBQUFBLFdBQVEsQ0FBQ3JELFFBQUQsQ0FBUjs7QUFDQSxNQUFJO0FBQ0Y4UyxJQUFBQSxXQUFXLEdBQUc3USxXQUFTLENBQUNqQyxRQUFELEVBQVcsUUFBWCxDQUF2Qjs7QUFDQSxRQUFJLENBQUM4UyxXQUFMLEVBQWtCO0FBQ2hCLFVBQUlELElBQUksS0FBSyxPQUFiLEVBQXNCLE1BQU05VSxLQUFOO0FBQ3RCLGFBQU9BLEtBQVA7QUFDRDs7QUFDRCtVLElBQUFBLFdBQVcsR0FBR0EsV0FBVyxDQUFDcFYsSUFBWixDQUFpQnNDLFFBQWpCLENBQWQ7QUFDRCxHQVBELENBT0UsT0FBT2hELEtBQVAsRUFBYztBQUNkK1YsSUFBQUEsVUFBVSxHQUFHLElBQWI7QUFDQUQsSUFBQUEsV0FBVyxHQUFHOVYsS0FBZDtBQUNEOztBQUNELE1BQUk2VixJQUFJLEtBQUssT0FBYixFQUFzQixNQUFNOVUsS0FBTjtBQUN0QixNQUFJZ1YsVUFBSixFQUFnQixNQUFNRCxXQUFOO0FBQ2hCelAsRUFBQUEsV0FBUSxDQUFDeVAsV0FBRCxDQUFSO0FBQ0EsU0FBTy9VLEtBQVA7QUFDRCxDQWxCRDs7QUNIQSxJQUFJc0YsV0FBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJOFYsdUJBQXFCLEdBQUc5Vix1QkFBNUI7O0FBQ0EsSUFBSTRKLG1CQUFpQixHQUFHNUosbUJBQXhCOztBQUNBLElBQUlzUSxNQUFJLEdBQUd0USxtQkFBWDs7QUFDQSxJQUFJK1YsYUFBVyxHQUFHL1YsYUFBbEI7O0FBQ0EsSUFBSXdWLG1CQUFpQixHQUFHeFYsbUJBQXhCOztBQUNBLElBQUlnVyxlQUFhLEdBQUdoVyxlQUFwQjs7QUFFQSxJQUFJaVcsTUFBTSxHQUFHLFVBQVVDLE9BQVYsRUFBbUI5USxNQUFuQixFQUEyQjtBQUN0QyxPQUFLOFEsT0FBTCxHQUFlQSxPQUFmO0FBQ0EsT0FBSzlRLE1BQUwsR0FBY0EsTUFBZDtBQUNELENBSEQ7O0lBS0E3RixTQUFBLEdBQWlCLFVBQVU0VyxRQUFWLEVBQW9CQyxlQUFwQixFQUFxQzFOLE9BQXJDLEVBQThDO0FBQzdELE1BQUkyRyxJQUFJLEdBQUczRyxPQUFPLElBQUlBLE9BQU8sQ0FBQzJHLElBQTlCO0FBQ0EsTUFBSWdILFVBQVUsR0FBRyxDQUFDLEVBQUUzTixPQUFPLElBQUlBLE9BQU8sQ0FBQzJOLFVBQXJCLENBQWxCO0FBQ0EsTUFBSUMsV0FBVyxHQUFHLENBQUMsRUFBRTVOLE9BQU8sSUFBSUEsT0FBTyxDQUFDNE4sV0FBckIsQ0FBbkI7QUFDQSxNQUFJQyxXQUFXLEdBQUcsQ0FBQyxFQUFFN04sT0FBTyxJQUFJQSxPQUFPLENBQUM2TixXQUFyQixDQUFuQjtBQUNBLE1BQUkvUyxFQUFFLEdBQUc4TSxNQUFJLENBQUM4RixlQUFELEVBQWtCL0csSUFBbEIsRUFBd0IsSUFBSWdILFVBQUosR0FBaUJFLFdBQXpDLENBQWI7QUFDQSxNQUFJelQsUUFBSixFQUFjMFQsTUFBZCxFQUFzQmpOLEtBQXRCLEVBQTZCekgsTUFBN0IsRUFBcUNzRCxNQUFyQyxFQUE2Q3FSLElBQTdDLEVBQW1EQyxJQUFuRDs7QUFFQSxNQUFJQyxJQUFJLEdBQUcsVUFBVUMsU0FBVixFQUFxQjtBQUM5QixRQUFJOVQsUUFBSixFQUFja1QsZUFBYSxDQUFDbFQsUUFBRCxFQUFXLFFBQVgsRUFBcUI4VCxTQUFyQixDQUFiO0FBQ2QsV0FBTyxJQUFJWCxNQUFKLENBQVcsSUFBWCxFQUFpQlcsU0FBakIsQ0FBUDtBQUNELEdBSEQ7O0FBS0EsTUFBSUMsTUFBTSxHQUFHLFVBQVVoVyxLQUFWLEVBQWlCO0FBQzVCLFFBQUl3VixVQUFKLEVBQWdCO0FBQ2RsUSxNQUFBQSxXQUFRLENBQUN0RixLQUFELENBQVI7QUFDQSxhQUFPMFYsV0FBVyxHQUFHL1MsRUFBRSxDQUFDM0MsS0FBSyxDQUFDLENBQUQsQ0FBTixFQUFXQSxLQUFLLENBQUMsQ0FBRCxDQUFoQixFQUFxQjhWLElBQXJCLENBQUwsR0FBa0NuVCxFQUFFLENBQUMzQyxLQUFLLENBQUMsQ0FBRCxDQUFOLEVBQVdBLEtBQUssQ0FBQyxDQUFELENBQWhCLENBQXREO0FBQ0Q7O0FBQUMsV0FBTzBWLFdBQVcsR0FBRy9TLEVBQUUsQ0FBQzNDLEtBQUQsRUFBUThWLElBQVIsQ0FBTCxHQUFxQm5ULEVBQUUsQ0FBQzNDLEtBQUQsQ0FBekM7QUFDSCxHQUxEOztBQU9BLE1BQUl5VixXQUFKLEVBQWlCO0FBQ2Z4VCxJQUFBQSxRQUFRLEdBQUdxVCxRQUFYO0FBQ0QsR0FGRCxNQUVPO0FBQ0xLLElBQUFBLE1BQU0sR0FBR2hCLG1CQUFpQixDQUFDVyxRQUFELENBQTFCO0FBQ0EsUUFBSSxDQUFDSyxNQUFMLEVBQWEsTUFBTW5WLFNBQVMsQ0FBQ3NCLE1BQU0sQ0FBQ3dULFFBQUQsQ0FBTixHQUFtQixrQkFBcEIsQ0FBZixDQUZSOztBQUlMLFFBQUlMLHVCQUFxQixDQUFDVSxNQUFELENBQXpCLEVBQW1DO0FBQ2pDLFdBQUtqTixLQUFLLEdBQUcsQ0FBUixFQUFXekgsTUFBTSxHQUFHOEgsbUJBQWlCLENBQUN1TSxRQUFELENBQTFDLEVBQXNEclUsTUFBTSxHQUFHeUgsS0FBL0QsRUFBc0VBLEtBQUssRUFBM0UsRUFBK0U7QUFDN0VuRSxRQUFBQSxNQUFNLEdBQUd5UixNQUFNLENBQUNWLFFBQVEsQ0FBQzVNLEtBQUQsQ0FBVCxDQUFmO0FBQ0EsWUFBSW5FLE1BQU0sSUFBSUEsTUFBTSxZQUFZNlEsTUFBaEMsRUFBd0MsT0FBTzdRLE1BQVA7QUFDekM7O0FBQUMsYUFBTyxJQUFJNlEsTUFBSixDQUFXLEtBQVgsQ0FBUDtBQUNIOztBQUNEblQsSUFBQUEsUUFBUSxHQUFHaVQsYUFBVyxDQUFDSSxRQUFELEVBQVdLLE1BQVgsQ0FBdEI7QUFDRDs7QUFFREMsRUFBQUEsSUFBSSxHQUFHM1QsUUFBUSxDQUFDMlQsSUFBaEI7O0FBQ0EsU0FBTyxDQUFDLENBQUNDLElBQUksR0FBR0QsSUFBSSxDQUFDalcsSUFBTCxDQUFVc0MsUUFBVixDQUFSLEVBQTZCZ1UsSUFBckMsRUFBMkM7QUFDekMsUUFBSTtBQUNGMVIsTUFBQUEsTUFBTSxHQUFHeVIsTUFBTSxDQUFDSCxJQUFJLENBQUM3VixLQUFOLENBQWY7QUFDRCxLQUZELENBRUUsT0FBT2YsS0FBUCxFQUFjO0FBQ2RrVyxNQUFBQSxlQUFhLENBQUNsVCxRQUFELEVBQVcsT0FBWCxFQUFvQmhELEtBQXBCLENBQWI7QUFDRDs7QUFDRCxRQUFJLE9BQU9zRixNQUFQLElBQWlCLFFBQWpCLElBQTZCQSxNQUE3QixJQUF1Q0EsTUFBTSxZQUFZNlEsTUFBN0QsRUFBcUUsT0FBTzdRLE1BQVA7QUFDdEU7O0FBQUMsU0FBTyxJQUFJNlEsTUFBSixDQUFXLEtBQVgsQ0FBUDtBQUNILENBNUNEOztBQ1pBLElBQUl2RSxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUk2VSxnQkFBYyxHQUFHN1Usc0JBQXJCOztBQUNBLElBQUlnVixnQkFBYyxHQUFHaFYsc0JBQXJCOztBQUNBLElBQUkwTCx5QkFBeUIsR0FBRzFMLDJCQUFoQzs7QUFDQSxJQUFJNk8sUUFBTSxHQUFHN08sY0FBYjs7QUFDQSxJQUFJOEcsNkJBQTJCLEdBQUc5Ryw2QkFBbEM7O0FBQ0EsSUFBSTRGLDBCQUF3QixHQUFHNUYsMEJBQS9COztBQUNBLElBQUkrVyxpQkFBaUIsR0FBRy9XLG1CQUF4Qjs7QUFDQSxJQUFJZ1gsU0FBTyxHQUFHaFgsU0FBZDs7QUFDQSxJQUFJZ0IsVUFBUSxHQUFHaEIsVUFBZjs7QUFFQSxJQUFJaVgsZUFBZSxHQUFHLFNBQVNDLGNBQVQsQ0FBd0JDLE1BQXhCLEVBQWdDQztBQUFRO0FBQXhDLEVBQXlEO0FBQzdFLE1BQUkvSCxJQUFJLEdBQUcsSUFBWDtBQUNBLE1BQUkzRyxPQUFPLEdBQUc3RyxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJELFNBQVMsQ0FBQyxDQUFELENBQWhDLEdBQXNDVCxTQUFwRDtBQUNBLE1BQUksRUFBRWlPLElBQUksWUFBWTRILGVBQWxCLENBQUosRUFBd0MsT0FBTyxJQUFJQSxlQUFKLENBQW9CRSxNQUFwQixFQUE0QkMsT0FBNUIsRUFBcUMxTyxPQUFyQyxDQUFQOztBQUN4QyxNQUFJc00sZ0JBQUosRUFBb0I7QUFDbEI7QUFDQTNGLElBQUFBLElBQUksR0FBRzJGLGdCQUFjLENBQUMsSUFBSXFDLEtBQUosQ0FBVWpXLFNBQVYsQ0FBRCxFQUF1QnlULGdCQUFjLENBQUN4RixJQUFELENBQXJDLENBQXJCO0FBQ0Q7O0FBQ0QsTUFBSStILE9BQU8sS0FBS2hXLFNBQWhCLEVBQTJCMEYsNkJBQTJCLENBQUN1SSxJQUFELEVBQU8sU0FBUCxFQUFrQnJPLFVBQVEsQ0FBQ29XLE9BQUQsQ0FBMUIsQ0FBM0I7QUFDM0JMLEVBQUFBLGlCQUFpQixDQUFDMUgsSUFBRCxFQUFPM0csT0FBUCxDQUFqQjtBQUNBLE1BQUk0TyxXQUFXLEdBQUcsRUFBbEI7QUFDQU4sRUFBQUEsU0FBTyxDQUFDRyxNQUFELEVBQVNHLFdBQVcsQ0FBQ3ZULElBQXJCLEVBQTJCO0FBQUVzTCxJQUFBQSxJQUFJLEVBQUVpSTtBQUFSLEdBQTNCLENBQVA7QUFDQXhRLEVBQUFBLDZCQUEyQixDQUFDdUksSUFBRCxFQUFPLFFBQVAsRUFBaUJpSSxXQUFqQixDQUEzQjtBQUNBLFNBQU9qSSxJQUFQO0FBQ0QsQ0FkRDs7QUFnQkEsSUFBSTJGLGdCQUFKLEVBQW9CQSxnQkFBYyxDQUFDaUMsZUFBRCxFQUFrQkksS0FBbEIsQ0FBZCxDQUFwQixLQUNLM0wseUJBQXlCLENBQUN1TCxlQUFELEVBQWtCSSxLQUFsQixDQUF6QjtBQUVMSixlQUFlLENBQUNqUCxTQUFoQixHQUE0QjZHLFFBQU0sQ0FBQ3dJLEtBQUssQ0FBQ3JQLFNBQVAsRUFBa0I7QUFDbERvSSxFQUFBQSxXQUFXLEVBQUV4SywwQkFBd0IsQ0FBQyxDQUFELEVBQUlxUixlQUFKLENBRGE7QUFFbERHLEVBQUFBLE9BQU8sRUFBRXhSLDBCQUF3QixDQUFDLENBQUQsRUFBSSxFQUFKLENBRmlCO0FBR2xEZixFQUFBQSxJQUFJLEVBQUVlLDBCQUF3QixDQUFDLENBQUQsRUFBSSxnQkFBSjtBQUhvQixDQUFsQixDQUFsQztBQU9BOztBQUNBOEwsSUFBQyxDQUFDO0FBQUUvUixFQUFBQSxNQUFNLEVBQUU7QUFBVixDQUFELEVBQW1CO0FBQ2xCdVgsRUFBQUEsY0FBYyxFQUFFRDtBQURFLENBQW5CLENBQUQ7O0FDdkNBLElBQUloUyxpQkFBZSxHQUFHakYsaUJBQXRCOztBQUNBLElBQUk2TyxRQUFNLEdBQUc3TyxjQUFiOztBQUNBLElBQUlzRyxzQkFBb0IsR0FBR3RHLG9CQUEzQjs7QUFFQSxJQUFJdVgsV0FBVyxHQUFHdFMsaUJBQWUsQ0FBQyxhQUFELENBQWpDO0FBQ0EsSUFBSXNRLGdCQUFjLEdBQUdwSixLQUFLLENBQUNuRSxTQUEzQjtBQUdBOztBQUNBLElBQUl1TixnQkFBYyxDQUFDZ0MsV0FBRCxDQUFkLElBQStCblcsU0FBbkMsRUFBOEM7QUFDNUNrRixFQUFBQSxzQkFBb0IsQ0FBQ0osQ0FBckIsQ0FBdUJxUCxnQkFBdkIsRUFBdUNnQyxXQUF2QyxFQUFvRDtBQUNsRHpXLElBQUFBLFlBQVksRUFBRSxJQURvQztBQUVsREQsSUFBQUEsS0FBSyxFQUFFZ08sUUFBTSxDQUFDLElBQUQ7QUFGcUMsR0FBcEQ7QUFJRDs7O0lBR0R0UCxrQkFBQSxHQUFpQixVQUFVb0UsR0FBVixFQUFlO0FBQzlCNFIsRUFBQUEsZ0JBQWMsQ0FBQ2dDLFdBQUQsQ0FBZCxDQUE0QjVULEdBQTVCLElBQW1DLElBQW5DO0FBQ0QsQ0FGRDs7QUNoQkEsSUFBSStOLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSWtFLFVBQVEsR0FBR2xFLFVBQWY7O0FBQ0EsSUFBSTRKLG1CQUFpQixHQUFHNUosbUJBQXhCOztBQUNBLElBQUlvSixxQkFBbUIsR0FBR3BKLHFCQUExQjs7QUFDQSxJQUFJd1gsa0JBQWdCLEdBQUd4WCxrQkFBdkI7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxPQUFWO0FBQW1Cb0ssRUFBQUEsS0FBSyxFQUFFO0FBQTFCLENBQUQsRUFBbUM7QUFDbEN1QyxFQUFBQSxFQUFFLEVBQUUsU0FBU0EsRUFBVCxDQUFZbE8sS0FBWixFQUFtQjtBQUNyQixRQUFJdEQsQ0FBQyxHQUFHL0IsVUFBUSxDQUFDLElBQUQsQ0FBaEI7QUFDQSxRQUFJd1QsR0FBRyxHQUFHOU4sbUJBQWlCLENBQUMzRCxDQUFELENBQTNCO0FBQ0EsUUFBSTBSLGFBQWEsR0FBR3ZPLHFCQUFtQixDQUFDRyxLQUFELENBQXZDO0FBQ0EsUUFBSXFPLENBQUMsR0FBR0QsYUFBYSxJQUFJLENBQWpCLEdBQXFCQSxhQUFyQixHQUFxQ0QsR0FBRyxHQUFHQyxhQUFuRDtBQUNBLFdBQVFDLENBQUMsR0FBRyxDQUFKLElBQVNBLENBQUMsSUFBSUYsR0FBZixHQUFzQnRXLFNBQXRCLEdBQWtDNkUsQ0FBQyxDQUFDMlIsQ0FBRCxDQUExQztBQUNEO0FBUGlDLENBQW5DLENBQUQ7QUFVQUosa0JBQWdCLENBQUMsSUFBRCxDQUFoQjs7QUNsQkEsSUFBSTFSLGVBQWEsR0FBRzlGLGVBQXBCOztBQUNBLElBQUlzRyxzQkFBb0IsR0FBR3RHLG9CQUEzQjs7QUFDQSxJQUFJNEYsMEJBQXdCLEdBQUc1RiwwQkFBL0I7O0lBRUFULGdCQUFBLEdBQWlCLFVBQVVnSCxNQUFWLEVBQWtCNUMsR0FBbEIsRUFBdUI5QyxLQUF2QixFQUE4QjtBQUM3QyxNQUFJZ1gsV0FBVyxHQUFHL1IsZUFBYSxDQUFDbkMsR0FBRCxDQUEvQjtBQUNBLE1BQUlrVSxXQUFXLElBQUl0UixNQUFuQixFQUEyQkQsc0JBQW9CLENBQUNKLENBQXJCLENBQXVCSyxNQUF2QixFQUErQnNSLFdBQS9CLEVBQTRDalMsMEJBQXdCLENBQUMsQ0FBRCxFQUFJL0UsS0FBSixDQUFwRSxFQUEzQixLQUNLMEYsTUFBTSxDQUFDc1IsV0FBRCxDQUFOLEdBQXNCaFgsS0FBdEI7QUFDTixDQUpEOztBQ0xBLElBQUlkLE9BQUssR0FBR0MsUUFBWjs7QUFDQSxJQUFJaUYsaUJBQWUsR0FBR2pGLGlCQUF0Qjs7QUFDQSxJQUFJdUMsWUFBVSxHQUFHdkMsZUFBakI7O0FBRUEsSUFBSWlRLFNBQU8sR0FBR2hMLGlCQUFlLENBQUMsU0FBRCxDQUE3Qjs7SUFFQTFGLDhCQUFBLEdBQWlCLFVBQVV1WSxXQUFWLEVBQXVCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLFNBQU92VixZQUFVLElBQUksRUFBZCxJQUFvQixDQUFDeEMsT0FBSyxDQUFDLFlBQVk7QUFDNUMsUUFBSWdZLEtBQUssR0FBRyxFQUFaO0FBQ0EsUUFBSTNILFdBQVcsR0FBRzJILEtBQUssQ0FBQzNILFdBQU4sR0FBb0IsRUFBdEM7O0FBQ0FBLElBQUFBLFdBQVcsQ0FBQ0gsU0FBRCxDQUFYLEdBQXVCLFlBQVk7QUFDakMsYUFBTztBQUFFK0gsUUFBQUEsR0FBRyxFQUFFO0FBQVAsT0FBUDtBQUNELEtBRkQ7O0FBR0EsV0FBT0QsS0FBSyxDQUFDRCxXQUFELENBQUwsQ0FBbUJHLE9BQW5CLEVBQTRCRCxHQUE1QixLQUFvQyxDQUEzQztBQUNELEdBUGdDLENBQWpDO0FBUUQsQ0FaRDs7QUNMQSxJQUFJdEcsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJRCxPQUFLLEdBQUdDLFFBQVo7O0FBQ0EsSUFBSW9NLFNBQU8sR0FBR3BNLFNBQWQ7O0FBQ0EsSUFBSXFELFVBQVEsR0FBR3JELFVBQWY7O0FBQ0EsSUFBSWtFLFVBQVEsR0FBR2xFLFVBQWY7O0FBQ0EsSUFBSTRKLG1CQUFpQixHQUFHNUosbUJBQXhCOztBQUNBLElBQUlrWSxnQkFBYyxHQUFHbFksZ0JBQXJCOztBQUNBLElBQUl1USxvQkFBa0IsR0FBR3ZRLG9CQUF6Qjs7QUFDQSxJQUFJbVksOEJBQTRCLEdBQUduWSw4QkFBbkM7O0FBQ0EsSUFBSWlGLGlCQUFlLEdBQUdqRixpQkFBdEI7O0FBQ0EsSUFBSXVDLFlBQVUsR0FBR3ZDLGVBQWpCOztBQUVBLElBQUlvWSxvQkFBb0IsR0FBR25ULGlCQUFlLENBQUMsb0JBQUQsQ0FBMUM7QUFDQSxJQUFJb1Qsa0JBQWdCLEdBQUcsZ0JBQXZCO0FBQ0EsSUFBSUMsOEJBQThCLEdBQUcsZ0NBQXJDO0FBR0E7QUFDQTs7QUFDQSxJQUFJQyw0QkFBNEIsR0FBR2hXLFlBQVUsSUFBSSxFQUFkLElBQW9CLENBQUN4QyxPQUFLLENBQUMsWUFBWTtBQUN4RSxNQUFJZ1ksS0FBSyxHQUFHLEVBQVo7QUFDQUEsRUFBQUEsS0FBSyxDQUFDSyxvQkFBRCxDQUFMLEdBQThCLEtBQTlCO0FBQ0EsU0FBT0wsS0FBSyxDQUFDdk4sTUFBTixHQUFlLENBQWYsTUFBc0J1TixLQUE3QjtBQUNELENBSjRELENBQTdEO0FBTUEsSUFBSVMsZUFBZSxHQUFHTCw4QkFBNEIsQ0FBQyxRQUFELENBQWxEOztBQUVBLElBQUlNLGtCQUFrQixHQUFHLFVBQVV4UyxDQUFWLEVBQWE7QUFDcEMsTUFBSSxDQUFDNUMsVUFBUSxDQUFDNEMsQ0FBRCxDQUFiLEVBQWtCLE9BQU8sS0FBUDtBQUNsQixNQUFJeVMsVUFBVSxHQUFHelMsQ0FBQyxDQUFDbVMsb0JBQUQsQ0FBbEI7QUFDQSxTQUFPTSxVQUFVLEtBQUt0WCxTQUFmLEdBQTJCLENBQUMsQ0FBQ3NYLFVBQTdCLEdBQTBDdE0sU0FBTyxDQUFDbkcsQ0FBRCxDQUF4RDtBQUNELENBSkQ7O0FBTUEsSUFBSThGLFFBQU0sR0FBRyxDQUFDd00sNEJBQUQsSUFBaUMsQ0FBQ0MsZUFBL0M7QUFHQTtBQUNBOztBQUNBOUcsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsT0FBVjtBQUFtQm9LLEVBQUFBLEtBQUssRUFBRSxJQUExQjtBQUFnQ2hKLEVBQUFBLE1BQU0sRUFBRUg7QUFBeEMsQ0FBRCxFQUFtRDtBQUNsRDtBQUNBdkIsRUFBQUEsTUFBTSxFQUFFLFNBQVNBLE1BQVQsQ0FBZ0JtTyxHQUFoQixFQUFxQjtBQUMzQixRQUFJMVMsQ0FBQyxHQUFHL0IsVUFBUSxDQUFDLElBQUQsQ0FBaEI7QUFDQSxRQUFJMFUsQ0FBQyxHQUFHckksb0JBQWtCLENBQUN0SyxDQUFELEVBQUksQ0FBSixDQUExQjtBQUNBLFFBQUk0UyxDQUFDLEdBQUcsQ0FBUjtBQUNBLFFBQUl4TyxDQUFKLEVBQU91TixDQUFQLEVBQVU5VixNQUFWLEVBQWtCNFYsR0FBbEIsRUFBdUJvQixDQUF2Qjs7QUFDQSxTQUFLek8sQ0FBQyxHQUFHLENBQUMsQ0FBTCxFQUFRdkksTUFBTSxHQUFHRCxTQUFTLENBQUNDLE1BQWhDLEVBQXdDdUksQ0FBQyxHQUFHdkksTUFBNUMsRUFBb0R1SSxDQUFDLEVBQXJELEVBQXlEO0FBQ3ZEeU8sTUFBQUEsQ0FBQyxHQUFHek8sQ0FBQyxLQUFLLENBQUMsQ0FBUCxHQUFXcEUsQ0FBWCxHQUFlcEUsU0FBUyxDQUFDd0ksQ0FBRCxDQUE1Qjs7QUFDQSxVQUFJb08sa0JBQWtCLENBQUNLLENBQUQsQ0FBdEIsRUFBMkI7QUFDekJwQixRQUFBQSxHQUFHLEdBQUc5TixtQkFBaUIsQ0FBQ2tQLENBQUQsQ0FBdkI7QUFDQSxZQUFJRCxDQUFDLEdBQUduQixHQUFKLEdBQVVXLGtCQUFkLEVBQWdDLE1BQU1oWCxTQUFTLENBQUNpWCw4QkFBRCxDQUFmOztBQUNoQyxhQUFLVixDQUFDLEdBQUcsQ0FBVCxFQUFZQSxDQUFDLEdBQUdGLEdBQWhCLEVBQXFCRSxDQUFDLElBQUlpQixDQUFDLEVBQTNCLEVBQStCLElBQUlqQixDQUFDLElBQUlrQixDQUFULEVBQVlaLGdCQUFjLENBQUNVLENBQUQsRUFBSUMsQ0FBSixFQUFPQyxDQUFDLENBQUNsQixDQUFELENBQVIsQ0FBZDtBQUM1QyxPQUpELE1BSU87QUFDTCxZQUFJaUIsQ0FBQyxJQUFJUixrQkFBVCxFQUEyQixNQUFNaFgsU0FBUyxDQUFDaVgsOEJBQUQsQ0FBZjtBQUMzQkosUUFBQUEsZ0JBQWMsQ0FBQ1UsQ0FBRCxFQUFJQyxDQUFDLEVBQUwsRUFBU0MsQ0FBVCxDQUFkO0FBQ0Q7QUFDRjs7QUFDREYsSUFBQUEsQ0FBQyxDQUFDOVcsTUFBRixHQUFXK1csQ0FBWDtBQUNBLFdBQU9ELENBQVA7QUFDRDtBQXBCaUQsQ0FBbkQsQ0FBRDs7QUN0Q0EsSUFBSTFVLFVBQVEsR0FBR2xFLFVBQWY7O0FBQ0EsSUFBSTJKLGlCQUFlLEdBQUczSixpQkFBdEI7O0FBQ0EsSUFBSTRKLG1CQUFpQixHQUFHNUosbUJBQXhCOztBQUVBLElBQUlzSixLQUFHLEdBQUdoSyxJQUFJLENBQUNnSyxHQUFmO0FBR0E7QUFDQTs7SUFDQS9KLGVBQUEsR0FBaUIsR0FBR3daLFVBQUgsSUFBaUIsU0FBU0EsVUFBVCxDQUFvQmpPO0FBQU87QUFBM0IsRUFBc0NrTztBQUFNO0FBQTVDLEVBQXNFO0FBQ3RHLE1BQUkvUyxDQUFDLEdBQUcvQixVQUFRLENBQUMsSUFBRCxDQUFoQjtBQUNBLE1BQUl3VCxHQUFHLEdBQUc5TixtQkFBaUIsQ0FBQzNELENBQUQsQ0FBM0I7QUFDQSxNQUFJZ1QsRUFBRSxHQUFHdFAsaUJBQWUsQ0FBQ21CLE1BQUQsRUFBUzRNLEdBQVQsQ0FBeEI7QUFDQSxNQUFJd0IsSUFBSSxHQUFHdlAsaUJBQWUsQ0FBQ3FQLEtBQUQsRUFBUXRCLEdBQVIsQ0FBMUI7QUFDQSxNQUFJeUIsR0FBRyxHQUFHdFgsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBaEQ7QUFDQSxNQUFJZ1ksS0FBSyxHQUFHOVAsS0FBRyxDQUFDLENBQUM2UCxHQUFHLEtBQUsvWCxTQUFSLEdBQW9Cc1csR0FBcEIsR0FBMEIvTixpQkFBZSxDQUFDd1AsR0FBRCxFQUFNekIsR0FBTixDQUExQyxJQUF3RHdCLElBQXpELEVBQStEeEIsR0FBRyxHQUFHdUIsRUFBckUsQ0FBZjtBQUNBLE1BQUlJLEdBQUcsR0FBRyxDQUFWOztBQUNBLE1BQUlILElBQUksR0FBR0QsRUFBUCxJQUFhQSxFQUFFLEdBQUdDLElBQUksR0FBR0UsS0FBN0IsRUFBb0M7QUFDbENDLElBQUFBLEdBQUcsR0FBRyxDQUFDLENBQVA7QUFDQUgsSUFBQUEsSUFBSSxJQUFJRSxLQUFLLEdBQUcsQ0FBaEI7QUFDQUgsSUFBQUEsRUFBRSxJQUFJRyxLQUFLLEdBQUcsQ0FBZDtBQUNEOztBQUNELFNBQU9BLEtBQUssS0FBSyxDQUFqQixFQUFvQjtBQUNsQixRQUFJRixJQUFJLElBQUlqVCxDQUFaLEVBQWVBLENBQUMsQ0FBQ2dULEVBQUQsQ0FBRCxHQUFRaFQsQ0FBQyxDQUFDaVQsSUFBRCxDQUFULENBQWYsS0FDSyxPQUFPalQsQ0FBQyxDQUFDZ1QsRUFBRCxDQUFSO0FBQ0xBLElBQUFBLEVBQUUsSUFBSUksR0FBTjtBQUNBSCxJQUFBQSxJQUFJLElBQUlHLEdBQVI7QUFDRDs7QUFBQyxTQUFPcFQsQ0FBUDtBQUNILENBbkJEOztBQ1ZBLElBQUl5TCxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUkrWSxVQUFVLEdBQUcvWSxlQUFqQjs7QUFDQSxJQUFJd1gsa0JBQWdCLEdBQUd4WCxrQkFBdkI7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxPQUFWO0FBQW1Cb0ssRUFBQUEsS0FBSyxFQUFFO0FBQTFCLENBQUQsRUFBbUM7QUFDbEM2RCxFQUFBQSxVQUFVLEVBQUVBO0FBRHNCLENBQW5DLENBQUQ7O0FBS0F2QixrQkFBZ0IsQ0FBQyxZQUFELENBQWhCOztBQ1ZBLElBQUl6WCxPQUFLLEdBQUdDLFFBQVo7O0lBRUFULHFCQUFBLEdBQWlCLFVBQVV1WSxXQUFWLEVBQXVCdFcsUUFBdkIsRUFBaUM7QUFDaEQsTUFBSUksTUFBTSxHQUFHLEdBQUdrVyxXQUFILENBQWI7QUFDQSxTQUFPLENBQUMsQ0FBQ2xXLE1BQUYsSUFBWTdCLE9BQUssQ0FBQyxZQUFZO0FBQ25DO0FBQ0E2QixJQUFBQSxNQUFNLENBQUNwQixJQUFQLENBQVksSUFBWixFQUFrQmdCLFFBQVEsSUFBSSxZQUFZO0FBQUUsWUFBTSxDQUFOO0FBQVUsS0FBdEQsRUFBd0QsQ0FBeEQ7QUFDRCxHQUh1QixDQUF4QjtBQUlELENBTkQ7O0FDRkEsSUFBSWtRLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXNaLFFBQU0sR0FBR3RaLGNBQUEsQ0FBd0NzUixLQUFyRDs7QUFDQSxJQUFJaUkscUJBQW1CLEdBQUd2WixxQkFBMUI7O0FBRUEsSUFBSXdaLGVBQWEsR0FBR0QscUJBQW1CLENBQUMsT0FBRCxDQUF2QztBQUdBOztBQUNBN0gsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsT0FBVjtBQUFtQm9LLEVBQUFBLEtBQUssRUFBRSxJQUExQjtBQUFnQ2hKLEVBQUFBLE1BQU0sRUFBRSxDQUFDc047QUFBekMsQ0FBRCxFQUEyRDtBQUMxRGxJLEVBQUFBLEtBQUssRUFBRSxTQUFTQSxLQUFULENBQWVQO0FBQVc7QUFBMUIsSUFBMkM7QUFDaEQsV0FBT3VJLFFBQU0sQ0FBQyxJQUFELEVBQU92SSxVQUFQLEVBQW1CbFAsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBekQsQ0FBYjtBQUNEO0FBSHlELENBQTNELENBQUQ7O0FDUkEsSUFBSThDLFVBQVEsR0FBR2xFLFVBQWY7O0FBQ0EsSUFBSTJKLGlCQUFlLEdBQUczSixpQkFBdEI7O0FBQ0EsSUFBSTRKLG1CQUFpQixHQUFHNUosbUJBQXhCO0FBR0E7OztJQUNBVCxXQUFBLEdBQWlCLFNBQVNrYSxJQUFULENBQWM1WTtBQUFNO0FBQXBCLEVBQXNEO0FBQ3JFLE1BQUlvRixDQUFDLEdBQUcvQixVQUFRLENBQUMsSUFBRCxDQUFoQjtBQUNBLE1BQUlwQyxNQUFNLEdBQUc4SCxtQkFBaUIsQ0FBQzNELENBQUQsQ0FBOUI7QUFDQSxNQUFJeVQsZUFBZSxHQUFHN1gsU0FBUyxDQUFDQyxNQUFoQztBQUNBLE1BQUl5SCxLQUFLLEdBQUdJLGlCQUFlLENBQUMrUCxlQUFlLEdBQUcsQ0FBbEIsR0FBc0I3WCxTQUFTLENBQUMsQ0FBRCxDQUEvQixHQUFxQ1QsU0FBdEMsRUFBaURVLE1BQWpELENBQTNCO0FBQ0EsTUFBSXFYLEdBQUcsR0FBR08sZUFBZSxHQUFHLENBQWxCLEdBQXNCN1gsU0FBUyxDQUFDLENBQUQsQ0FBL0IsR0FBcUNULFNBQS9DO0FBQ0EsTUFBSXVZLE1BQU0sR0FBR1IsR0FBRyxLQUFLL1gsU0FBUixHQUFvQlUsTUFBcEIsR0FBNkI2SCxpQkFBZSxDQUFDd1AsR0FBRCxFQUFNclgsTUFBTixDQUF6RDs7QUFDQSxTQUFPNlgsTUFBTSxHQUFHcFEsS0FBaEIsRUFBdUJ0RCxDQUFDLENBQUNzRCxLQUFLLEVBQU4sQ0FBRCxHQUFhMUksS0FBYjs7QUFDdkIsU0FBT29GLENBQVA7QUFDRCxDQVREOztBQ1BBLElBQUl5TCxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUl5WixJQUFJLEdBQUd6WixXQUFYOztBQUNBLElBQUl3WCxrQkFBZ0IsR0FBR3hYLGtCQUF2QjtBQUdBOzs7QUFDQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLE9BQVY7QUFBbUJvSyxFQUFBQSxLQUFLLEVBQUU7QUFBMUIsQ0FBRCxFQUFtQztBQUNsQ3VFLEVBQUFBLElBQUksRUFBRUE7QUFENEIsQ0FBbkMsQ0FBRDs7QUFLQWpDLGtCQUFnQixDQUFDLE1BQUQsQ0FBaEI7O0FDVkEsSUFBSTlGLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSTRaLFNBQU8sR0FBRzVaLGNBQUEsQ0FBd0NvUixNQUF0RDs7QUFDQSxJQUFJK0csOEJBQTRCLEdBQUduWSw4QkFBbkM7O0FBRUEsSUFBSTZaLHFCQUFtQixHQUFHMUIsOEJBQTRCLENBQUMsUUFBRCxDQUF0RDtBQUdBO0FBQ0E7O0FBQ0F6RyxJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxPQUFWO0FBQW1Cb0ssRUFBQUEsS0FBSyxFQUFFLElBQTFCO0FBQWdDaEosRUFBQUEsTUFBTSxFQUFFLENBQUMyTjtBQUF6QyxDQUFELEVBQWlFO0FBQ2hFekksRUFBQUEsTUFBTSxFQUFFLFNBQVNBLE1BQVQsQ0FBZ0JMO0FBQVc7QUFBM0IsSUFBNEM7QUFDbEQsV0FBTzZJLFNBQU8sQ0FBQyxJQUFELEVBQU83SSxVQUFQLEVBQW1CbFAsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBekQsQ0FBZDtBQUNEO0FBSCtELENBQWpFLENBQUQ7O0FDVEEsSUFBSXNRLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSThaLE9BQUssR0FBRzlaLGNBQUEsQ0FBd0N1UixJQUFwRDs7QUFDQSxJQUFJaUcsa0JBQWdCLEdBQUd4WCxrQkFBdkI7O0FBRUEsSUFBSStaLElBQUksR0FBRyxNQUFYO0FBQ0EsSUFBSUMsYUFBVyxHQUFHLElBQWxCOztBQUdBLElBQUlELElBQUksSUFBSSxFQUFaLEVBQWdCNU4sS0FBSyxDQUFDLENBQUQsQ0FBTCxDQUFTNE4sSUFBVCxFQUFlLFlBQVk7QUFBRUMsRUFBQUEsYUFBVyxHQUFHLEtBQWQ7QUFBc0IsQ0FBbkQ7QUFHaEI7O0FBQ0F0SSxJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxPQUFWO0FBQW1Cb0ssRUFBQUEsS0FBSyxFQUFFLElBQTFCO0FBQWdDaEosRUFBQUEsTUFBTSxFQUFFOE47QUFBeEMsQ0FBRCxFQUF3RDtBQUN2RHpJLEVBQUFBLElBQUksRUFBRSxTQUFTQSxJQUFULENBQWNSO0FBQVc7QUFBekIsSUFBbUQ7QUFDdkQsV0FBTytJLE9BQUssQ0FBQyxJQUFELEVBQU8vSSxVQUFQLEVBQW1CbFAsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBekQsQ0FBWjtBQUNEO0FBSHNELENBQXhELENBQUQ7O0FBT0FvVyxrQkFBZ0IsQ0FBQ3VDLElBQUQsQ0FBaEI7O0FDbkJBLElBQUlySSxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlpYSxZQUFVLEdBQUdqYSxjQUFBLENBQXdDd1IsU0FBekQ7O0FBQ0EsSUFBSWdHLGtCQUFnQixHQUFHeFgsa0JBQXZCOztBQUVBLElBQUlrYSxVQUFVLEdBQUcsV0FBakI7QUFDQSxJQUFJRixXQUFXLEdBQUcsSUFBbEI7O0FBR0EsSUFBSUUsVUFBVSxJQUFJLEVBQWxCLEVBQXNCL04sS0FBSyxDQUFDLENBQUQsQ0FBTCxDQUFTK04sVUFBVCxFQUFxQixZQUFZO0FBQUVGLEVBQUFBLFdBQVcsR0FBRyxLQUFkO0FBQXNCLENBQXpEO0FBR3RCOztBQUNBdEksSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsT0FBVjtBQUFtQm9LLEVBQUFBLEtBQUssRUFBRSxJQUExQjtBQUFnQ2hKLEVBQUFBLE1BQU0sRUFBRThOO0FBQXhDLENBQUQsRUFBd0Q7QUFDdkR4SSxFQUFBQSxTQUFTLEVBQUUsU0FBU0EsU0FBVCxDQUFtQlQ7QUFBVztBQUE5QixJQUF3RDtBQUNqRSxXQUFPa0osWUFBVSxDQUFDLElBQUQsRUFBT2xKLFVBQVAsRUFBbUJsUCxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJELFNBQVMsQ0FBQyxDQUFELENBQWhDLEdBQXNDVCxTQUF6RCxDQUFqQjtBQUNEO0FBSHNELENBQXhELENBQUQ7O0FBT0FvVyxrQkFBZ0IsQ0FBQzBDLFVBQUQsQ0FBaEI7O0FDbkJBLElBQUk5TixTQUFPLEdBQUdwTSxTQUFkOztBQUNBLElBQUk0SixtQkFBaUIsR0FBRzVKLG1CQUF4Qjs7QUFDQSxJQUFJc1EsTUFBSSxHQUFHdFEsbUJBQVg7QUFHQTs7O0FBQ0EsSUFBSW1hLGtCQUFnQixHQUFHLFVBQVVyUCxNQUFWLEVBQWtCc1AsUUFBbEIsRUFBNEJyUixNQUE1QixFQUFvQ3NSLFNBQXBDLEVBQStDckIsS0FBL0MsRUFBc0RzQixLQUF0RCxFQUE2REMsTUFBN0QsRUFBcUVDLE9BQXJFLEVBQThFO0FBQ25HLE1BQUlDLFdBQVcsR0FBR3pCLEtBQWxCO0FBQ0EsTUFBSTBCLFdBQVcsR0FBRyxDQUFsQjtBQUNBLE1BQUlDLEtBQUssR0FBR0osTUFBTSxHQUFHakssTUFBSSxDQUFDaUssTUFBRCxFQUFTQyxPQUFULEVBQWtCLENBQWxCLENBQVAsR0FBOEIsS0FBaEQ7QUFDQSxNQUFJSSxPQUFKLEVBQWFDLFVBQWI7O0FBRUEsU0FBT0gsV0FBVyxHQUFHTCxTQUFyQixFQUFnQztBQUM5QixRQUFJSyxXQUFXLElBQUkzUixNQUFuQixFQUEyQjtBQUN6QjZSLE1BQUFBLE9BQU8sR0FBR0QsS0FBSyxHQUFHQSxLQUFLLENBQUM1UixNQUFNLENBQUMyUixXQUFELENBQVAsRUFBc0JBLFdBQXRCLEVBQW1DTixRQUFuQyxDQUFSLEdBQXVEclIsTUFBTSxDQUFDMlIsV0FBRCxDQUE1RTs7QUFFQSxVQUFJSixLQUFLLEdBQUcsQ0FBUixJQUFhbE8sU0FBTyxDQUFDd08sT0FBRCxDQUF4QixFQUFtQztBQUNqQ0MsUUFBQUEsVUFBVSxHQUFHalIsbUJBQWlCLENBQUNnUixPQUFELENBQTlCO0FBQ0FILFFBQUFBLFdBQVcsR0FBR04sa0JBQWdCLENBQUNyUCxNQUFELEVBQVNzUCxRQUFULEVBQW1CUSxPQUFuQixFQUE0QkMsVUFBNUIsRUFBd0NKLFdBQXhDLEVBQXFESCxLQUFLLEdBQUcsQ0FBN0QsQ0FBaEIsR0FBa0YsQ0FBaEc7QUFDRCxPQUhELE1BR087QUFDTCxZQUFJRyxXQUFXLElBQUksZ0JBQW5CLEVBQXFDLE1BQU1wWixTQUFTLENBQUMsb0NBQUQsQ0FBZjtBQUNyQ3lKLFFBQUFBLE1BQU0sQ0FBQzJQLFdBQUQsQ0FBTixHQUFzQkcsT0FBdEI7QUFDRDs7QUFFREgsTUFBQUEsV0FBVztBQUNaOztBQUNEQyxJQUFBQSxXQUFXO0FBQ1o7O0FBQ0QsU0FBT0QsV0FBUDtBQUNELENBdkJEOztJQXlCQWxiLGtCQUFBLEdBQWlCNGEsa0JBQWpCOztBQy9CQSxJQUFJekksSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJbWEsa0JBQWdCLEdBQUduYSxrQkFBdkI7O0FBQ0EsSUFBSWtFLFVBQVEsR0FBR2xFLFVBQWY7O0FBQ0EsSUFBSTRKLG1CQUFpQixHQUFHNUosbUJBQXhCOztBQUNBLElBQUlvSixxQkFBbUIsR0FBR3BKLHFCQUExQjs7QUFDQSxJQUFJdVEsb0JBQWtCLEdBQUd2USxvQkFBekI7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxPQUFWO0FBQW1Cb0ssRUFBQUEsS0FBSyxFQUFFO0FBQTFCLENBQUQsRUFBbUM7QUFDbEM0RixFQUFBQSxJQUFJLEVBQUUsU0FBU0EsSUFBVCxHQUFrQztBQUN0QyxRQUFJQyxRQUFRLEdBQUdsWixTQUFTLENBQUNDLE1BQVYsR0FBbUJELFNBQVMsQ0FBQyxDQUFELENBQTVCLEdBQWtDVCxTQUFqRDtBQUNBLFFBQUk2RSxDQUFDLEdBQUcvQixVQUFRLENBQUMsSUFBRCxDQUFoQjtBQUNBLFFBQUltVyxTQUFTLEdBQUd6USxtQkFBaUIsQ0FBQzNELENBQUQsQ0FBakM7QUFDQSxRQUFJMlMsQ0FBQyxHQUFHckksb0JBQWtCLENBQUN0SyxDQUFELEVBQUksQ0FBSixDQUExQjtBQUNBMlMsSUFBQUEsQ0FBQyxDQUFDOVcsTUFBRixHQUFXcVksa0JBQWdCLENBQUN2QixDQUFELEVBQUkzUyxDQUFKLEVBQU9BLENBQVAsRUFBVW9VLFNBQVYsRUFBcUIsQ0FBckIsRUFBd0JVLFFBQVEsS0FBSzNaLFNBQWIsR0FBeUIsQ0FBekIsR0FBNkJnSSxxQkFBbUIsQ0FBQzJSLFFBQUQsQ0FBeEUsQ0FBM0I7QUFDQSxXQUFPbkMsQ0FBUDtBQUNEO0FBUmlDLENBQW5DLENBQUQ7O0FDVEEsSUFBSWxILElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSW1hLGdCQUFnQixHQUFHbmEsa0JBQXZCOztBQUNBLElBQUlrRCxXQUFTLEdBQUdsRCxXQUFoQjs7QUFDQSxJQUFJa0UsVUFBUSxHQUFHbEUsVUFBZjs7QUFDQSxJQUFJNEosbUJBQWlCLEdBQUc1SixtQkFBeEI7O0FBQ0EsSUFBSXVRLG9CQUFrQixHQUFHdlEsb0JBQXpCO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsT0FBVjtBQUFtQm9LLEVBQUFBLEtBQUssRUFBRTtBQUExQixDQUFELEVBQW1DO0FBQ2xDOEYsRUFBQUEsT0FBTyxFQUFFLFNBQVNBLE9BQVQsQ0FBaUJqSztBQUFXO0FBQTVCLElBQTZDO0FBQ3BELFFBQUk5SyxDQUFDLEdBQUcvQixVQUFRLENBQUMsSUFBRCxDQUFoQjtBQUNBLFFBQUltVyxTQUFTLEdBQUd6USxtQkFBaUIsQ0FBQzNELENBQUQsQ0FBakM7QUFDQSxRQUFJMlMsQ0FBSjtBQUNBMVYsSUFBQUEsV0FBUyxDQUFDNk4sVUFBRCxDQUFUO0FBQ0E2SCxJQUFBQSxDQUFDLEdBQUdySSxvQkFBa0IsQ0FBQ3RLLENBQUQsRUFBSSxDQUFKLENBQXRCO0FBQ0EyUyxJQUFBQSxDQUFDLENBQUM5VyxNQUFGLEdBQVdxWSxnQkFBZ0IsQ0FBQ3ZCLENBQUQsRUFBSTNTLENBQUosRUFBT0EsQ0FBUCxFQUFVb1UsU0FBVixFQUFxQixDQUFyQixFQUF3QixDQUF4QixFQUEyQnRKLFVBQTNCLEVBQXVDbFAsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBN0UsQ0FBM0I7QUFDQSxXQUFPd1gsQ0FBUDtBQUNEO0FBVGlDLENBQW5DLENBQUQ7O0FDVEEsSUFBSTVHLFVBQVEsR0FBR2hTLGNBQUEsQ0FBd0NrUixPQUF2RDs7QUFDQSxJQUFJcUkscUJBQW1CLEdBQUd2WixxQkFBMUI7O0FBRUEsSUFBSXdaLGVBQWEsR0FBR0QscUJBQW1CLENBQUMsU0FBRCxDQUF2QztBQUdBOztJQUNBaGEsWUFBQSxHQUFpQixDQUFDaWEsZUFBRCxHQUFpQixTQUFTdEksT0FBVCxDQUFpQkg7QUFBVztBQUE1QixFQUE2QztBQUM3RSxTQUFPaUIsVUFBUSxDQUFDLElBQUQsRUFBT2pCLFVBQVAsRUFBbUJsUCxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJELFNBQVMsQ0FBQyxDQUFELENBQWhDLEdBQXNDVCxTQUF6RCxDQUFmLENBRDZFO0FBRzlFLENBSGdCLEdBR2IsR0FBRzhQLE9BSFA7O0FDUEEsSUFBSVEsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJa1IsU0FBTyxHQUFHbFIsWUFBZDtBQUdBO0FBQ0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsT0FBVjtBQUFtQm9LLEVBQUFBLEtBQUssRUFBRSxJQUExQjtBQUFnQ2hKLEVBQUFBLE1BQU0sRUFBRSxHQUFHZ0YsT0FBSCxJQUFjQTtBQUF0RCxDQUFELEVBQWtFO0FBQ2pFQSxFQUFBQSxPQUFPLEVBQUVBO0FBRHdELENBQWxFLENBQUQ7O0FDUEEsSUFBSS9LLFdBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSWdXLGVBQWEsR0FBR2hXLGVBQXBCOzs7SUFHQVQsOEJBQUEsR0FBaUIsVUFBVXVELFFBQVYsRUFBb0JVLEVBQXBCLEVBQXdCM0MsS0FBeEIsRUFBK0JvYSxPQUEvQixFQUF3QztBQUN2RCxNQUFJO0FBQ0YsV0FBT0EsT0FBTyxHQUFHelgsRUFBRSxDQUFDMkMsV0FBUSxDQUFDdEYsS0FBRCxDQUFSLENBQWdCLENBQWhCLENBQUQsRUFBcUJBLEtBQUssQ0FBQyxDQUFELENBQTFCLENBQUwsR0FBc0MyQyxFQUFFLENBQUMzQyxLQUFELENBQXREO0FBQ0QsR0FGRCxDQUVFLE9BQU9mLEtBQVAsRUFBYztBQUNka1csSUFBQUEsZUFBYSxDQUFDbFQsUUFBRCxFQUFXLE9BQVgsRUFBb0JoRCxLQUFwQixDQUFiO0FBQ0Q7QUFDRixDQU5EOztBQ0hBLElBQUl3USxNQUFJLEdBQUd0USxtQkFBWDs7QUFDQSxJQUFJa0UsVUFBUSxHQUFHbEUsVUFBZjs7QUFDQSxJQUFJa2IsOEJBQTRCLEdBQUdsYiw4QkFBbkM7O0FBQ0EsSUFBSThWLHVCQUFxQixHQUFHOVYsdUJBQTVCOztBQUNBLElBQUlnUSxlQUFhLEdBQUdoUSxlQUFwQjs7QUFDQSxJQUFJNEosbUJBQWlCLEdBQUc1SixtQkFBeEI7O0FBQ0EsSUFBSWtZLGdCQUFjLEdBQUdsWSxnQkFBckI7O0FBQ0EsSUFBSStWLGFBQVcsR0FBRy9WLGFBQWxCOztBQUNBLElBQUl3VixtQkFBaUIsR0FBR3hWLG1CQUF4QjtBQUdBOzs7SUFDQVQsV0FBQSxHQUFpQixTQUFTMlosSUFBVCxDQUFjaUM7QUFBVTtBQUF4QixFQUF3RTtBQUN2RixNQUFJbFYsQ0FBQyxHQUFHL0IsVUFBUSxDQUFDaVgsU0FBRCxDQUFoQjtBQUNBLE1BQUlDLGNBQWMsR0FBR3BMLGVBQWEsQ0FBQyxJQUFELENBQWxDO0FBQ0EsTUFBSTBKLGVBQWUsR0FBRzdYLFNBQVMsQ0FBQ0MsTUFBaEM7QUFDQSxNQUFJdVosS0FBSyxHQUFHM0IsZUFBZSxHQUFHLENBQWxCLEdBQXNCN1gsU0FBUyxDQUFDLENBQUQsQ0FBL0IsR0FBcUNULFNBQWpEO0FBQ0EsTUFBSWthLE9BQU8sR0FBR0QsS0FBSyxLQUFLamEsU0FBeEI7QUFDQSxNQUFJa2EsT0FBSixFQUFhRCxLQUFLLEdBQUcvSyxNQUFJLENBQUMrSyxLQUFELEVBQVEzQixlQUFlLEdBQUcsQ0FBbEIsR0FBc0I3WCxTQUFTLENBQUMsQ0FBRCxDQUEvQixHQUFxQ1QsU0FBN0MsRUFBd0QsQ0FBeEQsQ0FBWjtBQUNiLE1BQUlzVSxjQUFjLEdBQUdGLG1CQUFpQixDQUFDdlAsQ0FBRCxDQUF0QztBQUNBLE1BQUlzRCxLQUFLLEdBQUcsQ0FBWjtBQUNBLE1BQUl6SCxNQUFKLEVBQVlzRCxNQUFaLEVBQW9Cc1IsSUFBcEIsRUFBMEI1VCxRQUExQixFQUFvQzJULElBQXBDLEVBQTBDNVYsS0FBMUMsQ0FUdUY7O0FBV3ZGLE1BQUk2VSxjQUFjLElBQUksRUFBRSxRQUFRdkosS0FBUixJQUFpQjJKLHVCQUFxQixDQUFDSixjQUFELENBQXhDLENBQXRCLEVBQWlGO0FBQy9FNVMsSUFBQUEsUUFBUSxHQUFHaVQsYUFBVyxDQUFDOVAsQ0FBRCxFQUFJeVAsY0FBSixDQUF0QjtBQUNBZSxJQUFBQSxJQUFJLEdBQUczVCxRQUFRLENBQUMyVCxJQUFoQjtBQUNBclIsSUFBQUEsTUFBTSxHQUFHZ1csY0FBYyxHQUFHLElBQUksSUFBSixFQUFILEdBQWdCLEVBQXZDOztBQUNBLFdBQU0sQ0FBQyxDQUFDMUUsSUFBSSxHQUFHRCxJQUFJLENBQUNqVyxJQUFMLENBQVVzQyxRQUFWLENBQVIsRUFBNkJnVSxJQUFwQyxFQUEwQ3ZOLEtBQUssRUFBL0MsRUFBbUQ7QUFDakQxSSxNQUFBQSxLQUFLLEdBQUd5YSxPQUFPLEdBQUdKLDhCQUE0QixDQUFDcFksUUFBRCxFQUFXdVksS0FBWCxFQUFrQixDQUFDM0UsSUFBSSxDQUFDN1YsS0FBTixFQUFhMEksS0FBYixDQUFsQixFQUF1QyxJQUF2QyxDQUEvQixHQUE4RW1OLElBQUksQ0FBQzdWLEtBQWxHO0FBQ0FxWCxNQUFBQSxnQkFBYyxDQUFDOVMsTUFBRCxFQUFTbUUsS0FBVCxFQUFnQjFJLEtBQWhCLENBQWQ7QUFDRDtBQUNGLEdBUkQsTUFRTztBQUNMaUIsSUFBQUEsTUFBTSxHQUFHOEgsbUJBQWlCLENBQUMzRCxDQUFELENBQTFCO0FBQ0FiLElBQUFBLE1BQU0sR0FBR2dXLGNBQWMsR0FBRyxJQUFJLElBQUosQ0FBU3RaLE1BQVQsQ0FBSCxHQUFzQnFLLEtBQUssQ0FBQ3JLLE1BQUQsQ0FBbEQ7O0FBQ0EsV0FBTUEsTUFBTSxHQUFHeUgsS0FBZixFQUFzQkEsS0FBSyxFQUEzQixFQUErQjtBQUM3QjFJLE1BQUFBLEtBQUssR0FBR3lhLE9BQU8sR0FBR0QsS0FBSyxDQUFDcFYsQ0FBQyxDQUFDc0QsS0FBRCxDQUFGLEVBQVdBLEtBQVgsQ0FBUixHQUE0QnRELENBQUMsQ0FBQ3NELEtBQUQsQ0FBNUM7QUFDQTJPLE1BQUFBLGdCQUFjLENBQUM5UyxNQUFELEVBQVNtRSxLQUFULEVBQWdCMUksS0FBaEIsQ0FBZDtBQUNEO0FBQ0Y7O0FBQ0R1RSxFQUFBQSxNQUFNLENBQUN0RCxNQUFQLEdBQWdCeUgsS0FBaEI7QUFDQSxTQUFPbkUsTUFBUDtBQUNELENBN0JEOztBQ2JBLElBQUlILGlCQUFlLEdBQUdqRixpQkFBdEI7O0FBRUEsSUFBSXNWLFVBQVEsR0FBR3JRLGlCQUFlLENBQUMsVUFBRCxDQUE5QjtBQUNBLElBQUlzVyxZQUFZLEdBQUcsS0FBbkI7O0FBRUEsSUFBSTtBQUNGLE1BQUl4TCxNQUFNLEdBQUcsQ0FBYjtBQUNBLE1BQUl5TCxrQkFBa0IsR0FBRztBQUN2Qi9FLElBQUFBLElBQUksRUFBRSxZQUFZO0FBQ2hCLGFBQU87QUFBRUssUUFBQUEsSUFBSSxFQUFFLENBQUMsQ0FBQy9HLE1BQU07QUFBaEIsT0FBUDtBQUNELEtBSHNCO0FBSXZCLGNBQVUsWUFBWTtBQUNwQndMLE1BQUFBLFlBQVksR0FBRyxJQUFmO0FBQ0Q7QUFOc0IsR0FBekI7O0FBUUFDLEVBQUFBLGtCQUFrQixDQUFDbEcsVUFBRCxDQUFsQixHQUErQixZQUFZO0FBQ3pDLFdBQU8sSUFBUDtBQUNELEdBRkQsQ0FWRTs7O0FBY0ZuSixFQUFBQSxLQUFLLENBQUMrTSxJQUFOLENBQVdzQyxrQkFBWCxFQUErQixZQUFZO0FBQUUsVUFBTSxDQUFOO0FBQVUsR0FBdkQ7QUFDRCxDQWZELENBZUUsT0FBTzFiLEtBQVAsRUFBYztBQUFFO0FBQWE7O0lBRS9CUCw2QkFBQSxHQUFpQixVQUFVTSxJQUFWLEVBQWdCNGIsWUFBaEIsRUFBOEI7QUFDN0MsTUFBSSxDQUFDQSxZQUFELElBQWlCLENBQUNGLFlBQXRCLEVBQW9DLE9BQU8sS0FBUDtBQUNwQyxNQUFJRyxpQkFBaUIsR0FBRyxLQUF4Qjs7QUFDQSxNQUFJO0FBQ0YsUUFBSW5WLE1BQU0sR0FBRyxFQUFiOztBQUNBQSxJQUFBQSxNQUFNLENBQUMrTyxVQUFELENBQU4sR0FBbUIsWUFBWTtBQUM3QixhQUFPO0FBQ0xtQixRQUFBQSxJQUFJLEVBQUUsWUFBWTtBQUNoQixpQkFBTztBQUFFSyxZQUFBQSxJQUFJLEVBQUU0RSxpQkFBaUIsR0FBRztBQUE1QixXQUFQO0FBQ0Q7QUFISSxPQUFQO0FBS0QsS0FORDs7QUFPQTdiLElBQUFBLElBQUksQ0FBQzBHLE1BQUQsQ0FBSjtBQUNELEdBVkQsQ0FVRSxPQUFPekcsS0FBUCxFQUFjO0FBQUU7QUFBYTs7QUFDL0IsU0FBTzRiLGlCQUFQO0FBQ0QsQ0FmRDs7QUN0QkEsSUFBSWhLLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSWtaLE1BQUksR0FBR2xaLFdBQVg7O0FBQ0EsSUFBSTJiLDZCQUEyQixHQUFHM2IsNkJBQWxDOztBQUVBLElBQUk0YixxQkFBbUIsR0FBRyxDQUFDRCw2QkFBMkIsQ0FBQyxVQUFVeEYsUUFBVixFQUFvQjtBQUN6RTtBQUNBaEssRUFBQUEsS0FBSyxDQUFDK00sSUFBTixDQUFXL0MsUUFBWDtBQUNELENBSHFELENBQXREO0FBTUE7O0FBQ0F6RSxJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxPQUFWO0FBQW1CZ0IsRUFBQUEsSUFBSSxFQUFFLElBQXpCO0FBQStCSSxFQUFBQSxNQUFNLEVBQUUwUDtBQUF2QyxDQUFELEVBQStEO0FBQzlEMUMsRUFBQUEsSUFBSSxFQUFFQTtBQUR3RCxDQUEvRCxDQUFEOztBQ1ZBLElBQUl4SCxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUk2YixXQUFTLEdBQUc3YixhQUFBLENBQXVDa0ssUUFBdkQ7O0FBQ0EsSUFBSXNOLGtCQUFnQixHQUFHeFgsa0JBQXZCO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsT0FBVjtBQUFtQm9LLEVBQUFBLEtBQUssRUFBRTtBQUExQixDQUFELEVBQW1DO0FBQ2xDaEwsRUFBQUEsUUFBUSxFQUFFLFNBQVNBLFFBQVQsQ0FBa0JGO0FBQUc7QUFBckIsSUFBNEM7QUFDcEQsV0FBTzZSLFdBQVMsQ0FBQyxJQUFELEVBQU83UixFQUFQLEVBQVduSSxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJELFNBQVMsQ0FBQyxDQUFELENBQWhDLEdBQXNDVCxTQUFqRCxDQUFoQjtBQUNEO0FBSGlDLENBQW5DLENBQUQ7O0FBT0FvVyxrQkFBZ0IsQ0FBQyxVQUFELENBQWhCOztBQ2JBOztBQUNBLElBQUk5RixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUk4YixVQUFRLEdBQUc5YixhQUFBLENBQXVDbUssT0FBdEQ7O0FBQ0EsSUFBSW9QLHFCQUFtQixHQUFHdloscUJBQTFCOztBQUVBLElBQUkrYixhQUFhLEdBQUcsR0FBRzVSLE9BQXZCO0FBRUEsSUFBSTZSLGVBQWEsR0FBRyxDQUFDLENBQUNELGFBQUYsSUFBbUIsSUFBSSxDQUFDLENBQUQsRUFBSTVSLE9BQUosQ0FBWSxDQUFaLEVBQWUsQ0FBQyxDQUFoQixDQUFKLEdBQXlCLENBQWhFO0FBQ0EsSUFBSXFQLGVBQWEsR0FBR0QscUJBQW1CLENBQUMsU0FBRCxDQUF2QztBQUdBOztBQUNBN0gsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsT0FBVjtBQUFtQm9LLEVBQUFBLEtBQUssRUFBRSxJQUExQjtBQUFnQ2hKLEVBQUFBLE1BQU0sRUFBRThQLGVBQWEsSUFBSSxDQUFDeEM7QUFBMUQsQ0FBRCxFQUE0RTtBQUMzRXJQLEVBQUFBLE9BQU8sRUFBRSxTQUFTQSxPQUFULENBQWlCOFI7QUFBYztBQUEvQixJQUFzRDtBQUM3RCxXQUFPRCxlQUFhO0FBQUEsTUFFaEJELGFBQWEsQ0FBQ3ZNLEtBQWQsQ0FBb0IsSUFBcEIsRUFBMEIzTixTQUExQixLQUF3QyxDQUZ4QixHQUdoQmlhLFVBQVEsQ0FBQyxJQUFELEVBQU9HLGFBQVAsRUFBc0JwYSxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJELFNBQVMsQ0FBQyxDQUFELENBQWhDLEdBQXNDVCxTQUE1RCxDQUhaO0FBSUQ7QUFOMEUsQ0FBNUUsQ0FBRDs7QUNiQSxJQUFJc1EsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJb00sU0FBTyxHQUFHcE0sU0FBZDtBQUdBOzs7QUFDQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLE9BQVY7QUFBbUJnQixFQUFBQSxJQUFJLEVBQUU7QUFBekIsQ0FBRCxFQUFrQztBQUNqQ00sRUFBQUEsT0FBTyxFQUFFQTtBQUR3QixDQUFsQyxDQUFEOztBQ0pBLElBQUlyTSxPQUFLLEdBQUdDLFFBQVo7O0FBQ0EsSUFBSXlCLFlBQVUsR0FBR3pCLFlBQWpCOztBQUVBLElBQUk2VSxnQkFBYyxHQUFHN1Usc0JBQXJCOztBQUNBLElBQUl5TCxVQUFRLEdBQUd6TCxrQkFBZjs7QUFDQSxJQUFJaUYsaUJBQWUsR0FBR2pGLGlCQUF0Qjs7QUFHQSxJQUFJc1YsVUFBUSxHQUFHclEsaUJBQWUsQ0FBQyxVQUFELENBQTlCO0FBQ0EsSUFBSWlYLHdCQUFzQixHQUFHLEtBQTdCO0FBR0E7O0FBQ0EsSUFBSUMsbUJBQUosRUFBdUJDLGlDQUF2QixFQUEwREMsZUFBMUQ7QUFFQTs7QUFDQSxJQUFJLEdBQUd6VixJQUFQLEVBQWE7QUFDWHlWLEVBQUFBLGVBQWEsR0FBRyxHQUFHelYsSUFBSCxFQUFoQixDQURXOztBQUdYLE1BQUksRUFBRSxVQUFVeVYsZUFBWixDQUFKLEVBQWdDSCx3QkFBc0IsR0FBRyxJQUF6QixDQUFoQyxLQUNLO0FBQ0hFLElBQUFBLGlDQUFpQyxHQUFHdkgsZ0JBQWMsQ0FBQ0EsZ0JBQWMsQ0FBQ3dILGVBQUQsQ0FBZixDQUFsRDtBQUNBLFFBQUlELGlDQUFpQyxLQUFLbmMsTUFBTSxDQUFDK0gsU0FBakQsRUFBNERtVSxtQkFBaUIsR0FBR0MsaUNBQXBCO0FBQzdEO0FBQ0Y7O0FBRUQsSUFBSUUsc0JBQXNCLEdBQUdILG1CQUFpQixJQUFJL2EsU0FBckIsSUFBa0NyQixPQUFLLENBQUMsWUFBWTtBQUMvRSxNQUFJNEcsSUFBSSxHQUFHLEVBQVgsQ0FEK0U7O0FBRy9FLFNBQU93VixtQkFBaUIsQ0FBQzdHLFVBQUQsQ0FBakIsQ0FBNEI5VSxJQUE1QixDQUFpQ21HLElBQWpDLE1BQTJDQSxJQUFsRDtBQUNELENBSm1FLENBQXBFO0FBTUEsSUFBSTJWLHNCQUFKLEVBQTRCSCxtQkFBaUIsR0FBRyxFQUFwQjtBQUk1Qjs7QUFDQSxJQUFJLENBQUMxYSxZQUFVLENBQUMwYSxtQkFBaUIsQ0FBQzdHLFVBQUQsQ0FBbEIsQ0FBZixFQUE4QztBQUM1QzdKLEVBQUFBLFVBQVEsQ0FBQzBRLG1CQUFELEVBQW9CN0csVUFBcEIsRUFBOEIsWUFBWTtBQUNoRCxXQUFPLElBQVA7QUFDRCxHQUZPLENBQVI7QUFHRDs7SUFFRC9WLGFBQUEsR0FBaUI7QUFDZjRjLEVBQUFBLGlCQUFpQixFQUFFQSxtQkFESjtBQUVmRCxFQUFBQSxzQkFBc0IsRUFBRUE7QUFGVCxDQUFqQjs7QUMzQ0EsSUFBSUMsbUJBQWlCLEdBQUduYyxhQUFBLENBQXVDbWMsaUJBQS9EOztBQUNBLElBQUl0TixRQUFNLEdBQUc3TyxjQUFiOztBQUNBLElBQUk0RiwwQkFBd0IsR0FBRzVGLDBCQUEvQjs7QUFDQSxJQUFJK1IsZ0JBQWMsR0FBRy9SLGdCQUFyQjs7QUFDQSxJQUFJcVYsV0FBUyxHQUFHclYsU0FBaEI7O0FBRUEsSUFBSXVjLFlBQVUsR0FBRyxZQUFZO0FBQUUsU0FBTyxJQUFQO0FBQWMsQ0FBN0M7O0lBRUFoZCwyQkFBQSxHQUFpQixVQUFVaWQsbUJBQVYsRUFBK0JyTixJQUEvQixFQUFxQ3NILElBQXJDLEVBQTJDO0FBQzFELE1BQUlwSyxhQUFhLEdBQUc4QyxJQUFJLEdBQUcsV0FBM0I7QUFDQXFOLEVBQUFBLG1CQUFtQixDQUFDeFUsU0FBcEIsR0FBZ0M2RyxRQUFNLENBQUNzTixtQkFBRCxFQUFvQjtBQUFFMUYsSUFBQUEsSUFBSSxFQUFFN1EsMEJBQXdCLENBQUMsQ0FBRCxFQUFJNlEsSUFBSjtBQUFoQyxHQUFwQixDQUF0QztBQUNBMUUsRUFBQUEsZ0JBQWMsQ0FBQ3lLLG1CQUFELEVBQXNCblEsYUFBdEIsRUFBcUMsS0FBckMsQ0FBZDtBQUNBZ0osRUFBQUEsV0FBUyxDQUFDaEosYUFBRCxDQUFULEdBQTJCa1EsWUFBM0I7QUFDQSxTQUFPQyxtQkFBUDtBQUNELENBTkQ7O0FDUkEsSUFBSTlLLElBQUMsR0FBRzFSLE9BQVI7O0FBRUEsSUFBSXljLGNBQVksR0FBR3pjLFlBQW5COztBQUNBLElBQUl5QixZQUFVLEdBQUd6QixZQUFqQjs7QUFDQSxJQUFJMGMsMkJBQXlCLEdBQUcxYywyQkFBaEM7O0FBQ0EsSUFBSTZVLGdCQUFjLEdBQUc3VSxzQkFBckI7O0FBQ0EsSUFBSWdWLGdCQUFjLEdBQUdoVixzQkFBckI7O0FBQ0EsSUFBSStSLGdCQUFjLEdBQUcvUixnQkFBckI7O0FBQ0EsSUFBSThHLDZCQUEyQixHQUFHOUcsNkJBQWxDOztBQUNBLElBQUl5TCxVQUFRLEdBQUd6TCxrQkFBZjs7QUFDQSxJQUFJaUYsaUJBQWUsR0FBR2pGLGlCQUF0Qjs7QUFDQSxJQUFJcVYsV0FBUyxHQUFHclYsU0FBaEI7O0FBQ0EsSUFBSTJjLGFBQWEsR0FBRzNjLGFBQXBCOztBQUVBLElBQUk0YyxzQkFBb0IsR0FBR0gsY0FBWSxDQUFDdlUsTUFBeEM7QUFDQSxJQUFJSSw0QkFBMEIsR0FBR21VLGNBQVksQ0FBQ3JVLFlBQTlDO0FBQ0EsSUFBSStULG1CQUFpQixHQUFHUSxhQUFhLENBQUNSLGlCQUF0QztBQUNBLElBQUlELHNCQUFzQixHQUFHUyxhQUFhLENBQUNULHNCQUEzQztBQUNBLElBQUk1RyxVQUFRLEdBQUdyUSxpQkFBZSxDQUFDLFVBQUQsQ0FBOUI7QUFDQSxJQUFJNFgsSUFBSSxHQUFHLE1BQVg7QUFDQSxJQUFJQyxNQUFNLEdBQUcsUUFBYjtBQUNBLElBQUk3QixPQUFPLEdBQUcsU0FBZDs7QUFFQSxJQUFJc0IsVUFBVSxHQUFHLFlBQVk7QUFBRSxTQUFPLElBQVA7QUFBYyxDQUE3Qzs7SUFFQWhkLGdCQUFBLEdBQWlCLFVBQVV3ZCxRQUFWLEVBQW9CNU4sSUFBcEIsRUFBMEJxTixtQkFBMUIsRUFBK0MvRixJQUEvQyxFQUFxRHVHLE9BQXJELEVBQThEQyxNQUE5RCxFQUFzRWxSLE1BQXRFLEVBQThFO0FBQzdGMlEsRUFBQUEsMkJBQXlCLENBQUNGLG1CQUFELEVBQXNCck4sSUFBdEIsRUFBNEJzSCxJQUE1QixDQUF6Qjs7QUFFQSxNQUFJeUcsa0JBQWtCLEdBQUcsVUFBVUMsSUFBVixFQUFnQjtBQUN2QyxRQUFJQSxJQUFJLEtBQUtILE9BQVQsSUFBb0JJLGVBQXhCLEVBQXlDLE9BQU9BLGVBQVA7QUFDekMsUUFBSSxDQUFDbEIsc0JBQUQsSUFBMkJpQixJQUFJLElBQUlFLGlCQUF2QyxFQUEwRCxPQUFPQSxpQkFBaUIsQ0FBQ0YsSUFBRCxDQUF4Qjs7QUFDMUQsWUFBUUEsSUFBUjtBQUNFLFdBQUtOLElBQUw7QUFBVyxlQUFPLFNBQVNqVyxJQUFULEdBQWdCO0FBQUUsaUJBQU8sSUFBSTRWLG1CQUFKLENBQXdCLElBQXhCLEVBQThCVyxJQUE5QixDQUFQO0FBQTZDLFNBQXRFOztBQUNYLFdBQUtMLE1BQUw7QUFBYSxlQUFPLFNBQVNRLE1BQVQsR0FBa0I7QUFBRSxpQkFBTyxJQUFJZCxtQkFBSixDQUF3QixJQUF4QixFQUE4QlcsSUFBOUIsQ0FBUDtBQUE2QyxTQUF4RTs7QUFDYixXQUFLbEMsT0FBTDtBQUFjLGVBQU8sU0FBU3NDLE9BQVQsR0FBbUI7QUFBRSxpQkFBTyxJQUFJZixtQkFBSixDQUF3QixJQUF4QixFQUE4QlcsSUFBOUIsQ0FBUDtBQUE2QyxTQUF6RTtBQUhoQjs7QUFJRSxXQUFPLFlBQVk7QUFBRSxhQUFPLElBQUlYLG1CQUFKLENBQXdCLElBQXhCLENBQVA7QUFBdUMsS0FBNUQ7QUFDSCxHQVJEOztBQVVBLE1BQUluUSxhQUFhLEdBQUc4QyxJQUFJLEdBQUcsV0FBM0I7QUFDQSxNQUFJcU8scUJBQXFCLEdBQUcsS0FBNUI7QUFDQSxNQUFJSCxpQkFBaUIsR0FBR04sUUFBUSxDQUFDL1UsU0FBakM7QUFDQSxNQUFJeVYsY0FBYyxHQUFHSixpQkFBaUIsQ0FBQy9ILFVBQUQsQ0FBakIsSUFDaEIrSCxpQkFBaUIsQ0FBQyxZQUFELENBREQsSUFFaEJMLE9BQU8sSUFBSUssaUJBQWlCLENBQUNMLE9BQUQsQ0FGakM7QUFHQSxNQUFJSSxlQUFlLEdBQUcsQ0FBQ2xCLHNCQUFELElBQTJCdUIsY0FBM0IsSUFBNkNQLGtCQUFrQixDQUFDRixPQUFELENBQXJGO0FBQ0EsTUFBSVUsaUJBQWlCLEdBQUd2TyxJQUFJLElBQUksT0FBUixHQUFrQmtPLGlCQUFpQixDQUFDRSxPQUFsQixJQUE2QkUsY0FBL0MsR0FBZ0VBLGNBQXhGO0FBQ0EsTUFBSUUsd0JBQUosRUFBOEJDLE9BQTlCLEVBQXVDQyxHQUF2QyxDQXJCNkY7O0FBd0I3RixNQUFJSCxpQkFBSixFQUF1QjtBQUNyQkMsSUFBQUEsd0JBQXdCLEdBQUc5SSxnQkFBYyxDQUFDNkksaUJBQWlCLENBQUNsZCxJQUFsQixDQUF1QixJQUFJdWMsUUFBSixFQUF2QixDQUFELENBQXpDOztBQUNBLFFBQUlZLHdCQUF3QixLQUFLMWQsTUFBTSxDQUFDK0gsU0FBcEMsSUFBaUQyVix3QkFBd0IsQ0FBQ2xILElBQTlFLEVBQW9GO0FBQ2xGLFVBQWdCNUIsZ0JBQWMsQ0FBQzhJLHdCQUFELENBQWQsS0FBNkN4QixtQkFBN0QsRUFBZ0Y7QUFDOUUsWUFBSW5ILGdCQUFKLEVBQW9CO0FBQ2xCQSxVQUFBQSxnQkFBYyxDQUFDMkksd0JBQUQsRUFBMkJ4QixtQkFBM0IsQ0FBZDtBQUNELFNBRkQsTUFFTyxJQUFJLENBQUMxYSxZQUFVLENBQUNrYyx3QkFBd0IsQ0FBQ3JJLFVBQUQsQ0FBekIsQ0FBZixFQUFxRDtBQUMxRDdKLFVBQUFBLFVBQVEsQ0FBQ2tTLHdCQUFELEVBQTJCckksVUFBM0IsRUFBcUNpSCxVQUFyQyxDQUFSO0FBQ0Q7QUFDRixPQVBpRjs7O0FBU2xGeEssTUFBQUEsZ0JBQWMsQ0FBQzRMLHdCQUFELEVBQTJCdFIsYUFBM0IsRUFBMEMsSUFBMUMsQ0FBZDtBQUVEO0FBQ0YsR0F0QzRGOzs7QUF5QzdGLE1BQUl1USxzQkFBb0IsSUFBSUksT0FBTyxJQUFJRixNQUFuQyxJQUE2Q1csY0FBN0MsSUFBK0RBLGNBQWMsQ0FBQzVZLElBQWYsS0FBd0JpWSxNQUEzRixFQUFtRztBQUNqRyxRQUFnQnhVLDRCQUFoQixFQUE0QztBQUMxQ3hCLE1BQUFBLDZCQUEyQixDQUFDdVcsaUJBQUQsRUFBb0IsTUFBcEIsRUFBNEJQLE1BQTVCLENBQTNCO0FBQ0QsS0FGRCxNQUVPO0FBQ0xVLE1BQUFBLHFCQUFxQixHQUFHLElBQXhCOztBQUNBSixNQUFBQSxlQUFlLEdBQUcsU0FBU0UsTUFBVCxHQUFrQjtBQUFFLGVBQU9HLGNBQWMsQ0FBQ2pkLElBQWYsQ0FBb0IsSUFBcEIsQ0FBUDtBQUFtQyxPQUF6RTtBQUNEO0FBQ0YsR0FoRDRGOzs7QUFtRDdGLE1BQUl3YyxPQUFKLEVBQWE7QUFDWFksSUFBQUEsT0FBTyxHQUFHO0FBQ1JOLE1BQUFBLE1BQU0sRUFBRUosa0JBQWtCLENBQUNKLE1BQUQsQ0FEbEI7QUFFUmxXLE1BQUFBLElBQUksRUFBRXFXLE1BQU0sR0FBR0csZUFBSCxHQUFxQkYsa0JBQWtCLENBQUNMLElBQUQsQ0FGM0M7QUFHUlUsTUFBQUEsT0FBTyxFQUFFTCxrQkFBa0IsQ0FBQ2pDLE9BQUQ7QUFIbkIsS0FBVjtBQUtBLFFBQUlsUCxNQUFKLEVBQVksS0FBSzhSLEdBQUwsSUFBWUQsT0FBWixFQUFxQjtBQUMvQixVQUFJMUIsc0JBQXNCLElBQUlzQixxQkFBMUIsSUFBbUQsRUFBRUssR0FBRyxJQUFJUixpQkFBVCxDQUF2RCxFQUFvRjtBQUNsRjVSLFFBQUFBLFVBQVEsQ0FBQzRSLGlCQUFELEVBQW9CUSxHQUFwQixFQUF5QkQsT0FBTyxDQUFDQyxHQUFELENBQWhDLENBQVI7QUFDRDtBQUNGLEtBSkQsTUFJT25NLElBQUMsQ0FBQztBQUFFNUcsTUFBQUEsTUFBTSxFQUFFcUUsSUFBVjtBQUFnQitGLE1BQUFBLEtBQUssRUFBRSxJQUF2QjtBQUE2QmhKLE1BQUFBLE1BQU0sRUFBRWdRLHNCQUFzQixJQUFJc0I7QUFBL0QsS0FBRCxFQUF5RkksT0FBekYsQ0FBRDtBQUNSLEdBOUQ0Rjs7O0FBaUU3RixNQUE0QlAsaUJBQWlCLENBQUMvSCxVQUFELENBQWpCLEtBQWdDOEgsZUFBNUQsRUFBNkU7QUFDM0UzUixJQUFBQSxVQUFRLENBQUM0UixpQkFBRCxFQUFvQi9ILFVBQXBCLEVBQThCOEgsZUFBOUIsRUFBK0M7QUFBRXZZLE1BQUFBLElBQUksRUFBRW1ZO0FBQVIsS0FBL0MsQ0FBUjtBQUNEOztBQUNEM0gsRUFBQUEsV0FBUyxDQUFDbEcsSUFBRCxDQUFULEdBQWtCaU8sZUFBbEI7QUFFQSxTQUFPUSxPQUFQO0FBQ0QsQ0F2RUQ7O0FDekJBLElBQUkvWCxpQkFBZSxHQUFHN0YsaUJBQXRCOztBQUNBLElBQUl3WCxrQkFBZ0IsR0FBR3hYLGtCQUF2Qjs7QUFDQSxJQUFJcVYsU0FBUyxHQUFHclYsU0FBaEI7O0FBQ0EsSUFBSXFJLHFCQUFtQixHQUFHckksYUFBMUI7O0FBQ0EsSUFBSThkLGdCQUFjLEdBQUc5ZCxnQkFBckI7O0FBRUEsSUFBSStkLGNBQWMsR0FBRyxnQkFBckI7QUFDQSxJQUFJNUwsa0JBQWdCLEdBQUc5SixxQkFBbUIsQ0FBQ25CLEdBQTNDO0FBQ0EsSUFBSXFCLGtCQUFnQixHQUFHRixxQkFBbUIsQ0FBQ2hCLFNBQXBCLENBQThCMFcsY0FBOUIsQ0FBdkI7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0lBQ0F4ZSxpQkFBQSxHQUFpQnVlLGdCQUFjLENBQUMzUixLQUFELEVBQVEsT0FBUixFQUFpQixVQUFVNlIsUUFBVixFQUFvQnJJLElBQXBCLEVBQTBCO0FBQ3hFeEQsRUFBQUEsa0JBQWdCLENBQUMsSUFBRCxFQUFPO0FBQ3JCM0ssSUFBQUEsSUFBSSxFQUFFdVcsY0FEZTtBQUVyQmpULElBQUFBLE1BQU0sRUFBRWpGLGlCQUFlLENBQUNtWSxRQUFELENBRkY7QUFFYztBQUNuQ3pVLElBQUFBLEtBQUssRUFBRSxDQUhjO0FBR2M7QUFDbkNvTSxJQUFBQSxJQUFJLEVBQUVBLElBSmU7O0FBQUEsR0FBUCxDQUFoQixDQUR3RTtBQVExRTtBQUNDLENBVDhCLEVBUzVCLFlBQVk7QUFDYixNQUFJcE8sS0FBSyxHQUFHZ0Isa0JBQWdCLENBQUMsSUFBRCxDQUE1QjtBQUNBLE1BQUl1QyxNQUFNLEdBQUd2RCxLQUFLLENBQUN1RCxNQUFuQjtBQUNBLE1BQUk2SyxJQUFJLEdBQUdwTyxLQUFLLENBQUNvTyxJQUFqQjtBQUNBLE1BQUlwTSxLQUFLLEdBQUdoQyxLQUFLLENBQUNnQyxLQUFOLEVBQVo7O0FBQ0EsTUFBSSxDQUFDdUIsTUFBRCxJQUFXdkIsS0FBSyxJQUFJdUIsTUFBTSxDQUFDaEosTUFBL0IsRUFBdUM7QUFDckN5RixJQUFBQSxLQUFLLENBQUN1RCxNQUFOLEdBQWUxSixTQUFmO0FBQ0EsV0FBTztBQUFFUCxNQUFBQSxLQUFLLEVBQUVPLFNBQVQ7QUFBb0IwVixNQUFBQSxJQUFJLEVBQUU7QUFBMUIsS0FBUDtBQUNEOztBQUNELE1BQUluQixJQUFJLElBQUksTUFBWixFQUFvQixPQUFPO0FBQUU5VSxJQUFBQSxLQUFLLEVBQUUwSSxLQUFUO0FBQWdCdU4sSUFBQUEsSUFBSSxFQUFFO0FBQXRCLEdBQVA7QUFDcEIsTUFBSW5CLElBQUksSUFBSSxRQUFaLEVBQXNCLE9BQU87QUFBRTlVLElBQUFBLEtBQUssRUFBRWlLLE1BQU0sQ0FBQ3ZCLEtBQUQsQ0FBZjtBQUF3QnVOLElBQUFBLElBQUksRUFBRTtBQUE5QixHQUFQO0FBQ3RCLFNBQU87QUFBRWpXLElBQUFBLEtBQUssRUFBRSxDQUFDMEksS0FBRCxFQUFRdUIsTUFBTSxDQUFDdkIsS0FBRCxDQUFkLENBQVQ7QUFBaUN1TixJQUFBQSxJQUFJLEVBQUU7QUFBdkMsR0FBUDtBQUNELENBckI4QixFQXFCNUIsUUFyQjRCLENBQS9CO0FBd0JBO0FBQ0E7O0FBQ0F6QixTQUFTLENBQUM0SSxTQUFWLEdBQXNCNUksU0FBUyxDQUFDbEosS0FBaEM7O0FBR0FxTCxrQkFBZ0IsQ0FBQyxNQUFELENBQWhCO0FBQ0FBLGtCQUFnQixDQUFDLFFBQUQsQ0FBaEI7QUFDQUEsa0JBQWdCLENBQUMsU0FBRCxDQUFoQjs7QUNuREEsSUFBSTlGLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXNCLGVBQWEsR0FBR3RCLGFBQXBCOztBQUNBLElBQUk2RixpQkFBZSxHQUFHN0YsaUJBQXRCOztBQUNBLElBQUl1WixxQkFBbUIsR0FBR3ZaLHFCQUExQjs7QUFFQSxJQUFJa2UsVUFBVSxHQUFHLEdBQUdsVixJQUFwQjtBQUVBLElBQUltVixXQUFXLEdBQUc3YyxlQUFhLElBQUlyQixNQUFuQztBQUNBLElBQUl1WixlQUFhLEdBQUdELHFCQUFtQixDQUFDLE1BQUQsRUFBUyxHQUFULENBQXZDO0FBR0E7O0FBQ0E3SCxJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxPQUFWO0FBQW1Cb0ssRUFBQUEsS0FBSyxFQUFFLElBQTFCO0FBQWdDaEosRUFBQUEsTUFBTSxFQUFFaVMsV0FBVyxJQUFJLENBQUMzRTtBQUF4RCxDQUFELEVBQTBFO0FBQ3pFeFEsRUFBQUEsSUFBSSxFQUFFLFNBQVNBLElBQVQsQ0FBY29WLFNBQWQsRUFBeUI7QUFDN0IsV0FBT0YsVUFBVSxDQUFDMWQsSUFBWCxDQUFnQnFGLGlCQUFlLENBQUMsSUFBRCxDQUEvQixFQUF1Q3VZLFNBQVMsS0FBS2hkLFNBQWQsR0FBMEIsR0FBMUIsR0FBZ0NnZCxTQUF2RSxDQUFQO0FBQ0Q7QUFId0UsQ0FBMUUsQ0FBRDs7QUNaQTs7QUFDQSxJQUFJdlksaUJBQWUsR0FBRzdGLGlCQUF0Qjs7QUFDQSxJQUFJb0oscUJBQW1CLEdBQUdwSixxQkFBMUI7O0FBQ0EsSUFBSTRKLG1CQUFpQixHQUFHNUosbUJBQXhCOztBQUNBLElBQUl1WixxQkFBbUIsR0FBR3ZaLHFCQUExQjs7QUFFQSxJQUFJc0osS0FBRyxHQUFHaEssSUFBSSxDQUFDZ0ssR0FBZjtBQUNBLElBQUkrVSxjQUFZLEdBQUcsR0FBR0MsV0FBdEI7QUFDQSxJQUFJdEMsYUFBYSxHQUFHLENBQUMsQ0FBQ3FDLGNBQUYsSUFBa0IsSUFBSSxDQUFDLENBQUQsRUFBSUMsV0FBSixDQUFnQixDQUFoQixFQUFtQixDQUFDLENBQXBCLENBQUosR0FBNkIsQ0FBbkU7QUFDQSxJQUFJOUUsZUFBYSxHQUFHRCxxQkFBbUIsQ0FBQyxhQUFELENBQXZDO0FBQ0EsSUFBSXhOLFFBQU0sR0FBR2lRLGFBQWEsSUFBSSxDQUFDeEMsZUFBL0I7QUFHQTs7SUFDQWphLGdCQUFBLEdBQWlCd00sUUFBTSxHQUFHLFNBQVN1UyxXQUFULENBQXFCckM7QUFBYztBQUFuQyxFQUErRDtBQUN2RjtBQUNBLE1BQUlELGFBQUosRUFBbUIsT0FBT3FDLGNBQVksQ0FBQzdPLEtBQWIsQ0FBbUIsSUFBbkIsRUFBeUIzTixTQUF6QixLQUF1QyxDQUE5QztBQUNuQixNQUFJb0UsQ0FBQyxHQUFHSixpQkFBZSxDQUFDLElBQUQsQ0FBdkI7QUFDQSxNQUFJL0QsTUFBTSxHQUFHOEgsbUJBQWlCLENBQUMzRCxDQUFELENBQTlCO0FBQ0EsTUFBSXNELEtBQUssR0FBR3pILE1BQU0sR0FBRyxDQUFyQjtBQUNBLE1BQUlELFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUF2QixFQUEwQnlILEtBQUssR0FBR0QsS0FBRyxDQUFDQyxLQUFELEVBQVFILHFCQUFtQixDQUFDdkgsU0FBUyxDQUFDLENBQUQsQ0FBVixDQUEzQixDQUFYO0FBQzFCLE1BQUkwSCxLQUFLLEdBQUcsQ0FBWixFQUFlQSxLQUFLLEdBQUd6SCxNQUFNLEdBQUd5SCxLQUFqQjs7QUFDZixTQUFNQSxLQUFLLElBQUksQ0FBZixFQUFrQkEsS0FBSyxFQUF2QixFQUEyQixJQUFJQSxLQUFLLElBQUl0RCxDQUFULElBQWNBLENBQUMsQ0FBQ3NELEtBQUQsQ0FBRCxLQUFhMFMsYUFBL0IsRUFBOEMsT0FBTzFTLEtBQUssSUFBSSxDQUFoQjs7QUFDekUsU0FBTyxDQUFDLENBQVI7QUFDRCxDQVZzQixHQVVuQjhVLGNBVko7O0FDZkEsSUFBSTNNLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXNlLFdBQVcsR0FBR3RlLGdCQUFsQjtBQUdBO0FBQ0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsT0FBVjtBQUFtQm9LLEVBQUFBLEtBQUssRUFBRSxJQUExQjtBQUFnQ2hKLEVBQUFBLE1BQU0sRUFBRW9TLFdBQVcsS0FBSyxHQUFHQTtBQUEzRCxDQUFELEVBQTJFO0FBQzFFQSxFQUFBQSxXQUFXLEVBQUVBO0FBRDZELENBQTNFLENBQUQ7O0FDTEEsSUFBSTVNLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXVlLE1BQUksR0FBR3ZlLGNBQUEsQ0FBd0NtUixHQUFuRDs7QUFDQSxJQUFJZ0gsOEJBQTRCLEdBQUduWSw4QkFBbkM7O0FBRUEsSUFBSTZaLHFCQUFtQixHQUFHMUIsOEJBQTRCLENBQUMsS0FBRCxDQUF0RDtBQUdBO0FBQ0E7O0FBQ0F6RyxJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxPQUFWO0FBQW1Cb0ssRUFBQUEsS0FBSyxFQUFFLElBQTFCO0FBQWdDaEosRUFBQUEsTUFBTSxFQUFFLENBQUMyTjtBQUF6QyxDQUFELEVBQWlFO0FBQ2hFMUksRUFBQUEsR0FBRyxFQUFFLFNBQVNBLEdBQVQsQ0FBYUo7QUFBVztBQUF4QixJQUF5QztBQUM1QyxXQUFPd04sTUFBSSxDQUFDLElBQUQsRUFBT3hOLFVBQVAsRUFBbUJsUCxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJELFNBQVMsQ0FBQyxDQUFELENBQWhDLEdBQXNDVCxTQUF6RCxDQUFYO0FBQ0Q7QUFIK0QsQ0FBakUsQ0FBRDs7QUNUQSxJQUFJc1EsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJRCxPQUFLLEdBQUdDLFFBQVo7O0FBQ0EsSUFBSWdRLGVBQWEsR0FBR2hRLGVBQXBCOztBQUNBLElBQUlrWSxnQkFBYyxHQUFHbFksZ0JBQXJCOztBQUVBLElBQUl3ZSxZQUFZLEdBQUd6ZSxPQUFLLENBQUMsWUFBWTtBQUNuQyxXQUFTME8sQ0FBVCxHQUFhO0FBQUU7QUFBYSxHQURPOzs7QUFHbkMsU0FBTyxFQUFFdEMsS0FBSyxDQUFDc1MsRUFBTixDQUFTamUsSUFBVCxDQUFjaU8sQ0FBZCxhQUE0QkEsQ0FBOUIsQ0FBUDtBQUNELENBSnVCLENBQXhCO0FBT0E7QUFDQTs7QUFDQWlELElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLE9BQVY7QUFBbUJnQixFQUFBQSxJQUFJLEVBQUUsSUFBekI7QUFBK0JJLEVBQUFBLE1BQU0sRUFBRXNTO0FBQXZDLENBQUQsRUFBd0Q7QUFDdkRDLEVBQUFBLEVBQUUsRUFBRSxTQUFTQSxFQUFULEdBQTJCO0FBQzdCLFFBQUlsVixLQUFLLEdBQUcsQ0FBWjtBQUNBLFFBQUltUSxlQUFlLEdBQUc3WCxTQUFTLENBQUNDLE1BQWhDO0FBQ0EsUUFBSXNELE1BQU0sR0FBRyxLQUFLNEssZUFBYSxDQUFDLElBQUQsQ0FBYixHQUFzQixJQUF0QixHQUE2QjdELEtBQWxDLEVBQXlDdU4sZUFBekMsQ0FBYjs7QUFDQSxXQUFPQSxlQUFlLEdBQUduUSxLQUF6QixFQUFnQzJPLGdCQUFjLENBQUM5UyxNQUFELEVBQVNtRSxLQUFULEVBQWdCMUgsU0FBUyxDQUFDMEgsS0FBSyxFQUFOLENBQXpCLENBQWQ7O0FBQ2hDbkUsSUFBQUEsTUFBTSxDQUFDdEQsTUFBUCxHQUFnQjRYLGVBQWhCO0FBQ0EsV0FBT3RVLE1BQVA7QUFDRDtBQVJzRCxDQUF4RCxDQUFEOztBQ2ZBLElBQUlsQyxXQUFTLEdBQUdsRCxXQUFoQjs7QUFDQSxJQUFJa0UsVUFBUSxHQUFHbEUsVUFBZjs7QUFDQSxJQUFJc0IsZUFBYSxHQUFHdEIsYUFBcEI7O0FBQ0EsSUFBSTRKLG1CQUFpQixHQUFHNUosbUJBQXhCOzs7QUFHQSxJQUFJNkosY0FBWSxHQUFHLFVBQVU2VSxRQUFWLEVBQW9CO0FBQ3JDLFNBQU8sVUFBVXJQLElBQVYsRUFBZ0IwQixVQUFoQixFQUE0QjJJLGVBQTVCLEVBQTZDaUYsSUFBN0MsRUFBbUQ7QUFDeER6YixJQUFBQSxXQUFTLENBQUM2TixVQUFELENBQVQ7QUFDQSxRQUFJOUssQ0FBQyxHQUFHL0IsVUFBUSxDQUFDbUwsSUFBRCxDQUFoQjtBQUNBLFFBQUkzUCxJQUFJLEdBQUc0QixlQUFhLENBQUMyRSxDQUFELENBQXhCO0FBQ0EsUUFBSW5FLE1BQU0sR0FBRzhILG1CQUFpQixDQUFDM0QsQ0FBRCxDQUE5QjtBQUNBLFFBQUlzRCxLQUFLLEdBQUdtVixRQUFRLEdBQUc1YyxNQUFNLEdBQUcsQ0FBWixHQUFnQixDQUFwQztBQUNBLFFBQUl1SSxDQUFDLEdBQUdxVSxRQUFRLEdBQUcsQ0FBQyxDQUFKLEdBQVEsQ0FBeEI7QUFDQSxRQUFJaEYsZUFBZSxHQUFHLENBQXRCLEVBQXlCLE9BQU8sSUFBUCxFQUFhO0FBQ3BDLFVBQUluUSxLQUFLLElBQUk3SixJQUFiLEVBQW1CO0FBQ2pCaWYsUUFBQUEsSUFBSSxHQUFHamYsSUFBSSxDQUFDNkosS0FBRCxDQUFYO0FBQ0FBLFFBQUFBLEtBQUssSUFBSWMsQ0FBVDtBQUNBO0FBQ0Q7O0FBQ0RkLE1BQUFBLEtBQUssSUFBSWMsQ0FBVDs7QUFDQSxVQUFJcVUsUUFBUSxHQUFHblYsS0FBSyxHQUFHLENBQVgsR0FBZXpILE1BQU0sSUFBSXlILEtBQXJDLEVBQTRDO0FBQzFDLGNBQU1sSSxTQUFTLENBQUMsNkNBQUQsQ0FBZjtBQUNEO0FBQ0Y7O0FBQ0QsV0FBTXFkLFFBQVEsR0FBR25WLEtBQUssSUFBSSxDQUFaLEdBQWdCekgsTUFBTSxHQUFHeUgsS0FBdkMsRUFBOENBLEtBQUssSUFBSWMsQ0FBdkQsRUFBMEQsSUFBSWQsS0FBSyxJQUFJN0osSUFBYixFQUFtQjtBQUMzRWlmLE1BQUFBLElBQUksR0FBRzVOLFVBQVUsQ0FBQzROLElBQUQsRUFBT2pmLElBQUksQ0FBQzZKLEtBQUQsQ0FBWCxFQUFvQkEsS0FBcEIsRUFBMkJ0RCxDQUEzQixDQUFqQjtBQUNEOztBQUNELFdBQU8wWSxJQUFQO0FBQ0QsR0F0QkQ7QUF1QkQsQ0F4QkQ7O0lBMEJBcGYsV0FBQSxHQUFpQjtBQUNmO0FBQ0E7QUFDQXFmLEVBQUFBLElBQUksRUFBRS9VLGNBQVksQ0FBQyxLQUFELENBSEg7QUFJZjtBQUNBO0FBQ0FnVixFQUFBQSxLQUFLLEVBQUVoVixjQUFZLENBQUMsSUFBRDtBQU5KLENBQWpCOztBQ2hDQSxJQUFJM0ksU0FBTyxHQUFHbEIsWUFBZDs7QUFDQSxJQUFJTCxRQUFNLEdBQUdLLFFBQWI7O0lBRUFULFlBQUEsR0FBaUIyQixTQUFPLENBQUN2QixRQUFNLENBQUNzQyxPQUFSLENBQVAsSUFBMkIsU0FBNUM7O0FDRkEsSUFBSXlQLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSThlLFNBQU8sR0FBRzllLFdBQUEsQ0FBcUM0ZSxJQUFuRDs7QUFDQSxJQUFJckYscUJBQW1CLEdBQUd2WixxQkFBMUI7O0FBQ0EsSUFBSStlLGdCQUFjLEdBQUcvZSxlQUFyQjs7QUFDQSxJQUFJZ2YsU0FBTyxHQUFHaGYsWUFBZDs7QUFFQSxJQUFJd1osZUFBYSxHQUFHRCxxQkFBbUIsQ0FBQyxRQUFELENBQXZDO0FBRUE7O0FBQ0EsSUFBSTBGLFlBQVUsR0FBRyxDQUFDRCxTQUFELElBQVlELGdCQUFjLEdBQUcsRUFBN0IsSUFBbUNBLGdCQUFjLEdBQUcsRUFBckU7QUFHQTs7QUFDQXJOLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLE9BQVY7QUFBbUJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBMUI7QUFBZ0NoSixFQUFBQSxNQUFNLEVBQUUsQ0FBQ3NOLGVBQUQsSUFBa0J5RjtBQUExRCxDQUFELEVBQXlFO0FBQ3hFQyxFQUFBQSxNQUFNLEVBQUUsU0FBU0EsTUFBVCxDQUFnQm5PO0FBQVc7QUFBM0IsSUFBaUQ7QUFDdkQsV0FBTytOLFNBQU8sQ0FBQyxJQUFELEVBQU8vTixVQUFQLEVBQW1CbFAsU0FBUyxDQUFDQyxNQUE3QixFQUFxQ0QsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBM0UsQ0FBZDtBQUNEO0FBSHVFLENBQXpFLENBQUQ7O0FDYkEsSUFBSXNRLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSW1mLGNBQVksR0FBR25mLFdBQUEsQ0FBcUM2ZSxLQUF4RDs7QUFDQSxJQUFJdEYscUJBQW1CLEdBQUd2WixxQkFBMUI7O0FBQ0EsSUFBSStlLGNBQWMsR0FBRy9lLGVBQXJCOztBQUNBLElBQUlnZixTQUFPLEdBQUdoZixZQUFkOztBQUVBLElBQUl3WixlQUFhLEdBQUdELHFCQUFtQixDQUFDLGFBQUQsQ0FBdkM7QUFFQTs7QUFDQSxJQUFJMEYsVUFBVSxHQUFHLENBQUNELFNBQUQsSUFBWUQsY0FBYyxHQUFHLEVBQTdCLElBQW1DQSxjQUFjLEdBQUcsRUFBckU7QUFHQTs7QUFDQXJOLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLE9BQVY7QUFBbUJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBMUI7QUFBZ0NoSixFQUFBQSxNQUFNLEVBQUUsQ0FBQ3NOLGVBQUQsSUFBa0J5RjtBQUExRCxDQUFELEVBQXlFO0FBQ3hFRyxFQUFBQSxXQUFXLEVBQUUsU0FBU0EsV0FBVCxDQUFxQnJPO0FBQVc7QUFBaEMsSUFBc0Q7QUFDakUsV0FBT29PLGNBQVksQ0FBQyxJQUFELEVBQU9wTyxVQUFQLEVBQW1CbFAsU0FBUyxDQUFDQyxNQUE3QixFQUFxQ0QsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBM0UsQ0FBbkI7QUFDRDtBQUh1RSxDQUF6RSxDQUFEOztBQ2JBLElBQUlzUSxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlvTSxTQUFPLEdBQUdwTSxTQUFkOztBQUVBLElBQUlxZixhQUFhLEdBQUcsR0FBR0MsT0FBdkI7QUFDQSxJQUFJM1ksTUFBSSxHQUFHLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FBWDtBQUdBO0FBQ0E7QUFDQTs7QUFDQStLLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLE9BQVY7QUFBbUJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBMUI7QUFBZ0NoSixFQUFBQSxNQUFNLEVBQUV2SixNQUFNLENBQUNnRSxNQUFELENBQU4sS0FBaUJoRSxNQUFNLENBQUNnRSxNQUFJLENBQUMyWSxPQUFMLEVBQUQ7QUFBL0QsQ0FBRCxFQUFvRjtBQUNuRkEsRUFBQUEsT0FBTyxFQUFFLFNBQVNBLE9BQVQsR0FBbUI7QUFDMUI7QUFDQSxRQUFJbFQsU0FBTyxDQUFDLElBQUQsQ0FBWCxFQUFtQixLQUFLdEssTUFBTCxHQUFjLEtBQUtBLE1BQW5CO0FBQ25CLFdBQU91ZCxhQUFhLENBQUM3ZSxJQUFkLENBQW1CLElBQW5CLENBQVA7QUFDRDtBQUxrRixDQUFwRixDQUFEOztBQ1ZBLElBQUlrUixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlvTSxTQUFPLEdBQUdwTSxTQUFkOztBQUNBLElBQUlnUSxlQUFhLEdBQUdoUSxlQUFwQjs7QUFDQSxJQUFJcUQsVUFBUSxHQUFHckQsVUFBZjs7QUFDQSxJQUFJMkosaUJBQWUsR0FBRzNKLGlCQUF0Qjs7QUFDQSxJQUFJNEosbUJBQWlCLEdBQUc1SixtQkFBeEI7O0FBQ0EsSUFBSTZGLGlCQUFlLEdBQUc3RixpQkFBdEI7O0FBQ0EsSUFBSWtZLGdCQUFjLEdBQUdsWSxnQkFBckI7O0FBQ0EsSUFBSWlGLGlCQUFlLEdBQUdqRixpQkFBdEI7O0FBQ0EsSUFBSW1ZLDhCQUE0QixHQUFHblksOEJBQW5DOztBQUVBLElBQUk2WixxQkFBbUIsR0FBRzFCLDhCQUE0QixDQUFDLE9BQUQsQ0FBdEQ7QUFFQSxJQUFJbEksU0FBTyxHQUFHaEwsaUJBQWUsQ0FBQyxTQUFELENBQTdCO0FBQ0EsSUFBSXNhLFdBQVcsR0FBRyxHQUFHdGUsS0FBckI7QUFDQSxJQUFJb0ksS0FBRyxHQUFHL0osSUFBSSxDQUFDK0osR0FBZjtBQUdBO0FBQ0E7O0FBQ0FxSSxJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxPQUFWO0FBQW1Cb0ssRUFBQUEsS0FBSyxFQUFFLElBQTFCO0FBQWdDaEosRUFBQUEsTUFBTSxFQUFFLENBQUMyTjtBQUF6QyxDQUFELEVBQWlFO0FBQ2hFNVksRUFBQUEsS0FBSyxFQUFFLFNBQVNBLEtBQVQsQ0FBZStYLEtBQWYsRUFBc0JHLEdBQXRCLEVBQTJCO0FBQ2hDLFFBQUlsVCxDQUFDLEdBQUdKLGlCQUFlLENBQUMsSUFBRCxDQUF2QjtBQUNBLFFBQUkvRCxNQUFNLEdBQUc4SCxtQkFBaUIsQ0FBQzNELENBQUQsQ0FBOUI7QUFDQSxRQUFJMlIsQ0FBQyxHQUFHak8saUJBQWUsQ0FBQ3FQLEtBQUQsRUFBUWxYLE1BQVIsQ0FBdkI7QUFDQSxRQUFJMGQsR0FBRyxHQUFHN1YsaUJBQWUsQ0FBQ3dQLEdBQUcsS0FBSy9YLFNBQVIsR0FBb0JVLE1BQXBCLEdBQTZCcVgsR0FBOUIsRUFBbUNyWCxNQUFuQyxDQUF6QixDQUpnQzs7QUFNaEMsUUFBSTJkLFdBQUosRUFBaUJyYSxNQUFqQixFQUF5QnlULENBQXpCOztBQUNBLFFBQUl6TSxTQUFPLENBQUNuRyxDQUFELENBQVgsRUFBZ0I7QUFDZHdaLE1BQUFBLFdBQVcsR0FBR3haLENBQUMsQ0FBQ21LLFdBQWhCLENBRGM7O0FBR2QsVUFBSUosZUFBYSxDQUFDeVAsV0FBRCxDQUFiLEtBQStCQSxXQUFXLEtBQUt0VCxLQUFoQixJQUF5QkMsU0FBTyxDQUFDcVQsV0FBVyxDQUFDelgsU0FBYixDQUEvRCxDQUFKLEVBQTZGO0FBQzNGeVgsUUFBQUEsV0FBVyxHQUFHcmUsU0FBZDtBQUNELE9BRkQsTUFFTyxJQUFJaUMsVUFBUSxDQUFDb2MsV0FBRCxDQUFaLEVBQTJCO0FBQ2hDQSxRQUFBQSxXQUFXLEdBQUdBLFdBQVcsQ0FBQ3hQLFNBQUQsQ0FBekI7QUFDQSxZQUFJd1AsV0FBVyxLQUFLLElBQXBCLEVBQTBCQSxXQUFXLEdBQUdyZSxTQUFkO0FBQzNCOztBQUNELFVBQUlxZSxXQUFXLEtBQUt0VCxLQUFoQixJQUF5QnNULFdBQVcsS0FBS3JlLFNBQTdDLEVBQXdEO0FBQ3RELGVBQU9tZSxXQUFXLENBQUMvZSxJQUFaLENBQWlCeUYsQ0FBakIsRUFBb0IyUixDQUFwQixFQUF1QjRILEdBQXZCLENBQVA7QUFDRDtBQUNGOztBQUNEcGEsSUFBQUEsTUFBTSxHQUFHLEtBQUtxYSxXQUFXLEtBQUtyZSxTQUFoQixHQUE0QitLLEtBQTVCLEdBQW9Dc1QsV0FBekMsRUFBc0RwVyxLQUFHLENBQUNtVyxHQUFHLEdBQUc1SCxDQUFQLEVBQVUsQ0FBVixDQUF6RCxDQUFUOztBQUNBLFNBQUtpQixDQUFDLEdBQUcsQ0FBVCxFQUFZakIsQ0FBQyxHQUFHNEgsR0FBaEIsRUFBcUI1SCxDQUFDLElBQUlpQixDQUFDLEVBQTNCLEVBQStCLElBQUlqQixDQUFDLElBQUkzUixDQUFULEVBQVlpUyxnQkFBYyxDQUFDOVMsTUFBRCxFQUFTeVQsQ0FBVCxFQUFZNVMsQ0FBQyxDQUFDMlIsQ0FBRCxDQUFiLENBQWQ7O0FBQzNDeFMsSUFBQUEsTUFBTSxDQUFDdEQsTUFBUCxHQUFnQitXLENBQWhCO0FBQ0EsV0FBT3pULE1BQVA7QUFDRDtBQXpCK0QsQ0FBakUsQ0FBRDs7QUNwQkEsSUFBSXNNLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSTBmLE9BQUssR0FBRzFmLGNBQUEsQ0FBd0NxUixJQUFwRDs7QUFDQSxJQUFJa0kscUJBQW1CLEdBQUd2WixxQkFBMUI7O0FBRUEsSUFBSXdaLGVBQWEsR0FBR0QscUJBQW1CLENBQUMsTUFBRCxDQUF2QztBQUdBOztBQUNBN0gsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsT0FBVjtBQUFtQm9LLEVBQUFBLEtBQUssRUFBRSxJQUExQjtBQUFnQ2hKLEVBQUFBLE1BQU0sRUFBRSxDQUFDc047QUFBekMsQ0FBRCxFQUEyRDtBQUMxRG5JLEVBQUFBLElBQUksRUFBRSxTQUFTQSxJQUFULENBQWNOO0FBQVc7QUFBekIsSUFBMEM7QUFDOUMsV0FBTzJPLE9BQUssQ0FBQyxJQUFELEVBQU8zTyxVQUFQLEVBQW1CbFAsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBekQsQ0FBWjtBQUNEO0FBSHlELENBQTNELENBQUQ7O0FDVEE7QUFDQSxJQUFJOEgsT0FBSyxHQUFHNUosSUFBSSxDQUFDNEosS0FBakI7O0FBRUEsSUFBSXlXLFNBQVMsR0FBRyxVQUFVNUgsS0FBVixFQUFpQjZILFNBQWpCLEVBQTRCO0FBQzFDLE1BQUk5ZCxNQUFNLEdBQUdpVyxLQUFLLENBQUNqVyxNQUFuQjtBQUNBLE1BQUkrZCxNQUFNLEdBQUczVyxPQUFLLENBQUNwSCxNQUFNLEdBQUcsQ0FBVixDQUFsQjtBQUNBLFNBQU9BLE1BQU0sR0FBRyxDQUFULEdBQWFnZSxhQUFhLENBQUMvSCxLQUFELEVBQVE2SCxTQUFSLENBQTFCLEdBQStDRyxLQUFLLENBQ3pESixTQUFTLENBQUM1SCxLQUFLLENBQUM5VyxLQUFOLENBQVksQ0FBWixFQUFlNGUsTUFBZixDQUFELEVBQXlCRCxTQUF6QixDQURnRCxFQUV6REQsU0FBUyxDQUFDNUgsS0FBSyxDQUFDOVcsS0FBTixDQUFZNGUsTUFBWixDQUFELEVBQXNCRCxTQUF0QixDQUZnRCxFQUd6REEsU0FIeUQsQ0FBM0Q7QUFLRCxDQVJEOztBQVVBLElBQUlFLGFBQWEsR0FBRyxVQUFVL0gsS0FBVixFQUFpQjZILFNBQWpCLEVBQTRCO0FBQzlDLE1BQUk5ZCxNQUFNLEdBQUdpVyxLQUFLLENBQUNqVyxNQUFuQjtBQUNBLE1BQUl1SSxDQUFDLEdBQUcsQ0FBUjtBQUNBLE1BQUl1USxPQUFKLEVBQWFvRixDQUFiOztBQUVBLFNBQU8zVixDQUFDLEdBQUd2SSxNQUFYLEVBQW1CO0FBQ2pCa2UsSUFBQUEsQ0FBQyxHQUFHM1YsQ0FBSjtBQUNBdVEsSUFBQUEsT0FBTyxHQUFHN0MsS0FBSyxDQUFDMU4sQ0FBRCxDQUFmOztBQUNBLFdBQU8yVixDQUFDLElBQUlKLFNBQVMsQ0FBQzdILEtBQUssQ0FBQ2lJLENBQUMsR0FBRyxDQUFMLENBQU4sRUFBZXBGLE9BQWYsQ0FBVCxHQUFtQyxDQUEvQyxFQUFrRDtBQUNoRDdDLE1BQUFBLEtBQUssQ0FBQ2lJLENBQUQsQ0FBTCxHQUFXakksS0FBSyxDQUFDLEVBQUVpSSxDQUFILENBQWhCO0FBQ0Q7O0FBQ0QsUUFBSUEsQ0FBQyxLQUFLM1YsQ0FBQyxFQUFYLEVBQWUwTixLQUFLLENBQUNpSSxDQUFELENBQUwsR0FBV3BGLE9BQVg7QUFDaEI7O0FBQUMsU0FBTzdDLEtBQVA7QUFDSCxDQWJEOztBQWVBLElBQUlnSSxLQUFLLEdBQUcsVUFBVW5CLElBQVYsRUFBZ0JDLEtBQWhCLEVBQXVCZSxTQUF2QixFQUFrQztBQUM1QyxNQUFJSyxPQUFPLEdBQUdyQixJQUFJLENBQUM5YyxNQUFuQjtBQUNBLE1BQUlvZSxPQUFPLEdBQUdyQixLQUFLLENBQUMvYyxNQUFwQjtBQUNBLE1BQUlxZSxNQUFNLEdBQUcsQ0FBYjtBQUNBLE1BQUlDLE1BQU0sR0FBRyxDQUFiO0FBQ0EsTUFBSWhiLE1BQU0sR0FBRyxFQUFiOztBQUVBLFNBQU8rYSxNQUFNLEdBQUdGLE9BQVQsSUFBb0JHLE1BQU0sR0FBR0YsT0FBcEMsRUFBNkM7QUFDM0MsUUFBSUMsTUFBTSxHQUFHRixPQUFULElBQW9CRyxNQUFNLEdBQUdGLE9BQWpDLEVBQTBDO0FBQ3hDOWEsTUFBQUEsTUFBTSxDQUFDckIsSUFBUCxDQUFZNmIsU0FBUyxDQUFDaEIsSUFBSSxDQUFDdUIsTUFBRCxDQUFMLEVBQWV0QixLQUFLLENBQUN1QixNQUFELENBQXBCLENBQVQsSUFBMEMsQ0FBMUMsR0FBOEN4QixJQUFJLENBQUN1QixNQUFNLEVBQVAsQ0FBbEQsR0FBK0R0QixLQUFLLENBQUN1QixNQUFNLEVBQVAsQ0FBaEY7QUFDRCxLQUZELE1BRU87QUFDTGhiLE1BQUFBLE1BQU0sQ0FBQ3JCLElBQVAsQ0FBWW9jLE1BQU0sR0FBR0YsT0FBVCxHQUFtQnJCLElBQUksQ0FBQ3VCLE1BQU0sRUFBUCxDQUF2QixHQUFvQ3RCLEtBQUssQ0FBQ3VCLE1BQU0sRUFBUCxDQUFyRDtBQUNEO0FBQ0Y7O0FBQUMsU0FBT2hiLE1BQVA7QUFDSCxDQWREOztJQWdCQTdGLFNBQUEsR0FBaUJvZ0IsU0FBakI7O0FDNUNBLElBQUkzZCxXQUFTLEdBQUdoQyxlQUFoQjs7QUFFQSxJQUFJcWdCLE9BQU8sR0FBR3JlLFdBQVMsQ0FBQ00sS0FBVixDQUFnQixpQkFBaEIsQ0FBZDtJQUVBL0MsZUFBQSxHQUFpQixDQUFDLENBQUM4Z0IsT0FBRixJQUFhLENBQUNBLE9BQU8sQ0FBQyxDQUFELENBQXRDOztBQ0pBLElBQUlDLEVBQUUsR0FBR3RnQixlQUFUOztJQUVBVCxnQkFBQSxHQUFpQixlQUFlb0gsSUFBZixDQUFvQjJaLEVBQXBCLENBQWpCOztBQ0ZBLElBQUl0ZSxXQUFTLEdBQUdoQyxlQUFoQjs7QUFFQSxJQUFJdWdCLE1BQU0sR0FBR3ZlLFdBQVMsQ0FBQ00sS0FBVixDQUFnQixzQkFBaEIsQ0FBYjtJQUVBL0MsbUJBQUEsR0FBaUIsQ0FBQyxDQUFDZ2hCLE1BQUYsSUFBWSxDQUFDQSxNQUFNLENBQUMsQ0FBRCxDQUFwQzs7QUNIQSxJQUFJN08sSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJa0QsV0FBUyxHQUFHbEQsV0FBaEI7O0FBQ0EsSUFBSWtFLFVBQVEsR0FBR2xFLFVBQWY7O0FBQ0EsSUFBSTRKLG1CQUFpQixHQUFHNUosbUJBQXhCOztBQUNBLElBQUlnQixVQUFRLEdBQUdoQixVQUFmOztBQUNBLElBQUlELE9BQUssR0FBR0MsUUFBWjs7QUFDQSxJQUFJd2dCLGNBQVksR0FBR3hnQixTQUFuQjs7QUFDQSxJQUFJdVosbUJBQW1CLEdBQUd2WixxQkFBMUI7O0FBQ0EsSUFBSXlnQixJQUFFLEdBQUd6Z0IsZUFBVDs7QUFDQSxJQUFJMGdCLFlBQVUsR0FBRzFnQixnQkFBakI7O0FBQ0EsSUFBSTJnQixJQUFFLEdBQUczZ0IsZUFBVDs7QUFDQSxJQUFJNGdCLFFBQU0sR0FBRzVnQixtQkFBYjs7QUFFQSxJQUFJMkcsSUFBSSxHQUFHLEVBQVg7QUFDQSxJQUFJa2EsWUFBVSxHQUFHbGEsSUFBSSxDQUFDbWEsSUFBdEI7O0FBR0EsSUFBSUMsa0JBQWtCLEdBQUdoaEIsT0FBSyxDQUFDLFlBQVk7QUFDekM0RyxFQUFBQSxJQUFJLENBQUNtYSxJQUFMLENBQVUxZixTQUFWO0FBQ0QsQ0FGNkIsQ0FBOUI7O0FBSUEsSUFBSTRmLGFBQWEsR0FBR2poQixPQUFLLENBQUMsWUFBWTtBQUNwQzRHLEVBQUFBLElBQUksQ0FBQ21hLElBQUwsQ0FBVSxJQUFWO0FBQ0QsQ0FGd0IsQ0FBekI7O0FBSUEsSUFBSXRILGFBQWEsR0FBR0QsbUJBQW1CLENBQUMsTUFBRCxDQUF2QztBQUVBLElBQUkwSCxhQUFXLEdBQUcsQ0FBQ2xoQixPQUFLLENBQUMsWUFBWTtBQUNuQztBQUNBLE1BQUk0Z0IsSUFBSixFQUFRLE9BQU9BLElBQUUsR0FBRyxFQUFaO0FBQ1IsTUFBSUYsSUFBRSxJQUFJQSxJQUFFLEdBQUcsQ0FBZixFQUFrQjtBQUNsQixNQUFJQyxZQUFKLEVBQWdCLE9BQU8sSUFBUDtBQUNoQixNQUFJRSxRQUFKLEVBQVksT0FBT0EsUUFBTSxHQUFHLEdBQWhCO0FBRVosTUFBSXhiLE1BQU0sR0FBRyxFQUFiO0FBQ0EsTUFBSThiLElBQUosRUFBVUMsR0FBVixFQUFldGdCLEtBQWYsRUFBc0IwSSxLQUF0QixDQVJtQzs7QUFXbkMsT0FBSzJYLElBQUksR0FBRyxFQUFaLEVBQWdCQSxJQUFJLEdBQUcsRUFBdkIsRUFBMkJBLElBQUksRUFBL0IsRUFBbUM7QUFDakNDLElBQUFBLEdBQUcsR0FBR3hlLE1BQU0sQ0FBQ3llLFlBQVAsQ0FBb0JGLElBQXBCLENBQU47O0FBRUEsWUFBUUEsSUFBUjtBQUNFLFdBQUssRUFBTDtBQUFTLFdBQUssRUFBTDtBQUFTLFdBQUssRUFBTDtBQUFTLFdBQUssRUFBTDtBQUFTcmdCLFFBQUFBLEtBQUssR0FBRyxDQUFSO0FBQVc7O0FBQy9DLFdBQUssRUFBTDtBQUFTLFdBQUssRUFBTDtBQUFTQSxRQUFBQSxLQUFLLEdBQUcsQ0FBUjtBQUFXOztBQUM3QjtBQUFTQSxRQUFBQSxLQUFLLEdBQUcsQ0FBUjtBQUhYOztBQU1BLFNBQUswSSxLQUFLLEdBQUcsQ0FBYixFQUFnQkEsS0FBSyxHQUFHLEVBQXhCLEVBQTRCQSxLQUFLLEVBQWpDLEVBQXFDO0FBQ25DNUMsTUFBQUEsSUFBSSxDQUFDNUMsSUFBTCxDQUFVO0FBQUU2VCxRQUFBQSxDQUFDLEVBQUV1SixHQUFHLEdBQUc1WCxLQUFYO0FBQWtCOFgsUUFBQUEsQ0FBQyxFQUFFeGdCO0FBQXJCLE9BQVY7QUFDRDtBQUNGOztBQUVEOEYsRUFBQUEsSUFBSSxDQUFDbWEsSUFBTCxDQUFVLFVBQVVwYixDQUFWLEVBQWE0SixDQUFiLEVBQWdCO0FBQUUsV0FBT0EsQ0FBQyxDQUFDK1IsQ0FBRixHQUFNM2IsQ0FBQyxDQUFDMmIsQ0FBZjtBQUFtQixHQUEvQzs7QUFFQSxPQUFLOVgsS0FBSyxHQUFHLENBQWIsRUFBZ0JBLEtBQUssR0FBRzVDLElBQUksQ0FBQzdFLE1BQTdCLEVBQXFDeUgsS0FBSyxFQUExQyxFQUE4QztBQUM1QzRYLElBQUFBLEdBQUcsR0FBR3hhLElBQUksQ0FBQzRDLEtBQUQsQ0FBSixDQUFZcU8sQ0FBWixDQUFjMEosTUFBZCxDQUFxQixDQUFyQixDQUFOO0FBQ0EsUUFBSWxjLE1BQU0sQ0FBQ2tjLE1BQVAsQ0FBY2xjLE1BQU0sQ0FBQ3RELE1BQVAsR0FBZ0IsQ0FBOUIsTUFBcUNxZixHQUF6QyxFQUE4Qy9iLE1BQU0sSUFBSStiLEdBQVY7QUFDL0M7O0FBRUQsU0FBTy9iLE1BQU0sS0FBSyxhQUFsQjtBQUNELENBakN1QixDQUF4QjtBQW1DQSxJQUFJMkcsUUFBTSxHQUFHZ1Ysa0JBQWtCLElBQUksQ0FBQ0MsYUFBdkIsSUFBd0MsQ0FBQ3hILGFBQXpDLElBQTBELENBQUN5SCxhQUF4RTs7QUFFQSxJQUFJTSxnQkFBYyxHQUFHLFVBQVUzQixTQUFWLEVBQXFCO0FBQ3hDLFNBQU8sVUFBVTRCLENBQVYsRUFBYUMsQ0FBYixFQUFnQjtBQUNyQixRQUFJQSxDQUFDLEtBQUtyZ0IsU0FBVixFQUFxQixPQUFPLENBQUMsQ0FBUjtBQUNyQixRQUFJb2dCLENBQUMsS0FBS3BnQixTQUFWLEVBQXFCLE9BQU8sQ0FBUDtBQUNyQixRQUFJd2UsU0FBUyxLQUFLeGUsU0FBbEIsRUFBNkIsT0FBTyxDQUFDd2UsU0FBUyxDQUFDNEIsQ0FBRCxFQUFJQyxDQUFKLENBQVYsSUFBb0IsQ0FBM0I7QUFDN0IsV0FBT3pnQixVQUFRLENBQUN3Z0IsQ0FBRCxDQUFSLEdBQWN4Z0IsVUFBUSxDQUFDeWdCLENBQUQsQ0FBdEIsR0FBNEIsQ0FBNUIsR0FBZ0MsQ0FBQyxDQUF4QztBQUNELEdBTEQ7QUFNRCxDQVBEO0FBVUE7OztBQUNBL1AsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsT0FBVjtBQUFtQm9LLEVBQUFBLEtBQUssRUFBRSxJQUExQjtBQUFnQ2hKLEVBQUFBLE1BQU0sRUFBRUg7QUFBeEMsQ0FBRCxFQUFtRDtBQUNsRCtVLEVBQUFBLElBQUksRUFBRSxTQUFTQSxJQUFULENBQWNsQixTQUFkLEVBQXlCO0FBQzdCLFFBQUlBLFNBQVMsS0FBS3hlLFNBQWxCLEVBQTZCOEIsV0FBUyxDQUFDMGMsU0FBRCxDQUFUO0FBRTdCLFFBQUk3SCxLQUFLLEdBQUc3VCxVQUFRLENBQUMsSUFBRCxDQUFwQjtBQUVBLFFBQUkrYyxhQUFKLEVBQWlCLE9BQU9yQixTQUFTLEtBQUt4ZSxTQUFkLEdBQTBCeWYsWUFBVSxDQUFDcmdCLElBQVgsQ0FBZ0J1WCxLQUFoQixDQUExQixHQUFtRDhJLFlBQVUsQ0FBQ3JnQixJQUFYLENBQWdCdVgsS0FBaEIsRUFBdUI2SCxTQUF2QixDQUExRDtBQUVqQixRQUFJOEIsS0FBSyxHQUFHLEVBQVo7QUFDQSxRQUFJQyxXQUFXLEdBQUcvWCxtQkFBaUIsQ0FBQ21PLEtBQUQsQ0FBbkM7QUFDQSxRQUFJNkosV0FBSixFQUFpQnJZLEtBQWpCOztBQUVBLFNBQUtBLEtBQUssR0FBRyxDQUFiLEVBQWdCQSxLQUFLLEdBQUdvWSxXQUF4QixFQUFxQ3BZLEtBQUssRUFBMUMsRUFBOEM7QUFDNUMsVUFBSUEsS0FBSyxJQUFJd08sS0FBYixFQUFvQjJKLEtBQUssQ0FBQzNkLElBQU4sQ0FBV2dVLEtBQUssQ0FBQ3hPLEtBQUQsQ0FBaEI7QUFDckI7O0FBRURtWSxJQUFBQSxLQUFLLEdBQUdsQixjQUFZLENBQUNrQixLQUFELEVBQVFILGdCQUFjLENBQUMzQixTQUFELENBQXRCLENBQXBCO0FBQ0FnQyxJQUFBQSxXQUFXLEdBQUdGLEtBQUssQ0FBQzVmLE1BQXBCO0FBQ0F5SCxJQUFBQSxLQUFLLEdBQUcsQ0FBUjs7QUFFQSxXQUFPQSxLQUFLLEdBQUdxWSxXQUFmLEVBQTRCN0osS0FBSyxDQUFDeE8sS0FBRCxDQUFMLEdBQWVtWSxLQUFLLENBQUNuWSxLQUFLLEVBQU4sQ0FBcEI7O0FBQzVCLFdBQU9BLEtBQUssR0FBR29ZLFdBQWYsRUFBNEIsT0FBTzVKLEtBQUssQ0FBQ3hPLEtBQUssRUFBTixDQUFaOztBQUU1QixXQUFPd08sS0FBUDtBQUNEO0FBeEJpRCxDQUFuRCxDQUFEOztBQzNFQSxJQUFJaFcsWUFBVSxHQUFHL0IsWUFBakI7O0FBQ0EsSUFBSXNHLHNCQUFvQixHQUFHdEcsb0JBQTNCOztBQUNBLElBQUlpRixpQkFBZSxHQUFHakYsaUJBQXRCOztBQUNBLElBQUl5RixhQUFXLEdBQUd6RixXQUFsQjs7QUFFQSxJQUFJaVEsU0FBTyxHQUFHaEwsaUJBQWUsQ0FBQyxTQUFELENBQTdCOztJQUVBMUYsWUFBQSxHQUFpQixVQUFVc2lCLGdCQUFWLEVBQTRCO0FBQzNDLE1BQUlwQyxXQUFXLEdBQUcxZCxZQUFVLENBQUM4ZixnQkFBRCxDQUE1QjtBQUNBLE1BQUkzaEIsY0FBYyxHQUFHb0csc0JBQW9CLENBQUNKLENBQTFDOztBQUVBLE1BQUlULGFBQVcsSUFBSWdhLFdBQWYsSUFBOEIsQ0FBQ0EsV0FBVyxDQUFDeFAsU0FBRCxDQUE5QyxFQUF5RDtBQUN2RC9QLElBQUFBLGNBQWMsQ0FBQ3VmLFdBQUQsRUFBY3hQLFNBQWQsRUFBdUI7QUFDbkNuUCxNQUFBQSxZQUFZLEVBQUUsSUFEcUI7QUFFbkNYLE1BQUFBLEdBQUcsRUFBRSxZQUFZO0FBQUUsZUFBTyxJQUFQO0FBQWM7QUFGRSxLQUF2QixDQUFkO0FBSUQ7QUFDRixDQVZEOztBQ1JBLElBQUkyaEIsWUFBVSxHQUFHOWhCLFlBQWpCO0FBR0E7OztBQUNBOGhCLFlBQVUsQ0FBQyxPQUFELENBQVY7O0FDSEEsSUFBSXBRLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSTJKLGlCQUFlLEdBQUczSixpQkFBdEI7O0FBQ0EsSUFBSW9KLHFCQUFtQixHQUFHcEoscUJBQTFCOztBQUNBLElBQUk0SixtQkFBaUIsR0FBRzVKLG1CQUF4Qjs7QUFDQSxJQUFJa0UsVUFBUSxHQUFHbEUsVUFBZjs7QUFDQSxJQUFJdVEsb0JBQWtCLEdBQUd2USxvQkFBekI7O0FBQ0EsSUFBSWtZLGdCQUFjLEdBQUdsWSxnQkFBckI7O0FBQ0EsSUFBSW1ZLDRCQUE0QixHQUFHblksOEJBQW5DOztBQUVBLElBQUk2WixtQkFBbUIsR0FBRzFCLDRCQUE0QixDQUFDLFFBQUQsQ0FBdEQ7QUFFQSxJQUFJOU8sS0FBRyxHQUFHL0osSUFBSSxDQUFDK0osR0FBZjtBQUNBLElBQUlDLEtBQUcsR0FBR2hLLElBQUksQ0FBQ2dLLEdBQWY7QUFDQSxJQUFJK08sa0JBQWdCLEdBQUcsZ0JBQXZCO0FBQ0EsSUFBSTBKLCtCQUErQixHQUFHLGlDQUF0QztBQUdBO0FBQ0E7O0FBQ0FyUSxJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxPQUFWO0FBQW1Cb0ssRUFBQUEsS0FBSyxFQUFFLElBQTFCO0FBQWdDaEosRUFBQUEsTUFBTSxFQUFFLENBQUMyTjtBQUF6QyxDQUFELEVBQWlFO0FBQ2hFbUksRUFBQUEsTUFBTSxFQUFFLFNBQVNBLE1BQVQsQ0FBZ0JoSixLQUFoQixFQUF1QmlKO0FBQVk7QUFBbkMsSUFBcUQ7QUFDM0QsUUFBSWhjLENBQUMsR0FBRy9CLFVBQVEsQ0FBQyxJQUFELENBQWhCO0FBQ0EsUUFBSXdULEdBQUcsR0FBRzlOLG1CQUFpQixDQUFDM0QsQ0FBRCxDQUEzQjtBQUNBLFFBQUlpYyxXQUFXLEdBQUd2WSxpQkFBZSxDQUFDcVAsS0FBRCxFQUFRdEIsR0FBUixDQUFqQztBQUNBLFFBQUlnQyxlQUFlLEdBQUc3WCxTQUFTLENBQUNDLE1BQWhDO0FBQ0EsUUFBSXFnQixXQUFKLEVBQWlCQyxpQkFBakIsRUFBb0N4SixDQUFwQyxFQUF1Q2hCLENBQXZDLEVBQTBDc0IsSUFBMUMsRUFBZ0RELEVBQWhEOztBQUNBLFFBQUlTLGVBQWUsS0FBSyxDQUF4QixFQUEyQjtBQUN6QnlJLE1BQUFBLFdBQVcsR0FBR0MsaUJBQWlCLEdBQUcsQ0FBbEM7QUFDRCxLQUZELE1BRU8sSUFBSTFJLGVBQWUsS0FBSyxDQUF4QixFQUEyQjtBQUNoQ3lJLE1BQUFBLFdBQVcsR0FBRyxDQUFkO0FBQ0FDLE1BQUFBLGlCQUFpQixHQUFHMUssR0FBRyxHQUFHd0ssV0FBMUI7QUFDRCxLQUhNLE1BR0E7QUFDTEMsTUFBQUEsV0FBVyxHQUFHekksZUFBZSxHQUFHLENBQWhDO0FBQ0EwSSxNQUFBQSxpQkFBaUIsR0FBRzlZLEtBQUcsQ0FBQ0QsS0FBRyxDQUFDRCxxQkFBbUIsQ0FBQzZZLFdBQUQsQ0FBcEIsRUFBbUMsQ0FBbkMsQ0FBSixFQUEyQ3ZLLEdBQUcsR0FBR3dLLFdBQWpELENBQXZCO0FBQ0Q7O0FBQ0QsUUFBSXhLLEdBQUcsR0FBR3lLLFdBQU4sR0FBb0JDLGlCQUFwQixHQUF3Qy9KLGtCQUE1QyxFQUE4RDtBQUM1RCxZQUFNaFgsU0FBUyxDQUFDMGdCLCtCQUFELENBQWY7QUFDRDs7QUFDRG5KLElBQUFBLENBQUMsR0FBR3JJLG9CQUFrQixDQUFDdEssQ0FBRCxFQUFJbWMsaUJBQUosQ0FBdEI7O0FBQ0EsU0FBS3hLLENBQUMsR0FBRyxDQUFULEVBQVlBLENBQUMsR0FBR3dLLGlCQUFoQixFQUFtQ3hLLENBQUMsRUFBcEMsRUFBd0M7QUFDdENzQixNQUFBQSxJQUFJLEdBQUdnSixXQUFXLEdBQUd0SyxDQUFyQjtBQUNBLFVBQUlzQixJQUFJLElBQUlqVCxDQUFaLEVBQWVpUyxnQkFBYyxDQUFDVSxDQUFELEVBQUloQixDQUFKLEVBQU8zUixDQUFDLENBQUNpVCxJQUFELENBQVIsQ0FBZDtBQUNoQjs7QUFDRE4sSUFBQUEsQ0FBQyxDQUFDOVcsTUFBRixHQUFXc2dCLGlCQUFYOztBQUNBLFFBQUlELFdBQVcsR0FBR0MsaUJBQWxCLEVBQXFDO0FBQ25DLFdBQUt4SyxDQUFDLEdBQUdzSyxXQUFULEVBQXNCdEssQ0FBQyxHQUFHRixHQUFHLEdBQUcwSyxpQkFBaEMsRUFBbUR4SyxDQUFDLEVBQXBELEVBQXdEO0FBQ3REc0IsUUFBQUEsSUFBSSxHQUFHdEIsQ0FBQyxHQUFHd0ssaUJBQVg7QUFDQW5KLFFBQUFBLEVBQUUsR0FBR3JCLENBQUMsR0FBR3VLLFdBQVQ7QUFDQSxZQUFJakosSUFBSSxJQUFJalQsQ0FBWixFQUFlQSxDQUFDLENBQUNnVCxFQUFELENBQUQsR0FBUWhULENBQUMsQ0FBQ2lULElBQUQsQ0FBVCxDQUFmLEtBQ0ssT0FBT2pULENBQUMsQ0FBQ2dULEVBQUQsQ0FBUjtBQUNOOztBQUNELFdBQUtyQixDQUFDLEdBQUdGLEdBQVQsRUFBY0UsQ0FBQyxHQUFHRixHQUFHLEdBQUcwSyxpQkFBTixHQUEwQkQsV0FBNUMsRUFBeUR2SyxDQUFDLEVBQTFELEVBQThELE9BQU8zUixDQUFDLENBQUMyUixDQUFDLEdBQUcsQ0FBTCxDQUFSO0FBQy9ELEtBUkQsTUFRTyxJQUFJdUssV0FBVyxHQUFHQyxpQkFBbEIsRUFBcUM7QUFDMUMsV0FBS3hLLENBQUMsR0FBR0YsR0FBRyxHQUFHMEssaUJBQWYsRUFBa0N4SyxDQUFDLEdBQUdzSyxXQUF0QyxFQUFtRHRLLENBQUMsRUFBcEQsRUFBd0Q7QUFDdERzQixRQUFBQSxJQUFJLEdBQUd0QixDQUFDLEdBQUd3SyxpQkFBSixHQUF3QixDQUEvQjtBQUNBbkosUUFBQUEsRUFBRSxHQUFHckIsQ0FBQyxHQUFHdUssV0FBSixHQUFrQixDQUF2QjtBQUNBLFlBQUlqSixJQUFJLElBQUlqVCxDQUFaLEVBQWVBLENBQUMsQ0FBQ2dULEVBQUQsQ0FBRCxHQUFRaFQsQ0FBQyxDQUFDaVQsSUFBRCxDQUFULENBQWYsS0FDSyxPQUFPalQsQ0FBQyxDQUFDZ1QsRUFBRCxDQUFSO0FBQ047QUFDRjs7QUFDRCxTQUFLckIsQ0FBQyxHQUFHLENBQVQsRUFBWUEsQ0FBQyxHQUFHdUssV0FBaEIsRUFBNkJ2SyxDQUFDLEVBQTlCLEVBQWtDO0FBQ2hDM1IsTUFBQUEsQ0FBQyxDQUFDMlIsQ0FBQyxHQUFHc0ssV0FBTCxDQUFELEdBQXFCcmdCLFNBQVMsQ0FBQytWLENBQUMsR0FBRyxDQUFMLENBQTlCO0FBQ0Q7O0FBQ0QzUixJQUFBQSxDQUFDLENBQUNuRSxNQUFGLEdBQVc0VixHQUFHLEdBQUcwSyxpQkFBTixHQUEwQkQsV0FBckM7QUFDQSxXQUFPdkosQ0FBUDtBQUNEO0FBOUMrRCxDQUFqRSxDQUFEOztBQ3BCQTtBQUNBO0FBQ0EsSUFBSXBCLGtCQUFnQixHQUFHeFgsa0JBQXZCOzs7QUFHQXdYLGtCQUFnQixDQUFDLE1BQUQsQ0FBaEI7O0FDTEE7QUFDQTtBQUNBLElBQUlBLGtCQUFnQixHQUFHeFgsa0JBQXZCOzs7QUFHQXdYLGtCQUFnQixDQUFDLFNBQUQsQ0FBaEI7O0FDTEE7SUFDQWpZLGlCQUFBLEdBQWlCLE9BQU84aUIsV0FBUCxLQUF1QixXQUF2QixJQUFzQyxPQUFPQyxRQUFQLEtBQW9CLFdBQTNFOztBQ0RBLElBQUk3VyxVQUFRLEdBQUd6TCxrQkFBZjs7SUFFQVQsYUFBQSxHQUFpQixVQUFVdUwsTUFBVixFQUFrQndELEdBQWxCLEVBQXVCNUYsT0FBdkIsRUFBZ0M7QUFDL0MsT0FBSyxJQUFJL0UsR0FBVCxJQUFnQjJLLEdBQWhCLEVBQXFCN0MsVUFBUSxDQUFDWCxNQUFELEVBQVNuSCxHQUFULEVBQWMySyxHQUFHLENBQUMzSyxHQUFELENBQWpCLEVBQXdCK0UsT0FBeEIsQ0FBUjs7QUFDckIsU0FBT29DLE1BQVA7QUFDRCxDQUhEOztJQ0ZBdkwsWUFBQSxHQUFpQixVQUFVRixFQUFWLEVBQWNvZ0IsV0FBZCxFQUEyQjVhLElBQTNCLEVBQWlDO0FBQ2hELE1BQUl4RixFQUFFLFlBQVlvZ0IsV0FBbEIsRUFBK0IsT0FBT3BnQixFQUFQO0FBQy9CLFFBQU1nQyxTQUFTLENBQUMsZ0JBQWdCd0QsSUFBSSxHQUFHQSxJQUFJLEdBQUcsR0FBVixHQUFnQixFQUFwQyxJQUEwQyxZQUEzQyxDQUFmO0FBQ0QsQ0FIRDs7QUNBQSxJQUFJdUUscUJBQW1CLEdBQUdwSixxQkFBMUI7O0FBQ0EsSUFBSXlKLFVBQVEsR0FBR3pKLFVBQWY7QUFHQTs7O0lBQ0FULFNBQUEsR0FBaUIsVUFBVUYsRUFBVixFQUFjO0FBQzdCLE1BQUlBLEVBQUUsS0FBSytCLFNBQVgsRUFBc0IsT0FBTyxDQUFQO0FBQ3RCLE1BQUkrSCxNQUFNLEdBQUdDLHFCQUFtQixDQUFDL0osRUFBRCxDQUFoQztBQUNBLE1BQUl5QyxNQUFNLEdBQUcySCxVQUFRLENBQUNOLE1BQUQsQ0FBckI7QUFDQSxNQUFJQSxNQUFNLEtBQUtySCxNQUFmLEVBQXVCLE1BQU15Z0IsVUFBVSxDQUFDLHVCQUFELENBQWhCO0FBQ3ZCLFNBQU96Z0IsTUFBUDtBQUNELENBTkQ7O0FDTEE7QUFDQSxJQUFJMGdCLEtBQUcsR0FBR2xqQixJQUFJLENBQUNrakIsR0FBZjtBQUNBLElBQUlDLEtBQUcsR0FBR25qQixJQUFJLENBQUNtakIsR0FBZjtBQUNBLElBQUl2WixPQUFLLEdBQUc1SixJQUFJLENBQUM0SixLQUFqQjtBQUNBLElBQUl3WixLQUFHLEdBQUdwakIsSUFBSSxDQUFDb2pCLEdBQWY7QUFDQSxJQUFJQyxLQUFHLEdBQUdyakIsSUFBSSxDQUFDcWpCLEdBQWY7O0FBRUEsSUFBSUMsSUFBSSxHQUFHLFVBQVV6WixNQUFWLEVBQWtCMFosY0FBbEIsRUFBa0NDLEtBQWxDLEVBQXlDO0FBQ2xELE1BQUlDLE1BQU0sR0FBRyxJQUFJNVcsS0FBSixDQUFVMlcsS0FBVixDQUFiO0FBQ0EsTUFBSUUsY0FBYyxHQUFHRixLQUFLLEdBQUcsQ0FBUixHQUFZRCxjQUFaLEdBQTZCLENBQWxEO0FBQ0EsTUFBSUksSUFBSSxHQUFHLENBQUMsS0FBS0QsY0FBTixJQUF3QixDQUFuQztBQUNBLE1BQUlFLEtBQUssR0FBR0QsSUFBSSxJQUFJLENBQXBCO0FBQ0EsTUFBSUUsRUFBRSxHQUFHTixjQUFjLEtBQUssRUFBbkIsR0FBd0JKLEtBQUcsQ0FBQyxDQUFELEVBQUksQ0FBQyxFQUFMLENBQUgsR0FBY0EsS0FBRyxDQUFDLENBQUQsRUFBSSxDQUFDLEVBQUwsQ0FBekMsR0FBb0QsQ0FBN0Q7QUFDQSxNQUFJVyxJQUFJLEdBQUdqYSxNQUFNLEdBQUcsQ0FBVCxJQUFjQSxNQUFNLEtBQUssQ0FBWCxJQUFnQixJQUFJQSxNQUFKLEdBQWEsQ0FBM0MsR0FBK0MsQ0FBL0MsR0FBbUQsQ0FBOUQ7QUFDQSxNQUFJSSxLQUFLLEdBQUcsQ0FBWjtBQUNBLE1BQUk4WixRQUFKLEVBQWNDLFFBQWQsRUFBd0IvVCxDQUF4QjtBQUNBcEcsRUFBQUEsTUFBTSxHQUFHcVosS0FBRyxDQUFDclosTUFBRCxDQUFaLENBVGtEOztBQVdsRCxNQUFJQSxNQUFNLElBQUlBLE1BQVYsSUFBb0JBLE1BQU0sS0FBS29hLFFBQW5DLEVBQTZDO0FBQzNDO0FBQ0FELElBQUFBLFFBQVEsR0FBR25hLE1BQU0sSUFBSUEsTUFBVixHQUFtQixDQUFuQixHQUF1QixDQUFsQztBQUNBa2EsSUFBQUEsUUFBUSxHQUFHSixJQUFYO0FBQ0QsR0FKRCxNQUlPO0FBQ0xJLElBQUFBLFFBQVEsR0FBR25hLE9BQUssQ0FBQ3daLEtBQUcsQ0FBQ3ZaLE1BQUQsQ0FBSCxHQUFjd1osS0FBZixDQUFoQjs7QUFDQSxRQUFJeFosTUFBTSxJQUFJb0csQ0FBQyxHQUFHa1QsS0FBRyxDQUFDLENBQUQsRUFBSSxDQUFDWSxRQUFMLENBQVgsQ0FBTixHQUFtQyxDQUF2QyxFQUEwQztBQUN4Q0EsTUFBQUEsUUFBUTtBQUNSOVQsTUFBQUEsQ0FBQyxJQUFJLENBQUw7QUFDRDs7QUFDRCxRQUFJOFQsUUFBUSxHQUFHSCxLQUFYLElBQW9CLENBQXhCLEVBQTJCO0FBQ3pCL1osTUFBQUEsTUFBTSxJQUFJZ2EsRUFBRSxHQUFHNVQsQ0FBZjtBQUNELEtBRkQsTUFFTztBQUNMcEcsTUFBQUEsTUFBTSxJQUFJZ2EsRUFBRSxHQUFHVixLQUFHLENBQUMsQ0FBRCxFQUFJLElBQUlTLEtBQVIsQ0FBbEI7QUFDRDs7QUFDRCxRQUFJL1osTUFBTSxHQUFHb0csQ0FBVCxJQUFjLENBQWxCLEVBQXFCO0FBQ25COFQsTUFBQUEsUUFBUTtBQUNSOVQsTUFBQUEsQ0FBQyxJQUFJLENBQUw7QUFDRDs7QUFDRCxRQUFJOFQsUUFBUSxHQUFHSCxLQUFYLElBQW9CRCxJQUF4QixFQUE4QjtBQUM1QkssTUFBQUEsUUFBUSxHQUFHLENBQVg7QUFDQUQsTUFBQUEsUUFBUSxHQUFHSixJQUFYO0FBQ0QsS0FIRCxNQUdPLElBQUlJLFFBQVEsR0FBR0gsS0FBWCxJQUFvQixDQUF4QixFQUEyQjtBQUNoQ0ksTUFBQUEsUUFBUSxHQUFHLENBQUNuYSxNQUFNLEdBQUdvRyxDQUFULEdBQWEsQ0FBZCxJQUFtQmtULEtBQUcsQ0FBQyxDQUFELEVBQUlJLGNBQUosQ0FBakM7QUFDQVEsTUFBQUEsUUFBUSxHQUFHQSxRQUFRLEdBQUdILEtBQXRCO0FBQ0QsS0FITSxNQUdBO0FBQ0xJLE1BQUFBLFFBQVEsR0FBR25hLE1BQU0sR0FBR3NaLEtBQUcsQ0FBQyxDQUFELEVBQUlTLEtBQUssR0FBRyxDQUFaLENBQVosR0FBNkJULEtBQUcsQ0FBQyxDQUFELEVBQUlJLGNBQUosQ0FBM0M7QUFDQVEsTUFBQUEsUUFBUSxHQUFHLENBQVg7QUFDRDtBQUNGOztBQUNELFNBQU9SLGNBQWMsSUFBSSxDQUF6QixFQUE0QkUsTUFBTSxDQUFDeFosS0FBSyxFQUFOLENBQU4sR0FBa0IrWixRQUFRLEdBQUcsR0FBN0IsRUFBa0NBLFFBQVEsSUFBSSxHQUE5QyxFQUFtRFQsY0FBYyxJQUFJLENBQWpHLENBQW1HOztBQUNuR1EsRUFBQUEsUUFBUSxHQUFHQSxRQUFRLElBQUlSLGNBQVosR0FBNkJTLFFBQXhDO0FBQ0FOLEVBQUFBLGNBQWMsSUFBSUgsY0FBbEI7O0FBQ0EsU0FBT0csY0FBYyxHQUFHLENBQXhCLEVBQTJCRCxNQUFNLENBQUN4WixLQUFLLEVBQU4sQ0FBTixHQUFrQjhaLFFBQVEsR0FBRyxHQUE3QixFQUFrQ0EsUUFBUSxJQUFJLEdBQTlDLEVBQW1ETCxjQUFjLElBQUksQ0FBaEcsQ0FBa0c7O0FBQ2xHRCxFQUFBQSxNQUFNLENBQUMsRUFBRXhaLEtBQUgsQ0FBTixJQUFtQjZaLElBQUksR0FBRyxHQUExQjtBQUNBLFNBQU9MLE1BQVA7QUFDRCxDQS9DRDs7QUFpREEsSUFBSVMsTUFBTSxHQUFHLFVBQVVULE1BQVYsRUFBa0JGLGNBQWxCLEVBQWtDO0FBQzdDLE1BQUlDLEtBQUssR0FBR0MsTUFBTSxDQUFDamhCLE1BQW5CO0FBQ0EsTUFBSWtoQixjQUFjLEdBQUdGLEtBQUssR0FBRyxDQUFSLEdBQVlELGNBQVosR0FBNkIsQ0FBbEQ7QUFDQSxNQUFJSSxJQUFJLEdBQUcsQ0FBQyxLQUFLRCxjQUFOLElBQXdCLENBQW5DO0FBQ0EsTUFBSUUsS0FBSyxHQUFHRCxJQUFJLElBQUksQ0FBcEI7QUFDQSxNQUFJUSxLQUFLLEdBQUdULGNBQWMsR0FBRyxDQUE3QjtBQUNBLE1BQUl6WixLQUFLLEdBQUd1WixLQUFLLEdBQUcsQ0FBcEI7QUFDQSxNQUFJTSxJQUFJLEdBQUdMLE1BQU0sQ0FBQ3haLEtBQUssRUFBTixDQUFqQjtBQUNBLE1BQUk4WixRQUFRLEdBQUdELElBQUksR0FBRyxHQUF0QjtBQUNBLE1BQUlFLFFBQUo7QUFDQUYsRUFBQUEsSUFBSSxLQUFLLENBQVQ7O0FBQ0EsU0FBT0ssS0FBSyxHQUFHLENBQWYsRUFBa0JKLFFBQVEsR0FBR0EsUUFBUSxHQUFHLEdBQVgsR0FBaUJOLE1BQU0sQ0FBQ3haLEtBQUQsQ0FBbEMsRUFBMkNBLEtBQUssRUFBaEQsRUFBb0RrYSxLQUFLLElBQUksQ0FBL0UsQ0FBaUY7O0FBQ2pGSCxFQUFBQSxRQUFRLEdBQUdELFFBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQ0ksS0FBUCxJQUFnQixDQUF0QztBQUNBSixFQUFBQSxRQUFRLEtBQUssQ0FBQ0ksS0FBZDtBQUNBQSxFQUFBQSxLQUFLLElBQUlaLGNBQVQ7O0FBQ0EsU0FBT1ksS0FBSyxHQUFHLENBQWYsRUFBa0JILFFBQVEsR0FBR0EsUUFBUSxHQUFHLEdBQVgsR0FBaUJQLE1BQU0sQ0FBQ3haLEtBQUQsQ0FBbEMsRUFBMkNBLEtBQUssRUFBaEQsRUFBb0RrYSxLQUFLLElBQUksQ0FBL0UsQ0FBaUY7O0FBQ2pGLE1BQUlKLFFBQVEsS0FBSyxDQUFqQixFQUFvQjtBQUNsQkEsSUFBQUEsUUFBUSxHQUFHLElBQUlILEtBQWY7QUFDRCxHQUZELE1BRU8sSUFBSUcsUUFBUSxLQUFLSixJQUFqQixFQUF1QjtBQUM1QixXQUFPSyxRQUFRLEdBQUdJLEdBQUgsR0FBU04sSUFBSSxHQUFHLENBQUNHLFFBQUosR0FBZUEsUUFBM0M7QUFDRCxHQUZNLE1BRUE7QUFDTEQsSUFBQUEsUUFBUSxHQUFHQSxRQUFRLEdBQUdiLEtBQUcsQ0FBQyxDQUFELEVBQUlJLGNBQUosQ0FBekI7QUFDQVEsSUFBQUEsUUFBUSxHQUFHQSxRQUFRLEdBQUdILEtBQXRCO0FBQ0Q7O0FBQUMsU0FBTyxDQUFDRSxJQUFJLEdBQUcsQ0FBQyxDQUFKLEdBQVEsQ0FBYixJQUFrQkUsUUFBbEIsR0FBNkJiLEtBQUcsQ0FBQyxDQUFELEVBQUlZLFFBQVEsR0FBR1IsY0FBZixDQUF2QztBQUNILENBeEJEOztJQTBCQXRqQixPQUFBLEdBQWlCO0FBQ2ZxakIsRUFBQUEsSUFBSSxFQUFFQSxJQURTO0FBRWZZLEVBQUFBLE1BQU0sRUFBRUE7QUFGTyxDQUFqQjs7QUNqRkEsSUFBSTdqQixRQUFNLEdBQUdLLFFBQWI7O0FBQ0EsSUFBSXlGLGFBQVcsR0FBR3pGLFdBQWxCOztBQUNBLElBQUkyakIscUJBQW1CLEdBQUczakIsaUJBQTFCOztBQUNBLElBQUl5YyxZQUFZLEdBQUd6YyxZQUFuQjs7QUFDQSxJQUFJOEcsNkJBQTJCLEdBQUc5Ryw2QkFBbEM7O0FBQ0EsSUFBSTRqQixhQUFXLEdBQUc1akIsYUFBbEI7O0FBQ0EsSUFBSUQsT0FBSyxHQUFHQyxRQUFaOztBQUNBLElBQUk2akIsWUFBVSxHQUFHN2pCLFlBQWpCOztBQUNBLElBQUlvSixxQkFBbUIsR0FBR3BKLHFCQUExQjs7QUFDQSxJQUFJeUosVUFBUSxHQUFHekosVUFBZjs7QUFDQSxJQUFJOGpCLFNBQU8sR0FBRzlqQixTQUFkOztBQUNBLElBQUkrakIsT0FBTyxHQUFHL2pCLE9BQWQ7O0FBQ0EsSUFBSTZVLGdCQUFjLEdBQUc3VSxzQkFBckI7O0FBQ0EsSUFBSWdWLGdCQUFjLEdBQUdoVixzQkFBckI7O0FBQ0EsSUFBSXlLLHFCQUFtQixHQUFHeksseUJBQUEsQ0FBc0RrRyxDQUFoRjs7QUFDQSxJQUFJaEcsZ0JBQWMsR0FBR0Ysb0JBQUEsQ0FBK0NrRyxDQUFwRTs7QUFDQSxJQUFJOGQsU0FBUyxHQUFHaGtCLFdBQWhCOztBQUNBLElBQUkrUixnQkFBYyxHQUFHL1IsZ0JBQXJCOztBQUNBLElBQUlxSSxxQkFBbUIsR0FBR3JJLGFBQTFCOztBQUVBLElBQUk0YyxzQkFBb0IsR0FBR0gsWUFBWSxDQUFDdlUsTUFBeEM7QUFDQSxJQUFJSSwwQkFBMEIsR0FBR21VLFlBQVksQ0FBQ3JVLFlBQTlDO0FBQ0EsSUFBSUcsa0JBQWdCLEdBQUdGLHFCQUFtQixDQUFDbEksR0FBM0M7QUFDQSxJQUFJZ1Msa0JBQWdCLEdBQUc5SixxQkFBbUIsQ0FBQ25CLEdBQTNDO0FBQ0EsSUFBSStjLGNBQVksR0FBRyxhQUFuQjtBQUNBLElBQUlDLFNBQVMsR0FBRyxVQUFoQjtBQUNBLElBQUkvVyxTQUFTLEdBQUcsV0FBaEI7QUFDQSxJQUFJZ1gsY0FBWSxHQUFHLGNBQW5CO0FBQ0EsSUFBSUMsV0FBVyxHQUFHLGFBQWxCO0FBQ0EsSUFBSUMsbUJBQWlCLEdBQUcxa0IsUUFBTSxDQUFDc2tCLGNBQUQsQ0FBOUI7QUFDQSxJQUFJSyxZQUFZLEdBQUdELG1CQUFuQjtBQUNBLElBQUlFLFNBQVMsR0FBRzVrQixRQUFNLENBQUN1a0IsU0FBRCxDQUF0QjtBQUNBLElBQUlNLGtCQUFrQixHQUFHRCxTQUFTLElBQUlBLFNBQVMsQ0FBQ3BYLFNBQUQsQ0FBL0M7QUFDQSxJQUFJaUYsaUJBQWUsR0FBR25TLE1BQU0sQ0FBQytILFNBQTdCO0FBQ0EsSUFBSXVhLFlBQVUsR0FBRzVpQixRQUFNLENBQUM0aUIsVUFBeEI7QUFFQSxJQUFJa0MsV0FBVyxHQUFHVixPQUFPLENBQUNuQixJQUExQjtBQUNBLElBQUk4QixhQUFhLEdBQUdYLE9BQU8sQ0FBQ1AsTUFBNUI7O0FBRUEsSUFBSW1CLFFBQVEsR0FBRyxVQUFVeGIsTUFBVixFQUFrQjtBQUMvQixTQUFPLENBQUNBLE1BQU0sR0FBRyxJQUFWLENBQVA7QUFDRCxDQUZEOztBQUlBLElBQUl5YixTQUFTLEdBQUcsVUFBVXpiLE1BQVYsRUFBa0I7QUFDaEMsU0FBTyxDQUFDQSxNQUFNLEdBQUcsSUFBVixFQUFnQkEsTUFBTSxJQUFJLENBQVYsR0FBYyxJQUE5QixDQUFQO0FBQ0QsQ0FGRDs7QUFJQSxJQUFJMGIsU0FBUyxHQUFHLFVBQVUxYixNQUFWLEVBQWtCO0FBQ2hDLFNBQU8sQ0FBQ0EsTUFBTSxHQUFHLElBQVYsRUFBZ0JBLE1BQU0sSUFBSSxDQUFWLEdBQWMsSUFBOUIsRUFBb0NBLE1BQU0sSUFBSSxFQUFWLEdBQWUsSUFBbkQsRUFBeURBLE1BQU0sSUFBSSxFQUFWLEdBQWUsSUFBeEUsQ0FBUDtBQUNELENBRkQ7O0FBSUEsSUFBSTJiLFdBQVcsR0FBRyxVQUFVL0IsTUFBVixFQUFrQjtBQUNsQyxTQUFPQSxNQUFNLENBQUMsQ0FBRCxDQUFOLElBQWEsRUFBYixHQUFrQkEsTUFBTSxDQUFDLENBQUQsQ0FBTixJQUFhLEVBQS9CLEdBQW9DQSxNQUFNLENBQUMsQ0FBRCxDQUFOLElBQWEsQ0FBakQsR0FBcURBLE1BQU0sQ0FBQyxDQUFELENBQWxFO0FBQ0QsQ0FGRDs7QUFJQSxJQUFJZ0MsV0FBVyxHQUFHLFVBQVU1YixNQUFWLEVBQWtCO0FBQ2xDLFNBQU9zYixXQUFXLENBQUN0YixNQUFELEVBQVMsRUFBVCxFQUFhLENBQWIsQ0FBbEI7QUFDRCxDQUZEOztBQUlBLElBQUk2YixXQUFXLEdBQUcsVUFBVTdiLE1BQVYsRUFBa0I7QUFDbEMsU0FBT3NiLFdBQVcsQ0FBQ3RiLE1BQUQsRUFBUyxFQUFULEVBQWEsQ0FBYixDQUFsQjtBQUNELENBRkQ7O0FBSUEsSUFBSThiLFdBQVMsR0FBRyxVQUFVeEYsV0FBVixFQUF1QjliLEdBQXZCLEVBQTRCO0FBQzFDekQsRUFBQUEsZ0JBQWMsQ0FBQ3VmLFdBQVcsQ0FBQ3RTLFNBQUQsQ0FBWixFQUF5QnhKLEdBQXpCLEVBQThCO0FBQUV4RCxJQUFBQSxHQUFHLEVBQUUsWUFBWTtBQUFFLGFBQU9vSSxrQkFBZ0IsQ0FBQyxJQUFELENBQWhCLENBQXVCNUUsR0FBdkIsQ0FBUDtBQUFxQztBQUExRCxHQUE5QixDQUFkO0FBQ0QsQ0FGRDs7QUFJQSxJQUFJeEQsS0FBRyxHQUFHLFVBQVUra0IsSUFBVixFQUFnQjlMLEtBQWhCLEVBQXVCN1AsS0FBdkIsRUFBOEI0YixjQUE5QixFQUE4QztBQUN0RCxNQUFJQyxRQUFRLEdBQUd0QixTQUFPLENBQUN2YSxLQUFELENBQXRCO0FBQ0EsTUFBSXpGLEtBQUssR0FBR3lFLGtCQUFnQixDQUFDMmMsSUFBRCxDQUE1QjtBQUNBLE1BQUlFLFFBQVEsR0FBR2hNLEtBQVgsR0FBbUJ0VixLQUFLLENBQUN1aEIsVUFBN0IsRUFBeUMsTUFBTTlDLFlBQVUsQ0FBQzZCLFdBQUQsQ0FBaEI7QUFDekMsTUFBSXRCLEtBQUssR0FBR3ZhLGtCQUFnQixDQUFDekUsS0FBSyxDQUFDaWYsTUFBUCxDQUFoQixDQUErQkQsS0FBM0M7QUFDQSxNQUFJOUosS0FBSyxHQUFHb00sUUFBUSxHQUFHdGhCLEtBQUssQ0FBQ3doQixVQUE3QjtBQUNBLE1BQUkxQyxJQUFJLEdBQUdFLEtBQUssQ0FBQzdoQixLQUFOLENBQVkrWCxLQUFaLEVBQW1CQSxLQUFLLEdBQUdJLEtBQTNCLENBQVg7QUFDQSxTQUFPK0wsY0FBYyxHQUFHdkMsSUFBSCxHQUFVQSxJQUFJLENBQUN0RCxPQUFMLEVBQS9CO0FBQ0QsQ0FSRDs7QUFVQSxJQUFJcFksS0FBRyxHQUFHLFVBQVVnZSxJQUFWLEVBQWdCOUwsS0FBaEIsRUFBdUI3UCxLQUF2QixFQUE4QmdjLFVBQTlCLEVBQTBDMWtCLEtBQTFDLEVBQWlEc2tCLGNBQWpELEVBQWlFO0FBQ3pFLE1BQUlDLFFBQVEsR0FBR3RCLFNBQU8sQ0FBQ3ZhLEtBQUQsQ0FBdEI7QUFDQSxNQUFJekYsS0FBSyxHQUFHeUUsa0JBQWdCLENBQUMyYyxJQUFELENBQTVCO0FBQ0EsTUFBSUUsUUFBUSxHQUFHaE0sS0FBWCxHQUFtQnRWLEtBQUssQ0FBQ3VoQixVQUE3QixFQUF5QyxNQUFNOUMsWUFBVSxDQUFDNkIsV0FBRCxDQUFoQjtBQUN6QyxNQUFJdEIsS0FBSyxHQUFHdmEsa0JBQWdCLENBQUN6RSxLQUFLLENBQUNpZixNQUFQLENBQWhCLENBQStCRCxLQUEzQztBQUNBLE1BQUk5SixLQUFLLEdBQUdvTSxRQUFRLEdBQUd0aEIsS0FBSyxDQUFDd2hCLFVBQTdCO0FBQ0EsTUFBSTFDLElBQUksR0FBRzJDLFVBQVUsQ0FBQyxDQUFDMWtCLEtBQUYsQ0FBckI7O0FBQ0EsT0FBSyxJQUFJd0osQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRytPLEtBQXBCLEVBQTJCL08sQ0FBQyxFQUE1QixFQUFnQ3lZLEtBQUssQ0FBQzlKLEtBQUssR0FBRzNPLENBQVQsQ0FBTCxHQUFtQnVZLElBQUksQ0FBQ3VDLGNBQWMsR0FBRzlhLENBQUgsR0FBTytPLEtBQUssR0FBRy9PLENBQVIsR0FBWSxDQUFsQyxDQUF2QjtBQUNqQyxDQVJEOztBQVVBLElBQUksQ0FBQ3NaLHFCQUFMLEVBQTBCO0FBQ3hCVyxFQUFBQSxZQUFZLEdBQUcsU0FBU2pDLFdBQVQsQ0FBcUJ2Z0IsTUFBckIsRUFBNkI7QUFDMUMraEIsSUFBQUEsWUFBVSxDQUFDLElBQUQsRUFBT1MsWUFBUCxFQUFxQkwsY0FBckIsQ0FBVjtBQUNBLFFBQUlvQixVQUFVLEdBQUd2QixTQUFPLENBQUNoaUIsTUFBRCxDQUF4QjtBQUNBcVEsSUFBQUEsa0JBQWdCLENBQUMsSUFBRCxFQUFPO0FBQ3JCMlEsTUFBQUEsS0FBSyxFQUFFa0IsU0FBUyxDQUFDeGpCLElBQVYsQ0FBZSxJQUFJMkwsS0FBSixDQUFVa1osVUFBVixDQUFmLEVBQXNDLENBQXRDLENBRGM7QUFFckJBLE1BQUFBLFVBQVUsRUFBRUE7QUFGUyxLQUFQLENBQWhCO0FBSUEsUUFBSSxDQUFDNWYsYUFBTCxFQUFrQixLQUFLNGYsVUFBTCxHQUFrQkEsVUFBbEI7QUFDbkIsR0FSRDs7QUFVQWQsRUFBQUEsU0FBUyxHQUFHLFNBQVNqQyxRQUFULENBQWtCUyxNQUFsQixFQUEwQnVDLFVBQTFCLEVBQXNDRCxVQUF0QyxFQUFrRDtBQUM1RHhCLElBQUFBLFlBQVUsQ0FBQyxJQUFELEVBQU9VLFNBQVAsRUFBa0JMLFNBQWxCLENBQVY7QUFDQUwsSUFBQUEsWUFBVSxDQUFDZCxNQUFELEVBQVN1QixZQUFULEVBQXVCSixTQUF2QixDQUFWO0FBQ0EsUUFBSXNCLFlBQVksR0FBR2pkLGtCQUFnQixDQUFDd2EsTUFBRCxDQUFoQixDQUF5QnNDLFVBQTVDO0FBQ0EsUUFBSUksTUFBTSxHQUFHcmMscUJBQW1CLENBQUNrYyxVQUFELENBQWhDO0FBQ0EsUUFBSUcsTUFBTSxHQUFHLENBQVQsSUFBY0EsTUFBTSxHQUFHRCxZQUEzQixFQUF5QyxNQUFNakQsWUFBVSxDQUFDLGNBQUQsQ0FBaEI7QUFDekM4QyxJQUFBQSxVQUFVLEdBQUdBLFVBQVUsS0FBS2prQixTQUFmLEdBQTJCb2tCLFlBQVksR0FBR0MsTUFBMUMsR0FBbURoYyxVQUFRLENBQUM0YixVQUFELENBQXhFO0FBQ0EsUUFBSUksTUFBTSxHQUFHSixVQUFULEdBQXNCRyxZQUExQixFQUF3QyxNQUFNakQsWUFBVSxDQUFDNEIsY0FBRCxDQUFoQjtBQUN4Q2hTLElBQUFBLGtCQUFnQixDQUFDLElBQUQsRUFBTztBQUNyQjRRLE1BQUFBLE1BQU0sRUFBRUEsTUFEYTtBQUVyQnNDLE1BQUFBLFVBQVUsRUFBRUEsVUFGUztBQUdyQkMsTUFBQUEsVUFBVSxFQUFFRztBQUhTLEtBQVAsQ0FBaEI7O0FBS0EsUUFBSSxDQUFDaGdCLGFBQUwsRUFBa0I7QUFDaEIsV0FBS3NkLE1BQUwsR0FBY0EsTUFBZDtBQUNBLFdBQUtzQyxVQUFMLEdBQWtCQSxVQUFsQjtBQUNBLFdBQUtDLFVBQUwsR0FBa0JHLE1BQWxCO0FBQ0Q7QUFDRixHQWxCRDs7QUFvQkEsTUFBSWhnQixhQUFKLEVBQWlCO0FBQ2Z3ZixJQUFBQSxXQUFTLENBQUNYLFlBQUQsRUFBZSxZQUFmLENBQVQ7QUFDQVcsSUFBQUEsV0FBUyxDQUFDVixTQUFELEVBQVksUUFBWixDQUFUO0FBQ0FVLElBQUFBLFdBQVMsQ0FBQ1YsU0FBRCxFQUFZLFlBQVosQ0FBVDtBQUNBVSxJQUFBQSxXQUFTLENBQUNWLFNBQUQsRUFBWSxZQUFaLENBQVQ7QUFDRDs7QUFFRFgsRUFBQUEsYUFBVyxDQUFDVyxTQUFTLENBQUNwWCxTQUFELENBQVYsRUFBdUI7QUFDaEN1WSxJQUFBQSxPQUFPLEVBQUUsU0FBU0EsT0FBVCxDQUFpQkosVUFBakIsRUFBNkI7QUFDcEMsYUFBT25sQixLQUFHLENBQUMsSUFBRCxFQUFPLENBQVAsRUFBVW1sQixVQUFWLENBQUgsQ0FBeUIsQ0FBekIsS0FBK0IsRUFBL0IsSUFBcUMsRUFBNUM7QUFDRCxLQUgrQjtBQUloQ0ssSUFBQUEsUUFBUSxFQUFFLFNBQVNBLFFBQVQsQ0FBa0JMLFVBQWxCLEVBQThCO0FBQ3RDLGFBQU9ubEIsS0FBRyxDQUFDLElBQUQsRUFBTyxDQUFQLEVBQVVtbEIsVUFBVixDQUFILENBQXlCLENBQXpCLENBQVA7QUFDRCxLQU4rQjtBQU9oQ00sSUFBQUEsUUFBUSxFQUFFLFNBQVNBLFFBQVQsQ0FBa0JOO0FBQVc7QUFBN0IsTUFBbUQ7QUFDM0QsVUFBSXhDLEtBQUssR0FBRzNpQixLQUFHLENBQUMsSUFBRCxFQUFPLENBQVAsRUFBVW1sQixVQUFWLEVBQXNCempCLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUF1QkQsU0FBUyxDQUFDLENBQUQsQ0FBaEMsR0FBc0NULFNBQTVELENBQWY7QUFDQSxhQUFPLENBQUMwaEIsS0FBSyxDQUFDLENBQUQsQ0FBTCxJQUFZLENBQVosR0FBZ0JBLEtBQUssQ0FBQyxDQUFELENBQXRCLEtBQThCLEVBQTlCLElBQW9DLEVBQTNDO0FBQ0QsS0FWK0I7QUFXaEMrQyxJQUFBQSxTQUFTLEVBQUUsU0FBU0EsU0FBVCxDQUFtQlA7QUFBVztBQUE5QixNQUFvRDtBQUM3RCxVQUFJeEMsS0FBSyxHQUFHM2lCLEtBQUcsQ0FBQyxJQUFELEVBQU8sQ0FBUCxFQUFVbWxCLFVBQVYsRUFBc0J6akIsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBNUQsQ0FBZjtBQUNBLGFBQU8waEIsS0FBSyxDQUFDLENBQUQsQ0FBTCxJQUFZLENBQVosR0FBZ0JBLEtBQUssQ0FBQyxDQUFELENBQTVCO0FBQ0QsS0FkK0I7QUFlaENnRCxJQUFBQSxRQUFRLEVBQUUsU0FBU0EsUUFBVCxDQUFrQlI7QUFBVztBQUE3QixNQUFtRDtBQUMzRCxhQUFPUixXQUFXLENBQUMza0IsS0FBRyxDQUFDLElBQUQsRUFBTyxDQUFQLEVBQVVtbEIsVUFBVixFQUFzQnpqQixTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJELFNBQVMsQ0FBQyxDQUFELENBQWhDLEdBQXNDVCxTQUE1RCxDQUFKLENBQWxCO0FBQ0QsS0FqQitCO0FBa0JoQzJrQixJQUFBQSxTQUFTLEVBQUUsU0FBU0EsU0FBVCxDQUFtQlQ7QUFBVztBQUE5QixNQUFvRDtBQUM3RCxhQUFPUixXQUFXLENBQUMza0IsS0FBRyxDQUFDLElBQUQsRUFBTyxDQUFQLEVBQVVtbEIsVUFBVixFQUFzQnpqQixTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJELFNBQVMsQ0FBQyxDQUFELENBQWhDLEdBQXNDVCxTQUE1RCxDQUFKLENBQVgsS0FBMkYsQ0FBbEc7QUFDRCxLQXBCK0I7QUFxQmhDNGtCLElBQUFBLFVBQVUsRUFBRSxTQUFTQSxVQUFULENBQW9CVjtBQUFXO0FBQS9CLE1BQXFEO0FBQy9ELGFBQU9aLGFBQWEsQ0FBQ3ZrQixLQUFHLENBQUMsSUFBRCxFQUFPLENBQVAsRUFBVW1sQixVQUFWLEVBQXNCempCLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUF1QkQsU0FBUyxDQUFDLENBQUQsQ0FBaEMsR0FBc0NULFNBQTVELENBQUosRUFBNEUsRUFBNUUsQ0FBcEI7QUFDRCxLQXZCK0I7QUF3QmhDNmtCLElBQUFBLFVBQVUsRUFBRSxTQUFTQSxVQUFULENBQW9CWDtBQUFXO0FBQS9CLE1BQXFEO0FBQy9ELGFBQU9aLGFBQWEsQ0FBQ3ZrQixLQUFHLENBQUMsSUFBRCxFQUFPLENBQVAsRUFBVW1sQixVQUFWLEVBQXNCempCLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUF1QkQsU0FBUyxDQUFDLENBQUQsQ0FBaEMsR0FBc0NULFNBQTVELENBQUosRUFBNEUsRUFBNUUsQ0FBcEI7QUFDRCxLQTFCK0I7QUEyQmhDOGtCLElBQUFBLE9BQU8sRUFBRSxTQUFTQSxPQUFULENBQWlCWixVQUFqQixFQUE2QnprQixLQUE3QixFQUFvQztBQUMzQ3FHLE1BQUFBLEtBQUcsQ0FBQyxJQUFELEVBQU8sQ0FBUCxFQUFVb2UsVUFBVixFQUFzQlgsUUFBdEIsRUFBZ0M5akIsS0FBaEMsQ0FBSDtBQUNELEtBN0IrQjtBQThCaENzbEIsSUFBQUEsUUFBUSxFQUFFLFNBQVNBLFFBQVQsQ0FBa0JiLFVBQWxCLEVBQThCemtCLEtBQTlCLEVBQXFDO0FBQzdDcUcsTUFBQUEsS0FBRyxDQUFDLElBQUQsRUFBTyxDQUFQLEVBQVVvZSxVQUFWLEVBQXNCWCxRQUF0QixFQUFnQzlqQixLQUFoQyxDQUFIO0FBQ0QsS0FoQytCO0FBaUNoQ3VsQixJQUFBQSxRQUFRLEVBQUUsU0FBU0EsUUFBVCxDQUFrQmQsVUFBbEIsRUFBOEJ6a0I7QUFBTTtBQUFwQyxNQUEwRDtBQUNsRXFHLE1BQUFBLEtBQUcsQ0FBQyxJQUFELEVBQU8sQ0FBUCxFQUFVb2UsVUFBVixFQUFzQlYsU0FBdEIsRUFBaUMvakIsS0FBakMsRUFBd0NnQixTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJELFNBQVMsQ0FBQyxDQUFELENBQWhDLEdBQXNDVCxTQUE5RSxDQUFIO0FBQ0QsS0FuQytCO0FBb0NoQ2lsQixJQUFBQSxTQUFTLEVBQUUsU0FBU0EsU0FBVCxDQUFtQmYsVUFBbkIsRUFBK0J6a0I7QUFBTTtBQUFyQyxNQUEyRDtBQUNwRXFHLE1BQUFBLEtBQUcsQ0FBQyxJQUFELEVBQU8sQ0FBUCxFQUFVb2UsVUFBVixFQUFzQlYsU0FBdEIsRUFBaUMvakIsS0FBakMsRUFBd0NnQixTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJELFNBQVMsQ0FBQyxDQUFELENBQWhDLEdBQXNDVCxTQUE5RSxDQUFIO0FBQ0QsS0F0QytCO0FBdUNoQ2tsQixJQUFBQSxRQUFRLEVBQUUsU0FBU0EsUUFBVCxDQUFrQmhCLFVBQWxCLEVBQThCemtCO0FBQU07QUFBcEMsTUFBMEQ7QUFDbEVxRyxNQUFBQSxLQUFHLENBQUMsSUFBRCxFQUFPLENBQVAsRUFBVW9lLFVBQVYsRUFBc0JULFNBQXRCLEVBQWlDaGtCLEtBQWpDLEVBQXdDZ0IsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBOUUsQ0FBSDtBQUNELEtBekMrQjtBQTBDaENtbEIsSUFBQUEsU0FBUyxFQUFFLFNBQVNBLFNBQVQsQ0FBbUJqQixVQUFuQixFQUErQnprQjtBQUFNO0FBQXJDLE1BQTJEO0FBQ3BFcUcsTUFBQUEsS0FBRyxDQUFDLElBQUQsRUFBTyxDQUFQLEVBQVVvZSxVQUFWLEVBQXNCVCxTQUF0QixFQUFpQ2hrQixLQUFqQyxFQUF3Q2dCLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUF1QkQsU0FBUyxDQUFDLENBQUQsQ0FBaEMsR0FBc0NULFNBQTlFLENBQUg7QUFDRCxLQTVDK0I7QUE2Q2hDb2xCLElBQUFBLFVBQVUsRUFBRSxTQUFTQSxVQUFULENBQW9CbEIsVUFBcEIsRUFBZ0N6a0I7QUFBTTtBQUF0QyxNQUE0RDtBQUN0RXFHLE1BQUFBLEtBQUcsQ0FBQyxJQUFELEVBQU8sQ0FBUCxFQUFVb2UsVUFBVixFQUFzQlAsV0FBdEIsRUFBbUNsa0IsS0FBbkMsRUFBMENnQixTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJELFNBQVMsQ0FBQyxDQUFELENBQWhDLEdBQXNDVCxTQUFoRixDQUFIO0FBQ0QsS0EvQytCO0FBZ0RoQ3FsQixJQUFBQSxVQUFVLEVBQUUsU0FBU0EsVUFBVCxDQUFvQm5CLFVBQXBCLEVBQWdDemtCO0FBQU07QUFBdEMsTUFBNEQ7QUFDdEVxRyxNQUFBQSxLQUFHLENBQUMsSUFBRCxFQUFPLENBQVAsRUFBVW9lLFVBQVYsRUFBc0JOLFdBQXRCLEVBQW1DbmtCLEtBQW5DLEVBQTBDZ0IsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBaEYsQ0FBSDtBQUNEO0FBbEQrQixHQUF2QixDQUFYO0FBb0RELENBMUZELE1BMEZPO0FBQ0wsTUFBSXNsQiwyQkFBMkIsR0FBRzlKLHNCQUFvQixJQUFJeUgsbUJBQWlCLENBQUN4ZixJQUFsQixLQUEyQm9mLGNBQXJGO0FBQ0E7O0FBQ0EsTUFBSSxDQUFDbGtCLE9BQUssQ0FBQyxZQUFZO0FBQ3JCc2tCLElBQUFBLG1CQUFpQixDQUFDLENBQUQsQ0FBakI7QUFDRCxHQUZTLENBQU4sSUFFRSxDQUFDdGtCLE9BQUssQ0FBQyxZQUFZO0FBQ3ZCLFFBQUlza0IsbUJBQUosQ0FBc0IsQ0FBQyxDQUF2QjtBQUNELEdBRlcsQ0FGUixJQUlFdGtCLE9BQUssQ0FBQyxZQUFZO0FBQ3RCLFFBQUlza0IsbUJBQUo7QUFDQSxRQUFJQSxtQkFBSixDQUFzQixHQUF0QjtBQUNBLFFBQUlBLG1CQUFKLENBQXNCWCxHQUF0QjtBQUNBLFdBQU9nRCwyQkFBMkIsSUFBSSxDQUFDcGUsMEJBQXZDO0FBQ0QsR0FMVSxDQUpYLEVBU0k7QUFDSjtBQUNFZ2MsSUFBQUEsWUFBWSxHQUFHLFNBQVNqQyxXQUFULENBQXFCdmdCLE1BQXJCLEVBQTZCO0FBQzFDK2hCLE1BQUFBLFlBQVUsQ0FBQyxJQUFELEVBQU9TLFlBQVAsQ0FBVjtBQUNBLGFBQU8sSUFBSUQsbUJBQUosQ0FBc0JQLFNBQU8sQ0FBQ2hpQixNQUFELENBQTdCLENBQVA7QUFDRCxLQUhEOztBQUlBLFFBQUk2a0Isb0JBQW9CLEdBQUdyQyxZQUFZLENBQUNuWCxTQUFELENBQVosR0FBMEJrWCxtQkFBaUIsQ0FBQ2xYLFNBQUQsQ0FBdEU7O0FBQ0EsU0FBSyxJQUFJdkcsTUFBSSxHQUFHNkQscUJBQW1CLENBQUM0WixtQkFBRCxDQUE5QixFQUFtRHJFLEdBQUMsR0FBRyxDQUF2RCxFQUEwRHJjLEtBQS9ELEVBQW9FaUQsTUFBSSxDQUFDOUUsTUFBTCxHQUFja2UsR0FBbEYsR0FBc0Y7QUFDcEYsVUFBSSxFQUFFLENBQUNyYyxLQUFHLEdBQUdpRCxNQUFJLENBQUNvWixHQUFDLEVBQUYsQ0FBWCxLQUFxQnNFLFlBQXZCLENBQUosRUFBMEM7QUFDeEN4ZCxRQUFBQSw2QkFBMkIsQ0FBQ3dkLFlBQUQsRUFBZTNnQixLQUFmLEVBQW9CMGdCLG1CQUFpQixDQUFDMWdCLEtBQUQsQ0FBckMsQ0FBM0I7QUFDRDtBQUNGOztBQUNEZ2pCLElBQUFBLG9CQUFvQixDQUFDdlcsV0FBckIsR0FBbUNrVSxZQUFuQztBQUNELEdBdEJELE1Bc0JPLElBQUlvQywyQkFBMkIsSUFBSXBlLDBCQUFuQyxFQUErRDtBQUNwRXhCLElBQUFBLDZCQUEyQixDQUFDdWQsbUJBQUQsRUFBb0IsTUFBcEIsRUFBNEJKLGNBQTVCLENBQTNCO0FBQ0QsR0EzQkk7OztBQThCTCxNQUFJalAsZ0JBQWMsSUFBSUgsZ0JBQWMsQ0FBQzJQLGtCQUFELENBQWQsS0FBdUNwUyxpQkFBN0QsRUFBOEU7QUFDNUU0QyxJQUFBQSxnQkFBYyxDQUFDd1Asa0JBQUQsRUFBcUJwUyxpQkFBckIsQ0FBZDtBQUNELEdBaENJOzs7QUFtQ0wsTUFBSXdVLFFBQVEsR0FBRyxJQUFJckMsU0FBSixDQUFjLElBQUlELFlBQUosQ0FBaUIsQ0FBakIsQ0FBZCxDQUFmO0FBQ0EsTUFBSXVDLFFBQVEsR0FBR3JDLGtCQUFrQixDQUFDMEIsT0FBbEM7QUFDQVUsRUFBQUEsUUFBUSxDQUFDVixPQUFULENBQWlCLENBQWpCLEVBQW9CLFVBQXBCO0FBQ0FVLEVBQUFBLFFBQVEsQ0FBQ1YsT0FBVCxDQUFpQixDQUFqQixFQUFvQixVQUFwQjtBQUNBLE1BQUlVLFFBQVEsQ0FBQ2xCLE9BQVQsQ0FBaUIsQ0FBakIsS0FBdUIsQ0FBQ2tCLFFBQVEsQ0FBQ2xCLE9BQVQsQ0FBaUIsQ0FBakIsQ0FBNUIsRUFBaUQ5QixhQUFXLENBQUNZLGtCQUFELEVBQXFCO0FBQy9FMEIsSUFBQUEsT0FBTyxFQUFFLFNBQVNBLE9BQVQsQ0FBaUJaLFVBQWpCLEVBQTZCemtCLEtBQTdCLEVBQW9DO0FBQzNDZ21CLE1BQUFBLFFBQVEsQ0FBQ3JtQixJQUFULENBQWMsSUFBZCxFQUFvQjhrQixVQUFwQixFQUFnQ3prQixLQUFLLElBQUksRUFBVCxJQUFlLEVBQS9DO0FBQ0QsS0FIOEU7QUFJL0VzbEIsSUFBQUEsUUFBUSxFQUFFLFNBQVNBLFFBQVQsQ0FBa0JiLFVBQWxCLEVBQThCemtCLEtBQTlCLEVBQXFDO0FBQzdDZ21CLE1BQUFBLFFBQVEsQ0FBQ3JtQixJQUFULENBQWMsSUFBZCxFQUFvQjhrQixVQUFwQixFQUFnQ3prQixLQUFLLElBQUksRUFBVCxJQUFlLEVBQS9DO0FBQ0Q7QUFOOEUsR0FBckIsRUFPekQ7QUFBRThILElBQUFBLE1BQU0sRUFBRTtBQUFWLEdBUHlELENBQVg7QUFRbEQ7O0FBRURvSixnQkFBYyxDQUFDdVMsWUFBRCxFQUFlTCxjQUFmLENBQWQ7QUFDQWxTLGdCQUFjLENBQUN3UyxTQUFELEVBQVlMLFNBQVosQ0FBZDtJQUVBM2tCLFdBQUEsR0FBaUI7QUFDZjhpQixFQUFBQSxXQUFXLEVBQUVpQyxZQURFO0FBRWZoQyxFQUFBQSxRQUFRLEVBQUVpQztBQUZLLENBQWpCOztBQ3JPQSxJQUFJN1MsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJTCxRQUFNLEdBQUdLLFFBQWI7O0FBQ0EsSUFBSThtQixpQkFBaUIsR0FBRzltQixXQUF4Qjs7QUFDQSxJQUFJOGhCLFlBQVUsR0FBRzloQixZQUFqQjs7QUFFQSxJQUFJaWtCLFlBQVksR0FBRyxhQUFuQjtBQUNBLElBQUk1QixhQUFXLEdBQUd5RSxpQkFBaUIsQ0FBQzdDLFlBQUQsQ0FBbkM7QUFDQSxJQUFJSSxpQkFBaUIsR0FBRzFrQixRQUFNLENBQUNza0IsWUFBRCxDQUE5QjtBQUdBOztBQUNBdlMsSUFBQyxDQUFDO0FBQUUvUixFQUFBQSxNQUFNLEVBQUUsSUFBVjtBQUFnQnVNLEVBQUFBLE1BQU0sRUFBRW1ZLGlCQUFpQixLQUFLaEM7QUFBOUMsQ0FBRCxFQUE4RDtBQUM3REEsRUFBQUEsV0FBVyxFQUFFQTtBQURnRCxDQUE5RCxDQUFEO0FBSUFQLFlBQVUsQ0FBQ21DLFlBQUQsQ0FBVjs7QUNmQSxJQUFJTixxQkFBbUIsR0FBRzNqQixpQkFBMUI7O0FBQ0EsSUFBSXlGLGFBQVcsR0FBR3pGLFdBQWxCOztBQUNBLElBQUlMLFFBQU0sR0FBR0ssUUFBYjs7QUFDQSxJQUFJeUIsWUFBVSxHQUFHekIsWUFBakI7O0FBQ0EsSUFBSXFELFVBQVEsR0FBR3JELFVBQWY7O0FBQ0EsSUFBSW9FLFFBQU0sR0FBR3BFLGdCQUFiOztBQUNBLElBQUlrQixTQUFPLEdBQUdsQixTQUFkOztBQUNBLElBQUlpRCxhQUFXLEdBQUdqRCxhQUFsQjs7QUFDQSxJQUFJOEcsNkJBQTJCLEdBQUc5Ryw2QkFBbEM7O0FBQ0EsSUFBSXlMLFVBQVEsR0FBR3pMLGtCQUFmOztBQUNBLElBQUlFLGdCQUFjLEdBQUdGLG9CQUFBLENBQStDa0csQ0FBcEU7O0FBQ0EsSUFBSTJPLGdCQUFjLEdBQUc3VSxzQkFBckI7O0FBQ0EsSUFBSWdWLGdCQUFjLEdBQUdoVixzQkFBckI7O0FBQ0EsSUFBSWlGLGlCQUFlLEdBQUdqRixpQkFBdEI7O0FBQ0EsSUFBSXlFLEtBQUcsR0FBR3pFLEtBQVY7O0FBRUEsSUFBSSttQixXQUFTLEdBQUdwbkIsUUFBTSxDQUFDb25CLFNBQXZCO0FBQ0EsSUFBSUMsa0JBQWtCLEdBQUdELFdBQVMsSUFBSUEsV0FBUyxDQUFDL2UsU0FBaEQ7QUFDQSxJQUFJaWYsaUJBQWlCLEdBQUd0bkIsUUFBTSxDQUFDc25CLGlCQUEvQjtBQUNBLElBQUlDLDBCQUEwQixHQUFHRCxpQkFBaUIsSUFBSUEsaUJBQWlCLENBQUNqZixTQUF4RTtBQUNBLElBQUltZixZQUFVLEdBQUdKLFdBQVMsSUFBSWxTLGdCQUFjLENBQUNrUyxXQUFELENBQTVDO0FBQ0EsSUFBSUsscUJBQW1CLEdBQUdKLGtCQUFrQixJQUFJblMsZ0JBQWMsQ0FBQ21TLGtCQUFELENBQTlEO0FBQ0EsSUFBSTVVLGVBQWUsR0FBR25TLE1BQU0sQ0FBQytILFNBQTdCO0FBQ0EsSUFBSXFmLGVBQWEsR0FBR2pWLGVBQWUsQ0FBQ2lWLGFBQXBDO0FBRUEsSUFBSWhiLGVBQWEsR0FBR3BILGlCQUFlLENBQUMsYUFBRCxDQUFuQztBQUNBLElBQUlxaUIsaUJBQWUsR0FBRzdpQixLQUFHLENBQUMsaUJBQUQsQ0FBekI7QUFDQSxJQUFJOGlCLHlCQUF1QixHQUFHOWlCLEtBQUcsQ0FBQyx5QkFBRCxDQUFqQzs7QUFFQSxJQUFJK2lCLDJCQUF5QixHQUFHN0QscUJBQW1CLElBQUksQ0FBQyxDQUFDM08sZ0JBQXpCLElBQTJDOVQsU0FBTyxDQUFDdkIsUUFBTSxDQUFDOG5CLEtBQVIsQ0FBUCxLQUEwQixPQUFyRztBQUNBLElBQUlDLHVCQUF1QixHQUFHLEtBQTlCO0FBQ0EsSUFBSXZZLE1BQUosRUFBVXNRLFdBQVYsRUFBdUJrSSxTQUF2QjtBQUVBLElBQUlDLDBCQUEwQixHQUFHO0FBQy9CYixFQUFBQSxTQUFTLEVBQUUsQ0FEb0I7QUFFL0JjLEVBQUFBLFVBQVUsRUFBRSxDQUZtQjtBQUcvQlosRUFBQUEsaUJBQWlCLEVBQUUsQ0FIWTtBQUkvQmEsRUFBQUEsVUFBVSxFQUFFLENBSm1CO0FBSy9CQyxFQUFBQSxXQUFXLEVBQUUsQ0FMa0I7QUFNL0JDLEVBQUFBLFVBQVUsRUFBRSxDQU5tQjtBQU8vQkMsRUFBQUEsV0FBVyxFQUFFLENBUGtCO0FBUS9CQyxFQUFBQSxZQUFZLEVBQUUsQ0FSaUI7QUFTL0JDLEVBQUFBLFlBQVksRUFBRTtBQVRpQixDQUFqQztBQVlBLElBQUlDLDJCQUEyQixHQUFHO0FBQ2hDQyxFQUFBQSxhQUFhLEVBQUUsQ0FEaUI7QUFFaENDLEVBQUFBLGNBQWMsRUFBRTtBQUZnQixDQUFsQzs7QUFLQSxJQUFJQyxNQUFNLEdBQUcsU0FBU0EsTUFBVCxDQUFnQmxwQixFQUFoQixFQUFvQjtBQUMvQixNQUFJLENBQUNnRSxVQUFRLENBQUNoRSxFQUFELENBQWIsRUFBbUIsT0FBTyxLQUFQO0FBQ25CLE1BQUltcEIsS0FBSyxHQUFHdG5CLFNBQU8sQ0FBQzdCLEVBQUQsQ0FBbkI7QUFDQSxTQUFPbXBCLEtBQUssS0FBSyxVQUFWLElBQ0Zwa0IsUUFBTSxDQUFDd2pCLDBCQUFELEVBQTZCWSxLQUE3QixDQURKLElBRUZwa0IsUUFBTSxDQUFDZ2tCLDJCQUFELEVBQThCSSxLQUE5QixDQUZYO0FBR0QsQ0FORDs7QUFRQSxJQUFJQyxjQUFZLEdBQUcsVUFBVXBwQixFQUFWLEVBQWM7QUFDL0IsTUFBSSxDQUFDZ0UsVUFBUSxDQUFDaEUsRUFBRCxDQUFiLEVBQW1CLE9BQU8sS0FBUDtBQUNuQixNQUFJbXBCLEtBQUssR0FBR3RuQixTQUFPLENBQUM3QixFQUFELENBQW5CO0FBQ0EsU0FBTytFLFFBQU0sQ0FBQ3dqQiwwQkFBRCxFQUE2QlksS0FBN0IsQ0FBTixJQUNGcGtCLFFBQU0sQ0FBQ2drQiwyQkFBRCxFQUE4QkksS0FBOUIsQ0FEWDtBQUVELENBTEQ7O0FBT0EsSUFBSUUsYUFBVyxHQUFHLFVBQVVycEIsRUFBVixFQUFjO0FBQzlCLE1BQUlvcEIsY0FBWSxDQUFDcHBCLEVBQUQsQ0FBaEIsRUFBc0IsT0FBT0EsRUFBUDtBQUN0QixRQUFNZ0MsU0FBUyxDQUFDLDZCQUFELENBQWY7QUFDRCxDQUhEOztBQUtBLElBQUlzbkIsd0JBQXNCLEdBQUcsVUFBVXhZLENBQVYsRUFBYTtBQUN4QyxNQUFJMU8sWUFBVSxDQUFDME8sQ0FBRCxDQUFWLEtBQWtCLENBQUM2RSxnQkFBRCxJQUFtQnFTLGVBQWEsQ0FBQzdtQixJQUFkLENBQW1CMm1CLFlBQW5CLEVBQStCaFgsQ0FBL0IsQ0FBckMsQ0FBSixFQUE2RSxPQUFPQSxDQUFQO0FBQzdFLFFBQU05TyxTQUFTLENBQUM0QixhQUFXLENBQUNrTixDQUFELENBQVgsR0FBaUIsbUNBQWxCLENBQWY7QUFDRCxDQUhEOztBQUtBLElBQUl5WSx3QkFBc0IsR0FBRyxVQUFVL0ssR0FBVixFQUFlZ0wsUUFBZixFQUF5QjNjLE1BQXpCLEVBQWlDO0FBQzVELE1BQUksQ0FBQ3pHLGFBQUwsRUFBa0I7QUFDbEIsTUFBSXlHLE1BQUosRUFBWSxLQUFLLElBQUk0YyxLQUFULElBQWtCbEIsMEJBQWxCLEVBQThDO0FBQ3hELFFBQUltQixxQkFBcUIsR0FBR3BwQixRQUFNLENBQUNtcEIsS0FBRCxDQUFsQztBQUNBLFFBQUlDLHFCQUFxQixJQUFJM2tCLFFBQU0sQ0FBQzJrQixxQkFBcUIsQ0FBQy9nQixTQUF2QixFQUFrQzZWLEdBQWxDLENBQW5DLEVBQTJFLElBQUk7QUFDN0UsYUFBT2tMLHFCQUFxQixDQUFDL2dCLFNBQXRCLENBQWdDNlYsR0FBaEMsQ0FBUDtBQUNELEtBRjBFLENBRXpFLE9BQU8vZCxLQUFQLEVBQWM7QUFBRTtBQUFhO0FBQ2hDOztBQUNELE1BQUksQ0FBQ3NuQixxQkFBbUIsQ0FBQ3ZKLEdBQUQsQ0FBcEIsSUFBNkIzUixNQUFqQyxFQUF5QztBQUN2Q1QsSUFBQUEsVUFBUSxDQUFDMmIscUJBQUQsRUFBc0J2SixHQUF0QixFQUEyQjNSLE1BQU0sR0FBRzJjLFFBQUgsR0FDckNyQiwyQkFBeUIsSUFBSVIsa0JBQWtCLENBQUNuSixHQUFELENBQS9DLElBQXdEZ0wsUUFEcEQsQ0FBUjtBQUVEO0FBQ0YsQ0FaRDs7QUFjQSxJQUFJRyw4QkFBNEIsR0FBRyxVQUFVbkwsR0FBVixFQUFlZ0wsUUFBZixFQUF5QjNjLE1BQXpCLEVBQWlDO0FBQ2xFLE1BQUk0YyxLQUFKLEVBQVdDLHFCQUFYO0FBQ0EsTUFBSSxDQUFDdGpCLGFBQUwsRUFBa0I7O0FBQ2xCLE1BQUl1UCxnQkFBSixFQUFvQjtBQUNsQixRQUFJOUksTUFBSixFQUFZLEtBQUs0YyxLQUFMLElBQWNsQiwwQkFBZCxFQUEwQztBQUNwRG1CLE1BQUFBLHFCQUFxQixHQUFHcHBCLFFBQU0sQ0FBQ21wQixLQUFELENBQTlCO0FBQ0EsVUFBSUMscUJBQXFCLElBQUkza0IsUUFBTSxDQUFDMmtCLHFCQUFELEVBQXdCbEwsR0FBeEIsQ0FBbkMsRUFBaUUsSUFBSTtBQUNuRSxlQUFPa0wscUJBQXFCLENBQUNsTCxHQUFELENBQTVCO0FBQ0QsT0FGZ0UsQ0FFL0QsT0FBTy9kLEtBQVAsRUFBYztBQUFFO0FBQWE7QUFDaEM7O0FBQ0QsUUFBSSxDQUFDcW5CLFlBQVUsQ0FBQ3RKLEdBQUQsQ0FBWCxJQUFvQjNSLE1BQXhCLEVBQWdDO0FBQzlCO0FBQ0EsVUFBSTtBQUNGLGVBQU9ULFVBQVEsQ0FBQzBiLFlBQUQsRUFBYXRKLEdBQWIsRUFBa0IzUixNQUFNLEdBQUcyYyxRQUFILEdBQWNyQiwyQkFBeUIsSUFBSUwsWUFBVSxDQUFDdEosR0FBRCxDQUF2QyxJQUFnRGdMLFFBQXRGLENBQWY7QUFDRCxPQUZELENBRUUsT0FBTy9vQixLQUFQLEVBQWM7QUFBRTtBQUFhO0FBQ2hDLEtBTEQsTUFLTztBQUNSOztBQUNELE9BQUtncEIsS0FBTCxJQUFjbEIsMEJBQWQsRUFBMEM7QUFDeENtQixJQUFBQSxxQkFBcUIsR0FBR3BwQixRQUFNLENBQUNtcEIsS0FBRCxDQUE5Qjs7QUFDQSxRQUFJQyxxQkFBcUIsS0FBSyxDQUFDQSxxQkFBcUIsQ0FBQ2xMLEdBQUQsQ0FBdEIsSUFBK0IzUixNQUFwQyxDQUF6QixFQUFzRTtBQUNwRVQsTUFBQUEsVUFBUSxDQUFDc2QscUJBQUQsRUFBd0JsTCxHQUF4QixFQUE2QmdMLFFBQTdCLENBQVI7QUFDRDtBQUNGO0FBQ0YsQ0F2QkQ7O0FBeUJBLEtBQUsxWixNQUFMLElBQWF5WSwwQkFBYixFQUF5QztBQUN2Q25JLEVBQUFBLFdBQVcsR0FBRzlmLFFBQU0sQ0FBQ3dQLE1BQUQsQ0FBcEI7QUFDQXdZLEVBQUFBLFNBQVMsR0FBR2xJLFdBQVcsSUFBSUEsV0FBVyxDQUFDelgsU0FBdkM7QUFDQSxNQUFJMmYsU0FBSixFQUFlN2dCLDZCQUEyQixDQUFDNmdCLFNBQUQsRUFBWUoseUJBQVosRUFBcUM5SCxXQUFyQyxDQUEzQixDQUFmLEtBQ0srSCwyQkFBeUIsR0FBRyxLQUE1QjtBQUNOOztBQUVELEtBQUtyWSxNQUFMLElBQWFpWiwyQkFBYixFQUEwQztBQUN4QzNJLEVBQUFBLFdBQVcsR0FBRzlmLFFBQU0sQ0FBQ3dQLE1BQUQsQ0FBcEI7QUFDQXdZLEVBQUFBLFNBQVMsR0FBR2xJLFdBQVcsSUFBSUEsV0FBVyxDQUFDelgsU0FBdkM7QUFDQSxNQUFJMmYsU0FBSixFQUFlN2dCLDZCQUEyQixDQUFDNmdCLFNBQUQsRUFBWUoseUJBQVosRUFBcUM5SCxXQUFyQyxDQUEzQjtBQUNoQjs7O0FBR0QsSUFBSSxDQUFDK0gsMkJBQUQsSUFBOEIsQ0FBQy9sQixZQUFVLENBQUMwbEIsWUFBRCxDQUF6QyxJQUF5REEsWUFBVSxLQUFLdm5CLFFBQVEsQ0FBQ29JLFNBQXJGLEVBQWdHO0FBQzlGO0FBQ0FtZixFQUFBQSxZQUFVLEdBQUcsU0FBU0EsVUFBVCxHQUFzQjtBQUNqQyxVQUFNOWxCLFNBQVMsQ0FBQyxzQkFBRCxDQUFmO0FBQ0QsR0FGRDs7QUFHQSxNQUFJbW1CLDJCQUFKLEVBQStCLEtBQUtyWSxNQUFMLElBQWF5WSwwQkFBYixFQUF5QztBQUN0RSxRQUFJam9CLFFBQU0sQ0FBQ3dQLE1BQUQsQ0FBVixFQUFrQjZGLGdCQUFjLENBQUNyVixRQUFNLENBQUN3UCxNQUFELENBQVAsRUFBZWdZLFlBQWYsQ0FBZDtBQUNuQjtBQUNGOztBQUVELElBQUksQ0FBQ0ssMkJBQUQsSUFBOEIsQ0FBQ0oscUJBQS9CLElBQXNEQSxxQkFBbUIsS0FBS2hWLGVBQWxGLEVBQW1HO0FBQ2pHZ1YsRUFBQUEscUJBQW1CLEdBQUdELFlBQVUsQ0FBQ25mLFNBQWpDO0FBQ0EsTUFBSXdmLDJCQUFKLEVBQStCLEtBQUtyWSxNQUFMLElBQWF5WSwwQkFBYixFQUF5QztBQUN0RSxRQUFJam9CLFFBQU0sQ0FBQ3dQLE1BQUQsQ0FBVixFQUFrQjZGLGdCQUFjLENBQUNyVixRQUFNLENBQUN3UCxNQUFELENBQU4sQ0FBYW5ILFNBQWQsRUFBeUJvZixxQkFBekIsQ0FBZDtBQUNuQjtBQUNGOzs7QUFHRCxJQUFJSSwyQkFBeUIsSUFBSTNTLGdCQUFjLENBQUNxUywwQkFBRCxDQUFkLEtBQStDRSxxQkFBaEYsRUFBcUc7QUFDbkdwUyxFQUFBQSxnQkFBYyxDQUFDa1MsMEJBQUQsRUFBNkJFLHFCQUE3QixDQUFkO0FBQ0Q7O0FBRUQsSUFBSTNoQixhQUFXLElBQUksQ0FBQ3JCLFFBQU0sQ0FBQ2dqQixxQkFBRCxFQUFzQi9hLGVBQXRCLENBQTFCLEVBQWdFO0FBQzlEcWIsRUFBQUEsdUJBQXVCLEdBQUcsSUFBMUI7QUFDQXhuQixFQUFBQSxnQkFBYyxDQUFDa25CLHFCQUFELEVBQXNCL2EsZUFBdEIsRUFBcUM7QUFBRWxNLElBQUFBLEdBQUcsRUFBRSxZQUFZO0FBQ3BFLGFBQU9rRCxVQUFRLENBQUMsSUFBRCxDQUFSLEdBQWlCLEtBQUtpa0IsaUJBQUwsQ0FBakIsR0FBeUNsbUIsU0FBaEQ7QUFDRDtBQUZrRCxHQUFyQyxDQUFkOztBQUdBLE9BQUsrTixNQUFMLElBQWF5WSwwQkFBYixFQUF5QyxJQUFJam9CLFFBQU0sQ0FBQ3dQLE1BQUQsQ0FBVixFQUFrQjtBQUN6RHJJLElBQUFBLDZCQUEyQixDQUFDbkgsUUFBTSxDQUFDd1AsTUFBRCxDQUFQLEVBQWVtWSxpQkFBZixFQUFnQ25ZLE1BQWhDLENBQTNCO0FBQ0Q7QUFDRjs7SUFFRDVQLG1CQUFBLEdBQWlCO0FBQ2Zpb0IsRUFBQUEseUJBQXlCLEVBQUVBLDJCQURaO0FBRWZELEVBQUFBLHVCQUF1QixFQUFFQSx5QkFGVjtBQUdmRCxFQUFBQSxlQUFlLEVBQUVJLHVCQUF1QixJQUFJSixpQkFIN0I7QUFJZm9CLEVBQUFBLFdBQVcsRUFBRUEsYUFKRTtBQUtmQyxFQUFBQSxzQkFBc0IsRUFBRUEsd0JBTFQ7QUFNZkMsRUFBQUEsc0JBQXNCLEVBQUVBLHdCQU5UO0FBT2ZJLEVBQUFBLDRCQUE0QixFQUFFQSw4QkFQZjtBQVFmVCxFQUFBQSxNQUFNLEVBQUVBLE1BUk87QUFTZkUsRUFBQUEsWUFBWSxFQUFFQSxjQVRDO0FBVWZ0QixFQUFBQSxVQUFVLEVBQUVBLFlBVkc7QUFXZkMsRUFBQUEsbUJBQW1CLEVBQUVBO0FBWE4sQ0FBakI7O0FDaktBLElBQUkxVixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlpcEIscUJBQW1CLEdBQUdqcEIsbUJBQTFCOztBQUVBLElBQUl3bkIsMkJBQXlCLEdBQUd5QixxQkFBbUIsQ0FBQ3pCLHlCQUFwRDtBQUdBOztBQUNBOVYsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsYUFBVjtBQUF5QmdCLEVBQUFBLElBQUksRUFBRSxJQUEvQjtBQUFxQ0ksRUFBQUEsTUFBTSxFQUFFLENBQUNzYjtBQUE5QyxDQUFELEVBQTRFO0FBQzNFZSxFQUFBQSxNQUFNLEVBQUVVLHFCQUFtQixDQUFDVjtBQUQrQyxDQUE1RSxDQUFEOztBQ1BBLElBQUl2WSxlQUFhLEdBQUdoUSxlQUFwQjs7QUFDQSxJQUFJaUQsV0FBVyxHQUFHakQsYUFBbEI7OztJQUdBVCxjQUFBLEdBQWlCLFVBQVVpQyxRQUFWLEVBQW9CO0FBQ25DLE1BQUl3TyxlQUFhLENBQUN4TyxRQUFELENBQWpCLEVBQTZCLE9BQU9BLFFBQVA7QUFDN0IsUUFBTUgsU0FBUyxDQUFDNEIsV0FBVyxDQUFDekIsUUFBRCxDQUFYLEdBQXdCLHVCQUF6QixDQUFmO0FBQ0QsQ0FIRDs7QUNKQSxJQUFJMkUsV0FBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJa3BCLGNBQVksR0FBR2xwQixjQUFuQjs7QUFDQSxJQUFJaUYsaUJBQWUsR0FBR2pGLGlCQUF0Qjs7QUFFQSxJQUFJaVEsU0FBTyxHQUFHaEwsaUJBQWUsQ0FBQyxTQUFELENBQTdCO0FBR0E7O0lBQ0ExRixvQkFBQSxHQUFpQixVQUFVMEcsQ0FBVixFQUFha2pCLGtCQUFiLEVBQWlDO0FBQ2hELE1BQUloWixDQUFDLEdBQUdoSyxXQUFRLENBQUNGLENBQUQsQ0FBUixDQUFZbUssV0FBcEI7QUFDQSxNQUFJZ1osQ0FBSjtBQUNBLFNBQU9qWixDQUFDLEtBQUsvTyxTQUFOLElBQW1CLENBQUNnb0IsQ0FBQyxHQUFHampCLFdBQVEsQ0FBQ2dLLENBQUQsQ0FBUixDQUFZRixTQUFaLENBQUwsS0FBOEI3TyxTQUFqRCxHQUE2RCtuQixrQkFBN0QsR0FBa0ZELGNBQVksQ0FBQ0UsQ0FBRCxDQUFyRztBQUNELENBSkQ7O0FDUEEsSUFBSTFYLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSUQsT0FBSyxHQUFHQyxRQUFaOztBQUNBLElBQUlxcEIsbUJBQWlCLEdBQUdycEIsV0FBeEI7O0FBQ0EsSUFBSW1HLFdBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSTJKLGlCQUFlLEdBQUczSixpQkFBdEI7O0FBQ0EsSUFBSXlKLFVBQVEsR0FBR3pKLFVBQWY7O0FBQ0EsSUFBSXNwQixvQkFBa0IsR0FBR3RwQixvQkFBekI7O0FBRUEsSUFBSXFpQixhQUFXLEdBQUdnSCxtQkFBaUIsQ0FBQ2hILFdBQXBDO0FBQ0EsSUFBSUMsVUFBUSxHQUFHK0csbUJBQWlCLENBQUMvRyxRQUFqQztBQUNBLElBQUlpSCxzQkFBc0IsR0FBR2xILGFBQVcsQ0FBQ3JhLFNBQVosQ0FBc0IvRyxLQUFuRDtBQUVBLElBQUl1b0IsZUFBZSxHQUFHenBCLE9BQUssQ0FBQyxZQUFZO0FBQ3RDLFNBQU8sQ0FBQyxJQUFJc2lCLGFBQUosQ0FBZ0IsQ0FBaEIsRUFBbUJwaEIsS0FBbkIsQ0FBeUIsQ0FBekIsRUFBNEJHLFNBQTVCLEVBQXVDaWtCLFVBQS9DO0FBQ0QsQ0FGMEIsQ0FBM0I7QUFLQTs7QUFDQTNULElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLGFBQVY7QUFBeUJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBaEM7QUFBc0N2TSxFQUFBQSxNQUFNLEVBQUUsSUFBOUM7QUFBb0R1RCxFQUFBQSxNQUFNLEVBQUVzZDtBQUE1RCxDQUFELEVBQWdGO0FBQy9Fdm9CLEVBQUFBLEtBQUssRUFBRSxTQUFTQSxLQUFULENBQWUrWCxLQUFmLEVBQXNCRyxHQUF0QixFQUEyQjtBQUNoQyxRQUFJb1Esc0JBQXNCLEtBQUtub0IsU0FBM0IsSUFBd0MrWCxHQUFHLEtBQUsvWCxTQUFwRCxFQUErRDtBQUM3RCxhQUFPbW9CLHNCQUFzQixDQUFDL29CLElBQXZCLENBQTRCMkYsV0FBUSxDQUFDLElBQUQsQ0FBcEMsRUFBNEM2UyxLQUE1QyxDQUFQLENBRDZEO0FBRTlEOztBQUNELFFBQUlsWCxNQUFNLEdBQUdxRSxXQUFRLENBQUMsSUFBRCxDQUFSLENBQWVrZixVQUE1QjtBQUNBLFFBQUlvRSxLQUFLLEdBQUc5ZixpQkFBZSxDQUFDcVAsS0FBRCxFQUFRbFgsTUFBUixDQUEzQjtBQUNBLFFBQUkwZCxHQUFHLEdBQUc3VixpQkFBZSxDQUFDd1AsR0FBRyxLQUFLL1gsU0FBUixHQUFvQlUsTUFBcEIsR0FBNkJxWCxHQUE5QixFQUFtQ3JYLE1BQW5DLENBQXpCO0FBQ0EsUUFBSXNELE1BQU0sR0FBRyxLQUFLa2tCLG9CQUFrQixDQUFDLElBQUQsRUFBT2pILGFBQVAsQ0FBdkIsRUFBNEM1WSxVQUFRLENBQUMrVixHQUFHLEdBQUdpSyxLQUFQLENBQXBELENBQWI7QUFDQSxRQUFJQyxVQUFVLEdBQUcsSUFBSXBILFVBQUosQ0FBYSxJQUFiLENBQWpCO0FBQ0EsUUFBSXFILFVBQVUsR0FBRyxJQUFJckgsVUFBSixDQUFhbGQsTUFBYixDQUFqQjtBQUNBLFFBQUltRSxLQUFLLEdBQUcsQ0FBWjs7QUFDQSxXQUFPa2dCLEtBQUssR0FBR2pLLEdBQWYsRUFBb0I7QUFDbEJtSyxNQUFBQSxVQUFVLENBQUN4RCxRQUFYLENBQW9CNWMsS0FBSyxFQUF6QixFQUE2Qm1nQixVQUFVLENBQUMvRCxRQUFYLENBQW9COEQsS0FBSyxFQUF6QixDQUE3QjtBQUNEOztBQUFDLFdBQU9ya0IsTUFBUDtBQUNIO0FBZjhFLENBQWhGLENBQUQ7O0FDbkJBLElBQUlzTSxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlxcEIsbUJBQWlCLEdBQUdycEIsV0FBeEI7O0FBQ0EsSUFBSTJqQixtQkFBbUIsR0FBRzNqQixpQkFBMUI7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRS9SLEVBQUFBLE1BQU0sRUFBRSxJQUFWO0FBQWdCdU0sRUFBQUEsTUFBTSxFQUFFLENBQUN5WDtBQUF6QixDQUFELEVBQWlEO0FBQ2hEckIsRUFBQUEsUUFBUSxFQUFFK0csbUJBQWlCLENBQUMvRztBQURvQixDQUFqRCxDQUFEOztBQ0xBLElBQUk1USxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlELE9BQUssR0FBR0MsUUFBWjs7QUFFQSxJQUFJK0wsUUFBTSxHQUFHaE0sT0FBSyxDQUFDLFlBQVk7QUFDN0IsU0FBTyxJQUFJNnBCLElBQUosQ0FBUyxLQUFULEVBQWdCQyxPQUFoQixPQUE4QixHQUFyQztBQUNELENBRmlCLENBQWxCO0FBSUEsSUFBSUMsV0FBVyxHQUFHRixJQUFJLENBQUM1aEIsU0FBTCxDQUFlOGhCLFdBQWpDO0FBR0E7O0FBQ0FwWSxJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxNQUFWO0FBQWtCb0ssRUFBQUEsS0FBSyxFQUFFLElBQXpCO0FBQStCaEosRUFBQUEsTUFBTSxFQUFFSDtBQUF2QyxDQUFELEVBQWtEO0FBQ2pEOGQsRUFBQUEsT0FBTyxFQUFFLFNBQVNBLE9BQVQsR0FBbUI7QUFDMUIsV0FBT0MsV0FBVyxDQUFDdHBCLElBQVosQ0FBaUIsSUFBakIsSUFBeUIsSUFBaEM7QUFDRDtBQUhnRCxDQUFsRCxDQUFEOztBQ1pBLElBQUlrUixJQUFDLEdBQUcxUixPQUFSO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsTUFBVjtBQUFrQmdCLEVBQUFBLElBQUksRUFBRTtBQUF4QixDQUFELEVBQWlDO0FBQ2hDaWUsRUFBQUEsR0FBRyxFQUFFLFNBQVNBLEdBQVQsR0FBZTtBQUNsQixXQUFPLElBQUlILElBQUosR0FBV0ksT0FBWCxFQUFQO0FBQ0Q7QUFIK0IsQ0FBakMsQ0FBRDs7QUNIQSxJQUFJdFksSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJb0oscUJBQW1CLEdBQUdwSixxQkFBMUI7O0FBRUEsSUFBSWdxQixTQUFPLEdBQUdKLElBQUksQ0FBQzVoQixTQUFMLENBQWVnaUIsT0FBN0I7QUFDQSxJQUFJQyxXQUFXLEdBQUdMLElBQUksQ0FBQzVoQixTQUFMLENBQWVpaUIsV0FBakM7QUFHQTs7QUFDQXZZLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLE1BQVY7QUFBa0JvSyxFQUFBQSxLQUFLLEVBQUU7QUFBekIsQ0FBRCxFQUFrQztBQUNqQ2dWLEVBQUFBLE9BQU8sRUFBRSxTQUFTQSxPQUFULENBQWlCQyxJQUFqQixFQUF1QjtBQUM5QjtBQUNBSCxJQUFBQSxTQUFPLENBQUN4cEIsSUFBUixDQUFhLElBQWI7QUFDQSxRQUFJNHBCLEVBQUUsR0FBR2hoQixxQkFBbUIsQ0FBQytnQixJQUFELENBQTVCO0FBQ0EsUUFBSUUsSUFBSSxHQUFHLEtBQUtELEVBQUwsSUFBV0EsRUFBRSxJQUFJLEVBQWpCLEdBQXNCQSxFQUFFLEdBQUcsSUFBM0IsR0FBa0NBLEVBQTdDO0FBQ0EsV0FBT0gsV0FBVyxDQUFDenBCLElBQVosQ0FBaUIsSUFBakIsRUFBdUI2cEIsSUFBdkIsQ0FBUDtBQUNEO0FBUGdDLENBQWxDLENBQUQ7O0FDVEEsSUFBSTNZLElBQUMsR0FBRzFSLE9BQVI7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxNQUFWO0FBQWtCb0ssRUFBQUEsS0FBSyxFQUFFO0FBQXpCLENBQUQsRUFBa0M7QUFDakNvVixFQUFBQSxXQUFXLEVBQUVWLElBQUksQ0FBQzVoQixTQUFMLENBQWV1aUI7QUFESyxDQUFsQyxDQUFEOztBQ0hBLElBQUluaEIscUJBQW1CLEdBQUdwSixxQkFBMUI7O0FBQ0EsSUFBSWdCLFVBQVEsR0FBR2hCLFVBQWY7O0FBQ0EsSUFBSXVCLHdCQUFzQixHQUFHdkIsd0JBQTdCO0FBR0E7OztJQUNBVCxZQUFBLEdBQWlCLFNBQVNpckIsTUFBVCxDQUFnQnBSLEtBQWhCLEVBQXVCO0FBQ3RDLE1BQUlxUixHQUFHLEdBQUd6cEIsVUFBUSxDQUFDTyx3QkFBc0IsQ0FBQyxJQUFELENBQXZCLENBQWxCO0FBQ0EsTUFBSTZELE1BQU0sR0FBRyxFQUFiO0FBQ0EsTUFBSXlULENBQUMsR0FBR3pQLHFCQUFtQixDQUFDZ1EsS0FBRCxDQUEzQjtBQUNBLE1BQUlQLENBQUMsR0FBRyxDQUFKLElBQVNBLENBQUMsSUFBSTBLLFFBQWxCLEVBQTRCLE1BQU1oQixVQUFVLENBQUMsNkJBQUQsQ0FBaEI7O0FBQzVCLFNBQU0xSixDQUFDLEdBQUcsQ0FBVixFQUFhLENBQUNBLENBQUMsTUFBTSxDQUFSLE1BQWU0UixHQUFHLElBQUlBLEdBQXRCLENBQWIsRUFBeUMsSUFBSTVSLENBQUMsR0FBRyxDQUFSLEVBQVd6VCxNQUFNLElBQUlxbEIsR0FBVjs7QUFDcEQsU0FBT3JsQixNQUFQO0FBQ0QsQ0FQRDs7QUNQQTtBQUNBLElBQUlxRSxVQUFRLEdBQUd6SixVQUFmOztBQUNBLElBQUlnQixVQUFRLEdBQUdoQixVQUFmOztBQUNBLElBQUl3cUIsUUFBTSxHQUFHeHFCLFlBQWI7O0FBQ0EsSUFBSXVCLHdCQUFzQixHQUFHdkIsd0JBQTdCOztBQUVBLElBQUlpSixNQUFJLEdBQUczSixJQUFJLENBQUMySixJQUFoQjs7QUFHQSxJQUFJWSxjQUFZLEdBQUcsVUFBVTZnQixNQUFWLEVBQWtCO0FBQ25DLFNBQU8sVUFBVTNnQixLQUFWLEVBQWlCNGdCLFNBQWpCLEVBQTRCQyxVQUE1QixFQUF3QztBQUM3QyxRQUFJeEIsQ0FBQyxHQUFHcG9CLFVBQVEsQ0FBQ08sd0JBQXNCLENBQUN3SSxLQUFELENBQXZCLENBQWhCO0FBQ0EsUUFBSThnQixZQUFZLEdBQUdwaEIsVUFBUSxDQUFDa2hCLFNBQUQsQ0FBM0I7QUFDQSxRQUFJRyxZQUFZLEdBQUcxQixDQUFDLENBQUN0bkIsTUFBckI7QUFDQSxRQUFJaXBCLE9BQU8sR0FBR0gsVUFBVSxLQUFLeHBCLFNBQWYsR0FBMkIsR0FBM0IsR0FBaUNKLFVBQVEsQ0FBQzRwQixVQUFELENBQXZEO0FBQ0EsUUFBSUksT0FBSixFQUFhQyxZQUFiO0FBQ0EsUUFBSUosWUFBWSxJQUFJQyxZQUFoQixJQUFnQ0MsT0FBTyxJQUFJLEVBQS9DLEVBQW1ELE9BQU8zQixDQUFQO0FBQ25ENEIsSUFBQUEsT0FBTyxHQUFHSCxZQUFZLEdBQUdDLFlBQXpCO0FBQ0FHLElBQUFBLFlBQVksR0FBR1QsUUFBTSxDQUFDaHFCLElBQVAsQ0FBWXVxQixPQUFaLEVBQXFCOWhCLE1BQUksQ0FBQytoQixPQUFPLEdBQUdELE9BQU8sQ0FBQ2pwQixNQUFuQixDQUF6QixDQUFmO0FBQ0EsUUFBSW1wQixZQUFZLENBQUNucEIsTUFBYixHQUFzQmtwQixPQUExQixFQUFtQ0MsWUFBWSxHQUFHQSxZQUFZLENBQUNocUIsS0FBYixDQUFtQixDQUFuQixFQUFzQitwQixPQUF0QixDQUFmO0FBQ25DLFdBQU9OLE1BQU0sR0FBR3RCLENBQUMsR0FBRzZCLFlBQVAsR0FBc0JBLFlBQVksR0FBRzdCLENBQWxEO0FBQ0QsR0FYRDtBQVlELENBYkQ7O0lBZUE3cEIsU0FBQSxHQUFpQjtBQUNmO0FBQ0E7QUFDQXlaLEVBQUFBLEtBQUssRUFBRW5QLGNBQVksQ0FBQyxLQUFELENBSEo7QUFJZjtBQUNBO0FBQ0FzUCxFQUFBQSxHQUFHLEVBQUV0UCxjQUFZLENBQUMsSUFBRDtBQU5GLENBQWpCOztBQ3ZCQSxJQUFJOUosT0FBSyxHQUFHQyxRQUFaOztBQUNBLElBQUlrckIsUUFBUSxHQUFHbHJCLFNBQUEsQ0FBbUNnWixLQUFsRDs7QUFFQSxJQUFJd0osS0FBRyxHQUFHbGpCLElBQUksQ0FBQ2tqQixHQUFmO0FBQ0EsSUFBSTJJLGVBQWEsR0FBR3ZCLElBQUksQ0FBQzVoQixTQUF6QjtBQUNBLElBQUlnaUIsU0FBTyxHQUFHbUIsZUFBYSxDQUFDbkIsT0FBNUI7QUFDQSxJQUFJb0IscUJBQXFCLEdBQUdELGVBQWEsQ0FBQ0UsV0FBMUM7QUFHQTtBQUNBOztJQUNBOXJCLGVBQUEsR0FBa0JRLE9BQUssQ0FBQyxZQUFZO0FBQ2xDLFNBQU9xckIscUJBQXFCLENBQUM1cUIsSUFBdEIsQ0FBMkIsSUFBSW9wQixJQUFKLENBQVMsQ0FBQyxJQUFELEdBQVEsQ0FBakIsQ0FBM0IsS0FBbUQsMEJBQTFEO0FBQ0QsQ0FGc0IsQ0FBTCxJQUVaLENBQUM3cEIsT0FBSyxDQUFDLFlBQVk7QUFDdkJxckIsRUFBQUEscUJBQXFCLENBQUM1cUIsSUFBdEIsQ0FBMkIsSUFBSW9wQixJQUFKLENBQVNsRyxHQUFULENBQTNCO0FBQ0QsQ0FGVyxDQUZLLEdBSVgsU0FBUzJILFdBQVQsR0FBdUI7QUFDM0IsTUFBSSxDQUFDQyxRQUFRLENBQUN0QixTQUFPLENBQUN4cEIsSUFBUixDQUFhLElBQWIsQ0FBRCxDQUFiLEVBQW1DLE1BQU0raEIsVUFBVSxDQUFDLG9CQUFELENBQWhCO0FBQ25DLE1BQUlnSixJQUFJLEdBQUcsSUFBWDtBQUNBLE1BQUlwQixJQUFJLEdBQUdvQixJQUFJLENBQUNDLGNBQUwsRUFBWDtBQUNBLE1BQUlDLFlBQVksR0FBR0YsSUFBSSxDQUFDRyxrQkFBTCxFQUFuQjtBQUNBLE1BQUl0SSxJQUFJLEdBQUcrRyxJQUFJLEdBQUcsQ0FBUCxHQUFXLEdBQVgsR0FBaUJBLElBQUksR0FBRyxJQUFQLEdBQWMsR0FBZCxHQUFvQixFQUFoRDtBQUNBLFNBQU8vRyxJQUFJLEdBQUc4SCxRQUFRLENBQUMxSSxLQUFHLENBQUMySCxJQUFELENBQUosRUFBWS9HLElBQUksR0FBRyxDQUFILEdBQU8sQ0FBdkIsRUFBMEIsQ0FBMUIsQ0FBZixHQUNMLEdBREssR0FDQzhILFFBQVEsQ0FBQ0ssSUFBSSxDQUFDSSxXQUFMLEtBQXFCLENBQXRCLEVBQXlCLENBQXpCLEVBQTRCLENBQTVCLENBRFQsR0FFTCxHQUZLLEdBRUNULFFBQVEsQ0FBQ0ssSUFBSSxDQUFDSyxVQUFMLEVBQUQsRUFBb0IsQ0FBcEIsRUFBdUIsQ0FBdkIsQ0FGVCxHQUdMLEdBSEssR0FHQ1YsUUFBUSxDQUFDSyxJQUFJLENBQUNNLFdBQUwsRUFBRCxFQUFxQixDQUFyQixFQUF3QixDQUF4QixDQUhULEdBSUwsR0FKSyxHQUlDWCxRQUFRLENBQUNLLElBQUksQ0FBQ08sYUFBTCxFQUFELEVBQXVCLENBQXZCLEVBQTBCLENBQTFCLENBSlQsR0FLTCxHQUxLLEdBS0NaLFFBQVEsQ0FBQ0ssSUFBSSxDQUFDUSxhQUFMLEVBQUQsRUFBdUIsQ0FBdkIsRUFBMEIsQ0FBMUIsQ0FMVCxHQU1MLEdBTkssR0FNQ2IsUUFBUSxDQUFDTyxZQUFELEVBQWUsQ0FBZixFQUFrQixDQUFsQixDQU5ULEdBT0wsR0FQRjtBQVFELENBbEJnQixHQWtCYkwscUJBbEJKOztBQ1pBLElBQUkxWixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlxckIsV0FBVyxHQUFHcnJCLGVBQWxCO0FBR0E7QUFDQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxNQUFWO0FBQWtCb0ssRUFBQUEsS0FBSyxFQUFFLElBQXpCO0FBQStCaEosRUFBQUEsTUFBTSxFQUFFMGQsSUFBSSxDQUFDNWhCLFNBQUwsQ0FBZXFqQixXQUFmLEtBQStCQTtBQUF0RSxDQUFELEVBQXNGO0FBQ3JGQSxFQUFBQSxXQUFXLEVBQUVBO0FBRHdFLENBQXRGLENBQUQ7O0FDTEEsSUFBSTNaLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSUQsT0FBSyxHQUFHQyxRQUFaOztBQUNBLElBQUlrRSxVQUFRLEdBQUdsRSxVQUFmOztBQUNBLElBQUlxRixhQUFXLEdBQUdyRixhQUFsQjs7QUFFQSxJQUFJK0wsUUFBTSxHQUFHaE0sT0FBSyxDQUFDLFlBQVk7QUFDN0IsU0FBTyxJQUFJNnBCLElBQUosQ0FBU2xHLEdBQVQsRUFBY3NJLE1BQWQsT0FBMkIsSUFBM0IsSUFDRnBDLElBQUksQ0FBQzVoQixTQUFMLENBQWVna0IsTUFBZixDQUFzQnhyQixJQUF0QixDQUEyQjtBQUFFNnFCLElBQUFBLFdBQVcsRUFBRSxZQUFZO0FBQUUsYUFBTyxDQUFQO0FBQVc7QUFBeEMsR0FBM0IsTUFBMkUsQ0FEaEY7QUFFRCxDQUhpQixDQUFsQjtBQU1BOztBQUNBM1osSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsTUFBVjtBQUFrQm9LLEVBQUFBLEtBQUssRUFBRSxJQUF6QjtBQUErQmhKLEVBQUFBLE1BQU0sRUFBRUg7QUFBdkMsQ0FBRCxFQUFrRDtBQUNqRDtBQUNBaWdCLEVBQUFBLE1BQU0sRUFBRSxTQUFTQSxNQUFULENBQWdCcm9CLEdBQWhCLEVBQXFCO0FBQzNCLFFBQUlzQyxDQUFDLEdBQUcvQixVQUFRLENBQUMsSUFBRCxDQUFoQjtBQUNBLFFBQUkrbkIsRUFBRSxHQUFHNW1CLGFBQVcsQ0FBQ1ksQ0FBRCxFQUFJLFFBQUosQ0FBcEI7QUFDQSxXQUFPLE9BQU9nbUIsRUFBUCxJQUFhLFFBQWIsSUFBeUIsQ0FBQ1gsUUFBUSxDQUFDVyxFQUFELENBQWxDLEdBQXlDLElBQXpDLEdBQWdEaG1CLENBQUMsQ0FBQ29sQixXQUFGLEVBQXZEO0FBQ0Q7QUFOZ0QsQ0FBbEQsQ0FBRDs7QUNaQSxJQUFJbGxCLFdBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSWdGLG1CQUFtQixHQUFHaEYscUJBQTFCO0FBR0E7OztJQUNBVCxpQkFBQSxHQUFpQixVQUFVMnNCLElBQVYsRUFBZ0I7QUFDL0IvbEIsRUFBQUEsV0FBUSxDQUFDLElBQUQsQ0FBUjtBQUNBLE1BQUkrbEIsSUFBSSxLQUFLLFFBQVQsSUFBcUJBLElBQUksS0FBSyxTQUFsQyxFQUE2Q0EsSUFBSSxHQUFHLFFBQVAsQ0FBN0MsS0FDSyxJQUFJQSxJQUFJLEtBQUssUUFBYixFQUF1QixNQUFNN3FCLFNBQVMsQ0FBQyxnQkFBRCxDQUFmO0FBQzVCLFNBQU8yRCxtQkFBbUIsQ0FBQyxJQUFELEVBQU9rbkIsSUFBUCxDQUExQjtBQUNELENBTEQ7O0FDTkEsSUFBSXpnQixVQUFRLEdBQUd6TCxrQkFBZjs7QUFDQSxJQUFJbXNCLGVBQWUsR0FBR25zQixpQkFBdEI7O0FBQ0EsSUFBSWlGLGlCQUFlLEdBQUdqRixpQkFBdEI7O0FBRUEsSUFBSWtGLFlBQVksR0FBR0QsaUJBQWUsQ0FBQyxhQUFELENBQWxDO0FBQ0EsSUFBSWttQixlQUFhLEdBQUd2QixJQUFJLENBQUM1aEIsU0FBekI7QUFHQTs7QUFDQSxJQUFJLEVBQUU5QyxZQUFZLElBQUlpbUIsZUFBbEIsQ0FBSixFQUFzQztBQUNwQzFmLEVBQUFBLFVBQVEsQ0FBQzBmLGVBQUQsRUFBZ0JqbUIsWUFBaEIsRUFBOEJpbkIsZUFBOUIsQ0FBUjtBQUNEOztBQ1hELElBQUkxZ0IsVUFBUSxHQUFHekwsa0JBQWY7O0FBRUEsSUFBSW1yQixhQUFhLEdBQUd2QixJQUFJLENBQUM1aEIsU0FBekI7QUFDQSxJQUFJb2tCLFlBQVksR0FBRyxjQUFuQjtBQUNBLElBQUlDLFdBQVMsR0FBRyxVQUFoQjtBQUNBLElBQUlDLGtCQUFrQixHQUFHbkIsYUFBYSxDQUFDa0IsV0FBRCxDQUF0QztBQUNBLElBQUlyQyxPQUFPLEdBQUdtQixhQUFhLENBQUNuQixPQUE1QjtBQUdBOztBQUNBLElBQUlybkIsTUFBTSxDQUFDLElBQUlpbkIsSUFBSixDQUFTbEcsR0FBVCxDQUFELENBQU4sSUFBeUIwSSxZQUE3QixFQUEyQztBQUN6QzNnQixFQUFBQSxVQUFRLENBQUMwZixhQUFELEVBQWdCa0IsV0FBaEIsRUFBMkIsU0FBU3JyQixRQUFULEdBQW9CO0FBQ3JELFFBQUlILEtBQUssR0FBR21wQixPQUFPLENBQUN4cEIsSUFBUixDQUFhLElBQWIsQ0FBWixDQURxRDs7QUFHckQsV0FBT0ssS0FBSyxLQUFLQSxLQUFWLEdBQWtCeXJCLGtCQUFrQixDQUFDOXJCLElBQW5CLENBQXdCLElBQXhCLENBQWxCLEdBQWtENHJCLFlBQXpEO0FBQ0QsR0FKTyxDQUFSO0FBS0Q7O0FDZkQsSUFBSTFhLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSWdCLFVBQVEsR0FBR2hCLFVBQWY7O0FBRUEsSUFBSXVzQixHQUFHLEdBQUcsYUFBVjs7QUFFQSxJQUFJQyxLQUFHLEdBQUcsVUFBVXRMLElBQVYsRUFBZ0JwZixNQUFoQixFQUF3QjtBQUNoQyxNQUFJc0QsTUFBTSxHQUFHOGIsSUFBSSxDQUFDbGdCLFFBQUwsQ0FBYyxFQUFkLENBQWI7O0FBQ0EsU0FBT29FLE1BQU0sQ0FBQ3RELE1BQVAsR0FBZ0JBLE1BQXZCLEVBQStCc0QsTUFBTSxHQUFHLE1BQU1BLE1BQWY7O0FBQy9CLFNBQU9BLE1BQVA7QUFDRCxDQUpEO0FBT0E7OztBQUNBc00sSUFBQyxDQUFDO0FBQUUvUixFQUFBQSxNQUFNLEVBQUU7QUFBVixDQUFELEVBQW1CO0FBQ2xCOHNCLEVBQUFBLE1BQU0sRUFBRSxTQUFTQSxNQUFULENBQWdCbGhCLE1BQWhCLEVBQXdCO0FBQzlCLFFBQUlrZixHQUFHLEdBQUd6cEIsVUFBUSxDQUFDdUssTUFBRCxDQUFsQjtBQUNBLFFBQUluRyxNQUFNLEdBQUcsRUFBYjtBQUNBLFFBQUl0RCxNQUFNLEdBQUcyb0IsR0FBRyxDQUFDM29CLE1BQWpCO0FBQ0EsUUFBSXlILEtBQUssR0FBRyxDQUFaO0FBQ0EsUUFBSTRYLEdBQUosRUFBU0QsSUFBVDs7QUFDQSxXQUFPM1gsS0FBSyxHQUFHekgsTUFBZixFQUF1QjtBQUNyQnFmLE1BQUFBLEdBQUcsR0FBR3NKLEdBQUcsQ0FBQ25KLE1BQUosQ0FBVy9YLEtBQUssRUFBaEIsQ0FBTjs7QUFDQSxVQUFJZ2pCLEdBQUcsQ0FBQzVsQixJQUFKLENBQVN3YSxHQUFULENBQUosRUFBbUI7QUFDakIvYixRQUFBQSxNQUFNLElBQUkrYixHQUFWO0FBQ0QsT0FGRCxNQUVPO0FBQ0xELFFBQUFBLElBQUksR0FBR0MsR0FBRyxDQUFDdUwsVUFBSixDQUFlLENBQWYsQ0FBUDs7QUFDQSxZQUFJeEwsSUFBSSxHQUFHLEdBQVgsRUFBZ0I7QUFDZDliLFVBQUFBLE1BQU0sSUFBSSxNQUFNb25CLEtBQUcsQ0FBQ3RMLElBQUQsRUFBTyxDQUFQLENBQW5CO0FBQ0QsU0FGRCxNQUVPO0FBQ0w5YixVQUFBQSxNQUFNLElBQUksT0FBT29uQixLQUFHLENBQUN0TCxJQUFELEVBQU8sQ0FBUCxDQUFILENBQWF5TCxXQUFiLEVBQWpCO0FBQ0Q7QUFDRjtBQUNGOztBQUFDLFdBQU92bkIsTUFBUDtBQUNIO0FBcEJpQixDQUFuQixDQUFEOztBQ2JBLElBQUlsQyxXQUFTLEdBQUdsRCxXQUFoQjs7QUFDQSxJQUFJcUQsVUFBUSxHQUFHckQsVUFBZjs7QUFFQSxJQUFJaUIsT0FBSyxHQUFHLEdBQUdBLEtBQWY7QUFDQSxJQUFJMnJCLFNBQVMsR0FBRyxFQUFoQjs7QUFFQSxJQUFJbGQsU0FBUyxHQUFHLFVBQVVTLENBQVYsRUFBYTBjLFVBQWIsRUFBeUIxWSxJQUF6QixFQUErQjtBQUM3QyxNQUFJLEVBQUUwWSxVQUFVLElBQUlELFNBQWhCLENBQUosRUFBZ0M7QUFDOUIsU0FBSyxJQUFJRSxJQUFJLEdBQUcsRUFBWCxFQUFlemlCLENBQUMsR0FBRyxDQUF4QixFQUEyQkEsQ0FBQyxHQUFHd2lCLFVBQS9CLEVBQTJDeGlCLENBQUMsRUFBNUMsRUFBZ0R5aUIsSUFBSSxDQUFDemlCLENBQUQsQ0FBSixHQUFVLE9BQU9BLENBQVAsR0FBVyxHQUFyQixDQURsQjs7O0FBRzlCdWlCLElBQUFBLFNBQVMsQ0FBQ0MsVUFBRCxDQUFULEdBQXdCanRCLFFBQVEsQ0FBQyxLQUFELEVBQVEsa0JBQWtCa3RCLElBQUksQ0FBQzlqQixJQUFMLENBQVUsR0FBVixDQUFsQixHQUFtQyxHQUEzQyxDQUFoQztBQUNEOztBQUFDLFNBQU80akIsU0FBUyxDQUFDQyxVQUFELENBQVQsQ0FBc0IxYyxDQUF0QixFQUF5QmdFLElBQXpCLENBQVA7QUFDSCxDQU5EO0FBU0E7OztJQUNBNVUsWUFBQSxHQUFpQkssUUFBUSxDQUFDMFEsSUFBVCxJQUFpQixTQUFTQSxJQUFULENBQWNqQjtBQUFLO0FBQW5CLEVBQW9DO0FBQ3BFLE1BQUk3TCxFQUFFLEdBQUdOLFdBQVMsQ0FBQyxJQUFELENBQWxCO0FBQ0EsTUFBSTZwQixRQUFRLEdBQUc5ckIsT0FBSyxDQUFDVCxJQUFOLENBQVdxQixTQUFYLEVBQXNCLENBQXRCLENBQWY7O0FBQ0EsTUFBSW9QLGFBQWEsR0FBRyxTQUFTK2IsS0FBVCxHQUE4QjtBQUNoRCxRQUFJN1ksSUFBSSxHQUFHNFksUUFBUSxDQUFDdmlCLE1BQVQsQ0FBZ0J2SixPQUFLLENBQUNULElBQU4sQ0FBV3FCLFNBQVgsQ0FBaEIsQ0FBWDtBQUNBLFdBQU8sZ0JBQWdCb1AsYUFBaEIsR0FBZ0N2QixTQUFTLENBQUNsTSxFQUFELEVBQUsyUSxJQUFJLENBQUNyUyxNQUFWLEVBQWtCcVMsSUFBbEIsQ0FBekMsR0FBbUUzUSxFQUFFLENBQUNnTSxLQUFILENBQVNILElBQVQsRUFBZThFLElBQWYsQ0FBMUU7QUFDRCxHQUhEOztBQUlBLE1BQUk5USxVQUFRLENBQUNHLEVBQUUsQ0FBQ3dFLFNBQUosQ0FBWixFQUE0QmlKLGFBQWEsQ0FBQ2pKLFNBQWQsR0FBMEJ4RSxFQUFFLENBQUN3RSxTQUE3QjtBQUM1QixTQUFPaUosYUFBUDtBQUNELENBVEQ7O0FDakJBLElBQUlTLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXNRLE1BQUksR0FBR3RRLFlBQVg7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxVQUFWO0FBQXNCb0ssRUFBQUEsS0FBSyxFQUFFO0FBQTdCLENBQUQsRUFBc0M7QUFDckM1RSxFQUFBQSxJQUFJLEVBQUVBO0FBRCtCLENBQXRDLENBQUQ7O0FDSkEsSUFBSTdPLFlBQVUsR0FBR3pCLFlBQWpCOztBQUNBLElBQUlxRCxVQUFRLEdBQUdyRCxVQUFmOztBQUNBLElBQUlzRyxzQkFBb0IsR0FBR3RHLG9CQUEzQjs7QUFDQSxJQUFJNlUsZ0JBQWMsR0FBRzdVLHNCQUFyQjs7QUFDQSxJQUFJaUYsaUJBQWUsR0FBR2pGLGlCQUF0Qjs7QUFFQSxJQUFJaXRCLFlBQVksR0FBR2hvQixpQkFBZSxDQUFDLGFBQUQsQ0FBbEM7QUFDQSxJQUFJOEMsbUJBQWlCLEdBQUduSSxRQUFRLENBQUNvSSxTQUFqQztBQUdBOztBQUNBLElBQUksRUFBRWlsQixZQUFZLElBQUlsbEIsbUJBQWxCLENBQUosRUFBMEM7QUFDeEN6QixFQUFBQSxzQkFBb0IsQ0FBQ0osQ0FBckIsQ0FBdUI2QixtQkFBdkIsRUFBMENrbEIsWUFBMUMsRUFBd0Q7QUFBRXBzQixJQUFBQSxLQUFLLEVBQUUsVUFBVW9GLENBQVYsRUFBYTtBQUM1RSxVQUFJLENBQUN4RSxZQUFVLENBQUMsSUFBRCxDQUFYLElBQXFCLENBQUM0QixVQUFRLENBQUM0QyxDQUFELENBQWxDLEVBQXVDLE9BQU8sS0FBUDtBQUN2QyxVQUFJLENBQUM1QyxVQUFRLENBQUMsS0FBSzJFLFNBQU4sQ0FBYixFQUErQixPQUFPL0IsQ0FBQyxZQUFZLElBQXBCLENBRjZDOztBQUk1RSxhQUFPQSxDQUFDLEdBQUc0TyxnQkFBYyxDQUFDNU8sQ0FBRCxDQUF6QixFQUE4QixJQUFJLEtBQUsrQixTQUFMLEtBQW1CL0IsQ0FBdkIsRUFBMEIsT0FBTyxJQUFQOztBQUN4RCxhQUFPLEtBQVA7QUFDRDtBQU51RCxHQUF4RDtBQU9EOztBQ3BCRCxJQUFJUixhQUFXLEdBQUd6RixXQUFsQjs7QUFDQSxJQUFJa3RCLG9CQUFvQixHQUFHbHRCLFlBQUEsQ0FBc0N1RixNQUFqRTs7QUFDQSxJQUFJckYsZ0JBQWMsR0FBR0Ysb0JBQUEsQ0FBK0NrRyxDQUFwRTs7QUFFQSxJQUFJNkIsaUJBQWlCLEdBQUduSSxRQUFRLENBQUNvSSxTQUFqQztBQUNBLElBQUltbEIseUJBQXlCLEdBQUdwbEIsaUJBQWlCLENBQUMvRyxRQUFsRDtBQUNBLElBQUlvc0IsTUFBTSxHQUFHLHVCQUFiO0FBQ0EsSUFBSWplLElBQUksR0FBRyxNQUFYO0FBR0E7O0FBQ0EsSUFBSTFKLGFBQVcsSUFBSSxDQUFDeW5CLG9CQUFwQixFQUEwQztBQUN4Q2h0QixFQUFBQSxnQkFBYyxDQUFDNkgsaUJBQUQsRUFBb0JvSCxJQUFwQixFQUEwQjtBQUN0Q3JPLElBQUFBLFlBQVksRUFBRSxJQUR3QjtBQUV0Q1gsSUFBQUEsR0FBRyxFQUFFLFlBQVk7QUFDZixVQUFJO0FBQ0YsZUFBT2d0Qix5QkFBeUIsQ0FBQzNzQixJQUExQixDQUErQixJQUEvQixFQUFxQzhCLEtBQXJDLENBQTJDOHFCLE1BQTNDLEVBQW1ELENBQW5ELENBQVA7QUFDRCxPQUZELENBRUUsT0FBT3R0QixLQUFQLEVBQWM7QUFDZCxlQUFPLEVBQVA7QUFDRDtBQUNGO0FBUnFDLEdBQTFCLENBQWQ7QUFVRDs7QUN0QkQsSUFBSTRSLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSUwsUUFBTSxHQUFHSyxRQUFiO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUUvUixFQUFBQSxNQUFNLEVBQUU7QUFBVixDQUFELEVBQW1CO0FBQ2xCSCxFQUFBQSxVQUFVLEVBQUVHO0FBRE0sQ0FBbkIsQ0FBRDs7QUNMQSxJQUFJK1IsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJK0IsWUFBVSxHQUFHL0IsWUFBakI7O0FBQ0EsSUFBSUQsT0FBSyxHQUFHQyxRQUFaOztBQUVBLElBQUlxUyxVQUFVLEdBQUd0USxZQUFVLENBQUMsTUFBRCxFQUFTLFdBQVQsQ0FBM0I7QUFDQSxJQUFJc3JCLEVBQUUsR0FBRyxrQkFBVDtBQUNBLElBQUlDLEdBQUcsR0FBRyxtQkFBVjtBQUNBLElBQUlDLEVBQUUsR0FBRyxtQkFBVDs7QUFFQSxJQUFJQyxHQUFHLEdBQUcsVUFBVWxyQixLQUFWLEVBQWlCbWpCLE1BQWpCLEVBQXlCbGEsTUFBekIsRUFBaUM7QUFDekMsTUFBSWtpQixJQUFJLEdBQUdsaUIsTUFBTSxDQUFDK1YsTUFBUCxDQUFjbUUsTUFBTSxHQUFHLENBQXZCLENBQVg7QUFDQSxNQUFJaFAsSUFBSSxHQUFHbEwsTUFBTSxDQUFDK1YsTUFBUCxDQUFjbUUsTUFBTSxHQUFHLENBQXZCLENBQVg7O0FBQ0EsTUFBSzZILEdBQUcsQ0FBQzNtQixJQUFKLENBQVNyRSxLQUFULEtBQW1CLENBQUNpckIsRUFBRSxDQUFDNW1CLElBQUgsQ0FBUThQLElBQVIsQ0FBckIsSUFBd0M4VyxFQUFFLENBQUM1bUIsSUFBSCxDQUFRckUsS0FBUixLQUFrQixDQUFDZ3JCLEdBQUcsQ0FBQzNtQixJQUFKLENBQVM4bUIsSUFBVCxDQUEvRCxFQUFnRjtBQUM5RSxXQUFPLFFBQVFuckIsS0FBSyxDQUFDb3FCLFVBQU4sQ0FBaUIsQ0FBakIsRUFBb0IxckIsUUFBcEIsQ0FBNkIsRUFBN0IsQ0FBZjtBQUNEOztBQUFDLFNBQU9zQixLQUFQO0FBQ0gsQ0FORDs7QUFRQSxJQUFJeUosUUFBTSxHQUFHaE0sT0FBSyxDQUFDLFlBQVk7QUFDN0IsU0FBT3NTLFVBQVUsQ0FBQyxjQUFELENBQVYsS0FBK0Isa0JBQS9CLElBQ0ZBLFVBQVUsQ0FBQyxRQUFELENBQVYsS0FBeUIsV0FEOUI7QUFFRCxDQUhpQixDQUFsQjs7QUFLQSxJQUFJQSxVQUFKLEVBQWdCO0FBQ2Q7QUFDQTtBQUNBO0FBQ0FYLEVBQUFBLElBQUMsQ0FBQztBQUFFNUcsSUFBQUEsTUFBTSxFQUFFLE1BQVY7QUFBa0JnQixJQUFBQSxJQUFJLEVBQUUsSUFBeEI7QUFBOEJJLElBQUFBLE1BQU0sRUFBRUg7QUFBdEMsR0FBRCxFQUFpRDtBQUNoRDtBQUNBaUksSUFBQUEsU0FBUyxFQUFFLFNBQVNBLFNBQVQsQ0FBbUIzVSxFQUFuQixFQUF1QjRVLFFBQXZCLEVBQWlDQyxLQUFqQyxFQUF3QztBQUNqRCxVQUFJOU8sTUFBTSxHQUFHaU4sVUFBVSxDQUFDN0MsS0FBWCxDQUFpQixJQUFqQixFQUF1QjNOLFNBQXZCLENBQWI7QUFDQSxhQUFPLE9BQU91RCxNQUFQLElBQWlCLFFBQWpCLEdBQTRCQSxNQUFNLENBQUMwRCxPQUFQLENBQWV1a0IsRUFBZixFQUFtQkcsR0FBbkIsQ0FBNUIsR0FBc0Rwb0IsTUFBN0Q7QUFDRDtBQUwrQyxHQUFqRCxDQUFEO0FBT0Q7O0FDakNELElBQUl6RixRQUFNLEdBQUdLLFFBQWI7O0FBQ0EsSUFBSStSLGdCQUFjLEdBQUcvUixnQkFBckI7QUFHQTs7O0FBQ0ErUixnQkFBYyxDQUFDcFMsUUFBTSxDQUFDK3RCLElBQVIsRUFBYyxNQUFkLEVBQXNCLElBQXRCLENBQWQ7Ozs7QUNMQSxJQUFJM3RCLE9BQUssR0FBR0MsUUFBWjs7SUFFQVQsUUFBQSxHQUFpQixDQUFDUSxPQUFLLENBQUMsWUFBWTtBQUNsQztBQUNBLFNBQU9FLE1BQU0sQ0FBQzB0QixZQUFQLENBQW9CMXRCLE1BQU0sQ0FBQzJ0QixpQkFBUCxDQUF5QixFQUF6QixDQUFwQixDQUFQO0FBQ0QsQ0FIc0IsQ0FBdkI7O0FDRkEsSUFBSWxjLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSWdILFVBQVUsR0FBR2hILFlBQWpCOztBQUNBLElBQUlxRCxVQUFRLEdBQUdyRCxVQUFmOztBQUNBLElBQUlvRSxRQUFNLEdBQUdwRSxnQkFBYjs7QUFDQSxJQUFJRSxnQkFBYyxHQUFHRixvQkFBQSxDQUErQ2tHLENBQXBFOztBQUNBLElBQUl3RSx5QkFBeUIsR0FBRzFLLHlCQUFoQzs7QUFDQSxJQUFJNnRCLGlDQUFpQyxHQUFHN3RCLGlDQUF4Qzs7QUFDQSxJQUFJeUUsR0FBRyxHQUFHekUsS0FBVjs7QUFDQSxJQUFJOHRCLFVBQVEsR0FBRzl0QixRQUFmOztBQUVBLElBQUkrdEIsUUFBUSxHQUFHLEtBQWY7QUFDQSxJQUFJQyxRQUFRLEdBQUd2cEIsR0FBRyxDQUFDLE1BQUQsQ0FBbEI7QUFDQSxJQUFJSixJQUFFLEdBQUcsQ0FBVDs7QUFHQSxJQUFJc3BCLGNBQVksR0FBRzF0QixNQUFNLENBQUMwdEIsWUFBUCxJQUF1QixZQUFZO0FBQ3BELFNBQU8sSUFBUDtBQUNELENBRkQ7O0FBSUEsSUFBSU0sV0FBVyxHQUFHLFVBQVU1dUIsRUFBVixFQUFjO0FBQzlCYSxFQUFBQSxnQkFBYyxDQUFDYixFQUFELEVBQUsydUIsUUFBTCxFQUFlO0FBQUVudEIsSUFBQUEsS0FBSyxFQUFFO0FBQ3BDcXRCLE1BQUFBLFFBQVEsRUFBRSxNQUFNN3BCLElBQUUsRUFEa0I7QUFDZDtBQUN0QjhwQixNQUFBQSxRQUFRLEVBQUUsRUFGMEI7O0FBQUE7QUFBVCxHQUFmLENBQWQ7QUFJRCxDQUxEOztBQU9BLElBQUlDLFNBQU8sR0FBRyxVQUFVL3VCLEVBQVYsRUFBY3dQLE1BQWQsRUFBc0I7QUFDbEM7QUFDQSxNQUFJLENBQUN4TCxVQUFRLENBQUNoRSxFQUFELENBQWIsRUFBbUIsT0FBTyxPQUFPQSxFQUFQLElBQWEsUUFBYixHQUF3QkEsRUFBeEIsR0FBNkIsQ0FBQyxPQUFPQSxFQUFQLElBQWEsUUFBYixHQUF3QixHQUF4QixHQUE4QixHQUEvQixJQUFzQ0EsRUFBMUU7O0FBQ25CLE1BQUksQ0FBQytFLFFBQU0sQ0FBQy9FLEVBQUQsRUFBSzJ1QixRQUFMLENBQVgsRUFBMkI7QUFDekI7QUFDQSxRQUFJLENBQUNMLGNBQVksQ0FBQ3R1QixFQUFELENBQWpCLEVBQXVCLE9BQU8sR0FBUCxDQUZFOztBQUl6QixRQUFJLENBQUN3UCxNQUFMLEVBQWEsT0FBTyxHQUFQLENBSlk7O0FBTXpCb2YsSUFBQUEsV0FBVyxDQUFDNXVCLEVBQUQsQ0FBWCxDQU55QjtBQVExQjs7QUFBQyxTQUFPQSxFQUFFLENBQUMydUIsUUFBRCxDQUFGLENBQWFFLFFBQXBCO0FBQ0gsQ0FaRDs7QUFjQSxJQUFJRyxhQUFXLEdBQUcsVUFBVWh2QixFQUFWLEVBQWN3UCxNQUFkLEVBQXNCO0FBQ3RDLE1BQUksQ0FBQ3pLLFFBQU0sQ0FBQy9FLEVBQUQsRUFBSzJ1QixRQUFMLENBQVgsRUFBMkI7QUFDekI7QUFDQSxRQUFJLENBQUNMLGNBQVksQ0FBQ3R1QixFQUFELENBQWpCLEVBQXVCLE9BQU8sSUFBUCxDQUZFOztBQUl6QixRQUFJLENBQUN3UCxNQUFMLEVBQWEsT0FBTyxLQUFQLENBSlk7O0FBTXpCb2YsSUFBQUEsV0FBVyxDQUFDNXVCLEVBQUQsQ0FBWCxDQU55QjtBQVExQjs7QUFBQyxTQUFPQSxFQUFFLENBQUMydUIsUUFBRCxDQUFGLENBQWFHLFFBQXBCO0FBQ0gsQ0FWRDs7O0FBYUEsSUFBSUcsVUFBUSxHQUFHLFVBQVVqdkIsRUFBVixFQUFjO0FBQzNCLE1BQUl5dUIsVUFBUSxJQUFJQyxRQUFaLElBQXdCSixjQUFZLENBQUN0dUIsRUFBRCxDQUFwQyxJQUE0QyxDQUFDK0UsUUFBTSxDQUFDL0UsRUFBRCxFQUFLMnVCLFFBQUwsQ0FBdkQsRUFBdUVDLFdBQVcsQ0FBQzV1QixFQUFELENBQVg7QUFDdkUsU0FBT0EsRUFBUDtBQUNELENBSEQ7O0FBS0EsSUFBSWt2QixNQUFNLEdBQUcsWUFBWTtBQUN2QkMsRUFBQUEsSUFBSSxDQUFDRCxNQUFMLEdBQWMsWUFBWTtBQUFFO0FBQWEsR0FBekM7O0FBQ0FSLEVBQUFBLFFBQVEsR0FBRyxJQUFYO0FBQ0EsTUFBSXRqQixtQkFBbUIsR0FBR0MseUJBQXlCLENBQUN4RSxDQUFwRDtBQUNBLE1BQUk4YixNQUFNLEdBQUcsR0FBR0EsTUFBaEI7QUFDQSxNQUFJcmIsSUFBSSxHQUFHLEVBQVg7QUFDQUEsRUFBQUEsSUFBSSxDQUFDcW5CLFFBQUQsQ0FBSixHQUFpQixDQUFqQixDQU51Qjs7QUFTdkIsTUFBSXZqQixtQkFBbUIsQ0FBQzlELElBQUQsQ0FBbkIsQ0FBMEI3RSxNQUE5QixFQUFzQztBQUNwQzRJLElBQUFBLHlCQUF5QixDQUFDeEUsQ0FBMUIsR0FBOEIsVUFBVTdHLEVBQVYsRUFBYztBQUMxQyxVQUFJK0YsTUFBTSxHQUFHcUYsbUJBQW1CLENBQUNwTCxFQUFELENBQWhDOztBQUNBLFdBQUssSUFBSWdMLENBQUMsR0FBRyxDQUFSLEVBQVd2SSxNQUFNLEdBQUdzRCxNQUFNLENBQUN0RCxNQUFoQyxFQUF3Q3VJLENBQUMsR0FBR3ZJLE1BQTVDLEVBQW9EdUksQ0FBQyxFQUFyRCxFQUF5RDtBQUN2RCxZQUFJakYsTUFBTSxDQUFDaUYsQ0FBRCxDQUFOLEtBQWMyakIsUUFBbEIsRUFBNEI7QUFDMUJoTSxVQUFBQSxNQUFNLENBQUN4aEIsSUFBUCxDQUFZNEUsTUFBWixFQUFvQmlGLENBQXBCLEVBQXVCLENBQXZCO0FBQ0E7QUFDRDtBQUNGOztBQUFDLGFBQU9qRixNQUFQO0FBQ0gsS0FSRDs7QUFVQXNNLElBQUFBLElBQUMsQ0FBQztBQUFFNUcsTUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JnQixNQUFBQSxJQUFJLEVBQUUsSUFBMUI7QUFBZ0NJLE1BQUFBLE1BQU0sRUFBRTtBQUF4QyxLQUFELEVBQWlEO0FBQ2hEekIsTUFBQUEsbUJBQW1CLEVBQUVvakIsaUNBQWlDLENBQUMzbkI7QUFEUCxLQUFqRCxDQUFEO0FBR0Q7QUFDRixDQXhCRDs7QUEwQkEsSUFBSXNvQixJQUFJLEdBQUdqdkIsd0JBQUEsR0FBaUI7QUFDMUJndkIsRUFBQUEsTUFBTSxFQUFFQSxNQURrQjtBQUUxQkgsRUFBQUEsT0FBTyxFQUFFQSxTQUZpQjtBQUcxQkMsRUFBQUEsV0FBVyxFQUFFQSxhQUhhO0FBSTFCQyxFQUFBQSxRQUFRLEVBQUVBO0FBSmdCLENBQTVCO0FBT0F0bkIsVUFBVSxDQUFDZ25CLFFBQUQsQ0FBVixHQUF1QixJQUF2Qjs7QUMzRkEsSUFBSXZzQixZQUFVLEdBQUd6QixZQUFqQjs7QUFDQSxJQUFJcUQsVUFBUSxHQUFHckQsVUFBZjs7QUFDQSxJQUFJZ1YsZ0JBQWMsR0FBR2hWLHNCQUFyQjs7O0lBR0FULG1CQUFBLEdBQWlCLFVBQVV3SyxLQUFWLEVBQWlCMGtCLEtBQWpCLEVBQXdCQyxPQUF4QixFQUFpQztBQUNoRCxNQUFJQyxTQUFKLEVBQWVDLGtCQUFmO0FBQ0E7QUFFRTVaLEVBQUFBLGdCQUFjO0FBRWR2VCxFQUFBQSxZQUFVLENBQUNrdEIsU0FBUyxHQUFHRixLQUFLLENBQUNyZSxXQUFuQixDQUZWLElBR0F1ZSxTQUFTLEtBQUtELE9BSGQsSUFJQXJyQixVQUFRLENBQUN1ckIsa0JBQWtCLEdBQUdELFNBQVMsQ0FBQzNtQixTQUFoQyxDQUpSLElBS0E0bUIsa0JBQWtCLEtBQUtGLE9BQU8sQ0FBQzFtQixTQVBqQyxFQVFFZ04sZ0JBQWMsQ0FBQ2pMLEtBQUQsRUFBUTZrQixrQkFBUixDQUFkO0FBQ0YsU0FBTzdrQixLQUFQO0FBQ0QsQ0FaRDs7QUNKQSxJQUFJMkgsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJTCxRQUFNLEdBQUdLLFFBQWI7O0FBQ0EsSUFBSWdMLFVBQVEsR0FBR2hMLFVBQWY7O0FBQ0EsSUFBSXlMLFVBQVEsR0FBR3pMLGtCQUFmOztBQUNBLElBQUk2dUIsd0JBQXNCLEdBQUc3dUIsd0JBQTdCOztBQUNBLElBQUlnWCxTQUFPLEdBQUdoWCxTQUFkOztBQUNBLElBQUk2akIsWUFBVSxHQUFHN2pCLFlBQWpCOztBQUNBLElBQUl5QixZQUFVLEdBQUd6QixZQUFqQjs7QUFDQSxJQUFJcUQsVUFBUSxHQUFHckQsVUFBZjs7QUFDQSxJQUFJRCxPQUFLLEdBQUdDLFFBQVo7O0FBQ0EsSUFBSTJiLDZCQUEyQixHQUFHM2IsNkJBQWxDOztBQUNBLElBQUkrUixnQkFBYyxHQUFHL1IsZ0JBQXJCOztBQUNBLElBQUk4dUIsbUJBQWlCLEdBQUc5dUIsbUJBQXhCOztJQUVBVCxZQUFBLEdBQWlCLFVBQVVzaUIsZ0JBQVYsRUFBNEJrTixPQUE1QixFQUFxQ0MsTUFBckMsRUFBNkM7QUFDNUQsTUFBSXhlLE1BQU0sR0FBR3FSLGdCQUFnQixDQUFDMVgsT0FBakIsQ0FBeUIsS0FBekIsTUFBb0MsQ0FBQyxDQUFsRDtBQUNBLE1BQUk4a0IsT0FBTyxHQUFHcE4sZ0JBQWdCLENBQUMxWCxPQUFqQixDQUF5QixNQUF6QixNQUFxQyxDQUFDLENBQXBEO0FBQ0EsTUFBSStrQixLQUFLLEdBQUcxZSxNQUFNLEdBQUcsS0FBSCxHQUFXLEtBQTdCO0FBQ0EsTUFBSTJlLGlCQUFpQixHQUFHeHZCLFFBQU0sQ0FBQ2tpQixnQkFBRCxDQUE5QjtBQUNBLE1BQUl1TixlQUFlLEdBQUdELGlCQUFpQixJQUFJQSxpQkFBaUIsQ0FBQ25uQixTQUE3RDtBQUNBLE1BQUl5WCxXQUFXLEdBQUcwUCxpQkFBbEI7QUFDQSxNQUFJRSxRQUFRLEdBQUcsRUFBZjs7QUFFQSxNQUFJQyxTQUFTLEdBQUcsVUFBVXpSLEdBQVYsRUFBZTtBQUM3QixRQUFJMFIsWUFBWSxHQUFHSCxlQUFlLENBQUN2UixHQUFELENBQWxDO0FBQ0FwUyxJQUFBQSxVQUFRLENBQUMyakIsZUFBRCxFQUFrQnZSLEdBQWxCLEVBQ05BLEdBQUcsSUFBSSxLQUFQLEdBQWUsU0FBUzJSLEdBQVQsQ0FBYTN1QixLQUFiLEVBQW9CO0FBQ2pDMHVCLE1BQUFBLFlBQVksQ0FBQy91QixJQUFiLENBQWtCLElBQWxCLEVBQXdCSyxLQUFLLEtBQUssQ0FBVixHQUFjLENBQWQsR0FBa0JBLEtBQTFDO0FBQ0EsYUFBTyxJQUFQO0FBQ0QsS0FIRCxHQUdJZ2QsR0FBRyxJQUFJLFFBQVAsR0FBa0IsVUFBVWxhLEdBQVYsRUFBZTtBQUNuQyxhQUFPc3JCLE9BQU8sSUFBSSxDQUFDNXJCLFVBQVEsQ0FBQ00sR0FBRCxDQUFwQixHQUE0QixLQUE1QixHQUFvQzRyQixZQUFZLENBQUMvdUIsSUFBYixDQUFrQixJQUFsQixFQUF3Qm1ELEdBQUcsS0FBSyxDQUFSLEdBQVksQ0FBWixHQUFnQkEsR0FBeEMsQ0FBM0M7QUFDRCxLQUZHLEdBRUFrYSxHQUFHLElBQUksS0FBUCxHQUFlLFNBQVMxZCxHQUFULENBQWF3RCxHQUFiLEVBQWtCO0FBQ25DLGFBQU9zckIsT0FBTyxJQUFJLENBQUM1ckIsVUFBUSxDQUFDTSxHQUFELENBQXBCLEdBQTRCdkMsU0FBNUIsR0FBd0NtdUIsWUFBWSxDQUFDL3VCLElBQWIsQ0FBa0IsSUFBbEIsRUFBd0JtRCxHQUFHLEtBQUssQ0FBUixHQUFZLENBQVosR0FBZ0JBLEdBQXhDLENBQS9DO0FBQ0QsS0FGRyxHQUVBa2EsR0FBRyxJQUFJLEtBQVAsR0FBZSxTQUFTMVcsR0FBVCxDQUFheEQsR0FBYixFQUFrQjtBQUNuQyxhQUFPc3JCLE9BQU8sSUFBSSxDQUFDNXJCLFVBQVEsQ0FBQ00sR0FBRCxDQUFwQixHQUE0QixLQUE1QixHQUFvQzRyQixZQUFZLENBQUMvdUIsSUFBYixDQUFrQixJQUFsQixFQUF3Qm1ELEdBQUcsS0FBSyxDQUFSLEdBQVksQ0FBWixHQUFnQkEsR0FBeEMsQ0FBM0M7QUFDRCxLQUZHLEdBRUEsU0FBU3VELEdBQVQsQ0FBYXZELEdBQWIsRUFBa0I5QyxLQUFsQixFQUF5QjtBQUMzQjB1QixNQUFBQSxZQUFZLENBQUMvdUIsSUFBYixDQUFrQixJQUFsQixFQUF3Qm1ELEdBQUcsS0FBSyxDQUFSLEdBQVksQ0FBWixHQUFnQkEsR0FBeEMsRUFBNkM5QyxLQUE3QztBQUNBLGFBQU8sSUFBUDtBQUNELEtBYkssQ0FBUjtBQWVELEdBakJEOztBQW1CQSxNQUFJNHVCLE9BQU8sR0FBR3prQixVQUFRLENBQ3BCNlcsZ0JBRG9CLEVBRXBCLENBQUNwZ0IsWUFBVSxDQUFDMHRCLGlCQUFELENBQVgsSUFBa0MsRUFBRUYsT0FBTyxJQUFJRyxlQUFlLENBQUNsZSxPQUFoQixJQUEyQixDQUFDblIsT0FBSyxDQUFDLFlBQVk7QUFDM0YsUUFBSW92QixpQkFBSixHQUF3QjVSLE9BQXhCLEdBQWtDOUcsSUFBbEM7QUFDRCxHQUYrRSxDQUE5QyxDQUZkLENBQXRCOztBQU9BLE1BQUlnWixPQUFKLEVBQWE7QUFDWDtBQUNBaFEsSUFBQUEsV0FBVyxHQUFHdVAsTUFBTSxDQUFDVSxjQUFQLENBQXNCWCxPQUF0QixFQUErQmxOLGdCQUEvQixFQUFpRHJSLE1BQWpELEVBQXlEMGUsS0FBekQsQ0FBZDtBQUNBTCxJQUFBQSx3QkFBc0IsQ0FBQ04sTUFBdkI7QUFDRCxHQUpELE1BSU8sSUFBSXZqQixVQUFRLENBQUM2VyxnQkFBRCxFQUFtQixJQUFuQixDQUFaLEVBQXNDO0FBQzNDLFFBQUk4TixRQUFRLEdBQUcsSUFBSWxRLFdBQUosRUFBZixDQUQyQzs7QUFHM0MsUUFBSW1RLGNBQWMsR0FBR0QsUUFBUSxDQUFDVCxLQUFELENBQVIsQ0FBZ0JELE9BQU8sR0FBRyxFQUFILEdBQVEsQ0FBQyxDQUFoQyxFQUFtQyxDQUFuQyxLQUF5Q1UsUUFBOUQsQ0FIMkM7O0FBSzNDLFFBQUlFLG9CQUFvQixHQUFHOXZCLE9BQUssQ0FBQyxZQUFZO0FBQUU0dkIsTUFBQUEsUUFBUSxDQUFDeG9CLEdBQVQsQ0FBYSxDQUFiO0FBQWtCLEtBQWpDLENBQWhDLENBTDJDO0FBTzNDOztBQUNBLFFBQUkyb0IsZ0JBQWdCLEdBQUduVSw2QkFBMkIsQ0FBQyxVQUFVeEYsUUFBVixFQUFvQjtBQUFFLFVBQUlnWixpQkFBSixDQUFzQmhaLFFBQXRCO0FBQWtDLEtBQXpELENBQWxELENBUjJDOztBQVUzQyxRQUFJNFosVUFBVSxHQUFHLENBQUNkLE9BQUQsSUFBWWx2QixPQUFLLENBQUMsWUFBWTtBQUM3QztBQUNBLFVBQUlpd0IsU0FBUyxHQUFHLElBQUliLGlCQUFKLEVBQWhCO0FBQ0EsVUFBSTVsQixLQUFLLEdBQUcsQ0FBWjs7QUFDQSxhQUFPQSxLQUFLLEVBQVosRUFBZ0J5bUIsU0FBUyxDQUFDZCxLQUFELENBQVQsQ0FBaUIzbEIsS0FBakIsRUFBd0JBLEtBQXhCOztBQUNoQixhQUFPLENBQUN5bUIsU0FBUyxDQUFDN29CLEdBQVYsQ0FBYyxDQUFDLENBQWYsQ0FBUjtBQUNELEtBTmlDLENBQWxDOztBQVFBLFFBQUksQ0FBQzJvQixnQkFBTCxFQUF1QjtBQUNyQnJRLE1BQUFBLFdBQVcsR0FBR3NQLE9BQU8sQ0FBQyxVQUFVTixLQUFWLEVBQWlCdFksUUFBakIsRUFBMkI7QUFDL0MwTixRQUFBQSxZQUFVLENBQUM0SyxLQUFELEVBQVFoUCxXQUFSLEVBQXFCb0MsZ0JBQXJCLENBQVY7QUFDQSxZQUFJeFMsSUFBSSxHQUFHeWYsbUJBQWlCLENBQUMsSUFBSUssaUJBQUosRUFBRCxFQUEwQlYsS0FBMUIsRUFBaUNoUCxXQUFqQyxDQUE1QjtBQUNBLFlBQUl0SixRQUFRLElBQUkvVSxTQUFoQixFQUEyQjRWLFNBQU8sQ0FBQ2IsUUFBRCxFQUFXOUcsSUFBSSxDQUFDNmYsS0FBRCxDQUFmLEVBQXdCO0FBQUU3ZixVQUFBQSxJQUFJLEVBQUVBLElBQVI7QUFBY2dILFVBQUFBLFVBQVUsRUFBRTdGO0FBQTFCLFNBQXhCLENBQVA7QUFDM0IsZUFBT25CLElBQVA7QUFDRCxPQUxvQixDQUFyQjtBQU1Bb1EsTUFBQUEsV0FBVyxDQUFDelgsU0FBWixHQUF3Qm9uQixlQUF4QjtBQUNBQSxNQUFBQSxlQUFlLENBQUNoZixXQUFoQixHQUE4QnFQLFdBQTlCO0FBQ0Q7O0FBRUQsUUFBSW9RLG9CQUFvQixJQUFJRSxVQUE1QixFQUF3QztBQUN0Q1QsTUFBQUEsU0FBUyxDQUFDLFFBQUQsQ0FBVDtBQUNBQSxNQUFBQSxTQUFTLENBQUMsS0FBRCxDQUFUO0FBQ0E5ZSxNQUFBQSxNQUFNLElBQUk4ZSxTQUFTLENBQUMsS0FBRCxDQUFuQjtBQUNEOztBQUVELFFBQUlTLFVBQVUsSUFBSUgsY0FBbEIsRUFBa0NOLFNBQVMsQ0FBQ0osS0FBRCxDQUFULENBbkNTOztBQXNDM0MsUUFBSUQsT0FBTyxJQUFJRyxlQUFlLENBQUNhLEtBQS9CLEVBQXNDLE9BQU9iLGVBQWUsQ0FBQ2EsS0FBdkI7QUFDdkM7O0FBRURaLEVBQUFBLFFBQVEsQ0FBQ3hOLGdCQUFELENBQVIsR0FBNkJwQyxXQUE3QjtBQUNBL04sRUFBQUEsSUFBQyxDQUFDO0FBQUUvUixJQUFBQSxNQUFNLEVBQUUsSUFBVjtBQUFnQnVNLElBQUFBLE1BQU0sRUFBRXVULFdBQVcsSUFBSTBQO0FBQXZDLEdBQUQsRUFBNkRFLFFBQTdELENBQUQ7QUFFQXRkLEVBQUFBLGdCQUFjLENBQUMwTixXQUFELEVBQWNvQyxnQkFBZCxDQUFkO0FBRUEsTUFBSSxDQUFDb04sT0FBTCxFQUFjRCxNQUFNLENBQUNrQixTQUFQLENBQWlCelEsV0FBakIsRUFBOEJvQyxnQkFBOUIsRUFBZ0RyUixNQUFoRDtBQUVkLFNBQU9pUCxXQUFQO0FBQ0QsQ0F4RkQ7O0FDZEEsSUFBSXZmLGdCQUFjLEdBQUdGLG9CQUFBLENBQStDa0csQ0FBcEU7O0FBQ0EsSUFBSTJJLFFBQU0sR0FBRzdPLGNBQWI7O0FBQ0EsSUFBSTRqQixhQUFXLEdBQUc1akIsYUFBbEI7O0FBQ0EsSUFBSXNRLE1BQUksR0FBR3RRLG1CQUFYOztBQUNBLElBQUk2akIsWUFBVSxHQUFHN2pCLFlBQWpCOztBQUNBLElBQUlnWCxTQUFPLEdBQUdoWCxTQUFkOztBQUNBLElBQUk4ZCxnQkFBYyxHQUFHOWQsZ0JBQXJCOztBQUNBLElBQUk4aEIsWUFBVSxHQUFHOWhCLFlBQWpCOztBQUNBLElBQUl5RixhQUFXLEdBQUd6RixXQUFsQjs7QUFDQSxJQUFJb3VCLE9BQU8sR0FBR3B1Qix3QkFBQSxDQUEwQ291QixPQUF4RDs7QUFDQSxJQUFJL2xCLHFCQUFtQixHQUFHckksYUFBMUI7O0FBRUEsSUFBSW1TLGtCQUFnQixHQUFHOUoscUJBQW1CLENBQUNuQixHQUEzQztBQUNBLElBQUlpcEIsd0JBQXNCLEdBQUc5bkIscUJBQW1CLENBQUNoQixTQUFqRDtJQUVBOUgsa0JBQUEsR0FBaUI7QUFDZm13QixFQUFBQSxjQUFjLEVBQUUsVUFBVVgsT0FBVixFQUFtQmxOLGdCQUFuQixFQUFxQ3JSLE1BQXJDLEVBQTZDMGUsS0FBN0MsRUFBb0Q7QUFDbEUsUUFBSS9lLENBQUMsR0FBRzRlLE9BQU8sQ0FBQyxVQUFVMWYsSUFBVixFQUFnQjhHLFFBQWhCLEVBQTBCO0FBQ3hDME4sTUFBQUEsWUFBVSxDQUFDeFUsSUFBRCxFQUFPYyxDQUFQLEVBQVUwUixnQkFBVixDQUFWO0FBQ0ExUCxNQUFBQSxrQkFBZ0IsQ0FBQzlDLElBQUQsRUFBTztBQUNyQjdILFFBQUFBLElBQUksRUFBRXFhLGdCQURlO0FBRXJCdFksUUFBQUEsS0FBSyxFQUFFc0YsUUFBTSxDQUFDLElBQUQsQ0FGUTtBQUdyQjRhLFFBQUFBLEtBQUssRUFBRXJvQixTQUhjO0FBSXJCZ3ZCLFFBQUFBLElBQUksRUFBRWh2QixTQUplO0FBS3JCaXZCLFFBQUFBLElBQUksRUFBRTtBQUxlLE9BQVAsQ0FBaEI7QUFPQSxVQUFJLENBQUM1cUIsYUFBTCxFQUFrQjRKLElBQUksQ0FBQ2doQixJQUFMLEdBQVksQ0FBWjtBQUNsQixVQUFJbGEsUUFBUSxJQUFJL1UsU0FBaEIsRUFBMkI0VixTQUFPLENBQUNiLFFBQUQsRUFBVzlHLElBQUksQ0FBQzZmLEtBQUQsQ0FBZixFQUF3QjtBQUFFN2YsUUFBQUEsSUFBSSxFQUFFQSxJQUFSO0FBQWNnSCxRQUFBQSxVQUFVLEVBQUU3RjtBQUExQixPQUF4QixDQUFQO0FBQzVCLEtBWGMsQ0FBZjtBQWFBLFFBQUlqSSxnQkFBZ0IsR0FBRzRuQix3QkFBc0IsQ0FBQ3RPLGdCQUFELENBQTdDOztBQUVBLFFBQUl5TyxNQUFNLEdBQUcsVUFBVWpoQixJQUFWLEVBQWdCMUwsR0FBaEIsRUFBcUI5QyxLQUFyQixFQUE0QjtBQUN2QyxVQUFJMEcsS0FBSyxHQUFHZ0IsZ0JBQWdCLENBQUM4RyxJQUFELENBQTVCO0FBQ0EsVUFBSWtoQixLQUFLLEdBQUdDLFFBQVEsQ0FBQ25oQixJQUFELEVBQU8xTCxHQUFQLENBQXBCO0FBQ0EsVUFBSThzQixRQUFKLEVBQWNsbkIsS0FBZCxDQUh1Qzs7QUFLdkMsVUFBSWduQixLQUFKLEVBQVc7QUFDVEEsUUFBQUEsS0FBSyxDQUFDMXZCLEtBQU4sR0FBY0EsS0FBZCxDQURTO0FBR1YsT0FIRCxNQUdPO0FBQ0wwRyxRQUFBQSxLQUFLLENBQUM2b0IsSUFBTixHQUFhRyxLQUFLLEdBQUc7QUFDbkJobkIsVUFBQUEsS0FBSyxFQUFFQSxLQUFLLEdBQUc2a0IsT0FBTyxDQUFDenFCLEdBQUQsRUFBTSxJQUFOLENBREg7QUFFbkJBLFVBQUFBLEdBQUcsRUFBRUEsR0FGYztBQUduQjlDLFVBQUFBLEtBQUssRUFBRUEsS0FIWTtBQUluQjR2QixVQUFBQSxRQUFRLEVBQUVBLFFBQVEsR0FBR2xwQixLQUFLLENBQUM2b0IsSUFKUjtBQUtuQjNaLFVBQUFBLElBQUksRUFBRXJWLFNBTGE7QUFNbkJzdkIsVUFBQUEsT0FBTyxFQUFFO0FBTlUsU0FBckI7QUFRQSxZQUFJLENBQUNucEIsS0FBSyxDQUFDa2lCLEtBQVgsRUFBa0JsaUIsS0FBSyxDQUFDa2lCLEtBQU4sR0FBYzhHLEtBQWQ7QUFDbEIsWUFBSUUsUUFBSixFQUFjQSxRQUFRLENBQUNoYSxJQUFULEdBQWdCOFosS0FBaEI7QUFDZCxZQUFJOXFCLGFBQUosRUFBaUI4QixLQUFLLENBQUM4b0IsSUFBTixHQUFqQixLQUNLaGhCLElBQUksQ0FBQ2doQixJQUFMLEdBWkE7O0FBY0wsWUFBSTltQixLQUFLLEtBQUssR0FBZCxFQUFtQmhDLEtBQUssQ0FBQ2dDLEtBQU4sQ0FBWUEsS0FBWixJQUFxQmduQixLQUFyQjtBQUNwQjs7QUFBQyxhQUFPbGhCLElBQVA7QUFDSCxLQXhCRDs7QUEwQkEsUUFBSW1oQixRQUFRLEdBQUcsVUFBVW5oQixJQUFWLEVBQWdCMUwsR0FBaEIsRUFBcUI7QUFDbEMsVUFBSTRELEtBQUssR0FBR2dCLGdCQUFnQixDQUFDOEcsSUFBRCxDQUE1QixDQURrQzs7QUFHbEMsVUFBSTlGLEtBQUssR0FBRzZrQixPQUFPLENBQUN6cUIsR0FBRCxDQUFuQjtBQUNBLFVBQUk0c0IsS0FBSjtBQUNBLFVBQUlobkIsS0FBSyxLQUFLLEdBQWQsRUFBbUIsT0FBT2hDLEtBQUssQ0FBQ2dDLEtBQU4sQ0FBWUEsS0FBWixDQUFQLENBTGU7O0FBT2xDLFdBQUtnbkIsS0FBSyxHQUFHaHBCLEtBQUssQ0FBQ2tpQixLQUFuQixFQUEwQjhHLEtBQTFCLEVBQWlDQSxLQUFLLEdBQUdBLEtBQUssQ0FBQzlaLElBQS9DLEVBQXFEO0FBQ25ELFlBQUk4WixLQUFLLENBQUM1c0IsR0FBTixJQUFhQSxHQUFqQixFQUFzQixPQUFPNHNCLEtBQVA7QUFDdkI7QUFDRixLQVZEOztBQVlBM00sSUFBQUEsYUFBVyxDQUFDelQsQ0FBQyxDQUFDbkksU0FBSCxFQUFjO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBaW9CLE1BQUFBLEtBQUssRUFBRSxTQUFTQSxLQUFULEdBQWlCO0FBQ3RCLFlBQUk1Z0IsSUFBSSxHQUFHLElBQVg7QUFDQSxZQUFJOUgsS0FBSyxHQUFHZ0IsZ0JBQWdCLENBQUM4RyxJQUFELENBQTVCO0FBQ0EsWUFBSWxFLElBQUksR0FBRzVELEtBQUssQ0FBQ2dDLEtBQWpCO0FBQ0EsWUFBSWduQixLQUFLLEdBQUdocEIsS0FBSyxDQUFDa2lCLEtBQWxCOztBQUNBLGVBQU84RyxLQUFQLEVBQWM7QUFDWkEsVUFBQUEsS0FBSyxDQUFDRyxPQUFOLEdBQWdCLElBQWhCO0FBQ0EsY0FBSUgsS0FBSyxDQUFDRSxRQUFWLEVBQW9CRixLQUFLLENBQUNFLFFBQU4sR0FBaUJGLEtBQUssQ0FBQ0UsUUFBTixDQUFlaGEsSUFBZixHQUFzQnJWLFNBQXZDO0FBQ3BCLGlCQUFPK0osSUFBSSxDQUFDb2xCLEtBQUssQ0FBQ2huQixLQUFQLENBQVg7QUFDQWduQixVQUFBQSxLQUFLLEdBQUdBLEtBQUssQ0FBQzlaLElBQWQ7QUFDRDs7QUFDRGxQLFFBQUFBLEtBQUssQ0FBQ2tpQixLQUFOLEdBQWNsaUIsS0FBSyxDQUFDNm9CLElBQU4sR0FBYWh2QixTQUEzQjtBQUNBLFlBQUlxRSxhQUFKLEVBQWlCOEIsS0FBSyxDQUFDOG9CLElBQU4sR0FBYSxDQUFiLENBQWpCLEtBQ0toaEIsSUFBSSxDQUFDZ2hCLElBQUwsR0FBWSxDQUFaO0FBQ04sT0FsQnNCO0FBbUJ2QjtBQUNBO0FBQ0E7QUFDQSxnQkFBVSxVQUFVMXNCLEdBQVYsRUFBZTtBQUN2QixZQUFJMEwsSUFBSSxHQUFHLElBQVg7QUFDQSxZQUFJOUgsS0FBSyxHQUFHZ0IsZ0JBQWdCLENBQUM4RyxJQUFELENBQTVCO0FBQ0EsWUFBSWtoQixLQUFLLEdBQUdDLFFBQVEsQ0FBQ25oQixJQUFELEVBQU8xTCxHQUFQLENBQXBCOztBQUNBLFlBQUk0c0IsS0FBSixFQUFXO0FBQ1QsY0FBSTlaLElBQUksR0FBRzhaLEtBQUssQ0FBQzlaLElBQWpCO0FBQ0EsY0FBSWdYLElBQUksR0FBRzhDLEtBQUssQ0FBQ0UsUUFBakI7QUFDQSxpQkFBT2xwQixLQUFLLENBQUNnQyxLQUFOLENBQVlnbkIsS0FBSyxDQUFDaG5CLEtBQWxCLENBQVA7QUFDQWduQixVQUFBQSxLQUFLLENBQUNHLE9BQU4sR0FBZ0IsSUFBaEI7QUFDQSxjQUFJakQsSUFBSixFQUFVQSxJQUFJLENBQUNoWCxJQUFMLEdBQVlBLElBQVo7QUFDVixjQUFJQSxJQUFKLEVBQVVBLElBQUksQ0FBQ2dhLFFBQUwsR0FBZ0JoRCxJQUFoQjtBQUNWLGNBQUlsbUIsS0FBSyxDQUFDa2lCLEtBQU4sSUFBZThHLEtBQW5CLEVBQTBCaHBCLEtBQUssQ0FBQ2tpQixLQUFOLEdBQWNoVCxJQUFkO0FBQzFCLGNBQUlsUCxLQUFLLENBQUM2b0IsSUFBTixJQUFjRyxLQUFsQixFQUF5QmhwQixLQUFLLENBQUM2b0IsSUFBTixHQUFhM0MsSUFBYjtBQUN6QixjQUFJaG9CLGFBQUosRUFBaUI4QixLQUFLLENBQUM4b0IsSUFBTixHQUFqQixLQUNLaGhCLElBQUksQ0FBQ2doQixJQUFMO0FBQ047O0FBQUMsZUFBTyxDQUFDLENBQUNFLEtBQVQ7QUFDSCxPQXRDc0I7QUF1Q3ZCO0FBQ0E7QUFDQTtBQUNBcmYsTUFBQUEsT0FBTyxFQUFFLFNBQVNBLE9BQVQsQ0FBaUJIO0FBQVc7QUFBNUIsUUFBc0Q7QUFDN0QsWUFBSXhKLEtBQUssR0FBR2dCLGdCQUFnQixDQUFDLElBQUQsQ0FBNUI7QUFDQSxZQUFJMEksYUFBYSxHQUFHWCxNQUFJLENBQUNTLFVBQUQsRUFBYWxQLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUF1QkQsU0FBUyxDQUFDLENBQUQsQ0FBaEMsR0FBc0NULFNBQW5ELEVBQThELENBQTlELENBQXhCO0FBQ0EsWUFBSW12QixLQUFKOztBQUNBLGVBQU9BLEtBQUssR0FBR0EsS0FBSyxHQUFHQSxLQUFLLENBQUM5WixJQUFULEdBQWdCbFAsS0FBSyxDQUFDa2lCLEtBQTFDLEVBQWlEO0FBQy9DeFksVUFBQUEsYUFBYSxDQUFDc2YsS0FBSyxDQUFDMXZCLEtBQVAsRUFBYzB2QixLQUFLLENBQUM1c0IsR0FBcEIsRUFBeUIsSUFBekIsQ0FBYixDQUQrQzs7QUFHL0MsaUJBQU80c0IsS0FBSyxJQUFJQSxLQUFLLENBQUNHLE9BQXRCLEVBQStCSCxLQUFLLEdBQUdBLEtBQUssQ0FBQ0UsUUFBZDtBQUNoQztBQUNGLE9BbkRzQjtBQW9EdkI7QUFDQTtBQUNBO0FBQ0F0cEIsTUFBQUEsR0FBRyxFQUFFLFNBQVNBLEdBQVQsQ0FBYXhELEdBQWIsRUFBa0I7QUFDckIsZUFBTyxDQUFDLENBQUM2c0IsUUFBUSxDQUFDLElBQUQsRUFBTzdzQixHQUFQLENBQWpCO0FBQ0Q7QUF6RHNCLEtBQWQsQ0FBWDtBQTREQWlnQixJQUFBQSxhQUFXLENBQUN6VCxDQUFDLENBQUNuSSxTQUFILEVBQWN3SSxNQUFNLEdBQUc7QUFDaEM7QUFDQTtBQUNBclEsTUFBQUEsR0FBRyxFQUFFLFNBQVNBLEdBQVQsQ0FBYXdELEdBQWIsRUFBa0I7QUFDckIsWUFBSTRzQixLQUFLLEdBQUdDLFFBQVEsQ0FBQyxJQUFELEVBQU83c0IsR0FBUCxDQUFwQjtBQUNBLGVBQU80c0IsS0FBSyxJQUFJQSxLQUFLLENBQUMxdkIsS0FBdEI7QUFDRCxPQU4rQjtBQU9oQztBQUNBO0FBQ0FxRyxNQUFBQSxHQUFHLEVBQUUsU0FBU0EsR0FBVCxDQUFhdkQsR0FBYixFQUFrQjlDLEtBQWxCLEVBQXlCO0FBQzVCLGVBQU95dkIsTUFBTSxDQUFDLElBQUQsRUFBTzNzQixHQUFHLEtBQUssQ0FBUixHQUFZLENBQVosR0FBZ0JBLEdBQXZCLEVBQTRCOUMsS0FBNUIsQ0FBYjtBQUNEO0FBWCtCLEtBQUgsR0FZM0I7QUFDRjtBQUNBO0FBQ0EydUIsTUFBQUEsR0FBRyxFQUFFLFNBQVNBLEdBQVQsQ0FBYTN1QixLQUFiLEVBQW9CO0FBQ3ZCLGVBQU95dkIsTUFBTSxDQUFDLElBQUQsRUFBT3p2QixLQUFLLEdBQUdBLEtBQUssS0FBSyxDQUFWLEdBQWMsQ0FBZCxHQUFrQkEsS0FBakMsRUFBd0NBLEtBQXhDLENBQWI7QUFDRDtBQUxDLEtBWk8sQ0FBWDtBQW1CQSxRQUFJNEUsYUFBSixFQUFpQnZGLGdCQUFjLENBQUNpUSxDQUFDLENBQUNuSSxTQUFILEVBQWMsTUFBZCxFQUFzQjtBQUNuRDdILE1BQUFBLEdBQUcsRUFBRSxZQUFZO0FBQ2YsZUFBT29JLGdCQUFnQixDQUFDLElBQUQsQ0FBaEIsQ0FBdUI4bkIsSUFBOUI7QUFDRDtBQUhrRCxLQUF0QixDQUFkO0FBS2pCLFdBQU9sZ0IsQ0FBUDtBQUNELEdBNUljO0FBNklmK2YsRUFBQUEsU0FBUyxFQUFFLFVBQVUvZixDQUFWLEVBQWEwUixnQkFBYixFQUErQnJSLE1BQS9CLEVBQXVDO0FBQ2hELFFBQUltZ0IsYUFBYSxHQUFHOU8sZ0JBQWdCLEdBQUcsV0FBdkM7QUFDQSxRQUFJK08sMEJBQTBCLEdBQUdULHdCQUFzQixDQUFDdE8sZ0JBQUQsQ0FBdkQ7QUFDQSxRQUFJZ1Asd0JBQXdCLEdBQUdWLHdCQUFzQixDQUFDUSxhQUFELENBQXJELENBSGdEO0FBS2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0E3UyxJQUFBQSxnQkFBYyxDQUFDM04sQ0FBRCxFQUFJMFIsZ0JBQUosRUFBc0IsVUFBVTdELFFBQVYsRUFBb0JySSxJQUFwQixFQUEwQjtBQUM1RHhELE1BQUFBLGtCQUFnQixDQUFDLElBQUQsRUFBTztBQUNyQjNLLFFBQUFBLElBQUksRUFBRW1wQixhQURlO0FBRXJCN2xCLFFBQUFBLE1BQU0sRUFBRWtULFFBRmE7QUFHckJ6VyxRQUFBQSxLQUFLLEVBQUVxcEIsMEJBQTBCLENBQUM1UyxRQUFELENBSFo7QUFJckJySSxRQUFBQSxJQUFJLEVBQUVBLElBSmU7QUFLckJ5YSxRQUFBQSxJQUFJLEVBQUVodkI7QUFMZSxPQUFQLENBQWhCO0FBT0QsS0FSYSxFQVFYLFlBQVk7QUFDYixVQUFJbUcsS0FBSyxHQUFHc3BCLHdCQUF3QixDQUFDLElBQUQsQ0FBcEM7QUFDQSxVQUFJbGIsSUFBSSxHQUFHcE8sS0FBSyxDQUFDb08sSUFBakI7QUFDQSxVQUFJNGEsS0FBSyxHQUFHaHBCLEtBQUssQ0FBQzZvQixJQUFsQixDQUhhOztBQUtiLGFBQU9HLEtBQUssSUFBSUEsS0FBSyxDQUFDRyxPQUF0QixFQUErQkgsS0FBSyxHQUFHQSxLQUFLLENBQUNFLFFBQWQsQ0FMbEI7OztBQU9iLFVBQUksQ0FBQ2xwQixLQUFLLENBQUN1RCxNQUFQLElBQWlCLEVBQUV2RCxLQUFLLENBQUM2b0IsSUFBTixHQUFhRyxLQUFLLEdBQUdBLEtBQUssR0FBR0EsS0FBSyxDQUFDOVosSUFBVCxHQUFnQmxQLEtBQUssQ0FBQ0EsS0FBTixDQUFZa2lCLEtBQXhELENBQXJCLEVBQXFGO0FBQ25GO0FBQ0FsaUIsUUFBQUEsS0FBSyxDQUFDdUQsTUFBTixHQUFlMUosU0FBZjtBQUNBLGVBQU87QUFBRVAsVUFBQUEsS0FBSyxFQUFFTyxTQUFUO0FBQW9CMFYsVUFBQUEsSUFBSSxFQUFFO0FBQTFCLFNBQVA7QUFDRCxPQVhZOzs7QUFhYixVQUFJbkIsSUFBSSxJQUFJLE1BQVosRUFBb0IsT0FBTztBQUFFOVUsUUFBQUEsS0FBSyxFQUFFMHZCLEtBQUssQ0FBQzVzQixHQUFmO0FBQW9CbVQsUUFBQUEsSUFBSSxFQUFFO0FBQTFCLE9BQVA7QUFDcEIsVUFBSW5CLElBQUksSUFBSSxRQUFaLEVBQXNCLE9BQU87QUFBRTlVLFFBQUFBLEtBQUssRUFBRTB2QixLQUFLLENBQUMxdkIsS0FBZjtBQUFzQmlXLFFBQUFBLElBQUksRUFBRTtBQUE1QixPQUFQO0FBQ3RCLGFBQU87QUFBRWpXLFFBQUFBLEtBQUssRUFBRSxDQUFDMHZCLEtBQUssQ0FBQzVzQixHQUFQLEVBQVk0c0IsS0FBSyxDQUFDMXZCLEtBQWxCLENBQVQ7QUFBbUNpVyxRQUFBQSxJQUFJLEVBQUU7QUFBekMsT0FBUDtBQUNELEtBeEJhLEVBd0JYdEcsTUFBTSxHQUFHLFNBQUgsR0FBZSxRQXhCVixFQXdCb0IsQ0FBQ0EsTUF4QnJCLEVBd0I2QixJQXhCN0IsQ0FBZCxDQWJnRDtBQXdDaEQ7QUFDQTs7QUFDQXNSLElBQUFBLFlBQVUsQ0FBQ0QsZ0JBQUQsQ0FBVjtBQUNEO0FBeExjLENBQWpCOztBQ2ZBLElBQUlpUCxZQUFVLEdBQUc5d0IsWUFBakI7O0FBQ0EsSUFBSSt3QixrQkFBZ0IsR0FBRy93QixrQkFBdkI7QUFHQTs7O0lBQ0FULE1BQUEsR0FBaUJ1eEIsWUFBVSxDQUFDLEtBQUQsRUFBUSxVQUFVRSxJQUFWLEVBQWdCO0FBQ2pELFNBQU8sU0FBU0MsR0FBVCxHQUFlO0FBQUUsV0FBT0QsSUFBSSxDQUFDLElBQUQsRUFBT252QixTQUFTLENBQUNDLE1BQVYsR0FBbUJELFNBQVMsQ0FBQyxDQUFELENBQTVCLEdBQWtDVCxTQUF6QyxDQUFYO0FBQWlFLEdBQXpGO0FBQ0QsQ0FGMEIsRUFFeEIydkIsa0JBRndCLENBQTNCOztBQ05BLElBQUlyTyxLQUFHLEdBQUdwakIsSUFBSSxDQUFDb2pCLEdBQWY7QUFHQTtBQUNBOztJQUNBbmpCLFNBQUEsR0FBaUJELElBQUksQ0FBQzR4QixLQUFMLElBQWMsU0FBU0EsS0FBVCxDQUFlMVAsQ0FBZixFQUFrQjtBQUMvQyxTQUFPLENBQUNBLENBQUMsR0FBRyxDQUFDQSxDQUFOLElBQVcsQ0FBQyxJQUFaLElBQW9CQSxDQUFDLEdBQUcsSUFBeEIsR0FBK0JBLENBQUMsR0FBR0EsQ0FBQyxHQUFHQSxDQUFKLEdBQVEsQ0FBM0MsR0FBK0NrQixLQUFHLENBQUMsSUFBSWxCLENBQUwsQ0FBekQ7QUFDRCxDQUZEOztBQ0xBLElBQUk5UCxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlreEIsT0FBSyxHQUFHbHhCLFNBQVo7OztBQUdBLElBQUlteEIsTUFBTSxHQUFHN3hCLElBQUksQ0FBQzh4QixLQUFsQjtBQUNBLElBQUkxTyxLQUFHLEdBQUdwakIsSUFBSSxDQUFDb2pCLEdBQWY7QUFDQSxJQUFJMk8sTUFBSSxHQUFHL3hCLElBQUksQ0FBQyt4QixJQUFoQjtBQUNBLElBQUkxTyxLQUFHLEdBQUdyakIsSUFBSSxDQUFDcWpCLEdBQWY7QUFFQSxJQUFJNVcsUUFBTSxHQUFHLENBQUNvbEIsTUFBRDtBQUFBLEdBRVI3eEIsSUFBSSxDQUFDNEosS0FBTCxDQUFXaW9CLE1BQU0sQ0FBQ0csTUFBTSxDQUFDQyxTQUFSLENBQWpCLEtBQXdDLEdBRmhDO0FBQUEsR0FJUkosTUFBTSxDQUFDNU4sUUFBRCxDQUFOLElBQW9CQSxRQUp6QjtBQU9BOztBQUNBN1IsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsTUFBVjtBQUFrQmdCLEVBQUFBLElBQUksRUFBRSxJQUF4QjtBQUE4QkksRUFBQUEsTUFBTSxFQUFFSDtBQUF0QyxDQUFELEVBQWlEO0FBQ2hEcWxCLEVBQUFBLEtBQUssRUFBRSxTQUFTQSxLQUFULENBQWU1UCxDQUFmLEVBQWtCO0FBQ3ZCLFdBQU8sQ0FBQ0EsQ0FBQyxHQUFHLENBQUNBLENBQU4sSUFBVyxDQUFYLEdBQWVrQyxHQUFmLEdBQXFCbEMsQ0FBQyxHQUFHLGlCQUFKLEdBQ3hCa0IsS0FBRyxDQUFDbEIsQ0FBRCxDQUFILEdBQVNtQixLQURlLEdBRXhCdU8sT0FBSyxDQUFDMVAsQ0FBQyxHQUFHLENBQUosR0FBUTZQLE1BQUksQ0FBQzdQLENBQUMsR0FBRyxDQUFMLENBQUosR0FBYzZQLE1BQUksQ0FBQzdQLENBQUMsR0FBRyxDQUFMLENBQTNCLENBRlQ7QUFHRDtBQUwrQyxDQUFqRCxDQUFEOztBQ2pCQSxJQUFJOVAsSUFBQyxHQUFHMVIsT0FBUjs7O0FBR0EsSUFBSXd4QixNQUFNLEdBQUdseUIsSUFBSSxDQUFDbXlCLEtBQWxCO0FBQ0EsSUFBSS9PLEtBQUcsR0FBR3BqQixJQUFJLENBQUNvakIsR0FBZjtBQUNBLElBQUkyTyxNQUFJLEdBQUcveEIsSUFBSSxDQUFDK3hCLElBQWhCOztBQUVBLFNBQVNJLEtBQVQsQ0FBZWpRLENBQWYsRUFBa0I7QUFDaEIsU0FBTyxDQUFDOEosUUFBUSxDQUFDOUosQ0FBQyxHQUFHLENBQUNBLENBQU4sQ0FBVCxJQUFxQkEsQ0FBQyxJQUFJLENBQTFCLEdBQThCQSxDQUE5QixHQUFrQ0EsQ0FBQyxHQUFHLENBQUosR0FBUSxDQUFDaVEsS0FBSyxDQUFDLENBQUNqUSxDQUFGLENBQWQsR0FBcUJrQixLQUFHLENBQUNsQixDQUFDLEdBQUc2UCxNQUFJLENBQUM3UCxDQUFDLEdBQUdBLENBQUosR0FBUSxDQUFULENBQVQsQ0FBakU7QUFDRDtBQUdEO0FBQ0E7OztBQUNBOVAsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsTUFBVjtBQUFrQmdCLEVBQUFBLElBQUksRUFBRSxJQUF4QjtBQUE4QkksRUFBQUEsTUFBTSxFQUFFLEVBQUVzbEIsTUFBTSxJQUFJLElBQUlBLE1BQU0sQ0FBQyxDQUFELENBQVYsR0FBZ0IsQ0FBNUI7QUFBdEMsQ0FBRCxFQUF5RTtBQUN4RUMsRUFBQUEsS0FBSyxFQUFFQTtBQURpRSxDQUF6RSxDQUFEOztBQ2RBLElBQUkvZixJQUFDLEdBQUcxUixPQUFSOzs7QUFHQSxJQUFJMHhCLE1BQU0sR0FBR3B5QixJQUFJLENBQUNxeUIsS0FBbEI7QUFDQSxJQUFJalAsS0FBRyxHQUFHcGpCLElBQUksQ0FBQ29qQixHQUFmO0FBR0E7QUFDQTs7QUFDQWhSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLE1BQVY7QUFBa0JnQixFQUFBQSxJQUFJLEVBQUUsSUFBeEI7QUFBOEJJLEVBQUFBLE1BQU0sRUFBRSxFQUFFd2xCLE1BQU0sSUFBSSxJQUFJQSxNQUFNLENBQUMsQ0FBQyxDQUFGLENBQVYsR0FBaUIsQ0FBN0I7QUFBdEMsQ0FBRCxFQUEwRTtBQUN6RUMsRUFBQUEsS0FBSyxFQUFFLFNBQVNBLEtBQVQsQ0FBZW5RLENBQWYsRUFBa0I7QUFDdkIsV0FBTyxDQUFDQSxDQUFDLEdBQUcsQ0FBQ0EsQ0FBTixLQUFZLENBQVosR0FBZ0JBLENBQWhCLEdBQW9Ca0IsS0FBRyxDQUFDLENBQUMsSUFBSWxCLENBQUwsS0FBVyxJQUFJQSxDQUFmLENBQUQsQ0FBSCxHQUF5QixDQUFwRDtBQUNEO0FBSHdFLENBQTFFLENBQUQ7O0FDVEE7QUFDQTtBQUNBO0lBQ0FqaUIsUUFBQSxHQUFpQkQsSUFBSSxDQUFDOGpCLElBQUwsSUFBYSxTQUFTQSxJQUFULENBQWM1QixDQUFkLEVBQWlCO0FBQzdDO0FBQ0EsU0FBTyxDQUFDQSxDQUFDLEdBQUcsQ0FBQ0EsQ0FBTixLQUFZLENBQVosSUFBaUJBLENBQUMsSUFBSUEsQ0FBdEIsR0FBMEJBLENBQTFCLEdBQThCQSxDQUFDLEdBQUcsQ0FBSixHQUFRLENBQUMsQ0FBVCxHQUFhLENBQWxEO0FBQ0QsQ0FIRDs7QUNIQSxJQUFJOVAsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJb2pCLE1BQUksR0FBR3BqQixRQUFYOztBQUVBLElBQUl3aUIsS0FBRyxHQUFHbGpCLElBQUksQ0FBQ2tqQixHQUFmO0FBQ0EsSUFBSUMsS0FBRyxHQUFHbmpCLElBQUksQ0FBQ21qQixHQUFmO0FBR0E7O0FBQ0EvUSxJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxNQUFWO0FBQWtCZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQXhCLENBQUQsRUFBaUM7QUFDaEM4bEIsRUFBQUEsSUFBSSxFQUFFLFNBQVNBLElBQVQsQ0FBY3BRLENBQWQsRUFBaUI7QUFDckIsV0FBTzRCLE1BQUksQ0FBQzVCLENBQUMsR0FBRyxDQUFDQSxDQUFOLENBQUosR0FBZWlCLEtBQUcsQ0FBQ0QsS0FBRyxDQUFDaEIsQ0FBRCxDQUFKLEVBQVMsSUFBSSxDQUFiLENBQXpCO0FBQ0Q7QUFIK0IsQ0FBakMsQ0FBRDs7QUNSQSxJQUFJOVAsSUFBQyxHQUFHMVIsT0FBUjs7QUFFQSxJQUFJa0osT0FBSyxHQUFHNUosSUFBSSxDQUFDNEosS0FBakI7QUFDQSxJQUFJd1osS0FBRyxHQUFHcGpCLElBQUksQ0FBQ29qQixHQUFmO0FBQ0EsSUFBSW1QLEtBQUssR0FBR3Z5QixJQUFJLENBQUN1eUIsS0FBakI7QUFHQTs7QUFDQW5nQixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxNQUFWO0FBQWtCZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQXhCLENBQUQsRUFBaUM7QUFDaENnbUIsRUFBQUEsS0FBSyxFQUFFLFNBQVNBLEtBQVQsQ0FBZXRRLENBQWYsRUFBa0I7QUFDdkIsV0FBTyxDQUFDQSxDQUFDLE1BQU0sQ0FBUixJQUFhLEtBQUt0WSxPQUFLLENBQUN3WixLQUFHLENBQUNsQixDQUFDLEdBQUcsR0FBTCxDQUFILEdBQWVxUSxLQUFoQixDQUF2QixHQUFnRCxFQUF2RDtBQUNEO0FBSCtCLENBQWpDLENBQUQ7O0FDUkE7QUFDQSxJQUFJRSxNQUFNLEdBQUd6eUIsSUFBSSxDQUFDMHlCLEtBQWxCO0FBQ0EsSUFBSUMsS0FBRyxHQUFHM3lCLElBQUksQ0FBQzJ5QixHQUFmO0FBR0E7O0lBQ0ExeUIsU0FBQSxHQUFrQixDQUFDd3lCLE1BQUQ7QUFBQSxHQUViQSxNQUFNLENBQUMsRUFBRCxDQUFOLEdBQWEsa0JBRkEsSUFFc0JBLE1BQU0sQ0FBQyxFQUFELENBQU4sR0FBYSxzQkFGbkM7QUFBQSxHQUliQSxNQUFNLENBQUMsQ0FBQyxLQUFGLENBQU4sSUFBa0IsQ0FBQyxLQUpQLEdBS2IsU0FBU0MsS0FBVCxDQUFleFEsQ0FBZixFQUFrQjtBQUNwQixTQUFPLENBQUNBLENBQUMsR0FBRyxDQUFDQSxDQUFOLEtBQVksQ0FBWixHQUFnQkEsQ0FBaEIsR0FBb0JBLENBQUMsR0FBRyxDQUFDLElBQUwsSUFBYUEsQ0FBQyxHQUFHLElBQWpCLEdBQXdCQSxDQUFDLEdBQUdBLENBQUMsR0FBR0EsQ0FBSixHQUFRLENBQXBDLEdBQXdDeVEsS0FBRyxDQUFDelEsQ0FBRCxDQUFILEdBQVMsQ0FBNUU7QUFDRCxDQVBnQixHQU9idVEsTUFQSjs7QUNOQSxJQUFJcmdCLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSWd5QixPQUFLLEdBQUdoeUIsU0FBWjs7O0FBR0EsSUFBSWt5QixLQUFLLEdBQUc1eUIsSUFBSSxDQUFDNnlCLElBQWpCO0FBQ0EsSUFBSTNQLEtBQUcsR0FBR2xqQixJQUFJLENBQUNrakIsR0FBZjtBQUNBLElBQUkxSixHQUFDLEdBQUd4WixJQUFJLENBQUN3WixDQUFiO0FBR0E7O0FBQ0FwSCxJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxNQUFWO0FBQWtCZ0IsRUFBQUEsSUFBSSxFQUFFLElBQXhCO0FBQThCSSxFQUFBQSxNQUFNLEVBQUUsQ0FBQ2dtQixLQUFELElBQVVBLEtBQUssQ0FBQyxHQUFELENBQUwsS0FBZTNPO0FBQS9ELENBQUQsRUFBNEU7QUFDM0U0TyxFQUFBQSxJQUFJLEVBQUUsU0FBU0EsSUFBVCxDQUFjM1EsQ0FBZCxFQUFpQjtBQUNyQixRQUFJNFEsQ0FBQyxHQUFHSixPQUFLLENBQUN4UCxLQUFHLENBQUNoQixDQUFELENBQUgsR0FBUyxDQUFWLENBQUwsR0FBb0IsQ0FBNUI7QUFDQSxXQUFPLENBQUM0USxDQUFDLEdBQUcsS0FBS0EsQ0FBQyxHQUFHdFosR0FBSixHQUFRQSxHQUFiLENBQUwsS0FBeUJBLEdBQUMsR0FBRyxDQUE3QixDQUFQO0FBQ0Q7QUFKMEUsQ0FBNUUsQ0FBRDs7QUNWQSxJQUFJcEgsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJZ3lCLE9BQUssR0FBR2h5QixTQUFaO0FBR0E7QUFDQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxNQUFWO0FBQWtCZ0IsRUFBQUEsSUFBSSxFQUFFLElBQXhCO0FBQThCSSxFQUFBQSxNQUFNLEVBQUU4bEIsT0FBSyxJQUFJMXlCLElBQUksQ0FBQzB5QjtBQUFwRCxDQUFELEVBQThEO0FBQUVBLEVBQUFBLEtBQUssRUFBRUE7QUFBVCxDQUE5RCxDQUFEOztBQ05BLElBQUk1TyxNQUFJLEdBQUdwakIsUUFBWDs7QUFFQSxJQUFJd2lCLEtBQUcsR0FBR2xqQixJQUFJLENBQUNrakIsR0FBZjtBQUNBLElBQUlDLEtBQUcsR0FBR25qQixJQUFJLENBQUNtakIsR0FBZjtBQUNBLElBQUk0UCxPQUFPLEdBQUc1UCxLQUFHLENBQUMsQ0FBRCxFQUFJLENBQUMsRUFBTCxDQUFqQjtBQUNBLElBQUk2UCxTQUFTLEdBQUc3UCxLQUFHLENBQUMsQ0FBRCxFQUFJLENBQUMsRUFBTCxDQUFuQjtBQUNBLElBQUk4UCxLQUFLLEdBQUc5UCxLQUFHLENBQUMsQ0FBRCxFQUFJLEdBQUosQ0FBSCxJQUFlLElBQUk2UCxTQUFuQixDQUFaO0FBQ0EsSUFBSUUsS0FBSyxHQUFHL1AsS0FBRyxDQUFDLENBQUQsRUFBSSxDQUFDLEdBQUwsQ0FBZjs7QUFFQSxJQUFJZ1EsZUFBZSxHQUFHLFVBQVU1WixDQUFWLEVBQWE7QUFDakMsU0FBT0EsQ0FBQyxHQUFHLElBQUl3WixPQUFSLEdBQWtCLElBQUlBLE9BQTdCO0FBQ0QsQ0FGRDtBQUtBO0FBQ0E7OztJQUNBOXlCLFVBQUEsR0FBaUJELElBQUksQ0FBQ296QixNQUFMLElBQWUsU0FBU0EsTUFBVCxDQUFnQmxSLENBQWhCLEVBQW1CO0FBQ2pELE1BQUltUixJQUFJLEdBQUduUSxLQUFHLENBQUNoQixDQUFELENBQWQ7QUFDQSxNQUFJb1IsS0FBSyxHQUFHeFAsTUFBSSxDQUFDNUIsQ0FBRCxDQUFoQjtBQUNBLE1BQUk5YixDQUFKLEVBQU9OLE1BQVA7QUFDQSxNQUFJdXRCLElBQUksR0FBR0gsS0FBWCxFQUFrQixPQUFPSSxLQUFLLEdBQUdILGVBQWUsQ0FBQ0UsSUFBSSxHQUFHSCxLQUFQLEdBQWVGLFNBQWhCLENBQXZCLEdBQW9ERSxLQUFwRCxHQUE0REYsU0FBbkU7QUFDbEI1c0IsRUFBQUEsQ0FBQyxHQUFHLENBQUMsSUFBSTRzQixTQUFTLEdBQUdELE9BQWpCLElBQTRCTSxJQUFoQztBQUNBdnRCLEVBQUFBLE1BQU0sR0FBR00sQ0FBQyxJQUFJQSxDQUFDLEdBQUdpdEIsSUFBUixDQUFWLENBTmlEOztBQVFqRCxNQUFJdnRCLE1BQU0sR0FBR210QixLQUFULElBQWtCbnRCLE1BQU0sSUFBSUEsTUFBaEMsRUFBd0MsT0FBT3d0QixLQUFLLEdBQUdyUCxRQUFmO0FBQ3hDLFNBQU9xUCxLQUFLLEdBQUd4dEIsTUFBZjtBQUNELENBVkQ7O0FDaEJBLElBQUlzTSxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUkweUIsUUFBTSxHQUFHMXlCLFVBQWI7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxNQUFWO0FBQWtCZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQXhCLENBQUQsRUFBaUM7QUFBRTRtQixFQUFBQSxNQUFNLEVBQUVBO0FBQVYsQ0FBakMsQ0FBRDs7QUNMQSxJQUFJaGhCLElBQUMsR0FBRzFSLE9BQVI7OztBQUdBLElBQUk2eUIsTUFBTSxHQUFHdnpCLElBQUksQ0FBQ3d6QixLQUFsQjtBQUNBLElBQUl0USxLQUFHLEdBQUdsakIsSUFBSSxDQUFDa2pCLEdBQWY7QUFDQSxJQUFJNk8sSUFBSSxHQUFHL3hCLElBQUksQ0FBQyt4QixJQUFoQjtBQUdBOztBQUNBLElBQUkwQixLQUFLLEdBQUcsQ0FBQyxDQUFDRixNQUFGLElBQVlBLE1BQU0sQ0FBQ3RQLFFBQUQsRUFBV0csR0FBWCxDQUFOLEtBQTBCSCxRQUFsRDtBQUdBOztBQUNBN1IsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsTUFBVjtBQUFrQmdCLEVBQUFBLElBQUksRUFBRSxJQUF4QjtBQUE4QkksRUFBQUEsTUFBTSxFQUFFNm1CO0FBQXRDLENBQUQsRUFBZ0Q7QUFDL0M7QUFDQUQsRUFBQUEsS0FBSyxFQUFFLFNBQVNBLEtBQVQsQ0FBZUUsTUFBZixFQUF1QkMsTUFBdkIsRUFBK0I7QUFDcEMsUUFBSUMsR0FBRyxHQUFHLENBQVY7QUFDQSxRQUFJN29CLENBQUMsR0FBRyxDQUFSO0FBQ0EsUUFBSThvQixJQUFJLEdBQUd0eEIsU0FBUyxDQUFDQyxNQUFyQjtBQUNBLFFBQUlzeEIsSUFBSSxHQUFHLENBQVg7QUFDQSxRQUFJemEsR0FBSixFQUFTMGEsR0FBVDs7QUFDQSxXQUFPaHBCLENBQUMsR0FBRzhvQixJQUFYLEVBQWlCO0FBQ2Z4YSxNQUFBQSxHQUFHLEdBQUc2SixLQUFHLENBQUMzZ0IsU0FBUyxDQUFDd0ksQ0FBQyxFQUFGLENBQVYsQ0FBVDs7QUFDQSxVQUFJK29CLElBQUksR0FBR3phLEdBQVgsRUFBZ0I7QUFDZDBhLFFBQUFBLEdBQUcsR0FBR0QsSUFBSSxHQUFHemEsR0FBYjtBQUNBdWEsUUFBQUEsR0FBRyxHQUFHQSxHQUFHLEdBQUdHLEdBQU4sR0FBWUEsR0FBWixHQUFrQixDQUF4QjtBQUNBRCxRQUFBQSxJQUFJLEdBQUd6YSxHQUFQO0FBQ0QsT0FKRCxNQUlPLElBQUlBLEdBQUcsR0FBRyxDQUFWLEVBQWE7QUFDbEIwYSxRQUFBQSxHQUFHLEdBQUcxYSxHQUFHLEdBQUd5YSxJQUFaO0FBQ0FGLFFBQUFBLEdBQUcsSUFBSUcsR0FBRyxHQUFHQSxHQUFiO0FBQ0QsT0FITSxNQUdBSCxHQUFHLElBQUl2YSxHQUFQO0FBQ1I7O0FBQ0QsV0FBT3lhLElBQUksS0FBSzdQLFFBQVQsR0FBb0JBLFFBQXBCLEdBQStCNlAsSUFBSSxHQUFHL0IsSUFBSSxDQUFDNkIsR0FBRCxDQUFqRDtBQUNEO0FBcEI4QyxDQUFoRCxDQUFEOztBQ2JBLElBQUl4aEIsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJRCxPQUFLLEdBQUdDLFFBQVo7OztBQUdBLElBQUlzekIsS0FBSyxHQUFHaDBCLElBQUksQ0FBQ2kwQixJQUFqQjtBQUVBLElBQUl4bkIsUUFBTSxHQUFHaE0sT0FBSyxDQUFDLFlBQVk7QUFDN0IsU0FBT3V6QixLQUFLLENBQUMsVUFBRCxFQUFhLENBQWIsQ0FBTCxJQUF3QixDQUFDLENBQXpCLElBQThCQSxLQUFLLENBQUN4eEIsTUFBTixJQUFnQixDQUFyRDtBQUNELENBRmlCLENBQWxCO0FBS0E7QUFDQTs7QUFDQTRQLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLE1BQVY7QUFBa0JnQixFQUFBQSxJQUFJLEVBQUUsSUFBeEI7QUFBOEJJLEVBQUFBLE1BQU0sRUFBRUg7QUFBdEMsQ0FBRCxFQUFpRDtBQUNoRHduQixFQUFBQSxJQUFJLEVBQUUsU0FBU0EsSUFBVCxDQUFjL1IsQ0FBZCxFQUFpQkMsQ0FBakIsRUFBb0I7QUFDeEIsUUFBSStSLE1BQU0sR0FBRyxNQUFiO0FBQ0EsUUFBSUMsRUFBRSxHQUFHLENBQUNqUyxDQUFWO0FBQ0EsUUFBSWtTLEVBQUUsR0FBRyxDQUFDalMsQ0FBVjtBQUNBLFFBQUlrUyxFQUFFLEdBQUdILE1BQU0sR0FBR0MsRUFBbEI7QUFDQSxRQUFJRyxFQUFFLEdBQUdKLE1BQU0sR0FBR0UsRUFBbEI7QUFDQSxXQUFPLElBQUlDLEVBQUUsR0FBR0MsRUFBTCxJQUFXLENBQUNKLE1BQU0sR0FBR0MsRUFBRSxLQUFLLEVBQWpCLElBQXVCRyxFQUF2QixHQUE0QkQsRUFBRSxJQUFJSCxNQUFNLEdBQUdFLEVBQUUsS0FBSyxFQUFwQixDQUE5QixJQUF5RCxFQUF6RCxLQUFnRSxDQUEzRSxDQUFYO0FBQ0Q7QUFSK0MsQ0FBakQsQ0FBRDs7QUNiQSxJQUFJaGlCLElBQUMsR0FBRzFSLE9BQVI7O0FBRUEsSUFBSTBpQixLQUFHLEdBQUdwakIsSUFBSSxDQUFDb2pCLEdBQWY7QUFDQSxJQUFJbVIsTUFBTSxHQUFHdjBCLElBQUksQ0FBQ3UwQixNQUFsQjtBQUdBOztBQUNBbmlCLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLE1BQVY7QUFBa0JnQixFQUFBQSxJQUFJLEVBQUU7QUFBeEIsQ0FBRCxFQUFpQztBQUNoQ2dvQixFQUFBQSxLQUFLLEVBQUUsU0FBU0EsS0FBVCxDQUFldFMsQ0FBZixFQUFrQjtBQUN2QixXQUFPa0IsS0FBRyxDQUFDbEIsQ0FBRCxDQUFILEdBQVNxUyxNQUFoQjtBQUNEO0FBSCtCLENBQWpDLENBQUQ7O0FDUEEsSUFBSW5pQixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlreEIsS0FBSyxHQUFHbHhCLFNBQVo7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxNQUFWO0FBQWtCZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQXhCLENBQUQsRUFBaUM7QUFBRW9sQixFQUFBQSxLQUFLLEVBQUVBO0FBQVQsQ0FBakMsQ0FBRDs7QUNMQSxJQUFJeGYsSUFBQyxHQUFHMVIsT0FBUjs7QUFFQSxJQUFJMGlCLEtBQUcsR0FBR3BqQixJQUFJLENBQUNvakIsR0FBZjtBQUNBLElBQUlDLEdBQUcsR0FBR3JqQixJQUFJLENBQUNxakIsR0FBZjtBQUdBOztBQUNBalIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsTUFBVjtBQUFrQmdCLEVBQUFBLElBQUksRUFBRTtBQUF4QixDQUFELEVBQWlDO0FBQ2hDaW9CLEVBQUFBLElBQUksRUFBRSxTQUFTQSxJQUFULENBQWN2UyxDQUFkLEVBQWlCO0FBQ3JCLFdBQU9rQixLQUFHLENBQUNsQixDQUFELENBQUgsR0FBU21CLEdBQWhCO0FBQ0Q7QUFIK0IsQ0FBakMsQ0FBRDs7QUNQQSxJQUFJalIsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJb2pCLElBQUksR0FBR3BqQixRQUFYO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsTUFBVjtBQUFrQmdCLEVBQUFBLElBQUksRUFBRTtBQUF4QixDQUFELEVBQWlDO0FBQ2hDc1gsRUFBQUEsSUFBSSxFQUFFQTtBQUQwQixDQUFqQyxDQUFEOztBQ0xBLElBQUkxUixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlELE9BQUssR0FBR0MsUUFBWjs7QUFDQSxJQUFJZ3lCLE9BQUssR0FBR2h5QixTQUFaOztBQUVBLElBQUl3aUIsS0FBRyxHQUFHbGpCLElBQUksQ0FBQ2tqQixHQUFmO0FBQ0EsSUFBSXlQLEtBQUcsR0FBRzN5QixJQUFJLENBQUMyeUIsR0FBZjtBQUNBLElBQUluWixDQUFDLEdBQUd4WixJQUFJLENBQUN3WixDQUFiO0FBRUEsSUFBSS9NLFFBQU0sR0FBR2hNLE9BQUssQ0FBQyxZQUFZO0FBQzdCO0FBQ0EsU0FBT1QsSUFBSSxDQUFDMDBCLElBQUwsQ0FBVSxDQUFDLEtBQVgsS0FBcUIsQ0FBQyxLQUE3QjtBQUNELENBSGlCLENBQWxCO0FBTUE7QUFDQTs7QUFDQXRpQixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxNQUFWO0FBQWtCZ0IsRUFBQUEsSUFBSSxFQUFFLElBQXhCO0FBQThCSSxFQUFBQSxNQUFNLEVBQUVIO0FBQXRDLENBQUQsRUFBaUQ7QUFDaERpb0IsRUFBQUEsSUFBSSxFQUFFLFNBQVNBLElBQVQsQ0FBY3hTLENBQWQsRUFBaUI7QUFDckIsV0FBT2dCLEtBQUcsQ0FBQ2hCLENBQUMsR0FBRyxDQUFDQSxDQUFOLENBQUgsR0FBYyxDQUFkLEdBQWtCLENBQUN3USxPQUFLLENBQUN4USxDQUFELENBQUwsR0FBV3dRLE9BQUssQ0FBQyxDQUFDeFEsQ0FBRixDQUFqQixJQUF5QixDQUEzQyxHQUErQyxDQUFDeVEsS0FBRyxDQUFDelEsQ0FBQyxHQUFHLENBQUwsQ0FBSCxHQUFheVEsS0FBRyxDQUFDLENBQUN6USxDQUFELEdBQUssQ0FBTixDQUFqQixLQUE4QjFJLENBQUMsR0FBRyxDQUFsQyxDQUF0RDtBQUNEO0FBSCtDLENBQWpELENBQUQ7O0FDaEJBLElBQUlwSCxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlneUIsS0FBSyxHQUFHaHlCLFNBQVo7O0FBRUEsSUFBSWl5QixHQUFHLEdBQUczeUIsSUFBSSxDQUFDMnlCLEdBQWY7QUFHQTs7QUFDQXZnQixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxNQUFWO0FBQWtCZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQXhCLENBQUQsRUFBaUM7QUFDaENtb0IsRUFBQUEsSUFBSSxFQUFFLFNBQVNBLElBQVQsQ0FBY3pTLENBQWQsRUFBaUI7QUFDckIsUUFBSTliLENBQUMsR0FBR3NzQixLQUFLLENBQUN4USxDQUFDLEdBQUcsQ0FBQ0EsQ0FBTixDQUFiO0FBQ0EsUUFBSWxTLENBQUMsR0FBRzBpQixLQUFLLENBQUMsQ0FBQ3hRLENBQUYsQ0FBYjtBQUNBLFdBQU85YixDQUFDLElBQUk2ZCxRQUFMLEdBQWdCLENBQWhCLEdBQW9CalUsQ0FBQyxJQUFJaVUsUUFBTCxHQUFnQixDQUFDLENBQWpCLEdBQXFCLENBQUM3ZCxDQUFDLEdBQUc0SixDQUFMLEtBQVcyaUIsR0FBRyxDQUFDelEsQ0FBRCxDQUFILEdBQVN5USxHQUFHLENBQUMsQ0FBQ3pRLENBQUYsQ0FBdkIsQ0FBaEQ7QUFDRDtBQUwrQixDQUFqQyxDQUFEOztBQ1BBLElBQUl6UCxnQkFBYyxHQUFHL1IsZ0JBQXJCO0FBR0E7OztBQUNBK1IsZ0JBQWMsQ0FBQ3pTLElBQUQsRUFBTyxNQUFQLEVBQWUsSUFBZixDQUFkOztBQ0pBLElBQUlvUyxJQUFDLEdBQUcxUixPQUFSOztBQUVBLElBQUlpSixJQUFJLEdBQUczSixJQUFJLENBQUMySixJQUFoQjtBQUNBLElBQUlDLE9BQUssR0FBRzVKLElBQUksQ0FBQzRKLEtBQWpCO0FBR0E7O0FBQ0F3SSxJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxNQUFWO0FBQWtCZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQXhCLENBQUQsRUFBaUM7QUFDaENvb0IsRUFBQUEsS0FBSyxFQUFFLFNBQVNBLEtBQVQsQ0FBZTcwQixFQUFmLEVBQW1CO0FBQ3hCLFdBQU8sQ0FBQ0EsRUFBRSxHQUFHLENBQUwsR0FBUzZKLE9BQVQsR0FBaUJELElBQWxCLEVBQXdCNUosRUFBeEIsQ0FBUDtBQUNEO0FBSCtCLENBQWpDLENBQUQ7O0FDUEEsSUFBSXFFLE9BQU8sR0FBRyxJQUFJQSxPQUFsQjtBQUdBOztJQUNBbkUsaUJBQUEsR0FBaUIsVUFBVXNCLEtBQVYsRUFBaUI7QUFDaEMsU0FBTzZDLE9BQU8sQ0FBQ2xELElBQVIsQ0FBYUssS0FBYixDQUFQO0FBQ0QsQ0FGRDs7QUNKQTtJQUNBdEIsYUFBQSxHQUFpQix1RUFDZixzRkFERjs7QUNEQSxJQUFJZ0Msd0JBQXNCLEdBQUd2Qix3QkFBN0I7O0FBQ0EsSUFBSWdCLFVBQVEsR0FBR2hCLFVBQWY7O0FBQ0EsSUFBSW0wQixhQUFXLEdBQUduMEIsYUFBbEI7O0FBRUEsSUFBSW8wQixVQUFVLEdBQUcsTUFBTUQsYUFBTixHQUFvQixHQUFyQztBQUNBLElBQUlFLEtBQUssR0FBR0MsTUFBTSxDQUFDLE1BQU1GLFVBQU4sR0FBbUJBLFVBQW5CLEdBQWdDLEdBQWpDLENBQWxCO0FBQ0EsSUFBSUcsS0FBSyxHQUFHRCxNQUFNLENBQUNGLFVBQVUsR0FBR0EsVUFBYixHQUEwQixJQUEzQixDQUFsQjs7QUFHQSxJQUFJdnFCLGNBQVksR0FBRyxVQUFVdkMsSUFBVixFQUFnQjtBQUNqQyxTQUFPLFVBQVV5QyxLQUFWLEVBQWlCO0FBQ3RCLFFBQUl3QixNQUFNLEdBQUd2SyxVQUFRLENBQUNPLHdCQUFzQixDQUFDd0ksS0FBRCxDQUF2QixDQUFyQjtBQUNBLFFBQUl6QyxJQUFJLEdBQUcsQ0FBWCxFQUFjaUUsTUFBTSxHQUFHQSxNQUFNLENBQUN6QyxPQUFQLENBQWV1ckIsS0FBZixFQUFzQixFQUF0QixDQUFUO0FBQ2QsUUFBSS9zQixJQUFJLEdBQUcsQ0FBWCxFQUFjaUUsTUFBTSxHQUFHQSxNQUFNLENBQUN6QyxPQUFQLENBQWV5ckIsS0FBZixFQUFzQixFQUF0QixDQUFUO0FBQ2QsV0FBT2hwQixNQUFQO0FBQ0QsR0FMRDtBQU1ELENBUEQ7O0lBU0FoTSxVQUFBLEdBQWlCO0FBQ2Y7QUFDQTtBQUNBeVosRUFBQUEsS0FBSyxFQUFFblAsY0FBWSxDQUFDLENBQUQsQ0FISjtBQUlmO0FBQ0E7QUFDQXNQLEVBQUFBLEdBQUcsRUFBRXRQLGNBQVksQ0FBQyxDQUFELENBTkY7QUFPZjtBQUNBO0FBQ0EycUIsRUFBQUEsSUFBSSxFQUFFM3FCLGNBQVksQ0FBQyxDQUFEO0FBVEgsQ0FBakI7O0FDakJBLElBQUlwRSxhQUFXLEdBQUd6RixXQUFsQjs7QUFDQSxJQUFJTCxRQUFNLEdBQUdLLFFBQWI7O0FBQ0EsSUFBSWdMLFVBQVEsR0FBR2hMLFVBQWY7O0FBQ0EsSUFBSXlMLFVBQVEsR0FBR3pMLGtCQUFmOztBQUNBLElBQUlvRSxRQUFNLEdBQUdwRSxnQkFBYjs7QUFDQSxJQUFJOHVCLG1CQUFpQixHQUFHOXVCLG1CQUF4Qjs7QUFDQSxJQUFJOEUsVUFBUSxHQUFHOUUsVUFBZjs7QUFDQSxJQUFJcUYsV0FBVyxHQUFHckYsYUFBbEI7O0FBQ0EsSUFBSUQsT0FBSyxHQUFHQyxRQUFaOztBQUNBLElBQUl5SyxxQkFBbUIsR0FBR3pLLHlCQUFBLENBQXNEa0csQ0FBaEY7O0FBQ0EsSUFBSTVGLDBCQUF3QixHQUFHTiw4QkFBQSxDQUEyRGtHLENBQTFGOztBQUNBLElBQUloRyxnQkFBYyxHQUFHRixvQkFBQSxDQUErQ2tHLENBQXBFOztBQUNBLElBQUl1dUIsaUJBQWUsR0FBR3owQixpQkFBdEI7O0FBQ0EsSUFBSXcwQixNQUFJLEdBQUd4MEIsVUFBQSxDQUFvQ3cwQixJQUEvQzs7QUFFQSxJQUFJRSxNQUFNLEdBQUcsUUFBYjtBQUNBLElBQUlDLFlBQVksR0FBR2gxQixRQUFNLENBQUMrMEIsTUFBRCxDQUF6QjtBQUNBLElBQUlFLGVBQWUsR0FBR0QsWUFBWSxDQUFDM3NCLFNBQW5DO0FBR0E7O0FBQ0EsSUFBSTZzQixTQUFTLEdBQUcsVUFBVWgwQixLQUFWLEVBQWlCO0FBQy9CLE1BQUlpMEIsU0FBUyxHQUFHenZCLFdBQVcsQ0FBQ3hFLEtBQUQsRUFBUSxRQUFSLENBQTNCO0FBQ0EsU0FBTyxPQUFPaTBCLFNBQVAsS0FBcUIsUUFBckIsR0FBZ0NBLFNBQWhDLEdBQTRDQyxRQUFRLENBQUNELFNBQUQsQ0FBM0Q7QUFDRCxDQUhEO0FBTUE7OztBQUNBLElBQUlDLFFBQVEsR0FBRyxVQUFVdnpCLFFBQVYsRUFBb0I7QUFDakMsTUFBSW5DLEVBQUUsR0FBR2dHLFdBQVcsQ0FBQzdELFFBQUQsRUFBVyxRQUFYLENBQXBCO0FBQ0EsTUFBSWlvQixLQUFKLEVBQVd1TCxLQUFYLEVBQWtCQyxLQUFsQixFQUF5QkMsT0FBekIsRUFBa0NDLE1BQWxDLEVBQTBDcnpCLE1BQTFDLEVBQWtEeUgsS0FBbEQsRUFBeUQyWCxJQUF6RDtBQUNBLE1BQUlwYyxVQUFRLENBQUN6RixFQUFELENBQVosRUFBa0IsTUFBTWdDLFNBQVMsQ0FBQywyQ0FBRCxDQUFmOztBQUNsQixNQUFJLE9BQU9oQyxFQUFQLElBQWEsUUFBYixJQUF5QkEsRUFBRSxDQUFDeUMsTUFBSCxHQUFZLENBQXpDLEVBQTRDO0FBQzFDekMsSUFBQUEsRUFBRSxHQUFHbTFCLE1BQUksQ0FBQ24xQixFQUFELENBQVQ7QUFDQW9xQixJQUFBQSxLQUFLLEdBQUdwcUIsRUFBRSxDQUFDcXRCLFVBQUgsQ0FBYyxDQUFkLENBQVI7O0FBQ0EsUUFBSWpELEtBQUssS0FBSyxFQUFWLElBQWdCQSxLQUFLLEtBQUssRUFBOUIsRUFBa0M7QUFDaEN1TCxNQUFBQSxLQUFLLEdBQUczMUIsRUFBRSxDQUFDcXRCLFVBQUgsQ0FBYyxDQUFkLENBQVI7QUFDQSxVQUFJc0ksS0FBSyxLQUFLLEVBQVYsSUFBZ0JBLEtBQUssS0FBSyxHQUE5QixFQUFtQyxPQUFPdFIsR0FBUCxDQUZIO0FBR2pDLEtBSEQsTUFHTyxJQUFJK0YsS0FBSyxLQUFLLEVBQWQsRUFBa0I7QUFDdkIsY0FBUXBxQixFQUFFLENBQUNxdEIsVUFBSCxDQUFjLENBQWQsQ0FBUjtBQUNFLGFBQUssRUFBTDtBQUFTLGFBQUssRUFBTDtBQUFTdUksVUFBQUEsS0FBSyxHQUFHLENBQVI7QUFBV0MsVUFBQUEsT0FBTyxHQUFHLEVBQVY7QUFBYztBQUFPOztBQUNsRCxhQUFLLEVBQUw7QUFBUyxhQUFLLEdBQUw7QUFBVUQsVUFBQUEsS0FBSyxHQUFHLENBQVI7QUFBV0MsVUFBQUEsT0FBTyxHQUFHLEVBQVY7QUFBYztBQUFPOztBQUNuRDtBQUFTLGlCQUFPLENBQUM3MUIsRUFBUjtBQUhYOztBQUtBODFCLE1BQUFBLE1BQU0sR0FBRzkxQixFQUFFLENBQUM0QixLQUFILENBQVMsQ0FBVCxDQUFUO0FBQ0FhLE1BQUFBLE1BQU0sR0FBR3F6QixNQUFNLENBQUNyekIsTUFBaEI7O0FBQ0EsV0FBS3lILEtBQUssR0FBRyxDQUFiLEVBQWdCQSxLQUFLLEdBQUd6SCxNQUF4QixFQUFnQ3lILEtBQUssRUFBckMsRUFBeUM7QUFDdkMyWCxRQUFBQSxJQUFJLEdBQUdpVSxNQUFNLENBQUN6SSxVQUFQLENBQWtCbmpCLEtBQWxCLENBQVAsQ0FEdUM7QUFHdkM7O0FBQ0EsWUFBSTJYLElBQUksR0FBRyxFQUFQLElBQWFBLElBQUksR0FBR2dVLE9BQXhCLEVBQWlDLE9BQU94UixHQUFQO0FBQ2xDOztBQUFDLGFBQU8wUixRQUFRLENBQUNELE1BQUQsRUFBU0YsS0FBVCxDQUFmO0FBQ0g7QUFDRjs7QUFBQyxTQUFPLENBQUM1MUIsRUFBUjtBQUNILENBMUJEO0FBNkJBOzs7QUFDQSxJQUFJMkwsVUFBUSxDQUFDMHBCLE1BQUQsRUFBUyxDQUFDQyxZQUFZLENBQUMsTUFBRCxDQUFiLElBQXlCLENBQUNBLFlBQVksQ0FBQyxLQUFELENBQXRDLElBQWlEQSxZQUFZLENBQUMsTUFBRCxDQUF0RSxDQUFaLEVBQTZGO0FBQzNGLE1BQUlVLGFBQWEsR0FBRyxTQUFTL0QsTUFBVCxDQUFnQnp3QixLQUFoQixFQUF1QjtBQUN6QyxRQUFJZ1ksQ0FBQyxHQUFHaFgsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCLENBQXZCLEdBQTJCNnlCLFlBQVksQ0FBQ0UsU0FBUyxDQUFDaDBCLEtBQUQsQ0FBVixDQUEvQztBQUNBLFFBQUk0dEIsS0FBSyxHQUFHLElBQVosQ0FGeUM7O0FBSXpDLFdBQU9BLEtBQUssWUFBWTRHLGFBQWpCLElBQWtDdDFCLE9BQUssQ0FBQyxZQUFZO0FBQUUwMEIsTUFBQUEsaUJBQWUsQ0FBQ2hHLEtBQUQsQ0FBZjtBQUF5QixLQUF4QyxDQUF2QyxHQUNISyxtQkFBaUIsQ0FBQzd1QixNQUFNLENBQUM0WSxDQUFELENBQVAsRUFBWTRWLEtBQVosRUFBbUI0RyxhQUFuQixDQURkLEdBQ2tEeGMsQ0FEekQ7QUFFRCxHQU5EOztBQU9BLE9BQUssSUFBSWpTLE1BQUksR0FBR25CLGFBQVcsR0FBR2dGLHFCQUFtQixDQUFDa3FCLFlBQUQsQ0FBdEIsR0FBdUM7QUFFaEU7QUFFQSx5R0FGQTtBQUlBLG9CQU5nRSxFQU9oRXh6QixLQVBnRSxDQU8xRCxHQVAwRCxDQUE3RCxFQU9TNmUsQ0FBQyxHQUFHLENBUGIsRUFPZ0JyYyxHQVByQixFQU8wQmlELE1BQUksQ0FBQzlFLE1BQUwsR0FBY2tlLENBUHhDLEVBTzJDQSxDQUFDLEVBUDVDLEVBT2dEO0FBQzlDLFFBQUk1YixRQUFNLENBQUN1d0IsWUFBRCxFQUFlaHhCLEdBQUcsR0FBR2lELE1BQUksQ0FBQ29aLENBQUQsQ0FBekIsQ0FBTixJQUF1QyxDQUFDNWIsUUFBTSxDQUFDaXhCLGFBQUQsRUFBZ0IxeEIsR0FBaEIsQ0FBbEQsRUFBd0U7QUFDdEV6RCxNQUFBQSxnQkFBYyxDQUFDbTFCLGFBQUQsRUFBZ0IxeEIsR0FBaEIsRUFBcUJyRCwwQkFBd0IsQ0FBQ3EwQixZQUFELEVBQWVoeEIsR0FBZixDQUE3QyxDQUFkO0FBQ0Q7QUFDRjs7QUFDRDB4QixFQUFBQSxhQUFhLENBQUNydEIsU0FBZCxHQUEwQjRzQixlQUExQjtBQUNBQSxFQUFBQSxlQUFlLENBQUN4a0IsV0FBaEIsR0FBOEJpbEIsYUFBOUI7QUFDQTVwQixFQUFBQSxVQUFRLENBQUM5TCxRQUFELEVBQVMrMEIsTUFBVCxFQUFpQlcsYUFBakIsQ0FBUjtBQUNEOztBQ2xGRCxJQUFJM2pCLElBQUMsR0FBRzFSLE9BQVI7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9CZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQTFCLENBQUQsRUFBbUM7QUFDbEN1bUIsRUFBQUEsT0FBTyxFQUFFL3lCLElBQUksQ0FBQ21qQixHQUFMLENBQVMsQ0FBVCxFQUFZLENBQUMsRUFBYjtBQUR5QixDQUFuQyxDQUFEOztBQ0pBLElBQUk5aUIsUUFBTSxHQUFHSyxRQUFiOztBQUVBLElBQUlzMUIsY0FBYyxHQUFHMzFCLFFBQU0sQ0FBQzJyQixRQUE1QjtBQUdBO0FBQ0E7O0lBQ0EvckIsZ0JBQUEsR0FBaUIreEIsTUFBTSxDQUFDaEcsUUFBUCxJQUFtQixTQUFTQSxRQUFULENBQWtCanNCLEVBQWxCLEVBQXNCO0FBQ3hELFNBQU8sT0FBT0EsRUFBUCxJQUFhLFFBQWIsSUFBeUJpMkIsY0FBYyxDQUFDajJCLEVBQUQsQ0FBOUM7QUFDRCxDQUZEOztBQ1BBLElBQUlxUyxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUl1MUIsZ0JBQWMsR0FBR3YxQixnQkFBckI7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9CZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQTFCLENBQUQsRUFBbUM7QUFBRXdmLEVBQUFBLFFBQVEsRUFBRWlLO0FBQVosQ0FBbkMsQ0FBRDs7QUNMQSxJQUFJbHlCLFVBQVEsR0FBR3JELFVBQWY7O0FBRUEsSUFBSWtKLE9BQUssR0FBRzVKLElBQUksQ0FBQzRKLEtBQWpCO0FBR0E7QUFDQTs7SUFDQTNKLGtCQUFBLEdBQWlCK3hCLE1BQU0sQ0FBQ2tFLFNBQVAsSUFBb0IsU0FBU0EsU0FBVCxDQUFtQm4yQixFQUFuQixFQUF1QjtBQUMxRCxTQUFPLENBQUNnRSxVQUFRLENBQUNoRSxFQUFELENBQVQsSUFBaUJpc0IsUUFBUSxDQUFDanNCLEVBQUQsQ0FBekIsSUFBaUM2SixPQUFLLENBQUM3SixFQUFELENBQUwsS0FBY0EsRUFBdEQ7QUFDRCxDQUZEOztBQ1BBLElBQUlxUyxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUl5MUIsa0JBQWdCLEdBQUd6MUIsa0JBQXZCO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQmdCLEVBQUFBLElBQUksRUFBRTtBQUExQixDQUFELEVBQW1DO0FBQ2xDMHBCLEVBQUFBLFNBQVMsRUFBRUM7QUFEdUIsQ0FBbkMsQ0FBRDs7QUNMQSxJQUFJL2pCLElBQUMsR0FBRzFSLE9BQVI7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9CZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQTFCLENBQUQsRUFBbUM7QUFDbEM0cEIsRUFBQUEsS0FBSyxFQUFFLFNBQVNBLEtBQVQsQ0FBZXZzQixNQUFmLEVBQXVCO0FBQzVCO0FBQ0EsV0FBT0EsTUFBTSxJQUFJQSxNQUFqQjtBQUNEO0FBSmlDLENBQW5DLENBQUQ7O0FDSkEsSUFBSXVJLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXkxQixrQkFBZ0IsR0FBR3oxQixrQkFBdkI7O0FBRUEsSUFBSXdpQixHQUFHLEdBQUdsakIsSUFBSSxDQUFDa2pCLEdBQWY7QUFHQTs7QUFDQTlRLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JnQixFQUFBQSxJQUFJLEVBQUU7QUFBMUIsQ0FBRCxFQUFtQztBQUNsQzZwQixFQUFBQSxhQUFhLEVBQUUsU0FBU0EsYUFBVCxDQUF1QnhzQixNQUF2QixFQUErQjtBQUM1QyxXQUFPc3NCLGtCQUFnQixDQUFDdHNCLE1BQUQsQ0FBaEIsSUFBNEJxWixHQUFHLENBQUNyWixNQUFELENBQUgsSUFBZSxnQkFBbEQ7QUFDRDtBQUhpQyxDQUFuQyxDQUFEOztBQ1BBLElBQUl1SSxJQUFDLEdBQUcxUixPQUFSO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQmdCLEVBQUFBLElBQUksRUFBRTtBQUExQixDQUFELEVBQW1DO0FBQ2xDdU0sRUFBQUEsZ0JBQWdCLEVBQUU7QUFEZ0IsQ0FBbkMsQ0FBRDs7QUNKQSxJQUFJM0csSUFBQyxHQUFHMVIsT0FBUjtBQUdBOzs7QUFDQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JnQixFQUFBQSxJQUFJLEVBQUU7QUFBMUIsQ0FBRCxFQUFtQztBQUNsQzhwQixFQUFBQSxnQkFBZ0IsRUFBRSxDQUFDO0FBRGUsQ0FBbkMsQ0FBRDs7QUNKQSxJQUFJajJCLFFBQU0sR0FBR0ssUUFBYjs7QUFDQSxJQUFJRCxPQUFLLEdBQUdDLFFBQVo7O0FBQ0EsSUFBSWdCLFVBQVEsR0FBR2hCLFVBQWY7O0FBQ0EsSUFBSXcwQixNQUFJLEdBQUd4MEIsVUFBQSxDQUFvQ3cwQixJQUEvQzs7QUFDQSxJQUFJTCxhQUFXLEdBQUduMEIsYUFBbEI7O0FBRUEsSUFBSTYxQixhQUFXLEdBQUdsMkIsUUFBTSxDQUFDbTJCLFVBQXpCO0FBQ0EsSUFBSXB6QixRQUFNLEdBQUcvQyxRQUFNLENBQUMrQyxNQUFwQjtBQUNBLElBQUk0UyxVQUFRLEdBQUc1UyxRQUFNLElBQUlBLFFBQU0sQ0FBQ0ksUUFBaEM7QUFDQSxJQUFJaUosUUFBTSxHQUFHLElBQUk4cEIsYUFBVyxDQUFDMUIsYUFBVyxHQUFHLElBQWYsQ0FBZixLQUF3QyxDQUFDNVEsUUFBekM7QUFBQSxHQUVQak8sVUFBUSxJQUFJLENBQUN2VixPQUFLLENBQUMsWUFBWTtBQUFFODFCLEVBQUFBLGFBQVcsQ0FBQzUxQixNQUFNLENBQUNxVixVQUFELENBQVAsQ0FBWDtBQUFnQyxDQUEvQyxDQUZ4QjtBQUtBOztJQUNBL1YsZ0JBQUEsR0FBaUJ3TSxRQUFNLEdBQUcsU0FBUytwQixVQUFULENBQW9CdnFCLE1BQXBCLEVBQTRCO0FBQ3BELE1BQUl3cUIsYUFBYSxHQUFHdkIsTUFBSSxDQUFDeHpCLFVBQVEsQ0FBQ3VLLE1BQUQsQ0FBVCxDQUF4QjtBQUNBLE1BQUluRyxNQUFNLEdBQUd5d0IsYUFBVyxDQUFDRSxhQUFELENBQXhCO0FBQ0EsU0FBTzN3QixNQUFNLEtBQUssQ0FBWCxJQUFnQjJ3QixhQUFhLENBQUN6VSxNQUFkLENBQXFCLENBQXJCLEtBQTJCLEdBQTNDLEdBQWlELENBQUMsQ0FBbEQsR0FBc0RsYyxNQUE3RDtBQUNELENBSnNCLEdBSW5CeXdCLGFBSko7O0FDZkEsSUFBSW5rQixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUk4MUIsWUFBVSxHQUFHOTFCLGdCQUFqQjtBQUdBO0FBQ0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQmdCLEVBQUFBLElBQUksRUFBRSxJQUExQjtBQUFnQ0ksRUFBQUEsTUFBTSxFQUFFb2xCLE1BQU0sQ0FBQ3dFLFVBQVAsSUFBcUJBO0FBQTdELENBQUQsRUFBNEU7QUFDM0VBLEVBQUFBLFVBQVUsRUFBRUE7QUFEK0QsQ0FBNUUsQ0FBRDs7QUNOQSxJQUFJbjJCLFFBQU0sR0FBR0ssUUFBYjs7QUFDQSxJQUFJRCxPQUFLLEdBQUdDLFFBQVo7O0FBQ0EsSUFBSWdCLFVBQVEsR0FBR2hCLFVBQWY7O0FBQ0EsSUFBSXcwQixNQUFJLEdBQUd4MEIsVUFBQSxDQUFvQ3cwQixJQUEvQzs7QUFDQSxJQUFJTCxhQUFXLEdBQUduMEIsYUFBbEI7O0FBRUEsSUFBSWcyQixXQUFTLEdBQUdyMkIsUUFBTSxDQUFDeTFCLFFBQXZCO0FBQ0EsSUFBSTF5QixRQUFNLEdBQUcvQyxRQUFNLENBQUMrQyxNQUFwQjtBQUNBLElBQUk0UyxVQUFRLEdBQUc1UyxRQUFNLElBQUlBLFFBQU0sQ0FBQ0ksUUFBaEM7QUFDQSxJQUFJMHBCLEdBQUcsR0FBRyxXQUFWO0FBQ0EsSUFBSXpnQixRQUFNLEdBQUdpcUIsV0FBUyxDQUFDN0IsYUFBVyxHQUFHLElBQWYsQ0FBVCxLQUFrQyxDQUFsQyxJQUF1QzZCLFdBQVMsQ0FBQzdCLGFBQVcsR0FBRyxNQUFmLENBQVQsS0FBb0MsRUFBM0U7QUFBQSxHQUVQN2UsVUFBUSxJQUFJLENBQUN2VixPQUFLLENBQUMsWUFBWTtBQUFFaTJCLEVBQUFBLFdBQVMsQ0FBQy8xQixNQUFNLENBQUNxVixVQUFELENBQVAsQ0FBVDtBQUE4QixDQUE3QyxDQUZ4QjtBQUtBOztJQUNBL1YsY0FBQSxHQUFpQndNLFFBQU0sR0FBRyxTQUFTcXBCLFFBQVQsQ0FBa0I3cEIsTUFBbEIsRUFBMEIwcEIsS0FBMUIsRUFBaUM7QUFDekQsTUFBSTdMLENBQUMsR0FBR29MLE1BQUksQ0FBQ3h6QixVQUFRLENBQUN1SyxNQUFELENBQVQsQ0FBWjtBQUNBLFNBQU95cUIsV0FBUyxDQUFDNU0sQ0FBRCxFQUFLNkwsS0FBSyxLQUFLLENBQVgsS0FBa0J6SSxHQUFHLENBQUM3bEIsSUFBSixDQUFTeWlCLENBQVQsSUFBYyxFQUFkLEdBQW1CLEVBQXJDLENBQUosQ0FBaEI7QUFDRCxDQUhzQixHQUduQjRNLFdBSEo7O0FDaEJBLElBQUl0a0IsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJbzFCLFVBQVEsR0FBR3AxQixjQUFmO0FBR0E7QUFDQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9CZ0IsRUFBQUEsSUFBSSxFQUFFLElBQTFCO0FBQWdDSSxFQUFBQSxNQUFNLEVBQUVvbEIsTUFBTSxDQUFDOEQsUUFBUCxJQUFtQkE7QUFBM0QsQ0FBRCxFQUF3RTtBQUN2RUEsRUFBQUEsUUFBUSxFQUFFQTtBQUQ2RCxDQUF4RSxDQUFEOztBQ0xBLElBQUkxakIsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJb0oscUJBQW1CLEdBQUdwSixxQkFBMUI7O0FBQ0EsSUFBSXkwQixpQkFBZSxHQUFHejBCLGlCQUF0Qjs7QUFDQSxJQUFJd3FCLFFBQU0sR0FBR3hxQixZQUFiOztBQUNBLElBQUlELE9BQUssR0FBR0MsUUFBWjs7QUFFQSxJQUFJaTJCLGFBQWEsR0FBRyxJQUFJQyxPQUF4QjtBQUNBLElBQUlodEIsT0FBSyxHQUFHNUosSUFBSSxDQUFDNEosS0FBakI7O0FBRUEsSUFBSXVaLEtBQUcsR0FBRyxVQUFVakIsQ0FBVixFQUFhM0ksQ0FBYixFQUFnQnNkLEdBQWhCLEVBQXFCO0FBQzdCLFNBQU90ZCxDQUFDLEtBQUssQ0FBTixHQUFVc2QsR0FBVixHQUFnQnRkLENBQUMsR0FBRyxDQUFKLEtBQVUsQ0FBVixHQUFjNEosS0FBRyxDQUFDakIsQ0FBRCxFQUFJM0ksQ0FBQyxHQUFHLENBQVIsRUFBV3NkLEdBQUcsR0FBRzNVLENBQWpCLENBQWpCLEdBQXVDaUIsS0FBRyxDQUFDakIsQ0FBQyxHQUFHQSxDQUFMLEVBQVEzSSxDQUFDLEdBQUcsQ0FBWixFQUFlc2QsR0FBZixDQUFqRTtBQUNELENBRkQ7O0FBSUEsSUFBSXpULEdBQUcsR0FBRyxVQUFVbEIsQ0FBVixFQUFhO0FBQ3JCLE1BQUkzSSxDQUFDLEdBQUcsQ0FBUjtBQUNBLE1BQUl1ZCxFQUFFLEdBQUc1VSxDQUFUOztBQUNBLFNBQU80VSxFQUFFLElBQUksSUFBYixFQUFtQjtBQUNqQnZkLElBQUFBLENBQUMsSUFBSSxFQUFMO0FBQ0F1ZCxJQUFBQSxFQUFFLElBQUksSUFBTjtBQUNEOztBQUNELFNBQU9BLEVBQUUsSUFBSSxDQUFiLEVBQWdCO0FBQ2R2ZCxJQUFBQSxDQUFDLElBQUksQ0FBTDtBQUNBdWQsSUFBQUEsRUFBRSxJQUFJLENBQU47QUFDRDs7QUFBQyxTQUFPdmQsQ0FBUDtBQUNILENBWEQ7O0FBYUEsSUFBSXdkLFFBQVEsR0FBRyxVQUFVbHJCLElBQVYsRUFBZ0IwTixDQUFoQixFQUFtQnRKLENBQW5CLEVBQXNCO0FBQ25DLE1BQUloRyxLQUFLLEdBQUcsQ0FBQyxDQUFiO0FBQ0EsTUFBSStzQixFQUFFLEdBQUcvbUIsQ0FBVDs7QUFDQSxTQUFPLEVBQUVoRyxLQUFGLEdBQVUsQ0FBakIsRUFBb0I7QUFDbEIrc0IsSUFBQUEsRUFBRSxJQUFJemQsQ0FBQyxHQUFHMU4sSUFBSSxDQUFDNUIsS0FBRCxDQUFkO0FBQ0E0QixJQUFBQSxJQUFJLENBQUM1QixLQUFELENBQUosR0FBYytzQixFQUFFLEdBQUcsR0FBbkI7QUFDQUEsSUFBQUEsRUFBRSxHQUFHcHRCLE9BQUssQ0FBQ290QixFQUFFLEdBQUcsR0FBTixDQUFWO0FBQ0Q7QUFDRixDQVJEOztBQVVBLElBQUlDLE1BQU0sR0FBRyxVQUFVcHJCLElBQVYsRUFBZ0IwTixDQUFoQixFQUFtQjtBQUM5QixNQUFJdFAsS0FBSyxHQUFHLENBQVo7QUFDQSxNQUFJZ0csQ0FBQyxHQUFHLENBQVI7O0FBQ0EsU0FBTyxFQUFFaEcsS0FBRixJQUFXLENBQWxCLEVBQXFCO0FBQ25CZ0csSUFBQUEsQ0FBQyxJQUFJcEUsSUFBSSxDQUFDNUIsS0FBRCxDQUFUO0FBQ0E0QixJQUFBQSxJQUFJLENBQUM1QixLQUFELENBQUosR0FBY0wsT0FBSyxDQUFDcUcsQ0FBQyxHQUFHc0osQ0FBTCxDQUFuQjtBQUNBdEosSUFBQUEsQ0FBQyxHQUFJQSxDQUFDLEdBQUdzSixDQUFMLEdBQVUsR0FBZDtBQUNEO0FBQ0YsQ0FSRDs7QUFVQSxJQUFJMmQsWUFBWSxHQUFHLFVBQVVyckIsSUFBVixFQUFnQjtBQUNqQyxNQUFJNUIsS0FBSyxHQUFHLENBQVo7QUFDQSxNQUFJa3RCLENBQUMsR0FBRyxFQUFSOztBQUNBLFNBQU8sRUFBRWx0QixLQUFGLElBQVcsQ0FBbEIsRUFBcUI7QUFDbkIsUUFBSWt0QixDQUFDLEtBQUssRUFBTixJQUFZbHRCLEtBQUssS0FBSyxDQUF0QixJQUEyQjRCLElBQUksQ0FBQzVCLEtBQUQsQ0FBSixLQUFnQixDQUEvQyxFQUFrRDtBQUNoRCxVQUFJNm9CLENBQUMsR0FBR3p2QixNQUFNLENBQUN3SSxJQUFJLENBQUM1QixLQUFELENBQUwsQ0FBZDtBQUNBa3RCLE1BQUFBLENBQUMsR0FBR0EsQ0FBQyxLQUFLLEVBQU4sR0FBV3JFLENBQVgsR0FBZXFFLENBQUMsR0FBR2pNLFFBQU0sQ0FBQ2hxQixJQUFQLENBQVksR0FBWixFQUFpQixJQUFJNHhCLENBQUMsQ0FBQ3R3QixNQUF2QixDQUFKLEdBQXFDc3dCLENBQXhEO0FBQ0Q7QUFDRjs7QUFBQyxTQUFPcUUsQ0FBUDtBQUNILENBVEQ7O0FBV0EsSUFBSTFxQixRQUFNLEdBQUdrcUIsYUFBYSxLQUN4QixRQUFRQyxPQUFSLENBQWdCLENBQWhCLE1BQXVCLE9BQXZCLElBQ0EsSUFBSUEsT0FBSixDQUFZLENBQVosTUFBbUIsR0FEbkIsSUFFQSxNQUFNQSxPQUFOLENBQWMsQ0FBZCxNQUFxQixNQUZyQixJQUdBLHNCQUFzQkEsT0FBdEIsQ0FBOEIsQ0FBOUIsTUFBcUMscUJBSmIsQ0FBYixJQUtSLENBQUNuMkIsT0FBSyxDQUFDLFlBQVk7QUFDdEI7QUFDQWsyQixFQUFBQSxhQUFhLENBQUN6MUIsSUFBZCxDQUFtQixFQUFuQjtBQUNELENBSFUsQ0FMWDtBQVdBOztBQUNBa1IsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQm9LLEVBQUFBLEtBQUssRUFBRSxJQUEzQjtBQUFpQ2hKLEVBQUFBLE1BQU0sRUFBRUg7QUFBekMsQ0FBRCxFQUFvRDtBQUNuRG1xQixFQUFBQSxPQUFPLEVBQUUsU0FBU0EsT0FBVCxDQUFpQlEsY0FBakIsRUFBaUM7QUFDeEMsUUFBSXZ0QixNQUFNLEdBQUdzckIsaUJBQWUsQ0FBQyxJQUFELENBQTVCO0FBQ0EsUUFBSWtDLFdBQVcsR0FBR3Z0QixxQkFBbUIsQ0FBQ3N0QixjQUFELENBQXJDO0FBQ0EsUUFBSXZyQixJQUFJLEdBQUcsQ0FBQyxDQUFELEVBQUksQ0FBSixFQUFPLENBQVAsRUFBVSxDQUFWLEVBQWEsQ0FBYixFQUFnQixDQUFoQixDQUFYO0FBQ0EsUUFBSWlZLElBQUksR0FBRyxFQUFYO0FBQ0EsUUFBSWhlLE1BQU0sR0FBRyxHQUFiO0FBQ0EsUUFBSXd4QixDQUFKLEVBQU9DLENBQVAsRUFBVTdXLENBQVYsRUFBYXBJLENBQWI7QUFFQSxRQUFJK2UsV0FBVyxHQUFHLENBQWQsSUFBbUJBLFdBQVcsR0FBRyxFQUFyQyxFQUF5QyxNQUFNcFUsVUFBVSxDQUFDLDJCQUFELENBQWhCLENBUkQ7O0FBVXhDLFFBQUlwWixNQUFNLElBQUlBLE1BQWQsRUFBc0IsT0FBTyxLQUFQO0FBQ3RCLFFBQUlBLE1BQU0sSUFBSSxDQUFDLElBQVgsSUFBbUJBLE1BQU0sSUFBSSxJQUFqQyxFQUF1QyxPQUFPeEcsTUFBTSxDQUFDd0csTUFBRCxDQUFiOztBQUN2QyxRQUFJQSxNQUFNLEdBQUcsQ0FBYixFQUFnQjtBQUNkaWEsTUFBQUEsSUFBSSxHQUFHLEdBQVA7QUFDQWphLE1BQUFBLE1BQU0sR0FBRyxDQUFDQSxNQUFWO0FBQ0Q7O0FBQ0QsUUFBSUEsTUFBTSxHQUFHLEtBQWIsRUFBb0I7QUFDbEJ5dEIsTUFBQUEsQ0FBQyxHQUFHbFUsR0FBRyxDQUFDdlosTUFBTSxHQUFHc1osS0FBRyxDQUFDLENBQUQsRUFBSSxFQUFKLEVBQVEsQ0FBUixDQUFiLENBQUgsR0FBOEIsRUFBbEM7QUFDQW9VLE1BQUFBLENBQUMsR0FBR0QsQ0FBQyxHQUFHLENBQUosR0FBUXp0QixNQUFNLEdBQUdzWixLQUFHLENBQUMsQ0FBRCxFQUFJLENBQUNtVSxDQUFMLEVBQVEsQ0FBUixDQUFwQixHQUFpQ3p0QixNQUFNLEdBQUdzWixLQUFHLENBQUMsQ0FBRCxFQUFJbVUsQ0FBSixFQUFPLENBQVAsQ0FBakQ7QUFDQUMsTUFBQUEsQ0FBQyxJQUFJLGdCQUFMO0FBQ0FELE1BQUFBLENBQUMsR0FBRyxLQUFLQSxDQUFUOztBQUNBLFVBQUlBLENBQUMsR0FBRyxDQUFSLEVBQVc7QUFDVFAsUUFBQUEsUUFBUSxDQUFDbHJCLElBQUQsRUFBTyxDQUFQLEVBQVUwckIsQ0FBVixDQUFSO0FBQ0E3VyxRQUFBQSxDQUFDLEdBQUcyVyxXQUFKOztBQUNBLGVBQU8zVyxDQUFDLElBQUksQ0FBWixFQUFlO0FBQ2JxVyxVQUFBQSxRQUFRLENBQUNsckIsSUFBRCxFQUFPLEdBQVAsRUFBWSxDQUFaLENBQVI7QUFDQTZVLFVBQUFBLENBQUMsSUFBSSxDQUFMO0FBQ0Q7O0FBQ0RxVyxRQUFBQSxRQUFRLENBQUNsckIsSUFBRCxFQUFPc1gsS0FBRyxDQUFDLEVBQUQsRUFBS3pDLENBQUwsRUFBUSxDQUFSLENBQVYsRUFBc0IsQ0FBdEIsQ0FBUjtBQUNBQSxRQUFBQSxDQUFDLEdBQUc0VyxDQUFDLEdBQUcsQ0FBUjs7QUFDQSxlQUFPNVcsQ0FBQyxJQUFJLEVBQVosRUFBZ0I7QUFDZHVXLFVBQUFBLE1BQU0sQ0FBQ3ByQixJQUFELEVBQU8sS0FBSyxFQUFaLENBQU47QUFDQTZVLFVBQUFBLENBQUMsSUFBSSxFQUFMO0FBQ0Q7O0FBQ0R1VyxRQUFBQSxNQUFNLENBQUNwckIsSUFBRCxFQUFPLEtBQUs2VSxDQUFaLENBQU47QUFDQXFXLFFBQUFBLFFBQVEsQ0FBQ2xyQixJQUFELEVBQU8sQ0FBUCxFQUFVLENBQVYsQ0FBUjtBQUNBb3JCLFFBQUFBLE1BQU0sQ0FBQ3ByQixJQUFELEVBQU8sQ0FBUCxDQUFOO0FBQ0EvRixRQUFBQSxNQUFNLEdBQUdveEIsWUFBWSxDQUFDcnJCLElBQUQsQ0FBckI7QUFDRCxPQWpCRCxNQWlCTztBQUNMa3JCLFFBQUFBLFFBQVEsQ0FBQ2xyQixJQUFELEVBQU8sQ0FBUCxFQUFVMHJCLENBQVYsQ0FBUjtBQUNBUixRQUFBQSxRQUFRLENBQUNsckIsSUFBRCxFQUFPLEtBQUssQ0FBQ3lyQixDQUFiLEVBQWdCLENBQWhCLENBQVI7QUFDQXh4QixRQUFBQSxNQUFNLEdBQUdveEIsWUFBWSxDQUFDcnJCLElBQUQsQ0FBWixHQUFxQnFmLFFBQU0sQ0FBQ2hxQixJQUFQLENBQVksR0FBWixFQUFpQm0yQixXQUFqQixDQUE5QjtBQUNEO0FBQ0Y7O0FBQ0QsUUFBSUEsV0FBVyxHQUFHLENBQWxCLEVBQXFCO0FBQ25CL2UsTUFBQUEsQ0FBQyxHQUFHeFMsTUFBTSxDQUFDdEQsTUFBWDtBQUNBc0QsTUFBQUEsTUFBTSxHQUFHZ2UsSUFBSSxJQUFJeEwsQ0FBQyxJQUFJK2UsV0FBTCxHQUNiLE9BQU9uTSxRQUFNLENBQUNocUIsSUFBUCxDQUFZLEdBQVosRUFBaUJtMkIsV0FBVyxHQUFHL2UsQ0FBL0IsQ0FBUCxHQUEyQ3hTLE1BRDlCLEdBRWJBLE1BQU0sQ0FBQ25FLEtBQVAsQ0FBYSxDQUFiLEVBQWdCMlcsQ0FBQyxHQUFHK2UsV0FBcEIsSUFBbUMsR0FBbkMsR0FBeUN2eEIsTUFBTSxDQUFDbkUsS0FBUCxDQUFhMlcsQ0FBQyxHQUFHK2UsV0FBakIsQ0FGaEMsQ0FBYjtBQUdELEtBTEQsTUFLTztBQUNMdnhCLE1BQUFBLE1BQU0sR0FBR2dlLElBQUksR0FBR2hlLE1BQWhCO0FBQ0Q7O0FBQUMsV0FBT0EsTUFBUDtBQUNIO0FBckRrRCxDQUFwRCxDQUFEOztBQ3JFQSxJQUFJc00sSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJRCxPQUFLLEdBQUdDLFFBQVo7O0FBQ0EsSUFBSXkwQixlQUFlLEdBQUd6MEIsaUJBQXRCOztBQUVBLElBQUk4MkIsaUJBQWlCLEdBQUcsSUFBSUMsV0FBNUI7QUFFQSxJQUFJaHJCLFFBQU0sR0FBR2hNLE9BQUssQ0FBQyxZQUFZO0FBQzdCO0FBQ0EsU0FBTysyQixpQkFBaUIsQ0FBQ3QyQixJQUFsQixDQUF1QixDQUF2QixFQUEwQlksU0FBMUIsTUFBeUMsR0FBaEQ7QUFDRCxDQUhpQixDQUFMLElBR1AsQ0FBQ3JCLE9BQUssQ0FBQyxZQUFZO0FBQ3ZCO0FBQ0ErMkIsRUFBQUEsaUJBQWlCLENBQUN0MkIsSUFBbEIsQ0FBdUIsRUFBdkI7QUFDRCxDQUhXLENBSFo7QUFTQTs7QUFDQWtSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JvSyxFQUFBQSxLQUFLLEVBQUUsSUFBM0I7QUFBaUNoSixFQUFBQSxNQUFNLEVBQUVIO0FBQXpDLENBQUQsRUFBb0Q7QUFDbkRnckIsRUFBQUEsV0FBVyxFQUFFLFNBQVNBLFdBQVQsQ0FBcUJDLFNBQXJCLEVBQWdDO0FBQzNDLFdBQU9BLFNBQVMsS0FBSzUxQixTQUFkLEdBQ0gwMUIsaUJBQWlCLENBQUN0MkIsSUFBbEIsQ0FBdUJpMEIsZUFBZSxDQUFDLElBQUQsQ0FBdEMsQ0FERyxHQUVIcUMsaUJBQWlCLENBQUN0MkIsSUFBbEIsQ0FBdUJpMEIsZUFBZSxDQUFDLElBQUQsQ0FBdEMsRUFBOEN1QyxTQUE5QyxDQUZKO0FBR0Q7QUFMa0QsQ0FBcEQsQ0FBRDs7QUNoQkEsSUFBSXZ4QixhQUFXLEdBQUd6RixXQUFsQjs7QUFDQSxJQUFJRCxPQUFLLEdBQUdDLFFBQVo7O0FBQ0EsSUFBSTRNLFlBQVUsR0FBRzVNLFlBQWpCOztBQUNBLElBQUkySywyQkFBMkIsR0FBRzNLLDJCQUFsQzs7QUFDQSxJQUFJMkYsMEJBQTBCLEdBQUczRiwwQkFBakM7O0FBQ0EsSUFBSWtFLFVBQVEsR0FBR2xFLFVBQWY7O0FBQ0EsSUFBSXNCLGVBQWEsR0FBR3RCLGFBQXBCOzs7QUFHQSxJQUFJaTNCLE9BQU8sR0FBR2gzQixNQUFNLENBQUNpM0IsTUFBckI7O0FBRUEsSUFBSWgzQixnQkFBYyxHQUFHRCxNQUFNLENBQUNDLGNBQTVCO0FBR0E7O0lBQ0FYLGNBQUEsR0FBaUIsQ0FBQzAzQixPQUFELElBQVlsM0IsT0FBSyxDQUFDLFlBQVk7QUFDN0M7QUFDQSxNQUFJMEYsYUFBVyxJQUFJd3hCLE9BQU8sQ0FBQztBQUFFM25CLElBQUFBLENBQUMsRUFBRTtBQUFMLEdBQUQsRUFBVzJuQixPQUFPLENBQUMvMkIsZ0JBQWMsQ0FBQyxFQUFELEVBQUssR0FBTCxFQUFVO0FBQ25FUyxJQUFBQSxVQUFVLEVBQUUsSUFEdUQ7QUFFbkVSLElBQUFBLEdBQUcsRUFBRSxZQUFZO0FBQ2ZELE1BQUFBLGdCQUFjLENBQUMsSUFBRCxFQUFPLEdBQVAsRUFBWTtBQUN4QlcsUUFBQUEsS0FBSyxFQUFFLENBRGlCO0FBRXhCRixRQUFBQSxVQUFVLEVBQUU7QUFGWSxPQUFaLENBQWQ7QUFJRDtBQVBrRSxHQUFWLENBQWYsRUFReEM7QUFBRTJPLElBQUFBLENBQUMsRUFBRTtBQUFMLEdBUndDLENBQWxCLENBQVAsQ0FRSkEsQ0FSSSxLQVFFLENBUnJCLEVBUXdCLE9BQU8sSUFBUCxDQVZxQjs7QUFZN0MsTUFBSXNKLENBQUMsR0FBRyxFQUFSO0FBQ0EsTUFBSXVlLENBQUMsR0FBRyxFQUFSLENBYjZDOztBQWU3QyxNQUFJMTBCLE1BQU0sR0FBR0MsTUFBTSxFQUFuQjtBQUNBLE1BQUkwMEIsUUFBUSxHQUFHLHNCQUFmO0FBQ0F4ZSxFQUFBQSxDQUFDLENBQUNuVyxNQUFELENBQUQsR0FBWSxDQUFaO0FBQ0EyMEIsRUFBQUEsUUFBUSxDQUFDajJCLEtBQVQsQ0FBZSxFQUFmLEVBQW1CK1AsT0FBbkIsQ0FBMkIsVUFBVWlRLEdBQVYsRUFBZTtBQUFFZ1csSUFBQUEsQ0FBQyxDQUFDaFcsR0FBRCxDQUFELEdBQVNBLEdBQVQ7QUFBZSxHQUEzRDtBQUNBLFNBQU84VixPQUFPLENBQUMsRUFBRCxFQUFLcmUsQ0FBTCxDQUFQLENBQWVuVyxNQUFmLEtBQTBCLENBQTFCLElBQStCbUssWUFBVSxDQUFDcXFCLE9BQU8sQ0FBQyxFQUFELEVBQUtFLENBQUwsQ0FBUixDQUFWLENBQTJCbnVCLElBQTNCLENBQWdDLEVBQWhDLEtBQXVDb3VCLFFBQTdFO0FBQ0QsQ0FwQmlDLENBQWpCLEdBb0JaLFNBQVNGLE1BQVQsQ0FBZ0Jwc0IsTUFBaEIsRUFBd0IvQixNQUF4QixFQUFnQztBQUFFO0FBQ3JDLE1BQUlzdUIsQ0FBQyxHQUFHbnpCLFVBQVEsQ0FBQzRHLE1BQUQsQ0FBaEI7QUFDQSxNQUFJNE8sZUFBZSxHQUFHN1gsU0FBUyxDQUFDQyxNQUFoQztBQUNBLE1BQUl5SCxLQUFLLEdBQUcsQ0FBWjtBQUNBLE1BQUkvRyxxQkFBcUIsR0FBR21JLDJCQUEyQixDQUFDekUsQ0FBeEQ7QUFDQSxNQUFJN0Ysb0JBQW9CLEdBQUdzRiwwQkFBMEIsQ0FBQ08sQ0FBdEQ7O0FBQ0EsU0FBT3dULGVBQWUsR0FBR25RLEtBQXpCLEVBQWdDO0FBQzlCLFFBQUk2ZixDQUFDLEdBQUc5bkIsZUFBYSxDQUFDTyxTQUFTLENBQUMwSCxLQUFLLEVBQU4sQ0FBVixDQUFyQjtBQUNBLFFBQUkzQyxJQUFJLEdBQUdwRSxxQkFBcUIsR0FBR29LLFlBQVUsQ0FBQ3djLENBQUQsQ0FBVixDQUFjNWUsTUFBZCxDQUFxQmhJLHFCQUFxQixDQUFDNG1CLENBQUQsQ0FBMUMsQ0FBSCxHQUFvRHhjLFlBQVUsQ0FBQ3djLENBQUQsQ0FBOUY7QUFDQSxRQUFJdG5CLE1BQU0sR0FBRzhFLElBQUksQ0FBQzlFLE1BQWxCO0FBQ0EsUUFBSWtlLENBQUMsR0FBRyxDQUFSO0FBQ0EsUUFBSXJjLEdBQUo7O0FBQ0EsV0FBTzdCLE1BQU0sR0FBR2tlLENBQWhCLEVBQW1CO0FBQ2pCcmMsTUFBQUEsR0FBRyxHQUFHaUQsSUFBSSxDQUFDb1osQ0FBQyxFQUFGLENBQVY7QUFDQSxVQUFJLENBQUN2YSxhQUFELElBQWdCcEYsb0JBQW9CLENBQUNHLElBQXJCLENBQTBCNG9CLENBQTFCLEVBQTZCemxCLEdBQTdCLENBQXBCLEVBQXVEMHpCLENBQUMsQ0FBQzF6QixHQUFELENBQUQsR0FBU3lsQixDQUFDLENBQUN6bEIsR0FBRCxDQUFWO0FBQ3hEO0FBQ0Y7O0FBQUMsU0FBTzB6QixDQUFQO0FBQ0gsQ0FyQ2dCLEdBcUNiSixPQXJDSjs7QUNoQkEsSUFBSXZsQixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlrM0IsUUFBTSxHQUFHbDNCLGNBQWI7QUFHQTtBQUNBOzs7QUFDQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JnQixFQUFBQSxJQUFJLEVBQUUsSUFBMUI7QUFBZ0NJLEVBQUFBLE1BQU0sRUFBRWpNLE1BQU0sQ0FBQ2kzQixNQUFQLEtBQWtCQTtBQUExRCxDQUFELEVBQXFFO0FBQ3BFQSxFQUFBQSxNQUFNLEVBQUVBO0FBRDRELENBQXJFLENBQUQ7O0FDTkEsSUFBSXhsQixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUl5RixhQUFXLEdBQUd6RixXQUFsQjs7QUFDQSxJQUFJNk8sUUFBTSxHQUFHN08sY0FBYjtBQUdBOzs7QUFDQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JnQixFQUFBQSxJQUFJLEVBQUUsSUFBMUI7QUFBZ0NsSixFQUFBQSxJQUFJLEVBQUUsQ0FBQzZDO0FBQXZDLENBQUQsRUFBdUQ7QUFDdERvSixFQUFBQSxNQUFNLEVBQUVBO0FBRDhDLENBQXZELENBQUQ7O0FDSkEsSUFBSWxQLFFBQU0sR0FBR0ssUUFBYjs7QUFDQSxJQUFJRCxPQUFLLEdBQUdDLFFBQVo7O0FBQ0EsSUFBSTRnQixRQUFNLEdBQUc1Z0IsbUJBQWI7OztJQUdBVCw4QkFBQSxHQUE0QixDQUFDUSxPQUFLLENBQUMsWUFBWTtBQUM3QztBQUNBO0FBQ0EsTUFBSTZnQixRQUFNLElBQUlBLFFBQU0sR0FBRyxHQUF2QixFQUE0QjtBQUM1QixNQUFJamQsR0FBRyxHQUFHckUsSUFBSSxDQUFDaUYsTUFBTCxFQUFWLENBSjZDO0FBTTdDOztBQUNBK3lCLEVBQUFBLGdCQUFnQixDQUFDOTJCLElBQWpCLENBQXNCLElBQXRCLEVBQTRCbUQsR0FBNUIsRUFBaUMsWUFBWTtBQUFFO0FBQWEsR0FBNUQ7O0FBQ0EsU0FBT2hFLFFBQU0sQ0FBQ2dFLEdBQUQsQ0FBYjtBQUNELENBVGlDLENBQWxDOztBQ05BLElBQUkrTixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUl5RixhQUFXLEdBQUd6RixXQUFsQjs7QUFDQSxJQUFJK0wsUUFBTSxHQUFHL0wsOEJBQWI7O0FBQ0EsSUFBSWtELFdBQVMsR0FBR2xELFdBQWhCOztBQUNBLElBQUlrRSxVQUFRLEdBQUdsRSxVQUFmOztBQUNBLElBQUlzRyxzQkFBb0IsR0FBR3RHLG9CQUEzQjtBQUdBOzs7QUFDQSxJQUFJeUYsYUFBSixFQUFpQjtBQUNmaU0sRUFBQUEsSUFBQyxDQUFDO0FBQUU1RyxJQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQm9LLElBQUFBLEtBQUssRUFBRSxJQUEzQjtBQUFpQ2hKLElBQUFBLE1BQU0sRUFBRUg7QUFBekMsR0FBRCxFQUFvRDtBQUNuRHdyQixJQUFBQSxnQkFBZ0IsRUFBRSxTQUFTQSxnQkFBVCxDQUEwQnAwQixDQUExQixFQUE2QnEwQixNQUE3QixFQUFxQztBQUNyRGx4QixNQUFBQSxzQkFBb0IsQ0FBQ0osQ0FBckIsQ0FBdUJoQyxVQUFRLENBQUMsSUFBRCxDQUEvQixFQUF1Q2YsQ0FBdkMsRUFBMEM7QUFBRWhELFFBQUFBLEdBQUcsRUFBRStDLFdBQVMsQ0FBQ3MwQixNQUFELENBQWhCO0FBQTBCNzJCLFFBQUFBLFVBQVUsRUFBRSxJQUF0QztBQUE0Q0csUUFBQUEsWUFBWSxFQUFFO0FBQTFELE9BQTFDO0FBQ0Q7QUFIa0QsR0FBcEQsQ0FBRDtBQUtEOztBQ2hCRCxJQUFJNFEsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJeUYsYUFBVyxHQUFHekYsV0FBbEI7O0FBQ0EsSUFBSTZNLGtCQUFnQixHQUFHN00sc0JBQXZCO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQmdCLEVBQUFBLElBQUksRUFBRSxJQUExQjtBQUFnQ0ksRUFBQUEsTUFBTSxFQUFFLENBQUN6RyxhQUF6QztBQUFzRDdDLEVBQUFBLElBQUksRUFBRSxDQUFDNkM7QUFBN0QsQ0FBRCxFQUE2RTtBQUM1RW9ILEVBQUFBLGdCQUFnQixFQUFFQTtBQUQwRCxDQUE3RSxDQUFEOztBQ05BLElBQUk2RSxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUl5RixhQUFXLEdBQUd6RixXQUFsQjs7QUFDQSxJQUFJeTNCLDBCQUEwQixHQUFHejNCLG9CQUFqQztBQUdBOzs7QUFDQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JnQixFQUFBQSxJQUFJLEVBQUUsSUFBMUI7QUFBZ0NJLEVBQUFBLE1BQU0sRUFBRSxDQUFDekcsYUFBekM7QUFBc0Q3QyxFQUFBQSxJQUFJLEVBQUUsQ0FBQzZDO0FBQTdELENBQUQsRUFBNkU7QUFDNUV2RixFQUFBQSxjQUFjLEVBQUV1M0IsMEJBQTBCLENBQUN2eEI7QUFEaUMsQ0FBN0UsQ0FBRDs7QUNMQSxJQUFJd0wsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJeUYsYUFBVyxHQUFHekYsV0FBbEI7O0FBQ0EsSUFBSStMLFFBQU0sR0FBRy9MLDhCQUFiOztBQUNBLElBQUlrRCxXQUFTLEdBQUdsRCxXQUFoQjs7QUFDQSxJQUFJa0UsVUFBUSxHQUFHbEUsVUFBZjs7QUFDQSxJQUFJc0csc0JBQW9CLEdBQUd0RyxvQkFBM0I7QUFHQTs7O0FBQ0EsSUFBSXlGLGFBQUosRUFBaUI7QUFDZmlNLEVBQUFBLElBQUMsQ0FBQztBQUFFNUcsSUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JvSyxJQUFBQSxLQUFLLEVBQUUsSUFBM0I7QUFBaUNoSixJQUFBQSxNQUFNLEVBQUVIO0FBQXpDLEdBQUQsRUFBb0Q7QUFDbkR1ckIsSUFBQUEsZ0JBQWdCLEVBQUUsU0FBU0EsZ0JBQVQsQ0FBMEJuMEIsQ0FBMUIsRUFBNkJ1USxNQUE3QixFQUFxQztBQUNyRHBOLE1BQUFBLHNCQUFvQixDQUFDSixDQUFyQixDQUF1QmhDLFVBQVEsQ0FBQyxJQUFELENBQS9CLEVBQXVDZixDQUF2QyxFQUEwQztBQUFFK0QsUUFBQUEsR0FBRyxFQUFFaEUsV0FBUyxDQUFDd1EsTUFBRCxDQUFoQjtBQUEwQi9TLFFBQUFBLFVBQVUsRUFBRSxJQUF0QztBQUE0Q0csUUFBQUEsWUFBWSxFQUFFO0FBQTFELE9BQTFDO0FBQ0Q7QUFIa0QsR0FBcEQsQ0FBRDtBQUtEOztBQ2hCRCxJQUFJMkUsYUFBVyxHQUFHekYsV0FBbEI7O0FBQ0EsSUFBSTRNLFlBQVUsR0FBRzVNLFlBQWpCOztBQUNBLElBQUk2RixpQkFBZSxHQUFHN0YsaUJBQXRCOztBQUNBLElBQUlLLG9CQUFvQixHQUFHTCwwQkFBQSxDQUFzRGtHLENBQWpGOzs7QUFHQSxJQUFJMkQsY0FBWSxHQUFHLFVBQVU2dEIsVUFBVixFQUFzQjtBQUN2QyxTQUFPLFVBQVVyNEIsRUFBVixFQUFjO0FBQ25CLFFBQUk0RyxDQUFDLEdBQUdKLGlCQUFlLENBQUN4RyxFQUFELENBQXZCO0FBQ0EsUUFBSXVILElBQUksR0FBR2dHLFlBQVUsQ0FBQzNHLENBQUQsQ0FBckI7QUFDQSxRQUFJbkUsTUFBTSxHQUFHOEUsSUFBSSxDQUFDOUUsTUFBbEI7QUFDQSxRQUFJdUksQ0FBQyxHQUFHLENBQVI7QUFDQSxRQUFJakYsTUFBTSxHQUFHLEVBQWI7QUFDQSxRQUFJekIsR0FBSjs7QUFDQSxXQUFPN0IsTUFBTSxHQUFHdUksQ0FBaEIsRUFBbUI7QUFDakIxRyxNQUFBQSxHQUFHLEdBQUdpRCxJQUFJLENBQUN5RCxDQUFDLEVBQUYsQ0FBVjs7QUFDQSxVQUFJLENBQUM1RSxhQUFELElBQWdCcEYsb0JBQW9CLENBQUNHLElBQXJCLENBQTBCeUYsQ0FBMUIsRUFBNkJ0QyxHQUE3QixDQUFwQixFQUF1RDtBQUNyRHlCLFFBQUFBLE1BQU0sQ0FBQ3JCLElBQVAsQ0FBWTJ6QixVQUFVLEdBQUcsQ0FBQy96QixHQUFELEVBQU1zQyxDQUFDLENBQUN0QyxHQUFELENBQVAsQ0FBSCxHQUFtQnNDLENBQUMsQ0FBQ3RDLEdBQUQsQ0FBMUM7QUFDRDtBQUNGOztBQUNELFdBQU95QixNQUFQO0FBQ0QsR0FkRDtBQWVELENBaEJEOztJQWtCQTdGLGFBQUEsR0FBaUI7QUFDZjtBQUNBO0FBQ0FnZSxFQUFBQSxPQUFPLEVBQUUxVCxjQUFZLENBQUMsSUFBRCxDQUhOO0FBSWY7QUFDQTtBQUNBeVQsRUFBQUEsTUFBTSxFQUFFelQsY0FBWSxDQUFDLEtBQUQ7QUFOTCxDQUFqQjs7QUN4QkEsSUFBSTZILElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSTIzQixRQUFRLEdBQUczM0IsYUFBQSxDQUF3Q3VkLE9BQXZEO0FBR0E7OztBQUNBN0wsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQmdCLEVBQUFBLElBQUksRUFBRTtBQUExQixDQUFELEVBQW1DO0FBQ2xDeVIsRUFBQUEsT0FBTyxFQUFFLFNBQVNBLE9BQVQsQ0FBaUJ0WCxDQUFqQixFQUFvQjtBQUMzQixXQUFPMHhCLFFBQVEsQ0FBQzF4QixDQUFELENBQWY7QUFDRDtBQUhpQyxDQUFuQyxDQUFEOztBQ0xBLElBQUl5TCxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUk4dEIsVUFBUSxHQUFHOXRCLFFBQWY7O0FBQ0EsSUFBSUQsT0FBSyxHQUFHQyxRQUFaOztBQUNBLElBQUlxRCxVQUFRLEdBQUdyRCxVQUFmOztBQUNBLElBQUlzdUIsVUFBUSxHQUFHdHVCLHdCQUFBLENBQTBDc3VCLFFBQXpEOzs7QUFHQSxJQUFJc0osT0FBTyxHQUFHMzNCLE1BQU0sQ0FBQzQzQixNQUFyQjtBQUNBLElBQUlDLHFCQUFtQixHQUFHLzNCLE9BQUssQ0FBQyxZQUFZO0FBQUU2M0IsRUFBQUEsT0FBTyxDQUFDLENBQUQsQ0FBUDtBQUFhLENBQTVCLENBQS9CO0FBR0E7O0FBQ0FsbUIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQmdCLEVBQUFBLElBQUksRUFBRSxJQUExQjtBQUFnQ0ksRUFBQUEsTUFBTSxFQUFFNHJCLHFCQUF4QztBQUE2RGwxQixFQUFBQSxJQUFJLEVBQUUsQ0FBQ2tyQjtBQUFwRSxDQUFELEVBQWlGO0FBQ2hGK0osRUFBQUEsTUFBTSxFQUFFLFNBQVNBLE1BQVQsQ0FBZ0J4NEIsRUFBaEIsRUFBb0I7QUFDMUIsV0FBT3U0QixPQUFPLElBQUl2MEIsVUFBUSxDQUFDaEUsRUFBRCxDQUFuQixHQUEwQnU0QixPQUFPLENBQUN0SixVQUFRLENBQUNqdkIsRUFBRCxDQUFULENBQWpDLEdBQWtEQSxFQUF6RDtBQUNEO0FBSCtFLENBQWpGLENBQUQ7O0FDWkEsSUFBSXFTLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSWdYLFNBQU8sR0FBR2hYLFNBQWQ7O0FBQ0EsSUFBSWtZLGdCQUFjLEdBQUdsWSxnQkFBckI7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9CZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQTFCLENBQUQsRUFBbUM7QUFDbENpc0IsRUFBQUEsV0FBVyxFQUFFLFNBQVNBLFdBQVQsQ0FBcUI1aEIsUUFBckIsRUFBK0I7QUFDMUMsUUFBSXpNLEdBQUcsR0FBRyxFQUFWO0FBQ0FzTixJQUFBQSxTQUFPLENBQUNiLFFBQUQsRUFBVyxVQUFVeUIsQ0FBVixFQUFheUosQ0FBYixFQUFnQjtBQUNoQ25KLE1BQUFBLGdCQUFjLENBQUN4TyxHQUFELEVBQU1rTyxDQUFOLEVBQVN5SixDQUFULENBQWQ7QUFDRCxLQUZNLEVBRUo7QUFBRWhMLE1BQUFBLFVBQVUsRUFBRTtBQUFkLEtBRkksQ0FBUDtBQUdBLFdBQU8zTSxHQUFQO0FBQ0Q7QUFQaUMsQ0FBbkMsQ0FBRDs7QUNOQSxJQUFJZ0ksSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJRCxPQUFLLEdBQUdDLFFBQVo7O0FBQ0EsSUFBSTZGLGlCQUFlLEdBQUc3RixpQkFBdEI7O0FBQ0EsSUFBSXNTLGdDQUE4QixHQUFHdFMsOEJBQUEsQ0FBMkRrRyxDQUFoRzs7QUFDQSxJQUFJVCxhQUFXLEdBQUd6RixXQUFsQjs7QUFFQSxJQUFJODNCLHFCQUFtQixHQUFHLzNCLE9BQUssQ0FBQyxZQUFZO0FBQUV1UyxFQUFBQSxnQ0FBOEIsQ0FBQyxDQUFELENBQTlCO0FBQW9DLENBQW5ELENBQS9CO0FBQ0EsSUFBSXZHLFFBQU0sR0FBRyxDQUFDdEcsYUFBRCxJQUFnQnF5QixxQkFBN0I7QUFHQTs7QUFDQXBtQixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9CZ0IsRUFBQUEsSUFBSSxFQUFFLElBQTFCO0FBQWdDSSxFQUFBQSxNQUFNLEVBQUVILFFBQXhDO0FBQWdEbkosRUFBQUEsSUFBSSxFQUFFLENBQUM2QztBQUF2RCxDQUFELEVBQXVFO0FBQ3RFbkYsRUFBQUEsd0JBQXdCLEVBQUUsU0FBU0Esd0JBQVQsQ0FBa0NqQixFQUFsQyxFQUFzQ3NFLEdBQXRDLEVBQTJDO0FBQ25FLFdBQU8yTyxnQ0FBOEIsQ0FBQ3pNLGlCQUFlLENBQUN4RyxFQUFELENBQWhCLEVBQXNCc0UsR0FBdEIsQ0FBckM7QUFDRDtBQUhxRSxDQUF2RSxDQUFEOztBQ1hBLElBQUkrTixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUl5RixhQUFXLEdBQUd6RixXQUFsQjs7QUFDQSxJQUFJNEssU0FBTyxHQUFHNUssU0FBZDs7QUFDQSxJQUFJNkYsaUJBQWUsR0FBRzdGLGlCQUF0Qjs7QUFDQSxJQUFJNkssZ0NBQThCLEdBQUc3Syw4QkFBckM7O0FBQ0EsSUFBSWtZLGNBQWMsR0FBR2xZLGdCQUFyQjtBQUdBOzs7QUFDQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JnQixFQUFBQSxJQUFJLEVBQUUsSUFBMUI7QUFBZ0NsSixFQUFBQSxJQUFJLEVBQUUsQ0FBQzZDO0FBQXZDLENBQUQsRUFBdUQ7QUFDdER1eUIsRUFBQUEseUJBQXlCLEVBQUUsU0FBU0EseUJBQVQsQ0FBbUN6eEIsTUFBbkMsRUFBMkM7QUFDcEUsUUFBSU4sQ0FBQyxHQUFHSixpQkFBZSxDQUFDVSxNQUFELENBQXZCO0FBQ0EsUUFBSWpHLHdCQUF3QixHQUFHdUssZ0NBQThCLENBQUMzRSxDQUE5RDtBQUNBLFFBQUlVLElBQUksR0FBR2dFLFNBQU8sQ0FBQzNFLENBQUQsQ0FBbEI7QUFDQSxRQUFJYixNQUFNLEdBQUcsRUFBYjtBQUNBLFFBQUltRSxLQUFLLEdBQUcsQ0FBWjtBQUNBLFFBQUk1RixHQUFKLEVBQVNqRCxVQUFUOztBQUNBLFdBQU9rRyxJQUFJLENBQUM5RSxNQUFMLEdBQWN5SCxLQUFyQixFQUE0QjtBQUMxQjdJLE1BQUFBLFVBQVUsR0FBR0osd0JBQXdCLENBQUMyRixDQUFELEVBQUl0QyxHQUFHLEdBQUdpRCxJQUFJLENBQUMyQyxLQUFLLEVBQU4sQ0FBZCxDQUFyQztBQUNBLFVBQUk3SSxVQUFVLEtBQUtVLFNBQW5CLEVBQThCOFcsY0FBYyxDQUFDOVMsTUFBRCxFQUFTekIsR0FBVCxFQUFjakQsVUFBZCxDQUFkO0FBQy9COztBQUNELFdBQU8wRSxNQUFQO0FBQ0Q7QUFicUQsQ0FBdkQsQ0FBRDs7QUNUQSxJQUFJc00sSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJRCxPQUFLLEdBQUdDLFFBQVo7O0FBQ0EsSUFBSXlLLHFCQUFtQixHQUFHekssaUNBQUEsQ0FBK0RrRyxDQUF6Rjs7O0FBR0EsSUFBSTR4QixxQkFBbUIsR0FBRy8zQixPQUFLLENBQUMsWUFBWTtBQUFFLFNBQU8sQ0FBQ0UsTUFBTSxDQUFDd0ssbUJBQVAsQ0FBMkIsQ0FBM0IsQ0FBUjtBQUF3QyxDQUF2RCxDQUEvQjtBQUdBOztBQUNBaUgsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQmdCLEVBQUFBLElBQUksRUFBRSxJQUExQjtBQUFnQ0ksRUFBQUEsTUFBTSxFQUFFNHJCO0FBQXhDLENBQUQsRUFBZ0U7QUFDL0RydEIsRUFBQUEsbUJBQW1CLEVBQUVBO0FBRDBDLENBQWhFLENBQUQ7O0FDVEEsSUFBSWlILElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSUQsT0FBSyxHQUFHQyxRQUFaOztBQUNBLElBQUlrRSxVQUFRLEdBQUdsRSxVQUFmOztBQUNBLElBQUlpNEIsb0JBQW9CLEdBQUdqNEIsc0JBQTNCOztBQUNBLElBQUk4VSwwQkFBd0IsR0FBRzlVLHNCQUEvQjs7QUFFQSxJQUFJODNCLHFCQUFtQixHQUFHLzNCLE9BQUssQ0FBQyxZQUFZO0FBQUVrNEIsRUFBQUEsb0JBQW9CLENBQUMsQ0FBRCxDQUFwQjtBQUEwQixDQUF6QyxDQUEvQjtBQUdBOztBQUNBdm1CLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JnQixFQUFBQSxJQUFJLEVBQUUsSUFBMUI7QUFBZ0NJLEVBQUFBLE1BQU0sRUFBRTRyQixxQkFBeEM7QUFBNkRsMUIsRUFBQUEsSUFBSSxFQUFFLENBQUNrUztBQUFwRSxDQUFELEVBQWlHO0FBQ2hHRCxFQUFBQSxjQUFjLEVBQUUsU0FBU0EsY0FBVCxDQUF3QnhWLEVBQXhCLEVBQTRCO0FBQzFDLFdBQU80NEIsb0JBQW9CLENBQUMvekIsVUFBUSxDQUFDN0UsRUFBRCxDQUFULENBQTNCO0FBQ0Q7QUFIK0YsQ0FBakcsQ0FBRDs7QUNWQSxJQUFJcVMsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJb0UsUUFBTSxHQUFHcEUsZ0JBQWI7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9CZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQTFCLENBQUQsRUFBbUM7QUFDbEMxSCxFQUFBQSxNQUFNLEVBQUVBO0FBRDBCLENBQW5DLENBQUQ7O0FDTEE7QUFDQTtBQUNBO0lBQ0E3RSxXQUFBLEdBQWlCVSxNQUFNLENBQUNpNEIsRUFBUCxJQUFhLFNBQVNBLEVBQVQsQ0FBWTFXLENBQVosRUFBZUMsQ0FBZixFQUFrQjtBQUM5QztBQUNBLFNBQU9ELENBQUMsS0FBS0MsQ0FBTixHQUFVRCxDQUFDLEtBQUssQ0FBTixJQUFXLElBQUlBLENBQUosS0FBVSxJQUFJQyxDQUFuQyxHQUF1Q0QsQ0FBQyxJQUFJQSxDQUFMLElBQVVDLENBQUMsSUFBSUEsQ0FBN0Q7QUFDRCxDQUhEOztBQ0hBLElBQUkvUCxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlrNEIsRUFBRSxHQUFHbDRCLFdBQVQ7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9CZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQTFCLENBQUQsRUFBbUM7QUFDbENvc0IsRUFBQUEsRUFBRSxFQUFFQTtBQUQ4QixDQUFuQyxDQUFEOztBQ0xBLElBQUl4bUIsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJRCxPQUFLLEdBQUdDLFFBQVo7O0FBQ0EsSUFBSXFELFVBQVEsR0FBR3JELFVBQWY7OztBQUdBLElBQUltNEIsYUFBYSxHQUFHbDRCLE1BQU0sQ0FBQzB0QixZQUEzQjtBQUNBLElBQUltSyxxQkFBbUIsR0FBRy8zQixPQUFLLENBQUMsWUFBWTtBQUFFbzRCLEVBQUFBLGFBQWEsQ0FBQyxDQUFELENBQWI7QUFBbUIsQ0FBbEMsQ0FBL0I7QUFHQTs7QUFDQXptQixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9CZ0IsRUFBQUEsSUFBSSxFQUFFLElBQTFCO0FBQWdDSSxFQUFBQSxNQUFNLEVBQUU0ckI7QUFBeEMsQ0FBRCxFQUFnRTtBQUMvRG5LLEVBQUFBLFlBQVksRUFBRSxTQUFTQSxZQUFULENBQXNCdHVCLEVBQXRCLEVBQTBCO0FBQ3RDLFdBQU9nRSxVQUFRLENBQUNoRSxFQUFELENBQVIsR0FBZTg0QixhQUFhLEdBQUdBLGFBQWEsQ0FBQzk0QixFQUFELENBQWhCLEdBQXVCLElBQW5ELEdBQTBELEtBQWpFO0FBQ0Q7QUFIOEQsQ0FBaEUsQ0FBRDs7QUNWQSxJQUFJcVMsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJRCxPQUFLLEdBQUdDLFFBQVo7O0FBQ0EsSUFBSXFELFVBQVEsR0FBR3JELFVBQWY7OztBQUdBLElBQUlvNEIsU0FBUyxHQUFHbjRCLE1BQU0sQ0FBQ280QixRQUF2QjtBQUNBLElBQUlQLHFCQUFtQixHQUFHLzNCLE9BQUssQ0FBQyxZQUFZO0FBQUVxNEIsRUFBQUEsU0FBUyxDQUFDLENBQUQsQ0FBVDtBQUFlLENBQTlCLENBQS9CO0FBR0E7O0FBQ0ExbUIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQmdCLEVBQUFBLElBQUksRUFBRSxJQUExQjtBQUFnQ0ksRUFBQUEsTUFBTSxFQUFFNHJCO0FBQXhDLENBQUQsRUFBZ0U7QUFDL0RPLEVBQUFBLFFBQVEsRUFBRSxTQUFTQSxRQUFULENBQWtCaDVCLEVBQWxCLEVBQXNCO0FBQzlCLFdBQU9nRSxVQUFRLENBQUNoRSxFQUFELENBQVIsR0FBZSs0QixTQUFTLEdBQUdBLFNBQVMsQ0FBQy80QixFQUFELENBQVosR0FBbUIsS0FBM0MsR0FBbUQsSUFBMUQ7QUFDRDtBQUg4RCxDQUFoRSxDQUFEOztBQ1ZBLElBQUlxUyxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlELE9BQUssR0FBR0MsUUFBWjs7QUFDQSxJQUFJcUQsVUFBUSxHQUFHckQsVUFBZjs7O0FBR0EsSUFBSXM0QixTQUFTLEdBQUdyNEIsTUFBTSxDQUFDczRCLFFBQXZCO0FBQ0EsSUFBSVQscUJBQW1CLEdBQUcvM0IsT0FBSyxDQUFDLFlBQVk7QUFBRXU0QixFQUFBQSxTQUFTLENBQUMsQ0FBRCxDQUFUO0FBQWUsQ0FBOUIsQ0FBL0I7QUFHQTs7QUFDQTVtQixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9CZ0IsRUFBQUEsSUFBSSxFQUFFLElBQTFCO0FBQWdDSSxFQUFBQSxNQUFNLEVBQUU0ckI7QUFBeEMsQ0FBRCxFQUFnRTtBQUMvRFMsRUFBQUEsUUFBUSxFQUFFLFNBQVNBLFFBQVQsQ0FBa0JsNUIsRUFBbEIsRUFBc0I7QUFDOUIsV0FBT2dFLFVBQVEsQ0FBQ2hFLEVBQUQsQ0FBUixHQUFlaTVCLFNBQVMsR0FBR0EsU0FBUyxDQUFDajVCLEVBQUQsQ0FBWixHQUFtQixLQUEzQyxHQUFtRCxJQUExRDtBQUNEO0FBSDhELENBQWhFLENBQUQ7O0FDVkEsSUFBSXFTLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSWtFLFVBQVEsR0FBR2xFLFVBQWY7O0FBQ0EsSUFBSXc0QixVQUFVLEdBQUd4NEIsWUFBakI7O0FBQ0EsSUFBSUQsT0FBSyxHQUFHQyxRQUFaOztBQUVBLElBQUk4M0IscUJBQW1CLEdBQUcvM0IsT0FBSyxDQUFDLFlBQVk7QUFBRXk0QixFQUFBQSxVQUFVLENBQUMsQ0FBRCxDQUFWO0FBQWdCLENBQS9CLENBQS9CO0FBR0E7O0FBQ0E5bUIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQmdCLEVBQUFBLElBQUksRUFBRSxJQUExQjtBQUFnQ0ksRUFBQUEsTUFBTSxFQUFFNHJCO0FBQXhDLENBQUQsRUFBZ0U7QUFDL0RseEIsRUFBQUEsSUFBSSxFQUFFLFNBQVNBLElBQVQsQ0FBY3ZILEVBQWQsRUFBa0I7QUFDdEIsV0FBT201QixVQUFVLENBQUN0MEIsVUFBUSxDQUFDN0UsRUFBRCxDQUFULENBQWpCO0FBQ0Q7QUFIOEQsQ0FBaEUsQ0FBRDs7QUNSQSxJQUFJcVMsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJeUYsYUFBVyxHQUFHekYsV0FBbEI7O0FBQ0EsSUFBSStMLFFBQU0sR0FBRy9MLDhCQUFiOztBQUNBLElBQUlrRSxVQUFRLEdBQUdsRSxVQUFmOztBQUNBLElBQUk4RixlQUFhLEdBQUc5RixlQUFwQjs7QUFDQSxJQUFJNlUsZ0JBQWMsR0FBRzdVLHNCQUFyQjs7QUFDQSxJQUFJTSwwQkFBd0IsR0FBR04sOEJBQUEsQ0FBMkRrRyxDQUExRjtBQUdBOzs7QUFDQSxJQUFJVCxhQUFKLEVBQWlCO0FBQ2ZpTSxFQUFBQSxJQUFDLENBQUM7QUFBRTVHLElBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9Cb0ssSUFBQUEsS0FBSyxFQUFFLElBQTNCO0FBQWlDaEosSUFBQUEsTUFBTSxFQUFFSDtBQUF6QyxHQUFELEVBQW9EO0FBQ25EMHNCLElBQUFBLGdCQUFnQixFQUFFLFNBQVNBLGdCQUFULENBQTBCdDFCLENBQTFCLEVBQTZCO0FBQzdDLFVBQUk4QyxDQUFDLEdBQUcvQixVQUFRLENBQUMsSUFBRCxDQUFoQjtBQUNBLFVBQUlQLEdBQUcsR0FBR21DLGVBQWEsQ0FBQzNDLENBQUQsQ0FBdkI7QUFDQSxVQUFJeVIsSUFBSjs7QUFDQSxTQUFHO0FBQ0QsWUFBSUEsSUFBSSxHQUFHdFUsMEJBQXdCLENBQUMyRixDQUFELEVBQUl0QyxHQUFKLENBQW5DLEVBQTZDLE9BQU9pUixJQUFJLENBQUN6VSxHQUFaO0FBQzlDLE9BRkQsUUFFUzhGLENBQUMsR0FBRzRPLGdCQUFjLENBQUM1TyxDQUFELENBRjNCO0FBR0Q7QUFSa0QsR0FBcEQsQ0FBRDtBQVVEOztBQ3JCRCxJQUFJeUwsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJeUYsYUFBVyxHQUFHekYsV0FBbEI7O0FBQ0EsSUFBSStMLFFBQU0sR0FBRy9MLDhCQUFiOztBQUNBLElBQUlrRSxVQUFRLEdBQUdsRSxVQUFmOztBQUNBLElBQUk4RixlQUFhLEdBQUc5RixlQUFwQjs7QUFDQSxJQUFJNlUsZ0JBQWMsR0FBRzdVLHNCQUFyQjs7QUFDQSxJQUFJTSwwQkFBd0IsR0FBR04sOEJBQUEsQ0FBMkRrRyxDQUExRjtBQUdBOzs7QUFDQSxJQUFJVCxhQUFKLEVBQWlCO0FBQ2ZpTSxFQUFBQSxJQUFDLENBQUM7QUFBRTVHLElBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9Cb0ssSUFBQUEsS0FBSyxFQUFFLElBQTNCO0FBQWlDaEosSUFBQUEsTUFBTSxFQUFFSDtBQUF6QyxHQUFELEVBQW9EO0FBQ25EMnNCLElBQUFBLGdCQUFnQixFQUFFLFNBQVNBLGdCQUFULENBQTBCdjFCLENBQTFCLEVBQTZCO0FBQzdDLFVBQUk4QyxDQUFDLEdBQUcvQixVQUFRLENBQUMsSUFBRCxDQUFoQjtBQUNBLFVBQUlQLEdBQUcsR0FBR21DLGVBQWEsQ0FBQzNDLENBQUQsQ0FBdkI7QUFDQSxVQUFJeVIsSUFBSjs7QUFDQSxTQUFHO0FBQ0QsWUFBSUEsSUFBSSxHQUFHdFUsMEJBQXdCLENBQUMyRixDQUFELEVBQUl0QyxHQUFKLENBQW5DLEVBQTZDLE9BQU9pUixJQUFJLENBQUMxTixHQUFaO0FBQzlDLE9BRkQsUUFFU2pCLENBQUMsR0FBRzRPLGdCQUFjLENBQUM1TyxDQUFELENBRjNCO0FBR0Q7QUFSa0QsR0FBcEQsQ0FBRDtBQVVEOztBQ3RCRCxJQUFJeUwsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJcUQsVUFBUSxHQUFHckQsVUFBZjs7QUFDQSxJQUFJc3VCLFVBQVEsR0FBR3R1Qix3QkFBQSxDQUEwQ3N1QixRQUF6RDs7QUFDQSxJQUFJUixVQUFRLEdBQUc5dEIsUUFBZjs7QUFDQSxJQUFJRCxPQUFLLEdBQUdDLFFBQVo7OztBQUdBLElBQUkyNEIsa0JBQWtCLEdBQUcxNEIsTUFBTSxDQUFDMnRCLGlCQUFoQztBQUNBLElBQUlrSyxxQkFBbUIsR0FBRy8zQixPQUFLLENBQUMsWUFBWTtBQUFFNDRCLEVBQUFBLGtCQUFrQixDQUFDLENBQUQsQ0FBbEI7QUFBd0IsQ0FBdkMsQ0FBL0I7QUFHQTs7QUFDQWpuQixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9CZ0IsRUFBQUEsSUFBSSxFQUFFLElBQTFCO0FBQWdDSSxFQUFBQSxNQUFNLEVBQUU0ckIscUJBQXhDO0FBQTZEbDFCLEVBQUFBLElBQUksRUFBRSxDQUFDa3JCO0FBQXBFLENBQUQsRUFBaUY7QUFDaEZGLEVBQUFBLGlCQUFpQixFQUFFLFNBQVNBLGlCQUFULENBQTJCdnVCLEVBQTNCLEVBQStCO0FBQ2hELFdBQU9zNUIsa0JBQWtCLElBQUl0MUIsVUFBUSxDQUFDaEUsRUFBRCxDQUE5QixHQUFxQ3M1QixrQkFBa0IsQ0FBQ3JLLFVBQVEsQ0FBQ2p2QixFQUFELENBQVQsQ0FBdkQsR0FBd0VBLEVBQS9FO0FBQ0Q7QUFIK0UsQ0FBakYsQ0FBRDs7QUNaQSxJQUFJcVMsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJcUQsVUFBUSxHQUFHckQsVUFBZjs7QUFDQSxJQUFJc3VCLFFBQVEsR0FBR3R1Qix3QkFBQSxDQUEwQ3N1QixRQUF6RDs7QUFDQSxJQUFJUixVQUFRLEdBQUc5dEIsUUFBZjs7QUFDQSxJQUFJRCxPQUFLLEdBQUdDLFFBQVo7OztBQUdBLElBQUk0NEIsS0FBSyxHQUFHMzRCLE1BQU0sQ0FBQzQ0QixJQUFuQjtBQUNBLElBQUlmLG1CQUFtQixHQUFHLzNCLE9BQUssQ0FBQyxZQUFZO0FBQUU2NEIsRUFBQUEsS0FBSyxDQUFDLENBQUQsQ0FBTDtBQUFXLENBQTFCLENBQS9CO0FBR0E7O0FBQ0FsbkIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQmdCLEVBQUFBLElBQUksRUFBRSxJQUExQjtBQUFnQ0ksRUFBQUEsTUFBTSxFQUFFNHJCLG1CQUF4QztBQUE2RGwxQixFQUFBQSxJQUFJLEVBQUUsQ0FBQ2tyQjtBQUFwRSxDQUFELEVBQWlGO0FBQ2hGK0ssRUFBQUEsSUFBSSxFQUFFLFNBQVNBLElBQVQsQ0FBY3g1QixFQUFkLEVBQWtCO0FBQ3RCLFdBQU91NUIsS0FBSyxJQUFJdjFCLFVBQVEsQ0FBQ2hFLEVBQUQsQ0FBakIsR0FBd0J1NUIsS0FBSyxDQUFDdEssUUFBUSxDQUFDanZCLEVBQUQsQ0FBVCxDQUE3QixHQUE4Q0EsRUFBckQ7QUFDRDtBQUgrRSxDQUFqRixDQUFEOztBQ1pBLElBQUlxUyxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlnVixnQkFBYyxHQUFHaFYsc0JBQXJCO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQmdCLEVBQUFBLElBQUksRUFBRTtBQUExQixDQUFELEVBQW1DO0FBQ2xDa0osRUFBQUEsY0FBYyxFQUFFQTtBQURrQixDQUFuQyxDQUFEOztBQ0pBLElBQUkxSSx1QkFBcUIsR0FBR3RNLGtCQUE1Qjs7QUFDQSxJQUFJa0IsU0FBTyxHQUFHbEIsU0FBZDtBQUdBOzs7SUFDQVQsY0FBQSxHQUFpQitNLHVCQUFxQixHQUFHLEdBQUd0TCxRQUFOLEdBQWlCLFNBQVNBLFFBQVQsR0FBb0I7QUFDekUsU0FBTyxhQUFhRSxTQUFPLENBQUMsSUFBRCxDQUFwQixHQUE2QixHQUFwQztBQUNELENBRkQ7O0FDTkEsSUFBSW9MLHFCQUFxQixHQUFHdE0sa0JBQTVCOztBQUNBLElBQUl5TCxVQUFRLEdBQUd6TCxrQkFBZjs7QUFDQSxJQUFJZ0IsVUFBUSxHQUFHaEIsY0FBZjtBQUdBOzs7QUFDQSxJQUFJLENBQUNzTSxxQkFBTCxFQUE0QjtBQUMxQmIsRUFBQUEsVUFBUSxDQUFDeEwsTUFBTSxDQUFDK0gsU0FBUixFQUFtQixVQUFuQixFQUErQmhILFVBQS9CLEVBQXlDO0FBQUUySCxJQUFBQSxNQUFNLEVBQUU7QUFBVixHQUF6QyxDQUFSO0FBQ0Q7O0FDUkQsSUFBSStJLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSTg0QixPQUFPLEdBQUc5NEIsYUFBQSxDQUF3Q3NkLE1BQXREO0FBR0E7OztBQUNBNUwsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQmdCLEVBQUFBLElBQUksRUFBRTtBQUExQixDQUFELEVBQW1DO0FBQ2xDd1IsRUFBQUEsTUFBTSxFQUFFLFNBQVNBLE1BQVQsQ0FBZ0JyWCxDQUFoQixFQUFtQjtBQUN6QixXQUFPNnlCLE9BQU8sQ0FBQzd5QixDQUFELENBQWQ7QUFDRDtBQUhpQyxDQUFuQyxDQUFEOztBQ0xBLElBQUl5TCxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUk2MUIsV0FBVyxHQUFHNzFCLGdCQUFsQjtBQUdBOzs7QUFDQTBSLElBQUMsQ0FBQztBQUFFL1IsRUFBQUEsTUFBTSxFQUFFLElBQVY7QUFBZ0J1TSxFQUFBQSxNQUFNLEVBQUU0cEIsVUFBVSxJQUFJRDtBQUF0QyxDQUFELEVBQXNEO0FBQ3JEQyxFQUFBQSxVQUFVLEVBQUVEO0FBRHlDLENBQXRELENBQUQ7O0FDTEEsSUFBSW5rQixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlnMkIsU0FBUyxHQUFHaDJCLGNBQWhCO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUUvUixFQUFBQSxNQUFNLEVBQUUsSUFBVjtBQUFnQnVNLEVBQUFBLE1BQU0sRUFBRWtwQixRQUFRLElBQUlZO0FBQXBDLENBQUQsRUFBa0Q7QUFDakRaLEVBQUFBLFFBQVEsRUFBRVk7QUFEdUMsQ0FBbEQsQ0FBRDs7QUNMQSxJQUFJcjJCLFFBQU0sR0FBR0ssUUFBYjs7SUFFQVQsd0JBQUEsR0FBaUJJLFFBQU0sQ0FBQ281QixPQUF4Qjs7QUNGQSxJQUFJLzJCLFdBQVMsR0FBR2hDLGVBQWhCOztJQUVBVCxXQUFBLEdBQWlCLHFDQUFxQ29ILElBQXJDLENBQTBDM0UsV0FBMUMsQ0FBakI7O0FDRkEsSUFBSXJDLFFBQU0sR0FBR0ssUUFBYjs7QUFDQSxJQUFJeUIsWUFBVSxHQUFHekIsWUFBakI7O0FBQ0EsSUFBSUQsT0FBSyxHQUFHQyxRQUFaOztBQUNBLElBQUlzUSxNQUFJLEdBQUd0USxtQkFBWDs7QUFDQSxJQUFJK00sSUFBSSxHQUFHL00sTUFBWDs7QUFDQSxJQUFJd0YsYUFBYSxHQUFHeEYsdUJBQXBCOztBQUNBLElBQUlnNUIsUUFBTSxHQUFHaDVCLFdBQWI7O0FBQ0EsSUFBSWdmLFNBQU8sR0FBR2hmLFlBQWQ7O0FBRUEsSUFBSWtILEtBQUcsR0FBR3ZILFFBQU0sQ0FBQ3M1QixZQUFqQjtBQUNBLElBQUloSixLQUFLLEdBQUd0d0IsUUFBTSxDQUFDdTVCLGNBQW5CO0FBQ0EsSUFBSWozQixTQUFPLEdBQUd0QyxRQUFNLENBQUNzQyxPQUFyQjtBQUNBLElBQUlrM0IsY0FBYyxHQUFHeDVCLFFBQU0sQ0FBQ3c1QixjQUE1QjtBQUNBLElBQUlDLFVBQVEsR0FBR3o1QixRQUFNLENBQUN5NUIsUUFBdEI7QUFDQSxJQUFJQyxPQUFPLEdBQUcsQ0FBZDtBQUNBLElBQUlDLEtBQUssR0FBRyxFQUFaO0FBQ0EsSUFBSUMsa0JBQWtCLEdBQUcsb0JBQXpCO0FBQ0EsSUFBSUMsVUFBSixFQUFjQyxLQUFkLEVBQXFCQyxPQUFyQixFQUE4QkMsSUFBOUI7O0FBRUEsSUFBSTtBQUNGO0FBQ0FILEVBQUFBLFVBQVEsR0FBRzc1QixRQUFNLENBQUM2NUIsUUFBbEI7QUFDRCxDQUhELENBR0UsT0FBTzE1QixLQUFQLEVBQWM7QUFBRTtBQUFhOztBQUUvQixJQUFJODVCLEdBQUcsR0FBRyxVQUFVdjFCLEVBQVYsRUFBYztBQUN0QjtBQUNBLE1BQUlpMUIsS0FBSyxDQUFDbjFCLGNBQU4sQ0FBcUJFLEVBQXJCLENBQUosRUFBOEI7QUFDNUIsUUFBSWIsRUFBRSxHQUFHODFCLEtBQUssQ0FBQ2oxQixFQUFELENBQWQ7QUFDQSxXQUFPaTFCLEtBQUssQ0FBQ2oxQixFQUFELENBQVo7QUFDQWIsSUFBQUEsRUFBRTtBQUNIO0FBQ0YsQ0FQRDs7QUFTQSxJQUFJcTJCLE1BQU0sR0FBRyxVQUFVeDFCLEVBQVYsRUFBYztBQUN6QixTQUFPLFlBQVk7QUFDakJ1MUIsSUFBQUEsR0FBRyxDQUFDdjFCLEVBQUQsQ0FBSDtBQUNELEdBRkQ7QUFHRCxDQUpEOztBQU1BLElBQUl5MUIsUUFBUSxHQUFHLFVBQVVDLEtBQVYsRUFBaUI7QUFDOUJILEVBQUFBLEdBQUcsQ0FBQ0csS0FBSyxDQUFDNXVCLElBQVAsQ0FBSDtBQUNELENBRkQ7O0FBSUEsSUFBSTZ1QixJQUFJLEdBQUcsVUFBVTMxQixFQUFWLEVBQWM7QUFDdkI7QUFDQTFFLEVBQUFBLFFBQU0sQ0FBQ3M2QixXQUFQLENBQW1CdDNCLE1BQU0sQ0FBQzBCLEVBQUQsQ0FBekIsRUFBK0JtMUIsVUFBUSxDQUFDVSxRQUFULEdBQW9CLElBQXBCLEdBQTJCVixVQUFRLENBQUNXLElBQW5FO0FBQ0QsQ0FIRDs7O0FBTUEsSUFBSSxDQUFDanpCLEtBQUQsSUFBUSxDQUFDK29CLEtBQWIsRUFBb0I7QUFDbEIvb0IsRUFBQUEsS0FBRyxHQUFHLFNBQVMreEIsWUFBVCxDQUFzQnoxQixFQUF0QixFQUEwQjtBQUM5QixRQUFJMlEsSUFBSSxHQUFHLEVBQVg7QUFDQSxRQUFJdUYsZUFBZSxHQUFHN1gsU0FBUyxDQUFDQyxNQUFoQztBQUNBLFFBQUl1SSxDQUFDLEdBQUcsQ0FBUjs7QUFDQSxXQUFPcVAsZUFBZSxHQUFHclAsQ0FBekIsRUFBNEI4SixJQUFJLENBQUNwUSxJQUFMLENBQVVsQyxTQUFTLENBQUN3SSxDQUFDLEVBQUYsQ0FBbkI7O0FBQzVCaXZCLElBQUFBLEtBQUssQ0FBQyxFQUFFRCxPQUFILENBQUwsR0FBbUIsWUFBWTtBQUM3QjtBQUNBLE9BQUM1M0IsWUFBVSxDQUFDK0IsRUFBRCxDQUFWLEdBQWlCQSxFQUFqQixHQUFzQjVELFFBQVEsQ0FBQzRELEVBQUQsQ0FBL0IsRUFBcUNnTSxLQUFyQyxDQUEyQ3BPLFNBQTNDLEVBQXNEK1MsSUFBdEQ7QUFDRCxLQUhEOztBQUlBc2xCLElBQUFBLEtBQUssQ0FBQ0osT0FBRCxDQUFMO0FBQ0EsV0FBT0EsT0FBUDtBQUNELEdBWEQ7O0FBWUFwSixFQUFBQSxLQUFLLEdBQUcsU0FBU2lKLGNBQVQsQ0FBd0I3MEIsRUFBeEIsRUFBNEI7QUFDbEMsV0FBT2kxQixLQUFLLENBQUNqMUIsRUFBRCxDQUFaO0FBQ0QsR0FGRCxDQWJrQjs7O0FBaUJsQixNQUFJMmEsU0FBSixFQUFhO0FBQ1h5YSxJQUFBQSxLQUFLLEdBQUcsVUFBVXAxQixFQUFWLEVBQWM7QUFDcEJwQyxNQUFBQSxTQUFPLENBQUNtNEIsUUFBUixDQUFpQlAsTUFBTSxDQUFDeDFCLEVBQUQsQ0FBdkI7QUFDRCxLQUZELENBRFc7O0FBS1osR0FMRCxNQUtPLElBQUkrMEIsVUFBUSxJQUFJQSxVQUFRLENBQUNyUCxHQUF6QixFQUE4QjtBQUNuQzBQLElBQUFBLEtBQUssR0FBRyxVQUFVcDFCLEVBQVYsRUFBYztBQUNwQiswQixNQUFBQSxVQUFRLENBQUNyUCxHQUFULENBQWE4UCxNQUFNLENBQUN4MUIsRUFBRCxDQUFuQjtBQUNELEtBRkQsQ0FEbUM7QUFLckM7O0FBQ0MsR0FOTSxNQU1BLElBQUk4MEIsY0FBYyxJQUFJLENBQUNILFFBQXZCLEVBQStCO0FBQ3BDVSxJQUFBQSxPQUFPLEdBQUcsSUFBSVAsY0FBSixFQUFWO0FBQ0FRLElBQUFBLElBQUksR0FBR0QsT0FBTyxDQUFDVyxLQUFmO0FBQ0FYLElBQUFBLE9BQU8sQ0FBQ1ksS0FBUixDQUFjQyxTQUFkLEdBQTBCVCxRQUExQjtBQUNBTCxJQUFBQSxLQUFLLEdBQUducEIsTUFBSSxDQUFDcXBCLElBQUksQ0FBQ00sV0FBTixFQUFtQk4sSUFBbkIsRUFBeUIsQ0FBekIsQ0FBWixDQUpvQztBQU10QztBQUNDLEdBUE0sTUFPQSxJQUNMaDZCLFFBQU0sQ0FBQzY2QixnQkFBUCxJQUNBLzRCLFlBQVUsQ0FBQzlCLFFBQU0sQ0FBQ3M2QixXQUFSLENBRFYsSUFFQSxDQUFDdDZCLFFBQU0sQ0FBQzg2QixhQUZSLElBR0FqQixVQUhBLElBR1lBLFVBQVEsQ0FBQ1UsUUFBVCxLQUFzQixPQUhsQyxJQUlBLENBQUNuNkIsT0FBSyxDQUFDaTZCLElBQUQsQ0FMRCxFQU1MO0FBQ0FQLElBQUFBLEtBQUssR0FBR08sSUFBUjtBQUNBcjZCLElBQUFBLFFBQU0sQ0FBQzY2QixnQkFBUCxDQUF3QixTQUF4QixFQUFtQ1YsUUFBbkMsRUFBNkMsS0FBN0MsRUFGQTtBQUlELEdBVk0sTUFVQSxJQUFJUCxrQkFBa0IsSUFBSS96QixhQUFhLENBQUMsUUFBRCxDQUF2QyxFQUFtRDtBQUN4RGkwQixJQUFBQSxLQUFLLEdBQUcsVUFBVXAxQixFQUFWLEVBQWM7QUFDcEIwSSxNQUFBQSxJQUFJLENBQUNzQixXQUFMLENBQWlCN0ksYUFBYSxDQUFDLFFBQUQsQ0FBOUIsRUFBMEMrekIsa0JBQTFDLElBQWdFLFlBQVk7QUFDMUV4c0IsUUFBQUEsSUFBSSxDQUFDMnRCLFdBQUwsQ0FBaUIsSUFBakI7QUFDQWQsUUFBQUEsR0FBRyxDQUFDdjFCLEVBQUQsQ0FBSDtBQUNELE9BSEQ7QUFJRCxLQUxELENBRHdEOztBQVF6RCxHQVJNLE1BUUE7QUFDTG8xQixJQUFBQSxLQUFLLEdBQUcsVUFBVXAxQixFQUFWLEVBQWM7QUFDcEJzMkIsTUFBQUEsVUFBVSxDQUFDZCxNQUFNLENBQUN4MUIsRUFBRCxDQUFQLEVBQWEsQ0FBYixDQUFWO0FBQ0QsS0FGRDtBQUdEO0FBQ0Y7O0lBRUQ5RSxNQUFBLEdBQWlCO0FBQ2YySCxFQUFBQSxHQUFHLEVBQUVBLEtBRFU7QUFFZitvQixFQUFBQSxLQUFLLEVBQUVBO0FBRlEsQ0FBakI7O0FDN0dBLElBQUlqdUIsV0FBUyxHQUFHaEMsZUFBaEI7O0FBQ0EsSUFBSUwsUUFBTSxHQUFHSyxRQUFiOztJQUVBVCxpQkFBQSxHQUFpQixvQkFBb0JvSCxJQUFwQixDQUF5QjNFLFdBQXpCLEtBQXVDckMsUUFBTSxDQUFDaTdCLE1BQVAsS0FBa0J4NUIsU0FBMUU7O0FDSEEsSUFBSVksV0FBUyxHQUFHaEMsZUFBaEI7O0lBRUFULG1CQUFBLEdBQWlCLHFCQUFxQm9ILElBQXJCLENBQTBCM0UsV0FBMUIsQ0FBakI7O0FDRkEsSUFBSXJDLFFBQU0sR0FBR0ssUUFBYjs7QUFDQSxJQUFJTSwwQkFBd0IsR0FBR04sOEJBQUEsQ0FBMkRrRyxDQUExRjs7QUFDQSxJQUFJMjBCLFNBQVMsR0FBRzc2QixNQUFBLENBQTZCa0gsR0FBN0M7O0FBQ0EsSUFBSTh4QixNQUFNLEdBQUdoNUIsV0FBYjs7QUFDQSxJQUFJODZCLGFBQWEsR0FBRzk2QixpQkFBcEI7O0FBQ0EsSUFBSSs2QixlQUFlLEdBQUcvNkIsbUJBQXRCOztBQUNBLElBQUlnZixTQUFPLEdBQUdoZixZQUFkOztBQUVBLElBQUlnN0IsZ0JBQWdCLEdBQUdyN0IsUUFBTSxDQUFDcTdCLGdCQUFQLElBQTJCcjdCLFFBQU0sQ0FBQ3M3QixzQkFBekQ7QUFDQSxJQUFJMzFCLFVBQVEsR0FBRzNGLFFBQU0sQ0FBQzJGLFFBQXRCO0FBQ0EsSUFBSXJELFNBQU8sR0FBR3RDLFFBQU0sQ0FBQ3NDLE9BQXJCO0FBQ0EsSUFBSTgyQixTQUFPLEdBQUdwNUIsUUFBTSxDQUFDbzVCLE9BQXJCOztBQUVBLElBQUltQyx3QkFBd0IsR0FBRzU2QiwwQkFBd0IsQ0FBQ1gsUUFBRCxFQUFTLGdCQUFULENBQXZEO0FBQ0EsSUFBSXc3QixjQUFjLEdBQUdELHdCQUF3QixJQUFJQSx3QkFBd0IsQ0FBQ3I2QixLQUExRTtBQUVBLElBQUl1NkIsS0FBSixFQUFXQyxJQUFYLEVBQWlCakwsSUFBakIsRUFBdUJrTCxRQUF2QixFQUErQkMsTUFBL0IsRUFBdUNDLElBQXZDLEVBQTZDQyxPQUE3QyxFQUFzREMsSUFBdEQ7O0FBR0EsSUFBSSxDQUFDUCxjQUFMLEVBQXFCO0FBQ25CQyxFQUFBQSxLQUFLLEdBQUcsWUFBWTtBQUNsQixRQUFJTyxNQUFKLEVBQVluNEIsRUFBWjtBQUNBLFFBQUl3YixTQUFPLEtBQUsyYyxNQUFNLEdBQUcxNUIsU0FBTyxDQUFDMk0sTUFBdEIsQ0FBWCxFQUEwQytzQixNQUFNLENBQUNDLElBQVA7O0FBQzFDLFdBQU9QLElBQVAsRUFBYTtBQUNYNzNCLE1BQUFBLEVBQUUsR0FBRzYzQixJQUFJLENBQUM3M0IsRUFBVjtBQUNBNjNCLE1BQUFBLElBQUksR0FBR0EsSUFBSSxDQUFDNWtCLElBQVo7O0FBQ0EsVUFBSTtBQUNGalQsUUFBQUEsRUFBRTtBQUNILE9BRkQsQ0FFRSxPQUFPMUQsS0FBUCxFQUFjO0FBQ2QsWUFBSXU3QixJQUFKLEVBQVVDLFFBQU0sR0FBaEIsS0FDS2xMLElBQUksR0FBR2h2QixTQUFQO0FBQ0wsY0FBTXRCLEtBQU47QUFDRDtBQUNGOztBQUFDc3dCLElBQUFBLElBQUksR0FBR2h2QixTQUFQO0FBQ0YsUUFBSXU2QixNQUFKLEVBQVlBLE1BQU0sQ0FBQ0UsS0FBUDtBQUNiLEdBZkQsQ0FEbUI7QUFtQm5COzs7QUFDQSxNQUFJLENBQUM3QyxNQUFELElBQVcsQ0FBQ2hhLFNBQVosSUFBdUIsQ0FBQytiLGVBQXhCLElBQTJDQyxnQkFBM0MsSUFBK0QxMUIsVUFBbkUsRUFBNkU7QUFDM0VpMkIsSUFBQUEsTUFBTSxHQUFHLElBQVQ7QUFDQUMsSUFBQUEsSUFBSSxHQUFHbDJCLFVBQVEsQ0FBQ3cyQixjQUFULENBQXdCLEVBQXhCLENBQVA7QUFDQSxRQUFJZCxnQkFBSixDQUFxQkksS0FBckIsRUFBNEJXLE9BQTVCLENBQW9DUCxJQUFwQyxFQUEwQztBQUFFUSxNQUFBQSxhQUFhLEVBQUU7QUFBakIsS0FBMUM7O0FBQ0FWLElBQUFBLFFBQU0sR0FBRyxZQUFZO0FBQ25CRSxNQUFBQSxJQUFJLENBQUNyd0IsSUFBTCxHQUFZb3dCLE1BQU0sR0FBRyxDQUFDQSxNQUF0QjtBQUNELEtBRkQsQ0FKMkU7O0FBUTVFLEdBUkQsTUFRTyxJQUFJLENBQUNULGFBQUQsSUFBa0IvQixTQUFsQixJQUE2QkEsU0FBTyxDQUFDa0QsT0FBekMsRUFBa0Q7QUFDdkQ7QUFDQVIsSUFBQUEsT0FBTyxHQUFHMUMsU0FBTyxDQUFDa0QsT0FBUixDQUFnQjc2QixTQUFoQixDQUFWLENBRnVEOztBQUl2RHE2QixJQUFBQSxPQUFPLENBQUNyckIsV0FBUixHQUFzQjJvQixTQUF0QjtBQUNBMkMsSUFBQUEsSUFBSSxHQUFHRCxPQUFPLENBQUNDLElBQWY7O0FBQ0FKLElBQUFBLFFBQU0sR0FBRyxZQUFZO0FBQ25CSSxNQUFBQSxJQUFJLENBQUNsN0IsSUFBTCxDQUFVaTdCLE9BQVYsRUFBbUJMLEtBQW5CO0FBQ0QsS0FGRCxDQU51RDs7QUFVeEQsR0FWTSxNQVVBLElBQUlwYyxTQUFKLEVBQWE7QUFDbEJzYyxJQUFBQSxRQUFNLEdBQUcsWUFBWTtBQUNuQnI1QixNQUFBQSxTQUFPLENBQUNtNEIsUUFBUixDQUFpQmdCLEtBQWpCO0FBQ0QsS0FGRCxDQURrQjtBQUtwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNDLEdBVk0sTUFVQTtBQUNMRSxJQUFBQSxRQUFNLEdBQUcsWUFBWTtBQUNuQjtBQUNBVCxNQUFBQSxTQUFTLENBQUNyNkIsSUFBVixDQUFlYixRQUFmLEVBQXVCeTdCLEtBQXZCO0FBQ0QsS0FIRDtBQUlEO0FBQ0Y7O0lBRUQ3N0IsV0FBQSxHQUFpQjQ3QixjQUFjLElBQUksVUFBVTMzQixFQUFWLEVBQWM7QUFDL0MsTUFBSTA0QixJQUFJLEdBQUc7QUFBRTE0QixJQUFBQSxFQUFFLEVBQUVBLEVBQU47QUFBVWlULElBQUFBLElBQUksRUFBRXJWO0FBQWhCLEdBQVg7QUFDQSxNQUFJZ3ZCLElBQUosRUFBVUEsSUFBSSxDQUFDM1osSUFBTCxHQUFZeWxCLElBQVo7O0FBQ1YsTUFBSSxDQUFDYixJQUFMLEVBQVc7QUFDVEEsSUFBQUEsSUFBSSxHQUFHYSxJQUFQO0FBQ0FaLElBQUFBLFFBQU07QUFDUDs7QUFBQ2xMLEVBQUFBLElBQUksR0FBRzhMLElBQVA7QUFDSCxDQVBEOzs7O0FDMUVBLElBQUloNUIsV0FBUyxHQUFHbEQsV0FBaEI7O0FBRUEsSUFBSW04QixpQkFBaUIsR0FBRyxVQUFVaHNCLENBQVYsRUFBYTtBQUNuQyxNQUFJOHJCLE9BQUosRUFBYUcsTUFBYjtBQUNBLE9BQUtYLE9BQUwsR0FBZSxJQUFJdHJCLENBQUosQ0FBTSxVQUFVa3NCLFNBQVYsRUFBcUJDLFFBQXJCLEVBQStCO0FBQ2xELFFBQUlMLE9BQU8sS0FBSzc2QixTQUFaLElBQXlCZzdCLE1BQU0sS0FBS2g3QixTQUF4QyxFQUFtRCxNQUFNQyxTQUFTLENBQUMseUJBQUQsQ0FBZjtBQUNuRDQ2QixJQUFBQSxPQUFPLEdBQUdJLFNBQVY7QUFDQUQsSUFBQUEsTUFBTSxHQUFHRSxRQUFUO0FBQ0QsR0FKYyxDQUFmO0FBS0EsT0FBS0wsT0FBTCxHQUFlLzRCLFdBQVMsQ0FBQys0QixPQUFELENBQXhCO0FBQ0EsT0FBS0csTUFBTCxHQUFjbDVCLFdBQVMsQ0FBQ2s1QixNQUFELENBQXZCO0FBQ0QsQ0FURDtBQVlBOzs7d0JBQ0EsR0FBbUIsVUFBVWpzQixDQUFWLEVBQWE7QUFDOUIsU0FBTyxJQUFJZ3NCLGlCQUFKLENBQXNCaHNCLENBQXRCLENBQVA7QUFDRDs7QUNsQkQsSUFBSWhLLFdBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSXFELFVBQVEsR0FBR3JELFVBQWY7O0FBQ0EsSUFBSXU4QixzQkFBb0IsR0FBR3Y4QixzQkFBM0I7O0lBRUFULGdCQUFBLEdBQWlCLFVBQVU0USxDQUFWLEVBQWFxUixDQUFiLEVBQWdCO0FBQy9CcmIsRUFBQUEsV0FBUSxDQUFDZ0ssQ0FBRCxDQUFSO0FBQ0EsTUFBSTlNLFVBQVEsQ0FBQ21lLENBQUQsQ0FBUixJQUFlQSxDQUFDLENBQUNwUixXQUFGLEtBQWtCRCxDQUFyQyxFQUF3QyxPQUFPcVIsQ0FBUDtBQUN4QyxNQUFJZ2IsaUJBQWlCLEdBQUdELHNCQUFvQixDQUFDcjJCLENBQXJCLENBQXVCaUssQ0FBdkIsQ0FBeEI7QUFDQSxNQUFJOHJCLE9BQU8sR0FBR08saUJBQWlCLENBQUNQLE9BQWhDO0FBQ0FBLEVBQUFBLE9BQU8sQ0FBQ3phLENBQUQsQ0FBUDtBQUNBLFNBQU9nYixpQkFBaUIsQ0FBQ2YsT0FBekI7QUFDRCxDQVBEOztBQ0pBLElBQUk5N0IsUUFBTSxHQUFHSyxRQUFiOztJQUVBVCxrQkFBQSxHQUFpQixVQUFVbUcsQ0FBVixFQUFhNEosQ0FBYixFQUFnQjtBQUMvQixNQUFJbXRCLE9BQU8sR0FBRzk4QixRQUFNLENBQUM4OEIsT0FBckI7O0FBQ0EsTUFBSUEsT0FBTyxJQUFJQSxPQUFPLENBQUMzOEIsS0FBdkIsRUFBOEI7QUFDNUIrQixJQUFBQSxTQUFTLENBQUNDLE1BQVYsS0FBcUIsQ0FBckIsR0FBeUIyNkIsT0FBTyxDQUFDMzhCLEtBQVIsQ0FBYzRGLENBQWQsQ0FBekIsR0FBNEMrMkIsT0FBTyxDQUFDMzhCLEtBQVIsQ0FBYzRGLENBQWQsRUFBaUI0SixDQUFqQixDQUE1QztBQUNEO0FBQ0YsQ0FMRDs7SUNGQS9QLFNBQUEsR0FBaUIsVUFBVU0sSUFBVixFQUFnQjtBQUMvQixNQUFJO0FBQ0YsV0FBTztBQUFFQyxNQUFBQSxLQUFLLEVBQUUsS0FBVDtBQUFnQmUsTUFBQUEsS0FBSyxFQUFFaEIsSUFBSTtBQUEzQixLQUFQO0FBQ0QsR0FGRCxDQUVFLE9BQU9DLEtBQVAsRUFBYztBQUNkLFdBQU87QUFBRUEsTUFBQUEsS0FBSyxFQUFFLElBQVQ7QUFBZWUsTUFBQUEsS0FBSyxFQUFFZjtBQUF0QixLQUFQO0FBQ0Q7QUFDRixDQU5EOztJQ0FBUCxlQUFBLEdBQWlCLE9BQU9FLE1BQVAsSUFBaUIsUUFBbEM7O0FDQ0EsSUFBSWlTLElBQUMsR0FBRzFSLE9BQVI7O0FBRUEsSUFBSUwsUUFBTSxHQUFHSyxRQUFiOztBQUNBLElBQUkrQixZQUFVLEdBQUcvQixZQUFqQjs7QUFDQSxJQUFJMDhCLGVBQWEsR0FBRzE4Qix3QkFBcEI7O0FBQ0EsSUFBSXlMLFVBQVEsR0FBR3pMLGtCQUFmOztBQUNBLElBQUk0akIsYUFBVyxHQUFHNWpCLGFBQWxCOztBQUNBLElBQUlnVixnQkFBYyxHQUFHaFYsc0JBQXJCOztBQUNBLElBQUkrUixnQkFBYyxHQUFHL1IsZ0JBQXJCOztBQUNBLElBQUk4aEIsWUFBVSxHQUFHOWhCLFlBQWpCOztBQUNBLElBQUlrRCxXQUFTLEdBQUdsRCxXQUFoQjs7QUFDQSxJQUFJeUIsWUFBVSxHQUFHekIsWUFBakI7O0FBQ0EsSUFBSXFELFVBQVEsR0FBR3JELFVBQWY7O0FBQ0EsSUFBSTZqQixZQUFVLEdBQUc3akIsWUFBakI7O0FBQ0EsSUFBSXlHLGFBQWEsR0FBR3pHLGVBQXBCOztBQUNBLElBQUlnWCxTQUFPLEdBQUdoWCxTQUFkOztBQUNBLElBQUkyYiw2QkFBMkIsR0FBRzNiLDZCQUFsQzs7QUFDQSxJQUFJc3BCLG9CQUFrQixHQUFHdHBCLG9CQUF6Qjs7QUFDQSxJQUFJazhCLE1BQUksR0FBR2w4QixNQUFBLENBQTZCa0gsR0FBeEM7O0FBQ0EsSUFBSXkxQixXQUFTLEdBQUczOEIsV0FBaEI7O0FBQ0EsSUFBSTQ4QixnQkFBYyxHQUFHNThCLGdCQUFyQjs7QUFDQSxJQUFJNjhCLGtCQUFnQixHQUFHNzhCLGtCQUF2Qjs7QUFDQSxJQUFJODhCLDRCQUEwQixHQUFHOThCLHNCQUFqQzs7QUFDQSxJQUFJKzhCLFNBQU8sR0FBRy84QixTQUFkOztBQUNBLElBQUlxSSxxQkFBbUIsR0FBR3JJLGFBQTFCOztBQUNBLElBQUlnTCxVQUFRLEdBQUdoTCxVQUFmOztBQUNBLElBQUlpRixpQkFBZSxHQUFHakYsaUJBQXRCOztBQUNBLElBQUlnOUIsVUFBVSxHQUFHaDlCLGVBQWpCOztBQUNBLElBQUlnZixTQUFPLEdBQUdoZixZQUFkOztBQUNBLElBQUl1QyxVQUFVLEdBQUd2QyxlQUFqQjs7QUFFQSxJQUFJaVEsU0FBTyxHQUFHaEwsaUJBQWUsQ0FBQyxTQUFELENBQTdCO0FBQ0EsSUFBSWc0QixPQUFPLEdBQUcsU0FBZDtBQUNBLElBQUkxMEIsa0JBQWdCLEdBQUdGLHFCQUFtQixDQUFDbEksR0FBM0M7QUFDQSxJQUFJZ1Msa0JBQWdCLEdBQUc5SixxQkFBbUIsQ0FBQ25CLEdBQTNDO0FBQ0EsSUFBSWcyQix1QkFBdUIsR0FBRzcwQixxQkFBbUIsQ0FBQ2hCLFNBQXBCLENBQThCNDFCLE9BQTlCLENBQTlCO0FBQ0EsSUFBSUUsc0JBQXNCLEdBQUdULGVBQWEsSUFBSUEsZUFBYSxDQUFDMTBCLFNBQTVEO0FBQ0EsSUFBSW8xQixrQkFBa0IsR0FBR1YsZUFBekI7QUFDQSxJQUFJVywyQkFBMkIsR0FBR0Ysc0JBQWxDO0FBQ0EsSUFBSTk3QixXQUFTLEdBQUcxQixRQUFNLENBQUMwQixTQUF2QjtBQUNBLElBQUlpRSxVQUFRLEdBQUczRixRQUFNLENBQUMyRixRQUF0QjtBQUNBLElBQUlyRCxTQUFPLEdBQUd0QyxRQUFNLENBQUNzQyxPQUFyQjtBQUNBLElBQUlzNkIsb0JBQW9CLEdBQUdPLDRCQUEwQixDQUFDNTJCLENBQXREO0FBQ0EsSUFBSW8zQiwyQkFBMkIsR0FBR2Ysb0JBQWxDO0FBQ0EsSUFBSWdCLGNBQWMsR0FBRyxDQUFDLEVBQUVqNEIsVUFBUSxJQUFJQSxVQUFRLENBQUNrNEIsV0FBckIsSUFBb0M3OUIsUUFBTSxDQUFDODlCLGFBQTdDLENBQXRCO0FBQ0EsSUFBSUMsc0JBQXNCLEdBQUdqOEIsWUFBVSxDQUFDOUIsUUFBTSxDQUFDZytCLHFCQUFSLENBQXZDO0FBQ0EsSUFBSUMsbUJBQW1CLEdBQUcsb0JBQTFCO0FBQ0EsSUFBSUMsaUJBQWlCLEdBQUcsa0JBQXhCO0FBQ0EsSUFBSUMsT0FBTyxHQUFHLENBQWQ7QUFDQSxJQUFJQyxTQUFTLEdBQUcsQ0FBaEI7QUFDQSxJQUFJQyxRQUFRLEdBQUcsQ0FBZjtBQUNBLElBQUlDLE9BQU8sR0FBRyxDQUFkO0FBQ0EsSUFBSUMsU0FBUyxHQUFHLENBQWhCO0FBQ0EsSUFBSUMsV0FBVyxHQUFHLEtBQWxCO0FBQ0EsSUFBSUMsUUFBSixFQUFjQyxvQkFBZCxFQUFvQ0MsY0FBcEMsRUFBb0RDLFVBQXBEO0FBRUEsSUFBSXh5QixRQUFNLEdBQUdmLFVBQVEsQ0FBQ2l5QixPQUFELEVBQVUsWUFBWTtBQUN6QyxNQUFJdUIsMEJBQTBCLEdBQUcvM0IsYUFBYSxDQUFDMjJCLGtCQUFELENBQTlDO0FBQ0EsTUFBSXFCLHNCQUFzQixHQUFHRCwwQkFBMEIsS0FBSzc3QixNQUFNLENBQUN5NkIsa0JBQUQsQ0FBbEUsQ0FGeUM7QUFJekM7QUFDQTs7QUFDQSxNQUFJLENBQUNxQixzQkFBRCxJQUEyQmw4QixVQUFVLEtBQUssRUFBOUMsRUFBa0QsT0FBTyxJQUFQLENBTlQ7QUFVekM7QUFDQTs7QUFDQSxNQUFJQSxVQUFVLElBQUksRUFBZCxJQUFvQixjQUFjb0UsSUFBZCxDQUFtQjYzQiwwQkFBbkIsQ0FBeEIsRUFBd0UsT0FBTyxLQUFQLENBWi9COztBQWN6QyxNQUFJL0MsT0FBTyxHQUFHLElBQUkyQixrQkFBSixDQUF1QixVQUFVbkIsT0FBVixFQUFtQjtBQUFFQSxJQUFBQSxPQUFPLENBQUMsQ0FBRCxDQUFQO0FBQWEsR0FBekQsQ0FBZDs7QUFDQSxNQUFJeUMsV0FBVyxHQUFHLFVBQVU3K0IsSUFBVixFQUFnQjtBQUNoQ0EsSUFBQUEsSUFBSSxDQUFDLFlBQVk7QUFBRTtBQUFhLEtBQTVCLEVBQThCLFlBQVk7QUFBRTtBQUFhLEtBQXpELENBQUo7QUFDRCxHQUZEOztBQUdBLE1BQUl1USxXQUFXLEdBQUdxckIsT0FBTyxDQUFDcnJCLFdBQVIsR0FBc0IsRUFBeEM7QUFDQUEsRUFBQUEsV0FBVyxDQUFDSCxTQUFELENBQVgsR0FBdUJ5dUIsV0FBdkI7QUFDQVAsRUFBQUEsV0FBVyxHQUFHMUMsT0FBTyxDQUFDQyxJQUFSLENBQWEsWUFBWTtBQUFFO0FBQWEsR0FBeEMsYUFBcURnRCxXQUFuRTtBQUNBLE1BQUksQ0FBQ1AsV0FBTCxFQUFrQixPQUFPLElBQVAsQ0FyQnVCOztBQXVCekMsU0FBTyxDQUFDTSxzQkFBRCxJQUEyQnpCLFVBQTNCLElBQXlDLENBQUNVLHNCQUFqRDtBQUNELENBeEJvQixDQUFyQjtBQTBCQSxJQUFJOWhCLG1CQUFtQixHQUFHN1AsUUFBTSxJQUFJLENBQUM0UCw2QkFBMkIsQ0FBQyxVQUFVeEYsUUFBVixFQUFvQjtBQUNuRmluQixFQUFBQSxrQkFBa0IsQ0FBQ3VCLEdBQW5CLENBQXVCeG9CLFFBQXZCLEVBQWlDLE9BQWpDLEVBQTBDLFlBQVk7QUFBRTtBQUFhLEdBQXJFO0FBQ0QsQ0FGK0QsQ0FBaEU7O0FBS0EsSUFBSXlvQixVQUFVLEdBQUcsVUFBVXYvQixFQUFWLEVBQWM7QUFDN0IsTUFBSXE4QixJQUFKO0FBQ0EsU0FBT3I0QixVQUFRLENBQUNoRSxFQUFELENBQVIsSUFBZ0JvQyxZQUFVLENBQUNpNkIsSUFBSSxHQUFHcjhCLEVBQUUsQ0FBQ3E4QixJQUFYLENBQTFCLEdBQTZDQSxJQUE3QyxHQUFvRCxLQUEzRDtBQUNELENBSEQ7O0FBS0EsSUFBSUosTUFBTSxHQUFHLFVBQVUvekIsS0FBVixFQUFpQnMzQixRQUFqQixFQUEyQjtBQUN0QyxNQUFJdDNCLEtBQUssQ0FBQ3UzQixRQUFWLEVBQW9CO0FBQ3BCdjNCLEVBQUFBLEtBQUssQ0FBQ3UzQixRQUFOLEdBQWlCLElBQWpCO0FBQ0EsTUFBSUMsS0FBSyxHQUFHeDNCLEtBQUssQ0FBQ3kzQixTQUFsQjtBQUNBckMsRUFBQUEsV0FBUyxDQUFDLFlBQVk7QUFDcEIsUUFBSTk3QixLQUFLLEdBQUcwRyxLQUFLLENBQUMxRyxLQUFsQjtBQUNBLFFBQUlvK0IsRUFBRSxHQUFHMTNCLEtBQUssQ0FBQ0EsS0FBTixJQUFldzJCLFNBQXhCO0FBQ0EsUUFBSXgwQixLQUFLLEdBQUcsQ0FBWixDQUhvQjs7QUFLcEIsV0FBT3cxQixLQUFLLENBQUNqOUIsTUFBTixHQUFleUgsS0FBdEIsRUFBNkI7QUFDM0IsVUFBSTIxQixRQUFRLEdBQUdILEtBQUssQ0FBQ3gxQixLQUFLLEVBQU4sQ0FBcEI7QUFDQSxVQUFJNDFCLE9BQU8sR0FBR0YsRUFBRSxHQUFHQyxRQUFRLENBQUNELEVBQVosR0FBaUJDLFFBQVEsQ0FBQ0UsSUFBMUM7QUFDQSxVQUFJbkQsT0FBTyxHQUFHaUQsUUFBUSxDQUFDakQsT0FBdkI7QUFDQSxVQUFJRyxNQUFNLEdBQUc4QyxRQUFRLENBQUM5QyxNQUF0QjtBQUNBLFVBQUl4dEIsTUFBTSxHQUFHc3dCLFFBQVEsQ0FBQ3R3QixNQUF0QjtBQUNBLFVBQUl4SixNQUFKLEVBQVlzMkIsSUFBWixFQUFrQjJELE1BQWxCOztBQUNBLFVBQUk7QUFDRixZQUFJRixPQUFKLEVBQWE7QUFDWCxjQUFJLENBQUNGLEVBQUwsRUFBUztBQUNQLGdCQUFJMTNCLEtBQUssQ0FBQyszQixTQUFOLEtBQW9CcEIsU0FBeEIsRUFBbUNxQixpQkFBaUIsQ0FBQ2g0QixLQUFELENBQWpCO0FBQ25DQSxZQUFBQSxLQUFLLENBQUMrM0IsU0FBTixHQUFrQnJCLE9BQWxCO0FBQ0Q7O0FBQ0QsY0FBSWtCLE9BQU8sS0FBSyxJQUFoQixFQUFzQi81QixNQUFNLEdBQUd2RSxLQUFULENBQXRCLEtBQ0s7QUFDSCxnQkFBSStOLE1BQUosRUFBWUEsTUFBTSxDQUFDaXRCLEtBQVA7QUFDWnoyQixZQUFBQSxNQUFNLEdBQUcrNUIsT0FBTyxDQUFDdCtCLEtBQUQsQ0FBaEIsQ0FGRzs7QUFHSCxnQkFBSStOLE1BQUosRUFBWTtBQUNWQSxjQUFBQSxNQUFNLENBQUNndEIsSUFBUDtBQUNBeUQsY0FBQUEsTUFBTSxHQUFHLElBQVQ7QUFDRDtBQUNGOztBQUNELGNBQUlqNkIsTUFBTSxLQUFLODVCLFFBQVEsQ0FBQ3pELE9BQXhCLEVBQWlDO0FBQy9CVyxZQUFBQSxNQUFNLENBQUMvNkIsV0FBUyxDQUFDLHFCQUFELENBQVYsQ0FBTjtBQUNELFdBRkQsTUFFTyxJQUFJcTZCLElBQUksR0FBR2tELFVBQVUsQ0FBQ3g1QixNQUFELENBQXJCLEVBQStCO0FBQ3BDczJCLFlBQUFBLElBQUksQ0FBQ2w3QixJQUFMLENBQVU0RSxNQUFWLEVBQWtCNjJCLE9BQWxCLEVBQTJCRyxNQUEzQjtBQUNELFdBRk0sTUFFQUgsT0FBTyxDQUFDNzJCLE1BQUQsQ0FBUDtBQUNSLFNBbkJELE1BbUJPZzNCLE1BQU0sQ0FBQ3Y3QixLQUFELENBQU47QUFDUixPQXJCRCxDQXFCRSxPQUFPZixLQUFQLEVBQWM7QUFDZCxZQUFJOE8sTUFBTSxJQUFJLENBQUN5d0IsTUFBZixFQUF1Qnp3QixNQUFNLENBQUNndEIsSUFBUDtBQUN2QlEsUUFBQUEsTUFBTSxDQUFDdDhCLEtBQUQsQ0FBTjtBQUNEO0FBQ0Y7O0FBQ0R5SCxJQUFBQSxLQUFLLENBQUN5M0IsU0FBTixHQUFrQixFQUFsQjtBQUNBejNCLElBQUFBLEtBQUssQ0FBQ3UzQixRQUFOLEdBQWlCLEtBQWpCO0FBQ0EsUUFBSUQsUUFBUSxJQUFJLENBQUN0M0IsS0FBSyxDQUFDKzNCLFNBQXZCLEVBQWtDRSxXQUFXLENBQUNqNEIsS0FBRCxDQUFYO0FBQ25DLEdBekNRLENBQVQ7QUEwQ0QsQ0E5Q0Q7O0FBZ0RBLElBQUlrMkIsZUFBYSxHQUFHLFVBQVU1NEIsSUFBVixFQUFnQjQyQixPQUFoQixFQUF5QmdFLE1BQXpCLEVBQWlDO0FBQ25ELE1BQUkxRixLQUFKLEVBQVdvRixPQUFYOztBQUNBLE1BQUk1QixjQUFKLEVBQW9CO0FBQ2xCeEQsSUFBQUEsS0FBSyxHQUFHejBCLFVBQVEsQ0FBQ2s0QixXQUFULENBQXFCLE9BQXJCLENBQVI7QUFDQXpELElBQUFBLEtBQUssQ0FBQzBCLE9BQU4sR0FBZ0JBLE9BQWhCO0FBQ0ExQixJQUFBQSxLQUFLLENBQUMwRixNQUFOLEdBQWVBLE1BQWY7QUFDQTFGLElBQUFBLEtBQUssQ0FBQzJGLFNBQU4sQ0FBZ0I3NkIsSUFBaEIsRUFBc0IsS0FBdEIsRUFBNkIsSUFBN0I7QUFDQWxGLElBQUFBLFFBQU0sQ0FBQzg5QixhQUFQLENBQXFCMUQsS0FBckI7QUFDRCxHQU5ELE1BTU9BLEtBQUssR0FBRztBQUFFMEIsSUFBQUEsT0FBTyxFQUFFQSxPQUFYO0FBQW9CZ0UsSUFBQUEsTUFBTSxFQUFFQTtBQUE1QixHQUFSOztBQUNQLE1BQUksQ0FBQy9CLHNCQUFELEtBQTRCeUIsT0FBTyxHQUFHeC9CLFFBQU0sQ0FBQyxPQUFPa0YsSUFBUixDQUE1QyxDQUFKLEVBQWdFczZCLE9BQU8sQ0FBQ3BGLEtBQUQsQ0FBUCxDQUFoRSxLQUNLLElBQUlsMUIsSUFBSSxLQUFLKzRCLG1CQUFiLEVBQWtDZixrQkFBZ0IsQ0FBQyw2QkFBRCxFQUFnQzRDLE1BQWhDLENBQWhCO0FBQ3hDLENBWEQ7O0FBYUEsSUFBSUQsV0FBVyxHQUFHLFVBQVVqNEIsS0FBVixFQUFpQjtBQUNqQzIwQixFQUFBQSxNQUFJLENBQUMxN0IsSUFBTCxDQUFVYixRQUFWLEVBQWtCLFlBQVk7QUFDNUIsUUFBSTg3QixPQUFPLEdBQUdsMEIsS0FBSyxDQUFDTSxNQUFwQjtBQUNBLFFBQUloSCxLQUFLLEdBQUcwRyxLQUFLLENBQUMxRyxLQUFsQjtBQUNBLFFBQUk4K0IsWUFBWSxHQUFHQyxXQUFXLENBQUNyNEIsS0FBRCxDQUE5QjtBQUNBLFFBQUluQyxNQUFKOztBQUNBLFFBQUl1NkIsWUFBSixFQUFrQjtBQUNoQnY2QixNQUFBQSxNQUFNLEdBQUcyM0IsU0FBTyxDQUFDLFlBQVk7QUFDM0IsWUFBSS9kLFNBQUosRUFBYTtBQUNYL2MsVUFBQUEsU0FBTyxDQUFDNDlCLElBQVIsQ0FBYSxvQkFBYixFQUFtQ2gvQixLQUFuQyxFQUEwQzQ2QixPQUExQztBQUNELFNBRkQsTUFFT2dDLGVBQWEsQ0FBQ0csbUJBQUQsRUFBc0JuQyxPQUF0QixFQUErQjU2QixLQUEvQixDQUFiO0FBQ1IsT0FKZSxDQUFoQixDQURnQjs7QUFPaEIwRyxNQUFBQSxLQUFLLENBQUMrM0IsU0FBTixHQUFrQnRnQixTQUFPLElBQUk0Z0IsV0FBVyxDQUFDcjRCLEtBQUQsQ0FBdEIsR0FBZ0MyMkIsU0FBaEMsR0FBNENELE9BQTlEO0FBQ0EsVUFBSTc0QixNQUFNLENBQUN0RixLQUFYLEVBQWtCLE1BQU1zRixNQUFNLENBQUN2RSxLQUFiO0FBQ25CO0FBQ0YsR0FmRDtBQWdCRCxDQWpCRDs7QUFtQkEsSUFBSSsrQixXQUFXLEdBQUcsVUFBVXI0QixLQUFWLEVBQWlCO0FBQ2pDLFNBQU9BLEtBQUssQ0FBQyszQixTQUFOLEtBQW9CckIsT0FBcEIsSUFBK0IsQ0FBQzEyQixLQUFLLENBQUNvMEIsTUFBN0M7QUFDRCxDQUZEOztBQUlBLElBQUk0RCxpQkFBaUIsR0FBRyxVQUFVaDRCLEtBQVYsRUFBaUI7QUFDdkMyMEIsRUFBQUEsTUFBSSxDQUFDMTdCLElBQUwsQ0FBVWIsUUFBVixFQUFrQixZQUFZO0FBQzVCLFFBQUk4N0IsT0FBTyxHQUFHbDBCLEtBQUssQ0FBQ00sTUFBcEI7O0FBQ0EsUUFBSW1YLFNBQUosRUFBYTtBQUNYL2MsTUFBQUEsU0FBTyxDQUFDNDlCLElBQVIsQ0FBYSxrQkFBYixFQUFpQ3BFLE9BQWpDO0FBQ0QsS0FGRCxNQUVPZ0MsZUFBYSxDQUFDSSxpQkFBRCxFQUFvQnBDLE9BQXBCLEVBQTZCbDBCLEtBQUssQ0FBQzFHLEtBQW5DLENBQWI7QUFDUixHQUxEO0FBTUQsQ0FQRDs7QUFTQSxJQUFJeVAsTUFBSSxHQUFHLFVBQVU5TSxFQUFWLEVBQWMrRCxLQUFkLEVBQXFCdTRCLE1BQXJCLEVBQTZCO0FBQ3RDLFNBQU8sVUFBVWovQixLQUFWLEVBQWlCO0FBQ3RCMkMsSUFBQUEsRUFBRSxDQUFDK0QsS0FBRCxFQUFRMUcsS0FBUixFQUFlaS9CLE1BQWYsQ0FBRjtBQUNELEdBRkQ7QUFHRCxDQUpEOztBQU1BLElBQUlDLGNBQWMsR0FBRyxVQUFVeDRCLEtBQVYsRUFBaUIxRyxLQUFqQixFQUF3QmkvQixNQUF4QixFQUFnQztBQUNuRCxNQUFJdjRCLEtBQUssQ0FBQ3VQLElBQVYsRUFBZ0I7QUFDaEJ2UCxFQUFBQSxLQUFLLENBQUN1UCxJQUFOLEdBQWEsSUFBYjtBQUNBLE1BQUlncEIsTUFBSixFQUFZdjRCLEtBQUssR0FBR3U0QixNQUFSO0FBQ1p2NEIsRUFBQUEsS0FBSyxDQUFDMUcsS0FBTixHQUFjQSxLQUFkO0FBQ0EwRyxFQUFBQSxLQUFLLENBQUNBLEtBQU4sR0FBY3kyQixRQUFkO0FBQ0ExQyxFQUFBQSxNQUFNLENBQUMvekIsS0FBRCxFQUFRLElBQVIsQ0FBTjtBQUNELENBUEQ7O0FBU0EsSUFBSXk0QixlQUFlLEdBQUcsVUFBVXo0QixLQUFWLEVBQWlCMUcsS0FBakIsRUFBd0JpL0IsTUFBeEIsRUFBZ0M7QUFDcEQsTUFBSXY0QixLQUFLLENBQUN1UCxJQUFWLEVBQWdCO0FBQ2hCdlAsRUFBQUEsS0FBSyxDQUFDdVAsSUFBTixHQUFhLElBQWI7QUFDQSxNQUFJZ3BCLE1BQUosRUFBWXY0QixLQUFLLEdBQUd1NEIsTUFBUjs7QUFDWixNQUFJO0FBQ0YsUUFBSXY0QixLQUFLLENBQUNNLE1BQU4sS0FBaUJoSCxLQUFyQixFQUE0QixNQUFNUSxXQUFTLENBQUMsa0NBQUQsQ0FBZjtBQUM1QixRQUFJcTZCLElBQUksR0FBR2tELFVBQVUsQ0FBQy85QixLQUFELENBQXJCOztBQUNBLFFBQUk2NkIsSUFBSixFQUFVO0FBQ1JpQixNQUFBQSxXQUFTLENBQUMsWUFBWTtBQUNwQixZQUFJNU4sT0FBTyxHQUFHO0FBQUVqWSxVQUFBQSxJQUFJLEVBQUU7QUFBUixTQUFkOztBQUNBLFlBQUk7QUFDRjRrQixVQUFBQSxJQUFJLENBQUNsN0IsSUFBTCxDQUFVSyxLQUFWLEVBQ0V5UCxNQUFJLENBQUMwdkIsZUFBRCxFQUFrQmpSLE9BQWxCLEVBQTJCeG5CLEtBQTNCLENBRE4sRUFFRStJLE1BQUksQ0FBQ3l2QixjQUFELEVBQWlCaFIsT0FBakIsRUFBMEJ4bkIsS0FBMUIsQ0FGTjtBQUlELFNBTEQsQ0FLRSxPQUFPekgsS0FBUCxFQUFjO0FBQ2RpZ0MsVUFBQUEsY0FBYyxDQUFDaFIsT0FBRCxFQUFVanZCLEtBQVYsRUFBaUJ5SCxLQUFqQixDQUFkO0FBQ0Q7QUFDRixPQVZRLENBQVQ7QUFXRCxLQVpELE1BWU87QUFDTEEsTUFBQUEsS0FBSyxDQUFDMUcsS0FBTixHQUFjQSxLQUFkO0FBQ0EwRyxNQUFBQSxLQUFLLENBQUNBLEtBQU4sR0FBY3cyQixTQUFkO0FBQ0F6QyxNQUFBQSxNQUFNLENBQUMvekIsS0FBRCxFQUFRLEtBQVIsQ0FBTjtBQUNEO0FBQ0YsR0FwQkQsQ0FvQkUsT0FBT3pILEtBQVAsRUFBYztBQUNkaWdDLElBQUFBLGNBQWMsQ0FBQztBQUFFanBCLE1BQUFBLElBQUksRUFBRTtBQUFSLEtBQUQsRUFBa0JoWCxLQUFsQixFQUF5QnlILEtBQXpCLENBQWQ7QUFDRDtBQUNGLENBM0JEOzs7QUE4QkEsSUFBSXdFLFFBQUosRUFBWTtBQUNWO0FBQ0FxeEIsRUFBQUEsa0JBQWtCLEdBQUcsU0FBU3JFLE9BQVQsQ0FBaUJrSCxRQUFqQixFQUEyQjtBQUM5Q3BjLElBQUFBLFlBQVUsQ0FBQyxJQUFELEVBQU91WixrQkFBUCxFQUEyQkgsT0FBM0IsQ0FBVjtBQUNBLzVCLElBQUFBLFdBQVMsQ0FBQys4QixRQUFELENBQVQ7QUFDQTdCLElBQUFBLFFBQVEsQ0FBQzU5QixJQUFULENBQWMsSUFBZDtBQUNBLFFBQUkrRyxLQUFLLEdBQUdnQixrQkFBZ0IsQ0FBQyxJQUFELENBQTVCOztBQUNBLFFBQUk7QUFDRjAzQixNQUFBQSxRQUFRLENBQUMzdkIsTUFBSSxDQUFDMHZCLGVBQUQsRUFBa0J6NEIsS0FBbEIsQ0FBTCxFQUErQitJLE1BQUksQ0FBQ3l2QixjQUFELEVBQWlCeDRCLEtBQWpCLENBQW5DLENBQVI7QUFDRCxLQUZELENBRUUsT0FBT3pILEtBQVAsRUFBYztBQUNkaWdDLE1BQUFBLGNBQWMsQ0FBQ3g0QixLQUFELEVBQVF6SCxLQUFSLENBQWQ7QUFDRDtBQUNGLEdBVkQ7O0FBV0F1OUIsRUFBQUEsMkJBQTJCLEdBQUdELGtCQUFrQixDQUFDcDFCLFNBQWpELENBYlU7O0FBZVZvMkIsRUFBQUEsUUFBUSxHQUFHLFNBQVNyRixPQUFULENBQWlCa0gsUUFBakIsRUFBMkI7QUFDcEM5dEIsSUFBQUEsa0JBQWdCLENBQUMsSUFBRCxFQUFPO0FBQ3JCM0ssTUFBQUEsSUFBSSxFQUFFeTFCLE9BRGU7QUFFckJubUIsTUFBQUEsSUFBSSxFQUFFLEtBRmU7QUFHckJnb0IsTUFBQUEsUUFBUSxFQUFFLEtBSFc7QUFJckJuRCxNQUFBQSxNQUFNLEVBQUUsS0FKYTtBQUtyQnFELE1BQUFBLFNBQVMsRUFBRSxFQUxVO0FBTXJCTSxNQUFBQSxTQUFTLEVBQUUsS0FOVTtBQU9yQi8zQixNQUFBQSxLQUFLLEVBQUV1MkIsT0FQYztBQVFyQmo5QixNQUFBQSxLQUFLLEVBQUVPO0FBUmMsS0FBUCxDQUFoQjtBQVVELEdBWEQ7O0FBWUFnOUIsRUFBQUEsUUFBUSxDQUFDcDJCLFNBQVQsR0FBcUI0YixhQUFXLENBQUN5WiwyQkFBRCxFQUE4QjtBQUM1RDtBQUNBO0FBQ0EzQixJQUFBQSxJQUFJLEVBQUUsU0FBU0EsSUFBVCxDQUFjd0UsV0FBZCxFQUEyQkMsVUFBM0IsRUFBdUM7QUFDM0MsVUFBSTU0QixLQUFLLEdBQUcyMUIsdUJBQXVCLENBQUMsSUFBRCxDQUFuQztBQUNBLFVBQUlnQyxRQUFRLEdBQUczQyxvQkFBb0IsQ0FBQ2pULG9CQUFrQixDQUFDLElBQUQsRUFBTzhULGtCQUFQLENBQW5CLENBQW5DO0FBQ0E4QixNQUFBQSxRQUFRLENBQUNELEVBQVQsR0FBY3g5QixZQUFVLENBQUN5K0IsV0FBRCxDQUFWLEdBQTBCQSxXQUExQixHQUF3QyxJQUF0RDtBQUNBaEIsTUFBQUEsUUFBUSxDQUFDRSxJQUFULEdBQWdCMzlCLFlBQVUsQ0FBQzArQixVQUFELENBQVYsSUFBMEJBLFVBQTFDO0FBQ0FqQixNQUFBQSxRQUFRLENBQUN0d0IsTUFBVCxHQUFrQm9RLFNBQU8sR0FBRy9jLFNBQU8sQ0FBQzJNLE1BQVgsR0FBb0J4TixTQUE3QztBQUNBbUcsTUFBQUEsS0FBSyxDQUFDbzBCLE1BQU4sR0FBZSxJQUFmO0FBQ0FwMEIsTUFBQUEsS0FBSyxDQUFDeTNCLFNBQU4sQ0FBZ0JqN0IsSUFBaEIsQ0FBcUJtN0IsUUFBckI7QUFDQSxVQUFJMzNCLEtBQUssQ0FBQ0EsS0FBTixJQUFldTJCLE9BQW5CLEVBQTRCeEMsTUFBTSxDQUFDL3pCLEtBQUQsRUFBUSxLQUFSLENBQU47QUFDNUIsYUFBTzIzQixRQUFRLENBQUN6RCxPQUFoQjtBQUNELEtBYjJEO0FBYzVEO0FBQ0E7QUFDQSxhQUFTLFVBQVUwRSxVQUFWLEVBQXNCO0FBQzdCLGFBQU8sS0FBS3pFLElBQUwsQ0FBVXQ2QixTQUFWLEVBQXFCKytCLFVBQXJCLENBQVA7QUFDRDtBQWxCMkQsR0FBOUIsQ0FBaEM7O0FBb0JBOUIsRUFBQUEsb0JBQW9CLEdBQUcsWUFBWTtBQUNqQyxRQUFJNUMsT0FBTyxHQUFHLElBQUkyQyxRQUFKLEVBQWQ7QUFDQSxRQUFJNzJCLEtBQUssR0FBR2dCLGtCQUFnQixDQUFDa3pCLE9BQUQsQ0FBNUI7QUFDQSxTQUFLQSxPQUFMLEdBQWVBLE9BQWY7QUFDQSxTQUFLUSxPQUFMLEdBQWUzckIsTUFBSSxDQUFDMHZCLGVBQUQsRUFBa0J6NEIsS0FBbEIsQ0FBbkI7QUFDQSxTQUFLNjBCLE1BQUwsR0FBYzlyQixNQUFJLENBQUN5dkIsY0FBRCxFQUFpQng0QixLQUFqQixDQUFsQjtBQUNELEdBTkQ7O0FBT0F1MUIsRUFBQUEsNEJBQTBCLENBQUM1MkIsQ0FBM0IsR0FBK0JxMkIsb0JBQW9CLEdBQUcsVUFBVXBzQixDQUFWLEVBQWE7QUFDakUsV0FBT0EsQ0FBQyxLQUFLaXRCLGtCQUFOLElBQTRCanRCLENBQUMsS0FBS211QixjQUFsQyxHQUNILElBQUlELG9CQUFKLENBQXlCbHVCLENBQXpCLENBREcsR0FFSG10QiwyQkFBMkIsQ0FBQ250QixDQUFELENBRi9CO0FBR0QsR0FKRDs7QUFNQSxNQUFnQjFPLFlBQVUsQ0FBQ2k3QixlQUFELENBQXRCLElBQXlDUyxzQkFBc0IsS0FBS2w5QixNQUFNLENBQUMrSCxTQUEvRSxFQUEwRjtBQUN4RnUyQixJQUFBQSxVQUFVLEdBQUdwQixzQkFBc0IsQ0FBQ3pCLElBQXBDOztBQUVBLFFBQUksQ0FBQ3lDLFdBQUwsRUFBa0I7QUFDaEI7QUFDQTF5QixNQUFBQSxVQUFRLENBQUMweEIsc0JBQUQsRUFBeUIsTUFBekIsRUFBaUMsU0FBU3pCLElBQVQsQ0FBY3dFLFdBQWQsRUFBMkJDLFVBQTNCLEVBQXVDO0FBQzlFLFlBQUk5d0IsSUFBSSxHQUFHLElBQVg7QUFDQSxlQUFPLElBQUkrdEIsa0JBQUosQ0FBdUIsVUFBVW5CLE9BQVYsRUFBbUJHLE1BQW5CLEVBQTJCO0FBQ3ZEbUMsVUFBQUEsVUFBVSxDQUFDLzlCLElBQVgsQ0FBZ0I2TyxJQUFoQixFQUFzQjRzQixPQUF0QixFQUErQkcsTUFBL0I7QUFDRCxTQUZNLEVBRUpWLElBRkksQ0FFQ3dFLFdBRkQsRUFFY0MsVUFGZCxDQUFQLENBRjhFO0FBTS9FLE9BTk8sRUFNTDtBQUFFeDNCLFFBQUFBLE1BQU0sRUFBRTtBQUFWLE9BTkssQ0FBUixDQUZnQjs7QUFXaEI4QyxNQUFBQSxVQUFRLENBQUMweEIsc0JBQUQsRUFBeUIsT0FBekIsRUFBa0NFLDJCQUEyQixDQUFDLE9BQUQsQ0FBN0QsRUFBd0U7QUFBRTEwQixRQUFBQSxNQUFNLEVBQUU7QUFBVixPQUF4RSxDQUFSO0FBQ0QsS0FmdUY7OztBQWtCeEYsUUFBSTtBQUNGLGFBQU93MEIsc0JBQXNCLENBQUMvc0IsV0FBOUI7QUFDRCxLQUZELENBRUUsT0FBT3RRLEtBQVAsRUFBYztBQUFFO0FBQWEsS0FwQnlEOzs7QUF1QnhGLFFBQUlrVixnQkFBSixFQUFvQjtBQUNsQkEsTUFBQUEsZ0JBQWMsQ0FBQ21vQixzQkFBRCxFQUF5QkUsMkJBQXpCLENBQWQ7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQzckIsSUFBQyxDQUFDO0FBQUUvUixFQUFBQSxNQUFNLEVBQUUsSUFBVjtBQUFnQndULEVBQUFBLElBQUksRUFBRSxJQUF0QjtBQUE0QmpILEVBQUFBLE1BQU0sRUFBRUg7QUFBcEMsQ0FBRCxFQUErQztBQUM5Q2d0QixFQUFBQSxPQUFPLEVBQUVxRTtBQURxQyxDQUEvQyxDQUFEO0FBSUFyckIsZ0JBQWMsQ0FBQ3FyQixrQkFBRCxFQUFxQkgsT0FBckIsRUFBOEIsS0FBOUIsQ0FBZDtBQUNBbmIsWUFBVSxDQUFDbWIsT0FBRCxDQUFWO0FBRUFxQixjQUFjLEdBQUd2OEIsWUFBVSxDQUFDazdCLE9BQUQsQ0FBM0I7O0FBR0F2ckIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUVteUIsT0FBVjtBQUFtQm54QixFQUFBQSxJQUFJLEVBQUUsSUFBekI7QUFBK0JJLEVBQUFBLE1BQU0sRUFBRUg7QUFBdkMsQ0FBRCxFQUFrRDtBQUNqRDtBQUNBO0FBQ0Fxd0IsRUFBQUEsTUFBTSxFQUFFLFNBQVNBLE1BQVQsQ0FBZ0JnRSxDQUFoQixFQUFtQjtBQUN6QixRQUFJQyxVQUFVLEdBQUc5RCxvQkFBb0IsQ0FBQyxJQUFELENBQXJDO0FBQ0E4RCxJQUFBQSxVQUFVLENBQUNqRSxNQUFYLENBQWtCNTdCLElBQWxCLENBQXVCWSxTQUF2QixFQUFrQ2cvQixDQUFsQztBQUNBLFdBQU9DLFVBQVUsQ0FBQzVFLE9BQWxCO0FBQ0Q7QUFQZ0QsQ0FBbEQsQ0FBRDtBQVVBL3BCLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFbXlCLE9BQVY7QUFBbUJueEIsRUFBQUEsSUFBSSxFQUFFLElBQXpCO0FBQStCSSxFQUFBQSxNQUFNLEVBQWFIO0FBQWxELENBQUQsRUFBNkQ7QUFDNUQ7QUFDQTtBQUNBa3dCLEVBQUFBLE9BQU8sRUFBRSxTQUFTQSxPQUFULENBQWlCemEsQ0FBakIsRUFBb0I7QUFDM0IsV0FBT29iLGdCQUFjLENBQTJELElBQTNELEVBQWlFcGIsQ0FBakUsQ0FBckI7QUFDRDtBQUwyRCxDQUE3RCxDQUFEO0FBUUE5UCxJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRW15QixPQUFWO0FBQW1CbnhCLEVBQUFBLElBQUksRUFBRSxJQUF6QjtBQUErQkksRUFBQUEsTUFBTSxFQUFFMFA7QUFBdkMsQ0FBRCxFQUErRDtBQUM5RDtBQUNBO0FBQ0EraUIsRUFBQUEsR0FBRyxFQUFFLFNBQVNBLEdBQVQsQ0FBYXhvQixRQUFiLEVBQXVCO0FBQzFCLFFBQUloRyxDQUFDLEdBQUcsSUFBUjtBQUNBLFFBQUlrd0IsVUFBVSxHQUFHOUQsb0JBQW9CLENBQUNwc0IsQ0FBRCxDQUFyQztBQUNBLFFBQUk4ckIsT0FBTyxHQUFHb0UsVUFBVSxDQUFDcEUsT0FBekI7QUFDQSxRQUFJRyxNQUFNLEdBQUdpRSxVQUFVLENBQUNqRSxNQUF4QjtBQUNBLFFBQUloM0IsTUFBTSxHQUFHMjNCLFNBQU8sQ0FBQyxZQUFZO0FBQy9CLFVBQUl1RCxlQUFlLEdBQUdwOUIsV0FBUyxDQUFDaU4sQ0FBQyxDQUFDOHJCLE9BQUgsQ0FBL0I7QUFDQSxVQUFJM2UsTUFBTSxHQUFHLEVBQWI7QUFDQSxVQUFJK2IsT0FBTyxHQUFHLENBQWQ7QUFDQSxVQUFJa0gsU0FBUyxHQUFHLENBQWhCO0FBQ0F2cEIsTUFBQUEsU0FBTyxDQUFDYixRQUFELEVBQVcsVUFBVXNsQixPQUFWLEVBQW1CO0FBQ25DLFlBQUlseUIsS0FBSyxHQUFHOHZCLE9BQU8sRUFBbkI7QUFDQSxZQUFJbUgsYUFBYSxHQUFHLEtBQXBCO0FBQ0FsakIsUUFBQUEsTUFBTSxDQUFDdlosSUFBUCxDQUFZM0MsU0FBWjtBQUNBbS9CLFFBQUFBLFNBQVM7QUFDVEQsUUFBQUEsZUFBZSxDQUFDOS9CLElBQWhCLENBQXFCMlAsQ0FBckIsRUFBd0JzckIsT0FBeEIsRUFBaUNDLElBQWpDLENBQXNDLFVBQVU3NkIsS0FBVixFQUFpQjtBQUNyRCxjQUFJMi9CLGFBQUosRUFBbUI7QUFDbkJBLFVBQUFBLGFBQWEsR0FBRyxJQUFoQjtBQUNBbGpCLFVBQUFBLE1BQU0sQ0FBQy9ULEtBQUQsQ0FBTixHQUFnQjFJLEtBQWhCO0FBQ0EsWUFBRTAvQixTQUFGLElBQWV0RSxPQUFPLENBQUMzZSxNQUFELENBQXRCO0FBQ0QsU0FMRCxFQUtHOGUsTUFMSDtBQU1ELE9BWE0sQ0FBUDtBQVlBLFFBQUVtRSxTQUFGLElBQWV0RSxPQUFPLENBQUMzZSxNQUFELENBQXRCO0FBQ0QsS0FsQm1CLENBQXBCO0FBbUJBLFFBQUlsWSxNQUFNLENBQUN0RixLQUFYLEVBQWtCczhCLE1BQU0sQ0FBQ2gzQixNQUFNLENBQUN2RSxLQUFSLENBQU47QUFDbEIsV0FBT3cvQixVQUFVLENBQUM1RSxPQUFsQjtBQUNELEdBN0I2RDtBQThCOUQ7QUFDQTtBQUNBZ0YsRUFBQUEsSUFBSSxFQUFFLFNBQVNBLElBQVQsQ0FBY3RxQixRQUFkLEVBQXdCO0FBQzVCLFFBQUloRyxDQUFDLEdBQUcsSUFBUjtBQUNBLFFBQUlrd0IsVUFBVSxHQUFHOUQsb0JBQW9CLENBQUNwc0IsQ0FBRCxDQUFyQztBQUNBLFFBQUlpc0IsTUFBTSxHQUFHaUUsVUFBVSxDQUFDakUsTUFBeEI7QUFDQSxRQUFJaDNCLE1BQU0sR0FBRzIzQixTQUFPLENBQUMsWUFBWTtBQUMvQixVQUFJdUQsZUFBZSxHQUFHcDlCLFdBQVMsQ0FBQ2lOLENBQUMsQ0FBQzhyQixPQUFILENBQS9CO0FBQ0FqbEIsTUFBQUEsU0FBTyxDQUFDYixRQUFELEVBQVcsVUFBVXNsQixPQUFWLEVBQW1CO0FBQ25DNkUsUUFBQUEsZUFBZSxDQUFDOS9CLElBQWhCLENBQXFCMlAsQ0FBckIsRUFBd0JzckIsT0FBeEIsRUFBaUNDLElBQWpDLENBQXNDMkUsVUFBVSxDQUFDcEUsT0FBakQsRUFBMERHLE1BQTFEO0FBQ0QsT0FGTSxDQUFQO0FBR0QsS0FMbUIsQ0FBcEI7QUFNQSxRQUFJaDNCLE1BQU0sQ0FBQ3RGLEtBQVgsRUFBa0JzOEIsTUFBTSxDQUFDaDNCLE1BQU0sQ0FBQ3ZFLEtBQVIsQ0FBTjtBQUNsQixXQUFPdy9CLFVBQVUsQ0FBQzVFLE9BQWxCO0FBQ0Q7QUE1QzZELENBQS9ELENBQUQ7O0FDM1ZBLElBQUkvcEIsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJa0QsV0FBUyxHQUFHbEQsV0FBaEI7O0FBQ0EsSUFBSTg4Qiw0QkFBMEIsR0FBRzk4QixzQkFBakM7O0FBQ0EsSUFBSSs4QixTQUFPLEdBQUcvOEIsU0FBZDs7QUFDQSxJQUFJZ1gsU0FBTyxHQUFHaFgsU0FBZDtBQUdBOzs7QUFDQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFNBQVY7QUFBcUJnQixFQUFBQSxJQUFJLEVBQUU7QUFBM0IsQ0FBRCxFQUFvQztBQUNuQzQwQixFQUFBQSxVQUFVLEVBQUUsU0FBU0EsVUFBVCxDQUFvQnZxQixRQUFwQixFQUE4QjtBQUN4QyxRQUFJaEcsQ0FBQyxHQUFHLElBQVI7QUFDQSxRQUFJa3dCLFVBQVUsR0FBR3ZELDRCQUEwQixDQUFDNTJCLENBQTNCLENBQTZCaUssQ0FBN0IsQ0FBakI7QUFDQSxRQUFJOHJCLE9BQU8sR0FBR29FLFVBQVUsQ0FBQ3BFLE9BQXpCO0FBQ0EsUUFBSUcsTUFBTSxHQUFHaUUsVUFBVSxDQUFDakUsTUFBeEI7QUFDQSxRQUFJaDNCLE1BQU0sR0FBRzIzQixTQUFPLENBQUMsWUFBWTtBQUMvQixVQUFJSCxjQUFjLEdBQUcxNUIsV0FBUyxDQUFDaU4sQ0FBQyxDQUFDOHJCLE9BQUgsQ0FBOUI7QUFDQSxVQUFJM2UsTUFBTSxHQUFHLEVBQWI7QUFDQSxVQUFJK2IsT0FBTyxHQUFHLENBQWQ7QUFDQSxVQUFJa0gsU0FBUyxHQUFHLENBQWhCO0FBQ0F2cEIsTUFBQUEsU0FBTyxDQUFDYixRQUFELEVBQVcsVUFBVXNsQixPQUFWLEVBQW1CO0FBQ25DLFlBQUlseUIsS0FBSyxHQUFHOHZCLE9BQU8sRUFBbkI7QUFDQSxZQUFJbUgsYUFBYSxHQUFHLEtBQXBCO0FBQ0FsakIsUUFBQUEsTUFBTSxDQUFDdlosSUFBUCxDQUFZM0MsU0FBWjtBQUNBbS9CLFFBQUFBLFNBQVM7QUFDVDNELFFBQUFBLGNBQWMsQ0FBQ3A4QixJQUFmLENBQW9CMlAsQ0FBcEIsRUFBdUJzckIsT0FBdkIsRUFBZ0NDLElBQWhDLENBQXFDLFVBQVU3NkIsS0FBVixFQUFpQjtBQUNwRCxjQUFJMi9CLGFBQUosRUFBbUI7QUFDbkJBLFVBQUFBLGFBQWEsR0FBRyxJQUFoQjtBQUNBbGpCLFVBQUFBLE1BQU0sQ0FBQy9ULEtBQUQsQ0FBTixHQUFnQjtBQUFFbzNCLFlBQUFBLE1BQU0sRUFBRSxXQUFWO0FBQXVCOS9CLFlBQUFBLEtBQUssRUFBRUE7QUFBOUIsV0FBaEI7QUFDQSxZQUFFMC9CLFNBQUYsSUFBZXRFLE9BQU8sQ0FBQzNlLE1BQUQsQ0FBdEI7QUFDRCxTQUxELEVBS0csVUFBVXhkLEtBQVYsRUFBaUI7QUFDbEIsY0FBSTBnQyxhQUFKLEVBQW1CO0FBQ25CQSxVQUFBQSxhQUFhLEdBQUcsSUFBaEI7QUFDQWxqQixVQUFBQSxNQUFNLENBQUMvVCxLQUFELENBQU4sR0FBZ0I7QUFBRW8zQixZQUFBQSxNQUFNLEVBQUUsVUFBVjtBQUFzQmxCLFlBQUFBLE1BQU0sRUFBRTMvQjtBQUE5QixXQUFoQjtBQUNBLFlBQUV5Z0MsU0FBRixJQUFldEUsT0FBTyxDQUFDM2UsTUFBRCxDQUF0QjtBQUNELFNBVkQ7QUFXRCxPQWhCTSxDQUFQO0FBaUJBLFFBQUVpakIsU0FBRixJQUFldEUsT0FBTyxDQUFDM2UsTUFBRCxDQUF0QjtBQUNELEtBdkJtQixDQUFwQjtBQXdCQSxRQUFJbFksTUFBTSxDQUFDdEYsS0FBWCxFQUFrQnM4QixNQUFNLENBQUNoM0IsTUFBTSxDQUFDdkUsS0FBUixDQUFOO0FBQ2xCLFdBQU93L0IsVUFBVSxDQUFDNUUsT0FBbEI7QUFDRDtBQWhDa0MsQ0FBcEMsQ0FBRDs7QUNSQSxJQUFJL3BCLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSWtELFdBQVMsR0FBR2xELFdBQWhCOztBQUNBLElBQUkrQixZQUFVLEdBQUcvQixZQUFqQjs7QUFDQSxJQUFJODhCLDRCQUEwQixHQUFHOThCLHNCQUFqQzs7QUFDQSxJQUFJKzhCLFNBQU8sR0FBRy84QixTQUFkOztBQUNBLElBQUlnWCxTQUFPLEdBQUdoWCxTQUFkOztBQUVBLElBQUk0Z0MsaUJBQWlCLEdBQUcseUJBQXhCO0FBR0E7O0FBQ0FsdkIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsU0FBVjtBQUFxQmdCLEVBQUFBLElBQUksRUFBRTtBQUEzQixDQUFELEVBQW9DO0FBQ25DKzBCLEVBQUFBLEdBQUcsRUFBRSxTQUFTQSxHQUFULENBQWExcUIsUUFBYixFQUF1QjtBQUMxQixRQUFJaEcsQ0FBQyxHQUFHLElBQVI7QUFDQSxRQUFJa3dCLFVBQVUsR0FBR3ZELDRCQUEwQixDQUFDNTJCLENBQTNCLENBQTZCaUssQ0FBN0IsQ0FBakI7QUFDQSxRQUFJOHJCLE9BQU8sR0FBR29FLFVBQVUsQ0FBQ3BFLE9BQXpCO0FBQ0EsUUFBSUcsTUFBTSxHQUFHaUUsVUFBVSxDQUFDakUsTUFBeEI7QUFDQSxRQUFJaDNCLE1BQU0sR0FBRzIzQixTQUFPLENBQUMsWUFBWTtBQUMvQixVQUFJSCxjQUFjLEdBQUcxNUIsV0FBUyxDQUFDaU4sQ0FBQyxDQUFDOHJCLE9BQUgsQ0FBOUI7QUFDQSxVQUFJOWtCLE1BQU0sR0FBRyxFQUFiO0FBQ0EsVUFBSWtpQixPQUFPLEdBQUcsQ0FBZDtBQUNBLFVBQUlrSCxTQUFTLEdBQUcsQ0FBaEI7QUFDQSxVQUFJTyxlQUFlLEdBQUcsS0FBdEI7QUFDQTlwQixNQUFBQSxTQUFPLENBQUNiLFFBQUQsRUFBVyxVQUFVc2xCLE9BQVYsRUFBbUI7QUFDbkMsWUFBSWx5QixLQUFLLEdBQUc4dkIsT0FBTyxFQUFuQjtBQUNBLFlBQUkwSCxlQUFlLEdBQUcsS0FBdEI7QUFDQTVwQixRQUFBQSxNQUFNLENBQUNwVCxJQUFQLENBQVkzQyxTQUFaO0FBQ0FtL0IsUUFBQUEsU0FBUztBQUNUM0QsUUFBQUEsY0FBYyxDQUFDcDhCLElBQWYsQ0FBb0IyUCxDQUFwQixFQUF1QnNyQixPQUF2QixFQUFnQ0MsSUFBaEMsQ0FBcUMsVUFBVTc2QixLQUFWLEVBQWlCO0FBQ3BELGNBQUlrZ0MsZUFBZSxJQUFJRCxlQUF2QixFQUF3QztBQUN4Q0EsVUFBQUEsZUFBZSxHQUFHLElBQWxCO0FBQ0E3RSxVQUFBQSxPQUFPLENBQUNwN0IsS0FBRCxDQUFQO0FBQ0QsU0FKRCxFQUlHLFVBQVVmLEtBQVYsRUFBaUI7QUFDbEIsY0FBSWloQyxlQUFlLElBQUlELGVBQXZCLEVBQXdDO0FBQ3hDQyxVQUFBQSxlQUFlLEdBQUcsSUFBbEI7QUFDQTVwQixVQUFBQSxNQUFNLENBQUM1TixLQUFELENBQU4sR0FBZ0J6SixLQUFoQjtBQUNBLFlBQUV5Z0MsU0FBRixJQUFlbkUsTUFBTSxDQUFDLEtBQUtyNkIsWUFBVSxDQUFDLGdCQUFELENBQWYsRUFBbUNvVixNQUFuQyxFQUEyQ3lwQixpQkFBM0MsQ0FBRCxDQUFyQjtBQUNELFNBVEQ7QUFVRCxPQWZNLENBQVA7QUFnQkEsUUFBRUwsU0FBRixJQUFlbkUsTUFBTSxDQUFDLEtBQUtyNkIsWUFBVSxDQUFDLGdCQUFELENBQWYsRUFBbUNvVixNQUFuQyxFQUEyQ3lwQixpQkFBM0MsQ0FBRCxDQUFyQjtBQUNELEtBdkJtQixDQUFwQjtBQXdCQSxRQUFJeDdCLE1BQU0sQ0FBQ3RGLEtBQVgsRUFBa0JzOEIsTUFBTSxDQUFDaDNCLE1BQU0sQ0FBQ3ZFLEtBQVIsQ0FBTjtBQUNsQixXQUFPdy9CLFVBQVUsQ0FBQzVFLE9BQWxCO0FBQ0Q7QUFoQ2tDLENBQXBDLENBQUQ7O0FDWEEsSUFBSS9wQixJQUFDLEdBQUcxUixPQUFSOztBQUVBLElBQUkwOEIsYUFBYSxHQUFHMThCLHdCQUFwQjs7QUFDQSxJQUFJRCxPQUFLLEdBQUdDLFFBQVo7O0FBQ0EsSUFBSStCLFlBQVUsR0FBRy9CLFlBQWpCOztBQUNBLElBQUl5QixZQUFVLEdBQUd6QixZQUFqQjs7QUFDQSxJQUFJc3BCLG9CQUFrQixHQUFHdHBCLG9CQUF6Qjs7QUFDQSxJQUFJNDhCLGNBQWMsR0FBRzU4QixnQkFBckI7O0FBQ0EsSUFBSXlMLFVBQVEsR0FBR3pMLGtCQUFmOzs7QUFHQSxJQUFJZ2hDLFdBQVcsR0FBRyxDQUFDLENBQUN0RSxhQUFGLElBQW1CMzhCLE9BQUssQ0FBQyxZQUFZO0FBQ3JEMjhCLEVBQUFBLGFBQWEsQ0FBQzEwQixTQUFkLENBQXdCLFNBQXhCLEVBQW1DeEgsSUFBbkMsQ0FBd0M7QUFBRWs3QixJQUFBQSxJQUFJLEVBQUUsWUFBWTtBQUFFO0FBQWE7QUFBbkMsR0FBeEMsRUFBK0UsWUFBWTtBQUFFO0FBQWEsR0FBMUc7QUFDRCxDQUZ5QyxDQUExQztBQUtBOztBQUNBaHFCLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFNBQVY7QUFBcUJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBNUI7QUFBa0MrckIsRUFBQUEsSUFBSSxFQUFFLElBQXhDO0FBQThDLzBCLEVBQUFBLE1BQU0sRUFBRTgwQjtBQUF0RCxDQUFELEVBQXNFO0FBQ3JFLGFBQVcsVUFBVUUsU0FBVixFQUFxQjtBQUM5QixRQUFJL3dCLENBQUMsR0FBR21aLG9CQUFrQixDQUFDLElBQUQsRUFBT3ZuQixZQUFVLENBQUMsU0FBRCxDQUFqQixDQUExQjtBQUNBLFFBQUlvL0IsVUFBVSxHQUFHMS9CLFlBQVUsQ0FBQ3kvQixTQUFELENBQTNCO0FBQ0EsV0FBTyxLQUFLeEYsSUFBTCxDQUNMeUYsVUFBVSxHQUFHLFVBQVUzZixDQUFWLEVBQWE7QUFDeEIsYUFBT29iLGNBQWMsQ0FBQ3pzQixDQUFELEVBQUkrd0IsU0FBUyxFQUFiLENBQWQsQ0FBK0J4RixJQUEvQixDQUFvQyxZQUFZO0FBQUUsZUFBT2xhLENBQVA7QUFBVyxPQUE3RCxDQUFQO0FBQ0QsS0FGUyxHQUVOMGYsU0FIQyxFQUlMQyxVQUFVLEdBQUcsVUFBVXZLLENBQVYsRUFBYTtBQUN4QixhQUFPZ0csY0FBYyxDQUFDenNCLENBQUQsRUFBSSt3QixTQUFTLEVBQWIsQ0FBZCxDQUErQnhGLElBQS9CLENBQW9DLFlBQVk7QUFBRSxjQUFNOUUsQ0FBTjtBQUFVLE9BQTVELENBQVA7QUFDRCxLQUZTLEdBRU5zSyxTQU5DLENBQVA7QUFRRDtBQVpvRSxDQUF0RSxDQUFEOztBQWdCQSxJQUFnQnovQixZQUFVLENBQUNpN0IsYUFBRCxDQUExQixFQUEyQztBQUN6QyxNQUFJOTZCLE1BQU0sR0FBR0csWUFBVSxDQUFDLFNBQUQsQ0FBVixDQUFzQmlHLFNBQXRCLENBQWdDLFNBQWhDLENBQWI7O0FBQ0EsTUFBSTAwQixhQUFhLENBQUMxMEIsU0FBZCxDQUF3QixTQUF4QixNQUF1Q3BHLE1BQTNDLEVBQW1EO0FBQ2pENkosSUFBQUEsVUFBUSxDQUFDaXhCLGFBQWEsQ0FBQzEwQixTQUFmLEVBQTBCLFNBQTFCLEVBQXFDcEcsTUFBckMsRUFBNkM7QUFBRStHLE1BQUFBLE1BQU0sRUFBRTtBQUFWLEtBQTdDLENBQVI7QUFDRDtBQUNGOztBQ3ZDRCxJQUFJK0ksSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJK0IsWUFBVSxHQUFHL0IsWUFBakI7O0FBQ0EsSUFBSWtELFdBQVMsR0FBR2xELFdBQWhCOztBQUNBLElBQUltRyxXQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUlELE9BQUssR0FBR0MsUUFBWjs7QUFFQSxJQUFJb2hDLFdBQVcsR0FBR3IvQixZQUFVLENBQUMsU0FBRCxFQUFZLE9BQVosQ0FBNUI7QUFDQSxJQUFJcy9CLGFBQWEsR0FBR3poQyxRQUFRLENBQUM0UCxLQUE3Qjs7QUFHQSxJQUFJOHhCLHVCQUF1QixHQUFHLENBQUN2aEMsT0FBSyxDQUFDLFlBQVk7QUFDL0NxaEMsRUFBQUEsV0FBVyxDQUFDLFlBQVk7QUFBRTtBQUFhLEdBQTVCLENBQVg7QUFDRCxDQUZtQyxDQUFwQztBQUtBOztBQUNBMXZCLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFNBQVY7QUFBcUJnQixFQUFBQSxJQUFJLEVBQUUsSUFBM0I7QUFBaUNJLEVBQUFBLE1BQU0sRUFBRW8xQjtBQUF6QyxDQUFELEVBQXFFO0FBQ3BFOXhCLEVBQUFBLEtBQUssRUFBRSxTQUFTQSxLQUFULENBQWUxRSxNQUFmLEVBQXVCeTJCLFlBQXZCLEVBQXFDQyxhQUFyQyxFQUFvRDtBQUN6RHQrQixJQUFBQSxXQUFTLENBQUM0SCxNQUFELENBQVQ7QUFDQTNFLElBQUFBLFdBQVEsQ0FBQ3E3QixhQUFELENBQVI7QUFDQSxXQUFPSixXQUFXLEdBQ2RBLFdBQVcsQ0FBQ3QyQixNQUFELEVBQVN5MkIsWUFBVCxFQUF1QkMsYUFBdkIsQ0FERyxHQUVkSCxhQUFhLENBQUM3Z0MsSUFBZCxDQUFtQnNLLE1BQW5CLEVBQTJCeTJCLFlBQTNCLEVBQXlDQyxhQUF6QyxDQUZKO0FBR0Q7QUFQbUUsQ0FBckUsQ0FBRDs7QUNoQkEsSUFBSTl2QixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUkrQixZQUFVLEdBQUcvQixZQUFqQjs7QUFDQSxJQUFJa3BCLGNBQVksR0FBR2xwQixjQUFuQjs7QUFDQSxJQUFJbUcsV0FBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJcUQsVUFBUSxHQUFHckQsVUFBZjs7QUFDQSxJQUFJNk8sUUFBTSxHQUFHN08sY0FBYjs7QUFDQSxJQUFJc1EsTUFBSSxHQUFHdFEsWUFBWDs7QUFDQSxJQUFJRCxPQUFLLEdBQUdDLFFBQVo7O0FBRUEsSUFBSXloQyxlQUFlLEdBQUcxL0IsWUFBVSxDQUFDLFNBQUQsRUFBWSxXQUFaLENBQWhDO0FBR0E7QUFDQTtBQUNBOztBQUNBLElBQUkyL0IsY0FBYyxHQUFHM2hDLE9BQUssQ0FBQyxZQUFZO0FBQ3JDLFdBQVMwTyxDQUFULEdBQWE7QUFBRTtBQUFhOztBQUM1QixTQUFPLEVBQUVnekIsZUFBZSxDQUFDLFlBQVk7QUFBRTtBQUFhLEdBQTVCLEVBQThCLEVBQTlCLEVBQWtDaHpCLENBQWxDLENBQWYsWUFBK0RBLENBQWpFLENBQVA7QUFDRCxDQUh5QixDQUExQjtBQUlBLElBQUlrekIsUUFBUSxHQUFHLENBQUM1aEMsT0FBSyxDQUFDLFlBQVk7QUFDaEMwaEMsRUFBQUEsZUFBZSxDQUFDLFlBQVk7QUFBRTtBQUFhLEdBQTVCLENBQWY7QUFDRCxDQUZvQixDQUFyQjtBQUdBLElBQUkxMUIsUUFBTSxHQUFHMjFCLGNBQWMsSUFBSUMsUUFBL0I7QUFFQWp3QixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxTQUFWO0FBQXFCZ0IsRUFBQUEsSUFBSSxFQUFFLElBQTNCO0FBQWlDSSxFQUFBQSxNQUFNLEVBQUVILFFBQXpDO0FBQWlEbkosRUFBQUEsSUFBSSxFQUFFbUo7QUFBdkQsQ0FBRCxFQUFrRTtBQUNqRTJELEVBQUFBLFNBQVMsRUFBRSxTQUFTQSxTQUFULENBQW1Ca3lCLE1BQW5CLEVBQTJCenRCO0FBQUs7QUFBaEMsSUFBbUQ7QUFDNUQrVSxJQUFBQSxjQUFZLENBQUMwWSxNQUFELENBQVo7QUFDQXo3QixJQUFBQSxXQUFRLENBQUNnTyxJQUFELENBQVI7QUFDQSxRQUFJMHRCLFNBQVMsR0FBR2hnQyxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUI4L0IsTUFBdkIsR0FBZ0MxWSxjQUFZLENBQUNybkIsU0FBUyxDQUFDLENBQUQsQ0FBVixDQUE1RDtBQUNBLFFBQUk4L0IsUUFBUSxJQUFJLENBQUNELGNBQWpCLEVBQWlDLE9BQU9ELGVBQWUsQ0FBQ0csTUFBRCxFQUFTenRCLElBQVQsRUFBZTB0QixTQUFmLENBQXRCOztBQUNqQyxRQUFJRCxNQUFNLElBQUlDLFNBQWQsRUFBeUI7QUFDdkI7QUFDQSxjQUFRMXRCLElBQUksQ0FBQ3JTLE1BQWI7QUFDRSxhQUFLLENBQUw7QUFBUSxpQkFBTyxJQUFJOC9CLE1BQUosRUFBUDs7QUFDUixhQUFLLENBQUw7QUFBUSxpQkFBTyxJQUFJQSxNQUFKLENBQVd6dEIsSUFBSSxDQUFDLENBQUQsQ0FBZixDQUFQOztBQUNSLGFBQUssQ0FBTDtBQUFRLGlCQUFPLElBQUl5dEIsTUFBSixDQUFXenRCLElBQUksQ0FBQyxDQUFELENBQWYsRUFBb0JBLElBQUksQ0FBQyxDQUFELENBQXhCLENBQVA7O0FBQ1IsYUFBSyxDQUFMO0FBQVEsaUJBQU8sSUFBSXl0QixNQUFKLENBQVd6dEIsSUFBSSxDQUFDLENBQUQsQ0FBZixFQUFvQkEsSUFBSSxDQUFDLENBQUQsQ0FBeEIsRUFBNkJBLElBQUksQ0FBQyxDQUFELENBQWpDLENBQVA7O0FBQ1IsYUFBSyxDQUFMO0FBQVEsaUJBQU8sSUFBSXl0QixNQUFKLENBQVd6dEIsSUFBSSxDQUFDLENBQUQsQ0FBZixFQUFvQkEsSUFBSSxDQUFDLENBQUQsQ0FBeEIsRUFBNkJBLElBQUksQ0FBQyxDQUFELENBQWpDLEVBQXNDQSxJQUFJLENBQUMsQ0FBRCxDQUExQyxDQUFQO0FBTFYsT0FGdUI7OztBQVV2QixVQUFJMnRCLEtBQUssR0FBRyxDQUFDLElBQUQsQ0FBWjtBQUNBQSxNQUFBQSxLQUFLLENBQUMvOUIsSUFBTixDQUFXeUwsS0FBWCxDQUFpQnN5QixLQUFqQixFQUF3QjN0QixJQUF4QjtBQUNBLGFBQU8sS0FBSzdELE1BQUksQ0FBQ2QsS0FBTCxDQUFXb3lCLE1BQVgsRUFBbUJFLEtBQW5CLENBQUwsR0FBUDtBQUNELEtBbEIyRDs7O0FBb0I1RCxRQUFJNXNCLEtBQUssR0FBRzJzQixTQUFTLENBQUM3NUIsU0FBdEI7QUFDQSxRQUFJMm5CLFFBQVEsR0FBRzlnQixRQUFNLENBQUN4TCxVQUFRLENBQUM2UixLQUFELENBQVIsR0FBa0JBLEtBQWxCLEdBQTBCalYsTUFBTSxDQUFDK0gsU0FBbEMsQ0FBckI7QUFDQSxRQUFJNUMsTUFBTSxHQUFHeEYsUUFBUSxDQUFDNFAsS0FBVCxDQUFlaFAsSUFBZixDQUFvQm9oQyxNQUFwQixFQUE0QmpTLFFBQTVCLEVBQXNDeGIsSUFBdEMsQ0FBYjtBQUNBLFdBQU85USxVQUFRLENBQUMrQixNQUFELENBQVIsR0FBbUJBLE1BQW5CLEdBQTRCdXFCLFFBQW5DO0FBQ0Q7QUF6QmdFLENBQWxFLENBQUQ7O0FDeEJBLElBQUlqZSxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUl5RixhQUFXLEdBQUd6RixXQUFsQjs7QUFDQSxJQUFJbUcsV0FBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJOEYsZUFBYSxHQUFHOUYsZUFBcEI7O0FBQ0EsSUFBSXNHLHNCQUFvQixHQUFHdEcsb0JBQTNCOztBQUNBLElBQUlELE9BQUssR0FBR0MsUUFBWjs7O0FBR0EsSUFBSStoQyxzQkFBc0IsR0FBR2hpQyxPQUFLLENBQUMsWUFBWTtBQUM3QztBQUNBaWlDLEVBQUFBLE9BQU8sQ0FBQzloQyxjQUFSLENBQXVCb0csc0JBQW9CLENBQUNKLENBQXJCLENBQXVCLEVBQXZCLEVBQTJCLENBQTNCLEVBQThCO0FBQUVyRixJQUFBQSxLQUFLLEVBQUU7QUFBVCxHQUE5QixDQUF2QixFQUFvRSxDQUFwRSxFQUF1RTtBQUFFQSxJQUFBQSxLQUFLLEVBQUU7QUFBVCxHQUF2RTtBQUNELENBSGlDLENBQWxDO0FBTUE7O0FBQ0E2USxJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxTQUFWO0FBQXFCZ0IsRUFBQUEsSUFBSSxFQUFFLElBQTNCO0FBQWlDSSxFQUFBQSxNQUFNLEVBQUU2MUIsc0JBQXpDO0FBQWlFbi9CLEVBQUFBLElBQUksRUFBRSxDQUFDNkM7QUFBeEUsQ0FBRCxFQUF3RjtBQUN2RnZGLEVBQUFBLGNBQWMsRUFBRSxTQUFTQSxjQUFULENBQXdCNEssTUFBeEIsRUFBZ0MrTSxXQUFoQyxFQUE2Q29xQixVQUE3QyxFQUF5RDtBQUN2RTk3QixJQUFBQSxXQUFRLENBQUMyRSxNQUFELENBQVI7QUFDQSxRQUFJbkgsR0FBRyxHQUFHbUMsZUFBYSxDQUFDK1IsV0FBRCxDQUF2QjtBQUNBMVIsSUFBQUEsV0FBUSxDQUFDODdCLFVBQUQsQ0FBUjs7QUFDQSxRQUFJO0FBQ0YzN0IsTUFBQUEsc0JBQW9CLENBQUNKLENBQXJCLENBQXVCNEUsTUFBdkIsRUFBK0JuSCxHQUEvQixFQUFvQ3MrQixVQUFwQztBQUNBLGFBQU8sSUFBUDtBQUNELEtBSEQsQ0FHRSxPQUFPbmlDLEtBQVAsRUFBYztBQUNkLGFBQU8sS0FBUDtBQUNEO0FBQ0Y7QUFYc0YsQ0FBeEYsQ0FBRDs7QUNmQSxJQUFJNFIsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJbUcsV0FBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJTSwwQkFBd0IsR0FBR04sOEJBQUEsQ0FBMkRrRyxDQUExRjtBQUdBOzs7QUFDQXdMLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFNBQVY7QUFBcUJnQixFQUFBQSxJQUFJLEVBQUU7QUFBM0IsQ0FBRCxFQUFvQztBQUNuQ28yQixFQUFBQSxjQUFjLEVBQUUsU0FBU0EsY0FBVCxDQUF3QnAzQixNQUF4QixFQUFnQytNLFdBQWhDLEVBQTZDO0FBQzNELFFBQUluWCxVQUFVLEdBQUdKLDBCQUF3QixDQUFDNkYsV0FBUSxDQUFDMkUsTUFBRCxDQUFULEVBQW1CK00sV0FBbkIsQ0FBekM7QUFDQSxXQUFPblgsVUFBVSxJQUFJLENBQUNBLFVBQVUsQ0FBQ0ksWUFBMUIsR0FBeUMsS0FBekMsR0FBaUQsT0FBT2dLLE1BQU0sQ0FBQytNLFdBQUQsQ0FBckU7QUFDRDtBQUprQyxDQUFwQyxDQUFEOztBQ05BLElBQUl6VCxRQUFNLEdBQUdwRSxnQkFBYjs7SUFFQVQsa0JBQUEsR0FBaUIsVUFBVW1CLFVBQVYsRUFBc0I7QUFDckMsU0FBT0EsVUFBVSxLQUFLVSxTQUFmLEtBQTZCZ0QsUUFBTSxDQUFDMUQsVUFBRCxFQUFhLE9BQWIsQ0FBTixJQUErQjBELFFBQU0sQ0FBQzFELFVBQUQsRUFBYSxVQUFiLENBQWxFLENBQVA7QUFDRCxDQUZEOztBQ0ZBLElBQUlnUixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlxRCxVQUFRLEdBQUdyRCxVQUFmOztBQUNBLElBQUltRyxXQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUltaUMsa0JBQWdCLEdBQUduaUMsa0JBQXZCOztBQUNBLElBQUk2SyxnQ0FBOEIsR0FBRzdLLDhCQUFyQzs7QUFDQSxJQUFJNlUsZ0JBQWMsR0FBRzdVLHNCQUFyQjtBQUdBOzs7QUFDQSxTQUFTRyxLQUFULENBQWEySyxNQUFiLEVBQXFCK007QUFBWTtBQUFqQyxFQUFtRDtBQUNqRCxNQUFJdXFCLFFBQVEsR0FBR3ZnQyxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJnSixNQUF2QixHQUFnQ2pKLFNBQVMsQ0FBQyxDQUFELENBQXhEO0FBQ0EsTUFBSW5CLFVBQUosRUFBZ0JzSCxTQUFoQjtBQUNBLE1BQUk3QixXQUFRLENBQUMyRSxNQUFELENBQVIsS0FBcUJzM0IsUUFBekIsRUFBbUMsT0FBT3QzQixNQUFNLENBQUMrTSxXQUFELENBQWI7QUFDbkNuWCxFQUFBQSxVQUFVLEdBQUdtSyxnQ0FBOEIsQ0FBQzNFLENBQS9CLENBQWlDNEUsTUFBakMsRUFBeUMrTSxXQUF6QyxDQUFiO0FBQ0EsTUFBSW5YLFVBQUosRUFBZ0IsT0FBT3loQyxrQkFBZ0IsQ0FBQ3poQyxVQUFELENBQWhCLEdBQ25CQSxVQUFVLENBQUNHLEtBRFEsR0FFbkJILFVBQVUsQ0FBQ1AsR0FBWCxLQUFtQmlCLFNBQW5CLEdBQStCQSxTQUEvQixHQUEyQ1YsVUFBVSxDQUFDUCxHQUFYLENBQWVLLElBQWYsQ0FBb0I0aEMsUUFBcEIsQ0FGL0I7QUFHaEIsTUFBSS8rQixVQUFRLENBQUMyRSxTQUFTLEdBQUc2TSxnQkFBYyxDQUFDL0osTUFBRCxDQUEzQixDQUFaLEVBQWtELE9BQU8zSyxLQUFHLENBQUM2SCxTQUFELEVBQVk2UCxXQUFaLEVBQXlCdXFCLFFBQXpCLENBQVY7QUFDbkQ7O0FBRUQxd0IsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsU0FBVjtBQUFxQmdCLEVBQUFBLElBQUksRUFBRTtBQUEzQixDQUFELEVBQW9DO0FBQ25DM0wsRUFBQUEsR0FBRyxFQUFFQTtBQUQ4QixDQUFwQyxDQUFEOztBQ3BCQSxJQUFJdVIsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJeUYsYUFBVyxHQUFHekYsV0FBbEI7O0FBQ0EsSUFBSW1HLFdBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSTZLLGdDQUE4QixHQUFHN0ssOEJBQXJDO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsU0FBVjtBQUFxQmdCLEVBQUFBLElBQUksRUFBRSxJQUEzQjtBQUFpQ2xKLEVBQUFBLElBQUksRUFBRSxDQUFDNkM7QUFBeEMsQ0FBRCxFQUF3RDtBQUN2RG5GLEVBQUFBLHdCQUF3QixFQUFFLFNBQVNBLHdCQUFULENBQWtDd0ssTUFBbEMsRUFBMEMrTSxXQUExQyxFQUF1RDtBQUMvRSxXQUFPaE4sZ0NBQThCLENBQUMzRSxDQUEvQixDQUFpQ0MsV0FBUSxDQUFDMkUsTUFBRCxDQUF6QyxFQUFtRCtNLFdBQW5ELENBQVA7QUFDRDtBQUhzRCxDQUF4RCxDQUFEOztBQ1BBLElBQUluRyxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUltRyxXQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUlxaUMsb0JBQW9CLEdBQUdyaUMsc0JBQTNCOztBQUNBLElBQUk4VSx3QkFBd0IsR0FBRzlVLHNCQUEvQjtBQUdBOzs7QUFDQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFNBQVY7QUFBcUJnQixFQUFBQSxJQUFJLEVBQUUsSUFBM0I7QUFBaUNsSixFQUFBQSxJQUFJLEVBQUUsQ0FBQ2tTO0FBQXhDLENBQUQsRUFBcUU7QUFDcEVELEVBQUFBLGNBQWMsRUFBRSxTQUFTQSxjQUFULENBQXdCL0osTUFBeEIsRUFBZ0M7QUFDOUMsV0FBT3UzQixvQkFBb0IsQ0FBQ2w4QixXQUFRLENBQUMyRSxNQUFELENBQVQsQ0FBM0I7QUFDRDtBQUhtRSxDQUFyRSxDQUFEOztBQ1BBLElBQUk0RyxJQUFDLEdBQUcxUixPQUFSO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsU0FBVjtBQUFxQmdCLEVBQUFBLElBQUksRUFBRTtBQUEzQixDQUFELEVBQW9DO0FBQ25DM0UsRUFBQUEsR0FBRyxFQUFFLFNBQVNBLEdBQVQsQ0FBYTJELE1BQWIsRUFBcUIrTSxXQUFyQixFQUFrQztBQUNyQyxXQUFPQSxXQUFXLElBQUkvTSxNQUF0QjtBQUNEO0FBSGtDLENBQXBDLENBQUQ7O0FDSkEsSUFBSTRHLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSW1HLFdBQVEsR0FBR25HLFdBQWY7OztBQUdBLElBQUlzaUMsa0JBQWtCLEdBQUdyaUMsTUFBTSxDQUFDMHRCLFlBQWhDO0FBR0E7O0FBQ0FqYyxJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxTQUFWO0FBQXFCZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQTNCLENBQUQsRUFBb0M7QUFDbkM2aEIsRUFBQUEsWUFBWSxFQUFFLFNBQVNBLFlBQVQsQ0FBc0I3aUIsTUFBdEIsRUFBOEI7QUFDMUMzRSxJQUFBQSxXQUFRLENBQUMyRSxNQUFELENBQVI7QUFDQSxXQUFPdzNCLGtCQUFrQixHQUFHQSxrQkFBa0IsQ0FBQ3gzQixNQUFELENBQXJCLEdBQWdDLElBQXpEO0FBQ0Q7QUFKa0MsQ0FBcEMsQ0FBRDs7QUNSQSxJQUFJNEcsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJNEssT0FBTyxHQUFHNUssU0FBZDtBQUdBOzs7QUFDQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFNBQVY7QUFBcUJnQixFQUFBQSxJQUFJLEVBQUU7QUFBM0IsQ0FBRCxFQUFvQztBQUNuQ2xCLEVBQUFBLE9BQU8sRUFBRUE7QUFEMEIsQ0FBcEMsQ0FBRDs7QUNMQSxJQUFJOEcsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJK0IsWUFBVSxHQUFHL0IsWUFBakI7O0FBQ0EsSUFBSW1HLFdBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSTh0QixRQUFRLEdBQUc5dEIsUUFBZjtBQUdBOzs7QUFDQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFNBQVY7QUFBcUJnQixFQUFBQSxJQUFJLEVBQUUsSUFBM0I7QUFBaUNsSixFQUFBQSxJQUFJLEVBQUUsQ0FBQ2tyQjtBQUF4QyxDQUFELEVBQXFEO0FBQ3BERixFQUFBQSxpQkFBaUIsRUFBRSxTQUFTQSxpQkFBVCxDQUEyQjlpQixNQUEzQixFQUFtQztBQUNwRDNFLElBQUFBLFdBQVEsQ0FBQzJFLE1BQUQsQ0FBUjs7QUFDQSxRQUFJO0FBQ0YsVUFBSXkzQix1QkFBdUIsR0FBR3hnQyxZQUFVLENBQUMsUUFBRCxFQUFXLG1CQUFYLENBQXhDO0FBQ0EsVUFBSXdnQyx1QkFBSixFQUE2QkEsdUJBQXVCLENBQUN6M0IsTUFBRCxDQUF2QjtBQUM3QixhQUFPLElBQVA7QUFDRCxLQUpELENBSUUsT0FBT2hMLEtBQVAsRUFBYztBQUNkLGFBQU8sS0FBUDtBQUNEO0FBQ0Y7QUFWbUQsQ0FBckQsQ0FBRDs7QUNQQSxJQUFJNFIsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJbUcsV0FBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJcUQsVUFBUSxHQUFHckQsVUFBZjs7QUFDQSxJQUFJbWlDLGdCQUFnQixHQUFHbmlDLGtCQUF2Qjs7QUFDQSxJQUFJRCxPQUFLLEdBQUdDLFFBQVo7O0FBQ0EsSUFBSXNHLHNCQUFvQixHQUFHdEcsb0JBQTNCOztBQUNBLElBQUk2SyxnQ0FBOEIsR0FBRzdLLDhCQUFyQzs7QUFDQSxJQUFJNlUsZ0JBQWMsR0FBRzdVLHNCQUFyQjs7QUFDQSxJQUFJNEYsMEJBQXdCLEdBQUc1RiwwQkFBL0I7QUFHQTs7O0FBQ0EsU0FBU2tILEtBQVQsQ0FBYTRELE1BQWIsRUFBcUIrTSxXQUFyQixFQUFrQ3BYO0FBQUU7QUFBcEMsRUFBc0Q7QUFDcEQsTUFBSTJoQyxRQUFRLEdBQUd2Z0MsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCZ0osTUFBdkIsR0FBZ0NqSixTQUFTLENBQUMsQ0FBRCxDQUF4RDtBQUNBLE1BQUkyZ0MsYUFBYSxHQUFHMzNCLGdDQUE4QixDQUFDM0UsQ0FBL0IsQ0FBaUNDLFdBQVEsQ0FBQzJFLE1BQUQsQ0FBekMsRUFBbUQrTSxXQUFuRCxDQUFwQjtBQUNBLE1BQUk0cUIsa0JBQUosRUFBd0J6NkIsU0FBeEIsRUFBbUMwTCxNQUFuQzs7QUFDQSxNQUFJLENBQUM4dUIsYUFBTCxFQUFvQjtBQUNsQixRQUFJbi9CLFVBQVEsQ0FBQzJFLFNBQVMsR0FBRzZNLGdCQUFjLENBQUMvSixNQUFELENBQTNCLENBQVosRUFBa0Q7QUFDaEQsYUFBTzVELEtBQUcsQ0FBQ2MsU0FBRCxFQUFZNlAsV0FBWixFQUF5QnBYLENBQXpCLEVBQTRCMmhDLFFBQTVCLENBQVY7QUFDRDs7QUFDREksSUFBQUEsYUFBYSxHQUFHNThCLDBCQUF3QixDQUFDLENBQUQsQ0FBeEM7QUFDRDs7QUFDRCxNQUFJdThCLGdCQUFnQixDQUFDSyxhQUFELENBQXBCLEVBQXFDO0FBQ25DLFFBQUlBLGFBQWEsQ0FBQ3poQyxRQUFkLEtBQTJCLEtBQTNCLElBQW9DLENBQUNzQyxVQUFRLENBQUMrK0IsUUFBRCxDQUFqRCxFQUE2RCxPQUFPLEtBQVA7O0FBQzdELFFBQUlLLGtCQUFrQixHQUFHNTNCLGdDQUE4QixDQUFDM0UsQ0FBL0IsQ0FBaUNrOEIsUUFBakMsRUFBMkN2cUIsV0FBM0MsQ0FBekIsRUFBa0Y7QUFDaEYsVUFBSTRxQixrQkFBa0IsQ0FBQ3RpQyxHQUFuQixJQUEwQnNpQyxrQkFBa0IsQ0FBQ3Y3QixHQUE3QyxJQUFvRHU3QixrQkFBa0IsQ0FBQzFoQyxRQUFuQixLQUFnQyxLQUF4RixFQUErRixPQUFPLEtBQVA7QUFDL0YwaEMsTUFBQUEsa0JBQWtCLENBQUM1aEMsS0FBbkIsR0FBMkJKLENBQTNCO0FBQ0E2RixNQUFBQSxzQkFBb0IsQ0FBQ0osQ0FBckIsQ0FBdUJrOEIsUUFBdkIsRUFBaUN2cUIsV0FBakMsRUFBOEM0cUIsa0JBQTlDO0FBQ0QsS0FKRCxNQUlPbjhCLHNCQUFvQixDQUFDSixDQUFyQixDQUF1Qms4QixRQUF2QixFQUFpQ3ZxQixXQUFqQyxFQUE4Q2pTLDBCQUF3QixDQUFDLENBQUQsRUFBSW5GLENBQUosQ0FBdEU7QUFDUixHQVBELE1BT087QUFDTGlULElBQUFBLE1BQU0sR0FBRzh1QixhQUFhLENBQUN0N0IsR0FBdkI7QUFDQSxRQUFJd00sTUFBTSxLQUFLdFMsU0FBZixFQUEwQixPQUFPLEtBQVA7QUFDMUJzUyxJQUFBQSxNQUFNLENBQUNsVCxJQUFQLENBQVk0aEMsUUFBWixFQUFzQjNoQyxDQUF0QjtBQUNEOztBQUFDLFNBQU8sSUFBUDtBQUNIO0FBR0Q7OztBQUNBLElBQUlpaUMsV0FBVyxHQUFHM2lDLE9BQUssQ0FBQyxZQUFZO0FBQ2xDLE1BQUkwZixXQUFXLEdBQUcsWUFBWTtBQUFFO0FBQWEsR0FBN0M7O0FBQ0EsTUFBSWxaLE1BQU0sR0FBR0Qsc0JBQW9CLENBQUNKLENBQXJCLENBQXVCLElBQUl1WixXQUFKLEVBQXZCLEVBQTBDLEdBQTFDLEVBQStDO0FBQUUzZSxJQUFBQSxZQUFZLEVBQUU7QUFBaEIsR0FBL0MsQ0FBYixDQUZrQzs7QUFJbEMsU0FBT2toQyxPQUFPLENBQUM5NkIsR0FBUixDQUFZdVksV0FBVyxDQUFDelgsU0FBeEIsRUFBbUMsR0FBbkMsRUFBd0MsQ0FBeEMsRUFBMkN6QixNQUEzQyxNQUF1RCxLQUE5RDtBQUNELENBTHNCLENBQXZCO0FBT0FtTCxJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxTQUFWO0FBQXFCZ0IsRUFBQUEsSUFBSSxFQUFFLElBQTNCO0FBQWlDSSxFQUFBQSxNQUFNLEVBQUV3MkI7QUFBekMsQ0FBRCxFQUF5RDtBQUN4RHg3QixFQUFBQSxHQUFHLEVBQUVBO0FBRG1ELENBQXpELENBQUQ7O0FDN0NBLElBQUl3SyxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUltRyxXQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUkrVSxrQkFBa0IsR0FBRy9VLG9CQUF6Qjs7QUFDQSxJQUFJMmlDLG9CQUFvQixHQUFHM2lDLHNCQUEzQjtBQUdBOzs7QUFDQSxJQUFJMmlDLG9CQUFKLEVBQTBCanhCLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFNBQVY7QUFBcUJnQixFQUFBQSxJQUFJLEVBQUU7QUFBM0IsQ0FBRCxFQUFvQztBQUM3RGtKLEVBQUFBLGNBQWMsRUFBRSxTQUFTQSxjQUFULENBQXdCbEssTUFBeEIsRUFBZ0NvSyxLQUFoQyxFQUF1QztBQUNyRC9PLElBQUFBLFdBQVEsQ0FBQzJFLE1BQUQsQ0FBUjtBQUNBaUssSUFBQUEsa0JBQWtCLENBQUNHLEtBQUQsQ0FBbEI7O0FBQ0EsUUFBSTtBQUNGeXRCLE1BQUFBLG9CQUFvQixDQUFDNzNCLE1BQUQsRUFBU29LLEtBQVQsQ0FBcEI7QUFDQSxhQUFPLElBQVA7QUFDRCxLQUhELENBR0UsT0FBT3BWLEtBQVAsRUFBYztBQUNkLGFBQU8sS0FBUDtBQUNEO0FBQ0Y7QUFWNEQsQ0FBcEMsQ0FBRDs7QUNQMUIsSUFBSTRSLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSUwsUUFBTSxHQUFHSyxRQUFiOztBQUNBLElBQUkrUixnQkFBYyxHQUFHL1IsZ0JBQXJCOztBQUVBMFIsSUFBQyxDQUFDO0FBQUUvUixFQUFBQSxNQUFNLEVBQUU7QUFBVixDQUFELEVBQW1CO0FBQUVxaUMsRUFBQUEsT0FBTyxFQUFFO0FBQVgsQ0FBbkIsQ0FBRDtBQUdBOztBQUNBandCLGdCQUFjLENBQUNwUyxRQUFNLENBQUNxaUMsT0FBUixFQUFpQixTQUFqQixFQUE0QixJQUE1QixDQUFkOztBQ1JBLElBQUkzK0IsVUFBUSxHQUFHckQsVUFBZjs7QUFDQSxJQUFJa0IsU0FBTyxHQUFHbEIsWUFBZDs7QUFDQSxJQUFJaUYsaUJBQWUsR0FBR2pGLGlCQUF0Qjs7QUFFQSxJQUFJNGlDLE9BQUssR0FBRzM5QixpQkFBZSxDQUFDLE9BQUQsQ0FBM0I7QUFHQTs7SUFDQTFGLFFBQUEsR0FBaUIsVUFBVUYsRUFBVixFQUFjO0FBQzdCLE1BQUl3akMsUUFBSjtBQUNBLFNBQU94L0IsVUFBUSxDQUFDaEUsRUFBRCxDQUFSLEtBQWlCLENBQUN3akMsUUFBUSxHQUFHeGpDLEVBQUUsQ0FBQ3VqQyxPQUFELENBQWQsTUFBMkJ4aEMsU0FBM0IsR0FBdUMsQ0FBQyxDQUFDeWhDLFFBQXpDLEdBQW9EM2hDLFNBQU8sQ0FBQzdCLEVBQUQsQ0FBUCxJQUFlLFFBQXBGLENBQVA7QUFDRCxDQUhEOztBQ1BBLElBQUk4RyxXQUFRLEdBQUduRyxXQUFmO0FBR0E7OztJQUNBVCxhQUFBLEdBQWlCLFlBQVk7QUFDM0IsTUFBSThQLElBQUksR0FBR2xKLFdBQVEsQ0FBQyxJQUFELENBQW5CO0FBQ0EsTUFBSWYsTUFBTSxHQUFHLEVBQWI7QUFDQSxNQUFJaUssSUFBSSxDQUFDMVAsTUFBVCxFQUFpQnlGLE1BQU0sSUFBSSxHQUFWO0FBQ2pCLE1BQUlpSyxJQUFJLENBQUN5ekIsVUFBVCxFQUFxQjE5QixNQUFNLElBQUksR0FBVjtBQUNyQixNQUFJaUssSUFBSSxDQUFDMHpCLFNBQVQsRUFBb0IzOUIsTUFBTSxJQUFJLEdBQVY7QUFDcEIsTUFBSWlLLElBQUksQ0FBQzJ6QixNQUFULEVBQWlCNTlCLE1BQU0sSUFBSSxHQUFWO0FBQ2pCLE1BQUlpSyxJQUFJLENBQUM0ekIsT0FBVCxFQUFrQjc5QixNQUFNLElBQUksR0FBVjtBQUNsQixNQUFJaUssSUFBSSxDQUFDNnpCLE1BQVQsRUFBaUI5OUIsTUFBTSxJQUFJLEdBQVY7QUFDakIsU0FBT0EsTUFBUDtBQUNELENBVkQ7Ozs7QUNMQSxJQUFJckYsT0FBSyxHQUFHQyxRQUFaOztBQUNBLElBQUlMLFFBQU0sR0FBR0ssUUFBYjs7O0FBR0EsSUFBSW1qQyxTQUFPLEdBQUd4akMsUUFBTSxDQUFDMjBCLE1BQXJCO2lDQUVBLEdBQXdCdjBCLE9BQUssQ0FBQyxZQUFZO0FBQ3hDLE1BQUlzdEIsRUFBRSxHQUFHOFYsU0FBTyxDQUFDLEdBQUQsRUFBTSxHQUFOLENBQWhCO0FBQ0E5VixFQUFBQSxFQUFFLENBQUMrVixTQUFILEdBQWUsQ0FBZjtBQUNBLFNBQU8vVixFQUFFLENBQUN4dEIsSUFBSCxDQUFRLE1BQVIsS0FBbUIsSUFBMUI7QUFDRCxDQUo0QjtnQ0FNN0IsR0FBdUJFLE9BQUssQ0FBQyxZQUFZO0FBQ3ZDO0FBQ0EsTUFBSXN0QixFQUFFLEdBQUc4VixTQUFPLENBQUMsSUFBRCxFQUFPLElBQVAsQ0FBaEI7QUFDQTlWLEVBQUFBLEVBQUUsQ0FBQytWLFNBQUgsR0FBZSxDQUFmO0FBQ0EsU0FBTy9WLEVBQUUsQ0FBQ3h0QixJQUFILENBQVEsS0FBUixLQUFrQixJQUF6QjtBQUNELENBTDJCOztBQ1o1QixJQUFJRSxPQUFLLEdBQUdDLFFBQVo7O0FBQ0EsSUFBSUwsUUFBTSxHQUFHSyxRQUFiOzs7QUFHQSxJQUFJbWpDLFNBQU8sR0FBR3hqQyxRQUFNLENBQUMyMEIsTUFBckI7SUFFQS8wQix1QkFBQSxHQUFpQlEsT0FBSyxDQUFDLFlBQVk7QUFDakMsTUFBSXN0QixFQUFFLEdBQUc4VixTQUFPLENBQUMsR0FBRCxFQUFNLEdBQU4sQ0FBaEI7QUFDQSxTQUFPLEVBQUU5VixFQUFFLENBQUMyVixNQUFILElBQWEzVixFQUFFLENBQUN4dEIsSUFBSCxDQUFRLElBQVIsQ0FBYixJQUE4Qnd0QixFQUFFLENBQUNnVyxLQUFILEtBQWEsR0FBN0MsQ0FBUDtBQUNELENBSHFCLENBQXRCOztBQ05BLElBQUl0akMsT0FBSyxHQUFHQyxRQUFaOztBQUNBLElBQUlMLFFBQU0sR0FBR0ssUUFBYjs7O0FBR0EsSUFBSW1qQyxPQUFPLEdBQUd4akMsUUFBTSxDQUFDMjBCLE1BQXJCO0lBRUEvMEIsb0JBQUEsR0FBaUJRLE9BQUssQ0FBQyxZQUFZO0FBQ2pDLE1BQUlzdEIsRUFBRSxHQUFHOFYsT0FBTyxDQUFDLFNBQUQsRUFBWSxHQUFaLENBQWhCO0FBQ0EsU0FBTzlWLEVBQUUsQ0FBQ3h0QixJQUFILENBQVEsR0FBUixFQUFheWpDLE1BQWIsQ0FBb0I1OUIsQ0FBcEIsS0FBMEIsR0FBMUIsSUFDTCxJQUFJb0QsT0FBSixDQUFZdWtCLEVBQVosRUFBZ0IsT0FBaEIsTUFBNkIsSUFEL0I7QUFFRCxDQUpxQixDQUF0Qjs7QUNOQSxJQUFJNW5CLGFBQVcsR0FBR3pGLFdBQWxCOztBQUNBLElBQUlMLFFBQU0sR0FBR0ssUUFBYjs7QUFDQSxJQUFJZ0wsUUFBUSxHQUFHaEwsVUFBZjs7QUFDQSxJQUFJOHVCLG1CQUFpQixHQUFHOXVCLG1CQUF4Qjs7QUFDQSxJQUFJOEcsNkJBQTJCLEdBQUc5Ryw2QkFBbEM7O0FBQ0EsSUFBSUUsZ0JBQWMsR0FBR0Ysb0JBQUEsQ0FBK0NrRyxDQUFwRTs7QUFDQSxJQUFJdUUscUJBQW1CLEdBQUd6Syx5QkFBQSxDQUFzRGtHLENBQWhGOztBQUNBLElBQUkyOEIsVUFBUSxHQUFHN2lDLFFBQWY7O0FBQ0EsSUFBSWdCLFVBQVEsR0FBR2hCLFVBQWY7O0FBQ0EsSUFBSXVqQyxRQUFRLEdBQUd2akMsYUFBZjs7QUFDQSxJQUFJd2pDLGVBQWEsR0FBR3hqQyxtQkFBcEI7O0FBQ0EsSUFBSXlMLFVBQVEsR0FBR3pMLGtCQUFmOztBQUNBLElBQUlELE9BQUssR0FBR0MsUUFBWjs7QUFDQSxJQUFJb0UsUUFBTSxHQUFHcEUsZ0JBQWI7O0FBQ0EsSUFBSXdJLG9CQUFvQixHQUFHeEksYUFBQSxDQUF1Q29ILE9BQWxFOztBQUNBLElBQUkwYSxZQUFVLEdBQUc5aEIsWUFBakI7O0FBQ0EsSUFBSWlGLGlCQUFlLEdBQUdqRixpQkFBdEI7O0FBQ0EsSUFBSXlqQyxxQkFBbUIsR0FBR3pqQyx1QkFBMUI7O0FBQ0EsSUFBSTBqQyxpQkFBZSxHQUFHMWpDLG9CQUF0Qjs7QUFFQSxJQUFJNGlDLE9BQUssR0FBRzM5QixpQkFBZSxDQUFDLE9BQUQsQ0FBM0I7QUFDQSxJQUFJMCtCLFlBQVksR0FBR2hrQyxRQUFNLENBQUMyMEIsTUFBMUI7QUFDQSxJQUFJc1AsaUJBQWUsR0FBR0QsWUFBWSxDQUFDMzdCLFNBQW5DOztBQUVBLElBQUk2N0IsTUFBTSxHQUFHLDBDQUFiO0FBQ0EsSUFBSUMsR0FBRyxHQUFHLElBQVY7QUFDQSxJQUFJQyxHQUFHLEdBQUcsSUFBVjs7QUFHQSxJQUFJQyxXQUFXLEdBQUcsSUFBSUwsWUFBSixDQUFpQkcsR0FBakIsTUFBMEJBLEdBQTVDO0FBRUEsSUFBSUcsZUFBYSxHQUFHVCxlQUFhLENBQUNTLGFBQWxDO0FBRUEsSUFBSUMsV0FBVyxHQUFHeitCLGFBQVcsS0FDMUIsQ0FBQ3UrQixXQUFELElBQWdCQyxlQUFoQixJQUFpQ1IscUJBQWpDLElBQXdEQyxpQkFBeEQsSUFBMkUzakMsT0FBSyxDQUFDLFlBQVk7QUFDNUZna0MsRUFBQUEsR0FBRyxDQUFDbkIsT0FBRCxDQUFILEdBQWEsS0FBYixDQUQ0Rjs7QUFHNUYsU0FBT2UsWUFBWSxDQUFDRyxHQUFELENBQVosSUFBcUJBLEdBQXJCLElBQTRCSCxZQUFZLENBQUNJLEdBQUQsQ0FBWixJQUFxQkEsR0FBakQsSUFBd0RKLFlBQVksQ0FBQ0csR0FBRCxFQUFNLEdBQU4sQ0FBWixJQUEwQixNQUF6RjtBQUNELENBSmdGLENBRHRELENBQTdCOztBQU9BLElBQUlLLFlBQVksR0FBRyxVQUFVNTRCLE1BQVYsRUFBa0I7QUFDbkMsTUFBSXpKLE1BQU0sR0FBR3lKLE1BQU0sQ0FBQ3pKLE1BQXBCO0FBQ0EsTUFBSXlILEtBQUssR0FBRyxDQUFaO0FBQ0EsTUFBSW5FLE1BQU0sR0FBRyxFQUFiO0FBQ0EsTUFBSWcvQixRQUFRLEdBQUcsS0FBZjtBQUNBLE1BQUlqakIsR0FBSjs7QUFDQSxTQUFPNVgsS0FBSyxJQUFJekgsTUFBaEIsRUFBd0J5SCxLQUFLLEVBQTdCLEVBQWlDO0FBQy9CNFgsSUFBQUEsR0FBRyxHQUFHNVYsTUFBTSxDQUFDK1YsTUFBUCxDQUFjL1gsS0FBZCxDQUFOOztBQUNBLFFBQUk0WCxHQUFHLEtBQUssSUFBWixFQUFrQjtBQUNoQi9iLE1BQUFBLE1BQU0sSUFBSStiLEdBQUcsR0FBRzVWLE1BQU0sQ0FBQytWLE1BQVAsQ0FBYyxFQUFFL1gsS0FBaEIsQ0FBaEI7QUFDQTtBQUNEOztBQUNELFFBQUksQ0FBQzY2QixRQUFELElBQWFqakIsR0FBRyxLQUFLLEdBQXpCLEVBQThCO0FBQzVCL2IsTUFBQUEsTUFBTSxJQUFJLFVBQVY7QUFDRCxLQUZELE1BRU87QUFDTCxVQUFJK2IsR0FBRyxLQUFLLEdBQVosRUFBaUI7QUFDZmlqQixRQUFBQSxRQUFRLEdBQUcsSUFBWDtBQUNELE9BRkQsTUFFTyxJQUFJampCLEdBQUcsS0FBSyxHQUFaLEVBQWlCO0FBQ3RCaWpCLFFBQUFBLFFBQVEsR0FBRyxLQUFYO0FBQ0Q7O0FBQUNoL0IsTUFBQUEsTUFBTSxJQUFJK2IsR0FBVjtBQUNIO0FBQ0Y7O0FBQUMsU0FBTy9iLE1BQVA7QUFDSCxDQXRCRDs7QUF3QkEsSUFBSWkvQixTQUFTLEdBQUcsVUFBVTk0QixNQUFWLEVBQWtCO0FBQ2hDLE1BQUl6SixNQUFNLEdBQUd5SixNQUFNLENBQUN6SixNQUFwQjtBQUNBLE1BQUl5SCxLQUFLLEdBQUcsQ0FBWjtBQUNBLE1BQUluRSxNQUFNLEdBQUcsRUFBYjtBQUNBLE1BQUlrL0IsS0FBSyxHQUFHLEVBQVo7QUFDQSxNQUFJbDZCLEtBQUssR0FBRyxFQUFaO0FBQ0EsTUFBSWc2QixRQUFRLEdBQUcsS0FBZjtBQUNBLE1BQUlHLEdBQUcsR0FBRyxLQUFWO0FBQ0EsTUFBSUMsT0FBTyxHQUFHLENBQWQ7QUFDQSxNQUFJQyxTQUFTLEdBQUcsRUFBaEI7QUFDQSxNQUFJdGpCLEdBQUo7O0FBQ0EsU0FBTzVYLEtBQUssSUFBSXpILE1BQWhCLEVBQXdCeUgsS0FBSyxFQUE3QixFQUFpQztBQUMvQjRYLElBQUFBLEdBQUcsR0FBRzVWLE1BQU0sQ0FBQytWLE1BQVAsQ0FBYy9YLEtBQWQsQ0FBTjs7QUFDQSxRQUFJNFgsR0FBRyxLQUFLLElBQVosRUFBa0I7QUFDaEJBLE1BQUFBLEdBQUcsR0FBR0EsR0FBRyxHQUFHNVYsTUFBTSxDQUFDK1YsTUFBUCxDQUFjLEVBQUUvWCxLQUFoQixDQUFaO0FBQ0QsS0FGRCxNQUVPLElBQUk0WCxHQUFHLEtBQUssR0FBWixFQUFpQjtBQUN0QmlqQixNQUFBQSxRQUFRLEdBQUcsS0FBWDtBQUNELEtBRk0sTUFFQSxJQUFJLENBQUNBLFFBQUwsRUFBZSxRQUFRLElBQVI7QUFDcEIsV0FBS2pqQixHQUFHLEtBQUssR0FBYjtBQUNFaWpCLFFBQUFBLFFBQVEsR0FBRyxJQUFYO0FBQ0E7O0FBQ0YsV0FBS2pqQixHQUFHLEtBQUssR0FBYjtBQUNFLFlBQUkwaUIsTUFBTSxDQUFDbDlCLElBQVAsQ0FBWTRFLE1BQU0sQ0FBQ3RLLEtBQVAsQ0FBYXNJLEtBQUssR0FBRyxDQUFyQixDQUFaLENBQUosRUFBMEM7QUFDeENBLFVBQUFBLEtBQUssSUFBSSxDQUFUO0FBQ0FnN0IsVUFBQUEsR0FBRyxHQUFHLElBQU47QUFDRDs7QUFDRG4vQixRQUFBQSxNQUFNLElBQUkrYixHQUFWO0FBQ0FxakIsUUFBQUEsT0FBTztBQUNQOztBQUNGLFdBQUtyakIsR0FBRyxLQUFLLEdBQVIsSUFBZW9qQixHQUFwQjtBQUNFLFlBQUlFLFNBQVMsS0FBSyxFQUFkLElBQW9CcmdDLFFBQU0sQ0FBQ2dHLEtBQUQsRUFBUXE2QixTQUFSLENBQTlCLEVBQWtEO0FBQ2hELGdCQUFNLElBQUlDLFdBQUosQ0FBZ0IsNEJBQWhCLENBQU47QUFDRDs7QUFDRHQ2QixRQUFBQSxLQUFLLENBQUNxNkIsU0FBRCxDQUFMLEdBQW1CLElBQW5CO0FBQ0FILFFBQUFBLEtBQUssQ0FBQ3ZnQyxJQUFOLENBQVcsQ0FBQzBnQyxTQUFELEVBQVlELE9BQVosQ0FBWDtBQUNBRCxRQUFBQSxHQUFHLEdBQUcsS0FBTjtBQUNBRSxRQUFBQSxTQUFTLEdBQUcsRUFBWjtBQUNBO0FBcEJrQjs7QUFzQnRCLFFBQUlGLEdBQUosRUFBU0UsU0FBUyxJQUFJdGpCLEdBQWIsQ0FBVCxLQUNLL2IsTUFBTSxJQUFJK2IsR0FBVjtBQUNOOztBQUFDLFNBQU8sQ0FBQy9iLE1BQUQsRUFBU2svQixLQUFULENBQVA7QUFDSCxDQTFDRDtBQTZDQTs7O0FBQ0EsSUFBSXQ1QixRQUFRLENBQUMsUUFBRCxFQUFXazVCLFdBQVgsQ0FBWixFQUFxQztBQUNuQyxNQUFJUyxhQUFhLEdBQUcsU0FBU3JRLE1BQVQsQ0FBZ0JzUSxPQUFoQixFQUF5QnZCLEtBQXpCLEVBQWdDO0FBQ2xELFFBQUl3QixZQUFZLEdBQUcsZ0JBQWdCRixhQUFuQztBQUNBLFFBQUlHLGVBQWUsR0FBR2pDLFVBQVEsQ0FBQytCLE9BQUQsQ0FBOUI7QUFDQSxRQUFJRyxpQkFBaUIsR0FBRzFCLEtBQUssS0FBS2ppQyxTQUFsQztBQUNBLFFBQUlraUMsTUFBTSxHQUFHLEVBQWI7QUFDQSxRQUFJMEIsVUFBVSxHQUFHSixPQUFqQjtBQUNBLFFBQUlLLFFBQUosRUFBY2pDLE1BQWQsRUFBc0JFLE1BQXRCLEVBQThCZ0MsT0FBOUIsRUFBdUM5L0IsTUFBdkMsRUFBK0NtQyxLQUEvQzs7QUFFQSxRQUFJLENBQUNzOUIsWUFBRCxJQUFpQkMsZUFBakIsSUFBb0NDLGlCQUFwQyxJQUF5REgsT0FBTyxDQUFDeDBCLFdBQVIsS0FBd0J1MEIsYUFBckYsRUFBb0c7QUFDbEcsYUFBT0MsT0FBUDtBQUNEOztBQUVELFFBQUlFLGVBQWUsSUFBSUYsT0FBTyxZQUFZRCxhQUExQyxFQUF5RDtBQUN2REMsTUFBQUEsT0FBTyxHQUFHQSxPQUFPLENBQUM3N0IsTUFBbEI7QUFDQSxVQUFJZzhCLGlCQUFKLEVBQXVCMUIsS0FBSyxHQUFHLFdBQVcyQixVQUFYLEdBQXdCQSxVQUFVLENBQUMzQixLQUFuQyxHQUEyQ0UsUUFBUSxDQUFDL2lDLElBQVQsQ0FBY3drQyxVQUFkLENBQW5EO0FBQ3hCOztBQUVESixJQUFBQSxPQUFPLEdBQUdBLE9BQU8sS0FBS3hqQyxTQUFaLEdBQXdCLEVBQXhCLEdBQTZCSixVQUFRLENBQUM0akMsT0FBRCxDQUEvQztBQUNBdkIsSUFBQUEsS0FBSyxHQUFHQSxLQUFLLEtBQUtqaUMsU0FBVixHQUFzQixFQUF0QixHQUEyQkosVUFBUSxDQUFDcWlDLEtBQUQsQ0FBM0M7QUFDQTJCLElBQUFBLFVBQVUsR0FBR0osT0FBYjs7QUFFQSxRQUFJbkIscUJBQW1CLElBQUksWUFBWUssR0FBdkMsRUFBNEM7QUFDMUNkLE1BQUFBLE1BQU0sR0FBRyxDQUFDLENBQUNLLEtBQUYsSUFBV0EsS0FBSyxDQUFDbDVCLE9BQU4sQ0FBYyxHQUFkLElBQXFCLENBQUMsQ0FBMUM7QUFDQSxVQUFJNjRCLE1BQUosRUFBWUssS0FBSyxHQUFHQSxLQUFLLENBQUN2NkIsT0FBTixDQUFjLElBQWQsRUFBb0IsRUFBcEIsQ0FBUjtBQUNiOztBQUVEbThCLElBQUFBLFFBQVEsR0FBRzVCLEtBQVg7O0FBRUEsUUFBSVksZUFBYSxJQUFJLFlBQVlILEdBQWpDLEVBQXNDO0FBQ3BDWixNQUFBQSxNQUFNLEdBQUcsQ0FBQyxDQUFDRyxLQUFGLElBQVdBLEtBQUssQ0FBQ2w1QixPQUFOLENBQWMsR0FBZCxJQUFxQixDQUFDLENBQTFDO0FBQ0EsVUFBSSs0QixNQUFKLEVBQVlHLEtBQUssR0FBR0EsS0FBSyxDQUFDdjZCLE9BQU4sQ0FBYyxJQUFkLEVBQW9CLEVBQXBCLENBQVI7QUFDYjs7QUFFRCxRQUFJNDZCLGlCQUFKLEVBQXFCO0FBQ25Cd0IsTUFBQUEsT0FBTyxHQUFHYixTQUFTLENBQUNPLE9BQUQsQ0FBbkI7QUFDQUEsTUFBQUEsT0FBTyxHQUFHTSxPQUFPLENBQUMsQ0FBRCxDQUFqQjtBQUNBNUIsTUFBQUEsTUFBTSxHQUFHNEIsT0FBTyxDQUFDLENBQUQsQ0FBaEI7QUFDRDs7QUFFRDkvQixJQUFBQSxNQUFNLEdBQUcwcEIsbUJBQWlCLENBQUM2VSxZQUFZLENBQUNpQixPQUFELEVBQVV2QixLQUFWLENBQWIsRUFBK0J3QixZQUFZLEdBQUcsSUFBSCxHQUFVakIsaUJBQXJELEVBQXNFZSxhQUF0RSxDQUExQjs7QUFFQSxRQUFJM0IsTUFBTSxJQUFJRSxNQUFWLElBQW9CSSxNQUFNLENBQUN4aEMsTUFBL0IsRUFBdUM7QUFDckN5RixNQUFBQSxLQUFLLEdBQUdpQixvQkFBb0IsQ0FBQ3BELE1BQUQsQ0FBNUI7O0FBQ0EsVUFBSTQ5QixNQUFKLEVBQVk7QUFDVno3QixRQUFBQSxLQUFLLENBQUN5N0IsTUFBTixHQUFlLElBQWY7QUFDQXo3QixRQUFBQSxLQUFLLENBQUNnbEIsR0FBTixHQUFZb1ksYUFBYSxDQUFDUixZQUFZLENBQUNTLE9BQUQsQ0FBYixFQUF3QkssUUFBeEIsQ0FBekI7QUFDRDs7QUFDRCxVQUFJL0IsTUFBSixFQUFZMzdCLEtBQUssQ0FBQzI3QixNQUFOLEdBQWUsSUFBZjtBQUNaLFVBQUlJLE1BQU0sQ0FBQ3hoQyxNQUFYLEVBQW1CeUYsS0FBSyxDQUFDKzdCLE1BQU4sR0FBZUEsTUFBZjtBQUNwQjs7QUFFRCxRQUFJc0IsT0FBTyxLQUFLSSxVQUFoQixFQUE0QixJQUFJO0FBQzlCO0FBQ0FsK0IsTUFBQUEsNkJBQTJCLENBQUMxQixNQUFELEVBQVMsUUFBVCxFQUFtQjQvQixVQUFVLEtBQUssRUFBZixHQUFvQixNQUFwQixHQUE2QkEsVUFBaEQsQ0FBM0I7QUFDRCxLQUgyQixDQUcxQixPQUFPbGxDLEtBQVAsRUFBYztBQUFFO0FBQWE7QUFFL0IsV0FBT3NGLE1BQVA7QUFDRCxHQXpERDs7QUEyREEsTUFBSSsvQixLQUFLLEdBQUcsVUFBVXhoQyxHQUFWLEVBQWU7QUFDekJBLElBQUFBLEdBQUcsSUFBSWdoQyxhQUFQLElBQXdCemtDLGdCQUFjLENBQUN5a0MsYUFBRCxFQUFnQmhoQyxHQUFoQixFQUFxQjtBQUN6RDdDLE1BQUFBLFlBQVksRUFBRSxJQUQyQztBQUV6RFgsTUFBQUEsR0FBRyxFQUFFLFlBQVk7QUFBRSxlQUFPd2pDLFlBQVksQ0FBQ2hnQyxHQUFELENBQW5CO0FBQTJCLE9BRlc7QUFHekR1RCxNQUFBQSxHQUFHLEVBQUUsVUFBVTdILEVBQVYsRUFBYztBQUFFc2tDLFFBQUFBLFlBQVksQ0FBQ2hnQyxHQUFELENBQVosR0FBb0J0RSxFQUFwQjtBQUF5QjtBQUhXLEtBQXJCLENBQXRDO0FBS0QsR0FORDs7QUFRQSxPQUFLLElBQUl1SCxJQUFJLEdBQUc2RCxxQkFBbUIsQ0FBQ2s1QixZQUFELENBQTlCLEVBQThDcDZCLEtBQUssR0FBRyxDQUEzRCxFQUE4RDNDLElBQUksQ0FBQzlFLE1BQUwsR0FBY3lILEtBQTVFLEdBQW9GO0FBQ2xGNDdCLElBQUFBLEtBQUssQ0FBQ3YrQixJQUFJLENBQUMyQyxLQUFLLEVBQU4sQ0FBTCxDQUFMO0FBQ0Q7O0FBRURxNkIsRUFBQUEsaUJBQWUsQ0FBQ3h6QixXQUFoQixHQUE4QnUwQixhQUE5QjtBQUNBQSxFQUFBQSxhQUFhLENBQUMzOEIsU0FBZCxHQUEwQjQ3QixpQkFBMUI7QUFDQW40QixFQUFBQSxVQUFRLENBQUM5TCxRQUFELEVBQVMsUUFBVCxFQUFtQmdsQyxhQUFuQixDQUFSO0FBQ0Q7OztBQUdEN2lCLFlBQVUsQ0FBQyxRQUFELENBQVY7O0FDNUxBLElBQUlyYyxhQUFXLEdBQUd6RixXQUFsQjs7QUFDQSxJQUFJeWpDLHFCQUFtQixHQUFHempDLHVCQUExQjs7QUFDQSxJQUFJRSxnQkFBYyxHQUFHRixvQkFBQSxDQUErQ2tHLENBQXBFOztBQUNBLElBQUlxQyxrQkFBZ0IsR0FBR3ZJLGFBQUEsQ0FBdUNHLEdBQTlEOztBQUNBLElBQUl5akMsaUJBQWUsR0FBR3RQLE1BQU0sQ0FBQ3RzQixTQUE3QjtBQUdBOztBQUNBLElBQUl2QyxhQUFXLElBQUlnK0IscUJBQW5CLEVBQXdDO0FBQ3RDdmpDLEVBQUFBLGdCQUFjLENBQUMwakMsaUJBQUQsRUFBa0IsUUFBbEIsRUFBNEI7QUFDeEM5aUMsSUFBQUEsWUFBWSxFQUFFLElBRDBCO0FBRXhDWCxJQUFBQSxHQUFHLEVBQUUsWUFBWTtBQUNmLFVBQUksU0FBU3lqQyxpQkFBYixFQUE4QixPQUFPeGlDLFNBQVAsQ0FEZjtBQUdmOztBQUNBLFVBQUksZ0JBQWdCa3pCLE1BQXBCLEVBQTRCO0FBQzFCLGVBQU8sQ0FBQyxDQUFDL3JCLGtCQUFnQixDQUFDLElBQUQsQ0FBaEIsQ0FBdUJ5NkIsTUFBaEM7QUFDRDs7QUFDRCxZQUFNM2hDLFNBQVMsQ0FBQyx3Q0FBRCxDQUFmO0FBQ0Q7QUFWdUMsR0FBNUIsQ0FBZDtBQVlEOztBQ3BCRDs7QUFDQTs7QUFDQSxJQUFJTCxVQUFRLEdBQUdoQixVQUFmOztBQUNBLElBQUlvbEMsV0FBVyxHQUFHcGxDLGFBQWxCOztBQUNBLElBQUl3akMsZUFBYSxHQUFHeGpDLG1CQUFwQjs7QUFDQSxJQUFJd0UsUUFBTSxHQUFHeEUsZ0JBQWI7O0FBQ0EsSUFBSTZPLFFBQU0sR0FBRzdPLGNBQWI7O0FBQ0EsSUFBSXVJLGtCQUFnQixHQUFHdkksYUFBQSxDQUF1Q0csR0FBOUQ7O0FBQ0EsSUFBSXNqQyxtQkFBbUIsR0FBR3pqQyx1QkFBMUI7O0FBQ0EsSUFBSTBqQyxlQUFlLEdBQUcxakMsb0JBQXRCOztBQUVBLElBQUlxbEMsVUFBVSxHQUFHL1EsTUFBTSxDQUFDdHNCLFNBQVAsQ0FBaUJuSSxJQUFsQztBQUNBLElBQUl5bEMsYUFBYSxHQUFHOWdDLFFBQU0sQ0FBQyx1QkFBRCxFQUEwQjdCLE1BQU0sQ0FBQ3FGLFNBQVAsQ0FBaUJjLE9BQTNDLENBQTFCO0FBRUEsSUFBSXk4QixXQUFXLEdBQUdGLFVBQWxCOztBQUVBLElBQUlHLHdCQUF3QixHQUFJLFlBQVk7QUFDMUMsTUFBSTFCLEdBQUcsR0FBRyxHQUFWO0FBQ0EsTUFBSUMsR0FBRyxHQUFHLEtBQVY7QUFDQXNCLEVBQUFBLFVBQVUsQ0FBQzdrQyxJQUFYLENBQWdCc2pDLEdBQWhCLEVBQXFCLEdBQXJCO0FBQ0F1QixFQUFBQSxVQUFVLENBQUM3a0MsSUFBWCxDQUFnQnVqQyxHQUFoQixFQUFxQixHQUFyQjtBQUNBLFNBQU9ELEdBQUcsQ0FBQ1YsU0FBSixLQUFrQixDQUFsQixJQUF1QlcsR0FBRyxDQUFDWCxTQUFKLEtBQWtCLENBQWhEO0FBQ0QsQ0FOOEIsRUFBL0I7O0FBUUEsSUFBSWEsZUFBYSxHQUFHVCxlQUFhLENBQUNTLGFBQWQsSUFBK0JULGVBQWEsQ0FBQ2lDLFlBQWpFOztBQUdBLElBQUlDLGFBQWEsR0FBRyxPQUFPN2xDLElBQVAsQ0FBWSxFQUFaLEVBQWdCLENBQWhCLE1BQXVCdUIsU0FBM0M7QUFFQSxJQUFJdWtDLEtBQUssR0FBR0gsd0JBQXdCLElBQUlFLGFBQTVCLElBQTZDekIsZUFBN0MsSUFBOERSLG1CQUE5RCxJQUFxRkMsZUFBakc7O0FBRUEsSUFBSWlDLEtBQUosRUFBVztBQUNUO0FBQ0FKLEVBQUFBLFdBQVcsR0FBRyxTQUFTMWxDLElBQVQsQ0FBYzBMLE1BQWQsRUFBc0I7QUFDbEMsUUFBSThoQixFQUFFLEdBQUcsSUFBVDtBQUNBLFFBQUk5bEIsS0FBSyxHQUFHZ0Isa0JBQWdCLENBQUM4a0IsRUFBRCxDQUE1QjtBQUNBLFFBQUk1QyxHQUFHLEdBQUd6cEIsVUFBUSxDQUFDdUssTUFBRCxDQUFsQjtBQUNBLFFBQUlnaEIsR0FBRyxHQUFHaGxCLEtBQUssQ0FBQ2dsQixHQUFoQjtBQUNBLFFBQUlubkIsTUFBSixFQUFZd2dDLE1BQVosRUFBb0J4QyxTQUFwQixFQUErQjlnQyxLQUEvQixFQUFzQytILENBQXRDLEVBQXlDOUQsTUFBekMsRUFBaURzL0IsS0FBakQ7O0FBRUEsUUFBSXRaLEdBQUosRUFBUztBQUNQQSxNQUFBQSxHQUFHLENBQUM2VyxTQUFKLEdBQWdCL1YsRUFBRSxDQUFDK1YsU0FBbkI7QUFDQWgrQixNQUFBQSxNQUFNLEdBQUdtZ0MsV0FBVyxDQUFDL2tDLElBQVosQ0FBaUIrckIsR0FBakIsRUFBc0I5QixHQUF0QixDQUFUO0FBQ0E0QyxNQUFBQSxFQUFFLENBQUMrVixTQUFILEdBQWU3VyxHQUFHLENBQUM2VyxTQUFuQjtBQUNBLGFBQU9oK0IsTUFBUDtBQUNEOztBQUVELFFBQUlrK0IsTUFBTSxHQUFHLzdCLEtBQUssQ0FBQys3QixNQUFuQjtBQUNBLFFBQUlKLE1BQU0sR0FBR2UsZUFBYSxJQUFJNVcsRUFBRSxDQUFDNlYsTUFBakM7QUFDQSxRQUFJRyxLQUFLLEdBQUcrQixXQUFXLENBQUM1a0MsSUFBWixDQUFpQjZzQixFQUFqQixDQUFaO0FBQ0EsUUFBSXRrQixNQUFNLEdBQUdza0IsRUFBRSxDQUFDdGtCLE1BQWhCO0FBQ0EsUUFBSSs4QixVQUFVLEdBQUcsQ0FBakI7QUFDQSxRQUFJQyxPQUFPLEdBQUd0YixHQUFkOztBQUVBLFFBQUl5WSxNQUFKLEVBQVk7QUFDVkcsTUFBQUEsS0FBSyxHQUFHQSxLQUFLLENBQUN2NkIsT0FBTixDQUFjLEdBQWQsRUFBbUIsRUFBbkIsQ0FBUjs7QUFDQSxVQUFJdTZCLEtBQUssQ0FBQ2w1QixPQUFOLENBQWMsR0FBZCxNQUF1QixDQUFDLENBQTVCLEVBQStCO0FBQzdCazVCLFFBQUFBLEtBQUssSUFBSSxHQUFUO0FBQ0Q7O0FBRUQwQyxNQUFBQSxPQUFPLEdBQUd0YixHQUFHLENBQUN4cEIsS0FBSixDQUFVb3NCLEVBQUUsQ0FBQytWLFNBQWIsQ0FBVixDQU5VOztBQVFWLFVBQUkvVixFQUFFLENBQUMrVixTQUFILEdBQWUsQ0FBZixLQUFxQixDQUFDL1YsRUFBRSxDQUFDMFYsU0FBSixJQUFpQjFWLEVBQUUsQ0FBQzBWLFNBQUgsSUFBZ0J0WSxHQUFHLENBQUNuSixNQUFKLENBQVcrTCxFQUFFLENBQUMrVixTQUFILEdBQWUsQ0FBMUIsTUFBaUMsSUFBdkYsQ0FBSixFQUFrRztBQUNoR3I2QixRQUFBQSxNQUFNLEdBQUcsU0FBU0EsTUFBVCxHQUFrQixHQUEzQjtBQUNBZzlCLFFBQUFBLE9BQU8sR0FBRyxNQUFNQSxPQUFoQjtBQUNBRCxRQUFBQSxVQUFVO0FBQ1gsT0FaUztBQWNWOzs7QUFDQUYsTUFBQUEsTUFBTSxHQUFHLElBQUl0UixNQUFKLENBQVcsU0FBU3ZyQixNQUFULEdBQWtCLEdBQTdCLEVBQWtDczZCLEtBQWxDLENBQVQ7QUFDRDs7QUFFRCxRQUFJcUMsYUFBSixFQUFtQjtBQUNqQkUsTUFBQUEsTUFBTSxHQUFHLElBQUl0UixNQUFKLENBQVcsTUFBTXZyQixNQUFOLEdBQWUsVUFBMUIsRUFBc0NzNkIsS0FBdEMsQ0FBVDtBQUNEOztBQUNELFFBQUltQyx3QkFBSixFQUE4QnBDLFNBQVMsR0FBRy9WLEVBQUUsQ0FBQytWLFNBQWY7QUFFOUI5Z0MsSUFBQUEsS0FBSyxHQUFHK2lDLFVBQVUsQ0FBQzdrQyxJQUFYLENBQWdCMGlDLE1BQU0sR0FBRzBDLE1BQUgsR0FBWXZZLEVBQWxDLEVBQXNDMFksT0FBdEMsQ0FBUjs7QUFFQSxRQUFJN0MsTUFBSixFQUFZO0FBQ1YsVUFBSTVnQyxLQUFKLEVBQVc7QUFDVEEsUUFBQUEsS0FBSyxDQUFDZ0IsS0FBTixHQUFjaEIsS0FBSyxDQUFDZ0IsS0FBTixDQUFZckMsS0FBWixDQUFrQjZrQyxVQUFsQixDQUFkO0FBQ0F4akMsUUFBQUEsS0FBSyxDQUFDLENBQUQsQ0FBTCxHQUFXQSxLQUFLLENBQUMsQ0FBRCxDQUFMLENBQVNyQixLQUFULENBQWU2a0MsVUFBZixDQUFYO0FBQ0F4akMsUUFBQUEsS0FBSyxDQUFDaUgsS0FBTixHQUFjOGpCLEVBQUUsQ0FBQytWLFNBQWpCO0FBQ0EvVixRQUFBQSxFQUFFLENBQUMrVixTQUFILElBQWdCOWdDLEtBQUssQ0FBQyxDQUFELENBQUwsQ0FBU1IsTUFBekI7QUFDRCxPQUxELE1BS091ckIsRUFBRSxDQUFDK1YsU0FBSCxHQUFlLENBQWY7QUFDUixLQVBELE1BT08sSUFBSW9DLHdCQUF3QixJQUFJbGpDLEtBQWhDLEVBQXVDO0FBQzVDK3FCLE1BQUFBLEVBQUUsQ0FBQytWLFNBQUgsR0FBZS9WLEVBQUUsQ0FBQzF0QixNQUFILEdBQVkyQyxLQUFLLENBQUNpSCxLQUFOLEdBQWNqSCxLQUFLLENBQUMsQ0FBRCxDQUFMLENBQVNSLE1BQW5DLEdBQTRDc2hDLFNBQTNEO0FBQ0Q7O0FBQ0QsUUFBSXNDLGFBQWEsSUFBSXBqQyxLQUFqQixJQUEwQkEsS0FBSyxDQUFDUixNQUFOLEdBQWUsQ0FBN0MsRUFBZ0Q7QUFDOUM7QUFDQTtBQUNBd2pDLE1BQUFBLGFBQWEsQ0FBQzlrQyxJQUFkLENBQW1COEIsS0FBSyxDQUFDLENBQUQsQ0FBeEIsRUFBNkJzakMsTUFBN0IsRUFBcUMsWUFBWTtBQUMvQyxhQUFLdjdCLENBQUMsR0FBRyxDQUFULEVBQVlBLENBQUMsR0FBR3hJLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQyxFQUFzQ3VJLENBQUMsRUFBdkMsRUFBMkM7QUFDekMsY0FBSXhJLFNBQVMsQ0FBQ3dJLENBQUQsQ0FBVCxLQUFpQmpKLFNBQXJCLEVBQWdDa0IsS0FBSyxDQUFDK0gsQ0FBRCxDQUFMLEdBQVdqSixTQUFYO0FBQ2pDO0FBQ0YsT0FKRDtBQUtEOztBQUVELFFBQUlrQixLQUFLLElBQUlnaEMsTUFBYixFQUFxQjtBQUNuQmhoQyxNQUFBQSxLQUFLLENBQUNnaEMsTUFBTixHQUFlLzhCLE1BQU0sR0FBR3NJLFFBQU0sQ0FBQyxJQUFELENBQTlCOztBQUNBLFdBQUt4RSxDQUFDLEdBQUcsQ0FBVCxFQUFZQSxDQUFDLEdBQUdpNUIsTUFBTSxDQUFDeGhDLE1BQXZCLEVBQStCdUksQ0FBQyxFQUFoQyxFQUFvQztBQUNsQ3c3QixRQUFBQSxLQUFLLEdBQUd2QyxNQUFNLENBQUNqNUIsQ0FBRCxDQUFkO0FBQ0E5RCxRQUFBQSxNQUFNLENBQUNzL0IsS0FBSyxDQUFDLENBQUQsQ0FBTixDQUFOLEdBQW1CdmpDLEtBQUssQ0FBQ3VqQyxLQUFLLENBQUMsQ0FBRCxDQUFOLENBQXhCO0FBQ0Q7QUFDRjs7QUFFRCxXQUFPdmpDLEtBQVA7QUFDRCxHQTNFRDtBQTRFRDs7SUFFRC9DLFlBQUEsR0FBaUJnbUMsV0FBakI7O0FDL0dBLElBQUk3ekIsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJSCxJQUFJLEdBQUdHLFlBQVg7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9Cb0ssRUFBQUEsS0FBSyxFQUFFLElBQTNCO0FBQWlDaEosRUFBQUEsTUFBTSxFQUFFLElBQUlyTSxJQUFKLEtBQWFBO0FBQXRELENBQUQsRUFBK0Q7QUFDOURBLEVBQUFBLElBQUksRUFBRUE7QUFEd0QsQ0FBL0QsQ0FBRDs7QUNOQSxJQUFJNEYsYUFBVyxHQUFHekYsV0FBbEI7O0FBQ0EsSUFBSWdtQywwQkFBMEIsR0FBR2htQyxvQkFBakM7O0FBQ0EsSUFBSWltQyxXQUFXLEdBQUdqbUMsYUFBbEI7O0FBQ0EsSUFBSUQsT0FBSyxHQUFHQyxRQUFaOztBQUVBLElBQUkrTCxRQUFNLEdBQUd0RyxhQUFXLElBQUkxRixPQUFLLENBQUMsWUFBWTtBQUM1QztBQUNBLFNBQU9FLE1BQU0sQ0FBQ0ssd0JBQVAsQ0FBZ0NnMEIsTUFBTSxDQUFDdHNCLFNBQXZDLEVBQWtELE9BQWxELEVBQTJEN0gsR0FBM0QsQ0FBK0RLLElBQS9ELENBQW9FO0FBQUV3aUMsSUFBQUEsTUFBTSxFQUFFLElBQVY7QUFBZ0JFLElBQUFBLE1BQU0sRUFBRTtBQUF4QixHQUFwRSxNQUF3RyxJQUEvRztBQUNELENBSGdDLENBQWpDO0FBTUE7O0FBQ0EsSUFBSW4zQixRQUFKLEVBQVlpNkIsMEJBQTBCLENBQUM5L0IsQ0FBM0IsQ0FBNkJvdUIsTUFBTSxDQUFDdHNCLFNBQXBDLEVBQStDLE9BQS9DLEVBQXdEO0FBQ2xFbEgsRUFBQUEsWUFBWSxFQUFFLElBRG9EO0FBRWxFWCxFQUFBQSxHQUFHLEVBQUU4bEM7QUFGNkQsQ0FBeEQ7O0FDWlosSUFBSXhnQyxhQUFXLEdBQUd6RixXQUFsQjs7QUFDQSxJQUFJaWtDLGVBQWEsR0FBR2prQyxtQkFBQSxDQUE4Q2lrQyxhQUFsRTs7QUFDQSxJQUFJL2pDLGdCQUFjLEdBQUdGLG9CQUFBLENBQStDa0csQ0FBcEU7O0FBQ0EsSUFBSXFDLGtCQUFnQixHQUFHdkksYUFBQSxDQUF1Q0csR0FBOUQ7O0FBQ0EsSUFBSXlqQyxpQkFBZSxHQUFHdFAsTUFBTSxDQUFDdHNCLFNBQTdCO0FBR0E7O0FBQ0EsSUFBSXZDLGFBQVcsSUFBSXcrQixlQUFuQixFQUFrQztBQUNoQy9qQyxFQUFBQSxnQkFBYyxDQUFDMGpDLGlCQUFELEVBQWtCLFFBQWxCLEVBQTRCO0FBQ3hDOWlDLElBQUFBLFlBQVksRUFBRSxJQUQwQjtBQUV4Q1gsSUFBQUEsR0FBRyxFQUFFLFlBQVk7QUFDZixVQUFJLFNBQVN5akMsaUJBQWIsRUFBOEIsT0FBT3hpQyxTQUFQLENBRGY7QUFHZjs7QUFDQSxVQUFJLGdCQUFnQmt6QixNQUFwQixFQUE0QjtBQUMxQixlQUFPLENBQUMsQ0FBQy9yQixrQkFBZ0IsQ0FBQyxJQUFELENBQWhCLENBQXVCMjZCLE1BQWhDO0FBQ0Q7O0FBQ0QsWUFBTTdoQyxTQUFTLENBQUMsd0NBQUQsQ0FBZjtBQUNEO0FBVnVDLEdBQTVCLENBQWQ7QUFZRDs7QUNsQkQsSUFBSXFRLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXlCLFlBQVUsR0FBR3pCLFlBQWpCOztBQUNBLElBQUlxRCxVQUFRLEdBQUdyRCxVQUFmOztBQUVBLElBQUlrbUMsaUJBQWlCLEdBQUcsWUFBWTtBQUNsQyxNQUFJQyxVQUFVLEdBQUcsS0FBakI7QUFDQSxNQUFJOVksRUFBRSxHQUFHLE1BQVQ7O0FBQ0FBLEVBQUFBLEVBQUUsQ0FBQ3h0QixJQUFILEdBQVUsWUFBWTtBQUNwQnNtQyxJQUFBQSxVQUFVLEdBQUcsSUFBYjtBQUNBLFdBQU8sSUFBSXRtQyxJQUFKLENBQVMyUCxLQUFULENBQWUsSUFBZixFQUFxQjNOLFNBQXJCLENBQVA7QUFDRCxHQUhEOztBQUlBLFNBQU93ckIsRUFBRSxDQUFDMW1CLElBQUgsQ0FBUSxLQUFSLE1BQW1CLElBQW5CLElBQTJCdy9CLFVBQWxDO0FBQ0QsQ0FSdUIsRUFBeEI7O0FBVUEsSUFBSUMsVUFBVSxHQUFHLElBQUl6L0IsSUFBckI7QUFHQTs7QUFDQStLLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JvSyxFQUFBQSxLQUFLLEVBQUUsSUFBM0I7QUFBaUNoSixFQUFBQSxNQUFNLEVBQUUsQ0FBQ2c2QjtBQUExQyxDQUFELEVBQWdFO0FBQy9Edi9CLEVBQUFBLElBQUksRUFBRSxVQUFVOGpCLEdBQVYsRUFBZTtBQUNuQixRQUFJNXFCLElBQUksR0FBRyxLQUFLQSxJQUFoQjtBQUNBLFFBQUksQ0FBQzRCLFlBQVUsQ0FBQzVCLElBQUQsQ0FBZixFQUF1QixPQUFPdW1DLFVBQVUsQ0FBQzVsQyxJQUFYLENBQWdCLElBQWhCLEVBQXNCaXFCLEdBQXRCLENBQVA7QUFDdkIsUUFBSXJsQixNQUFNLEdBQUd2RixJQUFJLENBQUNXLElBQUwsQ0FBVSxJQUFWLEVBQWdCaXFCLEdBQWhCLENBQWI7O0FBQ0EsUUFBSXJsQixNQUFNLEtBQUssSUFBWCxJQUFtQixDQUFDL0IsVUFBUSxDQUFDK0IsTUFBRCxDQUFoQyxFQUEwQztBQUN4QyxZQUFNLElBQUlpUyxLQUFKLENBQVUsb0VBQVYsQ0FBTjtBQUNEOztBQUNELFdBQU8sQ0FBQyxDQUFDalMsTUFBVDtBQUNEO0FBVDhELENBQWhFLENBQUQ7O0FDcEJBLElBQUl3WCxzQkFBb0IsR0FBRzVjLFlBQUEsQ0FBc0NrSSxNQUFqRTs7QUFDQSxJQUFJdUQsVUFBUSxHQUFHekwsa0JBQWY7O0FBQ0EsSUFBSW1HLFdBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSTJSLFdBQVMsR0FBRzNSLFVBQWhCOztBQUNBLElBQUlELE9BQUssR0FBR0MsUUFBWjs7QUFDQSxJQUFJcWpDLEtBQUssR0FBR3JqQyxhQUFaOztBQUVBLElBQUlxc0IsU0FBUyxHQUFHLFVBQWhCO0FBQ0EsSUFBSXVYLGlCQUFlLEdBQUd0UCxNQUFNLENBQUN0c0IsU0FBN0I7QUFDQSxJQUFJcStCLGNBQWMsR0FBR3pDLGlCQUFlLENBQUN2WCxTQUFELENBQXBDO0FBRUEsSUFBSWlhLFdBQVcsR0FBR3ZtQyxPQUFLLENBQUMsWUFBWTtBQUFFLFNBQU9zbUMsY0FBYyxDQUFDN2xDLElBQWYsQ0FBb0I7QUFBRXVJLElBQUFBLE1BQU0sRUFBRSxHQUFWO0FBQWVzNkIsSUFBQUEsS0FBSyxFQUFFO0FBQXRCLEdBQXBCLEtBQW9ELE1BQTNEO0FBQW9FLENBQW5GLENBQXZCOztBQUVBLElBQUlrRCxjQUFjLEdBQUczcEIsc0JBQW9CLElBQUl5cEIsY0FBYyxDQUFDeGhDLElBQWYsSUFBdUJ3bkIsU0FBcEU7QUFHQTs7QUFDQSxJQUFJaWEsV0FBVyxJQUFJQyxjQUFuQixFQUFtQztBQUNqQzk2QixFQUFBQSxVQUFRLENBQUM2b0IsTUFBTSxDQUFDdHNCLFNBQVIsRUFBbUJxa0IsU0FBbkIsRUFBOEIsU0FBU3JyQixRQUFULEdBQW9CO0FBQ3hELFFBQUl3bEMsQ0FBQyxHQUFHcmdDLFdBQVEsQ0FBQyxJQUFELENBQWhCO0FBQ0EsUUFBSXNnQyxDQUFDLEdBQUc5MEIsV0FBUyxDQUFDNjBCLENBQUMsQ0FBQ3o5QixNQUFILENBQWpCO0FBQ0EsUUFBSTI5QixFQUFFLEdBQUdGLENBQUMsQ0FBQ25ELEtBQVg7QUFDQSxRQUFJbjlCLENBQUMsR0FBR3lMLFdBQVMsQ0FBQyswQixFQUFFLEtBQUt0bEMsU0FBUCxJQUFvQm9sQyxDQUFDLFlBQVlsUyxNQUFqQyxJQUEyQyxFQUFFLFdBQVdzUCxpQkFBYixDQUEzQyxHQUEyRVAsS0FBSyxDQUFDN2lDLElBQU4sQ0FBV2dtQyxDQUFYLENBQTNFLEdBQTJGRSxFQUE1RixDQUFqQjtBQUNBLFdBQU8sTUFBTUQsQ0FBTixHQUFVLEdBQVYsR0FBZ0J2Z0MsQ0FBdkI7QUFDRCxHQU5PLEVBTUw7QUFBRXlDLElBQUFBLE1BQU0sRUFBRTtBQUFWLEdBTkssQ0FBUjtBQU9EOztBQ3pCRCxJQUFJbW9CLFlBQVUsR0FBRzl3QixZQUFqQjs7QUFDQSxJQUFJK3dCLGdCQUFnQixHQUFHL3dCLGtCQUF2QjtBQUdBOzs7SUFDQVQsTUFBQSxHQUFpQnV4QixZQUFVLENBQUMsS0FBRCxFQUFRLFVBQVVFLElBQVYsRUFBZ0I7QUFDakQsU0FBTyxTQUFTMlYsR0FBVCxHQUFlO0FBQUUsV0FBTzNWLElBQUksQ0FBQyxJQUFELEVBQU9udkIsU0FBUyxDQUFDQyxNQUFWLEdBQW1CRCxTQUFTLENBQUMsQ0FBRCxDQUE1QixHQUFrQ1QsU0FBekMsQ0FBWDtBQUFpRSxHQUF6RjtBQUNELENBRjBCLEVBRXhCMnZCLGdCQUZ3QixDQUEzQjs7QUNMQSxJQUFJcmYsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJdUIsd0JBQXNCLEdBQUd2Qix3QkFBN0I7O0FBQ0EsSUFBSW9KLHFCQUFtQixHQUFHcEoscUJBQTFCOztBQUNBLElBQUlnQixVQUFRLEdBQUdoQixVQUFmOztBQUNBLElBQUlELE9BQUssR0FBR0MsUUFBWjs7QUFFQSxJQUFJK0wsUUFBTSxHQUFHaE0sT0FBSyxDQUFDLFlBQVk7QUFDN0IsU0FBTyxLQUFLMFgsRUFBTCxDQUFRLENBQVIsTUFBZSxRQUF0QjtBQUNELENBRmlCLENBQWxCO0FBS0E7O0FBQ0EvRixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9Cb0ssRUFBQUEsS0FBSyxFQUFFLElBQTNCO0FBQWlDaEosRUFBQUEsTUFBTSxFQUFFSDtBQUF6QyxDQUFELEVBQW9EO0FBQ25EMEwsRUFBQUEsRUFBRSxFQUFFLFNBQVNBLEVBQVQsQ0FBWWxPLEtBQVosRUFBbUI7QUFDckIsUUFBSTZmLENBQUMsR0FBR3BvQixVQUFRLENBQUNPLHdCQUFzQixDQUFDLElBQUQsQ0FBdkIsQ0FBaEI7QUFDQSxRQUFJbVcsR0FBRyxHQUFHMFIsQ0FBQyxDQUFDdG5CLE1BQVo7QUFDQSxRQUFJNlYsYUFBYSxHQUFHdk8scUJBQW1CLENBQUNHLEtBQUQsQ0FBdkM7QUFDQSxRQUFJcU8sQ0FBQyxHQUFHRCxhQUFhLElBQUksQ0FBakIsR0FBcUJBLGFBQXJCLEdBQXFDRCxHQUFHLEdBQUdDLGFBQW5EO0FBQ0EsV0FBUUMsQ0FBQyxHQUFHLENBQUosSUFBU0EsQ0FBQyxJQUFJRixHQUFmLEdBQXNCdFcsU0FBdEIsR0FBa0Nnb0IsQ0FBQyxDQUFDOUgsTUFBRixDQUFTMUosQ0FBVCxDQUF6QztBQUNEO0FBUGtELENBQXBELENBQUQ7O0FDYkEsSUFBSXhPLHFCQUFtQixHQUFHcEoscUJBQTFCOztBQUNBLElBQUlnQixVQUFRLEdBQUdoQixVQUFmOztBQUNBLElBQUl1Qix3QkFBc0IsR0FBR3ZCLHdCQUE3Qjs7QUFFQSxJQUFJNkosY0FBWSxHQUFHLFVBQVUrOEIsaUJBQVYsRUFBNkI7QUFDOUMsU0FBTyxVQUFVNzhCLEtBQVYsRUFBaUI4OEIsR0FBakIsRUFBc0I7QUFDM0IsUUFBSXpkLENBQUMsR0FBR3BvQixVQUFRLENBQUNPLHdCQUFzQixDQUFDd0ksS0FBRCxDQUF2QixDQUFoQjtBQUNBLFFBQUkrOEIsUUFBUSxHQUFHMTlCLHFCQUFtQixDQUFDeTlCLEdBQUQsQ0FBbEM7QUFDQSxRQUFJeFcsSUFBSSxHQUFHakgsQ0FBQyxDQUFDdG5CLE1BQWI7QUFDQSxRQUFJMm5CLEtBQUosRUFBV3NkLE1BQVg7QUFDQSxRQUFJRCxRQUFRLEdBQUcsQ0FBWCxJQUFnQkEsUUFBUSxJQUFJelcsSUFBaEMsRUFBc0MsT0FBT3VXLGlCQUFpQixHQUFHLEVBQUgsR0FBUXhsQyxTQUFoQztBQUN0Q3FvQixJQUFBQSxLQUFLLEdBQUdMLENBQUMsQ0FBQ3NELFVBQUYsQ0FBYW9hLFFBQWIsQ0FBUjtBQUNBLFdBQU9yZCxLQUFLLEdBQUcsTUFBUixJQUFrQkEsS0FBSyxHQUFHLE1BQTFCLElBQW9DcWQsUUFBUSxHQUFHLENBQVgsS0FBaUJ6VyxJQUFyRCxJQUNGLENBQUMwVyxNQUFNLEdBQUczZCxDQUFDLENBQUNzRCxVQUFGLENBQWFvYSxRQUFRLEdBQUcsQ0FBeEIsQ0FBVixJQUF3QyxNQUR0QyxJQUNnREMsTUFBTSxHQUFHLE1BRHpELEdBRURILGlCQUFpQixHQUFHeGQsQ0FBQyxDQUFDOUgsTUFBRixDQUFTd2xCLFFBQVQsQ0FBSCxHQUF3QnJkLEtBRnhDLEdBR0RtZCxpQkFBaUIsR0FBR3hkLENBQUMsQ0FBQ25vQixLQUFGLENBQVE2bEMsUUFBUixFQUFrQkEsUUFBUSxHQUFHLENBQTdCLENBQUgsR0FBcUMsQ0FBQ3JkLEtBQUssR0FBRyxNQUFSLElBQWtCLEVBQW5CLEtBQTBCc2QsTUFBTSxHQUFHLE1BQW5DLElBQTZDLE9BSHpHO0FBSUQsR0FYRDtBQVlELENBYkQ7O0lBZUF4bkMsZUFBQSxHQUFpQjtBQUNmO0FBQ0E7QUFDQXluQyxFQUFBQSxNQUFNLEVBQUVuOUIsY0FBWSxDQUFDLEtBQUQsQ0FITDtBQUlmO0FBQ0E7QUFDQXlYLEVBQUFBLE1BQU0sRUFBRXpYLGNBQVksQ0FBQyxJQUFEO0FBTkwsQ0FBakI7O0FDbEJBLElBQUk2SCxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlnbkMsUUFBTSxHQUFHaG5DLGVBQUEsQ0FBeUNnbkMsTUFBdEQ7QUFHQTs7O0FBQ0F0MUIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQm9LLEVBQUFBLEtBQUssRUFBRTtBQUEzQixDQUFELEVBQW9DO0FBQ25DK3hCLEVBQUFBLFdBQVcsRUFBRSxTQUFTQSxXQUFULENBQXFCSixHQUFyQixFQUEwQjtBQUNyQyxXQUFPRyxRQUFNLENBQUMsSUFBRCxFQUFPSCxHQUFQLENBQWI7QUFDRDtBQUhrQyxDQUFwQyxDQUFEOztBQ05BLElBQUloRSxVQUFRLEdBQUc3aUMsUUFBZjs7SUFFQVQsVUFBQSxHQUFpQixVQUFVRixFQUFWLEVBQWM7QUFDN0IsTUFBSXdqQyxVQUFRLENBQUN4akMsRUFBRCxDQUFaLEVBQWtCO0FBQ2hCLFVBQU1nQyxTQUFTLENBQUMsK0NBQUQsQ0FBZjtBQUNEOztBQUFDLFNBQU9oQyxFQUFQO0FBQ0gsQ0FKRDs7QUNGQSxJQUFJNEYsaUJBQWUsR0FBR2pGLGlCQUF0Qjs7QUFFQSxJQUFJNGlDLEtBQUssR0FBRzM5QixpQkFBZSxDQUFDLE9BQUQsQ0FBM0I7O0lBRUExRixvQkFBQSxHQUFpQixVQUFVdVksV0FBVixFQUF1QjtBQUN0QyxNQUFJbkQsTUFBTSxHQUFHLEdBQWI7O0FBQ0EsTUFBSTtBQUNGLFVBQU1tRCxXQUFOLEVBQW1CbkQsTUFBbkI7QUFDRCxHQUZELENBRUUsT0FBT3V5QixNQUFQLEVBQWU7QUFDZixRQUFJO0FBQ0Z2eUIsTUFBQUEsTUFBTSxDQUFDaXVCLEtBQUQsQ0FBTixHQUFnQixLQUFoQjtBQUNBLGFBQU8sTUFBTTlxQixXQUFOLEVBQW1CbkQsTUFBbkIsQ0FBUDtBQUNELEtBSEQsQ0FHRSxPQUFPd3lCLE1BQVAsRUFBZTtBQUFFO0FBQWE7QUFDakM7O0FBQUMsU0FBTyxLQUFQO0FBQ0gsQ0FWRDs7QUNIQSxJQUFJejFCLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSU0sMEJBQXdCLEdBQUdOLDhCQUFBLENBQTJEa0csQ0FBMUY7O0FBQ0EsSUFBSXVELFVBQVEsR0FBR3pKLFVBQWY7O0FBQ0EsSUFBSWdCLFVBQVEsR0FBR2hCLFVBQWY7O0FBQ0EsSUFBSW9uQyxZQUFVLEdBQUdwbkMsVUFBakI7O0FBQ0EsSUFBSXVCLHdCQUFzQixHQUFHdkIsd0JBQTdCOztBQUNBLElBQUlxbkMsc0JBQW9CLEdBQUdybkMsb0JBQTNCOzs7QUFJQSxJQUFJc25DLFNBQVMsR0FBRyxHQUFHQyxRQUFuQjtBQUNBLElBQUlqK0IsS0FBRyxHQUFHaEssSUFBSSxDQUFDZ0ssR0FBZjtBQUVBLElBQUlrK0IseUJBQXVCLEdBQUdILHNCQUFvQixDQUFDLFVBQUQsQ0FBbEQ7O0FBRUEsSUFBSUksa0JBQWdCLEdBQWUsQ0FBQ0QseUJBQWIsSUFBd0MsQ0FBQyxDQUFDLFlBQVk7QUFDM0UsTUFBSTltQyxVQUFVLEdBQUdKLDBCQUF3QixDQUFDcUMsTUFBTSxDQUFDcUYsU0FBUixFQUFtQixVQUFuQixDQUF6QztBQUNBLFNBQU90SCxVQUFVLElBQUksQ0FBQ0EsVUFBVSxDQUFDSyxRQUFqQztBQUNELENBSGdFLEVBQWpFO0FBTUE7O0FBQ0EyUSxJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9Cb0ssRUFBQUEsS0FBSyxFQUFFLElBQTNCO0FBQWlDaEosRUFBQUEsTUFBTSxFQUFFLENBQUN1N0Isa0JBQUQsSUFBcUIsQ0FBQ0Q7QUFBL0QsQ0FBRCxFQUEyRjtBQUMxRkQsRUFBQUEsUUFBUSxFQUFFLFNBQVNBLFFBQVQsQ0FBa0JHO0FBQWE7QUFBL0IsSUFBOEQ7QUFDdEUsUUFBSXI0QixJQUFJLEdBQUdyTyxVQUFRLENBQUNPLHdCQUFzQixDQUFDLElBQUQsQ0FBdkIsQ0FBbkI7QUFDQTZsQyxJQUFBQSxZQUFVLENBQUNNLFlBQUQsQ0FBVjtBQUNBLFFBQUlDLFdBQVcsR0FBRzlsQyxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJELFNBQVMsQ0FBQyxDQUFELENBQWhDLEdBQXNDVCxTQUF4RDtBQUNBLFFBQUlzVyxHQUFHLEdBQUdySSxJQUFJLENBQUN2TixNQUFmO0FBQ0EsUUFBSXFYLEdBQUcsR0FBR3d1QixXQUFXLEtBQUt2bUMsU0FBaEIsR0FBNEJzVyxHQUE1QixHQUFrQ3BPLEtBQUcsQ0FBQ0csVUFBUSxDQUFDaytCLFdBQUQsQ0FBVCxFQUF3Qmp3QixHQUF4QixDQUEvQztBQUNBLFFBQUlrd0IsTUFBTSxHQUFHNW1DLFVBQVEsQ0FBQzBtQyxZQUFELENBQXJCO0FBQ0EsV0FBT0osU0FBUyxHQUNaQSxTQUFTLENBQUM5bUMsSUFBVixDQUFlNk8sSUFBZixFQUFxQnU0QixNQUFyQixFQUE2Qnp1QixHQUE3QixDQURZLEdBRVo5SixJQUFJLENBQUNwTyxLQUFMLENBQVdrWSxHQUFHLEdBQUd5dUIsTUFBTSxDQUFDOWxDLE1BQXhCLEVBQWdDcVgsR0FBaEMsTUFBeUN5dUIsTUFGN0M7QUFHRDtBQVh5RixDQUEzRixDQUFEOztBQ3ZCQSxJQUFJbDJCLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSTJKLGlCQUFlLEdBQUczSixpQkFBdEI7O0FBRUEsSUFBSW9oQixjQUFZLEdBQUd6ZSxNQUFNLENBQUN5ZSxZQUExQjs7QUFFQSxJQUFJeW1CLGNBQWMsR0FBR2xsQyxNQUFNLENBQUNtbEMsYUFBNUI7O0FBR0EsSUFBSUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDRixjQUFGLElBQW9CQSxjQUFjLENBQUMvbEMsTUFBZixJQUF5QixDQUFwRTtBQUdBOztBQUNBNFAsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQmdCLEVBQUFBLElBQUksRUFBRSxJQUExQjtBQUFnQ0ksRUFBQUEsTUFBTSxFQUFFNjdCO0FBQXhDLENBQUQsRUFBNkQ7QUFDNUQ7QUFDQUQsRUFBQUEsYUFBYSxFQUFFLFNBQVNBLGFBQVQsQ0FBdUJ0bUIsQ0FBdkIsRUFBMEI7QUFDdkMsUUFBSXdtQixRQUFRLEdBQUcsRUFBZjtBQUNBLFFBQUlsbUMsTUFBTSxHQUFHRCxTQUFTLENBQUNDLE1BQXZCO0FBQ0EsUUFBSXVJLENBQUMsR0FBRyxDQUFSO0FBQ0EsUUFBSTZXLElBQUo7O0FBQ0EsV0FBT3BmLE1BQU0sR0FBR3VJLENBQWhCLEVBQW1CO0FBQ2pCNlcsTUFBQUEsSUFBSSxHQUFHLENBQUNyZixTQUFTLENBQUN3SSxDQUFDLEVBQUYsQ0FBakI7QUFDQSxVQUFJVixpQkFBZSxDQUFDdVgsSUFBRCxFQUFPLFFBQVAsQ0FBZixLQUFvQ0EsSUFBeEMsRUFBOEMsTUFBTXFCLFVBQVUsQ0FBQ3JCLElBQUksR0FBRyw0QkFBUixDQUFoQjtBQUM5QzhtQixNQUFBQSxRQUFRLENBQUNqa0MsSUFBVCxDQUFjbWQsSUFBSSxHQUFHLE9BQVAsR0FDVkUsY0FBWSxDQUFDRixJQUFELENBREYsR0FFVkUsY0FBWSxDQUFDLENBQUMsQ0FBQ0YsSUFBSSxJQUFJLE9BQVQsS0FBcUIsRUFBdEIsSUFBNEIsTUFBN0IsRUFBcUNBLElBQUksR0FBRyxLQUFQLEdBQWUsTUFBcEQsQ0FGaEI7QUFJRDs7QUFBQyxXQUFPOG1CLFFBQVEsQ0FBQ2gvQixJQUFULENBQWMsRUFBZCxDQUFQO0FBQ0g7QUFmMkQsQ0FBN0QsQ0FBRDs7QUNYQSxJQUFJMEksSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJb25DLFlBQVUsR0FBR3BuQyxVQUFqQjs7QUFDQSxJQUFJdUIsd0JBQXNCLEdBQUd2Qix3QkFBN0I7O0FBQ0EsSUFBSWdCLFVBQVEsR0FBR2hCLFVBQWY7O0FBQ0EsSUFBSXFuQyxzQkFBb0IsR0FBR3JuQyxvQkFBM0I7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9Cb0ssRUFBQUEsS0FBSyxFQUFFLElBQTNCO0FBQWlDaEosRUFBQUEsTUFBTSxFQUFFLENBQUNtN0Isc0JBQW9CLENBQUMsVUFBRDtBQUE5RCxDQUFELEVBQStFO0FBQzlFbjlCLEVBQUFBLFFBQVEsRUFBRSxTQUFTQSxRQUFULENBQWtCdzlCO0FBQWE7QUFBL0IsSUFBcUQ7QUFDN0QsV0FBTyxDQUFDLENBQUMsQ0FBQzFtQyxVQUFRLENBQUNPLHdCQUFzQixDQUFDLElBQUQsQ0FBdkIsQ0FBUixDQUNQNEksT0FETyxDQUNDbkosVUFBUSxDQUFDb21DLFlBQVUsQ0FBQ00sWUFBRCxDQUFYLENBRFQsRUFDcUM3bEMsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FEM0UsQ0FBVjtBQUVEO0FBSjZFLENBQS9FLENBQUQ7O0FDUkEsSUFBSWtnQixRQUFNLEdBQUd0aEIsZUFBQSxDQUF5Q3NoQixNQUF0RDs7QUFDQSxJQUFJdGdCLFVBQVEsR0FBR2hCLFVBQWY7O0FBQ0EsSUFBSXFJLHFCQUFtQixHQUFHckksYUFBMUI7O0FBQ0EsSUFBSThkLGNBQWMsR0FBRzlkLGdCQUFyQjs7QUFFQSxJQUFJaW9DLGlCQUFlLEdBQUcsaUJBQXRCO0FBQ0EsSUFBSTkxQixrQkFBZ0IsR0FBRzlKLHFCQUFtQixDQUFDbkIsR0FBM0M7QUFDQSxJQUFJcUIsa0JBQWdCLEdBQUdGLHFCQUFtQixDQUFDaEIsU0FBcEIsQ0FBOEI0Z0MsaUJBQTlCLENBQXZCO0FBR0E7O0FBQ0FucUIsY0FBYyxDQUFDbmIsTUFBRCxFQUFTLFFBQVQsRUFBbUIsVUFBVXFiLFFBQVYsRUFBb0I7QUFDbkQ3TCxFQUFBQSxrQkFBZ0IsQ0FBQyxJQUFELEVBQU87QUFDckIzSyxJQUFBQSxJQUFJLEVBQUV5Z0MsaUJBRGU7QUFFckIxOEIsSUFBQUEsTUFBTSxFQUFFdkssVUFBUSxDQUFDZ2QsUUFBRCxDQUZLO0FBR3JCelUsSUFBQUEsS0FBSyxFQUFFO0FBSGMsR0FBUCxDQUFoQixDQURtRDtBQU9yRDtBQUNDLENBUmEsRUFRWCxTQUFTa04sSUFBVCxHQUFnQjtBQUNqQixNQUFJbFAsS0FBSyxHQUFHZ0Isa0JBQWdCLENBQUMsSUFBRCxDQUE1QjtBQUNBLE1BQUlnRCxNQUFNLEdBQUdoRSxLQUFLLENBQUNnRSxNQUFuQjtBQUNBLE1BQUloQyxLQUFLLEdBQUdoQyxLQUFLLENBQUNnQyxLQUFsQjtBQUNBLE1BQUkyK0IsS0FBSjtBQUNBLE1BQUkzK0IsS0FBSyxJQUFJZ0MsTUFBTSxDQUFDekosTUFBcEIsRUFBNEIsT0FBTztBQUFFakIsSUFBQUEsS0FBSyxFQUFFTyxTQUFUO0FBQW9CMFYsSUFBQUEsSUFBSSxFQUFFO0FBQTFCLEdBQVA7QUFDNUJveEIsRUFBQUEsS0FBSyxHQUFHNW1CLFFBQU0sQ0FBQy9WLE1BQUQsRUFBU2hDLEtBQVQsQ0FBZDtBQUNBaEMsRUFBQUEsS0FBSyxDQUFDZ0MsS0FBTixJQUFlMitCLEtBQUssQ0FBQ3BtQyxNQUFyQjtBQUNBLFNBQU87QUFBRWpCLElBQUFBLEtBQUssRUFBRXFuQyxLQUFUO0FBQWdCcHhCLElBQUFBLElBQUksRUFBRTtBQUF0QixHQUFQO0FBQ0QsQ0FqQmEsQ0FBZDs7QUNUQSxJQUFJckwsVUFBUSxHQUFHekwsa0JBQWY7O0FBQ0EsSUFBSW1vQyxZQUFVLEdBQUdub0MsWUFBakI7O0FBQ0EsSUFBSUQsT0FBSyxHQUFHQyxRQUFaOztBQUNBLElBQUlpRixpQkFBZSxHQUFHakYsaUJBQXRCOztBQUNBLElBQUk4Ryw2QkFBMkIsR0FBRzlHLDZCQUFsQzs7QUFFQSxJQUFJaVEsT0FBTyxHQUFHaEwsaUJBQWUsQ0FBQyxTQUFELENBQTdCO0FBQ0EsSUFBSTIrQixpQkFBZSxHQUFHdFAsTUFBTSxDQUFDdHNCLFNBQTdCOztJQUVBekksNkJBQUEsR0FBaUIsVUFBVXNlLEdBQVYsRUFBZWhlLElBQWYsRUFBcUJrTSxNQUFyQixFQUE2QnE4QixJQUE3QixFQUFtQztBQUNsRCxNQUFJbDJCLE1BQU0sR0FBR2pOLGlCQUFlLENBQUM0WSxHQUFELENBQTVCO0FBRUEsTUFBSXdxQixtQkFBbUIsR0FBRyxDQUFDdG9DLE9BQUssQ0FBQyxZQUFZO0FBQzNDO0FBQ0EsUUFBSWtHLENBQUMsR0FBRyxFQUFSOztBQUNBQSxJQUFBQSxDQUFDLENBQUNpTSxNQUFELENBQUQsR0FBWSxZQUFZO0FBQUUsYUFBTyxDQUFQO0FBQVcsS0FBckM7O0FBQ0EsV0FBTyxHQUFHMkwsR0FBSCxFQUFRNVgsQ0FBUixLQUFjLENBQXJCO0FBQ0QsR0FMK0IsQ0FBaEM7QUFPQSxNQUFJaWdDLGlCQUFpQixHQUFHbUMsbUJBQW1CLElBQUksQ0FBQ3RvQyxPQUFLLENBQUMsWUFBWTtBQUNoRTtBQUNBLFFBQUlvbUMsVUFBVSxHQUFHLEtBQWpCO0FBQ0EsUUFBSTlZLEVBQUUsR0FBRyxHQUFUOztBQUVBLFFBQUl4UCxHQUFHLEtBQUssT0FBWixFQUFxQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQXdQLE1BQUFBLEVBQUUsR0FBRyxFQUFMLENBSm1CO0FBTW5COztBQUNBQSxNQUFBQSxFQUFFLENBQUNqZCxXQUFILEdBQWlCLEVBQWpCOztBQUNBaWQsTUFBQUEsRUFBRSxDQUFDamQsV0FBSCxDQUFlSCxPQUFmLElBQTBCLFlBQVk7QUFBRSxlQUFPb2QsRUFBUDtBQUFZLE9BQXBEOztBQUNBQSxNQUFBQSxFQUFFLENBQUNnVyxLQUFILEdBQVcsRUFBWDtBQUNBaFcsTUFBQUEsRUFBRSxDQUFDbmIsTUFBRCxDQUFGLEdBQWEsSUFBSUEsTUFBSixDQUFiO0FBQ0Q7O0FBRURtYixJQUFBQSxFQUFFLENBQUN4dEIsSUFBSCxHQUFVLFlBQVk7QUFBRXNtQyxNQUFBQSxVQUFVLEdBQUcsSUFBYjtBQUFtQixhQUFPLElBQVA7QUFBYyxLQUF6RDs7QUFFQTlZLElBQUFBLEVBQUUsQ0FBQ25iLE1BQUQsQ0FBRixDQUFXLEVBQVg7QUFDQSxXQUFPLENBQUNpMEIsVUFBUjtBQUNELEdBdEJvRCxDQUFyRDs7QUF3QkEsTUFDRSxDQUFDa0MsbUJBQUQsSUFDQSxDQUFDbkMsaUJBREQsSUFFQW42QixNQUhGLEVBSUU7QUFDQSxRQUFJdThCLGtCQUFrQixHQUFHLElBQUlwMkIsTUFBSixDQUF6QjtBQUNBLFFBQUkwTCxPQUFPLEdBQUcvZCxJQUFJLENBQUNxUyxNQUFELEVBQVMsR0FBRzJMLEdBQUgsQ0FBVCxFQUFrQixVQUFVMFIsWUFBVixFQUF3QjVhLE1BQXhCLEVBQWdDOFYsR0FBaEMsRUFBcUM4ZCxJQUFyQyxFQUEyQ0MsaUJBQTNDLEVBQThEO0FBQ2hHLFVBQUlDLEtBQUssR0FBRzl6QixNQUFNLENBQUM5VSxJQUFuQjs7QUFDQSxVQUFJNG9DLEtBQUssS0FBS04sWUFBVixJQUF3Qk0sS0FBSyxLQUFLN0UsaUJBQWUsQ0FBQy9qQyxJQUF0RCxFQUE0RDtBQUMxRCxZQUFJd29DLG1CQUFtQixJQUFJLENBQUNHLGlCQUE1QixFQUErQztBQUM3QztBQUNBO0FBQ0E7QUFDQSxpQkFBTztBQUFFMXhCLFlBQUFBLElBQUksRUFBRSxJQUFSO0FBQWNqVyxZQUFBQSxLQUFLLEVBQUV5bkMsa0JBQWtCLENBQUM5bkMsSUFBbkIsQ0FBd0JtVSxNQUF4QixFQUFnQzhWLEdBQWhDLEVBQXFDOGQsSUFBckM7QUFBckIsV0FBUDtBQUNEOztBQUNELGVBQU87QUFBRXp4QixVQUFBQSxJQUFJLEVBQUUsSUFBUjtBQUFjalcsVUFBQUEsS0FBSyxFQUFFMHVCLFlBQVksQ0FBQy91QixJQUFiLENBQWtCaXFCLEdBQWxCLEVBQXVCOVYsTUFBdkIsRUFBK0I0ekIsSUFBL0I7QUFBckIsU0FBUDtBQUNEOztBQUNELGFBQU87QUFBRXp4QixRQUFBQSxJQUFJLEVBQUU7QUFBUixPQUFQO0FBQ0QsS0FaaUIsQ0FBbEI7QUFjQXJMLElBQUFBLFVBQVEsQ0FBQzlJLE1BQU0sQ0FBQ3FGLFNBQVIsRUFBbUI2VixHQUFuQixFQUF3QkQsT0FBTyxDQUFDLENBQUQsQ0FBL0IsQ0FBUjtBQUNBblMsSUFBQUEsVUFBUSxDQUFDbTRCLGlCQUFELEVBQWtCMXhCLE1BQWxCLEVBQTBCMEwsT0FBTyxDQUFDLENBQUQsQ0FBakMsQ0FBUjtBQUNEOztBQUVELE1BQUl3cUIsSUFBSixFQUFVdGhDLDZCQUEyQixDQUFDODhCLGlCQUFlLENBQUMxeEIsTUFBRCxDQUFoQixFQUEwQixNQUExQixFQUFrQyxJQUFsQyxDQUEzQjtBQUNYLENBM0REOztBQ1hBLElBQUlvUCxRQUFNLEdBQUd0aEIsZUFBQSxDQUF5Q3NoQixNQUF0RDtBQUdBOzs7SUFDQS9oQixvQkFBQSxHQUFpQixVQUFVNnBCLENBQVYsRUFBYTdmLEtBQWIsRUFBb0IwNUIsT0FBcEIsRUFBNkI7QUFDNUMsU0FBTzE1QixLQUFLLElBQUkwNUIsT0FBTyxHQUFHM2hCLFFBQU0sQ0FBQzhILENBQUQsRUFBSTdmLEtBQUosQ0FBTixDQUFpQnpILE1BQXBCLEdBQTZCLENBQXhDLENBQVo7QUFDRCxDQUZEOztBQ0xBLElBQUlxRSxXQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUl5QixZQUFVLEdBQUd6QixZQUFqQjs7QUFDQSxJQUFJa0IsU0FBTyxHQUFHbEIsWUFBZDs7QUFDQSxJQUFJbW9DLFlBQVUsR0FBR25vQyxZQUFqQjtBQUdBOzs7SUFDQVQsa0JBQUEsR0FBaUIsVUFBVWluQyxDQUFWLEVBQWFwZCxDQUFiLEVBQWdCO0FBQy9CLE1BQUl2cEIsSUFBSSxHQUFHMm1DLENBQUMsQ0FBQzNtQyxJQUFiOztBQUNBLE1BQUk0QixZQUFVLENBQUM1QixJQUFELENBQWQsRUFBc0I7QUFDcEIsUUFBSXVGLE1BQU0sR0FBR3ZGLElBQUksQ0FBQ1csSUFBTCxDQUFVZ21DLENBQVYsRUFBYXBkLENBQWIsQ0FBYjtBQUNBLFFBQUloa0IsTUFBTSxLQUFLLElBQWYsRUFBcUJlLFdBQVEsQ0FBQ2YsTUFBRCxDQUFSO0FBQ3JCLFdBQU9BLE1BQVA7QUFDRDs7QUFDRCxNQUFJbEUsU0FBTyxDQUFDc2xDLENBQUQsQ0FBUCxLQUFlLFFBQW5CLEVBQTZCLE9BQU8yQixZQUFVLENBQUMzbkMsSUFBWCxDQUFnQmdtQyxDQUFoQixFQUFtQnBkLENBQW5CLENBQVA7QUFDN0IsUUFBTS9uQixTQUFTLENBQUMsNkNBQUQsQ0FBZjtBQUNELENBVEQ7O0FDTkEsSUFBSXFuQywrQkFBNkIsR0FBRzFvQyw2QkFBcEM7O0FBQ0EsSUFBSW1HLFdBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSXlKLFVBQVEsR0FBR3pKLFVBQWY7O0FBQ0EsSUFBSWdCLFVBQVEsR0FBR2hCLFVBQWY7O0FBQ0EsSUFBSXVCLHdCQUFzQixHQUFHdkIsd0JBQTdCOztBQUNBLElBQUkrRSxXQUFTLEdBQUcvRSxXQUFoQjs7QUFDQSxJQUFJMm9DLG9CQUFrQixHQUFHM29DLG9CQUF6Qjs7QUFDQSxJQUFJNG9DLFlBQVUsR0FBRzVvQyxrQkFBakI7OztBQUdBMG9DLCtCQUE2QixDQUFDLE9BQUQsRUFBVSxVQUFVOUYsS0FBVixFQUFpQmlHLFdBQWpCLEVBQThCQyxlQUE5QixFQUErQztBQUNwRixTQUFPO0FBRUw7QUFDQSxXQUFTeG1DLEtBQVQsQ0FBZXFTLE1BQWYsRUFBdUI7QUFDckIsUUFBSTFPLENBQUMsR0FBRzFFLHdCQUFzQixDQUFDLElBQUQsQ0FBOUI7QUFDQSxRQUFJd25DLE9BQU8sR0FBR3AwQixNQUFNLElBQUl2VCxTQUFWLEdBQXNCQSxTQUF0QixHQUFrQzJELFdBQVMsQ0FBQzRQLE1BQUQsRUFBU2l1QixLQUFULENBQXpEO0FBQ0EsV0FBT21HLE9BQU8sR0FBR0EsT0FBTyxDQUFDdm9DLElBQVIsQ0FBYW1VLE1BQWIsRUFBcUIxTyxDQUFyQixDQUFILEdBQTZCLElBQUlxdUIsTUFBSixDQUFXM2YsTUFBWCxFQUFtQml1QixLQUFuQixFQUEwQjVoQyxVQUFRLENBQUNpRixDQUFELENBQWxDLENBQTNDO0FBQ0QsR0FQSTtBQVNMO0FBQ0EsWUFBVXNGLE1BQVYsRUFBa0I7QUFDaEIsUUFBSXk5QixFQUFFLEdBQUc3aUMsV0FBUSxDQUFDLElBQUQsQ0FBakI7QUFDQSxRQUFJaWpCLENBQUMsR0FBR3BvQixVQUFRLENBQUN1SyxNQUFELENBQWhCO0FBQ0EsUUFBSTA5QixHQUFHLEdBQUdILGVBQWUsQ0FBQ0QsV0FBRCxFQUFjRyxFQUFkLEVBQWtCNWYsQ0FBbEIsQ0FBekI7QUFFQSxRQUFJNmYsR0FBRyxDQUFDbnlCLElBQVIsRUFBYyxPQUFPbXlCLEdBQUcsQ0FBQ3BvQyxLQUFYO0FBRWQsUUFBSSxDQUFDbW9DLEVBQUUsQ0FBQ3JwQyxNQUFSLEVBQWdCLE9BQU9pcEMsWUFBVSxDQUFDSSxFQUFELEVBQUs1ZixDQUFMLENBQWpCO0FBRWhCLFFBQUk4ZixXQUFXLEdBQUdGLEVBQUUsQ0FBQy9GLE9BQXJCO0FBQ0ErRixJQUFBQSxFQUFFLENBQUM1RixTQUFILEdBQWUsQ0FBZjtBQUNBLFFBQUl4cUIsQ0FBQyxHQUFHLEVBQVI7QUFDQSxRQUFJQyxDQUFDLEdBQUcsQ0FBUjtBQUNBLFFBQUl6VCxNQUFKOztBQUNBLFdBQU8sQ0FBQ0EsTUFBTSxHQUFHd2pDLFlBQVUsQ0FBQ0ksRUFBRCxFQUFLNWYsQ0FBTCxDQUFwQixNQUFpQyxJQUF4QyxFQUE4QztBQUM1QyxVQUFJK2YsUUFBUSxHQUFHbm9DLFVBQVEsQ0FBQ29FLE1BQU0sQ0FBQyxDQUFELENBQVAsQ0FBdkI7QUFDQXdULE1BQUFBLENBQUMsQ0FBQ0MsQ0FBRCxDQUFELEdBQU9zd0IsUUFBUDtBQUNBLFVBQUlBLFFBQVEsS0FBSyxFQUFqQixFQUFxQkgsRUFBRSxDQUFDNUYsU0FBSCxHQUFldUYsb0JBQWtCLENBQUN2ZixDQUFELEVBQUkzZixVQUFRLENBQUN1L0IsRUFBRSxDQUFDNUYsU0FBSixDQUFaLEVBQTRCOEYsV0FBNUIsQ0FBakM7QUFDckJyd0IsTUFBQUEsQ0FBQztBQUNGOztBQUNELFdBQU9BLENBQUMsS0FBSyxDQUFOLEdBQVUsSUFBVixHQUFpQkQsQ0FBeEI7QUFDRCxHQS9CSSxDQUFQO0FBaUNELENBbEM0QixDQUE3Qjs7QUNWQTs7QUFDQSxJQUFJbEgsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJMGMsMkJBQXlCLEdBQUcxYywyQkFBaEM7O0FBQ0EsSUFBSXVCLHdCQUFzQixHQUFHdkIsd0JBQTdCOztBQUNBLElBQUl5SixVQUFRLEdBQUd6SixVQUFmOztBQUNBLElBQUlnQixVQUFRLEdBQUdoQixVQUFmOztBQUNBLElBQUltRyxXQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUlrQixTQUFPLEdBQUdsQixZQUFkOztBQUNBLElBQUk2aUMsVUFBUSxHQUFHN2lDLFFBQWY7O0FBQ0EsSUFBSW9wQyxnQkFBYyxHQUFHcHBDLGFBQXJCOztBQUNBLElBQUkrRSxXQUFTLEdBQUcvRSxXQUFoQjs7QUFDQSxJQUFJeUwsVUFBUSxHQUFHekwsa0JBQWY7O0FBQ0EsSUFBSUQsT0FBSyxHQUFHQyxRQUFaOztBQUNBLElBQUlpRixpQkFBZSxHQUFHakYsaUJBQXRCOztBQUNBLElBQUlzcEIsb0JBQWtCLEdBQUd0cEIsb0JBQXpCOztBQUNBLElBQUkyb0Msb0JBQWtCLEdBQUczb0Msb0JBQXpCOztBQUNBLElBQUk0b0MsWUFBVSxHQUFHNW9DLGtCQUFqQjs7QUFDQSxJQUFJcUkscUJBQW1CLEdBQUdySSxhQUExQjs7QUFDQSxJQUFJcXBDLFNBQU8sR0FBR3JwQyxNQUFkOztBQUVBLElBQUlzcEMsU0FBUyxHQUFHcmtDLGlCQUFlLENBQUMsVUFBRCxDQUEvQjtBQUNBLElBQUlza0MsYUFBYSxHQUFHLGVBQXBCO0FBQ0EsSUFBSUMsc0JBQXNCLEdBQUdELGFBQWEsR0FBRyxXQUE3QztBQUNBLElBQUlwM0Isa0JBQWdCLEdBQUc5SixxQkFBbUIsQ0FBQ25CLEdBQTNDO0FBQ0EsSUFBSXFCLGtCQUFnQixHQUFHRixxQkFBbUIsQ0FBQ2hCLFNBQXBCLENBQThCbWlDLHNCQUE5QixDQUF2QjtBQUNBLElBQUk1RixpQkFBZSxHQUFHdFAsTUFBTSxDQUFDdHNCLFNBQTdCO0FBQ0EsSUFBSXloQyxjQUFjLEdBQUcsR0FBR0MsUUFBeEI7QUFFQSxJQUFJQywyQkFBMkIsR0FBRyxDQUFDLENBQUNGLGNBQUYsSUFBb0IsQ0FBQzFwQyxPQUFLLENBQUMsWUFBWTtBQUN2RSxNQUFJMnBDLFFBQUosQ0FBYSxHQUFiO0FBQ0QsQ0FGMkQsQ0FBNUQ7O0FBS0EsSUFBSUUscUJBQXFCLEdBQUdsdEIsMkJBQXlCLENBQUMsU0FBU210QixvQkFBVCxDQUE4QmwxQixNQUE5QixFQUFzQ3BKLE1BQXRDLEVBQThDNUwsTUFBOUMsRUFBc0R1cEMsV0FBdEQsRUFBbUU7QUFDdkgvMkIsRUFBQUEsa0JBQWdCLENBQUMsSUFBRCxFQUFPO0FBQ3JCM0ssSUFBQUEsSUFBSSxFQUFFZ2lDLHNCQURlO0FBRXJCNzBCLElBQUFBLE1BQU0sRUFBRUEsTUFGYTtBQUdyQnBKLElBQUFBLE1BQU0sRUFBRUEsTUFIYTtBQUlyQjVMLElBQUFBLE1BQU0sRUFBRUEsTUFKYTtBQUtyQnNqQyxJQUFBQSxPQUFPLEVBQUVpRyxXQUxZO0FBTXJCcHlCLElBQUFBLElBQUksRUFBRTtBQU5lLEdBQVAsQ0FBaEI7QUFRRCxDQVRvRCxFQVNsRHl5QixhQVRrRCxFQVNuQyxTQUFTOXlCLElBQVQsR0FBZ0I7QUFDaEMsTUFBSWxQLEtBQUssR0FBR2dCLGtCQUFnQixDQUFDLElBQUQsQ0FBNUI7QUFDQSxNQUFJaEIsS0FBSyxDQUFDdVAsSUFBVixFQUFnQixPQUFPO0FBQUVqVyxJQUFBQSxLQUFLLEVBQUVPLFNBQVQ7QUFBb0IwVixJQUFBQSxJQUFJLEVBQUU7QUFBMUIsR0FBUDtBQUNoQixNQUFJMHZCLENBQUMsR0FBR2ovQixLQUFLLENBQUNvTixNQUFkO0FBQ0EsTUFBSXlVLENBQUMsR0FBRzdoQixLQUFLLENBQUNnRSxNQUFkO0FBQ0EsTUFBSWpKLEtBQUssR0FBR3NtQyxZQUFVLENBQUNwQyxDQUFELEVBQUlwZCxDQUFKLENBQXRCO0FBQ0EsTUFBSTltQixLQUFLLEtBQUssSUFBZCxFQUFvQixPQUFPO0FBQUV6QixJQUFBQSxLQUFLLEVBQUVPLFNBQVQ7QUFBb0IwVixJQUFBQSxJQUFJLEVBQUV2UCxLQUFLLENBQUN1UCxJQUFOLEdBQWE7QUFBdkMsR0FBUDs7QUFDcEIsTUFBSXZQLEtBQUssQ0FBQzVILE1BQVYsRUFBa0I7QUFDaEIsUUFBSXFCLFVBQVEsQ0FBQ3NCLEtBQUssQ0FBQyxDQUFELENBQU4sQ0FBUixLQUF1QixFQUEzQixFQUErQmtrQyxDQUFDLENBQUNwRCxTQUFGLEdBQWN1RixvQkFBa0IsQ0FBQ3ZmLENBQUQsRUFBSTNmLFVBQVEsQ0FBQys4QixDQUFDLENBQUNwRCxTQUFILENBQVosRUFBMkI3N0IsS0FBSyxDQUFDMDdCLE9BQWpDLENBQWhDO0FBQy9CLFdBQU87QUFBRXBpQyxNQUFBQSxLQUFLLEVBQUV5QixLQUFUO0FBQWdCd1UsTUFBQUEsSUFBSSxFQUFFO0FBQXRCLEtBQVA7QUFDRDs7QUFDRHZQLEVBQUFBLEtBQUssQ0FBQ3VQLElBQU4sR0FBYSxJQUFiO0FBQ0EsU0FBTztBQUFFalcsSUFBQUEsS0FBSyxFQUFFeUIsS0FBVDtBQUFnQndVLElBQUFBLElBQUksRUFBRTtBQUF0QixHQUFQO0FBQ0QsQ0F0Qm9ELENBQXJEOztBQXdCQSxJQUFJZ3pCLFNBQVMsR0FBRyxVQUFVditCLE1BQVYsRUFBa0I7QUFDaEMsTUFBSWk3QixDQUFDLEdBQUdyZ0MsV0FBUSxDQUFDLElBQUQsQ0FBaEI7QUFDQSxNQUFJaWpCLENBQUMsR0FBR3BvQixVQUFRLENBQUN1SyxNQUFELENBQWhCO0FBQ0EsTUFBSTRFLENBQUosRUFBTzQ1QixVQUFQLEVBQW1CMUcsS0FBbkIsRUFBMEIwRixPQUExQixFQUFtQ3BwQyxNQUFuQyxFQUEyQ3VwQyxXQUEzQztBQUNBLzRCLEVBQUFBLENBQUMsR0FBR21aLG9CQUFrQixDQUFDa2QsQ0FBRCxFQUFJbFMsTUFBSixDQUF0QjtBQUNBeVYsRUFBQUEsVUFBVSxHQUFHdkQsQ0FBQyxDQUFDbkQsS0FBZjs7QUFDQSxNQUFJMEcsVUFBVSxLQUFLM29DLFNBQWYsSUFBNEJvbEMsQ0FBQyxZQUFZbFMsTUFBekMsSUFBbUQsRUFBRSxXQUFXc1AsaUJBQWIsQ0FBdkQsRUFBc0Y7QUFDcEZtRyxJQUFBQSxVQUFVLEdBQUdYLGdCQUFjLENBQUM1b0MsSUFBZixDQUFvQmdtQyxDQUFwQixDQUFiO0FBQ0Q7O0FBQ0RuRCxFQUFBQSxLQUFLLEdBQUcwRyxVQUFVLEtBQUszb0MsU0FBZixHQUEyQixFQUEzQixHQUFnQ0osVUFBUSxDQUFDK29DLFVBQUQsQ0FBaEQ7QUFDQWhCLEVBQUFBLE9BQU8sR0FBRyxJQUFJNTRCLENBQUosQ0FBTUEsQ0FBQyxLQUFLbWtCLE1BQU4sR0FBZWtTLENBQUMsQ0FBQ3o5QixNQUFqQixHQUEwQnk5QixDQUFoQyxFQUFtQ25ELEtBQW5DLENBQVY7QUFDQTFqQyxFQUFBQSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMwakMsS0FBSyxDQUFDbDVCLE9BQU4sQ0FBYyxHQUFkLENBQVo7QUFDQSsrQixFQUFBQSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM3RixLQUFLLENBQUNsNUIsT0FBTixDQUFjLEdBQWQsQ0FBakI7QUFDQTQrQixFQUFBQSxPQUFPLENBQUMzRixTQUFSLEdBQW9CMzVCLFVBQVEsQ0FBQys4QixDQUFDLENBQUNwRCxTQUFILENBQTVCO0FBQ0EsU0FBTyxJQUFJd0cscUJBQUosQ0FBMEJiLE9BQTFCLEVBQW1DM2YsQ0FBbkMsRUFBc0N6cEIsTUFBdEMsRUFBOEN1cEMsV0FBOUMsQ0FBUDtBQUNELENBZkQ7QUFrQkE7OztBQUNBeDNCLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JvSyxFQUFBQSxLQUFLLEVBQUUsSUFBM0I7QUFBaUNoSixFQUFBQSxNQUFNLEVBQUV5OUI7QUFBekMsQ0FBRCxFQUF5RTtBQUN4RUQsRUFBQUEsUUFBUSxFQUFFLFNBQVNBLFFBQVQsQ0FBa0IvMEIsTUFBbEIsRUFBMEI7QUFDbEMsUUFBSTFPLENBQUMsR0FBRzFFLHdCQUFzQixDQUFDLElBQUQsQ0FBOUI7QUFDQSxRQUFJOGhDLEtBQUosRUFBV2phLENBQVgsRUFBYzJmLE9BQWQsRUFBdUJDLEVBQXZCOztBQUNBLFFBQUlyMEIsTUFBTSxJQUFJLElBQWQsRUFBb0I7QUFDbEIsVUFBSWt1QixVQUFRLENBQUNsdUIsTUFBRCxDQUFaLEVBQXNCO0FBQ3BCMHVCLFFBQUFBLEtBQUssR0FBR3JpQyxVQUFRLENBQUNPLHdCQUFzQixDQUFDLFdBQVdxaUMsaUJBQVgsR0FDcENqdkIsTUFBTSxDQUFDMHVCLEtBRDZCLEdBRXBDK0YsZ0JBQWMsQ0FBQzVvQyxJQUFmLENBQW9CbVUsTUFBcEIsQ0FGbUMsQ0FBdkIsQ0FBaEI7QUFJQSxZQUFJLENBQUMsQ0FBQzB1QixLQUFLLENBQUNsNUIsT0FBTixDQUFjLEdBQWQsQ0FBTixFQUEwQixNQUFNOUksU0FBUyxDQUFDLCtDQUFELENBQWY7QUFDM0I7O0FBQ0QsVUFBSXNvQywyQkFBSixFQUFpQyxPQUFPRixjQUFjLENBQUNqNkIsS0FBZixDQUFxQnZKLENBQXJCLEVBQXdCcEUsU0FBeEIsQ0FBUDtBQUNqQ2tuQyxNQUFBQSxPQUFPLEdBQUdoa0MsV0FBUyxDQUFDNFAsTUFBRCxFQUFTMjBCLFNBQVQsQ0FBbkI7QUFDQSxVQUFJUCxPQUFPLEtBQUszbkMsU0FBWixJQUF5QmlvQyxTQUF6QixJQUFvQ25vQyxTQUFPLENBQUN5VCxNQUFELENBQVAsSUFBbUIsUUFBM0QsRUFBcUVvMEIsT0FBTyxHQUFHZSxTQUFWO0FBQ3JFLFVBQUlmLE9BQUosRUFBYSxPQUFPQSxPQUFPLENBQUN2b0MsSUFBUixDQUFhbVUsTUFBYixFQUFxQjFPLENBQXJCLENBQVA7QUFDZCxLQVpELE1BWU8sSUFBSTBqQywyQkFBSixFQUFpQyxPQUFPRixjQUFjLENBQUNqNkIsS0FBZixDQUFxQnZKLENBQXJCLEVBQXdCcEUsU0FBeEIsQ0FBUDs7QUFDeEN1bkIsSUFBQUEsQ0FBQyxHQUFHcG9CLFVBQVEsQ0FBQ2lGLENBQUQsQ0FBWjtBQUNBK2lDLElBQUFBLEVBQUUsR0FBRyxJQUFJMVUsTUFBSixDQUFXM2YsTUFBWCxFQUFtQixHQUFuQixDQUFMO0FBQ0EsV0FBeUNxMEIsRUFBRSxDQUFDTSxTQUFELENBQUYsQ0FBY2xnQixDQUFkLENBQXpDO0FBQ0Q7QUFwQnVFLENBQXpFLENBQUQ7QUF1QldrZ0IsU0FBUyxJQUFJMUYsaUJBQXhCLElBQTJDbjRCLFVBQVEsQ0FBQ200QixpQkFBRCxFQUFrQjBGLFNBQWxCLEVBQTZCUSxTQUE3QixDQUFuRDs7QUNwR0E7QUFDQSxJQUFJOW5DLFdBQVMsR0FBR2hDLGVBQWhCOztJQUVBVCxrQkFBQSxHQUFpQixtRUFBbUVvSCxJQUFuRSxDQUF3RTNFLFdBQXhFLENBQWpCOztBQ0ZBLElBQUkwUCxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlncUMsT0FBTyxHQUFHaHFDLFNBQUEsQ0FBbUNtWixHQUFqRDs7QUFDQSxJQUFJOHdCLFlBQVUsR0FBR2pxQyxrQkFBakI7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9Cb0ssRUFBQUEsS0FBSyxFQUFFLElBQTNCO0FBQWlDaEosRUFBQUEsTUFBTSxFQUFFKzlCO0FBQXpDLENBQUQsRUFBd0Q7QUFDdkRDLEVBQUFBLE1BQU0sRUFBRSxTQUFTQSxNQUFULENBQWdCdmY7QUFBVTtBQUExQixJQUFvRDtBQUMxRCxXQUFPcWYsT0FBTyxDQUFDLElBQUQsRUFBT3JmLFNBQVAsRUFBa0I5b0IsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBeEQsQ0FBZDtBQUNEO0FBSHNELENBQXhELENBQUQ7O0FDTkEsSUFBSXNRLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSW1xQyxTQUFTLEdBQUducUMsU0FBQSxDQUFtQ2daLEtBQW5EOztBQUNBLElBQUlpeEIsVUFBVSxHQUFHanFDLGtCQUFqQjtBQUdBOzs7QUFDQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JvSyxFQUFBQSxLQUFLLEVBQUUsSUFBM0I7QUFBaUNoSixFQUFBQSxNQUFNLEVBQUUrOUI7QUFBekMsQ0FBRCxFQUF3RDtBQUN2RC9lLEVBQUFBLFFBQVEsRUFBRSxTQUFTQSxRQUFULENBQWtCUDtBQUFVO0FBQTVCLElBQXNEO0FBQzlELFdBQU93ZixTQUFTLENBQUMsSUFBRCxFQUFPeGYsU0FBUCxFQUFrQjlvQixTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJELFNBQVMsQ0FBQyxDQUFELENBQWhDLEdBQXNDVCxTQUF4RCxDQUFoQjtBQUNEO0FBSHNELENBQXhELENBQUQ7O0FDUEEsSUFBSXNRLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSTZGLGVBQWUsR0FBRzdGLGlCQUF0Qjs7QUFDQSxJQUFJa0UsVUFBUSxHQUFHbEUsVUFBZjs7QUFDQSxJQUFJZ0IsVUFBUSxHQUFHaEIsVUFBZjs7QUFDQSxJQUFJNEosbUJBQWlCLEdBQUc1SixtQkFBeEI7O0FBRUEsSUFBSXVWLGNBQWMsR0FBR3BKLEtBQUssQ0FBQ25FLFNBQTNCO0FBQ0EsSUFBSWpFLE1BQUksR0FBR3dSLGNBQWMsQ0FBQ3hSLElBQTFCO0FBQ0EsSUFBSWlGLElBQUksR0FBR3VNLGNBQWMsQ0FBQ3ZNLElBQTFCO0FBR0E7O0FBQ0EwSSxJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9CZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQTFCLENBQUQsRUFBbUM7QUFDbEN5Z0IsRUFBQUEsR0FBRyxFQUFFLFNBQVNBLEdBQVQsQ0FBYTZkLFFBQWIsRUFBdUI7QUFDMUIsUUFBSUMsV0FBVyxHQUFHeGtDLGVBQWUsQ0FBQzNCLFVBQVEsQ0FBQ2ttQyxRQUFELENBQVIsQ0FBbUI3ZCxHQUFwQixDQUFqQztBQUNBLFFBQUkrZCxlQUFlLEdBQUcxZ0MsbUJBQWlCLENBQUN5Z0MsV0FBRCxDQUF2QztBQUNBLFFBQUkzd0IsZUFBZSxHQUFHN1gsU0FBUyxDQUFDQyxNQUFoQztBQUNBLFFBQUlrbUMsUUFBUSxHQUFHLEVBQWY7QUFDQSxRQUFJMzlCLENBQUMsR0FBRyxDQUFSOztBQUNBLFdBQU9pZ0MsZUFBZSxHQUFHamdDLENBQXpCLEVBQTRCO0FBQzFCdEcsTUFBQUEsTUFBSSxDQUFDdkQsSUFBTCxDQUFVd25DLFFBQVYsRUFBb0JobkMsVUFBUSxDQUFDcXBDLFdBQVcsQ0FBQ2hnQyxDQUFDLEVBQUYsQ0FBWixDQUE1QjtBQUNBLFVBQUlBLENBQUMsS0FBS2lnQyxlQUFWLEVBQTJCLE9BQU90aEMsSUFBSSxDQUFDeEksSUFBTCxDQUFVd25DLFFBQVYsRUFBb0IsRUFBcEIsQ0FBUDtBQUMzQixVQUFJMzlCLENBQUMsR0FBR3FQLGVBQVIsRUFBeUIzVixNQUFJLENBQUN2RCxJQUFMLENBQVV3bkMsUUFBVixFQUFvQmhuQyxVQUFRLENBQUNhLFNBQVMsQ0FBQ3dJLENBQUQsQ0FBVixDQUE1QjtBQUMxQjtBQUNGO0FBWmlDLENBQW5DLENBQUQ7O0FDWkEsSUFBSXFILElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXdxQixNQUFNLEdBQUd4cUIsWUFBYjtBQUdBOzs7QUFDQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JvSyxFQUFBQSxLQUFLLEVBQUU7QUFBM0IsQ0FBRCxFQUFvQztBQUNuQ3NWLEVBQUFBLE1BQU0sRUFBRUE7QUFEMkIsQ0FBcEMsQ0FBRDs7QUNMQSxJQUFJdG1CLFVBQVEsR0FBR2xFLFVBQWY7O0FBRUEsSUFBSWtKLE9BQUssR0FBRzVKLElBQUksQ0FBQzRKLEtBQWpCO0FBQ0EsSUFBSUosU0FBTyxHQUFHLEdBQUdBLE9BQWpCO0FBQ0EsSUFBSXloQyxvQkFBb0IsR0FBRyw2QkFBM0I7QUFDQSxJQUFJQyw2QkFBNkIsR0FBRyxxQkFBcEM7QUFHQTs7SUFDQWpyQyxpQkFBQSxHQUFpQixVQUFVa3JDLE9BQVYsRUFBbUJoZ0IsR0FBbkIsRUFBd0JxYyxRQUF4QixFQUFrQzRELFFBQWxDLEVBQTRDQyxhQUE1QyxFQUEyRDUvQixXQUEzRCxFQUF3RTtBQUN2RixNQUFJNi9CLE9BQU8sR0FBRzlELFFBQVEsR0FBRzJELE9BQU8sQ0FBQzNvQyxNQUFqQztBQUNBLE1BQUkrb0MsQ0FBQyxHQUFHSCxRQUFRLENBQUM1b0MsTUFBakI7QUFDQSxNQUFJZ3BDLE9BQU8sR0FBR04sNkJBQWQ7O0FBQ0EsTUFBSUcsYUFBYSxLQUFLdnBDLFNBQXRCLEVBQWlDO0FBQy9CdXBDLElBQUFBLGFBQWEsR0FBR3ptQyxVQUFRLENBQUN5bUMsYUFBRCxDQUF4QjtBQUNBRyxJQUFBQSxPQUFPLEdBQUdQLG9CQUFWO0FBQ0Q7O0FBQ0QsU0FBT3poQyxTQUFPLENBQUN0SSxJQUFSLENBQWF1SyxXQUFiLEVBQTBCKy9CLE9BQTFCLEVBQW1DLFVBQVV4b0MsS0FBVixFQUFpQnlvQyxFQUFqQixFQUFxQjtBQUM3RCxRQUFJQyxPQUFKOztBQUNBLFlBQVFELEVBQUUsQ0FBQ3pwQixNQUFILENBQVUsQ0FBVixDQUFSO0FBQ0UsV0FBSyxHQUFMO0FBQVUsZUFBTyxHQUFQOztBQUNWLFdBQUssR0FBTDtBQUFVLGVBQU9tcEIsT0FBUDs7QUFDVixXQUFLLEdBQUw7QUFBVSxlQUFPaGdCLEdBQUcsQ0FBQ3hwQixLQUFKLENBQVUsQ0FBVixFQUFhNmxDLFFBQWIsQ0FBUDs7QUFDVixXQUFLLEdBQUw7QUFBVSxlQUFPcmMsR0FBRyxDQUFDeHBCLEtBQUosQ0FBVTJwQyxPQUFWLENBQVA7O0FBQ1YsV0FBSyxHQUFMO0FBQ0VJLFFBQUFBLE9BQU8sR0FBR0wsYUFBYSxDQUFDSSxFQUFFLENBQUM5cEMsS0FBSCxDQUFTLENBQVQsRUFBWSxDQUFDLENBQWIsQ0FBRCxDQUF2QjtBQUNBOztBQUNGO0FBQVM7QUFDUCxZQUFJNFgsQ0FBQyxHQUFHLENBQUNreUIsRUFBVDtBQUNBLFlBQUlseUIsQ0FBQyxLQUFLLENBQVYsRUFBYSxPQUFPdlcsS0FBUDs7QUFDYixZQUFJdVcsQ0FBQyxHQUFHZ3lCLENBQVIsRUFBVztBQUNULGNBQUkza0MsQ0FBQyxHQUFHZ0QsT0FBSyxDQUFDMlAsQ0FBQyxHQUFHLEVBQUwsQ0FBYjtBQUNBLGNBQUkzUyxDQUFDLEtBQUssQ0FBVixFQUFhLE9BQU81RCxLQUFQO0FBQ2IsY0FBSTRELENBQUMsSUFBSTJrQyxDQUFULEVBQVksT0FBT0gsUUFBUSxDQUFDeGtDLENBQUMsR0FBRyxDQUFMLENBQVIsS0FBb0I5RSxTQUFwQixHQUFnQzJwQyxFQUFFLENBQUN6cEIsTUFBSCxDQUFVLENBQVYsQ0FBaEMsR0FBK0NvcEIsUUFBUSxDQUFDeGtDLENBQUMsR0FBRyxDQUFMLENBQVIsR0FBa0I2a0MsRUFBRSxDQUFDenBCLE1BQUgsQ0FBVSxDQUFWLENBQXhFO0FBQ1osaUJBQU9oZixLQUFQO0FBQ0Q7O0FBQ0Qwb0MsUUFBQUEsT0FBTyxHQUFHTixRQUFRLENBQUM3eEIsQ0FBQyxHQUFHLENBQUwsQ0FBbEI7QUFqQko7O0FBbUJBLFdBQU9teUIsT0FBTyxLQUFLNXBDLFNBQVosR0FBd0IsRUFBeEIsR0FBNkI0cEMsT0FBcEM7QUFDRCxHQXRCTSxDQUFQO0FBdUJELENBL0JEOztBQ1JBLElBQUl0QywrQkFBNkIsR0FBRzFvQyw2QkFBcEM7O0FBQ0EsSUFBSUQsT0FBSyxHQUFHQyxRQUFaOztBQUNBLElBQUltRyxXQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUl5QixZQUFVLEdBQUd6QixZQUFqQjs7QUFDQSxJQUFJb0oscUJBQW1CLEdBQUdwSixxQkFBMUI7O0FBQ0EsSUFBSXlKLFVBQVEsR0FBR3pKLFVBQWY7O0FBQ0EsSUFBSWdCLFVBQVEsR0FBR2hCLFVBQWY7O0FBQ0EsSUFBSXVCLHdCQUFzQixHQUFHdkIsd0JBQTdCOztBQUNBLElBQUkyb0Msb0JBQWtCLEdBQUczb0Msb0JBQXpCOztBQUNBLElBQUkrRSxXQUFTLEdBQUcvRSxXQUFoQjs7QUFDQSxJQUFJaXJDLGlCQUFlLEdBQUdqckMsaUJBQXRCOztBQUNBLElBQUk0b0MsWUFBVSxHQUFHNW9DLGtCQUFqQjs7QUFDQSxJQUFJaUYsaUJBQWUsR0FBR2pGLGlCQUF0Qjs7QUFFQSxJQUFJeXZCLFNBQU8sR0FBR3hxQixpQkFBZSxDQUFDLFNBQUQsQ0FBN0I7QUFDQSxJQUFJb0UsS0FBRyxHQUFHL0osSUFBSSxDQUFDK0osR0FBZjtBQUNBLElBQUlDLEtBQUcsR0FBR2hLLElBQUksQ0FBQ2dLLEdBQWY7O0FBRUEsSUFBSTRoQyxhQUFhLEdBQUcsVUFBVTdyQyxFQUFWLEVBQWM7QUFDaEMsU0FBT0EsRUFBRSxLQUFLK0IsU0FBUCxHQUFtQi9CLEVBQW5CLEdBQXdCc0QsTUFBTSxDQUFDdEQsRUFBRCxDQUFyQztBQUNELENBRkQ7QUFLQTs7O0FBQ0EsSUFBSThyQyxnQkFBZ0IsR0FBSSxZQUFZO0FBQ2xDO0FBQ0EsU0FBTyxJQUFJcmlDLE9BQUosQ0FBWSxHQUFaLEVBQWlCLElBQWpCLE1BQTJCLElBQWxDO0FBQ0QsQ0FIc0IsRUFBdkI7OztBQU1BLElBQUlzaUMsNENBQTRDLEdBQUksWUFBWTtBQUM5RCxNQUFJLElBQUkzYixTQUFKLENBQUosRUFBa0I7QUFDaEIsV0FBTyxJQUFJQSxTQUFKLEVBQWEsR0FBYixFQUFrQixJQUFsQixNQUE0QixFQUFuQztBQUNEOztBQUNELFNBQU8sS0FBUDtBQUNELENBTGtELEVBQW5EOztBQU9BLElBQUk0Yiw2QkFBNkIsR0FBRyxDQUFDdHJDLE9BQUssQ0FBQyxZQUFZO0FBQ3JELE1BQUlzdEIsRUFBRSxHQUFHLEdBQVQ7O0FBQ0FBLEVBQUFBLEVBQUUsQ0FBQ3h0QixJQUFILEdBQVUsWUFBWTtBQUNwQixRQUFJdUYsTUFBTSxHQUFHLEVBQWI7QUFDQUEsSUFBQUEsTUFBTSxDQUFDaytCLE1BQVAsR0FBZ0I7QUFBRTU5QixNQUFBQSxDQUFDLEVBQUU7QUFBTCxLQUFoQjtBQUNBLFdBQU9OLE1BQVA7QUFDRCxHQUpELENBRnFEOzs7QUFRckQsU0FBTyxHQUFHMEQsT0FBSCxDQUFXdWtCLEVBQVgsRUFBZSxNQUFmLE1BQTJCLEdBQWxDO0FBQ0QsQ0FUeUMsQ0FBMUM7O0FBWUFxYiwrQkFBNkIsQ0FBQyxTQUFELEVBQVksVUFBVTRDLENBQVYsRUFBYWhHLGFBQWIsRUFBNEJ3RCxlQUE1QixFQUE2QztBQUNwRixNQUFJeUMsaUJBQWlCLEdBQUdILDRDQUE0QyxHQUFHLEdBQUgsR0FBUyxJQUE3RTtBQUVBLFNBQU87QUFFTDtBQUNBLFdBQVN0aUMsT0FBVCxDQUFpQjBpQyxXQUFqQixFQUE4QkMsWUFBOUIsRUFBNEM7QUFDMUMsUUFBSXhsQyxDQUFDLEdBQUcxRSx3QkFBc0IsQ0FBQyxJQUFELENBQTlCO0FBQ0EsUUFBSTBTLFFBQVEsR0FBR3UzQixXQUFXLElBQUlwcUMsU0FBZixHQUEyQkEsU0FBM0IsR0FBdUMyRCxXQUFTLENBQUN5bUMsV0FBRCxFQUFjL2IsU0FBZCxDQUEvRDtBQUNBLFdBQU94YixRQUFRLEdBQ1hBLFFBQVEsQ0FBQ3pULElBQVQsQ0FBY2dyQyxXQUFkLEVBQTJCdmxDLENBQTNCLEVBQThCd2xDLFlBQTlCLENBRFcsR0FFWG5HLGFBQWEsQ0FBQzlrQyxJQUFkLENBQW1CUSxVQUFRLENBQUNpRixDQUFELENBQTNCLEVBQWdDdWxDLFdBQWhDLEVBQTZDQyxZQUE3QyxDQUZKO0FBR0QsR0FUSTtBQVdMO0FBQ0EsWUFBVWxnQyxNQUFWLEVBQWtCa2dDLFlBQWxCLEVBQWdDO0FBQzlCLFFBQUl6QyxFQUFFLEdBQUc3aUMsV0FBUSxDQUFDLElBQUQsQ0FBakI7QUFDQSxRQUFJaWpCLENBQUMsR0FBR3BvQixVQUFRLENBQUN1SyxNQUFELENBQWhCOztBQUVBLFFBQ0UsT0FBT2tnQyxZQUFQLEtBQXdCLFFBQXhCLElBQ0FBLFlBQVksQ0FBQ3RoQyxPQUFiLENBQXFCb2hDLGlCQUFyQixNQUE0QyxDQUFDLENBRDdDLElBRUFFLFlBQVksQ0FBQ3RoQyxPQUFiLENBQXFCLElBQXJCLE1BQStCLENBQUMsQ0FIbEMsRUFJRTtBQUNBLFVBQUk4K0IsR0FBRyxHQUFHSCxlQUFlLENBQUN4RCxhQUFELEVBQWdCMEQsRUFBaEIsRUFBb0I1ZixDQUFwQixFQUF1QnFpQixZQUF2QixDQUF6QjtBQUNBLFVBQUl4QyxHQUFHLENBQUNueUIsSUFBUixFQUFjLE9BQU9teUIsR0FBRyxDQUFDcG9DLEtBQVg7QUFDZjs7QUFFRCxRQUFJNnFDLGlCQUFpQixHQUFHanFDLFlBQVUsQ0FBQ2dxQyxZQUFELENBQWxDO0FBQ0EsUUFBSSxDQUFDQyxpQkFBTCxFQUF3QkQsWUFBWSxHQUFHenFDLFVBQVEsQ0FBQ3lxQyxZQUFELENBQXZCO0FBRXhCLFFBQUk5ckMsTUFBTSxHQUFHcXBDLEVBQUUsQ0FBQ3JwQyxNQUFoQjs7QUFDQSxRQUFJQSxNQUFKLEVBQVk7QUFDVixVQUFJdXBDLFdBQVcsR0FBR0YsRUFBRSxDQUFDL0YsT0FBckI7QUFDQStGLE1BQUFBLEVBQUUsQ0FBQzVGLFNBQUgsR0FBZSxDQUFmO0FBQ0Q7O0FBQ0QsUUFBSXVJLE9BQU8sR0FBRyxFQUFkOztBQUNBLFdBQU8sSUFBUCxFQUFhO0FBQ1gsVUFBSXZtQyxNQUFNLEdBQUd3akMsWUFBVSxDQUFDSSxFQUFELEVBQUs1ZixDQUFMLENBQXZCO0FBQ0EsVUFBSWhrQixNQUFNLEtBQUssSUFBZixFQUFxQjtBQUVyQnVtQyxNQUFBQSxPQUFPLENBQUM1bkMsSUFBUixDQUFhcUIsTUFBYjtBQUNBLFVBQUksQ0FBQ3pGLE1BQUwsRUFBYTtBQUViLFVBQUl3cEMsUUFBUSxHQUFHbm9DLFVBQVEsQ0FBQ29FLE1BQU0sQ0FBQyxDQUFELENBQVAsQ0FBdkI7QUFDQSxVQUFJK2pDLFFBQVEsS0FBSyxFQUFqQixFQUFxQkgsRUFBRSxDQUFDNUYsU0FBSCxHQUFldUYsb0JBQWtCLENBQUN2ZixDQUFELEVBQUkzZixVQUFRLENBQUN1L0IsRUFBRSxDQUFDNUYsU0FBSixDQUFaLEVBQTRCOEYsV0FBNUIsQ0FBakM7QUFDdEI7O0FBRUQsUUFBSTBDLGlCQUFpQixHQUFHLEVBQXhCO0FBQ0EsUUFBSUMsa0JBQWtCLEdBQUcsQ0FBekI7O0FBQ0EsU0FBSyxJQUFJeGhDLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdzaEMsT0FBTyxDQUFDN3BDLE1BQTVCLEVBQW9DdUksQ0FBQyxFQUFyQyxFQUF5QztBQUN2Q2pGLE1BQUFBLE1BQU0sR0FBR3VtQyxPQUFPLENBQUN0aEMsQ0FBRCxDQUFoQjtBQUVBLFVBQUlvZ0MsT0FBTyxHQUFHenBDLFVBQVEsQ0FBQ29FLE1BQU0sQ0FBQyxDQUFELENBQVAsQ0FBdEI7QUFDQSxVQUFJMGhDLFFBQVEsR0FBR3o5QixLQUFHLENBQUNDLEtBQUcsQ0FBQ0YscUJBQW1CLENBQUNoRSxNQUFNLENBQUNtRSxLQUFSLENBQXBCLEVBQW9DNmYsQ0FBQyxDQUFDdG5CLE1BQXRDLENBQUosRUFBbUQsQ0FBbkQsQ0FBbEI7QUFDQSxVQUFJNG9DLFFBQVEsR0FBRyxFQUFmLENBTHVDO0FBT3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUNBLFdBQUssSUFBSTFxQixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHNWEsTUFBTSxDQUFDdEQsTUFBM0IsRUFBbUNrZSxDQUFDLEVBQXBDLEVBQXdDMHFCLFFBQVEsQ0FBQzNtQyxJQUFULENBQWNtbkMsYUFBYSxDQUFDOWxDLE1BQU0sQ0FBQzRhLENBQUQsQ0FBUCxDQUEzQjs7QUFDeEMsVUFBSTJxQixhQUFhLEdBQUd2bEMsTUFBTSxDQUFDaytCLE1BQTNCOztBQUNBLFVBQUlvSSxpQkFBSixFQUF1QjtBQUNyQixZQUFJSSxZQUFZLEdBQUcsQ0FBQ3JCLE9BQUQsRUFBVWpnQyxNQUFWLENBQWlCa2dDLFFBQWpCLEVBQTJCNUQsUUFBM0IsRUFBcUMxZCxDQUFyQyxDQUFuQjtBQUNBLFlBQUl1aEIsYUFBYSxLQUFLdnBDLFNBQXRCLEVBQWlDMHFDLFlBQVksQ0FBQy9uQyxJQUFiLENBQWtCNG1DLGFBQWxCO0FBQ2pDLFlBQUk1L0IsV0FBVyxHQUFHL0osVUFBUSxDQUFDeXFDLFlBQVksQ0FBQ2o4QixLQUFiLENBQW1CcE8sU0FBbkIsRUFBOEIwcUMsWUFBOUIsQ0FBRCxDQUExQjtBQUNELE9BSkQsTUFJTztBQUNML2dDLFFBQUFBLFdBQVcsR0FBR2tnQyxpQkFBZSxDQUFDUixPQUFELEVBQVVyaEIsQ0FBVixFQUFhMGQsUUFBYixFQUF1QjRELFFBQXZCLEVBQWlDQyxhQUFqQyxFQUFnRGMsWUFBaEQsQ0FBN0I7QUFDRDs7QUFDRCxVQUFJM0UsUUFBUSxJQUFJK0Usa0JBQWhCLEVBQW9DO0FBQ2xDRCxRQUFBQSxpQkFBaUIsSUFBSXhpQixDQUFDLENBQUNub0IsS0FBRixDQUFRNHFDLGtCQUFSLEVBQTRCL0UsUUFBNUIsSUFBd0MvN0IsV0FBN0Q7QUFDQThnQyxRQUFBQSxrQkFBa0IsR0FBRy9FLFFBQVEsR0FBRzJELE9BQU8sQ0FBQzNvQyxNQUF4QztBQUNEO0FBQ0Y7O0FBQ0QsV0FBTzhwQyxpQkFBaUIsR0FBR3hpQixDQUFDLENBQUNub0IsS0FBRixDQUFRNHFDLGtCQUFSLENBQTNCO0FBQ0QsR0F6RUksQ0FBUDtBQTJFRCxDQTlFNEIsRUE4RTFCLENBQUNSLDZCQUFELElBQWtDLENBQUNGLGdCQUFuQyxJQUF1REMsNENBOUU3QixDQUE3Qjs7QUNqREEsSUFBSTE1QixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUl1Qix3QkFBc0IsR0FBR3ZCLHdCQUE3Qjs7QUFDQSxJQUFJeUIsWUFBVSxHQUFHekIsWUFBakI7O0FBQ0EsSUFBSTZpQyxVQUFRLEdBQUc3aUMsUUFBZjs7QUFDQSxJQUFJZ0IsVUFBUSxHQUFHaEIsVUFBZjs7QUFDQSxJQUFJK0UsV0FBUyxHQUFHL0UsV0FBaEI7O0FBQ0EsSUFBSW9wQyxjQUFjLEdBQUdwcEMsYUFBckI7O0FBQ0EsSUFBSWlyQyxlQUFlLEdBQUdqckMsaUJBQXRCOztBQUNBLElBQUlpRixpQkFBZSxHQUFHakYsaUJBQXRCOztBQUdBLElBQUl5dkIsT0FBTyxHQUFHeHFCLGlCQUFlLENBQUMsU0FBRCxDQUE3QjtBQUNBLElBQUkyK0IsZUFBZSxHQUFHdFAsTUFBTSxDQUFDdHNCLFNBQTdCO0FBQ0EsSUFBSXFCLEtBQUcsR0FBRy9KLElBQUksQ0FBQytKLEdBQWY7O0FBRUEsSUFBSTBpQyxhQUFhLEdBQUcsVUFBVXhnQyxNQUFWLEVBQWtCaWdDLFdBQWxCLEVBQStCdmhDLFNBQS9CLEVBQTBDO0FBQzVELE1BQUlBLFNBQVMsR0FBR3NCLE1BQU0sQ0FBQ3pKLE1BQXZCLEVBQStCLE9BQU8sQ0FBQyxDQUFSO0FBQy9CLE1BQUkwcEMsV0FBVyxLQUFLLEVBQXBCLEVBQXdCLE9BQU92aEMsU0FBUDtBQUN4QixTQUFPc0IsTUFBTSxDQUFDcEIsT0FBUCxDQUFlcWhDLFdBQWYsRUFBNEJ2aEMsU0FBNUIsQ0FBUDtBQUNELENBSkQ7QUFPQTs7O0FBQ0F5SCxJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9Cb0ssRUFBQUEsS0FBSyxFQUFFO0FBQTNCLENBQUQsRUFBb0M7QUFDbkM4MkIsRUFBQUEsVUFBVSxFQUFFLFNBQVNBLFVBQVQsQ0FBb0JSLFdBQXBCLEVBQWlDQyxZQUFqQyxFQUErQztBQUN6RCxRQUFJeGxDLENBQUMsR0FBRzFFLHdCQUFzQixDQUFDLElBQUQsQ0FBOUI7QUFDQSxRQUFJMHFDLFVBQUosRUFBZ0I1SSxLQUFoQixFQUF1QnB2QixRQUF2QixFQUFpQzFJLE1BQWpDLEVBQXlDbThCLFlBQXpDLEVBQXVEZ0UsaUJBQXZELEVBQTBFUSxZQUExRSxFQUF3RkMsU0FBeEYsRUFBbUdwaEMsV0FBbkc7QUFDQSxRQUFJKzdCLFFBQVEsR0FBRyxDQUFmO0FBQ0EsUUFBSXNGLGNBQWMsR0FBRyxDQUFyQjtBQUNBLFFBQUlobkMsTUFBTSxHQUFHLEVBQWI7O0FBQ0EsUUFBSW9tQyxXQUFXLElBQUksSUFBbkIsRUFBeUI7QUFDdkJTLE1BQUFBLFVBQVUsR0FBR3BKLFVBQVEsQ0FBQzJJLFdBQUQsQ0FBckI7O0FBQ0EsVUFBSVMsVUFBSixFQUFnQjtBQUNkNUksUUFBQUEsS0FBSyxHQUFHcmlDLFVBQVEsQ0FBQ08sd0JBQXNCLENBQUMsV0FBV3FpQyxlQUFYLEdBQ3BDNEgsV0FBVyxDQUFDbkksS0FEd0IsR0FFcEMrRixjQUFjLENBQUM1b0MsSUFBZixDQUFvQmdyQyxXQUFwQixDQUZtQyxDQUF2QixDQUFoQjtBQUlBLFlBQUksQ0FBQyxDQUFDbkksS0FBSyxDQUFDbDVCLE9BQU4sQ0FBYyxHQUFkLENBQU4sRUFBMEIsTUFBTTlJLFNBQVMsQ0FBQyxpREFBRCxDQUFmO0FBQzNCOztBQUNENFMsTUFBQUEsUUFBUSxHQUFHbFAsV0FBUyxDQUFDeW1DLFdBQUQsRUFBYy9iLE9BQWQsQ0FBcEI7O0FBQ0EsVUFBSXhiLFFBQUosRUFBYztBQUNaLGVBQU9BLFFBQVEsQ0FBQ3pULElBQVQsQ0FBY2dyQyxXQUFkLEVBQTJCdmxDLENBQTNCLEVBQThCd2xDLFlBQTlCLENBQVA7QUFDRDtBQUdGOztBQUNEbGdDLElBQUFBLE1BQU0sR0FBR3ZLLFVBQVEsQ0FBQ2lGLENBQUQsQ0FBakI7QUFDQXloQyxJQUFBQSxZQUFZLEdBQUcxbUMsVUFBUSxDQUFDd3FDLFdBQUQsQ0FBdkI7QUFDQUUsSUFBQUEsaUJBQWlCLEdBQUdqcUMsWUFBVSxDQUFDZ3FDLFlBQUQsQ0FBOUI7QUFDQSxRQUFJLENBQUNDLGlCQUFMLEVBQXdCRCxZQUFZLEdBQUd6cUMsVUFBUSxDQUFDeXFDLFlBQUQsQ0FBdkI7QUFDeEJTLElBQUFBLFlBQVksR0FBR3hFLFlBQVksQ0FBQzVsQyxNQUE1QjtBQUNBcXFDLElBQUFBLFNBQVMsR0FBRzlpQyxLQUFHLENBQUMsQ0FBRCxFQUFJNmlDLFlBQUosQ0FBZjtBQUNBcEYsSUFBQUEsUUFBUSxHQUFHaUYsYUFBYSxDQUFDeGdDLE1BQUQsRUFBU204QixZQUFULEVBQXVCLENBQXZCLENBQXhCOztBQUNBLFdBQU9aLFFBQVEsS0FBSyxDQUFDLENBQXJCLEVBQXdCO0FBQ3RCLFVBQUk0RSxpQkFBSixFQUF1QjtBQUNyQjNnQyxRQUFBQSxXQUFXLEdBQUcvSixVQUFRLENBQUN5cUMsWUFBWSxDQUFDL0QsWUFBRCxFQUFlWixRQUFmLEVBQXlCdjdCLE1BQXpCLENBQWIsQ0FBdEI7QUFDRCxPQUZELE1BRU87QUFDTFIsUUFBQUEsV0FBVyxHQUFHa2dDLGVBQWUsQ0FBQ3ZELFlBQUQsRUFBZW44QixNQUFmLEVBQXVCdTdCLFFBQXZCLEVBQWlDLEVBQWpDLEVBQXFDMWxDLFNBQXJDLEVBQWdEcXFDLFlBQWhELENBQTdCO0FBQ0Q7O0FBQ0RybUMsTUFBQUEsTUFBTSxJQUFJbUcsTUFBTSxDQUFDdEssS0FBUCxDQUFhbXJDLGNBQWIsRUFBNkJ0RixRQUE3QixJQUF5Qy83QixXQUFuRDtBQUNBcWhDLE1BQUFBLGNBQWMsR0FBR3RGLFFBQVEsR0FBR29GLFlBQTVCO0FBQ0FwRixNQUFBQSxRQUFRLEdBQUdpRixhQUFhLENBQUN4Z0MsTUFBRCxFQUFTbThCLFlBQVQsRUFBdUJaLFFBQVEsR0FBR3FGLFNBQWxDLENBQXhCO0FBQ0Q7O0FBQ0QsUUFBSUMsY0FBYyxHQUFHN2dDLE1BQU0sQ0FBQ3pKLE1BQTVCLEVBQW9DO0FBQ2xDc0QsTUFBQUEsTUFBTSxJQUFJbUcsTUFBTSxDQUFDdEssS0FBUCxDQUFhbXJDLGNBQWIsQ0FBVjtBQUNEOztBQUNELFdBQU9obkMsTUFBUDtBQUNEO0FBNUNrQyxDQUFwQyxDQUFEOztBQ3ZCQSxJQUFJc2pDLCtCQUE2QixHQUFHMW9DLDZCQUFwQzs7QUFDQSxJQUFJbUcsV0FBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJdUIsd0JBQXNCLEdBQUd2Qix3QkFBN0I7O0FBQ0EsSUFBSXFzQyxTQUFTLEdBQUdyc0MsV0FBaEI7O0FBQ0EsSUFBSWdCLFVBQVEsR0FBR2hCLFVBQWY7O0FBQ0EsSUFBSStFLFdBQVMsR0FBRy9FLFdBQWhCOztBQUNBLElBQUk0b0MsVUFBVSxHQUFHNW9DLGtCQUFqQjs7O0FBR0Ewb0MsK0JBQTZCLENBQUMsUUFBRCxFQUFXLFVBQVU0RCxNQUFWLEVBQWtCQyxZQUFsQixFQUFnQ3pELGVBQWhDLEVBQWlEO0FBQ3ZGLFNBQU87QUFFTDtBQUNBLFdBQVNsQixNQUFULENBQWdCanpCLE1BQWhCLEVBQXdCO0FBQ3RCLFFBQUkxTyxDQUFDLEdBQUcxRSx3QkFBc0IsQ0FBQyxJQUFELENBQTlCO0FBQ0EsUUFBSWlyQyxRQUFRLEdBQUc3M0IsTUFBTSxJQUFJdlQsU0FBVixHQUFzQkEsU0FBdEIsR0FBa0MyRCxXQUFTLENBQUM0UCxNQUFELEVBQVMyM0IsTUFBVCxDQUExRDtBQUNBLFdBQU9FLFFBQVEsR0FBR0EsUUFBUSxDQUFDaHNDLElBQVQsQ0FBY21VLE1BQWQsRUFBc0IxTyxDQUF0QixDQUFILEdBQThCLElBQUlxdUIsTUFBSixDQUFXM2YsTUFBWCxFQUFtQjIzQixNQUFuQixFQUEyQnRyQyxVQUFRLENBQUNpRixDQUFELENBQW5DLENBQTdDO0FBQ0QsR0FQSTtBQVNMO0FBQ0EsWUFBVXNGLE1BQVYsRUFBa0I7QUFDaEIsUUFBSXk5QixFQUFFLEdBQUc3aUMsV0FBUSxDQUFDLElBQUQsQ0FBakI7QUFDQSxRQUFJaWpCLENBQUMsR0FBR3BvQixVQUFRLENBQUN1SyxNQUFELENBQWhCO0FBQ0EsUUFBSTA5QixHQUFHLEdBQUdILGVBQWUsQ0FBQ3lELFlBQUQsRUFBZXZELEVBQWYsRUFBbUI1ZixDQUFuQixDQUF6QjtBQUVBLFFBQUk2ZixHQUFHLENBQUNueUIsSUFBUixFQUFjLE9BQU9teUIsR0FBRyxDQUFDcG9DLEtBQVg7QUFFZCxRQUFJNHJDLGlCQUFpQixHQUFHekQsRUFBRSxDQUFDNUYsU0FBM0I7QUFDQSxRQUFJLENBQUNpSixTQUFTLENBQUNJLGlCQUFELEVBQW9CLENBQXBCLENBQWQsRUFBc0N6RCxFQUFFLENBQUM1RixTQUFILEdBQWUsQ0FBZjtBQUN0QyxRQUFJaCtCLE1BQU0sR0FBR3dqQyxVQUFVLENBQUNJLEVBQUQsRUFBSzVmLENBQUwsQ0FBdkI7QUFDQSxRQUFJLENBQUNpakIsU0FBUyxDQUFDckQsRUFBRSxDQUFDNUYsU0FBSixFQUFlcUosaUJBQWYsQ0FBZCxFQUFpRHpELEVBQUUsQ0FBQzVGLFNBQUgsR0FBZXFKLGlCQUFmO0FBQ2pELFdBQU9ybkMsTUFBTSxLQUFLLElBQVgsR0FBa0IsQ0FBQyxDQUFuQixHQUF1QkEsTUFBTSxDQUFDbUUsS0FBckM7QUFDRCxHQXRCSSxDQUFQO0FBd0JELENBekI0QixDQUE3Qjs7QUNUQSxJQUFJbS9CLDZCQUE2QixHQUFHMW9DLDZCQUFwQzs7QUFDQSxJQUFJNmlDLFFBQVEsR0FBRzdpQyxRQUFmOztBQUNBLElBQUltRyxXQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUl1Qix3QkFBc0IsR0FBR3ZCLHdCQUE3Qjs7QUFDQSxJQUFJc3BCLG9CQUFrQixHQUFHdHBCLG9CQUF6Qjs7QUFDQSxJQUFJMm9DLGtCQUFrQixHQUFHM29DLG9CQUF6Qjs7QUFDQSxJQUFJeUosVUFBUSxHQUFHekosVUFBZjs7QUFDQSxJQUFJZ0IsVUFBUSxHQUFHaEIsVUFBZjs7QUFDQSxJQUFJK0UsV0FBUyxHQUFHL0UsV0FBaEI7O0FBQ0EsSUFBSTBzQyxjQUFjLEdBQUcxc0Msa0JBQXJCOztBQUNBLElBQUltb0MsVUFBVSxHQUFHbm9DLFlBQWpCOztBQUNBLElBQUl3akMsYUFBYSxHQUFHeGpDLG1CQUFwQjs7QUFDQSxJQUFJRCxPQUFLLEdBQUdDLFFBQVo7O0FBRUEsSUFBSWlrQyxhQUFhLEdBQUdULGFBQWEsQ0FBQ1MsYUFBbEM7QUFDQSxJQUFJMEksU0FBUyxHQUFHLEdBQUc1b0MsSUFBbkI7QUFDQSxJQUFJdUYsS0FBRyxHQUFHaEssSUFBSSxDQUFDZ0ssR0FBZjtBQUNBLElBQUlzakMsVUFBVSxHQUFHLFVBQWpCO0FBR0E7O0FBQ0EsSUFBSUMsaUNBQWlDLEdBQUcsQ0FBQzlzQyxPQUFLLENBQUMsWUFBWTtBQUN6RDtBQUNBLE1BQUlzdEIsRUFBRSxHQUFHLE1BQVQ7QUFDQSxNQUFJeWYsWUFBWSxHQUFHemYsRUFBRSxDQUFDeHRCLElBQXRCOztBQUNBd3RCLEVBQUFBLEVBQUUsQ0FBQ3h0QixJQUFILEdBQVUsWUFBWTtBQUFFLFdBQU9pdEMsWUFBWSxDQUFDdDlCLEtBQWIsQ0FBbUIsSUFBbkIsRUFBeUIzTixTQUF6QixDQUFQO0FBQTZDLEdBQXJFOztBQUNBLE1BQUl1RCxNQUFNLEdBQUcsS0FBS2pFLEtBQUwsQ0FBV2tzQixFQUFYLENBQWI7QUFDQSxTQUFPam9CLE1BQU0sQ0FBQ3RELE1BQVAsS0FBa0IsQ0FBbEIsSUFBdUJzRCxNQUFNLENBQUMsQ0FBRCxDQUFOLEtBQWMsR0FBckMsSUFBNENBLE1BQU0sQ0FBQyxDQUFELENBQU4sS0FBYyxHQUFqRTtBQUNELENBUDZDLENBQTlDOztBQVVBc2pDLDZCQUE2QixDQUFDLE9BQUQsRUFBVSxVQUFVcUUsS0FBVixFQUFpQkMsV0FBakIsRUFBOEJsRSxlQUE5QixFQUErQztBQUNwRixNQUFJbUUsYUFBSjs7QUFDQSxNQUNFLE9BQU85ckMsS0FBUCxDQUFhLE1BQWIsRUFBcUIsQ0FBckIsS0FBMkIsR0FBM0I7QUFFQSxTQUFPQSxLQUFQLENBQWEsTUFBYixFQUFxQixDQUFDLENBQXRCLEVBQXlCVyxNQUF6QixJQUFtQyxDQUZuQyxJQUdBLEtBQUtYLEtBQUwsQ0FBVyxTQUFYLEVBQXNCVyxNQUF0QixJQUFnQyxDQUhoQyxJQUlBLElBQUlYLEtBQUosQ0FBVSxVQUFWLEVBQXNCVyxNQUF0QixJQUFnQyxDQUpoQztBQU1BLE1BQUlYLEtBQUosQ0FBVSxNQUFWLEVBQWtCVyxNQUFsQixHQUEyQixDQU4zQixJQU9BLEdBQUdYLEtBQUgsQ0FBUyxJQUFULEVBQWVXLE1BUmpCLEVBU0U7QUFDQTtBQUNBbXJDLElBQUFBLGFBQWEsR0FBRyxVQUFVN3VCLFNBQVYsRUFBcUI4dUIsS0FBckIsRUFBNEI7QUFDMUMsVUFBSTNoQyxNQUFNLEdBQUd2SyxVQUFRLENBQUNPLHdCQUFzQixDQUFDLElBQUQsQ0FBdkIsQ0FBckI7QUFDQSxVQUFJNHJDLEdBQUcsR0FBR0QsS0FBSyxLQUFLOXJDLFNBQVYsR0FBc0J3ckMsVUFBdEIsR0FBbUNNLEtBQUssS0FBSyxDQUF2RDtBQUNBLFVBQUlDLEdBQUcsS0FBSyxDQUFaLEVBQWUsT0FBTyxFQUFQO0FBQ2YsVUFBSS91QixTQUFTLEtBQUtoZCxTQUFsQixFQUE2QixPQUFPLENBQUNtSyxNQUFELENBQVAsQ0FKYTs7QUFNMUMsVUFBSSxDQUFDczNCLFFBQVEsQ0FBQ3prQixTQUFELENBQWIsRUFBMEI7QUFDeEIsZUFBTzR1QixXQUFXLENBQUN4c0MsSUFBWixDQUFpQitLLE1BQWpCLEVBQXlCNlMsU0FBekIsRUFBb0MrdUIsR0FBcEMsQ0FBUDtBQUNEOztBQUNELFVBQUlDLE1BQU0sR0FBRyxFQUFiO0FBQ0EsVUFBSS9KLEtBQUssR0FBRyxDQUFDamxCLFNBQVMsQ0FBQzBrQixVQUFWLEdBQXVCLEdBQXZCLEdBQTZCLEVBQTlCLEtBQ0Mxa0IsU0FBUyxDQUFDMmtCLFNBQVYsR0FBc0IsR0FBdEIsR0FBNEIsRUFEN0IsS0FFQzNrQixTQUFTLENBQUM2a0IsT0FBVixHQUFvQixHQUFwQixHQUEwQixFQUYzQixLQUdDN2tCLFNBQVMsQ0FBQzhrQixNQUFWLEdBQW1CLEdBQW5CLEdBQXlCLEVBSDFCLENBQVo7QUFJQSxVQUFJbUssYUFBYSxHQUFHLENBQXBCLENBZDBDOztBQWdCMUMsVUFBSUMsYUFBYSxHQUFHLElBQUloWixNQUFKLENBQVdsVyxTQUFTLENBQUNyVixNQUFyQixFQUE2QnM2QixLQUFLLEdBQUcsR0FBckMsQ0FBcEI7QUFDQSxVQUFJL2dDLEtBQUosRUFBVzhnQyxTQUFYLEVBQXNCbUssVUFBdEI7O0FBQ0EsYUFBT2pyQyxLQUFLLEdBQUc2bEMsVUFBVSxDQUFDM25DLElBQVgsQ0FBZ0I4c0MsYUFBaEIsRUFBK0IvaEMsTUFBL0IsQ0FBZixFQUF1RDtBQUNyRDYzQixRQUFBQSxTQUFTLEdBQUdrSyxhQUFhLENBQUNsSyxTQUExQjs7QUFDQSxZQUFJQSxTQUFTLEdBQUdpSyxhQUFoQixFQUErQjtBQUM3QkQsVUFBQUEsTUFBTSxDQUFDcnBDLElBQVAsQ0FBWXdILE1BQU0sQ0FBQ3RLLEtBQVAsQ0FBYW9zQyxhQUFiLEVBQTRCL3FDLEtBQUssQ0FBQ2lILEtBQWxDLENBQVo7QUFDQSxjQUFJakgsS0FBSyxDQUFDUixNQUFOLEdBQWUsQ0FBZixJQUFvQlEsS0FBSyxDQUFDaUgsS0FBTixHQUFjZ0MsTUFBTSxDQUFDekosTUFBN0MsRUFBcUQ2cUMsU0FBUyxDQUFDbjlCLEtBQVYsQ0FBZ0I0OUIsTUFBaEIsRUFBd0I5cUMsS0FBSyxDQUFDckIsS0FBTixDQUFZLENBQVosQ0FBeEI7QUFDckRzc0MsVUFBQUEsVUFBVSxHQUFHanJDLEtBQUssQ0FBQyxDQUFELENBQUwsQ0FBU1IsTUFBdEI7QUFDQXVyQyxVQUFBQSxhQUFhLEdBQUdqSyxTQUFoQjtBQUNBLGNBQUlnSyxNQUFNLENBQUN0ckMsTUFBUCxJQUFpQnFyQyxHQUFyQixFQUEwQjtBQUMzQjs7QUFDRCxZQUFJRyxhQUFhLENBQUNsSyxTQUFkLEtBQTRCOWdDLEtBQUssQ0FBQ2lILEtBQXRDLEVBQTZDK2pDLGFBQWEsQ0FBQ2xLLFNBQWQsR0FUUTtBQVV0RDs7QUFDRCxVQUFJaUssYUFBYSxLQUFLOWhDLE1BQU0sQ0FBQ3pKLE1BQTdCLEVBQXFDO0FBQ25DLFlBQUl5ckMsVUFBVSxJQUFJLENBQUNELGFBQWEsQ0FBQzNtQyxJQUFkLENBQW1CLEVBQW5CLENBQW5CLEVBQTJDeW1DLE1BQU0sQ0FBQ3JwQyxJQUFQLENBQVksRUFBWjtBQUM1QyxPQUZELE1BRU9xcEMsTUFBTSxDQUFDcnBDLElBQVAsQ0FBWXdILE1BQU0sQ0FBQ3RLLEtBQVAsQ0FBYW9zQyxhQUFiLENBQVo7O0FBQ1AsYUFBT0QsTUFBTSxDQUFDdHJDLE1BQVAsR0FBZ0JxckMsR0FBaEIsR0FBc0JDLE1BQU0sQ0FBQ25zQyxLQUFQLENBQWEsQ0FBYixFQUFnQmtzQyxHQUFoQixDQUF0QixHQUE2Q0MsTUFBcEQ7QUFDRCxLQWpDRCxDQUZBOztBQXFDRCxHQTlDRCxNQThDTyxJQUFJLElBQUlqc0MsS0FBSixDQUFVQyxTQUFWLEVBQXFCLENBQXJCLEVBQXdCVSxNQUE1QixFQUFvQztBQUN6Q21yQyxJQUFBQSxhQUFhLEdBQUcsVUFBVTd1QixTQUFWLEVBQXFCOHVCLEtBQXJCLEVBQTRCO0FBQzFDLGFBQU85dUIsU0FBUyxLQUFLaGQsU0FBZCxJQUEyQjhyQyxLQUFLLEtBQUssQ0FBckMsR0FBeUMsRUFBekMsR0FBOENGLFdBQVcsQ0FBQ3hzQyxJQUFaLENBQWlCLElBQWpCLEVBQXVCNGQsU0FBdkIsRUFBa0M4dUIsS0FBbEMsQ0FBckQ7QUFDRCxLQUZEO0FBR0QsR0FKTSxNQUlBRCxhQUFhLEdBQUdELFdBQWhCOztBQUVQLFNBQU87QUFFTDtBQUNBLFdBQVM3ckMsS0FBVCxDQUFlaWQsU0FBZixFQUEwQjh1QixLQUExQixFQUFpQztBQUMvQixRQUFJam5DLENBQUMsR0FBRzFFLHdCQUFzQixDQUFDLElBQUQsQ0FBOUI7QUFDQSxRQUFJaXNDLFFBQVEsR0FBR3B2QixTQUFTLElBQUloZCxTQUFiLEdBQXlCQSxTQUF6QixHQUFxQzJELFdBQVMsQ0FBQ3FaLFNBQUQsRUFBWTJ1QixLQUFaLENBQTdEO0FBQ0EsV0FBT1MsUUFBUSxHQUNYQSxRQUFRLENBQUNodEMsSUFBVCxDQUFjNGQsU0FBZCxFQUF5Qm5ZLENBQXpCLEVBQTRCaW5DLEtBQTVCLENBRFcsR0FFWEQsYUFBYSxDQUFDenNDLElBQWQsQ0FBbUJRLFVBQVEsQ0FBQ2lGLENBQUQsQ0FBM0IsRUFBZ0NtWSxTQUFoQyxFQUEyQzh1QixLQUEzQyxDQUZKO0FBR0QsR0FUSTtBQVdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBVTNoQyxNQUFWLEVBQWtCMmhDLEtBQWxCLEVBQXlCO0FBQ3ZCLFFBQUlsRSxFQUFFLEdBQUc3aUMsV0FBUSxDQUFDLElBQUQsQ0FBakI7QUFDQSxRQUFJaWpCLENBQUMsR0FBR3BvQixVQUFRLENBQUN1SyxNQUFELENBQWhCO0FBQ0EsUUFBSTA5QixHQUFHLEdBQUdILGVBQWUsQ0FBQ21FLGFBQUQsRUFBZ0JqRSxFQUFoQixFQUFvQjVmLENBQXBCLEVBQXVCOGpCLEtBQXZCLEVBQThCRCxhQUFhLEtBQUtELFdBQWhELENBQXpCO0FBRUEsUUFBSS9ELEdBQUcsQ0FBQ255QixJQUFSLEVBQWMsT0FBT215QixHQUFHLENBQUNwb0MsS0FBWDtBQUVkLFFBQUlzUCxDQUFDLEdBQUdtWixvQkFBa0IsQ0FBQzBmLEVBQUQsRUFBSzFVLE1BQUwsQ0FBMUI7QUFFQSxRQUFJbVosZUFBZSxHQUFHekUsRUFBRSxDQUFDL0YsT0FBekI7QUFDQSxRQUFJSSxLQUFLLEdBQUcsQ0FBQzJGLEVBQUUsQ0FBQ2xHLFVBQUgsR0FBZ0IsR0FBaEIsR0FBc0IsRUFBdkIsS0FDQ2tHLEVBQUUsQ0FBQ2pHLFNBQUgsR0FBZSxHQUFmLEdBQXFCLEVBRHRCLEtBRUNpRyxFQUFFLENBQUMvRixPQUFILEdBQWEsR0FBYixHQUFtQixFQUZwQixLQUdDZ0IsYUFBYSxHQUFHLEdBQUgsR0FBUyxHQUh2QixDQUFaLENBVnVCO0FBZ0J2Qjs7QUFDQSxRQUFJdUosUUFBUSxHQUFHLElBQUlyOUIsQ0FBSixDQUFNOHpCLGFBQWEsR0FBRyxTQUFTK0UsRUFBRSxDQUFDamdDLE1BQVosR0FBcUIsR0FBeEIsR0FBOEJpZ0MsRUFBakQsRUFBcUQzRixLQUFyRCxDQUFmO0FBQ0EsUUFBSThKLEdBQUcsR0FBR0QsS0FBSyxLQUFLOXJDLFNBQVYsR0FBc0J3ckMsVUFBdEIsR0FBbUNNLEtBQUssS0FBSyxDQUF2RDtBQUNBLFFBQUlDLEdBQUcsS0FBSyxDQUFaLEVBQWUsT0FBTyxFQUFQO0FBQ2YsUUFBSS9qQixDQUFDLENBQUN0bkIsTUFBRixLQUFhLENBQWpCLEVBQW9CLE9BQU80cUMsY0FBYyxDQUFDYyxRQUFELEVBQVdwa0IsQ0FBWCxDQUFkLEtBQWdDLElBQWhDLEdBQXVDLENBQUNBLENBQUQsQ0FBdkMsR0FBNkMsRUFBcEQ7QUFDcEIsUUFBSXFkLENBQUMsR0FBRyxDQUFSO0FBQ0EsUUFBSWlILENBQUMsR0FBRyxDQUFSO0FBQ0EsUUFBSTkwQixDQUFDLEdBQUcsRUFBUjs7QUFDQSxXQUFPODBCLENBQUMsR0FBR3RrQixDQUFDLENBQUN0bkIsTUFBYixFQUFxQjtBQUNuQjByQyxNQUFBQSxRQUFRLENBQUNwSyxTQUFULEdBQXFCYSxhQUFhLEdBQUcsQ0FBSCxHQUFPeUosQ0FBekM7QUFDQSxVQUFJN1csQ0FBQyxHQUFHNlYsY0FBYyxDQUFDYyxRQUFELEVBQVd2SixhQUFhLEdBQUc3YSxDQUFDLENBQUNub0IsS0FBRixDQUFReXNDLENBQVIsQ0FBSCxHQUFnQnRrQixDQUF4QyxDQUF0QjtBQUNBLFVBQUl3TixDQUFKOztBQUNBLFVBQ0VDLENBQUMsS0FBSyxJQUFOLElBQ0EsQ0FBQ0QsQ0FBQyxHQUFHdHRCLEtBQUcsQ0FBQ0csVUFBUSxDQUFDK2pDLFFBQVEsQ0FBQ3BLLFNBQVQsSUFBc0JhLGFBQWEsR0FBR3lKLENBQUgsR0FBTyxDQUExQyxDQUFELENBQVQsRUFBeUR0a0IsQ0FBQyxDQUFDdG5CLE1BQTNELENBQVIsTUFBZ0Yya0MsQ0FGbEYsRUFHRTtBQUNBaUgsUUFBQUEsQ0FBQyxHQUFHL0Usa0JBQWtCLENBQUN2ZixDQUFELEVBQUlza0IsQ0FBSixFQUFPRCxlQUFQLENBQXRCO0FBQ0QsT0FMRCxNQUtPO0FBQ0w3MEIsUUFBQUEsQ0FBQyxDQUFDN1UsSUFBRixDQUFPcWxCLENBQUMsQ0FBQ25vQixLQUFGLENBQVF3bEMsQ0FBUixFQUFXaUgsQ0FBWCxDQUFQO0FBQ0EsWUFBSTkwQixDQUFDLENBQUM5VyxNQUFGLEtBQWFxckMsR0FBakIsRUFBc0IsT0FBT3YwQixDQUFQOztBQUN0QixhQUFLLElBQUl2TyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxJQUFJd3NCLENBQUMsQ0FBQy8wQixNQUFGLEdBQVcsQ0FBaEMsRUFBbUN1SSxDQUFDLEVBQXBDLEVBQXdDO0FBQ3RDdU8sVUFBQUEsQ0FBQyxDQUFDN1UsSUFBRixDQUFPOHlCLENBQUMsQ0FBQ3hzQixDQUFELENBQVI7QUFDQSxjQUFJdU8sQ0FBQyxDQUFDOVcsTUFBRixLQUFhcXJDLEdBQWpCLEVBQXNCLE9BQU92MEIsQ0FBUDtBQUN2Qjs7QUFDRDgwQixRQUFBQSxDQUFDLEdBQUdqSCxDQUFDLEdBQUc3UCxDQUFSO0FBQ0Q7QUFDRjs7QUFDRGhlLElBQUFBLENBQUMsQ0FBQzdVLElBQUYsQ0FBT3FsQixDQUFDLENBQUNub0IsS0FBRixDQUFRd2xDLENBQVIsQ0FBUDtBQUNBLFdBQU83dEIsQ0FBUDtBQUNELEdBNURJLENBQVA7QUE4REQsQ0FwSDRCLEVBb0gxQixDQUFDaTBCLGlDQXBIeUIsRUFvSFU1SSxhQXBIVixDQUE3Qjs7QUMvQkEsSUFBSXZ5QixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlNLDBCQUF3QixHQUFHTiw4QkFBQSxDQUEyRGtHLENBQTFGOztBQUNBLElBQUl1RCxVQUFRLEdBQUd6SixVQUFmOztBQUNBLElBQUlnQixVQUFRLEdBQUdoQixVQUFmOztBQUNBLElBQUlvbkMsVUFBVSxHQUFHcG5DLFVBQWpCOztBQUNBLElBQUl1Qix3QkFBc0IsR0FBR3ZCLHdCQUE3Qjs7QUFDQSxJQUFJcW5DLG9CQUFvQixHQUFHcm5DLG9CQUEzQjs7O0FBSUEsSUFBSTJ0QyxXQUFXLEdBQUcsR0FBR0MsVUFBckI7QUFDQSxJQUFJdGtDLEtBQUcsR0FBR2hLLElBQUksQ0FBQ2dLLEdBQWY7QUFFQSxJQUFJaytCLHVCQUF1QixHQUFHSCxvQkFBb0IsQ0FBQyxZQUFELENBQWxEOztBQUVBLElBQUlJLGdCQUFnQixHQUFlLENBQUNELHVCQUFiLElBQXdDLENBQUMsQ0FBQyxZQUFZO0FBQzNFLE1BQUk5bUMsVUFBVSxHQUFHSiwwQkFBd0IsQ0FBQ3FDLE1BQU0sQ0FBQ3FGLFNBQVIsRUFBbUIsWUFBbkIsQ0FBekM7QUFDQSxTQUFPdEgsVUFBVSxJQUFJLENBQUNBLFVBQVUsQ0FBQ0ssUUFBakM7QUFDRCxDQUhnRSxFQUFqRTtBQU1BOztBQUNBMlEsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQm9LLEVBQUFBLEtBQUssRUFBRSxJQUEzQjtBQUFpQ2hKLEVBQUFBLE1BQU0sRUFBRSxDQUFDdTdCLGdCQUFELElBQXFCLENBQUNEO0FBQS9ELENBQUQsRUFBMkY7QUFDMUZvRyxFQUFBQSxVQUFVLEVBQUUsU0FBU0EsVUFBVCxDQUFvQmxHO0FBQWE7QUFBakMsSUFBdUQ7QUFDakUsUUFBSXI0QixJQUFJLEdBQUdyTyxVQUFRLENBQUNPLHdCQUFzQixDQUFDLElBQUQsQ0FBdkIsQ0FBbkI7QUFDQTZsQyxJQUFBQSxVQUFVLENBQUNNLFlBQUQsQ0FBVjtBQUNBLFFBQUluK0IsS0FBSyxHQUFHRSxVQUFRLENBQUNILEtBQUcsQ0FBQ3pILFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUF1QkQsU0FBUyxDQUFDLENBQUQsQ0FBaEMsR0FBc0NULFNBQXZDLEVBQWtEaU8sSUFBSSxDQUFDdk4sTUFBdkQsQ0FBSixDQUFwQjtBQUNBLFFBQUk4bEMsTUFBTSxHQUFHNW1DLFVBQVEsQ0FBQzBtQyxZQUFELENBQXJCO0FBQ0EsV0FBT2lHLFdBQVcsR0FDZEEsV0FBVyxDQUFDbnRDLElBQVosQ0FBaUI2TyxJQUFqQixFQUF1QnU0QixNQUF2QixFQUErQnIrQixLQUEvQixDQURjLEdBRWQ4RixJQUFJLENBQUNwTyxLQUFMLENBQVdzSSxLQUFYLEVBQWtCQSxLQUFLLEdBQUdxK0IsTUFBTSxDQUFDOWxDLE1BQWpDLE1BQTZDOGxDLE1BRmpEO0FBR0Q7QUFUeUYsQ0FBM0YsQ0FBRDs7QUN0QkEsSUFBSWwyQixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUl1Qix3QkFBc0IsR0FBR3ZCLHdCQUE3Qjs7QUFDQSxJQUFJb0oscUJBQW1CLEdBQUdwSixxQkFBMUI7O0FBQ0EsSUFBSWdCLFVBQVEsR0FBR2hCLFVBQWY7O0FBRUEsSUFBSWlCLE9BQUssR0FBRyxHQUFHQSxLQUFmO0FBQ0EsSUFBSW9JLEtBQUcsR0FBRy9KLElBQUksQ0FBQytKLEdBQWY7QUFDQSxJQUFJQyxLQUFHLEdBQUdoSyxJQUFJLENBQUNnSyxHQUFmOztBQUdBLElBQUl5QyxRQUFNLEdBQUcsQ0FBQyxHQUFHOGhDLE1BQUosSUFBYyxLQUFLQSxNQUFMLENBQVksQ0FBQyxDQUFiLE1BQW9CLEdBQS9DO0FBR0E7O0FBQ0FuOEIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQm9LLEVBQUFBLEtBQUssRUFBRSxJQUEzQjtBQUFpQ2hKLEVBQUFBLE1BQU0sRUFBRUg7QUFBekMsQ0FBRCxFQUFvRDtBQUNuRDhoQyxFQUFBQSxNQUFNLEVBQUUsU0FBU0EsTUFBVCxDQUFnQjcwQixLQUFoQixFQUF1QmxYLE1BQXZCLEVBQStCO0FBQ3JDLFFBQUl1TixJQUFJLEdBQUdyTyxVQUFRLENBQUNPLHdCQUFzQixDQUFDLElBQUQsQ0FBdkIsQ0FBbkI7QUFDQSxRQUFJOHVCLElBQUksR0FBR2hoQixJQUFJLENBQUN2TixNQUFoQjtBQUNBLFFBQUlnc0MsUUFBUSxHQUFHMWtDLHFCQUFtQixDQUFDNFAsS0FBRCxDQUFsQztBQUNBLFFBQUkrMEIsU0FBSixFQUFlQyxNQUFmO0FBQ0EsUUFBSUYsUUFBUSxLQUFLdnFCLFFBQWpCLEVBQTJCdXFCLFFBQVEsR0FBRyxDQUFYO0FBQzNCLFFBQUlBLFFBQVEsR0FBRyxDQUFmLEVBQWtCQSxRQUFRLEdBQUd6a0MsS0FBRyxDQUFDZ25CLElBQUksR0FBR3lkLFFBQVIsRUFBa0IsQ0FBbEIsQ0FBZDtBQUNsQkMsSUFBQUEsU0FBUyxHQUFHanNDLE1BQU0sS0FBS1YsU0FBWCxHQUF1Qml2QixJQUF2QixHQUE4QmpuQixxQkFBbUIsQ0FBQ3RILE1BQUQsQ0FBN0Q7QUFDQSxRQUFJaXNDLFNBQVMsSUFBSSxDQUFiLElBQWtCQSxTQUFTLEtBQUt4cUIsUUFBcEMsRUFBOEMsT0FBTyxFQUFQO0FBQzlDeXFCLElBQUFBLE1BQU0sR0FBRzFrQyxLQUFHLENBQUN3a0MsUUFBUSxHQUFHQyxTQUFaLEVBQXVCMWQsSUFBdkIsQ0FBWjtBQUNBLFdBQU95ZCxRQUFRLElBQUlFLE1BQVosR0FBcUIsRUFBckIsR0FBMEIvc0MsT0FBSyxDQUFDVCxJQUFOLENBQVc2TyxJQUFYLEVBQWlCeStCLFFBQWpCLEVBQTJCRSxNQUEzQixDQUFqQztBQUNEO0FBWmtELENBQXBELENBQUQ7O0FDZkEsSUFBSXB4QixzQkFBb0IsR0FBRzVjLFlBQUEsQ0FBc0NrSSxNQUFqRTs7QUFDQSxJQUFJbkksT0FBSyxHQUFHQyxRQUFaOztBQUNBLElBQUltMEIsV0FBVyxHQUFHbjBCLGFBQWxCOztBQUVBLElBQUlpdUMsR0FBRyxHQUFHLG9CQUFWO0FBR0E7O0lBQ0ExdUMsZ0JBQUEsR0FBaUIsVUFBVXVZLFdBQVYsRUFBdUI7QUFDdEMsU0FBTy9YLE9BQUssQ0FBQyxZQUFZO0FBQ3ZCLFdBQU8sQ0FBQyxDQUFDbzBCLFdBQVcsQ0FBQ3JjLFdBQUQsQ0FBWCxFQUFGLElBQ0ZtMkIsR0FBRyxDQUFDbjJCLFdBQUQsQ0FBSCxPQUF1Qm0yQixHQURyQixJQUVEcnhCLHNCQUFvQixJQUFJdVgsV0FBVyxDQUFDcmMsV0FBRCxDQUFYLENBQXlCalQsSUFBekIsS0FBa0NpVCxXQUZoRTtBQUdELEdBSlcsQ0FBWjtBQUtELENBTkQ7O0FDUEEsSUFBSXBHLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSWt1QyxLQUFLLEdBQUdsdUMsVUFBQSxDQUFvQ3cwQixJQUFoRDs7QUFDQSxJQUFJMlosd0JBQXNCLEdBQUdudUMsZ0JBQTdCO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQm9LLEVBQUFBLEtBQUssRUFBRSxJQUEzQjtBQUFpQ2hKLEVBQUFBLE1BQU0sRUFBRWlpQyx3QkFBc0IsQ0FBQyxNQUFEO0FBQS9ELENBQUQsRUFBNEU7QUFDM0UzWixFQUFBQSxJQUFJLEVBQUUsU0FBU0EsSUFBVCxHQUFnQjtBQUNwQixXQUFPMFosS0FBSyxDQUFDLElBQUQsQ0FBWjtBQUNEO0FBSDBFLENBQTVFLENBQUQ7O0FDTkEsSUFBSXg4QixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlvdUMsUUFBUSxHQUFHcHVDLFVBQUEsQ0FBb0NtWixHQUFuRDs7QUFDQSxJQUFJZzFCLHdCQUFzQixHQUFHbnVDLGdCQUE3Qjs7QUFFQSxJQUFJK0wsUUFBTSxHQUFHb2lDLHdCQUFzQixDQUFDLFNBQUQsQ0FBbkM7QUFFQSxJQUFJRSxPQUFPLEdBQUd0aUMsUUFBTSxHQUFHLFNBQVNzaUMsT0FBVCxHQUFtQjtBQUN4QyxTQUFPRCxRQUFRLENBQUMsSUFBRCxDQUFmLENBRHdDO0FBR3pDLENBSG1CLEdBR2hCLEdBQUdDLE9BSFA7QUFNQTtBQUNBOztBQUNBMzhCLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JvSyxFQUFBQSxLQUFLLEVBQUUsSUFBM0I7QUFBaUNyUSxFQUFBQSxJQUFJLEVBQUUsU0FBdkM7QUFBa0RxSCxFQUFBQSxNQUFNLEVBQUVIO0FBQTFELENBQUQsRUFBcUU7QUFDcEVzaUMsRUFBQUEsT0FBTyxFQUFFQSxPQUQyRDtBQUVwRUMsRUFBQUEsU0FBUyxFQUFFRDtBQUZ5RCxDQUFyRSxDQUFEOztBQ2RBLElBQUkzOEIsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJdXVDLFVBQVUsR0FBR3Z1QyxVQUFBLENBQW9DZ1osS0FBckQ7O0FBQ0EsSUFBSW0xQixzQkFBc0IsR0FBR251QyxnQkFBN0I7O0FBRUEsSUFBSStMLFFBQU0sR0FBR29pQyxzQkFBc0IsQ0FBQyxXQUFELENBQW5DO0FBRUEsSUFBSUssU0FBUyxHQUFHemlDLFFBQU0sR0FBRyxTQUFTeWlDLFNBQVQsR0FBcUI7QUFDNUMsU0FBT0QsVUFBVSxDQUFDLElBQUQsQ0FBakIsQ0FENEM7QUFHN0MsQ0FIcUIsR0FHbEIsR0FBR0MsU0FIUDtBQU1BO0FBQ0E7O0FBQ0E5OEIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQm9LLEVBQUFBLEtBQUssRUFBRSxJQUEzQjtBQUFpQ3JRLEVBQUFBLElBQUksRUFBRSxXQUF2QztBQUFvRHFILEVBQUFBLE1BQU0sRUFBRUg7QUFBNUQsQ0FBRCxFQUF1RTtBQUN0RXlpQyxFQUFBQSxTQUFTLEVBQUVBLFNBRDJEO0FBRXRFQyxFQUFBQSxRQUFRLEVBQUVEO0FBRjRELENBQXZFLENBQUQ7O0FDZkEsSUFBSWp0Qyx3QkFBc0IsR0FBR3ZCLHdCQUE3Qjs7QUFDQSxJQUFJZ0IsVUFBUSxHQUFHaEIsVUFBZjs7QUFFQSxJQUFJMHVDLElBQUksR0FBRyxJQUFYO0FBR0E7O0lBQ0FudkMsVUFBQSxHQUFpQixVQUFVZ00sTUFBVixFQUFrQm1CLEdBQWxCLEVBQXVCaWlDLFNBQXZCLEVBQWtDOXRDLEtBQWxDLEVBQXlDO0FBQ3hELE1BQUl1b0IsQ0FBQyxHQUFHcG9CLFVBQVEsQ0FBQ08sd0JBQXNCLENBQUNnSyxNQUFELENBQXZCLENBQWhCO0FBQ0EsTUFBSXFqQyxFQUFFLEdBQUcsTUFBTWxpQyxHQUFmO0FBQ0EsTUFBSWlpQyxTQUFTLEtBQUssRUFBbEIsRUFBc0JDLEVBQUUsSUFBSSxNQUFNRCxTQUFOLEdBQWtCLElBQWxCLEdBQXlCM3RDLFVBQVEsQ0FBQ0gsS0FBRCxDQUFSLENBQWdCaUksT0FBaEIsQ0FBd0I0bEMsSUFBeEIsRUFBOEIsUUFBOUIsQ0FBekIsR0FBbUUsR0FBekU7QUFDdEIsU0FBT0UsRUFBRSxHQUFHLEdBQUwsR0FBV3hsQixDQUFYLEdBQWUsSUFBZixHQUFzQjFjLEdBQXRCLEdBQTRCLEdBQW5DO0FBQ0QsQ0FMRDs7QUNQQSxJQUFJM00sT0FBSyxHQUFHQyxRQUFaO0FBR0E7OztJQUNBVCxnQkFBQSxHQUFpQixVQUFVdVksV0FBVixFQUF1QjtBQUN0QyxTQUFPL1gsT0FBSyxDQUFDLFlBQVk7QUFDdkIsUUFBSTRHLElBQUksR0FBRyxHQUFHbVIsV0FBSCxFQUFnQixHQUFoQixDQUFYO0FBQ0EsV0FBT25SLElBQUksS0FBS0EsSUFBSSxDQUFDNkUsV0FBTCxFQUFULElBQStCN0UsSUFBSSxDQUFDeEYsS0FBTCxDQUFXLEdBQVgsRUFBZ0JXLE1BQWhCLEdBQXlCLENBQS9EO0FBQ0QsR0FIVyxDQUFaO0FBSUQsQ0FMRDs7QUNIQSxJQUFJNFAsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJNnVDLFlBQVUsR0FBRzd1QyxVQUFqQjs7QUFDQSxJQUFJOHVDLHdCQUFzQixHQUFHOXVDLGdCQUE3QjtBQUdBOzs7QUFDQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JvSyxFQUFBQSxLQUFLLEVBQUUsSUFBM0I7QUFBaUNoSixFQUFBQSxNQUFNLEVBQUU0aUMsd0JBQXNCLENBQUMsUUFBRDtBQUEvRCxDQUFELEVBQThFO0FBQzdFQyxFQUFBQSxNQUFNLEVBQUUsU0FBU0EsTUFBVCxDQUFnQmxxQyxJQUFoQixFQUFzQjtBQUM1QixXQUFPZ3FDLFlBQVUsQ0FBQyxJQUFELEVBQU8sR0FBUCxFQUFZLE1BQVosRUFBb0JocUMsSUFBcEIsQ0FBakI7QUFDRDtBQUg0RSxDQUE5RSxDQUFEOztBQ05BLElBQUk2TSxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUk2dUMsWUFBVSxHQUFHN3VDLFVBQWpCOztBQUNBLElBQUk4dUMsd0JBQXNCLEdBQUc5dUMsZ0JBQTdCO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQm9LLEVBQUFBLEtBQUssRUFBRSxJQUEzQjtBQUFpQ2hKLEVBQUFBLE1BQU0sRUFBRTRpQyx3QkFBc0IsQ0FBQyxLQUFEO0FBQS9ELENBQUQsRUFBMkU7QUFDMUVFLEVBQUFBLEdBQUcsRUFBRSxTQUFTQSxHQUFULEdBQWU7QUFDbEIsV0FBT0gsWUFBVSxDQUFDLElBQUQsRUFBTyxLQUFQLEVBQWMsRUFBZCxFQUFrQixFQUFsQixDQUFqQjtBQUNEO0FBSHlFLENBQTNFLENBQUQ7O0FDTkEsSUFBSW45QixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUk2dUMsWUFBVSxHQUFHN3VDLFVBQWpCOztBQUNBLElBQUk4dUMsd0JBQXNCLEdBQUc5dUMsZ0JBQTdCO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQm9LLEVBQUFBLEtBQUssRUFBRSxJQUEzQjtBQUFpQ2hKLEVBQUFBLE1BQU0sRUFBRTRpQyx3QkFBc0IsQ0FBQyxPQUFEO0FBQS9ELENBQUQsRUFBNkU7QUFDNUVHLEVBQUFBLEtBQUssRUFBRSxTQUFTQSxLQUFULEdBQWlCO0FBQ3RCLFdBQU9KLFlBQVUsQ0FBQyxJQUFELEVBQU8sT0FBUCxFQUFnQixFQUFoQixFQUFvQixFQUFwQixDQUFqQjtBQUNEO0FBSDJFLENBQTdFLENBQUQ7O0FDTkEsSUFBSW45QixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUk2dUMsWUFBVSxHQUFHN3VDLFVBQWpCOztBQUNBLElBQUk4dUMsd0JBQXNCLEdBQUc5dUMsZ0JBQTdCO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQm9LLEVBQUFBLEtBQUssRUFBRSxJQUEzQjtBQUFpQ2hKLEVBQUFBLE1BQU0sRUFBRTRpQyx3QkFBc0IsQ0FBQyxNQUFEO0FBQS9ELENBQUQsRUFBNEU7QUFDM0VJLEVBQUFBLElBQUksRUFBRSxTQUFTQSxJQUFULEdBQWdCO0FBQ3BCLFdBQU9MLFlBQVUsQ0FBQyxJQUFELEVBQU8sR0FBUCxFQUFZLEVBQVosRUFBZ0IsRUFBaEIsQ0FBakI7QUFDRDtBQUgwRSxDQUE1RSxDQUFEOztBQ05BLElBQUluOUIsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJNnVDLFlBQVUsR0FBRzd1QyxVQUFqQjs7QUFDQSxJQUFJOHVDLHdCQUFzQixHQUFHOXVDLGdCQUE3QjtBQUdBOzs7QUFDQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JvSyxFQUFBQSxLQUFLLEVBQUUsSUFBM0I7QUFBaUNoSixFQUFBQSxNQUFNLEVBQUU0aUMsd0JBQXNCLENBQUMsT0FBRDtBQUEvRCxDQUFELEVBQTZFO0FBQzVFSyxFQUFBQSxLQUFLLEVBQUUsU0FBU0EsS0FBVCxHQUFpQjtBQUN0QixXQUFPTixZQUFVLENBQUMsSUFBRCxFQUFPLElBQVAsRUFBYSxFQUFiLEVBQWlCLEVBQWpCLENBQWpCO0FBQ0Q7QUFIMkUsQ0FBN0UsQ0FBRDs7QUNOQSxJQUFJbjlCLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSTZ1QyxZQUFVLEdBQUc3dUMsVUFBakI7O0FBQ0EsSUFBSTh1Qyx3QkFBc0IsR0FBRzl1QyxnQkFBN0I7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9Cb0ssRUFBQUEsS0FBSyxFQUFFLElBQTNCO0FBQWlDaEosRUFBQUEsTUFBTSxFQUFFNGlDLHdCQUFzQixDQUFDLFdBQUQ7QUFBL0QsQ0FBRCxFQUFpRjtBQUNoRk0sRUFBQUEsU0FBUyxFQUFFLFNBQVNBLFNBQVQsQ0FBbUJDLEtBQW5CLEVBQTBCO0FBQ25DLFdBQU9SLFlBQVUsQ0FBQyxJQUFELEVBQU8sTUFBUCxFQUFlLE9BQWYsRUFBd0JRLEtBQXhCLENBQWpCO0FBQ0Q7QUFIK0UsQ0FBakYsQ0FBRDs7QUNOQSxJQUFJMzlCLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSTZ1QyxZQUFVLEdBQUc3dUMsVUFBakI7O0FBQ0EsSUFBSTh1Qyx3QkFBc0IsR0FBRzl1QyxnQkFBN0I7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9Cb0ssRUFBQUEsS0FBSyxFQUFFLElBQTNCO0FBQWlDaEosRUFBQUEsTUFBTSxFQUFFNGlDLHdCQUFzQixDQUFDLFVBQUQ7QUFBL0QsQ0FBRCxFQUFnRjtBQUMvRVEsRUFBQUEsUUFBUSxFQUFFLFNBQVNBLFFBQVQsQ0FBa0JqZixJQUFsQixFQUF3QjtBQUNoQyxXQUFPd2UsWUFBVSxDQUFDLElBQUQsRUFBTyxNQUFQLEVBQWUsTUFBZixFQUF1QnhlLElBQXZCLENBQWpCO0FBQ0Q7QUFIOEUsQ0FBaEYsQ0FBRDs7QUNOQSxJQUFJM2UsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJNnVDLFlBQVUsR0FBRzd1QyxVQUFqQjs7QUFDQSxJQUFJOHVDLHdCQUFzQixHQUFHOXVDLGdCQUE3QjtBQUdBOzs7QUFDQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JvSyxFQUFBQSxLQUFLLEVBQUUsSUFBM0I7QUFBaUNoSixFQUFBQSxNQUFNLEVBQUU0aUMsd0JBQXNCLENBQUMsU0FBRDtBQUEvRCxDQUFELEVBQStFO0FBQzlFUyxFQUFBQSxPQUFPLEVBQUUsU0FBU0EsT0FBVCxHQUFtQjtBQUMxQixXQUFPVixZQUFVLENBQUMsSUFBRCxFQUFPLEdBQVAsRUFBWSxFQUFaLEVBQWdCLEVBQWhCLENBQWpCO0FBQ0Q7QUFINkUsQ0FBL0UsQ0FBRDs7QUNOQSxJQUFJbjlCLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSTZ1QyxZQUFVLEdBQUc3dUMsVUFBakI7O0FBQ0EsSUFBSTh1Qyx3QkFBc0IsR0FBRzl1QyxnQkFBN0I7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9Cb0ssRUFBQUEsS0FBSyxFQUFFLElBQTNCO0FBQWlDaEosRUFBQUEsTUFBTSxFQUFFNGlDLHdCQUFzQixDQUFDLE1BQUQ7QUFBL0QsQ0FBRCxFQUE0RTtBQUMzRVUsRUFBQUEsSUFBSSxFQUFFLFNBQVNBLElBQVQsQ0FBY0MsR0FBZCxFQUFtQjtBQUN2QixXQUFPWixZQUFVLENBQUMsSUFBRCxFQUFPLEdBQVAsRUFBWSxNQUFaLEVBQW9CWSxHQUFwQixDQUFqQjtBQUNEO0FBSDBFLENBQTVFLENBQUQ7O0FDTkEsSUFBSS85QixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUk2dUMsWUFBVSxHQUFHN3VDLFVBQWpCOztBQUNBLElBQUk4dUMsd0JBQXNCLEdBQUc5dUMsZ0JBQTdCO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQm9LLEVBQUFBLEtBQUssRUFBRSxJQUEzQjtBQUFpQ2hKLEVBQUFBLE1BQU0sRUFBRTRpQyx3QkFBc0IsQ0FBQyxPQUFEO0FBQS9ELENBQUQsRUFBNkU7QUFDNUVZLEVBQUFBLEtBQUssRUFBRSxTQUFTQSxLQUFULEdBQWlCO0FBQ3RCLFdBQU9iLFlBQVUsQ0FBQyxJQUFELEVBQU8sT0FBUCxFQUFnQixFQUFoQixFQUFvQixFQUFwQixDQUFqQjtBQUNEO0FBSDJFLENBQTdFLENBQUQ7O0FDTkEsSUFBSW45QixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUk2dUMsWUFBVSxHQUFHN3VDLFVBQWpCOztBQUNBLElBQUk4dUMsd0JBQXNCLEdBQUc5dUMsZ0JBQTdCO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQm9LLEVBQUFBLEtBQUssRUFBRSxJQUEzQjtBQUFpQ2hKLEVBQUFBLE1BQU0sRUFBRTRpQyx3QkFBc0IsQ0FBQyxRQUFEO0FBQS9ELENBQUQsRUFBOEU7QUFDN0VhLEVBQUFBLE1BQU0sRUFBRSxTQUFTQSxNQUFULEdBQWtCO0FBQ3hCLFdBQU9kLFlBQVUsQ0FBQyxJQUFELEVBQU8sUUFBUCxFQUFpQixFQUFqQixFQUFxQixFQUFyQixDQUFqQjtBQUNEO0FBSDRFLENBQTlFLENBQUQ7O0FDTkEsSUFBSW45QixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUk2dUMsWUFBVSxHQUFHN3VDLFVBQWpCOztBQUNBLElBQUk4dUMsd0JBQXNCLEdBQUc5dUMsZ0JBQTdCO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQm9LLEVBQUFBLEtBQUssRUFBRSxJQUEzQjtBQUFpQ2hKLEVBQUFBLE1BQU0sRUFBRTRpQyx3QkFBc0IsQ0FBQyxLQUFEO0FBQS9ELENBQUQsRUFBMkU7QUFDMUVjLEVBQUFBLEdBQUcsRUFBRSxTQUFTQSxHQUFULEdBQWU7QUFDbEIsV0FBT2YsWUFBVSxDQUFDLElBQUQsRUFBTyxLQUFQLEVBQWMsRUFBZCxFQUFrQixFQUFsQixDQUFqQjtBQUNEO0FBSHlFLENBQTNFLENBQUQ7O0FDTkEsSUFBSW45QixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUk2dUMsVUFBVSxHQUFHN3VDLFVBQWpCOztBQUNBLElBQUk4dUMsc0JBQXNCLEdBQUc5dUMsZ0JBQTdCO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsUUFBVjtBQUFvQm9LLEVBQUFBLEtBQUssRUFBRSxJQUEzQjtBQUFpQ2hKLEVBQUFBLE1BQU0sRUFBRTRpQyxzQkFBc0IsQ0FBQyxLQUFEO0FBQS9ELENBQUQsRUFBMkU7QUFDMUVlLEVBQUFBLEdBQUcsRUFBRSxTQUFTQSxHQUFULEdBQWU7QUFDbEIsV0FBT2hCLFVBQVUsQ0FBQyxJQUFELEVBQU8sS0FBUCxFQUFjLEVBQWQsRUFBa0IsRUFBbEIsQ0FBakI7QUFDRDtBQUh5RSxDQUEzRSxDQUFEOzs7Ozs7QUNOQSxJQUFJbHZDLFFBQU0sR0FBR0ssUUFBYjs7QUFDQSxJQUFJRCxPQUFLLEdBQUdDLFFBQVo7O0FBQ0EsSUFBSTJiLDJCQUEyQixHQUFHM2IsNkJBQWxDOztBQUNBLElBQUl3bkIsMkJBQXlCLEdBQUd4bkIsbUJBQUEsQ0FBK0N3bkIseUJBQS9FOztBQUVBLElBQUluRixhQUFXLEdBQUcxaUIsUUFBTSxDQUFDMGlCLFdBQXpCO0FBQ0EsSUFBSTBFLFdBQVMsR0FBR3BuQixRQUFNLENBQUNvbkIsU0FBdkI7SUFFQXhuQixxQ0FBQSxHQUFpQixDQUFDaW9CLDJCQUFELElBQThCLENBQUN6bkIsT0FBSyxDQUFDLFlBQVk7QUFDaEVnbkIsRUFBQUEsV0FBUyxDQUFDLENBQUQsQ0FBVDtBQUNELENBRm9ELENBQXBDLElBRVgsQ0FBQ2huQixPQUFLLENBQUMsWUFBWTtBQUN2QixNQUFJZ25CLFdBQUosQ0FBYyxDQUFDLENBQWY7QUFDRCxDQUZXLENBRkssSUFJWCxDQUFDcEwsMkJBQTJCLENBQUMsVUFBVXhGLFFBQVYsRUFBb0I7QUFDckQsTUFBSTRRLFdBQUo7QUFDQSxNQUFJQSxXQUFKLENBQWMsSUFBZDtBQUNBLE1BQUlBLFdBQUosQ0FBYyxHQUFkO0FBQ0EsTUFBSUEsV0FBSixDQUFjNVEsUUFBZDtBQUNELENBTGlDLEVBSy9CLElBTCtCLENBSmpCLElBU0xwVyxPQUFLLENBQUMsWUFBWTtBQUM1QjtBQUNBLFNBQU8sSUFBSWduQixXQUFKLENBQWMsSUFBSTFFLGFBQUosQ0FBZ0IsQ0FBaEIsQ0FBZCxFQUFrQyxDQUFsQyxFQUFxQ2poQixTQUFyQyxFQUFnRFUsTUFBaEQsS0FBMkQsQ0FBbEU7QUFDRCxDQUhnQixDQVRqQjs7QUNUQSxJQUFJc0gscUJBQW1CLEdBQUdwSixxQkFBMUI7O0lBRUFULG1CQUFBLEdBQWlCLFVBQVVGLEVBQVYsRUFBYztBQUM3QixNQUFJK0YsTUFBTSxHQUFHZ0UscUJBQW1CLENBQUMvSixFQUFELENBQWhDO0FBQ0EsTUFBSStGLE1BQU0sR0FBRyxDQUFiLEVBQWdCLE1BQU1tZCxVQUFVLENBQUMsbUNBQUQsQ0FBaEI7QUFDaEIsU0FBT25kLE1BQVA7QUFDRCxDQUpEOztBQ0ZBLElBQUkwcUMsbUJBQWlCLEdBQUc5dkMsbUJBQXhCOztJQUVBVCxVQUFBLEdBQWlCLFVBQVVGLEVBQVYsRUFBYzB3QyxLQUFkLEVBQXFCO0FBQ3BDLE1BQUl0cUIsTUFBTSxHQUFHcXFCLG1CQUFpQixDQUFDendDLEVBQUQsQ0FBOUI7QUFDQSxNQUFJb21CLE1BQU0sR0FBR3NxQixLQUFiLEVBQW9CLE1BQU14dEIsVUFBVSxDQUFDLGNBQUQsQ0FBaEI7QUFDcEIsU0FBT2tELE1BQVA7QUFDRCxDQUpEOztBQ0ZBLElBQUl5RCxjQUFZLEdBQUdscEIsY0FBbkI7O0FBQ0EsSUFBSWtFLFVBQVEsR0FBR2xFLFVBQWY7O0FBQ0EsSUFBSTRKLG1CQUFpQixHQUFHNUosbUJBQXhCOztBQUNBLElBQUkrVixhQUFXLEdBQUcvVixhQUFsQjs7QUFDQSxJQUFJd1YsbUJBQWlCLEdBQUd4VixtQkFBeEI7O0FBQ0EsSUFBSThWLHFCQUFxQixHQUFHOVYsdUJBQTVCOztBQUNBLElBQUlzUSxNQUFJLEdBQUd0USxtQkFBWDs7QUFDQSxJQUFJMm9CLHdCQUFzQixHQUFHM29CLG1CQUFBLENBQStDMm9CLHNCQUE1RTs7SUFFQXBwQixnQkFBQSxHQUFpQixTQUFTMlosSUFBVCxDQUFjblE7QUFBTztBQUFyQixFQUE2QztBQUM1RCxNQUFJb0gsQ0FBQyxHQUFHK1ksY0FBWSxDQUFDLElBQUQsQ0FBcEI7QUFDQSxNQUFJampCLENBQUMsR0FBRy9CLFVBQVEsQ0FBQzZFLE1BQUQsQ0FBaEI7QUFDQSxNQUFJMlEsZUFBZSxHQUFHN1gsU0FBUyxDQUFDQyxNQUFoQztBQUNBLE1BQUl1WixLQUFLLEdBQUczQixlQUFlLEdBQUcsQ0FBbEIsR0FBc0I3WCxTQUFTLENBQUMsQ0FBRCxDQUEvQixHQUFxQ1QsU0FBakQ7QUFDQSxNQUFJa2EsT0FBTyxHQUFHRCxLQUFLLEtBQUtqYSxTQUF4QjtBQUNBLE1BQUlzVSxjQUFjLEdBQUdGLG1CQUFpQixDQUFDdlAsQ0FBRCxDQUF0QztBQUNBLE1BQUlvRSxDQUFKLEVBQU92SSxNQUFQLEVBQWVzRCxNQUFmLEVBQXVCc1IsSUFBdkIsRUFBNkI1VCxRQUE3QixFQUF1QzJULElBQXZDOztBQUNBLE1BQUlmLGNBQWMsSUFBSSxDQUFDSSxxQkFBcUIsQ0FBQ0osY0FBRCxDQUE1QyxFQUE4RDtBQUM1RDVTLElBQUFBLFFBQVEsR0FBR2lULGFBQVcsQ0FBQzlQLENBQUQsRUFBSXlQLGNBQUosQ0FBdEI7QUFDQWUsSUFBQUEsSUFBSSxHQUFHM1QsUUFBUSxDQUFDMlQsSUFBaEI7QUFDQXhRLElBQUFBLENBQUMsR0FBRyxFQUFKOztBQUNBLFdBQU8sQ0FBQyxDQUFDeVEsSUFBSSxHQUFHRCxJQUFJLENBQUNqVyxJQUFMLENBQVVzQyxRQUFWLENBQVIsRUFBNkJnVSxJQUFyQyxFQUEyQztBQUN6QzdRLE1BQUFBLENBQUMsQ0FBQ2xDLElBQUYsQ0FBTzJTLElBQUksQ0FBQzdWLEtBQVo7QUFDRDtBQUNGOztBQUNELE1BQUl5YSxPQUFPLElBQUk1QixlQUFlLEdBQUcsQ0FBakMsRUFBb0M7QUFDbEMyQixJQUFBQSxLQUFLLEdBQUcvSyxNQUFJLENBQUMrSyxLQUFELEVBQVF4WixTQUFTLENBQUMsQ0FBRCxDQUFqQixFQUFzQixDQUF0QixDQUFaO0FBQ0Q7O0FBQ0RDLEVBQUFBLE1BQU0sR0FBRzhILG1CQUFpQixDQUFDM0QsQ0FBRCxDQUExQjtBQUNBYixFQUFBQSxNQUFNLEdBQUcsS0FBS3VqQix3QkFBc0IsQ0FBQ3hZLENBQUQsQ0FBM0IsRUFBZ0NyTyxNQUFoQyxDQUFUOztBQUNBLE9BQUt1SSxDQUFDLEdBQUcsQ0FBVCxFQUFZdkksTUFBTSxHQUFHdUksQ0FBckIsRUFBd0JBLENBQUMsRUFBekIsRUFBNkI7QUFDM0JqRixJQUFBQSxNQUFNLENBQUNpRixDQUFELENBQU4sR0FBWWlSLE9BQU8sR0FBR0QsS0FBSyxDQUFDcFYsQ0FBQyxDQUFDb0UsQ0FBRCxDQUFGLEVBQU9BLENBQVAsQ0FBUixHQUFvQnBFLENBQUMsQ0FBQ29FLENBQUQsQ0FBeEM7QUFDRDs7QUFDRCxTQUFPakYsTUFBUDtBQUNELENBekJEOztBQ1JBLElBQUlzTSxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlMLFFBQU0sR0FBR0ssUUFBYjs7QUFDQSxJQUFJeUYsYUFBVyxHQUFHekYsV0FBbEI7O0FBQ0EsSUFBSWd3Qyw2Q0FBMkMsR0FBR2h3QyxxQ0FBbEQ7O0FBQ0EsSUFBSWlwQixxQkFBbUIsR0FBR2pwQixtQkFBMUI7O0FBQ0EsSUFBSXFwQixpQkFBaUIsR0FBR3JwQixXQUF4Qjs7QUFDQSxJQUFJNmpCLFlBQVUsR0FBRzdqQixZQUFqQjs7QUFDQSxJQUFJNEYsMEJBQXdCLEdBQUc1RiwwQkFBL0I7O0FBQ0EsSUFBSThHLDZCQUEyQixHQUFHOUcsNkJBQWxDOztBQUNBLElBQUl5MUIsZ0JBQWdCLEdBQUd6MUIsa0JBQXZCOztBQUNBLElBQUl5SixVQUFRLEdBQUd6SixVQUFmOztBQUNBLElBQUk4akIsT0FBTyxHQUFHOWpCLFNBQWQ7O0FBQ0EsSUFBSWl3QyxVQUFRLEdBQUdqd0MsVUFBZjs7QUFDQSxJQUFJOEYsZUFBYSxHQUFHOUYsZUFBcEI7O0FBQ0EsSUFBSW9FLFFBQU0sR0FBR3BFLGdCQUFiOztBQUNBLElBQUlrQixTQUFPLEdBQUdsQixTQUFkOztBQUNBLElBQUlxRCxVQUFRLEdBQUdyRCxVQUFmOztBQUNBLElBQUk4RSxRQUFRLEdBQUc5RSxVQUFmOztBQUNBLElBQUk2TyxRQUFNLEdBQUc3TyxjQUFiOztBQUNBLElBQUlnVixjQUFjLEdBQUdoVixzQkFBckI7O0FBQ0EsSUFBSXlLLHFCQUFtQixHQUFHeksseUJBQUEsQ0FBc0RrRyxDQUFoRjs7QUFDQSxJQUFJZ3FDLGdCQUFjLEdBQUdsd0MsZ0JBQXJCOztBQUNBLElBQUlrUixTQUFPLEdBQUdsUixjQUFBLENBQXdDa1IsT0FBdEQ7O0FBQ0EsSUFBSTRRLFlBQVUsR0FBRzloQixZQUFqQjs7QUFDQSxJQUFJc0csb0JBQW9CLEdBQUd0RyxvQkFBM0I7O0FBQ0EsSUFBSTZLLDhCQUE4QixHQUFHN0ssOEJBQXJDOztBQUNBLElBQUlxSSxxQkFBbUIsR0FBR3JJLGFBQTFCOztBQUNBLElBQUk4dUIsaUJBQWlCLEdBQUc5dUIsbUJBQXhCOztBQUVBLElBQUl1SSxrQkFBZ0IsR0FBR0YscUJBQW1CLENBQUNsSSxHQUEzQztBQUNBLElBQUlnUyxrQkFBZ0IsR0FBRzlKLHFCQUFtQixDQUFDbkIsR0FBM0M7QUFDQSxJQUFJcUwsb0JBQW9CLEdBQUdqTSxvQkFBb0IsQ0FBQ0osQ0FBaEQ7QUFDQSxJQUFJb00sOEJBQThCLEdBQUd6SCw4QkFBOEIsQ0FBQzNFLENBQXBFO0FBQ0EsSUFBSWlxQyxLQUFLLEdBQUc3d0MsSUFBSSxDQUFDNndDLEtBQWpCO0FBQ0EsSUFBSTV0QixZQUFVLEdBQUc1aUIsUUFBTSxDQUFDNGlCLFVBQXhCO0FBQ0EsSUFBSUYsYUFBVyxHQUFHZ0gsaUJBQWlCLENBQUNoSCxXQUFwQztBQUNBLElBQUlDLFVBQVEsR0FBRytHLGlCQUFpQixDQUFDL0csUUFBakM7QUFDQSxJQUFJa0YseUJBQXlCLEdBQUd5QixxQkFBbUIsQ0FBQ3pCLHlCQUFwRDtBQUNBLElBQUlELHlCQUF1QixHQUFHMEIscUJBQW1CLENBQUMxQix1QkFBbEQ7QUFDQSxJQUFJRCxlQUFlLEdBQUcyQixxQkFBbUIsQ0FBQzNCLGVBQTFDO0FBQ0EsSUFBSUgsVUFBVSxHQUFHOEIscUJBQW1CLENBQUM5QixVQUFyQztBQUNBLElBQUlDLG1CQUFtQixHQUFHNkIscUJBQW1CLENBQUM3QixtQkFBOUM7QUFDQSxJQUFJdUIsd0JBQXNCLEdBQUdNLHFCQUFtQixDQUFDTixzQkFBakQ7QUFDQSxJQUFJRixZQUFZLEdBQUdRLHFCQUFtQixDQUFDUixZQUF2QztBQUNBLElBQUkybkIsaUJBQWlCLEdBQUcsbUJBQXhCO0FBQ0EsSUFBSWpzQixZQUFZLEdBQUcsY0FBbkI7O0FBRUEsSUFBSWtzQixRQUFRLEdBQUcsVUFBVWxnQyxDQUFWLEVBQWEyYyxJQUFiLEVBQW1CO0FBQ2hDLE1BQUl2akIsS0FBSyxHQUFHLENBQVo7QUFDQSxNQUFJekgsTUFBTSxHQUFHZ3JCLElBQUksQ0FBQ2hyQixNQUFsQjtBQUNBLE1BQUlzRCxNQUFNLEdBQUcsS0FBS3VqQix3QkFBc0IsQ0FBQ3hZLENBQUQsQ0FBM0IsRUFBZ0NyTyxNQUFoQyxDQUFiOztBQUNBLFNBQU9BLE1BQU0sR0FBR3lILEtBQWhCLEVBQXVCbkUsTUFBTSxDQUFDbUUsS0FBRCxDQUFOLEdBQWdCdWpCLElBQUksQ0FBQ3ZqQixLQUFLLEVBQU4sQ0FBcEI7O0FBQ3ZCLFNBQU9uRSxNQUFQO0FBQ0QsQ0FORDs7QUFRQSxJQUFJNmYsU0FBUyxHQUFHLFVBQVU1bEIsRUFBVixFQUFjc0UsR0FBZCxFQUFtQjtBQUNqQzRPLEVBQUFBLG9CQUFvQixDQUFDbFQsRUFBRCxFQUFLc0UsR0FBTCxFQUFVO0FBQUV4RCxJQUFBQSxHQUFHLEVBQUUsWUFBWTtBQUMvQyxhQUFPb0ksa0JBQWdCLENBQUMsSUFBRCxDQUFoQixDQUF1QjVFLEdBQXZCLENBQVA7QUFDRDtBQUY2QixHQUFWLENBQXBCO0FBR0QsQ0FKRDs7QUFNQSxJQUFJMnNDLGFBQWEsR0FBRyxVQUFVanhDLEVBQVYsRUFBYztBQUNoQyxNQUFJbXBCLEtBQUo7QUFDQSxTQUFPbnBCLEVBQUUsWUFBWWdqQixhQUFkLElBQTZCLENBQUNtRyxLQUFLLEdBQUd0bkIsU0FBTyxDQUFDN0IsRUFBRCxDQUFoQixLQUF5QixhQUF0RCxJQUF1RW1wQixLQUFLLElBQUksbUJBQXZGO0FBQ0QsQ0FIRDs7QUFLQSxJQUFJK25CLGlCQUFpQixHQUFHLFVBQVV6bEMsTUFBVixFQUFrQm5ILEdBQWxCLEVBQXVCO0FBQzdDLFNBQU84a0IsWUFBWSxDQUFDM2QsTUFBRCxDQUFaLElBQ0YsQ0FBQ2hHLFFBQVEsQ0FBQ25CLEdBQUQsQ0FEUCxJQUVGQSxHQUFHLElBQUltSCxNQUZMLElBR0YycUIsZ0JBQWdCLENBQUMsQ0FBQzl4QixHQUFGLENBSGQsSUFJRkEsR0FBRyxJQUFJLENBSlo7QUFLRCxDQU5EOztBQVFBLElBQUk2c0MsK0JBQStCLEdBQUcsU0FBU2x3Qyx3QkFBVCxDQUFrQ3dLLE1BQWxDLEVBQTBDbkgsR0FBMUMsRUFBK0M7QUFDbkZBLEVBQUFBLEdBQUcsR0FBR21DLGVBQWEsQ0FBQ25DLEdBQUQsQ0FBbkI7QUFDQSxTQUFPNHNDLGlCQUFpQixDQUFDemxDLE1BQUQsRUFBU25ILEdBQVQsQ0FBakIsR0FDSGlDLDBCQUF3QixDQUFDLENBQUQsRUFBSWtGLE1BQU0sQ0FBQ25ILEdBQUQsQ0FBVixDQURyQixHQUVIMk8sOEJBQThCLENBQUN4SCxNQUFELEVBQVNuSCxHQUFULENBRmxDO0FBR0QsQ0FMRDs7QUFPQSxJQUFJOHNDLHFCQUFxQixHQUFHLFNBQVN2d0MsY0FBVCxDQUF3QjRLLE1BQXhCLEVBQWdDbkgsR0FBaEMsRUFBcUNqRCxVQUFyQyxFQUFpRDtBQUMzRWlELEVBQUFBLEdBQUcsR0FBR21DLGVBQWEsQ0FBQ25DLEdBQUQsQ0FBbkI7O0FBQ0EsTUFBSTRzQyxpQkFBaUIsQ0FBQ3psQyxNQUFELEVBQVNuSCxHQUFULENBQWpCLElBQ0NOLFVBQVEsQ0FBQzNDLFVBQUQsQ0FEVCxJQUVDMEQsUUFBTSxDQUFDMUQsVUFBRCxFQUFhLE9BQWIsQ0FGUCxJQUdDLENBQUMwRCxRQUFNLENBQUMxRCxVQUFELEVBQWEsS0FBYixDQUhSLElBSUMsQ0FBQzBELFFBQU0sQ0FBQzFELFVBQUQsRUFBYSxLQUFiLENBSlI7QUFBQSxLQU1DLENBQUNBLFVBQVUsQ0FBQ0ksWUFOYixLQU9FLENBQUNzRCxRQUFNLENBQUMxRCxVQUFELEVBQWEsVUFBYixDQUFQLElBQW1DQSxVQUFVLENBQUNLLFFBUGhELE1BUUUsQ0FBQ3FELFFBQU0sQ0FBQzFELFVBQUQsRUFBYSxZQUFiLENBQVAsSUFBcUNBLFVBQVUsQ0FBQ0MsVUFSbEQsQ0FBSixFQVNFO0FBQ0FtSyxJQUFBQSxNQUFNLENBQUNuSCxHQUFELENBQU4sR0FBY2pELFVBQVUsQ0FBQ0csS0FBekI7QUFDQSxXQUFPaUssTUFBUDtBQUNEOztBQUFDLFNBQU95SCxvQkFBb0IsQ0FBQ3pILE1BQUQsRUFBU25ILEdBQVQsRUFBY2pELFVBQWQsQ0FBM0I7QUFDSCxDQWZEOztBQWlCQSxJQUFJK0UsYUFBSixFQUFpQjtBQUNmLE1BQUksQ0FBQytoQix5QkFBTCxFQUFnQztBQUM5QjNjLElBQUFBLDhCQUE4QixDQUFDM0UsQ0FBL0IsR0FBbUNzcUMsK0JBQW5DO0FBQ0FscUMsSUFBQUEsb0JBQW9CLENBQUNKLENBQXJCLEdBQXlCdXFDLHFCQUF6QjtBQUNBeHJCLElBQUFBLFNBQVMsQ0FBQ21DLG1CQUFELEVBQXNCLFFBQXRCLENBQVQ7QUFDQW5DLElBQUFBLFNBQVMsQ0FBQ21DLG1CQUFELEVBQXNCLFlBQXRCLENBQVQ7QUFDQW5DLElBQUFBLFNBQVMsQ0FBQ21DLG1CQUFELEVBQXNCLFlBQXRCLENBQVQ7QUFDQW5DLElBQUFBLFNBQVMsQ0FBQ21DLG1CQUFELEVBQXNCLFFBQXRCLENBQVQ7QUFDRDs7QUFFRDFWLEVBQUFBLElBQUMsQ0FBQztBQUFFNUcsSUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JnQixJQUFBQSxJQUFJLEVBQUUsSUFBMUI7QUFBZ0NJLElBQUFBLE1BQU0sRUFBRSxDQUFDc2I7QUFBekMsR0FBRCxFQUF1RTtBQUN0RWxuQixJQUFBQSx3QkFBd0IsRUFBRWt3QywrQkFENEM7QUFFdEV0d0MsSUFBQUEsY0FBYyxFQUFFdXdDO0FBRnNELEdBQXZFLENBQUQ7O0FBS0FseEMsRUFBQUEsNkJBQUEsR0FBaUIsVUFBVStILElBQVYsRUFBZ0J5bkIsT0FBaEIsRUFBeUIyaEIsT0FBekIsRUFBa0M7QUFDakQsUUFBSVgsS0FBSyxHQUFHem9DLElBQUksQ0FBQ2hGLEtBQUwsQ0FBVyxNQUFYLEVBQW1CLENBQW5CLElBQXdCLENBQXBDO0FBQ0EsUUFBSXVmLGdCQUFnQixHQUFHdmEsSUFBSSxJQUFJb3BDLE9BQU8sR0FBRyxTQUFILEdBQWUsRUFBMUIsQ0FBSixHQUFvQyxPQUEzRDtBQUNBLFFBQUlDLE1BQU0sR0FBRyxRQUFRcnBDLElBQXJCO0FBQ0EsUUFBSXNwQyxNQUFNLEdBQUcsUUFBUXRwQyxJQUFyQjtBQUNBLFFBQUl1cEMsMkJBQTJCLEdBQUdseEMsUUFBTSxDQUFDa2lCLGdCQUFELENBQXhDO0FBQ0EsUUFBSWtILHFCQUFxQixHQUFHOG5CLDJCQUE1QjtBQUNBLFFBQUlDLDhCQUE4QixHQUFHL25CLHFCQUFxQixJQUFJQSxxQkFBcUIsQ0FBQy9nQixTQUFwRjtBQUNBLFFBQUlxbkIsUUFBUSxHQUFHLEVBQWY7O0FBRUEsUUFBSW1JLE1BQU0sR0FBRyxVQUFVbm9CLElBQVYsRUFBZ0I5RixLQUFoQixFQUF1QjtBQUNsQyxVQUFJNEIsSUFBSSxHQUFHNUMsa0JBQWdCLENBQUM4RyxJQUFELENBQTNCO0FBQ0EsYUFBT2xFLElBQUksQ0FBQytaLElBQUwsQ0FBVXlyQixNQUFWLEVBQWtCcG5DLEtBQUssR0FBR3dtQyxLQUFSLEdBQWdCNWtDLElBQUksQ0FBQ21hLFVBQXZDLEVBQW1ELElBQW5ELENBQVA7QUFDRCxLQUhEOztBQUtBLFFBQUk1UixNQUFNLEdBQUcsVUFBVXJFLElBQVYsRUFBZ0I5RixLQUFoQixFQUF1QjFJLEtBQXZCLEVBQThCO0FBQ3pDLFVBQUlzSyxJQUFJLEdBQUc1QyxrQkFBZ0IsQ0FBQzhHLElBQUQsQ0FBM0I7QUFDQSxVQUFJcWhDLE9BQUosRUFBYTd2QyxLQUFLLEdBQUcsQ0FBQ0EsS0FBSyxHQUFHc3ZDLEtBQUssQ0FBQ3R2QyxLQUFELENBQWQsSUFBeUIsQ0FBekIsR0FBNkIsQ0FBN0IsR0FBaUNBLEtBQUssR0FBRyxJQUFSLEdBQWUsSUFBZixHQUFzQkEsS0FBSyxHQUFHLElBQXZFO0FBQ2JzSyxNQUFBQSxJQUFJLENBQUMrWixJQUFMLENBQVUwckIsTUFBVixFQUFrQnJuQyxLQUFLLEdBQUd3bUMsS0FBUixHQUFnQjVrQyxJQUFJLENBQUNtYSxVQUF2QyxFQUFtRHprQixLQUFuRCxFQUEwRCxJQUExRDtBQUNELEtBSkQ7O0FBTUEsUUFBSWt3QyxVQUFVLEdBQUcsVUFBVTFoQyxJQUFWLEVBQWdCOUYsS0FBaEIsRUFBdUI7QUFDdENnSixNQUFBQSxvQkFBb0IsQ0FBQ2xELElBQUQsRUFBTzlGLEtBQVAsRUFBYztBQUNoQ3BKLFFBQUFBLEdBQUcsRUFBRSxZQUFZO0FBQ2YsaUJBQU9xM0IsTUFBTSxDQUFDLElBQUQsRUFBT2p1QixLQUFQLENBQWI7QUFDRCxTQUgrQjtBQUloQ3JDLFFBQUFBLEdBQUcsRUFBRSxVQUFVckcsS0FBVixFQUFpQjtBQUNwQixpQkFBTzZTLE1BQU0sQ0FBQyxJQUFELEVBQU9uSyxLQUFQLEVBQWMxSSxLQUFkLENBQWI7QUFDRCxTQU4rQjtBQU9oQ0YsUUFBQUEsVUFBVSxFQUFFO0FBUG9CLE9BQWQsQ0FBcEI7QUFTRCxLQVZEOztBQVlBLFFBQUksQ0FBQzZtQix5QkFBTCxFQUFnQztBQUM5QnVCLE1BQUFBLHFCQUFxQixHQUFHZ0csT0FBTyxDQUFDLFVBQVUxZixJQUFWLEVBQWdCbEUsSUFBaEIsRUFBc0JzYSxNQUF0QixFQUE4QnVyQixPQUE5QixFQUF1QztBQUNyRW50QixRQUFBQSxZQUFVLENBQUN4VSxJQUFELEVBQU8wWixxQkFBUCxFQUE4QmxILGdCQUE5QixDQUFWO0FBQ0EsWUFBSXRZLEtBQUssR0FBRyxDQUFaO0FBQ0EsWUFBSStiLFVBQVUsR0FBRyxDQUFqQjtBQUNBLFlBQUl2QyxNQUFKLEVBQVlzQyxVQUFaLEVBQXdCdmpCLE1BQXhCOztBQUNBLFlBQUksQ0FBQ3VCLFVBQVEsQ0FBQzhILElBQUQsQ0FBYixFQUFxQjtBQUNuQnJKLFVBQUFBLE1BQU0sR0FBR2dpQixPQUFPLENBQUMzWSxJQUFELENBQWhCO0FBQ0FrYSxVQUFBQSxVQUFVLEdBQUd2akIsTUFBTSxHQUFHaXVDLEtBQXRCO0FBQ0FodEIsVUFBQUEsTUFBTSxHQUFHLElBQUlWLGFBQUosQ0FBZ0JnRCxVQUFoQixDQUFUO0FBQ0QsU0FKRCxNQUlPLElBQUlpckIsYUFBYSxDQUFDbmxDLElBQUQsQ0FBakIsRUFBeUI7QUFDOUI0WCxVQUFBQSxNQUFNLEdBQUc1WCxJQUFUO0FBQ0FtYSxVQUFBQSxVQUFVLEdBQUcycUIsVUFBUSxDQUFDeHFCLE1BQUQsRUFBU3NxQixLQUFULENBQXJCO0FBQ0EsY0FBSWtCLElBQUksR0FBRzlsQyxJQUFJLENBQUNrYSxVQUFoQjs7QUFDQSxjQUFJMnJCLE9BQU8sS0FBSzV2QyxTQUFoQixFQUEyQjtBQUN6QixnQkFBSTZ2QyxJQUFJLEdBQUdsQixLQUFYLEVBQWtCLE1BQU14dEIsWUFBVSxDQUFDNEIsWUFBRCxDQUFoQjtBQUNsQmtCLFlBQUFBLFVBQVUsR0FBRzRyQixJQUFJLEdBQUczckIsVUFBcEI7QUFDQSxnQkFBSUQsVUFBVSxHQUFHLENBQWpCLEVBQW9CLE1BQU05QyxZQUFVLENBQUM0QixZQUFELENBQWhCO0FBQ3JCLFdBSkQsTUFJTztBQUNMa0IsWUFBQUEsVUFBVSxHQUFHNWIsVUFBUSxDQUFDdW5DLE9BQUQsQ0FBUixHQUFvQmpCLEtBQWpDO0FBQ0EsZ0JBQUkxcUIsVUFBVSxHQUFHQyxVQUFiLEdBQTBCMnJCLElBQTlCLEVBQW9DLE1BQU0xdUIsWUFBVSxDQUFDNEIsWUFBRCxDQUFoQjtBQUNyQzs7QUFDRHJpQixVQUFBQSxNQUFNLEdBQUd1akIsVUFBVSxHQUFHMHFCLEtBQXRCO0FBQ0QsU0FiTSxNQWFBLElBQUl0bkIsWUFBWSxDQUFDdGQsSUFBRCxDQUFoQixFQUF3QjtBQUM3QixpQkFBT2tsQyxRQUFRLENBQUN0bkIscUJBQUQsRUFBd0I1ZCxJQUF4QixDQUFmO0FBQ0QsU0FGTSxNQUVBO0FBQ0wsaUJBQU8ra0MsZ0JBQWMsQ0FBQzF2QyxJQUFmLENBQW9CdW9CLHFCQUFwQixFQUEyQzVkLElBQTNDLENBQVA7QUFDRDs7QUFDRGdILFFBQUFBLGtCQUFnQixDQUFDOUMsSUFBRCxFQUFPO0FBQ3JCMFQsVUFBQUEsTUFBTSxFQUFFQSxNQURhO0FBRXJCdUMsVUFBQUEsVUFBVSxFQUFFQSxVQUZTO0FBR3JCRCxVQUFBQSxVQUFVLEVBQUVBLFVBSFM7QUFJckJ2akIsVUFBQUEsTUFBTSxFQUFFQSxNQUphO0FBS3JCb2pCLFVBQUFBLElBQUksRUFBRSxJQUFJNUMsVUFBSixDQUFhUyxNQUFiO0FBTGUsU0FBUCxDQUFoQjs7QUFPQSxlQUFPeFosS0FBSyxHQUFHekgsTUFBZixFQUF1Qml2QyxVQUFVLENBQUMxaEMsSUFBRCxFQUFPOUYsS0FBSyxFQUFaLENBQVY7QUFDeEIsT0FuQzhCLENBQS9CO0FBcUNBLFVBQUl5TCxjQUFKLEVBQW9CQSxjQUFjLENBQUMrVCxxQkFBRCxFQUF3QjVCLFVBQXhCLENBQWQ7QUFDcEIycEIsTUFBQUEsOEJBQThCLEdBQUcvbkIscUJBQXFCLENBQUMvZ0IsU0FBdEIsR0FBa0M2RyxRQUFNLENBQUN1WSxtQkFBRCxDQUF6RTtBQUNELEtBeENELE1Bd0NPLElBQUk0b0IsNkNBQUosRUFBaUQ7QUFDdERqbkIsTUFBQUEscUJBQXFCLEdBQUdnRyxPQUFPLENBQUMsVUFBVU4sS0FBVixFQUFpQnRqQixJQUFqQixFQUF1QitsQyxnQkFBdkIsRUFBeUNGLE9BQXpDLEVBQWtEO0FBQ2hGbnRCLFFBQUFBLFlBQVUsQ0FBQzRLLEtBQUQsRUFBUTFGLHFCQUFSLEVBQStCbEgsZ0JBQS9CLENBQVY7QUFDQSxlQUFPaU4saUJBQWlCLENBQUMsWUFBWTtBQUNuQyxjQUFJLENBQUN6ckIsVUFBUSxDQUFDOEgsSUFBRCxDQUFiLEVBQXFCLE9BQU8sSUFBSTBsQywyQkFBSixDQUFnQy9zQixPQUFPLENBQUMzWSxJQUFELENBQXZDLENBQVA7QUFDckIsY0FBSW1sQyxhQUFhLENBQUNubEMsSUFBRCxDQUFqQixFQUF5QixPQUFPNmxDLE9BQU8sS0FBSzV2QyxTQUFaLEdBQzVCLElBQUl5dkMsMkJBQUosQ0FBZ0MxbEMsSUFBaEMsRUFBc0M4a0MsVUFBUSxDQUFDaUIsZ0JBQUQsRUFBbUJuQixLQUFuQixDQUE5QyxFQUF5RWlCLE9BQXpFLENBRDRCLEdBRTVCRSxnQkFBZ0IsS0FBSzl2QyxTQUFyQixHQUNFLElBQUl5dkMsMkJBQUosQ0FBZ0MxbEMsSUFBaEMsRUFBc0M4a0MsVUFBUSxDQUFDaUIsZ0JBQUQsRUFBbUJuQixLQUFuQixDQUE5QyxDQURGLEdBRUUsSUFBSWMsMkJBQUosQ0FBZ0MxbEMsSUFBaEMsQ0FKbUI7QUFLekIsY0FBSXNkLFlBQVksQ0FBQ3RkLElBQUQsQ0FBaEIsRUFBd0IsT0FBT2tsQyxRQUFRLENBQUN0bkIscUJBQUQsRUFBd0I1ZCxJQUF4QixDQUFmO0FBQ3hCLGlCQUFPK2tDLGdCQUFjLENBQUMxdkMsSUFBZixDQUFvQnVvQixxQkFBcEIsRUFBMkM1ZCxJQUEzQyxDQUFQO0FBQ0QsU0FUd0IsRUFBRCxFQVNuQnNqQixLQVRtQixFQVNaMUYscUJBVFksQ0FBeEI7QUFVRCxPQVo4QixDQUEvQjtBQWNBLFVBQUkvVCxjQUFKLEVBQW9CQSxjQUFjLENBQUMrVCxxQkFBRCxFQUF3QjVCLFVBQXhCLENBQWQ7QUFDcEJqVyxNQUFBQSxTQUFPLENBQUN6RyxxQkFBbUIsQ0FBQ29tQywyQkFBRCxDQUFwQixFQUFtRCxVQUFVbHRDLEdBQVYsRUFBZTtBQUN2RSxZQUFJLEVBQUVBLEdBQUcsSUFBSW9sQixxQkFBVCxDQUFKLEVBQXFDO0FBQ25DamlCLFVBQUFBLDZCQUEyQixDQUFDaWlCLHFCQUFELEVBQXdCcGxCLEdBQXhCLEVBQTZCa3RDLDJCQUEyQixDQUFDbHRDLEdBQUQsQ0FBeEQsQ0FBM0I7QUFDRDtBQUNGLE9BSk0sQ0FBUDtBQUtBb2xCLE1BQUFBLHFCQUFxQixDQUFDL2dCLFNBQXRCLEdBQWtDOG9DLDhCQUFsQztBQUNEOztBQUVELFFBQUlBLDhCQUE4QixDQUFDMWdDLFdBQS9CLEtBQStDMlkscUJBQW5ELEVBQTBFO0FBQ3hFamlCLE1BQUFBLDZCQUEyQixDQUFDZ3FDLDhCQUFELEVBQWlDLGFBQWpDLEVBQWdEL25CLHFCQUFoRCxDQUEzQjtBQUNEOztBQUVEamlCLElBQUFBLDZCQUEyQixDQUFDZ3FDLDhCQUFELEVBQWlDdnBCLHlCQUFqQyxFQUEwRHdCLHFCQUExRCxDQUEzQjs7QUFFQSxRQUFJekIsZUFBSixFQUFxQjtBQUNuQnhnQixNQUFBQSw2QkFBMkIsQ0FBQ2dxQyw4QkFBRCxFQUFpQ3hwQixlQUFqQyxFQUFrRHpGLGdCQUFsRCxDQUEzQjtBQUNEOztBQUVEd04sSUFBQUEsUUFBUSxDQUFDeE4sZ0JBQUQsQ0FBUixHQUE2QmtILHFCQUE3QjtBQUVBclgsSUFBQUEsSUFBQyxDQUFDO0FBQ0EvUixNQUFBQSxNQUFNLEVBQUUsSUFEUjtBQUNjdU0sTUFBQUEsTUFBTSxFQUFFNmMscUJBQXFCLElBQUk4bkIsMkJBRC9DO0FBQzRFanVDLE1BQUFBLElBQUksRUFBRSxDQUFDNGtCO0FBRG5GLEtBQUQsRUFFRTZILFFBRkYsQ0FBRDs7QUFJQSxRQUFJLEVBQUUrZ0IsaUJBQWlCLElBQUlybkIscUJBQXZCLENBQUosRUFBbUQ7QUFDakRqaUIsTUFBQUEsNkJBQTJCLENBQUNpaUIscUJBQUQsRUFBd0JxbkIsaUJBQXhCLEVBQTJDTCxLQUEzQyxDQUEzQjtBQUNEOztBQUVELFFBQUksRUFBRUssaUJBQWlCLElBQUlVLDhCQUF2QixDQUFKLEVBQTREO0FBQzFEaHFDLE1BQUFBLDZCQUEyQixDQUFDZ3FDLDhCQUFELEVBQWlDVixpQkFBakMsRUFBb0RMLEtBQXBELENBQTNCO0FBQ0Q7O0FBRURqdUIsSUFBQUEsWUFBVSxDQUFDRCxnQkFBRCxDQUFWO0FBQ0QsR0ExSEQ7QUEySEQsQ0ExSUQsTUEwSU90aUIsNkJBQUEsR0FBaUIsWUFBWTtBQUFFO0FBQWEsQ0FBNUM7O0FDN09QLElBQUk0eEMsNkJBQTJCLEdBQUdueEMsNkJBQWxDO0FBR0E7OztBQUNBbXhDLDZCQUEyQixDQUFDLFNBQUQsRUFBWSxVQUFVbmdCLElBQVYsRUFBZ0I7QUFDckQsU0FBTyxTQUFTOUksWUFBVCxDQUFzQi9jLElBQXRCLEVBQTRCbWEsVUFBNUIsRUFBd0N4akIsTUFBeEMsRUFBZ0Q7QUFDckQsV0FBT2t2QixJQUFJLENBQUMsSUFBRCxFQUFPN2xCLElBQVAsRUFBYW1hLFVBQWIsRUFBeUJ4akIsTUFBekIsQ0FBWDtBQUNELEdBRkQ7QUFHRCxDQUowQixDQUEzQjs7QUNKQSxJQUFJcXZDLDZCQUEyQixHQUFHbnhDLDZCQUFsQztBQUdBOzs7QUFDQW14Qyw2QkFBMkIsQ0FBQyxTQUFELEVBQVksVUFBVW5nQixJQUFWLEVBQWdCO0FBQ3JELFNBQU8sU0FBUzdJLFlBQVQsQ0FBc0JoZCxJQUF0QixFQUE0Qm1hLFVBQTVCLEVBQXdDeGpCLE1BQXhDLEVBQWdEO0FBQ3JELFdBQU9rdkIsSUFBSSxDQUFDLElBQUQsRUFBTzdsQixJQUFQLEVBQWFtYSxVQUFiLEVBQXlCeGpCLE1BQXpCLENBQVg7QUFDRCxHQUZEO0FBR0QsQ0FKMEIsQ0FBM0I7O0FDSkEsSUFBSXF2Qyw2QkFBMkIsR0FBR254Qyw2QkFBbEM7QUFHQTs7O0FBQ0FteEMsNkJBQTJCLENBQUMsTUFBRCxFQUFTLFVBQVVuZ0IsSUFBVixFQUFnQjtBQUNsRCxTQUFPLFNBQVNqSyxTQUFULENBQW1CNWIsSUFBbkIsRUFBeUJtYSxVQUF6QixFQUFxQ3hqQixNQUFyQyxFQUE2QztBQUNsRCxXQUFPa3ZCLElBQUksQ0FBQyxJQUFELEVBQU83bEIsSUFBUCxFQUFhbWEsVUFBYixFQUF5QnhqQixNQUF6QixDQUFYO0FBQ0QsR0FGRDtBQUdELENBSjBCLENBQTNCOztBQ0pBLElBQUlxdkMsNkJBQTJCLEdBQUdueEMsNkJBQWxDO0FBR0E7OztBQUNBbXhDLDZCQUEyQixDQUFDLE9BQUQsRUFBVSxVQUFVbmdCLElBQVYsRUFBZ0I7QUFDbkQsU0FBTyxTQUFTbEosVUFBVCxDQUFvQjNjLElBQXBCLEVBQTBCbWEsVUFBMUIsRUFBc0N4akIsTUFBdEMsRUFBOEM7QUFDbkQsV0FBT2t2QixJQUFJLENBQUMsSUFBRCxFQUFPN2xCLElBQVAsRUFBYW1hLFVBQWIsRUFBeUJ4akIsTUFBekIsQ0FBWDtBQUNELEdBRkQ7QUFHRCxDQUowQixDQUEzQjs7QUNKQSxJQUFJcXZDLDZCQUEyQixHQUFHbnhDLDZCQUFsQztBQUdBOzs7QUFDQW14Qyw2QkFBMkIsQ0FBQyxPQUFELEVBQVUsVUFBVW5nQixJQUFWLEVBQWdCO0FBQ25ELFNBQU8sU0FBU2hKLFVBQVQsQ0FBb0I3YyxJQUFwQixFQUEwQm1hLFVBQTFCLEVBQXNDeGpCLE1BQXRDLEVBQThDO0FBQ25ELFdBQU9rdkIsSUFBSSxDQUFDLElBQUQsRUFBTzdsQixJQUFQLEVBQWFtYSxVQUFiLEVBQXlCeGpCLE1BQXpCLENBQVg7QUFDRCxHQUZEO0FBR0QsQ0FKMEIsQ0FBM0I7O0FDSkEsSUFBSXF2Qyw2QkFBMkIsR0FBR254Qyw2QkFBbEM7QUFHQTs7O0FBQ0FteEMsNkJBQTJCLENBQUMsT0FBRCxFQUFVLFVBQVVuZ0IsSUFBVixFQUFnQjtBQUNuRCxTQUFPLFNBQVNuSixVQUFULENBQW9CMWMsSUFBcEIsRUFBMEJtYSxVQUExQixFQUFzQ3hqQixNQUF0QyxFQUE4QztBQUNuRCxXQUFPa3ZCLElBQUksQ0FBQyxJQUFELEVBQU83bEIsSUFBUCxFQUFhbWEsVUFBYixFQUF5QnhqQixNQUF6QixDQUFYO0FBQ0QsR0FGRDtBQUdELENBSjBCLENBQTNCOztBQ0pBLElBQUlxdkMsNkJBQTJCLEdBQUdueEMsNkJBQWxDO0FBR0E7OztBQUNBbXhDLDZCQUEyQixDQUFDLE9BQUQsRUFBVSxVQUFVbmdCLElBQVYsRUFBZ0I7QUFDbkQsU0FBTyxTQUFTL0osaUJBQVQsQ0FBMkI5YixJQUEzQixFQUFpQ21hLFVBQWpDLEVBQTZDeGpCLE1BQTdDLEVBQXFEO0FBQzFELFdBQU9rdkIsSUFBSSxDQUFDLElBQUQsRUFBTzdsQixJQUFQLEVBQWFtYSxVQUFiLEVBQXlCeGpCLE1BQXpCLENBQVg7QUFDRCxHQUZEO0FBR0QsQ0FKMEIsRUFJeEIsSUFKd0IsQ0FBM0I7O0FDSkEsSUFBSXF2Qyw2QkFBMkIsR0FBR254Qyw2QkFBbEM7QUFHQTs7O0FBQ0FteEMsNkJBQTJCLENBQUMsUUFBRCxFQUFXLFVBQVVuZ0IsSUFBVixFQUFnQjtBQUNwRCxTQUFPLFNBQVNqSixXQUFULENBQXFCNWMsSUFBckIsRUFBMkJtYSxVQUEzQixFQUF1Q3hqQixNQUF2QyxFQUErQztBQUNwRCxXQUFPa3ZCLElBQUksQ0FBQyxJQUFELEVBQU83bEIsSUFBUCxFQUFhbWEsVUFBYixFQUF5QnhqQixNQUF6QixDQUFYO0FBQ0QsR0FGRDtBQUdELENBSjBCLENBQTNCOztBQ0pBLElBQUlxdkMsMkJBQTJCLEdBQUdueEMsNkJBQWxDO0FBR0E7OztBQUNBbXhDLDJCQUEyQixDQUFDLFFBQUQsRUFBVyxVQUFVbmdCLElBQVYsRUFBZ0I7QUFDcEQsU0FBTyxTQUFTL0ksV0FBVCxDQUFxQjljLElBQXJCLEVBQTJCbWEsVUFBM0IsRUFBdUN4akIsTUFBdkMsRUFBK0M7QUFDcEQsV0FBT2t2QixJQUFJLENBQUMsSUFBRCxFQUFPN2xCLElBQVAsRUFBYW1hLFVBQWIsRUFBeUJ4akIsTUFBekIsQ0FBWDtBQUNELEdBRkQ7QUFHRCxDQUowQixDQUEzQjs7QUNIQSxJQUFJbW5CLHFCQUFtQixHQUFHanBCLG1CQUExQjs7QUFDQSxJQUFJNEosbUJBQWlCLEdBQUc1SixtQkFBeEI7O0FBQ0EsSUFBSW9KLHFCQUFtQixHQUFHcEoscUJBQTFCOztBQUVBLElBQUkwb0IsYUFBVyxHQUFHTyxxQkFBbUIsQ0FBQ1AsV0FBdEM7QUFDQSxJQUFJRSx3QkFBc0IsR0FBR0sscUJBQW1CLENBQUNMLHNCQUFqRDtBQUdBOztBQUNBQSx3QkFBc0IsQ0FBQyxJQUFELEVBQU8sU0FBU25SLEVBQVQsQ0FBWWxPLEtBQVosRUFBbUI7QUFDOUMsTUFBSXRELENBQUMsR0FBR3lpQixhQUFXLENBQUMsSUFBRCxDQUFuQjtBQUNBLE1BQUloUixHQUFHLEdBQUc5TixtQkFBaUIsQ0FBQzNELENBQUQsQ0FBM0I7QUFDQSxNQUFJMFIsYUFBYSxHQUFHdk8scUJBQW1CLENBQUNHLEtBQUQsQ0FBdkM7QUFDQSxNQUFJcU8sQ0FBQyxHQUFHRCxhQUFhLElBQUksQ0FBakIsR0FBcUJBLGFBQXJCLEdBQXFDRCxHQUFHLEdBQUdDLGFBQW5EO0FBQ0EsU0FBUUMsQ0FBQyxHQUFHLENBQUosSUFBU0EsQ0FBQyxJQUFJRixHQUFmLEdBQXNCdFcsU0FBdEIsR0FBa0M2RSxDQUFDLENBQUMyUixDQUFELENBQTFDO0FBQ0QsQ0FOcUIsQ0FBdEI7O0FDVEEsSUFBSXFSLHFCQUFtQixHQUFHanBCLG1CQUExQjs7QUFDQSxJQUFJb3hDLFdBQVcsR0FBR3B4QyxlQUFsQjs7QUFFQSxJQUFJMG9CLGFBQVcsR0FBR08scUJBQW1CLENBQUNQLFdBQXRDO0FBQ0EsSUFBSUUsd0JBQXNCLEdBQUdLLHFCQUFtQixDQUFDTCxzQkFBakQ7QUFHQTs7QUFDQUEsd0JBQXNCLENBQUMsWUFBRCxFQUFlLFNBQVM3UCxVQUFULENBQW9Cak8sTUFBcEIsRUFBNEJrTztBQUFNO0FBQWxDLEVBQStDO0FBQ2xGLFNBQU9vNEIsV0FBVyxDQUFDNXdDLElBQVosQ0FBaUJrb0IsYUFBVyxDQUFDLElBQUQsQ0FBNUIsRUFBb0M1ZCxNQUFwQyxFQUE0Q2tPLEtBQTVDLEVBQW1EblgsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBekYsQ0FBUDtBQUNELENBRnFCLENBQXRCOztBQ1JBLElBQUk2bkIscUJBQW1CLEdBQUdqcEIsbUJBQTFCOztBQUNBLElBQUlzWixRQUFNLEdBQUd0WixjQUFBLENBQXdDc1IsS0FBckQ7O0FBRUEsSUFBSW9YLGFBQVcsR0FBR08scUJBQW1CLENBQUNQLFdBQXRDO0FBQ0EsSUFBSUUsd0JBQXNCLEdBQUdLLHFCQUFtQixDQUFDTCxzQkFBakQ7QUFHQTs7QUFDQUEsd0JBQXNCLENBQUMsT0FBRCxFQUFVLFNBQVN0WCxLQUFULENBQWVQO0FBQVc7QUFBMUIsRUFBMkM7QUFDekUsU0FBT3VJLFFBQU0sQ0FBQ29QLGFBQVcsQ0FBQyxJQUFELENBQVosRUFBb0IzWCxVQUFwQixFQUFnQ2xQLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUF1QkQsU0FBUyxDQUFDLENBQUQsQ0FBaEMsR0FBc0NULFNBQXRFLENBQWI7QUFDRCxDQUZxQixDQUF0Qjs7QUNSQSxJQUFJNm5CLHFCQUFtQixHQUFHanBCLG1CQUExQjs7QUFDQSxJQUFJcXhDLEtBQUssR0FBR3J4QyxXQUFaOztBQUVBLElBQUkwb0IsYUFBVyxHQUFHTyxxQkFBbUIsQ0FBQ1AsV0FBdEM7QUFDQSxJQUFJRSx3QkFBc0IsR0FBR0sscUJBQW1CLENBQUNMLHNCQUFqRDtBQUdBO0FBQ0E7O0FBQ0FBLHdCQUFzQixDQUFDLE1BQUQsRUFBUyxTQUFTblAsSUFBVCxDQUFjNVk7QUFBTTtBQUFwQixFQUF3QztBQUNyRSxTQUFPd3dDLEtBQUssQ0FBQzdoQyxLQUFOLENBQVlrWixhQUFXLENBQUMsSUFBRCxDQUF2QixFQUErQjdtQixTQUEvQixDQUFQO0FBQ0QsQ0FGcUIsQ0FBdEI7O0lDVkF0Qyw2QkFBQSxHQUFpQixVQUFVa2dCLFdBQVYsRUFBdUJxTixJQUF2QixFQUE2QjtBQUM1QyxNQUFJdmpCLEtBQUssR0FBRyxDQUFaO0FBQ0EsTUFBSXpILE1BQU0sR0FBR2dyQixJQUFJLENBQUNockIsTUFBbEI7QUFDQSxNQUFJc0QsTUFBTSxHQUFHLElBQUlxYSxXQUFKLENBQWdCM2QsTUFBaEIsQ0FBYjs7QUFDQSxTQUFPQSxNQUFNLEdBQUd5SCxLQUFoQixFQUF1Qm5FLE1BQU0sQ0FBQ21FLEtBQUQsQ0FBTixHQUFnQnVqQixJQUFJLENBQUN2akIsS0FBSyxFQUFOLENBQXBCOztBQUN2QixTQUFPbkUsTUFBUDtBQUNELENBTkQ7O0FDQUEsSUFBSTZqQixxQkFBbUIsR0FBR2pwQixtQkFBMUI7O0FBQ0EsSUFBSXNwQixvQkFBa0IsR0FBR3RwQixvQkFBekI7O0FBRUEsSUFBSXVuQix1QkFBdUIsR0FBRzBCLHFCQUFtQixDQUFDMUIsdUJBQWxEO0FBQ0EsSUFBSW9CLHdCQUFzQixHQUFHTSxxQkFBbUIsQ0FBQ04sc0JBQWpEO0FBR0E7O0lBQ0FwcEIsOEJBQUEsR0FBaUIsVUFBVTJRLGFBQVYsRUFBeUI7QUFDeEMsU0FBT3lZLHdCQUFzQixDQUFDVyxvQkFBa0IsQ0FBQ3BaLGFBQUQsRUFBZ0JBLGFBQWEsQ0FBQ3FYLHVCQUFELENBQTdCLENBQW5CLENBQTdCO0FBQ0QsQ0FGRDs7QUNSQSxJQUFJK3BCLDZCQUEyQixHQUFHdHhDLDZCQUFsQzs7QUFDQSxJQUFJdXhDLDhCQUE0QixHQUFHdnhDLDhCQUFuQzs7SUFFQVQsNEJBQUEsR0FBaUIsVUFBVW93QixRQUFWLEVBQW9CN0MsSUFBcEIsRUFBMEI7QUFDekMsU0FBT3drQiw2QkFBMkIsQ0FBQ0MsOEJBQTRCLENBQUM1aEIsUUFBRCxDQUE3QixFQUF5QzdDLElBQXpDLENBQWxDO0FBQ0QsQ0FGRDs7QUNGQSxJQUFJN0QscUJBQW1CLEdBQUdqcEIsbUJBQTFCOztBQUNBLElBQUk0WixPQUFPLEdBQUc1WixjQUFBLENBQXdDb1IsTUFBdEQ7O0FBQ0EsSUFBSW9nQyxvQkFBa0IsR0FBR3h4Qyw0QkFBekI7O0FBRUEsSUFBSTBvQixhQUFXLEdBQUdPLHFCQUFtQixDQUFDUCxXQUF0QztBQUNBLElBQUlFLHdCQUFzQixHQUFHSyxxQkFBbUIsQ0FBQ0wsc0JBQWpEO0FBR0E7O0FBQ0FBLHdCQUFzQixDQUFDLFFBQUQsRUFBVyxTQUFTeFgsTUFBVCxDQUFnQkw7QUFBVztBQUEzQixFQUE0QztBQUMzRSxNQUFJK2IsSUFBSSxHQUFHbFQsT0FBTyxDQUFDOE8sYUFBVyxDQUFDLElBQUQsQ0FBWixFQUFvQjNYLFVBQXBCLEVBQWdDbFAsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBdEUsQ0FBbEI7QUFDQSxTQUFPb3dDLG9CQUFrQixDQUFDLElBQUQsRUFBTzFrQixJQUFQLENBQXpCO0FBQ0QsQ0FIcUIsQ0FBdEI7O0FDVEEsSUFBSTdELHFCQUFtQixHQUFHanBCLG1CQUExQjs7QUFDQSxJQUFJOFosT0FBSyxHQUFHOVosY0FBQSxDQUF3Q3VSLElBQXBEOztBQUVBLElBQUltWCxhQUFXLEdBQUdPLHFCQUFtQixDQUFDUCxXQUF0QztBQUNBLElBQUlFLHdCQUFzQixHQUFHSyxxQkFBbUIsQ0FBQ0wsc0JBQWpEO0FBR0E7O0FBQ0FBLHdCQUFzQixDQUFDLE1BQUQsRUFBUyxTQUFTclgsSUFBVCxDQUFja2dDO0FBQVU7QUFBeEIsRUFBeUM7QUFDdEUsU0FBTzMzQixPQUFLLENBQUM0TyxhQUFXLENBQUMsSUFBRCxDQUFaLEVBQW9CK29CLFNBQXBCLEVBQStCNXZDLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUF1QkQsU0FBUyxDQUFDLENBQUQsQ0FBaEMsR0FBc0NULFNBQXJFLENBQVo7QUFDRCxDQUZxQixDQUF0Qjs7QUNSQSxJQUFJNm5CLHFCQUFtQixHQUFHanBCLG1CQUExQjs7QUFDQSxJQUFJaWEsVUFBVSxHQUFHamEsY0FBQSxDQUF3Q3dSLFNBQXpEOztBQUVBLElBQUlrWCxhQUFXLEdBQUdPLHFCQUFtQixDQUFDUCxXQUF0QztBQUNBLElBQUlFLHdCQUFzQixHQUFHSyxxQkFBbUIsQ0FBQ0wsc0JBQWpEO0FBR0E7O0FBQ0FBLHdCQUFzQixDQUFDLFdBQUQsRUFBYyxTQUFTcFgsU0FBVCxDQUFtQmlnQztBQUFVO0FBQTdCLEVBQThDO0FBQ2hGLFNBQU94M0IsVUFBVSxDQUFDeU8sYUFBVyxDQUFDLElBQUQsQ0FBWixFQUFvQitvQixTQUFwQixFQUErQjV2QyxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJELFNBQVMsQ0FBQyxDQUFELENBQWhDLEdBQXNDVCxTQUFyRSxDQUFqQjtBQUNELENBRnFCLENBQXRCOztBQ1JBLElBQUk2bkIscUJBQW1CLEdBQUdqcEIsbUJBQTFCOztBQUNBLElBQUlnUyxVQUFRLEdBQUdoUyxjQUFBLENBQXdDa1IsT0FBdkQ7O0FBRUEsSUFBSXdYLGFBQVcsR0FBR08scUJBQW1CLENBQUNQLFdBQXRDO0FBQ0EsSUFBSUUsd0JBQXNCLEdBQUdLLHFCQUFtQixDQUFDTCxzQkFBakQ7QUFHQTs7QUFDQUEsd0JBQXNCLENBQUMsU0FBRCxFQUFZLFNBQVMxWCxPQUFULENBQWlCSDtBQUFXO0FBQTVCLEVBQTZDO0FBQzdFaUIsRUFBQUEsVUFBUSxDQUFDMFcsYUFBVyxDQUFDLElBQUQsQ0FBWixFQUFvQjNYLFVBQXBCLEVBQWdDbFAsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBdEUsQ0FBUjtBQUNELENBRnFCLENBQXRCOztBQ1JBLElBQUk0dUMsNkNBQTJDLEdBQUdod0MscUNBQWxEOztBQUNBLElBQUlncEIsOEJBQTRCLEdBQUdocEIsbUJBQUEsQ0FBK0NncEIsNEJBQWxGOztBQUNBLElBQUlrbkIsY0FBYyxHQUFHbHdDLGdCQUFyQjtBQUdBOzs7QUFDQWdwQiw4QkFBNEIsQ0FBQyxNQUFELEVBQVNrbkIsY0FBVCxFQUF5QkYsNkNBQXpCLENBQTVCOztBQ05BLElBQUkvbUIscUJBQW1CLEdBQUdqcEIsbUJBQTFCOztBQUNBLElBQUk2YixTQUFTLEdBQUc3YixhQUFBLENBQXVDa0ssUUFBdkQ7O0FBRUEsSUFBSXdlLGFBQVcsR0FBR08scUJBQW1CLENBQUNQLFdBQXRDO0FBQ0EsSUFBSUUsd0JBQXNCLEdBQUdLLHFCQUFtQixDQUFDTCxzQkFBakQ7QUFHQTs7QUFDQUEsd0JBQXNCLENBQUMsVUFBRCxFQUFhLFNBQVMxZSxRQUFULENBQWtCK1I7QUFBYztBQUFoQyxFQUFtRDtBQUNwRixTQUFPSixTQUFTLENBQUM2TSxhQUFXLENBQUMsSUFBRCxDQUFaLEVBQW9Cek0sYUFBcEIsRUFBbUNwYSxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJELFNBQVMsQ0FBQyxDQUFELENBQWhDLEdBQXNDVCxTQUF6RSxDQUFoQjtBQUNELENBRnFCLENBQXRCOztBQ1JBLElBQUk2bkIscUJBQW1CLEdBQUdqcEIsbUJBQTFCOztBQUNBLElBQUk4YixRQUFRLEdBQUc5YixhQUFBLENBQXVDbUssT0FBdEQ7O0FBRUEsSUFBSXVlLGFBQVcsR0FBR08scUJBQW1CLENBQUNQLFdBQXRDO0FBQ0EsSUFBSUUsd0JBQXNCLEdBQUdLLHFCQUFtQixDQUFDTCxzQkFBakQ7QUFHQTs7QUFDQUEsd0JBQXNCLENBQUMsU0FBRCxFQUFZLFNBQVN6ZSxPQUFULENBQWlCOFI7QUFBYztBQUEvQixFQUFrRDtBQUNsRixTQUFPSCxRQUFRLENBQUM0TSxhQUFXLENBQUMsSUFBRCxDQUFaLEVBQW9Cek0sYUFBcEIsRUFBbUNwYSxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJELFNBQVMsQ0FBQyxDQUFELENBQWhDLEdBQXNDVCxTQUF6RSxDQUFmO0FBQ0QsQ0FGcUIsQ0FBdEI7O0FDUkEsSUFBSXpCLFFBQU0sR0FBR0ssUUFBYjs7QUFDQSxJQUFJNGMsb0JBQW9CLEdBQUc1YyxZQUFBLENBQXNDa0ksTUFBakU7O0FBQ0EsSUFBSStnQixxQkFBbUIsR0FBR2pwQixtQkFBMUI7O0FBQ0EsSUFBSTB4QyxjQUFjLEdBQUcxeEMsaUJBQXJCOztBQUNBLElBQUlpRixpQkFBZSxHQUFHakYsaUJBQXRCOztBQUVBLElBQUlzVixVQUFRLEdBQUdyUSxpQkFBZSxDQUFDLFVBQUQsQ0FBOUI7QUFDQSxJQUFJNGlCLFlBQVUsR0FBR2xvQixRQUFNLENBQUNrb0IsVUFBeEI7QUFDQSxJQUFJOHBCLFdBQVcsR0FBR0QsY0FBYyxDQUFDcDBCLE1BQWpDO0FBQ0EsSUFBSXMwQixTQUFTLEdBQUdGLGNBQWMsQ0FBQzlxQyxJQUEvQjtBQUNBLElBQUlpckMsWUFBWSxHQUFHSCxjQUFjLENBQUNuMEIsT0FBbEM7QUFDQSxJQUFJbUwsYUFBVyxHQUFHTyxxQkFBbUIsQ0FBQ1AsV0FBdEM7QUFDQSxJQUFJRSx3QkFBc0IsR0FBR0sscUJBQW1CLENBQUNMLHNCQUFqRDtBQUNBLElBQUlrcEIsd0JBQXdCLEdBQUdqcUIsWUFBVSxJQUFJQSxZQUFVLENBQUM3ZixTQUFYLENBQXFCc04sVUFBckIsQ0FBN0M7QUFFQSxJQUFJeThCLHdCQUF3QixHQUFHLENBQUMsQ0FBQ0Qsd0JBQUYsSUFBOEJBLHdCQUF3QixDQUFDanRDLElBQXpCLEtBQWtDLFFBQS9GOztBQUVBLElBQUltdEMsZ0JBQWdCLEdBQUcsU0FBUzEwQixNQUFULEdBQWtCO0FBQ3ZDLFNBQU9xMEIsV0FBVyxDQUFDbnhDLElBQVosQ0FBaUJrb0IsYUFBVyxDQUFDLElBQUQsQ0FBNUIsQ0FBUDtBQUNELENBRkQ7QUFLQTs7O0FBQ0FFLHdCQUFzQixDQUFDLFNBQUQsRUFBWSxTQUFTckwsT0FBVCxHQUFtQjtBQUNuRCxTQUFPczBCLFlBQVksQ0FBQ3J4QyxJQUFiLENBQWtCa29CLGFBQVcsQ0FBQyxJQUFELENBQTdCLENBQVA7QUFDRCxDQUZxQixDQUF0QjtBQUlBOztBQUNBRSx3QkFBc0IsQ0FBQyxNQUFELEVBQVMsU0FBU2hpQixJQUFULEdBQWdCO0FBQzdDLFNBQU9nckMsU0FBUyxDQUFDcHhDLElBQVYsQ0FBZWtvQixhQUFXLENBQUMsSUFBRCxDQUExQixDQUFQO0FBQ0QsQ0FGcUIsQ0FBdEI7QUFJQTs7QUFDQUUsd0JBQXNCLENBQUMsUUFBRCxFQUFXb3BCLGdCQUFYLEVBQTZCcDFCLG9CQUFvQixJQUFJLENBQUNtMUIsd0JBQXRELENBQXRCO0FBRUE7O0FBQ0FucEIsd0JBQXNCLENBQUN0VCxVQUFELEVBQVcwOEIsZ0JBQVgsRUFBNkJwMUIsb0JBQW9CLElBQUksQ0FBQ20xQix3QkFBdEQsQ0FBdEI7O0FDcENBLElBQUk5b0IscUJBQW1CLEdBQUdqcEIsbUJBQTFCOztBQUVBLElBQUkwb0IsYUFBVyxHQUFHTyxxQkFBbUIsQ0FBQ1AsV0FBdEM7QUFDQSxJQUFJRSx3QkFBc0IsR0FBR0sscUJBQW1CLENBQUNMLHNCQUFqRDtBQUNBLElBQUlxcEIsS0FBSyxHQUFHLEdBQUdqcEMsSUFBZjtBQUdBO0FBQ0E7O0FBQ0E0Zix3QkFBc0IsQ0FBQyxNQUFELEVBQVMsU0FBUzVmLElBQVQsQ0FBY29WLFNBQWQsRUFBeUI7QUFDdEQsU0FBTzZ6QixLQUFLLENBQUN6aUMsS0FBTixDQUFZa1osYUFBVyxDQUFDLElBQUQsQ0FBdkIsRUFBK0I3bUIsU0FBL0IsQ0FBUDtBQUNELENBRnFCLENBQXRCOztBQ1RBLElBQUlvbkIscUJBQW1CLEdBQUdqcEIsbUJBQTFCOztBQUNBLElBQUlxZSxZQUFZLEdBQUdyZSxnQkFBbkI7O0FBRUEsSUFBSTBvQixhQUFXLEdBQUdPLHFCQUFtQixDQUFDUCxXQUF0QztBQUNBLElBQUlFLHdCQUFzQixHQUFHSyxxQkFBbUIsQ0FBQ0wsc0JBQWpEO0FBR0E7QUFDQTs7QUFDQUEsd0JBQXNCLENBQUMsYUFBRCxFQUFnQixTQUFTdEssV0FBVCxDQUFxQnJDO0FBQWM7QUFBbkMsRUFBc0Q7QUFDMUYsU0FBT29DLFlBQVksQ0FBQzdPLEtBQWIsQ0FBbUJrWixhQUFXLENBQUMsSUFBRCxDQUE5QixFQUFzQzdtQixTQUF0QyxDQUFQO0FBQ0QsQ0FGcUIsQ0FBdEI7O0FDVEEsSUFBSW9uQixxQkFBbUIsR0FBR2pwQixtQkFBMUI7O0FBQ0EsSUFBSXVlLElBQUksR0FBR3ZlLGNBQUEsQ0FBd0NtUixHQUFuRDs7QUFDQSxJQUFJb2dDLDhCQUE0QixHQUFHdnhDLDhCQUFuQzs7QUFFQSxJQUFJMG9CLGFBQVcsR0FBR08scUJBQW1CLENBQUNQLFdBQXRDO0FBQ0EsSUFBSUUsd0JBQXNCLEdBQUdLLHFCQUFtQixDQUFDTCxzQkFBakQ7QUFHQTs7QUFDQUEsd0JBQXNCLENBQUMsS0FBRCxFQUFRLFNBQVN6WCxHQUFULENBQWFrSztBQUFNO0FBQW5CLEVBQW9DO0FBQ2hFLFNBQU9rRCxJQUFJLENBQUNtSyxhQUFXLENBQUMsSUFBRCxDQUFaLEVBQW9Cck4sS0FBcEIsRUFBMkJ4WixTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJELFNBQVMsQ0FBQyxDQUFELENBQWhDLEdBQXNDVCxTQUFqRSxFQUE0RSxVQUFVNkUsQ0FBVixFQUFhbkUsTUFBYixFQUFxQjtBQUMxRyxXQUFPLEtBQUt5dkMsOEJBQTRCLENBQUN0ckMsQ0FBRCxDQUFqQyxFQUFzQ25FLE1BQXRDLENBQVA7QUFDRCxHQUZVLENBQVg7QUFHRCxDQUpxQixDQUF0Qjs7QUNUQSxJQUFJbW5CLHFCQUFtQixHQUFHanBCLG1CQUExQjs7QUFDQSxJQUFJZ3dDLDZDQUEyQyxHQUFHaHdDLHFDQUFsRDs7QUFFQSxJQUFJMm9CLHdCQUFzQixHQUFHTSxxQkFBbUIsQ0FBQ04sc0JBQWpEO0FBQ0EsSUFBSUssOEJBQTRCLEdBQUdDLHFCQUFtQixDQUFDRCw0QkFBdkQ7QUFHQTs7QUFDQUEsOEJBQTRCLENBQUMsSUFBRCxFQUFPLFNBQVN2SyxFQUFULEdBQTRCO0FBQzdELE1BQUlsVixLQUFLLEdBQUcsQ0FBWjtBQUNBLE1BQUl6SCxNQUFNLEdBQUdELFNBQVMsQ0FBQ0MsTUFBdkI7QUFDQSxNQUFJc0QsTUFBTSxHQUFHLEtBQUt1akIsd0JBQXNCLENBQUMsSUFBRCxDQUEzQixFQUFtQzdtQixNQUFuQyxDQUFiOztBQUNBLFNBQU9BLE1BQU0sR0FBR3lILEtBQWhCLEVBQXVCbkUsTUFBTSxDQUFDbUUsS0FBRCxDQUFOLEdBQWdCMUgsU0FBUyxDQUFDMEgsS0FBSyxFQUFOLENBQXpCOztBQUN2QixTQUFPbkUsTUFBUDtBQUNELENBTjJCLEVBTXpCNHFDLDZDQU55QixDQUE1Qjs7QUNSQSxJQUFJL21CLHFCQUFtQixHQUFHanBCLG1CQUExQjs7QUFDQSxJQUFJOGUsT0FBTyxHQUFHOWUsV0FBQSxDQUFxQzRlLElBQW5EOztBQUVBLElBQUk4SixhQUFXLEdBQUdPLHFCQUFtQixDQUFDUCxXQUF0QztBQUNBLElBQUlFLHdCQUFzQixHQUFHSyxxQkFBbUIsQ0FBQ0wsc0JBQWpEO0FBR0E7O0FBQ0FBLHdCQUFzQixDQUFDLFFBQUQsRUFBVyxTQUFTMUosTUFBVCxDQUFnQm5PO0FBQVc7QUFBM0IsRUFBaUQ7QUFDaEYsU0FBTytOLE9BQU8sQ0FBQzRKLGFBQVcsQ0FBQyxJQUFELENBQVosRUFBb0IzWCxVQUFwQixFQUFnQ2xQLFNBQVMsQ0FBQ0MsTUFBMUMsRUFBa0RELFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUF1QkQsU0FBUyxDQUFDLENBQUQsQ0FBaEMsR0FBc0NULFNBQXhGLENBQWQ7QUFDRCxDQUZxQixDQUF0Qjs7QUNSQSxJQUFJNm5CLHFCQUFtQixHQUFHanBCLG1CQUExQjs7QUFDQSxJQUFJbWYsWUFBWSxHQUFHbmYsV0FBQSxDQUFxQzZlLEtBQXhEOztBQUVBLElBQUk2SixhQUFXLEdBQUdPLHFCQUFtQixDQUFDUCxXQUF0QztBQUNBLElBQUlFLHdCQUFzQixHQUFHSyxxQkFBbUIsQ0FBQ0wsc0JBQWpEO0FBR0E7O0FBQ0FBLHdCQUFzQixDQUFDLGFBQUQsRUFBZ0IsU0FBU3hKLFdBQVQsQ0FBcUJyTztBQUFXO0FBQWhDLEVBQXNEO0FBQzFGLFNBQU9vTyxZQUFZLENBQUN1SixhQUFXLENBQUMsSUFBRCxDQUFaLEVBQW9CM1gsVUFBcEIsRUFBZ0NsUCxTQUFTLENBQUNDLE1BQTFDLEVBQWtERCxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJELFNBQVMsQ0FBQyxDQUFELENBQWhDLEdBQXNDVCxTQUF4RixDQUFuQjtBQUNELENBRnFCLENBQXRCOztBQ1JBLElBQUk2bkIscUJBQW1CLEdBQUdqcEIsbUJBQTFCOztBQUVBLElBQUkwb0IsYUFBVyxHQUFHTyxxQkFBbUIsQ0FBQ1AsV0FBdEM7QUFDQSxJQUFJRSx3QkFBc0IsR0FBR0sscUJBQW1CLENBQUNMLHNCQUFqRDtBQUNBLElBQUkxZixPQUFLLEdBQUc1SixJQUFJLENBQUM0SixLQUFqQjtBQUdBOztBQUNBMGYsd0JBQXNCLENBQUMsU0FBRCxFQUFZLFNBQVN0SixPQUFULEdBQW1CO0FBQ25ELE1BQUlqUSxJQUFJLEdBQUcsSUFBWDtBQUNBLE1BQUl2TixNQUFNLEdBQUc0bUIsYUFBVyxDQUFDclosSUFBRCxDQUFYLENBQWtCdk4sTUFBL0I7QUFDQSxNQUFJK2QsTUFBTSxHQUFHM1csT0FBSyxDQUFDcEgsTUFBTSxHQUFHLENBQVYsQ0FBbEI7QUFDQSxNQUFJeUgsS0FBSyxHQUFHLENBQVo7QUFDQSxNQUFJMUksS0FBSjs7QUFDQSxTQUFPMEksS0FBSyxHQUFHc1csTUFBZixFQUF1QjtBQUNyQmhmLElBQUFBLEtBQUssR0FBR3dPLElBQUksQ0FBQzlGLEtBQUQsQ0FBWjtBQUNBOEYsSUFBQUEsSUFBSSxDQUFDOUYsS0FBSyxFQUFOLENBQUosR0FBZ0I4RixJQUFJLENBQUMsRUFBRXZOLE1BQUgsQ0FBcEI7QUFDQXVOLElBQUFBLElBQUksQ0FBQ3ZOLE1BQUQsQ0FBSixHQUFlakIsS0FBZjtBQUNEOztBQUFDLFNBQU93TyxJQUFQO0FBQ0gsQ0FYcUIsQ0FBdEI7O0FDUkEsSUFBSTRaLHFCQUFtQixHQUFHanBCLG1CQUExQjs7QUFDQSxJQUFJNEosbUJBQWlCLEdBQUc1SixtQkFBeEI7O0FBQ0EsSUFBSWl3QyxRQUFRLEdBQUdqd0MsVUFBZjs7QUFDQSxJQUFJa0UsVUFBUSxHQUFHbEUsVUFBZjs7QUFDQSxJQUFJRCxPQUFLLEdBQUdDLFFBQVo7O0FBRUEsSUFBSTBvQixhQUFXLEdBQUdPLHFCQUFtQixDQUFDUCxXQUF0QztBQUNBLElBQUlFLHdCQUFzQixHQUFHSyxxQkFBbUIsQ0FBQ0wsc0JBQWpEO0FBRUEsSUFBSTdjLFFBQU0sR0FBR2hNLE9BQUssQ0FBQyxZQUFZO0FBQzdCO0FBQ0EsTUFBSWduQixTQUFKLENBQWMsQ0FBZCxFQUFpQjdmLEdBQWpCLENBQXFCLEVBQXJCO0FBQ0QsQ0FIaUIsQ0FBbEI7QUFNQTs7QUFDQTBoQix3QkFBc0IsQ0FBQyxLQUFELEVBQVEsU0FBUzFoQixHQUFULENBQWFpVTtBQUFVO0FBQXZCLEVBQXVDO0FBQ25FdU4sRUFBQUEsYUFBVyxDQUFDLElBQUQsQ0FBWDtBQUNBLE1BQUlqRCxNQUFNLEdBQUd3cUIsUUFBUSxDQUFDcHVDLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUF1QkQsU0FBUyxDQUFDLENBQUQsQ0FBaEMsR0FBc0NULFNBQXZDLEVBQWtELENBQWxELENBQXJCO0FBQ0EsTUFBSVUsTUFBTSxHQUFHLEtBQUtBLE1BQWxCO0FBQ0EsTUFBSXdNLEdBQUcsR0FBR3BLLFVBQVEsQ0FBQ2lYLFNBQUQsQ0FBbEI7QUFDQSxNQUFJekQsR0FBRyxHQUFHOU4sbUJBQWlCLENBQUMwRSxHQUFELENBQTNCO0FBQ0EsTUFBSS9FLEtBQUssR0FBRyxDQUFaO0FBQ0EsTUFBSW1PLEdBQUcsR0FBRytOLE1BQU4sR0FBZTNqQixNQUFuQixFQUEyQixNQUFNeWdCLFVBQVUsQ0FBQyxjQUFELENBQWhCOztBQUMzQixTQUFPaFosS0FBSyxHQUFHbU8sR0FBZixFQUFvQixLQUFLK04sTUFBTSxHQUFHbGMsS0FBZCxJQUF1QitFLEdBQUcsQ0FBQy9FLEtBQUssRUFBTixDQUExQjtBQUNyQixDQVRxQixFQVNuQndDLFFBVG1CLENBQXRCOztBQ2hCQSxJQUFJa2QscUJBQW1CLEdBQUdqcEIsbUJBQTFCOztBQUNBLElBQUl1eEMsOEJBQTRCLEdBQUd2eEMsOEJBQW5DOztBQUNBLElBQUlELE9BQUssR0FBR0MsUUFBWjs7QUFFQSxJQUFJMG9CLGFBQVcsR0FBR08scUJBQW1CLENBQUNQLFdBQXRDO0FBQ0EsSUFBSUUsd0JBQXNCLEdBQUdLLHFCQUFtQixDQUFDTCxzQkFBakQ7QUFDQSxJQUFJc3BCLFFBQU0sR0FBRyxHQUFHanhDLEtBQWhCO0FBRUEsSUFBSThLLFFBQU0sR0FBR2hNLE9BQUssQ0FBQyxZQUFZO0FBQzdCO0FBQ0EsTUFBSWduQixTQUFKLENBQWMsQ0FBZCxFQUFpQjlsQixLQUFqQjtBQUNELENBSGlCLENBQWxCO0FBTUE7O0FBQ0EybkIsd0JBQXNCLENBQUMsT0FBRCxFQUFVLFNBQVMzbkIsS0FBVCxDQUFlK1gsS0FBZixFQUFzQkcsR0FBdEIsRUFBMkI7QUFDekQsTUFBSTJULElBQUksR0FBR29sQixRQUFNLENBQUMxeEMsSUFBUCxDQUFZa29CLGFBQVcsQ0FBQyxJQUFELENBQXZCLEVBQStCMVAsS0FBL0IsRUFBc0NHLEdBQXRDLENBQVg7QUFDQSxNQUFJaEosQ0FBQyxHQUFHb2hDLDhCQUE0QixDQUFDLElBQUQsQ0FBcEM7QUFDQSxNQUFJaG9DLEtBQUssR0FBRyxDQUFaO0FBQ0EsTUFBSXpILE1BQU0sR0FBR2dyQixJQUFJLENBQUNockIsTUFBbEI7QUFDQSxNQUFJc0QsTUFBTSxHQUFHLElBQUkrSyxDQUFKLENBQU1yTyxNQUFOLENBQWI7O0FBQ0EsU0FBT0EsTUFBTSxHQUFHeUgsS0FBaEIsRUFBdUJuRSxNQUFNLENBQUNtRSxLQUFELENBQU4sR0FBZ0J1akIsSUFBSSxDQUFDdmpCLEtBQUssRUFBTixDQUFwQjs7QUFDdkIsU0FBT25FLE1BQVA7QUFDRCxDQVJxQixFQVFuQjJHLFFBUm1CLENBQXRCOztBQ2ZBLElBQUlrZCxxQkFBbUIsR0FBR2pwQixtQkFBMUI7O0FBQ0EsSUFBSTBmLE9BQUssR0FBRzFmLGNBQUEsQ0FBd0NxUixJQUFwRDs7QUFFQSxJQUFJcVgsYUFBVyxHQUFHTyxxQkFBbUIsQ0FBQ1AsV0FBdEM7QUFDQSxJQUFJRSx3QkFBc0IsR0FBR0sscUJBQW1CLENBQUNMLHNCQUFqRDtBQUdBOztBQUNBQSx3QkFBc0IsQ0FBQyxNQUFELEVBQVMsU0FBU3ZYLElBQVQsQ0FBY047QUFBVztBQUF6QixFQUEwQztBQUN2RSxTQUFPMk8sT0FBSyxDQUFDZ0osYUFBVyxDQUFDLElBQUQsQ0FBWixFQUFvQjNYLFVBQXBCLEVBQWdDbFAsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBdEUsQ0FBWjtBQUNELENBRnFCLENBQXRCOztBQ1JBLElBQUk2bkIscUJBQW1CLEdBQUdqcEIsbUJBQTFCOztBQUNBLElBQUlMLFFBQU0sR0FBR0ssUUFBYjs7QUFDQSxJQUFJRCxPQUFLLEdBQUdDLFFBQVo7O0FBQ0EsSUFBSWtELFdBQVMsR0FBR2xELFdBQWhCOztBQUNBLElBQUk0SixtQkFBaUIsR0FBRzVKLG1CQUF4Qjs7QUFDQSxJQUFJd2dCLFlBQVksR0FBR3hnQixTQUFuQjs7QUFDQSxJQUFJeWdCLEVBQUUsR0FBR3pnQixlQUFUOztBQUNBLElBQUkwZ0IsVUFBVSxHQUFHMWdCLGdCQUFqQjs7QUFDQSxJQUFJMmdCLEVBQUUsR0FBRzNnQixlQUFUOztBQUNBLElBQUk0Z0IsTUFBTSxHQUFHNWdCLG1CQUFiOztBQUVBLElBQUkwb0IsYUFBVyxHQUFHTyxxQkFBbUIsQ0FBQ1AsV0FBdEM7QUFDQSxJQUFJRSx3QkFBc0IsR0FBR0sscUJBQW1CLENBQUNMLHNCQUFqRDtBQUNBLElBQUliLFdBQVcsR0FBR3BvQixRQUFNLENBQUNvb0IsV0FBekI7QUFDQSxJQUFJbEgsVUFBVSxHQUFHa0gsV0FBVyxJQUFJQSxXQUFXLENBQUMvZixTQUFaLENBQXNCOFksSUFBdEQ7O0FBR0EsSUFBSXF4QiwwQkFBMEIsR0FBRyxDQUFDLENBQUN0eEIsVUFBRixJQUFnQixDQUFDOWdCLE9BQUssQ0FBQyxZQUFZO0FBQ2xFLE1BQUlnWSxLQUFLLEdBQUcsSUFBSWdRLFdBQUosQ0FBZ0IsQ0FBaEIsQ0FBWjtBQUNBaFEsRUFBQUEsS0FBSyxDQUFDK0ksSUFBTixDQUFXLElBQVg7QUFDQS9JLEVBQUFBLEtBQUssQ0FBQytJLElBQU4sQ0FBVyxFQUFYO0FBQ0QsQ0FKc0QsQ0FBdkQ7QUFNQSxJQUFJRyxXQUFXLEdBQUcsQ0FBQyxDQUFDSixVQUFGLElBQWdCLENBQUM5Z0IsT0FBSyxDQUFDLFlBQVk7QUFDbkQ7QUFDQSxNQUFJNGdCLEVBQUosRUFBUSxPQUFPQSxFQUFFLEdBQUcsRUFBWjtBQUNSLE1BQUlGLEVBQUosRUFBUSxPQUFPQSxFQUFFLEdBQUcsRUFBWjtBQUNSLE1BQUlDLFVBQUosRUFBZ0IsT0FBTyxJQUFQO0FBQ2hCLE1BQUlFLE1BQUosRUFBWSxPQUFPQSxNQUFNLEdBQUcsR0FBaEI7QUFFWixNQUFJN0ksS0FBSyxHQUFHLElBQUlnUSxXQUFKLENBQWdCLEdBQWhCLENBQVo7QUFDQSxNQUFJcXFCLFFBQVEsR0FBR2ptQyxLQUFLLENBQUMsR0FBRCxDQUFwQjtBQUNBLE1BQUk1QyxLQUFKLEVBQVc4b0MsR0FBWDs7QUFFQSxPQUFLOW9DLEtBQUssR0FBRyxDQUFiLEVBQWdCQSxLQUFLLEdBQUcsR0FBeEIsRUFBNkJBLEtBQUssRUFBbEMsRUFBc0M7QUFDcEM4b0MsSUFBQUEsR0FBRyxHQUFHOW9DLEtBQUssR0FBRyxDQUFkO0FBQ0F3TyxJQUFBQSxLQUFLLENBQUN4TyxLQUFELENBQUwsR0FBZSxNQUFNQSxLQUFyQjtBQUNBNm9DLElBQUFBLFFBQVEsQ0FBQzdvQyxLQUFELENBQVIsR0FBa0JBLEtBQUssR0FBRyxJQUFJOG9DLEdBQVosR0FBa0IsQ0FBcEM7QUFDRDs7QUFFRHQ2QixFQUFBQSxLQUFLLENBQUMrSSxJQUFOLENBQVcsVUFBVXBiLENBQVYsRUFBYTRKLENBQWIsRUFBZ0I7QUFDekIsV0FBTyxDQUFDNUosQ0FBQyxHQUFHLENBQUosR0FBUSxDQUFULEtBQWU0SixDQUFDLEdBQUcsQ0FBSixHQUFRLENBQXZCLENBQVA7QUFDRCxHQUZEOztBQUlBLE9BQUsvRixLQUFLLEdBQUcsQ0FBYixFQUFnQkEsS0FBSyxHQUFHLEdBQXhCLEVBQTZCQSxLQUFLLEVBQWxDLEVBQXNDO0FBQ3BDLFFBQUl3TyxLQUFLLENBQUN4TyxLQUFELENBQUwsS0FBaUI2b0MsUUFBUSxDQUFDN29DLEtBQUQsQ0FBN0IsRUFBc0MsT0FBTyxJQUFQO0FBQ3ZDO0FBQ0YsQ0F4QnVDLENBQXhDOztBQTBCQSxJQUFJZ1ksY0FBYyxHQUFHLFVBQVUzQixTQUFWLEVBQXFCO0FBQ3hDLFNBQU8sVUFBVTRCLENBQVYsRUFBYUMsQ0FBYixFQUFnQjtBQUNyQixRQUFJN0IsU0FBUyxLQUFLeGUsU0FBbEIsRUFBNkIsT0FBTyxDQUFDd2UsU0FBUyxDQUFDNEIsQ0FBRCxFQUFJQyxDQUFKLENBQVYsSUFBb0IsQ0FBM0IsQ0FEUjs7QUFHckIsUUFBSUEsQ0FBQyxLQUFLQSxDQUFWLEVBQWEsT0FBTyxDQUFDLENBQVIsQ0FIUTs7QUFLckIsUUFBSUQsQ0FBQyxLQUFLQSxDQUFWLEVBQWEsT0FBTyxDQUFQO0FBQ2IsUUFBSUEsQ0FBQyxLQUFLLENBQU4sSUFBV0MsQ0FBQyxLQUFLLENBQXJCLEVBQXdCLE9BQU8sSUFBSUQsQ0FBSixHQUFRLENBQVIsSUFBYSxJQUFJQyxDQUFKLEdBQVEsQ0FBckIsR0FBeUIsQ0FBekIsR0FBNkIsQ0FBQyxDQUFyQztBQUN4QixXQUFPRCxDQUFDLEdBQUdDLENBQVg7QUFDRCxHQVJEO0FBU0QsQ0FWRDtBQWFBOzs7QUFDQW1ILHdCQUFzQixDQUFDLE1BQUQsRUFBUyxTQUFTOUgsSUFBVCxDQUFjbEIsU0FBZCxFQUF5QjtBQUN0RCxNQUFJN0gsS0FBSyxHQUFHLElBQVo7QUFDQSxNQUFJNkgsU0FBUyxLQUFLeGUsU0FBbEIsRUFBNkI4QixXQUFTLENBQUMwYyxTQUFELENBQVQ7QUFDN0IsTUFBSXFCLFdBQUosRUFBaUIsT0FBT0osVUFBVSxDQUFDcmdCLElBQVgsQ0FBZ0J1WCxLQUFoQixFQUF1QjZILFNBQXZCLENBQVA7QUFFakI4SSxFQUFBQSxhQUFXLENBQUMzUSxLQUFELENBQVg7QUFDQSxNQUFJNEosV0FBVyxHQUFHL1gsbUJBQWlCLENBQUNtTyxLQUFELENBQW5DO0FBQ0EsTUFBSTJKLEtBQUssR0FBR3ZWLEtBQUssQ0FBQ3dWLFdBQUQsQ0FBakI7QUFDQSxNQUFJcFksS0FBSjs7QUFFQSxPQUFLQSxLQUFLLEdBQUcsQ0FBYixFQUFnQkEsS0FBSyxHQUFHb1ksV0FBeEIsRUFBcUNwWSxLQUFLLEVBQTFDLEVBQThDO0FBQzVDbVksSUFBQUEsS0FBSyxDQUFDblksS0FBRCxDQUFMLEdBQWV3TyxLQUFLLENBQUN4TyxLQUFELENBQXBCO0FBQ0Q7O0FBRURtWSxFQUFBQSxLQUFLLEdBQUdsQixZQUFZLENBQUN6SSxLQUFELEVBQVF3SixjQUFjLENBQUMzQixTQUFELENBQXRCLENBQXBCOztBQUVBLE9BQUtyVyxLQUFLLEdBQUcsQ0FBYixFQUFnQkEsS0FBSyxHQUFHb1ksV0FBeEIsRUFBcUNwWSxLQUFLLEVBQTFDLEVBQThDO0FBQzVDd08sSUFBQUEsS0FBSyxDQUFDeE8sS0FBRCxDQUFMLEdBQWVtWSxLQUFLLENBQUNuWSxLQUFELENBQXBCO0FBQ0Q7O0FBRUQsU0FBT3dPLEtBQVA7QUFDRCxDQXJCcUIsRUFxQm5CLENBQUNrSixXQUFELElBQWdCa3hCLDBCQXJCRyxDQUF0Qjs7QUMvREEsSUFBSWxwQixxQkFBbUIsR0FBR2pwQixtQkFBMUI7O0FBQ0EsSUFBSXlKLFFBQVEsR0FBR3pKLFVBQWY7O0FBQ0EsSUFBSTJKLGVBQWUsR0FBRzNKLGlCQUF0Qjs7QUFDQSxJQUFJdXhDLDhCQUE0QixHQUFHdnhDLDhCQUFuQzs7QUFFQSxJQUFJMG9CLGFBQVcsR0FBR08scUJBQW1CLENBQUNQLFdBQXRDO0FBQ0EsSUFBSUUsd0JBQXNCLEdBQUdLLHFCQUFtQixDQUFDTCxzQkFBakQ7QUFHQTs7QUFDQUEsd0JBQXNCLENBQUMsVUFBRCxFQUFhLFNBQVMwcEIsUUFBVCxDQUFrQkMsS0FBbEIsRUFBeUJwNUIsR0FBekIsRUFBOEI7QUFDL0QsTUFBSWxULENBQUMsR0FBR3lpQixhQUFXLENBQUMsSUFBRCxDQUFuQjtBQUNBLE1BQUk1bUIsTUFBTSxHQUFHbUUsQ0FBQyxDQUFDbkUsTUFBZjtBQUNBLE1BQUkwd0MsVUFBVSxHQUFHN29DLGVBQWUsQ0FBQzRvQyxLQUFELEVBQVF6d0MsTUFBUixDQUFoQztBQUNBLE1BQUlxTyxDQUFDLEdBQUdvaEMsOEJBQTRCLENBQUN0ckMsQ0FBRCxDQUFwQztBQUNBLFNBQU8sSUFBSWtLLENBQUosQ0FDTGxLLENBQUMsQ0FBQzhjLE1BREcsRUFFTDljLENBQUMsQ0FBQ3FmLFVBQUYsR0FBZWt0QixVQUFVLEdBQUd2c0MsQ0FBQyxDQUFDbXFDLGlCQUZ6QixFQUdMM21DLFFBQVEsQ0FBQyxDQUFDMFAsR0FBRyxLQUFLL1gsU0FBUixHQUFvQlUsTUFBcEIsR0FBNkI2SCxlQUFlLENBQUN3UCxHQUFELEVBQU1yWCxNQUFOLENBQTdDLElBQThEMHdDLFVBQS9ELENBSEgsQ0FBUDtBQUtELENBVnFCLENBQXRCOztBQ1ZBLElBQUk3eUMsUUFBTSxHQUFHSyxRQUFiOztBQUNBLElBQUlpcEIscUJBQW1CLEdBQUdqcEIsbUJBQTFCOztBQUNBLElBQUlELE9BQUssR0FBR0MsUUFBWjs7QUFFQSxJQUFJK21CLFdBQVMsR0FBR3BuQixRQUFNLENBQUNvbkIsU0FBdkI7QUFDQSxJQUFJMkIsYUFBVyxHQUFHTyxxQkFBbUIsQ0FBQ1AsV0FBdEM7QUFDQSxJQUFJRSx3QkFBc0IsR0FBR0sscUJBQW1CLENBQUNMLHNCQUFqRDtBQUNBLElBQUk2cEIsZUFBZSxHQUFHLEdBQUdDLGNBQXpCO0FBQ0EsSUFBSVIsTUFBTSxHQUFHLEdBQUdqeEMsS0FBaEI7O0FBR0EsSUFBSTB4QyxvQkFBb0IsR0FBRyxDQUFDLENBQUM1ckIsV0FBRixJQUFlaG5CLE9BQUssQ0FBQyxZQUFZO0FBQzFEMHlDLEVBQUFBLGVBQWUsQ0FBQ2p5QyxJQUFoQixDQUFxQixJQUFJdW1CLFdBQUosQ0FBYyxDQUFkLENBQXJCO0FBQ0QsQ0FGOEMsQ0FBL0M7QUFJQSxJQUFJaGIsUUFBTSxHQUFHaE0sT0FBSyxDQUFDLFlBQVk7QUFDN0IsU0FBTyxDQUFDLENBQUQsRUFBSSxDQUFKLEVBQU8yeUMsY0FBUCxNQUEyQixJQUFJM3JCLFdBQUosQ0FBYyxDQUFDLENBQUQsRUFBSSxDQUFKLENBQWQsRUFBc0IyckIsY0FBdEIsRUFBbEM7QUFDRCxDQUZpQixDQUFMLElBRVAsQ0FBQzN5QyxPQUFLLENBQUMsWUFBWTtBQUN2QmduQixFQUFBQSxXQUFTLENBQUMvZSxTQUFWLENBQW9CMHFDLGNBQXBCLENBQW1DbHlDLElBQW5DLENBQXdDLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FBeEM7QUFDRCxDQUZXLENBRlo7QUFPQTs7QUFDQW9vQix3QkFBc0IsQ0FBQyxnQkFBRCxFQUFtQixTQUFTOHBCLGNBQVQsR0FBMEI7QUFDakUsU0FBT0QsZUFBZSxDQUFDampDLEtBQWhCLENBQXNCbWpDLG9CQUFvQixHQUFHVCxNQUFNLENBQUMxeEMsSUFBUCxDQUFZa29CLGFBQVcsQ0FBQyxJQUFELENBQXZCLENBQUgsR0FBb0NBLGFBQVcsQ0FBQyxJQUFELENBQXpGLEVBQWlHN21CLFNBQWpHLENBQVA7QUFDRCxDQUZxQixFQUVuQmtLLFFBRm1CLENBQXRCOztBQ3ZCQSxJQUFJNmMsd0JBQXNCLEdBQUc1b0IsbUJBQUEsQ0FBK0M0b0Isc0JBQTVFOztBQUNBLElBQUk3b0IsT0FBSyxHQUFHQyxRQUFaOztBQUNBLElBQUlMLFFBQU0sR0FBR0ssUUFBYjs7QUFFQSxJQUFJNm5CLFVBQVUsR0FBR2xvQixRQUFNLENBQUNrb0IsVUFBeEI7QUFDQSxJQUFJK3FCLG1CQUFtQixHQUFHL3FCLFVBQVUsSUFBSUEsVUFBVSxDQUFDN2YsU0FBekIsSUFBc0MsRUFBaEU7QUFDQSxJQUFJNnFDLGFBQWEsR0FBRyxHQUFHN3hDLFFBQXZCO0FBQ0EsSUFBSTh4QyxTQUFTLEdBQUcsR0FBRzlwQyxJQUFuQjs7QUFFQSxJQUFJakosT0FBSyxDQUFDLFlBQVk7QUFBRTh5QyxFQUFBQSxhQUFhLENBQUNyeUMsSUFBZCxDQUFtQixFQUFuQjtBQUF5QixDQUF4QyxDQUFULEVBQW9EO0FBQ2xEcXlDLEVBQUFBLGFBQWEsR0FBRyxTQUFTN3hDLFFBQVQsR0FBb0I7QUFDbEMsV0FBTzh4QyxTQUFTLENBQUN0eUMsSUFBVixDQUFlLElBQWYsQ0FBUDtBQUNELEdBRkQ7QUFHRDs7QUFFRCxJQUFJdXlDLG1CQUFtQixHQUFHSCxtQkFBbUIsQ0FBQzV4QyxRQUFwQixJQUFnQzZ4QyxhQUExRDtBQUdBOztBQUNBanFCLHdCQUFzQixDQUFDLFVBQUQsRUFBYWlxQixhQUFiLEVBQTRCRSxtQkFBNUIsQ0FBdEI7O0FDbkJBLElBQUlyaEMsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJZ0IsVUFBUSxHQUFHaEIsVUFBZjs7QUFFQSxJQUFJb2hCLFlBQVksR0FBR3plLE1BQU0sQ0FBQ3llLFlBQTFCO0FBQ0EsSUFBSTR4QixJQUFJLEdBQUcsZUFBWDtBQUNBLElBQUlDLElBQUksR0FBRyxlQUFYO0FBR0E7O0FBQ0F2aEMsSUFBQyxDQUFDO0FBQUUvUixFQUFBQSxNQUFNLEVBQUU7QUFBVixDQUFELEVBQW1CO0FBQ2xCdXpDLEVBQUFBLFFBQVEsRUFBRSxTQUFTQSxRQUFULENBQWtCM25DLE1BQWxCLEVBQTBCO0FBQ2xDLFFBQUlrZixHQUFHLEdBQUd6cEIsVUFBUSxDQUFDdUssTUFBRCxDQUFsQjtBQUNBLFFBQUluRyxNQUFNLEdBQUcsRUFBYjtBQUNBLFFBQUl0RCxNQUFNLEdBQUcyb0IsR0FBRyxDQUFDM29CLE1BQWpCO0FBQ0EsUUFBSXlILEtBQUssR0FBRyxDQUFaO0FBQ0EsUUFBSTRYLEdBQUosRUFBU2xnQixLQUFUOztBQUNBLFdBQU9zSSxLQUFLLEdBQUd6SCxNQUFmLEVBQXVCO0FBQ3JCcWYsTUFBQUEsR0FBRyxHQUFHc0osR0FBRyxDQUFDbkosTUFBSixDQUFXL1gsS0FBSyxFQUFoQixDQUFOOztBQUNBLFVBQUk0WCxHQUFHLEtBQUssR0FBWixFQUFpQjtBQUNmLFlBQUlzSixHQUFHLENBQUNuSixNQUFKLENBQVcvWCxLQUFYLE1BQXNCLEdBQTFCLEVBQStCO0FBQzdCdEksVUFBQUEsS0FBSyxHQUFHd3BCLEdBQUcsQ0FBQ3hwQixLQUFKLENBQVVzSSxLQUFLLEdBQUcsQ0FBbEIsRUFBcUJBLEtBQUssR0FBRyxDQUE3QixDQUFSOztBQUNBLGNBQUkwcEMsSUFBSSxDQUFDdHNDLElBQUwsQ0FBVTFGLEtBQVYsQ0FBSixFQUFzQjtBQUNwQm1FLFlBQUFBLE1BQU0sSUFBSWdjLFlBQVksQ0FBQ2dVLFFBQVEsQ0FBQ24wQixLQUFELEVBQVEsRUFBUixDQUFULENBQXRCO0FBQ0FzSSxZQUFBQSxLQUFLLElBQUksQ0FBVDtBQUNBO0FBQ0Q7QUFDRixTQVBELE1BT087QUFDTHRJLFVBQUFBLEtBQUssR0FBR3dwQixHQUFHLENBQUN4cEIsS0FBSixDQUFVc0ksS0FBVixFQUFpQkEsS0FBSyxHQUFHLENBQXpCLENBQVI7O0FBQ0EsY0FBSXlwQyxJQUFJLENBQUNyc0MsSUFBTCxDQUFVMUYsS0FBVixDQUFKLEVBQXNCO0FBQ3BCbUUsWUFBQUEsTUFBTSxJQUFJZ2MsWUFBWSxDQUFDZ1UsUUFBUSxDQUFDbjBCLEtBQUQsRUFBUSxFQUFSLENBQVQsQ0FBdEI7QUFDQXNJLFlBQUFBLEtBQUssSUFBSSxDQUFUO0FBQ0E7QUFDRDtBQUNGO0FBQ0Y7O0FBQ0RuRSxNQUFBQSxNQUFNLElBQUkrYixHQUFWO0FBQ0Q7O0FBQUMsV0FBTy9iLE1BQVA7QUFDSDtBQTVCaUIsQ0FBbkIsQ0FBRDs7OztBQ1RBLElBQUl3ZSxhQUFXLEdBQUc1akIsYUFBbEI7O0FBQ0EsSUFBSXF1QixXQUFXLEdBQUdydUIsd0JBQUEsQ0FBMENxdUIsV0FBNUQ7O0FBQ0EsSUFBSWxvQixXQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUlxRCxVQUFRLEdBQUdyRCxVQUFmOztBQUNBLElBQUk2akIsWUFBVSxHQUFHN2pCLFlBQWpCOztBQUNBLElBQUlnWCxTQUFPLEdBQUdoWCxTQUFkOztBQUNBLElBQUltekMsb0JBQW9CLEdBQUduekMsY0FBM0I7O0FBQ0EsSUFBSW9FLFFBQU0sR0FBR3BFLGdCQUFiOztBQUNBLElBQUlxSSxxQkFBbUIsR0FBR3JJLGFBQTFCOztBQUVBLElBQUltUyxrQkFBZ0IsR0FBRzlKLHFCQUFtQixDQUFDbkIsR0FBM0M7QUFDQSxJQUFJaXBCLHNCQUFzQixHQUFHOW5CLHFCQUFtQixDQUFDaEIsU0FBakQ7QUFDQSxJQUFJa0ssTUFBSSxHQUFHNGhDLG9CQUFvQixDQUFDNWhDLElBQWhDO0FBQ0EsSUFBSUMsU0FBUyxHQUFHMmhDLG9CQUFvQixDQUFDM2hDLFNBQXJDO0FBQ0EsSUFBSW5OLEVBQUUsR0FBRyxDQUFUOztBQUdBLElBQUkrdUMsbUJBQW1CLEdBQUcsVUFBVXR2QyxLQUFWLEVBQWlCO0FBQ3pDLFNBQU9BLEtBQUssQ0FBQ3V2QyxNQUFOLEtBQWlCdnZDLEtBQUssQ0FBQ3V2QyxNQUFOLEdBQWUsSUFBSUMsbUJBQUosRUFBaEMsQ0FBUDtBQUNELENBRkQ7O0FBSUEsSUFBSUEsbUJBQW1CLEdBQUcsWUFBWTtBQUNwQyxPQUFLLzFCLE9BQUwsR0FBZSxFQUFmO0FBQ0QsQ0FGRDs7QUFJQSxJQUFJZzJCLGtCQUFrQixHQUFHLFVBQVV6dkMsS0FBVixFQUFpQkgsR0FBakIsRUFBc0I7QUFDN0MsU0FBTzROLE1BQUksQ0FBQ3pOLEtBQUssQ0FBQ3laLE9BQVAsRUFBZ0IsVUFBVWxlLEVBQVYsRUFBYztBQUN2QyxXQUFPQSxFQUFFLENBQUMsQ0FBRCxDQUFGLEtBQVVzRSxHQUFqQjtBQUNELEdBRlUsQ0FBWDtBQUdELENBSkQ7O0FBTUEydkMsbUJBQW1CLENBQUN0ckMsU0FBcEIsR0FBZ0M7QUFDOUI3SCxFQUFBQSxHQUFHLEVBQUUsVUFBVXdELEdBQVYsRUFBZTtBQUNsQixRQUFJNHNCLEtBQUssR0FBR2dqQixrQkFBa0IsQ0FBQyxJQUFELEVBQU81dkMsR0FBUCxDQUE5QjtBQUNBLFFBQUk0c0IsS0FBSixFQUFXLE9BQU9BLEtBQUssQ0FBQyxDQUFELENBQVo7QUFDWixHQUo2QjtBQUs5QnBwQixFQUFBQSxHQUFHLEVBQUUsVUFBVXhELEdBQVYsRUFBZTtBQUNsQixXQUFPLENBQUMsQ0FBQzR2QyxrQkFBa0IsQ0FBQyxJQUFELEVBQU81dkMsR0FBUCxDQUEzQjtBQUNELEdBUDZCO0FBUTlCdUQsRUFBQUEsR0FBRyxFQUFFLFVBQVV2RCxHQUFWLEVBQWU5QyxLQUFmLEVBQXNCO0FBQ3pCLFFBQUkwdkIsS0FBSyxHQUFHZ2pCLGtCQUFrQixDQUFDLElBQUQsRUFBTzV2QyxHQUFQLENBQTlCO0FBQ0EsUUFBSTRzQixLQUFKLEVBQVdBLEtBQUssQ0FBQyxDQUFELENBQUwsR0FBVzF2QixLQUFYLENBQVgsS0FDSyxLQUFLMGMsT0FBTCxDQUFheFosSUFBYixDQUFrQixDQUFDSixHQUFELEVBQU05QyxLQUFOLENBQWxCO0FBQ04sR0FaNkI7QUFhOUIsWUFBVSxVQUFVOEMsR0FBVixFQUFlO0FBQ3ZCLFFBQUk0RixLQUFLLEdBQUdpSSxTQUFTLENBQUMsS0FBSytMLE9BQU4sRUFBZSxVQUFVbGUsRUFBVixFQUFjO0FBQ2hELGFBQU9BLEVBQUUsQ0FBQyxDQUFELENBQUYsS0FBVXNFLEdBQWpCO0FBQ0QsS0FGb0IsQ0FBckI7QUFHQSxRQUFJLENBQUM0RixLQUFMLEVBQVksS0FBS2dVLE9BQUwsQ0FBYXlFLE1BQWIsQ0FBb0J6WSxLQUFwQixFQUEyQixDQUEzQjtBQUNaLFdBQU8sQ0FBQyxDQUFDLENBQUNBLEtBQVY7QUFDRDtBQW5CNkIsQ0FBaEM7SUFzQkFoSyxnQkFBQSxHQUFpQjtBQUNmbXdCLEVBQUFBLGNBQWMsRUFBRSxVQUFVWCxPQUFWLEVBQW1CbE4sZ0JBQW5CLEVBQXFDclIsTUFBckMsRUFBNkMwZSxLQUE3QyxFQUFvRDtBQUNsRSxRQUFJL2UsQ0FBQyxHQUFHNGUsT0FBTyxDQUFDLFVBQVUxZixJQUFWLEVBQWdCOEcsUUFBaEIsRUFBMEI7QUFDeEMwTixNQUFBQSxZQUFVLENBQUN4VSxJQUFELEVBQU9jLENBQVAsRUFBVTBSLGdCQUFWLENBQVY7QUFDQTFQLE1BQUFBLGtCQUFnQixDQUFDOUMsSUFBRCxFQUFPO0FBQ3JCN0gsUUFBQUEsSUFBSSxFQUFFcWEsZ0JBRGU7QUFFckJ4ZCxRQUFBQSxFQUFFLEVBQUVBLEVBQUUsRUFGZTtBQUdyQmd2QyxRQUFBQSxNQUFNLEVBQUVqeUM7QUFIYSxPQUFQLENBQWhCO0FBS0EsVUFBSStVLFFBQVEsSUFBSS9VLFNBQWhCLEVBQTJCNFYsU0FBTyxDQUFDYixRQUFELEVBQVc5RyxJQUFJLENBQUM2ZixLQUFELENBQWYsRUFBd0I7QUFBRTdmLFFBQUFBLElBQUksRUFBRUEsSUFBUjtBQUFjZ0gsUUFBQUEsVUFBVSxFQUFFN0Y7QUFBMUIsT0FBeEIsQ0FBUDtBQUM1QixLQVJjLENBQWY7QUFVQSxRQUFJakksZ0JBQWdCLEdBQUc0bkIsc0JBQXNCLENBQUN0TyxnQkFBRCxDQUE3Qzs7QUFFQSxRQUFJeU8sTUFBTSxHQUFHLFVBQVVqaEIsSUFBVixFQUFnQjFMLEdBQWhCLEVBQXFCOUMsS0FBckIsRUFBNEI7QUFDdkMsVUFBSTBHLEtBQUssR0FBR2dCLGdCQUFnQixDQUFDOEcsSUFBRCxDQUE1QjtBQUNBLFVBQUlsRSxJQUFJLEdBQUdrakIsV0FBVyxDQUFDbG9CLFdBQVEsQ0FBQ3hDLEdBQUQsQ0FBVCxFQUFnQixJQUFoQixDQUF0QjtBQUNBLFVBQUl3SCxJQUFJLEtBQUssSUFBYixFQUFtQmlvQyxtQkFBbUIsQ0FBQzdyQyxLQUFELENBQW5CLENBQTJCTCxHQUEzQixDQUErQnZELEdBQS9CLEVBQW9DOUMsS0FBcEMsRUFBbkIsS0FDS3NLLElBQUksQ0FBQzVELEtBQUssQ0FBQ2xELEVBQVAsQ0FBSixHQUFpQnhELEtBQWpCO0FBQ0wsYUFBT3dPLElBQVA7QUFDRCxLQU5EOztBQVFBdVUsSUFBQUEsYUFBVyxDQUFDelQsQ0FBQyxDQUFDbkksU0FBSCxFQUFjO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLGdCQUFVLFVBQVVyRSxHQUFWLEVBQWU7QUFDdkIsWUFBSTRELEtBQUssR0FBR2dCLGdCQUFnQixDQUFDLElBQUQsQ0FBNUI7QUFDQSxZQUFJLENBQUNsRixVQUFRLENBQUNNLEdBQUQsQ0FBYixFQUFvQixPQUFPLEtBQVA7QUFDcEIsWUFBSXdILElBQUksR0FBR2tqQixXQUFXLENBQUMxcUIsR0FBRCxDQUF0QjtBQUNBLFlBQUl3SCxJQUFJLEtBQUssSUFBYixFQUFtQixPQUFPaW9DLG1CQUFtQixDQUFDN3JDLEtBQUQsQ0FBbkIsQ0FBMkIsUUFBM0IsRUFBcUM1RCxHQUFyQyxDQUFQO0FBQ25CLGVBQU93SCxJQUFJLElBQUkvRyxRQUFNLENBQUMrRyxJQUFELEVBQU81RCxLQUFLLENBQUNsRCxFQUFiLENBQWQsSUFBa0MsT0FBTzhHLElBQUksQ0FBQzVELEtBQUssQ0FBQ2xELEVBQVAsQ0FBcEQ7QUFDRCxPQVZzQjtBQVd2QjtBQUNBO0FBQ0E7QUFDQThDLE1BQUFBLEdBQUcsRUFBRSxTQUFTQSxHQUFULENBQWF4RCxHQUFiLEVBQWtCO0FBQ3JCLFlBQUk0RCxLQUFLLEdBQUdnQixnQkFBZ0IsQ0FBQyxJQUFELENBQTVCO0FBQ0EsWUFBSSxDQUFDbEYsVUFBUSxDQUFDTSxHQUFELENBQWIsRUFBb0IsT0FBTyxLQUFQO0FBQ3BCLFlBQUl3SCxJQUFJLEdBQUdrakIsV0FBVyxDQUFDMXFCLEdBQUQsQ0FBdEI7QUFDQSxZQUFJd0gsSUFBSSxLQUFLLElBQWIsRUFBbUIsT0FBT2lvQyxtQkFBbUIsQ0FBQzdyQyxLQUFELENBQW5CLENBQTJCSixHQUEzQixDQUErQnhELEdBQS9CLENBQVA7QUFDbkIsZUFBT3dILElBQUksSUFBSS9HLFFBQU0sQ0FBQytHLElBQUQsRUFBTzVELEtBQUssQ0FBQ2xELEVBQWIsQ0FBckI7QUFDRDtBQXBCc0IsS0FBZCxDQUFYO0FBdUJBdWYsSUFBQUEsYUFBVyxDQUFDelQsQ0FBQyxDQUFDbkksU0FBSCxFQUFjd0ksTUFBTSxHQUFHO0FBQ2hDO0FBQ0E7QUFDQXJRLE1BQUFBLEdBQUcsRUFBRSxTQUFTQSxHQUFULENBQWF3RCxHQUFiLEVBQWtCO0FBQ3JCLFlBQUk0RCxLQUFLLEdBQUdnQixnQkFBZ0IsQ0FBQyxJQUFELENBQTVCOztBQUNBLFlBQUlsRixVQUFRLENBQUNNLEdBQUQsQ0FBWixFQUFtQjtBQUNqQixjQUFJd0gsSUFBSSxHQUFHa2pCLFdBQVcsQ0FBQzFxQixHQUFELENBQXRCO0FBQ0EsY0FBSXdILElBQUksS0FBSyxJQUFiLEVBQW1CLE9BQU9pb0MsbUJBQW1CLENBQUM3ckMsS0FBRCxDQUFuQixDQUEyQnBILEdBQTNCLENBQStCd0QsR0FBL0IsQ0FBUDtBQUNuQixpQkFBT3dILElBQUksR0FBR0EsSUFBSSxDQUFDNUQsS0FBSyxDQUFDbEQsRUFBUCxDQUFQLEdBQW9CakQsU0FBL0I7QUFDRDtBQUNGLE9BVitCO0FBV2hDO0FBQ0E7QUFDQThGLE1BQUFBLEdBQUcsRUFBRSxTQUFTQSxHQUFULENBQWF2RCxHQUFiLEVBQWtCOUMsS0FBbEIsRUFBeUI7QUFDNUIsZUFBT3l2QixNQUFNLENBQUMsSUFBRCxFQUFPM3NCLEdBQVAsRUFBWTlDLEtBQVosQ0FBYjtBQUNEO0FBZitCLEtBQUgsR0FnQjNCO0FBQ0Y7QUFDQTtBQUNBMnVCLE1BQUFBLEdBQUcsRUFBRSxTQUFTQSxHQUFULENBQWEzdUIsS0FBYixFQUFvQjtBQUN2QixlQUFPeXZCLE1BQU0sQ0FBQyxJQUFELEVBQU96dkIsS0FBUCxFQUFjLElBQWQsQ0FBYjtBQUNEO0FBTEMsS0FoQk8sQ0FBWDtBQXdCQSxXQUFPc1AsQ0FBUDtBQUNEO0FBdEVjLENBQWpCOztBQ3JEQSxJQUFJeFEsUUFBTSxHQUFHSyxRQUFiOztBQUNBLElBQUk0akIsYUFBVyxHQUFHNWpCLGFBQWxCOztBQUNBLElBQUk2dUIsc0JBQXNCLEdBQUc3dUIsd0JBQTdCOztBQUNBLElBQUk4d0IsWUFBVSxHQUFHOXdCLFlBQWpCOztBQUNBLElBQUl3ekMsZ0JBQWMsR0FBR3h6QyxnQkFBckI7O0FBQ0EsSUFBSXFELFVBQVEsR0FBR3JELFVBQWY7O0FBQ0EsSUFBSXl6QyxtQkFBbUIsR0FBR3p6QyxhQUFBLENBQXVDb0gsT0FBakU7O0FBQ0EsSUFBSVAsZUFBZSxHQUFHN0csYUFBdEI7O0FBRUEsSUFBSTB6QyxPQUFPLEdBQUcsQ0FBQy96QyxRQUFNLENBQUNnUCxhQUFSLElBQXlCLG1CQUFtQmhQLFFBQTFEOztBQUVBLElBQUlndUIsWUFBWSxHQUFHMXRCLE1BQU0sQ0FBQzB0QixZQUExQjtBQUNBLElBQUlnbUIsZUFBSjs7QUFFQSxJQUFJNWtCLE9BQU8sR0FBRyxVQUFVaUMsSUFBVixFQUFnQjtBQUM1QixTQUFPLFNBQVN0cUIsT0FBVCxHQUFtQjtBQUN4QixXQUFPc3FCLElBQUksQ0FBQyxJQUFELEVBQU9udkIsU0FBUyxDQUFDQyxNQUFWLEdBQW1CRCxTQUFTLENBQUMsQ0FBRCxDQUE1QixHQUFrQ1QsU0FBekMsQ0FBWDtBQUNELEdBRkQ7QUFHRCxDQUpEO0FBT0E7OztBQUNBLElBQUl3eUMsUUFBUSxHQUFHcjBDLGtCQUFBLEdBQWlCdXhCLFlBQVUsQ0FBQyxTQUFELEVBQVkvQixPQUFaLEVBQXFCeWtCLGdCQUFyQixDQUExQztBQUdBO0FBQ0E7O0FBQ0EsSUFBSTNzQyxlQUFlLElBQUk2c0MsT0FBdkIsRUFBZ0M7QUFDOUJDLEVBQUFBLGVBQWUsR0FBR0gsZ0JBQWMsQ0FBQzlqQixjQUFmLENBQThCWCxPQUE5QixFQUF1QyxTQUF2QyxFQUFrRCxJQUFsRCxDQUFsQjtBQUNBRixFQUFBQSxzQkFBc0IsQ0FBQ04sTUFBdkI7QUFDQSxNQUFJc2xCLGdCQUFnQixHQUFHRCxRQUFRLENBQUM1ckMsU0FBaEM7QUFDQSxNQUFJOHJDLFlBQVksR0FBR0QsZ0JBQWdCLENBQUMsUUFBRCxDQUFuQztBQUNBLE1BQUlFLFNBQVMsR0FBR0YsZ0JBQWdCLENBQUMxc0MsR0FBakM7QUFDQSxNQUFJNnNDLFNBQVMsR0FBR0gsZ0JBQWdCLENBQUMxekMsR0FBakM7QUFDQSxNQUFJOHpDLFNBQVMsR0FBR0osZ0JBQWdCLENBQUMzc0MsR0FBakM7QUFDQTBjLEVBQUFBLGFBQVcsQ0FBQ2l3QixnQkFBRCxFQUFtQjtBQUM1QixjQUFVLFVBQVVsd0MsR0FBVixFQUFlO0FBQ3ZCLFVBQUlOLFVBQVEsQ0FBQ00sR0FBRCxDQUFSLElBQWlCLENBQUNncUIsWUFBWSxDQUFDaHFCLEdBQUQsQ0FBbEMsRUFBeUM7QUFDdkMsWUFBSTRELEtBQUssR0FBR2tzQyxtQkFBbUIsQ0FBQyxJQUFELENBQS9CO0FBQ0EsWUFBSSxDQUFDbHNDLEtBQUssQ0FBQzhyQyxNQUFYLEVBQW1COXJDLEtBQUssQ0FBQzhyQyxNQUFOLEdBQWUsSUFBSU0sZUFBSixFQUFmO0FBQ25CLGVBQU9HLFlBQVksQ0FBQ3R6QyxJQUFiLENBQWtCLElBQWxCLEVBQXdCbUQsR0FBeEIsS0FBZ0M0RCxLQUFLLENBQUM4ckMsTUFBTixDQUFhLFFBQWIsRUFBdUIxdkMsR0FBdkIsQ0FBdkM7QUFDRDs7QUFBQyxhQUFPbXdDLFlBQVksQ0FBQ3R6QyxJQUFiLENBQWtCLElBQWxCLEVBQXdCbUQsR0FBeEIsQ0FBUDtBQUNILEtBUDJCO0FBUTVCd0QsSUFBQUEsR0FBRyxFQUFFLFNBQVNBLEdBQVQsQ0FBYXhELEdBQWIsRUFBa0I7QUFDckIsVUFBSU4sVUFBUSxDQUFDTSxHQUFELENBQVIsSUFBaUIsQ0FBQ2dxQixZQUFZLENBQUNocUIsR0FBRCxDQUFsQyxFQUF5QztBQUN2QyxZQUFJNEQsS0FBSyxHQUFHa3NDLG1CQUFtQixDQUFDLElBQUQsQ0FBL0I7QUFDQSxZQUFJLENBQUNsc0MsS0FBSyxDQUFDOHJDLE1BQVgsRUFBbUI5ckMsS0FBSyxDQUFDOHJDLE1BQU4sR0FBZSxJQUFJTSxlQUFKLEVBQWY7QUFDbkIsZUFBT0ksU0FBUyxDQUFDdnpDLElBQVYsQ0FBZSxJQUFmLEVBQXFCbUQsR0FBckIsS0FBNkI0RCxLQUFLLENBQUM4ckMsTUFBTixDQUFhbHNDLEdBQWIsQ0FBaUJ4RCxHQUFqQixDQUFwQztBQUNEOztBQUFDLGFBQU9vd0MsU0FBUyxDQUFDdnpDLElBQVYsQ0FBZSxJQUFmLEVBQXFCbUQsR0FBckIsQ0FBUDtBQUNILEtBZDJCO0FBZTVCeEQsSUFBQUEsR0FBRyxFQUFFLFNBQVNBLEdBQVQsQ0FBYXdELEdBQWIsRUFBa0I7QUFDckIsVUFBSU4sVUFBUSxDQUFDTSxHQUFELENBQVIsSUFBaUIsQ0FBQ2dxQixZQUFZLENBQUNocUIsR0FBRCxDQUFsQyxFQUF5QztBQUN2QyxZQUFJNEQsS0FBSyxHQUFHa3NDLG1CQUFtQixDQUFDLElBQUQsQ0FBL0I7QUFDQSxZQUFJLENBQUNsc0MsS0FBSyxDQUFDOHJDLE1BQVgsRUFBbUI5ckMsS0FBSyxDQUFDOHJDLE1BQU4sR0FBZSxJQUFJTSxlQUFKLEVBQWY7QUFDbkIsZUFBT0ksU0FBUyxDQUFDdnpDLElBQVYsQ0FBZSxJQUFmLEVBQXFCbUQsR0FBckIsSUFBNEJxd0MsU0FBUyxDQUFDeHpDLElBQVYsQ0FBZSxJQUFmLEVBQXFCbUQsR0FBckIsQ0FBNUIsR0FBd0Q0RCxLQUFLLENBQUM4ckMsTUFBTixDQUFhbHpDLEdBQWIsQ0FBaUJ3RCxHQUFqQixDQUEvRDtBQUNEOztBQUFDLGFBQU9xd0MsU0FBUyxDQUFDeHpDLElBQVYsQ0FBZSxJQUFmLEVBQXFCbUQsR0FBckIsQ0FBUDtBQUNILEtBckIyQjtBQXNCNUJ1RCxJQUFBQSxHQUFHLEVBQUUsU0FBU0EsR0FBVCxDQUFhdkQsR0FBYixFQUFrQjlDLEtBQWxCLEVBQXlCO0FBQzVCLFVBQUl3QyxVQUFRLENBQUNNLEdBQUQsQ0FBUixJQUFpQixDQUFDZ3FCLFlBQVksQ0FBQ2hxQixHQUFELENBQWxDLEVBQXlDO0FBQ3ZDLFlBQUk0RCxLQUFLLEdBQUdrc0MsbUJBQW1CLENBQUMsSUFBRCxDQUEvQjtBQUNBLFlBQUksQ0FBQ2xzQyxLQUFLLENBQUM4ckMsTUFBWCxFQUFtQjlyQyxLQUFLLENBQUM4ckMsTUFBTixHQUFlLElBQUlNLGVBQUosRUFBZjtBQUNuQkksUUFBQUEsU0FBUyxDQUFDdnpDLElBQVYsQ0FBZSxJQUFmLEVBQXFCbUQsR0FBckIsSUFBNEJzd0MsU0FBUyxDQUFDenpDLElBQVYsQ0FBZSxJQUFmLEVBQXFCbUQsR0FBckIsRUFBMEI5QyxLQUExQixDQUE1QixHQUErRDBHLEtBQUssQ0FBQzhyQyxNQUFOLENBQWFuc0MsR0FBYixDQUFpQnZELEdBQWpCLEVBQXNCOUMsS0FBdEIsQ0FBL0Q7QUFDRCxPQUpELE1BSU9vekMsU0FBUyxDQUFDenpDLElBQVYsQ0FBZSxJQUFmLEVBQXFCbUQsR0FBckIsRUFBMEI5QyxLQUExQjs7QUFDUCxhQUFPLElBQVA7QUFDRDtBQTdCMkIsR0FBbkIsQ0FBWDtBQStCRDs7QUNsRUQsSUFBSWl3QixVQUFVLEdBQUc5d0IsWUFBakI7O0FBQ0EsSUFBSXd6QyxjQUFjLEdBQUd4ekMsZ0JBQXJCO0FBR0E7OztBQUNBOHdCLFVBQVUsQ0FBQyxTQUFELEVBQVksVUFBVUUsSUFBVixFQUFnQjtBQUNwQyxTQUFPLFNBQVNrakIsT0FBVCxHQUFtQjtBQUFFLFdBQU9sakIsSUFBSSxDQUFDLElBQUQsRUFBT252QixTQUFTLENBQUNDLE1BQVYsR0FBbUJELFNBQVMsQ0FBQyxDQUFELENBQTVCLEdBQWtDVCxTQUF6QyxDQUFYO0FBQWlFLEdBQTdGO0FBQ0QsQ0FGUyxFQUVQb3lDLGNBRk8sQ0FBVjs7QUNOQSxJQUFJN3pDLFFBQU0sR0FBR0ssUUFBYjs7QUFDQSxJQUFJd0UsUUFBTSxHQUFHeEUsV0FBYjs7QUFDQSxJQUFJeUIsWUFBVSxHQUFHekIsWUFBakI7O0FBRUEsSUFBSTZVLGdCQUFjLEdBQUc3VSxzQkFBckI7O0FBQ0EsSUFBSXlMLFVBQVEsR0FBR3pMLGtCQUFmOztBQUNBLElBQUlpRixpQkFBZSxHQUFHakYsaUJBQXRCOztBQUdBLElBQUltMEMsd0JBQXdCLEdBQUcsMEJBQS9CO0FBQ0EsSUFBSUMsZ0JBQWMsR0FBR252QyxpQkFBZSxDQUFDLGVBQUQsQ0FBcEM7QUFDQSxJQUFJb3ZDLGFBQWEsR0FBRzEwQyxRQUFNLENBQUMwMEMsYUFBM0I7QUFDQSxJQUFJQyw0QkFBNEIsR0FBRzl2QyxRQUFNLENBQUMrdkMsc0JBQTFDO0FBQ0EsSUFBSUEsd0JBQUosRUFBNEJ2c0MsU0FBNUI7O0FBRUEsSUFBSXNzQyw0QkFBSixFQUFrQztBQUNoQ0MsRUFBQUEsd0JBQXNCLEdBQUdELDRCQUF6QjtBQUNELENBRkQsTUFFTyxJQUFJN3lDLFlBQVUsQ0FBQzR5QyxhQUFELENBQWQsRUFBK0I7QUFDcENFLEVBQUFBLHdCQUFzQixHQUFHRixhQUFhLENBQUNyc0MsU0FBdkM7QUFDRCxDQUZNLE1BRUEsSUFBSXhELFFBQU0sQ0FBQzJ2Qyx3QkFBRCxDQUFOLElBQW9DeDBDLFFBQU0sQ0FBQ3cwQyx3QkFBRCxDQUE5QyxFQUEwRTtBQUMvRSxNQUFJO0FBQ0Y7QUFDQW5zQyxJQUFBQSxTQUFTLEdBQUc2TSxnQkFBYyxDQUFDQSxnQkFBYyxDQUFDQSxnQkFBYyxDQUFDalYsUUFBUSxDQUFDLDhCQUFELENBQVIsRUFBRCxDQUFmLENBQWYsQ0FBMUI7QUFDQSxRQUFJaVYsZ0JBQWMsQ0FBQzdNLFNBQUQsQ0FBZCxLQUE4Qi9ILE1BQU0sQ0FBQytILFNBQXpDLEVBQW9EdXNDLHdCQUFzQixHQUFHdnNDLFNBQXpCO0FBQ3JELEdBSkQsQ0FJRSxPQUFPbEksS0FBUCxFQUFjO0FBQUU7QUFBYTtBQUNoQzs7QUFFRCxJQUFJLENBQUN5MEMsd0JBQUwsRUFBNkJBLHdCQUFzQixHQUFHLEVBQXpCOztBQUc3QixJQUFJLENBQUM5eUMsWUFBVSxDQUFDOHlDLHdCQUFzQixDQUFDSCxnQkFBRCxDQUF2QixDQUFmLEVBQXlEO0FBQ3ZEM29DLEVBQUFBLFVBQVEsQ0FBQzhvQyx3QkFBRCxFQUF5QkgsZ0JBQXpCLEVBQXlDLFlBQVk7QUFDM0QsV0FBTyxJQUFQO0FBQ0QsR0FGTyxDQUFSO0FBR0Q7O0lBRUQ3MEMsc0JBQUEsR0FBaUJnMUMsd0JBQWpCOztBQ25DQSxJQUFJcHVDLFdBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSTZPLFFBQU0sR0FBRzdPLGNBQWI7O0FBQ0EsSUFBSStFLFdBQVMsR0FBRy9FLFdBQWhCOztBQUNBLElBQUk0akIsYUFBVyxHQUFHNWpCLGFBQWxCOztBQUNBLElBQUlxSSxxQkFBbUIsR0FBR3JJLGFBQTFCOztBQUNBLElBQUkrQixZQUFVLEdBQUcvQixZQUFqQjs7QUFDQSxJQUFJdTBDLHdCQUFzQixHQUFHdjBDLHNCQUE3Qjs7QUFFQSxJQUFJKzRCLFNBQU8sR0FBR2gzQixZQUFVLENBQUMsU0FBRCxDQUF4QjtBQUVBLElBQUlvUSxrQkFBZ0IsR0FBRzlKLHFCQUFtQixDQUFDbkIsR0FBM0M7QUFDQSxJQUFJcUIsa0JBQWdCLEdBQUdGLHFCQUFtQixDQUFDbEksR0FBM0M7O0FBRUEsSUFBSXEwQyxpQ0FBaUMsR0FBRyxVQUFVcHZDLE1BQVYsRUFBa0I2MkIsT0FBbEIsRUFBMkJHLE1BQTNCLEVBQW1DO0FBQ3pFLE1BQUl0bEIsSUFBSSxHQUFHMVIsTUFBTSxDQUFDMFIsSUFBbEI7QUFDQWlpQixFQUFBQSxTQUFPLENBQUNrRCxPQUFSLENBQWdCNzJCLE1BQU0sQ0FBQ3ZFLEtBQXZCLEVBQThCNjZCLElBQTlCLENBQW1DLFVBQVU3NkIsS0FBVixFQUFpQjtBQUNsRG83QixJQUFBQSxPQUFPLENBQUM7QUFBRW5sQixNQUFBQSxJQUFJLEVBQUVBLElBQVI7QUFBY2pXLE1BQUFBLEtBQUssRUFBRUE7QUFBckIsS0FBRCxDQUFQO0FBQ0QsR0FGRCxFQUVHdTdCLE1BRkg7QUFHRCxDQUxEOztBQU9BLElBQUlxWSx1QkFBcUIsR0FBRyxTQUFTSixhQUFULENBQXVCdnhDLFFBQXZCLEVBQWlDO0FBQzNEcVAsRUFBQUEsa0JBQWdCLENBQUMsSUFBRCxFQUFPO0FBQ3JCclAsSUFBQUEsUUFBUSxFQUFFcUQsV0FBUSxDQUFDckQsUUFBRCxDQURHO0FBRXJCMlQsSUFBQUEsSUFBSSxFQUFFM1QsUUFBUSxDQUFDMlQ7QUFGTSxHQUFQLENBQWhCO0FBSUQsQ0FMRDs7QUFPQWcrQix1QkFBcUIsQ0FBQ3pzQyxTQUF0QixHQUFrQzRiLGFBQVcsQ0FBQy9VLFFBQU0sQ0FBQzBsQyx3QkFBRCxDQUFQLEVBQWlDO0FBQzVFOTlCLEVBQUFBLElBQUksRUFBRSxTQUFTQSxJQUFULENBQWNrQyxHQUFkLEVBQW1CO0FBQ3ZCLFFBQUlwUixLQUFLLEdBQUdnQixrQkFBZ0IsQ0FBQyxJQUFELENBQTVCO0FBQ0EsUUFBSW1zQyxNQUFNLEdBQUcsQ0FBQyxDQUFDN3lDLFNBQVMsQ0FBQ0MsTUFBekI7QUFDQSxXQUFPLElBQUlpM0IsU0FBSixDQUFZLFVBQVVrRCxPQUFWLEVBQW1CRyxNQUFuQixFQUEyQjtBQUM1QyxVQUFJaDNCLE1BQU0sR0FBR2UsV0FBUSxDQUFDb0IsS0FBSyxDQUFDa1AsSUFBTixDQUFXakgsS0FBWCxDQUFpQmpJLEtBQUssQ0FBQ3pFLFFBQXZCLEVBQWlDNHhDLE1BQU0sR0FBRyxDQUFDLzdCLEdBQUQsQ0FBSCxHQUFXLEVBQWxELENBQUQsQ0FBckI7QUFDQTY3QixNQUFBQSxpQ0FBaUMsQ0FBQ3B2QyxNQUFELEVBQVM2MkIsT0FBVCxFQUFrQkcsTUFBbEIsQ0FBakM7QUFDRCxLQUhNLENBQVA7QUFJRCxHQVIyRTtBQVM1RSxZQUFVLFVBQVV6akIsR0FBVixFQUFlO0FBQ3ZCLFFBQUk3VixRQUFRLEdBQUd5RixrQkFBZ0IsQ0FBQyxJQUFELENBQWhCLENBQXVCekYsUUFBdEM7QUFDQSxRQUFJNHhDLE1BQU0sR0FBRyxDQUFDLENBQUM3eUMsU0FBUyxDQUFDQyxNQUF6QjtBQUNBLFdBQU8sSUFBSWkzQixTQUFKLENBQVksVUFBVWtELE9BQVYsRUFBbUJHLE1BQW5CLEVBQTJCO0FBQzVDLFVBQUl1WSxPQUFPLEdBQUc1dkMsV0FBUyxDQUFDakMsUUFBRCxFQUFXLFFBQVgsQ0FBdkI7QUFDQSxVQUFJNnhDLE9BQU8sS0FBS3Z6QyxTQUFoQixFQUEyQixPQUFPNjZCLE9BQU8sQ0FBQztBQUFFbmxCLFFBQUFBLElBQUksRUFBRSxJQUFSO0FBQWNqVyxRQUFBQSxLQUFLLEVBQUU4WDtBQUFyQixPQUFELENBQWQ7QUFDM0IsVUFBSXZULE1BQU0sR0FBR2UsV0FBUSxDQUFDd3VDLE9BQU8sQ0FBQ25sQyxLQUFSLENBQWMxTSxRQUFkLEVBQXdCNHhDLE1BQU0sR0FBRyxDQUFDLzdCLEdBQUQsQ0FBSCxHQUFXLEVBQXpDLENBQUQsQ0FBckI7QUFDQTY3QixNQUFBQSxpQ0FBaUMsQ0FBQ3B2QyxNQUFELEVBQVM2MkIsT0FBVCxFQUFrQkcsTUFBbEIsQ0FBakM7QUFDRCxLQUxNLENBQVA7QUFNRCxHQWxCMkU7QUFtQjVFLFdBQVMsVUFBVXpqQixHQUFWLEVBQWU7QUFDdEIsUUFBSTdWLFFBQVEsR0FBR3lGLGtCQUFnQixDQUFDLElBQUQsQ0FBaEIsQ0FBdUJ6RixRQUF0QztBQUNBLFFBQUk0eEMsTUFBTSxHQUFHLENBQUMsQ0FBQzd5QyxTQUFTLENBQUNDLE1BQXpCO0FBQ0EsV0FBTyxJQUFJaTNCLFNBQUosQ0FBWSxVQUFVa0QsT0FBVixFQUFtQkcsTUFBbkIsRUFBMkI7QUFDNUMsVUFBSXdZLE1BQU0sR0FBRzd2QyxXQUFTLENBQUNqQyxRQUFELEVBQVcsT0FBWCxDQUF0QjtBQUNBLFVBQUk4eEMsTUFBTSxLQUFLeHpDLFNBQWYsRUFBMEIsT0FBT2c3QixNQUFNLENBQUN6akIsR0FBRCxDQUFiO0FBQzFCLFVBQUl2VCxNQUFNLEdBQUdlLFdBQVEsQ0FBQ3l1QyxNQUFNLENBQUNwbEMsS0FBUCxDQUFhMU0sUUFBYixFQUF1QjR4QyxNQUFNLEdBQUcsQ0FBQy83QixHQUFELENBQUgsR0FBVyxFQUF4QyxDQUFELENBQXJCO0FBQ0E2N0IsTUFBQUEsaUNBQWlDLENBQUNwdkMsTUFBRCxFQUFTNjJCLE9BQVQsRUFBa0JHLE1BQWxCLENBQWpDO0FBQ0QsS0FMTSxDQUFQO0FBTUQ7QUE1QjJFLENBQWpDLENBQTdDO0lBK0JBNzhCLHFCQUFBLEdBQWlCazFDLHVCQUFqQjs7QUMzREEsSUFBSUEsdUJBQXFCLEdBQUd6MEMscUJBQTVCOztBQUNBLElBQUltRyxXQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUkrVixhQUFXLEdBQUcvVixhQUFsQjs7QUFDQSxJQUFJK0UsV0FBUyxHQUFHL0UsV0FBaEI7O0FBQ0EsSUFBSWlGLGlCQUFlLEdBQUdqRixpQkFBdEI7O0FBRUEsSUFBSW8wQyxnQkFBYyxHQUFHbnZDLGlCQUFlLENBQUMsZUFBRCxDQUFwQzs7SUFFQTFGLGtCQUFBLEdBQWlCLFVBQVVGLEVBQVYsRUFBY29XLGFBQWQsRUFBNkI7QUFDNUMsTUFBSTdULE1BQU0sR0FBR0MsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCaUQsV0FBUyxDQUFDMUYsRUFBRCxFQUFLKzBDLGdCQUFMLENBQWhDLEdBQXVEMytCLGFBQXBFO0FBQ0EsU0FBTzdULE1BQU0sR0FBR3VFLFdBQVEsQ0FBQ3ZFLE1BQU0sQ0FBQ3BCLElBQVAsQ0FBWW5CLEVBQVosQ0FBRCxDQUFYLEdBQStCLElBQUlvMUMsdUJBQUosQ0FBMEIxK0IsYUFBVyxDQUFDMVcsRUFBRCxDQUFyQyxDQUE1QztBQUNELENBSEQ7O0FDUkEsSUFBSU0sUUFBTSxHQUFHSyxRQUFiOztJQUVBVCxZQUFBLEdBQWlCLFVBQVVzMUMsV0FBVixFQUF1QjtBQUN0QyxTQUFPbDFDLFFBQU0sQ0FBQ2sxQyxXQUFELENBQU4sQ0FBb0I3c0MsU0FBM0I7QUFDRCxDQUZEOztBQ0FBOztBQUNBLElBQUk5RSxXQUFTLEdBQUdsRCxXQUFoQjs7QUFDQSxJQUFJbUcsV0FBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJK0IsWUFBVSxHQUFHL0IsWUFBakI7O0FBQ0EsSUFBSStFLFdBQVMsR0FBRy9FLFdBQWhCOztBQUVBLElBQUlxWSxnQkFBZ0IsR0FBRyxnQkFBdkI7O0FBRUEsSUFBSXhPLGNBQVksR0FBRyxVQUFVdkMsSUFBVixFQUFnQjtBQUNqQyxNQUFJd3RDLFdBQVcsR0FBR3h0QyxJQUFJLElBQUksQ0FBMUI7QUFDQSxNQUFJeXRDLFdBQVcsR0FBR3p0QyxJQUFJLElBQUksQ0FBMUI7QUFDQSxNQUFJcUosUUFBUSxHQUFHckosSUFBSSxJQUFJLENBQXZCO0FBQ0EsTUFBSW9KLE9BQU8sR0FBR3BKLElBQUksSUFBSSxDQUF0QjtBQUNBLFNBQU8sVUFBVXhFLFFBQVYsRUFBb0JVLEVBQXBCLEVBQXdCc0gsTUFBeEIsRUFBZ0M7QUFDckMzRSxJQUFBQSxXQUFRLENBQUNyRCxRQUFELENBQVI7QUFDQSxRQUFJaTJCLE9BQU8sR0FBR2gzQixZQUFVLENBQUMsU0FBRCxDQUF4QjtBQUNBLFFBQUkwVSxJQUFJLEdBQUd2VCxXQUFTLENBQUNKLFFBQVEsQ0FBQzJULElBQVYsQ0FBcEI7QUFDQSxRQUFJbE4sS0FBSyxHQUFHLENBQVo7QUFDQSxRQUFJeXJDLE9BQU8sR0FBR3h4QyxFQUFFLEtBQUtwQyxTQUFyQjtBQUNBLFFBQUk0ekMsT0FBTyxJQUFJLENBQUNGLFdBQWhCLEVBQTZCNXhDLFdBQVMsQ0FBQ00sRUFBRCxDQUFUO0FBRTdCLFdBQU8sSUFBSXUxQixPQUFKLENBQVksVUFBVWtELE9BQVYsRUFBbUJHLE1BQW5CLEVBQTJCO0FBQzVDLFVBQUk2WSxjQUFjLEdBQUcsVUFBVXJ6QyxNQUFWLEVBQWtCSixRQUFsQixFQUE0QjtBQUMvQyxZQUFJO0FBQ0YsY0FBSTB6QyxZQUFZLEdBQUdud0MsV0FBUyxDQUFDakMsUUFBRCxFQUFXLFFBQVgsQ0FBNUI7O0FBQ0EsY0FBSW95QyxZQUFKLEVBQWtCO0FBQ2hCLG1CQUFPbmMsT0FBTyxDQUFDa0QsT0FBUixDQUFnQmlaLFlBQVksQ0FBQzEwQyxJQUFiLENBQWtCc0MsUUFBbEIsQ0FBaEIsRUFBNkM0NEIsSUFBN0MsQ0FBa0QsWUFBWTtBQUNuRTk1QixjQUFBQSxNQUFNLENBQUNKLFFBQUQsQ0FBTjtBQUNELGFBRk0sRUFFSixVQUFVMUIsS0FBVixFQUFpQjtBQUNsQnM4QixjQUFBQSxNQUFNLENBQUN0OEIsS0FBRCxDQUFOO0FBQ0QsYUFKTSxDQUFQO0FBS0Q7QUFDRixTQVRELENBU0UsT0FBT3FuQyxNQUFQLEVBQWU7QUFDZixpQkFBTy9LLE1BQU0sQ0FBQytLLE1BQUQsQ0FBYjtBQUNEOztBQUFDdmxDLFFBQUFBLE1BQU0sQ0FBQ0osUUFBRCxDQUFOO0FBQ0gsT0FiRDs7QUFlQSxVQUFJMnpDLE9BQU8sR0FBRyxVQUFVcjFDLEtBQVYsRUFBaUI7QUFDN0JtMUMsUUFBQUEsY0FBYyxDQUFDN1ksTUFBRCxFQUFTdDhCLEtBQVQsQ0FBZDtBQUNELE9BRkQ7O0FBSUEsVUFBSXMxQyxJQUFJLEdBQUcsWUFBWTtBQUNyQixZQUFJO0FBQ0YsY0FBSU4sV0FBVyxJQUFLdnJDLEtBQUssR0FBRzhPLGdCQUF4QixJQUE2QzI4QixPQUFqRCxFQUEwRDtBQUN4RCxrQkFBTTN6QyxTQUFTLENBQUMsb0RBQUQsQ0FBZjtBQUNEOztBQUNEMDNCLFVBQUFBLE9BQU8sQ0FBQ2tELE9BQVIsQ0FBZ0I5MUIsV0FBUSxDQUFDc1EsSUFBSSxDQUFDalcsSUFBTCxDQUFVc0MsUUFBVixDQUFELENBQXhCLEVBQStDNDRCLElBQS9DLENBQW9ELFVBQVVobEIsSUFBVixFQUFnQjtBQUNsRSxnQkFBSTtBQUNGLGtCQUFJdlEsV0FBUSxDQUFDdVEsSUFBRCxDQUFSLENBQWVJLElBQW5CLEVBQXlCO0FBQ3ZCLG9CQUFJZytCLFdBQUosRUFBaUI7QUFDZmhxQyxrQkFBQUEsTUFBTSxDQUFDaEosTUFBUCxHQUFnQnlILEtBQWhCO0FBQ0EweUIsa0JBQUFBLE9BQU8sQ0FBQ254QixNQUFELENBQVA7QUFDRCxpQkFIRCxNQUdPbXhCLE9BQU8sQ0FBQ3ZyQixPQUFPLEdBQUcsS0FBSCxHQUFXQyxRQUFRLElBQUl2UCxTQUEvQixDQUFQO0FBQ1IsZUFMRCxNQUtPO0FBQ0wsb0JBQUlQLEtBQUssR0FBRzZWLElBQUksQ0FBQzdWLEtBQWpCOztBQUNBLG9CQUFJbTBDLE9BQUosRUFBYTtBQUNYamMsa0JBQUFBLE9BQU8sQ0FBQ2tELE9BQVIsQ0FBZ0I2WSxXQUFXLEdBQUd0eEMsRUFBRSxDQUFDM0MsS0FBRCxFQUFRMEksS0FBUixDQUFMLEdBQXNCL0YsRUFBRSxDQUFDM0MsS0FBRCxDQUFuRCxFQUE0RDY2QixJQUE1RCxDQUFpRSxVQUFVdDJCLE1BQVYsRUFBa0I7QUFDakYsd0JBQUkydkMsV0FBSixFQUFpQjtBQUNmSyxzQkFBQUEsSUFBSTtBQUNMLHFCQUZELE1BRU8sSUFBSXprQyxRQUFKLEVBQWM7QUFDbkJ2TCxzQkFBQUEsTUFBTSxHQUFHZ3dDLElBQUksRUFBUCxHQUFZSCxjQUFjLENBQUNoWixPQUFELEVBQVUsS0FBVixDQUFoQztBQUNELHFCQUZNLE1BRUEsSUFBSTZZLFdBQUosRUFBaUI7QUFDdEJocUMsc0JBQUFBLE1BQU0sQ0FBQ3ZCLEtBQUssRUFBTixDQUFOLEdBQWtCbkUsTUFBbEI7QUFDQWd3QyxzQkFBQUEsSUFBSTtBQUNMLHFCQUhNLE1BR0E7QUFDTGh3QyxzQkFBQUEsTUFBTSxHQUFHNnZDLGNBQWMsQ0FBQ2haLE9BQUQsRUFBVXZyQixPQUFPLElBQUk3UCxLQUFyQixDQUFqQixHQUErQ3UwQyxJQUFJLEVBQXpEO0FBQ0Q7QUFDRixtQkFYRCxFQVdHRCxPQVhIO0FBWUQsaUJBYkQsTUFhTztBQUNMcnFDLGtCQUFBQSxNQUFNLENBQUN2QixLQUFLLEVBQU4sQ0FBTixHQUFrQjFJLEtBQWxCO0FBQ0F1MEMsa0JBQUFBLElBQUk7QUFDTDtBQUNGO0FBQ0YsYUExQkQsQ0EwQkUsT0FBT3QxQyxLQUFQLEVBQWM7QUFBRXExQyxjQUFBQSxPQUFPLENBQUNyMUMsS0FBRCxDQUFQO0FBQWlCO0FBQ3BDLFdBNUJELEVBNEJHcTFDLE9BNUJIO0FBNkJELFNBakNELENBaUNFLE9BQU9oTyxNQUFQLEVBQWU7QUFBRWdPLFVBQUFBLE9BQU8sQ0FBQ2hPLE1BQUQsQ0FBUDtBQUFrQjtBQUN0QyxPQW5DRDs7QUFxQ0FpTyxNQUFBQSxJQUFJO0FBQ0wsS0ExRE0sQ0FBUDtBQTJERCxHQW5FRDtBQW9FRCxDQXpFRDs7SUEyRUE3MUMsc0JBQUEsR0FBaUI7QUFDZjgxQyxFQUFBQSxPQUFPLEVBQUV4ckMsY0FBWSxDQUFDLENBQUQsQ0FETjtBQUVmcUgsRUFBQUEsT0FBTyxFQUFFckgsY0FBWSxDQUFDLENBQUQsQ0FGTjtBQUdmeUgsRUFBQUEsS0FBSyxFQUFFekgsY0FBWSxDQUFDLENBQUQsQ0FISjtBQUlmd0gsRUFBQUEsSUFBSSxFQUFFeEgsY0FBWSxDQUFDLENBQUQsQ0FKSDtBQUtmMEgsRUFBQUEsSUFBSSxFQUFFMUgsY0FBWSxDQUFDLENBQUQ7QUFMSCxDQUFqQjs7QUNwRkEsSUFBSXlHLE1BQUksR0FBR3RRLG1CQUFYOztBQUNBLElBQUlrRSxVQUFRLEdBQUdsRSxVQUFmOztBQUNBLElBQUlnUSxlQUFhLEdBQUdoUSxlQUFwQjs7QUFDQSxJQUFJczFDLGtCQUFnQixHQUFHdDFDLGtCQUF2Qjs7QUFDQSxJQUFJK1YsYUFBVyxHQUFHL1YsYUFBbEI7O0FBQ0EsSUFBSXdWLG1CQUFpQixHQUFHeFYsbUJBQXhCOztBQUNBLElBQUkrRSxXQUFTLEdBQUcvRSxXQUFoQjs7QUFDQSxJQUFJdTFDLFVBQVUsR0FBR3YxQyxZQUFqQjs7QUFDQSxJQUFJK0IsWUFBVSxHQUFHL0IsWUFBakI7O0FBQ0EsSUFBSWlGLGlCQUFlLEdBQUdqRixpQkFBdEI7O0FBQ0EsSUFBSXkwQyx1QkFBcUIsR0FBR3owQyxxQkFBNUI7O0FBQ0EsSUFBSXExQyxPQUFPLEdBQUdyMUMsc0JBQUEsQ0FBaURxMUMsT0FBL0Q7O0FBRUEsSUFBSWpCLGdCQUFjLEdBQUdudkMsaUJBQWUsQ0FBQyxlQUFELENBQXBDO0FBQ0EsSUFBSW9YLGFBQWEsR0FBR2s1QixVQUFVLENBQUMsT0FBRCxDQUFWLENBQW9CajRCLE1BQXhDO0FBR0E7O0lBQ0EvZCxnQkFBQSxHQUFpQixTQUFTaTJDLFNBQVQsQ0FBbUJDO0FBQVc7QUFBOUIsRUFBOEU7QUFDN0YsTUFBSXRsQyxDQUFDLEdBQUcsSUFBUjtBQUNBLE1BQUl1SixlQUFlLEdBQUc3WCxTQUFTLENBQUNDLE1BQWhDO0FBQ0EsTUFBSXVaLEtBQUssR0FBRzNCLGVBQWUsR0FBRyxDQUFsQixHQUFzQjdYLFNBQVMsQ0FBQyxDQUFELENBQS9CLEdBQXFDVCxTQUFqRDtBQUNBLE1BQUlvWixPQUFPLEdBQUdkLGVBQWUsR0FBRyxDQUFsQixHQUFzQjdYLFNBQVMsQ0FBQyxDQUFELENBQS9CLEdBQXFDVCxTQUFuRDtBQUNBLFNBQU8sS0FBS1csWUFBVSxDQUFDLFNBQUQsQ0FBZixFQUE0QixVQUFVazZCLE9BQVYsRUFBbUI7QUFDcEQsUUFBSWgyQixDQUFDLEdBQUcvQixVQUFRLENBQUN1eEMsVUFBRCxDQUFoQjtBQUNBLFFBQUlwNkIsS0FBSyxLQUFLamEsU0FBZCxFQUF5QmlhLEtBQUssR0FBRy9LLE1BQUksQ0FBQytLLEtBQUQsRUFBUWIsT0FBUixFQUFpQixDQUFqQixDQUFaO0FBQ3pCLFFBQUlrN0Isa0JBQWtCLEdBQUczd0MsV0FBUyxDQUFDa0IsQ0FBRCxFQUFJbXVDLGdCQUFKLENBQWxDO0FBQ0EsUUFBSXVCLGlCQUFpQixHQUFHRCxrQkFBa0IsR0FBR3QwQyxTQUFILEdBQWVvVSxtQkFBaUIsQ0FBQ3ZQLENBQUQsQ0FBakIsSUFBd0JvVyxhQUFqRjtBQUNBLFFBQUl6RCxDQUFDLEdBQUc1SSxlQUFhLENBQUNHLENBQUQsQ0FBYixHQUFtQixJQUFJQSxDQUFKLEVBQW5CLEdBQTZCLEVBQXJDO0FBQ0EsUUFBSXJOLFFBQVEsR0FBRzR5QyxrQkFBa0IsR0FDN0JKLGtCQUFnQixDQUFDcnZDLENBQUQsRUFBSXl2QyxrQkFBSixDQURhLEdBRTdCLElBQUlqQix1QkFBSixDQUEwQjErQixhQUFXLENBQUM5UCxDQUFELEVBQUkwdkMsaUJBQUosQ0FBckMsQ0FGSjtBQUdBMVosSUFBQUEsT0FBTyxDQUFDb1osT0FBTyxDQUFDdnlDLFFBQUQsRUFBV3VZLEtBQVgsRUFBa0J6QyxDQUFsQixDQUFSLENBQVA7QUFDRCxHQVZNLENBQVA7QUFXRCxDQWhCRDs7QUNuQkEsSUFBSWxILElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXcxQyxTQUFTLEdBQUd4MUMsZ0JBQWhCO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsT0FBVjtBQUFtQmdCLEVBQUFBLElBQUksRUFBRTtBQUF6QixDQUFELEVBQWtDO0FBQ2pDMHBDLEVBQUFBLFNBQVMsRUFBRUE7QUFEc0IsQ0FBbEMsQ0FBRDs7QUNIQSxJQUFJOWpDLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSTQxQyxlQUFhLEdBQUc1MUMsY0FBQSxDQUF3Q3lSLFlBQTVEOztBQUNBLElBQUkrRixrQkFBZ0IsR0FBR3hYLGtCQUF2QjtBQUdBOzs7QUFDQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLE9BQVY7QUFBbUJvSyxFQUFBQSxLQUFLLEVBQUU7QUFBMUIsQ0FBRCxFQUFtQztBQUNsQzJnQyxFQUFBQSxTQUFTLEVBQUUsU0FBU0EsU0FBVCxDQUFtQjlrQztBQUFXO0FBQTlCLElBQStDO0FBQ3hELFdBQU82a0MsZUFBYSxDQUFDLElBQUQsRUFBTzdrQyxVQUFQLEVBQW1CbFAsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBekQsQ0FBcEI7QUFDRDtBQUhpQyxDQUFuQyxDQUFEO0FBTUFvVyxrQkFBZ0IsQ0FBQyxXQUFELENBQWhCOztBQ2JBLElBQUk5RixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUk0MUMsZUFBYSxHQUFHNTFDLGNBQUEsQ0FBd0N5UixZQUE1RDs7QUFDQSxJQUFJK0Ysa0JBQWdCLEdBQUd4WCxrQkFBdkI7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxPQUFWO0FBQW1Cb0ssRUFBQUEsS0FBSyxFQUFFO0FBQTFCLENBQUQsRUFBbUM7QUFDbEN6RCxFQUFBQSxZQUFZLEVBQUUsU0FBU0EsWUFBVCxDQUFzQlY7QUFBVztBQUFqQyxJQUFrRDtBQUM5RCxXQUFPNmtDLGVBQWEsQ0FBQyxJQUFELEVBQU83a0MsVUFBUCxFQUFtQmxQLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUF1QkQsU0FBUyxDQUFDLENBQUQsQ0FBaEMsR0FBc0NULFNBQXpELENBQXBCO0FBQ0Q7QUFIaUMsQ0FBbkMsQ0FBRDtBQU1Bb1csa0JBQWdCLENBQUMsY0FBRCxDQUFoQjs7QUNiQSxJQUFJbEgsTUFBSSxHQUFHdFEsbUJBQVg7O0FBQ0EsSUFBSXNCLGVBQWEsR0FBR3RCLGFBQXBCOztBQUNBLElBQUlrRSxVQUFRLEdBQUdsRSxVQUFmOztBQUNBLElBQUk0SixtQkFBaUIsR0FBRzVKLG1CQUF4Qjs7O0FBR0EsSUFBSTZKLFlBQVksR0FBRyxVQUFVdkMsSUFBVixFQUFnQjtBQUNqQyxNQUFJd3VDLGtCQUFrQixHQUFHeHVDLElBQUksSUFBSSxDQUFqQztBQUNBLFNBQU8sVUFBVXlDLEtBQVYsRUFBaUJnSCxVQUFqQixFQUE2QjFCLElBQTdCLEVBQW1DO0FBQ3hDLFFBQUlwSixDQUFDLEdBQUcvQixVQUFRLENBQUM2RixLQUFELENBQWhCO0FBQ0EsUUFBSXJLLElBQUksR0FBRzRCLGVBQWEsQ0FBQzJFLENBQUQsQ0FBeEI7QUFDQSxRQUFJZ0wsYUFBYSxHQUFHWCxNQUFJLENBQUNTLFVBQUQsRUFBYTFCLElBQWIsRUFBbUIsQ0FBbkIsQ0FBeEI7QUFDQSxRQUFJOUYsS0FBSyxHQUFHSyxtQkFBaUIsQ0FBQ2xLLElBQUQsQ0FBN0I7QUFDQSxRQUFJbUIsS0FBSixFQUFXdUUsTUFBWDs7QUFDQSxXQUFPbUUsS0FBSyxLQUFLLENBQWpCLEVBQW9CO0FBQ2xCMUksTUFBQUEsS0FBSyxHQUFHbkIsSUFBSSxDQUFDNkosS0FBRCxDQUFaO0FBQ0FuRSxNQUFBQSxNQUFNLEdBQUc2TCxhQUFhLENBQUNwUSxLQUFELEVBQVEwSSxLQUFSLEVBQWV0RCxDQUFmLENBQXRCO0FBQ0EsVUFBSWIsTUFBSixFQUFZLFFBQVFrQyxJQUFSO0FBQ1YsYUFBSyxDQUFMO0FBQVEsaUJBQU96RyxLQUFQO0FBQWM7O0FBQ3RCLGFBQUssQ0FBTDtBQUFRLGlCQUFPMEksS0FBUDtBQUFjO0FBRlo7QUFJYjs7QUFDRCxXQUFPdXNDLGtCQUFrQixHQUFHLENBQUMsQ0FBSixHQUFRMTBDLFNBQWpDO0FBQ0QsR0FmRDtBQWdCRCxDQWxCRDs7SUFvQkE3QixzQkFBQSxHQUFpQjtBQUNmO0FBQ0E7QUFDQXcyQyxFQUFBQSxRQUFRLEVBQUVsc0MsWUFBWSxDQUFDLENBQUQsQ0FIUDtBQUlmO0FBQ0E7QUFDQW1zQyxFQUFBQSxhQUFhLEVBQUVuc0MsWUFBWSxDQUFDLENBQUQ7QUFOWixDQUFqQjs7QUN6QkEsSUFBSTZILElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSWkyQyxXQUFTLEdBQUdqMkMsc0JBQUEsQ0FBa0QrMUMsUUFBbEU7O0FBQ0EsSUFBSXYrQixrQkFBZ0IsR0FBR3hYLGtCQUF2QjtBQUdBOzs7QUFDQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLE9BQVY7QUFBbUJvSyxFQUFBQSxLQUFLLEVBQUU7QUFBMUIsQ0FBRCxFQUFtQztBQUNsQzZnQyxFQUFBQSxRQUFRLEVBQUUsU0FBU0EsUUFBVCxDQUFrQmhsQztBQUFXO0FBQTdCLElBQXVEO0FBQy9ELFdBQU9rbEMsV0FBUyxDQUFDLElBQUQsRUFBT2xsQyxVQUFQLEVBQW1CbFAsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBekQsQ0FBaEI7QUFDRDtBQUhpQyxDQUFuQyxDQUFEO0FBTUFvVyxrQkFBZ0IsQ0FBQyxVQUFELENBQWhCOztBQ1pBLElBQUk5RixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlrMkMsZ0JBQWMsR0FBR2wyQyxzQkFBQSxDQUFrRGcyQyxhQUF2RTs7QUFDQSxJQUFJeCtCLGtCQUFnQixHQUFHeFgsa0JBQXZCO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsT0FBVjtBQUFtQm9LLEVBQUFBLEtBQUssRUFBRTtBQUExQixDQUFELEVBQW1DO0FBQ2xDOGdDLEVBQUFBLGFBQWEsRUFBRSxTQUFTQSxhQUFULENBQXVCamxDO0FBQVc7QUFBbEMsSUFBNEQ7QUFDekUsV0FBT21sQyxnQkFBYyxDQUFDLElBQUQsRUFBT25sQyxVQUFQLEVBQW1CbFAsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBekQsQ0FBckI7QUFDRDtBQUhpQyxDQUFuQyxDQUFEO0FBTUFvVyxrQkFBZ0IsQ0FBQyxlQUFELENBQWhCOztBQ2JBLElBQUlsSCxNQUFJLEdBQUd0USxtQkFBWDs7QUFDQSxJQUFJc0IsYUFBYSxHQUFHdEIsYUFBcEI7O0FBQ0EsSUFBSWtFLFVBQVEsR0FBR2xFLFVBQWY7O0FBQ0EsSUFBSThGLGFBQWEsR0FBRzlGLGVBQXBCOztBQUNBLElBQUk0SixtQkFBaUIsR0FBRzVKLG1CQUF4Qjs7QUFDQSxJQUFJbTJDLFlBQVksR0FBR24yQyxjQUFuQjs7QUFDQSxJQUFJc3hDLDZCQUEyQixHQUFHdHhDLDZCQUFsQzs7QUFFQSxJQUFJK0QsTUFBSSxHQUFHLEdBQUdBLElBQWQ7O0lBRUF4RSxZQUFBLEdBQWlCLFVBQVV3SyxLQUFWLEVBQWlCZ0gsVUFBakIsRUFBNkIxQixJQUE3QixFQUFtQyttQyxtQkFBbkMsRUFBd0Q7QUFDdkUsTUFBSW53QyxDQUFDLEdBQUcvQixVQUFRLENBQUM2RixLQUFELENBQWhCO0FBQ0EsTUFBSXJLLElBQUksR0FBRzRCLGFBQWEsQ0FBQzJFLENBQUQsQ0FBeEI7QUFDQSxNQUFJZ0wsYUFBYSxHQUFHWCxNQUFJLENBQUNTLFVBQUQsRUFBYTFCLElBQWIsRUFBbUIsQ0FBbkIsQ0FBeEI7QUFDQSxNQUFJdkUsTUFBTSxHQUFHcXJDLFlBQVksQ0FBQyxJQUFELENBQXpCO0FBQ0EsTUFBSXIwQyxNQUFNLEdBQUc4SCxtQkFBaUIsQ0FBQ2xLLElBQUQsQ0FBOUI7QUFDQSxNQUFJNkosS0FBSyxHQUFHLENBQVo7QUFDQSxNQUFJa1csV0FBSixFQUFpQjliLEdBQWpCLEVBQXNCOUMsS0FBdEI7O0FBQ0EsU0FBTWlCLE1BQU0sR0FBR3lILEtBQWYsRUFBc0JBLEtBQUssRUFBM0IsRUFBK0I7QUFDN0IxSSxJQUFBQSxLQUFLLEdBQUduQixJQUFJLENBQUM2SixLQUFELENBQVo7QUFDQTVGLElBQUFBLEdBQUcsR0FBR21DLGFBQWEsQ0FBQ21MLGFBQWEsQ0FBQ3BRLEtBQUQsRUFBUTBJLEtBQVIsRUFBZXRELENBQWYsQ0FBZCxDQUFuQixDQUY2QjtBQUk3Qjs7QUFDQSxRQUFJdEMsR0FBRyxJQUFJbUgsTUFBWCxFQUFtQi9HLE1BQUksQ0FBQ3ZELElBQUwsQ0FBVXNLLE1BQU0sQ0FBQ25ILEdBQUQsQ0FBaEIsRUFBdUI5QyxLQUF2QixFQUFuQixLQUNLaUssTUFBTSxDQUFDbkgsR0FBRCxDQUFOLEdBQWMsQ0FBQzlDLEtBQUQsQ0FBZDtBQUNOOztBQUNELE1BQUl1MUMsbUJBQUosRUFBeUI7QUFDdkIzMkIsSUFBQUEsV0FBVyxHQUFHMjJCLG1CQUFtQixDQUFDbndDLENBQUQsQ0FBakM7O0FBQ0EsUUFBSXdaLFdBQVcsS0FBS3RULEtBQXBCLEVBQTJCO0FBQ3pCLFdBQUt4SSxHQUFMLElBQVltSCxNQUFaLEVBQW9CQSxNQUFNLENBQUNuSCxHQUFELENBQU4sR0FBYzJ0Qyw2QkFBMkIsQ0FBQzd4QixXQUFELEVBQWMzVSxNQUFNLENBQUNuSCxHQUFELENBQXBCLENBQXpDO0FBQ3JCO0FBQ0Y7O0FBQUMsU0FBT21ILE1BQVA7QUFDSCxDQXRCRDs7QUNUQSxJQUFJNEcsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJcTJDLFVBQVEsR0FBR3IyQyxZQUFmOztBQUNBLElBQUlxUSx1QkFBdUIsR0FBR3JRLHlCQUE5Qjs7QUFDQSxJQUFJd1gsa0JBQWdCLEdBQUd4WCxrQkFBdkI7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxPQUFWO0FBQW1Cb0ssRUFBQUEsS0FBSyxFQUFFO0FBQTFCLENBQUQsRUFBbUM7QUFDbENvaEMsRUFBQUEsT0FBTyxFQUFFLFNBQVNBLE9BQVQsQ0FBaUJ2bEM7QUFBVztBQUE1QixJQUE2QztBQUNwRCxRQUFJeUosT0FBTyxHQUFHM1ksU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBcEQ7QUFDQSxXQUFPaTFDLFVBQVEsQ0FBQyxJQUFELEVBQU90bEMsVUFBUCxFQUFtQnlKLE9BQW5CLEVBQTRCbkssdUJBQTVCLENBQWY7QUFDRDtBQUppQyxDQUFuQyxDQUFEO0FBT0FtSCxrQkFBZ0IsQ0FBQyxTQUFELENBQWhCOztBQ2ZBLElBQUk5RixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlvTSxPQUFPLEdBQUdwTSxTQUFkOzs7QUFHQSxJQUFJcTRCLFFBQVEsR0FBR3A0QixNQUFNLENBQUNvNEIsUUFBdEI7O0FBRUEsSUFBSWtlLG1CQUFtQixHQUFHLFVBQVV4K0IsS0FBVixFQUFpQnkrQixjQUFqQixFQUFpQztBQUN6RCxNQUFJLENBQUNuZSxRQUFELElBQWEsQ0FBQ2pzQixPQUFPLENBQUMyTCxLQUFELENBQXJCLElBQWdDLENBQUNzZ0IsUUFBUSxDQUFDdGdCLEtBQUQsQ0FBN0MsRUFBc0QsT0FBTyxLQUFQO0FBQ3RELE1BQUl4TyxLQUFLLEdBQUcsQ0FBWjtBQUNBLE1BQUl6SCxNQUFNLEdBQUdpVyxLQUFLLENBQUNqVyxNQUFuQjtBQUNBLE1BQUk4WSxPQUFKOztBQUNBLFNBQU9yUixLQUFLLEdBQUd6SCxNQUFmLEVBQXVCO0FBQ3JCOFksSUFBQUEsT0FBTyxHQUFHN0MsS0FBSyxDQUFDeE8sS0FBSyxFQUFOLENBQWY7O0FBQ0EsUUFBSSxFQUFFLE9BQU9xUixPQUFQLEtBQW1CLFFBQW5CLElBQWdDNDdCLGNBQWMsSUFBSSxPQUFPNTdCLE9BQVAsS0FBbUIsV0FBdkUsQ0FBSixFQUEwRjtBQUN4RixhQUFPLEtBQVA7QUFDRDtBQUNGOztBQUFDLFNBQU85WSxNQUFNLEtBQUssQ0FBbEI7QUFDSCxDQVhEO0FBY0E7OztBQUNBNFAsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsT0FBVjtBQUFtQmdCLEVBQUFBLElBQUksRUFBRTtBQUF6QixDQUFELEVBQWtDO0FBQ2pDMnFDLEVBQUFBLGdCQUFnQixFQUFFLFNBQVNBLGdCQUFULENBQTBCNTFDLEtBQTFCLEVBQWlDO0FBQ2pELFFBQUksQ0FBQzAxQyxtQkFBbUIsQ0FBQzExQyxLQUFELEVBQVEsSUFBUixDQUF4QixFQUF1QyxPQUFPLEtBQVA7QUFDdkMsUUFBSTByQixHQUFHLEdBQUcxckIsS0FBSyxDQUFDMHJCLEdBQWhCO0FBQ0EsUUFBSUEsR0FBRyxDQUFDenFCLE1BQUosS0FBZWpCLEtBQUssQ0FBQ2lCLE1BQXJCLElBQStCLENBQUN5MEMsbUJBQW1CLENBQUNocUIsR0FBRCxFQUFNLEtBQU4sQ0FBdkQsRUFBcUUsT0FBTyxLQUFQO0FBQ3JFLFdBQU8sSUFBUDtBQUNEO0FBTmdDLENBQWxDLENBQUQ7O0FDcEJBLElBQUk5bUIsYUFBVyxHQUFHekYsV0FBbEI7O0FBQ0EsSUFBSXdYLGtCQUFnQixHQUFHeFgsa0JBQXZCOztBQUNBLElBQUlrRSxVQUFRLEdBQUdsRSxVQUFmOztBQUNBLElBQUk0SixtQkFBaUIsR0FBRzVKLG1CQUF4Qjs7QUFDQSxJQUFJRSxnQkFBYyxHQUFHRixvQkFBQSxDQUErQ2tHLENBQXBFO0FBR0E7OztBQUNBLElBQUlULGFBQVcsSUFBSSxFQUFFLGVBQWUsRUFBakIsQ0FBbkIsRUFBeUM7QUFDdkN2RixFQUFBQSxnQkFBYyxDQUFDaU0sS0FBSyxDQUFDbkUsU0FBUCxFQUFrQixXQUFsQixFQUErQjtBQUMzQ2xILElBQUFBLFlBQVksRUFBRSxJQUQ2QjtBQUUzQ1gsSUFBQUEsR0FBRyxFQUFFLFNBQVNpakMsU0FBVCxHQUFxQjtBQUN4QixVQUFJbjlCLENBQUMsR0FBRy9CLFVBQVEsQ0FBQyxJQUFELENBQWhCO0FBQ0EsVUFBSXdULEdBQUcsR0FBRzlOLG1CQUFpQixDQUFDM0QsQ0FBRCxDQUEzQjtBQUNBLGFBQU95UixHQUFHLElBQUksQ0FBUCxHQUFXLENBQVgsR0FBZUEsR0FBRyxHQUFHLENBQTVCO0FBQ0Q7QUFOMEMsR0FBL0IsQ0FBZDtBQVNBRixFQUFBQSxrQkFBZ0IsQ0FBQyxXQUFELENBQWhCO0FBQ0Q7O0FDbkJELElBQUkvUixhQUFXLEdBQUd6RixXQUFsQjs7QUFDQSxJQUFJd1gsa0JBQWdCLEdBQUd4WCxrQkFBdkI7O0FBQ0EsSUFBSWtFLFVBQVEsR0FBR2xFLFVBQWY7O0FBQ0EsSUFBSTRKLG1CQUFpQixHQUFHNUosbUJBQXhCOztBQUNBLElBQUlFLGdCQUFjLEdBQUdGLG9CQUFBLENBQStDa0csQ0FBcEU7QUFHQTs7O0FBQ0EsSUFBSVQsYUFBVyxJQUFJLEVBQUUsY0FBYyxFQUFoQixDQUFuQixFQUF3QztBQUN0Q3ZGLEVBQUFBLGdCQUFjLENBQUNpTSxLQUFLLENBQUNuRSxTQUFQLEVBQWtCLFVBQWxCLEVBQThCO0FBQzFDbEgsSUFBQUEsWUFBWSxFQUFFLElBRDRCO0FBRTFDWCxJQUFBQSxHQUFHLEVBQUUsU0FBU3UyQyxRQUFULEdBQW9CO0FBQ3ZCLFVBQUl6d0MsQ0FBQyxHQUFHL0IsVUFBUSxDQUFDLElBQUQsQ0FBaEI7QUFDQSxVQUFJd1QsR0FBRyxHQUFHOU4sbUJBQWlCLENBQUMzRCxDQUFELENBQTNCO0FBQ0EsYUFBT3lSLEdBQUcsSUFBSSxDQUFQLEdBQVd0VyxTQUFYLEdBQXVCNkUsQ0FBQyxDQUFDeVIsR0FBRyxHQUFHLENBQVAsQ0FBL0I7QUFDRCxLQU55QztBQU8xQ3hRLElBQUFBLEdBQUcsRUFBRSxTQUFTd3ZDLFFBQVQsQ0FBa0I3MUMsS0FBbEIsRUFBeUI7QUFDNUIsVUFBSW9GLENBQUMsR0FBRy9CLFVBQVEsQ0FBQyxJQUFELENBQWhCO0FBQ0EsVUFBSXdULEdBQUcsR0FBRzlOLG1CQUFpQixDQUFDM0QsQ0FBRCxDQUEzQjtBQUNBLGFBQU9BLENBQUMsQ0FBQ3lSLEdBQUcsSUFBSSxDQUFQLEdBQVcsQ0FBWCxHQUFlQSxHQUFHLEdBQUcsQ0FBdEIsQ0FBRCxHQUE0QjdXLEtBQW5DO0FBQ0Q7QUFYeUMsR0FBOUIsQ0FBZDtBQWNBMlcsRUFBQUEsa0JBQWdCLENBQUMsVUFBRCxDQUFoQjtBQUNEOztBQ3hCRCxJQUFJdFUsV0FBUyxHQUFHbEQsV0FBaEI7O0FBQ0EsSUFBSTRKLGlCQUFpQixHQUFHNUosbUJBQXhCOztBQUNBLElBQUlrRSxVQUFRLEdBQUdsRSxVQUFmOztBQUNBLElBQUkrQixZQUFVLEdBQUcvQixZQUFqQjs7QUFDQSxJQUFJdVEsa0JBQWtCLEdBQUd2USxvQkFBekI7O0FBRUEsSUFBSStELE1BQUksR0FBRyxHQUFHQSxJQUFkO0FBR0E7O0lBQ0F4RSxlQUFBLEdBQWlCLFNBQVNvM0MsUUFBVCxDQUFrQkMsUUFBbEIsRUFBNEI7QUFDM0MsTUFBSXZuQyxJQUFJLEdBQUduTCxVQUFRLENBQUMsSUFBRCxDQUFuQjtBQUNBLE1BQUlwQyxNQUFNLEdBQUc4SCxpQkFBaUIsQ0FBQ3lGLElBQUQsQ0FBOUI7QUFDQSxNQUFJakssTUFBTSxHQUFHbUwsa0JBQWtCLENBQUNsQixJQUFELEVBQU8sQ0FBUCxDQUEvQjtBQUNBLE1BQUk0aEIsR0FBRyxHQUFHbHZCLFlBQVUsQ0FBQyxLQUFELENBQXBCO0FBQ0EsTUFBSW9QLEdBQUcsR0FBRyxJQUFJOGYsR0FBSixFQUFWO0FBQ0EsTUFBSTRsQixnQkFBSixFQUFzQnR0QyxLQUF0QixFQUE2QnV0QyxJQUE3QixFQUFtQ256QyxHQUFuQztBQUNBLE1BQUlpekMsUUFBUSxJQUFJLElBQWhCLEVBQXNCQyxnQkFBZ0IsR0FBRzN6QyxXQUFTLENBQUMwekMsUUFBRCxDQUE1QixDQUF0QixLQUNLQyxnQkFBZ0IsR0FBRyxVQUFVaDJDLEtBQVYsRUFBaUI7QUFDdkMsV0FBT0EsS0FBUDtBQUNELEdBRkk7O0FBR0wsT0FBSzBJLEtBQUssR0FBRyxDQUFiLEVBQWdCQSxLQUFLLEdBQUd6SCxNQUF4QixFQUFnQ3lILEtBQUssRUFBckMsRUFBeUM7QUFDdkN1dEMsSUFBQUEsSUFBSSxHQUFHem5DLElBQUksQ0FBQzlGLEtBQUQsQ0FBWDtBQUNBNUYsSUFBQUEsR0FBRyxHQUFHa3pDLGdCQUFnQixDQUFDQyxJQUFELENBQXRCO0FBQ0EsUUFBSSxDQUFDM2xDLEdBQUcsQ0FBQ2hLLEdBQUosQ0FBUXhELEdBQVIsQ0FBTCxFQUFtQndOLEdBQUcsQ0FBQ2pLLEdBQUosQ0FBUXZELEdBQVIsRUFBYW16QyxJQUFiO0FBQ3BCOztBQUNEM2xDLEVBQUFBLEdBQUcsQ0FBQ0QsT0FBSixDQUFZLFVBQVVyUSxLQUFWLEVBQWlCO0FBQzNCa0QsSUFBQUEsTUFBSSxDQUFDdkQsSUFBTCxDQUFVNEUsTUFBVixFQUFrQnZFLEtBQWxCO0FBQ0QsR0FGRDtBQUdBLFNBQU91RSxNQUFQO0FBQ0QsQ0FwQkQ7O0FDVkEsSUFBSXNNLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXdYLGdCQUFnQixHQUFHeFgsa0JBQXZCOztBQUNBLElBQUkyMkMsUUFBUSxHQUFHMzJDLGVBQWY7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxPQUFWO0FBQW1Cb0ssRUFBQUEsS0FBSyxFQUFFO0FBQTFCLENBQUQsRUFBbUM7QUFDbEN5aEMsRUFBQUEsUUFBUSxFQUFFQTtBQUR3QixDQUFuQyxDQUFEO0FBSUFuL0IsZ0JBQWdCLENBQUMsVUFBRCxDQUFoQjs7QUNUQSxJQUFJOUYsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJNmpCLFlBQVUsR0FBRzdqQixZQUFqQjs7QUFDQSxJQUFJOEcsNkJBQTJCLEdBQUc5Ryw2QkFBbEM7O0FBQ0EsSUFBSW9FLFFBQU0sR0FBR3BFLGdCQUFiOztBQUNBLElBQUlpRixpQkFBZSxHQUFHakYsaUJBQXRCOztBQUNBLElBQUl1MEMsd0JBQXNCLEdBQUd2MEMsc0JBQTdCOztBQUNBLElBQUlxcEMsU0FBTyxHQUFHcnBDLE1BQWQ7O0FBRUEsSUFBSXFNLGVBQWEsR0FBR3BILGlCQUFlLENBQUMsYUFBRCxDQUFuQzs7QUFFQSxJQUFJOHhDLHdCQUF3QixHQUFHLFNBQVMxQyxhQUFULEdBQXlCO0FBQ3REeHdCLEVBQUFBLFlBQVUsQ0FBQyxJQUFELEVBQU9rekIsd0JBQVAsQ0FBVjtBQUNELENBRkQ7O0FBSUFBLHdCQUF3QixDQUFDL3VDLFNBQXpCLEdBQXFDdXNDLHdCQUFyQzs7QUFFQSxJQUFJLENBQUNud0MsUUFBTSxDQUFDbXdDLHdCQUFELEVBQXlCbG9DLGVBQXpCLENBQVgsRUFBb0Q7QUFDbER2RixFQUFBQSw2QkFBMkIsQ0FBQ3l0Qyx3QkFBRCxFQUF5QmxvQyxlQUF6QixFQUF3QyxlQUF4QyxDQUEzQjtBQUNEOztBQUVELElBQWUsQ0FBQ2pJLFFBQU0sQ0FBQ213Qyx3QkFBRCxFQUF5QixhQUF6QixDQUFsQixJQUE2REEsd0JBQXNCLENBQUNua0MsV0FBdkIsS0FBdUNuUSxNQUF4RyxFQUFnSDtBQUM5RzZHLEVBQUFBLDZCQUEyQixDQUFDeXRDLHdCQUFELEVBQXlCLGFBQXpCLEVBQXdDd0Msd0JBQXhDLENBQTNCO0FBQ0Q7O0FBRURybEMsSUFBQyxDQUFDO0FBQUUvUixFQUFBQSxNQUFNLEVBQUUsSUFBVjtBQUFnQnVNLEVBQUFBLE1BQU0sRUFBRW05QjtBQUF4QixDQUFELEVBQW9DO0FBQ25DZ0wsRUFBQUEsYUFBYSxFQUFFMEM7QUFEb0IsQ0FBcEMsQ0FBRDs7QUN6QkEsSUFBSTd6QyxXQUFTLEdBQUdsRCxXQUFoQjs7QUFDQSxJQUFJbUcsV0FBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJNk8sUUFBTSxHQUFHN08sY0FBYjs7QUFDQSxJQUFJOEcsNkJBQTJCLEdBQUc5Ryw2QkFBbEM7O0FBQ0EsSUFBSTRqQixhQUFXLEdBQUc1akIsYUFBbEI7O0FBQ0EsSUFBSWlGLGlCQUFlLEdBQUdqRixpQkFBdEI7O0FBQ0EsSUFBSXFJLHFCQUFtQixHQUFHckksYUFBMUI7O0FBQ0EsSUFBSStCLFlBQVUsR0FBRy9CLFlBQWpCOztBQUNBLElBQUkrRSxXQUFTLEdBQUcvRSxXQUFoQjs7QUFDQSxJQUFJdTBDLHdCQUFzQixHQUFHdjBDLHNCQUE3Qjs7QUFFQSxJQUFJKzRCLFNBQU8sR0FBR2gzQixZQUFVLENBQUMsU0FBRCxDQUF4QjtBQUVBLElBQUlvUSxrQkFBZ0IsR0FBRzlKLHFCQUFtQixDQUFDbkIsR0FBM0M7QUFDQSxJQUFJcUIsa0JBQWdCLEdBQUdGLHFCQUFtQixDQUFDbEksR0FBM0M7QUFFQSxJQUFJa00sZUFBYSxHQUFHcEgsaUJBQWUsQ0FBQyxhQUFELENBQW5DOztJQUVBMUYsd0JBQUEsR0FBaUIsVUFBVXkzQyxXQUFWLEVBQXVCMWdDLFdBQXZCLEVBQW9DO0FBQ25ELE1BQUkyZ0Msa0JBQWtCLEdBQUcsU0FBUzVDLGFBQVQsQ0FBdUI5c0MsS0FBdkIsRUFBOEI7QUFDckRBLElBQUFBLEtBQUssQ0FBQ2tQLElBQU4sR0FBYXZULFdBQVMsQ0FBQ3FFLEtBQUssQ0FBQ3pFLFFBQU4sQ0FBZTJULElBQWhCLENBQXRCO0FBQ0FsUCxJQUFBQSxLQUFLLENBQUN1UCxJQUFOLEdBQWEsS0FBYjtBQUNBdlAsSUFBQUEsS0FBSyxDQUFDMnZDLGNBQU4sR0FBdUIsQ0FBQzVnQyxXQUF4QjtBQUNBbkUsSUFBQUEsa0JBQWdCLENBQUMsSUFBRCxFQUFPNUssS0FBUCxDQUFoQjtBQUNELEdBTEQ7O0FBT0EwdkMsRUFBQUEsa0JBQWtCLENBQUNqdkMsU0FBbkIsR0FBK0I0YixhQUFXLENBQUMvVSxRQUFNLENBQUMwbEMsd0JBQUQsQ0FBUCxFQUFpQztBQUN6RTk5QixJQUFBQSxJQUFJLEVBQUUsU0FBU0EsSUFBVCxDQUFja0MsR0FBZCxFQUFtQjtBQUN2QixVQUFJdEosSUFBSSxHQUFHLElBQVg7QUFDQSxVQUFJOG5DLFdBQVcsR0FBRyxDQUFDLENBQUN0MUMsU0FBUyxDQUFDQyxNQUE5QjtBQUNBLGFBQU8sSUFBSWkzQixTQUFKLENBQVksVUFBVWtELE9BQVYsRUFBbUI7QUFDcEMsWUFBSTEwQixLQUFLLEdBQUdnQixrQkFBZ0IsQ0FBQzhHLElBQUQsQ0FBNUI7QUFDQSxZQUFJOEUsSUFBSSxHQUFHZ2pDLFdBQVcsR0FBRyxDQUFDNXZDLEtBQUssQ0FBQzJ2QyxjQUFOLEdBQXVCOTFDLFNBQXZCLEdBQW1DdVgsR0FBcEMsQ0FBSCxHQUE4Q3JDLFdBQVcsR0FBRyxFQUFILEdBQVEsQ0FBQ2xWLFNBQUQsQ0FBdkY7QUFDQW1HLFFBQUFBLEtBQUssQ0FBQzJ2QyxjQUFOLEdBQXVCLEtBQXZCO0FBQ0FqYixRQUFBQSxPQUFPLENBQUMxMEIsS0FBSyxDQUFDdVAsSUFBTixHQUFhO0FBQUVBLFVBQUFBLElBQUksRUFBRSxJQUFSO0FBQWNqVyxVQUFBQSxLQUFLLEVBQUVPO0FBQXJCLFNBQWIsR0FBZ0QrRSxXQUFRLENBQUM2d0MsV0FBVyxDQUFDeDJDLElBQVosQ0FBaUIrRyxLQUFqQixFQUF3Qnd4QixTQUF4QixFQUFpQzVrQixJQUFqQyxDQUFELENBQXpELENBQVA7QUFDRCxPQUxNLENBQVA7QUFNRCxLQVZ3RTtBQVd6RSxjQUFVLFVBQVV0VCxLQUFWLEVBQWlCO0FBQ3pCLFVBQUl3TyxJQUFJLEdBQUcsSUFBWDtBQUNBLGFBQU8sSUFBSTBwQixTQUFKLENBQVksVUFBVWtELE9BQVYsRUFBbUJHLE1BQW5CLEVBQTJCO0FBQzVDLFlBQUk3MEIsS0FBSyxHQUFHZ0Isa0JBQWdCLENBQUM4RyxJQUFELENBQTVCO0FBQ0EsWUFBSXZNLFFBQVEsR0FBR3lFLEtBQUssQ0FBQ3pFLFFBQXJCO0FBQ0F5RSxRQUFBQSxLQUFLLENBQUN1UCxJQUFOLEdBQWEsSUFBYjtBQUNBLFlBQUlzZ0MsUUFBUSxHQUFHcnlDLFdBQVMsQ0FBQ2pDLFFBQUQsRUFBVyxRQUFYLENBQXhCO0FBQ0EsWUFBSXMwQyxRQUFRLEtBQUtoMkMsU0FBakIsRUFBNEIsT0FBTzY2QixPQUFPLENBQUM7QUFBRW5sQixVQUFBQSxJQUFJLEVBQUUsSUFBUjtBQUFjalcsVUFBQUEsS0FBSyxFQUFFQTtBQUFyQixTQUFELENBQWQ7QUFDNUJrNEIsUUFBQUEsU0FBTyxDQUFDa0QsT0FBUixDQUFnQm1iLFFBQVEsQ0FBQzUyQyxJQUFULENBQWNzQyxRQUFkLEVBQXdCakMsS0FBeEIsQ0FBaEIsRUFBZ0Q2NkIsSUFBaEQsQ0FBcUQsVUFBVXQyQixNQUFWLEVBQWtCO0FBQ3JFZSxVQUFBQSxXQUFRLENBQUNmLE1BQUQsQ0FBUjtBQUNBNjJCLFVBQUFBLE9BQU8sQ0FBQztBQUFFbmxCLFlBQUFBLElBQUksRUFBRSxJQUFSO0FBQWNqVyxZQUFBQSxLQUFLLEVBQUVBO0FBQXJCLFdBQUQsQ0FBUDtBQUNELFNBSEQsRUFHR3U3QixNQUhIO0FBSUQsT0FWTSxDQUFQO0FBV0QsS0F4QndFO0FBeUJ6RSxhQUFTLFVBQVV2N0IsS0FBVixFQUFpQjtBQUN4QixVQUFJd08sSUFBSSxHQUFHLElBQVg7QUFDQSxhQUFPLElBQUkwcEIsU0FBSixDQUFZLFVBQVVrRCxPQUFWLEVBQW1CRyxNQUFuQixFQUEyQjtBQUM1QyxZQUFJNzBCLEtBQUssR0FBR2dCLGtCQUFnQixDQUFDOEcsSUFBRCxDQUE1QjtBQUNBLFlBQUl2TSxRQUFRLEdBQUd5RSxLQUFLLENBQUN6RSxRQUFyQjtBQUNBeUUsUUFBQUEsS0FBSyxDQUFDdVAsSUFBTixHQUFhLElBQWI7QUFDQSxZQUFJdWdDLE9BQU8sR0FBR3R5QyxXQUFTLENBQUNqQyxRQUFELEVBQVcsT0FBWCxDQUF2QjtBQUNBLFlBQUl1MEMsT0FBTyxLQUFLajJDLFNBQWhCLEVBQTJCLE9BQU9nN0IsTUFBTSxDQUFDdjdCLEtBQUQsQ0FBYjtBQUMzQm83QixRQUFBQSxPQUFPLENBQUNvYixPQUFPLENBQUM3MkMsSUFBUixDQUFhc0MsUUFBYixFQUF1QmpDLEtBQXZCLENBQUQsQ0FBUDtBQUNELE9BUE0sQ0FBUDtBQVFEO0FBbkN3RSxHQUFqQyxDQUExQzs7QUFzQ0EsTUFBSSxDQUFDeVYsV0FBTCxFQUFrQjtBQUNoQnhQLElBQUFBLDZCQUEyQixDQUFDbXdDLGtCQUFrQixDQUFDanZDLFNBQXBCLEVBQStCcUUsZUFBL0IsRUFBOEMsV0FBOUMsQ0FBM0I7QUFDRDs7QUFFRCxTQUFPNHFDLGtCQUFQO0FBQ0QsQ0FuREQ7O0FDakJBLElBQUl2bEMsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJczNDLDBCQUF3QixHQUFHdDNDLHdCQUEvQjs7QUFFQSxJQUFJaTNDLG9CQUFrQixHQUFHSywwQkFBd0IsQ0FBQyxVQUFVdmUsT0FBVixFQUFtQjVrQixJQUFuQixFQUF5QjtBQUN6RSxNQUFJNU0sS0FBSyxHQUFHLElBQVo7QUFDQSxNQUFJekUsUUFBUSxHQUFHeUUsS0FBSyxDQUFDekUsUUFBckI7QUFFQSxTQUFPaTJCLE9BQU8sQ0FBQ2tELE9BQVIsQ0FBZ0I5MUIsVUFBUSxDQUFDb0IsS0FBSyxDQUFDa1AsSUFBTixDQUFXakgsS0FBWCxDQUFpQjFNLFFBQWpCLEVBQTJCcVIsSUFBM0IsQ0FBRCxDQUF4QixFQUE0RHVuQixJQUE1RCxDQUFpRSxVQUFVaGxCLElBQVYsRUFBZ0I7QUFDdEYsUUFBSXZRLFVBQVEsQ0FBQ3VRLElBQUQsQ0FBUixDQUFlSSxJQUFuQixFQUF5QjtBQUN2QnZQLE1BQUFBLEtBQUssQ0FBQ3VQLElBQU4sR0FBYSxJQUFiO0FBQ0EsYUFBTztBQUFFQSxRQUFBQSxJQUFJLEVBQUUsSUFBUjtBQUFjalcsUUFBQUEsS0FBSyxFQUFFTztBQUFyQixPQUFQO0FBQ0Q7O0FBQ0QsV0FBTztBQUFFMFYsTUFBQUEsSUFBSSxFQUFFLEtBQVI7QUFBZWpXLE1BQUFBLEtBQUssRUFBRSxDQUFDMEcsS0FBSyxDQUFDZ0MsS0FBTixFQUFELEVBQWdCbU4sSUFBSSxDQUFDN1YsS0FBckI7QUFBdEIsS0FBUDtBQUNELEdBTk0sQ0FBUDtBQU9ELENBWGdELENBQWpEO0FBYUE2USxJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxlQUFWO0FBQTJCb0ssRUFBQUEsS0FBSyxFQUFFLElBQWxDO0FBQXdDK3JCLEVBQUFBLElBQUksRUFBRTtBQUE5QyxDQUFELEVBQXVEO0FBQ3REc1csRUFBQUEsY0FBYyxFQUFFLFNBQVNBLGNBQVQsR0FBMEI7QUFDeEMsV0FBTyxJQUFJTixvQkFBSixDQUF1QjtBQUM1Qm4wQyxNQUFBQSxRQUFRLEVBQUVxRCxVQUFRLENBQUMsSUFBRCxDQURVO0FBRTVCb0QsTUFBQUEsS0FBSyxFQUFFO0FBRnFCLEtBQXZCLENBQVA7QUFJRDtBQU5xRCxDQUF2RCxDQUFEOztBQ2pCQSxJQUFJbUksSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJOHZDLG1CQUFpQixHQUFHOXZDLG1CQUF4Qjs7QUFDQSxJQUFJczNDLDBCQUF3QixHQUFHdDNDLHdCQUEvQjs7QUFFQSxJQUFJaTNDLG9CQUFrQixHQUFHSywwQkFBd0IsQ0FBQyxVQUFVdmUsT0FBVixFQUFtQjVrQixJQUFuQixFQUF5QjtBQUN6RSxNQUFJNU0sS0FBSyxHQUFHLElBQVo7QUFFQSxTQUFPLElBQUl3eEIsT0FBSixDQUFZLFVBQVVrRCxPQUFWLEVBQW1CRyxNQUFuQixFQUEyQjtBQUM1QyxRQUFJZ1osSUFBSSxHQUFHLFlBQVk7QUFDckIsVUFBSTtBQUNGcmMsUUFBQUEsT0FBTyxDQUFDa0QsT0FBUixDQUNFOTFCLFVBQVEsQ0FBQ29CLEtBQUssQ0FBQ2tQLElBQU4sQ0FBV2pILEtBQVgsQ0FBaUJqSSxLQUFLLENBQUN6RSxRQUF2QixFQUFpQ3lFLEtBQUssQ0FBQ2c1QixTQUFOLEdBQWtCLEVBQWxCLEdBQXVCcHNCLElBQXhELENBQUQsQ0FEVixFQUVFdW5CLElBRkYsQ0FFTyxVQUFVaGxCLElBQVYsRUFBZ0I7QUFDckIsY0FBSTtBQUNGLGdCQUFJdlEsVUFBUSxDQUFDdVEsSUFBRCxDQUFSLENBQWVJLElBQW5CLEVBQXlCO0FBQ3ZCdlAsY0FBQUEsS0FBSyxDQUFDdVAsSUFBTixHQUFhLElBQWI7QUFDQW1sQixjQUFBQSxPQUFPLENBQUM7QUFBRW5sQixnQkFBQUEsSUFBSSxFQUFFLElBQVI7QUFBY2pXLGdCQUFBQSxLQUFLLEVBQUVPO0FBQXJCLGVBQUQsQ0FBUDtBQUNELGFBSEQsTUFHTyxJQUFJbUcsS0FBSyxDQUFDZzVCLFNBQVYsRUFBcUI7QUFDMUJoNUIsY0FBQUEsS0FBSyxDQUFDZzVCLFNBQU47QUFDQTZVLGNBQUFBLElBQUk7QUFDTCxhQUhNLE1BR0FuWixPQUFPLENBQUM7QUFBRW5sQixjQUFBQSxJQUFJLEVBQUUsS0FBUjtBQUFlalcsY0FBQUEsS0FBSyxFQUFFNlYsSUFBSSxDQUFDN1Y7QUFBM0IsYUFBRCxDQUFQO0FBQ1IsV0FSRCxDQVFFLE9BQU8yMkMsR0FBUCxFQUFZO0FBQUVwYixZQUFBQSxNQUFNLENBQUNvYixHQUFELENBQU47QUFBYztBQUMvQixTQVpELEVBWUdwYixNQVpIO0FBYUQsT0FkRCxDQWNFLE9BQU90OEIsS0FBUCxFQUFjO0FBQUVzOEIsUUFBQUEsTUFBTSxDQUFDdDhCLEtBQUQsQ0FBTjtBQUFnQjtBQUNuQyxLQWhCRDs7QUFrQkFzMUMsSUFBQUEsSUFBSTtBQUNMLEdBcEJNLENBQVA7QUFxQkQsQ0F4QmdELENBQWpEO0FBMEJBMWpDLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLGVBQVY7QUFBMkJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBbEM7QUFBd0MrckIsRUFBQUEsSUFBSSxFQUFFO0FBQTlDLENBQUQsRUFBdUQ7QUFDdER3VyxFQUFBQSxJQUFJLEVBQUUsU0FBU0EsSUFBVCxDQUFjdkssS0FBZCxFQUFxQjtBQUN6QixXQUFPLElBQUkrSixvQkFBSixDQUF1QjtBQUM1Qm4wQyxNQUFBQSxRQUFRLEVBQUVxRCxVQUFRLENBQUMsSUFBRCxDQURVO0FBRTVCbzZCLE1BQUFBLFNBQVMsRUFBRXVQLG1CQUFpQixDQUFDNUMsS0FBRDtBQUZBLEtBQXZCLENBQVA7QUFJRDtBQU5xRCxDQUF2RCxDQUFEOztBQy9CQSxJQUFJeDdCLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXNaLE1BQU0sR0FBR3RaLHNCQUFBLENBQWlEc1IsS0FBOUQ7O0FBRUFJLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLGVBQVY7QUFBMkJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBbEM7QUFBd0MrckIsRUFBQUEsSUFBSSxFQUFFO0FBQTlDLENBQUQsRUFBdUQ7QUFDdEQzdkIsRUFBQUEsS0FBSyxFQUFFLFNBQVNBLEtBQVQsQ0FBZTlOLEVBQWYsRUFBbUI7QUFDeEIsV0FBTzhWLE1BQU0sQ0FBQyxJQUFELEVBQU85VixFQUFQLENBQWI7QUFDRDtBQUhxRCxDQUF2RCxDQUFEOztBQ0hBLElBQUlrTyxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlrRCxXQUFTLEdBQUdsRCxXQUFoQjs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJczNDLDBCQUF3QixHQUFHdDNDLHdCQUEvQjs7QUFFQSxJQUFJaTNDLG9CQUFrQixHQUFHSywwQkFBd0IsQ0FBQyxVQUFVdmUsT0FBVixFQUFtQjVrQixJQUFuQixFQUF5QjtBQUN6RSxNQUFJNU0sS0FBSyxHQUFHLElBQVo7QUFDQSxNQUFJbXdDLFFBQVEsR0FBR253QyxLQUFLLENBQUNtd0MsUUFBckI7QUFFQSxTQUFPLElBQUkzZSxPQUFKLENBQVksVUFBVWtELE9BQVYsRUFBbUJHLE1BQW5CLEVBQTJCO0FBQzVDLFFBQUlnWixJQUFJLEdBQUcsWUFBWTtBQUNyQixVQUFJO0FBQ0ZyYyxRQUFBQSxPQUFPLENBQUNrRCxPQUFSLENBQWdCOTFCLFVBQVEsQ0FBQ29CLEtBQUssQ0FBQ2tQLElBQU4sQ0FBV2pILEtBQVgsQ0FBaUJqSSxLQUFLLENBQUN6RSxRQUF2QixFQUFpQ3FSLElBQWpDLENBQUQsQ0FBeEIsRUFBa0V1bkIsSUFBbEUsQ0FBdUUsVUFBVWhsQixJQUFWLEVBQWdCO0FBQ3JGLGNBQUk7QUFDRixnQkFBSXZRLFVBQVEsQ0FBQ3VRLElBQUQsQ0FBUixDQUFlSSxJQUFuQixFQUF5QjtBQUN2QnZQLGNBQUFBLEtBQUssQ0FBQ3VQLElBQU4sR0FBYSxJQUFiO0FBQ0FtbEIsY0FBQUEsT0FBTyxDQUFDO0FBQUVubEIsZ0JBQUFBLElBQUksRUFBRSxJQUFSO0FBQWNqVyxnQkFBQUEsS0FBSyxFQUFFTztBQUFyQixlQUFELENBQVA7QUFDRCxhQUhELE1BR087QUFDTCxrQkFBSVAsS0FBSyxHQUFHNlYsSUFBSSxDQUFDN1YsS0FBakI7QUFDQWs0QixjQUFBQSxPQUFPLENBQUNrRCxPQUFSLENBQWdCeWIsUUFBUSxDQUFDNzJDLEtBQUQsQ0FBeEIsRUFBaUM2NkIsSUFBakMsQ0FBc0MsVUFBVWljLFFBQVYsRUFBb0I7QUFDeERBLGdCQUFBQSxRQUFRLEdBQUcxYixPQUFPLENBQUM7QUFBRW5sQixrQkFBQUEsSUFBSSxFQUFFLEtBQVI7QUFBZWpXLGtCQUFBQSxLQUFLLEVBQUVBO0FBQXRCLGlCQUFELENBQVYsR0FBNEN1MEMsSUFBSSxFQUF4RDtBQUNELGVBRkQsRUFFR2haLE1BRkg7QUFHRDtBQUNGLFdBVkQsQ0FVRSxPQUFPb2IsR0FBUCxFQUFZO0FBQUVwYixZQUFBQSxNQUFNLENBQUNvYixHQUFELENBQU47QUFBYztBQUMvQixTQVpELEVBWUdwYixNQVpIO0FBYUQsT0FkRCxDQWNFLE9BQU90OEIsS0FBUCxFQUFjO0FBQUVzOEIsUUFBQUEsTUFBTSxDQUFDdDhCLEtBQUQsQ0FBTjtBQUFnQjtBQUNuQyxLQWhCRDs7QUFrQkFzMUMsSUFBQUEsSUFBSTtBQUNMLEdBcEJNLENBQVA7QUFxQkQsQ0F6QmdELENBQWpEO0FBMkJBMWpDLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLGVBQVY7QUFBMkJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBbEM7QUFBd0MrckIsRUFBQUEsSUFBSSxFQUFFO0FBQTlDLENBQUQsRUFBdUQ7QUFDdEQ3dkIsRUFBQUEsTUFBTSxFQUFFLFNBQVNBLE1BQVQsQ0FBZ0JzbUMsUUFBaEIsRUFBMEI7QUFDaEMsV0FBTyxJQUFJVCxvQkFBSixDQUF1QjtBQUM1Qm4wQyxNQUFBQSxRQUFRLEVBQUVxRCxVQUFRLENBQUMsSUFBRCxDQURVO0FBRTVCdXhDLE1BQUFBLFFBQVEsRUFBRXgwQyxXQUFTLENBQUN3MEMsUUFBRDtBQUZTLEtBQXZCLENBQVA7QUFJRDtBQU5xRCxDQUF2RCxDQUFEOztBQ2hDQSxJQUFJaG1DLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSThaLEtBQUssR0FBRzlaLHNCQUFBLENBQWlEdVIsSUFBN0Q7O0FBRUFHLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLGVBQVY7QUFBMkJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBbEM7QUFBd0MrckIsRUFBQUEsSUFBSSxFQUFFO0FBQTlDLENBQUQsRUFBdUQ7QUFDdEQxdkIsRUFBQUEsSUFBSSxFQUFFLFNBQVNBLElBQVQsQ0FBYy9OLEVBQWQsRUFBa0I7QUFDdEIsV0FBT3NXLEtBQUssQ0FBQyxJQUFELEVBQU90VyxFQUFQLENBQVo7QUFDRDtBQUhxRCxDQUF2RCxDQUFEOztBQ0hBLElBQUlrTyxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlrRCxXQUFTLEdBQUdsRCxXQUFoQjs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJczNDLDBCQUF3QixHQUFHdDNDLHdCQUEvQjs7QUFDQSxJQUFJczFDLGtCQUFnQixHQUFHdDFDLGtCQUF2Qjs7QUFFQSxJQUFJaTNDLG9CQUFrQixHQUFHSywwQkFBd0IsQ0FBQyxVQUFVdmUsT0FBVixFQUFtQjtBQUNuRSxNQUFJeHhCLEtBQUssR0FBRyxJQUFaO0FBQ0EsTUFBSWdULE1BQU0sR0FBR2hULEtBQUssQ0FBQ2dULE1BQW5CO0FBQ0EsTUFBSXE5QixhQUFKO0FBRUEsU0FBTyxJQUFJN2UsT0FBSixDQUFZLFVBQVVrRCxPQUFWLEVBQW1CRyxNQUFuQixFQUEyQjtBQUM1QyxRQUFJeWIsU0FBUyxHQUFHLFlBQVk7QUFDMUIsVUFBSTtBQUNGOWUsUUFBQUEsT0FBTyxDQUFDa0QsT0FBUixDQUFnQjkxQixVQUFRLENBQUNvQixLQUFLLENBQUNrUCxJQUFOLENBQVdqVyxJQUFYLENBQWdCK0csS0FBSyxDQUFDekUsUUFBdEIsQ0FBRCxDQUF4QixFQUEyRDQ0QixJQUEzRCxDQUFnRSxVQUFVaGxCLElBQVYsRUFBZ0I7QUFDOUUsY0FBSTtBQUNGLGdCQUFJdlEsVUFBUSxDQUFDdVEsSUFBRCxDQUFSLENBQWVJLElBQW5CLEVBQXlCO0FBQ3ZCdlAsY0FBQUEsS0FBSyxDQUFDdVAsSUFBTixHQUFhLElBQWI7QUFDQW1sQixjQUFBQSxPQUFPLENBQUM7QUFBRW5sQixnQkFBQUEsSUFBSSxFQUFFLElBQVI7QUFBY2pXLGdCQUFBQSxLQUFLLEVBQUVPO0FBQXJCLGVBQUQsQ0FBUDtBQUNELGFBSEQsTUFHTztBQUNMMjNCLGNBQUFBLE9BQU8sQ0FBQ2tELE9BQVIsQ0FBZ0IxaEIsTUFBTSxDQUFDN0QsSUFBSSxDQUFDN1YsS0FBTixDQUF0QixFQUFvQzY2QixJQUFwQyxDQUF5QyxVQUFVb2MsTUFBVixFQUFrQjtBQUN6RCxvQkFBSTtBQUNGdndDLGtCQUFBQSxLQUFLLENBQUNxd0MsYUFBTixHQUFzQkEsYUFBYSxHQUFHdEMsa0JBQWdCLENBQUN3QyxNQUFELENBQXREO0FBQ0F2d0Msa0JBQUFBLEtBQUssQ0FBQ3d3QyxTQUFOLEdBQWtCNzBDLFdBQVMsQ0FBQzAwQyxhQUFhLENBQUNuaEMsSUFBZixDQUEzQjtBQUNBLHlCQUFPdWhDLFNBQVMsRUFBaEI7QUFDRCxpQkFKRCxDQUlFLE9BQU83USxNQUFQLEVBQWU7QUFBRS9LLGtCQUFBQSxNQUFNLENBQUMrSyxNQUFELENBQU47QUFBaUI7QUFDckMsZUFORCxFQU1HL0ssTUFOSDtBQU9EO0FBQ0YsV0FiRCxDQWFFLE9BQU84SyxNQUFQLEVBQWU7QUFBRTlLLFlBQUFBLE1BQU0sQ0FBQzhLLE1BQUQsQ0FBTjtBQUFpQjtBQUNyQyxTQWZELEVBZUc5SyxNQWZIO0FBZ0JELE9BakJELENBaUJFLE9BQU90OEIsS0FBUCxFQUFjO0FBQUVzOEIsUUFBQUEsTUFBTSxDQUFDdDhCLEtBQUQsQ0FBTjtBQUFnQjtBQUNuQyxLQW5CRDs7QUFxQkEsUUFBSWs0QyxTQUFTLEdBQUcsWUFBWTtBQUMxQixVQUFJSixhQUFhLEdBQUdyd0MsS0FBSyxDQUFDcXdDLGFBQTFCLEVBQXlDO0FBQ3ZDLFlBQUk7QUFDRjdlLFVBQUFBLE9BQU8sQ0FBQ2tELE9BQVIsQ0FBZ0I5MUIsVUFBUSxDQUFDb0IsS0FBSyxDQUFDd3dDLFNBQU4sQ0FBZ0J2M0MsSUFBaEIsQ0FBcUJvM0MsYUFBckIsQ0FBRCxDQUF4QixFQUErRGxjLElBQS9ELENBQW9FLFVBQVV0MkIsTUFBVixFQUFrQjtBQUNwRixnQkFBSTtBQUNGLGtCQUFJZSxVQUFRLENBQUNmLE1BQUQsQ0FBUixDQUFpQjBSLElBQXJCLEVBQTJCO0FBQ3pCdlAsZ0JBQUFBLEtBQUssQ0FBQ3F3QyxhQUFOLEdBQXNCcndDLEtBQUssQ0FBQ3d3QyxTQUFOLEdBQWtCLElBQXhDO0FBQ0FGLGdCQUFBQSxTQUFTO0FBQ1YsZUFIRCxNQUdPNWIsT0FBTyxDQUFDO0FBQUVubEIsZ0JBQUFBLElBQUksRUFBRSxLQUFSO0FBQWVqVyxnQkFBQUEsS0FBSyxFQUFFdUUsTUFBTSxDQUFDdkU7QUFBN0IsZUFBRCxDQUFQO0FBQ1IsYUFMRCxDQUtFLE9BQU9xbUMsTUFBUCxFQUFlO0FBQUU5SyxjQUFBQSxNQUFNLENBQUM4SyxNQUFELENBQU47QUFBaUI7QUFDckMsV0FQRCxFQU9HOUssTUFQSDtBQVFELFNBVEQsQ0FTRSxPQUFPdDhCLEtBQVAsRUFBYztBQUFFczhCLFVBQUFBLE1BQU0sQ0FBQ3Q4QixLQUFELENBQU47QUFBZ0I7QUFDbkMsT0FYRCxNQVdPKzNDLFNBQVM7QUFDakIsS0FiRDs7QUFlQUcsSUFBQUEsU0FBUztBQUNWLEdBdENNLENBQVA7QUF1Q0QsQ0E1Q2dELENBQWpEO0FBOENBdG1DLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLGVBQVY7QUFBMkJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBbEM7QUFBd0MrckIsRUFBQUEsSUFBSSxFQUFFO0FBQTlDLENBQUQsRUFBdUQ7QUFDdERqbUIsRUFBQUEsT0FBTyxFQUFFLFNBQVNBLE9BQVQsQ0FBaUJULE1BQWpCLEVBQXlCO0FBQ2hDLFdBQU8sSUFBSTA4QixvQkFBSixDQUF1QjtBQUM1Qm4wQyxNQUFBQSxRQUFRLEVBQUVxRCxVQUFRLENBQUMsSUFBRCxDQURVO0FBRTVCb1UsTUFBQUEsTUFBTSxFQUFFclgsV0FBUyxDQUFDcVgsTUFBRCxDQUZXO0FBRzVCcTlCLE1BQUFBLGFBQWEsRUFBRSxJQUhhO0FBSTVCRyxNQUFBQSxTQUFTLEVBQUU7QUFKaUIsS0FBdkIsQ0FBUDtBQU1EO0FBUnFELENBQXZELENBQUQ7O0FDcERBLElBQUlybUMsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJZ1MsUUFBUSxHQUFHaFMsc0JBQUEsQ0FBaURrUixPQUFoRTs7QUFFQVEsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsZUFBVjtBQUEyQm9LLEVBQUFBLEtBQUssRUFBRSxJQUFsQztBQUF3QytyQixFQUFBQSxJQUFJLEVBQUU7QUFBOUMsQ0FBRCxFQUF1RDtBQUN0RC92QixFQUFBQSxPQUFPLEVBQUUsU0FBU0EsT0FBVCxDQUFpQjFOLEVBQWpCLEVBQXFCO0FBQzVCLFdBQU93TyxRQUFRLENBQUMsSUFBRCxFQUFPeE8sRUFBUCxDQUFmO0FBQ0Q7QUFIcUQsQ0FBdkQsQ0FBRDs7QUNMQTtBQUNBLElBQUlrTyxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUltRyxVQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUlrRSxVQUFRLEdBQUdsRSxVQUFmOztBQUNBLElBQUl1MEMsc0JBQXNCLEdBQUd2MEMsc0JBQTdCOztBQUNBLElBQUlzM0MsMEJBQXdCLEdBQUd0M0Msd0JBQS9COztBQUNBLElBQUlzMUMsZ0JBQWdCLEdBQUd0MUMsa0JBQXZCOztBQUNBLElBQUkrVixhQUFXLEdBQUcvVixhQUFsQjs7QUFDQSxJQUFJd1YsbUJBQWlCLEdBQUd4VixtQkFBeEI7O0FBQ0EsSUFBSStFLFdBQVMsR0FBRy9FLFdBQWhCOztBQUNBLElBQUlpRixpQkFBZSxHQUFHakYsaUJBQXRCOztBQUNBLElBQUl5MEMscUJBQXFCLEdBQUd6MEMscUJBQTVCOztBQUVBLElBQUlvMEMsY0FBYyxHQUFHbnZDLGlCQUFlLENBQUMsZUFBRCxDQUFwQztBQUVBLElBQUlvaUIsZUFBYSxHQUFHLEdBQUdBLGFBQXZCO0FBRUEsSUFBSTR2QixvQkFBa0IsR0FBR0ssMEJBQXdCLENBQUMsVUFBVXZlLE9BQVYsRUFBbUI1a0IsSUFBbkIsRUFBeUI7QUFDekUsU0FBT2hPLFVBQVEsQ0FBQyxLQUFLc1EsSUFBTCxDQUFVakgsS0FBVixDQUFnQixLQUFLMU0sUUFBckIsRUFBK0JxUixJQUEvQixDQUFELENBQWY7QUFDRCxDQUZnRCxFQUU5QyxJQUY4QyxDQUFqRDtBQUlBekMsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsZUFBVjtBQUEyQmdCLEVBQUFBLElBQUksRUFBRTtBQUFqQyxDQUFELEVBQTBDO0FBQ3pDb04sRUFBQUEsSUFBSSxFQUFFLFNBQVNBLElBQVQsQ0FBY2pULENBQWQsRUFBaUI7QUFDckIsUUFBSU0sTUFBTSxHQUFHckMsVUFBUSxDQUFDK0IsQ0FBRCxDQUFyQjtBQUNBLFFBQUl3UCxhQUFhLEdBQUcxUSxXQUFTLENBQUN3QixNQUFELEVBQVM2dEMsY0FBVCxDQUE3QjtBQUNBLFFBQUl0eEMsUUFBSjs7QUFDQSxRQUFJMlMsYUFBSixFQUFtQjtBQUNqQjNTLE1BQUFBLFFBQVEsR0FBR3d5QyxnQkFBZ0IsQ0FBQy91QyxNQUFELEVBQVNrUCxhQUFULENBQTNCO0FBQ0EsVUFBSTRSLGVBQWEsQ0FBQzdtQixJQUFkLENBQW1CK3pDLHNCQUFuQixFQUEyQ3p4QyxRQUEzQyxDQUFKLEVBQTBELE9BQU9BLFFBQVA7QUFDM0Q7O0FBQ0QsUUFBSUEsUUFBUSxLQUFLMUIsU0FBakIsRUFBNEI7QUFDMUJxVSxNQUFBQSxhQUFhLEdBQUdELG1CQUFpQixDQUFDalAsTUFBRCxDQUFqQztBQUNBLFVBQUlrUCxhQUFKLEVBQW1CLE9BQU8sSUFBSWcvQixxQkFBSixDQUEwQjErQixhQUFXLENBQUN4UCxNQUFELEVBQVNrUCxhQUFULENBQXJDLENBQVA7QUFDcEI7O0FBQ0QsV0FBTyxJQUFJd2hDLG9CQUFKLENBQXVCO0FBQUVuMEMsTUFBQUEsUUFBUSxFQUFFQSxRQUFRLEtBQUsxQixTQUFiLEdBQXlCMEIsUUFBekIsR0FBb0N5RDtBQUFoRCxLQUF2QixDQUFQO0FBQ0Q7QUFkd0MsQ0FBMUMsQ0FBRDs7QUNuQkEsSUFBSW1MLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSWtELFdBQVMsR0FBR2xELFdBQWhCOztBQUNBLElBQUltRyxVQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUlzM0MsMEJBQXdCLEdBQUd0M0Msd0JBQS9COztBQUVBLElBQUlpM0Msb0JBQWtCLEdBQUdLLDBCQUF3QixDQUFDLFVBQVV2ZSxPQUFWLEVBQW1CNWtCLElBQW5CLEVBQXlCO0FBQ3pFLE1BQUk1TSxLQUFLLEdBQUcsSUFBWjtBQUNBLE1BQUlnVCxNQUFNLEdBQUdoVCxLQUFLLENBQUNnVCxNQUFuQjtBQUVBLFNBQU93ZSxPQUFPLENBQUNrRCxPQUFSLENBQWdCOTFCLFVBQVEsQ0FBQ29CLEtBQUssQ0FBQ2tQLElBQU4sQ0FBV2pILEtBQVgsQ0FBaUJqSSxLQUFLLENBQUN6RSxRQUF2QixFQUFpQ3FSLElBQWpDLENBQUQsQ0FBeEIsRUFBa0V1bkIsSUFBbEUsQ0FBdUUsVUFBVWhsQixJQUFWLEVBQWdCO0FBQzVGLFFBQUl2USxVQUFRLENBQUN1USxJQUFELENBQVIsQ0FBZUksSUFBbkIsRUFBeUI7QUFDdkJ2UCxNQUFBQSxLQUFLLENBQUN1UCxJQUFOLEdBQWEsSUFBYjtBQUNBLGFBQU87QUFBRUEsUUFBQUEsSUFBSSxFQUFFLElBQVI7QUFBY2pXLFFBQUFBLEtBQUssRUFBRU87QUFBckIsT0FBUDtBQUNEOztBQUNELFdBQU8yM0IsT0FBTyxDQUFDa0QsT0FBUixDQUFnQjFoQixNQUFNLENBQUM3RCxJQUFJLENBQUM3VixLQUFOLENBQXRCLEVBQW9DNjZCLElBQXBDLENBQXlDLFVBQVU3NkIsS0FBVixFQUFpQjtBQUMvRCxhQUFPO0FBQUVpVyxRQUFBQSxJQUFJLEVBQUUsS0FBUjtBQUFlalcsUUFBQUEsS0FBSyxFQUFFQTtBQUF0QixPQUFQO0FBQ0QsS0FGTSxDQUFQO0FBR0QsR0FSTSxDQUFQO0FBU0QsQ0FiZ0QsQ0FBakQ7QUFlQTZRLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLGVBQVY7QUFBMkJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBbEM7QUFBd0MrckIsRUFBQUEsSUFBSSxFQUFFO0FBQTlDLENBQUQsRUFBdUQ7QUFDdEQ5dkIsRUFBQUEsR0FBRyxFQUFFLFNBQVNBLEdBQVQsQ0FBYW9KLE1BQWIsRUFBcUI7QUFDeEIsV0FBTyxJQUFJMDhCLG9CQUFKLENBQXVCO0FBQzVCbjBDLE1BQUFBLFFBQVEsRUFBRXFELFVBQVEsQ0FBQyxJQUFELENBRFU7QUFFNUJvVSxNQUFBQSxNQUFNLEVBQUVyWCxXQUFTLENBQUNxWCxNQUFEO0FBRlcsS0FBdkIsQ0FBUDtBQUlEO0FBTnFELENBQXZELENBQUQ7O0FDcEJBLElBQUk3SSxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlrRCxXQUFTLEdBQUdsRCxXQUFoQjs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJK0IsWUFBVSxHQUFHL0IsWUFBakI7O0FBRUEsSUFBSSs0QixTQUFPLEdBQUdoM0IsWUFBVSxDQUFDLFNBQUQsQ0FBeEI7QUFFQTJQLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLGVBQVY7QUFBMkJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBbEM7QUFBd0MrckIsRUFBQUEsSUFBSSxFQUFFO0FBQTlDLENBQUQsRUFBdUQ7QUFDdEQvaEIsRUFBQUEsTUFBTSxFQUFFLFNBQVNBLE1BQVQsQ0FBZ0IrNEI7QUFBUTtBQUF4QixJQUE4QztBQUNwRCxRQUFJbjFDLFFBQVEsR0FBR3FELFVBQVEsQ0FBQyxJQUFELENBQXZCO0FBQ0EsUUFBSXNRLElBQUksR0FBR3ZULFdBQVMsQ0FBQ0osUUFBUSxDQUFDMlQsSUFBVixDQUFwQjtBQUNBLFFBQUl5aEMsU0FBUyxHQUFHcjJDLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQztBQUNBLFFBQUlxMkMsV0FBVyxHQUFHRCxTQUFTLEdBQUc5MkMsU0FBSCxHQUFlUyxTQUFTLENBQUMsQ0FBRCxDQUFuRDtBQUNBcUIsSUFBQUEsV0FBUyxDQUFDKzBDLE9BQUQsQ0FBVDtBQUVBLFdBQU8sSUFBSWxmLFNBQUosQ0FBWSxVQUFVa0QsT0FBVixFQUFtQkcsTUFBbkIsRUFBMkI7QUFDNUMsVUFBSWdaLElBQUksR0FBRyxZQUFZO0FBQ3JCLFlBQUk7QUFDRnJjLFVBQUFBLFNBQU8sQ0FBQ2tELE9BQVIsQ0FBZ0I5MUIsVUFBUSxDQUFDc1EsSUFBSSxDQUFDalcsSUFBTCxDQUFVc0MsUUFBVixDQUFELENBQXhCLEVBQStDNDRCLElBQS9DLENBQW9ELFVBQVVobEIsSUFBVixFQUFnQjtBQUNsRSxnQkFBSTtBQUNGLGtCQUFJdlEsVUFBUSxDQUFDdVEsSUFBRCxDQUFSLENBQWVJLElBQW5CLEVBQXlCO0FBQ3ZCb2hDLGdCQUFBQSxTQUFTLEdBQUc5YixNQUFNLENBQUMvNkIsU0FBUyxDQUFDLGdEQUFELENBQVYsQ0FBVCxHQUF5RTQ2QixPQUFPLENBQUNrYyxXQUFELENBQXpGO0FBQ0QsZUFGRCxNQUVPO0FBQ0wsb0JBQUl0M0MsS0FBSyxHQUFHNlYsSUFBSSxDQUFDN1YsS0FBakI7O0FBQ0Esb0JBQUlxM0MsU0FBSixFQUFlO0FBQ2JBLGtCQUFBQSxTQUFTLEdBQUcsS0FBWjtBQUNBQyxrQkFBQUEsV0FBVyxHQUFHdDNDLEtBQWQ7QUFDQXUwQyxrQkFBQUEsSUFBSTtBQUNMLGlCQUpELE1BSU87QUFDTHJjLGtCQUFBQSxTQUFPLENBQUNrRCxPQUFSLENBQWdCZ2MsT0FBTyxDQUFDRSxXQUFELEVBQWN0M0MsS0FBZCxDQUF2QixFQUE2QzY2QixJQUE3QyxDQUFrRCxVQUFVdDJCLE1BQVYsRUFBa0I7QUFDbEUreUMsb0JBQUFBLFdBQVcsR0FBRy95QyxNQUFkO0FBQ0Fnd0Msb0JBQUFBLElBQUk7QUFDTCxtQkFIRCxFQUdHaFosTUFISDtBQUlEO0FBQ0Y7QUFDRixhQWhCRCxDQWdCRSxPQUFPb2IsR0FBUCxFQUFZO0FBQUVwYixjQUFBQSxNQUFNLENBQUNvYixHQUFELENBQU47QUFBYztBQUMvQixXQWxCRCxFQWtCR3BiLE1BbEJIO0FBbUJELFNBcEJELENBb0JFLE9BQU90OEIsS0FBUCxFQUFjO0FBQUVzOEIsVUFBQUEsTUFBTSxDQUFDdDhCLEtBQUQsQ0FBTjtBQUFnQjtBQUNuQyxPQXRCRDs7QUF3QkFzMUMsTUFBQUEsSUFBSTtBQUNMLEtBMUJNLENBQVA7QUEyQkQ7QUFuQ3FELENBQXZELENBQUQ7O0FDUEEsSUFBSTFqQyxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUkwZixLQUFLLEdBQUcxZixzQkFBQSxDQUFpRHFSLElBQTdEOztBQUVBSyxJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxlQUFWO0FBQTJCb0ssRUFBQUEsS0FBSyxFQUFFLElBQWxDO0FBQXdDK3JCLEVBQUFBLElBQUksRUFBRTtBQUE5QyxDQUFELEVBQXVEO0FBQ3RENXZCLEVBQUFBLElBQUksRUFBRSxTQUFTQSxJQUFULENBQWM3TixFQUFkLEVBQWtCO0FBQ3RCLFdBQU9rYyxLQUFLLENBQUMsSUFBRCxFQUFPbGMsRUFBUCxDQUFaO0FBQ0Q7QUFIcUQsQ0FBdkQsQ0FBRDs7QUNIQSxJQUFJa08sSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJOHZDLG1CQUFpQixHQUFHOXZDLG1CQUF4Qjs7QUFDQSxJQUFJczNDLHdCQUF3QixHQUFHdDNDLHdCQUEvQjs7QUFFQSxJQUFJaTNDLGtCQUFrQixHQUFHSyx3QkFBd0IsQ0FBQyxVQUFVdmUsT0FBVixFQUFtQjVrQixJQUFuQixFQUF5QjtBQUN6RSxNQUFJclIsUUFBUSxHQUFHLEtBQUtBLFFBQXBCO0FBQ0EsTUFBSW95QyxZQUFKLEVBQWtCOXZDLE1BQWxCOztBQUNBLE1BQUksQ0FBQyxLQUFLbTdCLFNBQUwsRUFBTCxFQUF1QjtBQUNyQm43QixJQUFBQSxNQUFNLEdBQUc7QUFBRTBSLE1BQUFBLElBQUksRUFBRSxJQUFSO0FBQWNqVyxNQUFBQSxLQUFLLEVBQUVPO0FBQXJCLEtBQVQ7QUFDQSxTQUFLMFYsSUFBTCxHQUFZLElBQVo7QUFDQW8rQixJQUFBQSxZQUFZLEdBQUdweUMsUUFBUSxDQUFDLFFBQUQsQ0FBdkI7O0FBQ0EsUUFBSW95QyxZQUFZLEtBQUs5ekMsU0FBckIsRUFBZ0M7QUFDOUIsYUFBTzIzQixPQUFPLENBQUNrRCxPQUFSLENBQWdCaVosWUFBWSxDQUFDMTBDLElBQWIsQ0FBa0JzQyxRQUFsQixDQUFoQixFQUE2QzQ0QixJQUE3QyxDQUFrRCxZQUFZO0FBQ25FLGVBQU90MkIsTUFBUDtBQUNELE9BRk0sQ0FBUDtBQUdEOztBQUNELFdBQU9BLE1BQVA7QUFDRDs7QUFBQyxTQUFPLEtBQUtxUixJQUFMLENBQVVqSCxLQUFWLENBQWdCMU0sUUFBaEIsRUFBMEJxUixJQUExQixDQUFQO0FBQ0gsQ0FkZ0QsQ0FBakQ7QUFnQkF6QyxJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxlQUFWO0FBQTJCb0ssRUFBQUEsS0FBSyxFQUFFLElBQWxDO0FBQXdDK3JCLEVBQUFBLElBQUksRUFBRTtBQUE5QyxDQUFELEVBQXVEO0FBQ3REbVgsRUFBQUEsSUFBSSxFQUFFLFNBQVNBLElBQVQsQ0FBY2xMLEtBQWQsRUFBcUI7QUFDekIsV0FBTyxJQUFJK0osa0JBQUosQ0FBdUI7QUFDNUJuMEMsTUFBQUEsUUFBUSxFQUFFcUQsVUFBUSxDQUFDLElBQUQsQ0FEVTtBQUU1Qm82QixNQUFBQSxTQUFTLEVBQUV1UCxtQkFBaUIsQ0FBQzVDLEtBQUQ7QUFGQSxLQUF2QixDQUFQO0FBSUQ7QUFOcUQsQ0FBdkQsQ0FBRDs7QUNyQkEsSUFBSXg3QixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlxNEMsUUFBUSxHQUFHcjRDLHNCQUFBLENBQWlEcTFDLE9BQWhFOztBQUVBM2pDLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLGVBQVY7QUFBMkJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBbEM7QUFBd0MrckIsRUFBQUEsSUFBSSxFQUFFO0FBQTlDLENBQUQsRUFBdUQ7QUFDdERvVSxFQUFBQSxPQUFPLEVBQUUsU0FBU0EsT0FBVCxHQUFtQjtBQUMxQixXQUFPZ0QsUUFBUSxDQUFDLElBQUQsRUFBT2ozQyxTQUFQLEVBQWtCLEVBQWxCLENBQWY7QUFDRDtBQUhxRCxDQUF2RCxDQUFEOztBQ0pBLElBQUlpSCxxQkFBbUIsR0FBR3JJLGFBQTFCOztBQUNBLElBQUkwYywyQkFBeUIsR0FBRzFjLDJCQUFoQzs7QUFDQSxJQUFJcUQsVUFBUSxHQUFHckQsVUFBZjs7QUFDQSxJQUFJNk0sa0JBQWdCLEdBQUc3TSxzQkFBdkI7O0FBQ0EsSUFBSXlGLGFBQVcsR0FBR3pGLFdBQWxCOztBQUVBLElBQUlzNEMsZUFBZSxHQUFHLGtDQUF0QjtBQUNBLElBQUlDLHNCQUFzQixHQUFHLHNCQUE3QjtBQUVBLElBQUlwbUMsa0JBQWdCLEdBQUc5SixxQkFBbUIsQ0FBQ25CLEdBQTNDO0FBQ0EsSUFBSXFCLGtCQUFnQixHQUFHRixxQkFBbUIsQ0FBQ2hCLFNBQXBCLENBQThCa3hDLHNCQUE5QixDQUF2QjtBQUVBLElBQUlDLGNBQWMsR0FBRzk3QiwyQkFBeUIsQ0FBQyxTQUFTKzdCLG9CQUFULENBQThCei9CLEtBQTlCLEVBQXFDRyxHQUFyQyxFQUEwQ3UvQixNQUExQyxFQUFrRGx4QyxJQUFsRCxFQUF3RG14QyxJQUF4RCxFQUE4REMsR0FBOUQsRUFBbUU7QUFDaEgsTUFBSSxPQUFPNS9CLEtBQVAsSUFBZ0J4UixJQUFoQixJQUF5QjJSLEdBQUcsS0FBS29LLFFBQVIsSUFBb0JwSyxHQUFHLEtBQUssQ0FBQ29LLFFBQTdCLElBQXlDLE9BQU9wSyxHQUFQLElBQWMzUixJQUFwRixFQUEyRjtBQUN6RixVQUFNLElBQUluRyxTQUFKLENBQWNpM0MsZUFBZCxDQUFOO0FBQ0Q7O0FBQ0QsTUFBSXQvQixLQUFLLEtBQUt1SyxRQUFWLElBQXNCdkssS0FBSyxLQUFLLENBQUN1SyxRQUFyQyxFQUErQztBQUM3QyxVQUFNLElBQUloQixVQUFKLENBQWUrMUIsZUFBZixDQUFOO0FBQ0Q7O0FBQ0QsTUFBSU8sVUFBVSxHQUFHMS9CLEdBQUcsR0FBR0gsS0FBdkI7QUFDQSxNQUFJOC9CLFlBQVksR0FBRyxLQUFuQjtBQUNBLE1BQUlwaUMsSUFBSjs7QUFDQSxNQUFJZ2lDLE1BQU0sS0FBS3QzQyxTQUFmLEVBQTBCO0FBQ3hCc1YsSUFBQUEsSUFBSSxHQUFHdFYsU0FBUDtBQUNELEdBRkQsTUFFTyxJQUFJaUMsVUFBUSxDQUFDcTFDLE1BQUQsQ0FBWixFQUFzQjtBQUMzQmhpQyxJQUFBQSxJQUFJLEdBQUdnaUMsTUFBTSxDQUFDaGlDLElBQWQ7QUFDQW9pQyxJQUFBQSxZQUFZLEdBQUcsQ0FBQyxDQUFDSixNQUFNLENBQUNLLFNBQXhCO0FBQ0QsR0FITSxNQUdBLElBQUksT0FBT0wsTUFBUCxJQUFpQmx4QyxJQUFyQixFQUEyQjtBQUNoQ2tQLElBQUFBLElBQUksR0FBR2dpQyxNQUFQO0FBQ0QsR0FGTSxNQUVBO0FBQ0wsVUFBTSxJQUFJcjNDLFNBQUosQ0FBY2kzQyxlQUFkLENBQU47QUFDRDs7QUFDRCxNQUFJNWhDLElBQUksSUFBSSxJQUFaLEVBQWtCO0FBQ2hCQSxJQUFBQSxJQUFJLEdBQUdtaUMsVUFBVSxHQUFHRCxHQUFILEdBQVMsQ0FBQ0EsR0FBM0I7QUFDRDs7QUFDRCxNQUFJLE9BQU9saUMsSUFBUCxJQUFlbFAsSUFBbkIsRUFBeUI7QUFDdkIsVUFBTSxJQUFJbkcsU0FBSixDQUFjaTNDLGVBQWQsQ0FBTjtBQUNEOztBQUNELE1BQUk1aEMsSUFBSSxLQUFLNk0sUUFBVCxJQUFxQjdNLElBQUksS0FBSyxDQUFDNk0sUUFBL0IsSUFBNEM3TSxJQUFJLEtBQUtpaUMsSUFBVCxJQUFpQjMvQixLQUFLLEtBQUtHLEdBQTNFLEVBQWlGO0FBQy9FLFVBQU0sSUFBSW9KLFVBQUosQ0FBZSsxQixlQUFmLENBQU47QUFDRCxHQTVCK0c7OztBQThCaEgsTUFBSVUsT0FBTyxHQUFHaGdDLEtBQUssSUFBSUEsS0FBVCxJQUFrQkcsR0FBRyxJQUFJQSxHQUF6QixJQUFnQ3pDLElBQUksSUFBSUEsSUFBeEMsSUFBaUR5QyxHQUFHLEdBQUdILEtBQVAsS0FBbUJ0QyxJQUFJLEdBQUdpaUMsSUFBeEY7QUFDQXhtQyxFQUFBQSxrQkFBZ0IsQ0FBQyxJQUFELEVBQU87QUFDckIzSyxJQUFBQSxJQUFJLEVBQUUrd0Msc0JBRGU7QUFFckJ2L0IsSUFBQUEsS0FBSyxFQUFFQSxLQUZjO0FBR3JCRyxJQUFBQSxHQUFHLEVBQUVBLEdBSGdCO0FBSXJCekMsSUFBQUEsSUFBSSxFQUFFQSxJQUplO0FBS3JCb2lDLElBQUFBLFlBQVksRUFBRUEsWUFMTztBQU1yQkUsSUFBQUEsT0FBTyxFQUFFQSxPQU5ZO0FBT3JCQyxJQUFBQSxZQUFZLEVBQUVOLElBUE87QUFRckJBLElBQUFBLElBQUksRUFBRUE7QUFSZSxHQUFQLENBQWhCOztBQVVBLE1BQUksQ0FBQ2x6QyxhQUFMLEVBQWtCO0FBQ2hCLFNBQUt1VCxLQUFMLEdBQWFBLEtBQWI7QUFDQSxTQUFLRyxHQUFMLEdBQVdBLEdBQVg7QUFDQSxTQUFLekMsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS3FpQyxTQUFMLEdBQWlCRCxZQUFqQjtBQUNEO0FBQ0YsQ0EvQzZDLEVBK0MzQ1Asc0JBL0MyQyxFQStDbkIsU0FBUzloQyxJQUFULEdBQWdCO0FBQ3pDLE1BQUlsUCxLQUFLLEdBQUdnQixrQkFBZ0IsQ0FBQyxJQUFELENBQTVCO0FBQ0EsTUFBSWhCLEtBQUssQ0FBQ3l4QyxPQUFWLEVBQW1CLE9BQU87QUFBRW40QyxJQUFBQSxLQUFLLEVBQUVPLFNBQVQ7QUFBb0IwVixJQUFBQSxJQUFJLEVBQUU7QUFBMUIsR0FBUDtBQUNuQixNQUFJa0MsS0FBSyxHQUFHelIsS0FBSyxDQUFDeVIsS0FBbEI7QUFDQSxNQUFJRyxHQUFHLEdBQUc1UixLQUFLLENBQUM0UixHQUFoQjtBQUNBLE1BQUl6QyxJQUFJLEdBQUduUCxLQUFLLENBQUNtUCxJQUFqQjtBQUNBLE1BQUl3aUMsb0JBQW9CLEdBQUdsZ0MsS0FBSyxHQUFJdEMsSUFBSSxHQUFHblAsS0FBSyxDQUFDMHhDLFlBQU4sRUFBM0M7QUFDQSxNQUFJQyxvQkFBb0IsS0FBSy8vQixHQUE3QixFQUFrQzVSLEtBQUssQ0FBQ3l4QyxPQUFOLEdBQWdCLElBQWhCO0FBQ2xDLE1BQUlGLFlBQVksR0FBR3Z4QyxLQUFLLENBQUN1eEMsWUFBekI7QUFDQSxNQUFJSyxZQUFKOztBQUNBLE1BQUloZ0MsR0FBRyxHQUFHSCxLQUFWLEVBQWlCO0FBQ2ZtZ0MsSUFBQUEsWUFBWSxHQUFHTCxZQUFZLEdBQUdJLG9CQUFvQixHQUFHLy9CLEdBQTFCLEdBQWdDKy9CLG9CQUFvQixJQUFJLy9CLEdBQW5GO0FBQ0QsR0FGRCxNQUVPO0FBQ0xnZ0MsSUFBQUEsWUFBWSxHQUFHTCxZQUFZLEdBQUczL0IsR0FBRyxHQUFHKy9CLG9CQUFULEdBQWdDLy9CLEdBQUcsSUFBSSsvQixvQkFBbEU7QUFDRDs7QUFDRCxNQUFJQyxZQUFKLEVBQWtCO0FBQ2hCLFdBQU87QUFBRXQ0QyxNQUFBQSxLQUFLLEVBQUVPLFNBQVQ7QUFBb0IwVixNQUFBQSxJQUFJLEVBQUV2UCxLQUFLLENBQUN5eEMsT0FBTixHQUFnQjtBQUExQyxLQUFQO0FBQ0Q7O0FBQUMsU0FBTztBQUFFbjRDLElBQUFBLEtBQUssRUFBRXE0QyxvQkFBVDtBQUErQnBpQyxJQUFBQSxJQUFJLEVBQUU7QUFBckMsR0FBUDtBQUNILENBakU2QyxDQUE5Qzs7QUFtRUEsSUFBSTBnQixNQUFNLEdBQUcsVUFBVWgwQixFQUFWLEVBQWM7QUFDekIsU0FBTztBQUFFckQsSUFBQUEsR0FBRyxFQUFFcUQsRUFBUDtBQUFXMEQsSUFBQUEsR0FBRyxFQUFFLFlBQVk7QUFBRTtBQUFhLEtBQTNDO0FBQTZDcEcsSUFBQUEsWUFBWSxFQUFFLElBQTNEO0FBQWlFSCxJQUFBQSxVQUFVLEVBQUU7QUFBN0UsR0FBUDtBQUNELENBRkQ7O0FBSUEsSUFBSThFLGFBQUosRUFBaUI7QUFDZm9ILEVBQUFBLGtCQUFnQixDQUFDMnJDLGNBQWMsQ0FBQ3h3QyxTQUFoQixFQUEyQjtBQUN6Q2dSLElBQUFBLEtBQUssRUFBRXdlLE1BQU0sQ0FBQyxZQUFZO0FBQ3hCLGFBQU9qdkIsa0JBQWdCLENBQUMsSUFBRCxDQUFoQixDQUF1QnlRLEtBQTlCO0FBQ0QsS0FGWSxDQUQ0QjtBQUl6Q0csSUFBQUEsR0FBRyxFQUFFcWUsTUFBTSxDQUFDLFlBQVk7QUFDdEIsYUFBT2p2QixrQkFBZ0IsQ0FBQyxJQUFELENBQWhCLENBQXVCNFEsR0FBOUI7QUFDRCxLQUZVLENBSjhCO0FBT3pDNC9CLElBQUFBLFNBQVMsRUFBRXZoQixNQUFNLENBQUMsWUFBWTtBQUM1QixhQUFPanZCLGtCQUFnQixDQUFDLElBQUQsQ0FBaEIsQ0FBdUJ1d0MsWUFBOUI7QUFDRCxLQUZnQixDQVB3QjtBQVV6Q3BpQyxJQUFBQSxJQUFJLEVBQUU4Z0IsTUFBTSxDQUFDLFlBQVk7QUFDdkIsYUFBT2p2QixrQkFBZ0IsQ0FBQyxJQUFELENBQWhCLENBQXVCbU8sSUFBOUI7QUFDRCxLQUZXO0FBVjZCLEdBQTNCLENBQWhCO0FBY0Q7O0lBRURuWCxvQkFBQSxHQUFpQmk1QyxjQUFqQjs7QUNwR0E7O0FBQ0EsSUFBSTltQyxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUl5NEMsc0JBQW9CLEdBQUd6NEMsb0JBQTNCO0FBR0E7OztBQUNBLElBQUksT0FBT281QyxNQUFQLElBQWlCLFVBQXJCLEVBQWlDO0FBQy9CMW5DLEVBQUFBLElBQUMsQ0FBQztBQUFFNUcsSUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JnQixJQUFBQSxJQUFJLEVBQUU7QUFBMUIsR0FBRCxFQUFtQztBQUNsQ3V0QyxJQUFBQSxLQUFLLEVBQUUsU0FBU0EsS0FBVCxDQUFlcmdDLEtBQWYsRUFBc0JHLEdBQXRCLEVBQTJCdS9CLE1BQTNCLEVBQW1DO0FBQ3hDLGFBQU8sSUFBSUQsc0JBQUosQ0FBeUJ6L0IsS0FBekIsRUFBZ0NHLEdBQWhDLEVBQXFDdS9CLE1BQXJDLEVBQTZDLFFBQTdDLEVBQXVEVSxNQUFNLENBQUMsQ0FBRCxDQUE3RCxFQUFrRUEsTUFBTSxDQUFDLENBQUQsQ0FBeEUsQ0FBUDtBQUNEO0FBSGlDLEdBQW5DLENBQUQ7QUFLRDs7QUNiRDtBQUNBLElBQUlub0IsS0FBRyxHQUFHanhCLE1BQVY7O0FBQ0EsSUFBSTBHLFNBQU8sR0FBRzFHLGtCQUFkOztBQUNBLElBQUk2TyxRQUFNLEdBQUc3TyxjQUFiOztBQUNBLElBQUlxRCxVQUFRLEdBQUdyRCxVQUFmOztBQUVBLElBQUlzNUMsSUFBSSxHQUFHLFlBQVk7QUFDckI7QUFDQSxPQUFLL3lDLE1BQUwsR0FBYyxJQUFkO0FBQ0EsT0FBSzlELE1BQUwsR0FBYyxJQUFkLENBSHFCOztBQUtyQixPQUFLODJDLFVBQUwsR0FBa0IsSUFBbEI7QUFDQSxPQUFLQyxjQUFMLEdBQXNCM3FDLFFBQU0sQ0FBQyxJQUFELENBQTVCO0FBQ0QsQ0FQRDs7QUFTQXlxQyxJQUFJLENBQUN0eEMsU0FBTCxDQUFlN0gsR0FBZixHQUFxQixVQUFVd0QsR0FBVixFQUFlODFDLFdBQWYsRUFBNEI7QUFDL0MsU0FBTyxLQUFLOTFDLEdBQUwsTUFBYyxLQUFLQSxHQUFMLElBQVk4MUMsV0FBVyxFQUFyQyxDQUFQO0FBQ0QsQ0FGRDs7QUFJQUgsSUFBSSxDQUFDdHhDLFNBQUwsQ0FBZXlPLElBQWYsR0FBc0IsVUFBVXBNLENBQVYsRUFBYWhMLEVBQWIsRUFBaUJxNkMsU0FBakIsRUFBNEI7QUFDaEQsTUFBSTUxQyxLQUFLLEdBQUc0MUMsU0FBUyxHQUNqQixLQUFLRixjQUFMLENBQW9CbnZDLENBQXBCLE1BQTJCLEtBQUttdkMsY0FBTCxDQUFvQm52QyxDQUFwQixJQUF5QixJQUFJM0QsU0FBSixFQUFwRCxDQURpQixHQUVqQixLQUFLNnlDLFVBQUwsS0FBb0IsS0FBS0EsVUFBTCxHQUFrQixJQUFJdG9CLEtBQUosRUFBdEMsQ0FGSjtBQUdBLE1BQUlWLEtBQUssR0FBR3pzQixLQUFLLENBQUMzRCxHQUFOLENBQVVkLEVBQVYsQ0FBWjtBQUNBLE1BQUksQ0FBQ2t4QixLQUFMLEVBQVl6c0IsS0FBSyxDQUFDb0QsR0FBTixDQUFVN0gsRUFBVixFQUFja3hCLEtBQUssR0FBRyxJQUFJK29CLElBQUosRUFBdEI7QUFDWixTQUFPL29CLEtBQVA7QUFDRCxDQVBEOztBQVNBLElBQUlvcEIsTUFBSSxHQUFHLElBQUlMLElBQUosRUFBWDs7SUFFQS81QyxZQUFBLEdBQWlCLFlBQVk7QUFDM0IsTUFBSXE2QyxNQUFNLEdBQUdELE1BQWI7QUFDQSxNQUFJNzNDLE1BQU0sR0FBR0QsU0FBUyxDQUFDQyxNQUF2QjtBQUNBLE1BQUl1SSxDQUFKLEVBQU9oTCxFQUFQLENBSDJCOztBQUszQixPQUFLZ0wsQ0FBQyxHQUFHLENBQVQsRUFBWUEsQ0FBQyxHQUFHdkksTUFBaEIsRUFBd0J1SSxDQUFDLEVBQXpCLEVBQTZCO0FBQzNCLFFBQUloSCxVQUFRLENBQUNoRSxFQUFFLEdBQUd3QyxTQUFTLENBQUN3SSxDQUFELENBQWYsQ0FBWixFQUFpQ3V2QyxNQUFNLEdBQUdBLE1BQU0sQ0FBQ25qQyxJQUFQLENBQVlwTSxDQUFaLEVBQWVoTCxFQUFmLEVBQW1CLElBQW5CLENBQVQ7QUFDbEM7O0FBQ0QsTUFBSSxTQUFTWSxNQUFULElBQW1CMjVDLE1BQU0sS0FBS0QsTUFBbEMsRUFBd0MsTUFBTXQ0QyxTQUFTLENBQUMsdURBQUQsQ0FBZjs7QUFDeEMsT0FBS2dKLENBQUMsR0FBRyxDQUFULEVBQVlBLENBQUMsR0FBR3ZJLE1BQWhCLEVBQXdCdUksQ0FBQyxFQUF6QixFQUE2QjtBQUMzQixRQUFJLENBQUNoSCxVQUFRLENBQUNoRSxFQUFFLEdBQUd3QyxTQUFTLENBQUN3SSxDQUFELENBQWYsQ0FBYixFQUFrQ3V2QyxNQUFNLEdBQUdBLE1BQU0sQ0FBQ25qQyxJQUFQLENBQVlwTSxDQUFaLEVBQWVoTCxFQUFmLEVBQW1CLEtBQW5CLENBQVQ7QUFDbkM7O0FBQUMsU0FBT3U2QyxNQUFQO0FBQ0gsQ0FaRDs7QUM5QkEsSUFBSWxvQyxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUk2NUMscUJBQW1CLEdBQUc3NUMsWUFBMUI7O0FBQ0EsSUFBSStCLFlBQVUsR0FBRy9CLFlBQWpCOztBQUNBLElBQUk2TyxRQUFNLEdBQUc3TyxjQUFiOztBQUVBLElBQUl5NUMsV0FBVyxHQUFHLFlBQVk7QUFDNUIsTUFBSTVoQixNQUFNLEdBQUc5MUIsWUFBVSxDQUFDLFFBQUQsRUFBVyxRQUFYLENBQXZCO0FBQ0EsU0FBTzgxQixNQUFNLEdBQUdBLE1BQU0sQ0FBQ2hwQixRQUFNLENBQUMsSUFBRCxDQUFQLENBQVQsR0FBMEJBLFFBQU0sQ0FBQyxJQUFELENBQTdDO0FBQ0QsQ0FIRDs7O0FBTUE2QyxJQUFDLENBQUM7QUFBRS9SLEVBQUFBLE1BQU0sRUFBRTtBQUFWLENBQUQsRUFBbUI7QUFDbEJtNkMsRUFBQUEsWUFBWSxFQUFFLFNBQVNBLFlBQVQsR0FBd0I7QUFDcEMsV0FBT0QscUJBQW1CLENBQUNycUMsS0FBcEIsQ0FBMEJ2UCxNQUExQixFQUFrQzRCLFNBQWxDLEVBQTZDMUIsR0FBN0MsQ0FBaUQsUUFBakQsRUFBMkRzNUMsV0FBM0QsQ0FBUDtBQUNEO0FBSGlCLENBQW5CLENBQUQ7O0FDWEEsSUFBSS9uQyxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUk2NUMsbUJBQW1CLEdBQUc3NUMsWUFBMUI7O0FBQ0EsSUFBSStCLFlBQVUsR0FBRy9CLFlBQWpCOzs7QUFHQTBSLElBQUMsQ0FBQztBQUFFL1IsRUFBQUEsTUFBTSxFQUFFO0FBQVYsQ0FBRCxFQUFtQjtBQUNsQm82QyxFQUFBQSxlQUFlLEVBQUUsU0FBU0EsZUFBVCxHQUEyQjtBQUMxQyxRQUFJbDRDLFNBQVMsQ0FBQ0MsTUFBVixLQUFxQixDQUFyQixJQUEwQixPQUFPRCxTQUFTLENBQUMsQ0FBRCxDQUFoQixLQUF3QixRQUF0RCxFQUFnRSxPQUFPRSxZQUFVLENBQUMsUUFBRCxDQUFWLENBQXFCLEtBQXJCLEVBQTRCRixTQUFTLENBQUMsQ0FBRCxDQUFyQyxDQUFQO0FBQ2hFLFdBQU9nNEMsbUJBQW1CLENBQUNycUMsS0FBcEIsQ0FBMEIsSUFBMUIsRUFBZ0MzTixTQUFoQyxFQUEyQzFCLEdBQTNDLENBQStDLFFBQS9DLEVBQXlENEIsWUFBVSxDQUFDLFFBQUQsQ0FBbkUsQ0FBUDtBQUNEO0FBSmlCLENBQW5CLENBQUQ7O0FDSEEsSUFBSTJQLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSUwsUUFBTSxHQUFHSyxRQUFiOztBQUNBLElBQUk2akIsWUFBVSxHQUFHN2pCLFlBQWpCOztBQUNBLElBQUl5QixZQUFVLEdBQUd6QixZQUFqQjs7QUFDQSxJQUFJOEcsNkJBQTJCLEdBQUc5Ryw2QkFBbEM7O0FBQ0EsSUFBSUQsT0FBSyxHQUFHQyxRQUFaOztBQUNBLElBQUlvRSxRQUFNLEdBQUdwRSxnQkFBYjs7QUFDQSxJQUFJaUYsaUJBQWUsR0FBR2pGLGlCQUF0Qjs7QUFDQSxJQUFJbWMsbUJBQWlCLEdBQUduYyxhQUFBLENBQXVDbWMsaUJBQS9EOztBQUdBLElBQUk5UCxlQUFhLEdBQUdwSCxpQkFBZSxDQUFDLGFBQUQsQ0FBbkM7QUFFQSxJQUFJKzBDLGNBQWMsR0FBR3I2QyxRQUFNLENBQUNzNkMsUUFBNUI7O0FBR0EsSUFBSWx1QyxRQUFNLEdBQ0wsQ0FBQ3RLLFlBQVUsQ0FBQ3U0QyxjQUFELENBREgsSUFFUkEsY0FBYyxDQUFDaHlDLFNBQWYsS0FBNkJtVSxtQkFGckI7QUFBQSxHQUlSLENBQUNwYyxPQUFLLENBQUMsWUFBWTtBQUFFaTZDLEVBQUFBLGNBQWMsQ0FBQyxFQUFELENBQWQ7QUFBcUIsQ0FBcEMsQ0FKWDs7QUFNQSxJQUFJeDlCLG1CQUFtQixHQUFHLFNBQVN5OUIsUUFBVCxHQUFvQjtBQUM1Q3AyQixFQUFBQSxZQUFVLENBQUMsSUFBRCxFQUFPckgsbUJBQVAsQ0FBVjtBQUNELENBRkQ7O0FBSUEsSUFBSSxDQUFDcFksUUFBTSxDQUFDK1gsbUJBQUQsRUFBb0I5UCxlQUFwQixDQUFYLEVBQStDO0FBQzdDdkYsRUFBQUEsNkJBQTJCLENBQUNxVixtQkFBRCxFQUFvQjlQLGVBQXBCLEVBQW1DLFVBQW5DLENBQTNCO0FBQ0Q7O0FBRUQsSUFBSU4sUUFBTSxJQUFJLENBQUMzSCxRQUFNLENBQUMrWCxtQkFBRCxFQUFvQixhQUFwQixDQUFqQixJQUF1REEsbUJBQWlCLENBQUMvTCxXQUFsQixLQUFrQ25RLE1BQTdGLEVBQXFHO0FBQ25HNkcsRUFBQUEsNkJBQTJCLENBQUNxVixtQkFBRCxFQUFvQixhQUFwQixFQUFtQ0ssbUJBQW5DLENBQTNCO0FBQ0Q7O0FBRURBLG1CQUFtQixDQUFDeFUsU0FBcEIsR0FBZ0NtVSxtQkFBaEM7QUFFQXpLLElBQUMsQ0FBQztBQUFFL1IsRUFBQUEsTUFBTSxFQUFFLElBQVY7QUFBZ0J1TSxFQUFBQSxNQUFNLEVBQUVIO0FBQXhCLENBQUQsRUFBbUM7QUFDbENrdUMsRUFBQUEsUUFBUSxFQUFFejlCO0FBRHdCLENBQW5DLENBQUQ7O0FDckNBLElBQUl0WixXQUFTLEdBQUdsRCxXQUFoQjs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJNk8sUUFBTSxHQUFHN08sY0FBYjs7QUFDQSxJQUFJOEcsNkJBQTJCLEdBQUc5Ryw2QkFBbEM7O0FBQ0EsSUFBSTRqQixhQUFXLEdBQUc1akIsYUFBbEI7O0FBQ0EsSUFBSWlGLGlCQUFlLEdBQUdqRixpQkFBdEI7O0FBQ0EsSUFBSXFJLHFCQUFtQixHQUFHckksYUFBMUI7O0FBQ0EsSUFBSStFLFdBQVMsR0FBRy9FLFdBQWhCOztBQUNBLElBQUltYyxtQkFBaUIsR0FBR25jLGFBQUEsQ0FBdUNtYyxpQkFBL0Q7O0FBRUEsSUFBSWhLLGtCQUFnQixHQUFHOUoscUJBQW1CLENBQUNuQixHQUEzQztBQUNBLElBQUlxQixrQkFBZ0IsR0FBR0YscUJBQW1CLENBQUNsSSxHQUEzQztBQUVBLElBQUlrTSxlQUFhLEdBQUdwSCxpQkFBZSxDQUFDLGFBQUQsQ0FBbkM7O0lBRUExRixtQkFBQSxHQUFpQixVQUFVeTNDLFdBQVYsRUFBdUIxZ0MsV0FBdkIsRUFBb0M7QUFDbkQsTUFBSTRqQyxhQUFhLEdBQUcsU0FBU0QsUUFBVCxDQUFrQjF5QyxLQUFsQixFQUF5QjtBQUMzQ0EsSUFBQUEsS0FBSyxDQUFDa1AsSUFBTixHQUFhdlQsV0FBUyxDQUFDcUUsS0FBSyxDQUFDekUsUUFBTixDQUFlMlQsSUFBaEIsQ0FBdEI7QUFDQWxQLElBQUFBLEtBQUssQ0FBQ3VQLElBQU4sR0FBYSxLQUFiO0FBQ0F2UCxJQUFBQSxLQUFLLENBQUM0eUMsU0FBTixHQUFrQixDQUFDN2pDLFdBQW5CO0FBQ0FuRSxJQUFBQSxrQkFBZ0IsQ0FBQyxJQUFELEVBQU81SyxLQUFQLENBQWhCO0FBQ0QsR0FMRDs7QUFPQTJ5QyxFQUFBQSxhQUFhLENBQUNseUMsU0FBZCxHQUEwQjRiLGFBQVcsQ0FBQy9VLFFBQU0sQ0FBQ3NOLG1CQUFELENBQVAsRUFBNEI7QUFDL0QxRixJQUFBQSxJQUFJLEVBQUUsU0FBU0EsSUFBVCxDQUFja0MsR0FBZCxFQUFtQjtBQUN2QixVQUFJcFIsS0FBSyxHQUFHZ0Isa0JBQWdCLENBQUMsSUFBRCxDQUE1QjtBQUNBLFVBQUk0TCxJQUFJLEdBQUd0UyxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBQ3lGLEtBQUssQ0FBQzR5QyxTQUFOLEdBQWtCLzRDLFNBQWxCLEdBQThCdVgsR0FBL0IsQ0FBbkIsR0FBeURyQyxXQUFXLEdBQUcsRUFBSCxHQUFRLENBQUNsVixTQUFELENBQXZGO0FBQ0FtRyxNQUFBQSxLQUFLLENBQUM0eUMsU0FBTixHQUFrQixLQUFsQjtBQUNBLFVBQUkvMEMsTUFBTSxHQUFHbUMsS0FBSyxDQUFDdVAsSUFBTixHQUFhMVYsU0FBYixHQUF5QjQxQyxXQUFXLENBQUN4MkMsSUFBWixDQUFpQitHLEtBQWpCLEVBQXdCNE0sSUFBeEIsQ0FBdEM7QUFDQSxhQUFPO0FBQUUyQyxRQUFBQSxJQUFJLEVBQUV2UCxLQUFLLENBQUN1UCxJQUFkO0FBQW9CalcsUUFBQUEsS0FBSyxFQUFFdUU7QUFBM0IsT0FBUDtBQUNELEtBUDhEO0FBUS9ELGNBQVUsVUFBVXZFLEtBQVYsRUFBaUI7QUFDekIsVUFBSTBHLEtBQUssR0FBR2dCLGtCQUFnQixDQUFDLElBQUQsQ0FBNUI7QUFDQSxVQUFJekYsUUFBUSxHQUFHeUUsS0FBSyxDQUFDekUsUUFBckI7QUFDQXlFLE1BQUFBLEtBQUssQ0FBQ3VQLElBQU4sR0FBYSxJQUFiO0FBQ0EsVUFBSXNnQyxRQUFRLEdBQUdyeUMsV0FBUyxDQUFDakMsUUFBRCxFQUFXLFFBQVgsQ0FBeEI7QUFDQSxhQUFPO0FBQUVnVSxRQUFBQSxJQUFJLEVBQUUsSUFBUjtBQUFjalcsUUFBQUEsS0FBSyxFQUFFdTJDLFFBQVEsR0FBR2p4QyxVQUFRLENBQUNpeEMsUUFBUSxDQUFDNTJDLElBQVQsQ0FBY3NDLFFBQWQsRUFBd0JqQyxLQUF4QixDQUFELENBQVIsQ0FBeUNBLEtBQTVDLEdBQW9EQTtBQUFqRixPQUFQO0FBQ0QsS0FkOEQ7QUFlL0QsYUFBUyxVQUFVQSxLQUFWLEVBQWlCO0FBQ3hCLFVBQUkwRyxLQUFLLEdBQUdnQixrQkFBZ0IsQ0FBQyxJQUFELENBQTVCO0FBQ0EsVUFBSXpGLFFBQVEsR0FBR3lFLEtBQUssQ0FBQ3pFLFFBQXJCO0FBQ0F5RSxNQUFBQSxLQUFLLENBQUN1UCxJQUFOLEdBQWEsSUFBYjtBQUNBLFVBQUl1Z0MsT0FBTyxHQUFHdHlDLFdBQVMsQ0FBQ2pDLFFBQUQsRUFBVyxPQUFYLENBQXZCO0FBQ0EsVUFBSXUwQyxPQUFKLEVBQWEsT0FBT0EsT0FBTyxDQUFDNzJDLElBQVIsQ0FBYXNDLFFBQWIsRUFBdUJqQyxLQUF2QixDQUFQO0FBQ2IsWUFBTUEsS0FBTjtBQUNEO0FBdEI4RCxHQUE1QixDQUFyQzs7QUF5QkEsTUFBSSxDQUFDeVYsV0FBTCxFQUFrQjtBQUNoQnhQLElBQUFBLDZCQUEyQixDQUFDb3pDLGFBQWEsQ0FBQ2x5QyxTQUFmLEVBQTBCcUUsZUFBMUIsRUFBeUMsV0FBekMsQ0FBM0I7QUFDRDs7QUFFRCxTQUFPNnRDLGFBQVA7QUFDRCxDQXRDRDs7QUNkQSxJQUFJeG9DLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSW1HLFVBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSW82QyxxQkFBbUIsR0FBR3A2QyxtQkFBMUI7O0FBRUEsSUFBSWs2QyxlQUFhLEdBQUdFLHFCQUFtQixDQUFDLFVBQVVqbUMsSUFBVixFQUFnQjtBQUN0RCxNQUFJL08sTUFBTSxHQUFHZSxVQUFRLENBQUMsS0FBS3NRLElBQUwsQ0FBVWpILEtBQVYsQ0FBZ0IsS0FBSzFNLFFBQXJCLEVBQStCcVIsSUFBL0IsQ0FBRCxDQUFyQjtBQUNBLE1BQUkyQyxJQUFJLEdBQUcsS0FBS0EsSUFBTCxHQUFZLENBQUMsQ0FBQzFSLE1BQU0sQ0FBQzBSLElBQWhDO0FBQ0EsTUFBSSxDQUFDQSxJQUFMLEVBQVcsT0FBTyxDQUFDLEtBQUt2TixLQUFMLEVBQUQsRUFBZW5FLE1BQU0sQ0FBQ3ZFLEtBQXRCLENBQVA7QUFDWixDQUpzQyxDQUF2QztBQU1BNlEsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsVUFBVjtBQUFzQm9LLEVBQUFBLEtBQUssRUFBRSxJQUE3QjtBQUFtQytyQixFQUFBQSxJQUFJLEVBQUU7QUFBekMsQ0FBRCxFQUFrRDtBQUNqRHNXLEVBQUFBLGNBQWMsRUFBRSxTQUFTQSxjQUFULEdBQTBCO0FBQ3hDLFdBQU8sSUFBSTJDLGVBQUosQ0FBa0I7QUFDdkJwM0MsTUFBQUEsUUFBUSxFQUFFcUQsVUFBUSxDQUFDLElBQUQsQ0FESztBQUV2Qm9ELE1BQUFBLEtBQUssRUFBRTtBQUZnQixLQUFsQixDQUFQO0FBSUQ7QUFOZ0QsQ0FBbEQsQ0FBRDs7QUNWQSxJQUFJbUksSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJOHZDLG1CQUFpQixHQUFHOXZDLG1CQUF4Qjs7QUFDQSxJQUFJbzZDLHFCQUFtQixHQUFHcDZDLG1CQUExQjs7QUFFQSxJQUFJazZDLGVBQWEsR0FBR0UscUJBQW1CLENBQUMsVUFBVWptQyxJQUFWLEVBQWdCO0FBQ3RELE1BQUlyUixRQUFRLEdBQUcsS0FBS0EsUUFBcEI7QUFDQSxNQUFJMlQsSUFBSSxHQUFHLEtBQUtBLElBQWhCO0FBQ0EsTUFBSXJSLE1BQUosRUFBWTBSLElBQVo7O0FBQ0EsU0FBTyxLQUFLeXBCLFNBQVosRUFBdUI7QUFDckIsU0FBS0EsU0FBTDtBQUNBbjdCLElBQUFBLE1BQU0sR0FBR2UsVUFBUSxDQUFDc1EsSUFBSSxDQUFDalcsSUFBTCxDQUFVc0MsUUFBVixDQUFELENBQWpCO0FBQ0FnVSxJQUFBQSxJQUFJLEdBQUcsS0FBS0EsSUFBTCxHQUFZLENBQUMsQ0FBQzFSLE1BQU0sQ0FBQzBSLElBQTVCO0FBQ0EsUUFBSUEsSUFBSixFQUFVO0FBQ1g7O0FBQ0QxUixFQUFBQSxNQUFNLEdBQUdlLFVBQVEsQ0FBQ3NRLElBQUksQ0FBQ2pILEtBQUwsQ0FBVzFNLFFBQVgsRUFBcUJxUixJQUFyQixDQUFELENBQWpCO0FBQ0EyQyxFQUFBQSxJQUFJLEdBQUcsS0FBS0EsSUFBTCxHQUFZLENBQUMsQ0FBQzFSLE1BQU0sQ0FBQzBSLElBQTVCO0FBQ0EsTUFBSSxDQUFDQSxJQUFMLEVBQVcsT0FBTzFSLE1BQU0sQ0FBQ3ZFLEtBQWQ7QUFDWixDQWJzQyxDQUF2QztBQWVBNlEsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsVUFBVjtBQUFzQm9LLEVBQUFBLEtBQUssRUFBRSxJQUE3QjtBQUFtQytyQixFQUFBQSxJQUFJLEVBQUU7QUFBekMsQ0FBRCxFQUFrRDtBQUNqRHdXLEVBQUFBLElBQUksRUFBRSxTQUFTQSxJQUFULENBQWN2SyxLQUFkLEVBQXFCO0FBQ3pCLFdBQU8sSUFBSWdOLGVBQUosQ0FBa0I7QUFDdkJwM0MsTUFBQUEsUUFBUSxFQUFFcUQsVUFBUSxDQUFDLElBQUQsQ0FESztBQUV2Qm82QixNQUFBQSxTQUFTLEVBQUV1UCxtQkFBaUIsQ0FBQzVDLEtBQUQ7QUFGTCxLQUFsQixDQUFQO0FBSUQ7QUFOZ0QsQ0FBbEQsQ0FBRDs7QUNwQkEsSUFBSXg3QixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlnWCxTQUFPLEdBQUdoWCxTQUFkOztBQUNBLElBQUlrRCxXQUFTLEdBQUdsRCxXQUFoQjs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFFQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFVBQVY7QUFBc0JvSyxFQUFBQSxLQUFLLEVBQUUsSUFBN0I7QUFBbUMrckIsRUFBQUEsSUFBSSxFQUFFO0FBQXpDLENBQUQsRUFBa0Q7QUFDakQzdkIsRUFBQUEsS0FBSyxFQUFFLFNBQVNBLEtBQVQsQ0FBZTlOLEVBQWYsRUFBbUI7QUFDeEIyQyxJQUFBQSxVQUFRLENBQUMsSUFBRCxDQUFSO0FBQ0FqRCxJQUFBQSxXQUFTLENBQUNNLEVBQUQsQ0FBVDtBQUNBLFdBQU8sQ0FBQ3dULFNBQU8sQ0FBQyxJQUFELEVBQU8sVUFBVW5XLEtBQVYsRUFBaUI4VixJQUFqQixFQUF1QjtBQUMzQyxVQUFJLENBQUNuVCxFQUFFLENBQUMzQyxLQUFELENBQVAsRUFBZ0IsT0FBTzhWLElBQUksRUFBWDtBQUNqQixLQUZjLEVBRVo7QUFBRUwsTUFBQUEsV0FBVyxFQUFFLElBQWY7QUFBcUJDLE1BQUFBLFdBQVcsRUFBRTtBQUFsQyxLQUZZLENBQVAsQ0FFcUNMLE9BRjdDO0FBR0Q7QUFQZ0QsQ0FBbEQsQ0FBRDs7QUNMQSxJQUFJeEUsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJa0QsV0FBUyxHQUFHbEQsV0FBaEI7O0FBQ0EsSUFBSW1HLFVBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSW82QyxxQkFBbUIsR0FBR3A2QyxtQkFBMUI7O0FBQ0EsSUFBSWtiLDhCQUE0QixHQUFHbGIsOEJBQW5DOztBQUVBLElBQUlrNkMsZUFBYSxHQUFHRSxxQkFBbUIsQ0FBQyxVQUFVam1DLElBQVYsRUFBZ0I7QUFDdEQsTUFBSXJSLFFBQVEsR0FBRyxLQUFLQSxRQUFwQjtBQUNBLE1BQUk0MEMsUUFBUSxHQUFHLEtBQUtBLFFBQXBCO0FBQ0EsTUFBSWpoQyxJQUFJLEdBQUcsS0FBS0EsSUFBaEI7QUFDQSxNQUFJclIsTUFBSixFQUFZMFIsSUFBWixFQUFrQmpXLEtBQWxCOztBQUNBLFNBQU8sSUFBUCxFQUFhO0FBQ1h1RSxJQUFBQSxNQUFNLEdBQUdlLFVBQVEsQ0FBQ3NRLElBQUksQ0FBQ2pILEtBQUwsQ0FBVzFNLFFBQVgsRUFBcUJxUixJQUFyQixDQUFELENBQWpCO0FBQ0EyQyxJQUFBQSxJQUFJLEdBQUcsS0FBS0EsSUFBTCxHQUFZLENBQUMsQ0FBQzFSLE1BQU0sQ0FBQzBSLElBQTVCO0FBQ0EsUUFBSUEsSUFBSixFQUFVO0FBQ1ZqVyxJQUFBQSxLQUFLLEdBQUd1RSxNQUFNLENBQUN2RSxLQUFmO0FBQ0EsUUFBSXFhLDhCQUE0QixDQUFDcFksUUFBRCxFQUFXNDBDLFFBQVgsRUFBcUI3MkMsS0FBckIsQ0FBaEMsRUFBNkQsT0FBT0EsS0FBUDtBQUM5RDtBQUNGLENBWnNDLENBQXZDO0FBY0E2USxJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxVQUFWO0FBQXNCb0ssRUFBQUEsS0FBSyxFQUFFLElBQTdCO0FBQW1DK3JCLEVBQUFBLElBQUksRUFBRTtBQUF6QyxDQUFELEVBQWtEO0FBQ2pEN3ZCLEVBQUFBLE1BQU0sRUFBRSxTQUFTQSxNQUFULENBQWdCc21DLFFBQWhCLEVBQTBCO0FBQ2hDLFdBQU8sSUFBSXdDLGVBQUosQ0FBa0I7QUFDdkJwM0MsTUFBQUEsUUFBUSxFQUFFcUQsVUFBUSxDQUFDLElBQUQsQ0FESztBQUV2QnV4QyxNQUFBQSxRQUFRLEVBQUV4MEMsV0FBUyxDQUFDdzBDLFFBQUQ7QUFGSSxLQUFsQixDQUFQO0FBSUQ7QUFOZ0QsQ0FBbEQsQ0FBRDs7QUNwQkEsSUFBSWhtQyxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlnWCxTQUFPLEdBQUdoWCxTQUFkOztBQUNBLElBQUlrRCxXQUFTLEdBQUdsRCxXQUFoQjs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFFQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFVBQVY7QUFBc0JvSyxFQUFBQSxLQUFLLEVBQUUsSUFBN0I7QUFBbUMrckIsRUFBQUEsSUFBSSxFQUFFO0FBQXpDLENBQUQsRUFBa0Q7QUFDakQxdkIsRUFBQUEsSUFBSSxFQUFFLFNBQVNBLElBQVQsQ0FBYy9OLEVBQWQsRUFBa0I7QUFDdEIyQyxJQUFBQSxVQUFRLENBQUMsSUFBRCxDQUFSO0FBQ0FqRCxJQUFBQSxXQUFTLENBQUNNLEVBQUQsQ0FBVDtBQUNBLFdBQU93VCxTQUFPLENBQUMsSUFBRCxFQUFPLFVBQVVuVyxLQUFWLEVBQWlCOFYsSUFBakIsRUFBdUI7QUFDMUMsVUFBSW5ULEVBQUUsQ0FBQzNDLEtBQUQsQ0FBTixFQUFlLE9BQU84VixJQUFJLENBQUM5VixLQUFELENBQVg7QUFDaEIsS0FGYSxFQUVYO0FBQUV5VixNQUFBQSxXQUFXLEVBQUUsSUFBZjtBQUFxQkMsTUFBQUEsV0FBVyxFQUFFO0FBQWxDLEtBRlcsQ0FBUCxDQUVzQ25SLE1BRjdDO0FBR0Q7QUFQZ0QsQ0FBbEQsQ0FBRDs7QUNMQSxJQUFJc00sSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJa0QsV0FBUyxHQUFHbEQsV0FBaEI7O0FBQ0EsSUFBSW1HLFVBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSXdWLG1CQUFpQixHQUFHeFYsbUJBQXhCOztBQUNBLElBQUlvNkMscUJBQW1CLEdBQUdwNkMsbUJBQTFCOztBQUNBLElBQUlnVyxlQUFhLEdBQUdoVyxlQUFwQjs7QUFFQSxJQUFJazZDLGVBQWEsR0FBR0UscUJBQW1CLENBQUMsWUFBWTtBQUNsRCxNQUFJdDNDLFFBQVEsR0FBRyxLQUFLQSxRQUFwQjtBQUNBLE1BQUl5WCxNQUFNLEdBQUcsS0FBS0EsTUFBbEI7QUFDQSxNQUFJblYsTUFBSixFQUFZMHlDLE1BQVosRUFBb0JwaUMsY0FBcEIsRUFBb0NraUMsYUFBcEM7O0FBRUEsU0FBTyxJQUFQLEVBQWE7QUFDWCxRQUFJO0FBQ0YsVUFBSUEsYUFBYSxHQUFHLEtBQUtBLGFBQXpCLEVBQXdDO0FBQ3RDeHlDLFFBQUFBLE1BQU0sR0FBR2UsVUFBUSxDQUFDLEtBQUs0eEMsU0FBTCxDQUFldjNDLElBQWYsQ0FBb0JvM0MsYUFBcEIsQ0FBRCxDQUFqQjtBQUNBLFlBQUksQ0FBQ3h5QyxNQUFNLENBQUMwUixJQUFaLEVBQWtCLE9BQU8xUixNQUFNLENBQUN2RSxLQUFkO0FBQ2xCLGFBQUsrMkMsYUFBTCxHQUFxQixLQUFLRyxTQUFMLEdBQWlCLElBQXRDO0FBQ0Q7O0FBRUQzeUMsTUFBQUEsTUFBTSxHQUFHZSxVQUFRLENBQUMsS0FBS3NRLElBQUwsQ0FBVWpXLElBQVYsQ0FBZXNDLFFBQWYsQ0FBRCxDQUFqQjtBQUVBLFVBQUksS0FBS2dVLElBQUwsR0FBWSxDQUFDLENBQUMxUixNQUFNLENBQUMwUixJQUF6QixFQUErQjtBQUUvQmdoQyxNQUFBQSxNQUFNLEdBQUd2OUIsTUFBTSxDQUFDblYsTUFBTSxDQUFDdkUsS0FBUixDQUFmO0FBQ0E2VSxNQUFBQSxjQUFjLEdBQUdGLG1CQUFpQixDQUFDc2lDLE1BQUQsQ0FBbEM7O0FBRUEsVUFBSSxDQUFDcGlDLGNBQUwsRUFBcUI7QUFDbkIsY0FBTXJVLFNBQVMsQ0FBQyxvREFBRCxDQUFmO0FBQ0Q7O0FBRUQsV0FBS3UyQyxhQUFMLEdBQXFCQSxhQUFhLEdBQUd6eEMsVUFBUSxDQUFDdVAsY0FBYyxDQUFDbFYsSUFBZixDQUFvQnMzQyxNQUFwQixDQUFELENBQTdDO0FBQ0EsV0FBS0MsU0FBTCxHQUFpQjcwQyxXQUFTLENBQUMwMEMsYUFBYSxDQUFDbmhDLElBQWYsQ0FBMUI7QUFDRCxLQXBCRCxDQW9CRSxPQUFPM1csS0FBUCxFQUFjO0FBQ2RrVyxNQUFBQSxlQUFhLENBQUNsVCxRQUFELEVBQVcsT0FBWCxFQUFvQmhELEtBQXBCLENBQWI7QUFDRDtBQUNGO0FBQ0YsQ0E5QnNDLENBQXZDO0FBZ0NBNFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsVUFBVjtBQUFzQm9LLEVBQUFBLEtBQUssRUFBRSxJQUE3QjtBQUFtQytyQixFQUFBQSxJQUFJLEVBQUU7QUFBekMsQ0FBRCxFQUFrRDtBQUNqRGptQixFQUFBQSxPQUFPLEVBQUUsU0FBU0EsT0FBVCxDQUFpQlQsTUFBakIsRUFBeUI7QUFDaEMsV0FBTyxJQUFJMi9CLGVBQUosQ0FBa0I7QUFDdkJwM0MsTUFBQUEsUUFBUSxFQUFFcUQsVUFBUSxDQUFDLElBQUQsQ0FESztBQUV2Qm9VLE1BQUFBLE1BQU0sRUFBRXJYLFdBQVMsQ0FBQ3FYLE1BQUQsQ0FGTTtBQUd2QnE5QixNQUFBQSxhQUFhLEVBQUUsSUFIUTtBQUl2QkcsTUFBQUEsU0FBUyxFQUFFO0FBSlksS0FBbEIsQ0FBUDtBQU1EO0FBUmdELENBQWxELENBQUQ7O0FDdkNBLElBQUlybUMsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJZ1gsU0FBTyxHQUFHaFgsU0FBZDs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFFQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFVBQVY7QUFBc0JvSyxFQUFBQSxLQUFLLEVBQUUsSUFBN0I7QUFBbUMrckIsRUFBQUEsSUFBSSxFQUFFO0FBQXpDLENBQUQsRUFBa0Q7QUFDakQvdkIsRUFBQUEsT0FBTyxFQUFFLFNBQVNBLE9BQVQsQ0FBaUIxTixFQUFqQixFQUFxQjtBQUM1QndULElBQUFBLFNBQU8sQ0FBQzdRLFVBQVEsQ0FBQyxJQUFELENBQVQsRUFBaUIzQyxFQUFqQixFQUFxQjtBQUFFOFMsTUFBQUEsV0FBVyxFQUFFO0FBQWYsS0FBckIsQ0FBUDtBQUNEO0FBSGdELENBQWxELENBQUQ7O0FDTkE7QUFDQSxJQUFJNUUsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJa0UsVUFBUSxHQUFHbEUsVUFBZjs7QUFDQSxJQUFJbWMsaUJBQWlCLEdBQUduYyxhQUFBLENBQXVDbWMsaUJBQS9EOztBQUNBLElBQUlpK0IscUJBQW1CLEdBQUdwNkMsbUJBQTFCOztBQUNBLElBQUkrVixhQUFXLEdBQUcvVixhQUFsQjs7QUFDQSxJQUFJd1YsbUJBQWlCLEdBQUd4VixtQkFBeEI7O0FBRUEsSUFBSXFuQixhQUFhLEdBQUcsR0FBR0EsYUFBdkI7QUFFQSxJQUFJNnlCLGVBQWEsR0FBR0UscUJBQW1CLENBQUMsVUFBVWptQyxJQUFWLEVBQWdCO0FBQ3RELE1BQUkvTyxNQUFNLEdBQUdlLFVBQVEsQ0FBQyxLQUFLc1EsSUFBTCxDQUFVakgsS0FBVixDQUFnQixLQUFLMU0sUUFBckIsRUFBK0JxUixJQUEvQixDQUFELENBQXJCO0FBQ0EsTUFBSTJDLElBQUksR0FBRyxLQUFLQSxJQUFMLEdBQVksQ0FBQyxDQUFDMVIsTUFBTSxDQUFDMFIsSUFBaEM7QUFDQSxNQUFJLENBQUNBLElBQUwsRUFBVyxPQUFPMVIsTUFBTSxDQUFDdkUsS0FBZDtBQUNaLENBSnNDLEVBSXBDLElBSm9DLENBQXZDO0FBTUE2USxJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxVQUFWO0FBQXNCZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQTVCLENBQUQsRUFBcUM7QUFDcENvTixFQUFBQSxJQUFJLEVBQUUsU0FBU0EsSUFBVCxDQUFjalQsQ0FBZCxFQUFpQjtBQUNyQixRQUFJTSxNQUFNLEdBQUdyQyxVQUFRLENBQUMrQixDQUFELENBQXJCO0FBQ0EsUUFBSXdQLGFBQWEsR0FBR0QsbUJBQWlCLENBQUNqUCxNQUFELENBQXJDO0FBQ0EsUUFBSXpELFFBQUo7O0FBQ0EsUUFBSTJTLGFBQUosRUFBbUI7QUFDakIzUyxNQUFBQSxRQUFRLEdBQUdpVCxhQUFXLENBQUN4UCxNQUFELEVBQVNrUCxhQUFULENBQXRCO0FBQ0EsVUFBSTRSLGFBQWEsQ0FBQzdtQixJQUFkLENBQW1CMmIsaUJBQW5CLEVBQXNDclosUUFBdEMsQ0FBSixFQUFxRCxPQUFPQSxRQUFQO0FBQ3RELEtBSEQsTUFHTztBQUNMQSxNQUFBQSxRQUFRLEdBQUd5RCxNQUFYO0FBQ0Q7O0FBQUMsV0FBTyxJQUFJMnpDLGVBQUosQ0FBa0I7QUFBRXAzQyxNQUFBQSxRQUFRLEVBQUVBO0FBQVosS0FBbEIsQ0FBUDtBQUNIO0FBWG1DLENBQXJDLENBQUQ7O0FDZkEsSUFBSTRPLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSWtELFdBQVMsR0FBR2xELFdBQWhCOztBQUNBLElBQUltRyxVQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUlvNkMscUJBQW1CLEdBQUdwNkMsbUJBQTFCOztBQUNBLElBQUlrYiw0QkFBNEIsR0FBR2xiLDhCQUFuQzs7QUFFQSxJQUFJazZDLGVBQWEsR0FBR0UscUJBQW1CLENBQUMsVUFBVWptQyxJQUFWLEVBQWdCO0FBQ3RELE1BQUlyUixRQUFRLEdBQUcsS0FBS0EsUUFBcEI7QUFDQSxNQUFJc0MsTUFBTSxHQUFHZSxVQUFRLENBQUMsS0FBS3NRLElBQUwsQ0FBVWpILEtBQVYsQ0FBZ0IxTSxRQUFoQixFQUEwQnFSLElBQTFCLENBQUQsQ0FBckI7QUFDQSxNQUFJMkMsSUFBSSxHQUFHLEtBQUtBLElBQUwsR0FBWSxDQUFDLENBQUMxUixNQUFNLENBQUMwUixJQUFoQztBQUNBLE1BQUksQ0FBQ0EsSUFBTCxFQUFXLE9BQU9vRSw0QkFBNEIsQ0FBQ3BZLFFBQUQsRUFBVyxLQUFLeVgsTUFBaEIsRUFBd0JuVixNQUFNLENBQUN2RSxLQUEvQixDQUFuQztBQUNaLENBTHNDLENBQXZDO0FBT0E2USxJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxVQUFWO0FBQXNCb0ssRUFBQUEsS0FBSyxFQUFFLElBQTdCO0FBQW1DK3JCLEVBQUFBLElBQUksRUFBRTtBQUF6QyxDQUFELEVBQWtEO0FBQ2pEOXZCLEVBQUFBLEdBQUcsRUFBRSxTQUFTQSxHQUFULENBQWFvSixNQUFiLEVBQXFCO0FBQ3hCLFdBQU8sSUFBSTIvQixlQUFKLENBQWtCO0FBQ3ZCcDNDLE1BQUFBLFFBQVEsRUFBRXFELFVBQVEsQ0FBQyxJQUFELENBREs7QUFFdkJvVSxNQUFBQSxNQUFNLEVBQUVyWCxXQUFTLENBQUNxWCxNQUFEO0FBRk0sS0FBbEIsQ0FBUDtBQUlEO0FBTmdELENBQWxELENBQUQ7O0FDYkEsSUFBSTdJLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSWdYLFNBQU8sR0FBR2hYLFNBQWQ7O0FBQ0EsSUFBSWtELFdBQVMsR0FBR2xELFdBQWhCOztBQUNBLElBQUltRyxVQUFRLEdBQUduRyxXQUFmOztBQUVBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsVUFBVjtBQUFzQm9LLEVBQUFBLEtBQUssRUFBRSxJQUE3QjtBQUFtQytyQixFQUFBQSxJQUFJLEVBQUU7QUFBekMsQ0FBRCxFQUFrRDtBQUNqRC9oQixFQUFBQSxNQUFNLEVBQUUsU0FBU0EsTUFBVCxDQUFnQis0QjtBQUFRO0FBQXhCLElBQThDO0FBQ3BEOXhDLElBQUFBLFVBQVEsQ0FBQyxJQUFELENBQVI7QUFDQWpELElBQUFBLFdBQVMsQ0FBQyswQyxPQUFELENBQVQ7QUFDQSxRQUFJQyxTQUFTLEdBQUdyMkMsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5DO0FBQ0EsUUFBSXEyQyxXQUFXLEdBQUdELFNBQVMsR0FBRzkyQyxTQUFILEdBQWVTLFNBQVMsQ0FBQyxDQUFELENBQW5EO0FBQ0FtVixJQUFBQSxTQUFPLENBQUMsSUFBRCxFQUFPLFVBQVVuVyxLQUFWLEVBQWlCO0FBQzdCLFVBQUlxM0MsU0FBSixFQUFlO0FBQ2JBLFFBQUFBLFNBQVMsR0FBRyxLQUFaO0FBQ0FDLFFBQUFBLFdBQVcsR0FBR3QzQyxLQUFkO0FBQ0QsT0FIRCxNQUdPO0FBQ0xzM0MsUUFBQUEsV0FBVyxHQUFHRixPQUFPLENBQUNFLFdBQUQsRUFBY3QzQyxLQUFkLENBQXJCO0FBQ0Q7QUFDRixLQVBNLEVBT0o7QUFBRXlWLE1BQUFBLFdBQVcsRUFBRTtBQUFmLEtBUEksQ0FBUDtBQVFBLFFBQUk0aEMsU0FBSixFQUFlLE1BQU03MkMsU0FBUyxDQUFDLGdEQUFELENBQWY7QUFDZixXQUFPODJDLFdBQVA7QUFDRDtBQWhCZ0QsQ0FBbEQsQ0FBRDs7QUNMQSxJQUFJem1DLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSWdYLFNBQU8sR0FBR2hYLFNBQWQ7O0FBQ0EsSUFBSWtELFdBQVMsR0FBR2xELFdBQWhCOztBQUNBLElBQUltRyxVQUFRLEdBQUduRyxXQUFmOztBQUVBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsVUFBVjtBQUFzQm9LLEVBQUFBLEtBQUssRUFBRSxJQUE3QjtBQUFtQytyQixFQUFBQSxJQUFJLEVBQUU7QUFBekMsQ0FBRCxFQUFrRDtBQUNqRDV2QixFQUFBQSxJQUFJLEVBQUUsU0FBU0EsSUFBVCxDQUFjN04sRUFBZCxFQUFrQjtBQUN0QjJDLElBQUFBLFVBQVEsQ0FBQyxJQUFELENBQVI7QUFDQWpELElBQUFBLFdBQVMsQ0FBQ00sRUFBRCxDQUFUO0FBQ0EsV0FBT3dULFNBQU8sQ0FBQyxJQUFELEVBQU8sVUFBVW5XLEtBQVYsRUFBaUI4VixJQUFqQixFQUF1QjtBQUMxQyxVQUFJblQsRUFBRSxDQUFDM0MsS0FBRCxDQUFOLEVBQWUsT0FBTzhWLElBQUksRUFBWDtBQUNoQixLQUZhLEVBRVg7QUFBRUwsTUFBQUEsV0FBVyxFQUFFLElBQWY7QUFBcUJDLE1BQUFBLFdBQVcsRUFBRTtBQUFsQyxLQUZXLENBQVAsQ0FFc0NMLE9BRjdDO0FBR0Q7QUFQZ0QsQ0FBbEQsQ0FBRDs7QUNMQSxJQUFJeEUsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJOHZDLGlCQUFpQixHQUFHOXZDLG1CQUF4Qjs7QUFDQSxJQUFJbzZDLG1CQUFtQixHQUFHcDZDLG1CQUExQjs7QUFDQSxJQUFJZ1csYUFBYSxHQUFHaFcsZUFBcEI7O0FBRUEsSUFBSWs2QyxhQUFhLEdBQUdFLG1CQUFtQixDQUFDLFVBQVVqbUMsSUFBVixFQUFnQjtBQUN0RCxNQUFJclIsUUFBUSxHQUFHLEtBQUtBLFFBQXBCOztBQUNBLE1BQUksQ0FBQyxLQUFLeTlCLFNBQUwsRUFBTCxFQUF1QjtBQUNyQixTQUFLenBCLElBQUwsR0FBWSxJQUFaO0FBQ0EsV0FBT2QsYUFBYSxDQUFDbFQsUUFBRCxFQUFXLFFBQVgsRUFBcUIxQixTQUFyQixDQUFwQjtBQUNEOztBQUNELE1BQUlnRSxNQUFNLEdBQUdlLFVBQVEsQ0FBQyxLQUFLc1EsSUFBTCxDQUFVakgsS0FBVixDQUFnQjFNLFFBQWhCLEVBQTBCcVIsSUFBMUIsQ0FBRCxDQUFyQjtBQUNBLE1BQUkyQyxJQUFJLEdBQUcsS0FBS0EsSUFBTCxHQUFZLENBQUMsQ0FBQzFSLE1BQU0sQ0FBQzBSLElBQWhDO0FBQ0EsTUFBSSxDQUFDQSxJQUFMLEVBQVcsT0FBTzFSLE1BQU0sQ0FBQ3ZFLEtBQWQ7QUFDWixDQVRzQyxDQUF2QztBQVdBNlEsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsVUFBVjtBQUFzQm9LLEVBQUFBLEtBQUssRUFBRSxJQUE3QjtBQUFtQytyQixFQUFBQSxJQUFJLEVBQUU7QUFBekMsQ0FBRCxFQUFrRDtBQUNqRG1YLEVBQUFBLElBQUksRUFBRSxTQUFTQSxJQUFULENBQWNsTCxLQUFkLEVBQXFCO0FBQ3pCLFdBQU8sSUFBSWdOLGFBQUosQ0FBa0I7QUFDdkJwM0MsTUFBQUEsUUFBUSxFQUFFcUQsVUFBUSxDQUFDLElBQUQsQ0FESztBQUV2Qm82QixNQUFBQSxTQUFTLEVBQUV1UCxpQkFBaUIsQ0FBQzVDLEtBQUQ7QUFGTCxLQUFsQixDQUFQO0FBSUQ7QUFOZ0QsQ0FBbEQsQ0FBRDs7QUNqQkEsSUFBSXg3QixJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlnWCxTQUFPLEdBQUdoWCxTQUFkOztBQUNBLElBQUltRyxVQUFRLEdBQUduRyxXQUFmOztBQUVBLElBQUkrRCxJQUFJLEdBQUcsR0FBR0EsSUFBZDtBQUVBMk4sSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsVUFBVjtBQUFzQm9LLEVBQUFBLEtBQUssRUFBRSxJQUE3QjtBQUFtQytyQixFQUFBQSxJQUFJLEVBQUU7QUFBekMsQ0FBRCxFQUFrRDtBQUNqRG9VLEVBQUFBLE9BQU8sRUFBRSxTQUFTQSxPQUFULEdBQW1CO0FBQzFCLFFBQUlqd0MsTUFBTSxHQUFHLEVBQWI7QUFDQTRSLElBQUFBLFNBQU8sQ0FBQzdRLFVBQVEsQ0FBQyxJQUFELENBQVQsRUFBaUJwQyxJQUFqQixFQUF1QjtBQUFFc0wsTUFBQUEsSUFBSSxFQUFFakssTUFBUjtBQUFnQmtSLE1BQUFBLFdBQVcsRUFBRTtBQUE3QixLQUF2QixDQUFQO0FBQ0EsV0FBT2xSLE1BQVA7QUFDRDtBQUxnRCxDQUFsRCxDQUFEOztBQ1BBLElBQUlsQyxXQUFTLEdBQUdsRCxXQUFoQjs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7O0lBR0FULHFCQUFBLEdBQWlCLFlBQTZCO0FBQzVDLE1BQUl1eEIsVUFBVSxHQUFHM3FCLFVBQVEsQ0FBQyxJQUFELENBQXpCO0FBQ0EsTUFBSWswQyxPQUFPLEdBQUduM0MsV0FBUyxDQUFDNHRCLFVBQVUsQ0FBQyxRQUFELENBQVgsQ0FBdkI7QUFDQSxNQUFJd3BCLFVBQVUsR0FBRyxJQUFqQjtBQUNBLE1BQUlDLFVBQUo7O0FBQ0EsT0FBSyxJQUFJM2lDLENBQUMsR0FBRyxDQUFSLEVBQVdGLEdBQUcsR0FBRzdWLFNBQVMsQ0FBQ0MsTUFBaEMsRUFBd0M4VixDQUFDLEdBQUdGLEdBQTVDLEVBQWlERSxDQUFDLEVBQWxELEVBQXNEO0FBQ3BEMmlDLElBQUFBLFVBQVUsR0FBR0YsT0FBTyxDQUFDNzVDLElBQVIsQ0FBYXN3QixVQUFiLEVBQXlCanZCLFNBQVMsQ0FBQytWLENBQUQsQ0FBbEMsQ0FBYjtBQUNBMGlDLElBQUFBLFVBQVUsR0FBR0EsVUFBVSxJQUFJQyxVQUEzQjtBQUNEOztBQUNELFNBQU8sQ0FBQyxDQUFDRCxVQUFUO0FBQ0QsQ0FWRDs7QUNKQSxJQUFJNW9DLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXFwQyxTQUFPLEdBQUdycEMsTUFBZDs7QUFDQSxJQUFJdzZDLHFCQUFtQixHQUFHeDZDLHFCQUExQjtBQUdBOzs7QUFDQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLEtBQVY7QUFBaUJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBeEI7QUFBOEIrckIsRUFBQUEsSUFBSSxFQUFFLElBQXBDO0FBQTBDLzBCLEVBQUFBLE1BQU0sRUFBRW05QjtBQUFsRCxDQUFELEVBQThEO0FBQzdEb1IsRUFBQUEsU0FBUyxFQUFFLFNBQVNBLFNBQVQsR0FBc0M7QUFDL0MsV0FBT0QscUJBQW1CLENBQUNockMsS0FBcEIsQ0FBMEIsSUFBMUIsRUFBZ0MzTixTQUFoQyxDQUFQO0FBQ0Q7QUFINEQsQ0FBOUQsQ0FBRDs7QUNOQSxJQUFJc0UsVUFBUSxHQUFHbkcsV0FBZjtBQUdBOzs7SUFDQVQsVUFBQSxHQUFpQixTQUFTbTdDLE9BQVQsQ0FBaUIvMkMsR0FBakIsRUFBc0J3N0IsT0FBdEIsRUFBK0I7QUFDOUMsTUFBSWh1QixHQUFHLEdBQUdoTCxVQUFRLENBQUMsSUFBRCxDQUFsQjtBQUNBLE1BQUl0RixLQUFLLEdBQUlzUSxHQUFHLENBQUNoSyxHQUFKLENBQVF4RCxHQUFSLEtBQWdCLFlBQVl3N0IsT0FBN0IsR0FDUkEsT0FBTyxDQUFDd2IsTUFBUixDQUFleHBDLEdBQUcsQ0FBQ2hSLEdBQUosQ0FBUXdELEdBQVIsQ0FBZixFQUE2QkEsR0FBN0IsRUFBa0N3TixHQUFsQyxDQURRLEdBRVJndUIsT0FBTyxDQUFDeWIsTUFBUixDQUFlajNDLEdBQWYsRUFBb0J3TixHQUFwQixDQUZKO0FBR0FBLEVBQUFBLEdBQUcsQ0FBQ2pLLEdBQUosQ0FBUXZELEdBQVIsRUFBYTlDLEtBQWI7QUFDQSxTQUFPQSxLQUFQO0FBQ0QsQ0FQRDs7QUNKQSxJQUFJNlEsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJcXBDLFNBQU8sR0FBR3JwQyxNQUFkOztBQUNBLElBQUk2NkMsVUFBUSxHQUFHNzZDLFVBQWY7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxLQUFWO0FBQWlCb0ssRUFBQUEsS0FBSyxFQUFFLElBQXhCO0FBQThCK3JCLEVBQUFBLElBQUksRUFBRSxJQUFwQztBQUEwQy8wQixFQUFBQSxNQUFNLEVBQUVtOUI7QUFBbEQsQ0FBRCxFQUE4RDtBQUM3RHFSLEVBQUFBLE9BQU8sRUFBRUc7QUFEb0QsQ0FBOUQsQ0FBRDs7SUNQQXQ3QyxnQkFBQSxHQUFpQixVQUFVRixFQUFWLEVBQWM7QUFDN0I7QUFDQSxTQUFPNHhCLEdBQUcsQ0FBQ2pwQixTQUFKLENBQWN1VixPQUFkLENBQXNCL2MsSUFBdEIsQ0FBMkJuQixFQUEzQixDQUFQO0FBQ0QsQ0FIRDs7QUNDQSxJQUFJcVMsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJcXBDLFNBQU8sR0FBR3JwQyxNQUFkOztBQUNBLElBQUltRyxVQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUlzUSxNQUFJLEdBQUd0USxtQkFBWDs7QUFDQSxJQUFJODZDLGdCQUFjLEdBQUc5NkMsZ0JBQXJCOztBQUNBLElBQUlnWCxTQUFPLEdBQUdoWCxTQUFkO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsS0FBVjtBQUFpQm9LLEVBQUFBLEtBQUssRUFBRSxJQUF4QjtBQUE4QityQixFQUFBQSxJQUFJLEVBQUUsSUFBcEM7QUFBMEMvMEIsRUFBQUEsTUFBTSxFQUFFbTlCO0FBQWxELENBQUQsRUFBOEQ7QUFDN0QvM0IsRUFBQUEsS0FBSyxFQUFFLFNBQVNBLEtBQVQsQ0FBZVA7QUFBVztBQUExQixJQUEyQztBQUNoRCxRQUFJSSxHQUFHLEdBQUdoTCxVQUFRLENBQUMsSUFBRCxDQUFsQjtBQUNBLFFBQUlyRCxRQUFRLEdBQUdnNEMsZ0JBQWMsQ0FBQzNwQyxHQUFELENBQTdCO0FBQ0EsUUFBSUYsYUFBYSxHQUFHWCxNQUFJLENBQUNTLFVBQUQsRUFBYWxQLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUF1QkQsU0FBUyxDQUFDLENBQUQsQ0FBaEMsR0FBc0NULFNBQW5ELEVBQThELENBQTlELENBQXhCO0FBQ0EsV0FBTyxDQUFDNFYsU0FBTyxDQUFDbFUsUUFBRCxFQUFXLFVBQVVhLEdBQVYsRUFBZTlDLEtBQWYsRUFBc0I4VixJQUF0QixFQUE0QjtBQUNwRCxVQUFJLENBQUMxRixhQUFhLENBQUNwUSxLQUFELEVBQVE4QyxHQUFSLEVBQWF3TixHQUFiLENBQWxCLEVBQXFDLE9BQU93RixJQUFJLEVBQVg7QUFDdEMsS0FGYyxFQUVaO0FBQUVOLE1BQUFBLFVBQVUsRUFBRSxJQUFkO0FBQW9CQyxNQUFBQSxXQUFXLEVBQUUsSUFBakM7QUFBdUNDLE1BQUFBLFdBQVcsRUFBRTtBQUFwRCxLQUZZLENBQVAsQ0FFdURMLE9BRi9EO0FBR0Q7QUFSNEQsQ0FBOUQsQ0FBRDs7QUNUQSxJQUFJeEUsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJcXBDLFNBQU8sR0FBR3JwQyxNQUFkOztBQUNBLElBQUkrQixZQUFVLEdBQUcvQixZQUFqQjs7QUFDQSxJQUFJa0QsV0FBUyxHQUFHbEQsV0FBaEI7O0FBQ0EsSUFBSW1HLFVBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSXNRLE1BQUksR0FBR3RRLG1CQUFYOztBQUNBLElBQUlzcEIsb0JBQWtCLEdBQUd0cEIsb0JBQXpCOztBQUNBLElBQUk4NkMsZ0JBQWMsR0FBRzk2QyxnQkFBckI7O0FBQ0EsSUFBSWdYLFNBQU8sR0FBR2hYLFNBQWQ7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxLQUFWO0FBQWlCb0ssRUFBQUEsS0FBSyxFQUFFLElBQXhCO0FBQThCK3JCLEVBQUFBLElBQUksRUFBRSxJQUFwQztBQUEwQy8wQixFQUFBQSxNQUFNLEVBQUVtOUI7QUFBbEQsQ0FBRCxFQUE4RDtBQUM3RGo0QixFQUFBQSxNQUFNLEVBQUUsU0FBU0EsTUFBVCxDQUFnQkw7QUFBVztBQUEzQixJQUE0QztBQUNsRCxRQUFJSSxHQUFHLEdBQUdoTCxVQUFRLENBQUMsSUFBRCxDQUFsQjtBQUNBLFFBQUlyRCxRQUFRLEdBQUdnNEMsZ0JBQWMsQ0FBQzNwQyxHQUFELENBQTdCO0FBQ0EsUUFBSUYsYUFBYSxHQUFHWCxNQUFJLENBQUNTLFVBQUQsRUFBYWxQLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUF1QkQsU0FBUyxDQUFDLENBQUQsQ0FBaEMsR0FBc0NULFNBQW5ELEVBQThELENBQTlELENBQXhCO0FBQ0EsUUFBSTI1QyxNQUFNLEdBQUcsS0FBS3p4QixvQkFBa0IsQ0FBQ25ZLEdBQUQsRUFBTXBQLFlBQVUsQ0FBQyxLQUFELENBQWhCLENBQXZCLEdBQWI7QUFDQSxRQUFJMlIsTUFBTSxHQUFHeFEsV0FBUyxDQUFDNjNDLE1BQU0sQ0FBQzd6QyxHQUFSLENBQXRCO0FBQ0E4UCxJQUFBQSxTQUFPLENBQUNsVSxRQUFELEVBQVcsVUFBVWEsR0FBVixFQUFlOUMsS0FBZixFQUFzQjtBQUN0QyxVQUFJb1EsYUFBYSxDQUFDcFEsS0FBRCxFQUFROEMsR0FBUixFQUFhd04sR0FBYixDQUFqQixFQUFvQ3VDLE1BQU0sQ0FBQ2xULElBQVAsQ0FBWXU2QyxNQUFaLEVBQW9CcDNDLEdBQXBCLEVBQXlCOUMsS0FBekI7QUFDckMsS0FGTSxFQUVKO0FBQUV3VixNQUFBQSxVQUFVLEVBQUUsSUFBZDtBQUFvQkMsTUFBQUEsV0FBVyxFQUFFO0FBQWpDLEtBRkksQ0FBUDtBQUdBLFdBQU95a0MsTUFBUDtBQUNEO0FBWDRELENBQTlELENBQUQ7O0FDWkEsSUFBSXJwQyxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlxcEMsU0FBTyxHQUFHcnBDLE1BQWQ7O0FBQ0EsSUFBSW1HLFVBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSXNRLE1BQUksR0FBR3RRLG1CQUFYOztBQUNBLElBQUk4NkMsZ0JBQWMsR0FBRzk2QyxnQkFBckI7O0FBQ0EsSUFBSWdYLFNBQU8sR0FBR2hYLFNBQWQ7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxLQUFWO0FBQWlCb0ssRUFBQUEsS0FBSyxFQUFFLElBQXhCO0FBQThCK3JCLEVBQUFBLElBQUksRUFBRSxJQUFwQztBQUEwQy8wQixFQUFBQSxNQUFNLEVBQUVtOUI7QUFBbEQsQ0FBRCxFQUE4RDtBQUM3RDkzQixFQUFBQSxJQUFJLEVBQUUsU0FBU0EsSUFBVCxDQUFjUjtBQUFXO0FBQXpCLElBQTBDO0FBQzlDLFFBQUlJLEdBQUcsR0FBR2hMLFVBQVEsQ0FBQyxJQUFELENBQWxCO0FBQ0EsUUFBSXJELFFBQVEsR0FBR2c0QyxnQkFBYyxDQUFDM3BDLEdBQUQsQ0FBN0I7QUFDQSxRQUFJRixhQUFhLEdBQUdYLE1BQUksQ0FBQ1MsVUFBRCxFQUFhbFAsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBbkQsRUFBOEQsQ0FBOUQsQ0FBeEI7QUFDQSxXQUFPNFYsU0FBTyxDQUFDbFUsUUFBRCxFQUFXLFVBQVVhLEdBQVYsRUFBZTlDLEtBQWYsRUFBc0I4VixJQUF0QixFQUE0QjtBQUNuRCxVQUFJMUYsYUFBYSxDQUFDcFEsS0FBRCxFQUFROEMsR0FBUixFQUFhd04sR0FBYixDQUFqQixFQUFvQyxPQUFPd0YsSUFBSSxDQUFDOVYsS0FBRCxDQUFYO0FBQ3JDLEtBRmEsRUFFWDtBQUFFd1YsTUFBQUEsVUFBVSxFQUFFLElBQWQ7QUFBb0JDLE1BQUFBLFdBQVcsRUFBRSxJQUFqQztBQUF1Q0MsTUFBQUEsV0FBVyxFQUFFO0FBQXBELEtBRlcsQ0FBUCxDQUV3RG5SLE1BRi9EO0FBR0Q7QUFSNEQsQ0FBOUQsQ0FBRDs7QUNUQSxJQUFJc00sSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJcXBDLFNBQU8sR0FBR3JwQyxNQUFkOztBQUNBLElBQUltRyxVQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUlzUSxNQUFJLEdBQUd0USxtQkFBWDs7QUFDQSxJQUFJODZDLGdCQUFjLEdBQUc5NkMsZ0JBQXJCOztBQUNBLElBQUlnWCxTQUFPLEdBQUdoWCxTQUFkO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsS0FBVjtBQUFpQm9LLEVBQUFBLEtBQUssRUFBRSxJQUF4QjtBQUE4QityQixFQUFBQSxJQUFJLEVBQUUsSUFBcEM7QUFBMEMvMEIsRUFBQUEsTUFBTSxFQUFFbTlCO0FBQWxELENBQUQsRUFBOEQ7QUFDN0QyUixFQUFBQSxPQUFPLEVBQUUsU0FBU0EsT0FBVCxDQUFpQmpxQztBQUFXO0FBQTVCLElBQTZDO0FBQ3BELFFBQUlJLEdBQUcsR0FBR2hMLFVBQVEsQ0FBQyxJQUFELENBQWxCO0FBQ0EsUUFBSXJELFFBQVEsR0FBR2c0QyxnQkFBYyxDQUFDM3BDLEdBQUQsQ0FBN0I7QUFDQSxRQUFJRixhQUFhLEdBQUdYLE1BQUksQ0FBQ1MsVUFBRCxFQUFhbFAsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBbkQsRUFBOEQsQ0FBOUQsQ0FBeEI7QUFDQSxXQUFPNFYsU0FBTyxDQUFDbFUsUUFBRCxFQUFXLFVBQVVhLEdBQVYsRUFBZTlDLEtBQWYsRUFBc0I4VixJQUF0QixFQUE0QjtBQUNuRCxVQUFJMUYsYUFBYSxDQUFDcFEsS0FBRCxFQUFROEMsR0FBUixFQUFhd04sR0FBYixDQUFqQixFQUFvQyxPQUFPd0YsSUFBSSxDQUFDaFQsR0FBRCxDQUFYO0FBQ3JDLEtBRmEsRUFFWDtBQUFFMFMsTUFBQUEsVUFBVSxFQUFFLElBQWQ7QUFBb0JDLE1BQUFBLFdBQVcsRUFBRSxJQUFqQztBQUF1Q0MsTUFBQUEsV0FBVyxFQUFFO0FBQXBELEtBRlcsQ0FBUCxDQUV3RG5SLE1BRi9EO0FBR0Q7QUFSNEQsQ0FBOUQsQ0FBRDs7QUNSQSxJQUFJbEMsV0FBUyxHQUFHbEQsV0FBaEI7O0FBQ0EsSUFBSWtwQixjQUFZLEdBQUdscEIsY0FBbkI7O0FBQ0EsSUFBSXNRLE1BQUksR0FBR3RRLG1CQUFYOztBQUNBLElBQUlnWCxTQUFPLEdBQUdoWCxTQUFkOztJQUVBVCxjQUFBLEdBQWlCLFNBQVMyWixJQUFULENBQWNuUTtBQUFPO0FBQXJCLEVBQTZDO0FBQzVELE1BQUlqSCxNQUFNLEdBQUdELFNBQVMsQ0FBQ0MsTUFBdkI7QUFDQSxNQUFJNlksS0FBSyxHQUFHN1ksTUFBTSxHQUFHLENBQVQsR0FBYUQsU0FBUyxDQUFDLENBQUQsQ0FBdEIsR0FBNEJULFNBQXhDO0FBQ0EsTUFBSWthLE9BQUosRUFBYXZELEtBQWIsRUFBb0JjLENBQXBCLEVBQXVCNUgsYUFBdkI7QUFDQWlZLEVBQUFBLGNBQVksQ0FBQyxJQUFELENBQVo7QUFDQTVOLEVBQUFBLE9BQU8sR0FBR1gsS0FBSyxLQUFLdlosU0FBcEI7QUFDQSxNQUFJa2EsT0FBSixFQUFhcFksV0FBUyxDQUFDeVgsS0FBRCxDQUFUO0FBQ2IsTUFBSTVSLE1BQU0sSUFBSTNILFNBQWQsRUFBeUIsT0FBTyxJQUFJLElBQUosRUFBUDtBQUN6QjJXLEVBQUFBLEtBQUssR0FBRyxFQUFSOztBQUNBLE1BQUl1RCxPQUFKLEVBQWE7QUFDWHpDLElBQUFBLENBQUMsR0FBRyxDQUFKO0FBQ0E1SCxJQUFBQSxhQUFhLEdBQUdYLE1BQUksQ0FBQ3FLLEtBQUQsRUFBUTdZLE1BQU0sR0FBRyxDQUFULEdBQWFELFNBQVMsQ0FBQyxDQUFELENBQXRCLEdBQTRCVCxTQUFwQyxFQUErQyxDQUEvQyxDQUFwQjtBQUNBNFYsSUFBQUEsU0FBTyxDQUFDak8sTUFBRCxFQUFTLFVBQVVreUMsUUFBVixFQUFvQjtBQUNsQ2xqQyxNQUFBQSxLQUFLLENBQUNoVSxJQUFOLENBQVdrTixhQUFhLENBQUNncUMsUUFBRCxFQUFXcGlDLENBQUMsRUFBWixDQUF4QjtBQUNELEtBRk0sQ0FBUDtBQUdELEdBTkQsTUFNTztBQUNMN0IsSUFBQUEsU0FBTyxDQUFDak8sTUFBRCxFQUFTZ1AsS0FBSyxDQUFDaFUsSUFBZixFQUFxQjtBQUFFc0wsTUFBQUEsSUFBSSxFQUFFMEk7QUFBUixLQUFyQixDQUFQO0FBQ0Q7O0FBQ0QsU0FBTyxJQUFJLElBQUosQ0FBU0EsS0FBVCxDQUFQO0FBQ0QsQ0FuQkQ7O0FDUEEsSUFBSXJHLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSWtaLE1BQUksR0FBR2xaLGNBQVg7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxLQUFWO0FBQWlCZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQXZCLENBQUQsRUFBZ0M7QUFDL0JvTixFQUFBQSxJQUFJLEVBQUVBO0FBRHlCLENBQWhDLENBQUQ7O0FDSkEsSUFBSXhILElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSWtELFdBQVMsR0FBR2xELFdBQWhCOztBQUNBLElBQUkrVixhQUFXLEdBQUcvVixhQUFsQjs7QUFDQSxJQUFJZ1gsU0FBTyxHQUFHaFgsU0FBZDtBQUdBOzs7QUFDQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLEtBQVY7QUFBaUJnQixFQUFBQSxJQUFJLEVBQUU7QUFBdkIsQ0FBRCxFQUFnQztBQUMvQndxQyxFQUFBQSxPQUFPLEVBQUUsU0FBU0EsT0FBVCxDQUFpQm5nQyxRQUFqQixFQUEyQitrQyxhQUEzQixFQUEwQztBQUNqRGg0QyxJQUFBQSxXQUFTLENBQUNnNEMsYUFBRCxDQUFUO0FBQ0EsUUFBSXA0QyxRQUFRLEdBQUdpVCxhQUFXLENBQUNJLFFBQUQsQ0FBMUI7QUFDQSxRQUFJNGtDLE1BQU0sR0FBRyxJQUFJLElBQUosRUFBYjtBQUNBLFFBQUk1ekMsR0FBRyxHQUFHakUsV0FBUyxDQUFDNjNDLE1BQU0sQ0FBQzV6QyxHQUFSLENBQW5CO0FBQ0EsUUFBSWhILEdBQUcsR0FBRytDLFdBQVMsQ0FBQzYzQyxNQUFNLENBQUM1NkMsR0FBUixDQUFuQjtBQUNBLFFBQUkrRyxHQUFHLEdBQUdoRSxXQUFTLENBQUM2M0MsTUFBTSxDQUFDN3pDLEdBQVIsQ0FBbkI7QUFDQThQLElBQUFBLFNBQU8sQ0FBQ2xVLFFBQUQsRUFBVyxVQUFVOFgsT0FBVixFQUFtQjtBQUNuQyxVQUFJdWdDLFVBQVUsR0FBR0QsYUFBYSxDQUFDdGdDLE9BQUQsQ0FBOUI7QUFDQSxVQUFJLENBQUN6VCxHQUFHLENBQUMzRyxJQUFKLENBQVN1NkMsTUFBVCxFQUFpQkksVUFBakIsQ0FBTCxFQUFtQ2owQyxHQUFHLENBQUMxRyxJQUFKLENBQVN1NkMsTUFBVCxFQUFpQkksVUFBakIsRUFBNkIsQ0FBQ3ZnQyxPQUFELENBQTdCLEVBQW5DLEtBQ0t6YSxHQUFHLENBQUNLLElBQUosQ0FBU3U2QyxNQUFULEVBQWlCSSxVQUFqQixFQUE2QnAzQyxJQUE3QixDQUFrQzZXLE9BQWxDO0FBQ04sS0FKTSxFQUlKO0FBQUV0RSxNQUFBQSxXQUFXLEVBQUU7QUFBZixLQUpJLENBQVA7QUFLQSxXQUFPeWtDLE1BQVA7QUFDRDtBQWQ4QixDQUFoQyxDQUFEOztBQ1JBO0FBQ0E7SUFDQXg3QyxlQUFBLEdBQWlCLFVBQVVpaUIsQ0FBVixFQUFhQyxDQUFiLEVBQWdCO0FBQy9CO0FBQ0EsU0FBT0QsQ0FBQyxLQUFLQyxDQUFOLElBQVdELENBQUMsSUFBSUEsQ0FBTCxJQUFVQyxDQUFDLElBQUlBLENBQWpDO0FBQ0QsQ0FIRDs7QUNEQSxJQUFJL1AsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJcXBDLFNBQU8sR0FBR3JwQyxNQUFkOztBQUNBLElBQUltRyxVQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUk4NkMsZ0JBQWMsR0FBRzk2QyxnQkFBckI7O0FBQ0EsSUFBSW83QyxhQUFhLEdBQUdwN0MsZUFBcEI7O0FBQ0EsSUFBSWdYLFNBQU8sR0FBR2hYLFNBQWQ7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxLQUFWO0FBQWlCb0ssRUFBQUEsS0FBSyxFQUFFLElBQXhCO0FBQThCK3JCLEVBQUFBLElBQUksRUFBRSxJQUFwQztBQUEwQy8wQixFQUFBQSxNQUFNLEVBQUVtOUI7QUFBbEQsQ0FBRCxFQUE4RDtBQUM3RG4vQixFQUFBQSxRQUFRLEVBQUUsU0FBU0EsUUFBVCxDQUFrQitSLGFBQWxCLEVBQWlDO0FBQ3pDLFdBQU9qRixTQUFPLENBQUM4akMsZ0JBQWMsQ0FBQzMwQyxVQUFRLENBQUMsSUFBRCxDQUFULENBQWYsRUFBaUMsVUFBVXhDLEdBQVYsRUFBZTlDLEtBQWYsRUFBc0I4VixJQUF0QixFQUE0QjtBQUN6RSxVQUFJeWtDLGFBQWEsQ0FBQ3Y2QyxLQUFELEVBQVFvYixhQUFSLENBQWpCLEVBQXlDLE9BQU90RixJQUFJLEVBQVg7QUFDMUMsS0FGYSxFQUVYO0FBQUVOLE1BQUFBLFVBQVUsRUFBRSxJQUFkO0FBQW9CQyxNQUFBQSxXQUFXLEVBQUUsSUFBakM7QUFBdUNDLE1BQUFBLFdBQVcsRUFBRTtBQUFwRCxLQUZXLENBQVAsQ0FFd0RMLE9BRi9EO0FBR0Q7QUFMNEQsQ0FBOUQsQ0FBRDs7QUNUQSxJQUFJeEUsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJZ1gsU0FBTyxHQUFHaFgsU0FBZDs7QUFDQSxJQUFJa0QsV0FBUyxHQUFHbEQsV0FBaEI7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxLQUFWO0FBQWlCZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQXZCLENBQUQsRUFBZ0M7QUFDL0J1dkMsRUFBQUEsS0FBSyxFQUFFLFNBQVNBLEtBQVQsQ0FBZWxsQyxRQUFmLEVBQXlCK2tDLGFBQXpCLEVBQXdDO0FBQzdDLFFBQUlILE1BQU0sR0FBRyxJQUFJLElBQUosRUFBYjtBQUNBNzNDLElBQUFBLFdBQVMsQ0FBQ2c0QyxhQUFELENBQVQ7QUFDQSxRQUFJeG5DLE1BQU0sR0FBR3hRLFdBQVMsQ0FBQzYzQyxNQUFNLENBQUM3ekMsR0FBUixDQUF0QjtBQUNBOFAsSUFBQUEsU0FBTyxDQUFDYixRQUFELEVBQVcsVUFBVXlFLE9BQVYsRUFBbUI7QUFDbkNsSCxNQUFBQSxNQUFNLENBQUNsVCxJQUFQLENBQVl1NkMsTUFBWixFQUFvQkcsYUFBYSxDQUFDdGdDLE9BQUQsQ0FBakMsRUFBNENBLE9BQTVDO0FBQ0QsS0FGTSxDQUFQO0FBR0EsV0FBT21nQyxNQUFQO0FBQ0Q7QUFUOEIsQ0FBaEMsQ0FBRDs7QUNOQSxJQUFJcnBDLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXFwQyxTQUFPLEdBQUdycEMsTUFBZDs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJODZDLGdCQUFjLEdBQUc5NkMsZ0JBQXJCOztBQUNBLElBQUlnWCxTQUFPLEdBQUdoWCxTQUFkO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsS0FBVjtBQUFpQm9LLEVBQUFBLEtBQUssRUFBRSxJQUF4QjtBQUE4QityQixFQUFBQSxJQUFJLEVBQUUsSUFBcEM7QUFBMEMvMEIsRUFBQUEsTUFBTSxFQUFFbTlCO0FBQWxELENBQUQsRUFBOEQ7QUFDN0RpUyxFQUFBQSxLQUFLLEVBQUUsU0FBU0EsS0FBVCxDQUFlci9CLGFBQWYsRUFBOEI7QUFDbkMsV0FBT2pGLFNBQU8sQ0FBQzhqQyxnQkFBYyxDQUFDMzBDLFVBQVEsQ0FBQyxJQUFELENBQVQsQ0FBZixFQUFpQyxVQUFVeEMsR0FBVixFQUFlOUMsS0FBZixFQUFzQjhWLElBQXRCLEVBQTRCO0FBQ3pFLFVBQUk5VixLQUFLLEtBQUtvYixhQUFkLEVBQTZCLE9BQU90RixJQUFJLENBQUNoVCxHQUFELENBQVg7QUFDOUIsS0FGYSxFQUVYO0FBQUUwUyxNQUFBQSxVQUFVLEVBQUUsSUFBZDtBQUFvQkMsTUFBQUEsV0FBVyxFQUFFLElBQWpDO0FBQXVDQyxNQUFBQSxXQUFXLEVBQUU7QUFBcEQsS0FGVyxDQUFQLENBRXdEblIsTUFGL0Q7QUFHRDtBQUw0RCxDQUE5RCxDQUFEOztBQ1JBLElBQUlzTSxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlxcEMsU0FBTyxHQUFHcnBDLE1BQWQ7O0FBQ0EsSUFBSStCLFlBQVUsR0FBRy9CLFlBQWpCOztBQUNBLElBQUlrRCxXQUFTLEdBQUdsRCxXQUFoQjs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJc1EsTUFBSSxHQUFHdFEsbUJBQVg7O0FBQ0EsSUFBSXNwQixvQkFBa0IsR0FBR3RwQixvQkFBekI7O0FBQ0EsSUFBSTg2QyxnQkFBYyxHQUFHOTZDLGdCQUFyQjs7QUFDQSxJQUFJZ1gsU0FBTyxHQUFHaFgsU0FBZDtBQUdBOzs7QUFDQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLEtBQVY7QUFBaUJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBeEI7QUFBOEIrckIsRUFBQUEsSUFBSSxFQUFFLElBQXBDO0FBQTBDLzBCLEVBQUFBLE1BQU0sRUFBRW05QjtBQUFsRCxDQUFELEVBQThEO0FBQzdEa1MsRUFBQUEsT0FBTyxFQUFFLFNBQVNBLE9BQVQsQ0FBaUJ4cUM7QUFBVztBQUE1QixJQUE2QztBQUNwRCxRQUFJSSxHQUFHLEdBQUdoTCxVQUFRLENBQUMsSUFBRCxDQUFsQjtBQUNBLFFBQUlyRCxRQUFRLEdBQUdnNEMsZ0JBQWMsQ0FBQzNwQyxHQUFELENBQTdCO0FBQ0EsUUFBSUYsYUFBYSxHQUFHWCxNQUFJLENBQUNTLFVBQUQsRUFBYWxQLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUF1QkQsU0FBUyxDQUFDLENBQUQsQ0FBaEMsR0FBc0NULFNBQW5ELEVBQThELENBQTlELENBQXhCO0FBQ0EsUUFBSTI1QyxNQUFNLEdBQUcsS0FBS3p4QixvQkFBa0IsQ0FBQ25ZLEdBQUQsRUFBTXBQLFlBQVUsQ0FBQyxLQUFELENBQWhCLENBQXZCLEdBQWI7QUFDQSxRQUFJMlIsTUFBTSxHQUFHeFEsV0FBUyxDQUFDNjNDLE1BQU0sQ0FBQzd6QyxHQUFSLENBQXRCO0FBQ0E4UCxJQUFBQSxTQUFPLENBQUNsVSxRQUFELEVBQVcsVUFBVWEsR0FBVixFQUFlOUMsS0FBZixFQUFzQjtBQUN0QzZTLE1BQUFBLE1BQU0sQ0FBQ2xULElBQVAsQ0FBWXU2QyxNQUFaLEVBQW9COXBDLGFBQWEsQ0FBQ3BRLEtBQUQsRUFBUThDLEdBQVIsRUFBYXdOLEdBQWIsQ0FBakMsRUFBb0R0USxLQUFwRDtBQUNELEtBRk0sRUFFSjtBQUFFd1YsTUFBQUEsVUFBVSxFQUFFLElBQWQ7QUFBb0JDLE1BQUFBLFdBQVcsRUFBRTtBQUFqQyxLQUZJLENBQVA7QUFHQSxXQUFPeWtDLE1BQVA7QUFDRDtBQVg0RCxDQUE5RCxDQUFEOztBQ1pBLElBQUlycEMsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJcXBDLFNBQU8sR0FBR3JwQyxNQUFkOztBQUNBLElBQUkrQixZQUFVLEdBQUcvQixZQUFqQjs7QUFDQSxJQUFJa0QsV0FBUyxHQUFHbEQsV0FBaEI7O0FBQ0EsSUFBSW1HLFVBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSXNRLE1BQUksR0FBR3RRLG1CQUFYOztBQUNBLElBQUlzcEIsb0JBQWtCLEdBQUd0cEIsb0JBQXpCOztBQUNBLElBQUk4NkMsZ0JBQWMsR0FBRzk2QyxnQkFBckI7O0FBQ0EsSUFBSWdYLFNBQU8sR0FBR2hYLFNBQWQ7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxLQUFWO0FBQWlCb0ssRUFBQUEsS0FBSyxFQUFFLElBQXhCO0FBQThCK3JCLEVBQUFBLElBQUksRUFBRSxJQUFwQztBQUEwQy8wQixFQUFBQSxNQUFNLEVBQUVtOUI7QUFBbEQsQ0FBRCxFQUE4RDtBQUM3RG1TLEVBQUFBLFNBQVMsRUFBRSxTQUFTQSxTQUFULENBQW1CenFDO0FBQVc7QUFBOUIsSUFBK0M7QUFDeEQsUUFBSUksR0FBRyxHQUFHaEwsVUFBUSxDQUFDLElBQUQsQ0FBbEI7QUFDQSxRQUFJckQsUUFBUSxHQUFHZzRDLGdCQUFjLENBQUMzcEMsR0FBRCxDQUE3QjtBQUNBLFFBQUlGLGFBQWEsR0FBR1gsTUFBSSxDQUFDUyxVQUFELEVBQWFsUCxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJELFNBQVMsQ0FBQyxDQUFELENBQWhDLEdBQXNDVCxTQUFuRCxFQUE4RCxDQUE5RCxDQUF4QjtBQUNBLFFBQUkyNUMsTUFBTSxHQUFHLEtBQUt6eEIsb0JBQWtCLENBQUNuWSxHQUFELEVBQU1wUCxZQUFVLENBQUMsS0FBRCxDQUFoQixDQUF2QixHQUFiO0FBQ0EsUUFBSTJSLE1BQU0sR0FBR3hRLFdBQVMsQ0FBQzYzQyxNQUFNLENBQUM3ekMsR0FBUixDQUF0QjtBQUNBOFAsSUFBQUEsU0FBTyxDQUFDbFUsUUFBRCxFQUFXLFVBQVVhLEdBQVYsRUFBZTlDLEtBQWYsRUFBc0I7QUFDdEM2UyxNQUFBQSxNQUFNLENBQUNsVCxJQUFQLENBQVl1NkMsTUFBWixFQUFvQnAzQyxHQUFwQixFQUF5QnNOLGFBQWEsQ0FBQ3BRLEtBQUQsRUFBUThDLEdBQVIsRUFBYXdOLEdBQWIsQ0FBdEM7QUFDRCxLQUZNLEVBRUo7QUFBRWtGLE1BQUFBLFVBQVUsRUFBRSxJQUFkO0FBQW9CQyxNQUFBQSxXQUFXLEVBQUU7QUFBakMsS0FGSSxDQUFQO0FBR0EsV0FBT3lrQyxNQUFQO0FBQ0Q7QUFYNEQsQ0FBOUQsQ0FBRDs7QUNaQSxJQUFJcnBDLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXFwQyxTQUFPLEdBQUdycEMsTUFBZDs7QUFDQSxJQUFJa0QsV0FBUyxHQUFHbEQsV0FBaEI7O0FBQ0EsSUFBSW1HLFVBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSWdYLFNBQU8sR0FBR2hYLFNBQWQ7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxLQUFWO0FBQWlCb0ssRUFBQUEsS0FBSyxFQUFFLElBQXhCO0FBQThCK3JCLEVBQUFBLElBQUksRUFBRSxJQUFwQztBQUEwQy8wQixFQUFBQSxNQUFNLEVBQUVtOUI7QUFBbEQsQ0FBRCxFQUE4RDtBQUM3RDtBQUNBdHBCLEVBQUFBLEtBQUssRUFBRSxTQUFTQSxLQUFULENBQWU1SjtBQUFTO0FBQXhCLElBQTJDO0FBQ2hELFFBQUloRixHQUFHLEdBQUdoTCxVQUFRLENBQUMsSUFBRCxDQUFsQjtBQUNBLFFBQUl1TixNQUFNLEdBQUd4USxXQUFTLENBQUNpTyxHQUFHLENBQUNqSyxHQUFMLENBQXRCO0FBQ0EsUUFBSXdTLGVBQWUsR0FBRzdYLFNBQVMsQ0FBQ0MsTUFBaEM7QUFDQSxRQUFJdUksQ0FBQyxHQUFHLENBQVI7O0FBQ0EsV0FBT0EsQ0FBQyxHQUFHcVAsZUFBWCxFQUE0QjtBQUMxQjFDLE1BQUFBLFNBQU8sQ0FBQ25WLFNBQVMsQ0FBQ3dJLENBQUMsRUFBRixDQUFWLEVBQWlCcUosTUFBakIsRUFBeUI7QUFBRXJFLFFBQUFBLElBQUksRUFBRThCLEdBQVI7QUFBYWtGLFFBQUFBLFVBQVUsRUFBRTtBQUF6QixPQUF6QixDQUFQO0FBQ0Q7O0FBQ0QsV0FBT2xGLEdBQVA7QUFDRDtBQVg0RCxDQUE5RCxDQUFEOztJQ1BBNVIsWUFBQSxHQUFpQixTQUFTa2YsRUFBVCxHQUFjO0FBQzdCLE1BQUkzYyxNQUFNLEdBQUdELFNBQVMsQ0FBQ0MsTUFBdkI7QUFDQSxNQUFJOFcsQ0FBQyxHQUFHLElBQUl6TSxLQUFKLENBQVVySyxNQUFWLENBQVI7O0FBQ0EsU0FBT0EsTUFBTSxFQUFiLEVBQWlCOFcsQ0FBQyxDQUFDOVcsTUFBRCxDQUFELEdBQVlELFNBQVMsQ0FBQ0MsTUFBRCxDQUFyQjs7QUFDakIsU0FBTyxJQUFJLElBQUosQ0FBUzhXLENBQVQsQ0FBUDtBQUNELENBTEQ7O0FDRkEsSUFBSWxILElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXllLElBQUUsR0FBR3plLFlBQVQ7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxLQUFWO0FBQWlCZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQXZCLENBQUQsRUFBZ0M7QUFDL0IyUyxFQUFBQSxFQUFFLEVBQUVBO0FBRDJCLENBQWhDLENBQUQ7O0FDSkEsSUFBSS9NLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXFwQyxTQUFPLEdBQUdycEMsTUFBZDs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJa0QsV0FBUyxHQUFHbEQsV0FBaEI7O0FBQ0EsSUFBSTg2QyxnQkFBYyxHQUFHOTZDLGdCQUFyQjs7QUFDQSxJQUFJZ1gsU0FBTyxHQUFHaFgsU0FBZDtBQUdBOzs7QUFDQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLEtBQVY7QUFBaUJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBeEI7QUFBOEIrckIsRUFBQUEsSUFBSSxFQUFFLElBQXBDO0FBQTBDLzBCLEVBQUFBLE1BQU0sRUFBRW05QjtBQUFsRCxDQUFELEVBQThEO0FBQzdEbnFCLEVBQUFBLE1BQU0sRUFBRSxTQUFTQSxNQUFULENBQWdCbk87QUFBVztBQUEzQixJQUFpRDtBQUN2RCxRQUFJSSxHQUFHLEdBQUdoTCxVQUFRLENBQUMsSUFBRCxDQUFsQjtBQUNBLFFBQUlyRCxRQUFRLEdBQUdnNEMsZ0JBQWMsQ0FBQzNwQyxHQUFELENBQTdCO0FBQ0EsUUFBSSttQyxTQUFTLEdBQUdyMkMsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5DO0FBQ0EsUUFBSXEyQyxXQUFXLEdBQUdELFNBQVMsR0FBRzkyQyxTQUFILEdBQWVTLFNBQVMsQ0FBQyxDQUFELENBQW5EO0FBQ0FxQixJQUFBQSxXQUFTLENBQUM2TixVQUFELENBQVQ7QUFDQWlHLElBQUFBLFNBQU8sQ0FBQ2xVLFFBQUQsRUFBVyxVQUFVYSxHQUFWLEVBQWU5QyxLQUFmLEVBQXNCO0FBQ3RDLFVBQUlxM0MsU0FBSixFQUFlO0FBQ2JBLFFBQUFBLFNBQVMsR0FBRyxLQUFaO0FBQ0FDLFFBQUFBLFdBQVcsR0FBR3QzQyxLQUFkO0FBQ0QsT0FIRCxNQUdPO0FBQ0xzM0MsUUFBQUEsV0FBVyxHQUFHcG5DLFVBQVUsQ0FBQ29uQyxXQUFELEVBQWN0M0MsS0FBZCxFQUFxQjhDLEdBQXJCLEVBQTBCd04sR0FBMUIsQ0FBeEI7QUFDRDtBQUNGLEtBUE0sRUFPSjtBQUFFa0YsTUFBQUEsVUFBVSxFQUFFLElBQWQ7QUFBb0JDLE1BQUFBLFdBQVcsRUFBRTtBQUFqQyxLQVBJLENBQVA7QUFRQSxRQUFJNGhDLFNBQUosRUFBZSxNQUFNNzJDLFNBQVMsQ0FBQywyQ0FBRCxDQUFmO0FBQ2YsV0FBTzgyQyxXQUFQO0FBQ0Q7QUFqQjRELENBQTlELENBQUQ7O0FDVEEsSUFBSXptQyxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlxcEMsU0FBTyxHQUFHcnBDLE1BQWQ7O0FBQ0EsSUFBSW1HLFVBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSXNRLE1BQUksR0FBR3RRLG1CQUFYOztBQUNBLElBQUk4NkMsY0FBYyxHQUFHOTZDLGdCQUFyQjs7QUFDQSxJQUFJZ1gsU0FBTyxHQUFHaFgsU0FBZDtBQUdBOzs7QUFDQTBSLElBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLEtBQVY7QUFBaUJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBeEI7QUFBOEIrckIsRUFBQUEsSUFBSSxFQUFFLElBQXBDO0FBQTBDLzBCLEVBQUFBLE1BQU0sRUFBRW05QjtBQUFsRCxDQUFELEVBQThEO0FBQzdEaDRCLEVBQUFBLElBQUksRUFBRSxTQUFTQSxJQUFULENBQWNOO0FBQVc7QUFBekIsSUFBMEM7QUFDOUMsUUFBSUksR0FBRyxHQUFHaEwsVUFBUSxDQUFDLElBQUQsQ0FBbEI7QUFDQSxRQUFJckQsUUFBUSxHQUFHZzRDLGNBQWMsQ0FBQzNwQyxHQUFELENBQTdCO0FBQ0EsUUFBSUYsYUFBYSxHQUFHWCxNQUFJLENBQUNTLFVBQUQsRUFBYWxQLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUF1QkQsU0FBUyxDQUFDLENBQUQsQ0FBaEMsR0FBc0NULFNBQW5ELEVBQThELENBQTlELENBQXhCO0FBQ0EsV0FBTzRWLFNBQU8sQ0FBQ2xVLFFBQUQsRUFBVyxVQUFVYSxHQUFWLEVBQWU5QyxLQUFmLEVBQXNCOFYsSUFBdEIsRUFBNEI7QUFDbkQsVUFBSTFGLGFBQWEsQ0FBQ3BRLEtBQUQsRUFBUThDLEdBQVIsRUFBYXdOLEdBQWIsQ0FBakIsRUFBb0MsT0FBT3dGLElBQUksRUFBWDtBQUNyQyxLQUZhLEVBRVg7QUFBRU4sTUFBQUEsVUFBVSxFQUFFLElBQWQ7QUFBb0JDLE1BQUFBLFdBQVcsRUFBRSxJQUFqQztBQUF1Q0MsTUFBQUEsV0FBVyxFQUFFO0FBQXBELEtBRlcsQ0FBUCxDQUV3REwsT0FGL0Q7QUFHRDtBQVI0RCxDQUE5RCxDQUFEOztBQ1RBLElBQUl4RSxJQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlxcEMsU0FBTyxHQUFHcnBDLE1BQWQ7O0FBQ0EsSUFBSW1HLFVBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSWtELFdBQVMsR0FBR2xELFdBQWhCO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsS0FBVjtBQUFpQm9LLEVBQUFBLEtBQUssRUFBRSxJQUF4QjtBQUE4QityQixFQUFBQSxJQUFJLEVBQUUsSUFBcEM7QUFBMEMvMEIsRUFBQUEsTUFBTSxFQUFFbTlCO0FBQWxELENBQUQsRUFBOEQ7QUFDN0RzUixFQUFBQSxNQUFNLEVBQUUsU0FBU0EsTUFBVCxDQUFnQmgzQyxHQUFoQixFQUFxQjgzQztBQUFTO0FBQTlCLElBQTZDO0FBQ25ELFFBQUl0cUMsR0FBRyxHQUFHaEwsVUFBUSxDQUFDLElBQUQsQ0FBbEI7QUFDQSxRQUFJckUsTUFBTSxHQUFHRCxTQUFTLENBQUNDLE1BQXZCO0FBQ0FvQixJQUFBQSxXQUFTLENBQUN1NEMsUUFBRCxDQUFUO0FBQ0EsUUFBSUMsY0FBYyxHQUFHdnFDLEdBQUcsQ0FBQ2hLLEdBQUosQ0FBUXhELEdBQVIsQ0FBckI7O0FBQ0EsUUFBSSxDQUFDKzNDLGNBQUQsSUFBbUI1NUMsTUFBTSxHQUFHLENBQWhDLEVBQW1DO0FBQ2pDLFlBQU1ULFNBQVMsQ0FBQyx1QkFBRCxDQUFmO0FBQ0Q7O0FBQ0QsUUFBSVIsS0FBSyxHQUFHNjZDLGNBQWMsR0FBR3ZxQyxHQUFHLENBQUNoUixHQUFKLENBQVF3RCxHQUFSLENBQUgsR0FBa0JULFdBQVMsQ0FBQ3BCLE1BQU0sR0FBRyxDQUFULEdBQWFELFNBQVMsQ0FBQyxDQUFELENBQXRCLEdBQTRCVCxTQUE3QixDQUFULENBQWlEdUMsR0FBakQsRUFBc0R3TixHQUF0RCxDQUE1QztBQUNBQSxJQUFBQSxHQUFHLENBQUNqSyxHQUFKLENBQVF2RCxHQUFSLEVBQWE4M0MsUUFBUSxDQUFDNTZDLEtBQUQsRUFBUThDLEdBQVIsRUFBYXdOLEdBQWIsQ0FBckI7QUFDQSxXQUFPQSxHQUFQO0FBQ0Q7QUFaNEQsQ0FBOUQsQ0FBRDs7QUNQQSxJQUFJMVAsWUFBVSxHQUFHekIsWUFBakI7O0FBQ0EsSUFBSW1HLFVBQVEsR0FBR25HLFdBQWY7QUFHQTs7O0lBQ0FULFNBQUEsR0FBaUIsU0FBU284QyxNQUFULENBQWdCaDRDLEdBQWhCLEVBQXFCaTRDO0FBQVM7QUFBOUIsRUFBZ0Q7QUFDL0QsTUFBSXpxQyxHQUFHLEdBQUdoTCxVQUFRLENBQUMsSUFBRCxDQUFsQjtBQUNBLE1BQUkwMUMsUUFBUSxHQUFHaDZDLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUF1QkQsU0FBUyxDQUFDLENBQUQsQ0FBaEMsR0FBc0NULFNBQXJEO0FBQ0EsTUFBSVAsS0FBSjs7QUFDQSxNQUFJLENBQUNZLFlBQVUsQ0FBQ202QyxRQUFELENBQVgsSUFBeUIsQ0FBQ242QyxZQUFVLENBQUNvNkMsUUFBRCxDQUF4QyxFQUFvRDtBQUNsRCxVQUFNeDZDLFNBQVMsQ0FBQyxnQ0FBRCxDQUFmO0FBQ0Q7O0FBQ0QsTUFBSThQLEdBQUcsQ0FBQ2hLLEdBQUosQ0FBUXhELEdBQVIsQ0FBSixFQUFrQjtBQUNoQjlDLElBQUFBLEtBQUssR0FBR3NRLEdBQUcsQ0FBQ2hSLEdBQUosQ0FBUXdELEdBQVIsQ0FBUjs7QUFDQSxRQUFJbEMsWUFBVSxDQUFDbTZDLFFBQUQsQ0FBZCxFQUEwQjtBQUN4Qi82QyxNQUFBQSxLQUFLLEdBQUcrNkMsUUFBUSxDQUFDLzZDLEtBQUQsQ0FBaEI7QUFDQXNRLE1BQUFBLEdBQUcsQ0FBQ2pLLEdBQUosQ0FBUXZELEdBQVIsRUFBYTlDLEtBQWI7QUFDRDtBQUNGLEdBTkQsTUFNTyxJQUFJWSxZQUFVLENBQUNvNkMsUUFBRCxDQUFkLEVBQTBCO0FBQy9CaDdDLElBQUFBLEtBQUssR0FBR2c3QyxRQUFRLEVBQWhCO0FBQ0ExcUMsSUFBQUEsR0FBRyxDQUFDakssR0FBSixDQUFRdkQsR0FBUixFQUFhOUMsS0FBYjtBQUNEOztBQUFDLFNBQU9BLEtBQVA7QUFDSCxDQWpCRDs7QUNKQSxJQUFJNlEsSUFBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJcXBDLFNBQU8sR0FBR3JwQyxNQUFkOztBQUNBLElBQUk4N0MsU0FBTyxHQUFHOTdDLFNBQWQ7QUFHQTs7O0FBQ0EwUixJQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxLQUFWO0FBQWlCb0ssRUFBQUEsS0FBSyxFQUFFLElBQXhCO0FBQThCK3JCLEVBQUFBLElBQUksRUFBRSxJQUFwQztBQUEwQ3A4QixFQUFBQSxJQUFJLEVBQUUsUUFBaEQ7QUFBMERxSCxFQUFBQSxNQUFNLEVBQUVtOUI7QUFBbEUsQ0FBRCxFQUE4RTtBQUM3RTBTLEVBQUFBLGNBQWMsRUFBRUQ7QUFENkQsQ0FBOUUsQ0FBRDs7QUNOQSxJQUFJcHFDLElBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXFwQyxTQUFPLEdBQUdycEMsTUFBZDs7QUFDQSxJQUFJODdDLFNBQU8sR0FBRzk3QyxTQUFkO0FBR0E7OztBQUNBMFIsSUFBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsS0FBVjtBQUFpQm9LLEVBQUFBLEtBQUssRUFBRSxJQUF4QjtBQUE4QityQixFQUFBQSxJQUFJLEVBQUUsSUFBcEM7QUFBMEMvMEIsRUFBQUEsTUFBTSxFQUFFbTlCO0FBQWxELENBQUQsRUFBOEQ7QUFDN0RzUyxFQUFBQSxNQUFNLEVBQUVHO0FBRHFELENBQTlELENBQUQ7O0FDUkEsSUFBSXBxQyxHQUFDLEdBQUcxUixPQUFSOztBQUVBLElBQUlzSixHQUFHLEdBQUdoSyxJQUFJLENBQUNnSyxHQUFmO0FBQ0EsSUFBSUQsR0FBRyxHQUFHL0osSUFBSSxDQUFDK0osR0FBZjtBQUdBOztBQUNBcUksR0FBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsTUFBVjtBQUFrQmdCLEVBQUFBLElBQUksRUFBRTtBQUF4QixDQUFELEVBQWlDO0FBQ2hDa3dDLEVBQUFBLEtBQUssRUFBRSxTQUFTQSxLQUFULENBQWV4NkIsQ0FBZixFQUFrQnk2QixLQUFsQixFQUF5QkMsS0FBekIsRUFBZ0M7QUFDckMsV0FBTzV5QyxHQUFHLENBQUM0eUMsS0FBRCxFQUFRN3lDLEdBQUcsQ0FBQzR5QyxLQUFELEVBQVF6NkIsQ0FBUixDQUFYLENBQVY7QUFDRDtBQUgrQixDQUFqQyxDQUFEOztBQ1BBLElBQUk5UCxHQUFDLEdBQUcxUixPQUFSO0FBR0E7OztBQUNBMFIsR0FBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsTUFBVjtBQUFrQmdCLEVBQUFBLElBQUksRUFBRTtBQUF4QixDQUFELEVBQWlDO0FBQ2hDcXdDLEVBQUFBLFdBQVcsRUFBRTc4QyxJQUFJLENBQUM4OEMsRUFBTCxHQUFVO0FBRFMsQ0FBakMsQ0FBRDs7QUNKQSxJQUFJMXFDLEdBQUMsR0FBRzFSLE9BQVI7O0FBRUEsSUFBSXE4QyxXQUFXLEdBQUcsTUFBTS84QyxJQUFJLENBQUM4OEMsRUFBN0I7QUFHQTs7QUFDQTFxQyxHQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxNQUFWO0FBQWtCZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQXhCLENBQUQsRUFBaUM7QUFDaEN3d0MsRUFBQUEsT0FBTyxFQUFFLFNBQVNBLE9BQVQsQ0FBaUJDLE9BQWpCLEVBQTBCO0FBQ2pDLFdBQU9BLE9BQU8sR0FBR0YsV0FBakI7QUFDRDtBQUgrQixDQUFqQyxDQUFEOztBQ05BO0FBQ0E7SUFDQTk4QyxTQUFBLEdBQWlCRCxJQUFJLENBQUNrOUMsS0FBTCxJQUFjLFNBQVNBLEtBQVQsQ0FBZWg3QixDQUFmLEVBQWtCaTdCLEtBQWxCLEVBQXlCQyxNQUF6QixFQUFpQ0MsTUFBakMsRUFBeUNDLE9BQXpDLEVBQWtEO0FBQy9FLE1BQ0UvNkMsU0FBUyxDQUFDQyxNQUFWLEtBQXFCO0FBQ25CO0FBREYsS0FFSzBmLENBQUMsSUFBSUEsQ0FGVixJQUdLaTdCLEtBQUssSUFBSUEsS0FIZCxJQUlLQyxNQUFNLElBQUlBLE1BSmYsSUFLS0MsTUFBTSxJQUFJQSxNQUxmLElBTUtDLE9BQU8sSUFBSUE7QUFDZDtBQVJKLElBU0UsT0FBT2w1QixHQUFQO0FBQ0YsTUFBSWxDLENBQUMsS0FBSytCLFFBQU4sSUFBa0IvQixDQUFDLEtBQUssQ0FBQytCLFFBQTdCLEVBQXVDLE9BQU8vQixDQUFQO0FBQ3ZDLFNBQU8sQ0FBQ0EsQ0FBQyxHQUFHaTdCLEtBQUwsS0FBZUcsT0FBTyxHQUFHRCxNQUF6QixLQUFvQ0QsTUFBTSxHQUFHRCxLQUE3QyxJQUFzREUsTUFBN0Q7QUFDRCxDQWJEOztBQ0ZBLElBQUlqckMsR0FBQyxHQUFHMVIsT0FBUjs7QUFFQSxJQUFJdzhDLE9BQUssR0FBR3g4QyxTQUFaOztBQUNBLElBQUkweUIsTUFBTSxHQUFHMXlCLFVBQWI7QUFHQTs7O0FBQ0EwUixHQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxNQUFWO0FBQWtCZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQXhCLENBQUQsRUFBaUM7QUFDaEMrd0MsRUFBQUEsTUFBTSxFQUFFLFNBQVNBLE1BQVQsQ0FBZ0JyN0IsQ0FBaEIsRUFBbUJpN0IsS0FBbkIsRUFBMEJDLE1BQTFCLEVBQWtDQyxNQUFsQyxFQUEwQ0MsT0FBMUMsRUFBbUQ7QUFDekQsV0FBT2xxQixNQUFNLENBQUM4cEIsT0FBSyxDQUFDaDdCLENBQUQsRUFBSWk3QixLQUFKLEVBQVdDLE1BQVgsRUFBbUJDLE1BQW5CLEVBQTJCQyxPQUEzQixDQUFOLENBQWI7QUFDRDtBQUgrQixDQUFqQyxDQUFEOztBQ1BBLElBQUlsckMsR0FBQyxHQUFHMVIsT0FBUjtBQUdBO0FBQ0E7OztBQUNBMFIsR0FBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsTUFBVjtBQUFrQmdCLEVBQUFBLElBQUksRUFBRTtBQUF4QixDQUFELEVBQWlDO0FBQ2hDZ3hDLEVBQUFBLEtBQUssRUFBRSxTQUFTQSxLQUFULENBQWVDLEVBQWYsRUFBbUJDLEVBQW5CLEVBQXVCQyxFQUF2QixFQUEyQkMsRUFBM0IsRUFBK0I7QUFDcEMsUUFBSUMsR0FBRyxHQUFHSixFQUFFLEtBQUssQ0FBakI7QUFDQSxRQUFJSyxHQUFHLEdBQUdKLEVBQUUsS0FBSyxDQUFqQjtBQUNBLFFBQUlLLEdBQUcsR0FBR0osRUFBRSxLQUFLLENBQWpCO0FBQ0EsV0FBT0csR0FBRyxJQUFJRixFQUFFLEtBQUssQ0FBWCxDQUFILElBQW9CLENBQUNDLEdBQUcsR0FBR0UsR0FBTixHQUFZLENBQUNGLEdBQUcsR0FBR0UsR0FBUCxJQUFjLEVBQUVGLEdBQUcsR0FBR0UsR0FBTixLQUFjLENBQWhCLENBQTNCLE1BQW1ELEVBQXZFLElBQTZFLENBQXBGO0FBQ0Q7QUFOK0IsQ0FBakMsQ0FBRDs7QUNMQSxJQUFJM3JDLEdBQUMsR0FBRzFSLE9BQVI7QUFHQTtBQUNBOzs7QUFDQTBSLEdBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLE1BQVY7QUFBa0JnQixFQUFBQSxJQUFJLEVBQUU7QUFBeEIsQ0FBRCxFQUFpQztBQUNoQ3d4QyxFQUFBQSxLQUFLLEVBQUUsU0FBU0EsS0FBVCxDQUFlQyxDQUFmLEVBQWtCbDhCLENBQWxCLEVBQXFCO0FBQzFCLFFBQUltUyxNQUFNLEdBQUcsTUFBYjtBQUNBLFFBQUlncUIsRUFBRSxHQUFHLENBQUNELENBQVY7QUFDQSxRQUFJRSxFQUFFLEdBQUcsQ0FBQ3A4QixDQUFWO0FBQ0EsUUFBSXE4QixFQUFFLEdBQUdGLEVBQUUsR0FBR2hxQixNQUFkO0FBQ0EsUUFBSW1xQixFQUFFLEdBQUdGLEVBQUUsR0FBR2pxQixNQUFkO0FBQ0EsUUFBSW9xQixFQUFFLEdBQUdKLEVBQUUsSUFBSSxFQUFmO0FBQ0EsUUFBSUssRUFBRSxHQUFHSixFQUFFLElBQUksRUFBZjtBQUNBLFFBQUlyckIsQ0FBQyxHQUFHLENBQUN3ckIsRUFBRSxHQUFHRCxFQUFMLEtBQVksQ0FBYixLQUFtQkQsRUFBRSxHQUFHQyxFQUFMLEtBQVksRUFBL0IsQ0FBUjtBQUNBLFdBQU9DLEVBQUUsR0FBR0MsRUFBTCxJQUFXenJCLENBQUMsSUFBSSxFQUFoQixLQUF1QixDQUFDc3JCLEVBQUUsR0FBR0csRUFBTCxLQUFZLENBQWIsS0FBbUJ6ckIsQ0FBQyxHQUFHb0IsTUFBdkIsS0FBa0MsRUFBekQsQ0FBUDtBQUNEO0FBWCtCLENBQWpDLENBQUQ7O0FDTEEsSUFBSTloQixHQUFDLEdBQUcxUixPQUFSO0FBR0E7QUFDQTs7O0FBQ0EwUixHQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxNQUFWO0FBQWtCZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQXhCLENBQUQsRUFBaUM7QUFDaENneUMsRUFBQUEsS0FBSyxFQUFFLFNBQVNBLEtBQVQsQ0FBZWYsRUFBZixFQUFtQkMsRUFBbkIsRUFBdUJDLEVBQXZCLEVBQTJCQyxFQUEzQixFQUErQjtBQUNwQyxRQUFJQyxHQUFHLEdBQUdKLEVBQUUsS0FBSyxDQUFqQjtBQUNBLFFBQUlLLEdBQUcsR0FBR0osRUFBRSxLQUFLLENBQWpCO0FBQ0EsUUFBSUssR0FBRyxHQUFHSixFQUFFLEtBQUssQ0FBakI7QUFDQSxXQUFPRyxHQUFHLElBQUlGLEVBQUUsS0FBSyxDQUFYLENBQUgsSUFBb0IsQ0FBQyxDQUFDQyxHQUFELEdBQU9FLEdBQVAsR0FBYSxFQUFFRixHQUFHLEdBQUdFLEdBQVIsSUFBZUYsR0FBRyxHQUFHRSxHQUFOLEtBQWMsQ0FBM0MsTUFBa0QsRUFBdEUsSUFBNEUsQ0FBbkY7QUFDRDtBQU4rQixDQUFqQyxDQUFEOztBQ0xBLElBQUkzckMsR0FBQyxHQUFHMVIsT0FBUjtBQUdBOzs7QUFDQTBSLEdBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLE1BQVY7QUFBa0JnQixFQUFBQSxJQUFJLEVBQUU7QUFBeEIsQ0FBRCxFQUFpQztBQUNoQ3V3QyxFQUFBQSxXQUFXLEVBQUUsTUFBTS84QyxJQUFJLENBQUM4OEM7QUFEUSxDQUFqQyxDQUFEOztBQ0pBLElBQUkxcUMsR0FBQyxHQUFHMVIsT0FBUjs7QUFFQSxJQUFJbThDLFdBQVcsR0FBRzc4QyxJQUFJLENBQUM4OEMsRUFBTCxHQUFVLEdBQTVCO0FBR0E7O0FBQ0ExcUMsR0FBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsTUFBVjtBQUFrQmdCLEVBQUFBLElBQUksRUFBRTtBQUF4QixDQUFELEVBQWlDO0FBQ2hDeXdDLEVBQUFBLE9BQU8sRUFBRSxTQUFTQSxPQUFULENBQWlCRCxPQUFqQixFQUEwQjtBQUNqQyxXQUFPQSxPQUFPLEdBQUdILFdBQWpCO0FBQ0Q7QUFIK0IsQ0FBakMsQ0FBRDs7QUNOQSxJQUFJenFDLEdBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXc4QyxLQUFLLEdBQUd4OEMsU0FBWjtBQUdBOzs7QUFDQTBSLEdBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLE1BQVY7QUFBa0JnQixFQUFBQSxJQUFJLEVBQUU7QUFBeEIsQ0FBRCxFQUFpQztBQUNoQzB3QyxFQUFBQSxLQUFLLEVBQUVBO0FBRHlCLENBQWpDLENBQUQ7O0FDTEEsSUFBSTlxQyxHQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUltRyxVQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUl1MUIsY0FBYyxHQUFHdjFCLGdCQUFyQjs7QUFDQSxJQUFJMGMsMkJBQXlCLEdBQUcxYywyQkFBaEM7O0FBQ0EsSUFBSXFJLHFCQUFtQixHQUFHckksYUFBMUI7O0FBRUEsSUFBSSs5QyxhQUFhLEdBQUcsZUFBcEI7QUFDQSxJQUFJQyx1QkFBdUIsR0FBR0QsYUFBYSxHQUFHLFlBQTlDO0FBQ0EsSUFBSTVyQyxrQkFBZ0IsR0FBRzlKLHFCQUFtQixDQUFDbkIsR0FBM0M7QUFDQSxJQUFJcUIsa0JBQWdCLEdBQUdGLHFCQUFtQixDQUFDaEIsU0FBcEIsQ0FBOEIyMkMsdUJBQTlCLENBQXZCO0FBQ0EsSUFBSUMsZUFBZSxHQUFHLDRFQUF0QjtBQUVBLElBQUlDLHNCQUFzQixHQUFHeGhDLDJCQUF5QixDQUFDLFNBQVN5aEMscUJBQVQsQ0FBK0JDLElBQS9CLEVBQXFDO0FBQzFGanNDLEVBQUFBLGtCQUFnQixDQUFDLElBQUQsRUFBTztBQUNyQjNLLElBQUFBLElBQUksRUFBRXcyQyx1QkFEZTtBQUVyQkksSUFBQUEsSUFBSSxFQUFFQSxJQUFJLEdBQUc7QUFGUSxHQUFQLENBQWhCO0FBSUQsQ0FMcUQsRUFLbkRMLGFBTG1ELEVBS3BDLFNBQVN0bkMsSUFBVCxHQUFnQjtBQUNoQyxNQUFJbFAsS0FBSyxHQUFHZ0Isa0JBQWdCLENBQUMsSUFBRCxDQUE1QjtBQUNBLE1BQUk2MUMsSUFBSSxHQUFHNzJDLEtBQUssQ0FBQzYyQyxJQUFOLEdBQWEsQ0FBQzcyQyxLQUFLLENBQUM2MkMsSUFBTixHQUFhLFVBQWIsR0FBMEIsS0FBM0IsSUFBb0MsVUFBNUQ7QUFDQSxTQUFPO0FBQUV2OUMsSUFBQUEsS0FBSyxFQUFFLENBQUN1OUMsSUFBSSxHQUFHLFVBQVIsSUFBc0IsVUFBL0I7QUFBMkN0bkMsSUFBQUEsSUFBSSxFQUFFO0FBQWpELEdBQVA7QUFDRCxDQVRxRCxDQUF0RDtBQVlBO0FBQ0E7O0FBQ0FwRixHQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxNQUFWO0FBQWtCZ0IsRUFBQUEsSUFBSSxFQUFFLElBQXhCO0FBQThCSSxFQUFBQSxNQUFNLEVBQUU7QUFBdEMsQ0FBRCxFQUErQztBQUM5Q215QyxFQUFBQSxVQUFVLEVBQUUsU0FBU0EsVUFBVCxDQUFvQmgvQyxFQUFwQixFQUF3QjtBQUNsQyxRQUFJKytDLElBQUksR0FBR2o0QyxVQUFRLENBQUM5RyxFQUFELENBQVIsQ0FBYSsrQyxJQUF4QjtBQUNBLFFBQUksQ0FBQzdvQixjQUFjLENBQUM2b0IsSUFBRCxDQUFuQixFQUEyQixNQUFNLzhDLFNBQVMsQ0FBQzQ4QyxlQUFELENBQWY7QUFDM0IsV0FBTyxJQUFJQyxzQkFBSixDQUEyQkUsSUFBM0IsQ0FBUDtBQUNEO0FBTDZDLENBQS9DLENBQUQ7O0FDMUJBLElBQUkxc0MsR0FBQyxHQUFHMVIsT0FBUjtBQUdBOzs7QUFDQTBSLEdBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLE1BQVY7QUFBa0JnQixFQUFBQSxJQUFJLEVBQUU7QUFBeEIsQ0FBRCxFQUFpQztBQUNoQ3d5QyxFQUFBQSxPQUFPLEVBQUUsU0FBU0EsT0FBVCxDQUFpQjk4QixDQUFqQixFQUFvQjtBQUMzQixXQUFPLENBQUNBLENBQUMsR0FBRyxDQUFDQSxDQUFOLEtBQVlBLENBQVosSUFBaUJBLENBQUMsSUFBSSxDQUF0QixHQUEwQixJQUFJQSxDQUFKLElBQVMsQ0FBQytCLFFBQXBDLEdBQStDL0IsQ0FBQyxHQUFHLENBQTFEO0FBQ0Q7QUFIK0IsQ0FBakMsQ0FBRDs7QUNKQSxJQUFJOVAsR0FBQyxHQUFHMVIsT0FBUjtBQUdBO0FBQ0E7OztBQUNBMFIsR0FBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsTUFBVjtBQUFrQmdCLEVBQUFBLElBQUksRUFBRTtBQUF4QixDQUFELEVBQWlDO0FBQ2hDeXlDLEVBQUFBLEtBQUssRUFBRSxTQUFTQSxLQUFULENBQWVoQixDQUFmLEVBQWtCbDhCLENBQWxCLEVBQXFCO0FBQzFCLFFBQUltUyxNQUFNLEdBQUcsTUFBYjtBQUNBLFFBQUlncUIsRUFBRSxHQUFHLENBQUNELENBQVY7QUFDQSxRQUFJRSxFQUFFLEdBQUcsQ0FBQ3A4QixDQUFWO0FBQ0EsUUFBSXE4QixFQUFFLEdBQUdGLEVBQUUsR0FBR2hxQixNQUFkO0FBQ0EsUUFBSW1xQixFQUFFLEdBQUdGLEVBQUUsR0FBR2pxQixNQUFkO0FBQ0EsUUFBSW9xQixFQUFFLEdBQUdKLEVBQUUsS0FBSyxFQUFoQjtBQUNBLFFBQUlLLEVBQUUsR0FBR0osRUFBRSxLQUFLLEVBQWhCO0FBQ0EsUUFBSXJyQixDQUFDLEdBQUcsQ0FBQ3dyQixFQUFFLEdBQUdELEVBQUwsS0FBWSxDQUFiLEtBQW1CRCxFQUFFLEdBQUdDLEVBQUwsS0FBWSxFQUEvQixDQUFSO0FBQ0EsV0FBT0MsRUFBRSxHQUFHQyxFQUFMLElBQVd6ckIsQ0FBQyxLQUFLLEVBQWpCLEtBQXdCLENBQUNzckIsRUFBRSxHQUFHRyxFQUFMLEtBQVksQ0FBYixLQUFtQnpyQixDQUFDLEdBQUdvQixNQUF2QixNQUFtQyxFQUEzRCxDQUFQO0FBQ0Q7QUFYK0IsQ0FBakMsQ0FBRDs7QUNKQSxJQUFJOWhCLEdBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSW9KLG1CQUFtQixHQUFHcEoscUJBQTFCOztBQUNBLElBQUlvMUIsVUFBUSxHQUFHcDFCLGNBQWY7O0FBRUEsSUFBSXcrQyw2QkFBNkIsR0FBRywrQkFBcEM7QUFDQSxJQUFJQyxhQUFhLEdBQUcsZUFBcEI7QUFDQSxJQUFJQyxLQUFLLEdBQUcsWUFBWjtBQUdBOztBQUNBaHRDLEdBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JnQixFQUFBQSxJQUFJLEVBQUU7QUFBMUIsQ0FBRCxFQUFtQztBQUNsQzZ5QyxFQUFBQSxVQUFVLEVBQUUsU0FBU0EsVUFBVCxDQUFvQnB6QyxNQUFwQixFQUE0QjBwQixLQUE1QixFQUFtQztBQUM3QyxRQUFJN1IsSUFBSSxHQUFHLENBQVg7QUFDQSxRQUFJb2pCLENBQUosRUFBT29ZLE9BQVA7QUFDQSxRQUFJLE9BQU9yekMsTUFBUCxJQUFpQixRQUFyQixFQUErQixNQUFNbEssU0FBUyxDQUFDbTlDLDZCQUFELENBQWY7QUFDL0IsUUFBSSxDQUFDanpDLE1BQU0sQ0FBQ3pKLE1BQVosRUFBb0IsTUFBTTRpQyxXQUFXLENBQUM4Wiw2QkFBRCxDQUFqQjs7QUFDcEIsUUFBSWp6QyxNQUFNLENBQUMrVixNQUFQLENBQWMsQ0FBZCxLQUFvQixHQUF4QixFQUE2QjtBQUMzQjhCLE1BQUFBLElBQUksR0FBRyxDQUFDLENBQVI7QUFDQTdYLE1BQUFBLE1BQU0sR0FBR0EsTUFBTSxDQUFDdEssS0FBUCxDQUFhLENBQWIsQ0FBVDtBQUNBLFVBQUksQ0FBQ3NLLE1BQU0sQ0FBQ3pKLE1BQVosRUFBb0IsTUFBTTRpQyxXQUFXLENBQUM4Wiw2QkFBRCxDQUFqQjtBQUNyQjs7QUFDRGhZLElBQUFBLENBQUMsR0FBR3ZSLEtBQUssS0FBSzd6QixTQUFWLEdBQXNCLEVBQXRCLEdBQTJCZ0ksbUJBQW1CLENBQUM2ckIsS0FBRCxDQUFsRDtBQUNBLFFBQUl1UixDQUFDLEdBQUcsQ0FBSixJQUFTQSxDQUFDLEdBQUcsRUFBakIsRUFBcUIsTUFBTWprQixVQUFVLENBQUNrOEIsYUFBRCxDQUFoQjs7QUFDckIsUUFBSSxDQUFDQyxLQUFLLENBQUMvM0MsSUFBTixDQUFXNEUsTUFBWCxDQUFELElBQXVCLENBQUNxekMsT0FBTyxHQUFHeHBCLFVBQVEsQ0FBQzdwQixNQUFELEVBQVNpN0IsQ0FBVCxDQUFuQixFQUFnQ3hsQyxRQUFoQyxDQUF5Q3dsQyxDQUF6QyxNQUFnRGo3QixNQUEzRSxFQUFtRjtBQUNqRixZQUFNbTVCLFdBQVcsQ0FBQzhaLDZCQUFELENBQWpCO0FBQ0Q7O0FBQ0QsV0FBT3A3QixJQUFJLEdBQUd3N0IsT0FBZDtBQUNEO0FBakJpQyxDQUFuQyxDQUFEOztBQ1ZBLElBQUlsdEMsR0FBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJeTRDLG9CQUFvQixHQUFHejRDLG9CQUEzQjtBQUdBOzs7QUFDQTBSLEdBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JnQixFQUFBQSxJQUFJLEVBQUU7QUFBMUIsQ0FBRCxFQUFtQztBQUNsQ3V0QyxFQUFBQSxLQUFLLEVBQUUsU0FBU0EsS0FBVCxDQUFlcmdDLEtBQWYsRUFBc0JHLEdBQXRCLEVBQTJCdS9CLE1BQTNCLEVBQW1DO0FBQ3hDLFdBQU8sSUFBSUQsb0JBQUosQ0FBeUJ6L0IsS0FBekIsRUFBZ0NHLEdBQWhDLEVBQXFDdS9CLE1BQXJDLEVBQTZDLFFBQTdDLEVBQXVELENBQXZELEVBQTBELENBQTFELENBQVA7QUFDRDtBQUhpQyxDQUFuQyxDQUFEOztBQ0xBLElBQUlyd0MscUJBQW1CLEdBQUdySSxhQUExQjs7QUFDQSxJQUFJMGMsMkJBQXlCLEdBQUcxYywyQkFBaEM7O0FBQ0EsSUFBSW9FLFFBQU0sR0FBR3BFLGdCQUFiOztBQUNBLElBQUk0TSxVQUFVLEdBQUc1TSxZQUFqQjs7QUFDQSxJQUFJa0UsVUFBUSxHQUFHbEUsVUFBZjs7QUFFQSxJQUFJNitDLGVBQWUsR0FBRyxpQkFBdEI7QUFDQSxJQUFJMXNDLGtCQUFnQixHQUFHOUoscUJBQW1CLENBQUNuQixHQUEzQztBQUNBLElBQUlxQixrQkFBZ0IsR0FBR0YscUJBQW1CLENBQUNoQixTQUFwQixDQUE4QnczQyxlQUE5QixDQUF2QjtJQUVBdC9DLGNBQUEsR0FBaUJtZCwyQkFBeUIsQ0FBQyxTQUFTb2lDLGNBQVQsQ0FBd0IvMUMsTUFBeEIsRUFBZ0MvRSxJQUFoQyxFQUFzQztBQUMvRSxNQUFJdUMsTUFBTSxHQUFHckMsVUFBUSxDQUFDNkUsTUFBRCxDQUFyQjtBQUNBb0osRUFBQUEsa0JBQWdCLENBQUMsSUFBRCxFQUFPO0FBQ3JCM0ssSUFBQUEsSUFBSSxFQUFFcTNDLGVBRGU7QUFFckI3NkMsSUFBQUEsSUFBSSxFQUFFQSxJQUZlO0FBR3JCdUMsSUFBQUEsTUFBTSxFQUFFQSxNQUhhO0FBSXJCSyxJQUFBQSxJQUFJLEVBQUVnRyxVQUFVLENBQUNyRyxNQUFELENBSks7QUFLckJnRCxJQUFBQSxLQUFLLEVBQUU7QUFMYyxHQUFQLENBQWhCO0FBT0QsQ0FUeUMsRUFTdkMsUUFUdUMsRUFTN0IsU0FBU2tOLElBQVQsR0FBZ0I7QUFDM0IsTUFBSWxQLEtBQUssR0FBR2dCLGtCQUFnQixDQUFDLElBQUQsQ0FBNUI7QUFDQSxNQUFJM0IsSUFBSSxHQUFHVyxLQUFLLENBQUNYLElBQWpCOztBQUNBLFNBQU8sSUFBUCxFQUFhO0FBQ1gsUUFBSUEsSUFBSSxLQUFLLElBQVQsSUFBaUJXLEtBQUssQ0FBQ2dDLEtBQU4sSUFBZTNDLElBQUksQ0FBQzlFLE1BQXpDLEVBQWlEO0FBQy9DeUYsTUFBQUEsS0FBSyxDQUFDaEIsTUFBTixHQUFlZ0IsS0FBSyxDQUFDWCxJQUFOLEdBQWEsSUFBNUI7QUFDQSxhQUFPO0FBQUUvRixRQUFBQSxLQUFLLEVBQUVPLFNBQVQ7QUFBb0IwVixRQUFBQSxJQUFJLEVBQUU7QUFBMUIsT0FBUDtBQUNEOztBQUNELFFBQUluVCxHQUFHLEdBQUdpRCxJQUFJLENBQUNXLEtBQUssQ0FBQ2dDLEtBQU4sRUFBRCxDQUFkO0FBQ0EsUUFBSWhELE1BQU0sR0FBR2dCLEtBQUssQ0FBQ2hCLE1BQW5CO0FBQ0EsUUFBSSxDQUFDbkMsUUFBTSxDQUFDbUMsTUFBRCxFQUFTNUMsR0FBVCxDQUFYLEVBQTBCOztBQUMxQixZQUFRNEQsS0FBSyxDQUFDdkQsSUFBZDtBQUNFLFdBQUssTUFBTDtBQUFhLGVBQU87QUFBRW5ELFVBQUFBLEtBQUssRUFBRThDLEdBQVQ7QUFBY21ULFVBQUFBLElBQUksRUFBRTtBQUFwQixTQUFQOztBQUNiLFdBQUssUUFBTDtBQUFlLGVBQU87QUFBRWpXLFVBQUFBLEtBQUssRUFBRTBGLE1BQU0sQ0FBQzVDLEdBQUQsQ0FBZjtBQUFzQm1ULFVBQUFBLElBQUksRUFBRTtBQUE1QixTQUFQO0FBRmpCO0FBR0U7OztBQUFjLFdBQU87QUFBRWpXLE1BQUFBLEtBQUssRUFBRSxDQUFDOEMsR0FBRCxFQUFNNEMsTUFBTSxDQUFDNUMsR0FBRCxDQUFaLENBQVQ7QUFBNkJtVCxNQUFBQSxJQUFJLEVBQUU7QUFBbkMsS0FBUDtBQUNqQjtBQUNGLENBekJ5QyxDQUExQzs7QUNWQSxJQUFJcEYsR0FBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJOCtDLGdCQUFjLEdBQUc5K0MsY0FBckI7QUFHQTs7O0FBQ0EwUixHQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9CZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQTFCLENBQUQsRUFBbUM7QUFDbENpekMsRUFBQUEsY0FBYyxFQUFFLFNBQVNBLGNBQVQsQ0FBd0J4NEMsTUFBeEIsRUFBZ0M7QUFDOUMsV0FBTyxJQUFJdTRDLGdCQUFKLENBQW1CdjRDLE1BQW5CLEVBQTJCLFNBQTNCLENBQVA7QUFDRDtBQUhpQyxDQUFuQyxDQUFEOztBQ0xBLElBQUltTCxHQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUk4K0MsZ0JBQWMsR0FBRzkrQyxjQUFyQjtBQUdBOzs7QUFDQTBSLEdBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JnQixFQUFBQSxJQUFJLEVBQUU7QUFBMUIsQ0FBRCxFQUFtQztBQUNsQ2t6QyxFQUFBQSxXQUFXLEVBQUUsU0FBU0EsV0FBVCxDQUFxQno0QyxNQUFyQixFQUE2QjtBQUN4QyxXQUFPLElBQUl1NEMsZ0JBQUosQ0FBbUJ2NEMsTUFBbkIsRUFBMkIsTUFBM0IsQ0FBUDtBQUNEO0FBSGlDLENBQW5DLENBQUQ7O0FDTEEsSUFBSW1MLEdBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSTgrQyxjQUFjLEdBQUc5K0MsY0FBckI7QUFHQTs7O0FBQ0EwUixHQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9CZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQTFCLENBQUQsRUFBbUM7QUFDbENtekMsRUFBQUEsYUFBYSxFQUFFLFNBQVNBLGFBQVQsQ0FBdUIxNEMsTUFBdkIsRUFBK0I7QUFDNUMsV0FBTyxJQUFJdTRDLGNBQUosQ0FBbUJ2NEMsTUFBbkIsRUFBMkIsUUFBM0IsQ0FBUDtBQUNEO0FBSGlDLENBQW5DLENBQUQ7O0FDSkEsSUFBSW1MLEdBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXlGLGFBQVcsR0FBR3pGLFdBQWxCOztBQUNBLElBQUk4aEIsVUFBVSxHQUFHOWhCLFlBQWpCOztBQUNBLElBQUlrRCxXQUFTLEdBQUdsRCxXQUFoQjs7QUFDQSxJQUFJeUIsWUFBVSxHQUFHekIsWUFBakI7O0FBQ0EsSUFBSWdRLGFBQWEsR0FBR2hRLGVBQXBCOztBQUNBLElBQUltRyxVQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUlxRCxVQUFRLEdBQUdyRCxVQUFmOztBQUNBLElBQUk2akIsWUFBVSxHQUFHN2pCLFlBQWpCOztBQUNBLElBQUlFLGdCQUFjLEdBQUdGLG9CQUFBLENBQStDa0csQ0FBcEU7O0FBQ0EsSUFBSXVGLFVBQVEsR0FBR3pMLGtCQUFmOztBQUNBLElBQUk0akIsYUFBVyxHQUFHNWpCLGFBQWxCOztBQUNBLElBQUkrVixhQUFXLEdBQUcvVixhQUFsQjs7QUFDQSxJQUFJK0UsU0FBUyxHQUFHL0UsV0FBaEI7O0FBQ0EsSUFBSWdYLFNBQU8sR0FBR2hYLFNBQWQ7O0FBQ0EsSUFBSTY4QixnQkFBZ0IsR0FBRzc4QixrQkFBdkI7O0FBQ0EsSUFBSWlGLGlCQUFlLEdBQUdqRixpQkFBdEI7O0FBQ0EsSUFBSXFJLHFCQUFtQixHQUFHckksYUFBMUI7O0FBRUEsSUFBSWsvQyxVQUFVLEdBQUdqNkMsaUJBQWUsQ0FBQyxZQUFELENBQWhDO0FBQ0EsSUFBSXNELGtCQUFnQixHQUFHRixxQkFBbUIsQ0FBQ2xJLEdBQTNDO0FBQ0EsSUFBSWdTLGtCQUFnQixHQUFHOUoscUJBQW1CLENBQUNuQixHQUEzQzs7QUFFQSxJQUFJaTRDLG1CQUFtQixHQUFHLFVBQVVDLGlCQUFWLEVBQTZCO0FBQ3JELE1BQUlDLE9BQU8sR0FBR0QsaUJBQWlCLENBQUNDLE9BQWhDOztBQUNBLE1BQUlBLE9BQUosRUFBYTtBQUNYRCxJQUFBQSxpQkFBaUIsQ0FBQ0MsT0FBbEIsR0FBNEJqK0MsU0FBNUI7O0FBQ0EsUUFBSTtBQUNGaStDLE1BQUFBLE9BQU87QUFDUixLQUZELENBRUUsT0FBT3YvQyxLQUFQLEVBQWM7QUFDZCs4QixNQUFBQSxnQkFBZ0IsQ0FBQy84QixLQUFELENBQWhCO0FBQ0Q7QUFDRjtBQUNGLENBVkQ7O0FBWUEsSUFBSXcvQyxrQkFBa0IsR0FBRyxVQUFVRixpQkFBVixFQUE2QjtBQUNwRCxTQUFPQSxpQkFBaUIsQ0FBQ0csUUFBbEIsS0FBK0JuK0MsU0FBdEM7QUFDRCxDQUZEOztBQUlBLElBQUl3TSxLQUFLLEdBQUcsVUFBVXd4QyxpQkFBVixFQUE2QjtBQUN2QyxNQUFJSSxZQUFZLEdBQUdKLGlCQUFpQixDQUFDdjNDLE1BQXJDOztBQUNBLE1BQUksQ0FBQ3BDLGFBQUwsRUFBa0I7QUFDaEIrNUMsSUFBQUEsWUFBWSxDQUFDQyxNQUFiLEdBQXNCLElBQXRCO0FBQ0EsUUFBSUMsb0JBQW9CLEdBQUdOLGlCQUFpQixDQUFDTSxvQkFBN0M7QUFDQSxRQUFJQSxvQkFBSixFQUEwQkEsb0JBQW9CLENBQUNELE1BQXJCLEdBQThCLElBQTlCO0FBQzNCOztBQUFDTCxFQUFBQSxpQkFBaUIsQ0FBQ0csUUFBbEIsR0FBNkJuK0MsU0FBN0I7QUFDSCxDQVBEOztBQVNBLElBQUl1K0MsWUFBWSxHQUFHLFVBQVVKLFFBQVYsRUFBb0JLLFVBQXBCLEVBQWdDO0FBQ2pELE1BQUlSLGlCQUFpQixHQUFHanRDLGtCQUFnQixDQUFDLElBQUQsRUFBTztBQUM3Q2t0QyxJQUFBQSxPQUFPLEVBQUVqK0MsU0FEb0M7QUFFN0NtK0MsSUFBQUEsUUFBUSxFQUFFcDVDLFVBQVEsQ0FBQ281QyxRQUFELENBRjJCO0FBRzdDRyxJQUFBQSxvQkFBb0IsRUFBRXQrQztBQUh1QixHQUFQLENBQXhDO0FBS0EsTUFBSTRYLEtBQUo7QUFDQSxNQUFJLENBQUN2VCxhQUFMLEVBQWtCLEtBQUtnNkMsTUFBTCxHQUFjLEtBQWQ7O0FBQ2xCLE1BQUk7QUFDRixRQUFJem1DLEtBQUssR0FBR2pVLFNBQVMsQ0FBQ3c2QyxRQUFELEVBQVcsT0FBWCxDQUFyQixFQUEwQ3ZtQyxLQUFLLENBQUN4WSxJQUFOLENBQVcrK0MsUUFBWCxFQUFxQixJQUFyQjtBQUMzQyxHQUZELENBRUUsT0FBT3ovQyxLQUFQLEVBQWM7QUFDZCs4QixJQUFBQSxnQkFBZ0IsQ0FBQy84QixLQUFELENBQWhCO0FBQ0Q7O0FBQ0QsTUFBSXcvQyxrQkFBa0IsQ0FBQ0YsaUJBQUQsQ0FBdEIsRUFBMkM7QUFDM0MsTUFBSU0sb0JBQW9CLEdBQUdOLGlCQUFpQixDQUFDTSxvQkFBbEIsR0FBeUMsSUFBSUcsb0JBQUosQ0FBeUIsSUFBekIsQ0FBcEU7O0FBQ0EsTUFBSTtBQUNGLFFBQUlSLE9BQU8sR0FBR08sVUFBVSxDQUFDRixvQkFBRCxDQUF4QjtBQUNBLFFBQUlGLFlBQVksR0FBR0gsT0FBbkI7QUFDQSxRQUFJQSxPQUFPLElBQUksSUFBZixFQUFxQkQsaUJBQWlCLENBQUNDLE9BQWxCLEdBQTRCNTlDLFlBQVUsQ0FBQzQ5QyxPQUFPLENBQUNTLFdBQVQsQ0FBVixHQUM3QyxZQUFZO0FBQUVOLE1BQUFBLFlBQVksQ0FBQ00sV0FBYjtBQUE2QixLQURFLEdBRTdDNThDLFdBQVMsQ0FBQ204QyxPQUFELENBRlE7QUFHdEIsR0FORCxDQU1FLE9BQU92L0MsS0FBUCxFQUFjO0FBQ2Q0L0MsSUFBQUEsb0JBQW9CLENBQUM1L0MsS0FBckIsQ0FBMkJBLEtBQTNCO0FBQ0E7QUFDRDs7QUFBQyxNQUFJdy9DLGtCQUFrQixDQUFDRixpQkFBRCxDQUF0QixFQUEyQ0QsbUJBQW1CLENBQUNDLGlCQUFELENBQW5CO0FBQzlDLENBekJEOztBQTJCQU8sWUFBWSxDQUFDMzNDLFNBQWIsR0FBeUI0YixhQUFXLENBQUMsRUFBRCxFQUFLO0FBQ3ZDazhCLEVBQUFBLFdBQVcsRUFBRSxTQUFTQSxXQUFULEdBQXVCO0FBQ2xDLFFBQUlWLGlCQUFpQixHQUFHNzJDLGtCQUFnQixDQUFDLElBQUQsQ0FBeEM7O0FBQ0EsUUFBSSxDQUFDKzJDLGtCQUFrQixDQUFDRixpQkFBRCxDQUF2QixFQUE0QztBQUMxQ3h4QyxNQUFBQSxLQUFLLENBQUN3eEMsaUJBQUQsQ0FBTDtBQUNBRCxNQUFBQSxtQkFBbUIsQ0FBQ0MsaUJBQUQsQ0FBbkI7QUFDRDtBQUNGO0FBUHNDLENBQUwsQ0FBcEM7QUFVQSxJQUFJMzVDLGFBQUosRUFBaUJ2RixnQkFBYyxDQUFDeS9DLFlBQVksQ0FBQzMzQyxTQUFkLEVBQXlCLFFBQXpCLEVBQW1DO0FBQ2hFbEgsRUFBQUEsWUFBWSxFQUFFLElBRGtEO0FBRWhFWCxFQUFBQSxHQUFHLEVBQUUsWUFBWTtBQUNmLFdBQU9tL0Msa0JBQWtCLENBQUMvMkMsa0JBQWdCLENBQUMsSUFBRCxDQUFqQixDQUF6QjtBQUNEO0FBSitELENBQW5DLENBQWQ7O0FBT2pCLElBQUlzM0Msb0JBQW9CLEdBQUcsVUFBVUwsWUFBVixFQUF3QjtBQUNqRHJ0QyxFQUFBQSxrQkFBZ0IsQ0FBQyxJQUFELEVBQU87QUFBRXF0QyxJQUFBQSxZQUFZLEVBQUVBO0FBQWhCLEdBQVAsQ0FBaEI7QUFDQSxNQUFJLENBQUMvNUMsYUFBTCxFQUFrQixLQUFLZzZDLE1BQUwsR0FBYyxLQUFkO0FBQ25CLENBSEQ7O0FBS0FJLG9CQUFvQixDQUFDNzNDLFNBQXJCLEdBQWlDNGIsYUFBVyxDQUFDLEVBQUQsRUFBSztBQUMvQ25OLEVBQUFBLElBQUksRUFBRSxTQUFTQSxJQUFULENBQWM1VixLQUFkLEVBQXFCO0FBQ3pCLFFBQUl1K0MsaUJBQWlCLEdBQUc3MkMsa0JBQWdCLENBQUNBLGtCQUFnQixDQUFDLElBQUQsQ0FBaEIsQ0FBdUJpM0MsWUFBeEIsQ0FBeEM7O0FBQ0EsUUFBSSxDQUFDRixrQkFBa0IsQ0FBQ0YsaUJBQUQsQ0FBdkIsRUFBNEM7QUFDMUMsVUFBSUcsUUFBUSxHQUFHSCxpQkFBaUIsQ0FBQ0csUUFBakM7O0FBQ0EsVUFBSTtBQUNGLFlBQUlRLFVBQVUsR0FBR2g3QyxTQUFTLENBQUN3NkMsUUFBRCxFQUFXLE1BQVgsQ0FBMUI7QUFDQSxZQUFJUSxVQUFKLEVBQWdCQSxVQUFVLENBQUN2L0MsSUFBWCxDQUFnQisrQyxRQUFoQixFQUEwQjErQyxLQUExQjtBQUNqQixPQUhELENBR0UsT0FBT2YsS0FBUCxFQUFjO0FBQ2QrOEIsUUFBQUEsZ0JBQWdCLENBQUMvOEIsS0FBRCxDQUFoQjtBQUNEO0FBQ0Y7QUFDRixHQVo4QztBQWEvQ0EsRUFBQUEsS0FBSyxFQUFFLFNBQVNBLEtBQVQsQ0FBZWUsS0FBZixFQUFzQjtBQUMzQixRQUFJdStDLGlCQUFpQixHQUFHNzJDLGtCQUFnQixDQUFDQSxrQkFBZ0IsQ0FBQyxJQUFELENBQWhCLENBQXVCaTNDLFlBQXhCLENBQXhDOztBQUNBLFFBQUksQ0FBQ0Ysa0JBQWtCLENBQUNGLGlCQUFELENBQXZCLEVBQTRDO0FBQzFDLFVBQUlHLFFBQVEsR0FBR0gsaUJBQWlCLENBQUNHLFFBQWpDO0FBQ0EzeEMsTUFBQUEsS0FBSyxDQUFDd3hDLGlCQUFELENBQUw7O0FBQ0EsVUFBSTtBQUNGLFlBQUlZLFdBQVcsR0FBR2o3QyxTQUFTLENBQUN3NkMsUUFBRCxFQUFXLE9BQVgsQ0FBM0I7QUFDQSxZQUFJUyxXQUFKLEVBQWlCQSxXQUFXLENBQUN4L0MsSUFBWixDQUFpQisrQyxRQUFqQixFQUEyQjErQyxLQUEzQixFQUFqQixLQUNLZzhCLGdCQUFnQixDQUFDaDhCLEtBQUQsQ0FBaEI7QUFDTixPQUpELENBSUUsT0FBTzIyQyxHQUFQLEVBQVk7QUFDWjNhLFFBQUFBLGdCQUFnQixDQUFDMmEsR0FBRCxDQUFoQjtBQUNEOztBQUFDMkgsTUFBQUEsbUJBQW1CLENBQUNDLGlCQUFELENBQW5CO0FBQ0g7QUFDRixHQTFCOEM7QUEyQi9DYSxFQUFBQSxRQUFRLEVBQUUsU0FBU0EsUUFBVCxHQUFvQjtBQUM1QixRQUFJYixpQkFBaUIsR0FBRzcyQyxrQkFBZ0IsQ0FBQ0Esa0JBQWdCLENBQUMsSUFBRCxDQUFoQixDQUF1QmkzQyxZQUF4QixDQUF4Qzs7QUFDQSxRQUFJLENBQUNGLGtCQUFrQixDQUFDRixpQkFBRCxDQUF2QixFQUE0QztBQUMxQyxVQUFJRyxRQUFRLEdBQUdILGlCQUFpQixDQUFDRyxRQUFqQztBQUNBM3hDLE1BQUFBLEtBQUssQ0FBQ3d4QyxpQkFBRCxDQUFMOztBQUNBLFVBQUk7QUFDRixZQUFJYyxjQUFjLEdBQUduN0MsU0FBUyxDQUFDdzZDLFFBQUQsRUFBVyxVQUFYLENBQTlCO0FBQ0EsWUFBSVcsY0FBSixFQUFvQkEsY0FBYyxDQUFDMS9DLElBQWYsQ0FBb0IrK0MsUUFBcEI7QUFDckIsT0FIRCxDQUdFLE9BQU96L0MsS0FBUCxFQUFjO0FBQ2QrOEIsUUFBQUEsZ0JBQWdCLENBQUMvOEIsS0FBRCxDQUFoQjtBQUNEOztBQUFDcS9DLE1BQUFBLG1CQUFtQixDQUFDQyxpQkFBRCxDQUFuQjtBQUNIO0FBQ0Y7QUF2QzhDLENBQUwsQ0FBNUM7QUEwQ0EsSUFBSTM1QyxhQUFKLEVBQWlCdkYsZ0JBQWMsQ0FBQzIvQyxvQkFBb0IsQ0FBQzczQyxTQUF0QixFQUFpQyxRQUFqQyxFQUEyQztBQUN4RWxILEVBQUFBLFlBQVksRUFBRSxJQUQwRDtBQUV4RVgsRUFBQUEsR0FBRyxFQUFFLFlBQVk7QUFDZixXQUFPbS9DLGtCQUFrQixDQUFDLzJDLGtCQUFnQixDQUFDQSxrQkFBZ0IsQ0FBQyxJQUFELENBQWhCLENBQXVCaTNDLFlBQXhCLENBQWpCLENBQXpCO0FBQ0Q7QUFKdUUsQ0FBM0MsQ0FBZDs7QUFPakIsSUFBSVcsV0FBVyxHQUFHLFNBQVNDLFVBQVQsQ0FBb0JSLFVBQXBCLEVBQWdDO0FBQ2hELzdCLEVBQUFBLFlBQVUsQ0FBQyxJQUFELEVBQU9zOEIsV0FBUCxFQUFvQixZQUFwQixDQUFWO0FBQ0FodUMsRUFBQUEsa0JBQWdCLENBQUMsSUFBRCxFQUFPO0FBQUV5dEMsSUFBQUEsVUFBVSxFQUFFMThDLFdBQVMsQ0FBQzA4QyxVQUFEO0FBQXZCLEdBQVAsQ0FBaEI7QUFDRCxDQUhEOztBQUtBaDhCLGFBQVcsQ0FBQ3U4QixXQUFXLENBQUNuNEMsU0FBYixFQUF3QjtBQUNqQ3E0QyxFQUFBQSxTQUFTLEVBQUUsU0FBU0EsU0FBVCxDQUFtQmQsUUFBbkIsRUFBNkI7QUFDdEMsUUFBSXo5QyxNQUFNLEdBQUdELFNBQVMsQ0FBQ0MsTUFBdkI7QUFDQSxXQUFPLElBQUk2OUMsWUFBSixDQUFpQmwrQyxZQUFVLENBQUM4OUMsUUFBRCxDQUFWLEdBQXVCO0FBQzdDOW9DLE1BQUFBLElBQUksRUFBRThvQyxRQUR1QztBQUU3Q3ovQyxNQUFBQSxLQUFLLEVBQUVnQyxNQUFNLEdBQUcsQ0FBVCxHQUFhRCxTQUFTLENBQUMsQ0FBRCxDQUF0QixHQUE0QlQsU0FGVTtBQUc3QzYrQyxNQUFBQSxRQUFRLEVBQUVuK0MsTUFBTSxHQUFHLENBQVQsR0FBYUQsU0FBUyxDQUFDLENBQUQsQ0FBdEIsR0FBNEJUO0FBSE8sS0FBdkIsR0FJcEJpQyxVQUFRLENBQUNrOEMsUUFBRCxDQUFSLEdBQXFCQSxRQUFyQixHQUFnQyxFQUo3QixFQUlpQ2gzQyxrQkFBZ0IsQ0FBQyxJQUFELENBQWhCLENBQXVCcTNDLFVBSnhELENBQVA7QUFLRDtBQVJnQyxDQUF4QixDQUFYO0FBV0FoOEIsYUFBVyxDQUFDdThCLFdBQUQsRUFBYztBQUN2QmpuQyxFQUFBQSxJQUFJLEVBQUUsU0FBU0EsSUFBVCxDQUFjc0ksQ0FBZCxFQUFpQjtBQUNyQixRQUFJclIsQ0FBQyxHQUFHSCxhQUFhLENBQUMsSUFBRCxDQUFiLEdBQXNCLElBQXRCLEdBQTZCbXdDLFdBQXJDO0FBQ0EsUUFBSUcsZ0JBQWdCLEdBQUd2N0MsU0FBUyxDQUFDb0IsVUFBUSxDQUFDcWIsQ0FBRCxDQUFULEVBQWMwOUIsVUFBZCxDQUFoQzs7QUFDQSxRQUFJb0IsZ0JBQUosRUFBc0I7QUFDcEIsVUFBSUMsVUFBVSxHQUFHcDZDLFVBQVEsQ0FBQ202QyxnQkFBZ0IsQ0FBQzkvQyxJQUFqQixDQUFzQmdoQixDQUF0QixDQUFELENBQXpCO0FBQ0EsYUFBTysrQixVQUFVLENBQUNud0MsV0FBWCxLQUEyQkQsQ0FBM0IsR0FBK0Jvd0MsVUFBL0IsR0FBNEMsSUFBSXB3QyxDQUFKLENBQU0sVUFBVW92QyxRQUFWLEVBQW9CO0FBQzNFLGVBQU9nQixVQUFVLENBQUNGLFNBQVgsQ0FBcUJkLFFBQXJCLENBQVA7QUFDRCxPQUZrRCxDQUFuRDtBQUdEOztBQUNELFFBQUl6OEMsUUFBUSxHQUFHaVQsYUFBVyxDQUFDeUwsQ0FBRCxDQUExQjtBQUNBLFdBQU8sSUFBSXJSLENBQUosQ0FBTSxVQUFVb3ZDLFFBQVYsRUFBb0I7QUFDL0J2b0MsTUFBQUEsU0FBTyxDQUFDbFUsUUFBRCxFQUFXLFVBQVV6RCxFQUFWLEVBQWNzWCxJQUFkLEVBQW9CO0FBQ3BDNG9DLFFBQUFBLFFBQVEsQ0FBQzlvQyxJQUFULENBQWNwWCxFQUFkO0FBQ0EsWUFBSWtnRCxRQUFRLENBQUNFLE1BQWIsRUFBcUIsT0FBTzlvQyxJQUFJLEVBQVg7QUFDdEIsT0FITSxFQUdKO0FBQUVMLFFBQUFBLFdBQVcsRUFBRSxJQUFmO0FBQXFCQyxRQUFBQSxXQUFXLEVBQUU7QUFBbEMsT0FISSxDQUFQO0FBSUFncEMsTUFBQUEsUUFBUSxDQUFDVSxRQUFUO0FBQ0QsS0FOTSxDQUFQO0FBT0QsR0FsQnNCO0FBbUJ2QnhoQyxFQUFBQSxFQUFFLEVBQUUsU0FBU0EsRUFBVCxHQUFjO0FBQ2hCLFFBQUl0TyxDQUFDLEdBQUdILGFBQWEsQ0FBQyxJQUFELENBQWIsR0FBc0IsSUFBdEIsR0FBNkJtd0MsV0FBckM7QUFDQSxRQUFJcitDLE1BQU0sR0FBR0QsU0FBUyxDQUFDQyxNQUF2QjtBQUNBLFFBQUk0ZixLQUFLLEdBQUcsSUFBSXZWLEtBQUosQ0FBVXJLLE1BQVYsQ0FBWjtBQUNBLFFBQUl5SCxLQUFLLEdBQUcsQ0FBWjs7QUFDQSxXQUFPQSxLQUFLLEdBQUd6SCxNQUFmLEVBQXVCNGYsS0FBSyxDQUFDblksS0FBRCxDQUFMLEdBQWUxSCxTQUFTLENBQUMwSCxLQUFLLEVBQU4sQ0FBeEI7O0FBQ3ZCLFdBQU8sSUFBSTRHLENBQUosQ0FBTSxVQUFVb3ZDLFFBQVYsRUFBb0I7QUFDL0IsV0FBSyxJQUFJbDFDLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUd2SSxNQUFwQixFQUE0QnVJLENBQUMsRUFBN0IsRUFBaUM7QUFDL0JrMUMsUUFBQUEsUUFBUSxDQUFDOW9DLElBQVQsQ0FBY2lMLEtBQUssQ0FBQ3JYLENBQUQsQ0FBbkI7QUFDQSxZQUFJazFDLFFBQVEsQ0FBQ0UsTUFBYixFQUFxQjtBQUN0Qjs7QUFBQ0YsTUFBQUEsUUFBUSxDQUFDVSxRQUFUO0FBQ0gsS0FMTSxDQUFQO0FBTUQ7QUEvQnNCLENBQWQsQ0FBWDtBQWtDQXgwQyxVQUFRLENBQUMwMEMsV0FBVyxDQUFDbjRDLFNBQWIsRUFBd0JrM0MsVUFBeEIsRUFBb0MsWUFBWTtBQUFFLFNBQU8sSUFBUDtBQUFjLENBQWhFLENBQVI7QUFFQXh0QyxHQUFDLENBQUM7QUFBRS9SLEVBQUFBLE1BQU0sRUFBRTtBQUFWLENBQUQsRUFBbUI7QUFDbEJ5Z0QsRUFBQUEsVUFBVSxFQUFFRDtBQURNLENBQW5CLENBQUQ7QUFJQXIrQixVQUFVLENBQUMsWUFBRCxDQUFWOztBQzNNQSxJQUFJcFEsR0FBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJODhCLDBCQUEwQixHQUFHOThCLHNCQUFqQzs7QUFDQSxJQUFJKzhCLE9BQU8sR0FBRy84QixTQUFkO0FBR0E7OztBQUNBMFIsR0FBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsU0FBVjtBQUFxQmdCLEVBQUFBLElBQUksRUFBRTtBQUEzQixDQUFELEVBQW9DO0FBQ25DLFNBQU8sVUFBVWlGLFVBQVYsRUFBc0I7QUFDM0IsUUFBSXlyQixpQkFBaUIsR0FBR00sMEJBQTBCLENBQUM1MkIsQ0FBM0IsQ0FBNkIsSUFBN0IsQ0FBeEI7QUFDQSxRQUFJZCxNQUFNLEdBQUcyM0IsT0FBTyxDQUFDaHNCLFVBQUQsQ0FBcEI7QUFDQSxLQUFDM0wsTUFBTSxDQUFDdEYsS0FBUCxHQUFlMDhCLGlCQUFpQixDQUFDSixNQUFqQyxHQUEwQ0ksaUJBQWlCLENBQUNQLE9BQTdELEVBQXNFNzJCLE1BQU0sQ0FBQ3ZFLEtBQTdFO0FBQ0EsV0FBTzI3QixpQkFBaUIsQ0FBQ2YsT0FBekI7QUFDRDtBQU5rQyxDQUFwQyxDQUFEOztBQ1BBO0FBQ0EsSUFBSXhLLEtBQUcsR0FBR2p4QixNQUFWOztBQUNBLElBQUkwRyxPQUFPLEdBQUcxRyxrQkFBZDs7QUFDQSxJQUFJd0UsTUFBTSxHQUFHeEUsZ0JBQWI7O0FBRUEsSUFBSTRILFFBQVEsR0FBR3BELE1BQU0sQ0FBQyxVQUFELENBQXJCO0FBQ0EsSUFBSVYsT0FBSyxHQUFHOEQsUUFBUSxDQUFDOUQsS0FBVCxLQUFtQjhELFFBQVEsQ0FBQzlELEtBQVQsR0FBaUIsSUFBSTRDLE9BQUosRUFBcEMsQ0FBWjs7QUFFQSxJQUFJODVDLHdCQUFzQixHQUFHLFVBQVUxMUMsTUFBVixFQUFrQjIxQyxTQUFsQixFQUE2QjV4QyxNQUE3QixFQUFxQztBQUNoRSxNQUFJNnhDLGNBQWMsR0FBRzU4QyxPQUFLLENBQUMzRCxHQUFOLENBQVUySyxNQUFWLENBQXJCOztBQUNBLE1BQUksQ0FBQzQxQyxjQUFMLEVBQXFCO0FBQ25CLFFBQUksQ0FBQzd4QyxNQUFMLEVBQWE7QUFDYi9LLElBQUFBLE9BQUssQ0FBQ29ELEdBQU4sQ0FBVTRELE1BQVYsRUFBa0I0MUMsY0FBYyxHQUFHLElBQUl6dkIsS0FBSixFQUFuQztBQUNEOztBQUNELE1BQUkwdkIsV0FBVyxHQUFHRCxjQUFjLENBQUN2Z0QsR0FBZixDQUFtQnNnRCxTQUFuQixDQUFsQjs7QUFDQSxNQUFJLENBQUNFLFdBQUwsRUFBa0I7QUFDaEIsUUFBSSxDQUFDOXhDLE1BQUwsRUFBYTtBQUNiNnhDLElBQUFBLGNBQWMsQ0FBQ3g1QyxHQUFmLENBQW1CdTVDLFNBQW5CLEVBQThCRSxXQUFXLEdBQUcsSUFBSTF2QixLQUFKLEVBQTVDO0FBQ0Q7O0FBQUMsU0FBTzB2QixXQUFQO0FBQ0gsQ0FYRDs7QUFhQSxJQUFJQyx3QkFBc0IsR0FBRyxVQUFVQyxXQUFWLEVBQXVCNTZDLENBQXZCLEVBQTBCOUMsQ0FBMUIsRUFBNkI7QUFDeEQsTUFBSTI5QyxXQUFXLEdBQUdOLHdCQUFzQixDQUFDdjZDLENBQUQsRUFBSTlDLENBQUosRUFBTyxLQUFQLENBQXhDO0FBQ0EsU0FBTzI5QyxXQUFXLEtBQUsxL0MsU0FBaEIsR0FBNEIsS0FBNUIsR0FBb0MwL0MsV0FBVyxDQUFDMzVDLEdBQVosQ0FBZ0IwNUMsV0FBaEIsQ0FBM0M7QUFDRCxDQUhEOztBQUtBLElBQUlFLHdCQUFzQixHQUFHLFVBQVVGLFdBQVYsRUFBdUI1NkMsQ0FBdkIsRUFBMEI5QyxDQUExQixFQUE2QjtBQUN4RCxNQUFJMjlDLFdBQVcsR0FBR04sd0JBQXNCLENBQUN2NkMsQ0FBRCxFQUFJOUMsQ0FBSixFQUFPLEtBQVAsQ0FBeEM7QUFDQSxTQUFPMjlDLFdBQVcsS0FBSzEvQyxTQUFoQixHQUE0QkEsU0FBNUIsR0FBd0MwL0MsV0FBVyxDQUFDM2dELEdBQVosQ0FBZ0IwZ0QsV0FBaEIsQ0FBL0M7QUFDRCxDQUhEOztBQUtBLElBQUlHLDJCQUF5QixHQUFHLFVBQVVILFdBQVYsRUFBdUJJLGFBQXZCLEVBQXNDaDdDLENBQXRDLEVBQXlDOUMsQ0FBekMsRUFBNEM7QUFDMUVxOUMsRUFBQUEsd0JBQXNCLENBQUN2NkMsQ0FBRCxFQUFJOUMsQ0FBSixFQUFPLElBQVAsQ0FBdEIsQ0FBbUMrRCxHQUFuQyxDQUF1QzI1QyxXQUF2QyxFQUFvREksYUFBcEQ7QUFDRCxDQUZEOztBQUlBLElBQUlDLHlCQUF1QixHQUFHLFVBQVVwMkMsTUFBVixFQUFrQjIxQyxTQUFsQixFQUE2QjtBQUN6RCxNQUFJSyxXQUFXLEdBQUdOLHdCQUFzQixDQUFDMTFDLE1BQUQsRUFBUzIxQyxTQUFULEVBQW9CLEtBQXBCLENBQXhDO0FBQ0EsTUFBSTc1QyxJQUFJLEdBQUcsRUFBWDtBQUNBLE1BQUlrNkMsV0FBSixFQUFpQkEsV0FBVyxDQUFDNXZDLE9BQVosQ0FBb0IsVUFBVW82QixDQUFWLEVBQWEzbkMsR0FBYixFQUFrQjtBQUFFaUQsSUFBQUEsSUFBSSxDQUFDN0MsSUFBTCxDQUFVSixHQUFWO0FBQWlCLEdBQXpEO0FBQ2pCLFNBQU9pRCxJQUFQO0FBQ0QsQ0FMRDs7QUFPQSxJQUFJdTZDLGVBQWEsR0FBRyxVQUFVOWhELEVBQVYsRUFBYztBQUNoQyxTQUFPQSxFQUFFLEtBQUsrQixTQUFQLElBQW9CLE9BQU8vQixFQUFQLElBQWEsUUFBakMsR0FBNENBLEVBQTVDLEdBQWlEc0QsTUFBTSxDQUFDdEQsRUFBRCxDQUE5RDtBQUNELENBRkQ7O0lBSUFFLGVBQUEsR0FBaUI7QUFDZnVFLEVBQUFBLEtBQUssRUFBRUEsT0FEUTtBQUVmczlDLEVBQUFBLE1BQU0sRUFBRVosd0JBRk87QUFHZnI1QyxFQUFBQSxHQUFHLEVBQUV5NUMsd0JBSFU7QUFJZnpnRCxFQUFBQSxHQUFHLEVBQUU0Z0Qsd0JBSlU7QUFLZjc1QyxFQUFBQSxHQUFHLEVBQUU4NUMsMkJBTFU7QUFNZnA2QyxFQUFBQSxJQUFJLEVBQUVzNkMseUJBTlM7QUFPZkcsRUFBQUEsS0FBSyxFQUFFRjtBQVBRLENBQWpCOztBQzlDQSxJQUFJenZDLEdBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXNoRCx1QkFBcUIsR0FBR3RoRCxlQUE1Qjs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFFQSxJQUFJbWhELGVBQWEsR0FBR0csdUJBQXFCLENBQUNELEtBQTFDO0FBQ0EsSUFBSUwsMkJBQXlCLEdBQUdNLHVCQUFxQixDQUFDcDZDLEdBQXREO0FBR0E7O0FBQ0F3SyxHQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxTQUFWO0FBQXFCZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQTNCLENBQUQsRUFBb0M7QUFDbkN5MUMsRUFBQUEsY0FBYyxFQUFFLFNBQVNBLGNBQVQsQ0FBd0JDLFdBQXhCLEVBQXFDQyxhQUFyQyxFQUFvRDMyQztBQUFPO0FBQTNELElBQThFO0FBQzVGLFFBQUkyMUMsU0FBUyxHQUFHNStDLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUF1QlYsU0FBdkIsR0FBbUMrL0MsZUFBYSxDQUFDdC9DLFNBQVMsQ0FBQyxDQUFELENBQVYsQ0FBaEU7QUFDQW0vQyxJQUFBQSwyQkFBeUIsQ0FBQ1EsV0FBRCxFQUFjQyxhQUFkLEVBQTZCdDdDLFVBQVEsQ0FBQzJFLE1BQUQsQ0FBckMsRUFBK0MyMUMsU0FBL0MsQ0FBekI7QUFDRDtBQUprQyxDQUFwQyxDQUFEOztBQ1RBLElBQUkvdUMsR0FBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJc2hELHVCQUFxQixHQUFHdGhELGVBQTVCOztBQUNBLElBQUltRyxVQUFRLEdBQUduRyxXQUFmOztBQUVBLElBQUltaEQsZUFBYSxHQUFHRyx1QkFBcUIsQ0FBQ0QsS0FBMUM7QUFDQSxJQUFJYixzQkFBc0IsR0FBR2MsdUJBQXFCLENBQUNGLE1BQW5EO0FBQ0EsSUFBSXQ5QyxLQUFLLEdBQUd3OUMsdUJBQXFCLENBQUN4OUMsS0FBbEM7QUFHQTs7QUFDQTROLEdBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFNBQVY7QUFBcUJnQixFQUFBQSxJQUFJLEVBQUU7QUFBM0IsQ0FBRCxFQUFvQztBQUNuQzQxQyxFQUFBQSxjQUFjLEVBQUUsU0FBU0EsY0FBVCxDQUF3QkYsV0FBeEIsRUFBcUMxMkM7QUFBTztBQUE1QyxJQUErRDtBQUM3RSxRQUFJMjFDLFNBQVMsR0FBRzUrQyxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJWLFNBQXZCLEdBQW1DKy9DLGVBQWEsQ0FBQ3QvQyxTQUFTLENBQUMsQ0FBRCxDQUFWLENBQWhFO0FBQ0EsUUFBSWkvQyxXQUFXLEdBQUdOLHNCQUFzQixDQUFDcjZDLFVBQVEsQ0FBQzJFLE1BQUQsQ0FBVCxFQUFtQjIxQyxTQUFuQixFQUE4QixLQUE5QixDQUF4QztBQUNBLFFBQUlLLFdBQVcsS0FBSzEvQyxTQUFoQixJQUE2QixDQUFDMC9DLFdBQVcsQ0FBQyxRQUFELENBQVgsQ0FBc0JVLFdBQXRCLENBQWxDLEVBQXNFLE9BQU8sS0FBUDtBQUN0RSxRQUFJVixXQUFXLENBQUN6d0IsSUFBaEIsRUFBc0IsT0FBTyxJQUFQO0FBQ3RCLFFBQUlxd0IsY0FBYyxHQUFHNThDLEtBQUssQ0FBQzNELEdBQU4sQ0FBVTJLLE1BQVYsQ0FBckI7QUFDQTQxQyxJQUFBQSxjQUFjLENBQUMsUUFBRCxDQUFkLENBQXlCRCxTQUF6QjtBQUNBLFdBQU8sQ0FBQyxDQUFDQyxjQUFjLENBQUNyd0IsSUFBakIsSUFBeUJ2c0IsS0FBSyxDQUFDLFFBQUQsQ0FBTCxDQUFnQmdILE1BQWhCLENBQWhDO0FBQ0Q7QUFUa0MsQ0FBcEMsQ0FBRDs7QUNWQSxJQUFJNEcsR0FBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJc2hELHVCQUFxQixHQUFHdGhELGVBQTVCOztBQUNBLElBQUltRyxVQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUk2VSxnQkFBYyxHQUFHN1Usc0JBQXJCOztBQUVBLElBQUk0Z0Qsd0JBQXNCLEdBQUdVLHVCQUFxQixDQUFDbjZDLEdBQW5EO0FBQ0EsSUFBSTQ1Qyx3QkFBc0IsR0FBR08sdUJBQXFCLENBQUNuaEQsR0FBbkQ7QUFDQSxJQUFJZ2hELGVBQWEsR0FBR0csdUJBQXFCLENBQUNELEtBQTFDOztBQUVBLElBQUlNLG1CQUFtQixHQUFHLFVBQVVkLFdBQVYsRUFBdUI1NkMsQ0FBdkIsRUFBMEI5QyxDQUExQixFQUE2QjtBQUNyRCxNQUFJaUIsTUFBTSxHQUFHdzhDLHdCQUFzQixDQUFDQyxXQUFELEVBQWM1NkMsQ0FBZCxFQUFpQjlDLENBQWpCLENBQW5DO0FBQ0EsTUFBSWlCLE1BQUosRUFBWSxPQUFPMjhDLHdCQUFzQixDQUFDRixXQUFELEVBQWM1NkMsQ0FBZCxFQUFpQjlDLENBQWpCLENBQTdCO0FBQ1osTUFBSXc0QixNQUFNLEdBQUc5bUIsZ0JBQWMsQ0FBQzVPLENBQUQsQ0FBM0I7QUFDQSxTQUFPMDFCLE1BQU0sS0FBSyxJQUFYLEdBQWtCZ21CLG1CQUFtQixDQUFDZCxXQUFELEVBQWNsbEIsTUFBZCxFQUFzQng0QixDQUF0QixDQUFyQyxHQUFnRS9CLFNBQXZFO0FBQ0QsQ0FMRDtBQVFBOzs7QUFDQXNRLEdBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFNBQVY7QUFBcUJnQixFQUFBQSxJQUFJLEVBQUU7QUFBM0IsQ0FBRCxFQUFvQztBQUNuQzgxQyxFQUFBQSxXQUFXLEVBQUUsU0FBU0EsV0FBVCxDQUFxQkosV0FBckIsRUFBa0MxMkM7QUFBTztBQUF6QyxJQUE0RDtBQUN2RSxRQUFJMjFDLFNBQVMsR0FBRzUrQyxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJWLFNBQXZCLEdBQW1DKy9DLGVBQWEsQ0FBQ3QvQyxTQUFTLENBQUMsQ0FBRCxDQUFWLENBQWhFO0FBQ0EsV0FBTzgvQyxtQkFBbUIsQ0FBQ0gsV0FBRCxFQUFjcjdDLFVBQVEsQ0FBQzJFLE1BQUQsQ0FBdEIsRUFBZ0MyMUMsU0FBaEMsQ0FBMUI7QUFDRDtBQUprQyxDQUFwQyxDQUFEOztBQ2xCQSxJQUFJL3VDLEdBQUMsR0FBRzFSLE9BQVI7OztBQUVBLElBQUkybUMsS0FBRyxHQUFHM21DLE1BQVY7O0FBQ0EsSUFBSXNoRCx1QkFBcUIsR0FBR3RoRCxlQUE1Qjs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJNlUsZ0JBQWMsR0FBRzdVLHNCQUFyQjs7QUFDQSxJQUFJZ1gsU0FBTyxHQUFHaFgsU0FBZDs7QUFFQSxJQUFJa2hELHlCQUF1QixHQUFHSSx1QkFBcUIsQ0FBQzE2QyxJQUFwRDtBQUNBLElBQUl1NkMsZUFBYSxHQUFHRyx1QkFBcUIsQ0FBQ0QsS0FBMUM7O0FBRUEsSUFBSW5vQyxNQUFJLEdBQUcsVUFBVTJvQyxJQUFWLEVBQWdCO0FBQ3pCLE1BQUl6OEMsTUFBTSxHQUFHLEVBQWI7QUFDQTRSLEVBQUFBLFNBQU8sQ0FBQzZxQyxJQUFELEVBQU96OEMsTUFBTSxDQUFDckIsSUFBZCxFQUFvQjtBQUFFc0wsSUFBQUEsSUFBSSxFQUFFaks7QUFBUixHQUFwQixDQUFQO0FBQ0EsU0FBT0EsTUFBUDtBQUNELENBSkQ7O0FBTUEsSUFBSTA4QyxvQkFBb0IsR0FBRyxVQUFVNzdDLENBQVYsRUFBYTlDLENBQWIsRUFBZ0I7QUFDekMsTUFBSTQrQyxLQUFLLEdBQUdiLHlCQUF1QixDQUFDajdDLENBQUQsRUFBSTlDLENBQUosQ0FBbkM7QUFDQSxNQUFJdzRCLE1BQU0sR0FBRzltQixnQkFBYyxDQUFDNU8sQ0FBRCxDQUEzQjtBQUNBLE1BQUkwMUIsTUFBTSxLQUFLLElBQWYsRUFBcUIsT0FBT29tQixLQUFQO0FBQ3JCLE1BQUlDLEtBQUssR0FBR0Ysb0JBQW9CLENBQUNubUIsTUFBRCxFQUFTeDRCLENBQVQsQ0FBaEM7QUFDQSxTQUFPNitDLEtBQUssQ0FBQ2xnRCxNQUFOLEdBQWVpZ0QsS0FBSyxDQUFDamdELE1BQU4sR0FBZW9YLE1BQUksQ0FBQyxJQUFJeXRCLEtBQUosQ0FBUW9iLEtBQUssQ0FBQ3YzQyxNQUFOLENBQWF3M0MsS0FBYixDQUFSLENBQUQsQ0FBbkIsR0FBb0RBLEtBQW5FLEdBQTJFRCxLQUFsRjtBQUNELENBTkQ7QUFTQTs7O0FBQ0Fyd0MsR0FBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsU0FBVjtBQUFxQmdCLEVBQUFBLElBQUksRUFBRTtBQUEzQixDQUFELEVBQW9DO0FBQ25DbTJDLEVBQUFBLGVBQWUsRUFBRSxTQUFTQSxlQUFULENBQXlCbjNDO0FBQU87QUFBaEMsSUFBbUQ7QUFDbEUsUUFBSTIxQyxTQUFTLEdBQUc1K0MsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCVixTQUF2QixHQUFtQysvQyxlQUFhLENBQUN0L0MsU0FBUyxDQUFDLENBQUQsQ0FBVixDQUFoRTtBQUNBLFdBQU9pZ0Qsb0JBQW9CLENBQUMzN0MsVUFBUSxDQUFDMkUsTUFBRCxDQUFULEVBQW1CMjFDLFNBQW5CLENBQTNCO0FBQ0Q7QUFKa0MsQ0FBcEMsQ0FBRDs7QUMzQkEsSUFBSS91QyxHQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlzaEQsdUJBQXFCLEdBQUd0aEQsZUFBNUI7O0FBQ0EsSUFBSW1HLFVBQVEsR0FBR25HLFdBQWY7O0FBRUEsSUFBSStnRCxzQkFBc0IsR0FBR08sdUJBQXFCLENBQUNuaEQsR0FBbkQ7QUFDQSxJQUFJZ2hELGVBQWEsR0FBR0csdUJBQXFCLENBQUNELEtBQTFDO0FBR0E7O0FBQ0EzdkMsR0FBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsU0FBVjtBQUFxQmdCLEVBQUFBLElBQUksRUFBRTtBQUEzQixDQUFELEVBQW9DO0FBQ25DbzJDLEVBQUFBLGNBQWMsRUFBRSxTQUFTQSxjQUFULENBQXdCVixXQUF4QixFQUFxQzEyQztBQUFPO0FBQTVDLElBQStEO0FBQzdFLFFBQUkyMUMsU0FBUyxHQUFHNStDLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUF1QlYsU0FBdkIsR0FBbUMrL0MsZUFBYSxDQUFDdC9DLFNBQVMsQ0FBQyxDQUFELENBQVYsQ0FBaEU7QUFDQSxXQUFPay9DLHNCQUFzQixDQUFDUyxXQUFELEVBQWNyN0MsVUFBUSxDQUFDMkUsTUFBRCxDQUF0QixFQUFnQzIxQyxTQUFoQyxDQUE3QjtBQUNEO0FBSmtDLENBQXBDLENBQUQ7O0FDVEEsSUFBSS91QyxHQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlzaEQsdUJBQXFCLEdBQUd0aEQsZUFBNUI7O0FBQ0EsSUFBSW1HLFVBQVEsR0FBR25HLFdBQWY7O0FBRUEsSUFBSWtoRCx1QkFBdUIsR0FBR0ksdUJBQXFCLENBQUMxNkMsSUFBcEQ7QUFDQSxJQUFJdTZDLGVBQWEsR0FBR0csdUJBQXFCLENBQUNELEtBQTFDO0FBR0E7O0FBQ0EzdkMsR0FBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsU0FBVjtBQUFxQmdCLEVBQUFBLElBQUksRUFBRTtBQUEzQixDQUFELEVBQW9DO0FBQ25DcTJDLEVBQUFBLGtCQUFrQixFQUFFLFNBQVNBLGtCQUFULENBQTRCcjNDO0FBQU87QUFBbkMsSUFBc0Q7QUFDeEUsUUFBSTIxQyxTQUFTLEdBQUc1K0MsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCVixTQUF2QixHQUFtQysvQyxlQUFhLENBQUN0L0MsU0FBUyxDQUFDLENBQUQsQ0FBVixDQUFoRTtBQUNBLFdBQU9xL0MsdUJBQXVCLENBQUMvNkMsVUFBUSxDQUFDMkUsTUFBRCxDQUFULEVBQW1CMjFDLFNBQW5CLENBQTlCO0FBQ0Q7QUFKa0MsQ0FBcEMsQ0FBRDs7QUNUQSxJQUFJL3VDLEdBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXNoRCx1QkFBcUIsR0FBR3RoRCxlQUE1Qjs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJNlUsZ0JBQWMsR0FBRzdVLHNCQUFyQjs7QUFFQSxJQUFJNGdELHdCQUFzQixHQUFHVSx1QkFBcUIsQ0FBQ242QyxHQUFuRDtBQUNBLElBQUlnNkMsZUFBYSxHQUFHRyx1QkFBcUIsQ0FBQ0QsS0FBMUM7O0FBRUEsSUFBSWUsbUJBQW1CLEdBQUcsVUFBVXZCLFdBQVYsRUFBdUI1NkMsQ0FBdkIsRUFBMEI5QyxDQUExQixFQUE2QjtBQUNyRCxNQUFJaUIsTUFBTSxHQUFHdzhDLHdCQUFzQixDQUFDQyxXQUFELEVBQWM1NkMsQ0FBZCxFQUFpQjlDLENBQWpCLENBQW5DO0FBQ0EsTUFBSWlCLE1BQUosRUFBWSxPQUFPLElBQVA7QUFDWixNQUFJdTNCLE1BQU0sR0FBRzltQixnQkFBYyxDQUFDNU8sQ0FBRCxDQUEzQjtBQUNBLFNBQU8wMUIsTUFBTSxLQUFLLElBQVgsR0FBa0J5bUIsbUJBQW1CLENBQUN2QixXQUFELEVBQWNsbEIsTUFBZCxFQUFzQng0QixDQUF0QixDQUFyQyxHQUFnRSxLQUF2RTtBQUNELENBTEQ7QUFRQTs7O0FBQ0F1TyxHQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxTQUFWO0FBQXFCZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQTNCLENBQUQsRUFBb0M7QUFDbkN1MkMsRUFBQUEsV0FBVyxFQUFFLFNBQVNBLFdBQVQsQ0FBcUJiLFdBQXJCLEVBQWtDMTJDO0FBQU87QUFBekMsSUFBNEQ7QUFDdkUsUUFBSTIxQyxTQUFTLEdBQUc1K0MsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCVixTQUF2QixHQUFtQysvQyxlQUFhLENBQUN0L0MsU0FBUyxDQUFDLENBQUQsQ0FBVixDQUFoRTtBQUNBLFdBQU91Z0QsbUJBQW1CLENBQUNaLFdBQUQsRUFBY3I3QyxVQUFRLENBQUMyRSxNQUFELENBQXRCLEVBQWdDMjFDLFNBQWhDLENBQTFCO0FBQ0Q7QUFKa0MsQ0FBcEMsQ0FBRDs7QUNqQkEsSUFBSS91QyxHQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlzaEQsdUJBQXFCLEdBQUd0aEQsZUFBNUI7O0FBQ0EsSUFBSW1HLFVBQVEsR0FBR25HLFdBQWY7O0FBRUEsSUFBSTRnRCxzQkFBc0IsR0FBR1UsdUJBQXFCLENBQUNuNkMsR0FBbkQ7QUFDQSxJQUFJZzZDLGVBQWEsR0FBR0csdUJBQXFCLENBQUNELEtBQTFDO0FBR0E7O0FBQ0EzdkMsR0FBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsU0FBVjtBQUFxQmdCLEVBQUFBLElBQUksRUFBRTtBQUEzQixDQUFELEVBQW9DO0FBQ25DdzJDLEVBQUFBLGNBQWMsRUFBRSxTQUFTQSxjQUFULENBQXdCZCxXQUF4QixFQUFxQzEyQztBQUFPO0FBQTVDLElBQStEO0FBQzdFLFFBQUkyMUMsU0FBUyxHQUFHNStDLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUF1QlYsU0FBdkIsR0FBbUMrL0MsZUFBYSxDQUFDdC9DLFNBQVMsQ0FBQyxDQUFELENBQVYsQ0FBaEU7QUFDQSxXQUFPKytDLHNCQUFzQixDQUFDWSxXQUFELEVBQWNyN0MsVUFBUSxDQUFDMkUsTUFBRCxDQUF0QixFQUFnQzIxQyxTQUFoQyxDQUE3QjtBQUNEO0FBSmtDLENBQXBDLENBQUQ7O0FDVEEsSUFBSS91QyxHQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlzaEQscUJBQXFCLEdBQUd0aEQsZUFBNUI7O0FBQ0EsSUFBSW1HLFVBQVEsR0FBR25HLFdBQWY7O0FBRUEsSUFBSW1oRCxhQUFhLEdBQUdHLHFCQUFxQixDQUFDRCxLQUExQztBQUNBLElBQUlMLHlCQUF5QixHQUFHTSxxQkFBcUIsQ0FBQ3A2QyxHQUF0RDtBQUdBOztBQUNBd0ssR0FBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsU0FBVjtBQUFxQmdCLEVBQUFBLElBQUksRUFBRTtBQUEzQixDQUFELEVBQW9DO0FBQ25DbEUsRUFBQUEsUUFBUSxFQUFFLFNBQVNBLFFBQVQsQ0FBa0I0NUMsV0FBbEIsRUFBK0JDLGFBQS9CLEVBQThDO0FBQ3RELFdBQU8sU0FBU2MsU0FBVCxDQUFtQnozQyxNQUFuQixFQUEyQm5ILEdBQTNCLEVBQWdDO0FBQ3JDcTlDLE1BQUFBLHlCQUF5QixDQUFDUSxXQUFELEVBQWNDLGFBQWQsRUFBNkJ0N0MsVUFBUSxDQUFDMkUsTUFBRCxDQUFyQyxFQUErQ3EyQyxhQUFhLENBQUN4OUMsR0FBRCxDQUE1RCxDQUF6QjtBQUNELEtBRkQ7QUFHRDtBQUxrQyxDQUFwQyxDQUFEOztBQ1JBLElBQUlULFdBQVMsR0FBR2xELFdBQWhCOztBQUNBLElBQUltRyxVQUFRLEdBQUduRyxXQUFmOzs7SUFHQVQsa0JBQUEsR0FBaUIsWUFBNkI7QUFDNUMsTUFBSTJILEdBQUcsR0FBR2YsVUFBUSxDQUFDLElBQUQsQ0FBbEI7QUFDQSxNQUFJcThDLEtBQUssR0FBR3QvQyxXQUFTLENBQUNnRSxHQUFHLENBQUNzb0IsR0FBTCxDQUFyQjs7QUFDQSxPQUFLLElBQUk1WCxDQUFDLEdBQUcsQ0FBUixFQUFXRixHQUFHLEdBQUc3VixTQUFTLENBQUNDLE1BQWhDLEVBQXdDOFYsQ0FBQyxHQUFHRixHQUE1QyxFQUFpREUsQ0FBQyxFQUFsRCxFQUFzRDtBQUNwRDRxQyxJQUFBQSxLQUFLLENBQUNoaUQsSUFBTixDQUFXMEcsR0FBWCxFQUFnQnJGLFNBQVMsQ0FBQytWLENBQUQsQ0FBekI7QUFDRDs7QUFDRCxTQUFPMVEsR0FBUDtBQUNELENBUEQ7O0FDSkEsSUFBSXdLLEdBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXFwQyxTQUFPLEdBQUdycEMsTUFBZDs7QUFDQSxJQUFJeWlELGtCQUFnQixHQUFHemlELGtCQUF2QjtBQUdBOzs7QUFDQTBSLEdBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLEtBQVY7QUFBaUJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBeEI7QUFBOEIrckIsRUFBQUEsSUFBSSxFQUFFLElBQXBDO0FBQTBDLzBCLEVBQUFBLE1BQU0sRUFBRW05QjtBQUFsRCxDQUFELEVBQThEO0FBQzdEcVosRUFBQUEsTUFBTSxFQUFFLFNBQVNBLE1BQVQsR0FBbUM7QUFDekMsV0FBT0Qsa0JBQWdCLENBQUNqekMsS0FBakIsQ0FBdUIsSUFBdkIsRUFBNkIzTixTQUE3QixDQUFQO0FBQ0Q7QUFINEQsQ0FBOUQsQ0FBRDs7QUNOQSxJQUFJNlAsR0FBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJcXBDLFNBQU8sR0FBR3JwQyxNQUFkOztBQUNBLElBQUl3NkMscUJBQW1CLEdBQUd4NkMscUJBQTFCO0FBR0E7OztBQUNBMFIsR0FBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsS0FBVjtBQUFpQm9LLEVBQUFBLEtBQUssRUFBRSxJQUF4QjtBQUE4QityQixFQUFBQSxJQUFJLEVBQUUsSUFBcEM7QUFBMEMvMEIsRUFBQUEsTUFBTSxFQUFFbTlCO0FBQWxELENBQUQsRUFBOEQ7QUFDN0RvUixFQUFBQSxTQUFTLEVBQUUsU0FBU0EsU0FBVCxHQUFzQztBQUMvQyxXQUFPRCxxQkFBbUIsQ0FBQ2hyQyxLQUFwQixDQUEwQixJQUExQixFQUFnQzNOLFNBQWhDLENBQVA7QUFDRDtBQUg0RCxDQUE5RCxDQUFEOztBQ05BLElBQUk2UCxHQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlxcEMsU0FBTyxHQUFHcnBDLE1BQWQ7O0FBQ0EsSUFBSStCLFlBQVUsR0FBRy9CLFlBQWpCOztBQUNBLElBQUlrRCxXQUFTLEdBQUdsRCxXQUFoQjs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJc3BCLG9CQUFrQixHQUFHdHBCLG9CQUF6Qjs7QUFDQSxJQUFJZ1gsU0FBTyxHQUFHaFgsU0FBZDtBQUdBOzs7QUFDQTBSLEdBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLEtBQVY7QUFBaUJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBeEI7QUFBOEIrckIsRUFBQUEsSUFBSSxFQUFFLElBQXBDO0FBQTBDLzBCLEVBQUFBLE1BQU0sRUFBRW05QjtBQUFsRCxDQUFELEVBQThEO0FBQzdEc1osRUFBQUEsVUFBVSxFQUFFLFNBQVNBLFVBQVQsQ0FBb0J4c0MsUUFBcEIsRUFBOEI7QUFDeEMsUUFBSWpQLEdBQUcsR0FBR2YsVUFBUSxDQUFDLElBQUQsQ0FBbEI7QUFDQSxRQUFJeThDLE1BQU0sR0FBRyxLQUFLdDVCLG9CQUFrQixDQUFDcGlCLEdBQUQsRUFBTW5GLFlBQVUsQ0FBQyxLQUFELENBQWhCLENBQXZCLEVBQWlEbUYsR0FBakQsQ0FBYjtBQUNBLFFBQUltekMsT0FBTyxHQUFHbjNDLFdBQVMsQ0FBQzAvQyxNQUFNLENBQUMsUUFBRCxDQUFQLENBQXZCO0FBQ0E1ckMsSUFBQUEsU0FBTyxDQUFDYixRQUFELEVBQVcsVUFBVXRWLEtBQVYsRUFBaUI7QUFDakN3NUMsTUFBQUEsT0FBTyxDQUFDNzVDLElBQVIsQ0FBYW9pRCxNQUFiLEVBQXFCL2hELEtBQXJCO0FBQ0QsS0FGTSxDQUFQO0FBR0EsV0FBTytoRCxNQUFQO0FBQ0Q7QUFUNEQsQ0FBOUQsQ0FBRDs7SUNYQXJqRCxnQkFBQSxHQUFpQixVQUFVRixFQUFWLEVBQWM7QUFDN0I7QUFDQSxTQUFPc25DLEdBQUcsQ0FBQzMrQixTQUFKLENBQWNzVixNQUFkLENBQXFCOWMsSUFBckIsQ0FBMEJuQixFQUExQixDQUFQO0FBQ0QsQ0FIRDs7QUNDQSxJQUFJcVMsR0FBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJcXBDLFNBQU8sR0FBR3JwQyxNQUFkOztBQUNBLElBQUltRyxVQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUlzUSxNQUFJLEdBQUd0USxtQkFBWDs7QUFDQSxJQUFJNmlELGdCQUFjLEdBQUc3aUQsZ0JBQXJCOztBQUNBLElBQUlnWCxTQUFPLEdBQUdoWCxTQUFkO0FBR0E7OztBQUNBMFIsR0FBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsS0FBVjtBQUFpQm9LLEVBQUFBLEtBQUssRUFBRSxJQUF4QjtBQUE4QityQixFQUFBQSxJQUFJLEVBQUUsSUFBcEM7QUFBMEMvMEIsRUFBQUEsTUFBTSxFQUFFbTlCO0FBQWxELENBQUQsRUFBOEQ7QUFDN0QvM0IsRUFBQUEsS0FBSyxFQUFFLFNBQVNBLEtBQVQsQ0FBZVA7QUFBVztBQUExQixJQUEyQztBQUNoRCxRQUFJN0osR0FBRyxHQUFHZixVQUFRLENBQUMsSUFBRCxDQUFsQjtBQUNBLFFBQUlyRCxRQUFRLEdBQUcrL0MsZ0JBQWMsQ0FBQzM3QyxHQUFELENBQTdCO0FBQ0EsUUFBSStKLGFBQWEsR0FBR1gsTUFBSSxDQUFDUyxVQUFELEVBQWFsUCxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJELFNBQVMsQ0FBQyxDQUFELENBQWhDLEdBQXNDVCxTQUFuRCxFQUE4RCxDQUE5RCxDQUF4QjtBQUNBLFdBQU8sQ0FBQzRWLFNBQU8sQ0FBQ2xVLFFBQUQsRUFBVyxVQUFVakMsS0FBVixFQUFpQjhWLElBQWpCLEVBQXVCO0FBQy9DLFVBQUksQ0FBQzFGLGFBQWEsQ0FBQ3BRLEtBQUQsRUFBUUEsS0FBUixFQUFlcUcsR0FBZixDQUFsQixFQUF1QyxPQUFPeVAsSUFBSSxFQUFYO0FBQ3hDLEtBRmMsRUFFWjtBQUFFTCxNQUFBQSxXQUFXLEVBQUUsSUFBZjtBQUFxQkMsTUFBQUEsV0FBVyxFQUFFO0FBQWxDLEtBRlksQ0FBUCxDQUVxQ0wsT0FGN0M7QUFHRDtBQVI0RCxDQUE5RCxDQUFEOztBQ1RBLElBQUl4RSxHQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlxcEMsU0FBTyxHQUFHcnBDLE1BQWQ7O0FBQ0EsSUFBSStCLFlBQVUsR0FBRy9CLFlBQWpCOztBQUNBLElBQUlrRCxXQUFTLEdBQUdsRCxXQUFoQjs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJc1EsTUFBSSxHQUFHdFEsbUJBQVg7O0FBQ0EsSUFBSXNwQixvQkFBa0IsR0FBR3RwQixvQkFBekI7O0FBQ0EsSUFBSTZpRCxnQkFBYyxHQUFHN2lELGdCQUFyQjs7QUFDQSxJQUFJZ1gsU0FBTyxHQUFHaFgsU0FBZDtBQUdBOzs7QUFDQTBSLEdBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLEtBQVY7QUFBaUJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBeEI7QUFBOEIrckIsRUFBQUEsSUFBSSxFQUFFLElBQXBDO0FBQTBDLzBCLEVBQUFBLE1BQU0sRUFBRW05QjtBQUFsRCxDQUFELEVBQThEO0FBQzdEajRCLEVBQUFBLE1BQU0sRUFBRSxTQUFTQSxNQUFULENBQWdCTDtBQUFXO0FBQTNCLElBQTRDO0FBQ2xELFFBQUk3SixHQUFHLEdBQUdmLFVBQVEsQ0FBQyxJQUFELENBQWxCO0FBQ0EsUUFBSXJELFFBQVEsR0FBRysvQyxnQkFBYyxDQUFDMzdDLEdBQUQsQ0FBN0I7QUFDQSxRQUFJK0osYUFBYSxHQUFHWCxNQUFJLENBQUNTLFVBQUQsRUFBYWxQLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUF1QkQsU0FBUyxDQUFDLENBQUQsQ0FBaEMsR0FBc0NULFNBQW5ELEVBQThELENBQTlELENBQXhCO0FBQ0EsUUFBSXdoRCxNQUFNLEdBQUcsS0FBS3Q1QixvQkFBa0IsQ0FBQ3BpQixHQUFELEVBQU1uRixZQUFVLENBQUMsS0FBRCxDQUFoQixDQUF2QixHQUFiO0FBQ0EsUUFBSXlnRCxLQUFLLEdBQUd0L0MsV0FBUyxDQUFDMC9DLE1BQU0sQ0FBQ3B6QixHQUFSLENBQXJCO0FBQ0F4WSxJQUFBQSxTQUFPLENBQUNsVSxRQUFELEVBQVcsVUFBVWpDLEtBQVYsRUFBaUI7QUFDakMsVUFBSW9RLGFBQWEsQ0FBQ3BRLEtBQUQsRUFBUUEsS0FBUixFQUFlcUcsR0FBZixDQUFqQixFQUFzQ3M3QyxLQUFLLENBQUNoaUQsSUFBTixDQUFXb2lELE1BQVgsRUFBbUIvaEQsS0FBbkI7QUFDdkMsS0FGTSxFQUVKO0FBQUV5VixNQUFBQSxXQUFXLEVBQUU7QUFBZixLQUZJLENBQVA7QUFHQSxXQUFPc3NDLE1BQVA7QUFDRDtBQVg0RCxDQUE5RCxDQUFEOztBQ1pBLElBQUlseEMsR0FBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJcXBDLFNBQU8sR0FBR3JwQyxNQUFkOztBQUNBLElBQUltRyxVQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUlzUSxNQUFJLEdBQUd0USxtQkFBWDs7QUFDQSxJQUFJNmlELGdCQUFjLEdBQUc3aUQsZ0JBQXJCOztBQUNBLElBQUlnWCxTQUFPLEdBQUdoWCxTQUFkO0FBR0E7OztBQUNBMFIsR0FBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsS0FBVjtBQUFpQm9LLEVBQUFBLEtBQUssRUFBRSxJQUF4QjtBQUE4QityQixFQUFBQSxJQUFJLEVBQUUsSUFBcEM7QUFBMEMvMEIsRUFBQUEsTUFBTSxFQUFFbTlCO0FBQWxELENBQUQsRUFBOEQ7QUFDN0Q5M0IsRUFBQUEsSUFBSSxFQUFFLFNBQVNBLElBQVQsQ0FBY1I7QUFBVztBQUF6QixJQUEwQztBQUM5QyxRQUFJN0osR0FBRyxHQUFHZixVQUFRLENBQUMsSUFBRCxDQUFsQjtBQUNBLFFBQUlyRCxRQUFRLEdBQUcrL0MsZ0JBQWMsQ0FBQzM3QyxHQUFELENBQTdCO0FBQ0EsUUFBSStKLGFBQWEsR0FBR1gsTUFBSSxDQUFDUyxVQUFELEVBQWFsUCxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJELFNBQVMsQ0FBQyxDQUFELENBQWhDLEdBQXNDVCxTQUFuRCxFQUE4RCxDQUE5RCxDQUF4QjtBQUNBLFdBQU80VixTQUFPLENBQUNsVSxRQUFELEVBQVcsVUFBVWpDLEtBQVYsRUFBaUI4VixJQUFqQixFQUF1QjtBQUM5QyxVQUFJMUYsYUFBYSxDQUFDcFEsS0FBRCxFQUFRQSxLQUFSLEVBQWVxRyxHQUFmLENBQWpCLEVBQXNDLE9BQU95UCxJQUFJLENBQUM5VixLQUFELENBQVg7QUFDdkMsS0FGYSxFQUVYO0FBQUV5VixNQUFBQSxXQUFXLEVBQUUsSUFBZjtBQUFxQkMsTUFBQUEsV0FBVyxFQUFFO0FBQWxDLEtBRlcsQ0FBUCxDQUVzQ25SLE1BRjdDO0FBR0Q7QUFSNEQsQ0FBOUQsQ0FBRDs7QUNWQSxJQUFJc00sR0FBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJa1osTUFBSSxHQUFHbFosY0FBWDtBQUdBOzs7QUFDQTBSLEdBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLEtBQVY7QUFBaUJnQixFQUFBQSxJQUFJLEVBQUU7QUFBdkIsQ0FBRCxFQUFnQztBQUMvQm9OLEVBQUFBLElBQUksRUFBRUE7QUFEeUIsQ0FBaEMsQ0FBRDs7QUNKQSxJQUFJeEgsR0FBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJcXBDLFNBQU8sR0FBR3JwQyxNQUFkOztBQUNBLElBQUkrQixZQUFVLEdBQUcvQixZQUFqQjs7QUFDQSxJQUFJa0QsV0FBUyxHQUFHbEQsV0FBaEI7O0FBQ0EsSUFBSW1HLFVBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSXNwQixvQkFBa0IsR0FBR3RwQixvQkFBekI7O0FBQ0EsSUFBSWdYLFNBQU8sR0FBR2hYLFNBQWQ7QUFHQTs7O0FBQ0EwUixHQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxLQUFWO0FBQWlCb0ssRUFBQUEsS0FBSyxFQUFFLElBQXhCO0FBQThCK3JCLEVBQUFBLElBQUksRUFBRSxJQUFwQztBQUEwQy8wQixFQUFBQSxNQUFNLEVBQUVtOUI7QUFBbEQsQ0FBRCxFQUE4RDtBQUM3RHlaLEVBQUFBLFlBQVksRUFBRSxTQUFTQSxZQUFULENBQXNCM3NDLFFBQXRCLEVBQWdDO0FBQzVDLFFBQUlqUCxHQUFHLEdBQUdmLFVBQVEsQ0FBQyxJQUFELENBQWxCO0FBQ0EsUUFBSXk4QyxNQUFNLEdBQUcsS0FBS3Q1QixvQkFBa0IsQ0FBQ3BpQixHQUFELEVBQU1uRixZQUFVLENBQUMsS0FBRCxDQUFoQixDQUF2QixHQUFiO0FBQ0EsUUFBSWdoRCxRQUFRLEdBQUc3L0MsV0FBUyxDQUFDZ0UsR0FBRyxDQUFDQyxHQUFMLENBQXhCO0FBQ0EsUUFBSXE3QyxLQUFLLEdBQUd0L0MsV0FBUyxDQUFDMC9DLE1BQU0sQ0FBQ3B6QixHQUFSLENBQXJCO0FBQ0F4WSxJQUFBQSxTQUFPLENBQUNiLFFBQUQsRUFBVyxVQUFVdFYsS0FBVixFQUFpQjtBQUNqQyxVQUFJa2lELFFBQVEsQ0FBQ3ZpRCxJQUFULENBQWMwRyxHQUFkLEVBQW1CckcsS0FBbkIsQ0FBSixFQUErQjJoRCxLQUFLLENBQUNoaUQsSUFBTixDQUFXb2lELE1BQVgsRUFBbUIvaEQsS0FBbkI7QUFDaEMsS0FGTSxDQUFQO0FBR0EsV0FBTytoRCxNQUFQO0FBQ0Q7QUFWNEQsQ0FBOUQsQ0FBRDs7QUNWQSxJQUFJbHhDLEdBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXFwQyxTQUFPLEdBQUdycEMsTUFBZDs7QUFDQSxJQUFJa0QsV0FBUyxHQUFHbEQsV0FBaEI7O0FBQ0EsSUFBSW1HLFVBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSWdYLFNBQU8sR0FBR2hYLFNBQWQ7QUFHQTs7O0FBQ0EwUixHQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxLQUFWO0FBQWlCb0ssRUFBQUEsS0FBSyxFQUFFLElBQXhCO0FBQThCK3JCLEVBQUFBLElBQUksRUFBRSxJQUFwQztBQUEwQy8wQixFQUFBQSxNQUFNLEVBQUVtOUI7QUFBbEQsQ0FBRCxFQUE4RDtBQUM3RDJaLEVBQUFBLGNBQWMsRUFBRSxTQUFTQSxjQUFULENBQXdCN3NDLFFBQXhCLEVBQWtDO0FBQ2hELFFBQUlqUCxHQUFHLEdBQUdmLFVBQVEsQ0FBQyxJQUFELENBQWxCO0FBQ0EsUUFBSTQ4QyxRQUFRLEdBQUc3L0MsV0FBUyxDQUFDZ0UsR0FBRyxDQUFDQyxHQUFMLENBQXhCO0FBQ0EsV0FBTyxDQUFDNlAsU0FBTyxDQUFDYixRQUFELEVBQVcsVUFBVXRWLEtBQVYsRUFBaUI4VixJQUFqQixFQUF1QjtBQUMvQyxVQUFJb3NDLFFBQVEsQ0FBQ3ZpRCxJQUFULENBQWMwRyxHQUFkLEVBQW1CckcsS0FBbkIsTUFBOEIsSUFBbEMsRUFBd0MsT0FBTzhWLElBQUksRUFBWDtBQUN6QyxLQUZjLEVBRVo7QUFBRUosTUFBQUEsV0FBVyxFQUFFO0FBQWYsS0FGWSxDQUFQLENBRWtCTCxPQUYxQjtBQUdEO0FBUDRELENBQTlELENBQUQ7O0FDUkEsSUFBSXhFLEdBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXFwQyxTQUFPLEdBQUdycEMsTUFBZDs7QUFDQSxJQUFJK0IsWUFBVSxHQUFHL0IsWUFBakI7O0FBQ0EsSUFBSWtELFdBQVMsR0FBR2xELFdBQWhCOztBQUNBLElBQUl5QixZQUFVLEdBQUd6QixZQUFqQjs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJK1YsYUFBVyxHQUFHL1YsYUFBbEI7O0FBQ0EsSUFBSWdYLFNBQU8sR0FBR2hYLFNBQWQ7QUFHQTs7O0FBQ0EwUixHQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxLQUFWO0FBQWlCb0ssRUFBQUEsS0FBSyxFQUFFLElBQXhCO0FBQThCK3JCLEVBQUFBLElBQUksRUFBRSxJQUFwQztBQUEwQy8wQixFQUFBQSxNQUFNLEVBQUVtOUI7QUFBbEQsQ0FBRCxFQUE4RDtBQUM3RDRaLEVBQUFBLFVBQVUsRUFBRSxTQUFTQSxVQUFULENBQW9COXNDLFFBQXBCLEVBQThCO0FBQ3hDLFFBQUlyVCxRQUFRLEdBQUdpVCxhQUFXLENBQUMsSUFBRCxDQUExQjtBQUNBLFFBQUltdEMsUUFBUSxHQUFHLzhDLFVBQVEsQ0FBQ2dRLFFBQUQsQ0FBdkI7QUFDQSxRQUFJNHNDLFFBQVEsR0FBR0csUUFBUSxDQUFDLzdDLEdBQXhCOztBQUNBLFFBQUksQ0FBQzFGLFlBQVUsQ0FBQ3NoRCxRQUFELENBQWYsRUFBMkI7QUFDekJHLE1BQUFBLFFBQVEsR0FBRyxLQUFLbmhELFlBQVUsQ0FBQyxLQUFELENBQWYsRUFBd0JvVSxRQUF4QixDQUFYO0FBQ0E0c0MsTUFBQUEsUUFBUSxHQUFHNy9DLFdBQVMsQ0FBQ2dnRCxRQUFRLENBQUMvN0MsR0FBVixDQUFwQjtBQUNEOztBQUNELFdBQU8sQ0FBQzZQLFNBQU8sQ0FBQ2xVLFFBQUQsRUFBVyxVQUFVakMsS0FBVixFQUFpQjhWLElBQWpCLEVBQXVCO0FBQy9DLFVBQUlvc0MsUUFBUSxDQUFDdmlELElBQVQsQ0FBYzBpRCxRQUFkLEVBQXdCcmlELEtBQXhCLE1BQW1DLEtBQXZDLEVBQThDLE9BQU84VixJQUFJLEVBQVg7QUFDL0MsS0FGYyxFQUVaO0FBQUVMLE1BQUFBLFdBQVcsRUFBRSxJQUFmO0FBQXFCQyxNQUFBQSxXQUFXLEVBQUU7QUFBbEMsS0FGWSxDQUFQLENBRXFDTCxPQUY3QztBQUdEO0FBWjRELENBQTlELENBQUQ7O0FDWEEsSUFBSXhFLEdBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXFwQyxTQUFPLEdBQUdycEMsTUFBZDs7QUFDQSxJQUFJa0QsV0FBUyxHQUFHbEQsV0FBaEI7O0FBQ0EsSUFBSW1HLFVBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSWdYLFNBQU8sR0FBR2hYLFNBQWQ7QUFHQTs7O0FBQ0EwUixHQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxLQUFWO0FBQWlCb0ssRUFBQUEsS0FBSyxFQUFFLElBQXhCO0FBQThCK3JCLEVBQUFBLElBQUksRUFBRSxJQUFwQztBQUEwQy8wQixFQUFBQSxNQUFNLEVBQUVtOUI7QUFBbEQsQ0FBRCxFQUE4RDtBQUM3RDhaLEVBQUFBLFlBQVksRUFBRSxTQUFTQSxZQUFULENBQXNCaHRDLFFBQXRCLEVBQWdDO0FBQzVDLFFBQUlqUCxHQUFHLEdBQUdmLFVBQVEsQ0FBQyxJQUFELENBQWxCO0FBQ0EsUUFBSTQ4QyxRQUFRLEdBQUc3L0MsV0FBUyxDQUFDZ0UsR0FBRyxDQUFDQyxHQUFMLENBQXhCO0FBQ0EsV0FBTyxDQUFDNlAsU0FBTyxDQUFDYixRQUFELEVBQVcsVUFBVXRWLEtBQVYsRUFBaUI4VixJQUFqQixFQUF1QjtBQUMvQyxVQUFJb3NDLFFBQVEsQ0FBQ3ZpRCxJQUFULENBQWMwRyxHQUFkLEVBQW1CckcsS0FBbkIsTUFBOEIsS0FBbEMsRUFBeUMsT0FBTzhWLElBQUksRUFBWDtBQUMxQyxLQUZjLEVBRVo7QUFBRUosTUFBQUEsV0FBVyxFQUFFO0FBQWYsS0FGWSxDQUFQLENBRWtCTCxPQUYxQjtBQUdEO0FBUDRELENBQTlELENBQUQ7O0FDUkEsSUFBSXhFLEdBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXFwQyxTQUFPLEdBQUdycEMsTUFBZDs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJNmlELGdCQUFjLEdBQUc3aUQsZ0JBQXJCOztBQUNBLElBQUlnWCxTQUFPLEdBQUdoWCxTQUFkO0FBR0E7OztBQUNBMFIsR0FBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsS0FBVjtBQUFpQm9LLEVBQUFBLEtBQUssRUFBRSxJQUF4QjtBQUE4QityQixFQUFBQSxJQUFJLEVBQUUsSUFBcEM7QUFBMEMvMEIsRUFBQUEsTUFBTSxFQUFFbTlCO0FBQWxELENBQUQsRUFBOEQ7QUFDN0RyZ0MsRUFBQUEsSUFBSSxFQUFFLFNBQVNBLElBQVQsQ0FBY29WLFNBQWQsRUFBeUI7QUFDN0IsUUFBSWxYLEdBQUcsR0FBR2YsVUFBUSxDQUFDLElBQUQsQ0FBbEI7QUFDQSxRQUFJckQsUUFBUSxHQUFHKy9DLGdCQUFjLENBQUMzN0MsR0FBRCxDQUE3QjtBQUNBLFFBQUlrOEMsR0FBRyxHQUFHaGxDLFNBQVMsS0FBS2hkLFNBQWQsR0FBMEIsR0FBMUIsR0FBZ0N1QixNQUFNLENBQUN5YixTQUFELENBQWhEO0FBQ0EsUUFBSWhaLE1BQU0sR0FBRyxFQUFiO0FBQ0E0UixJQUFBQSxTQUFPLENBQUNsVSxRQUFELEVBQVdzQyxNQUFNLENBQUNyQixJQUFsQixFQUF3QjtBQUFFc0wsTUFBQUEsSUFBSSxFQUFFakssTUFBUjtBQUFnQmtSLE1BQUFBLFdBQVcsRUFBRTtBQUE3QixLQUF4QixDQUFQO0FBQ0EsV0FBT2xSLE1BQU0sQ0FBQzRELElBQVAsQ0FBWW82QyxHQUFaLENBQVA7QUFDRDtBQVI0RCxDQUE5RCxDQUFEOztBQ1JBLElBQUkxeEMsR0FBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJcXBDLFNBQU8sR0FBR3JwQyxNQUFkOztBQUNBLElBQUkrQixZQUFVLEdBQUcvQixZQUFqQjs7QUFDQSxJQUFJa0QsV0FBUyxHQUFHbEQsV0FBaEI7O0FBQ0EsSUFBSW1HLFVBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSXNRLE1BQUksR0FBR3RRLG1CQUFYOztBQUNBLElBQUlzcEIsb0JBQWtCLEdBQUd0cEIsb0JBQXpCOztBQUNBLElBQUk2aUQsZ0JBQWMsR0FBRzdpRCxnQkFBckI7O0FBQ0EsSUFBSWdYLFNBQU8sR0FBR2hYLFNBQWQ7QUFHQTs7O0FBQ0EwUixHQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxLQUFWO0FBQWlCb0ssRUFBQUEsS0FBSyxFQUFFLElBQXhCO0FBQThCK3JCLEVBQUFBLElBQUksRUFBRSxJQUFwQztBQUEwQy8wQixFQUFBQSxNQUFNLEVBQUVtOUI7QUFBbEQsQ0FBRCxFQUE4RDtBQUM3RGw0QixFQUFBQSxHQUFHLEVBQUUsU0FBU0EsR0FBVCxDQUFhSjtBQUFXO0FBQXhCLElBQXlDO0FBQzVDLFFBQUk3SixHQUFHLEdBQUdmLFVBQVEsQ0FBQyxJQUFELENBQWxCO0FBQ0EsUUFBSXJELFFBQVEsR0FBRysvQyxnQkFBYyxDQUFDMzdDLEdBQUQsQ0FBN0I7QUFDQSxRQUFJK0osYUFBYSxHQUFHWCxNQUFJLENBQUNTLFVBQUQsRUFBYWxQLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUF1QkQsU0FBUyxDQUFDLENBQUQsQ0FBaEMsR0FBc0NULFNBQW5ELEVBQThELENBQTlELENBQXhCO0FBQ0EsUUFBSXdoRCxNQUFNLEdBQUcsS0FBS3Q1QixvQkFBa0IsQ0FBQ3BpQixHQUFELEVBQU1uRixZQUFVLENBQUMsS0FBRCxDQUFoQixDQUF2QixHQUFiO0FBQ0EsUUFBSXlnRCxLQUFLLEdBQUd0L0MsV0FBUyxDQUFDMC9DLE1BQU0sQ0FBQ3B6QixHQUFSLENBQXJCO0FBQ0F4WSxJQUFBQSxTQUFPLENBQUNsVSxRQUFELEVBQVcsVUFBVWpDLEtBQVYsRUFBaUI7QUFDakMyaEQsTUFBQUEsS0FBSyxDQUFDaGlELElBQU4sQ0FBV29pRCxNQUFYLEVBQW1CM3hDLGFBQWEsQ0FBQ3BRLEtBQUQsRUFBUUEsS0FBUixFQUFlcUcsR0FBZixDQUFoQztBQUNELEtBRk0sRUFFSjtBQUFFb1AsTUFBQUEsV0FBVyxFQUFFO0FBQWYsS0FGSSxDQUFQO0FBR0EsV0FBT3NzQyxNQUFQO0FBQ0Q7QUFYNEQsQ0FBOUQsQ0FBRDs7QUNiQSxJQUFJbHhDLEdBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXllLElBQUUsR0FBR3plLFlBQVQ7QUFHQTs7O0FBQ0EwUixHQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxLQUFWO0FBQWlCZ0IsRUFBQUEsSUFBSSxFQUFFO0FBQXZCLENBQUQsRUFBZ0M7QUFDL0IyUyxFQUFBQSxFQUFFLEVBQUVBO0FBRDJCLENBQWhDLENBQUQ7O0FDSkEsSUFBSS9NLEdBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXFwQyxTQUFPLEdBQUdycEMsTUFBZDs7QUFDQSxJQUFJa0QsV0FBUyxHQUFHbEQsV0FBaEI7O0FBQ0EsSUFBSW1HLFVBQVEsR0FBR25HLFdBQWY7O0FBQ0EsSUFBSTZpRCxnQkFBYyxHQUFHN2lELGdCQUFyQjs7QUFDQSxJQUFJZ1gsU0FBTyxHQUFHaFgsU0FBZDtBQUdBOzs7QUFDQTBSLEdBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLEtBQVY7QUFBaUJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBeEI7QUFBOEIrckIsRUFBQUEsSUFBSSxFQUFFLElBQXBDO0FBQTBDLzBCLEVBQUFBLE1BQU0sRUFBRW05QjtBQUFsRCxDQUFELEVBQThEO0FBQzdEbnFCLEVBQUFBLE1BQU0sRUFBRSxTQUFTQSxNQUFULENBQWdCbk87QUFBVztBQUEzQixJQUFpRDtBQUN2RCxRQUFJN0osR0FBRyxHQUFHZixVQUFRLENBQUMsSUFBRCxDQUFsQjtBQUNBLFFBQUlyRCxRQUFRLEdBQUcrL0MsZ0JBQWMsQ0FBQzM3QyxHQUFELENBQTdCO0FBQ0EsUUFBSWd4QyxTQUFTLEdBQUdyMkMsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5DO0FBQ0EsUUFBSXEyQyxXQUFXLEdBQUdELFNBQVMsR0FBRzkyQyxTQUFILEdBQWVTLFNBQVMsQ0FBQyxDQUFELENBQW5EO0FBQ0FxQixJQUFBQSxXQUFTLENBQUM2TixVQUFELENBQVQ7QUFDQWlHLElBQUFBLFNBQU8sQ0FBQ2xVLFFBQUQsRUFBVyxVQUFVakMsS0FBVixFQUFpQjtBQUNqQyxVQUFJcTNDLFNBQUosRUFBZTtBQUNiQSxRQUFBQSxTQUFTLEdBQUcsS0FBWjtBQUNBQyxRQUFBQSxXQUFXLEdBQUd0M0MsS0FBZDtBQUNELE9BSEQsTUFHTztBQUNMczNDLFFBQUFBLFdBQVcsR0FBR3BuQyxVQUFVLENBQUNvbkMsV0FBRCxFQUFjdDNDLEtBQWQsRUFBcUJBLEtBQXJCLEVBQTRCcUcsR0FBNUIsQ0FBeEI7QUFDRDtBQUNGLEtBUE0sRUFPSjtBQUFFb1AsTUFBQUEsV0FBVyxFQUFFO0FBQWYsS0FQSSxDQUFQO0FBUUEsUUFBSTRoQyxTQUFKLEVBQWUsTUFBTTcyQyxTQUFTLENBQUMsMkNBQUQsQ0FBZjtBQUNmLFdBQU84MkMsV0FBUDtBQUNEO0FBakI0RCxDQUE5RCxDQUFEOztBQ1RBLElBQUl6bUMsR0FBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJcXBDLFNBQU8sR0FBR3JwQyxNQUFkOztBQUNBLElBQUltRyxVQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUlzUSxNQUFJLEdBQUd0USxtQkFBWDs7QUFDQSxJQUFJNmlELGNBQWMsR0FBRzdpRCxnQkFBckI7O0FBQ0EsSUFBSWdYLFNBQU8sR0FBR2hYLFNBQWQ7QUFHQTs7O0FBQ0EwUixHQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxLQUFWO0FBQWlCb0ssRUFBQUEsS0FBSyxFQUFFLElBQXhCO0FBQThCK3JCLEVBQUFBLElBQUksRUFBRSxJQUFwQztBQUEwQy8wQixFQUFBQSxNQUFNLEVBQUVtOUI7QUFBbEQsQ0FBRCxFQUE4RDtBQUM3RGg0QixFQUFBQSxJQUFJLEVBQUUsU0FBU0EsSUFBVCxDQUFjTjtBQUFXO0FBQXpCLElBQTBDO0FBQzlDLFFBQUk3SixHQUFHLEdBQUdmLFVBQVEsQ0FBQyxJQUFELENBQWxCO0FBQ0EsUUFBSXJELFFBQVEsR0FBRysvQyxjQUFjLENBQUMzN0MsR0FBRCxDQUE3QjtBQUNBLFFBQUkrSixhQUFhLEdBQUdYLE1BQUksQ0FBQ1MsVUFBRCxFQUFhbFAsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBbkQsRUFBOEQsQ0FBOUQsQ0FBeEI7QUFDQSxXQUFPNFYsU0FBTyxDQUFDbFUsUUFBRCxFQUFXLFVBQVVqQyxLQUFWLEVBQWlCOFYsSUFBakIsRUFBdUI7QUFDOUMsVUFBSTFGLGFBQWEsQ0FBQ3BRLEtBQUQsRUFBUUEsS0FBUixFQUFlcUcsR0FBZixDQUFqQixFQUFzQyxPQUFPeVAsSUFBSSxFQUFYO0FBQ3ZDLEtBRmEsRUFFWDtBQUFFTCxNQUFBQSxXQUFXLEVBQUUsSUFBZjtBQUFxQkMsTUFBQUEsV0FBVyxFQUFFO0FBQWxDLEtBRlcsQ0FBUCxDQUVzQ0wsT0FGN0M7QUFHRDtBQVI0RCxDQUE5RCxDQUFEOztBQ1RBLElBQUl4RSxHQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlxcEMsU0FBTyxHQUFHcnBDLE1BQWQ7O0FBQ0EsSUFBSStCLFlBQVUsR0FBRy9CLFlBQWpCOztBQUNBLElBQUlrRCxXQUFTLEdBQUdsRCxXQUFoQjs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJc3BCLG9CQUFrQixHQUFHdHBCLG9CQUF6Qjs7QUFDQSxJQUFJZ1gsU0FBTyxHQUFHaFgsU0FBZDtBQUdBOzs7QUFDQTBSLEdBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLEtBQVY7QUFBaUJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBeEI7QUFBOEIrckIsRUFBQUEsSUFBSSxFQUFFLElBQXBDO0FBQTBDLzBCLEVBQUFBLE1BQU0sRUFBRW05QjtBQUFsRCxDQUFELEVBQThEO0FBQzdEZ2EsRUFBQUEsbUJBQW1CLEVBQUUsU0FBU0EsbUJBQVQsQ0FBNkJsdEMsUUFBN0IsRUFBdUM7QUFDMUQsUUFBSWpQLEdBQUcsR0FBR2YsVUFBUSxDQUFDLElBQUQsQ0FBbEI7QUFDQSxRQUFJeThDLE1BQU0sR0FBRyxLQUFLdDVCLG9CQUFrQixDQUFDcGlCLEdBQUQsRUFBTW5GLFlBQVUsQ0FBQyxLQUFELENBQWhCLENBQXZCLEVBQWlEbUYsR0FBakQsQ0FBYjtBQUNBLFFBQUltekMsT0FBTyxHQUFHbjNDLFdBQVMsQ0FBQzAvQyxNQUFNLENBQUMsUUFBRCxDQUFQLENBQXZCO0FBQ0EsUUFBSUosS0FBSyxHQUFHdC9DLFdBQVMsQ0FBQzAvQyxNQUFNLENBQUNwekIsR0FBUixDQUFyQjtBQUNBeFksSUFBQUEsU0FBTyxDQUFDYixRQUFELEVBQVcsVUFBVXRWLEtBQVYsRUFBaUI7QUFDakN3NUMsTUFBQUEsT0FBTyxDQUFDNzVDLElBQVIsQ0FBYW9pRCxNQUFiLEVBQXFCL2hELEtBQXJCLEtBQStCMmhELEtBQUssQ0FBQ2hpRCxJQUFOLENBQVdvaUQsTUFBWCxFQUFtQi9oRCxLQUFuQixDQUEvQjtBQUNELEtBRk0sQ0FBUDtBQUdBLFdBQU8raEQsTUFBUDtBQUNEO0FBVjRELENBQTlELENBQUQ7O0FDVkEsSUFBSWx4QyxHQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlxcEMsU0FBTyxHQUFHcnBDLE1BQWQ7O0FBQ0EsSUFBSStCLFlBQVUsR0FBRy9CLFlBQWpCOztBQUNBLElBQUlrRCxTQUFTLEdBQUdsRCxXQUFoQjs7QUFDQSxJQUFJbUcsVUFBUSxHQUFHbkcsV0FBZjs7QUFDQSxJQUFJc3BCLGtCQUFrQixHQUFHdHBCLG9CQUF6Qjs7QUFDQSxJQUFJZ1gsT0FBTyxHQUFHaFgsU0FBZDtBQUdBOzs7QUFDQTBSLEdBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLEtBQVY7QUFBaUJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBeEI7QUFBOEIrckIsRUFBQUEsSUFBSSxFQUFFLElBQXBDO0FBQTBDLzBCLEVBQUFBLE1BQU0sRUFBRW05QjtBQUFsRCxDQUFELEVBQThEO0FBQzdEaWEsRUFBQUEsS0FBSyxFQUFFLFNBQVNBLEtBQVQsQ0FBZW50QyxRQUFmLEVBQXlCO0FBQzlCLFFBQUlqUCxHQUFHLEdBQUdmLFVBQVEsQ0FBQyxJQUFELENBQWxCO0FBQ0EsUUFBSXk4QyxNQUFNLEdBQUcsS0FBS3Q1QixrQkFBa0IsQ0FBQ3BpQixHQUFELEVBQU1uRixZQUFVLENBQUMsS0FBRCxDQUFoQixDQUF2QixFQUFpRG1GLEdBQWpELENBQWI7QUFDQThQLElBQUFBLE9BQU8sQ0FBQ2IsUUFBRCxFQUFXalQsU0FBUyxDQUFDMC9DLE1BQU0sQ0FBQ3B6QixHQUFSLENBQXBCLEVBQWtDO0FBQUVuZ0IsTUFBQUEsSUFBSSxFQUFFdXpDO0FBQVIsS0FBbEMsQ0FBUDtBQUNBLFdBQU9BLE1BQVA7QUFDRDtBQU40RCxDQUE5RCxDQUFEOztBQ1ZBLElBQUlseEMsR0FBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJc2hCLFFBQU0sR0FBR3RoQixlQUFBLENBQXlDc2hCLE1BQXREOztBQUNBLElBQUl2aEIsT0FBSyxHQUFHQyxRQUFaOztBQUVBLElBQUkrTCxRQUFNLEdBQUdoTSxPQUFLLENBQUMsWUFBWTtBQUM3QixTQUFPLEtBQUswWCxFQUFMLENBQVEsQ0FBUixNQUFlLElBQXRCO0FBQ0QsQ0FGaUIsQ0FBbEI7QUFLQTs7QUFDQS9GLEdBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFFBQVY7QUFBb0JvSyxFQUFBQSxLQUFLLEVBQUUsSUFBM0I7QUFBaUNoSixFQUFBQSxNQUFNLEVBQUVIO0FBQXpDLENBQUQsRUFBb0Q7QUFDbkQwTCxFQUFBQSxFQUFFLEVBQUUsU0FBU0EsRUFBVCxDQUFZb3ZCLEdBQVosRUFBaUI7QUFDbkIsV0FBT3ZsQixRQUFNLENBQUMsSUFBRCxFQUFPdWxCLEdBQVAsQ0FBYjtBQUNEO0FBSGtELENBQXBELENBQUQ7O0FDVkEsSUFBSW4xQixHQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUkwYywyQkFBeUIsR0FBRzFjLDJCQUFoQzs7QUFDQSxJQUFJdUIsc0JBQXNCLEdBQUd2Qix3QkFBN0I7O0FBQ0EsSUFBSWdCLFFBQVEsR0FBR2hCLFVBQWY7O0FBQ0EsSUFBSXFJLHFCQUFtQixHQUFHckksYUFBMUI7O0FBQ0EsSUFBSXVqRCxxQkFBcUIsR0FBR3ZqRCxlQUE1Qjs7QUFFQSxJQUFJZ25DLFFBQU0sR0FBR3VjLHFCQUFxQixDQUFDdmMsTUFBbkM7QUFDQSxJQUFJMWxCLE1BQU0sR0FBR2lpQyxxQkFBcUIsQ0FBQ2ppQyxNQUFuQztBQUNBLElBQUkybUIsZUFBZSxHQUFHLGlCQUF0QjtBQUNBLElBQUk5MUIsa0JBQWdCLEdBQUc5SixxQkFBbUIsQ0FBQ25CLEdBQTNDO0FBQ0EsSUFBSXFCLGdCQUFnQixHQUFHRixxQkFBbUIsQ0FBQ2hCLFNBQXBCLENBQThCNGdDLGVBQTlCLENBQXZCOztBQUdBLElBQUl1YixlQUFlLEdBQUc5bUMsMkJBQXlCLENBQUMsU0FBUyttQyxjQUFULENBQXdCbDRDLE1BQXhCLEVBQWdDO0FBQzlFNEcsRUFBQUEsa0JBQWdCLENBQUMsSUFBRCxFQUFPO0FBQ3JCM0ssSUFBQUEsSUFBSSxFQUFFeWdDLGVBRGU7QUFFckIxOEIsSUFBQUEsTUFBTSxFQUFFQSxNQUZhO0FBR3JCaEMsSUFBQUEsS0FBSyxFQUFFO0FBSGMsR0FBUCxDQUFoQjtBQUtELENBTjhDLEVBTTVDLFFBTjRDLEVBTWxDLFNBQVNrTixJQUFULEdBQWdCO0FBQzNCLE1BQUlsUCxLQUFLLEdBQUdnQixnQkFBZ0IsQ0FBQyxJQUFELENBQTVCO0FBQ0EsTUFBSWdELE1BQU0sR0FBR2hFLEtBQUssQ0FBQ2dFLE1BQW5CO0FBQ0EsTUFBSWhDLEtBQUssR0FBR2hDLEtBQUssQ0FBQ2dDLEtBQWxCO0FBQ0EsTUFBSTIrQixLQUFKO0FBQ0EsTUFBSTMrQixLQUFLLElBQUlnQyxNQUFNLENBQUN6SixNQUFwQixFQUE0QixPQUFPO0FBQUVqQixJQUFBQSxLQUFLLEVBQUVPLFNBQVQ7QUFBb0IwVixJQUFBQSxJQUFJLEVBQUU7QUFBMUIsR0FBUDtBQUM1Qm94QixFQUFBQSxLQUFLLEdBQUc1bUIsTUFBTSxDQUFDL1YsTUFBRCxFQUFTaEMsS0FBVCxDQUFkO0FBQ0FoQyxFQUFBQSxLQUFLLENBQUNnQyxLQUFOLElBQWUyK0IsS0FBSyxDQUFDcG1DLE1BQXJCO0FBQ0EsU0FBTztBQUFFakIsSUFBQUEsS0FBSyxFQUFFO0FBQUU2aUQsTUFBQUEsU0FBUyxFQUFFMWMsUUFBTSxDQUFDa0IsS0FBRCxFQUFRLENBQVIsQ0FBbkI7QUFBK0JwQixNQUFBQSxRQUFRLEVBQUV2OUI7QUFBekMsS0FBVDtBQUEyRHVOLElBQUFBLElBQUksRUFBRTtBQUFqRSxHQUFQO0FBQ0QsQ0FmOEMsQ0FBL0M7QUFrQkE7O0FBQ0FwRixHQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxRQUFWO0FBQW9Cb0ssRUFBQUEsS0FBSyxFQUFFO0FBQTNCLENBQUQsRUFBb0M7QUFDbkN5dUMsRUFBQUEsVUFBVSxFQUFFLFNBQVNBLFVBQVQsR0FBc0I7QUFDaEMsV0FBTyxJQUFJSCxlQUFKLENBQW9CeGlELFFBQVEsQ0FBQ08sc0JBQXNCLENBQUMsSUFBRCxDQUF2QixDQUE1QixDQUFQO0FBQ0Q7QUFIa0MsQ0FBcEMsQ0FBRDs7QUNsQ0EsSUFBSXVRLHVCQUFxQixHQUFHOVIsdUJBQTVCO0FBR0E7OztBQUNBOFIsdUJBQXFCLENBQUMsY0FBRCxDQUFyQjs7QUNKQSxJQUFJQSx1QkFBcUIsR0FBRzlSLHVCQUE1QjtBQUdBOzs7QUFDQThSLHVCQUFxQixDQUFDLFNBQUQsQ0FBckI7O0FDSkEsSUFBSUEsdUJBQXFCLEdBQUc5Uix1QkFBNUI7QUFHQTs7O0FBQ0E4Uix1QkFBcUIsQ0FBQyxTQUFELENBQXJCOztBQ0pBLElBQUlBLHVCQUFxQixHQUFHOVIsdUJBQTVCO0FBR0E7OztBQUNBOFIsdUJBQXFCLENBQUMsVUFBRCxDQUFyQjs7QUNKQSxJQUFJQSx1QkFBcUIsR0FBRzlSLHVCQUE1QjtBQUdBOzs7QUFDQThSLHVCQUFxQixDQUFDLFlBQUQsQ0FBckI7O0FDSkE7QUFDQSxJQUFJQSx1QkFBcUIsR0FBRzlSLHVCQUE1QjtBQUdBOzs7QUFDQThSLHVCQUFxQixDQUFDLGNBQUQsQ0FBckI7O0FDTEE7QUFDQSxJQUFJQSxxQkFBcUIsR0FBRzlSLHVCQUE1Qjs7QUFFQThSLHFCQUFxQixDQUFDLFlBQUQsQ0FBckI7O0FDRkEsSUFBSS9QLFlBQVUsR0FBRy9CLFlBQWpCOztBQUNBLElBQUlrcEIsWUFBWSxHQUFHbHBCLGNBQW5COztBQUNBLElBQUk0akQsY0FBYyxHQUFHNWpELGdCQUFyQjs7QUFDQSxJQUFJZ3dDLDJDQUEyQyxHQUFHaHdDLHFDQUFsRDs7QUFDQSxJQUFJaXBCLHFCQUFtQixHQUFHanBCLG1CQUExQjs7QUFDQSxJQUFJc3hDLDJCQUEyQixHQUFHdHhDLDZCQUFsQzs7QUFFQSxJQUFJMm9CLHNCQUFzQixHQUFHTSxxQkFBbUIsQ0FBQ04sc0JBQWpEO0FBQ0EsSUFBSUssNEJBQTRCLEdBQUdDLHFCQUFtQixDQUFDRCw0QkFBdkQ7QUFHQTtBQUNBOztBQUNBQSw0QkFBNEIsQ0FBQyxXQUFELEVBQWMsU0FBU3dzQixTQUFULENBQW1CQztBQUFXO0FBQTlCLEVBQThFO0FBQ3RILE1BQUl0bEMsQ0FBQyxHQUFHLElBQVI7QUFDQSxNQUFJdUosZUFBZSxHQUFHN1gsU0FBUyxDQUFDQyxNQUFoQztBQUNBLE1BQUl1WixLQUFLLEdBQUczQixlQUFlLEdBQUcsQ0FBbEIsR0FBc0I3WCxTQUFTLENBQUMsQ0FBRCxDQUEvQixHQUFxQ1QsU0FBakQ7QUFDQSxNQUFJb1osT0FBTyxHQUFHZCxlQUFlLEdBQUcsQ0FBbEIsR0FBc0I3WCxTQUFTLENBQUMsQ0FBRCxDQUEvQixHQUFxQ1QsU0FBbkQ7QUFDQSxTQUFPLEtBQUtXLFlBQVUsQ0FBQyxTQUFELENBQWYsRUFBNEIsVUFBVWs2QixPQUFWLEVBQW1CO0FBQ3BEL1MsSUFBQUEsWUFBWSxDQUFDL1ksQ0FBRCxDQUFaO0FBQ0E4ckIsSUFBQUEsT0FBTyxDQUFDMm5CLGNBQWMsQ0FBQ25PLFVBQUQsRUFBYXA2QixLQUFiLEVBQW9CYixPQUFwQixDQUFmLENBQVA7QUFDRCxHQUhNLEVBR0praEIsSUFISSxDQUdDLFVBQVU1TyxJQUFWLEVBQWdCO0FBQ3RCLFdBQU93a0IsMkJBQTJCLENBQUMzb0Isc0JBQXNCLENBQUN4WSxDQUFELENBQXZCLEVBQTRCMmMsSUFBNUIsQ0FBbEM7QUFDRCxHQUxNLENBQVA7QUFNRCxDQVgyQixFQVd6QmtqQiwyQ0FYeUIsQ0FBNUI7O0FDWkEsSUFBSS9tQixxQkFBbUIsR0FBR2pwQixtQkFBMUI7O0FBQ0EsSUFBSTQxQyxlQUFhLEdBQUc1MUMsY0FBQSxDQUF3Q3lSLFlBQTVEOztBQUNBLElBQUkrL0Isb0JBQWtCLEdBQUd4eEMsNEJBQXpCOztBQUVBLElBQUkwb0IsYUFBVyxHQUFHTyxxQkFBbUIsQ0FBQ1AsV0FBdEM7QUFDQSxJQUFJRSx3QkFBc0IsR0FBR0sscUJBQW1CLENBQUNMLHNCQUFqRDtBQUdBOztBQUNBQSx3QkFBc0IsQ0FBQyxXQUFELEVBQWMsU0FBU2l0QixTQUFULENBQW1COWtDO0FBQVc7QUFBOUIsRUFBK0M7QUFDakYsTUFBSStiLElBQUksR0FBRzhvQixlQUFhLENBQUNsdEIsYUFBVyxDQUFDLElBQUQsQ0FBWixFQUFvQjNYLFVBQXBCLEVBQWdDbFAsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBdEUsQ0FBeEI7QUFDQSxTQUFPb3dDLG9CQUFrQixDQUFDLElBQUQsRUFBTzFrQixJQUFQLENBQXpCO0FBQ0QsQ0FIcUIsQ0FBdEI7O0FDVkEsSUFBSTdELHFCQUFtQixHQUFHanBCLG1CQUExQjs7QUFDQSxJQUFJNDFDLGFBQWEsR0FBRzUxQyxjQUFBLENBQXdDeVIsWUFBNUQ7O0FBQ0EsSUFBSSsvQixvQkFBa0IsR0FBR3h4Qyw0QkFBekI7O0FBRUEsSUFBSTBvQixhQUFXLEdBQUdPLHFCQUFtQixDQUFDUCxXQUF0QztBQUNBLElBQUlFLHdCQUFzQixHQUFHSyxxQkFBbUIsQ0FBQ0wsc0JBQWpEO0FBR0E7O0FBQ0FBLHdCQUFzQixDQUFDLGNBQUQsRUFBaUIsU0FBU25YLFlBQVQsQ0FBc0JWO0FBQVc7QUFBakMsRUFBa0Q7QUFDdkYsTUFBSStiLElBQUksR0FBRzhvQixhQUFhLENBQUNsdEIsYUFBVyxDQUFDLElBQUQsQ0FBWixFQUFvQjNYLFVBQXBCLEVBQWdDbFAsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBdEUsQ0FBeEI7QUFDQSxTQUFPb3dDLG9CQUFrQixDQUFDLElBQUQsRUFBTzFrQixJQUFQLENBQXpCO0FBQ0QsQ0FIcUIsQ0FBdEI7O0FDVEEsSUFBSTdELHFCQUFtQixHQUFHanBCLG1CQUExQjs7QUFDQSxJQUFJaTJDLFNBQVMsR0FBR2oyQyxzQkFBQSxDQUFrRCsxQyxRQUFsRTs7QUFFQSxJQUFJcnRCLGFBQVcsR0FBR08scUJBQW1CLENBQUNQLFdBQXRDO0FBQ0EsSUFBSUUsd0JBQXNCLEdBQUdLLHFCQUFtQixDQUFDTCxzQkFBakQ7QUFHQTs7QUFDQUEsd0JBQXNCLENBQUMsVUFBRCxFQUFhLFNBQVNtdEIsUUFBVCxDQUFrQnRFO0FBQVU7QUFBNUIsRUFBNkM7QUFDOUUsU0FBT3dFLFNBQVMsQ0FBQ3Z0QixhQUFXLENBQUMsSUFBRCxDQUFaLEVBQW9CK29CLFNBQXBCLEVBQStCNXZDLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUF1QkQsU0FBUyxDQUFDLENBQUQsQ0FBaEMsR0FBc0NULFNBQXJFLENBQWhCO0FBQ0QsQ0FGcUIsQ0FBdEI7O0FDUkEsSUFBSTZuQixxQkFBbUIsR0FBR2pwQixtQkFBMUI7O0FBQ0EsSUFBSWsyQyxjQUFjLEdBQUdsMkMsc0JBQUEsQ0FBa0RnMkMsYUFBdkU7O0FBRUEsSUFBSXR0QixhQUFXLEdBQUdPLHFCQUFtQixDQUFDUCxXQUF0QztBQUNBLElBQUlFLHdCQUFzQixHQUFHSyxxQkFBbUIsQ0FBQ0wsc0JBQWpEO0FBR0E7O0FBQ0FBLHdCQUFzQixDQUFDLGVBQUQsRUFBa0IsU0FBU290QixhQUFULENBQXVCdkU7QUFBVTtBQUFqQyxFQUFrRDtBQUN4RixTQUFPeUUsY0FBYyxDQUFDeHRCLGFBQVcsQ0FBQyxJQUFELENBQVosRUFBb0Irb0IsU0FBcEIsRUFBK0I1dkMsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBckUsQ0FBckI7QUFDRCxDQUZxQixDQUF0Qjs7QUNSQSxJQUFJNm5CLHFCQUFtQixHQUFHanBCLG1CQUExQjs7QUFDQSxJQUFJcTJDLFFBQVEsR0FBR3IyQyxZQUFmOztBQUNBLElBQUl1eEMsNEJBQTRCLEdBQUd2eEMsOEJBQW5DOztBQUVBLElBQUkwb0IsYUFBVyxHQUFHTyxxQkFBbUIsQ0FBQ1AsV0FBdEM7QUFDQSxJQUFJRSx3QkFBc0IsR0FBR0sscUJBQW1CLENBQUNMLHNCQUFqRDtBQUdBOztBQUNBQSx3QkFBc0IsQ0FBQyxTQUFELEVBQVksU0FBUzB0QixPQUFULENBQWlCdmxDO0FBQVc7QUFBNUIsRUFBNkM7QUFDN0UsTUFBSXlKLE9BQU8sR0FBRzNZLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUF1QkQsU0FBUyxDQUFDLENBQUQsQ0FBaEMsR0FBc0NULFNBQXBEO0FBQ0EsU0FBT2kxQyxRQUFRLENBQUMzdEIsYUFBVyxDQUFDLElBQUQsQ0FBWixFQUFvQjNYLFVBQXBCLEVBQWdDeUosT0FBaEMsRUFBeUMrMkIsNEJBQXpDLENBQWY7QUFDRCxDQUhxQixDQUF0Qjs7QUNUQSxJQUFJdG9CLG1CQUFtQixHQUFHanBCLG1CQUExQjs7QUFDQSxJQUFJNmpELGFBQWEsR0FBRzdqRCxlQUFwQjs7QUFDQSxJQUFJd3hDLGtCQUFrQixHQUFHeHhDLDRCQUF6Qjs7QUFFQSxJQUFJMG9CLFdBQVcsR0FBR08sbUJBQW1CLENBQUNQLFdBQXRDO0FBQ0EsSUFBSUUsc0JBQXNCLEdBQUdLLG1CQUFtQixDQUFDTCxzQkFBakQ7QUFHQTs7QUFDQUEsc0JBQXNCLENBQUMsVUFBRCxFQUFhLFNBQVMrdEIsUUFBVCxDQUFrQkMsUUFBbEIsRUFBNEI7QUFDN0QsU0FBT3BGLGtCQUFrQixDQUFDLElBQUQsRUFBT3FTLGFBQWEsQ0FBQ3JqRCxJQUFkLENBQW1Ca29CLFdBQVcsQ0FBQyxJQUFELENBQTlCLEVBQXNDa3VCLFFBQXRDLENBQVAsQ0FBekI7QUFDRCxDQUZxQixDQUF0Qjs7QUNUQSxJQUFJbGxDLEdBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXFwQyxTQUFPLEdBQUdycEMsTUFBZDs7QUFDQSxJQUFJdzZDLHFCQUFtQixHQUFHeDZDLHFCQUExQjtBQUdBOzs7QUFDQTBSLEdBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFNBQVY7QUFBcUJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBNUI7QUFBa0MrckIsRUFBQUEsSUFBSSxFQUFFLElBQXhDO0FBQThDLzBCLEVBQUFBLE1BQU0sRUFBRW05QjtBQUF0RCxDQUFELEVBQWtFO0FBQ2pFb1IsRUFBQUEsU0FBUyxFQUFFLFNBQVNBLFNBQVQsR0FBc0M7QUFDL0MsV0FBT0QscUJBQW1CLENBQUNockMsS0FBcEIsQ0FBMEIsSUFBMUIsRUFBZ0MzTixTQUFoQyxDQUFQO0FBQ0Q7QUFIZ0UsQ0FBbEUsQ0FBRDs7QUNQQSxJQUFJNlAsR0FBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJa1osTUFBSSxHQUFHbFosY0FBWDtBQUdBOzs7QUFDQTBSLEdBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFNBQVY7QUFBcUJnQixFQUFBQSxJQUFJLEVBQUU7QUFBM0IsQ0FBRCxFQUFvQztBQUNuQ29OLEVBQUFBLElBQUksRUFBRUE7QUFENkIsQ0FBcEMsQ0FBRDs7QUNMQSxJQUFJeEgsR0FBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJeWUsSUFBRSxHQUFHemUsWUFBVDtBQUdBOzs7QUFDQTBSLEdBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFNBQVY7QUFBcUJnQixFQUFBQSxJQUFJLEVBQUU7QUFBM0IsQ0FBRCxFQUFvQztBQUNuQzJTLEVBQUFBLEVBQUUsRUFBRUE7QUFEK0IsQ0FBcEMsQ0FBRDs7QUNKQSxJQUFJL00sR0FBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJcXBDLFNBQU8sR0FBR3JwQyxNQUFkOztBQUNBLElBQUk2NkMsUUFBUSxHQUFHNzZDLFVBQWY7QUFHQTs7O0FBQ0EwUixHQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxTQUFWO0FBQXFCb0ssRUFBQUEsS0FBSyxFQUFFLElBQTVCO0FBQWtDK3JCLEVBQUFBLElBQUksRUFBRSxJQUF4QztBQUE4Qy8wQixFQUFBQSxNQUFNLEVBQUVtOUI7QUFBdEQsQ0FBRCxFQUFrRTtBQUNqRXFSLEVBQUFBLE9BQU8sRUFBRUc7QUFEd0QsQ0FBbEUsQ0FBRDs7QUNMQSxJQUFJbnBDLEdBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXFwQyxTQUFPLEdBQUdycEMsTUFBZDs7QUFDQSxJQUFJODdDLE9BQU8sR0FBRzk3QyxTQUFkO0FBR0E7OztBQUNBMFIsR0FBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsU0FBVjtBQUFxQm9LLEVBQUFBLEtBQUssRUFBRSxJQUE1QjtBQUFrQytyQixFQUFBQSxJQUFJLEVBQUUsSUFBeEM7QUFBOEMvMEIsRUFBQUEsTUFBTSxFQUFFbTlCO0FBQXRELENBQUQsRUFBa0U7QUFDakVzUyxFQUFBQSxNQUFNLEVBQUVHO0FBRHlELENBQWxFLENBQUQ7O0FDUEEsSUFBSXBxQyxHQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlxcEMsU0FBTyxHQUFHcnBDLE1BQWQ7O0FBQ0EsSUFBSXlpRCxnQkFBZ0IsR0FBR3ppRCxrQkFBdkI7QUFHQTs7O0FBQ0EwUixHQUFDLENBQUM7QUFBRTVHLEVBQUFBLE1BQU0sRUFBRSxTQUFWO0FBQXFCb0ssRUFBQUEsS0FBSyxFQUFFLElBQTVCO0FBQWtDK3JCLEVBQUFBLElBQUksRUFBRSxJQUF4QztBQUE4Qy8wQixFQUFBQSxNQUFNLEVBQUVtOUI7QUFBdEQsQ0FBRCxFQUFrRTtBQUNqRXFaLEVBQUFBLE1BQU0sRUFBRSxTQUFTQSxNQUFULEdBQW1DO0FBQ3pDLFdBQU9ELGdCQUFnQixDQUFDanpDLEtBQWpCLENBQXVCLElBQXZCLEVBQTZCM04sU0FBN0IsQ0FBUDtBQUNEO0FBSGdFLENBQWxFLENBQUQ7O0FDTkEsSUFBSTZQLEdBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSXFwQyxTQUFPLEdBQUdycEMsTUFBZDs7QUFDQSxJQUFJdzZDLG1CQUFtQixHQUFHeDZDLHFCQUExQjtBQUdBOzs7QUFDQTBSLEdBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFNBQVY7QUFBcUJvSyxFQUFBQSxLQUFLLEVBQUUsSUFBNUI7QUFBa0MrckIsRUFBQUEsSUFBSSxFQUFFLElBQXhDO0FBQThDLzBCLEVBQUFBLE1BQU0sRUFBRW05QjtBQUF0RCxDQUFELEVBQWtFO0FBQ2pFb1IsRUFBQUEsU0FBUyxFQUFFLFNBQVNBLFNBQVQsR0FBc0M7QUFDL0MsV0FBT0QsbUJBQW1CLENBQUNockMsS0FBcEIsQ0FBMEIsSUFBMUIsRUFBZ0MzTixTQUFoQyxDQUFQO0FBQ0Q7QUFIZ0UsQ0FBbEUsQ0FBRDs7QUNQQSxJQUFJNlAsR0FBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJa1osSUFBSSxHQUFHbFosY0FBWDtBQUdBOzs7QUFDQTBSLEdBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFNBQVY7QUFBcUJnQixFQUFBQSxJQUFJLEVBQUU7QUFBM0IsQ0FBRCxFQUFvQztBQUNuQ29OLEVBQUFBLElBQUksRUFBRUE7QUFENkIsQ0FBcEMsQ0FBRDs7QUNMQSxJQUFJeEgsR0FBQyxHQUFHMVIsT0FBUjs7QUFDQSxJQUFJeWUsRUFBRSxHQUFHemUsWUFBVDtBQUdBOzs7QUFDQTBSLEdBQUMsQ0FBQztBQUFFNUcsRUFBQUEsTUFBTSxFQUFFLFNBQVY7QUFBcUJnQixFQUFBQSxJQUFJLEVBQUU7QUFBM0IsQ0FBRCxFQUFvQztBQUNuQzJTLEVBQUFBLEVBQUUsRUFBRUE7QUFEK0IsQ0FBcEMsQ0FBRDs7QUNMQTtBQUNBO0lBQ0FsZixZQUFBLEdBQWlCO0FBQ2Z1a0QsRUFBQUEsV0FBVyxFQUFFLENBREU7QUFFZkMsRUFBQUEsbUJBQW1CLEVBQUUsQ0FGTjtBQUdmQyxFQUFBQSxZQUFZLEVBQUUsQ0FIQztBQUlmQyxFQUFBQSxjQUFjLEVBQUUsQ0FKRDtBQUtmQyxFQUFBQSxXQUFXLEVBQUUsQ0FMRTtBQU1mQyxFQUFBQSxhQUFhLEVBQUUsQ0FOQTtBQU9mQyxFQUFBQSxZQUFZLEVBQUUsQ0FQQztBQVFmQyxFQUFBQSxvQkFBb0IsRUFBRSxDQVJQO0FBU2ZDLEVBQUFBLFFBQVEsRUFBRSxDQVRLO0FBVWZDLEVBQUFBLGlCQUFpQixFQUFFLENBVko7QUFXZkMsRUFBQUEsY0FBYyxFQUFFLENBWEQ7QUFZZkMsRUFBQUEsZUFBZSxFQUFFLENBWkY7QUFhZkMsRUFBQUEsaUJBQWlCLEVBQUUsQ0FiSjtBQWNmQyxFQUFBQSxTQUFTLEVBQUUsQ0FkSTtBQWVmQyxFQUFBQSxhQUFhLEVBQUUsQ0FmQTtBQWdCZkMsRUFBQUEsWUFBWSxFQUFFLENBaEJDO0FBaUJmQyxFQUFBQSxRQUFRLEVBQUUsQ0FqQks7QUFrQmZDLEVBQUFBLGdCQUFnQixFQUFFLENBbEJIO0FBbUJmQyxFQUFBQSxNQUFNLEVBQUUsQ0FuQk87QUFvQmZDLEVBQUFBLFdBQVcsRUFBRSxDQXBCRTtBQXFCZkMsRUFBQUEsYUFBYSxFQUFFLENBckJBO0FBc0JmQyxFQUFBQSxhQUFhLEVBQUUsQ0F0QkE7QUF1QmZDLEVBQUFBLGNBQWMsRUFBRSxDQXZCRDtBQXdCZkMsRUFBQUEsWUFBWSxFQUFFLENBeEJDO0FBeUJmQyxFQUFBQSxhQUFhLEVBQUUsQ0F6QkE7QUEwQmZDLEVBQUFBLGdCQUFnQixFQUFFLENBMUJIO0FBMkJmQyxFQUFBQSxnQkFBZ0IsRUFBRSxDQTNCSDtBQTRCZkMsRUFBQUEsY0FBYyxFQUFFLENBNUJEO0FBNkJmQyxFQUFBQSxnQkFBZ0IsRUFBRSxDQTdCSDtBQThCZkMsRUFBQUEsYUFBYSxFQUFFLENBOUJBO0FBK0JmQyxFQUFBQSxTQUFTLEVBQUU7QUEvQkksQ0FBakI7O0FDRkE7QUFDQSxJQUFJNTRDLHFCQUFxQixHQUFHaE4sdUJBQTVCOztBQUVBLElBQUk2bEQsV0FBUyxHQUFHNzRDLHFCQUFxQixDQUFDLE1BQUQsQ0FBckIsQ0FBOEI2NEMsU0FBOUM7QUFDQSxJQUFJQyx1QkFBcUIsR0FBR0QsV0FBUyxJQUFJQSxXQUFTLENBQUN6MUMsV0FBdkIsSUFBc0N5MUMsV0FBUyxDQUFDejFDLFdBQVYsQ0FBc0JwSSxTQUF4RjtJQUVBekkscUJBQUEsR0FBaUJ1bUQsdUJBQXFCLEtBQUs3bEQsTUFBTSxDQUFDK0gsU0FBakMsR0FBNkM1RyxTQUE3QyxHQUF5RDBrRCx1QkFBMUU7O0FDTkEsSUFBSW5tRCxRQUFNLEdBQUdLLFFBQWI7O0FBQ0EsSUFBSStsRCxjQUFZLEdBQUcvbEQsWUFBbkI7O0FBQ0EsSUFBSThsRCx1QkFBcUIsR0FBRzlsRCxxQkFBNUI7O0FBQ0EsSUFBSWtSLE9BQU8sR0FBR2xSLFlBQWQ7O0FBQ0EsSUFBSThHLDZCQUEyQixHQUFHOUcsNkJBQWxDOztBQUVBLElBQUlnbUQsaUJBQWUsR0FBRyxVQUFVQyxtQkFBVixFQUErQjtBQUNuRDtBQUNBLE1BQUlBLG1CQUFtQixJQUFJQSxtQkFBbUIsQ0FBQy8wQyxPQUFwQixLQUFnQ0EsT0FBM0QsRUFBb0UsSUFBSTtBQUN0RXBLLElBQUFBLDZCQUEyQixDQUFDbS9DLG1CQUFELEVBQXNCLFNBQXRCLEVBQWlDLzBDLE9BQWpDLENBQTNCO0FBQ0QsR0FGbUUsQ0FFbEUsT0FBT3BSLEtBQVAsRUFBYztBQUNkbW1ELElBQUFBLG1CQUFtQixDQUFDLzBDLE9BQXBCLEdBQThCQSxPQUE5QjtBQUNEO0FBQ0YsQ0FQRDs7QUFTQSxLQUFLLElBQUlnMUMsaUJBQVQsSUFBNEJILGNBQTVCLEVBQTBDO0FBQ3hDLE1BQUlBLGNBQVksQ0FBQ0csaUJBQUQsQ0FBaEIsRUFBbUM7QUFDakNGLElBQUFBLGlCQUFlLENBQUNybUQsUUFBTSxDQUFDdW1ELGlCQUFELENBQU4sSUFBMkJ2bUQsUUFBTSxDQUFDdW1ELGlCQUFELENBQU4sQ0FBd0JsK0MsU0FBcEQsQ0FBZjtBQUNEO0FBQ0Y7O0FBRURnK0MsaUJBQWUsQ0FBQ0YsdUJBQUQsQ0FBZjs7QUNyQkEsSUFBSW5tRCxRQUFNLEdBQUdLLFFBQWI7O0FBQ0EsSUFBSStsRCxZQUFZLEdBQUcvbEQsWUFBbkI7O0FBQ0EsSUFBSThsRCxxQkFBcUIsR0FBRzlsRCxxQkFBNUI7O0FBQ0EsSUFBSW1tRCxvQkFBb0IsR0FBR25tRCxpQkFBM0I7O0FBQ0EsSUFBSThHLDJCQUEyQixHQUFHOUcsNkJBQWxDOztBQUNBLElBQUlpRixpQkFBZSxHQUFHakYsaUJBQXRCOztBQUVBLElBQUlzVixVQUFRLEdBQUdyUSxpQkFBZSxDQUFDLFVBQUQsQ0FBOUI7QUFDQSxJQUFJb0gsYUFBYSxHQUFHcEgsaUJBQWUsQ0FBQyxhQUFELENBQW5DO0FBQ0EsSUFBSW1oRCxXQUFXLEdBQUdELG9CQUFvQixDQUFDN29DLE1BQXZDOztBQUVBLElBQUkwb0MsZUFBZSxHQUFHLFVBQVVDLG1CQUFWLEVBQStCQyxlQUEvQixFQUFnRDtBQUNwRSxNQUFJRCxtQkFBSixFQUF5QjtBQUN2QjtBQUNBLFFBQUlBLG1CQUFtQixDQUFDM3dDLFVBQUQsQ0FBbkIsS0FBa0M4d0MsV0FBdEMsRUFBbUQsSUFBSTtBQUNyRHQvQyxNQUFBQSwyQkFBMkIsQ0FBQ20vQyxtQkFBRCxFQUFzQjN3QyxVQUF0QixFQUFnQzh3QyxXQUFoQyxDQUEzQjtBQUNELEtBRmtELENBRWpELE9BQU90bUQsS0FBUCxFQUFjO0FBQ2RtbUQsTUFBQUEsbUJBQW1CLENBQUMzd0MsVUFBRCxDQUFuQixHQUFnQzh3QyxXQUFoQztBQUNEOztBQUNELFFBQUksQ0FBQ0gsbUJBQW1CLENBQUM1NUMsYUFBRCxDQUF4QixFQUF5QztBQUN2Q3ZGLE1BQUFBLDJCQUEyQixDQUFDbS9DLG1CQUFELEVBQXNCNTVDLGFBQXRCLEVBQXFDNjVDLGVBQXJDLENBQTNCO0FBQ0Q7O0FBQ0QsUUFBSUgsWUFBWSxDQUFDRyxlQUFELENBQWhCLEVBQW1DLEtBQUssSUFBSXB1QyxXQUFULElBQXdCcXVDLG9CQUF4QixFQUE4QztBQUMvRTtBQUNBLFVBQUlGLG1CQUFtQixDQUFDbnVDLFdBQUQsQ0FBbkIsS0FBcUNxdUMsb0JBQW9CLENBQUNydUMsV0FBRCxDQUE3RCxFQUE0RSxJQUFJO0FBQzlFaFIsUUFBQUEsMkJBQTJCLENBQUNtL0MsbUJBQUQsRUFBc0JudUMsV0FBdEIsRUFBbUNxdUMsb0JBQW9CLENBQUNydUMsV0FBRCxDQUF2RCxDQUEzQjtBQUNELE9BRjJFLENBRTFFLE9BQU9oWSxLQUFQLEVBQWM7QUFDZG1tRCxRQUFBQSxtQkFBbUIsQ0FBQ251QyxXQUFELENBQW5CLEdBQW1DcXVDLG9CQUFvQixDQUFDcnVDLFdBQUQsQ0FBdkQ7QUFDRDtBQUNGO0FBQ0Y7QUFDRixDQXBCRDs7QUFzQkEsS0FBSyxJQUFJb3VDLGVBQVQsSUFBNEJILFlBQTVCLEVBQTBDO0FBQ3hDQyxFQUFBQSxlQUFlLENBQUNybUQsUUFBTSxDQUFDdW1ELGVBQUQsQ0FBTixJQUEyQnZtRCxRQUFNLENBQUN1bUQsZUFBRCxDQUFOLENBQXdCbCtDLFNBQXBELEVBQStEaytDLGVBQS9ELENBQWY7QUFDRDs7QUFFREYsZUFBZSxDQUFDRixxQkFBRCxFQUF3QixjQUF4QixDQUFmOztBQ3JDQSxJQUFJcDBDLEdBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSUwsUUFBTSxHQUFHSyxRQUFiOztBQUNBLElBQUlrOEIsSUFBSSxHQUFHbDhCLE1BQVg7O0FBRUEsSUFBSStMLE1BQU0sR0FBRyxDQUFDcE0sUUFBTSxDQUFDczVCLFlBQVIsSUFBd0IsQ0FBQ3Q1QixRQUFNLENBQUN1NUIsY0FBN0M7O0FBR0F4bkIsR0FBQyxDQUFDO0FBQUUvUixFQUFBQSxNQUFNLEVBQUUsSUFBVjtBQUFnQjJRLEVBQUFBLElBQUksRUFBRSxJQUF0QjtBQUE0QjNQLEVBQUFBLFVBQVUsRUFBRSxJQUF4QztBQUE4Q3VMLEVBQUFBLE1BQU0sRUFBRUg7QUFBdEQsQ0FBRCxFQUFpRTtBQUNoRTtBQUNBO0FBQ0FrdEIsRUFBQUEsWUFBWSxFQUFFaUQsSUFBSSxDQUFDaDFCLEdBSDZDO0FBSWhFO0FBQ0E7QUFDQWd5QixFQUFBQSxjQUFjLEVBQUVnRCxJQUFJLENBQUNqTTtBQU4yQyxDQUFqRSxDQUFEOztBQ1BBLElBQUl2ZSxHQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlMLFFBQU0sR0FBR0ssUUFBYjs7QUFDQSxJQUFJMjhCLFNBQVMsR0FBRzM4QixXQUFoQjs7QUFDQSxJQUFJZ2YsT0FBTyxHQUFHaGYsWUFBZDs7QUFFQSxJQUFJaUMsT0FBTyxHQUFHdEMsUUFBTSxDQUFDc0MsT0FBckI7QUFHQTs7QUFDQXlQLEdBQUMsQ0FBQztBQUFFL1IsRUFBQUEsTUFBTSxFQUFFLElBQVY7QUFBZ0JnQixFQUFBQSxVQUFVLEVBQUUsSUFBNUI7QUFBa0NrSSxFQUFBQSxXQUFXLEVBQUU7QUFBL0MsQ0FBRCxFQUF3RDtBQUN2RHN5QixFQUFBQSxjQUFjLEVBQUUsU0FBU0EsY0FBVCxDQUF3QjMzQixFQUF4QixFQUE0QjtBQUMxQyxRQUFJb0wsTUFBTSxHQUFHb1EsT0FBTyxJQUFJL2MsT0FBTyxDQUFDMk0sTUFBaEM7QUFDQSt0QixJQUFBQSxTQUFTLENBQUMvdEIsTUFBTSxHQUFHQSxNQUFNLENBQUMwQixJQUFQLENBQVk5TSxFQUFaLENBQUgsR0FBcUJBLEVBQTVCLENBQVQ7QUFDRDtBQUpzRCxDQUF4RCxDQUFEOztBQ1RBLElBQUlrTyxHQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUlMLFFBQU0sR0FBR0ssUUFBYjs7QUFDQSxJQUFJeUIsWUFBVSxHQUFHekIsWUFBakI7O0FBQ0EsSUFBSWdDLFNBQVMsR0FBR2hDLGVBQWhCOztBQUVBLElBQUlpQixLQUFLLEdBQUcsR0FBR0EsS0FBZjtBQUNBLElBQUlvbEQsSUFBSSxHQUFHLFdBQVcxL0MsSUFBWCxDQUFnQjNFLFNBQWhCLENBQVg7O0FBRUEsSUFBSW1SLElBQUksR0FBRyxVQUFVbXpDLFNBQVYsRUFBcUI7QUFDOUIsU0FBTyxVQUFVbm5CLE9BQVYsRUFBbUJvbkI7QUFBUTtBQUEzQixJQUFpRDtBQUN0RCxRQUFJQyxTQUFTLEdBQUcza0QsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5DO0FBQ0EsUUFBSXFTLElBQUksR0FBR3F5QyxTQUFTLEdBQUd2bEQsS0FBSyxDQUFDVCxJQUFOLENBQVdxQixTQUFYLEVBQXNCLENBQXRCLENBQUgsR0FBOEJULFNBQWxEO0FBQ0EsV0FBT2tsRCxTQUFTLENBQUNFLFNBQVMsR0FBRyxZQUFZO0FBQ3ZDO0FBQ0EsT0FBQy9rRCxZQUFVLENBQUMwOUIsT0FBRCxDQUFWLEdBQXNCQSxPQUF0QixHQUFnQ3YvQixRQUFRLENBQUN1L0IsT0FBRCxDQUF6QyxFQUFvRDN2QixLQUFwRCxDQUEwRCxJQUExRCxFQUFnRTJFLElBQWhFO0FBQ0QsS0FIeUIsR0FHdEJnckIsT0FIWSxFQUdIb25CLE9BSEcsQ0FBaEI7QUFJRCxHQVBEO0FBUUQsQ0FURDtBQVlBOzs7QUFDQTcwQyxHQUFDLENBQUM7QUFBRS9SLEVBQUFBLE1BQU0sRUFBRSxJQUFWO0FBQWdCMlEsRUFBQUEsSUFBSSxFQUFFLElBQXRCO0FBQTRCcEUsRUFBQUEsTUFBTSxFQUFFbTZDO0FBQXBDLENBQUQsRUFBNkM7QUFDNUM7QUFDQTtBQUNBMXJCLEVBQUFBLFVBQVUsRUFBRXhuQixJQUFJLENBQUN4VCxRQUFNLENBQUNnN0IsVUFBUixDQUg0QjtBQUk1QztBQUNBO0FBQ0E4ckIsRUFBQUEsV0FBVyxFQUFFdHpDLElBQUksQ0FBQ3hULFFBQU0sQ0FBQzhtRCxXQUFSO0FBTjJCLENBQTdDLENBQUQ7O0FDckJBLElBQUkxbUQsS0FBSyxHQUFHQyxRQUFaOztBQUNBLElBQUlpRixpQkFBZSxHQUFHakYsaUJBQXRCOztBQUNBLElBQUlxcEMsT0FBTyxHQUFHcnBDLE1BQWQ7O0FBRUEsSUFBSXNWLFVBQVEsR0FBR3JRLGlCQUFlLENBQUMsVUFBRCxDQUE5QjtJQUVBMUYsU0FBQSxHQUFpQixDQUFDUSxLQUFLLENBQUMsWUFBWTtBQUNsQyxNQUFJMHZDLEdBQUcsR0FBRyxJQUFJaVgsR0FBSixDQUFRLGVBQVIsRUFBeUIsVUFBekIsQ0FBVjtBQUNBLE1BQUlDLFlBQVksR0FBR2xYLEdBQUcsQ0FBQ2tYLFlBQXZCO0FBQ0EsTUFBSXZoRCxNQUFNLEdBQUcsRUFBYjtBQUNBcXFDLEVBQUFBLEdBQUcsQ0FBQ21YLFFBQUosR0FBZSxPQUFmO0FBQ0FELEVBQUFBLFlBQVksQ0FBQ3oxQyxPQUFiLENBQXFCLFVBQVVyUSxLQUFWLEVBQWlCOEMsR0FBakIsRUFBc0I7QUFDekNnakQsSUFBQUEsWUFBWSxDQUFDLFFBQUQsQ0FBWixDQUF1QixHQUF2QjtBQUNBdmhELElBQUFBLE1BQU0sSUFBSXpCLEdBQUcsR0FBRzlDLEtBQWhCO0FBQ0QsR0FIRDtBQUlBLFNBQVF3b0MsT0FBTyxJQUFJLENBQUNvRyxHQUFHLENBQUN6akIsTUFBakIsSUFDRixDQUFDMjZCLFlBQVksQ0FBQzdsQyxJQURaLElBRUYydUIsR0FBRyxDQUFDb1gsSUFBSixLQUFhLHdCQUZYLElBR0ZGLFlBQVksQ0FBQ3htRCxHQUFiLENBQWlCLEdBQWpCLE1BQTBCLEdBSHhCLElBSUZ3QyxNQUFNLENBQUMsSUFBSW1rRCxlQUFKLENBQW9CLE1BQXBCLENBQUQsQ0FBTixLQUF3QyxLQUp0QyxJQUtGLENBQUNILFlBQVksQ0FBQ3J4QyxVQUFELENBTFg7QUFBQSxLQU9GLElBQUlveEMsR0FBSixDQUFRLGFBQVIsRUFBdUJLLFFBQXZCLEtBQW9DLEdBUGxDLElBUUYsSUFBSUQsZUFBSixDQUFvQixJQUFJQSxlQUFKLENBQW9CLEtBQXBCLENBQXBCLEVBQWdEM21ELEdBQWhELENBQW9ELEdBQXBELE1BQTZELEdBUjNEO0FBQUEsS0FVRixJQUFJdW1ELEdBQUosQ0FBUSxhQUFSLEVBQXVCdnNCLElBQXZCLEtBQWdDLFlBVjlCO0FBQUEsS0FZRixJQUFJdXNCLEdBQUosQ0FBUSxZQUFSLEVBQXNCTSxJQUF0QixLQUErQixTQVo3QjtBQUFBLEtBY0Y1aEQsTUFBTSxLQUFLLE1BZFQ7QUFBQSxLQWdCRixJQUFJc2hELEdBQUosQ0FBUSxVQUFSLEVBQW9CdGxELFNBQXBCLEVBQStCKzRCLElBQS9CLEtBQXdDLEdBaEI3QztBQWlCRCxDQTFCc0IsQ0FBdkI7O0FDSkEsSUFBSThzQixNQUFNLEdBQUcsVUFBYjs7QUFDQSxJQUFJQyxJQUFJLEdBQUcsRUFBWDtBQUNBLElBQUlDLElBQUksR0FBRyxDQUFYO0FBQ0EsSUFBSUMsSUFBSSxHQUFHLEVBQVg7QUFDQSxJQUFJQyxJQUFJLEdBQUcsRUFBWDtBQUNBLElBQUlDLElBQUksR0FBRyxHQUFYO0FBQ0EsSUFBSUMsV0FBVyxHQUFHLEVBQWxCO0FBQ0EsSUFBSUMsUUFBUSxHQUFHLEdBQWY7O0FBQ0EsSUFBSUMsU0FBUyxHQUFHLEdBQWhCOztBQUNBLElBQUlDLGFBQWEsR0FBRyxjQUFwQjs7QUFDQSxJQUFJQyxlQUFlLEdBQUcsd0JBQXRCOztBQUNBLElBQUlDLGNBQWMsR0FBRyxpREFBckI7QUFDQSxJQUFJQyxhQUFhLEdBQUdYLElBQUksR0FBR0MsSUFBM0I7QUFDQSxJQUFJaitDLE9BQUssR0FBRzVKLElBQUksQ0FBQzRKLEtBQWpCO0FBQ0EsSUFBSTQrQyxrQkFBa0IsR0FBR25sRCxNQUFNLENBQUN5ZSxZQUFoQztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLElBQUkybUMsVUFBVSxHQUFHLFVBQVV4OEMsTUFBVixFQUFrQjtBQUNqQyxNQUFJNmhDLE1BQU0sR0FBRyxFQUFiO0FBQ0EsTUFBSS9ULE9BQU8sR0FBRyxDQUFkO0FBQ0EsTUFBSXYzQixNQUFNLEdBQUd5SixNQUFNLENBQUN6SixNQUFwQjs7QUFDQSxTQUFPdTNCLE9BQU8sR0FBR3YzQixNQUFqQixFQUF5QjtBQUN2QixRQUFJakIsS0FBSyxHQUFHMEssTUFBTSxDQUFDbWhCLFVBQVAsQ0FBa0IyTSxPQUFPLEVBQXpCLENBQVo7O0FBQ0EsUUFBSXg0QixLQUFLLElBQUksTUFBVCxJQUFtQkEsS0FBSyxJQUFJLE1BQTVCLElBQXNDdzRCLE9BQU8sR0FBR3YzQixNQUFwRCxFQUE0RDtBQUMxRDtBQUNBLFVBQUlrbUQsS0FBSyxHQUFHejhDLE1BQU0sQ0FBQ21oQixVQUFQLENBQWtCMk0sT0FBTyxFQUF6QixDQUFaOztBQUNBLFVBQUksQ0FBQzJ1QixLQUFLLEdBQUcsTUFBVCxLQUFvQixNQUF4QixFQUFnQztBQUFFO0FBQ2hDNWEsUUFBQUEsTUFBTSxDQUFDcnBDLElBQVAsQ0FBWSxDQUFDLENBQUNsRCxLQUFLLEdBQUcsS0FBVCxLQUFtQixFQUFwQixLQUEyQm1uRCxLQUFLLEdBQUcsS0FBbkMsSUFBNEMsT0FBeEQ7QUFDRCxPQUZELE1BRU87QUFDTDtBQUNBO0FBQ0E1YSxRQUFBQSxNQUFNLENBQUNycEMsSUFBUCxDQUFZbEQsS0FBWjtBQUNBdzRCLFFBQUFBLE9BQU87QUFDUjtBQUNGLEtBWEQsTUFXTztBQUNMK1QsTUFBQUEsTUFBTSxDQUFDcnBDLElBQVAsQ0FBWWxELEtBQVo7QUFDRDtBQUNGOztBQUNELFNBQU91c0MsTUFBUDtBQUNELENBdEJEO0FBd0JBO0FBQ0E7QUFDQTs7O0FBQ0EsSUFBSTZhLFlBQVksR0FBRyxVQUFVQyxLQUFWLEVBQWlCO0FBQ2xDO0FBQ0E7QUFDQSxTQUFPQSxLQUFLLEdBQUcsRUFBUixHQUFhLE1BQU1BLEtBQUssR0FBRyxFQUFkLENBQXBCO0FBQ0QsQ0FKRDtBQU1BO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxJQUFJQyxLQUFLLEdBQUcsVUFBVUMsS0FBVixFQUFpQkMsU0FBakIsRUFBNEJDLFNBQTVCLEVBQXVDO0FBQ2pELE1BQUkxd0MsQ0FBQyxHQUFHLENBQVI7QUFDQXd3QyxFQUFBQSxLQUFLLEdBQUdFLFNBQVMsR0FBR3AvQyxPQUFLLENBQUNrL0MsS0FBSyxHQUFHZCxJQUFULENBQVIsR0FBeUJjLEtBQUssSUFBSSxDQUFuRDtBQUNBQSxFQUFBQSxLQUFLLElBQUlsL0MsT0FBSyxDQUFDay9DLEtBQUssR0FBR0MsU0FBVCxDQUFkOztBQUNBLFNBQU9ELEtBQUssR0FBR1AsYUFBYSxHQUFHVCxJQUFoQixJQUF3QixDQUF2QyxFQUEwQ3h2QyxDQUFDLElBQUlzdkMsSUFBL0MsRUFBcUQ7QUFDbkRrQixJQUFBQSxLQUFLLEdBQUdsL0MsT0FBSyxDQUFDay9DLEtBQUssR0FBR1AsYUFBVCxDQUFiO0FBQ0Q7O0FBQ0QsU0FBTzMrQyxPQUFLLENBQUMwTyxDQUFDLEdBQUcsQ0FBQ2l3QyxhQUFhLEdBQUcsQ0FBakIsSUFBc0JPLEtBQXRCLElBQStCQSxLQUFLLEdBQUdmLElBQXZDLENBQUwsQ0FBWjtBQUNELENBUkQ7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxJQUFJa0IsTUFBTSxHQUFHLFVBQVVqbEQsS0FBVixFQUFpQjtBQUM1QixNQUFJOHBDLE1BQU0sR0FBRyxFQUFiLENBRDRCOztBQUk1QjlwQyxFQUFBQSxLQUFLLEdBQUd5a0QsVUFBVSxDQUFDemtELEtBQUQsQ0FBbEIsQ0FKNEI7O0FBTzVCLE1BQUlrbEQsV0FBVyxHQUFHbGxELEtBQUssQ0FBQ3hCLE1BQXhCLENBUDRCOztBQVU1QixNQUFJK1csQ0FBQyxHQUFHMnVDLFFBQVI7QUFDQSxNQUFJWSxLQUFLLEdBQUcsQ0FBWjtBQUNBLE1BQUlLLElBQUksR0FBR2xCLFdBQVg7QUFDQSxNQUFJbDlDLENBQUosRUFBT3ErQyxZQUFQLENBYjRCOztBQWdCNUIsT0FBS3IrQyxDQUFDLEdBQUcsQ0FBVCxFQUFZQSxDQUFDLEdBQUcvRyxLQUFLLENBQUN4QixNQUF0QixFQUE4QnVJLENBQUMsRUFBL0IsRUFBbUM7QUFDakNxK0MsSUFBQUEsWUFBWSxHQUFHcGxELEtBQUssQ0FBQytHLENBQUQsQ0FBcEI7O0FBQ0EsUUFBSXErQyxZQUFZLEdBQUcsSUFBbkIsRUFBeUI7QUFDdkJ0YixNQUFBQSxNQUFNLENBQUNycEMsSUFBUCxDQUFZK2pELGtCQUFrQixDQUFDWSxZQUFELENBQTlCO0FBQ0Q7QUFDRjs7QUFFRCxNQUFJQyxXQUFXLEdBQUd2YixNQUFNLENBQUN0ckMsTUFBekIsQ0F2QjRCOztBQXdCNUIsTUFBSThtRCxjQUFjLEdBQUdELFdBQXJCLENBeEI0QjtBQTBCNUI7O0FBQ0EsTUFBSUEsV0FBSixFQUFpQjtBQUNmdmIsSUFBQUEsTUFBTSxDQUFDcnBDLElBQVAsQ0FBWTBqRCxTQUFaO0FBQ0QsR0E3QjJCOzs7QUFnQzVCLFNBQU9tQixjQUFjLEdBQUdKLFdBQXhCLEVBQXFDO0FBQ25DO0FBQ0EsUUFBSTNkLENBQUMsR0FBR29jLE1BQVI7O0FBQ0EsU0FBSzU4QyxDQUFDLEdBQUcsQ0FBVCxFQUFZQSxDQUFDLEdBQUcvRyxLQUFLLENBQUN4QixNQUF0QixFQUE4QnVJLENBQUMsRUFBL0IsRUFBbUM7QUFDakNxK0MsTUFBQUEsWUFBWSxHQUFHcGxELEtBQUssQ0FBQytHLENBQUQsQ0FBcEI7O0FBQ0EsVUFBSXErQyxZQUFZLElBQUk3dkMsQ0FBaEIsSUFBcUI2dkMsWUFBWSxHQUFHN2QsQ0FBeEMsRUFBMkM7QUFDekNBLFFBQUFBLENBQUMsR0FBRzZkLFlBQUo7QUFDRDtBQUNGLEtBUmtDOzs7QUFXbkMsUUFBSUcscUJBQXFCLEdBQUdELGNBQWMsR0FBRyxDQUE3Qzs7QUFDQSxRQUFJL2QsQ0FBQyxHQUFHaHlCLENBQUosR0FBUTNQLE9BQUssQ0FBQyxDQUFDKzlDLE1BQU0sR0FBR21CLEtBQVYsSUFBbUJTLHFCQUFwQixDQUFqQixFQUE2RDtBQUMzRCxZQUFNdG1DLFVBQVUsQ0FBQ3FsQyxjQUFELENBQWhCO0FBQ0Q7O0FBRURRLElBQUFBLEtBQUssSUFBSSxDQUFDdmQsQ0FBQyxHQUFHaHlCLENBQUwsSUFBVWd3QyxxQkFBbkI7QUFDQWh3QyxJQUFBQSxDQUFDLEdBQUdneUIsQ0FBSjs7QUFFQSxTQUFLeGdDLENBQUMsR0FBRyxDQUFULEVBQVlBLENBQUMsR0FBRy9HLEtBQUssQ0FBQ3hCLE1BQXRCLEVBQThCdUksQ0FBQyxFQUEvQixFQUFtQztBQUNqQ3ErQyxNQUFBQSxZQUFZLEdBQUdwbEQsS0FBSyxDQUFDK0csQ0FBRCxDQUFwQjs7QUFDQSxVQUFJcStDLFlBQVksR0FBRzd2QyxDQUFmLElBQW9CLEVBQUV1dkMsS0FBRixHQUFVbkIsTUFBbEMsRUFBMEM7QUFDeEMsY0FBTTFrQyxVQUFVLENBQUNxbEMsY0FBRCxDQUFoQjtBQUNEOztBQUNELFVBQUljLFlBQVksSUFBSTd2QyxDQUFwQixFQUF1QjtBQUNyQjtBQUNBLFlBQUk2MEIsQ0FBQyxHQUFHMGEsS0FBUjs7QUFDQSxhQUFLLElBQUl4d0MsQ0FBQyxHQUFHc3ZDLElBQWIsR0FBdUN0dkMsQ0FBQyxJQUFJc3ZDLElBQTVDLEVBQWtEO0FBQ2hELGNBQUk5MEIsQ0FBQyxHQUFHeGEsQ0FBQyxJQUFJNndDLElBQUwsR0FBWXRCLElBQVosR0FBb0J2dkMsQ0FBQyxJQUFJNndDLElBQUksR0FBR3JCLElBQVosR0FBbUJBLElBQW5CLEdBQTBCeHZDLENBQUMsR0FBRzZ3QyxJQUExRDtBQUNBLGNBQUkvYSxDQUFDLEdBQUd0YixDQUFSLEVBQVc7QUFDWCxjQUFJMDJCLE9BQU8sR0FBR3BiLENBQUMsR0FBR3RiLENBQWxCO0FBQ0EsY0FBSTIyQixVQUFVLEdBQUc3QixJQUFJLEdBQUc5MEIsQ0FBeEI7QUFDQWdiLFVBQUFBLE1BQU0sQ0FBQ3JwQyxJQUFQLENBQVkrakQsa0JBQWtCLENBQUNHLFlBQVksQ0FBQzcxQixDQUFDLEdBQUcwMkIsT0FBTyxHQUFHQyxVQUFmLENBQWIsQ0FBOUI7QUFDQXJiLFVBQUFBLENBQUMsR0FBR3hrQyxPQUFLLENBQUM0L0MsT0FBTyxHQUFHQyxVQUFYLENBQVQ7QUFDRDs7QUFFRDNiLFFBQUFBLE1BQU0sQ0FBQ3JwQyxJQUFQLENBQVkrakQsa0JBQWtCLENBQUNHLFlBQVksQ0FBQ3ZhLENBQUQsQ0FBYixDQUE5QjtBQUNBK2EsUUFBQUEsSUFBSSxHQUFHTixLQUFLLENBQUNDLEtBQUQsRUFBUVMscUJBQVIsRUFBK0JELGNBQWMsSUFBSUQsV0FBakQsQ0FBWjtBQUNBUCxRQUFBQSxLQUFLLEdBQUcsQ0FBUjtBQUNBLFVBQUVRLGNBQUY7QUFDRDtBQUNGOztBQUVELE1BQUVSLEtBQUY7QUFDQSxNQUFFdnZDLENBQUY7QUFDRDs7QUFDRCxTQUFPdTBCLE1BQU0sQ0FBQ3BrQyxJQUFQLENBQVksRUFBWixDQUFQO0FBQ0QsQ0EvRUQ7O0lBaUZBekoscUJBQUEsR0FBaUIsVUFBVStELEtBQVYsRUFBaUI7QUFDaEMsTUFBSTBsRCxPQUFPLEdBQUcsRUFBZDtBQUNBLE1BQUlDLE1BQU0sR0FBRzNsRCxLQUFLLENBQUNrSSxXQUFOLEdBQW9CMUMsT0FBcEIsQ0FBNEI2K0MsZUFBNUIsRUFBNkMsUUFBN0MsRUFBdUR4bUQsS0FBdkQsQ0FBNkQsR0FBN0QsQ0FBYjtBQUNBLE1BQUlrSixDQUFKLEVBQU82K0MsS0FBUDs7QUFDQSxPQUFLNytDLENBQUMsR0FBRyxDQUFULEVBQVlBLENBQUMsR0FBRzQrQyxNQUFNLENBQUNubkQsTUFBdkIsRUFBK0J1SSxDQUFDLEVBQWhDLEVBQW9DO0FBQ2xDNitDLElBQUFBLEtBQUssR0FBR0QsTUFBTSxDQUFDNStDLENBQUQsQ0FBZDtBQUNBMitDLElBQUFBLE9BQU8sQ0FBQ2psRCxJQUFSLENBQWEyakQsYUFBYSxDQUFDL2dELElBQWQsQ0FBbUJ1aUQsS0FBbkIsSUFBNEIsU0FBU1gsTUFBTSxDQUFDVyxLQUFELENBQTNDLEdBQXFEQSxLQUFsRTtBQUNEOztBQUNELFNBQU9GLE9BQU8sQ0FBQ2hnRCxJQUFSLENBQWEsR0FBYixDQUFQO0FBQ0QsQ0FURDs7QUMzSkEsSUFBSTBJLEdBQUMsR0FBRzFSLE9BQVI7O0FBQ0EsSUFBSStCLFVBQVUsR0FBRy9CLFlBQWpCOztBQUNBLElBQUltcEQsZ0JBQWMsR0FBR25wRCxTQUFyQjs7QUFDQSxJQUFJeUwsVUFBUSxHQUFHekwsa0JBQWY7O0FBQ0EsSUFBSTRqQixXQUFXLEdBQUc1akIsYUFBbEI7O0FBQ0EsSUFBSStSLGdCQUFjLEdBQUcvUixnQkFBckI7O0FBQ0EsSUFBSTBjLHlCQUF5QixHQUFHMWMsMkJBQWhDOztBQUNBLElBQUlxSSxxQkFBbUIsR0FBR3JJLGFBQTFCOztBQUNBLElBQUk2akIsWUFBVSxHQUFHN2pCLFlBQWpCOztBQUNBLElBQUl5QixVQUFVLEdBQUd6QixZQUFqQjs7QUFDQSxJQUFJb0UsUUFBTSxHQUFHcEUsZ0JBQWI7O0FBQ0EsSUFBSXNRLElBQUksR0FBR3RRLG1CQUFYOztBQUNBLElBQUlrQixPQUFPLEdBQUdsQixTQUFkOztBQUNBLElBQUltRyxRQUFRLEdBQUduRyxXQUFmOztBQUNBLElBQUlxRCxRQUFRLEdBQUdyRCxVQUFmOztBQUNBLElBQUkyUixXQUFTLEdBQUczUixVQUFoQjs7QUFDQSxJQUFJNk8sTUFBTSxHQUFHN08sY0FBYjs7QUFDQSxJQUFJNEYsd0JBQXdCLEdBQUc1RiwwQkFBL0I7O0FBQ0EsSUFBSStWLFdBQVcsR0FBRy9WLGFBQWxCOztBQUNBLElBQUl3VixpQkFBaUIsR0FBR3hWLG1CQUF4Qjs7QUFDQSxJQUFJaUYsZUFBZSxHQUFHakYsaUJBQXRCOztBQUVBLElBQUlvcEQsV0FBVyxHQUFHcm5ELFVBQVUsQ0FBQyxPQUFELENBQTVCO0FBQ0EsSUFBSXNuRCxhQUFhLEdBQUd0bkQsVUFBVSxDQUFDLFNBQUQsQ0FBOUI7QUFDQSxJQUFJdW5ELGdCQUFnQixHQUFHRCxhQUFhLElBQUlBLGFBQWEsQ0FBQ3JoRCxTQUF0RDtBQUNBLElBQUl1aEQsT0FBTyxHQUFHeG5ELFVBQVUsQ0FBQyxTQUFELENBQXhCO0FBQ0EsSUFBSXVULFFBQVEsR0FBR3JRLGVBQWUsQ0FBQyxVQUFELENBQTlCO0FBQ0EsSUFBSXVrRCxpQkFBaUIsR0FBRyxpQkFBeEI7QUFDQSxJQUFJQywwQkFBMEIsR0FBR0QsaUJBQWlCLEdBQUcsVUFBckQ7QUFDQSxJQUFJcjNDLGtCQUFnQixHQUFHOUoscUJBQW1CLENBQUNuQixHQUEzQztBQUNBLElBQUl3aUQsc0JBQXNCLEdBQUdyaEQscUJBQW1CLENBQUNoQixTQUFwQixDQUE4Qm1pRCxpQkFBOUIsQ0FBN0I7QUFDQSxJQUFJMzRCLHdCQUF3QixHQUFHeG9CLHFCQUFtQixDQUFDaEIsU0FBcEIsQ0FBOEJvaUQsMEJBQTlCLENBQS9CO0FBRUEsSUFBSUUsSUFBSSxHQUFHLEtBQVg7QUFDQSxJQUFJQyxTQUFTLEdBQUd6OUMsS0FBSyxDQUFDLENBQUQsQ0FBckI7O0FBRUEsSUFBSTA5QyxlQUFlLEdBQUcsVUFBVS9tQyxLQUFWLEVBQWlCO0FBQ3JDLFNBQU84bUMsU0FBUyxDQUFDOW1DLEtBQUssR0FBRyxDQUFULENBQVQsS0FBeUI4bUMsU0FBUyxDQUFDOW1DLEtBQUssR0FBRyxDQUFULENBQVQsR0FBdUJ3UixNQUFNLENBQUMsdUJBQXVCeFIsS0FBdkIsR0FBK0IsSUFBaEMsRUFBc0MsSUFBdEMsQ0FBdEQsQ0FBUDtBQUNELENBRkQ7O0FBSUEsSUFBSWduQyxhQUFhLEdBQUcsVUFBVUMsUUFBVixFQUFvQjtBQUN0QyxNQUFJO0FBQ0YsV0FBT0Msa0JBQWtCLENBQUNELFFBQUQsQ0FBekI7QUFDRCxHQUZELENBRUUsT0FBT2pxRCxLQUFQLEVBQWM7QUFDZCxXQUFPaXFELFFBQVA7QUFDRDtBQUNGLENBTkQ7O0FBUUEsSUFBSUUsV0FBVyxHQUFHLFVBQVU1cUQsRUFBVixFQUFjO0FBQzlCLE1BQUkrRixNQUFNLEdBQUcvRixFQUFFLENBQUN5SixPQUFILENBQVc2Z0QsSUFBWCxFQUFpQixHQUFqQixDQUFiO0FBQ0EsTUFBSTdtQyxLQUFLLEdBQUcsQ0FBWjs7QUFDQSxNQUFJO0FBQ0YsV0FBT2tuQyxrQkFBa0IsQ0FBQzVrRCxNQUFELENBQXpCO0FBQ0QsR0FGRCxDQUVFLE9BQU90RixLQUFQLEVBQWM7QUFDZCxXQUFPZ2pCLEtBQVAsRUFBYztBQUNaMWQsTUFBQUEsTUFBTSxHQUFHQSxNQUFNLENBQUMwRCxPQUFQLENBQWUrZ0QsZUFBZSxDQUFDL21DLEtBQUssRUFBTixDQUE5QixFQUF5Q2duQyxhQUF6QyxDQUFUO0FBQ0Q7O0FBQ0QsV0FBTzFrRCxNQUFQO0FBQ0Q7QUFDRixDQVhEOztBQWFBLElBQUltTSxNQUFJLEdBQUcsY0FBWDtBQUVBLElBQUl6SSxPQUFPLEdBQUc7QUFDWixPQUFLLEtBRE87QUFFWixPQUFLLEtBRk87QUFHWixPQUFLLEtBSE87QUFJWixPQUFLLEtBSk87QUFLWixPQUFLLEtBTE87QUFNWixTQUFPO0FBTkssQ0FBZDs7QUFTQSxJQUFJbUwsUUFBUSxHQUFHLFVBQVUzUixLQUFWLEVBQWlCO0FBQzlCLFNBQU93RyxPQUFPLENBQUN4RyxLQUFELENBQWQ7QUFDRCxDQUZEOztBQUlBLElBQUk0bkQsU0FBUyxHQUFHLFVBQVU3cUQsRUFBVixFQUFjO0FBQzVCLFNBQU84cUQsa0JBQWtCLENBQUM5cUQsRUFBRCxDQUFsQixDQUF1QnlKLE9BQXZCLENBQStCeUksTUFBL0IsRUFBcUMwQyxRQUFyQyxDQUFQO0FBQ0QsQ0FGRDs7QUFJQSxJQUFJbTJDLGlCQUFpQixHQUFHLFVBQVVobEQsTUFBVixFQUFrQmlsRCxLQUFsQixFQUF5QjtBQUMvQyxNQUFJQSxLQUFKLEVBQVc7QUFDVCxRQUFJcG9CLFVBQVUsR0FBR29vQixLQUFLLENBQUNscEQsS0FBTixDQUFZLEdBQVosQ0FBakI7QUFDQSxRQUFJb0ksS0FBSyxHQUFHLENBQVo7QUFDQSxRQUFJb2xDLFNBQUosRUFBZXBlLEtBQWY7O0FBQ0EsV0FBT2huQixLQUFLLEdBQUcwNEIsVUFBVSxDQUFDbmdDLE1BQTFCLEVBQWtDO0FBQ2hDNnNDLE1BQUFBLFNBQVMsR0FBRzFNLFVBQVUsQ0FBQzE0QixLQUFLLEVBQU4sQ0FBdEI7O0FBQ0EsVUFBSW9sQyxTQUFTLENBQUM3c0MsTUFBZCxFQUFzQjtBQUNwQnl1QixRQUFBQSxLQUFLLEdBQUdvZSxTQUFTLENBQUN4dEMsS0FBVixDQUFnQixHQUFoQixDQUFSO0FBQ0FpRSxRQUFBQSxNQUFNLENBQUNyQixJQUFQLENBQVk7QUFDVkosVUFBQUEsR0FBRyxFQUFFc21ELFdBQVcsQ0FBQzE1QixLQUFLLENBQUMrNUIsS0FBTixFQUFELENBRE47QUFFVnpwRCxVQUFBQSxLQUFLLEVBQUVvcEQsV0FBVyxDQUFDMTVCLEtBQUssQ0FBQ3ZuQixJQUFOLENBQVcsR0FBWCxDQUFEO0FBRlIsU0FBWjtBQUlEO0FBQ0Y7QUFDRjtBQUNGLENBaEJEOztBQWtCQSxJQUFJdWhELGtCQUFrQixHQUFHLFVBQVVGLEtBQVYsRUFBaUI7QUFDeEMsT0FBSzlzQyxPQUFMLENBQWF6YixNQUFiLEdBQXNCLENBQXRCO0FBQ0Fzb0QsRUFBQUEsaUJBQWlCLENBQUMsS0FBSzdzQyxPQUFOLEVBQWU4c0MsS0FBZixDQUFqQjtBQUNELENBSEQ7O0FBS0EsSUFBSUcsdUJBQXVCLEdBQUcsVUFBVUMsTUFBVixFQUFrQkMsUUFBbEIsRUFBNEI7QUFDeEQsTUFBSUQsTUFBTSxHQUFHQyxRQUFiLEVBQXVCLE1BQU1ycEQsU0FBUyxDQUFDLHNCQUFELENBQWY7QUFDeEIsQ0FGRDs7QUFJQSxJQUFJc3BELHVCQUF1QixHQUFHanVDLHlCQUF5QixDQUFDLFNBQVN1OUIsUUFBVCxDQUFrQjJRLE1BQWxCLEVBQTBCajFDLElBQTFCLEVBQWdDO0FBQ3RGeEQsRUFBQUEsa0JBQWdCLENBQUMsSUFBRCxFQUFPO0FBQ3JCM0ssSUFBQUEsSUFBSSxFQUFFaWlELDBCQURlO0FBRXJCM21ELElBQUFBLFFBQVEsRUFBRWlULFdBQVcsQ0FBQzJ6QyxzQkFBc0IsQ0FBQ2tCLE1BQUQsQ0FBdEIsQ0FBK0JydEMsT0FBaEMsQ0FGQTtBQUdyQjVILElBQUFBLElBQUksRUFBRUE7QUFIZSxHQUFQLENBQWhCO0FBS0QsQ0FOc0QsRUFNcEQsVUFOb0QsRUFNeEMsU0FBU2MsSUFBVCxHQUFnQjtBQUM3QixNQUFJbFAsS0FBSyxHQUFHc3BCLHdCQUF3QixDQUFDLElBQUQsQ0FBcEM7QUFDQSxNQUFJbGIsSUFBSSxHQUFHcE8sS0FBSyxDQUFDb08sSUFBakI7QUFDQSxNQUFJZSxJQUFJLEdBQUduUCxLQUFLLENBQUN6RSxRQUFOLENBQWUyVCxJQUFmLEVBQVg7QUFDQSxNQUFJOFosS0FBSyxHQUFHN1osSUFBSSxDQUFDN1YsS0FBakI7O0FBQ0EsTUFBSSxDQUFDNlYsSUFBSSxDQUFDSSxJQUFWLEVBQWdCO0FBQ2RKLElBQUFBLElBQUksQ0FBQzdWLEtBQUwsR0FBYThVLElBQUksS0FBSyxNQUFULEdBQWtCNGEsS0FBSyxDQUFDNXNCLEdBQXhCLEdBQThCZ1MsSUFBSSxLQUFLLFFBQVQsR0FBb0I0YSxLQUFLLENBQUMxdkIsS0FBMUIsR0FBa0MsQ0FBQzB2QixLQUFLLENBQUM1c0IsR0FBUCxFQUFZNHNCLEtBQUssQ0FBQzF2QixLQUFsQixDQUE3RTtBQUNEOztBQUFDLFNBQU82VixJQUFQO0FBQ0gsQ0Fkc0QsQ0FBdkQ7QUFpQkE7O0FBQ0EsSUFBSW0wQywwQkFBMEIsR0FBRyxTQUFTL0QsZUFBVCxHQUFxQztBQUNwRWpqQyxFQUFBQSxZQUFVLENBQUMsSUFBRCxFQUFPZ25DLDBCQUFQLEVBQW1DckIsaUJBQW5DLENBQVY7QUFDQSxNQUFJeDRCLElBQUksR0FBR252QixTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJELFNBQVMsQ0FBQyxDQUFELENBQWhDLEdBQXNDVCxTQUFqRDtBQUNBLE1BQUlpTyxJQUFJLEdBQUcsSUFBWDtBQUNBLE1BQUlrTyxPQUFPLEdBQUcsRUFBZDtBQUNBLE1BQUk3SCxjQUFKLEVBQW9CNVMsUUFBcEIsRUFBOEIyVCxJQUE5QixFQUFvQ0MsSUFBcEMsRUFBMENvMEMsYUFBMUMsRUFBeURDLFNBQXpELEVBQW9FdGhDLEtBQXBFLEVBQTJFc2QsTUFBM0UsRUFBbUZwakMsR0FBbkY7QUFFQXdPLEVBQUFBLGtCQUFnQixDQUFDOUMsSUFBRCxFQUFPO0FBQ3JCN0gsSUFBQUEsSUFBSSxFQUFFZ2lELGlCQURlO0FBRXJCanNDLElBQUFBLE9BQU8sRUFBRUEsT0FGWTtBQUdyQnl0QyxJQUFBQSxTQUFTLEVBQUUsWUFBWTtBQUFFO0FBQWEsS0FIakI7QUFJckJULElBQUFBLGtCQUFrQixFQUFFQTtBQUpDLEdBQVAsQ0FBaEI7O0FBT0EsTUFBSXY1QixJQUFJLEtBQUs1dkIsU0FBYixFQUF3QjtBQUN0QixRQUFJaUMsUUFBUSxDQUFDMnRCLElBQUQsQ0FBWixFQUFvQjtBQUNsQnRiLE1BQUFBLGNBQWMsR0FBR0YsaUJBQWlCLENBQUN3YixJQUFELENBQWxDOztBQUNBLFVBQUl0YixjQUFKLEVBQW9CO0FBQ2xCNVMsUUFBQUEsUUFBUSxHQUFHaVQsV0FBVyxDQUFDaWIsSUFBRCxFQUFPdGIsY0FBUCxDQUF0QjtBQUNBZSxRQUFBQSxJQUFJLEdBQUczVCxRQUFRLENBQUMyVCxJQUFoQjs7QUFDQSxlQUFPLENBQUMsQ0FBQ0MsSUFBSSxHQUFHRCxJQUFJLENBQUNqVyxJQUFMLENBQVVzQyxRQUFWLENBQVIsRUFBNkJnVSxJQUFyQyxFQUEyQztBQUN6Q2cwQyxVQUFBQSxhQUFhLEdBQUcvMEMsV0FBVyxDQUFDNVAsUUFBUSxDQUFDdVEsSUFBSSxDQUFDN1YsS0FBTixDQUFULENBQTNCO0FBQ0FrcUQsVUFBQUEsU0FBUyxHQUFHRCxhQUFhLENBQUNyMEMsSUFBMUI7QUFDQSxjQUNFLENBQUNnVCxLQUFLLEdBQUdzaEMsU0FBUyxDQUFDdnFELElBQVYsQ0FBZXNxRCxhQUFmLENBQVQsRUFBd0NoMEMsSUFBeEMsSUFDQSxDQUFDaXdCLE1BQU0sR0FBR2drQixTQUFTLENBQUN2cUQsSUFBVixDQUFlc3FELGFBQWYsQ0FBVixFQUF5Q2gwQyxJQUR6QyxJQUVBLENBQUNpMEMsU0FBUyxDQUFDdnFELElBQVYsQ0FBZXNxRCxhQUFmLEVBQThCaDBDLElBSGpDLEVBSUUsTUFBTXpWLFNBQVMsQ0FBQyxpQ0FBRCxDQUFmO0FBQ0ZrYyxVQUFBQSxPQUFPLENBQUN4WixJQUFSLENBQWE7QUFBRUosWUFBQUEsR0FBRyxFQUFFZ08sV0FBUyxDQUFDOFgsS0FBSyxDQUFDNW9CLEtBQVAsQ0FBaEI7QUFBK0JBLFlBQUFBLEtBQUssRUFBRThRLFdBQVMsQ0FBQ28xQixNQUFNLENBQUNsbUMsS0FBUjtBQUEvQyxXQUFiO0FBQ0Q7QUFDRixPQWJELE1BYU8sS0FBSzhDLEdBQUwsSUFBWXF0QixJQUFaLEVBQWtCLElBQUk1c0IsUUFBTSxDQUFDNHNCLElBQUQsRUFBT3J0QixHQUFQLENBQVYsRUFBdUI0WixPQUFPLENBQUN4WixJQUFSLENBQWE7QUFBRUosUUFBQUEsR0FBRyxFQUFFQSxHQUFQO0FBQVk5QyxRQUFBQSxLQUFLLEVBQUU4USxXQUFTLENBQUNxZixJQUFJLENBQUNydEIsR0FBRCxDQUFMO0FBQTVCLE9BQWI7QUFDakQsS0FoQkQsTUFnQk87QUFDTHltRCxNQUFBQSxpQkFBaUIsQ0FDZjdzQyxPQURlLEVBRWYsT0FBT3lULElBQVAsS0FBZ0IsUUFBaEIsR0FBMkJBLElBQUksQ0FBQzFQLE1BQUwsQ0FBWSxDQUFaLE1BQW1CLEdBQW5CLEdBQXlCMFAsSUFBSSxDQUFDL3ZCLEtBQUwsQ0FBVyxDQUFYLENBQXpCLEdBQXlDK3ZCLElBQXBFLEdBQTJFcmYsV0FBUyxDQUFDcWYsSUFBRCxDQUZyRSxDQUFqQjtBQUlEO0FBQ0Y7QUFDRixDQXRDRDs7QUF3Q0EsSUFBSWk2Qix3QkFBd0IsR0FBR0osMEJBQTBCLENBQUM3aUQsU0FBMUQ7QUFFQTRiLFdBQVcsQ0FBQ3FuQyx3QkFBRCxFQUEyQjtBQUNwQztBQUNBO0FBQ0FDLEVBQUFBLE1BQU0sRUFBRSxTQUFTQSxNQUFULENBQWdCcm1ELElBQWhCLEVBQXNCaEUsS0FBdEIsRUFBNkI7QUFDbkMycEQsSUFBQUEsdUJBQXVCLENBQUMzb0QsU0FBUyxDQUFDQyxNQUFYLEVBQW1CLENBQW5CLENBQXZCO0FBQ0EsUUFBSXlGLEtBQUssR0FBR21pRCxzQkFBc0IsQ0FBQyxJQUFELENBQWxDO0FBQ0FuaUQsSUFBQUEsS0FBSyxDQUFDZ1csT0FBTixDQUFjeFosSUFBZCxDQUFtQjtBQUFFSixNQUFBQSxHQUFHLEVBQUVnTyxXQUFTLENBQUM5TSxJQUFELENBQWhCO0FBQXdCaEUsTUFBQUEsS0FBSyxFQUFFOFEsV0FBUyxDQUFDOVEsS0FBRDtBQUF4QyxLQUFuQjtBQUNBMEcsSUFBQUEsS0FBSyxDQUFDeWpELFNBQU47QUFDRCxHQVJtQztBQVNwQztBQUNBO0FBQ0EsWUFBVSxVQUFVbm1ELElBQVYsRUFBZ0I7QUFDeEIybEQsSUFBQUEsdUJBQXVCLENBQUMzb0QsU0FBUyxDQUFDQyxNQUFYLEVBQW1CLENBQW5CLENBQXZCO0FBQ0EsUUFBSXlGLEtBQUssR0FBR21pRCxzQkFBc0IsQ0FBQyxJQUFELENBQWxDO0FBQ0EsUUFBSW5zQyxPQUFPLEdBQUdoVyxLQUFLLENBQUNnVyxPQUFwQjtBQUNBLFFBQUk1WixHQUFHLEdBQUdnTyxXQUFTLENBQUM5TSxJQUFELENBQW5CO0FBQ0EsUUFBSTBFLEtBQUssR0FBRyxDQUFaOztBQUNBLFdBQU9BLEtBQUssR0FBR2dVLE9BQU8sQ0FBQ3piLE1BQXZCLEVBQStCO0FBQzdCLFVBQUl5YixPQUFPLENBQUNoVSxLQUFELENBQVAsQ0FBZTVGLEdBQWYsS0FBdUJBLEdBQTNCLEVBQWdDNFosT0FBTyxDQUFDeUUsTUFBUixDQUFlelksS0FBZixFQUFzQixDQUF0QixFQUFoQyxLQUNLQSxLQUFLO0FBQ1g7O0FBQ0RoQyxJQUFBQSxLQUFLLENBQUN5akQsU0FBTjtBQUNELEdBdEJtQztBQXVCcEM7QUFDQTtBQUNBN3FELEVBQUFBLEdBQUcsRUFBRSxTQUFTQSxHQUFULENBQWEwRSxJQUFiLEVBQW1CO0FBQ3RCMmxELElBQUFBLHVCQUF1QixDQUFDM29ELFNBQVMsQ0FBQ0MsTUFBWCxFQUFtQixDQUFuQixDQUF2QjtBQUNBLFFBQUl5YixPQUFPLEdBQUdtc0Msc0JBQXNCLENBQUMsSUFBRCxDQUF0QixDQUE2Qm5zQyxPQUEzQztBQUNBLFFBQUk1WixHQUFHLEdBQUdnTyxXQUFTLENBQUM5TSxJQUFELENBQW5CO0FBQ0EsUUFBSTBFLEtBQUssR0FBRyxDQUFaOztBQUNBLFdBQU9BLEtBQUssR0FBR2dVLE9BQU8sQ0FBQ3piLE1BQXZCLEVBQStCeUgsS0FBSyxFQUFwQyxFQUF3QztBQUN0QyxVQUFJZ1UsT0FBTyxDQUFDaFUsS0FBRCxDQUFQLENBQWU1RixHQUFmLEtBQXVCQSxHQUEzQixFQUFnQyxPQUFPNFosT0FBTyxDQUFDaFUsS0FBRCxDQUFQLENBQWUxSSxLQUF0QjtBQUNqQzs7QUFDRCxXQUFPLElBQVA7QUFDRCxHQWxDbUM7QUFtQ3BDO0FBQ0E7QUFDQXNxRCxFQUFBQSxNQUFNLEVBQUUsU0FBU0EsTUFBVCxDQUFnQnRtRCxJQUFoQixFQUFzQjtBQUM1QjJsRCxJQUFBQSx1QkFBdUIsQ0FBQzNvRCxTQUFTLENBQUNDLE1BQVgsRUFBbUIsQ0FBbkIsQ0FBdkI7QUFDQSxRQUFJeWIsT0FBTyxHQUFHbXNDLHNCQUFzQixDQUFDLElBQUQsQ0FBdEIsQ0FBNkJuc0MsT0FBM0M7QUFDQSxRQUFJNVosR0FBRyxHQUFHZ08sV0FBUyxDQUFDOU0sSUFBRCxDQUFuQjtBQUNBLFFBQUlPLE1BQU0sR0FBRyxFQUFiO0FBQ0EsUUFBSW1FLEtBQUssR0FBRyxDQUFaOztBQUNBLFdBQU9BLEtBQUssR0FBR2dVLE9BQU8sQ0FBQ3piLE1BQXZCLEVBQStCeUgsS0FBSyxFQUFwQyxFQUF3QztBQUN0QyxVQUFJZ1UsT0FBTyxDQUFDaFUsS0FBRCxDQUFQLENBQWU1RixHQUFmLEtBQXVCQSxHQUEzQixFQUFnQ3lCLE1BQU0sQ0FBQ3JCLElBQVAsQ0FBWXdaLE9BQU8sQ0FBQ2hVLEtBQUQsQ0FBUCxDQUFlMUksS0FBM0I7QUFDakM7O0FBQ0QsV0FBT3VFLE1BQVA7QUFDRCxHQS9DbUM7QUFnRHBDO0FBQ0E7QUFDQStCLEVBQUFBLEdBQUcsRUFBRSxTQUFTQSxHQUFULENBQWF0QyxJQUFiLEVBQW1CO0FBQ3RCMmxELElBQUFBLHVCQUF1QixDQUFDM29ELFNBQVMsQ0FBQ0MsTUFBWCxFQUFtQixDQUFuQixDQUF2QjtBQUNBLFFBQUl5YixPQUFPLEdBQUdtc0Msc0JBQXNCLENBQUMsSUFBRCxDQUF0QixDQUE2Qm5zQyxPQUEzQztBQUNBLFFBQUk1WixHQUFHLEdBQUdnTyxXQUFTLENBQUM5TSxJQUFELENBQW5CO0FBQ0EsUUFBSTBFLEtBQUssR0FBRyxDQUFaOztBQUNBLFdBQU9BLEtBQUssR0FBR2dVLE9BQU8sQ0FBQ3piLE1BQXZCLEVBQStCO0FBQzdCLFVBQUl5YixPQUFPLENBQUNoVSxLQUFLLEVBQU4sQ0FBUCxDQUFpQjVGLEdBQWpCLEtBQXlCQSxHQUE3QixFQUFrQyxPQUFPLElBQVA7QUFDbkM7O0FBQ0QsV0FBTyxLQUFQO0FBQ0QsR0EzRG1DO0FBNERwQztBQUNBO0FBQ0F1RCxFQUFBQSxHQUFHLEVBQUUsU0FBU0EsR0FBVCxDQUFhckMsSUFBYixFQUFtQmhFLEtBQW5CLEVBQTBCO0FBQzdCMnBELElBQUFBLHVCQUF1QixDQUFDM29ELFNBQVMsQ0FBQ0MsTUFBWCxFQUFtQixDQUFuQixDQUF2QjtBQUNBLFFBQUl5RixLQUFLLEdBQUdtaUQsc0JBQXNCLENBQUMsSUFBRCxDQUFsQztBQUNBLFFBQUluc0MsT0FBTyxHQUFHaFcsS0FBSyxDQUFDZ1csT0FBcEI7QUFDQSxRQUFJNnRDLEtBQUssR0FBRyxLQUFaO0FBQ0EsUUFBSXpuRCxHQUFHLEdBQUdnTyxXQUFTLENBQUM5TSxJQUFELENBQW5CO0FBQ0EsUUFBSXBCLEdBQUcsR0FBR2tPLFdBQVMsQ0FBQzlRLEtBQUQsQ0FBbkI7QUFDQSxRQUFJMEksS0FBSyxHQUFHLENBQVo7QUFDQSxRQUFJZ25CLEtBQUo7O0FBQ0EsV0FBT2huQixLQUFLLEdBQUdnVSxPQUFPLENBQUN6YixNQUF2QixFQUErQnlILEtBQUssRUFBcEMsRUFBd0M7QUFDdENnbkIsTUFBQUEsS0FBSyxHQUFHaFQsT0FBTyxDQUFDaFUsS0FBRCxDQUFmOztBQUNBLFVBQUlnbkIsS0FBSyxDQUFDNXNCLEdBQU4sS0FBY0EsR0FBbEIsRUFBdUI7QUFDckIsWUFBSXluRCxLQUFKLEVBQVc3dEMsT0FBTyxDQUFDeUUsTUFBUixDQUFlelksS0FBSyxFQUFwQixFQUF3QixDQUF4QixFQUFYLEtBQ0s7QUFDSDZoRCxVQUFBQSxLQUFLLEdBQUcsSUFBUjtBQUNBNzZCLFVBQUFBLEtBQUssQ0FBQzF2QixLQUFOLEdBQWM0QyxHQUFkO0FBQ0Q7QUFDRjtBQUNGOztBQUNELFFBQUksQ0FBQzJuRCxLQUFMLEVBQVk3dEMsT0FBTyxDQUFDeFosSUFBUixDQUFhO0FBQUVKLE1BQUFBLEdBQUcsRUFBRUEsR0FBUDtBQUFZOUMsTUFBQUEsS0FBSyxFQUFFNEM7QUFBbkIsS0FBYjtBQUNaOEQsSUFBQUEsS0FBSyxDQUFDeWpELFNBQU47QUFDRCxHQW5GbUM7QUFvRnBDO0FBQ0E7QUFDQWxxQyxFQUFBQSxJQUFJLEVBQUUsU0FBU0EsSUFBVCxHQUFnQjtBQUNwQixRQUFJdlosS0FBSyxHQUFHbWlELHNCQUFzQixDQUFDLElBQUQsQ0FBbEM7QUFDQSxRQUFJbnNDLE9BQU8sR0FBR2hXLEtBQUssQ0FBQ2dXLE9BQXBCLENBRm9COztBQUlwQixRQUFJdGMsS0FBSyxHQUFHc2MsT0FBTyxDQUFDdGMsS0FBUixFQUFaO0FBQ0EsUUFBSXN2QixLQUFKLEVBQVc4NkIsWUFBWCxFQUF5QkMsVUFBekI7QUFDQS90QyxJQUFBQSxPQUFPLENBQUN6YixNQUFSLEdBQWlCLENBQWpCOztBQUNBLFNBQUt3cEQsVUFBVSxHQUFHLENBQWxCLEVBQXFCQSxVQUFVLEdBQUdycUQsS0FBSyxDQUFDYSxNQUF4QyxFQUFnRHdwRCxVQUFVLEVBQTFELEVBQThEO0FBQzVELzZCLE1BQUFBLEtBQUssR0FBR3R2QixLQUFLLENBQUNxcUQsVUFBRCxDQUFiOztBQUNBLFdBQUtELFlBQVksR0FBRyxDQUFwQixFQUF1QkEsWUFBWSxHQUFHQyxVQUF0QyxFQUFrREQsWUFBWSxFQUE5RCxFQUFrRTtBQUNoRSxZQUFJOXRDLE9BQU8sQ0FBQzh0QyxZQUFELENBQVAsQ0FBc0IxbkQsR0FBdEIsR0FBNEI0c0IsS0FBSyxDQUFDNXNCLEdBQXRDLEVBQTJDO0FBQ3pDNFosVUFBQUEsT0FBTyxDQUFDeUUsTUFBUixDQUFlcXBDLFlBQWYsRUFBNkIsQ0FBN0IsRUFBZ0M5NkIsS0FBaEM7QUFDQTtBQUNEO0FBQ0Y7O0FBQ0QsVUFBSTg2QixZQUFZLEtBQUtDLFVBQXJCLEVBQWlDL3RDLE9BQU8sQ0FBQ3haLElBQVIsQ0FBYXdzQixLQUFiO0FBQ2xDOztBQUNEaHBCLElBQUFBLEtBQUssQ0FBQ3lqRCxTQUFOO0FBQ0QsR0F4R21DO0FBeUdwQztBQUNBOTVDLEVBQUFBLE9BQU8sRUFBRSxTQUFTQSxPQUFULENBQWlCdXFDO0FBQVM7QUFBMUIsSUFBMkM7QUFDbEQsUUFBSWwrQixPQUFPLEdBQUdtc0Msc0JBQXNCLENBQUMsSUFBRCxDQUF0QixDQUE2Qm5zQyxPQUEzQztBQUNBLFFBQUl0TSxhQUFhLEdBQUdYLElBQUksQ0FBQ21yQyxRQUFELEVBQVc1NUMsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCRCxTQUFTLENBQUMsQ0FBRCxDQUFoQyxHQUFzQ1QsU0FBakQsRUFBNEQsQ0FBNUQsQ0FBeEI7QUFDQSxRQUFJbUksS0FBSyxHQUFHLENBQVo7QUFDQSxRQUFJZ25CLEtBQUo7O0FBQ0EsV0FBT2huQixLQUFLLEdBQUdnVSxPQUFPLENBQUN6YixNQUF2QixFQUErQjtBQUM3Qnl1QixNQUFBQSxLQUFLLEdBQUdoVCxPQUFPLENBQUNoVSxLQUFLLEVBQU4sQ0FBZjtBQUNBMEgsTUFBQUEsYUFBYSxDQUFDc2YsS0FBSyxDQUFDMXZCLEtBQVAsRUFBYzB2QixLQUFLLENBQUM1c0IsR0FBcEIsRUFBeUIsSUFBekIsQ0FBYjtBQUNEO0FBQ0YsR0FuSG1DO0FBb0hwQztBQUNBaUQsRUFBQUEsSUFBSSxFQUFFLFNBQVNBLElBQVQsR0FBZ0I7QUFDcEIsV0FBTyxJQUFJK2pELHVCQUFKLENBQTRCLElBQTVCLEVBQWtDLE1BQWxDLENBQVA7QUFDRCxHQXZIbUM7QUF3SHBDO0FBQ0FydEMsRUFBQUEsTUFBTSxFQUFFLFNBQVNBLE1BQVQsR0FBa0I7QUFDeEIsV0FBTyxJQUFJcXRDLHVCQUFKLENBQTRCLElBQTVCLEVBQWtDLFFBQWxDLENBQVA7QUFDRCxHQTNIbUM7QUE0SHBDO0FBQ0FwdEMsRUFBQUEsT0FBTyxFQUFFLFNBQVNBLE9BQVQsR0FBbUI7QUFDMUIsV0FBTyxJQUFJb3RDLHVCQUFKLENBQTRCLElBQTVCLEVBQWtDLFNBQWxDLENBQVA7QUFDRDtBQS9IbUMsQ0FBM0IsRUFnSVI7QUFBRWhxRCxFQUFBQSxVQUFVLEVBQUU7QUFBZCxDQWhJUSxDQUFYOztBQW1JQThLLFVBQVEsQ0FBQ3cvQyx3QkFBRCxFQUEyQjMxQyxRQUEzQixFQUFxQzIxQyx3QkFBd0IsQ0FBQzF0QyxPQUE5RCxFQUF1RTtBQUFFMVksRUFBQUEsSUFBSSxFQUFFO0FBQVIsQ0FBdkUsQ0FBUjtBQUdBOztBQUNBNEcsVUFBUSxDQUFDdy9DLHdCQUFELEVBQTJCLFVBQTNCLEVBQXVDLFNBQVNqcUQsUUFBVCxHQUFvQjtBQUNqRSxNQUFJdWMsT0FBTyxHQUFHbXNDLHNCQUFzQixDQUFDLElBQUQsQ0FBdEIsQ0FBNkJuc0MsT0FBM0M7QUFDQSxNQUFJblksTUFBTSxHQUFHLEVBQWI7QUFDQSxNQUFJbUUsS0FBSyxHQUFHLENBQVo7QUFDQSxNQUFJZ25CLEtBQUo7O0FBQ0EsU0FBT2huQixLQUFLLEdBQUdnVSxPQUFPLENBQUN6YixNQUF2QixFQUErQjtBQUM3Qnl1QixJQUFBQSxLQUFLLEdBQUdoVCxPQUFPLENBQUNoVSxLQUFLLEVBQU4sQ0FBZjtBQUNBbkUsSUFBQUEsTUFBTSxDQUFDckIsSUFBUCxDQUFZbW1ELFNBQVMsQ0FBQzM1QixLQUFLLENBQUM1c0IsR0FBUCxDQUFULEdBQXVCLEdBQXZCLEdBQTZCdW1ELFNBQVMsQ0FBQzM1QixLQUFLLENBQUMxdkIsS0FBUCxDQUFsRDtBQUNEOztBQUFDLFNBQU91RSxNQUFNLENBQUM0RCxJQUFQLENBQVksR0FBWixDQUFQO0FBQ0gsQ0FUTyxFQVNMO0FBQUVySSxFQUFBQSxVQUFVLEVBQUU7QUFBZCxDQVRLLENBQVI7QUFXQW9SLGdCQUFjLENBQUM4NEMsMEJBQUQsRUFBNkJyQixpQkFBN0IsQ0FBZDtBQUVBOTNDLEdBQUMsQ0FBQztBQUFFL1IsRUFBQUEsTUFBTSxFQUFFLElBQVY7QUFBZ0J1TSxFQUFBQSxNQUFNLEVBQUUsQ0FBQ2k5QztBQUF6QixDQUFELEVBQTRDO0FBQzNDckMsRUFBQUEsZUFBZSxFQUFFK0Q7QUFEMEIsQ0FBNUMsQ0FBRDs7QUFLQSxJQUFJLENBQUMxQixnQkFBRCxJQUFtQjFuRCxVQUFVLENBQUM4bkQsT0FBRCxDQUFqQyxFQUE0QztBQUMxQyxNQUFJZ0Msa0JBQWtCLEdBQUcsVUFBVXY2QixJQUFWLEVBQWdCO0FBQ3ZDLFFBQUkzdEIsUUFBUSxDQUFDMnRCLElBQUQsQ0FBWixFQUFvQjtBQUNsQixVQUFJdzZCLElBQUksR0FBR3g2QixJQUFJLENBQUN3NkIsSUFBaEI7QUFDQSxVQUFJQyxPQUFKOztBQUNBLFVBQUl2cUQsT0FBTyxDQUFDc3FELElBQUQsQ0FBUCxLQUFrQmhDLGlCQUF0QixFQUF5QztBQUN2Q2lDLFFBQUFBLE9BQU8sR0FBR3o2QixJQUFJLENBQUN5NkIsT0FBTCxHQUFlLElBQUlsQyxPQUFKLENBQVl2NEIsSUFBSSxDQUFDeTZCLE9BQWpCLENBQWYsR0FBMkMsSUFBSWxDLE9BQUosRUFBckQ7O0FBQ0EsWUFBSSxDQUFDa0MsT0FBTyxDQUFDdGtELEdBQVIsQ0FBWSxjQUFaLENBQUwsRUFBa0M7QUFDaENza0QsVUFBQUEsT0FBTyxDQUFDdmtELEdBQVIsQ0FBWSxjQUFaLEVBQTRCLGlEQUE1QjtBQUNEOztBQUNELGVBQU8ySCxNQUFNLENBQUNtaUIsSUFBRCxFQUFPO0FBQ2xCdzZCLFVBQUFBLElBQUksRUFBRTVsRCx3QkFBd0IsQ0FBQyxDQUFELEVBQUlqRCxNQUFNLENBQUM2b0QsSUFBRCxDQUFWLENBRFo7QUFFbEJDLFVBQUFBLE9BQU8sRUFBRTdsRCx3QkFBd0IsQ0FBQyxDQUFELEVBQUk2bEQsT0FBSjtBQUZmLFNBQVAsQ0FBYjtBQUlEO0FBQ0Y7O0FBQUMsV0FBT3o2QixJQUFQO0FBQ0gsR0FmRDs7QUFpQkEsTUFBSXZ2QixVQUFVLENBQUMybkQsV0FBRCxDQUFkLEVBQTZCO0FBQzNCMTNDLElBQUFBLEdBQUMsQ0FBQztBQUFFL1IsTUFBQUEsTUFBTSxFQUFFLElBQVY7QUFBZ0JnQixNQUFBQSxVQUFVLEVBQUUsSUFBNUI7QUFBa0N1TCxNQUFBQSxNQUFNLEVBQUU7QUFBMUMsS0FBRCxFQUFtRDtBQUNsRHcvQyxNQUFBQSxLQUFLLEVBQUUsU0FBU0EsS0FBVCxDQUFlcG9EO0FBQU07QUFBckIsUUFBbUM7QUFDeEMsZUFBTzhsRCxXQUFXLENBQUM5bEQsS0FBRCxFQUFRekIsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQW5CLEdBQXVCeXBELGtCQUFrQixDQUFDMXBELFNBQVMsQ0FBQyxDQUFELENBQVYsQ0FBekMsR0FBMEQsRUFBbEUsQ0FBbEI7QUFDRDtBQUhpRCxLQUFuRCxDQUFEO0FBS0Q7O0FBRUQsTUFBSUosVUFBVSxDQUFDNG5ELGFBQUQsQ0FBZCxFQUErQjtBQUM3QixRQUFJc0Msa0JBQWtCLEdBQUcsU0FBU0MsT0FBVCxDQUFpQnRvRDtBQUFNO0FBQXZCLE1BQXFDO0FBQzVEdWdCLE1BQUFBLFlBQVUsQ0FBQyxJQUFELEVBQU84bkMsa0JBQVAsRUFBMkIsU0FBM0IsQ0FBVjtBQUNBLGFBQU8sSUFBSXRDLGFBQUosQ0FBa0IvbEQsS0FBbEIsRUFBeUJ6QixTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUJ5cEQsa0JBQWtCLENBQUMxcEQsU0FBUyxDQUFDLENBQUQsQ0FBVixDQUF6QyxHQUEwRCxFQUFuRixDQUFQO0FBQ0QsS0FIRDs7QUFLQXluRCxJQUFBQSxnQkFBZ0IsQ0FBQ2w1QyxXQUFqQixHQUErQnU3QyxrQkFBL0I7QUFDQUEsSUFBQUEsa0JBQWtCLENBQUMzakQsU0FBbkIsR0FBK0JzaEQsZ0JBQS9CO0FBRUE1M0MsSUFBQUEsR0FBQyxDQUFDO0FBQUUvUixNQUFBQSxNQUFNLEVBQUUsSUFBVjtBQUFnQnVNLE1BQUFBLE1BQU0sRUFBRTtBQUF4QixLQUFELEVBQWlDO0FBQ2hDMC9DLE1BQUFBLE9BQU8sRUFBRUQ7QUFEdUIsS0FBakMsQ0FBRDtBQUdEO0FBQ0Y7O0lBRURwc0QsbUJBQUEsR0FBaUI7QUFDZnVuRCxFQUFBQSxlQUFlLEVBQUUrRCwwQkFERjtBQUVmZ0IsRUFBQUEsUUFBUSxFQUFFbkM7QUFGSyxDQUFqQjs7QUN6V0EsSUFBSWg0QyxHQUFDLEdBQUcxUixPQUFSOztBQUNBLElBQUl5RixXQUFXLEdBQUd6RixXQUFsQjs7QUFDQSxJQUFJbXBELGNBQWMsR0FBR25wRCxTQUFyQjs7QUFDQSxJQUFJTCxRQUFNLEdBQUdLLFFBQWI7O0FBQ0EsSUFBSTZNLGdCQUFnQixHQUFHN00sc0JBQXZCOztBQUNBLElBQUl5TCxRQUFRLEdBQUd6TCxrQkFBZjs7QUFDQSxJQUFJNmpCLFVBQVUsR0FBRzdqQixZQUFqQjs7QUFDQSxJQUFJb0UsTUFBTSxHQUFHcEUsZ0JBQWI7O0FBQ0EsSUFBSWszQixRQUFNLEdBQUdsM0IsY0FBYjs7QUFDQSxJQUFJOHJELFNBQVMsR0FBRzlyRCxXQUFoQjs7QUFDQSxJQUFJZ25DLE1BQU0sR0FBR2huQyxlQUFBLENBQXlDZ25DLE1BQXREOztBQUNBLElBQUkra0IsT0FBTyxHQUFHL3JELHFCQUFkOztBQUNBLElBQUkyUixTQUFTLEdBQUczUixVQUFoQjs7QUFDQSxJQUFJK1IsY0FBYyxHQUFHL1IsZ0JBQXJCOztBQUNBLElBQUlnc0QscUJBQXFCLEdBQUdoc0QsbUJBQTVCOztBQUNBLElBQUlxSSxtQkFBbUIsR0FBR3JJLGFBQTFCOztBQUVBLElBQUlpc0QsU0FBUyxHQUFHdHNELFFBQU0sQ0FBQyttRCxHQUF2QjtBQUNBLElBQUlJLGlCQUFlLEdBQUdrRixxQkFBcUIsQ0FBQ2xGLGVBQTVDO0FBQ0EsSUFBSW9GLDRCQUE0QixHQUFHRixxQkFBcUIsQ0FBQ0gsUUFBekQ7QUFDQSxJQUFJMTVDLGdCQUFnQixHQUFHOUosbUJBQW1CLENBQUNuQixHQUEzQztBQUNBLElBQUlpbEQsbUJBQW1CLEdBQUc5akQsbUJBQW1CLENBQUNoQixTQUFwQixDQUE4QixLQUE5QixDQUExQjtBQUNBLElBQUk2QixLQUFLLEdBQUc1SixJQUFJLENBQUM0SixLQUFqQjtBQUNBLElBQUl1WixHQUFHLEdBQUduakIsSUFBSSxDQUFDbWpCLEdBQWY7QUFFQSxJQUFJMnBDLGlCQUFpQixHQUFHLG1CQUF4QjtBQUNBLElBQUlDLGNBQWMsR0FBRyxnQkFBckI7QUFDQSxJQUFJQyxZQUFZLEdBQUcsY0FBbkI7QUFDQSxJQUFJQyxZQUFZLEdBQUcsY0FBbkI7QUFFQSxJQUFJQyxLQUFLLEdBQUcsUUFBWjs7QUFFQSxJQUFJQyxZQUFZLEdBQUcsYUFBbkI7QUFDQSxJQUFJQyxLQUFLLEdBQUcsSUFBWjtBQUNBLElBQUlDLFNBQVMsR0FBRyxNQUFoQjtBQUNBLElBQUlDLEdBQUcsR0FBRyxVQUFWO0FBQ0EsSUFBSUMsR0FBRyxHQUFHLE9BQVY7QUFDQSxJQUFJQyxHQUFHLEdBQUcsYUFBVjtBQUNBOztBQUNBLElBQUlDLHlCQUF5QixHQUFHLDRCQUFoQztBQUNBLElBQUlDLDJDQUEyQyxHQUFHLDJCQUFsRDtBQUNBLElBQUlDLHdDQUF3QyxHQUFHLHNDQUEvQztBQUNBLElBQUlDLGdCQUFnQixHQUFHLFdBQXZCO0FBQ0E7O0FBQ0EsSUFBSUMsR0FBSjs7QUFFQSxJQUFJQyxTQUFTLEdBQUcsVUFBVTNkLEdBQVYsRUFBZW5zQyxLQUFmLEVBQXNCO0FBQ3BDLE1BQUk4QixNQUFKLEVBQVl1K0MsVUFBWixFQUF3QnA2QyxLQUF4Qjs7QUFDQSxNQUFJakcsS0FBSyxDQUFDZ2UsTUFBTixDQUFhLENBQWIsS0FBbUIsR0FBdkIsRUFBNEI7QUFDMUIsUUFBSWhlLEtBQUssQ0FBQ2dlLE1BQU4sQ0FBYWhlLEtBQUssQ0FBQ3hCLE1BQU4sR0FBZSxDQUE1QixLQUFrQyxHQUF0QyxFQUEyQyxPQUFPd3FELFlBQVA7QUFDM0NsbkQsSUFBQUEsTUFBTSxHQUFHaW9ELFNBQVMsQ0FBQy9wRCxLQUFLLENBQUNyQyxLQUFOLENBQVksQ0FBWixFQUFlLENBQUMsQ0FBaEIsQ0FBRCxDQUFsQjtBQUNBLFFBQUksQ0FBQ21FLE1BQUwsRUFBYSxPQUFPa25ELFlBQVA7QUFDYjdjLElBQUFBLEdBQUcsQ0FBQ3RWLElBQUosR0FBVy8wQixNQUFYLENBSjBCO0FBTTNCLEdBTkQsTUFNTyxJQUFJLENBQUNrb0QsU0FBUyxDQUFDN2QsR0FBRCxDQUFkLEVBQXFCO0FBQzFCLFFBQUl1ZCwyQ0FBMkMsQ0FBQ3JtRCxJQUE1QyxDQUFpRHJELEtBQWpELENBQUosRUFBNkQsT0FBT2dwRCxZQUFQO0FBQzdEbG5ELElBQUFBLE1BQU0sR0FBRyxFQUFUO0FBQ0F1K0MsSUFBQUEsVUFBVSxHQUFHbUksU0FBUyxDQUFDeG9ELEtBQUQsQ0FBdEI7O0FBQ0EsU0FBS2lHLEtBQUssR0FBRyxDQUFiLEVBQWdCQSxLQUFLLEdBQUdvNkMsVUFBVSxDQUFDN2hELE1BQW5DLEVBQTJDeUgsS0FBSyxFQUFoRCxFQUFvRDtBQUNsRG5FLE1BQUFBLE1BQU0sSUFBSW1vRCxhQUFhLENBQUM1SixVQUFVLENBQUNwNkMsS0FBRCxDQUFYLEVBQW9CaWtELHlCQUFwQixDQUF2QjtBQUNEOztBQUNEL2QsSUFBQUEsR0FBRyxDQUFDdFYsSUFBSixHQUFXLzBCLE1BQVg7QUFDRCxHQVJNLE1BUUE7QUFDTDlCLElBQUFBLEtBQUssR0FBR3lvRCxPQUFPLENBQUN6b0QsS0FBRCxDQUFmO0FBQ0EsUUFBSXlwRCx5QkFBeUIsQ0FBQ3BtRCxJQUExQixDQUErQnJELEtBQS9CLENBQUosRUFBMkMsT0FBT2dwRCxZQUFQO0FBQzNDbG5ELElBQUFBLE1BQU0sR0FBR3FvRCxTQUFTLENBQUNucUQsS0FBRCxDQUFsQjtBQUNBLFFBQUk4QixNQUFNLEtBQUssSUFBZixFQUFxQixPQUFPa25ELFlBQVA7QUFDckI3YyxJQUFBQSxHQUFHLENBQUN0VixJQUFKLEdBQVcvMEIsTUFBWDtBQUNEO0FBQ0YsQ0F2QkQ7O0FBeUJBLElBQUlxb0QsU0FBUyxHQUFHLFVBQVVucUQsS0FBVixFQUFpQjtBQUMvQixNQUFJb3FELEtBQUssR0FBR3BxRCxLQUFLLENBQUNuQyxLQUFOLENBQVksR0FBWixDQUFaO0FBQ0EsTUFBSXdzRCxXQUFKLEVBQWlCQyxPQUFqQixFQUEwQnJrRCxLQUExQixFQUFpQ3NrRCxJQUFqQyxFQUF1QzU0QixLQUF2QyxFQUE4QzlyQixNQUE5QyxFQUFzRDJrRCxJQUF0RDs7QUFDQSxNQUFJSixLQUFLLENBQUM1ckQsTUFBTixJQUFnQjRyRCxLQUFLLENBQUNBLEtBQUssQ0FBQzVyRCxNQUFOLEdBQWUsQ0FBaEIsQ0FBTCxJQUEyQixFQUEvQyxFQUFtRDtBQUNqRDRyRCxJQUFBQSxLQUFLLENBQUNLLEdBQU47QUFDRDs7QUFDREosRUFBQUEsV0FBVyxHQUFHRCxLQUFLLENBQUM1ckQsTUFBcEI7QUFDQSxNQUFJNnJELFdBQVcsR0FBRyxDQUFsQixFQUFxQixPQUFPcnFELEtBQVA7QUFDckJzcUQsRUFBQUEsT0FBTyxHQUFHLEVBQVY7O0FBQ0EsT0FBS3JrRCxLQUFLLEdBQUcsQ0FBYixFQUFnQkEsS0FBSyxHQUFHb2tELFdBQXhCLEVBQXFDcGtELEtBQUssRUFBMUMsRUFBOEM7QUFDNUNza0QsSUFBQUEsSUFBSSxHQUFHSCxLQUFLLENBQUNua0QsS0FBRCxDQUFaO0FBQ0EsUUFBSXNrRCxJQUFJLElBQUksRUFBWixFQUFnQixPQUFPdnFELEtBQVA7QUFDaEIyeEIsSUFBQUEsS0FBSyxHQUFHLEVBQVI7O0FBQ0EsUUFBSTQ0QixJQUFJLENBQUMvckQsTUFBTCxHQUFjLENBQWQsSUFBbUIrckQsSUFBSSxDQUFDdnNDLE1BQUwsQ0FBWSxDQUFaLEtBQWtCLEdBQXpDLEVBQThDO0FBQzVDMlQsTUFBQUEsS0FBSyxHQUFHMDNCLFNBQVMsQ0FBQ2htRCxJQUFWLENBQWVrbkQsSUFBZixJQUF1QixFQUF2QixHQUE0QixDQUFwQztBQUNBQSxNQUFBQSxJQUFJLEdBQUdBLElBQUksQ0FBQzVzRCxLQUFMLENBQVdnMEIsS0FBSyxJQUFJLENBQVQsR0FBYSxDQUFiLEdBQWlCLENBQTVCLENBQVA7QUFDRDs7QUFDRCxRQUFJNDRCLElBQUksS0FBSyxFQUFiLEVBQWlCO0FBQ2Yxa0QsTUFBQUEsTUFBTSxHQUFHLENBQVQ7QUFDRCxLQUZELE1BRU87QUFDTCxVQUFJLENBQUMsQ0FBQzhyQixLQUFLLElBQUksRUFBVCxHQUFjNDNCLEdBQWQsR0FBb0I1M0IsS0FBSyxJQUFJLENBQVQsR0FBYTIzQixHQUFiLEdBQW1CRSxHQUF4QyxFQUE2Q25tRCxJQUE3QyxDQUFrRGtuRCxJQUFsRCxDQUFMLEVBQThELE9BQU92cUQsS0FBUDtBQUM5RDZGLE1BQUFBLE1BQU0sR0FBR2lzQixRQUFRLENBQUN5NEIsSUFBRCxFQUFPNTRCLEtBQVAsQ0FBakI7QUFDRDs7QUFDRDI0QixJQUFBQSxPQUFPLENBQUM3cEQsSUFBUixDQUFhb0YsTUFBYjtBQUNEOztBQUNELE9BQUtJLEtBQUssR0FBRyxDQUFiLEVBQWdCQSxLQUFLLEdBQUdva0QsV0FBeEIsRUFBcUNwa0QsS0FBSyxFQUExQyxFQUE4QztBQUM1Q0osSUFBQUEsTUFBTSxHQUFHeWtELE9BQU8sQ0FBQ3JrRCxLQUFELENBQWhCOztBQUNBLFFBQUlBLEtBQUssSUFBSW9rRCxXQUFXLEdBQUcsQ0FBM0IsRUFBOEI7QUFDNUIsVUFBSXhrRCxNQUFNLElBQUlzWixHQUFHLENBQUMsR0FBRCxFQUFNLElBQUlrckMsV0FBVixDQUFqQixFQUF5QyxPQUFPLElBQVA7QUFDMUMsS0FGRCxNQUVPLElBQUl4a0QsTUFBTSxHQUFHLEdBQWIsRUFBa0IsT0FBTyxJQUFQO0FBQzFCOztBQUNEMmtELEVBQUFBLElBQUksR0FBR0YsT0FBTyxDQUFDRyxHQUFSLEVBQVA7O0FBQ0EsT0FBS3hrRCxLQUFLLEdBQUcsQ0FBYixFQUFnQkEsS0FBSyxHQUFHcWtELE9BQU8sQ0FBQzlyRCxNQUFoQyxFQUF3Q3lILEtBQUssRUFBN0MsRUFBaUQ7QUFDL0N1a0QsSUFBQUEsSUFBSSxJQUFJRixPQUFPLENBQUNya0QsS0FBRCxDQUFQLEdBQWlCa1osR0FBRyxDQUFDLEdBQUQsRUFBTSxJQUFJbFosS0FBVixDQUE1QjtBQUNEOztBQUNELFNBQU91a0QsSUFBUDtBQUNELENBcENEOzs7QUF1Q0EsSUFBSVQsU0FBUyxHQUFHLFVBQVUvcEQsS0FBVixFQUFpQjtBQUMvQixNQUFJMHFELE9BQU8sR0FBRyxDQUFDLENBQUQsRUFBSSxDQUFKLEVBQU8sQ0FBUCxFQUFVLENBQVYsRUFBYSxDQUFiLEVBQWdCLENBQWhCLEVBQW1CLENBQW5CLEVBQXNCLENBQXRCLENBQWQ7QUFDQSxNQUFJQyxVQUFVLEdBQUcsQ0FBakI7QUFDQSxNQUFJQyxRQUFRLEdBQUcsSUFBZjtBQUNBLE1BQUlDLE9BQU8sR0FBRyxDQUFkO0FBQ0EsTUFBSXR0RCxLQUFKLEVBQVdpQixNQUFYLEVBQW1Cc3NELFdBQW5CLEVBQWdDQyxTQUFoQyxFQUEyQ2xsRCxNQUEzQyxFQUFtRG1sRCxLQUFuRCxFQUEwREMsSUFBMUQ7O0FBRUEsTUFBSXB0QyxHQUFHLEdBQUcsWUFBWTtBQUNwQixXQUFPN2QsS0FBSyxDQUFDZ2UsTUFBTixDQUFhNnNDLE9BQWIsQ0FBUDtBQUNELEdBRkQ7O0FBSUEsTUFBSWh0QyxHQUFHLE1BQU0sR0FBYixFQUFrQjtBQUNoQixRQUFJN2QsS0FBSyxDQUFDZ2UsTUFBTixDQUFhLENBQWIsS0FBbUIsR0FBdkIsRUFBNEI7QUFDNUI2c0MsSUFBQUEsT0FBTyxJQUFJLENBQVg7QUFDQUYsSUFBQUEsVUFBVTtBQUNWQyxJQUFBQSxRQUFRLEdBQUdELFVBQVg7QUFDRDs7QUFDRCxTQUFPOXNDLEdBQUcsRUFBVixFQUFjO0FBQ1osUUFBSThzQyxVQUFVLElBQUksQ0FBbEIsRUFBcUI7O0FBQ3JCLFFBQUk5c0MsR0FBRyxNQUFNLEdBQWIsRUFBa0I7QUFDaEIsVUFBSStzQyxRQUFRLEtBQUssSUFBakIsRUFBdUI7QUFDdkJDLE1BQUFBLE9BQU87QUFDUEYsTUFBQUEsVUFBVTtBQUNWQyxNQUFBQSxRQUFRLEdBQUdELFVBQVg7QUFDQTtBQUNEOztBQUNEcHRELElBQUFBLEtBQUssR0FBR2lCLE1BQU0sR0FBRyxDQUFqQjs7QUFDQSxXQUFPQSxNQUFNLEdBQUcsQ0FBVCxJQUFjZ3JELEdBQUcsQ0FBQ25tRCxJQUFKLENBQVN3YSxHQUFHLEVBQVosQ0FBckIsRUFBc0M7QUFDcEN0Z0IsTUFBQUEsS0FBSyxHQUFHQSxLQUFLLEdBQUcsRUFBUixHQUFhdTBCLFFBQVEsQ0FBQ2pVLEdBQUcsRUFBSixFQUFRLEVBQVIsQ0FBN0I7QUFDQWd0QyxNQUFBQSxPQUFPO0FBQ1Byc0QsTUFBQUEsTUFBTTtBQUNQOztBQUNELFFBQUlxZixHQUFHLE1BQU0sR0FBYixFQUFrQjtBQUNoQixVQUFJcmYsTUFBTSxJQUFJLENBQWQsRUFBaUI7QUFDakJxc0QsTUFBQUEsT0FBTyxJQUFJcnNELE1BQVg7QUFDQSxVQUFJbXNELFVBQVUsR0FBRyxDQUFqQixFQUFvQjtBQUNwQkcsTUFBQUEsV0FBVyxHQUFHLENBQWQ7O0FBQ0EsYUFBT2p0QyxHQUFHLEVBQVYsRUFBYztBQUNaa3RDLFFBQUFBLFNBQVMsR0FBRyxJQUFaOztBQUNBLFlBQUlELFdBQVcsR0FBRyxDQUFsQixFQUFxQjtBQUNuQixjQUFJanRDLEdBQUcsTUFBTSxHQUFULElBQWdCaXRDLFdBQVcsR0FBRyxDQUFsQyxFQUFxQ0QsT0FBTyxHQUE1QyxLQUNLO0FBQ047O0FBQ0QsWUFBSSxDQUFDekIsS0FBSyxDQUFDL2xELElBQU4sQ0FBV3dhLEdBQUcsRUFBZCxDQUFMLEVBQXdCOztBQUN4QixlQUFPdXJDLEtBQUssQ0FBQy9sRCxJQUFOLENBQVd3YSxHQUFHLEVBQWQsQ0FBUCxFQUEwQjtBQUN4QmhZLFVBQUFBLE1BQU0sR0FBR2lzQixRQUFRLENBQUNqVSxHQUFHLEVBQUosRUFBUSxFQUFSLENBQWpCO0FBQ0EsY0FBSWt0QyxTQUFTLEtBQUssSUFBbEIsRUFBd0JBLFNBQVMsR0FBR2xsRCxNQUFaLENBQXhCLEtBQ0ssSUFBSWtsRCxTQUFTLElBQUksQ0FBakIsRUFBb0IsT0FBcEIsS0FDQUEsU0FBUyxHQUFHQSxTQUFTLEdBQUcsRUFBWixHQUFpQmxsRCxNQUE3QjtBQUNMLGNBQUlrbEQsU0FBUyxHQUFHLEdBQWhCLEVBQXFCO0FBQ3JCRixVQUFBQSxPQUFPO0FBQ1I7O0FBQ0RILFFBQUFBLE9BQU8sQ0FBQ0MsVUFBRCxDQUFQLEdBQXNCRCxPQUFPLENBQUNDLFVBQUQsQ0FBUCxHQUFzQixHQUF0QixHQUE0QkksU0FBbEQ7QUFDQUQsUUFBQUEsV0FBVztBQUNYLFlBQUlBLFdBQVcsSUFBSSxDQUFmLElBQW9CQSxXQUFXLElBQUksQ0FBdkMsRUFBMENILFVBQVU7QUFDckQ7O0FBQ0QsVUFBSUcsV0FBVyxJQUFJLENBQW5CLEVBQXNCO0FBQ3RCO0FBQ0QsS0ExQkQsTUEwQk8sSUFBSWp0QyxHQUFHLE1BQU0sR0FBYixFQUFrQjtBQUN2Qmd0QyxNQUFBQSxPQUFPO0FBQ1AsVUFBSSxDQUFDaHRDLEdBQUcsRUFBUixFQUFZO0FBQ2IsS0FITSxNQUdBLElBQUlBLEdBQUcsRUFBUCxFQUFXOztBQUNsQjZzQyxJQUFBQSxPQUFPLENBQUNDLFVBQVUsRUFBWCxDQUFQLEdBQXdCcHRELEtBQXhCO0FBQ0Q7O0FBQ0QsTUFBSXF0RCxRQUFRLEtBQUssSUFBakIsRUFBdUI7QUFDckJJLElBQUFBLEtBQUssR0FBR0wsVUFBVSxHQUFHQyxRQUFyQjtBQUNBRCxJQUFBQSxVQUFVLEdBQUcsQ0FBYjs7QUFDQSxXQUFPQSxVQUFVLElBQUksQ0FBZCxJQUFtQkssS0FBSyxHQUFHLENBQWxDLEVBQXFDO0FBQ25DQyxNQUFBQSxJQUFJLEdBQUdQLE9BQU8sQ0FBQ0MsVUFBRCxDQUFkO0FBQ0FELE1BQUFBLE9BQU8sQ0FBQ0MsVUFBVSxFQUFYLENBQVAsR0FBd0JELE9BQU8sQ0FBQ0UsUUFBUSxHQUFHSSxLQUFYLEdBQW1CLENBQXBCLENBQS9CO0FBQ0FOLE1BQUFBLE9BQU8sQ0FBQ0UsUUFBUSxHQUFHLEVBQUVJLEtBQWQsQ0FBUCxHQUE4QkMsSUFBOUI7QUFDRDtBQUNGLEdBUkQsTUFRTyxJQUFJTixVQUFVLElBQUksQ0FBbEIsRUFBcUI7O0FBQzVCLFNBQU9ELE9BQVA7QUFDRCxDQTFFRDs7QUE0RUEsSUFBSVEsdUJBQXVCLEdBQUcsVUFBVUMsSUFBVixFQUFnQjtBQUM1QyxNQUFJQyxRQUFRLEdBQUcsSUFBZjtBQUNBLE1BQUkvakMsU0FBUyxHQUFHLENBQWhCO0FBQ0EsTUFBSWdrQyxTQUFTLEdBQUcsSUFBaEI7QUFDQSxNQUFJQyxVQUFVLEdBQUcsQ0FBakI7QUFDQSxNQUFJcmxELEtBQUssR0FBRyxDQUFaOztBQUNBLFNBQU9BLEtBQUssR0FBRyxDQUFmLEVBQWtCQSxLQUFLLEVBQXZCLEVBQTJCO0FBQ3pCLFFBQUlrbEQsSUFBSSxDQUFDbGxELEtBQUQsQ0FBSixLQUFnQixDQUFwQixFQUF1QjtBQUNyQixVQUFJcWxELFVBQVUsR0FBR2prQyxTQUFqQixFQUE0QjtBQUMxQitqQyxRQUFBQSxRQUFRLEdBQUdDLFNBQVg7QUFDQWhrQyxRQUFBQSxTQUFTLEdBQUdpa0MsVUFBWjtBQUNEOztBQUNERCxNQUFBQSxTQUFTLEdBQUcsSUFBWjtBQUNBQyxNQUFBQSxVQUFVLEdBQUcsQ0FBYjtBQUNELEtBUEQsTUFPTztBQUNMLFVBQUlELFNBQVMsS0FBSyxJQUFsQixFQUF3QkEsU0FBUyxHQUFHcGxELEtBQVo7QUFDeEIsUUFBRXFsRCxVQUFGO0FBQ0Q7QUFDRjs7QUFDRCxNQUFJQSxVQUFVLEdBQUdqa0MsU0FBakIsRUFBNEI7QUFDMUIrakMsSUFBQUEsUUFBUSxHQUFHQyxTQUFYO0FBQ0Foa0MsSUFBQUEsU0FBUyxHQUFHaWtDLFVBQVo7QUFDRDs7QUFDRCxTQUFPRixRQUFQO0FBQ0QsQ0F4QkQ7O0FBMEJBLElBQUlHLGFBQWEsR0FBRyxVQUFVMTBCLElBQVYsRUFBZ0I7QUFDbEMsTUFBSS8wQixNQUFKLEVBQVltRSxLQUFaLEVBQW1CMmtELFFBQW5CLEVBQTZCWSxPQUE3QixDQURrQzs7QUFHbEMsTUFBSSxPQUFPMzBCLElBQVAsSUFBZSxRQUFuQixFQUE2QjtBQUMzQi8wQixJQUFBQSxNQUFNLEdBQUcsRUFBVDs7QUFDQSxTQUFLbUUsS0FBSyxHQUFHLENBQWIsRUFBZ0JBLEtBQUssR0FBRyxDQUF4QixFQUEyQkEsS0FBSyxFQUFoQyxFQUFvQztBQUNsQ25FLE1BQUFBLE1BQU0sQ0FBQzJwRCxPQUFQLENBQWU1MEIsSUFBSSxHQUFHLEdBQXRCO0FBQ0FBLE1BQUFBLElBQUksR0FBR2p4QixLQUFLLENBQUNpeEIsSUFBSSxHQUFHLEdBQVIsQ0FBWjtBQUNEOztBQUFDLFdBQU8vMEIsTUFBTSxDQUFDNEQsSUFBUCxDQUFZLEdBQVosQ0FBUCxDQUx5QjtBQU81QixHQVBELE1BT08sSUFBSSxPQUFPbXhCLElBQVAsSUFBZSxRQUFuQixFQUE2QjtBQUNsQy8wQixJQUFBQSxNQUFNLEdBQUcsRUFBVDtBQUNBOG9ELElBQUFBLFFBQVEsR0FBR00sdUJBQXVCLENBQUNyMEIsSUFBRCxDQUFsQzs7QUFDQSxTQUFLNXdCLEtBQUssR0FBRyxDQUFiLEVBQWdCQSxLQUFLLEdBQUcsQ0FBeEIsRUFBMkJBLEtBQUssRUFBaEMsRUFBb0M7QUFDbEMsVUFBSXVsRCxPQUFPLElBQUkzMEIsSUFBSSxDQUFDNXdCLEtBQUQsQ0FBSixLQUFnQixDQUEvQixFQUFrQztBQUNsQyxVQUFJdWxELE9BQUosRUFBYUEsT0FBTyxHQUFHLEtBQVY7O0FBQ2IsVUFBSVosUUFBUSxLQUFLM2tELEtBQWpCLEVBQXdCO0FBQ3RCbkUsUUFBQUEsTUFBTSxJQUFJbUUsS0FBSyxHQUFHLEdBQUgsR0FBUyxJQUF4QjtBQUNBdWxELFFBQUFBLE9BQU8sR0FBRyxJQUFWO0FBQ0QsT0FIRCxNQUdPO0FBQ0wxcEQsUUFBQUEsTUFBTSxJQUFJKzBCLElBQUksQ0FBQzV3QixLQUFELENBQUosQ0FBWXZJLFFBQVosQ0FBcUIsRUFBckIsQ0FBVjtBQUNBLFlBQUl1SSxLQUFLLEdBQUcsQ0FBWixFQUFlbkUsTUFBTSxJQUFJLEdBQVY7QUFDaEI7QUFDRjs7QUFDRCxXQUFPLE1BQU1BLE1BQU4sR0FBZSxHQUF0QjtBQUNEOztBQUFDLFNBQU8rMEIsSUFBUDtBQUNILENBMUJEOztBQTRCQSxJQUFJcXpCLHlCQUF5QixHQUFHLEVBQWhDO0FBQ0EsSUFBSXdCLHdCQUF3QixHQUFHOTNCLFFBQU0sQ0FBQyxFQUFELEVBQUtzMkIseUJBQUwsRUFBZ0M7QUFDbkUsT0FBSyxDQUQ4RDtBQUMzRCxPQUFLLENBRHNEO0FBQ25ELE9BQUssQ0FEOEM7QUFDM0MsT0FBSyxDQURzQztBQUNuQyxPQUFLO0FBRDhCLENBQWhDLENBQXJDO0FBR0EsSUFBSXlCLG9CQUFvQixHQUFHLzNCLFFBQU0sQ0FBQyxFQUFELEVBQUs4M0Isd0JBQUwsRUFBK0I7QUFDOUQsT0FBSyxDQUR5RDtBQUN0RCxPQUFLLENBRGlEO0FBQzlDLE9BQUssQ0FEeUM7QUFDdEMsT0FBSztBQURpQyxDQUEvQixDQUFqQztBQUdBLElBQUlFLHdCQUF3QixHQUFHaDRCLFFBQU0sQ0FBQyxFQUFELEVBQUsrM0Isb0JBQUwsRUFBMkI7QUFDOUQsT0FBSyxDQUR5RDtBQUN0RCxPQUFLLENBRGlEO0FBQzlDLE9BQUssQ0FEeUM7QUFDdEMsT0FBSyxDQURpQztBQUM5QixPQUFLLENBRHlCO0FBQ3RCLE9BQUssQ0FEaUI7QUFDZCxRQUFNLENBRFE7QUFDTCxPQUFLLENBREE7QUFDRyxPQUFLLENBRFI7QUFDVyxPQUFLO0FBRGhCLENBQTNCLENBQXJDOztBQUlBLElBQUkxQixhQUFhLEdBQUcsVUFBVXBzQyxHQUFWLEVBQWVqYSxHQUFmLEVBQW9CO0FBQ3RDLE1BQUlnYSxJQUFJLEdBQUc4bEIsTUFBTSxDQUFDN2xCLEdBQUQsRUFBTSxDQUFOLENBQWpCO0FBQ0EsU0FBT0QsSUFBSSxHQUFHLElBQVAsSUFBZUEsSUFBSSxHQUFHLElBQXRCLElBQThCLENBQUM5YyxNQUFNLENBQUM4QyxHQUFELEVBQU1pYSxHQUFOLENBQXJDLEdBQWtEQSxHQUFsRCxHQUF3RGdwQyxrQkFBa0IsQ0FBQ2hwQyxHQUFELENBQWpGO0FBQ0QsQ0FIRDs7QUFLQSxJQUFJZ3VDLGNBQWMsR0FBRztBQUNuQkMsRUFBQUEsR0FBRyxFQUFFLEVBRGM7QUFFbkJDLEVBQUFBLElBQUksRUFBRSxJQUZhO0FBR25CQyxFQUFBQSxJQUFJLEVBQUUsRUFIYTtBQUluQkMsRUFBQUEsS0FBSyxFQUFFLEdBSlk7QUFLbkJDLEVBQUFBLEVBQUUsRUFBRSxFQUxlO0FBTW5CQyxFQUFBQSxHQUFHLEVBQUU7QUFOYyxDQUFyQjs7QUFTQSxJQUFJbkMsU0FBUyxHQUFHLFVBQVU3ZCxHQUFWLEVBQWU7QUFDN0IsU0FBT3JyQyxNQUFNLENBQUMrcUQsY0FBRCxFQUFpQjFmLEdBQUcsQ0FBQ2lnQixNQUFyQixDQUFiO0FBQ0QsQ0FGRDs7QUFJQSxJQUFJQyxtQkFBbUIsR0FBRyxVQUFVbGdCLEdBQVYsRUFBZTtBQUN2QyxTQUFPQSxHQUFHLENBQUNzWCxRQUFKLElBQWdCLEVBQWhCLElBQXNCdFgsR0FBRyxDQUFDbWdCLFFBQUosSUFBZ0IsRUFBN0M7QUFDRCxDQUZEOztBQUlBLElBQUlDLDhCQUE4QixHQUFHLFVBQVVwZ0IsR0FBVixFQUFlO0FBQ2xELFNBQU8sQ0FBQ0EsR0FBRyxDQUFDdFYsSUFBTCxJQUFhc1YsR0FBRyxDQUFDcWdCLGdCQUFqQixJQUFxQ3JnQixHQUFHLENBQUNpZ0IsTUFBSixJQUFjLE1BQTFEO0FBQ0QsQ0FGRDs7QUFJQSxJQUFJSyxvQkFBb0IsR0FBRyxVQUFVeGtELE1BQVYsRUFBa0J5a0QsVUFBbEIsRUFBOEI7QUFDdkQsTUFBSWpwQixNQUFKO0FBQ0EsU0FBT3g3QixNQUFNLENBQUN6SixNQUFQLElBQWlCLENBQWpCLElBQXNCMHFELEtBQUssQ0FBQzdsRCxJQUFOLENBQVc0RSxNQUFNLENBQUMrVixNQUFQLENBQWMsQ0FBZCxDQUFYLENBQXRCLEtBQ0QsQ0FBQ3lsQixNQUFNLEdBQUd4N0IsTUFBTSxDQUFDK1YsTUFBUCxDQUFjLENBQWQsQ0FBVixLQUErQixHQUEvQixJQUF1QyxDQUFDMHVDLFVBQUQsSUFBZWpwQixNQUFNLElBQUksR0FEL0QsQ0FBUDtBQUVELENBSkQ7O0FBTUEsSUFBSWtwQiw0QkFBNEIsR0FBRyxVQUFVMWtELE1BQVYsRUFBa0I7QUFDbkQsTUFBSXlwQixLQUFKO0FBQ0EsU0FBT3pwQixNQUFNLENBQUN6SixNQUFQLEdBQWdCLENBQWhCLElBQXFCaXVELG9CQUFvQixDQUFDeGtELE1BQU0sQ0FBQ3RLLEtBQVAsQ0FBYSxDQUFiLEVBQWdCLENBQWhCLENBQUQsQ0FBekMsS0FDTHNLLE1BQU0sQ0FBQ3pKLE1BQVAsSUFBaUIsQ0FBakIsSUFDQyxDQUFDa3pCLEtBQUssR0FBR3pwQixNQUFNLENBQUMrVixNQUFQLENBQWMsQ0FBZCxDQUFULE1BQStCLEdBQS9CLElBQXNDMFQsS0FBSyxLQUFLLElBQWhELElBQXdEQSxLQUFLLEtBQUssR0FBbEUsSUFBeUVBLEtBQUssS0FBSyxHQUYvRSxDQUFQO0FBSUQsQ0FORDs7QUFRQSxJQUFJazdCLGVBQWUsR0FBRyxVQUFVemdCLEdBQVYsRUFBZTtBQUNuQyxNQUFJeGdDLElBQUksR0FBR3dnQyxHQUFHLENBQUN4Z0MsSUFBZjtBQUNBLE1BQUlraEQsUUFBUSxHQUFHbGhELElBQUksQ0FBQ25OLE1BQXBCOztBQUNBLE1BQUlxdUQsUUFBUSxLQUFLMWdCLEdBQUcsQ0FBQ2lnQixNQUFKLElBQWMsTUFBZCxJQUF3QlMsUUFBUSxJQUFJLENBQXBDLElBQXlDLENBQUNKLG9CQUFvQixDQUFDOWdELElBQUksQ0FBQyxDQUFELENBQUwsRUFBVSxJQUFWLENBQW5FLENBQVosRUFBaUc7QUFDL0ZBLElBQUFBLElBQUksQ0FBQzgrQyxHQUFMO0FBQ0Q7QUFDRixDQU5EOztBQVFBLElBQUlxQyxXQUFXLEdBQUcsVUFBVUMsT0FBVixFQUFtQjtBQUNuQyxTQUFPQSxPQUFPLEtBQUssR0FBWixJQUFtQkEsT0FBTyxDQUFDN2tELFdBQVIsT0FBMEIsS0FBcEQ7QUFDRCxDQUZEOztBQUlBLElBQUk4a0QsV0FBVyxHQUFHLFVBQVVELE9BQVYsRUFBbUI7QUFDbkNBLEVBQUFBLE9BQU8sR0FBR0EsT0FBTyxDQUFDN2tELFdBQVIsRUFBVjtBQUNBLFNBQU82a0QsT0FBTyxLQUFLLElBQVosSUFBb0JBLE9BQU8sS0FBSyxNQUFoQyxJQUEwQ0EsT0FBTyxLQUFLLE1BQXRELElBQWdFQSxPQUFPLEtBQUssUUFBbkY7QUFDRCxDQUhEOzs7QUFNQSxJQUFJRSxZQUFZLEdBQUcsRUFBbkI7QUFDQSxJQUFJQyxNQUFNLEdBQUcsRUFBYjtBQUNBLElBQUlDLFNBQVMsR0FBRyxFQUFoQjtBQUNBLElBQUlDLDZCQUE2QixHQUFHLEVBQXBDO0FBQ0EsSUFBSUMsaUJBQWlCLEdBQUcsRUFBeEI7QUFDQSxJQUFJQyxRQUFRLEdBQUcsRUFBZjtBQUNBLElBQUlDLGNBQWMsR0FBRyxFQUFyQjtBQUNBLElBQUlDLHlCQUF5QixHQUFHLEVBQWhDO0FBQ0EsSUFBSUMsZ0NBQWdDLEdBQUcsRUFBdkM7QUFDQSxJQUFJQyxTQUFTLEdBQUcsRUFBaEI7QUFDQSxJQUFJQyxJQUFJLEdBQUcsRUFBWDtBQUNBLElBQUlDLFFBQVEsR0FBRyxFQUFmO0FBQ0EsSUFBSUMsSUFBSSxHQUFHLEVBQVg7QUFDQSxJQUFJQyxJQUFJLEdBQUcsRUFBWDtBQUNBLElBQUlDLFVBQVUsR0FBRyxFQUFqQjtBQUNBLElBQUlDLFNBQVMsR0FBRyxFQUFoQjtBQUNBLElBQUlDLFVBQVUsR0FBRyxFQUFqQjtBQUNBLElBQUlDLElBQUksR0FBRyxFQUFYO0FBQ0EsSUFBSUMseUJBQXlCLEdBQUcsRUFBaEM7QUFDQSxJQUFJQyxLQUFLLEdBQUcsRUFBWjtBQUNBLElBQUlDLFFBQVEsR0FBRyxFQUFmOztBQUdBLElBQUlDLFFBQVEsR0FBRyxVQUFVbmlCLEdBQVYsRUFBZW5zQyxLQUFmLEVBQXNCdXVELGFBQXRCLEVBQXFDM0ssSUFBckMsRUFBMkM7QUFDeEQsTUFBSTMvQyxLQUFLLEdBQUdzcUQsYUFBYSxJQUFJdEIsWUFBN0I7QUFDQSxNQUFJcEMsT0FBTyxHQUFHLENBQWQ7QUFDQSxNQUFJcHJDLE1BQU0sR0FBRyxFQUFiO0FBQ0EsTUFBSSt1QyxNQUFNLEdBQUcsS0FBYjtBQUNBLE1BQUlDLFdBQVcsR0FBRyxLQUFsQjtBQUNBLE1BQUlDLGlCQUFpQixHQUFHLEtBQXhCO0FBQ0EsTUFBSXJPLFVBQUosRUFBZ0J4aUMsR0FBaEIsRUFBcUI4d0MsZ0JBQXJCLEVBQXVDQyxPQUF2Qzs7QUFFQSxNQUFJLENBQUNMLGFBQUwsRUFBb0I7QUFDbEJwaUIsSUFBQUEsR0FBRyxDQUFDaWdCLE1BQUosR0FBYSxFQUFiO0FBQ0FqZ0IsSUFBQUEsR0FBRyxDQUFDc1gsUUFBSixHQUFlLEVBQWY7QUFDQXRYLElBQUFBLEdBQUcsQ0FBQ21nQixRQUFKLEdBQWUsRUFBZjtBQUNBbmdCLElBQUFBLEdBQUcsQ0FBQ3RWLElBQUosR0FBVyxJQUFYO0FBQ0FzVixJQUFBQSxHQUFHLENBQUM5VixJQUFKLEdBQVcsSUFBWDtBQUNBOFYsSUFBQUEsR0FBRyxDQUFDeGdDLElBQUosR0FBVyxFQUFYO0FBQ0F3Z0MsSUFBQUEsR0FBRyxDQUFDNGEsS0FBSixHQUFZLElBQVo7QUFDQTVhLElBQUFBLEdBQUcsQ0FBQzBpQixRQUFKLEdBQWUsSUFBZjtBQUNBMWlCLElBQUFBLEdBQUcsQ0FBQ3FnQixnQkFBSixHQUF1QixLQUF2QjtBQUNBeHNELElBQUFBLEtBQUssR0FBR0EsS0FBSyxDQUFDd0YsT0FBTixDQUFjbWtELHdDQUFkLEVBQXdELEVBQXhELENBQVI7QUFDRDs7QUFFRDNwRCxFQUFBQSxLQUFLLEdBQUdBLEtBQUssQ0FBQ3dGLE9BQU4sQ0FBY29rRCxnQkFBZCxFQUFnQyxFQUFoQyxDQUFSO0FBRUF2SixFQUFBQSxVQUFVLEdBQUdtSSxTQUFTLENBQUN4b0QsS0FBRCxDQUF0Qjs7QUFFQSxTQUFPNnFELE9BQU8sSUFBSXhLLFVBQVUsQ0FBQzdoRCxNQUE3QixFQUFxQztBQUNuQ3FmLElBQUFBLEdBQUcsR0FBR3dpQyxVQUFVLENBQUN3SyxPQUFELENBQWhCOztBQUNBLFlBQVE1bUQsS0FBUjtBQUNFLFdBQUtncEQsWUFBTDtBQUNFLFlBQUlwdkMsR0FBRyxJQUFJcXJDLEtBQUssQ0FBQzdsRCxJQUFOLENBQVd3YSxHQUFYLENBQVgsRUFBNEI7QUFDMUI0QixVQUFBQSxNQUFNLElBQUk1QixHQUFHLENBQUMzVixXQUFKLEVBQVY7QUFDQWpFLFVBQUFBLEtBQUssR0FBR2lwRCxNQUFSO0FBQ0QsU0FIRCxNQUdPLElBQUksQ0FBQ3FCLGFBQUwsRUFBb0I7QUFDekJ0cUQsVUFBQUEsS0FBSyxHQUFHa3BELFNBQVI7QUFDQTtBQUNELFNBSE0sTUFHQSxPQUFPcEUsY0FBUDs7QUFDUDs7QUFFRixXQUFLbUUsTUFBTDtBQUNFLFlBQUlydkMsR0FBRyxLQUFLc3JDLFlBQVksQ0FBQzlsRCxJQUFiLENBQWtCd2EsR0FBbEIsS0FBMEJBLEdBQUcsSUFBSSxHQUFqQyxJQUF3Q0EsR0FBRyxJQUFJLEdBQS9DLElBQXNEQSxHQUFHLElBQUksR0FBbEUsQ0FBUCxFQUErRTtBQUM3RTRCLFVBQUFBLE1BQU0sSUFBSTVCLEdBQUcsQ0FBQzNWLFdBQUosRUFBVjtBQUNELFNBRkQsTUFFTyxJQUFJMlYsR0FBRyxJQUFJLEdBQVgsRUFBZ0I7QUFDckIsY0FBSTB3QyxhQUFhLEtBQ2R2RSxTQUFTLENBQUM3ZCxHQUFELENBQVQsSUFBa0JyckMsTUFBTSxDQUFDK3FELGNBQUQsRUFBaUJwc0MsTUFBakIsQ0FBekIsSUFDQ0EsTUFBTSxJQUFJLE1BQVYsS0FBcUI0c0MsbUJBQW1CLENBQUNsZ0IsR0FBRCxDQUFuQixJQUE0QkEsR0FBRyxDQUFDOVYsSUFBSixLQUFhLElBQTlELENBREQsSUFFQzhWLEdBQUcsQ0FBQ2lnQixNQUFKLElBQWMsTUFBZCxJQUF3QixDQUFDamdCLEdBQUcsQ0FBQ3RWLElBSGYsQ0FBakIsRUFJRztBQUNIc1YsVUFBQUEsR0FBRyxDQUFDaWdCLE1BQUosR0FBYTNzQyxNQUFiOztBQUNBLGNBQUk4dUMsYUFBSixFQUFtQjtBQUNqQixnQkFBSXZFLFNBQVMsQ0FBQzdkLEdBQUQsQ0FBVCxJQUFrQjBmLGNBQWMsQ0FBQzFmLEdBQUcsQ0FBQ2lnQixNQUFMLENBQWQsSUFBOEJqZ0IsR0FBRyxDQUFDOVYsSUFBeEQsRUFBOEQ4VixHQUFHLENBQUM5VixJQUFKLEdBQVcsSUFBWDtBQUM5RDtBQUNEOztBQUNENVcsVUFBQUEsTUFBTSxHQUFHLEVBQVQ7O0FBQ0EsY0FBSTBzQixHQUFHLENBQUNpZ0IsTUFBSixJQUFjLE1BQWxCLEVBQTBCO0FBQ3hCbm9ELFlBQUFBLEtBQUssR0FBRzZwRCxJQUFSO0FBQ0QsV0FGRCxNQUVPLElBQUk5RCxTQUFTLENBQUM3ZCxHQUFELENBQVQsSUFBa0J5WCxJQUFsQixJQUEwQkEsSUFBSSxDQUFDd0ksTUFBTCxJQUFlamdCLEdBQUcsQ0FBQ2lnQixNQUFqRCxFQUF5RDtBQUM5RG5vRCxZQUFBQSxLQUFLLEdBQUdtcEQsNkJBQVI7QUFDRCxXQUZNLE1BRUEsSUFBSXBELFNBQVMsQ0FBQzdkLEdBQUQsQ0FBYixFQUFvQjtBQUN6QmxvQyxZQUFBQSxLQUFLLEdBQUd1cEQseUJBQVI7QUFDRCxXQUZNLE1BRUEsSUFBSW5OLFVBQVUsQ0FBQ3dLLE9BQU8sR0FBRyxDQUFYLENBQVYsSUFBMkIsR0FBL0IsRUFBb0M7QUFDekM1bUQsWUFBQUEsS0FBSyxHQUFHb3BELGlCQUFSO0FBQ0F4QyxZQUFBQSxPQUFPO0FBQ1IsV0FITSxNQUdBO0FBQ0wxZSxZQUFBQSxHQUFHLENBQUNxZ0IsZ0JBQUosR0FBdUIsSUFBdkI7QUFDQXJnQixZQUFBQSxHQUFHLENBQUN4Z0MsSUFBSixDQUFTbEwsSUFBVCxDQUFjLEVBQWQ7QUFDQXdELFlBQUFBLEtBQUssR0FBR2txRCx5QkFBUjtBQUNEO0FBQ0YsU0ExQk0sTUEwQkEsSUFBSSxDQUFDSSxhQUFMLEVBQW9CO0FBQ3pCOXVDLFVBQUFBLE1BQU0sR0FBRyxFQUFUO0FBQ0F4YixVQUFBQSxLQUFLLEdBQUdrcEQsU0FBUjtBQUNBdEMsVUFBQUEsT0FBTyxHQUFHLENBQVY7QUFDQTtBQUNELFNBTE0sTUFLQSxPQUFPOUIsY0FBUDs7QUFDUDs7QUFFRixXQUFLb0UsU0FBTDtBQUNFLFlBQUksQ0FBQ3ZKLElBQUQsSUFBVUEsSUFBSSxDQUFDNEksZ0JBQUwsSUFBeUIzdUMsR0FBRyxJQUFJLEdBQTlDLEVBQW9ELE9BQU9rckMsY0FBUDs7QUFDcEQsWUFBSW5GLElBQUksQ0FBQzRJLGdCQUFMLElBQXlCM3VDLEdBQUcsSUFBSSxHQUFwQyxFQUF5QztBQUN2Q3N1QixVQUFBQSxHQUFHLENBQUNpZ0IsTUFBSixHQUFheEksSUFBSSxDQUFDd0ksTUFBbEI7QUFDQWpnQixVQUFBQSxHQUFHLENBQUN4Z0MsSUFBSixHQUFXaTRDLElBQUksQ0FBQ2o0QyxJQUFMLENBQVVoTyxLQUFWLEVBQVg7QUFDQXd1QyxVQUFBQSxHQUFHLENBQUM0YSxLQUFKLEdBQVluRCxJQUFJLENBQUNtRCxLQUFqQjtBQUNBNWEsVUFBQUEsR0FBRyxDQUFDMGlCLFFBQUosR0FBZSxFQUFmO0FBQ0ExaUIsVUFBQUEsR0FBRyxDQUFDcWdCLGdCQUFKLEdBQXVCLElBQXZCO0FBQ0F2b0QsVUFBQUEsS0FBSyxHQUFHb3FELFFBQVI7QUFDQTtBQUNEOztBQUNEcHFELFFBQUFBLEtBQUssR0FBRzIvQyxJQUFJLENBQUN3SSxNQUFMLElBQWUsTUFBZixHQUF3QjBCLElBQXhCLEdBQStCUixRQUF2QztBQUNBOztBQUVGLFdBQUtGLDZCQUFMO0FBQ0UsWUFBSXZ2QyxHQUFHLElBQUksR0FBUCxJQUFjd2lDLFVBQVUsQ0FBQ3dLLE9BQU8sR0FBRyxDQUFYLENBQVYsSUFBMkIsR0FBN0MsRUFBa0Q7QUFDaEQ1bUQsVUFBQUEsS0FBSyxHQUFHd3BELGdDQUFSO0FBQ0E1QyxVQUFBQSxPQUFPO0FBQ1IsU0FIRCxNQUdPO0FBQ0w1bUQsVUFBQUEsS0FBSyxHQUFHcXBELFFBQVI7QUFDQTtBQUNEOztBQUFDOztBQUVKLFdBQUtELGlCQUFMO0FBQ0UsWUFBSXh2QyxHQUFHLElBQUksR0FBWCxFQUFnQjtBQUNkNVosVUFBQUEsS0FBSyxHQUFHeXBELFNBQVI7QUFDQTtBQUNELFNBSEQsTUFHTztBQUNMenBELFVBQUFBLEtBQUssR0FBR2lxRCxJQUFSO0FBQ0E7QUFDRDs7QUFFSCxXQUFLWixRQUFMO0FBQ0VuaEIsUUFBQUEsR0FBRyxDQUFDaWdCLE1BQUosR0FBYXhJLElBQUksQ0FBQ3dJLE1BQWxCOztBQUNBLFlBQUl2dUMsR0FBRyxJQUFJZ3NDLEdBQVgsRUFBZ0I7QUFDZDFkLFVBQUFBLEdBQUcsQ0FBQ3NYLFFBQUosR0FBZUcsSUFBSSxDQUFDSCxRQUFwQjtBQUNBdFgsVUFBQUEsR0FBRyxDQUFDbWdCLFFBQUosR0FBZTFJLElBQUksQ0FBQzBJLFFBQXBCO0FBQ0FuZ0IsVUFBQUEsR0FBRyxDQUFDdFYsSUFBSixHQUFXK3NCLElBQUksQ0FBQy9zQixJQUFoQjtBQUNBc1YsVUFBQUEsR0FBRyxDQUFDOVYsSUFBSixHQUFXdXRCLElBQUksQ0FBQ3Z0QixJQUFoQjtBQUNBOFYsVUFBQUEsR0FBRyxDQUFDeGdDLElBQUosR0FBV2k0QyxJQUFJLENBQUNqNEMsSUFBTCxDQUFVaE8sS0FBVixFQUFYO0FBQ0F3dUMsVUFBQUEsR0FBRyxDQUFDNGEsS0FBSixHQUFZbkQsSUFBSSxDQUFDbUQsS0FBakI7QUFDRCxTQVBELE1BT08sSUFBSWxwQyxHQUFHLElBQUksR0FBUCxJQUFlQSxHQUFHLElBQUksSUFBUCxJQUFlbXNDLFNBQVMsQ0FBQzdkLEdBQUQsQ0FBM0MsRUFBbUQ7QUFDeERsb0MsVUFBQUEsS0FBSyxHQUFHc3BELGNBQVI7QUFDRCxTQUZNLE1BRUEsSUFBSTF2QyxHQUFHLElBQUksR0FBWCxFQUFnQjtBQUNyQnN1QixVQUFBQSxHQUFHLENBQUNzWCxRQUFKLEdBQWVHLElBQUksQ0FBQ0gsUUFBcEI7QUFDQXRYLFVBQUFBLEdBQUcsQ0FBQ21nQixRQUFKLEdBQWUxSSxJQUFJLENBQUMwSSxRQUFwQjtBQUNBbmdCLFVBQUFBLEdBQUcsQ0FBQ3RWLElBQUosR0FBVytzQixJQUFJLENBQUMvc0IsSUFBaEI7QUFDQXNWLFVBQUFBLEdBQUcsQ0FBQzlWLElBQUosR0FBV3V0QixJQUFJLENBQUN2dEIsSUFBaEI7QUFDQThWLFVBQUFBLEdBQUcsQ0FBQ3hnQyxJQUFKLEdBQVdpNEMsSUFBSSxDQUFDajRDLElBQUwsQ0FBVWhPLEtBQVYsRUFBWDtBQUNBd3VDLFVBQUFBLEdBQUcsQ0FBQzRhLEtBQUosR0FBWSxFQUFaO0FBQ0E5aUQsVUFBQUEsS0FBSyxHQUFHbXFELEtBQVI7QUFDRCxTQVJNLE1BUUEsSUFBSXZ3QyxHQUFHLElBQUksR0FBWCxFQUFnQjtBQUNyQnN1QixVQUFBQSxHQUFHLENBQUNzWCxRQUFKLEdBQWVHLElBQUksQ0FBQ0gsUUFBcEI7QUFDQXRYLFVBQUFBLEdBQUcsQ0FBQ21nQixRQUFKLEdBQWUxSSxJQUFJLENBQUMwSSxRQUFwQjtBQUNBbmdCLFVBQUFBLEdBQUcsQ0FBQ3RWLElBQUosR0FBVytzQixJQUFJLENBQUMvc0IsSUFBaEI7QUFDQXNWLFVBQUFBLEdBQUcsQ0FBQzlWLElBQUosR0FBV3V0QixJQUFJLENBQUN2dEIsSUFBaEI7QUFDQThWLFVBQUFBLEdBQUcsQ0FBQ3hnQyxJQUFKLEdBQVdpNEMsSUFBSSxDQUFDajRDLElBQUwsQ0FBVWhPLEtBQVYsRUFBWDtBQUNBd3VDLFVBQUFBLEdBQUcsQ0FBQzRhLEtBQUosR0FBWW5ELElBQUksQ0FBQ21ELEtBQWpCO0FBQ0E1YSxVQUFBQSxHQUFHLENBQUMwaUIsUUFBSixHQUFlLEVBQWY7QUFDQTVxRCxVQUFBQSxLQUFLLEdBQUdvcUQsUUFBUjtBQUNELFNBVE0sTUFTQTtBQUNMbGlCLFVBQUFBLEdBQUcsQ0FBQ3NYLFFBQUosR0FBZUcsSUFBSSxDQUFDSCxRQUFwQjtBQUNBdFgsVUFBQUEsR0FBRyxDQUFDbWdCLFFBQUosR0FBZTFJLElBQUksQ0FBQzBJLFFBQXBCO0FBQ0FuZ0IsVUFBQUEsR0FBRyxDQUFDdFYsSUFBSixHQUFXK3NCLElBQUksQ0FBQy9zQixJQUFoQjtBQUNBc1YsVUFBQUEsR0FBRyxDQUFDOVYsSUFBSixHQUFXdXRCLElBQUksQ0FBQ3Z0QixJQUFoQjtBQUNBOFYsVUFBQUEsR0FBRyxDQUFDeGdDLElBQUosR0FBV2k0QyxJQUFJLENBQUNqNEMsSUFBTCxDQUFVaE8sS0FBVixFQUFYO0FBQ0F3dUMsVUFBQUEsR0FBRyxDQUFDeGdDLElBQUosQ0FBUzgrQyxHQUFUO0FBQ0F4bUQsVUFBQUEsS0FBSyxHQUFHaXFELElBQVI7QUFDQTtBQUNEOztBQUFDOztBQUVKLFdBQUtYLGNBQUw7QUFDRSxZQUFJdkQsU0FBUyxDQUFDN2QsR0FBRCxDQUFULEtBQW1CdHVCLEdBQUcsSUFBSSxHQUFQLElBQWNBLEdBQUcsSUFBSSxJQUF4QyxDQUFKLEVBQW1EO0FBQ2pENVosVUFBQUEsS0FBSyxHQUFHd3BELGdDQUFSO0FBQ0QsU0FGRCxNQUVPLElBQUk1dkMsR0FBRyxJQUFJLEdBQVgsRUFBZ0I7QUFDckI1WixVQUFBQSxLQUFLLEdBQUd5cEQsU0FBUjtBQUNELFNBRk0sTUFFQTtBQUNMdmhCLFVBQUFBLEdBQUcsQ0FBQ3NYLFFBQUosR0FBZUcsSUFBSSxDQUFDSCxRQUFwQjtBQUNBdFgsVUFBQUEsR0FBRyxDQUFDbWdCLFFBQUosR0FBZTFJLElBQUksQ0FBQzBJLFFBQXBCO0FBQ0FuZ0IsVUFBQUEsR0FBRyxDQUFDdFYsSUFBSixHQUFXK3NCLElBQUksQ0FBQy9zQixJQUFoQjtBQUNBc1YsVUFBQUEsR0FBRyxDQUFDOVYsSUFBSixHQUFXdXRCLElBQUksQ0FBQ3Z0QixJQUFoQjtBQUNBcHlCLFVBQUFBLEtBQUssR0FBR2lxRCxJQUFSO0FBQ0E7QUFDRDs7QUFBQzs7QUFFSixXQUFLVix5QkFBTDtBQUNFdnBELFFBQUFBLEtBQUssR0FBR3dwRCxnQ0FBUjtBQUNBLFlBQUk1dkMsR0FBRyxJQUFJLEdBQVAsSUFBYzRCLE1BQU0sQ0FBQ3pCLE1BQVAsQ0FBYzZzQyxPQUFPLEdBQUcsQ0FBeEIsS0FBOEIsR0FBaEQsRUFBcUQ7QUFDckRBLFFBQUFBLE9BQU87QUFDUDs7QUFFRixXQUFLNEMsZ0NBQUw7QUFDRSxZQUFJNXZDLEdBQUcsSUFBSSxHQUFQLElBQWNBLEdBQUcsSUFBSSxJQUF6QixFQUErQjtBQUM3QjVaLFVBQUFBLEtBQUssR0FBR3lwRCxTQUFSO0FBQ0E7QUFDRDs7QUFBQzs7QUFFSixXQUFLQSxTQUFMO0FBQ0UsWUFBSTd2QyxHQUFHLElBQUksR0FBWCxFQUFnQjtBQUNkLGNBQUkyd0MsTUFBSixFQUFZL3VDLE1BQU0sR0FBRyxRQUFRQSxNQUFqQjtBQUNaK3VDLFVBQUFBLE1BQU0sR0FBRyxJQUFUO0FBQ0FHLFVBQUFBLGdCQUFnQixHQUFHbkcsU0FBUyxDQUFDL29DLE1BQUQsQ0FBNUI7O0FBQ0EsZUFBSyxJQUFJMVksQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRzRuRCxnQkFBZ0IsQ0FBQ253RCxNQUFyQyxFQUE2Q3VJLENBQUMsRUFBOUMsRUFBa0Q7QUFDaEQsZ0JBQUlxNUMsU0FBUyxHQUFHdU8sZ0JBQWdCLENBQUM1bkQsQ0FBRCxDQUFoQzs7QUFDQSxnQkFBSXE1QyxTQUFTLElBQUksR0FBYixJQUFvQixDQUFDc08saUJBQXpCLEVBQTRDO0FBQzFDQSxjQUFBQSxpQkFBaUIsR0FBRyxJQUFwQjtBQUNBO0FBQ0Q7O0FBQ0QsZ0JBQUlJLGlCQUFpQixHQUFHN0UsYUFBYSxDQUFDN0osU0FBRCxFQUFZd0wsd0JBQVosQ0FBckM7QUFDQSxnQkFBSThDLGlCQUFKLEVBQXVCdmlCLEdBQUcsQ0FBQ21nQixRQUFKLElBQWdCd0MsaUJBQWhCLENBQXZCLEtBQ0szaUIsR0FBRyxDQUFDc1gsUUFBSixJQUFnQnFMLGlCQUFoQjtBQUNOOztBQUNEcnZDLFVBQUFBLE1BQU0sR0FBRyxFQUFUO0FBQ0QsU0FmRCxNQWVPLElBQ0w1QixHQUFHLElBQUlnc0MsR0FBUCxJQUFjaHNDLEdBQUcsSUFBSSxHQUFyQixJQUE0QkEsR0FBRyxJQUFJLEdBQW5DLElBQTBDQSxHQUFHLElBQUksR0FBakQsSUFDQ0EsR0FBRyxJQUFJLElBQVAsSUFBZW1zQyxTQUFTLENBQUM3ZCxHQUFELENBRnBCLEVBR0w7QUFDQSxjQUFJcWlCLE1BQU0sSUFBSS91QyxNQUFNLElBQUksRUFBeEIsRUFBNEIsT0FBT3FwQyxpQkFBUDtBQUM1QitCLFVBQUFBLE9BQU8sSUFBSXJDLFNBQVMsQ0FBQy9vQyxNQUFELENBQVQsQ0FBa0JqaEIsTUFBbEIsR0FBMkIsQ0FBdEM7QUFDQWloQixVQUFBQSxNQUFNLEdBQUcsRUFBVDtBQUNBeGIsVUFBQUEsS0FBSyxHQUFHMHBELElBQVI7QUFDRCxTQVJNLE1BUUFsdUMsTUFBTSxJQUFJNUIsR0FBVjs7QUFDUDs7QUFFRixXQUFLOHZDLElBQUw7QUFDQSxXQUFLQyxRQUFMO0FBQ0UsWUFBSVcsYUFBYSxJQUFJcGlCLEdBQUcsQ0FBQ2lnQixNQUFKLElBQWMsTUFBbkMsRUFBMkM7QUFDekNub0QsVUFBQUEsS0FBSyxHQUFHK3BELFNBQVI7QUFDQTtBQUNELFNBSEQsTUFHTyxJQUFJbndDLEdBQUcsSUFBSSxHQUFQLElBQWMsQ0FBQzR3QyxXQUFuQixFQUFnQztBQUNyQyxjQUFJaHZDLE1BQU0sSUFBSSxFQUFkLEVBQWtCLE9BQU91cEMsWUFBUDtBQUNsQjRGLFVBQUFBLE9BQU8sR0FBRzlFLFNBQVMsQ0FBQzNkLEdBQUQsRUFBTTFzQixNQUFOLENBQW5CO0FBQ0EsY0FBSW12QyxPQUFKLEVBQWEsT0FBT0EsT0FBUDtBQUNibnZDLFVBQUFBLE1BQU0sR0FBRyxFQUFUO0FBQ0F4YixVQUFBQSxLQUFLLEdBQUc0cEQsSUFBUjtBQUNBLGNBQUlVLGFBQWEsSUFBSVgsUUFBckIsRUFBK0I7QUFDaEMsU0FQTSxNQU9BLElBQ0wvdkMsR0FBRyxJQUFJZ3NDLEdBQVAsSUFBY2hzQyxHQUFHLElBQUksR0FBckIsSUFBNEJBLEdBQUcsSUFBSSxHQUFuQyxJQUEwQ0EsR0FBRyxJQUFJLEdBQWpELElBQ0NBLEdBQUcsSUFBSSxJQUFQLElBQWVtc0MsU0FBUyxDQUFDN2QsR0FBRCxDQUZwQixFQUdMO0FBQ0EsY0FBSTZkLFNBQVMsQ0FBQzdkLEdBQUQsQ0FBVCxJQUFrQjFzQixNQUFNLElBQUksRUFBaEMsRUFBb0MsT0FBT3VwQyxZQUFQO0FBQ3BDLGNBQUl1RixhQUFhLElBQUk5dUMsTUFBTSxJQUFJLEVBQTNCLEtBQWtDNHNDLG1CQUFtQixDQUFDbGdCLEdBQUQsQ0FBbkIsSUFBNEJBLEdBQUcsQ0FBQzlWLElBQUosS0FBYSxJQUEzRSxDQUFKLEVBQXNGO0FBQ3RGdTRCLFVBQUFBLE9BQU8sR0FBRzlFLFNBQVMsQ0FBQzNkLEdBQUQsRUFBTTFzQixNQUFOLENBQW5CO0FBQ0EsY0FBSW12QyxPQUFKLEVBQWEsT0FBT0EsT0FBUDtBQUNibnZDLFVBQUFBLE1BQU0sR0FBRyxFQUFUO0FBQ0F4YixVQUFBQSxLQUFLLEdBQUdncUQsVUFBUjtBQUNBLGNBQUlNLGFBQUosRUFBbUI7QUFDbkI7QUFDRCxTQVpNLE1BWUE7QUFDTCxjQUFJMXdDLEdBQUcsSUFBSSxHQUFYLEVBQWdCNHdDLFdBQVcsR0FBRyxJQUFkLENBQWhCLEtBQ0ssSUFBSTV3QyxHQUFHLElBQUksR0FBWCxFQUFnQjR3QyxXQUFXLEdBQUcsS0FBZDtBQUNyQmh2QyxVQUFBQSxNQUFNLElBQUk1QixHQUFWO0FBQ0Q7O0FBQUM7O0FBRUosV0FBS2d3QyxJQUFMO0FBQ0UsWUFBSXpFLEtBQUssQ0FBQy9sRCxJQUFOLENBQVd3YSxHQUFYLENBQUosRUFBcUI7QUFDbkI0QixVQUFBQSxNQUFNLElBQUk1QixHQUFWO0FBQ0QsU0FGRCxNQUVPLElBQ0xBLEdBQUcsSUFBSWdzQyxHQUFQLElBQWNoc0MsR0FBRyxJQUFJLEdBQXJCLElBQTRCQSxHQUFHLElBQUksR0FBbkMsSUFBMENBLEdBQUcsSUFBSSxHQUFqRCxJQUNDQSxHQUFHLElBQUksSUFBUCxJQUFlbXNDLFNBQVMsQ0FBQzdkLEdBQUQsQ0FEekIsSUFFQW9pQixhQUhLLEVBSUw7QUFDQSxjQUFJOXVDLE1BQU0sSUFBSSxFQUFkLEVBQWtCO0FBQ2hCLGdCQUFJNFcsSUFBSSxHQUFHdkUsUUFBUSxDQUFDclMsTUFBRCxFQUFTLEVBQVQsQ0FBbkI7QUFDQSxnQkFBSTRXLElBQUksR0FBRyxNQUFYLEVBQW1CLE9BQU80eUIsWUFBUDtBQUNuQjljLFlBQUFBLEdBQUcsQ0FBQzlWLElBQUosR0FBWTJ6QixTQUFTLENBQUM3ZCxHQUFELENBQVQsSUFBa0I5VixJQUFJLEtBQUt3MUIsY0FBYyxDQUFDMWYsR0FBRyxDQUFDaWdCLE1BQUwsQ0FBMUMsR0FBMEQsSUFBMUQsR0FBaUUvMUIsSUFBNUU7QUFDQTVXLFlBQUFBLE1BQU0sR0FBRyxFQUFUO0FBQ0Q7O0FBQ0QsY0FBSTh1QyxhQUFKLEVBQW1CO0FBQ25CdHFELFVBQUFBLEtBQUssR0FBR2dxRCxVQUFSO0FBQ0E7QUFDRCxTQWRNLE1BY0EsT0FBT2hGLFlBQVA7O0FBQ1A7O0FBRUYsV0FBSzZFLElBQUw7QUFDRTNoQixRQUFBQSxHQUFHLENBQUNpZ0IsTUFBSixHQUFhLE1BQWI7QUFDQSxZQUFJdnVDLEdBQUcsSUFBSSxHQUFQLElBQWNBLEdBQUcsSUFBSSxJQUF6QixFQUErQjVaLEtBQUssR0FBRzhwRCxVQUFSLENBQS9CLEtBQ0ssSUFBSW5LLElBQUksSUFBSUEsSUFBSSxDQUFDd0ksTUFBTCxJQUFlLE1BQTNCLEVBQW1DO0FBQ3RDLGNBQUl2dUMsR0FBRyxJQUFJZ3NDLEdBQVgsRUFBZ0I7QUFDZDFkLFlBQUFBLEdBQUcsQ0FBQ3RWLElBQUosR0FBVytzQixJQUFJLENBQUMvc0IsSUFBaEI7QUFDQXNWLFlBQUFBLEdBQUcsQ0FBQ3hnQyxJQUFKLEdBQVdpNEMsSUFBSSxDQUFDajRDLElBQUwsQ0FBVWhPLEtBQVYsRUFBWDtBQUNBd3VDLFlBQUFBLEdBQUcsQ0FBQzRhLEtBQUosR0FBWW5ELElBQUksQ0FBQ21ELEtBQWpCO0FBQ0QsV0FKRCxNQUlPLElBQUlscEMsR0FBRyxJQUFJLEdBQVgsRUFBZ0I7QUFDckJzdUIsWUFBQUEsR0FBRyxDQUFDdFYsSUFBSixHQUFXK3NCLElBQUksQ0FBQy9zQixJQUFoQjtBQUNBc1YsWUFBQUEsR0FBRyxDQUFDeGdDLElBQUosR0FBV2k0QyxJQUFJLENBQUNqNEMsSUFBTCxDQUFVaE8sS0FBVixFQUFYO0FBQ0F3dUMsWUFBQUEsR0FBRyxDQUFDNGEsS0FBSixHQUFZLEVBQVo7QUFDQTlpRCxZQUFBQSxLQUFLLEdBQUdtcUQsS0FBUjtBQUNELFdBTE0sTUFLQSxJQUFJdndDLEdBQUcsSUFBSSxHQUFYLEVBQWdCO0FBQ3JCc3VCLFlBQUFBLEdBQUcsQ0FBQ3RWLElBQUosR0FBVytzQixJQUFJLENBQUMvc0IsSUFBaEI7QUFDQXNWLFlBQUFBLEdBQUcsQ0FBQ3hnQyxJQUFKLEdBQVdpNEMsSUFBSSxDQUFDajRDLElBQUwsQ0FBVWhPLEtBQVYsRUFBWDtBQUNBd3VDLFlBQUFBLEdBQUcsQ0FBQzRhLEtBQUosR0FBWW5ELElBQUksQ0FBQ21ELEtBQWpCO0FBQ0E1YSxZQUFBQSxHQUFHLENBQUMwaUIsUUFBSixHQUFlLEVBQWY7QUFDQTVxRCxZQUFBQSxLQUFLLEdBQUdvcUQsUUFBUjtBQUNELFdBTk0sTUFNQTtBQUNMLGdCQUFJLENBQUMxQiw0QkFBNEIsQ0FBQ3RNLFVBQVUsQ0FBQzFpRCxLQUFYLENBQWlCa3RELE9BQWpCLEVBQTBCbmxELElBQTFCLENBQStCLEVBQS9CLENBQUQsQ0FBakMsRUFBdUU7QUFDckV5bUMsY0FBQUEsR0FBRyxDQUFDdFYsSUFBSixHQUFXK3NCLElBQUksQ0FBQy9zQixJQUFoQjtBQUNBc1YsY0FBQUEsR0FBRyxDQUFDeGdDLElBQUosR0FBV2k0QyxJQUFJLENBQUNqNEMsSUFBTCxDQUFVaE8sS0FBVixFQUFYO0FBQ0FpdkQsY0FBQUEsZUFBZSxDQUFDemdCLEdBQUQsQ0FBZjtBQUNEOztBQUNEbG9DLFlBQUFBLEtBQUssR0FBR2lxRCxJQUFSO0FBQ0E7QUFDRDtBQUNGLFNBekJJLE1BeUJFO0FBQ0xqcUQsVUFBQUEsS0FBSyxHQUFHaXFELElBQVI7QUFDQTtBQUNEO0FBQUM7O0FBRUosV0FBS0gsVUFBTDtBQUNFLFlBQUlsd0MsR0FBRyxJQUFJLEdBQVAsSUFBY0EsR0FBRyxJQUFJLElBQXpCLEVBQStCO0FBQzdCNVosVUFBQUEsS0FBSyxHQUFHK3BELFNBQVI7QUFDQTtBQUNEOztBQUNELFlBQUlwSyxJQUFJLElBQUlBLElBQUksQ0FBQ3dJLE1BQUwsSUFBZSxNQUF2QixJQUFpQyxDQUFDTyw0QkFBNEIsQ0FBQ3RNLFVBQVUsQ0FBQzFpRCxLQUFYLENBQWlCa3RELE9BQWpCLEVBQTBCbmxELElBQTFCLENBQStCLEVBQS9CLENBQUQsQ0FBbEUsRUFBd0c7QUFDdEcsY0FBSSttRCxvQkFBb0IsQ0FBQzdJLElBQUksQ0FBQ2o0QyxJQUFMLENBQVUsQ0FBVixDQUFELEVBQWUsSUFBZixDQUF4QixFQUE4Q3dnQyxHQUFHLENBQUN4Z0MsSUFBSixDQUFTbEwsSUFBVCxDQUFjbWpELElBQUksQ0FBQ2o0QyxJQUFMLENBQVUsQ0FBVixDQUFkLEVBQTlDLEtBQ0t3Z0MsR0FBRyxDQUFDdFYsSUFBSixHQUFXK3NCLElBQUksQ0FBQy9zQixJQUFoQjtBQUNOOztBQUNENXlCLFFBQUFBLEtBQUssR0FBR2lxRCxJQUFSO0FBQ0E7O0FBRUYsV0FBS0YsU0FBTDtBQUNFLFlBQUlud0MsR0FBRyxJQUFJZ3NDLEdBQVAsSUFBY2hzQyxHQUFHLElBQUksR0FBckIsSUFBNEJBLEdBQUcsSUFBSSxJQUFuQyxJQUEyQ0EsR0FBRyxJQUFJLEdBQWxELElBQXlEQSxHQUFHLElBQUksR0FBcEUsRUFBeUU7QUFDdkUsY0FBSSxDQUFDMHdDLGFBQUQsSUFBa0I5QixvQkFBb0IsQ0FBQ2h0QyxNQUFELENBQTFDLEVBQW9EO0FBQ2xEeGIsWUFBQUEsS0FBSyxHQUFHaXFELElBQVI7QUFDRCxXQUZELE1BRU8sSUFBSXp1QyxNQUFNLElBQUksRUFBZCxFQUFrQjtBQUN2QjBzQixZQUFBQSxHQUFHLENBQUN0VixJQUFKLEdBQVcsRUFBWDtBQUNBLGdCQUFJMDNCLGFBQUosRUFBbUI7QUFDbkJ0cUQsWUFBQUEsS0FBSyxHQUFHZ3FELFVBQVI7QUFDRCxXQUpNLE1BSUE7QUFDTFcsWUFBQUEsT0FBTyxHQUFHOUUsU0FBUyxDQUFDM2QsR0FBRCxFQUFNMXNCLE1BQU4sQ0FBbkI7QUFDQSxnQkFBSW12QyxPQUFKLEVBQWEsT0FBT0EsT0FBUDtBQUNiLGdCQUFJemlCLEdBQUcsQ0FBQ3RWLElBQUosSUFBWSxXQUFoQixFQUE2QnNWLEdBQUcsQ0FBQ3RWLElBQUosR0FBVyxFQUFYO0FBQzdCLGdCQUFJMDNCLGFBQUosRUFBbUI7QUFDbkI5dUMsWUFBQUEsTUFBTSxHQUFHLEVBQVQ7QUFDQXhiLFlBQUFBLEtBQUssR0FBR2dxRCxVQUFSO0FBQ0Q7O0FBQUM7QUFDSCxTQWZELE1BZU94dUMsTUFBTSxJQUFJNUIsR0FBVjs7QUFDUDs7QUFFRixXQUFLb3dDLFVBQUw7QUFDRSxZQUFJakUsU0FBUyxDQUFDN2QsR0FBRCxDQUFiLEVBQW9CO0FBQ2xCbG9DLFVBQUFBLEtBQUssR0FBR2lxRCxJQUFSO0FBQ0EsY0FBSXJ3QyxHQUFHLElBQUksR0FBUCxJQUFjQSxHQUFHLElBQUksSUFBekIsRUFBK0I7QUFDaEMsU0FIRCxNQUdPLElBQUksQ0FBQzB3QyxhQUFELElBQWtCMXdDLEdBQUcsSUFBSSxHQUE3QixFQUFrQztBQUN2Q3N1QixVQUFBQSxHQUFHLENBQUM0YSxLQUFKLEdBQVksRUFBWjtBQUNBOWlELFVBQUFBLEtBQUssR0FBR21xRCxLQUFSO0FBQ0QsU0FITSxNQUdBLElBQUksQ0FBQ0csYUFBRCxJQUFrQjF3QyxHQUFHLElBQUksR0FBN0IsRUFBa0M7QUFDdkNzdUIsVUFBQUEsR0FBRyxDQUFDMGlCLFFBQUosR0FBZSxFQUFmO0FBQ0E1cUQsVUFBQUEsS0FBSyxHQUFHb3FELFFBQVI7QUFDRCxTQUhNLE1BR0EsSUFBSXh3QyxHQUFHLElBQUlnc0MsR0FBWCxFQUFnQjtBQUNyQjVsRCxVQUFBQSxLQUFLLEdBQUdpcUQsSUFBUjtBQUNBLGNBQUlyd0MsR0FBRyxJQUFJLEdBQVgsRUFBZ0I7QUFDakI7O0FBQUM7O0FBRUosV0FBS3F3QyxJQUFMO0FBQ0UsWUFDRXJ3QyxHQUFHLElBQUlnc0MsR0FBUCxJQUFjaHNDLEdBQUcsSUFBSSxHQUFyQixJQUNDQSxHQUFHLElBQUksSUFBUCxJQUFlbXNDLFNBQVMsQ0FBQzdkLEdBQUQsQ0FEekIsSUFFQyxDQUFDb2lCLGFBQUQsS0FBbUIxd0MsR0FBRyxJQUFJLEdBQVAsSUFBY0EsR0FBRyxJQUFJLEdBQXhDLENBSEgsRUFJRTtBQUNBLGNBQUltdkMsV0FBVyxDQUFDdnRDLE1BQUQsQ0FBZixFQUF5QjtBQUN2Qm10QyxZQUFBQSxlQUFlLENBQUN6Z0IsR0FBRCxDQUFmOztBQUNBLGdCQUFJdHVCLEdBQUcsSUFBSSxHQUFQLElBQWMsRUFBRUEsR0FBRyxJQUFJLElBQVAsSUFBZW1zQyxTQUFTLENBQUM3ZCxHQUFELENBQTFCLENBQWxCLEVBQW9EO0FBQ2xEQSxjQUFBQSxHQUFHLENBQUN4Z0MsSUFBSixDQUFTbEwsSUFBVCxDQUFjLEVBQWQ7QUFDRDtBQUNGLFdBTEQsTUFLTyxJQUFJcXNELFdBQVcsQ0FBQ3J0QyxNQUFELENBQWYsRUFBeUI7QUFDOUIsZ0JBQUk1QixHQUFHLElBQUksR0FBUCxJQUFjLEVBQUVBLEdBQUcsSUFBSSxJQUFQLElBQWVtc0MsU0FBUyxDQUFDN2QsR0FBRCxDQUExQixDQUFsQixFQUFvRDtBQUNsREEsY0FBQUEsR0FBRyxDQUFDeGdDLElBQUosQ0FBU2xMLElBQVQsQ0FBYyxFQUFkO0FBQ0Q7QUFDRixXQUpNLE1BSUE7QUFDTCxnQkFBSTByQyxHQUFHLENBQUNpZ0IsTUFBSixJQUFjLE1BQWQsSUFBd0IsQ0FBQ2pnQixHQUFHLENBQUN4Z0MsSUFBSixDQUFTbk4sTUFBbEMsSUFBNENpdUQsb0JBQW9CLENBQUNodEMsTUFBRCxDQUFwRSxFQUE4RTtBQUM1RSxrQkFBSTBzQixHQUFHLENBQUN0VixJQUFSLEVBQWNzVixHQUFHLENBQUN0VixJQUFKLEdBQVcsRUFBWDtBQUNkcFgsY0FBQUEsTUFBTSxHQUFHQSxNQUFNLENBQUN6QixNQUFQLENBQWMsQ0FBZCxJQUFtQixHQUE1QixDQUY0RTtBQUc3RTs7QUFDRG11QixZQUFBQSxHQUFHLENBQUN4Z0MsSUFBSixDQUFTbEwsSUFBVCxDQUFjZ2YsTUFBZDtBQUNEOztBQUNEQSxVQUFBQSxNQUFNLEdBQUcsRUFBVDs7QUFDQSxjQUFJMHNCLEdBQUcsQ0FBQ2lnQixNQUFKLElBQWMsTUFBZCxLQUF5QnZ1QyxHQUFHLElBQUlnc0MsR0FBUCxJQUFjaHNDLEdBQUcsSUFBSSxHQUFyQixJQUE0QkEsR0FBRyxJQUFJLEdBQTVELENBQUosRUFBc0U7QUFDcEUsbUJBQU9zdUIsR0FBRyxDQUFDeGdDLElBQUosQ0FBU25OLE1BQVQsR0FBa0IsQ0FBbEIsSUFBdUIydEMsR0FBRyxDQUFDeGdDLElBQUosQ0FBUyxDQUFULE1BQWdCLEVBQTlDLEVBQWtEO0FBQ2hEd2dDLGNBQUFBLEdBQUcsQ0FBQ3hnQyxJQUFKLENBQVNxN0MsS0FBVDtBQUNEO0FBQ0Y7O0FBQ0QsY0FBSW5wQyxHQUFHLElBQUksR0FBWCxFQUFnQjtBQUNkc3VCLFlBQUFBLEdBQUcsQ0FBQzRhLEtBQUosR0FBWSxFQUFaO0FBQ0E5aUQsWUFBQUEsS0FBSyxHQUFHbXFELEtBQVI7QUFDRCxXQUhELE1BR08sSUFBSXZ3QyxHQUFHLElBQUksR0FBWCxFQUFnQjtBQUNyQnN1QixZQUFBQSxHQUFHLENBQUMwaUIsUUFBSixHQUFlLEVBQWY7QUFDQTVxRCxZQUFBQSxLQUFLLEdBQUdvcUQsUUFBUjtBQUNEO0FBQ0YsU0FsQ0QsTUFrQ087QUFDTDV1QyxVQUFBQSxNQUFNLElBQUl3cUMsYUFBYSxDQUFDcHNDLEdBQUQsRUFBTTh0QyxvQkFBTixDQUF2QjtBQUNEOztBQUFDOztBQUVKLFdBQUt3Qyx5QkFBTDtBQUNFLFlBQUl0d0MsR0FBRyxJQUFJLEdBQVgsRUFBZ0I7QUFDZHN1QixVQUFBQSxHQUFHLENBQUM0YSxLQUFKLEdBQVksRUFBWjtBQUNBOWlELFVBQUFBLEtBQUssR0FBR21xRCxLQUFSO0FBQ0QsU0FIRCxNQUdPLElBQUl2d0MsR0FBRyxJQUFJLEdBQVgsRUFBZ0I7QUFDckJzdUIsVUFBQUEsR0FBRyxDQUFDMGlCLFFBQUosR0FBZSxFQUFmO0FBQ0E1cUQsVUFBQUEsS0FBSyxHQUFHb3FELFFBQVI7QUFDRCxTQUhNLE1BR0EsSUFBSXh3QyxHQUFHLElBQUlnc0MsR0FBWCxFQUFnQjtBQUNyQjFkLFVBQUFBLEdBQUcsQ0FBQ3hnQyxJQUFKLENBQVMsQ0FBVCxLQUFlcytDLGFBQWEsQ0FBQ3BzQyxHQUFELEVBQU1xc0MseUJBQU4sQ0FBNUI7QUFDRDs7QUFBQzs7QUFFSixXQUFLa0UsS0FBTDtBQUNFLFlBQUksQ0FBQ0csYUFBRCxJQUFrQjF3QyxHQUFHLElBQUksR0FBN0IsRUFBa0M7QUFDaENzdUIsVUFBQUEsR0FBRyxDQUFDMGlCLFFBQUosR0FBZSxFQUFmO0FBQ0E1cUQsVUFBQUEsS0FBSyxHQUFHb3FELFFBQVI7QUFDRCxTQUhELE1BR08sSUFBSXh3QyxHQUFHLElBQUlnc0MsR0FBWCxFQUFnQjtBQUNyQixjQUFJaHNDLEdBQUcsSUFBSSxHQUFQLElBQWNtc0MsU0FBUyxDQUFDN2QsR0FBRCxDQUEzQixFQUFrQ0EsR0FBRyxDQUFDNGEsS0FBSixJQUFhLEtBQWIsQ0FBbEMsS0FDSyxJQUFJbHBDLEdBQUcsSUFBSSxHQUFYLEVBQWdCc3VCLEdBQUcsQ0FBQzRhLEtBQUosSUFBYSxLQUFiLENBQWhCLEtBQ0E1YSxHQUFHLENBQUM0YSxLQUFKLElBQWFrRCxhQUFhLENBQUNwc0MsR0FBRCxFQUFNcXNDLHlCQUFOLENBQTFCO0FBQ047O0FBQUM7O0FBRUosV0FBS21FLFFBQUw7QUFDRSxZQUFJeHdDLEdBQUcsSUFBSWdzQyxHQUFYLEVBQWdCMWQsR0FBRyxDQUFDMGlCLFFBQUosSUFBZ0I1RSxhQUFhLENBQUNwc0MsR0FBRCxFQUFNNnRDLHdCQUFOLENBQTdCO0FBQ2hCO0FBM1dKOztBQThXQWIsSUFBQUEsT0FBTztBQUNSO0FBQ0YsQ0E1WUQ7QUErWUE7OztBQUNBLElBQUlrRSxjQUFjLEdBQUcsU0FBUzNMLEdBQVQsQ0FBYWpYO0FBQUk7QUFBakIsRUFBK0I7QUFDbEQsTUFBSXBnQyxJQUFJLEdBQUd3VSxVQUFVLENBQUMsSUFBRCxFQUFPd3VDLGNBQVAsRUFBdUIsS0FBdkIsQ0FBckI7QUFDQSxNQUFJbkwsSUFBSSxHQUFHcmxELFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUF1QkQsU0FBUyxDQUFDLENBQUQsQ0FBaEMsR0FBc0NULFNBQWpEO0FBQ0EsTUFBSWt4RCxTQUFTLEdBQUczZ0QsU0FBUyxDQUFDODlCLEdBQUQsQ0FBekI7QUFDQSxNQUFJbG9DLEtBQUssR0FBRzRLLGdCQUFnQixDQUFDOUMsSUFBRCxFQUFPO0FBQUU3SCxJQUFBQSxJQUFJLEVBQUU7QUFBUixHQUFQLENBQTVCO0FBQ0EsTUFBSStxRCxTQUFKLEVBQWVMLE9BQWY7O0FBQ0EsTUFBSWhMLElBQUksS0FBSzlsRCxTQUFiLEVBQXdCO0FBQ3RCLFFBQUk4bEQsSUFBSSxZQUFZbUwsY0FBcEIsRUFBb0NFLFNBQVMsR0FBR3BHLG1CQUFtQixDQUFDakYsSUFBRCxDQUEvQixDQUFwQyxLQUNLO0FBQ0hnTCxNQUFBQSxPQUFPLEdBQUdOLFFBQVEsQ0FBQ1csU0FBUyxHQUFHLEVBQWIsRUFBaUI1Z0QsU0FBUyxDQUFDdTFDLElBQUQsQ0FBMUIsQ0FBbEI7QUFDQSxVQUFJZ0wsT0FBSixFQUFhLE1BQU03d0QsU0FBUyxDQUFDNndELE9BQUQsQ0FBZjtBQUNkO0FBQ0Y7O0FBQ0RBLEVBQUFBLE9BQU8sR0FBR04sUUFBUSxDQUFDcnFELEtBQUQsRUFBUStxRCxTQUFSLEVBQW1CLElBQW5CLEVBQXlCQyxTQUF6QixDQUFsQjtBQUNBLE1BQUlMLE9BQUosRUFBYSxNQUFNN3dELFNBQVMsQ0FBQzZ3RCxPQUFELENBQWY7QUFDYixNQUFJdkwsWUFBWSxHQUFHcC9DLEtBQUssQ0FBQ28vQyxZQUFOLEdBQXFCLElBQUlHLGlCQUFKLEVBQXhDO0FBQ0EsTUFBSTBMLGlCQUFpQixHQUFHdEcsNEJBQTRCLENBQUN2RixZQUFELENBQXBEO0FBQ0E2TCxFQUFBQSxpQkFBaUIsQ0FBQ2pJLGtCQUFsQixDQUFxQ2hqRCxLQUFLLENBQUM4aUQsS0FBM0M7O0FBQ0FtSSxFQUFBQSxpQkFBaUIsQ0FBQ3hILFNBQWxCLEdBQThCLFlBQVk7QUFDeEN6akQsSUFBQUEsS0FBSyxDQUFDOGlELEtBQU4sR0FBYzFuRCxNQUFNLENBQUNna0QsWUFBRCxDQUFOLElBQXdCLElBQXRDO0FBQ0QsR0FGRDs7QUFHQSxNQUFJLENBQUNsaEQsV0FBTCxFQUFrQjtBQUNoQjRKLElBQUFBLElBQUksQ0FBQ3czQyxJQUFMLEdBQVk0TCxZQUFZLENBQUNqeUQsSUFBYixDQUFrQjZPLElBQWxCLENBQVo7QUFDQUEsSUFBQUEsSUFBSSxDQUFDcWpELE1BQUwsR0FBY0MsU0FBUyxDQUFDbnlELElBQVYsQ0FBZTZPLElBQWYsQ0FBZDtBQUNBQSxJQUFBQSxJQUFJLENBQUM2cUIsUUFBTCxHQUFnQjA0QixXQUFXLENBQUNweUQsSUFBWixDQUFpQjZPLElBQWpCLENBQWhCO0FBQ0FBLElBQUFBLElBQUksQ0FBQzAzQyxRQUFMLEdBQWdCOEwsV0FBVyxDQUFDcnlELElBQVosQ0FBaUI2TyxJQUFqQixDQUFoQjtBQUNBQSxJQUFBQSxJQUFJLENBQUN1Z0QsUUFBTCxHQUFnQmtELFdBQVcsQ0FBQ3R5RCxJQUFaLENBQWlCNk8sSUFBakIsQ0FBaEI7QUFDQUEsSUFBQUEsSUFBSSxDQUFDOHFCLElBQUwsR0FBWTQ0QixPQUFPLENBQUN2eUQsSUFBUixDQUFhNk8sSUFBYixDQUFaO0FBQ0FBLElBQUFBLElBQUksQ0FBQzJqRCxRQUFMLEdBQWdCQyxXQUFXLENBQUN6eUQsSUFBWixDQUFpQjZPLElBQWpCLENBQWhCO0FBQ0FBLElBQUFBLElBQUksQ0FBQ3NxQixJQUFMLEdBQVl1NUIsT0FBTyxDQUFDMXlELElBQVIsQ0FBYTZPLElBQWIsQ0FBWjtBQUNBQSxJQUFBQSxJQUFJLENBQUN1M0MsUUFBTCxHQUFnQnVNLFdBQVcsQ0FBQzN5RCxJQUFaLENBQWlCNk8sSUFBakIsQ0FBaEI7QUFDQUEsSUFBQUEsSUFBSSxDQUFDdTRCLE1BQUwsR0FBY3dyQixTQUFTLENBQUM1eUQsSUFBVixDQUFlNk8sSUFBZixDQUFkO0FBQ0FBLElBQUFBLElBQUksQ0FBQ3MzQyxZQUFMLEdBQW9CME0sZUFBZSxDQUFDN3lELElBQWhCLENBQXFCNk8sSUFBckIsQ0FBcEI7QUFDQUEsSUFBQUEsSUFBSSxDQUFDMjNDLElBQUwsR0FBWXNNLE9BQU8sQ0FBQzl5RCxJQUFSLENBQWE2TyxJQUFiLENBQVo7QUFDRDtBQUNGLENBbkNEOztBQXFDQSxJQUFJa2tELFlBQVksR0FBR2xCLGNBQWMsQ0FBQ3JxRCxTQUFsQzs7QUFFQSxJQUFJeXFELFlBQVksR0FBRyxZQUFZO0FBQzdCLE1BQUloakIsR0FBRyxHQUFHMGMsbUJBQW1CLENBQUMsSUFBRCxDQUE3QjtBQUNBLE1BQUl1RCxNQUFNLEdBQUdqZ0IsR0FBRyxDQUFDaWdCLE1BQWpCO0FBQ0EsTUFBSTNJLFFBQVEsR0FBR3RYLEdBQUcsQ0FBQ3NYLFFBQW5CO0FBQ0EsTUFBSTZJLFFBQVEsR0FBR25nQixHQUFHLENBQUNtZ0IsUUFBbkI7QUFDQSxNQUFJejFCLElBQUksR0FBR3NWLEdBQUcsQ0FBQ3RWLElBQWY7QUFDQSxNQUFJUixJQUFJLEdBQUc4VixHQUFHLENBQUM5VixJQUFmO0FBQ0EsTUFBSTFxQixJQUFJLEdBQUd3Z0MsR0FBRyxDQUFDeGdDLElBQWY7QUFDQSxNQUFJbzdDLEtBQUssR0FBRzVhLEdBQUcsQ0FBQzRhLEtBQWhCO0FBQ0EsTUFBSThILFFBQVEsR0FBRzFpQixHQUFHLENBQUMwaUIsUUFBbkI7QUFDQSxNQUFJL2tCLE1BQU0sR0FBR3NpQixNQUFNLEdBQUcsR0FBdEI7O0FBQ0EsTUFBSXYxQixJQUFJLEtBQUssSUFBYixFQUFtQjtBQUNqQmlULElBQUFBLE1BQU0sSUFBSSxJQUFWOztBQUNBLFFBQUl1aUIsbUJBQW1CLENBQUNsZ0IsR0FBRCxDQUF2QixFQUE4QjtBQUM1QnJDLE1BQUFBLE1BQU0sSUFBSTJaLFFBQVEsSUFBSTZJLFFBQVEsR0FBRyxNQUFNQSxRQUFULEdBQW9CLEVBQWhDLENBQVIsR0FBOEMsR0FBeEQ7QUFDRDs7QUFDRHhpQixJQUFBQSxNQUFNLElBQUl5aEIsYUFBYSxDQUFDMTBCLElBQUQsQ0FBdkI7QUFDQSxRQUFJUixJQUFJLEtBQUssSUFBYixFQUFtQnlULE1BQU0sSUFBSSxNQUFNelQsSUFBaEI7QUFDcEIsR0FQRCxNQU9PLElBQUkrMUIsTUFBTSxJQUFJLE1BQWQsRUFBc0J0aUIsTUFBTSxJQUFJLElBQVY7O0FBQzdCQSxFQUFBQSxNQUFNLElBQUlxQyxHQUFHLENBQUNxZ0IsZ0JBQUosR0FBdUI3Z0QsSUFBSSxDQUFDLENBQUQsQ0FBM0IsR0FBaUNBLElBQUksQ0FBQ25OLE1BQUwsR0FBYyxNQUFNbU4sSUFBSSxDQUFDakcsSUFBTCxDQUFVLEdBQVYsQ0FBcEIsR0FBcUMsRUFBaEY7QUFDQSxNQUFJcWhELEtBQUssS0FBSyxJQUFkLEVBQW9CamQsTUFBTSxJQUFJLE1BQU1pZCxLQUFoQjtBQUNwQixNQUFJOEgsUUFBUSxLQUFLLElBQWpCLEVBQXVCL2tCLE1BQU0sSUFBSSxNQUFNK2tCLFFBQWhCO0FBQ3ZCLFNBQU8va0IsTUFBUDtBQUNELENBdkJEOztBQXlCQSxJQUFJdWxCLFNBQVMsR0FBRyxZQUFZO0FBQzFCLE1BQUlsakIsR0FBRyxHQUFHMGMsbUJBQW1CLENBQUMsSUFBRCxDQUE3QjtBQUNBLE1BQUl1RCxNQUFNLEdBQUdqZ0IsR0FBRyxDQUFDaWdCLE1BQWpCO0FBQ0EsTUFBSS8xQixJQUFJLEdBQUc4VixHQUFHLENBQUM5VixJQUFmO0FBQ0EsTUFBSSsxQixNQUFNLElBQUksTUFBZCxFQUFzQixJQUFJO0FBQ3hCLFdBQU8sSUFBSTJDLGNBQUosQ0FBbUIzQyxNQUFNLENBQUN6Z0QsSUFBUCxDQUFZLENBQVosQ0FBbkIsRUFBbUN5akQsTUFBMUM7QUFDRCxHQUZxQixDQUVwQixPQUFPNXlELEtBQVAsRUFBYztBQUNkLFdBQU8sTUFBUDtBQUNEO0FBQ0QsTUFBSTR2RCxNQUFNLElBQUksTUFBVixJQUFvQixDQUFDcEMsU0FBUyxDQUFDN2QsR0FBRCxDQUFsQyxFQUF5QyxPQUFPLE1BQVA7QUFDekMsU0FBT2lnQixNQUFNLEdBQUcsS0FBVCxHQUFpQmIsYUFBYSxDQUFDcGYsR0FBRyxDQUFDdFYsSUFBTCxDQUE5QixJQUE0Q1IsSUFBSSxLQUFLLElBQVQsR0FBZ0IsTUFBTUEsSUFBdEIsR0FBNkIsRUFBekUsQ0FBUDtBQUNELENBWEQ7O0FBYUEsSUFBSWk1QixXQUFXLEdBQUcsWUFBWTtBQUM1QixTQUFPekcsbUJBQW1CLENBQUMsSUFBRCxDQUFuQixDQUEwQnVELE1BQTFCLEdBQW1DLEdBQTFDO0FBQ0QsQ0FGRDs7QUFJQSxJQUFJbUQsV0FBVyxHQUFHLFlBQVk7QUFDNUIsU0FBTzFHLG1CQUFtQixDQUFDLElBQUQsQ0FBbkIsQ0FBMEJwRixRQUFqQztBQUNELENBRkQ7O0FBSUEsSUFBSStMLFdBQVcsR0FBRyxZQUFZO0FBQzVCLFNBQU8zRyxtQkFBbUIsQ0FBQyxJQUFELENBQW5CLENBQTBCeUQsUUFBakM7QUFDRCxDQUZEOztBQUlBLElBQUltRCxPQUFPLEdBQUcsWUFBWTtBQUN4QixNQUFJdGpCLEdBQUcsR0FBRzBjLG1CQUFtQixDQUFDLElBQUQsQ0FBN0I7QUFDQSxNQUFJaHlCLElBQUksR0FBR3NWLEdBQUcsQ0FBQ3RWLElBQWY7QUFDQSxNQUFJUixJQUFJLEdBQUc4VixHQUFHLENBQUM5VixJQUFmO0FBQ0EsU0FBT1EsSUFBSSxLQUFLLElBQVQsR0FBZ0IsRUFBaEIsR0FDSFIsSUFBSSxLQUFLLElBQVQsR0FBZ0JrMUIsYUFBYSxDQUFDMTBCLElBQUQsQ0FBN0IsR0FDQTAwQixhQUFhLENBQUMxMEIsSUFBRCxDQUFiLEdBQXNCLEdBQXRCLEdBQTRCUixJQUZoQztBQUdELENBUEQ7O0FBU0EsSUFBSXM1QixXQUFXLEdBQUcsWUFBWTtBQUM1QixNQUFJOTRCLElBQUksR0FBR2d5QixtQkFBbUIsQ0FBQyxJQUFELENBQW5CLENBQTBCaHlCLElBQXJDO0FBQ0EsU0FBT0EsSUFBSSxLQUFLLElBQVQsR0FBZ0IsRUFBaEIsR0FBcUIwMEIsYUFBYSxDQUFDMTBCLElBQUQsQ0FBekM7QUFDRCxDQUhEOztBQUtBLElBQUkrNEIsT0FBTyxHQUFHLFlBQVk7QUFDeEIsTUFBSXY1QixJQUFJLEdBQUd3eUIsbUJBQW1CLENBQUMsSUFBRCxDQUFuQixDQUEwQnh5QixJQUFyQztBQUNBLFNBQU9BLElBQUksS0FBSyxJQUFULEdBQWdCLEVBQWhCLEdBQXFCaDNCLE1BQU0sQ0FBQ2czQixJQUFELENBQWxDO0FBQ0QsQ0FIRDs7QUFLQSxJQUFJdzVCLFdBQVcsR0FBRyxZQUFZO0FBQzVCLE1BQUkxakIsR0FBRyxHQUFHMGMsbUJBQW1CLENBQUMsSUFBRCxDQUE3QjtBQUNBLE1BQUlsOUMsSUFBSSxHQUFHd2dDLEdBQUcsQ0FBQ3hnQyxJQUFmO0FBQ0EsU0FBT3dnQyxHQUFHLENBQUNxZ0IsZ0JBQUosR0FBdUI3Z0QsSUFBSSxDQUFDLENBQUQsQ0FBM0IsR0FBaUNBLElBQUksQ0FBQ25OLE1BQUwsR0FBYyxNQUFNbU4sSUFBSSxDQUFDakcsSUFBTCxDQUFVLEdBQVYsQ0FBcEIsR0FBcUMsRUFBN0U7QUFDRCxDQUpEOztBQU1BLElBQUlvcUQsU0FBUyxHQUFHLFlBQVk7QUFDMUIsTUFBSS9JLEtBQUssR0FBRzhCLG1CQUFtQixDQUFDLElBQUQsQ0FBbkIsQ0FBMEI5QixLQUF0QztBQUNBLFNBQU9BLEtBQUssR0FBRyxNQUFNQSxLQUFULEdBQWlCLEVBQTdCO0FBQ0QsQ0FIRDs7QUFLQSxJQUFJZ0osZUFBZSxHQUFHLFlBQVk7QUFDaEMsU0FBT2xILG1CQUFtQixDQUFDLElBQUQsQ0FBbkIsQ0FBMEJ4RixZQUFqQztBQUNELENBRkQ7O0FBSUEsSUFBSTJNLE9BQU8sR0FBRyxZQUFZO0FBQ3hCLE1BQUluQixRQUFRLEdBQUdoRyxtQkFBbUIsQ0FBQyxJQUFELENBQW5CLENBQTBCZ0csUUFBekM7QUFDQSxTQUFPQSxRQUFRLEdBQUcsTUFBTUEsUUFBVCxHQUFvQixFQUFuQztBQUNELENBSEQ7O0FBS0EsSUFBSXFCLGtCQUFrQixHQUFHLFVBQVVoOEIsTUFBVixFQUFrQjlqQixNQUFsQixFQUEwQjtBQUNqRCxTQUFPO0FBQUV2VCxJQUFBQSxHQUFHLEVBQUVxM0IsTUFBUDtBQUFldHdCLElBQUFBLEdBQUcsRUFBRXdNLE1BQXBCO0FBQTRCNVMsSUFBQUEsWUFBWSxFQUFFLElBQTFDO0FBQWdESCxJQUFBQSxVQUFVLEVBQUU7QUFBNUQsR0FBUDtBQUNELENBRkQ7O0FBSUEsSUFBSThFLFdBQUosRUFBaUI7QUFDZm9ILEVBQUFBLGdCQUFnQixDQUFDMG1ELFlBQUQsRUFBZTtBQUM3QjtBQUNBO0FBQ0ExTSxJQUFBQSxJQUFJLEVBQUUyTSxrQkFBa0IsQ0FBQ2YsWUFBRCxFQUFlLFVBQVU1TCxJQUFWLEVBQWdCO0FBQ3JELFVBQUlwWCxHQUFHLEdBQUcwYyxtQkFBbUIsQ0FBQyxJQUFELENBQTdCO0FBQ0EsVUFBSW1HLFNBQVMsR0FBRzNnRCxTQUFTLENBQUNrMUMsSUFBRCxDQUF6QjtBQUNBLFVBQUlxTCxPQUFPLEdBQUdOLFFBQVEsQ0FBQ25pQixHQUFELEVBQU02aUIsU0FBTixDQUF0QjtBQUNBLFVBQUlKLE9BQUosRUFBYSxNQUFNN3dELFNBQVMsQ0FBQzZ3RCxPQUFELENBQWY7QUFDYmhHLE1BQUFBLDRCQUE0QixDQUFDemMsR0FBRyxDQUFDa1gsWUFBTCxDQUE1QixDQUErQzRELGtCQUEvQyxDQUFrRTlhLEdBQUcsQ0FBQzRhLEtBQXRFO0FBQ0QsS0FOdUIsQ0FISztBQVU3QjtBQUNBO0FBQ0FxSSxJQUFBQSxNQUFNLEVBQUVjLGtCQUFrQixDQUFDYixTQUFELENBWkc7QUFhN0I7QUFDQTtBQUNBejRCLElBQUFBLFFBQVEsRUFBRXM1QixrQkFBa0IsQ0FBQ1osV0FBRCxFQUFjLFVBQVUxNEIsUUFBVixFQUFvQjtBQUM1RCxVQUFJdVYsR0FBRyxHQUFHMGMsbUJBQW1CLENBQUMsSUFBRCxDQUE3QjtBQUNBeUYsTUFBQUEsUUFBUSxDQUFDbmlCLEdBQUQsRUFBTTk5QixTQUFTLENBQUN1b0IsUUFBRCxDQUFULEdBQXNCLEdBQTVCLEVBQWlDcTJCLFlBQWpDLENBQVI7QUFDRCxLQUgyQixDQWZDO0FBbUI3QjtBQUNBO0FBQ0F4SixJQUFBQSxRQUFRLEVBQUV5TSxrQkFBa0IsQ0FBQ1gsV0FBRCxFQUFjLFVBQVU5TCxRQUFWLEVBQW9CO0FBQzVELFVBQUl0WCxHQUFHLEdBQUcwYyxtQkFBbUIsQ0FBQyxJQUFELENBQTdCO0FBQ0EsVUFBSXhJLFVBQVUsR0FBR21JLFNBQVMsQ0FBQ242QyxTQUFTLENBQUNvMUMsUUFBRCxDQUFWLENBQTFCO0FBQ0EsVUFBSThJLDhCQUE4QixDQUFDcGdCLEdBQUQsQ0FBbEMsRUFBeUM7QUFDekNBLE1BQUFBLEdBQUcsQ0FBQ3NYLFFBQUosR0FBZSxFQUFmOztBQUNBLFdBQUssSUFBSTE4QyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHczVDLFVBQVUsQ0FBQzdoRCxNQUEvQixFQUF1Q3VJLENBQUMsRUFBeEMsRUFBNEM7QUFDMUNvbEMsUUFBQUEsR0FBRyxDQUFDc1gsUUFBSixJQUFnQndHLGFBQWEsQ0FBQzVKLFVBQVUsQ0FBQ3Q1QyxDQUFELENBQVgsRUFBZ0I2a0Qsd0JBQWhCLENBQTdCO0FBQ0Q7QUFDRixLQVIyQixDQXJCQztBQThCN0I7QUFDQTtBQUNBVSxJQUFBQSxRQUFRLEVBQUU0RCxrQkFBa0IsQ0FBQ1YsV0FBRCxFQUFjLFVBQVVsRCxRQUFWLEVBQW9CO0FBQzVELFVBQUluZ0IsR0FBRyxHQUFHMGMsbUJBQW1CLENBQUMsSUFBRCxDQUE3QjtBQUNBLFVBQUl4SSxVQUFVLEdBQUdtSSxTQUFTLENBQUNuNkMsU0FBUyxDQUFDaStDLFFBQUQsQ0FBVixDQUExQjtBQUNBLFVBQUlDLDhCQUE4QixDQUFDcGdCLEdBQUQsQ0FBbEMsRUFBeUM7QUFDekNBLE1BQUFBLEdBQUcsQ0FBQ21nQixRQUFKLEdBQWUsRUFBZjs7QUFDQSxXQUFLLElBQUl2bEQsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR3M1QyxVQUFVLENBQUM3aEQsTUFBL0IsRUFBdUN1SSxDQUFDLEVBQXhDLEVBQTRDO0FBQzFDb2xDLFFBQUFBLEdBQUcsQ0FBQ21nQixRQUFKLElBQWdCckMsYUFBYSxDQUFDNUosVUFBVSxDQUFDdDVDLENBQUQsQ0FBWCxFQUFnQjZrRCx3QkFBaEIsQ0FBN0I7QUFDRDtBQUNGLEtBUjJCLENBaENDO0FBeUM3QjtBQUNBO0FBQ0EvMEIsSUFBQUEsSUFBSSxFQUFFcTVCLGtCQUFrQixDQUFDVCxPQUFELEVBQVUsVUFBVTU0QixJQUFWLEVBQWdCO0FBQ2hELFVBQUlzVixHQUFHLEdBQUcwYyxtQkFBbUIsQ0FBQyxJQUFELENBQTdCO0FBQ0EsVUFBSTFjLEdBQUcsQ0FBQ3FnQixnQkFBUixFQUEwQjtBQUMxQjhCLE1BQUFBLFFBQVEsQ0FBQ25pQixHQUFELEVBQU05OUIsU0FBUyxDQUFDd29CLElBQUQsQ0FBZixFQUF1QjgyQixJQUF2QixDQUFSO0FBQ0QsS0FKdUIsQ0EzQ0s7QUFnRDdCO0FBQ0E7QUFDQStCLElBQUFBLFFBQVEsRUFBRVEsa0JBQWtCLENBQUNQLFdBQUQsRUFBYyxVQUFVRCxRQUFWLEVBQW9CO0FBQzVELFVBQUl2akIsR0FBRyxHQUFHMGMsbUJBQW1CLENBQUMsSUFBRCxDQUE3QjtBQUNBLFVBQUkxYyxHQUFHLENBQUNxZ0IsZ0JBQVIsRUFBMEI7QUFDMUI4QixNQUFBQSxRQUFRLENBQUNuaUIsR0FBRCxFQUFNOTlCLFNBQVMsQ0FBQ3FoRCxRQUFELENBQWYsRUFBMkI5QixRQUEzQixDQUFSO0FBQ0QsS0FKMkIsQ0FsREM7QUF1RDdCO0FBQ0E7QUFDQXYzQixJQUFBQSxJQUFJLEVBQUU2NUIsa0JBQWtCLENBQUNOLE9BQUQsRUFBVSxVQUFVdjVCLElBQVYsRUFBZ0I7QUFDaEQsVUFBSThWLEdBQUcsR0FBRzBjLG1CQUFtQixDQUFDLElBQUQsQ0FBN0I7QUFDQSxVQUFJMEQsOEJBQThCLENBQUNwZ0IsR0FBRCxDQUFsQyxFQUF5QztBQUN6QzlWLE1BQUFBLElBQUksR0FBR2hvQixTQUFTLENBQUNnb0IsSUFBRCxDQUFoQjtBQUNBLFVBQUlBLElBQUksSUFBSSxFQUFaLEVBQWdCOFYsR0FBRyxDQUFDOVYsSUFBSixHQUFXLElBQVgsQ0FBaEIsS0FDS2k0QixRQUFRLENBQUNuaUIsR0FBRCxFQUFNOVYsSUFBTixFQUFZdzNCLElBQVosQ0FBUjtBQUNOLEtBTnVCLENBekRLO0FBZ0U3QjtBQUNBO0FBQ0F2SyxJQUFBQSxRQUFRLEVBQUU0TSxrQkFBa0IsQ0FBQ0wsV0FBRCxFQUFjLFVBQVV2TSxRQUFWLEVBQW9CO0FBQzVELFVBQUluWCxHQUFHLEdBQUcwYyxtQkFBbUIsQ0FBQyxJQUFELENBQTdCO0FBQ0EsVUFBSTFjLEdBQUcsQ0FBQ3FnQixnQkFBUixFQUEwQjtBQUMxQnJnQixNQUFBQSxHQUFHLENBQUN4Z0MsSUFBSixHQUFXLEVBQVg7QUFDQTJpRCxNQUFBQSxRQUFRLENBQUNuaUIsR0FBRCxFQUFNOTlCLFNBQVMsQ0FBQ2kxQyxRQUFELENBQWYsRUFBMkIySyxVQUEzQixDQUFSO0FBQ0QsS0FMMkIsQ0FsRUM7QUF3RTdCO0FBQ0E7QUFDQTNwQixJQUFBQSxNQUFNLEVBQUU0ckIsa0JBQWtCLENBQUNKLFNBQUQsRUFBWSxVQUFVeHJCLE1BQVYsRUFBa0I7QUFDdEQsVUFBSTZILEdBQUcsR0FBRzBjLG1CQUFtQixDQUFDLElBQUQsQ0FBN0I7QUFDQXZrQixNQUFBQSxNQUFNLEdBQUdqMkIsU0FBUyxDQUFDaTJCLE1BQUQsQ0FBbEI7O0FBQ0EsVUFBSUEsTUFBTSxJQUFJLEVBQWQsRUFBa0I7QUFDaEI2SCxRQUFBQSxHQUFHLENBQUM0YSxLQUFKLEdBQVksSUFBWjtBQUNELE9BRkQsTUFFTztBQUNMLFlBQUksT0FBT3ppQixNQUFNLENBQUN0bUIsTUFBUCxDQUFjLENBQWQsQ0FBWCxFQUE2QnNtQixNQUFNLEdBQUdBLE1BQU0sQ0FBQzNtQyxLQUFQLENBQWEsQ0FBYixDQUFUO0FBQzdCd3VDLFFBQUFBLEdBQUcsQ0FBQzRhLEtBQUosR0FBWSxFQUFaO0FBQ0F1SCxRQUFBQSxRQUFRLENBQUNuaUIsR0FBRCxFQUFNN0gsTUFBTixFQUFjOHBCLEtBQWQsQ0FBUjtBQUNEOztBQUNEeEYsTUFBQUEsNEJBQTRCLENBQUN6YyxHQUFHLENBQUNrWCxZQUFMLENBQTVCLENBQStDNEQsa0JBQS9DLENBQWtFOWEsR0FBRyxDQUFDNGEsS0FBdEU7QUFDRCxLQVh5QixDQTFFRztBQXNGN0I7QUFDQTtBQUNBMUQsSUFBQUEsWUFBWSxFQUFFNk0sa0JBQWtCLENBQUNILGVBQUQsQ0F4Rkg7QUF5RjdCO0FBQ0E7QUFDQXJNLElBQUFBLElBQUksRUFBRXdNLGtCQUFrQixDQUFDRixPQUFELEVBQVUsVUFBVXRNLElBQVYsRUFBZ0I7QUFDaEQsVUFBSXZYLEdBQUcsR0FBRzBjLG1CQUFtQixDQUFDLElBQUQsQ0FBN0I7QUFDQW5GLE1BQUFBLElBQUksR0FBR3IxQyxTQUFTLENBQUNxMUMsSUFBRCxDQUFoQjs7QUFDQSxVQUFJQSxJQUFJLElBQUksRUFBWixFQUFnQjtBQUNkdlgsUUFBQUEsR0FBRyxDQUFDMGlCLFFBQUosR0FBZSxJQUFmO0FBQ0E7QUFDRDs7QUFDRCxVQUFJLE9BQU9uTCxJQUFJLENBQUMxbEMsTUFBTCxDQUFZLENBQVosQ0FBWCxFQUEyQjBsQyxJQUFJLEdBQUdBLElBQUksQ0FBQy9sRCxLQUFMLENBQVcsQ0FBWCxDQUFQO0FBQzNCd3VDLE1BQUFBLEdBQUcsQ0FBQzBpQixRQUFKLEdBQWUsRUFBZjtBQUNBUCxNQUFBQSxRQUFRLENBQUNuaUIsR0FBRCxFQUFNdVgsSUFBTixFQUFZMkssUUFBWixDQUFSO0FBQ0QsS0FWdUI7QUEzRkssR0FBZixDQUFoQjtBQXVHRDtBQUdEOzs7QUFDQWxtRCxRQUFRLENBQUM4bkQsWUFBRCxFQUFlLFFBQWYsRUFBeUIsU0FBU3ZuQyxNQUFULEdBQWtCO0FBQ2pELFNBQU95bUMsWUFBWSxDQUFDanlELElBQWIsQ0FBa0IsSUFBbEIsQ0FBUDtBQUNELENBRk8sRUFFTDtBQUFFRyxFQUFBQSxVQUFVLEVBQUU7QUFBZCxDQUZLLENBQVI7QUFLQTs7QUFDQThLLFFBQVEsQ0FBQzhuRCxZQUFELEVBQWUsVUFBZixFQUEyQixTQUFTdnlELFFBQVQsR0FBb0I7QUFDckQsU0FBT3l4RCxZQUFZLENBQUNqeUQsSUFBYixDQUFrQixJQUFsQixDQUFQO0FBQ0QsQ0FGTyxFQUVMO0FBQUVHLEVBQUFBLFVBQVUsRUFBRTtBQUFkLENBRkssQ0FBUjs7QUFJQSxJQUFJc3JELFNBQUosRUFBZTtBQUNiLE1BQUl3SCxxQkFBcUIsR0FBR3hILFNBQVMsQ0FBQ3lILGVBQXRDO0FBQ0EsTUFBSUMscUJBQXFCLEdBQUcxSCxTQUFTLENBQUMySCxlQUF0QyxDQUZhO0FBSWI7QUFDQTs7QUFDQSxNQUFJSCxxQkFBSixFQUEyQmhvRCxRQUFRLENBQUM0bUQsY0FBRCxFQUFpQixpQkFBakIsRUFBb0MsU0FBU3FCLGVBQVQsQ0FBeUJHLElBQXpCLEVBQStCO0FBQ3BHLFdBQU9KLHFCQUFxQixDQUFDamtELEtBQXRCLENBQTRCeThDLFNBQTVCLEVBQXVDcHFELFNBQXZDLENBQVA7QUFDRCxHQUZrQyxDQUFSLENBTmQ7QUFVYjtBQUNBOztBQUNBLE1BQUk4eEQscUJBQUosRUFBMkJsb0QsUUFBUSxDQUFDNG1ELGNBQUQsRUFBaUIsaUJBQWpCLEVBQW9DLFNBQVN1QixlQUFULENBQXlCbmtCLEdBQXpCLEVBQThCO0FBQ25HLFdBQU9ra0IscUJBQXFCLENBQUNua0QsS0FBdEIsQ0FBNEJ5OEMsU0FBNUIsRUFBdUNwcUQsU0FBdkMsQ0FBUDtBQUNELEdBRmtDLENBQVI7QUFHNUI7O0FBRURrUSxjQUFjLENBQUNzZ0QsY0FBRCxFQUFpQixLQUFqQixDQUFkO0FBRUEzZ0QsR0FBQyxDQUFDO0FBQUUvUixFQUFBQSxNQUFNLEVBQUUsSUFBVjtBQUFnQnVNLEVBQUFBLE1BQU0sRUFBRSxDQUFDaTlDLGNBQXpCO0FBQXlDdm1ELEVBQUFBLElBQUksRUFBRSxDQUFDNkM7QUFBaEQsQ0FBRCxFQUFnRTtBQUMvRGloRCxFQUFBQSxHQUFHLEVBQUUyTDtBQUQwRCxDQUFoRSxDQUFEOztBQzMrQkEsSUFBSTNnRCxDQUFDLEdBQUcxUixPQUFSO0FBR0E7OztBQUNBMFIsQ0FBQyxDQUFDO0FBQUU1RyxFQUFBQSxNQUFNLEVBQUUsS0FBVjtBQUFpQm9LLEVBQUFBLEtBQUssRUFBRSxJQUF4QjtBQUE4QnZVLEVBQUFBLFVBQVUsRUFBRTtBQUExQyxDQUFELEVBQW1EO0FBQ2xEcXJCLEVBQUFBLE1BQU0sRUFBRSxTQUFTQSxNQUFULEdBQWtCO0FBQ3hCLFdBQU8wNkIsR0FBRyxDQUFDMStDLFNBQUosQ0FBY2hILFFBQWQsQ0FBdUJSLElBQXZCLENBQTRCLElBQTVCLENBQVA7QUFDRDtBQUhpRCxDQUFuRCxDQUFEOzs7Ozs7Ozs7Ozs7Ozs7OztBQ1EyQztBQUN6QyxHQUFDLFlBQVc7QUFJZDs7QUFDQSxRQUFJc3pELFNBQVMsR0FBRyxPQUFPcHhELE1BQVAsS0FBa0IsVUFBbEIsSUFBZ0NBLE1BQU0sQ0FBQ3F4RCxHQUF2RDtBQUNBLFFBQUlDLGtCQUFrQixHQUFHRixTQUFTLEdBQUdweEQsTUFBTSxDQUFDcXhELEdBQVAsQ0FBVyxlQUFYLENBQUgsR0FBaUMsTUFBbkU7QUFDQSxRQUFJRSxpQkFBaUIsR0FBR0gsU0FBUyxHQUFHcHhELE1BQU0sQ0FBQ3F4RCxHQUFQLENBQVcsY0FBWCxDQUFILEdBQWdDLE1BQWpFO0FBQ0EsUUFBSUcsbUJBQW1CLEdBQUdKLFNBQVMsR0FBR3B4RCxNQUFNLENBQUNxeEQsR0FBUCxDQUFXLGdCQUFYLENBQUgsR0FBa0MsTUFBckU7QUFDQSxRQUFJSSxzQkFBc0IsR0FBR0wsU0FBUyxHQUFHcHhELE1BQU0sQ0FBQ3F4RCxHQUFQLENBQVcsbUJBQVgsQ0FBSCxHQUFxQyxNQUEzRTtBQUNBLFFBQUlLLG1CQUFtQixHQUFHTixTQUFTLEdBQUdweEQsTUFBTSxDQUFDcXhELEdBQVAsQ0FBVyxnQkFBWCxDQUFILEdBQWtDLE1BQXJFO0FBQ0EsUUFBSU0sbUJBQW1CLEdBQUdQLFNBQVMsR0FBR3B4RCxNQUFNLENBQUNxeEQsR0FBUCxDQUFXLGdCQUFYLENBQUgsR0FBa0MsTUFBckU7QUFDQSxRQUFJTyxrQkFBa0IsR0FBR1IsU0FBUyxHQUFHcHhELE1BQU0sQ0FBQ3F4RCxHQUFQLENBQVcsZUFBWCxDQUFILEdBQWlDLE1BQW5FLENBWmM7QUFhZDs7QUFFQSxRQUFJUSxxQkFBcUIsR0FBR1QsU0FBUyxHQUFHcHhELE1BQU0sQ0FBQ3F4RCxHQUFQLENBQVcsa0JBQVgsQ0FBSCxHQUFvQyxNQUF6RTtBQUNBLFFBQUlTLDBCQUEwQixHQUFHVixTQUFTLEdBQUdweEQsTUFBTSxDQUFDcXhELEdBQVAsQ0FBVyx1QkFBWCxDQUFILEdBQXlDLE1BQW5GO0FBQ0EsUUFBSVUsc0JBQXNCLEdBQUdYLFNBQVMsR0FBR3B4RCxNQUFNLENBQUNxeEQsR0FBUCxDQUFXLG1CQUFYLENBQUgsR0FBcUMsTUFBM0U7QUFDQSxRQUFJVyxtQkFBbUIsR0FBR1osU0FBUyxHQUFHcHhELE1BQU0sQ0FBQ3F4RCxHQUFQLENBQVcsZ0JBQVgsQ0FBSCxHQUFrQyxNQUFyRTtBQUNBLFFBQUlZLHdCQUF3QixHQUFHYixTQUFTLEdBQUdweEQsTUFBTSxDQUFDcXhELEdBQVAsQ0FBVyxxQkFBWCxDQUFILEdBQXVDLE1BQS9FO0FBQ0EsUUFBSWEsZUFBZSxHQUFHZCxTQUFTLEdBQUdweEQsTUFBTSxDQUFDcXhELEdBQVAsQ0FBVyxZQUFYLENBQUgsR0FBOEIsTUFBN0Q7QUFDQSxRQUFJYyxlQUFlLEdBQUdmLFNBQVMsR0FBR3B4RCxNQUFNLENBQUNxeEQsR0FBUCxDQUFXLFlBQVgsQ0FBSCxHQUE4QixNQUE3RDtBQUNBLFFBQUllLGdCQUFnQixHQUFHaEIsU0FBUyxHQUFHcHhELE1BQU0sQ0FBQ3F4RCxHQUFQLENBQVcsYUFBWCxDQUFILEdBQStCLE1BQS9EO0FBQ0EsUUFBSWdCLHNCQUFzQixHQUFHakIsU0FBUyxHQUFHcHhELE1BQU0sQ0FBQ3F4RCxHQUFQLENBQVcsbUJBQVgsQ0FBSCxHQUFxQyxNQUEzRTtBQUNBLFFBQUlpQixvQkFBb0IsR0FBR2xCLFNBQVMsR0FBR3B4RCxNQUFNLENBQUNxeEQsR0FBUCxDQUFXLGlCQUFYLENBQUgsR0FBbUMsTUFBdkU7QUFDQSxRQUFJa0IsZ0JBQWdCLEdBQUduQixTQUFTLEdBQUdweEQsTUFBTSxDQUFDcXhELEdBQVAsQ0FBVyxhQUFYLENBQUgsR0FBK0IsTUFBL0Q7O0FBRUEsYUFBU21CLGtCQUFULENBQTRCMXRELElBQTVCLEVBQWtDO0FBQ2hDLGFBQU8sT0FBT0EsSUFBUCxLQUFnQixRQUFoQixJQUE0QixPQUFPQSxJQUFQLEtBQWdCLFVBQTVDO0FBQ1BBLE1BQUFBLElBQUksS0FBSzBzRCxtQkFERixJQUN5QjFzRCxJQUFJLEtBQUtndEQsMEJBRGxDLElBQ2dFaHRELElBQUksS0FBSzRzRCxtQkFEekUsSUFDZ0c1c0QsSUFBSSxLQUFLMnNELHNCQUR6RyxJQUNtSTNzRCxJQUFJLEtBQUtrdEQsbUJBRDVJLElBQ21LbHRELElBQUksS0FBS210RCx3QkFENUssSUFDd00sT0FBT250RCxJQUFQLEtBQWdCLFFBQWhCLElBQTRCQSxJQUFJLEtBQUssSUFBckMsS0FBOENBLElBQUksQ0FBQzJ0RCxRQUFMLEtBQWtCTixlQUFsQixJQUFxQ3J0RCxJQUFJLENBQUMydEQsUUFBTCxLQUFrQlAsZUFBdkQsSUFBMEVwdEQsSUFBSSxDQUFDMnRELFFBQUwsS0FBa0JkLG1CQUE1RixJQUFtSDdzRCxJQUFJLENBQUMydEQsUUFBTCxLQUFrQmIsa0JBQXJJLElBQTJKOXNELElBQUksQ0FBQzJ0RCxRQUFMLEtBQWtCVixzQkFBN0ssSUFBdU1qdEQsSUFBSSxDQUFDMnRELFFBQUwsS0FBa0JKLHNCQUF6TixJQUFtUHZ0RCxJQUFJLENBQUMydEQsUUFBTCxLQUFrQkgsb0JBQXJRLElBQTZSeHRELElBQUksQ0FBQzJ0RCxRQUFMLEtBQWtCRixnQkFBL1MsSUFBbVV6dEQsSUFBSSxDQUFDMnRELFFBQUwsS0FBa0JMLGdCQUFuWSxDQUQvTTtBQUVEOztBQUVELGFBQVNNLE1BQVQsQ0FBZ0I3dUQsTUFBaEIsRUFBd0I7QUFDdEIsVUFBSSxPQUFPQSxNQUFQLEtBQWtCLFFBQWxCLElBQThCQSxNQUFNLEtBQUssSUFBN0MsRUFBbUQ7QUFDakQsWUFBSTR1RCxRQUFRLEdBQUc1dUQsTUFBTSxDQUFDNHVELFFBQXRCOztBQUVBLGdCQUFRQSxRQUFSO0FBQ0UsZUFBS25CLGtCQUFMO0FBQ0UsZ0JBQUl4c0QsSUFBSSxHQUFHakIsTUFBTSxDQUFDaUIsSUFBbEI7O0FBRUEsb0JBQVFBLElBQVI7QUFDRSxtQkFBSytzRCxxQkFBTDtBQUNBLG1CQUFLQywwQkFBTDtBQUNBLG1CQUFLTixtQkFBTDtBQUNBLG1CQUFLRSxtQkFBTDtBQUNBLG1CQUFLRCxzQkFBTDtBQUNBLG1CQUFLTyxtQkFBTDtBQUNFLHVCQUFPbHRELElBQVA7O0FBRUY7QUFDRSxvQkFBSTZ0RCxZQUFZLEdBQUc3dEQsSUFBSSxJQUFJQSxJQUFJLENBQUMydEQsUUFBaEM7O0FBRUEsd0JBQVFFLFlBQVI7QUFDRSx1QkFBS2Ysa0JBQUw7QUFDQSx1QkFBS0csc0JBQUw7QUFDQSx1QkFBS0ksZUFBTDtBQUNBLHVCQUFLRCxlQUFMO0FBQ0EsdUJBQUtQLG1CQUFMO0FBQ0UsMkJBQU9nQixZQUFQOztBQUVGO0FBQ0UsMkJBQU9GLFFBQVA7QUFUSjs7QUFaSjs7QUEwQkYsZUFBS2xCLGlCQUFMO0FBQ0UsbUJBQU9rQixRQUFQO0FBL0JKO0FBaUNEOztBQUVELGFBQU8vekQsU0FBUDtBQUNELEtBeEVhOzs7QUEwRWQsUUFBSWswRCxTQUFTLEdBQUdmLHFCQUFoQjtBQUNBLFFBQUlnQixjQUFjLEdBQUdmLDBCQUFyQjtBQUNBLFFBQUlnQixlQUFlLEdBQUdsQixrQkFBdEI7QUFDQSxRQUFJbUIsZUFBZSxHQUFHcEIsbUJBQXRCO0FBQ0EsUUFBSXFCLE9BQU8sR0FBRzFCLGtCQUFkO0FBQ0EsUUFBSTJCLFVBQVUsR0FBR2xCLHNCQUFqQjtBQUNBLFFBQUltQixRQUFRLEdBQUcxQixtQkFBZjtBQUNBLFFBQUkyQixJQUFJLEdBQUdoQixlQUFYO0FBQ0EsUUFBSWlCLElBQUksR0FBR2xCLGVBQVg7QUFDQSxRQUFJbUIsTUFBTSxHQUFHOUIsaUJBQWI7QUFDQSxRQUFJK0IsUUFBUSxHQUFHNUIsbUJBQWY7QUFDQSxRQUFJNkIsVUFBVSxHQUFHOUIsc0JBQWpCO0FBQ0EsUUFBSStCLFFBQVEsR0FBR3hCLG1CQUFmO0FBQ0EsUUFBSXlCLG1DQUFtQyxHQUFHLEtBQTFDLENBdkZjOztBQXlGZCxhQUFTQyxXQUFULENBQXFCN3ZELE1BQXJCLEVBQTZCO0FBQzNCO0FBQ0UsWUFBSSxDQUFDNHZELG1DQUFMLEVBQTBDO0FBQ3hDQSxVQUFBQSxtQ0FBbUMsR0FBRyxJQUF0QyxDQUR3Qzs7QUFHeEMxNUIsVUFBQUEsT0FBTyxDQUFDLE1BQUQsQ0FBUCxDQUFnQiwwREFBMEQsNERBQTFELEdBQXlILGdFQUF6STtBQUNEO0FBQ0Y7QUFFRCxhQUFPNDVCLGdCQUFnQixDQUFDOXZELE1BQUQsQ0FBaEIsSUFBNEI2dUQsTUFBTSxDQUFDN3VELE1BQUQsQ0FBTixLQUFtQmd1RCxxQkFBdEQ7QUFDRDs7QUFDRCxhQUFTOEIsZ0JBQVQsQ0FBMEI5dkQsTUFBMUIsRUFBa0M7QUFDaEMsYUFBTzZ1RCxNQUFNLENBQUM3dUQsTUFBRCxDQUFOLEtBQW1CaXVELDBCQUExQjtBQUNEOztBQUNELGFBQVM4QixpQkFBVCxDQUEyQi92RCxNQUEzQixFQUFtQztBQUNqQyxhQUFPNnVELE1BQU0sQ0FBQzd1RCxNQUFELENBQU4sS0FBbUIrdEQsa0JBQTFCO0FBQ0Q7O0FBQ0QsYUFBU2lDLGlCQUFULENBQTJCaHdELE1BQTNCLEVBQW1DO0FBQ2pDLGFBQU82dUQsTUFBTSxDQUFDN3VELE1BQUQsQ0FBTixLQUFtQjh0RCxtQkFBMUI7QUFDRDs7QUFDRCxhQUFTbUMsU0FBVCxDQUFtQmp3RCxNQUFuQixFQUEyQjtBQUN6QixhQUFPLE9BQU9BLE1BQVAsS0FBa0IsUUFBbEIsSUFBOEJBLE1BQU0sS0FBSyxJQUF6QyxJQUFpREEsTUFBTSxDQUFDNHVELFFBQVAsS0FBb0JuQixrQkFBNUU7QUFDRDs7QUFDRCxhQUFTeUMsWUFBVCxDQUFzQmx3RCxNQUF0QixFQUE4QjtBQUM1QixhQUFPNnVELE1BQU0sQ0FBQzd1RCxNQUFELENBQU4sS0FBbUJrdUQsc0JBQTFCO0FBQ0Q7O0FBQ0QsYUFBU2lDLFVBQVQsQ0FBb0Jud0QsTUFBcEIsRUFBNEI7QUFDMUIsYUFBTzZ1RCxNQUFNLENBQUM3dUQsTUFBRCxDQUFOLEtBQW1CMnRELG1CQUExQjtBQUNEOztBQUNELGFBQVN5QyxNQUFULENBQWdCcHdELE1BQWhCLEVBQXdCO0FBQ3RCLGFBQU82dUQsTUFBTSxDQUFDN3VELE1BQUQsQ0FBTixLQUFtQnN1RCxlQUExQjtBQUNEOztBQUNELGFBQVMrQixNQUFULENBQWdCcndELE1BQWhCLEVBQXdCO0FBQ3RCLGFBQU82dUQsTUFBTSxDQUFDN3VELE1BQUQsQ0FBTixLQUFtQnF1RCxlQUExQjtBQUNEOztBQUNELGFBQVNpQyxRQUFULENBQWtCdHdELE1BQWxCLEVBQTBCO0FBQ3hCLGFBQU82dUQsTUFBTSxDQUFDN3VELE1BQUQsQ0FBTixLQUFtQjB0RCxpQkFBMUI7QUFDRDs7QUFDRCxhQUFTNkMsVUFBVCxDQUFvQnZ3RCxNQUFwQixFQUE0QjtBQUMxQixhQUFPNnVELE1BQU0sQ0FBQzd1RCxNQUFELENBQU4sS0FBbUI2dEQsbUJBQTFCO0FBQ0Q7O0FBQ0QsYUFBUzJDLFlBQVQsQ0FBc0J4d0QsTUFBdEIsRUFBOEI7QUFDNUIsYUFBTzZ1RCxNQUFNLENBQUM3dUQsTUFBRCxDQUFOLEtBQW1CNHRELHNCQUExQjtBQUNEOztBQUNELGFBQVM2QyxVQUFULENBQW9CendELE1BQXBCLEVBQTRCO0FBQzFCLGFBQU82dUQsTUFBTSxDQUFDN3VELE1BQUQsQ0FBTixLQUFtQm11RCxtQkFBMUI7QUFDRDs7QUFFRHVDLGlDQUFBLEdBQW9CM0IsU0FBcEI7QUFDQTJCLHNDQUFBLEdBQXlCMUIsY0FBekI7QUFDQTBCLHVDQUFBLEdBQTBCekIsZUFBMUI7QUFDQXlCLHVDQUFBLEdBQTBCeEIsZUFBMUI7QUFDQXdCLCtCQUFBLEdBQWtCdkIsT0FBbEI7QUFDQXVCLGtDQUFBLEdBQXFCdEIsVUFBckI7QUFDQXNCLGdDQUFBLEdBQW1CckIsUUFBbkI7QUFDQXFCLDRCQUFBLEdBQWVwQixJQUFmO0FBQ0FvQiw0QkFBQSxHQUFlbkIsSUFBZjtBQUNBbUIsOEJBQUEsR0FBaUJsQixNQUFqQjtBQUNBa0IsZ0NBQUEsR0FBbUJqQixRQUFuQjtBQUNBaUIsa0NBQUEsR0FBcUJoQixVQUFyQjtBQUNBZ0IsZ0NBQUEsR0FBbUJmLFFBQW5CO0FBQ0FlLG1DQUFBLEdBQXNCYixXQUF0QjtBQUNBYSx3Q0FBQSxHQUEyQlosZ0JBQTNCO0FBQ0FZLHlDQUFBLEdBQTRCWCxpQkFBNUI7QUFDQVcseUNBQUEsR0FBNEJWLGlCQUE1QjtBQUNBVSxpQ0FBQSxHQUFvQlQsU0FBcEI7QUFDQVMsb0NBQUEsR0FBdUJSLFlBQXZCO0FBQ0FRLGtDQUFBLEdBQXFCUCxVQUFyQjtBQUNBTyw4QkFBQSxHQUFpQk4sTUFBakI7QUFDQU0sOEJBQUEsR0FBaUJMLE1BQWpCO0FBQ0FLLGdDQUFBLEdBQW1CSixRQUFuQjtBQUNBSSxrQ0FBQSxHQUFxQkgsVUFBckI7QUFDQUcsb0NBQUEsR0FBdUJGLFlBQXZCO0FBQ0FFLGtDQUFBLEdBQXFCRCxVQUFyQjtBQUNBQywwQ0FBQSxHQUE2Qi9CLGtCQUE3QjtBQUNBK0IsOEJBQUEsR0FBaUI3QixNQUFqQjtBQUNHLEdBcktEO0FBc0tEOztBQ2hMTTtBQUNMNzFELEVBQUFBLGlCQUFBLEdBQWlCUyxtQkFBakI7QUFDRDs7Ozs7OztBQ0NEOztBQUNBLElBQUl3Qyx1QkFBcUIsR0FBR3ZDLE1BQU0sQ0FBQ3VDLHFCQUFuQztBQUNBLElBQUkyQixjQUFjLEdBQUdsRSxNQUFNLENBQUMrSCxTQUFQLENBQWlCN0QsY0FBdEM7QUFDQSxJQUFJK3lELGdCQUFnQixHQUFHajNELE1BQU0sQ0FBQytILFNBQVAsQ0FBaUIzSCxvQkFBeEM7O0FBRUEsU0FBUzZELFFBQVQsQ0FBa0JULEdBQWxCLEVBQXVCO0FBQ3RCLE1BQUlBLEdBQUcsS0FBSyxJQUFSLElBQWdCQSxHQUFHLEtBQUtyQyxTQUE1QixFQUF1QztBQUN0QyxVQUFNLElBQUlDLFNBQUosQ0FBYyx1REFBZCxDQUFOO0FBQ0E7O0FBRUQsU0FBT3BCLE1BQU0sQ0FBQ3dELEdBQUQsQ0FBYjtBQUNBOztBQUVELFNBQVMwekQsZUFBVCxHQUEyQjtBQUMxQixNQUFJO0FBQ0gsUUFBSSxDQUFDbDNELE1BQU0sQ0FBQ2kzQixNQUFaLEVBQW9CO0FBQ25CLGFBQU8sS0FBUDtBQUNBLEtBSEU7QUFPSDs7O0FBQ0EsUUFBSWtnQyxLQUFLLEdBQUcsSUFBSXowRCxNQUFKLENBQVcsS0FBWCxDQUFaLENBUkc7O0FBU0h5MEQsSUFBQUEsS0FBSyxDQUFDLENBQUQsQ0FBTCxHQUFXLElBQVg7O0FBQ0EsUUFBSW4zRCxNQUFNLENBQUN3SyxtQkFBUCxDQUEyQjJzRCxLQUEzQixFQUFrQyxDQUFsQyxNQUF5QyxHQUE3QyxFQUFrRDtBQUNqRCxhQUFPLEtBQVA7QUFDQSxLQVpFOzs7QUFlSCxRQUFJQyxLQUFLLEdBQUcsRUFBWjs7QUFDQSxTQUFLLElBQUlodEQsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRyxFQUFwQixFQUF3QkEsQ0FBQyxFQUF6QixFQUE2QjtBQUM1Qmd0RCxNQUFBQSxLQUFLLENBQUMsTUFBTTEwRCxNQUFNLENBQUN5ZSxZQUFQLENBQW9CL1csQ0FBcEIsQ0FBUCxDQUFMLEdBQXNDQSxDQUF0QztBQUNBOztBQUNELFFBQUlpdEQsTUFBTSxHQUFHcjNELE1BQU0sQ0FBQ3dLLG1CQUFQLENBQTJCNHNELEtBQTNCLEVBQWtDbG1ELEdBQWxDLENBQXNDLFVBQVUwSCxDQUFWLEVBQWE7QUFDL0QsYUFBT3crQyxLQUFLLENBQUN4K0MsQ0FBRCxDQUFaO0FBQ0EsS0FGWSxDQUFiOztBQUdBLFFBQUl5K0MsTUFBTSxDQUFDdHVELElBQVAsQ0FBWSxFQUFaLE1BQW9CLFlBQXhCLEVBQXNDO0FBQ3JDLGFBQU8sS0FBUDtBQUNBLEtBeEJFOzs7QUEyQkgsUUFBSXV1RCxLQUFLLEdBQUcsRUFBWjtBQUNBLDJCQUF1QnAyRCxLQUF2QixDQUE2QixFQUE3QixFQUFpQytQLE9BQWpDLENBQXlDLFVBQVVzbUQsTUFBVixFQUFrQjtBQUMxREQsTUFBQUEsS0FBSyxDQUFDQyxNQUFELENBQUwsR0FBZ0JBLE1BQWhCO0FBQ0EsS0FGRDs7QUFHQSxRQUFJdjNELE1BQU0sQ0FBQzJHLElBQVAsQ0FBWTNHLE1BQU0sQ0FBQ2kzQixNQUFQLENBQWMsRUFBZCxFQUFrQnFnQyxLQUFsQixDQUFaLEVBQXNDdnVELElBQXRDLENBQTJDLEVBQTNDLE1BQ0Ysc0JBREYsRUFDMEI7QUFDekIsYUFBTyxLQUFQO0FBQ0E7O0FBRUQsV0FBTyxJQUFQO0FBQ0EsR0FyQ0QsQ0FxQ0UsT0FBT3d1QyxHQUFQLEVBQVk7QUFDYjtBQUNBLFdBQU8sS0FBUDtBQUNBO0FBQ0Q7O0lBRURqNEMsWUFBQSxHQUFpQjQzRCxlQUFlLEtBQUtsM0QsTUFBTSxDQUFDaTNCLE1BQVosR0FBcUIsVUFBVXBzQixNQUFWLEVBQWtCL0IsTUFBbEIsRUFBMEI7QUFDOUUsTUFBSW1RLElBQUo7QUFDQSxNQUFJRCxFQUFFLEdBQUcvVSxRQUFRLENBQUM0RyxNQUFELENBQWpCO0FBQ0EsTUFBSWdnQyxPQUFKOztBQUVBLE9BQUssSUFBSXJVLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUc1MEIsU0FBUyxDQUFDQyxNQUE5QixFQUFzQzIwQixDQUFDLEVBQXZDLEVBQTJDO0FBQzFDdmQsSUFBQUEsSUFBSSxHQUFHalosTUFBTSxDQUFDNEIsU0FBUyxDQUFDNDBCLENBQUQsQ0FBVixDQUFiOztBQUVBLFNBQUssSUFBSTl5QixHQUFULElBQWdCdVYsSUFBaEIsRUFBc0I7QUFDckIsVUFBSS9VLGNBQWMsQ0FBQzNELElBQWYsQ0FBb0IwWSxJQUFwQixFQUEwQnZWLEdBQTFCLENBQUosRUFBb0M7QUFDbkNzVixRQUFBQSxFQUFFLENBQUN0VixHQUFELENBQUYsR0FBVXVWLElBQUksQ0FBQ3ZWLEdBQUQsQ0FBZDtBQUNBO0FBQ0Q7O0FBRUQsUUFBSW5CLHVCQUFKLEVBQTJCO0FBQzFCc29DLE1BQUFBLE9BQU8sR0FBR3RvQyx1QkFBcUIsQ0FBQzBXLElBQUQsQ0FBL0I7O0FBQ0EsV0FBSyxJQUFJN08sQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR3lnQyxPQUFPLENBQUNocEMsTUFBNUIsRUFBb0N1SSxDQUFDLEVBQXJDLEVBQXlDO0FBQ3hDLFlBQUk2c0QsZ0JBQWdCLENBQUMxMkQsSUFBakIsQ0FBc0IwWSxJQUF0QixFQUE0QjR4QixPQUFPLENBQUN6Z0MsQ0FBRCxDQUFuQyxDQUFKLEVBQTZDO0FBQzVDNE8sVUFBQUEsRUFBRSxDQUFDNnhCLE9BQU8sQ0FBQ3pnQyxDQUFELENBQVIsQ0FBRixHQUFpQjZPLElBQUksQ0FBQzR4QixPQUFPLENBQUN6Z0MsQ0FBRCxDQUFSLENBQXJCO0FBQ0E7QUFDRDtBQUNEO0FBQ0Q7O0FBRUQsU0FBTzRPLEVBQVA7QUFDQSxDQXpCRDs7Ozs7Ozs7O0FDdkRBLElBQUl3K0Msc0JBQW9CLEdBQUcsOENBQTNCO0lBRUFsNEQsc0JBQUEsR0FBaUJrNEQsc0JBQWpCOzs7Ozs7Ozs7QUNGQSxJQUFJQyxjQUFZLEdBQUcsWUFBVyxFQUE5Qjs7QUFFMkM7QUFDekMsTUFBSUQsc0JBQW9CLEdBQUd6M0Qsc0JBQTNCOztBQUNBLE1BQUkyM0Qsa0JBQWtCLEdBQUcsRUFBekI7QUFDQSxNQUFJeHdELEtBQUcsR0FBR3ZILFFBQVEsQ0FBQ1ksSUFBVCxDQUFjOFAsSUFBZCxDQUFtQnJRLE1BQU0sQ0FBQytILFNBQVAsQ0FBaUI3RCxjQUFwQyxDQUFWOztBQUVBdXpELEVBQUFBLGNBQVksR0FBRyxVQUFTRSxJQUFULEVBQWU7QUFDNUIsUUFBSXhnRCxPQUFPLEdBQUcsY0FBY3dnRCxJQUE1Qjs7QUFDQSxRQUFJLE9BQU9uN0IsT0FBUCxLQUFtQixXQUF2QixFQUFvQztBQUNsQ0EsTUFBQUEsT0FBTyxDQUFDMzhCLEtBQVIsQ0FBY3NYLE9BQWQ7QUFDRDs7QUFDRCxRQUFJO0FBQ0Y7QUFDQTtBQUNBO0FBQ0EsWUFBTSxJQUFJQyxLQUFKLENBQVVELE9BQVYsQ0FBTjtBQUNELEtBTEQsQ0FLRSxPQUFPb0ssQ0FBUCxFQUFVO0FBQ2IsR0FYRDtBQVlEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsU0FBU3EyQyxnQkFBVCxDQUF3QkMsU0FBeEIsRUFBbUN4NkMsTUFBbkMsRUFBMkNrYyxRQUEzQyxFQUFxRHUrQixhQUFyRCxFQUFvRUMsUUFBcEUsRUFBOEU7QUFDNUUsRUFBMkM7QUFDekMsU0FBSyxJQUFJQyxZQUFULElBQXlCSCxTQUF6QixFQUFvQztBQUNsQyxVQUFJM3dELEtBQUcsQ0FBQzJ3RCxTQUFELEVBQVlHLFlBQVosQ0FBUCxFQUFrQztBQUNoQyxZQUFJbjRELEtBQUosQ0FEZ0M7QUFHaEM7QUFDQTs7QUFDQSxZQUFJO0FBQ0Y7QUFDQTtBQUNBLGNBQUksT0FBT2c0RCxTQUFTLENBQUNHLFlBQUQsQ0FBaEIsS0FBbUMsVUFBdkMsRUFBbUQ7QUFDakQsZ0JBQUl6Z0IsR0FBRyxHQUFHbmdDLEtBQUssQ0FDYixDQUFDMGdELGFBQWEsSUFBSSxhQUFsQixJQUFtQyxJQUFuQyxHQUEwQ3YrQixRQUExQyxHQUFxRCxTQUFyRCxHQUFpRXkrQixZQUFqRSxHQUFnRixnQkFBaEYsR0FDQSw4RUFEQSxHQUNpRixPQUFPSCxTQUFTLENBQUNHLFlBQUQsQ0FEakcsR0FDa0gsSUFGckcsQ0FBZjtBQUlBemdCLFlBQUFBLEdBQUcsQ0FBQzN5QyxJQUFKLEdBQVcscUJBQVg7QUFDQSxrQkFBTTJ5QyxHQUFOO0FBQ0Q7O0FBQ0QxM0MsVUFBQUEsS0FBSyxHQUFHZzRELFNBQVMsQ0FBQ0csWUFBRCxDQUFULENBQXdCMzZDLE1BQXhCLEVBQWdDMjZDLFlBQWhDLEVBQThDRixhQUE5QyxFQUE2RHYrQixRQUE3RCxFQUF1RSxJQUF2RSxFQUE2RWkrQixzQkFBN0UsQ0FBUjtBQUNELFNBWkQsQ0FZRSxPQUFPUyxFQUFQLEVBQVc7QUFDWHA0RCxVQUFBQSxLQUFLLEdBQUdvNEQsRUFBUjtBQUNEOztBQUNELFlBQUlwNEQsS0FBSyxJQUFJLEVBQUVBLEtBQUssWUFBWXVYLEtBQW5CLENBQWIsRUFBd0M7QUFDdENxZ0QsVUFBQUEsY0FBWSxDQUNWLENBQUNLLGFBQWEsSUFBSSxhQUFsQixJQUFtQywwQkFBbkMsR0FDQXYrQixRQURBLEdBQ1csSUFEWCxHQUNrQnkrQixZQURsQixHQUNpQyxpQ0FEakMsR0FFQSwyREFGQSxHQUU4RCxPQUFPbjRELEtBRnJFLEdBRTZFLElBRjdFLEdBR0EsaUVBSEEsR0FJQSxnRUFKQSxHQUtBLGlDQU5VLENBQVo7QUFRRDs7QUFDRCxZQUFJQSxLQUFLLFlBQVl1WCxLQUFqQixJQUEwQixFQUFFdlgsS0FBSyxDQUFDc1gsT0FBTixJQUFpQnVnRCxrQkFBbkIsQ0FBOUIsRUFBc0U7QUFDcEU7QUFDQTtBQUNBQSxVQUFBQSxrQkFBa0IsQ0FBQzczRCxLQUFLLENBQUNzWCxPQUFQLENBQWxCLEdBQW9DLElBQXBDO0FBRUEsY0FBSStnRCxLQUFLLEdBQUdILFFBQVEsR0FBR0EsUUFBUSxFQUFYLEdBQWdCLEVBQXBDO0FBRUFOLFVBQUFBLGNBQVksQ0FDVixZQUFZbCtCLFFBQVosR0FBdUIsU0FBdkIsR0FBbUMxNUIsS0FBSyxDQUFDc1gsT0FBekMsSUFBb0QrZ0QsS0FBSyxJQUFJLElBQVQsR0FBZ0JBLEtBQWhCLEdBQXdCLEVBQTVFLENBRFUsQ0FBWjtBQUdEO0FBQ0Y7QUFDRjtBQUNGO0FBQ0Y7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQU4sZ0JBQWMsQ0FBQ08saUJBQWYsR0FBbUMsWUFBVztBQUM1QyxFQUEyQztBQUN6Q1QsSUFBQUEsa0JBQWtCLEdBQUcsRUFBckI7QUFDRDtBQUNGLENBSkQ7O0lBTUFwNEQsZ0JBQUEsR0FBaUJzNEQsZ0JBQWpCOzs7Ozs7Ozs7QUM1RkEsSUFBSVEsU0FBTyxHQUFHcjRELGlCQUFkOztBQUNBLElBQUlrM0IsUUFBTSxHQUFHbDNCLFlBQWI7O0FBRUEsSUFBSXkzRCxvQkFBb0IsR0FBR3ozRCxzQkFBM0I7O0FBQ0EsSUFBSTYzRCxjQUFjLEdBQUc3M0QsZ0JBQXJCOztBQUVBLElBQUltSCxHQUFHLEdBQUd2SCxRQUFRLENBQUNZLElBQVQsQ0FBYzhQLElBQWQsQ0FBbUJyUSxNQUFNLENBQUMrSCxTQUFQLENBQWlCN0QsY0FBcEMsQ0FBVjs7QUFDQSxJQUFJdXpELGNBQVksR0FBRyxZQUFXLEVBQTlCOztBQUUyQztBQUN6Q0EsRUFBQUEsY0FBWSxHQUFHLFVBQVNFLElBQVQsRUFBZTtBQUM1QixRQUFJeGdELE9BQU8sR0FBRyxjQUFjd2dELElBQTVCOztBQUNBLFFBQUksT0FBT243QixPQUFQLEtBQW1CLFdBQXZCLEVBQW9DO0FBQ2xDQSxNQUFBQSxPQUFPLENBQUMzOEIsS0FBUixDQUFjc1gsT0FBZDtBQUNEOztBQUNELFFBQUk7QUFDRjtBQUNBO0FBQ0E7QUFDQSxZQUFNLElBQUlDLEtBQUosQ0FBVUQsT0FBVixDQUFOO0FBQ0QsS0FMRCxDQUtFLE9BQU9vSyxDQUFQLEVBQVU7QUFDYixHQVhEO0FBWUQ7O0FBRUQsU0FBUzgyQyw0QkFBVCxHQUF3QztBQUN0QyxTQUFPLElBQVA7QUFDRDs7SUFFRC80RCx1QkFBQSxHQUFpQixVQUFTZzVELGNBQVQsRUFBeUJDLG1CQUF6QixFQUE4QztBQUM3RDtBQUNBLE1BQUlDLGVBQWUsR0FBRyxPQUFPLzFELE1BQVAsS0FBa0IsVUFBbEIsSUFBZ0NBLE1BQU0sQ0FBQ0ksUUFBN0Q7QUFDQSxNQUFJNDFELG9CQUFvQixHQUFHLFlBQTNCLENBSDZEOztBQUs3RDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNFLFdBQVNDLGFBQVQsQ0FBdUJDLGFBQXZCLEVBQXNDO0FBQ3BDLFFBQUlDLFVBQVUsR0FBR0QsYUFBYSxLQUFLSCxlQUFlLElBQUlHLGFBQWEsQ0FBQ0gsZUFBRCxDQUFoQyxJQUFxREcsYUFBYSxDQUFDRixvQkFBRCxDQUF2RSxDQUE5Qjs7QUFDQSxRQUFJLE9BQU9HLFVBQVAsS0FBc0IsVUFBMUIsRUFBc0M7QUFDcEMsYUFBT0EsVUFBUDtBQUNEO0FBQ0Y7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUUsTUFBSUMsU0FBUyxHQUFHLGVBQWhCLENBekU2RDtBQTRFN0Q7O0FBQ0EsTUFBSUMsY0FBYyxHQUFHO0FBQ25CaGhELElBQUFBLEtBQUssRUFBRWloRCwwQkFBMEIsQ0FBQyxPQUFELENBRGQ7QUFFbkJDLElBQUFBLElBQUksRUFBRUQsMEJBQTBCLENBQUMsU0FBRCxDQUZiO0FBR25CNTFELElBQUFBLElBQUksRUFBRTQxRCwwQkFBMEIsQ0FBQyxVQUFELENBSGI7QUFJbkI3dkQsSUFBQUEsTUFBTSxFQUFFNnZELDBCQUEwQixDQUFDLFFBQUQsQ0FKZjtBQUtuQnp5RCxJQUFBQSxNQUFNLEVBQUV5eUQsMEJBQTBCLENBQUMsUUFBRCxDQUxmO0FBTW5CenRELElBQUFBLE1BQU0sRUFBRXl0RCwwQkFBMEIsQ0FBQyxRQUFELENBTmY7QUFPbkJ2MkQsSUFBQUEsTUFBTSxFQUFFdTJELDBCQUEwQixDQUFDLFFBQUQsQ0FQZjtBQVNuQm40QixJQUFBQSxHQUFHLEVBQUVxNEIsb0JBQW9CLEVBVE47QUFVbkJDLElBQUFBLE9BQU8sRUFBRUMsd0JBVlU7QUFXbkJ4K0MsSUFBQUEsT0FBTyxFQUFFeStDLHdCQUF3QixFQVhkO0FBWW5CQyxJQUFBQSxXQUFXLEVBQUVDLDRCQUE0QixFQVp0QjtBQWFuQkMsSUFBQUEsVUFBVSxFQUFFQyx5QkFiTztBQWNuQmorQixJQUFBQSxJQUFJLEVBQUVrK0IsaUJBQWlCLEVBZEo7QUFlbkJDLElBQUFBLFFBQVEsRUFBRUMseUJBZlM7QUFnQm5CQyxJQUFBQSxLQUFLLEVBQUVDLHFCQWhCWTtBQWlCbkJDLElBQUFBLFNBQVMsRUFBRUMsc0JBakJRO0FBa0JuQkMsSUFBQUEsS0FBSyxFQUFFQyxzQkFsQlk7QUFtQm5CQyxJQUFBQSxLQUFLLEVBQUVDO0FBbkJZLEdBQXJCO0FBc0JBO0FBQ0Y7QUFDQTtBQUNBOztBQUNFOztBQUNBLFdBQVNsaUMsRUFBVCxDQUFZMVcsQ0FBWixFQUFlQyxDQUFmLEVBQWtCO0FBQ2hCO0FBQ0EsUUFBSUQsQ0FBQyxLQUFLQyxDQUFWLEVBQWE7QUFDWDtBQUNBO0FBQ0EsYUFBT0QsQ0FBQyxLQUFLLENBQU4sSUFBVyxJQUFJQSxDQUFKLEtBQVUsSUFBSUMsQ0FBaEM7QUFDRCxLQUpELE1BSU87QUFDTDtBQUNBLGFBQU9ELENBQUMsS0FBS0EsQ0FBTixJQUFXQyxDQUFDLEtBQUtBLENBQXhCO0FBQ0Q7QUFDRjtBQUNEOztBQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDRSxXQUFTNDRDLGFBQVQsQ0FBdUJqakQsT0FBdkIsRUFBZ0M7QUFDOUIsU0FBS0EsT0FBTCxHQUFlQSxPQUFmO0FBQ0EsU0FBSytnRCxLQUFMLEdBQWEsRUFBYjtBQUNELEdBL0g0RDs7O0FBaUk3RGtDLEVBQUFBLGFBQWEsQ0FBQ3J5RCxTQUFkLEdBQTBCcVAsS0FBSyxDQUFDclAsU0FBaEM7O0FBRUEsV0FBU3N5RCwwQkFBVCxDQUFvQ0MsUUFBcEMsRUFBOEM7QUFDNUMsSUFBMkM7QUFDekMsVUFBSUMsdUJBQXVCLEdBQUcsRUFBOUI7QUFDQSxVQUFJQywwQkFBMEIsR0FBRyxDQUFqQztBQUNEOztBQUNELGFBQVNDLFNBQVQsQ0FBbUJDLFVBQW5CLEVBQStCQyxLQUEvQixFQUFzQ0MsUUFBdEMsRUFBZ0Q5QyxhQUFoRCxFQUErRHYrQixRQUEvRCxFQUF5RXNoQyxZQUF6RSxFQUF1RkMsTUFBdkYsRUFBK0Y7QUFDN0ZoRCxNQUFBQSxhQUFhLEdBQUdBLGFBQWEsSUFBSWUsU0FBakM7QUFDQWdDLE1BQUFBLFlBQVksR0FBR0EsWUFBWSxJQUFJRCxRQUEvQjs7QUFFQSxVQUFJRSxNQUFNLEtBQUt0RCxvQkFBZixFQUFxQztBQUNuQyxZQUFJZSxtQkFBSixFQUF5QjtBQUN2QjtBQUNBLGNBQUloaEIsR0FBRyxHQUFHLElBQUluZ0MsS0FBSixDQUNSLHlGQUNBLGlEQURBLEdBRUEsZ0RBSFEsQ0FBVjtBQUtBbWdDLFVBQUFBLEdBQUcsQ0FBQzN5QyxJQUFKLEdBQVcscUJBQVg7QUFDQSxnQkFBTTJ5QyxHQUFOO0FBQ0QsU0FURCxNQVNPLElBQTZDLE9BQU8vYSxPQUFQLEtBQW1CLFdBQWhFLEVBQTZFO0FBQ2xGO0FBQ0EsY0FBSXUrQixRQUFRLEdBQUdqRCxhQUFhLEdBQUcsR0FBaEIsR0FBc0I4QyxRQUFyQzs7QUFDQSxjQUNFLENBQUNMLHVCQUF1QixDQUFDUSxRQUFELENBQXhCO0FBRUFQLFVBQUFBLDBCQUEwQixHQUFHLENBSC9CLEVBSUU7QUFDQS9DLFlBQUFBLGNBQVksQ0FDViwyREFDQSxvQkFEQSxHQUN1Qm9ELFlBRHZCLEdBQ3NDLGFBRHRDLEdBQ3NEL0MsYUFEdEQsR0FDdUUsd0JBRHZFLEdBRUEseURBRkEsR0FHQSxnRUFIQSxHQUlBLCtEQUpBLEdBSWtFLGNBTHhELENBQVo7QUFPQXlDLFlBQUFBLHVCQUF1QixDQUFDUSxRQUFELENBQXZCLEdBQW9DLElBQXBDO0FBQ0FQLFlBQUFBLDBCQUEwQjtBQUMzQjtBQUNGO0FBQ0Y7O0FBQ0QsVUFBSUcsS0FBSyxDQUFDQyxRQUFELENBQUwsSUFBbUIsSUFBdkIsRUFBNkI7QUFDM0IsWUFBSUYsVUFBSixFQUFnQjtBQUNkLGNBQUlDLEtBQUssQ0FBQ0MsUUFBRCxDQUFMLEtBQW9CLElBQXhCLEVBQThCO0FBQzVCLG1CQUFPLElBQUlSLGFBQUosQ0FBa0IsU0FBUzdnQyxRQUFULEdBQW9CLElBQXBCLEdBQTJCc2hDLFlBQTNCLEdBQTBDLDBCQUExQyxJQUF3RSxTQUFTL0MsYUFBVCxHQUF5Qiw2QkFBakcsQ0FBbEIsQ0FBUDtBQUNEOztBQUNELGlCQUFPLElBQUlzQyxhQUFKLENBQWtCLFNBQVM3Z0MsUUFBVCxHQUFvQixJQUFwQixHQUEyQnNoQyxZQUEzQixHQUEwQyw2QkFBMUMsSUFBMkUsTUFBTS9DLGFBQU4sR0FBc0Isa0NBQWpHLENBQWxCLENBQVA7QUFDRDs7QUFDRCxlQUFPLElBQVA7QUFDRCxPQVJELE1BUU87QUFDTCxlQUFPd0MsUUFBUSxDQUFDSyxLQUFELEVBQVFDLFFBQVIsRUFBa0I5QyxhQUFsQixFQUFpQ3YrQixRQUFqQyxFQUEyQ3NoQyxZQUEzQyxDQUFmO0FBQ0Q7QUFDRjs7QUFFRCxRQUFJRyxnQkFBZ0IsR0FBR1AsU0FBUyxDQUFDcHFELElBQVYsQ0FBZSxJQUFmLEVBQXFCLEtBQXJCLENBQXZCO0FBQ0EycUQsSUFBQUEsZ0JBQWdCLENBQUNOLFVBQWpCLEdBQThCRCxTQUFTLENBQUNwcUQsSUFBVixDQUFlLElBQWYsRUFBcUIsSUFBckIsQ0FBOUI7QUFFQSxXQUFPMnFELGdCQUFQO0FBQ0Q7O0FBRUQsV0FBU2pDLDBCQUFULENBQW9Da0MsWUFBcEMsRUFBa0Q7QUFDaEQsYUFBU1gsUUFBVCxDQUFrQkssS0FBbEIsRUFBeUJDLFFBQXpCLEVBQW1DOUMsYUFBbkMsRUFBa0R2K0IsUUFBbEQsRUFBNERzaEMsWUFBNUQsRUFBMEVDLE1BQTFFLEVBQWtGO0FBQ2hGLFVBQUlJLFNBQVMsR0FBR1AsS0FBSyxDQUFDQyxRQUFELENBQXJCO0FBQ0EsVUFBSU8sUUFBUSxHQUFHQyxXQUFXLENBQUNGLFNBQUQsQ0FBMUI7O0FBQ0EsVUFBSUMsUUFBUSxLQUFLRixZQUFqQixFQUErQjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxZQUFJSSxXQUFXLEdBQUdDLGNBQWMsQ0FBQ0osU0FBRCxDQUFoQztBQUVBLGVBQU8sSUFBSWQsYUFBSixDQUFrQixhQUFhN2dDLFFBQWIsR0FBd0IsSUFBeEIsR0FBK0JzaEMsWUFBL0IsR0FBOEMsWUFBOUMsSUFBOEQsTUFBTVEsV0FBTixHQUFvQixpQkFBcEIsR0FBd0N2RCxhQUF4QyxHQUF3RCxjQUF0SCxLQUF5SSxNQUFNbUQsWUFBTixHQUFxQixJQUE5SixDQUFsQixDQUFQO0FBQ0Q7O0FBQ0QsYUFBTyxJQUFQO0FBQ0Q7O0FBQ0QsV0FBT1osMEJBQTBCLENBQUNDLFFBQUQsQ0FBakM7QUFDRDs7QUFFRCxXQUFTckIsb0JBQVQsR0FBZ0M7QUFDOUIsV0FBT29CLDBCQUEwQixDQUFDaEMsNEJBQUQsQ0FBakM7QUFDRDs7QUFFRCxXQUFTYyx3QkFBVCxDQUFrQ29DLFdBQWxDLEVBQStDO0FBQzdDLGFBQVNqQixRQUFULENBQWtCSyxLQUFsQixFQUF5QkMsUUFBekIsRUFBbUM5QyxhQUFuQyxFQUFrRHYrQixRQUFsRCxFQUE0RHNoQyxZQUE1RCxFQUEwRTtBQUN4RSxVQUFJLE9BQU9VLFdBQVAsS0FBdUIsVUFBM0IsRUFBdUM7QUFDckMsZUFBTyxJQUFJbkIsYUFBSixDQUFrQixlQUFlUyxZQUFmLEdBQThCLGtCQUE5QixHQUFtRC9DLGFBQW5ELEdBQW1FLGlEQUFyRixDQUFQO0FBQ0Q7O0FBQ0QsVUFBSW9ELFNBQVMsR0FBR1AsS0FBSyxDQUFDQyxRQUFELENBQXJCOztBQUNBLFVBQUksQ0FBQzF1RCxLQUFLLENBQUNDLE9BQU4sQ0FBYyt1RCxTQUFkLENBQUwsRUFBK0I7QUFDN0IsWUFBSUMsUUFBUSxHQUFHQyxXQUFXLENBQUNGLFNBQUQsQ0FBMUI7QUFDQSxlQUFPLElBQUlkLGFBQUosQ0FBa0IsYUFBYTdnQyxRQUFiLEdBQXdCLElBQXhCLEdBQStCc2hDLFlBQS9CLEdBQThDLFlBQTlDLElBQThELE1BQU1NLFFBQU4sR0FBaUIsaUJBQWpCLEdBQXFDckQsYUFBckMsR0FBcUQsdUJBQW5ILENBQWxCLENBQVA7QUFDRDs7QUFDRCxXQUFLLElBQUkxdEQsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRzh3RCxTQUFTLENBQUNyNUQsTUFBOUIsRUFBc0N1SSxDQUFDLEVBQXZDLEVBQTJDO0FBQ3pDLFlBQUl2SyxLQUFLLEdBQUcwN0QsV0FBVyxDQUFDTCxTQUFELEVBQVk5d0QsQ0FBWixFQUFlMHRELGFBQWYsRUFBOEJ2K0IsUUFBOUIsRUFBd0NzaEMsWUFBWSxHQUFHLEdBQWYsR0FBcUJ6d0QsQ0FBckIsR0FBeUIsR0FBakUsRUFBc0VvdEQsb0JBQXRFLENBQXZCOztBQUNBLFlBQUkzM0QsS0FBSyxZQUFZdVgsS0FBckIsRUFBNEI7QUFDMUIsaUJBQU92WCxLQUFQO0FBQ0Q7QUFDRjs7QUFDRCxhQUFPLElBQVA7QUFDRDs7QUFDRCxXQUFPdzZELDBCQUEwQixDQUFDQyxRQUFELENBQWpDO0FBQ0Q7O0FBRUQsV0FBU2xCLHdCQUFULEdBQW9DO0FBQ2xDLGFBQVNrQixRQUFULENBQWtCSyxLQUFsQixFQUF5QkMsUUFBekIsRUFBbUM5QyxhQUFuQyxFQUFrRHYrQixRQUFsRCxFQUE0RHNoQyxZQUE1RCxFQUEwRTtBQUN4RSxVQUFJSyxTQUFTLEdBQUdQLEtBQUssQ0FBQ0MsUUFBRCxDQUFyQjs7QUFDQSxVQUFJLENBQUN0QyxjQUFjLENBQUM0QyxTQUFELENBQW5CLEVBQWdDO0FBQzlCLFlBQUlDLFFBQVEsR0FBR0MsV0FBVyxDQUFDRixTQUFELENBQTFCO0FBQ0EsZUFBTyxJQUFJZCxhQUFKLENBQWtCLGFBQWE3Z0MsUUFBYixHQUF3QixJQUF4QixHQUErQnNoQyxZQUEvQixHQUE4QyxZQUE5QyxJQUE4RCxNQUFNTSxRQUFOLEdBQWlCLGlCQUFqQixHQUFxQ3JELGFBQXJDLEdBQXFELG9DQUFuSCxDQUFsQixDQUFQO0FBQ0Q7O0FBQ0QsYUFBTyxJQUFQO0FBQ0Q7O0FBQ0QsV0FBT3VDLDBCQUEwQixDQUFDQyxRQUFELENBQWpDO0FBQ0Q7O0FBRUQsV0FBU2hCLDRCQUFULEdBQXdDO0FBQ3RDLGFBQVNnQixRQUFULENBQWtCSyxLQUFsQixFQUF5QkMsUUFBekIsRUFBbUM5QyxhQUFuQyxFQUFrRHYrQixRQUFsRCxFQUE0RHNoQyxZQUE1RCxFQUEwRTtBQUN4RSxVQUFJSyxTQUFTLEdBQUdQLEtBQUssQ0FBQ0MsUUFBRCxDQUFyQjs7QUFDQSxVQUFJLENBQUN4QyxTQUFPLENBQUNuRCxrQkFBUixDQUEyQmlHLFNBQTNCLENBQUwsRUFBNEM7QUFDMUMsWUFBSUMsUUFBUSxHQUFHQyxXQUFXLENBQUNGLFNBQUQsQ0FBMUI7QUFDQSxlQUFPLElBQUlkLGFBQUosQ0FBa0IsYUFBYTdnQyxRQUFiLEdBQXdCLElBQXhCLEdBQStCc2hDLFlBQS9CLEdBQThDLFlBQTlDLElBQThELE1BQU1NLFFBQU4sR0FBaUIsaUJBQWpCLEdBQXFDckQsYUFBckMsR0FBcUQseUNBQW5ILENBQWxCLENBQVA7QUFDRDs7QUFDRCxhQUFPLElBQVA7QUFDRDs7QUFDRCxXQUFPdUMsMEJBQTBCLENBQUNDLFFBQUQsQ0FBakM7QUFDRDs7QUFFRCxXQUFTZCx5QkFBVCxDQUFtQ2dDLGFBQW5DLEVBQWtEO0FBQ2hELGFBQVNsQixRQUFULENBQWtCSyxLQUFsQixFQUF5QkMsUUFBekIsRUFBbUM5QyxhQUFuQyxFQUFrRHYrQixRQUFsRCxFQUE0RHNoQyxZQUE1RCxFQUEwRTtBQUN4RSxVQUFJLEVBQUVGLEtBQUssQ0FBQ0MsUUFBRCxDQUFMLFlBQTJCWSxhQUE3QixDQUFKLEVBQWlEO0FBQy9DLFlBQUlDLGlCQUFpQixHQUFHRCxhQUFhLENBQUM1MkQsSUFBZCxJQUFzQmkwRCxTQUE5QztBQUNBLFlBQUk2QyxlQUFlLEdBQUdDLFlBQVksQ0FBQ2hCLEtBQUssQ0FBQ0MsUUFBRCxDQUFOLENBQWxDO0FBQ0EsZUFBTyxJQUFJUixhQUFKLENBQWtCLGFBQWE3Z0MsUUFBYixHQUF3QixJQUF4QixHQUErQnNoQyxZQUEvQixHQUE4QyxZQUE5QyxJQUE4RCxNQUFNYSxlQUFOLEdBQXdCLGlCQUF4QixHQUE0QzVELGFBQTVDLEdBQTRELGNBQTFILEtBQTZJLGtCQUFrQjJELGlCQUFsQixHQUFzQyxJQUFuTCxDQUFsQixDQUFQO0FBQ0Q7O0FBQ0QsYUFBTyxJQUFQO0FBQ0Q7O0FBQ0QsV0FBT3BCLDBCQUEwQixDQUFDQyxRQUFELENBQWpDO0FBQ0Q7O0FBRUQsV0FBU1QscUJBQVQsQ0FBK0IrQixjQUEvQixFQUErQztBQUM3QyxRQUFJLENBQUMxdkQsS0FBSyxDQUFDQyxPQUFOLENBQWN5dkQsY0FBZCxDQUFMLEVBQW9DO0FBQ2xDLE1BQTJDO0FBQ3pDLFlBQUloNkQsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQXZCLEVBQTBCO0FBQ3hCNDFELFVBQUFBLGNBQVksQ0FDVixpRUFBaUU3MUQsU0FBUyxDQUFDQyxNQUEzRSxHQUFvRixjQUFwRixHQUNBLDBFQUZVLENBQVo7QUFJRCxTQUxELE1BS087QUFDTDQxRCxVQUFBQSxjQUFZLENBQUMsd0RBQUQsQ0FBWjtBQUNEO0FBQ0Y7O0FBQ0QsYUFBT1ksNEJBQVA7QUFDRDs7QUFFRCxhQUFTaUMsUUFBVCxDQUFrQkssS0FBbEIsRUFBeUJDLFFBQXpCLEVBQW1DOUMsYUFBbkMsRUFBa0R2K0IsUUFBbEQsRUFBNERzaEMsWUFBNUQsRUFBMEU7QUFDeEUsVUFBSUssU0FBUyxHQUFHUCxLQUFLLENBQUNDLFFBQUQsQ0FBckI7O0FBQ0EsV0FBSyxJQUFJeHdELENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUd3eEQsY0FBYyxDQUFDLzVELE1BQW5DLEVBQTJDdUksQ0FBQyxFQUE1QyxFQUFnRDtBQUM5QyxZQUFJNnRCLEVBQUUsQ0FBQ2lqQyxTQUFELEVBQVlVLGNBQWMsQ0FBQ3h4RCxDQUFELENBQTFCLENBQU4sRUFBc0M7QUFDcEMsaUJBQU8sSUFBUDtBQUNEO0FBQ0Y7O0FBRUQsVUFBSXl4RCxZQUFZLEdBQUdwdUMsSUFBSSxDQUFDMVosU0FBTCxDQUFlNm5ELGNBQWYsRUFBK0IsU0FBUzVuRCxRQUFULENBQWtCdFEsR0FBbEIsRUFBdUI5QyxLQUF2QixFQUE4QjtBQUM5RSxZQUFJMkcsSUFBSSxHQUFHK3pELGNBQWMsQ0FBQzE2RCxLQUFELENBQXpCOztBQUNBLFlBQUkyRyxJQUFJLEtBQUssUUFBYixFQUF1QjtBQUNyQixpQkFBTzdFLE1BQU0sQ0FBQzlCLEtBQUQsQ0FBYjtBQUNEOztBQUNELGVBQU9BLEtBQVA7QUFDRCxPQU5rQixDQUFuQjtBQU9BLGFBQU8sSUFBSXc1RCxhQUFKLENBQWtCLGFBQWE3Z0MsUUFBYixHQUF3QixJQUF4QixHQUErQnNoQyxZQUEvQixHQUE4QyxjQUE5QyxHQUErRG40RCxNQUFNLENBQUN3NEQsU0FBRCxDQUFyRSxHQUFtRixJQUFuRixJQUEyRixrQkFBa0JwRCxhQUFsQixHQUFrQyxxQkFBbEMsR0FBMEQrRCxZQUExRCxHQUF5RSxHQUFwSyxDQUFsQixDQUFQO0FBQ0Q7O0FBQ0QsV0FBT3hCLDBCQUEwQixDQUFDQyxRQUFELENBQWpDO0FBQ0Q7O0FBRUQsV0FBU1gseUJBQVQsQ0FBbUM0QixXQUFuQyxFQUFnRDtBQUM5QyxhQUFTakIsUUFBVCxDQUFrQkssS0FBbEIsRUFBeUJDLFFBQXpCLEVBQW1DOUMsYUFBbkMsRUFBa0R2K0IsUUFBbEQsRUFBNERzaEMsWUFBNUQsRUFBMEU7QUFDeEUsVUFBSSxPQUFPVSxXQUFQLEtBQXVCLFVBQTNCLEVBQXVDO0FBQ3JDLGVBQU8sSUFBSW5CLGFBQUosQ0FBa0IsZUFBZVMsWUFBZixHQUE4QixrQkFBOUIsR0FBbUQvQyxhQUFuRCxHQUFtRSxrREFBckYsQ0FBUDtBQUNEOztBQUNELFVBQUlvRCxTQUFTLEdBQUdQLEtBQUssQ0FBQ0MsUUFBRCxDQUFyQjtBQUNBLFVBQUlPLFFBQVEsR0FBR0MsV0FBVyxDQUFDRixTQUFELENBQTFCOztBQUNBLFVBQUlDLFFBQVEsS0FBSyxRQUFqQixFQUEyQjtBQUN6QixlQUFPLElBQUlmLGFBQUosQ0FBa0IsYUFBYTdnQyxRQUFiLEdBQXdCLElBQXhCLEdBQStCc2hDLFlBQS9CLEdBQThDLFlBQTlDLElBQThELE1BQU1NLFFBQU4sR0FBaUIsaUJBQWpCLEdBQXFDckQsYUFBckMsR0FBcUQsd0JBQW5ILENBQWxCLENBQVA7QUFDRDs7QUFDRCxXQUFLLElBQUlwMEQsR0FBVCxJQUFnQnczRCxTQUFoQixFQUEyQjtBQUN6QixZQUFJaDBELEdBQUcsQ0FBQ2cwRCxTQUFELEVBQVl4M0QsR0FBWixDQUFQLEVBQXlCO0FBQ3ZCLGNBQUk3RCxLQUFLLEdBQUcwN0QsV0FBVyxDQUFDTCxTQUFELEVBQVl4M0QsR0FBWixFQUFpQm8wRCxhQUFqQixFQUFnQ3YrQixRQUFoQyxFQUEwQ3NoQyxZQUFZLEdBQUcsR0FBZixHQUFxQm4zRCxHQUEvRCxFQUFvRTh6RCxvQkFBcEUsQ0FBdkI7O0FBQ0EsY0FBSTMzRCxLQUFLLFlBQVl1WCxLQUFyQixFQUE0QjtBQUMxQixtQkFBT3ZYLEtBQVA7QUFDRDtBQUNGO0FBQ0Y7O0FBQ0QsYUFBTyxJQUFQO0FBQ0Q7O0FBQ0QsV0FBT3c2RCwwQkFBMEIsQ0FBQ0MsUUFBRCxDQUFqQztBQUNEOztBQUVELFdBQVNQLHNCQUFULENBQWdDK0IsbUJBQWhDLEVBQXFEO0FBQ25ELFFBQUksQ0FBQzV2RCxLQUFLLENBQUNDLE9BQU4sQ0FBYzJ2RCxtQkFBZCxDQUFMLEVBQXlDO0FBQ3ZDOTVELE1BQXdDeTFELGNBQVksQ0FBQyx3RUFBRCxDQUFwRCxDQUFBO0FBQ0EsYUFBT1ksNEJBQVA7QUFDRDs7QUFFRCxTQUFLLElBQUlqdUQsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRzB4RCxtQkFBbUIsQ0FBQ2o2RCxNQUF4QyxFQUFnRHVJLENBQUMsRUFBakQsRUFBcUQ7QUFDbkQsVUFBSTJ4RCxPQUFPLEdBQUdELG1CQUFtQixDQUFDMXhELENBQUQsQ0FBakM7O0FBQ0EsVUFBSSxPQUFPMnhELE9BQVAsS0FBbUIsVUFBdkIsRUFBbUM7QUFDakN0RSxRQUFBQSxjQUFZLENBQ1YsdUZBQ0EsV0FEQSxHQUNjdUUsd0JBQXdCLENBQUNELE9BQUQsQ0FEdEMsR0FDa0QsWUFEbEQsR0FDaUUzeEQsQ0FEakUsR0FDcUUsR0FGM0QsQ0FBWjtBQUlBLGVBQU9pdUQsNEJBQVA7QUFDRDtBQUNGOztBQUVELGFBQVNpQyxRQUFULENBQWtCSyxLQUFsQixFQUF5QkMsUUFBekIsRUFBbUM5QyxhQUFuQyxFQUFrRHYrQixRQUFsRCxFQUE0RHNoQyxZQUE1RCxFQUEwRTtBQUN4RSxXQUFLLElBQUl6d0QsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRzB4RCxtQkFBbUIsQ0FBQ2o2RCxNQUF4QyxFQUFnRHVJLENBQUMsRUFBakQsRUFBcUQ7QUFDbkQsWUFBSTJ4RCxPQUFPLEdBQUdELG1CQUFtQixDQUFDMXhELENBQUQsQ0FBakM7O0FBQ0EsWUFBSTJ4RCxPQUFPLENBQUNwQixLQUFELEVBQVFDLFFBQVIsRUFBa0I5QyxhQUFsQixFQUFpQ3YrQixRQUFqQyxFQUEyQ3NoQyxZQUEzQyxFQUF5RHJELG9CQUF6RCxDQUFQLElBQXlGLElBQTdGLEVBQW1HO0FBQ2pHLGlCQUFPLElBQVA7QUFDRDtBQUNGOztBQUVELGFBQU8sSUFBSTRDLGFBQUosQ0FBa0IsYUFBYTdnQyxRQUFiLEdBQXdCLElBQXhCLEdBQStCc2hDLFlBQS9CLEdBQThDLGdCQUE5QyxJQUFrRSxNQUFNL0MsYUFBTixHQUFzQixJQUF4RixDQUFsQixDQUFQO0FBQ0Q7O0FBQ0QsV0FBT3VDLDBCQUEwQixDQUFDQyxRQUFELENBQWpDO0FBQ0Q7O0FBRUQsV0FBU2IsaUJBQVQsR0FBNkI7QUFDM0IsYUFBU2EsUUFBVCxDQUFrQkssS0FBbEIsRUFBeUJDLFFBQXpCLEVBQW1DOUMsYUFBbkMsRUFBa0R2K0IsUUFBbEQsRUFBNERzaEMsWUFBNUQsRUFBMEU7QUFDeEUsVUFBSSxDQUFDb0IsTUFBTSxDQUFDdEIsS0FBSyxDQUFDQyxRQUFELENBQU4sQ0FBWCxFQUE4QjtBQUM1QixlQUFPLElBQUlSLGFBQUosQ0FBa0IsYUFBYTdnQyxRQUFiLEdBQXdCLElBQXhCLEdBQStCc2hDLFlBQS9CLEdBQThDLGdCQUE5QyxJQUFrRSxNQUFNL0MsYUFBTixHQUFzQiwwQkFBeEYsQ0FBbEIsQ0FBUDtBQUNEOztBQUNELGFBQU8sSUFBUDtBQUNEOztBQUNELFdBQU91QywwQkFBMEIsQ0FBQ0MsUUFBRCxDQUFqQztBQUNEOztBQUVELFdBQVNMLHNCQUFULENBQWdDaUMsVUFBaEMsRUFBNEM7QUFDMUMsYUFBUzVCLFFBQVQsQ0FBa0JLLEtBQWxCLEVBQXlCQyxRQUF6QixFQUFtQzlDLGFBQW5DLEVBQWtEditCLFFBQWxELEVBQTREc2hDLFlBQTVELEVBQTBFO0FBQ3hFLFVBQUlLLFNBQVMsR0FBR1AsS0FBSyxDQUFDQyxRQUFELENBQXJCO0FBQ0EsVUFBSU8sUUFBUSxHQUFHQyxXQUFXLENBQUNGLFNBQUQsQ0FBMUI7O0FBQ0EsVUFBSUMsUUFBUSxLQUFLLFFBQWpCLEVBQTJCO0FBQ3pCLGVBQU8sSUFBSWYsYUFBSixDQUFrQixhQUFhN2dDLFFBQWIsR0FBd0IsSUFBeEIsR0FBK0JzaEMsWUFBL0IsR0FBOEMsYUFBOUMsR0FBOERNLFFBQTlELEdBQXlFLElBQXpFLElBQWlGLGtCQUFrQnJELGFBQWxCLEdBQWtDLHVCQUFuSCxDQUFsQixDQUFQO0FBQ0Q7O0FBQ0QsV0FBSyxJQUFJcDBELEdBQVQsSUFBZ0J3NEQsVUFBaEIsRUFBNEI7QUFDMUIsWUFBSUgsT0FBTyxHQUFHRyxVQUFVLENBQUN4NEQsR0FBRCxDQUF4Qjs7QUFDQSxZQUFJLENBQUNxNEQsT0FBTCxFQUFjO0FBQ1o7QUFDRDs7QUFDRCxZQUFJbDhELEtBQUssR0FBR2s4RCxPQUFPLENBQUNiLFNBQUQsRUFBWXgzRCxHQUFaLEVBQWlCbzBELGFBQWpCLEVBQWdDditCLFFBQWhDLEVBQTBDc2hDLFlBQVksR0FBRyxHQUFmLEdBQXFCbjNELEdBQS9ELEVBQW9FOHpELG9CQUFwRSxDQUFuQjs7QUFDQSxZQUFJMzNELEtBQUosRUFBVztBQUNULGlCQUFPQSxLQUFQO0FBQ0Q7QUFDRjs7QUFDRCxhQUFPLElBQVA7QUFDRDs7QUFDRCxXQUFPdzZELDBCQUEwQixDQUFDQyxRQUFELENBQWpDO0FBQ0Q7O0FBRUQsV0FBU0gsNEJBQVQsQ0FBc0MrQixVQUF0QyxFQUFrRDtBQUNoRCxhQUFTNUIsUUFBVCxDQUFrQkssS0FBbEIsRUFBeUJDLFFBQXpCLEVBQW1DOUMsYUFBbkMsRUFBa0R2K0IsUUFBbEQsRUFBNERzaEMsWUFBNUQsRUFBMEU7QUFDeEUsVUFBSUssU0FBUyxHQUFHUCxLQUFLLENBQUNDLFFBQUQsQ0FBckI7QUFDQSxVQUFJTyxRQUFRLEdBQUdDLFdBQVcsQ0FBQ0YsU0FBRCxDQUExQjs7QUFDQSxVQUFJQyxRQUFRLEtBQUssUUFBakIsRUFBMkI7QUFDekIsZUFBTyxJQUFJZixhQUFKLENBQWtCLGFBQWE3Z0MsUUFBYixHQUF3QixJQUF4QixHQUErQnNoQyxZQUEvQixHQUE4QyxhQUE5QyxHQUE4RE0sUUFBOUQsR0FBeUUsSUFBekUsSUFBaUYsa0JBQWtCckQsYUFBbEIsR0FBa0MsdUJBQW5ILENBQWxCLENBQVA7QUFDRCxPQUx1RTtBQU94RTs7O0FBQ0EsVUFBSXFFLE9BQU8sR0FBR2xsQyxRQUFNLENBQUMsRUFBRCxFQUFLMGpDLEtBQUssQ0FBQ0MsUUFBRCxDQUFWLEVBQXNCc0IsVUFBdEIsQ0FBcEI7O0FBQ0EsV0FBSyxJQUFJeDRELEdBQVQsSUFBZ0J5NEQsT0FBaEIsRUFBeUI7QUFDdkIsWUFBSUosT0FBTyxHQUFHRyxVQUFVLENBQUN4NEQsR0FBRCxDQUF4Qjs7QUFDQSxZQUFJLENBQUNxNEQsT0FBTCxFQUFjO0FBQ1osaUJBQU8sSUFBSTNCLGFBQUosQ0FDTCxhQUFhN2dDLFFBQWIsR0FBd0IsSUFBeEIsR0FBK0JzaEMsWUFBL0IsR0FBOEMsU0FBOUMsR0FBMERuM0QsR0FBMUQsR0FBZ0UsaUJBQWhFLEdBQW9GbzBELGFBQXBGLEdBQW9HLElBQXBHLEdBQ0EsZ0JBREEsR0FDbUJycUMsSUFBSSxDQUFDMVosU0FBTCxDQUFlNG1ELEtBQUssQ0FBQ0MsUUFBRCxDQUFwQixFQUFnQyxJQUFoQyxFQUFzQyxJQUF0QyxDQURuQixHQUVBLGdCQUZBLEdBRW9CbnRDLElBQUksQ0FBQzFaLFNBQUwsQ0FBZS9ULE1BQU0sQ0FBQzJHLElBQVAsQ0FBWXUxRCxVQUFaLENBQWYsRUFBd0MsSUFBeEMsRUFBOEMsSUFBOUMsQ0FIZixDQUFQO0FBS0Q7O0FBQ0QsWUFBSXI4RCxLQUFLLEdBQUdrOEQsT0FBTyxDQUFDYixTQUFELEVBQVl4M0QsR0FBWixFQUFpQm8wRCxhQUFqQixFQUFnQ3YrQixRQUFoQyxFQUEwQ3NoQyxZQUFZLEdBQUcsR0FBZixHQUFxQm4zRCxHQUEvRCxFQUFvRTh6RCxvQkFBcEUsQ0FBbkI7O0FBQ0EsWUFBSTMzRCxLQUFKLEVBQVc7QUFDVCxpQkFBT0EsS0FBUDtBQUNEO0FBQ0Y7O0FBQ0QsYUFBTyxJQUFQO0FBQ0Q7O0FBRUQsV0FBT3c2RCwwQkFBMEIsQ0FBQ0MsUUFBRCxDQUFqQztBQUNEOztBQUVELFdBQVMyQixNQUFULENBQWdCZixTQUFoQixFQUEyQjtBQUN6QixZQUFRLE9BQU9BLFNBQWY7QUFDRSxXQUFLLFFBQUw7QUFDQSxXQUFLLFFBQUw7QUFDQSxXQUFLLFdBQUw7QUFDRSxlQUFPLElBQVA7O0FBQ0YsV0FBSyxTQUFMO0FBQ0UsZUFBTyxDQUFDQSxTQUFSOztBQUNGLFdBQUssUUFBTDtBQUNFLFlBQUlodkQsS0FBSyxDQUFDQyxPQUFOLENBQWMrdUQsU0FBZCxDQUFKLEVBQThCO0FBQzVCLGlCQUFPQSxTQUFTLENBQUM3cEQsS0FBVixDQUFnQjRxRCxNQUFoQixDQUFQO0FBQ0Q7O0FBQ0QsWUFBSWYsU0FBUyxLQUFLLElBQWQsSUFBc0I1QyxjQUFjLENBQUM0QyxTQUFELENBQXhDLEVBQXFEO0FBQ25ELGlCQUFPLElBQVA7QUFDRDs7QUFFRCxZQUFJdEMsVUFBVSxHQUFHRixhQUFhLENBQUN3QyxTQUFELENBQTlCOztBQUNBLFlBQUl0QyxVQUFKLEVBQWdCO0FBQ2QsY0FBSS8xRCxRQUFRLEdBQUcrMUQsVUFBVSxDQUFDcjRELElBQVgsQ0FBZ0IyNkQsU0FBaEIsQ0FBZjtBQUNBLGNBQUl6a0QsSUFBSjs7QUFDQSxjQUFJbWlELFVBQVUsS0FBS3NDLFNBQVMsQ0FBQzU5QyxPQUE3QixFQUFzQztBQUNwQyxtQkFBTyxDQUFDLENBQUM3RyxJQUFJLEdBQUc1VCxRQUFRLENBQUMyVCxJQUFULEVBQVIsRUFBeUJLLElBQWpDLEVBQXVDO0FBQ3JDLGtCQUFJLENBQUNvbEQsTUFBTSxDQUFDeGxELElBQUksQ0FBQzdWLEtBQU4sQ0FBWCxFQUF5QjtBQUN2Qix1QkFBTyxLQUFQO0FBQ0Q7QUFDRjtBQUNGLFdBTkQsTUFNTztBQUNMO0FBQ0EsbUJBQU8sQ0FBQyxDQUFDNlYsSUFBSSxHQUFHNVQsUUFBUSxDQUFDMlQsSUFBVCxFQUFSLEVBQXlCSyxJQUFqQyxFQUF1QztBQUNyQyxrQkFBSXlaLEtBQUssR0FBRzdaLElBQUksQ0FBQzdWLEtBQWpCOztBQUNBLGtCQUFJMHZCLEtBQUosRUFBVztBQUNULG9CQUFJLENBQUMyckMsTUFBTSxDQUFDM3JDLEtBQUssQ0FBQyxDQUFELENBQU4sQ0FBWCxFQUF1QjtBQUNyQix5QkFBTyxLQUFQO0FBQ0Q7QUFDRjtBQUNGO0FBQ0Y7QUFDRixTQXBCRCxNQW9CTztBQUNMLGlCQUFPLEtBQVA7QUFDRDs7QUFFRCxlQUFPLElBQVA7O0FBQ0Y7QUFDRSxlQUFPLEtBQVA7QUExQ0o7QUE0Q0Q7O0FBRUQsV0FBU3pyQixRQUFULENBQWtCczJELFFBQWxCLEVBQTRCRCxTQUE1QixFQUF1QztBQUNyQztBQUNBLFFBQUlDLFFBQVEsS0FBSyxRQUFqQixFQUEyQjtBQUN6QixhQUFPLElBQVA7QUFDRCxLQUpvQzs7O0FBT3JDLFFBQUksQ0FBQ0QsU0FBTCxFQUFnQjtBQUNkLGFBQU8sS0FBUDtBQUNELEtBVG9DOzs7QUFZckMsUUFBSUEsU0FBUyxDQUFDLGVBQUQsQ0FBVCxLQUErQixRQUFuQyxFQUE2QztBQUMzQyxhQUFPLElBQVA7QUFDRCxLQWRvQzs7O0FBaUJyQyxRQUFJLE9BQU96NEQsTUFBUCxLQUFrQixVQUFsQixJQUFnQ3k0RCxTQUFTLFlBQVl6NEQsTUFBekQsRUFBaUU7QUFDL0QsYUFBTyxJQUFQO0FBQ0Q7O0FBRUQsV0FBTyxLQUFQO0FBQ0QsR0F0ZTREOzs7QUF5ZTdELFdBQVMyNEQsV0FBVCxDQUFxQkYsU0FBckIsRUFBZ0M7QUFDOUIsUUFBSUMsUUFBUSxHQUFHLE9BQU9ELFNBQXRCOztBQUNBLFFBQUlodkQsS0FBSyxDQUFDQyxPQUFOLENBQWMrdUQsU0FBZCxDQUFKLEVBQThCO0FBQzVCLGFBQU8sT0FBUDtBQUNEOztBQUNELFFBQUlBLFNBQVMsWUFBWTdtQyxNQUF6QixFQUFpQztBQUMvQjtBQUNBO0FBQ0E7QUFDQSxhQUFPLFFBQVA7QUFDRDs7QUFDRCxRQUFJeHZCLFFBQVEsQ0FBQ3MyRCxRQUFELEVBQVdELFNBQVgsQ0FBWixFQUFtQztBQUNqQyxhQUFPLFFBQVA7QUFDRDs7QUFDRCxXQUFPQyxRQUFQO0FBQ0QsR0F4ZjREO0FBMmY3RDs7O0FBQ0EsV0FBU0csY0FBVCxDQUF3QkosU0FBeEIsRUFBbUM7QUFDakMsUUFBSSxPQUFPQSxTQUFQLEtBQXFCLFdBQXJCLElBQW9DQSxTQUFTLEtBQUssSUFBdEQsRUFBNEQ7QUFDMUQsYUFBTyxLQUFLQSxTQUFaO0FBQ0Q7O0FBQ0QsUUFBSUMsUUFBUSxHQUFHQyxXQUFXLENBQUNGLFNBQUQsQ0FBMUI7O0FBQ0EsUUFBSUMsUUFBUSxLQUFLLFFBQWpCLEVBQTJCO0FBQ3pCLFVBQUlELFNBQVMsWUFBWXZ4QyxJQUF6QixFQUErQjtBQUM3QixlQUFPLE1BQVA7QUFDRCxPQUZELE1BRU8sSUFBSXV4QyxTQUFTLFlBQVk3bUMsTUFBekIsRUFBaUM7QUFDdEMsZUFBTyxRQUFQO0FBQ0Q7QUFDRjs7QUFDRCxXQUFPOG1DLFFBQVA7QUFDRCxHQXpnQjREO0FBNGdCN0Q7OztBQUNBLFdBQVNhLHdCQUFULENBQWtDcDdELEtBQWxDLEVBQXlDO0FBQ3ZDLFFBQUkyRyxJQUFJLEdBQUcrekQsY0FBYyxDQUFDMTZELEtBQUQsQ0FBekI7O0FBQ0EsWUFBUTJHLElBQVI7QUFDRSxXQUFLLE9BQUw7QUFDQSxXQUFLLFFBQUw7QUFDRSxlQUFPLFFBQVFBLElBQWY7O0FBQ0YsV0FBSyxTQUFMO0FBQ0EsV0FBSyxNQUFMO0FBQ0EsV0FBSyxRQUFMO0FBQ0UsZUFBTyxPQUFPQSxJQUFkOztBQUNGO0FBQ0UsZUFBT0EsSUFBUDtBQVRKO0FBV0QsR0ExaEI0RDs7O0FBNmhCN0QsV0FBU28wRCxZQUFULENBQXNCVCxTQUF0QixFQUFpQztBQUMvQixRQUFJLENBQUNBLFNBQVMsQ0FBQy9xRCxXQUFYLElBQTBCLENBQUMrcUQsU0FBUyxDQUFDL3FELFdBQVYsQ0FBc0J2TCxJQUFyRCxFQUEyRDtBQUN6RCxhQUFPaTBELFNBQVA7QUFDRDs7QUFDRCxXQUFPcUMsU0FBUyxDQUFDL3FELFdBQVYsQ0FBc0J2TCxJQUE3QjtBQUNEOztBQUVEazBELEVBQUFBLGNBQWMsQ0FBQ2xCLGNBQWYsR0FBZ0NBLGNBQWhDO0FBQ0FrQixFQUFBQSxjQUFjLENBQUNYLGlCQUFmLEdBQW1DUCxjQUFjLENBQUNPLGlCQUFsRDtBQUNBVyxFQUFBQSxjQUFjLENBQUNzRCxTQUFmLEdBQTJCdEQsY0FBM0I7QUFFQSxTQUFPQSxjQUFQO0FBQ0QsQ0F6aUJEOzs7Ozs7Ozs7QUM5QjJDO0FBQ3pDLE1BQUlWLE9BQU8sR0FBR3I0RCxpQkFBZCxDQUR5QztBQUl6Qzs7O0FBQ0EsTUFBSXc0RCxtQkFBbUIsR0FBRyxJQUExQjtBQUNBajVELEVBQUFBLGlCQUFBLEdBQWlCUyx1QkFBQSxDQUFxQ3E0RCxPQUFPLENBQUM3QixTQUE3QyxFQUF3RGdDLG1CQUF4RCxDQUFqQjtBQUNEOzs7Ozs7OztBQ1hEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUzhELEtBQVQsQ0FBZS92QyxHQUFmLEVBQW9CZ3dDLElBQXBCLEVBQTBCO0FBQ3hCQSxFQUFBQSxJQUFJLEdBQUdBLElBQUksSUFBSSxFQUFmO0FBRUEsTUFBSUMsZUFBZSxHQUFHRCxJQUFJLENBQUNDLGVBQTNCOztBQUNBLE1BQUlob0MsSUFBSSxHQUFHLFVBQVVpQyxDQUFWLEVBQWE7QUFDdEIsV0FBT0EsQ0FBQyxDQUFDakMsSUFBRixFQUFQO0FBQ0QsR0FGRDs7QUFHQSxNQUFJOXFCLEdBQUcsR0FBRyxFQUFWO0FBRUEreUQsRUFBQUEsaUJBQWlCLENBQUNsd0MsR0FBRCxDQUFqQixDQUF1QnBiLEdBQXZCLENBQTJCcWpCLElBQTNCLEVBQWlDcGpCLE1BQWpDLENBQXdDNkcsT0FBeEMsRUFBaUQvRyxPQUFqRCxDQUF5RCxVQUFVNGxDLElBQVYsRUFBZ0I7QUFDdkU7QUFDQSxRQUFJalEsR0FBRyxHQUFHaVEsSUFBSSxDQUFDM3NDLE9BQUwsQ0FBYSxHQUFiLENBQVY7QUFDQSxRQUFJeEcsR0FBRyxHQUFHbXpDLElBQUksQ0FBQ2pKLE1BQUwsQ0FBWSxDQUFaLEVBQWVoSCxHQUFmLEVBQW9CclMsSUFBcEIsRUFBVjtBQUNBLFFBQUkvd0IsR0FBRyxHQUFHcXpDLElBQUksQ0FBQ2pKLE1BQUwsQ0FBWWhILEdBQUcsR0FBRyxDQUFsQixFQUFxQnJTLElBQXJCLEVBQVY7O0FBQ0EsUUFBSWdvQyxlQUFlLElBQUlFLFNBQVMsQ0FBQ2o1RCxHQUFELENBQWhDLEVBQXVDO0FBQ3JDQSxNQUFBQSxHQUFHLEdBQUc2dEIsTUFBTSxDQUFDN3RCLEdBQUQsQ0FBWjtBQUNEOztBQUVEaUcsSUFBQUEsR0FBRyxDQUFDL0YsR0FBRCxDQUFILEdBQVdGLEdBQVg7QUFDRCxHQVZEO0FBWUEsU0FBT2lHLEdBQVA7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBRUEsU0FBU2d6RCxTQUFULENBQW1CN2pELENBQW5CLEVBQXNCO0FBQ3BCLFNBQU8sQ0FBQzZjLEtBQUssQ0FBQ0ksVUFBVSxDQUFDamQsQ0FBRCxDQUFYLENBQU4sSUFBeUJ5UyxRQUFRLENBQUN6UyxDQUFELENBQXhDO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBOzs7QUFDQSxTQUFTNGpELGlCQUFULENBQTJCbHdDLEdBQTNCLEVBQWdDO0FBQzlCLE1BQUlvd0MsTUFBTSxHQUFHLEVBQWI7QUFDQSxNQUFJbDNDLE1BQU0sR0FBRyxDQUFiO0FBQ0EsTUFBSTI5QixHQUFHLEdBQUcsR0FBVjtBQUNBLE1BQUl3WixjQUFjLEdBQUcsY0FBckI7QUFDQSxNQUFJQyxLQUFLLEdBQUcsRUFBWjtBQUNBLE1BQUlDLFNBQUo7O0FBQ0EsU0FBT3IzQyxNQUFNLEdBQUc4RyxHQUFHLENBQUN6cUIsTUFBcEIsRUFBNEI7QUFDMUJnN0QsSUFBQUEsU0FBUyxHQUFHdndDLEdBQUcsQ0FBQ3BpQixPQUFKLENBQVlpNUMsR0FBWixFQUFpQjM5QixNQUFqQixDQUFaOztBQUNBLFFBQUlxM0MsU0FBUyxLQUFLLENBQUMsQ0FBbkIsRUFBc0I7QUFDcEJBLE1BQUFBLFNBQVMsR0FBR3Z3QyxHQUFHLENBQUN6cUIsTUFBaEI7QUFDRDs7QUFFRCs2RCxJQUFBQSxLQUFLLElBQUl0d0MsR0FBRyxDQUFDd3dDLFNBQUosQ0FBY3QzQyxNQUFkLEVBQXNCcTNDLFNBQXRCLENBQVQsQ0FOMEI7O0FBUzFCLFFBQUlGLGNBQWMsQ0FBQ2oyRCxJQUFmLENBQW9CazJELEtBQXBCLENBQUosRUFBZ0M7QUFDOUJBLE1BQUFBLEtBQUssSUFBSSxHQUFUO0FBQ0FwM0MsTUFBQUEsTUFBTSxHQUFHcTNDLFNBQVMsR0FBRyxDQUFyQjtBQUNBO0FBQ0Q7O0FBRURILElBQUFBLE1BQU0sQ0FBQzU0RCxJQUFQLENBQVk4NEQsS0FBWjtBQUNBQSxJQUFBQSxLQUFLLEdBQUcsRUFBUjtBQUNBcDNDLElBQUFBLE1BQU0sR0FBR3EzQyxTQUFTLEdBQUcsQ0FBckI7QUFDRDs7QUFFRCxTQUFPSCxNQUFQO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBOzs7QUFDQSxTQUFTM29ELFNBQVQsQ0FBbUJ0SyxHQUFuQixFQUF3QjtBQUN0QixTQUFPekosTUFBTSxDQUFDMkcsSUFBUCxDQUFZOEMsR0FBWixFQUFpQnlILEdBQWpCLENBQXFCLFVBQVV4TixHQUFWLEVBQWU7QUFDekMsV0FBT0EsR0FBRyxHQUFHLEdBQU4sR0FBWStGLEdBQUcsQ0FBQy9GLEdBQUQsQ0FBdEI7QUFDRCxHQUZNLEVBRUpxRixJQUZJLENBRUMsR0FGRCxDQUFQO0FBR0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBOzs7QUFDQSxTQUFTb0MsU0FBVCxDQUFtQnFmLEdBQW5CLEVBQXdCOHhDLElBQXhCLEVBQThCO0FBQzVCLFNBQU92b0QsU0FBUyxDQUFDc29ELEtBQUssQ0FBQzd4QyxHQUFELEVBQU04eEMsSUFBTixDQUFOLENBQWhCO0FBQ0Q7O1NBRUQsR0FBdUJEO2FBQ3ZCLEdBQTJCdG9EO2FBQzNCLEdBQTJCNUk7Ozs7Ozs7OztBQzdIM0IsSUFBSTR4RCxTQUFTLEdBQUcsNkhBQWhCO0FBQUEsSUFDRUMsV0FBVyxHQUFHLDRDQURoQjtBQUFBLElBRUVDLFdBQVcsR0FBRyxjQUZoQjtBQUFBLElBR0VDLGNBQWMsR0FBRyxPQUhuQjtBQUtBLElBQUlDLE9BQU8sR0FBRyxFQUFkO0FBQUEsSUFDRUMsT0FERjtBQUFBLElBRUVDLFNBQVMsR0FBRztBQUNWO0FBQ0FDLEVBQUFBLFFBQVEsRUFBRTtBQUNScDlELElBQUFBLEdBQUcsRUFBRSxVQUFVNkosRUFBVixFQUFjO0FBQ2pCO0FBQ0EsVUFBSXd6RCxhQUFhLEdBQUd4ekQsRUFBRSxDQUFDeXpELGdCQUFILENBQW9CLFVBQXBCLENBQXBCO0FBQ0EsYUFBT0QsYUFBYSxJQUFJQSxhQUFhLENBQUNFLFNBQS9CLEdBQ0x0b0MsUUFBUSxDQUFDb29DLGFBQWEsQ0FBQzM4RCxLQUFmLEVBQXNCLEVBQXRCLENBREgsR0FFTG84RCxXQUFXLENBQUN0MkQsSUFBWixDQUFpQnFELEVBQUUsQ0FBQzJ6RCxRQUFwQixLQUNBVCxXQUFXLENBQUN2MkQsSUFBWixDQUFpQnFELEVBQUUsQ0FBQzJ6RCxRQUFwQixLQUFpQzN6RCxFQUFFLENBQUM2OEMsSUFEcEMsR0FFRSxDQUZGLEdBR0V6bEQsU0FMSjtBQU1EO0FBVk87QUFGQSxDQUZkO0FBQUEsSUFpQkV3OEQsUUFBUSxHQUFHO0FBQ1R6OUQsRUFBQUEsR0FBRyxFQUFFLFVBQVUwOUQsSUFBVixFQUFnQmg1RCxJQUFoQixFQUFzQjtBQUN6QjtBQUNBLFdBQU9nNUQsSUFBSSxDQUFDUixPQUFPLENBQUN4NEQsSUFBRCxDQUFQLElBQWlCQSxJQUFsQixDQUFKO0FBRUxBLElBQUFBLElBQUksQ0FBQzJHLFdBQUwsRUFGSyxHQUdMcEssU0FIRjtBQUlEO0FBUFEsQ0FqQmI7QUFBQSxJQTBCRTA4RCxZQUFZLEdBQUcsRUExQmpCO0FBNEJBUixTQUFTLENBQUNudkQsS0FBVixHQUFrQjtBQUNoQmhPLEVBQUFBLEdBQUcsRUFBRSxVQUFVNkosRUFBVixFQUFjO0FBQ2pCLFdBQU9BLEVBQUUsQ0FBQ21FLEtBQUgsQ0FBUzR2RCxPQUFoQjtBQUNEO0FBSGUsQ0FBbEI7QUFNQVYsT0FBTyxHQUFHO0FBQ1JXLEVBQUFBLFNBQVMsRUFBRSxXQURIO0FBRVJULEVBQUFBLFFBQVEsRUFBRSxVQUZGO0FBR1JVLEVBQUFBLFFBQVEsRUFBRSxVQUhGO0FBSVIsU0FBTyxTQUpDO0FBS1IsV0FBUyxXQUxEO0FBTVJDLEVBQUFBLFNBQVMsRUFBRSxXQU5IO0FBT1JDLEVBQUFBLFdBQVcsRUFBRSxhQVBMO0FBUVJDLEVBQUFBLFdBQVcsRUFBRSxhQVJMO0FBU1JDLEVBQUFBLE9BQU8sRUFBRSxTQVREO0FBVVJDLEVBQUFBLE9BQU8sRUFBRSxTQVZEO0FBV1JDLEVBQUFBLE1BQU0sRUFBRSxRQVhBO0FBWVJDLEVBQUFBLFdBQVcsRUFBRSxhQVpMO0FBYVJDLEVBQUFBLGVBQWUsRUFBRTtBQWJULENBQVY7QUFnQkEsSUFBSUMsRUFBRSxHQUFHLE9BQU9DLFNBQVAsS0FBcUIsV0FBckIsR0FBbUNBLFNBQVMsQ0FBQzM4RCxTQUE3QyxHQUF5RCxFQUFsRTtBQUNBLElBQUk0OEQsR0FBRyxHQUFHLE9BQU90NUQsUUFBUCxLQUFvQixXQUFwQixHQUFrQ0EsUUFBbEMsR0FBNkMsRUFBdkQ7O0FBRUEsU0FBU3U1RCxTQUFULENBQW1CcG9DLENBQW5CLEVBQXNCO0FBQ3BCLE1BQUlsbkIsQ0FBQyxHQUFHLENBQVIsQ0FEb0I7O0FBR3BCLFNBQU91bUIsVUFBVSxDQUFDVyxDQUFDLENBQUMzdEIsT0FBRixDQUFVLEtBQVYsRUFBaUIsWUFBWTtBQUM3QyxXQUFReUcsQ0FBQyxPQUFPLENBQVQsR0FBYyxHQUFkLEdBQW9CLEVBQTNCO0FBQ0QsR0FGaUIsQ0FBRCxDQUFqQjtBQUdEOztBQUVELFNBQVN1dkQsU0FBVCxHQUFxQjtBQUNuQixNQUFJajBCLENBQUosRUFBT3hwQixDQUFQOztBQUNBLE1BQUksQ0FBQ3dwQixDQUFDLEdBQUc2ekIsRUFBRSxDQUFDcDhELEtBQUgsQ0FBUyw4Q0FBVCxDQUFMLE1BQ0QrZSxDQUFDLEdBQUl3cEIsQ0FBQyxDQUFDLENBQUQsQ0FBRCxJQUFRQSxDQUFDLENBQUMsQ0FBRCxDQURiLENBQUosRUFDd0I7QUFDdEIsV0FBTyt6QixHQUFHLENBQUNHLFlBQUosSUFBb0JGLFNBQVMsQ0FBQ3g5QyxDQUFELENBQXBDO0FBQ0Q7QUFDRjs7QUFFRCxTQUFTMjlDLEdBQVQsQ0FBYXZvQyxDQUFiLEVBQWdCckUsQ0FBaEIsRUFBbUI7QUFDakIsT0FBSyxJQUFJcVUsQ0FBVCxJQUFjclUsQ0FBZCxFQUFpQjtBQUNmcUUsSUFBQUEsQ0FBQyxDQUFDZ1EsQ0FBRCxDQUFELEdBQU9yVSxDQUFDLENBQUNxVSxDQUFELENBQVI7QUFDRDtBQUNGOztBQUVELFNBQVN3NEIsSUFBVCxDQUFjQyxHQUFkLEVBQW1CMTdELEVBQW5CLEVBQXVCO0FBQ3JCLE1BQUk2RyxDQUFDLEdBQUcsQ0FBUjtBQUFBLE1BQVc4MEQsQ0FBQyxHQUFHRCxHQUFHLENBQUNwOUQsTUFBbkI7O0FBQ0EsU0FBT3VJLENBQUMsR0FBRzgwRCxDQUFYLEVBQWM5MEQsQ0FBQyxFQUFmLEVBQW1CO0FBQ2pCLFFBQUk3RyxFQUFFLENBQUMwN0QsR0FBRyxDQUFDNzBELENBQUQsQ0FBSixFQUFTQSxDQUFULENBQUYsS0FBa0IsS0FBdEIsRUFBNkI7QUFDM0I7QUFDRDtBQUNGO0FBQ0Y7O0FBQ0QsSUFBSSswRCxFQUFFLEdBQUdOLFNBQVMsRUFBbEI7O0FBRUEsSUFBSU0sRUFBRSxJQUFJQSxFQUFFLEdBQUcsQ0FBZixFQUFrQjtBQUNoQjlCLEVBQUFBLFNBQVMsQ0FBQ252RCxLQUFWLENBQWdCakgsR0FBaEIsR0FBc0IsVUFBVThDLEVBQVYsRUFBY3ZHLEdBQWQsRUFBbUI7QUFDdkN1RyxJQUFBQSxFQUFFLENBQUNtRSxLQUFILENBQVM0dkQsT0FBVCxHQUFtQnQ2RCxHQUFuQjtBQUNELEdBRkQsQ0FEZ0I7OztBQU1oQnU3RCxFQUFBQSxHQUFHLENBQUNsQixZQUFELEVBQWU7QUFDaEIzOUQsSUFBQUEsR0FBRyxFQUFFLFVBQVUwOUQsSUFBVixFQUFnQmg1RCxJQUFoQixFQUFzQjtBQUN6QixVQUFJdzZELEdBQUcsR0FBR3hCLElBQUksQ0FBQ0osZ0JBQUwsQ0FBc0I1NEQsSUFBdEIsQ0FBVixDQUR5Qjs7QUFHekIsYUFBT3c2RCxHQUFHO0FBRVZBLE1BQUFBLEdBQUcsQ0FBQzNCLFNBQUosSUFBaUIyQixHQUFHLENBQUNDLFNBRlgsQ0FBSCxHQUdMRCxHQUFHLENBQUNDLFNBSEMsR0FJTGwrRCxTQUpGO0FBS0Q7QUFUZSxHQUFmLENBQUgsQ0FOZ0I7O0FBbUJoQjQ5RCxFQUFBQSxHQUFHLENBQUM1QixPQUFELEVBQVVDLE9BQVYsQ0FBSCxDQW5CZ0I7O0FBc0JoQkMsRUFBQUEsU0FBUyxDQUFDaUMsUUFBVixHQUFxQmpDLFNBQVMsQ0FBQ0MsUUFBL0IsQ0F0QmdCO0FBeUJoQjs7QUFDQTBCLEVBQUFBLElBQUksQ0FBQyxDQUFDLE1BQUQsRUFBUyxLQUFULEVBQWdCLE9BQWhCLEVBQXlCLFFBQXpCLEVBQW1DLFNBQW5DLEVBQThDLFNBQTlDLENBQUQsRUFBMkQsVUFBVXA2RCxJQUFWLEVBQWdCO0FBQzdFeTRELElBQUFBLFNBQVMsQ0FBQ3o0RCxJQUFELENBQVQsR0FBa0I7QUFDaEIxRSxNQUFBQSxHQUFHLEVBQUUsVUFBVTA5RCxJQUFWLEVBQWdCO0FBQ25CLFlBQUl3QixHQUFHLEdBQUd4QixJQUFJLENBQUMyQixZQUFMLENBQWtCMzZELElBQWxCLEVBQXdCLENBQXhCLENBQVY7QUFDQSxlQUFPdzZELEdBQUcsS0FBSyxJQUFSLEdBQWVqK0QsU0FBZixHQUEyQmkrRCxHQUFsQztBQUNEO0FBSmUsS0FBbEI7QUFNRCxHQVBHLENBQUo7QUFTQS9CLEVBQUFBLFNBQVMsQ0FBQ21DLFdBQVYsR0FBd0I7QUFDdEJ0L0QsSUFBQUEsR0FBRyxFQUFFLFVBQVUwOUQsSUFBVixFQUFnQmg1RCxJQUFoQixFQUFzQjtBQUN6QixhQUFPZzVELElBQUksQ0FBQ2g1RCxJQUFELENBQUosSUFBY2k1RCxZQUFZLENBQUMzOUQsR0FBYixDQUFpQjA5RCxJQUFqQixFQUF1Qmg1RCxJQUF2QixDQUFyQjtBQUNEO0FBSHFCLEdBQXhCO0FBS0Q7O0FBRUQsSUFBSXU2RCxFQUFKLEVBQVE7QUFDTixNQUFJTSxPQUFPLEdBQUdwQyxTQUFTLENBQUN6VyxJQUFWLEdBQWlCeVcsU0FBUyxDQUFDelcsSUFBVixJQUFrQixFQUFqRDs7QUFDQTZZLEVBQUFBLE9BQU8sQ0FBQ3g0RCxHQUFSLEdBQWMsVUFBVThDLEVBQVYsRUFBY3ZHLEdBQWQsRUFBbUJvQixJQUFuQixFQUF5QjtBQUNyQyxRQUFJODZELFVBQVUsR0FBRzMxRCxFQUFFLENBQUMyMUQsVUFBcEI7QUFBQSxRQUNFcndELENBREY7QUFBQSxRQUVFb0ksR0FBRyxHQUFHaW9ELFVBQVUsQ0FBQzc5RCxNQUZuQjtBQUFBLFFBR0U4OUQsT0FBTyxHQUFHbG9ELEdBQUcsR0FBRyxDQUhsQjs7QUFJQSxTQUFLQSxHQUFHLEdBQUdBLEdBQUcsR0FBRyxDQUFqQixFQUFvQkEsR0FBRyxJQUFJLENBQTNCLEVBQThCQSxHQUFHLEVBQWpDLEVBQXFDO0FBQ25DLFVBQUlpb0QsVUFBVSxDQUFDam9ELEdBQUQsQ0FBVixDQUFnQm1vRCxRQUFoQixLQUE2QixDQUFqQyxFQUFvQztBQUNsQ0QsUUFBQUEsT0FBTyxHQUFHLENBQVY7QUFDRDtBQUNGOztBQUNELFFBQUlBLE9BQUosRUFBYTtBQUNYdHdELE1BQUFBLENBQUMsR0FBR3RGLEVBQUUsQ0FBQzgxRCxhQUFILENBQWlCdDZELGFBQWpCLENBQStCLEdBQS9CLENBQUo7QUFDQThKLE1BQUFBLENBQUMsQ0FBQ25CLEtBQUYsQ0FBUUMsT0FBUixHQUFrQixNQUFsQjtBQUNBcEUsTUFBQUEsRUFBRSxDQUFDcUUsV0FBSCxDQUFlaUIsQ0FBZjtBQUNEOztBQUNEdEYsSUFBQUEsRUFBRSxDQUFDKzFELFlBQUgsQ0FBZ0JsN0QsSUFBaEIsRUFBc0IsS0FBS3BCLEdBQTNCOztBQUNBLFFBQUk2TCxDQUFKLEVBQU87QUFDTHRGLE1BQUFBLEVBQUUsQ0FBQzB3QixXQUFILENBQWVwckIsQ0FBZjtBQUNEO0FBQ0YsR0FuQkQ7QUFvQkQ7O0FBRUQsSUFBSTB3RCxPQUFPLEdBQUcsd0JBQWQ7QUFBQSxJQUNFeHJDLElBQUksR0FBRzd4QixNQUFNLENBQUNxRixTQUFQLENBQWlCd3NCLElBRDFCO0FBRUEsSUFBSXlyQyxLQUFLLEdBQUcsR0FBWjtBQUVBLElBQUlDLG9CQUFKOztBQUNBQSxvQkFBb0IsR0FBRyxVQUFVcjdELElBQVYsRUFBZ0JzN0QsT0FBaEIsRUFBeUI7QUFDOUMsU0FBT0EsT0FBTyxDQUFDRCxvQkFBUixDQUE2QnI3RCxJQUE3QixDQUFQO0FBQ0QsQ0FGRDs7QUFJQSxJQUFJKzVELEdBQUcsQ0FBQ3A1RCxhQUFSLEVBQXVCO0FBQ3JCLE1BQUk2dEIsR0FBRyxHQUFHdXJDLEdBQUcsQ0FBQ3A1RCxhQUFKLENBQWtCLEtBQWxCLENBQVY7QUFDQTZ0QixFQUFBQSxHQUFHLENBQUNobEIsV0FBSixDQUFnQi9JLFFBQVEsQ0FBQzg2RCxhQUFULENBQXVCLEVBQXZCLENBQWhCOztBQUNBLE1BQUkvc0MsR0FBRyxDQUFDNnNDLG9CQUFKLENBQXlCLEdBQXpCLEVBQThCcCtELE1BQWxDLEVBQTBDO0FBQ3hDbytELElBQUFBLG9CQUFvQixHQUFHLFVBQVVyN0QsSUFBVixFQUFnQnM3RCxPQUFoQixFQUF5QjtBQUM5QyxVQUFJRSxLQUFLLEdBQUdGLE9BQU8sQ0FBQ0Qsb0JBQVIsQ0FBNkJyN0QsSUFBN0IsQ0FBWjtBQUFBLFVBQ0V5N0QsV0FBVyxHQUFHejdELElBQUksS0FBSyxHQUR6QixDQUQ4Qzs7QUFJOUMsVUFBSXk3RCxXQUFXLElBQUksT0FBT0QsS0FBSyxDQUFDditELE1BQWIsS0FBd0IsUUFBM0MsRUFBcUQ7QUFDbkQsWUFBSXU5RCxHQUFHLEdBQUcsRUFBVjtBQUFBLFlBQ0VoMUQsQ0FBQyxHQUFHLENBRE47QUFBQSxZQUVFTCxFQUZGOztBQUdBLGVBQVFBLEVBQUUsR0FBR3EyRCxLQUFLLENBQUNoMkQsQ0FBQyxFQUFGLENBQWxCLEVBQTBCO0FBQ3hCLGNBQUksQ0FBQ2kyRCxXQUFELElBQWdCdDJELEVBQUUsQ0FBQzYxRCxRQUFILEtBQWdCLENBQXBDLEVBQXVDO0FBQ3JDUixZQUFBQSxHQUFHLENBQUN0N0QsSUFBSixDQUFTaUcsRUFBVDtBQUNEO0FBQ0Y7O0FBQ0QsZUFBT3ExRCxHQUFQO0FBQ0QsT0FWRCxNQVVPO0FBQ0wsZUFBT2dCLEtBQVA7QUFDRDtBQUNGLEtBakJEO0FBa0JEO0FBQ0Y7O0FBRUQsSUFBSUUsZ0JBQWdCLEdBQUksa0JBQWtCM0IsR0FBRyxJQUFJQSxHQUFHLENBQUM0QixlQUFYLElBQThCLEVBQWhELENBQUQsR0FBd0QsVUFBVTk2RCxDQUFWLEVBQWE0SixDQUFiLEVBQWdCO0FBQzdGLFNBQU81SixDQUFDLENBQUNnVixXQUFGLEdBQWdCcEwsQ0FBQyxDQUFDb0wsV0FBekI7QUFDRCxDQUZzQixHQUVuQixVQUFVaFYsQ0FBVixFQUFhNEosQ0FBYixFQUFnQjtBQUNsQixNQUFJLENBQUM1SixDQUFDLENBQUMrNkQsdUJBQUgsSUFBOEIsQ0FBQ254RCxDQUFDLENBQUNteEQsdUJBQXJDLEVBQThEO0FBQzVELFdBQU8vNkQsQ0FBQyxDQUFDKzZELHVCQUFGLEdBQTRCLENBQUMsQ0FBN0IsR0FBaUMsQ0FBeEM7QUFDRDs7QUFDRCxNQUFJQyxHQUFHLEdBQUdoN0QsQ0FBQyxDQUFDKzZELHVCQUFGLENBQTBCbnhELENBQTFCLElBQStCLENBQXpDO0FBQ0EsU0FBT294RCxHQUFHLEdBQUcsQ0FBQyxDQUFKLEdBQVEsQ0FBbEI7QUFDRCxDQVJEO0FBVUEsSUFBSUMsTUFBSSxHQUFHcGhFLGNBQUEsR0FBaUI7QUFDMUI2L0QsRUFBQUEsRUFBRSxFQUFFQSxFQURzQjtBQUcxQndCLEVBQUFBLE1BQU0sRUFBRyxZQUFZO0FBQ25CLFFBQUlDLFlBQUo7QUFBQSxRQUNFQyxnQkFBZ0IsR0FBRyxJQURyQixDQURtQjtBQUtuQjtBQUNBO0FBQ0E7O0FBQ0EsS0FBQyxDQUFELEVBQUksQ0FBSixFQUFPaGdELElBQVAsQ0FBWSxZQUFZO0FBQ3RCZ2dELE1BQUFBLGdCQUFnQixHQUFHLEtBQW5CO0FBQ0EsYUFBTyxDQUFQO0FBQ0QsS0FIRDs7QUFLQSxhQUFTQyxTQUFULENBQW1CcjdELENBQW5CLEVBQXNCNEosQ0FBdEIsRUFBeUI7QUFDdkIsVUFBSTVKLENBQUMsS0FBSzRKLENBQVYsRUFBYTtBQUNYdXhELFFBQUFBLFlBQVksR0FBRyxJQUFmO0FBQ0EsZUFBTyxDQUFQO0FBQ0Q7O0FBRUQsYUFBT04sZ0JBQWdCLENBQUM3NkQsQ0FBRCxFQUFJNEosQ0FBSixDQUF2QjtBQUNELEtBcEJrQjs7O0FBdUJuQixXQUFPLFVBQVUwNEIsUUFBVixFQUFvQjtBQUN6QjY0QixNQUFBQSxZQUFZLEdBQUdDLGdCQUFmO0FBQ0E5NEIsTUFBQUEsUUFBUSxDQUFDbG5CLElBQVQsQ0FBY2lnRCxTQUFkOztBQUVBLFVBQUlGLFlBQUosRUFBa0I7QUFDaEIsWUFBSXgyRCxDQUFDLEdBQUcsQ0FBUjtBQUFBLFlBQVdxTixHQUFHLEdBQUdzd0IsUUFBUSxDQUFDbG1DLE1BQTFCOztBQUNBLGVBQU91SSxDQUFDLEdBQUdxTixHQUFYLEVBQWdCO0FBQ2QsY0FBSXN3QixRQUFRLENBQUMzOUIsQ0FBRCxDQUFSLEtBQWdCMjlCLFFBQVEsQ0FBQzM5QixDQUFDLEdBQUcsQ0FBTCxDQUE1QixFQUFxQztBQUNuQzI5QixZQUFBQSxRQUFRLENBQUNobUIsTUFBVCxDQUFnQjNYLENBQWhCLEVBQW1CLENBQW5CO0FBQ0EsY0FBRXFOLEdBQUY7QUFDRCxXQUhELE1BR087QUFDTHJOLFlBQUFBLENBQUM7QUFDRjtBQUNGO0FBQ0Y7O0FBQ0QsYUFBTzI5QixRQUFQO0FBQ0QsS0FoQkQ7QUFpQkQsR0F4Q08sRUFIa0I7QUE2QzFCazRCLEVBQUFBLG9CQUFvQixFQUFFQSxvQkE3Q0k7QUErQzFCYyxFQUFBQSxhQUFhLEVBQUUsVUFBVWgzRCxFQUFWLEVBQWNuRixJQUFkLEVBQW9CO0FBQ2pDLFFBQUl3NkQsR0FBRyxHQUFHcjFELEVBQUUsSUFBSUEsRUFBRSxDQUFDeXpELGdCQUFILENBQW9CNTRELElBQXBCLENBQWhCOztBQUNBLFFBQUl3NkQsR0FBRyxJQUFJQSxHQUFHLENBQUMzQixTQUFmLEVBQTBCO0FBQ3hCLGFBQU8sV0FBVzJCLEdBQVgsR0FBaUJBLEdBQUcsQ0FBQ3grRCxLQUFyQixHQUE2QncrRCxHQUFHLENBQUNDLFNBQXhDO0FBQ0Q7O0FBQ0QsV0FBT2wrRCxTQUFQO0FBQ0QsR0FyRHlCO0FBdUQxQjYvRCxFQUFBQSxRQUFRLEVBQUU3QixFQUFFLEdBQUcsVUFBVTE1RCxDQUFWLEVBQWE0SixDQUFiLEVBQWdCO0FBQzdCLFFBQUk1SixDQUFDLENBQUNtNkQsUUFBRixLQUFlLENBQW5CLEVBQXNCO0FBQ3BCbjZELE1BQUFBLENBQUMsR0FBR0EsQ0FBQyxDQUFDODZELGVBQU47QUFDRCxLQUg0QjtBQUs3Qjs7O0FBQ0FseEQsSUFBQUEsQ0FBQyxHQUFHQSxDQUFDLENBQUM0eEQsVUFBTjs7QUFFQSxRQUFJeDdELENBQUMsS0FBSzRKLENBQVYsRUFBYTtBQUNYLGFBQU8sSUFBUDtBQUNELEtBVjRCOzs7QUFhN0IsUUFBSUEsQ0FBQyxJQUFJQSxDQUFDLENBQUN1d0QsUUFBRixLQUFlLENBQXhCLEVBQTJCO0FBQ3pCLGFBQU9uNkQsQ0FBQyxDQUFDdTdELFFBQUYsSUFBY3Y3RCxDQUFDLENBQUN1N0QsUUFBRixDQUFXM3hELENBQVgsQ0FBckI7QUFDRCxLQUZELE1BRU87QUFDTCxhQUFPLEtBQVA7QUFDRDtBQUNGLEdBbEJXLEdBa0JSLFVBQVU1SixDQUFWLEVBQWE0SixDQUFiLEVBQWdCO0FBQ2xCLFdBQU8sQ0FBQyxFQUFFNUosQ0FBQyxDQUFDKzZELHVCQUFGLENBQTBCbnhELENBQTFCLElBQStCLEVBQWpDLENBQVI7QUFDRCxHQTNFeUI7QUE2RTFCNnhELEVBQUFBLEtBQUssRUFBRSxVQUFVbjNELEVBQVYsRUFBY25KLEtBQWQsRUFBcUI7QUFDMUIsV0FBT0EsS0FBSyxLQUFLLEdBQVYsSUFBaUJtSixFQUFFLENBQUMyekQsUUFBSCxDQUFZbnlELFdBQVosT0FBOEIzSyxLQUFLLENBQUMySyxXQUFOLEVBQXREO0FBQ0QsR0EvRXlCO0FBaUYxQjQxRCxFQUFBQSxjQUFjLEVBQUUsVUFBVXAzRCxFQUFWLEVBQWNxM0QsR0FBZCxFQUFtQjtBQUNqQztBQUNBO0FBQ0EsUUFBSUMsU0FBUyxHQUFHdDNELEVBQUUsSUFBSTIyRCxNQUFJLENBQUNLLGFBQUwsQ0FBbUJoM0QsRUFBbkIsRUFBdUIsT0FBdkIsQ0FBdEI7QUFDQSxXQUFPczNELFNBQVMsS0FBS0EsU0FBUyxHQUFHQSxTQUFTLENBQUN4NEQsT0FBVixDQUFrQixXQUFsQixFQUErQm0zRCxLQUEvQixDQUFqQixDQUFULElBQ0wsQ0FBQ0EsS0FBSyxHQUFHcUIsU0FBUixHQUFvQnJCLEtBQXJCLEVBQTRCOTFELE9BQTVCLENBQW9DODFELEtBQUssR0FBR29CLEdBQVIsR0FBY3BCLEtBQWxELElBQTJELENBQUMsQ0FEOUQ7QUFFRCxHQXZGeUI7QUF5RjFCcnlCLEVBQUFBLFVBQVUsRUFBRSxVQUFVbmpCLEdBQVYsRUFBZTgyQyxNQUFmLEVBQXVCO0FBQ2pDLFdBQU85MkMsR0FBRyxDQUFDbk0sV0FBSixDQUFnQmlqRCxNQUFoQixFQUF3QixDQUF4QixNQUErQixDQUF0QztBQUNELEdBM0Z5QjtBQTZGMUJoNkIsRUFBQUEsUUFBUSxFQUFFLFVBQVU5YyxHQUFWLEVBQWUrMkMsTUFBZixFQUF1QjtBQUMvQixRQUFJQyxHQUFHLEdBQUdoM0MsR0FBRyxDQUFDM29CLE1BQUosR0FBYTAvRCxNQUFNLENBQUMxL0QsTUFBOUI7QUFDQSxXQUFPMi9ELEdBQUcsSUFBSSxDQUFQLElBQVloM0MsR0FBRyxDQUFDdGdCLE9BQUosQ0FBWXEzRCxNQUFaLEVBQW9CQyxHQUFwQixNQUE2QkEsR0FBaEQ7QUFDRCxHQWhHeUI7QUFrRzFCanRDLEVBQUFBLElBQUksRUFBRUEsSUFBSSxHQUNSLFVBQVUvSixHQUFWLEVBQWU7QUFDYixXQUFPQSxHQUFHLElBQUksSUFBUCxHQUFjLEVBQWQsR0FBbUIrSixJQUFJLENBQUNoMEIsSUFBTCxDQUFVaXFCLEdBQVYsQ0FBMUI7QUFDRCxHQUhPLEdBSVIsVUFBVUEsR0FBVixFQUFlO0FBQ2IsV0FBT0EsR0FBRyxJQUFJLElBQVAsR0FBYyxFQUFkLEdBQW1CLENBQUNBLEdBQUcsR0FBRyxFQUFQLEVBQVczaEIsT0FBWCxDQUFtQmszRCxPQUFuQixFQUE0QixFQUE1QixDQUExQjtBQUNELEdBeEd1QjtBQTBHMUIwQixFQUFBQSxJQUFJLEVBQUUsVUFBVTEzRCxFQUFWLEVBQWNuRixJQUFkLEVBQW9CO0FBQ3hCLFFBQUk4OEQsY0FBSixFQUFvQnRDLEdBQXBCLENBRHdCOztBQUd4Qng2RCxJQUFBQSxJQUFJLEdBQUdBLElBQUksQ0FBQzJHLFdBQUwsRUFBUCxDQUh3Qjs7QUFLeEIzRyxJQUFBQSxJQUFJLEdBQUd1NEQsT0FBTyxDQUFDdjRELElBQUQsQ0FBUCxJQUFpQkEsSUFBeEI7O0FBQ0EsUUFBSW00RCxTQUFTLENBQUNyMkQsSUFBVixDQUFlOUIsSUFBZixDQUFKLEVBQTBCO0FBQ3hCODhELE1BQUFBLGNBQWMsR0FBRy9ELFFBQWpCO0FBQ0QsS0FGRCxNQUVPLElBQUlULGNBQWMsQ0FBQ3gyRCxJQUFmLENBQW9COUIsSUFBcEIsQ0FBSixFQUErQjtBQUNwQztBQUNBODhELE1BQUFBLGNBQWMsR0FBRzdELFlBQWpCO0FBQ0QsS0FITSxNQUdBO0FBQ0w2RCxNQUFBQSxjQUFjLEdBQUdyRSxTQUFTLENBQUN6NEQsSUFBRCxDQUExQjtBQUNEOztBQUNELFFBQUltRixFQUFFLElBQUlBLEVBQUUsQ0FBQzYxRCxRQUFILEtBQWdCLENBQTFCLEVBQTZCO0FBQzNCO0FBQ0EsVUFBSTcxRCxFQUFFLENBQUMyekQsUUFBSCxDQUFZbnlELFdBQVosT0FBOEIsTUFBbEMsRUFBMEM7QUFDeENtMkQsUUFBQUEsY0FBYyxHQUFHN0QsWUFBakI7QUFDRDs7QUFDRCxVQUFJNkQsY0FBYyxJQUFJQSxjQUFjLENBQUN4aEUsR0FBckMsRUFBMEM7QUFDeEMsZUFBT3doRSxjQUFjLENBQUN4aEUsR0FBZixDQUFtQjZKLEVBQW5CLEVBQXVCbkYsSUFBdkIsQ0FBUDtBQUNEOztBQUNEdzZELE1BQUFBLEdBQUcsR0FBR3IxRCxFQUFFLENBQUN3MUQsWUFBSCxDQUFnQjM2RCxJQUFoQixDQUFOOztBQUNBLFVBQUl3NkQsR0FBRyxLQUFLLEVBQVosRUFBZ0I7QUFDZCxZQUFJdUMsUUFBUSxHQUFHNTNELEVBQUUsQ0FBQ3l6RCxnQkFBSCxDQUFvQjU0RCxJQUFwQixDQUFmOztBQUNBLFlBQUksQ0FBQys4RCxRQUFELElBQWEsQ0FBQ0EsUUFBUSxDQUFDbEUsU0FBM0IsRUFBc0M7QUFDcEMsaUJBQU90OEQsU0FBUDtBQUNEO0FBQ0YsT0FkMEI7QUFnQjNCO0FBQ0E7OztBQUNBLGFBQU9pK0QsR0FBRyxLQUFLLElBQVIsR0FBZWorRCxTQUFmLEdBQTJCaStELEdBQWxDO0FBQ0Q7QUFDRjtBQTVJeUIsQ0FBNUI7Ozs7Ozs7O0FDMU1BLElBQUl3QyxNQUFNLEdBQUksVUFBVXpnRSxXQUFWLEVBQXFCO0FBQy9COztBQUNBO0FBQ0EsTUFBSXlnRSxNQUFNLEdBQUcsRUFBYjtBQUFBLE1BQ0lDLFlBQVksR0FBRztBQUNYLGtCQUFjLENBREg7QUFFWCxtQkFBZSxDQUZKO0FBR1gsbUJBQWUsQ0FISjtBQUlYLGtCQUFjLENBSkg7QUFLWCx3QkFBb0IsQ0FMVDtBQU1YLGdCQUFZO0FBTkQsR0FEbkI7QUFTQTs7QUFDQSxXQUFTOUMsR0FBVCxDQUFhL2xELEVBQWIsRUFBaUJDLElBQWpCLEVBQXVCO0FBQ25CLFNBQUssSUFBSWhULENBQVQsSUFBY2dULElBQWQsRUFBb0I7QUFDaEJELE1BQUFBLEVBQUUsQ0FBQy9TLENBQUQsQ0FBRixHQUFRZ1QsSUFBSSxDQUFDaFQsQ0FBRCxDQUFaO0FBQ0g7QUFDSjs7QUFFRCxXQUFTa0csT0FBVCxDQUFpQjFDLEdBQWpCLEVBQXNCO0FBQ2xCLFdBQU8scUJBQXFCekosTUFBTSxDQUFDK0gsU0FBUCxDQUFpQmhILFFBQWpCLENBQTBCUixJQUExQixDQUErQmtKLEdBQS9CLENBQTVCO0FBQ0g7O0FBRUQsV0FBU3UxRCxJQUFULENBQWMxNEQsTUFBZCxFQUFzQi9DLEVBQXRCLEVBQTBCMjhELE9BQTFCLEVBQW1DO0FBQy9CLFFBQUk1NUQsTUFBSixFQUFZO0FBQ1IsVUFBSTVDLEdBQUo7QUFBQSxVQUNJRixHQURKO0FBQUEsVUFFSTNCLE1BRko7QUFBQSxVQUdJdUksQ0FBQyxHQUFHLENBSFI7QUFLQTgxRCxNQUFBQSxPQUFPLEdBQUdBLE9BQU8sSUFBSSxJQUFyQjs7QUFFQSxVQUFJLENBQUMvekQsT0FBTyxDQUFDN0YsTUFBRCxDQUFaLEVBQXNCO0FBQ2xCLGFBQUs1QyxHQUFMLElBQVk0QyxNQUFaLEVBQW9CO0FBQ2hCO0FBQ0EsY0FBSS9DLEVBQUUsQ0FBQ2hELElBQUgsQ0FBUTIvRCxPQUFSLEVBQWlCNTVELE1BQU0sQ0FBQzVDLEdBQUQsQ0FBdkIsRUFBOEJBLEdBQTlCLEVBQW1DNEMsTUFBbkMsTUFBK0MsS0FBbkQsRUFBMEQ7QUFDdEQ7QUFDSDtBQUNKO0FBQ0osT0FQRCxNQU9PO0FBQ0h6RSxRQUFBQSxNQUFNLEdBQUd5RSxNQUFNLENBQUN6RSxNQUFoQjs7QUFDQSxhQUFLMkIsR0FBRyxHQUFHOEMsTUFBTSxDQUFDLENBQUQsQ0FBakIsRUFBc0I4RCxDQUFDLEdBQUd2SSxNQUExQixFQUFrQzJCLEdBQUcsR0FBRzhDLE1BQU0sQ0FBQyxFQUFFOEQsQ0FBSCxDQUE5QyxFQUFxRDtBQUNqRCxjQUFJN0csRUFBRSxDQUFDaEQsSUFBSCxDQUFRMi9ELE9BQVIsRUFBaUIxOEQsR0FBakIsRUFBc0I0RyxDQUF0QixFQUF5QjlELE1BQXpCLE1BQXFDLEtBQXpDLEVBQWdEO0FBQzVDO0FBQ0g7QUFDSjtBQUNKO0FBQ0o7QUFDSjs7QUFFRCxXQUFTdzdELE9BQVQsQ0FBaUJqckIsSUFBakIsRUFBdUJvb0IsR0FBdkIsRUFBNEI7QUFDeEIsU0FBSyxJQUFJNzBELENBQUMsR0FBRyxDQUFSLEVBQVc4MEQsQ0FBQyxHQUFHRCxHQUFHLENBQUNwOUQsTUFBeEIsRUFBZ0N1SSxDQUFDLEdBQUc4MEQsQ0FBcEMsRUFBdUM5MEQsQ0FBQyxFQUF4QyxFQUE0QztBQUN4QyxVQUFJNjBELEdBQUcsQ0FBQzcwRCxDQUFELENBQUgsS0FBV3lzQyxJQUFmLEVBQXFCO0FBQ2pCLGVBQU8sSUFBUDtBQUNIO0FBQ0o7O0FBQ0QsV0FBTyxLQUFQO0FBQ0g7O0FBQ0QsTUFBSWtyQixLQUFLLEdBQUcsU0FBU0EsS0FBVCxDQUFlQyxHQUFmLEVBQW9CO0FBRTVCLFFBQUl2aUUsSUFBSSxHQUFHLElBQVg7QUFFQTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNRQSxJQUFBQSxJQUFJLENBQUN3aUUsS0FBTCxHQUFhLEVBQWI7QUFFQWxELElBQUFBLEdBQUcsQ0FBQ3QvRCxJQUFELEVBQU91aUUsR0FBUCxDQUFIO0FBRUE7QUFDUjtBQUNBO0FBQ0E7O0FBRVF2aUUsSUFBQUEsSUFBSSxDQUFDeWlFLFVBQUwsQ0FBZ0J6aUUsSUFBSSxDQUFDNEQsS0FBckI7QUFDSCxHQTVCRDs7QUE2QkEwK0QsRUFBQUEsS0FBSyxDQUFDaDZELFNBQU4sR0FBa0I7QUFDZCxrQkFBYyxVQUFVMUUsS0FBVixFQUFpQjtBQUMzQjA3RCxNQUFBQSxHQUFHLENBQUMsSUFBRCxFQUFPO0FBQ04xN0QsUUFBQUEsS0FBSyxFQUFFQSxLQUREO0FBRU5tbkMsUUFBQUEsT0FBTyxFQUFFLEVBRkg7QUFHTjIzQixRQUFBQSxVQUFVLEVBQUUsQ0FBQ0osS0FBSyxDQUFDbjJELE1BQU4sQ0FBYXcyRCxPQUFkLENBSE47QUFJTi8vRCxRQUFBQSxLQUFLLEVBQUUsRUFKRDtBQUtOczFELFFBQUFBLElBQUksRUFBRSxFQUxBO0FBTU4wSyxRQUFBQSxTQUFTLEVBQUUsQ0FOTDtBQU9OQyxRQUFBQSxVQUFVLEVBQUUsQ0FQTjtBQVFOQyxRQUFBQSxRQUFRLEVBQUUsQ0FSSjtBQVNOQyxRQUFBQSxXQUFXLEVBQUUsQ0FUUDtBQVVOQyxRQUFBQSxVQUFVLEVBQUU7QUFWTixPQUFQLENBQUg7QUFZSCxLQWRhO0FBZWQsdUJBQW1CLFlBQVk7QUFDM0IsVUFBSWhqRSxJQUFJLEdBQUcsSUFBWDtBQUFBLFVBQ0lpakUsWUFBWSxHQUFHampFLElBQUksQ0FBQzBpRSxVQUFMLENBQWdCMWlFLElBQUksQ0FBQzBpRSxVQUFMLENBQWdCdGdFLE1BQWhCLEdBQXlCLENBQXpDLENBRG5CO0FBQUEsVUFFSW9nRSxLQUFLLEdBQUcsRUFGWixDQUQyQjs7QUFLM0IsVUFBSXhpRSxJQUFJLENBQUNrakUsUUFBVCxFQUFtQjtBQUNmRCxRQUFBQSxZQUFZLEdBQUdqakUsSUFBSSxDQUFDa2pFLFFBQUwsQ0FBY0QsWUFBZCxDQUFmO0FBQ0g7O0FBQ0QxRCxNQUFBQSxJQUFJLENBQUN2L0QsSUFBSSxDQUFDd2lFLEtBQU4sRUFBYSxVQUFVOWhDLENBQVYsRUFBYTtBQUMxQixZQUFJNzRCLEtBQUssR0FBRzY0QixDQUFDLENBQUM3NEIsS0FBRixJQUFXNjRCLENBQUMsQ0FBQyxDQUFELENBQXhCOztBQUNBLFlBQUksQ0FBQzc0QixLQUFMLEVBQVk7QUFDUixjQUFJbzdELFlBQVksS0FBS1gsS0FBSyxDQUFDbjJELE1BQU4sQ0FBYXcyRCxPQUFsQyxFQUEyQztBQUN2Q0gsWUFBQUEsS0FBSyxDQUFDbitELElBQU4sQ0FBV3E4QixDQUFYO0FBQ0g7QUFDSixTQUpELE1BSU8sSUFBSTJoQyxPQUFPLENBQUNZLFlBQUQsRUFBZXA3RCxLQUFmLENBQVgsRUFBa0M7QUFDckMyNkQsVUFBQUEsS0FBSyxDQUFDbitELElBQU4sQ0FBV3E4QixDQUFYO0FBQ0g7QUFDSixPQVRHLENBQUo7QUFVQSxhQUFPOGhDLEtBQVA7QUFDSCxLQWxDYTtBQW1DZCxpQkFBYSxVQUFVMzZELEtBQVYsRUFBaUI7QUFDMUIsV0FBSzY2RCxVQUFMLENBQWdCcitELElBQWhCLENBQXFCd0QsS0FBckI7QUFDSCxLQXJDYTtBQXNDZCxnQkFBWSxVQUFVczdELEdBQVYsRUFBZTtBQUN2QkEsTUFBQUEsR0FBRyxHQUFHQSxHQUFHLElBQUksQ0FBYjtBQUNBLFVBQUl4RCxHQUFKOztBQUNBLGFBQU93RCxHQUFHLEVBQVYsRUFBYztBQUNWeEQsUUFBQUEsR0FBRyxHQUFHLEtBQUsrQyxVQUFMLENBQWdCclUsR0FBaEIsRUFBTjtBQUNIOztBQUNELGFBQU9zUixHQUFQO0FBQ0gsS0E3Q2E7QUE4Q2QscUJBQWlCLFlBQVk7QUFDekIsVUFBSTMvRCxJQUFJLEdBQUcsSUFBWDtBQUFBLFVBQ0lvakUsbUJBQW1CLEdBQUdkLEtBQUssQ0FBQ24yRCxNQUFOLENBQWFpM0QsbUJBRHZDO0FBQUEsVUFFSXI0QixPQUFPLEdBQUcvcUMsSUFBSSxDQUFDK3FDLE9BRm5CO0FBQUEsVUFHSW5vQyxLQUFLLEdBQUc1QyxJQUFJLENBQUM0QyxLQUhqQjtBQUFBLFVBSUlnQixLQUFLLEdBQUc1RCxJQUFJLENBQUM0RCxLQUpqQjtBQUtBbW5DLE1BQUFBLE9BQU8sR0FBR0EsT0FBTyxDQUFDeHBDLEtBQVIsQ0FBYyxDQUFkLEVBQWlCd3BDLE9BQU8sQ0FBQzNvQyxNQUFSLEdBQWlCUSxLQUFLLENBQUNSLE1BQXhDLENBQVYsQ0FOeUI7O0FBUXpCLFVBQUlpaEUsSUFBSSxHQUFHLENBQUN0NEIsT0FBTyxDQUFDM29DLE1BQVIsR0FBaUJnaEUsbUJBQWpCLEdBQXVDLEtBQXZDLEdBQStDLEVBQWhELElBQ1ByNEIsT0FBTyxDQUFDeHBDLEtBQVIsQ0FBYyxJQUFJNmhFLG1CQUFsQixFQUF1Q2g2RCxPQUF2QyxDQUErQyxJQUEvQyxFQUFxRCxHQUFyRCxDQURKO0FBQUEsVUFFSTJOLElBQUksR0FBR25VLEtBQUssR0FBR2dCLEtBRm5CLENBUnlCOztBQVl6Qm1ULE1BQUFBLElBQUksR0FBR0EsSUFBSSxDQUFDeFYsS0FBTCxDQUFXLENBQVgsRUFBYzZoRSxtQkFBZCxLQUNGcnNELElBQUksQ0FBQzNVLE1BQUwsR0FBY2doRSxtQkFBZCxHQUFvQyxLQUFwQyxHQUE0QyxFQUQxQyxDQUFQO0FBRUEsYUFBT0MsSUFBSSxHQUFHdHNELElBQVAsR0FBYyxJQUFkLEdBQXFCLElBQUl0SyxLQUFKLENBQVU0MkQsSUFBSSxDQUFDamhFLE1BQUwsR0FBYyxDQUF4QixFQUEyQmtILElBQTNCLENBQWdDLEdBQWhDLENBQXJCLEdBQTRELEdBQW5FO0FBQ0gsS0E3RGE7QUE4RGQsaUJBQWEsU0FBU2c2RCxtQkFBVCxDQUE2QjV3QyxDQUE3QixFQUFnQztBQUN6QyxhQUFPLEtBQUs2d0MsU0FBTCxDQUFlN3dDLENBQWYsQ0FBUDtBQUNILEtBaEVhO0FBaUVkLHdCQUFvQixVQUFVOHdDLEVBQVYsRUFBYztBQUM5QixVQUFJeGpFLElBQUksR0FBRyxJQUFYO0FBQUEsVUFDSXVqRSxTQUFTLEdBQUd2akUsSUFBSSxDQUFDdWpFLFNBRHJCO0FBQUEsVUFFSTU0RCxDQUZKO0FBQUEsVUFHSTg0RCxnQkFBZ0IsR0FBR3pqRSxJQUFJLENBQUN5akUsZ0JBSDVCOztBQUlBLFVBQUksQ0FBQ0EsZ0JBQUQsSUFBcUJGLFNBQXpCLEVBQW9DO0FBQ2hDRSxRQUFBQSxnQkFBZ0IsR0FBR3pqRSxJQUFJLENBQUN5akUsZ0JBQUwsR0FBd0IsRUFBM0M7O0FBQ0EsYUFBSzk0RCxDQUFMLElBQVU0NEQsU0FBVixFQUFxQjtBQUNqQkUsVUFBQUEsZ0JBQWdCLENBQUNGLFNBQVMsQ0FBQzU0RCxDQUFELENBQVYsQ0FBaEIsR0FBaUNBLENBQWpDO0FBQ0g7QUFDSixPQVY2Qjs7O0FBWTlCLFVBQUk4NEQsZ0JBQUosRUFBc0I7QUFDbEIsZUFBT0EsZ0JBQWdCLENBQUNELEVBQUQsQ0FBdkI7QUFDSCxPQUZELE1BRU87QUFDSCxlQUFPQSxFQUFQO0FBQ0g7QUFDSixLQWxGYTtBQW1GZCxXQUFPLFlBQVk7QUFDZixVQUFJeGpFLElBQUksR0FBRyxJQUFYO0FBQUEsVUFDSTRELEtBQUssR0FBRzVELElBQUksQ0FBQzRELEtBRGpCO0FBQUEsVUFFSStHLENBRko7QUFBQSxVQUdJKzRELElBSEo7QUFBQSxVQUlJdjRCLENBSko7QUFBQSxVQUtJdzBCLEdBTEo7QUFBQSxVQU1JZ0UsS0FOSjtBQUFBLFVBT0luQixLQUFLLEdBQUd4aUUsSUFBSSxDQUFDNGpFLGVBQUwsRUFQWjtBQVNBNWpFLE1BQUFBLElBQUksQ0FBQzRDLEtBQUwsR0FBYTVDLElBQUksQ0FBQ2s0RCxJQUFMLEdBQVksRUFBekI7O0FBRUEsVUFBSSxDQUFDdDBELEtBQUwsRUFBWTtBQUNSLGVBQU81RCxJQUFJLENBQUM2akUsU0FBTCxDQUFldkIsS0FBSyxDQUFDbjJELE1BQU4sQ0FBYTIzRCxPQUE1QixDQUFQO0FBQ0g7O0FBRUQsV0FBS241RCxDQUFDLEdBQUcsQ0FBVCxFQUFZQSxDQUFDLEdBQUc2M0QsS0FBSyxDQUFDcGdFLE1BQXRCLEVBQThCdUksQ0FBQyxFQUEvQixFQUFtQztBQUMvQis0RCxRQUFBQSxJQUFJLEdBQUdsQixLQUFLLENBQUM3M0QsQ0FBRCxDQUFaLENBRCtCOztBQUcvQixZQUFJc0ssTUFBTSxHQUFHeXVELElBQUksQ0FBQ3p1RCxNQUFMLElBQWV5dUQsSUFBSSxDQUFDLENBQUQsQ0FBaEM7QUFBQSxZQUNJSyxLQUFLLEdBQUdMLElBQUksQ0FBQ0ssS0FBTCxJQUFjTCxJQUFJLENBQUMsQ0FBRCxDQUQ5QjtBQUFBLFlBRUlNLE1BQU0sR0FBR04sSUFBSSxDQUFDTSxNQUFMLElBQWVOLElBQUksQ0FBQyxDQUFELENBQW5CLElBQTBCaGlFLFdBRnZDLENBSCtCOztBQU8vQixZQUFLeXBDLENBQUMsR0FBR3ZuQyxLQUFLLENBQUNoQixLQUFOLENBQVlxUyxNQUFaLENBQVQsRUFBK0I7QUFDM0IwdUQsVUFBQUEsS0FBSyxHQUFHeDRCLENBQUMsQ0FBQyxDQUFELENBQUQsQ0FBS3ZvQyxLQUFMLENBQVcsT0FBWCxDQUFSOztBQUNBLGNBQUkrZ0UsS0FBSixFQUFXO0FBQ1AzakUsWUFBQUEsSUFBSSxDQUFDNmlFLFVBQUwsSUFBbUJjLEtBQUssQ0FBQ3ZoRSxNQUF6QjtBQUNIOztBQUNEazlELFVBQUFBLEdBQUcsQ0FBQ3QvRCxJQUFELEVBQU87QUFDTjRpRSxZQUFBQSxTQUFTLEVBQUU1aUUsSUFBSSxDQUFDOGlFLFFBRFY7QUFFTkEsWUFBQUEsUUFBUSxFQUFFOWlFLElBQUksQ0FBQzZpRSxVQUFMLEdBQWtCLENBRnRCO0FBR05FLFlBQUFBLFdBQVcsRUFBRS9pRSxJQUFJLENBQUNnakUsVUFIWjtBQUlOQSxZQUFBQSxVQUFVLEVBQUVXLEtBQUssR0FDYkEsS0FBSyxDQUFDQSxLQUFLLENBQUN2aEUsTUFBTixHQUFlLENBQWhCLENBQUwsQ0FBd0JBLE1BQXhCLEdBQWlDLENBRHBCLEdBQ3dCcEMsSUFBSSxDQUFDZ2pFLFVBQUwsR0FBa0I3M0IsQ0FBQyxDQUFDLENBQUQsQ0FBRCxDQUFLL29DO0FBTDFELFdBQVAsQ0FBSDtBQU9BLGNBQUlRLEtBQUosQ0FaMkI7O0FBYzNCQSxVQUFBQSxLQUFLLEdBQUc1QyxJQUFJLENBQUM0QyxLQUFMLEdBQWF1b0MsQ0FBQyxDQUFDLENBQUQsQ0FBdEIsQ0FkMkI7O0FBaUIzQm5yQyxVQUFBQSxJQUFJLENBQUNpa0UsT0FBTCxHQUFlOTRCLENBQWYsQ0FqQjJCOztBQW1CM0JuckMsVUFBQUEsSUFBSSxDQUFDazRELElBQUwsR0FBWXQxRCxLQUFaLENBbkIyQjs7QUFxQjNCNUMsVUFBQUEsSUFBSSxDQUFDK3FDLE9BQUwsSUFBZ0Jub0MsS0FBaEI7QUFDQSs4RCxVQUFBQSxHQUFHLEdBQUdxRSxNQUFNLElBQUlBLE1BQU0sQ0FBQ2xqRSxJQUFQLENBQVlkLElBQVosQ0FBaEI7O0FBQ0EsY0FBSTIvRCxHQUFHLEtBQUtqK0QsV0FBWixFQUF1QjtBQUNuQmkrRCxZQUFBQSxHQUFHLEdBQUdvRSxLQUFOO0FBQ0gsV0FGRCxNQUVPO0FBQ0hwRSxZQUFBQSxHQUFHLEdBQUczL0QsSUFBSSxDQUFDNmpFLFNBQUwsQ0FBZWxFLEdBQWYsQ0FBTjtBQUNIOztBQUNELzdELFVBQUFBLEtBQUssR0FBR0EsS0FBSyxDQUFDckMsS0FBTixDQUFZcUIsS0FBSyxDQUFDUixNQUFsQixDQUFSO0FBQ0FwQyxVQUFBQSxJQUFJLENBQUM0RCxLQUFMLEdBQWFBLEtBQWI7O0FBRUEsY0FBSSs3RCxHQUFKLEVBQVM7QUFDTCxtQkFBT0EsR0FBUDtBQUNILFdBRkQsTUFFTztBQUNIO0FBQ0EsbUJBQU8zL0QsSUFBSSxDQUFDa2tFLEdBQUwsRUFBUDtBQUNIO0FBQ0o7QUFDSjtBQUNKO0FBakphLEdBQWxCO0FBbUpBNUIsRUFBQUEsS0FBSyxDQUFDbjJELE1BQU4sR0FBZTtBQUNYLGVBQVcsR0FEQTtBQUVYLDJCQUF1QixFQUZaO0FBR1gsZUFBVztBQUhBLEdBQWY7QUFLQSxNQUFJZzRELEtBQUssR0FBRyxJQUFJN0IsS0FBSixDQUFVO0FBQ2xCLGFBQVMsQ0FDTCxDQUFDLEdBQUQsRUFBTSx3QkFBTixFQUNJLFlBQVk7QUFDUixXQUFLcEssSUFBTCxHQUFZLEtBQUtrTSxFQUFMLENBQVF0dkMsSUFBUixDQUFhLEtBQUtvakMsSUFBbEIsQ0FBWjtBQUNILEtBSEwsQ0FESyxFQU1MLENBQUMsR0FBRCxFQUFNLHdCQUFOLEVBQ0ksWUFBWTtBQUNSLFdBQUtBLElBQUwsR0FBWSxLQUFLa00sRUFBTCxDQUFRdHZDLElBQVIsQ0FBYSxLQUFLb2pDLElBQWxCLENBQVo7QUFDSCxLQUhMLENBTkssRUFXTCxDQUFDLEdBQUQsRUFBTSwyQ0FBTixFQUNJLFlBQVk7QUFDUixXQUFLQSxJQUFMLEdBQVksS0FBS2tNLEVBQUwsQ0FBUXR2QyxJQUFSLENBQWEsS0FBS29qQyxJQUFsQixDQUFaO0FBQ0gsS0FITCxDQVhLLEVBZ0JMLENBQUMsR0FBRCxFQUFNLDRDQUFOLEVBQ0ksWUFBWTtBQUNSLFdBQUtBLElBQUwsR0FBWSxLQUFLa00sRUFBTCxDQUFRdHZDLElBQVIsQ0FBYSxLQUFLb2pDLElBQWxCLENBQVo7QUFDSCxLQUhMLENBaEJLLEVBcUJMLENBQUMsR0FBRCxFQUFNLDRDQUFOLEVBQ0ksWUFBWTtBQUNSLFdBQUtBLElBQUwsR0FBWSxLQUFLa00sRUFBTCxDQUFRdHZDLElBQVIsQ0FBYSxLQUFLb2pDLElBQWxCLENBQVo7QUFDSCxLQUhMLENBckJLLEVBMEJMLENBQUMsR0FBRCxFQUFNLDRDQUFOLEVBQ0ksWUFBWTtBQUNSLFdBQUtBLElBQUwsR0FBWSxLQUFLa00sRUFBTCxDQUFRdHZDLElBQVIsQ0FBYSxLQUFLb2pDLElBQWxCLENBQVo7QUFDSCxLQUhMLENBMUJLLEVBK0JMLENBQUMsR0FBRCxFQUFNLDRDQUFOLEVBQ0ksWUFBWTtBQUNSLFdBQUtBLElBQUwsR0FBWSxLQUFLa00sRUFBTCxDQUFRdHZDLElBQVIsQ0FBYSxLQUFLb2pDLElBQWxCLENBQVo7QUFDSCxLQUhMLENBL0JLLEVBb0NMLENBQUMsR0FBRCxFQUFNLDJDQUFOLEVBQ0ksWUFBWTtBQUNSLFdBQUtBLElBQUwsR0FBWSxLQUFLa00sRUFBTCxDQUFRdHZDLElBQVIsQ0FBYSxLQUFLb2pDLElBQWxCLENBQVo7QUFDSCxLQUhMLENBcENLLEVBeUNMLENBQUMsR0FBRCxFQUFNLG1HQUFOLEVBQ0ksWUFBWTtBQUNSLFdBQUtBLElBQUwsR0FBWSxLQUFLa00sRUFBTCxDQUFRdHZDLElBQVIsQ0FBYSxLQUFLb2pDLElBQWxCLEVBQXdCMzJELEtBQXhCLENBQThCLENBQTlCLEVBQWlDLENBQUMsQ0FBbEMsQ0FBWjtBQUNBLFdBQUs4aUUsU0FBTCxDQUFlLElBQWY7QUFDSCxLQUpMLENBekNLLEVBK0NMLENBQUMsR0FBRCxFQUFNLFNBQU4sRUFDSSxZQUFZO0FBQ1IsV0FBS0MsUUFBTDtBQUNILEtBSEwsRUFJSSxDQUFDLElBQUQsQ0FKSixDQS9DSyxFQXFETCxDQUFDLEdBQUQsRUFBTSx3QkFBTixFQUNJLFlBQVk7QUFDUixXQUFLcE0sSUFBTCxHQUFZLEtBQUtrTSxFQUFMLENBQVF0dkMsSUFBUixDQUFhLEtBQUtvakMsSUFBbEIsQ0FBWjtBQUNILEtBSEwsQ0FyREssRUEwREwsQ0FBQyxHQUFELEVBQU0sNkJBQU4sRUFDSSxZQUFZO0FBQ1IsV0FBS0EsSUFBTCxHQUFZLEtBQUtrTSxFQUFMLENBQVF0dkMsSUFBUixDQUFhLEtBQUtvakMsSUFBbEIsQ0FBWjtBQUNILEtBSEwsQ0ExREssRUErREwsQ0FBQyxHQUFELEVBQU0saUdBQU4sRUFDSSxZQUFZO0FBQ1IsV0FBS0EsSUFBTCxHQUFZLEtBQUtrTSxFQUFMLENBQVFHLFFBQVIsQ0FBaUIsS0FBS3JNLElBQXRCLENBQVo7QUFDSCxLQUhMLENBL0RLLEVBb0VMLENBQUMsR0FBRCxFQUFNLGdCQUFOLEVBQ0ksWUFBWTtBQUNSLFdBQUtBLElBQUwsR0FBWSxLQUFLa00sRUFBTCxDQUFRSSxXQUFSLENBQW9CLEtBQUt0TSxJQUF6QixDQUFaO0FBQ0gsS0FITCxDQXBFSyxFQXlFTCxDQUFDLEdBQUQsRUFBTSxnQkFBTixFQUNJLFlBQVk7QUFDUixXQUFLQSxJQUFMLEdBQVksS0FBS2tNLEVBQUwsQ0FBUUksV0FBUixDQUFvQixLQUFLdE0sSUFBekIsQ0FBWjtBQUNILEtBSEwsQ0F6RUssRUE4RUwsQ0FBQyxHQUFELEVBQU0sdURBQU4sRUFDSSxZQUFZO0FBQ1IsV0FBS0EsSUFBTCxHQUFZLEtBQUtrTSxFQUFMLENBQVFHLFFBQVIsQ0FBaUIsS0FBS3JNLElBQUwsQ0FBVTMyRCxLQUFWLENBQWdCLENBQWhCLENBQWpCLENBQVo7QUFDSCxLQUhMLENBOUVLLEVBbUZMLENBQUMsR0FBRCxFQUFNLG1HQUFOLEVBQ0ksWUFBWTtBQUNSLFdBQUsyMkQsSUFBTCxHQUFZLEtBQUtrTSxFQUFMLENBQVFHLFFBQVIsQ0FBaUIsS0FBS3JNLElBQUwsQ0FBVTMyRCxLQUFWLENBQWdCLENBQWhCLENBQWpCLENBQVo7QUFDSCxLQUhMLENBbkZLLEVBd0ZMLENBQUMsR0FBRCxFQUFNLDBDQUFOLEVBQ0ksWUFBWTtBQUNSLFdBQUsyMkQsSUFBTCxHQUFZLEtBQUtrTSxFQUFMLENBQVF0dkMsSUFBUixDQUFhLEtBQUtvakMsSUFBbEIsQ0FBWjtBQUNILEtBSEwsQ0F4RkssRUE2RkwsQ0FBQyxHQUFELEVBQU0sTUFBTixFQUFjLENBQWQsQ0E3RkssRUE4RkwsQ0FBQyxHQUFELEVBQU0sMkNBQU4sRUFDSSxZQUFZO0FBQ1IsV0FBS0EsSUFBTCxHQUFZLEtBQUtrTSxFQUFMLENBQVF0dkMsSUFBUixDQUFhLEtBQUtvakMsSUFBbEIsQ0FBWjtBQUNILEtBSEwsQ0E5RkssRUFtR0wsQ0FBQyxHQUFELEVBQU0sMENBQU4sRUFDSSxZQUFZO0FBQ1IsV0FBS0EsSUFBTCxHQUFZLEtBQUtrTSxFQUFMLENBQVF0dkMsSUFBUixDQUFhLEtBQUtvakMsSUFBbEIsQ0FBWjtBQUNILEtBSEwsQ0FuR0ssRUF3R0wsQ0FBQyxHQUFELEVBQU0sMENBQU4sRUFDSSxZQUFZO0FBQ1IsV0FBS0EsSUFBTCxHQUFZLEtBQUtrTSxFQUFMLENBQVF0dkMsSUFBUixDQUFhLEtBQUtvakMsSUFBbEIsQ0FBWjtBQUNILEtBSEwsQ0F4R0ssRUE2R0wsQ0FBQyxHQUFELEVBQU0sS0FBTixFQUFhLENBQWIsQ0E3R0ssRUE4R0wsQ0FBQyxHQUFELEVBQU0sc0JBQU4sRUFBOEIsQ0FBOUIsQ0E5R0ssRUErR0wsQ0FBQyxHQUFELEVBQU0sSUFBTixFQUFZLENBQVosQ0EvR0s7QUFEUyxHQUFWLENBQVo7QUFtSEFpSyxFQUFBQSxNQUFNLENBQUNnQyxLQUFQLEdBQWVBLEtBQWY7QUFDQUEsRUFBQUEsS0FBSyxDQUFDWixTQUFOLEdBQWtCO0FBQ2QsWUFBUSxHQURNO0FBRWQsb0JBQWdCLEdBRkY7QUFHZCxxQkFBaUIsR0FISDtBQUlkLGdCQUFZLEdBSkU7QUFLZCxrQkFBYyxHQUxBO0FBTWQsb0JBQWdCLEdBTkY7QUFPZCxvQkFBZ0IsR0FQRjtBQVFkLHVCQUFtQixHQVJMO0FBU2QsaUJBQWEsR0FUQztBQVVkLGdCQUFZLEdBVkU7QUFXZCxpQkFBYSxHQVhDO0FBWWQseUJBQXFCLEdBWlA7QUFhZCxXQUFPLEdBYk87QUFjZCxhQUFTLEdBZEs7QUFlZCxjQUFVLEdBZkk7QUFnQmQsWUFBUSxHQWhCTTtBQWlCZCxhQUFTLEdBakJLO0FBa0JkLGFBQVMsR0FsQks7QUFtQmQsYUFBUyxHQW5CSztBQW9CZCxZQUFRLEdBcEJNO0FBcUJkLGVBQVcsR0FyQkc7QUFzQmQsYUFBUyxHQXRCSztBQXVCZCxpQkFBYSxHQXZCQztBQXdCZCxTQUFLLEdBeEJTO0FBeUJkLGVBQVcsR0F6Qkc7QUEwQmQsY0FBVSxHQTFCSTtBQTJCZCx1QkFBbUIsSUEzQkw7QUE0QmQsZ0JBQVksSUE1QkU7QUE2QmQsZ0NBQTRCLElBN0JkO0FBOEJkLGtCQUFjLElBOUJBO0FBK0JkLHFCQUFpQixJQS9CSDtBQWdDZCxtQkFBZSxJQWhDRDtBQWlDZCxzQkFBa0IsSUFqQ0o7QUFrQ2Qsb0JBQWdCLElBbENGO0FBbUNkLGNBQVUsSUFuQ0k7QUFvQ2Qsa0JBQWMsSUFwQ0E7QUFxQ2QsY0FBVSxJQXJDSTtBQXNDZCxnQkFBWSxJQXRDRTtBQXVDZCxvQkFBZ0IsSUF2Q0Y7QUF3Q2QsdUJBQW1CLElBeENMO0FBeUNkLHdCQUFvQjtBQXpDTixHQUFsQjtBQTJDQXBCLEVBQUFBLE1BQU0sQ0FBQ3NDLFdBQVAsR0FBcUIsQ0FDakIsQ0FBQyxHQUFELEVBQU0sQ0FBQyxJQUFELENBQU4sQ0FEaUIsRUFFakIsQ0FBQyxJQUFELEVBQU8sQ0FBQyxJQUFELENBQVAsRUFDSSxZQUFZO0FBQ1IsV0FBTyxDQUFDLEtBQUtDLEVBQU4sQ0FBUDtBQUNILEdBSEwsQ0FGaUIsRUFPakIsQ0FBQyxJQUFELEVBQU8sQ0FBQyxJQUFELEVBQU8sR0FBUCxFQUFZLElBQVosQ0FBUCxFQUNJLFlBQVk7QUFDUixTQUFLQSxFQUFMLENBQVFyZ0UsSUFBUixDQUFhLEtBQUtzZ0UsRUFBbEI7QUFDSCxHQUhMLENBUGlCLEVBWWpCLENBQUMsSUFBRCxFQUFPLENBQUMsSUFBRCxDQUFQLENBWmlCLEVBYWpCLENBQUMsSUFBRCxFQUFPLENBQUMsSUFBRCxFQUFPLElBQVAsRUFBYSxJQUFiLENBQVAsRUFDSSxZQUFZO0FBQ1I7QUFFQSxTQUFLRCxFQUFMLENBQVFFLGNBQVIsR0FBeUIsS0FBS0QsRUFBTCxDQUFRRSxjQUFSLEdBQXlCLEtBQUtDLEVBQXZEO0FBQ0EsUUFBSUMsS0FBSjtBQUNBQSxJQUFBQSxLQUFLLEdBQUcsS0FBS0wsRUFBTCxDQUFRSyxLQUFSLEdBQWdCLEtBQUtMLEVBQUwsQ0FBUUssS0FBUixJQUFpQixDQUF6QztBQUNBLFNBQUtKLEVBQUwsQ0FBUUksS0FBUixHQUFnQkEsS0FBSyxHQUFHLENBQXhCO0FBQ0EsU0FBS0osRUFBTCxDQUFRNTJDLElBQVIsR0FBZSxLQUFLMjJDLEVBQXBCO0FBQ0EsU0FBS0EsRUFBTCxDQUFRM3RELElBQVIsR0FBZSxLQUFLNHRELEVBQXBCO0FBQ0EsV0FBTyxLQUFLQSxFQUFaO0FBQ0gsR0FYTCxDQWJpQixFQTBCakIsQ0FBQyxJQUFELEVBQU8sQ0FBQyxHQUFELENBQVAsQ0ExQmlCLEVBMkJqQixDQUFDLElBQUQsRUFBTyxDQUFDLEdBQUQsQ0FBUCxDQTNCaUIsRUE0QmpCLENBQUMsSUFBRCxFQUFPLENBQUMsR0FBRCxDQUFQLENBNUJpQixFQTZCakIsQ0FBQyxJQUFELEVBQU8sQ0FBQyxHQUFELENBQVAsRUFDSSxZQUFZO0FBQ1IsV0FBTyxHQUFQO0FBQ0gsR0FITCxDQTdCaUIsRUFrQ2pCLENBQUMsSUFBRCxFQUFPLENBQUMsR0FBRCxDQUFQLEVBQ0ksWUFBWTtBQUNSLFdBQU87QUFDSGp5QyxNQUFBQSxDQUFDLEVBQUUsS0FEQTtBQUVIdnhCLE1BQUFBLEtBQUssRUFBRSxLQUFLdWpFO0FBRlQsS0FBUDtBQUlILEdBTkwsQ0FsQ2lCLEVBMENqQixDQUFDLElBQUQsRUFBTyxDQUFDLEdBQUQsQ0FBUCxFQUNJLFlBQVk7QUFDUixXQUFPO0FBQ0hoeUMsTUFBQUEsQ0FBQyxFQUFFLEtBREE7QUFFSHZ4QixNQUFBQSxLQUFLLEVBQUUsS0FBS3VqRTtBQUZULEtBQVA7QUFJSCxHQU5MLENBMUNpQixFQWtEakIsQ0FBQyxJQUFELEVBQU8sQ0FBQyxHQUFELENBQVAsRUFDSSxZQUFZO0FBQ1IsV0FBTztBQUNIaHlDLE1BQUFBLENBQUMsRUFBRSxJQURBO0FBRUh2eEIsTUFBQUEsS0FBSyxFQUFFLEtBQUt1akU7QUFGVCxLQUFQO0FBSUgsR0FOTCxDQWxEaUIsRUEwRGpCLENBQUMsSUFBRCxFQUFPLENBQUMsR0FBRCxDQUFQLEVBQ0ksWUFBWTtBQUNSLFdBQU87QUFDSGh5QyxNQUFBQSxDQUFDLEVBQUUsS0FEQTtBQUVIdnhCLE1BQUFBLEtBQUssRUFBRSxLQUFLdWpFO0FBRlQsS0FBUDtBQUlILEdBTkwsQ0ExRGlCLEVBa0VqQixDQUFDLElBQUQsRUFBTyxDQUFDLEdBQUQsQ0FBUCxDQWxFaUIsRUFtRWpCLENBQUMsSUFBRCxFQUFPLENBQUMsR0FBRCxDQUFQLENBbkVpQixFQW9FakIsQ0FBQyxJQUFELEVBQU8sQ0FBQyxHQUFELENBQVAsQ0FwRWlCLEVBcUVqQixDQUFDLElBQUQsRUFBTyxDQUFDLEdBQUQsQ0FBUCxDQXJFaUIsRUFzRWpCLENBQUMsSUFBRCxFQUFPLENBQUMsR0FBRCxDQUFQLENBdEVpQixFQXVFakIsQ0FBQyxJQUFELEVBQU8sQ0FBQyxHQUFELENBQVAsQ0F2RWlCLEVBd0VqQixDQUFDLElBQUQsRUFBTyxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxDQUFQLEVBQ0ksWUFBWTtBQUNSLFdBQU87QUFDSGh5QyxNQUFBQSxDQUFDLEVBQUUsUUFEQTtBQUVIdnhCLE1BQUFBLEtBQUssRUFBRTtBQUNINmpFLFFBQUFBLEtBQUssRUFBRSxLQUFLRjtBQURUO0FBRkosS0FBUDtBQU1ILEdBUkwsQ0F4RWlCLEVBa0ZqQixDQUFDLElBQUQsRUFBTyxDQUFDLEdBQUQsQ0FBUCxDQWxGaUIsRUFtRmpCLENBQUMsSUFBRCxFQUFPLENBQUMsR0FBRCxDQUFQLENBbkZpQixFQW9GakIsQ0FBQyxJQUFELEVBQU8sQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLElBQVgsRUFBaUIsSUFBakIsRUFBdUIsR0FBdkIsQ0FBUCxFQUNJLFlBQVk7QUFDUixXQUFPO0FBQ0hweUMsTUFBQUEsQ0FBQyxFQUFFLFFBREE7QUFFSHZ4QixNQUFBQSxLQUFLLEVBQUU7QUFDSDZqRSxRQUFBQSxLQUFLLEVBQUUsS0FBS0YsRUFEVDtBQUVIbGlFLFFBQUFBLEtBQUssRUFBRSxLQUFLK2hFLEVBRlQ7QUFHSHhqRSxRQUFBQSxLQUFLLEVBQUUsS0FBSzhqRTtBQUhUO0FBRkosS0FBUDtBQVFILEdBVkwsQ0FwRmlCLEVBZ0dqQixDQUFDLElBQUQsRUFBTyxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxFQUFnQixHQUFoQixDQUFQLEVBQ0ksWUFBWTtBQUNSLFdBQU87QUFDSHZ5QyxNQUFBQSxDQUFDLEVBQUUsUUFEQTtBQUVIdnhCLE1BQUFBLEtBQUssRUFBRTtBQUNIMkMsUUFBQUEsRUFBRSxFQUFFLEtBQUtnaEUsRUFBTCxDQUFRaDVELFdBQVIsRUFERDtBQUVIbzVELFFBQUFBLEtBQUssRUFBRSxLQUFLUDtBQUZUO0FBRkosS0FBUDtBQU9ILEdBVEwsQ0FoR2lCLEVBMkdqQixDQUFDLElBQUQsRUFBTyxDQUFDLEdBQUQsRUFBTSxHQUFOLENBQVAsRUFDSSxZQUFZO0FBQ1IsV0FBTztBQUNIanlDLE1BQUFBLENBQUMsRUFBRSxRQURBO0FBRUh2eEIsTUFBQUEsS0FBSyxFQUFFO0FBQ0g2akUsUUFBQUEsS0FBSyxFQUFFLEtBQUtGLEVBQUwsQ0FBUWg1RCxXQUFSO0FBREo7QUFGSixLQUFQO0FBTUgsR0FSTCxDQTNHaUIsRUFxSGpCLENBQUMsSUFBRCxFQUFPLENBQUMsR0FBRCxFQUFNLElBQU4sRUFBWSxHQUFaLENBQVAsRUFDSSxZQUFZO0FBQ1IsV0FBTztBQUNING1CLE1BQUFBLENBQUMsRUFBRSxRQURBO0FBRUh2eEIsTUFBQUEsS0FBSyxFQUFFO0FBQ0gyQyxRQUFBQSxFQUFFLEVBQUUsS0FERDtBQUVIb2hFLFFBQUFBLEtBQUssRUFBRSxLQUFLSjtBQUZUO0FBRkosS0FBUDtBQU9ILEdBVEwsQ0FySGlCLEVBZ0lqQixDQUFDLElBQUQsRUFBTyxDQUFDLElBQUQsQ0FBUCxDQWhJaUIsRUFpSWpCLENBQUMsSUFBRCxFQUFPLENBQUMsSUFBRCxDQUFQLENBaklpQixFQWtJakIsQ0FBQyxJQUFELEVBQU8sQ0FBQyxJQUFELENBQVAsQ0FsSWlCLEVBbUlqQixDQUFDLElBQUQsRUFBTyxDQUFDLElBQUQsQ0FBUCxDQW5JaUIsRUFvSWpCLENBQUMsSUFBRCxFQUFPLENBQUMsSUFBRCxDQUFQLENBcElpQixFQXFJakIsQ0FBQyxJQUFELEVBQU8sQ0FBQyxJQUFELENBQVAsQ0FySWlCLEVBc0lqQixDQUFDLElBQUQsRUFBTyxDQUFDLElBQUQsQ0FBUCxDQXRJaUIsRUF1SWpCLENBQUMsSUFBRCxFQUFPLENBQUMsSUFBRCxDQUFQLENBdklpQixFQXdJakIsQ0FBQyxJQUFELEVBQU8sQ0FBQyxJQUFELENBQVAsQ0F4SWlCLEVBeUlqQixDQUFDLElBQUQsRUFBTyxDQUFDLElBQUQsQ0FBUCxDQXpJaUIsRUEwSWpCLENBQUMsSUFBRCxFQUFPLENBQUMsSUFBRCxDQUFQLEVBQ0ksWUFBWTtBQUNSLFdBQU8sQ0FBQyxLQUFLSixFQUFOLENBQVA7QUFDSCxHQUhMLENBMUlpQixFQStJakIsQ0FBQyxJQUFELEVBQU8sQ0FBQyxJQUFELEVBQU8sSUFBUCxDQUFQLEVBQ0ksWUFBWTtBQUNSLFNBQUtBLEVBQUwsQ0FBUXJnRSxJQUFSLENBQWEsS0FBS3lnRSxFQUFsQjtBQUNILEdBSEwsQ0EvSWlCLEVBb0pqQixDQUFDLElBQUQsRUFBTyxDQUFDLElBQUQsQ0FBUCxDQXBKaUIsRUFxSmpCLENBQUMsSUFBRCxFQUFPLENBQUMsSUFBRCxDQUFQLEVBQ0ksWUFBWTtBQUNSLFdBQU87QUFDSGhELE1BQUFBLE1BQU0sRUFBRSxLQUFLNEM7QUFEVixLQUFQO0FBR0gsR0FMTCxDQXJKaUIsRUE0SmpCLENBQUMsSUFBRCxFQUFPLENBQUMsSUFBRCxFQUFPLElBQVAsQ0FBUCxFQUNJLFlBQVk7QUFDUixXQUFPO0FBQ0hoeUMsTUFBQUEsQ0FBQyxFQUFFLEtBREE7QUFFSHZ4QixNQUFBQSxLQUFLLEVBQUUsS0FBS3VqRSxFQUFMLENBQVF2akUsS0FGWjtBQUdIMmdFLE1BQUFBLE1BQU0sRUFBRSxLQUFLZ0Q7QUFIVixLQUFQO0FBS0gsR0FQTCxDQTVKaUIsQ0FBckI7QUFzS0EzQyxFQUFBQSxNQUFNLENBQUNnRCxLQUFQLEdBQWU7QUFDWCxhQUFTO0FBQ0wsV0FBSztBQUNELGNBQU0sQ0FETDtBQUVELGNBQU0sQ0FGTDtBQUdELGNBQU0sRUFITDtBQUlELGNBQU0sRUFKTDtBQUtELGNBQU0sRUFMTDtBQU1ELGNBQU0sRUFOTDtBQU9ELGNBQU0sRUFQTDtBQVFELGNBQU0sRUFSTDtBQVNELGNBQU0sRUFUTDtBQVVELGNBQU0sRUFWTDtBQVdELGNBQU07QUFYTCxPQURBO0FBY0wsV0FBSztBQUNELGNBQU0sRUFETDtBQUVELGNBQU0sRUFGTDtBQUdELGNBQU0sRUFITDtBQUlELGNBQU0sRUFKTDtBQUtELGNBQU0sRUFMTDtBQU1ELGNBQU07QUFOTCxPQWRBO0FBc0JMLFdBQUs7QUFDRCxjQUFNO0FBREwsT0F0QkE7QUF5QkwsWUFBTTtBQUNGLGNBQU0sRUFESjtBQUVGLGNBQU0sRUFGSjtBQUdGLGNBQU0sRUFISjtBQUlGLGNBQU0sRUFKSjtBQUtGLGNBQU0sRUFMSjtBQU1GLGNBQU0sRUFOSjtBQU9GLGNBQU07QUFQSixPQXpCRDtBQWtDTCxZQUFNO0FBQ0YsY0FBTSxFQURKO0FBRUYsY0FBTSxFQUZKO0FBR0YsY0FBTSxFQUhKO0FBSUYsY0FBTSxFQUpKO0FBS0YsY0FBTSxFQUxKO0FBTUYsY0FBTTtBQU5KLE9BbENEO0FBMENMLFlBQU07QUFDRixjQUFNO0FBREosT0ExQ0Q7QUE2Q0wsWUFBTTtBQUNGLGNBQU0sRUFESjtBQUVGLGNBQU0sRUFGSjtBQUdGLGNBQU0sRUFISjtBQUlGLGNBQU0sRUFKSjtBQUtGLGNBQU0sRUFMSjtBQU1GLGNBQU0sRUFOSjtBQU9GLGNBQU0sRUFQSjtBQVFGLGNBQU0sRUFSSjtBQVNGLGNBQU0sRUFUSjtBQVVGLGNBQU07QUFWSixPQTdDRDtBQXlETCxZQUFNO0FBQ0YsY0FBTSxFQURKO0FBRUYsY0FBTSxFQUZKO0FBR0YsY0FBTSxFQUhKO0FBSUYsY0FBTSxFQUpKO0FBS0YsY0FBTSxFQUxKO0FBTUYsY0FBTSxFQU5KO0FBT0YsY0FBTSxFQVBKO0FBUUYsY0FBTSxFQVJKO0FBU0YsY0FBTTtBQVRKLE9BekREO0FBb0VMLFlBQU07QUFDRixjQUFNLEVBREo7QUFFRixjQUFNLEVBRko7QUFHRixjQUFNLEVBSEo7QUFJRixjQUFNLEVBSko7QUFLRixjQUFNLEVBTEo7QUFNRixjQUFNO0FBTkosT0FwRUQ7QUE0RUwsWUFBTTtBQUNGLGNBQU07QUFESixPQTVFRDtBQStFTCxZQUFNO0FBQ0YsY0FBTTtBQURKO0FBL0VELEtBREU7QUFvRlgsY0FBVTtBQUNOLFdBQUs7QUFDRCxhQUFLLENBQUMsQ0FBRCxFQUFJempFLFdBQUosRUFBZSxDQUFmLENBREo7QUFFRCxhQUFLLENBQUMsQ0FBRCxFQUFJQSxXQUFKLEVBQWUsQ0FBZixDQUZKO0FBR0QsYUFBSyxDQUFDLENBQUQsRUFBSUEsV0FBSixFQUFlLENBQWYsQ0FISjtBQUlELGFBQUssQ0FBQyxDQUFELEVBQUlBLFdBQUosRUFBZSxDQUFmLENBSko7QUFLRCxhQUFLLENBQUMsQ0FBRCxFQUFJQSxXQUFKLEVBQWUsQ0FBZixDQUxKO0FBTUQsYUFBSyxDQUFDLENBQUQsRUFBSUEsV0FBSixFQUFlLENBQWYsQ0FOSjtBQU9ELGFBQUssQ0FBQyxDQUFELEVBQUlBLFdBQUosRUFBZSxDQUFmO0FBUEosT0FEQztBQVVOLFdBQUs7QUFDRCxhQUFLLENBQUMsQ0FBRCxFQUFJQSxXQUFKLEVBQWUsRUFBZjtBQURKLE9BVkM7QUFhTixXQUFLO0FBQ0QsYUFBSyxDQUFDLENBQUQsRUFBSUEsV0FBSixFQUFlLENBQWYsQ0FESjtBQUVELGFBQUssQ0FBQyxDQUFELEVBQUlBLFdBQUosRUFBZSxDQUFmLENBRko7QUFHRCxhQUFLLENBQUMsQ0FBRCxFQUFJQSxXQUFKLEVBQWUsQ0FBZixDQUhKO0FBSUQsYUFBSyxDQUFDLENBQUQsRUFBSUEsV0FBSixFQUFlLENBQWYsQ0FKSjtBQUtELGFBQUssQ0FBQyxDQUFELEVBQUlBLFdBQUosRUFBZSxDQUFmLENBTEo7QUFNRCxhQUFLLENBQUMsQ0FBRCxFQUFJQSxXQUFKLEVBQWUsQ0FBZjtBQU5KLE9BYkM7QUFxQk4sV0FBSztBQUNELGFBQUssQ0FBQyxDQUFELEVBQUksQ0FBSixDQURKO0FBRUQsYUFBSyxDQUFDLENBQUQsRUFBSSxDQUFKLENBRko7QUFHRCxhQUFLLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FISjtBQUlELGFBQUssQ0FBQyxDQUFELEVBQUksQ0FBSixDQUpKO0FBS0QsYUFBSyxDQUFDLENBQUQsRUFBSSxDQUFKLENBTEo7QUFNRCxhQUFLLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FOSjtBQU9ELGFBQUssQ0FBQyxDQUFELEVBQUksQ0FBSixDQVBKO0FBUUQsYUFBSyxDQUFDLENBQUQsRUFBSSxDQUFKLENBUko7QUFTRCxhQUFLLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FUSjtBQVVELGFBQUssQ0FBQyxDQUFELEVBQUksQ0FBSixDQVZKO0FBV0QsYUFBSyxDQUFDLENBQUQsRUFBSSxDQUFKLENBWEo7QUFZRCxhQUFLLENBQUMsQ0FBRCxFQUFJLENBQUo7QUFaSixPQXJCQztBQW1DTixXQUFLO0FBQ0QsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBREo7QUFFRCxhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FGSjtBQUdELGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQUhKO0FBSUQsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBSko7QUFLRCxhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FMSjtBQU1ELGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQU5KO0FBT0QsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBUEo7QUFRRCxhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FSSjtBQVNELGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVRKO0FBVUQsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBVko7QUFXRCxhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FYSjtBQVlELGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSjtBQVpKLE9BbkNDO0FBaUROLFdBQUs7QUFDRCxhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FESjtBQUVELGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQUZKO0FBR0QsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBSEo7QUFJRCxhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FKSjtBQUtELGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQUxKO0FBTUQsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBTko7QUFPRCxhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FQSjtBQVFELGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVJKO0FBU0QsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBVEo7QUFVRCxhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FWSjtBQVdELGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVhKO0FBWUQsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKO0FBWkosT0FqREM7QUErRE4sV0FBSztBQUNELGFBQUssQ0FBQyxDQUFELEVBQUlBLFdBQUosRUFBZSxFQUFmLENBREo7QUFFRCxhQUFLLENBQUMsQ0FBRCxFQUFJQSxXQUFKLEVBQWUsRUFBZjtBQUZKLE9BL0RDO0FBbUVOLFdBQUs7QUFDRCxhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FESjtBQUVELGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQUZKO0FBR0QsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBSEo7QUFJRCxhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FKSjtBQUtELGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQUxKO0FBTUQsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBTko7QUFPRCxhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FQSjtBQVFELGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVJKO0FBU0QsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBVEo7QUFVRCxhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FWSjtBQVdELGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVhKO0FBWUQsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKO0FBWkosT0FuRUM7QUFpRk4sV0FBSztBQUNELGFBQUssQ0FBQyxDQUFELENBREo7QUFFRCxhQUFLLENBQUMsQ0FBRCxFQUFJQSxXQUFKLEVBQWUsRUFBZjtBQUZKLE9BakZDO0FBcUZOLFdBQUs7QUFDRCxhQUFLLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FESjtBQUVELGFBQUssQ0FBQyxDQUFELEVBQUksQ0FBSixDQUZKO0FBR0QsYUFBSyxDQUFDLENBQUQsRUFBSUEsV0FBSixFQUFlLEVBQWYsQ0FISjtBQUlELGFBQUssQ0FBQyxDQUFELEVBQUlBLFdBQUosRUFBZSxFQUFmLENBSko7QUFLRCxhQUFLLENBQUMsQ0FBRCxFQUFJQSxXQUFKLEVBQWUsRUFBZixDQUxKO0FBTUQsYUFBSyxDQUFDLENBQUQsRUFBSUEsV0FBSixFQUFlLEVBQWY7QUFOSixPQXJGQztBQTZGTixZQUFNO0FBQ0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBREg7QUFFRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FGSDtBQUdGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQUhIO0FBSUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBSkg7QUFLRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FMSDtBQU1GLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQU5IO0FBT0YsYUFBSyxDQUFDLENBQUQsRUFBSUEsV0FBSixFQUFlLENBQWYsQ0FQSDtBQVFGLGFBQUssQ0FBQyxDQUFELEVBQUlBLFdBQUosRUFBZSxDQUFmLENBUkg7QUFTRixhQUFLLENBQUMsQ0FBRCxFQUFJQSxXQUFKLEVBQWUsQ0FBZixDQVRIO0FBVUYsYUFBSyxDQUFDLENBQUQsRUFBSUEsV0FBSixFQUFlLENBQWYsQ0FWSDtBQVdGLGFBQUssQ0FBQyxDQUFELEVBQUlBLFdBQUosRUFBZSxDQUFmO0FBWEgsT0E3RkE7QUEwR04sWUFBTTtBQUNGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQURIO0FBRUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBRkg7QUFHRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FISDtBQUlGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQUpIO0FBS0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBTEg7QUFNRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FOSDtBQU9GLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVBIO0FBUUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBUkg7QUFTRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FUSDtBQVVGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVZIO0FBV0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKO0FBWEgsT0ExR0E7QUF1SE4sWUFBTTtBQUNGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQURIO0FBRUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBRkg7QUFHRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FISDtBQUlGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQUpIO0FBS0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBTEg7QUFNRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FOSDtBQU9GLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVBIO0FBUUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBUkg7QUFTRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FUSDtBQVVGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVZIO0FBV0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKO0FBWEgsT0F2SEE7QUFvSU4sWUFBTTtBQUNGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQURIO0FBRUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBRkg7QUFHRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FISDtBQUlGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQUpIO0FBS0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBTEg7QUFNRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FOSDtBQU9GLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVBIO0FBUUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBUkg7QUFTRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FUSDtBQVVGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVZIO0FBV0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKO0FBWEgsT0FwSUE7QUFpSk4sWUFBTTtBQUNGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQURIO0FBRUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBRkg7QUFHRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FISDtBQUlGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQUpIO0FBS0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBTEg7QUFNRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FOSDtBQU9GLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVBIO0FBUUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBUkg7QUFTRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FUSDtBQVVGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVZIO0FBV0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKO0FBWEgsT0FqSkE7QUE4Sk4sWUFBTTtBQUNGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQURIO0FBRUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBRkg7QUFHRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FISDtBQUlGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQUpIO0FBS0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBTEg7QUFNRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FOSDtBQU9GLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVBIO0FBUUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBUkg7QUFTRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FUSDtBQVVGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVZIO0FBV0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKO0FBWEgsT0E5SkE7QUEyS04sWUFBTTtBQUNGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQURIO0FBRUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBRkg7QUFHRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FISDtBQUlGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQUpIO0FBS0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBTEg7QUFNRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FOSDtBQU9GLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVBIO0FBUUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBUkg7QUFTRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FUSDtBQVVGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVZIO0FBV0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKO0FBWEgsT0EzS0E7QUF3TE4sWUFBTTtBQUNGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQURIO0FBRUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBRkg7QUFHRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FISDtBQUlGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQUpIO0FBS0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBTEg7QUFNRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FOSDtBQU9GLGFBQUssQ0FBQyxDQUFELEVBQUlBLFdBQUosRUFBZSxDQUFmLENBUEg7QUFRRixhQUFLLENBQUMsQ0FBRCxFQUFJQSxXQUFKLEVBQWUsQ0FBZixDQVJIO0FBU0YsYUFBSyxDQUFDLENBQUQsRUFBSUEsV0FBSixFQUFlLENBQWYsQ0FUSDtBQVVGLGFBQUssQ0FBQyxDQUFELEVBQUlBLFdBQUosRUFBZSxDQUFmLENBVkg7QUFXRixhQUFLLENBQUMsQ0FBRCxFQUFJQSxXQUFKLEVBQWUsQ0FBZjtBQVhILE9BeExBO0FBcU1OLFlBQU07QUFDRixhQUFLLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FESDtBQUVGLGFBQUssQ0FBQyxDQUFELEVBQUksQ0FBSixDQUZIO0FBR0YsYUFBSyxDQUFDLENBQUQsRUFBSSxDQUFKLENBSEg7QUFJRixhQUFLLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FKSDtBQUtGLGFBQUssQ0FBQyxDQUFELEVBQUksQ0FBSixDQUxIO0FBTUYsYUFBSyxDQUFDLENBQUQsRUFBSSxDQUFKO0FBTkgsT0FyTUE7QUE2TU4sWUFBTTtBQUNGLGFBQUssQ0FBQyxDQUFELEVBQUlBLFdBQUosRUFBZSxFQUFmLENBREg7QUFFRixhQUFLLENBQUMsQ0FBRCxFQUFJQSxXQUFKLEVBQWUsRUFBZixDQUZIO0FBR0YsYUFBSyxDQUFDLENBQUQsRUFBSUEsV0FBSixFQUFlLEVBQWYsQ0FISDtBQUlGLGFBQUssQ0FBQyxDQUFELEVBQUlBLFdBQUosRUFBZSxFQUFmLENBSkg7QUFLRixhQUFLLENBQUMsQ0FBRCxFQUFJQSxXQUFKLEVBQWUsRUFBZixDQUxIO0FBTUYsYUFBSyxDQUFDLENBQUQsRUFBSUEsV0FBSixFQUFlLEVBQWYsQ0FOSDtBQU9GLGFBQUssQ0FBQyxDQUFELEVBQUlBLFdBQUosRUFBZSxFQUFmO0FBUEgsT0E3TUE7QUFzTk4sWUFBTTtBQUNGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSjtBQURILE9BdE5BO0FBeU5OLFlBQU07QUFDRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUo7QUFESCxPQXpOQTtBQTROTixZQUFNO0FBQ0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKO0FBREgsT0E1TkE7QUErTk4sWUFBTTtBQUNGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSjtBQURILE9BL05BO0FBa09OLFlBQU07QUFDRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUo7QUFESCxPQWxPQTtBQXFPTixZQUFNO0FBQ0YsYUFBSyxDQUFDLENBQUQsRUFBSUEsV0FBSixFQUFlLEVBQWY7QUFESCxPQXJPQTtBQXdPTixZQUFNO0FBQ0YsYUFBSyxDQUFDLENBQUQsRUFBSUEsV0FBSixFQUFlLEVBQWY7QUFESCxPQXhPQTtBQTJPTixZQUFNO0FBQ0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBREg7QUFFRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FGSDtBQUdGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQUhIO0FBSUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBSkg7QUFLRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FMSDtBQU1GLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQU5IO0FBT0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBUEg7QUFRRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FSSDtBQVNGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVRIO0FBVUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBVkg7QUFXRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FYSDtBQVlGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSjtBQVpILE9BM09BO0FBeVBOLFlBQU07QUFDRixhQUFLLENBQUMsQ0FBRCxFQUFJQSxXQUFKLEVBQWUsQ0FBZixDQURIO0FBRUYsYUFBSyxDQUFDLENBQUQsRUFBSUEsV0FBSixFQUFlLENBQWYsQ0FGSDtBQUdGLGFBQUssQ0FBQyxDQUFELEVBQUlBLFdBQUosRUFBZSxDQUFmLENBSEg7QUFJRixhQUFLLENBQUMsQ0FBRCxFQUFJQSxXQUFKLEVBQWUsQ0FBZixDQUpIO0FBS0YsYUFBSyxDQUFDLENBQUQsRUFBSUEsV0FBSixFQUFlLENBQWYsQ0FMSDtBQU1GLGFBQUssQ0FBQyxDQUFELEVBQUlBLFdBQUosRUFBZSxDQUFmLENBTkg7QUFPRixhQUFLLENBQUMsQ0FBRCxFQUFJQSxXQUFKLEVBQWUsQ0FBZjtBQVBILE9BelBBO0FBa1FOLFlBQU07QUFDRixhQUFLLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FESDtBQUVGLGFBQUssQ0FBQyxDQUFELEVBQUksQ0FBSixDQUZIO0FBR0YsYUFBSyxDQUFDLENBQUQsRUFBSSxDQUFKLENBSEg7QUFJRixhQUFLLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FKSDtBQUtGLGFBQUssQ0FBQyxDQUFELEVBQUksQ0FBSixDQUxIO0FBTUYsYUFBSyxDQUFDLENBQUQsRUFBSSxDQUFKLENBTkg7QUFPRixhQUFLLENBQUMsQ0FBRCxFQUFJLENBQUo7QUFQSCxPQWxRQTtBQTJRTixZQUFNO0FBQ0YsYUFBSyxDQUFDLENBQUQsRUFBSSxDQUFKLENBREg7QUFFRixhQUFLLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FGSDtBQUdGLGFBQUssQ0FBQyxDQUFELEVBQUksQ0FBSixDQUhIO0FBSUYsYUFBSyxDQUFDLENBQUQsRUFBSSxDQUFKLENBSkg7QUFLRixhQUFLLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FMSDtBQU1GLGFBQUssQ0FBQyxDQUFELEVBQUksQ0FBSixDQU5IO0FBT0YsYUFBSyxDQUFDLENBQUQsRUFBSSxDQUFKO0FBUEgsT0EzUUE7QUFvUk4sWUFBTTtBQUNGLGFBQUssQ0FBQyxDQUFELEVBQUksQ0FBSixDQURIO0FBRUYsYUFBSyxDQUFDLENBQUQsRUFBSSxDQUFKLENBRkg7QUFHRixhQUFLLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FISDtBQUlGLGFBQUssQ0FBQyxDQUFELEVBQUksQ0FBSixDQUpIO0FBS0YsYUFBSyxDQUFDLENBQUQsRUFBSSxDQUFKLENBTEg7QUFNRixhQUFLLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FOSDtBQU9GLGFBQUssQ0FBQyxDQUFELEVBQUksQ0FBSjtBQVBILE9BcFJBO0FBNlJOLFlBQU07QUFDRixhQUFLLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FESDtBQUVGLGFBQUssQ0FBQyxDQUFELEVBQUksQ0FBSixDQUZIO0FBR0YsYUFBSyxDQUFDLENBQUQsRUFBSSxDQUFKLENBSEg7QUFJRixhQUFLLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FKSDtBQUtGLGFBQUssQ0FBQyxDQUFELEVBQUksQ0FBSixDQUxIO0FBTUYsYUFBSyxDQUFDLENBQUQsRUFBSSxDQUFKLENBTkg7QUFPRixhQUFLLENBQUMsQ0FBRCxFQUFJLENBQUo7QUFQSCxPQTdSQTtBQXNTTixZQUFNO0FBQ0YsYUFBSyxDQUFDLENBQUQsRUFBSUEsV0FBSixFQUFlLENBQWYsQ0FESDtBQUVGLGFBQUssQ0FBQyxDQUFELEVBQUlBLFdBQUosRUFBZSxDQUFmLENBRkg7QUFHRixhQUFLLENBQUMsQ0FBRCxFQUFJQSxXQUFKLEVBQWUsQ0FBZixDQUhIO0FBSUYsYUFBSyxDQUFDLENBQUQsRUFBSUEsV0FBSixFQUFlLENBQWYsQ0FKSDtBQUtGLGFBQUssQ0FBQyxDQUFELEVBQUlBLFdBQUosRUFBZSxDQUFmLENBTEg7QUFNRixhQUFLLENBQUMsQ0FBRCxFQUFJQSxXQUFKLEVBQWUsQ0FBZixDQU5IO0FBT0YsYUFBSyxDQUFDLENBQUQsRUFBSUEsV0FBSixFQUFlLENBQWY7QUFQSCxPQXRTQTtBQStTTixZQUFNO0FBQ0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBREg7QUFFRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FGSDtBQUdGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQUhIO0FBSUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBSkg7QUFLRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FMSDtBQU1GLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQU5IO0FBT0YsYUFBSyxDQUFDLENBQUQsRUFBSUEsV0FBSixFQUFlLENBQWYsQ0FQSDtBQVFGLGFBQUssQ0FBQyxDQUFELEVBQUlBLFdBQUosRUFBZSxDQUFmLENBUkg7QUFTRixhQUFLLENBQUMsQ0FBRCxFQUFJQSxXQUFKLEVBQWUsQ0FBZixDQVRIO0FBVUYsYUFBSyxDQUFDLENBQUQsRUFBSUEsV0FBSixFQUFlLENBQWYsQ0FWSDtBQVdGLGFBQUssQ0FBQyxDQUFELEVBQUlBLFdBQUosRUFBZSxDQUFmO0FBWEgsT0EvU0E7QUE0VE4sWUFBTTtBQUNGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQURIO0FBRUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBRkg7QUFHRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FISDtBQUlGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQUpIO0FBS0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBTEg7QUFNRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FOSDtBQU9GLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVBIO0FBUUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBUkg7QUFTRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FUSDtBQVVGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVZIO0FBV0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKO0FBWEgsT0E1VEE7QUF5VU4sWUFBTTtBQUNGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQURIO0FBRUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBRkg7QUFHRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FISDtBQUlGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQUpIO0FBS0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBTEg7QUFNRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FOSDtBQU9GLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVBIO0FBUUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBUkg7QUFTRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FUSDtBQVVGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVZIO0FBV0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBWEg7QUFZRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUo7QUFaSCxPQXpVQTtBQXVWTixZQUFNO0FBQ0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBREg7QUFFRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUo7QUFGSCxPQXZWQTtBQTJWTixZQUFNO0FBQ0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBREg7QUFFRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUo7QUFGSCxPQTNWQTtBQStWTixZQUFNO0FBQ0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBREg7QUFFRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUo7QUFGSCxPQS9WQTtBQW1XTixZQUFNO0FBQ0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBREg7QUFFRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUo7QUFGSCxPQW5XQTtBQXVXTixZQUFNO0FBQ0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBREg7QUFFRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUo7QUFGSCxPQXZXQTtBQTJXTixZQUFNO0FBQ0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBREg7QUFFRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUo7QUFGSCxPQTNXQTtBQStXTixZQUFNO0FBQ0YsYUFBSyxDQUFDLENBQUQsRUFBSUEsV0FBSixFQUFlLEVBQWYsQ0FESDtBQUVGLGFBQUssQ0FBQyxDQUFELEVBQUlBLFdBQUosRUFBZSxFQUFmO0FBRkgsT0EvV0E7QUFtWE4sWUFBTTtBQUNGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQURIO0FBRUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBRkg7QUFHRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FISDtBQUlGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQUpIO0FBS0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBTEg7QUFNRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FOSDtBQU9GLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVBIO0FBUUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBUkg7QUFTRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FUSDtBQVVGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVZIO0FBV0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKO0FBWEgsT0FuWEE7QUFnWU4sWUFBTTtBQUNGLGFBQUssQ0FBQyxDQUFELEVBQUlBLFdBQUosRUFBZSxFQUFmO0FBREgsT0FoWUE7QUFtWU4sWUFBTTtBQUNGLGFBQUssQ0FBQyxDQUFELEVBQUksQ0FBSixDQURIO0FBRUYsYUFBSyxDQUFDLENBQUQsRUFBSSxDQUFKLENBRkg7QUFHRixhQUFLLENBQUMsQ0FBRCxFQUFJQSxXQUFKLEVBQWUsRUFBZixDQUhIO0FBSUYsYUFBSyxDQUFDLENBQUQsRUFBSUEsV0FBSixFQUFlLEVBQWYsQ0FKSDtBQUtGLGFBQUssQ0FBQyxDQUFELEVBQUlBLFdBQUosRUFBZSxFQUFmLENBTEg7QUFNRixhQUFLLENBQUMsQ0FBRCxFQUFJQSxXQUFKLEVBQWUsRUFBZjtBQU5ILE9BbllBO0FBMllOLFlBQU07QUFDRixhQUFLLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FESDtBQUVGLGFBQUssQ0FBQyxDQUFELEVBQUksQ0FBSixDQUZIO0FBR0YsYUFBSyxDQUFDLENBQUQsRUFBSSxDQUFKLENBSEg7QUFJRixhQUFLLENBQUMsQ0FBRCxFQUFJLENBQUosQ0FKSDtBQUtGLGFBQUssQ0FBQyxDQUFELEVBQUksQ0FBSixDQUxIO0FBTUYsYUFBSyxDQUFDLENBQUQsRUFBSSxDQUFKO0FBTkgsT0EzWUE7QUFtWk4sWUFBTTtBQUNGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSjtBQURILE9BblpBO0FBc1pOLFlBQU07QUFDRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUo7QUFESCxPQXRaQTtBQXlaTixZQUFNO0FBQ0YsYUFBSyxDQUFDLENBQUQsRUFBSUEsV0FBSixFQUFlLEVBQWY7QUFESCxPQXpaQTtBQTRaTixZQUFNO0FBQ0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBREg7QUFFRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FGSDtBQUdGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQUhIO0FBSUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBSkg7QUFLRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FMSDtBQU1GLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQU5IO0FBT0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBUEg7QUFRRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FSSDtBQVNGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVRIO0FBVUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBVkg7QUFXRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FYSDtBQVlGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSjtBQVpILE9BNVpBO0FBMGFOLFlBQU07QUFDRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FESDtBQUVGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQUZIO0FBR0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBSEg7QUFJRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FKSDtBQUtGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQUxIO0FBTUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBTkg7QUFPRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FQSDtBQVFGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVJIO0FBU0YsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKLENBVEg7QUFVRixhQUFLLENBQUMsQ0FBRCxFQUFJLEVBQUosQ0FWSDtBQVdGLGFBQUssQ0FBQyxDQUFELEVBQUksRUFBSixDQVhIO0FBWUYsYUFBSyxDQUFDLENBQUQsRUFBSSxFQUFKO0FBWkg7QUExYUE7QUFwRkMsR0FBZjs7QUE4Z0JBeWdFLEVBQUFBLE1BQU0sQ0FBQ3ZGLEtBQVAsR0FBZSxTQUFTQSxLQUFULENBQWVoNUQsS0FBZixFQUFzQndoRSxRQUF0QixFQUFnQztBQUMzQyxRQUFJcGxFLElBQUksR0FBRyxJQUFYO0FBQUEsUUFDSW1rRSxLQUFLLEdBQUdua0UsSUFBSSxDQUFDbWtFLEtBRGpCO0FBQUEsUUFFSXQ4RCxLQUZKO0FBQUEsUUFHSTlFLE1BSEo7QUFBQSxRQUlJaWhFLE1BSko7QUFBQSxRQUtJbUIsS0FBSyxHQUFHbmxFLElBQUksQ0FBQ21sRSxLQUxqQjtBQUFBLFFBTUlFLEtBQUssR0FBR0YsS0FBSyxDQUFDRSxLQU5sQjtBQUFBLFFBT0lDLFdBQVcsR0FBR0gsS0FBSyxDQUFDbkIsTUFQeEI7QUFBQSxRQVFJUyxXQUFXLEdBQUd6a0UsSUFBSSxDQUFDeWtFLFdBUnZCO0FBQUEsUUFTSWMsVUFBVSxHQUFHLENBQUMsSUFBRCxDQVRqQjtBQUFBO0FBV0kxRCxJQUFBQSxNQUFNLEdBQUd1RCxRQUFRLEdBQUksY0FBY0EsUUFBZCxHQUF5QixHQUE3QixHQUFvQyxFQVh6RDtBQUFBLFFBWUkzTSxLQUFLLEdBQUcsQ0FBQyxDQUFELENBWlo7QUFjQTBMLElBQUFBLEtBQUssQ0FBQzFCLFVBQU4sQ0FBaUI3K0QsS0FBakI7O0FBRUEsV0FBTyxDQUFQLEVBQVU7QUFDTjtBQUNBaUUsTUFBQUEsS0FBSyxHQUFHNHdELEtBQUssQ0FBQ0EsS0FBSyxDQUFDcjJELE1BQU4sR0FBZSxDQUFoQixDQUFiOztBQUVBLFVBQUksQ0FBQ1csTUFBTCxFQUFhO0FBQ1RBLFFBQUFBLE1BQU0sR0FBR29oRSxLQUFLLENBQUNELEdBQU4sRUFBVDtBQUNIOztBQUVELFVBQUluaEUsTUFBSixFQUFZO0FBQ1I7QUFDQWloRSxRQUFBQSxNQUFNLEdBQUdzQixXQUFXLENBQUN6OUQsS0FBRCxDQUFYLElBQXNCeTlELFdBQVcsQ0FBQ3o5RCxLQUFELENBQVgsQ0FBbUI5RSxNQUFuQixDQUEvQjtBQUNILE9BSEQsTUFHTztBQUNIaWhFLFFBQUFBLE1BQU0sR0FBRyxJQUFUO0FBQ0g7O0FBRUQsVUFBSSxDQUFDQSxNQUFMLEVBQWE7QUFDVCxZQUFJdHhCLFFBQVEsR0FBRyxFQUFmO0FBQUEsWUFDSXR5QyxLQURKLENBRFM7O0FBSVQsWUFBSWtsRSxXQUFXLENBQUN6OUQsS0FBRCxDQUFmLEVBQXdCO0FBQ3BCLGVBQUssSUFBSTI5RCxjQUFULElBQTJCRixXQUFXLENBQUN6OUQsS0FBRCxDQUF0QyxFQUErQztBQUMzQzZxQyxZQUFBQSxRQUFRLENBQUNydUMsSUFBVCxDQUFjckUsSUFBSSxDQUFDbWtFLEtBQUwsQ0FBV3NCLGdCQUFYLENBQTRCRCxjQUE1QixDQUFkO0FBQ0g7QUFDSjs7QUFDRHBsRSxRQUFBQSxLQUFLLEdBQUd5aEUsTUFBTSxHQUFHLHVCQUFULEdBQW1Dc0MsS0FBSyxDQUFDdEIsVUFBekMsR0FDSixLQURJLEdBQ0lzQixLQUFLLENBQUN1QixhQUFOLEVBREosR0FFSixJQUZJLEdBRUcsU0FGSCxHQUVlaHpCLFFBQVEsQ0FBQ3BwQyxJQUFULENBQWMsSUFBZCxDQUZ2QjtBQUdBLGNBQU0sSUFBSXFPLEtBQUosQ0FBVXZYLEtBQVYsQ0FBTjtBQUNIOztBQUVELGNBQVE0akUsTUFBTSxDQUFDNUIsWUFBWSxDQUFDdUQsVUFBZCxDQUFkO0FBQ0EsYUFBS3ZELFlBQVksQ0FBQ3dELFVBQWxCO0FBQ0luTixVQUFBQSxLQUFLLENBQUNwMEQsSUFBTixDQUFXdEIsTUFBWDtBQUVBd2lFLFVBQUFBLFVBQVUsQ0FBQ2xoRSxJQUFYLENBQWdCOC9ELEtBQUssQ0FBQ2pNLElBQXRCLEVBSEo7O0FBTUlPLFVBQUFBLEtBQUssQ0FBQ3AwRCxJQUFOLENBQVcyL0QsTUFBTSxDQUFDNUIsWUFBWSxDQUFDeUQsUUFBZCxDQUFqQixFQU5KOztBQVNJOWlFLFVBQUFBLE1BQU0sR0FBRyxJQUFUO0FBRUE7O0FBRUosYUFBS3EvRCxZQUFZLENBQUMwRCxXQUFsQjtBQUNJLGNBQUlDLFVBQVUsR0FBR3RCLFdBQVcsQ0FBQ1QsTUFBTSxDQUFDNUIsWUFBWSxDQUFDNEQsZ0JBQWQsQ0FBUCxDQUE1QjtBQUFBLGNBQ0lDLGFBQWEsR0FBR0YsVUFBVSxDQUFDaGpFLE1BQVgsSUFBcUJnakUsVUFBVSxDQUFDLENBQUQsQ0FEbkQ7QUFBQSxjQUVJRyxhQUFhLEdBQUdILFVBQVUsQ0FBQy9CLE1BQVgsSUFBcUIrQixVQUFVLENBQUMsQ0FBRCxDQUZuRDtBQUFBLGNBR0lJLFVBQVUsR0FBR0osVUFBVSxDQUFDSyxHQUFYLElBQWtCTCxVQUFVLENBQUMsQ0FBRCxDQUg3QztBQUFBLGNBSUkvdEQsR0FBRyxHQUFHbXVELFVBQVUsQ0FBQy9qRSxNQUpyQjtBQUFBLGNBS0l1SSxDQUFDLEdBQUcsQ0FMUjtBQUFBLGNBTUlnMUQsR0FOSjtBQUFBLGNBT0kwRyxFQUFFLEdBQUdkLFVBQVUsQ0FBQ0EsVUFBVSxDQUFDbmpFLE1BQVgsR0FBb0I0VixHQUFyQixDQVBuQixDQURKOztBQVVJMm5ELFVBQUFBLEdBQUcsR0FBR2orRCxXQUFOO0FBRUExQixVQUFBQSxJQUFJLENBQUNxbUUsRUFBTCxHQUFVQSxFQUFWOztBQUVBLGlCQUFPMTdELENBQUMsR0FBR3FOLEdBQVgsRUFBZ0JyTixDQUFDLEVBQWpCLEVBQXFCO0FBQ2pCM0ssWUFBQUEsSUFBSSxDQUFDLE9BQU9nWSxHQUFHLEdBQUdyTixDQUFiLENBQUQsQ0FBSixHQUF3QjQ2RCxVQUFVLENBQUNBLFVBQVUsQ0FBQ25qRSxNQUFYLEdBQW9CLENBQXBCLEdBQXdCdUksQ0FBekIsQ0FBbEM7QUFDSDs7QUFFRCxjQUFJdTdELGFBQUosRUFBbUI7QUFDZnZHLFlBQUFBLEdBQUcsR0FBR3VHLGFBQWEsQ0FBQ3BsRSxJQUFkLENBQW1CZCxJQUFuQixDQUFOO0FBQ0g7O0FBRUQsY0FBSTIvRCxHQUFHLEtBQUtqK0QsV0FBWixFQUF1QjtBQUNuQjJrRSxZQUFBQSxFQUFFLEdBQUcxRyxHQUFMO0FBQ0gsV0FGRCxNQUVPO0FBQ0gwRyxZQUFBQSxFQUFFLEdBQUdybUUsSUFBSSxDQUFDcW1FLEVBQVY7QUFDSDs7QUFFRDVOLFVBQUFBLEtBQUssR0FBR0EsS0FBSyxDQUFDbDNELEtBQU4sQ0FBWSxDQUFaLEVBQWUsQ0FBQyxDQUFELEdBQUt5VyxHQUFMLEdBQVcsQ0FBMUIsQ0FBUjtBQUNBdXRELFVBQUFBLFVBQVUsR0FBR0EsVUFBVSxDQUFDaGtFLEtBQVgsQ0FBaUIsQ0FBakIsRUFBb0IsQ0FBQyxDQUFELEdBQUt5VyxHQUF6QixDQUFiO0FBRUF5Z0QsVUFBQUEsS0FBSyxDQUFDcDBELElBQU4sQ0FBVzRoRSxhQUFYO0FBRUFWLFVBQUFBLFVBQVUsQ0FBQ2xoRSxJQUFYLENBQWdCZ2lFLEVBQWhCO0FBRUEsY0FBSUMsUUFBUSxHQUFHakIsS0FBSyxDQUFDNU0sS0FBSyxDQUFDQSxLQUFLLENBQUNyMkQsTUFBTixHQUFlLENBQWhCLENBQU4sQ0FBTCxDQUErQnEyRCxLQUFLLENBQUNBLEtBQUssQ0FBQ3IyRCxNQUFOLEdBQWUsQ0FBaEIsQ0FBcEMsQ0FBZjtBQUVBcTJELFVBQUFBLEtBQUssQ0FBQ3AwRCxJQUFOLENBQVdpaUUsUUFBWDtBQUVBOztBQUVKLGFBQUtsRSxZQUFZLENBQUNtRSxXQUFsQjtBQUNJLGlCQUFPRixFQUFQO0FBeERKO0FBMERIO0FBQ0osR0ExR0Q7O0FBMkdBLFNBQU9sRSxNQUFQO0FBQ0gsQ0E5cUNZLEVBQWI7O0FBK3FDbUM7QUFDL0J0aUUsRUFBQUEsaUJBQWlCc2lFLE1BQWpCO0FBQ0g7Ozs7Ozs7OztBQzdxQ0QsSUFBSWxCLElBQUksR0FBRzNnRSxjQUFYOztBQUNBLElBQUk2aEUsTUFBTSxHQUFHN2hFLGdCQUFiOztBQUVBLElBQUlrbUUsb0JBQW9CLEdBQUcsdUJBQTNCO0FBQUEsSUFDRUMsTUFBTSxHQUFHLEVBRFg7QUFBQSxJQUVFQyxZQUZGO0FBQUEsSUFHRUMsSUFBSSxHQUFHLENBSFQ7QUFBQSxJQUlFQyxlQUFlLEdBQUcsRUFKcEI7QUFBQSxJQUtFQyxPQUFPLEdBQUcsVUFBVXY4RCxFQUFWLEVBQWNuRixJQUFkLEVBQW9CO0FBQzVCLE1BQUl1aEUsWUFBSixFQUFrQjtBQUNoQixXQUFPekYsSUFBSSxDQUFDSyxhQUFMLENBQW1CaDNELEVBQW5CLEVBQXVCbkYsSUFBdkIsQ0FBUDtBQUNELEdBRkQsTUFFTztBQUNMLFdBQU84N0QsSUFBSSxDQUFDZSxJQUFMLENBQVUxM0QsRUFBVixFQUFjbkYsSUFBZCxDQUFQO0FBQ0Q7QUFDRixDQVhIO0FBQUEsSUFZRXU4RCxjQUFjLEdBQUdULElBQUksQ0FBQ1MsY0FaeEI7QUFBQSxJQWFFRCxLQUFLLEdBQUdSLElBQUksQ0FBQ1EsS0FiZjtBQUFBLElBY0VxRixPQUFPLEdBQUcsbUNBZFo7OztBQWlCQSxJQUFJdHpCLFFBQVEsR0FBRyx1Q0FBZjtBQUFBLElBQ0V1ekIsVUFBVSxHQUFHLFVBQVVuN0IsQ0FBVixFQUFhbzdCLE9BQWIsRUFBc0I7QUFDakMsTUFBSUMsSUFBSSxHQUFHLE9BQU9ELE9BQVAsR0FBaUIsT0FBNUIsQ0FEaUM7O0FBR2pDLFNBQU9oeEMsS0FBSyxDQUFDaXhDLElBQUQsQ0FBTCxHQUNMRCxPQURLO0FBR0xDLEVBQUFBLElBQUksR0FBRyxDQUFQLEdBQ0Voa0UsTUFBTSxDQUFDeWUsWUFBUCxDQUFvQnVsRCxJQUFJLEdBQUcsT0FBM0IsQ0FERjtBQUdFaGtFLEVBQUFBLE1BQU0sQ0FBQ3llLFlBQVAsQ0FBb0J1bEQsSUFBSSxJQUFJLEVBQVIsR0FBYSxNQUFqQyxFQUF5Q0EsSUFBSSxHQUFHLEtBQVAsR0FBZSxNQUF4RCxDQU5KO0FBT0QsQ0FYSDs7QUFhQSxJQUFJQyxTQUFKO0FBRUEsSUFBSUMsWUFBWSxHQUFHO0FBQ2pCLGVBQWEsVUFBVTc4RCxFQUFWLEVBQWM0NkQsS0FBZCxFQUFxQjtBQUNoQyxRQUFJa0MsRUFBRSxHQUFHQyxLQUFLLENBQUNuQyxLQUFELENBQWQ7QUFBQSxRQUNFbC9ELENBQUMsR0FBR29oRSxFQUFFLENBQUNwaEUsQ0FEVDtBQUFBLFFBRUU0SixDQUFDLEdBQUd3M0QsRUFBRSxDQUFDeDNELENBRlQ7O0FBR0EsUUFBSTVKLENBQUMsS0FBSyxDQUFOLElBQVc0SixDQUFDLEtBQUssQ0FBckIsRUFBd0I7QUFDdEIsYUFBTyxDQUFQO0FBQ0Q7O0FBQ0QsUUFBSS9GLEtBQUssR0FBRyxDQUFaO0FBQUEsUUFDRW95QixNQUFNLEdBQUczeEIsRUFBRSxDQUFDazNELFVBRGQ7O0FBRUEsUUFBSXZsQyxNQUFKLEVBQVk7QUFDVixVQUFJZ2tDLFVBQVUsR0FBR2hrQyxNQUFNLENBQUNna0MsVUFBeEI7QUFBQSxVQUNFdm1ELEtBQUssR0FBRyxDQURWO0FBQUEsVUFFRTR0RCxLQUZGO0FBQUEsVUFHRTNILEdBSEY7QUFBQSxVQUlFM25ELEdBQUcsR0FBR2lvRCxVQUFVLENBQUM3OUQsTUFKbkI7O0FBS0EsYUFBT3NYLEtBQUssR0FBRzFCLEdBQWYsRUFBb0IwQixLQUFLLEVBQXpCLEVBQTZCO0FBQzNCNHRELFFBQUFBLEtBQUssR0FBR3JILFVBQVUsQ0FBQ3ZtRCxLQUFELENBQWxCOztBQUNBLFlBQUk0dEQsS0FBSyxDQUFDbkgsUUFBTixLQUFtQixDQUF2QixFQUEwQjtBQUN4QnQyRCxVQUFBQSxLQUFLO0FBQ0w4MUQsVUFBQUEsR0FBRyxHQUFHNEgsY0FBYyxDQUFDMTlELEtBQUQsRUFBUTdELENBQVIsRUFBVzRKLENBQVgsRUFBYzAzRCxLQUFLLEtBQUtoOUQsRUFBeEIsQ0FBcEI7O0FBQ0EsY0FBSXExRCxHQUFHLEtBQUtqK0QsU0FBWixFQUF1QjtBQUNyQixtQkFBT2krRCxHQUFQO0FBQ0Q7QUFDRjtBQUNGO0FBQ0Y7O0FBQ0QsV0FBTyxDQUFQO0FBQ0QsR0E1QmdCO0FBNkJqQixvQkFBa0IsVUFBVXIxRCxFQUFWLEVBQWM0NkQsS0FBZCxFQUFxQjtBQUNyQyxRQUFJa0MsRUFBRSxHQUFHQyxLQUFLLENBQUNuQyxLQUFELENBQWQ7QUFBQSxRQUNFbC9ELENBQUMsR0FBR29oRSxFQUFFLENBQUNwaEUsQ0FEVDtBQUFBLFFBRUU0SixDQUFDLEdBQUd3M0QsRUFBRSxDQUFDeDNELENBRlQ7O0FBR0EsUUFBSTVKLENBQUMsS0FBSyxDQUFOLElBQVc0SixDQUFDLEtBQUssQ0FBckIsRUFBd0I7QUFDdEIsYUFBTyxDQUFQO0FBQ0Q7O0FBQ0QsUUFBSS9GLEtBQUssR0FBRyxDQUFaO0FBQUEsUUFDRW95QixNQUFNLEdBQUczeEIsRUFBRSxDQUFDazNELFVBRGQ7O0FBRUEsUUFBSXZsQyxNQUFKLEVBQVk7QUFDVixVQUFJZ2tDLFVBQVUsR0FBR2hrQyxNQUFNLENBQUNna0MsVUFBeEI7QUFBQSxVQUNFam9ELEdBQUcsR0FBR2lvRCxVQUFVLENBQUM3OUQsTUFEbkI7QUFBQSxVQUVFc1gsS0FBSyxHQUFHMUIsR0FBRyxHQUFHLENBRmhCO0FBQUEsVUFHRXN2RCxLQUhGO0FBQUEsVUFJRTNILEdBSkY7O0FBS0EsYUFBT2ptRCxLQUFLLElBQUksQ0FBaEIsRUFBbUJBLEtBQUssRUFBeEIsRUFBNEI7QUFDMUI0dEQsUUFBQUEsS0FBSyxHQUFHckgsVUFBVSxDQUFDdm1ELEtBQUQsQ0FBbEI7O0FBQ0EsWUFBSTR0RCxLQUFLLENBQUNuSCxRQUFOLEtBQW1CLENBQXZCLEVBQTBCO0FBQ3hCdDJELFVBQUFBLEtBQUs7QUFDTDgxRCxVQUFBQSxHQUFHLEdBQUc0SCxjQUFjLENBQUMxOUQsS0FBRCxFQUFRN0QsQ0FBUixFQUFXNEosQ0FBWCxFQUFjMDNELEtBQUssS0FBS2g5RCxFQUF4QixDQUFwQjs7QUFDQSxjQUFJcTFELEdBQUcsS0FBS2orRCxTQUFaLEVBQXVCO0FBQ3JCLG1CQUFPaStELEdBQVA7QUFDRDtBQUNGO0FBQ0Y7QUFDRjs7QUFDRCxXQUFPLENBQVA7QUFDRCxHQXhEZ0I7QUF5RGpCLGlCQUFlLFVBQVVyMUQsRUFBVixFQUFjNDZELEtBQWQsRUFBcUI7QUFDbEMsUUFBSWtDLEVBQUUsR0FBR0MsS0FBSyxDQUFDbkMsS0FBRCxDQUFkO0FBQUEsUUFDRWwvRCxDQUFDLEdBQUdvaEUsRUFBRSxDQUFDcGhFLENBRFQ7QUFBQSxRQUVFNEosQ0FBQyxHQUFHdzNELEVBQUUsQ0FBQ3gzRCxDQUZUOztBQUdBLFFBQUk1SixDQUFDLEtBQUssQ0FBTixJQUFXNEosQ0FBQyxLQUFLLENBQXJCLEVBQXdCO0FBQ3RCLGFBQU8sQ0FBUDtBQUNEOztBQUNELFFBQUkvRixLQUFLLEdBQUcsQ0FBWjtBQUFBLFFBQ0VveUIsTUFBTSxHQUFHM3hCLEVBQUUsQ0FBQ2szRCxVQURkOztBQUVBLFFBQUl2bEMsTUFBSixFQUFZO0FBQ1YsVUFBSWdrQyxVQUFVLEdBQUdoa0MsTUFBTSxDQUFDZ2tDLFVBQXhCO0FBQUEsVUFDRXVILE1BQU0sR0FBR2w5RCxFQUFFLENBQUNtOUQsT0FEZDtBQUFBLFVBRUUvdEQsS0FBSyxHQUFHLENBRlY7QUFBQSxVQUdFNHRELEtBSEY7QUFBQSxVQUlFM0gsR0FKRjtBQUFBLFVBS0UzbkQsR0FBRyxHQUFHaW9ELFVBQVUsQ0FBQzc5RCxNQUxuQjs7QUFNQSxhQUFPc1gsS0FBSyxHQUFHMUIsR0FBZixFQUFvQjBCLEtBQUssRUFBekIsRUFBNkI7QUFDM0I0dEQsUUFBQUEsS0FBSyxHQUFHckgsVUFBVSxDQUFDdm1ELEtBQUQsQ0FBbEI7O0FBQ0EsWUFBSTR0RCxLQUFLLENBQUNHLE9BQU4sS0FBa0JELE1BQXRCLEVBQThCO0FBQzVCMzlELFVBQUFBLEtBQUs7QUFDTDgxRCxVQUFBQSxHQUFHLEdBQUc0SCxjQUFjLENBQUMxOUQsS0FBRCxFQUFRN0QsQ0FBUixFQUFXNEosQ0FBWCxFQUFjMDNELEtBQUssS0FBS2g5RCxFQUF4QixDQUFwQjs7QUFDQSxjQUFJcTFELEdBQUcsS0FBS2orRCxTQUFaLEVBQXVCO0FBQ3JCLG1CQUFPaStELEdBQVA7QUFDRDtBQUNGO0FBQ0Y7QUFDRjs7QUFDRCxXQUFPLENBQVA7QUFDRCxHQXJGZ0I7QUFzRmpCLHNCQUFvQixVQUFVcjFELEVBQVYsRUFBYzQ2RCxLQUFkLEVBQXFCO0FBQ3ZDLFFBQUlrQyxFQUFFLEdBQUdDLEtBQUssQ0FBQ25DLEtBQUQsQ0FBZDtBQUFBLFFBQ0VsL0QsQ0FBQyxHQUFHb2hFLEVBQUUsQ0FBQ3BoRSxDQURUO0FBQUEsUUFFRTRKLENBQUMsR0FBR3czRCxFQUFFLENBQUN4M0QsQ0FGVDs7QUFHQSxRQUFJNUosQ0FBQyxLQUFLLENBQU4sSUFBVzRKLENBQUMsS0FBSyxDQUFyQixFQUF3QjtBQUN0QixhQUFPLENBQVA7QUFDRDs7QUFDRCxRQUFJL0YsS0FBSyxHQUFHLENBQVo7QUFBQSxRQUNFb3lCLE1BQU0sR0FBRzN4QixFQUFFLENBQUNrM0QsVUFEZDs7QUFFQSxRQUFJdmxDLE1BQUosRUFBWTtBQUNWLFVBQUlna0MsVUFBVSxHQUFHaGtDLE1BQU0sQ0FBQ2drQyxVQUF4QjtBQUFBLFVBQ0Vqb0QsR0FBRyxHQUFHaW9ELFVBQVUsQ0FBQzc5RCxNQURuQjtBQUFBLFVBRUVvbEUsTUFBTSxHQUFHbDlELEVBQUUsQ0FBQ205RCxPQUZkO0FBQUEsVUFHRS90RCxLQUFLLEdBQUcxQixHQUFHLEdBQUcsQ0FIaEI7QUFBQSxVQUlFc3ZELEtBSkY7QUFBQSxVQUtFM0gsR0FMRjs7QUFNQSxhQUFPam1ELEtBQUssSUFBSSxDQUFoQixFQUFtQkEsS0FBSyxFQUF4QixFQUE0QjtBQUMxQjR0RCxRQUFBQSxLQUFLLEdBQUdySCxVQUFVLENBQUN2bUQsS0FBRCxDQUFsQjs7QUFDQSxZQUFJNHRELEtBQUssQ0FBQ0csT0FBTixLQUFrQkQsTUFBdEIsRUFBOEI7QUFDNUIzOUQsVUFBQUEsS0FBSztBQUNMODFELFVBQUFBLEdBQUcsR0FBRzRILGNBQWMsQ0FBQzE5RCxLQUFELEVBQVE3RCxDQUFSLEVBQVc0SixDQUFYLEVBQWMwM0QsS0FBSyxLQUFLaDlELEVBQXhCLENBQXBCOztBQUNBLGNBQUlxMUQsR0FBRyxLQUFLaitELFNBQVosRUFBdUI7QUFDckIsbUJBQU9pK0QsR0FBUDtBQUNEO0FBQ0Y7QUFDRjtBQUNGOztBQUNELFdBQU8sQ0FBUDtBQUNELEdBbEhnQjtBQW1IakIrSCxFQUFBQSxJQUFJLEVBQUUsVUFBVXA5RCxFQUFWLEVBQWNvOUQsSUFBZCxFQUFvQjtBQUN4QixRQUFJQyxNQUFKO0FBQ0FELElBQUFBLElBQUksR0FBR25ELFFBQVEsQ0FBQ21ELElBQUksQ0FBQzU3RCxXQUFMLEVBQUQsQ0FBZjs7QUFDQSxPQUFHO0FBQ0QsVUFBSzY3RCxNQUFNLEdBQUlqQixZQUFZLEdBQ3pCcDhELEVBQUUsQ0FBQ3cxRCxZQUFILENBQWdCLFVBQWhCLEtBQStCeDFELEVBQUUsQ0FBQ3cxRCxZQUFILENBQWdCLE1BQWhCLENBRE4sR0FFdkJ4MUQsRUFBRSxDQUFDbzlELElBRlAsRUFFZTtBQUNiQyxRQUFBQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQzc3RCxXQUFQLEVBQVQ7QUFDQSxlQUFPNjdELE1BQU0sS0FBS0QsSUFBWCxJQUFtQkMsTUFBTSxDQUFDbDlELE9BQVAsQ0FBZWk5RCxJQUFJLEdBQUcsR0FBdEIsTUFBK0IsQ0FBekQ7QUFDRDtBQUNGLEtBUEQsUUFPUyxDQUFDcDlELEVBQUUsR0FBR0EsRUFBRSxDQUFDazNELFVBQVQsS0FBd0JsM0QsRUFBRSxDQUFDNjFELFFBQUgsS0FBZ0IsQ0FQakQ7O0FBUUEsV0FBTyxLQUFQO0FBQ0QsR0EvSGdCO0FBZ0lqQnlILEVBQUFBLEdBQUcsRUFBRSxVQUFVdDlELEVBQVYsRUFBY3U5RCxXQUFkLEVBQTJCO0FBQzlCLFdBQU8sQ0FBQ1gsU0FBUyxDQUFDVyxXQUFXLENBQUNuMUMsQ0FBYixDQUFULENBQXlCcG9CLEVBQXpCLEVBQTZCdTlELFdBQVcsQ0FBQzFtRSxLQUF6QyxDQUFSO0FBQ0Q7QUFsSWdCLENBQW5CO0FBcUlBLElBQUkybUUsZUFBZSxHQUFHO0FBQ3BCLzNELEVBQUFBLEtBQUssRUFBRSxVQUFVekYsRUFBVixFQUFjO0FBQ25CLFFBQUkyMUQsVUFBVSxHQUFHMzFELEVBQUUsQ0FBQzIxRCxVQUFwQjtBQUFBLFFBQ0VwMkQsS0FBSyxHQUFHLENBRFY7QUFBQSxRQUVFbU8sR0FBRyxHQUFHaW9ELFVBQVUsQ0FBQzc5RCxNQUFYLEdBQW9CLENBRjVCO0FBQUEsUUFHRWtsRSxLQUhGO0FBQUEsUUFJRW5ILFFBSkY7O0FBS0EsV0FBT3QyRCxLQUFLLEdBQUdtTyxHQUFmLEVBQW9Cbk8sS0FBSyxFQUF6QixFQUE2QjtBQUMzQnk5RCxNQUFBQSxLQUFLLEdBQUdySCxVQUFVLENBQUNwMkQsS0FBRCxDQUFsQjtBQUNBczJELE1BQUFBLFFBQVEsR0FBR21ILEtBQUssQ0FBQ25ILFFBQWpCLENBRjJCO0FBSTNCO0FBQ0E7O0FBQ0EsVUFBSUEsUUFBUSxLQUFLLENBQWIsSUFBa0JBLFFBQVEsS0FBSyxDQUEvQixJQUFvQ0EsUUFBUSxLQUFLLENBQWpELElBQXNEQSxRQUFRLEtBQUssQ0FBdkUsRUFBMEU7QUFDeEUsZUFBTyxDQUFQO0FBQ0Q7QUFDRjs7QUFDRCxXQUFPLENBQVA7QUFDRCxHQWxCbUI7QUFtQnBCbG1CLEVBQUFBLElBQUksRUFBRSxVQUFVM3ZDLEVBQVYsRUFBYztBQUNsQixRQUFJQSxFQUFFLENBQUM2MUQsUUFBSCxLQUFnQixDQUFwQixFQUF1QjtBQUNyQixhQUFPLElBQVA7QUFDRDs7QUFDRCxXQUFPNzFELEVBQUUsQ0FBQzgxRCxhQUFILElBQ0w5MUQsRUFBRSxLQUFLQSxFQUFFLENBQUM4MUQsYUFBSCxDQUFpQlUsZUFEMUI7QUFFRCxHQXpCbUI7QUEwQnBCLGlCQUFlLFVBQVV4MkQsRUFBVixFQUFjO0FBQzNCLFdBQU82OEQsWUFBWSxDQUFDLFdBQUQsQ0FBWixDQUEwQjc4RCxFQUExQixFQUE4QixDQUE5QixDQUFQO0FBQ0QsR0E1Qm1CO0FBNkJwQixnQkFBYyxVQUFVQSxFQUFWLEVBQWM7QUFDMUIsV0FBTzY4RCxZQUFZLENBQUMsZ0JBQUQsQ0FBWixDQUErQjc4RCxFQUEvQixFQUFtQyxDQUFuQyxDQUFQO0FBQ0QsR0EvQm1CO0FBZ0NwQixtQkFBaUIsVUFBVUEsRUFBVixFQUFjO0FBQzdCLFdBQU82OEQsWUFBWSxDQUFDLGFBQUQsQ0FBWixDQUE0Qjc4RCxFQUE1QixFQUFnQyxDQUFoQyxDQUFQO0FBQ0QsR0FsQ21CO0FBbUNwQixrQkFBZ0IsVUFBVUEsRUFBVixFQUFjO0FBQzVCLFdBQU82OEQsWUFBWSxDQUFDLGtCQUFELENBQVosQ0FBaUM3OEQsRUFBakMsRUFBcUMsQ0FBckMsQ0FBUDtBQUNELEdBckNtQjtBQXNDcEIsZ0JBQWMsVUFBVUEsRUFBVixFQUFjO0FBQzFCLFdBQU93OUQsZUFBZSxDQUFDLGFBQUQsQ0FBZixDQUErQng5RCxFQUEvQixLQUNMdzlELGVBQWUsQ0FBQyxZQUFELENBQWYsQ0FBOEJ4OUQsRUFBOUIsQ0FERjtBQUVELEdBekNtQjtBQTBDcEIsa0JBQWdCLFVBQVVBLEVBQVYsRUFBYztBQUM1QixXQUFPdzlELGVBQWUsQ0FBQyxlQUFELENBQWYsQ0FBaUN4OUQsRUFBakMsS0FDTHc5RCxlQUFlLENBQUMsY0FBRCxDQUFmLENBQWdDeDlELEVBQWhDLENBREY7QUFFRCxHQTdDbUI7QUE4Q3BCeTlELEVBQUFBLEtBQUssRUFBRSxVQUFVejlELEVBQVYsRUFBYztBQUNuQixRQUFJNDBELEdBQUcsR0FBRzUwRCxFQUFFLENBQUM4MUQsYUFBYjtBQUNBLFdBQU9sQixHQUFHLElBQUk1MEQsRUFBRSxLQUFLNDBELEdBQUcsQ0FBQzhJLGFBQWxCLEtBQ0osQ0FBQzlJLEdBQUcsQ0FBQytJLFFBQUwsSUFBaUIvSSxHQUFHLENBQUMrSSxRQUFKLEVBRGIsS0FDZ0MsQ0FBQyxFQUFFMzlELEVBQUUsQ0FBQ3hDLElBQUgsSUFBV3dDLEVBQUUsQ0FBQzY4QyxJQUFkLElBQXNCNzhDLEVBQUUsQ0FBQ3UxRCxRQUFILElBQWUsQ0FBdkMsQ0FEeEM7QUFFRCxHQWxEbUI7QUFtRHBCejBELEVBQUFBLE1BQU0sRUFBRSxVQUFVZCxFQUFWLEVBQWM7QUFDcEIsUUFBSWc5QyxJQUFJLEdBQUd4dEIsUUFBUSxDQUFDd3RCLElBQXBCO0FBQ0EsV0FBT0EsSUFBSSxJQUFJQSxJQUFJLENBQUMvbEQsS0FBTCxDQUFXLENBQVgsTUFBa0JzbEUsT0FBTyxDQUFDdjhELEVBQUQsRUFBSyxJQUFMLENBQXhDO0FBQ0QsR0F0RG1CO0FBdURwQjQ5RCxFQUFBQSxPQUFPLEVBQUUsVUFBVTU5RCxFQUFWLEVBQWM7QUFDckIsV0FBTyxDQUFDQSxFQUFFLENBQUM2OUQsUUFBWDtBQUNELEdBekRtQjtBQTBEcEJBLEVBQUFBLFFBQVEsRUFBRSxVQUFVNzlELEVBQVYsRUFBYztBQUN0QixXQUFPQSxFQUFFLENBQUM2OUQsUUFBVjtBQUNELEdBNURtQjtBQTZEcEJDLEVBQUFBLE9BQU8sRUFBRSxVQUFVOTlELEVBQVYsRUFBYztBQUNyQixRQUFJMnpELFFBQVEsR0FBRzN6RCxFQUFFLENBQUMyekQsUUFBSCxDQUFZbnlELFdBQVosRUFBZjtBQUNBLFdBQVFteUQsUUFBUSxLQUFLLE9BQWIsSUFBd0IzekQsRUFBRSxDQUFDODlELE9BQTVCLElBQ0puSyxRQUFRLEtBQUssUUFBYixJQUF5QjN6RCxFQUFFLENBQUMydEMsUUFEL0I7QUFFRDtBQWpFbUIsQ0FBdEI7QUFvRUEsSUFBSW93QixhQUFhLEdBQUc7QUFDbEIsUUFBTSxVQUFVQyxPQUFWLEVBQW1Cbm5FLEtBQW5CLEVBQTBCO0FBQzlCLFFBQUksQ0FBQ0EsS0FBRCxJQUFVQSxLQUFLLENBQUNzSixPQUFOLENBQWMsR0FBZCxJQUFxQixDQUFDLENBQXBDLEVBQXVDO0FBQ3JDLGFBQU8sQ0FBUDtBQUNEOztBQUNELFdBQU8sQ0FBQyxNQUFNNjlELE9BQU4sR0FBZ0IsR0FBakIsRUFBc0I3OUQsT0FBdEIsQ0FBOEIsTUFBTXRKLEtBQU4sR0FBYyxHQUE1QyxNQUFxRCxDQUFDLENBQTdEO0FBQ0QsR0FOaUI7QUFPbEIsUUFBTSxVQUFVbW5FLE9BQVYsRUFBbUJubkUsS0FBbkIsRUFBMEI7QUFDOUIsV0FBTyxDQUFDLE1BQU1tbkUsT0FBUCxFQUFnQjc5RCxPQUFoQixDQUF3QixNQUFNdEosS0FBTixHQUFjLEdBQXRDLE1BQStDLENBQUMsQ0FBdkQ7QUFDRCxHQVRpQjtBQVVsQixRQUFNLFVBQVVtbkUsT0FBVixFQUFtQm5uRSxLQUFuQixFQUEwQjtBQUM5QixXQUFPQSxLQUFLLElBQUk4L0QsSUFBSSxDQUFDL3lCLFVBQUwsQ0FBZ0JvNkIsT0FBaEIsRUFBeUJubkUsS0FBekIsQ0FBaEI7QUFDRCxHQVppQjtBQWFsQixRQUFNLFVBQVVtbkUsT0FBVixFQUFtQm5uRSxLQUFuQixFQUEwQjtBQUM5QixXQUFPQSxLQUFLLElBQUk4L0QsSUFBSSxDQUFDcDVCLFFBQUwsQ0FBY3lnQyxPQUFkLEVBQXVCbm5FLEtBQXZCLENBQWhCO0FBQ0QsR0FmaUI7QUFnQmxCLFFBQU0sVUFBVW1uRSxPQUFWLEVBQW1Cbm5FLEtBQW5CLEVBQTBCO0FBQzlCLFdBQU9BLEtBQUssSUFBSW1uRSxPQUFPLENBQUM3OUQsT0FBUixDQUFnQnRKLEtBQWhCLE1BQTJCLENBQUMsQ0FBNUM7QUFDRCxHQWxCaUI7QUFtQmxCLE9BQUssVUFBVW1uRSxPQUFWLEVBQW1Cbm5FLEtBQW5CLEVBQTBCO0FBQzdCLFdBQU9tbkUsT0FBTyxLQUFLbm5FLEtBQW5CO0FBQ0Q7QUFyQmlCLENBQXBCO0FBd0JBLElBQUlvbkUsWUFBWSxHQUFHO0FBQ2pCLE9BQUs7QUFDSEMsSUFBQUEsR0FBRyxFQUFFLFlBREY7QUFFSEMsSUFBQUEsU0FBUyxFQUFFO0FBRlIsR0FEWTtBQUtqQixPQUFLO0FBQ0hELElBQUFBLEdBQUcsRUFBRTtBQURGLEdBTFk7QUFRakIsT0FBSztBQUNIQSxJQUFBQSxHQUFHLEVBQUUsaUJBREY7QUFFSEMsSUFBQUEsU0FBUyxFQUFFO0FBRlIsR0FSWTtBQVlqQixPQUFLO0FBQ0hELElBQUFBLEdBQUcsRUFBRTtBQURGO0FBWlksQ0FBbkI7QUFpQkF0QixTQUFTLEdBQUc7QUFDVmw2RCxFQUFBQSxHQUFHLEVBQUV5MEQsS0FESztBQUVWRSxFQUFBQSxHQUFHLEVBQUVELGNBRks7QUFHVi84RCxFQUFBQSxFQUFFLEVBQUUsVUFBVTJGLEVBQVYsRUFBY25KLEtBQWQsRUFBcUI7QUFDdkIsV0FBTzBsRSxPQUFPLENBQUN2OEQsRUFBRCxFQUFLLElBQUwsQ0FBUCxLQUFzQm5KLEtBQTdCO0FBQ0QsR0FMUztBQU1WdW5FLEVBQUFBLE1BQU0sRUFBRSxVQUFVcCtELEVBQVYsRUFBY25KLEtBQWQsRUFBcUI7QUFDM0IsUUFBSWdFLElBQUksR0FBR2hFLEtBQUssQ0FBQzZqRSxLQUFqQjs7QUFDQSxRQUFJLENBQUMwQixZQUFMLEVBQW1CO0FBQ2pCdmhFLE1BQUFBLElBQUksR0FBR0EsSUFBSSxDQUFDMkcsV0FBTCxFQUFQO0FBQ0Q7O0FBQ0QsUUFBSXc4RCxPQUFPLEdBQUd6QixPQUFPLENBQUN2OEQsRUFBRCxFQUFLbkYsSUFBTCxDQUFyQjtBQUNBLFFBQUl2QyxLQUFLLEdBQUd6QixLQUFLLENBQUN5QixLQUFsQjs7QUFDQSxRQUFJLENBQUNBLEtBQUQsSUFBVTBsRSxPQUFPLEtBQUs1bUUsU0FBMUIsRUFBcUM7QUFDbkMsYUFBTyxDQUFQO0FBQ0QsS0FGRCxNQUVPLElBQUlrQixLQUFKLEVBQVc7QUFDaEIsVUFBSTBsRSxPQUFPLEtBQUs1bUUsU0FBaEIsRUFBMkI7QUFDekIsZUFBTyxDQUFQO0FBQ0Q7O0FBQ0QsVUFBSWluRSxPQUFPLEdBQUdOLGFBQWEsQ0FBQ3psRSxLQUFELENBQTNCOztBQUNBLFVBQUkrbEUsT0FBSixFQUFhO0FBQ1gsZUFBT0EsT0FBTyxDQUFDTCxPQUFPLEdBQUcsRUFBWCxFQUFlbm5FLEtBQUssQ0FBQ0EsS0FBTixHQUFjLEVBQTdCLENBQWQ7QUFDRDtBQUNGOztBQUNELFdBQU8sQ0FBUDtBQUNELEdBekJTO0FBMEJWeW5FLEVBQUFBLE1BQU0sRUFBRSxVQUFVdCtELEVBQVYsRUFBY25KLEtBQWQsRUFBcUI7QUFDM0IsUUFBSTJDLEVBQUosRUFBUStrRSxLQUFSLEVBQWU3RCxLQUFmOztBQUNBLFFBQUs2RCxLQUFLLEdBQUcxbkUsS0FBSyxDQUFDMkMsRUFBbkIsRUFBd0I7QUFDdEIsVUFBSSxFQUFFQSxFQUFFLEdBQUdxakUsWUFBWSxDQUFDMEIsS0FBRCxDQUFuQixDQUFKLEVBQWlDO0FBQy9CLGNBQU0sSUFBSTdqQyxXQUFKLENBQWdCLHVDQUF1QzZqQyxLQUF2RCxDQUFOO0FBQ0Q7O0FBQ0QsYUFBTy9rRSxFQUFFLENBQUN3RyxFQUFELEVBQUtuSixLQUFLLENBQUMrakUsS0FBWCxDQUFUO0FBQ0Q7O0FBQ0QsUUFBS0YsS0FBSyxHQUFHN2pFLEtBQUssQ0FBQzZqRSxLQUFuQixFQUEyQjtBQUN6QixVQUFJLENBQUM4QyxlQUFlLENBQUM5QyxLQUFELENBQXBCLEVBQTZCO0FBQzNCLGNBQU0sSUFBSWhnQyxXQUFKLENBQWdCLHVDQUF1Q2dnQyxLQUF2RCxDQUFOO0FBQ0Q7O0FBQ0QsYUFBTzhDLGVBQWUsQ0FBQzlDLEtBQUQsQ0FBZixDQUF1QjE2RCxFQUF2QixDQUFQO0FBQ0Q7O0FBQ0QsV0FBTyxDQUFQO0FBQ0Q7QUF6Q1MsQ0FBWjs7QUE0Q0EsU0FBU2k2RCxRQUFULENBQWtCeDVDLEdBQWxCLEVBQXVCO0FBQ3JCLFNBQU9BLEdBQUcsQ0FBQzNoQixPQUFKLENBQVlvcUMsUUFBWixFQUFzQnV6QixVQUF0QixDQUFQO0FBQ0Q7O0FBRUQ1RSxNQUFNLENBQUNnQyxLQUFQLENBQWFDLEVBQWIsR0FBa0I7QUFDaEJ0dkMsRUFBQUEsSUFBSSxFQUFFbXNDLElBQUksQ0FBQ25zQyxJQURLO0FBRWhCeXZDLEVBQUFBLFFBQVEsRUFBRUEsUUFGTTtBQUdoQkMsRUFBQUEsV0FBVyxFQUFFLFVBQVV6NUMsR0FBVixFQUFlO0FBQzFCLFdBQU8sS0FBS3c1QyxRQUFMLENBQWN4NUMsR0FBRyxDQUFDeHBCLEtBQUosQ0FBVSxDQUFWLEVBQWEsQ0FBQyxDQUFkLENBQWQsQ0FBUDtBQUNEO0FBTGUsQ0FBbEI7O0FBUUEsU0FBU3VuRSxXQUFULEdBQXVCO0FBQ3JCbEMsRUFBQUEsZUFBZSxHQUFHLEVBQWxCO0FBQ0Q7O0FBRUQsU0FBUzRCLEdBQVQsQ0FBYWwrRCxFQUFiLEVBQWlCeStELFNBQWpCLEVBQTRCO0FBQzFCLEtBQUc7QUFDRHorRCxJQUFBQSxFQUFFLEdBQUdBLEVBQUUsQ0FBQ3krRCxTQUFELENBQVA7QUFDRCxHQUZELFFBRVN6K0QsRUFBRSxJQUFJQSxFQUFFLENBQUM2MUQsUUFBSCxLQUFnQixDQUYvQjs7QUFHQSxTQUFPNzFELEVBQVA7QUFDRDs7QUFFRCxTQUFTKzhELEtBQVQsQ0FBZW5DLEtBQWYsRUFBc0I7QUFDcEIsTUFBSWwvRCxDQUFDLEdBQUcsQ0FBUjtBQUFBLE1BQ0VwRCxLQURGO0FBQUEsTUFFRWdOLENBQUMsR0FBRyxDQUZOOztBQUdBLE1BQUksT0FBT3MxRCxLQUFQLEtBQWlCLFFBQXJCLEVBQStCO0FBQzdCdDFELElBQUFBLENBQUMsR0FBR3MxRCxLQUFKO0FBQ0QsR0FGRCxNQUVPLElBQUlBLEtBQUssS0FBSyxLQUFkLEVBQXFCO0FBQzFCbC9ELElBQUFBLENBQUMsR0FBRyxDQUFKO0FBQ0E0SixJQUFBQSxDQUFDLEdBQUcsQ0FBSjtBQUNELEdBSE0sTUFHQSxJQUFJczFELEtBQUssS0FBSyxNQUFkLEVBQXNCO0FBQzNCbC9ELElBQUFBLENBQUMsR0FBRyxDQUFKO0FBQ0E0SixJQUFBQSxDQUFDLEdBQUcsQ0FBSjtBQUNELEdBSE0sTUFHQSxJQUFLaE4sS0FBSyxHQUFHc2lFLEtBQUssQ0FBQzk3RCxPQUFOLENBQWMsS0FBZCxFQUFxQixFQUFyQixFQUF5QnhHLEtBQXpCLENBQStCa2tFLE9BQS9CLENBQWIsRUFBdUQ7QUFDNUQsUUFBSWxrRSxLQUFLLENBQUMsQ0FBRCxDQUFULEVBQWM7QUFDWm9ELE1BQUFBLENBQUMsR0FBRzB2QixRQUFRLENBQUM5eUIsS0FBSyxDQUFDLENBQUQsQ0FBTixFQUFXLEVBQVgsQ0FBWjs7QUFDQSxVQUFJb3pCLEtBQUssQ0FBQ2h3QixDQUFELENBQVQsRUFBYztBQUNaLFlBQUlwRCxLQUFLLENBQUMsQ0FBRCxDQUFMLEtBQWEsR0FBakIsRUFBc0I7QUFDcEJvRCxVQUFBQSxDQUFDLEdBQUcsQ0FBQyxDQUFMO0FBQ0QsU0FGRCxNQUVPO0FBQ0xBLFVBQUFBLENBQUMsR0FBRyxDQUFKO0FBQ0Q7QUFDRjtBQUNGLEtBVEQsTUFTTztBQUNMQSxNQUFBQSxDQUFDLEdBQUcsQ0FBSjtBQUNEOztBQUNENEosSUFBQUEsQ0FBQyxHQUFHOGxCLFFBQVEsQ0FBQzl5QixLQUFLLENBQUMsQ0FBRCxDQUFOLEVBQVcsRUFBWCxDQUFSLElBQTBCLENBQTlCO0FBQ0Q7O0FBQ0QsU0FBTztBQUNMb0QsSUFBQUEsQ0FBQyxFQUFFQSxDQURFO0FBRUw0SixJQUFBQSxDQUFDLEVBQUVBO0FBRkUsR0FBUDtBQUlEOztBQUVELFNBQVMyM0QsY0FBVCxDQUF3QjE5RCxLQUF4QixFQUErQjdELENBQS9CLEVBQWtDNEosQ0FBbEMsRUFBcUNvNUQsRUFBckMsRUFBeUM7QUFDdkMsTUFBSWhqRSxDQUFDLEtBQUssQ0FBVixFQUFhO0FBQ1gsUUFBSTZELEtBQUssS0FBSytGLENBQWQsRUFBaUI7QUFDZixhQUFPbzVELEVBQVA7QUFDRDtBQUNGLEdBSkQsTUFJTztBQUNMLFFBQUksQ0FBQ24vRCxLQUFLLEdBQUcrRixDQUFULElBQWM1SixDQUFkLElBQW1CLENBQW5CLElBQXdCLENBQUM2RCxLQUFLLEdBQUcrRixDQUFULElBQWM1SixDQUFkLEtBQW9CLENBQTVDLElBQWlEZ2pFLEVBQXJELEVBQXlEO0FBQ3ZELGFBQU8sQ0FBUDtBQUNEO0FBQ0Y7O0FBQ0QsU0FBT3RuRSxTQUFQO0FBQ0Q7O0FBRUQsU0FBU3VuRSxLQUFULENBQWU5SyxJQUFmLEVBQXFCO0FBQ25CLE1BQUkyQyxlQUFlLEdBQUczQyxJQUFJLElBQUksQ0FBQ0EsSUFBSSxDQUFDaUMsYUFBTCxJQUFzQmpDLElBQXZCLEVBQTZCMkMsZUFBM0Q7QUFDQSxTQUFPQSxlQUFlLEdBQUdBLGVBQWUsQ0FBQzdDLFFBQWhCLENBQXlCbnlELFdBQXpCLE9BQTJDLE1BQTlDLEdBQXVELEtBQTdFO0FBQ0Q7O0FBRUQsU0FBU200RCxPQUFULENBQWlCbDVDLEdBQWpCLEVBQXNCbStDLEtBQXRCLEVBQTZCO0FBQzNCLFNBQU9DLFFBQU0sQ0FBQ3ArQyxHQUFELEVBQU0sSUFBTixFQUFZbStDLEtBQVosQ0FBYjtBQUNEOztBQUVELFNBQVNFLFdBQVQsQ0FBcUI5K0QsRUFBckIsRUFBeUIxSCxLQUF6QixFQUFnQztBQUM5QixNQUFJLENBQUNBLEtBQUwsRUFBWTtBQUNWLFdBQU8sSUFBUDtBQUNEOztBQUNELE1BQUksQ0FBQzBILEVBQUwsRUFBUztBQUNQLFdBQU8sS0FBUDtBQUNEOztBQUVELE1BQUlBLEVBQUUsQ0FBQzYxRCxRQUFILEtBQWdCLENBQXBCLEVBQXVCO0FBQ3JCLFdBQU8sS0FBUDtBQUNEOztBQUVELE1BQUlwMUIsT0FBTyxHQUFHLENBQWQ7QUFBQSxNQUNFcytCLFdBQVcsR0FBR3ptRSxLQUFLLENBQUNrL0QsTUFEdEI7QUFBQSxNQUVFd0gsY0FGRjtBQUFBLE1BR0VDLGdCQUhGOztBQUtBLE1BQUkzbUUsS0FBSyxDQUFDOHZCLENBQU4sS0FBWSxLQUFoQixFQUF1QjtBQUNyQnFZLElBQUFBLE9BQU8sSUFBSW04QixTQUFTLENBQUNsNkQsR0FBVixDQUFjMUMsRUFBZCxFQUFrQjFILEtBQUssQ0FBQ3pCLEtBQXhCLENBQVg7QUFDRDs7QUFFRCxNQUFJNHBDLE9BQU8sSUFBSXMrQixXQUFmLEVBQTRCO0FBQzFCQyxJQUFBQSxjQUFjLEdBQUdELFdBQVcsQ0FBQ2puRSxNQUE3QjtBQUNBbW5FLElBQUFBLGdCQUFnQixHQUFHLENBQW5COztBQUNBLFdBQU94K0IsT0FBTyxJQUFJdytCLGdCQUFnQixHQUFHRCxjQUFyQyxFQUFxREMsZ0JBQWdCLEVBQXJFLEVBQXlFO0FBQ3ZFLFVBQUlDLGlCQUFpQixHQUFHSCxXQUFXLENBQUNFLGdCQUFELENBQW5DO0FBQUEsVUFDRUUscUJBQXFCLEdBQUdELGlCQUFpQixDQUFDOTJDLENBRDVDOztBQUVBLFVBQUl3MEMsU0FBUyxDQUFDdUMscUJBQUQsQ0FBYixFQUFzQztBQUNwQzErQixRQUFBQSxPQUFPLElBQUltOEIsU0FBUyxDQUFDdUMscUJBQUQsQ0FBVCxDQUFpQ24vRCxFQUFqQyxFQUFxQ2svRCxpQkFBaUIsQ0FBQ3JvRSxLQUF2RCxDQUFYO0FBQ0Q7QUFDRjtBQUNGOztBQUVELFNBQU80cEMsT0FBUDtBQUNEOzs7QUFHRCxTQUFTMitCLGNBQVQsQ0FBd0JwL0QsRUFBeEIsRUFBNEIxSCxLQUE1QixFQUFtQztBQUNqQyxNQUFJbW9DLE9BQU8sR0FBRyxDQUFkO0FBQUEsTUFDRTQrQixPQUFPLEdBQUdyL0QsRUFEWjtBQUFBLE1BRUVzL0QsVUFGRjtBQUFBLE1BR0VDLFVBQVUsR0FBR2puRSxLQUhmOztBQUtBLEtBQUc7QUFDRG1vQyxJQUFBQSxPQUFPLElBQUlxK0IsV0FBVyxDQUFDOStELEVBQUQsRUFBSzFILEtBQUwsQ0FBdEI7O0FBQ0EsUUFBSW1vQyxPQUFKLEVBQWE7QUFDWDtBQUNBbm9DLE1BQUFBLEtBQUssR0FBR0EsS0FBSyxJQUFJQSxLQUFLLENBQUNtckIsSUFBdkI7O0FBQ0EsVUFBSSxDQUFDbnJCLEtBQUwsRUFBWTtBQUNWLGVBQU8sSUFBUDtBQUNEOztBQUNEZ25FLE1BQUFBLFVBQVUsR0FBR3JCLFlBQVksQ0FBQzNsRSxLQUFLLENBQUNnaUUsY0FBUCxDQUF6QjtBQUNBdDZELE1BQUFBLEVBQUUsR0FBR2srRCxHQUFHLENBQUNsK0QsRUFBRCxFQUFLcy9ELFVBQVUsQ0FBQ3BCLEdBQWhCLENBQVI7O0FBQ0EsVUFBSSxDQUFDb0IsVUFBVSxDQUFDbkIsU0FBaEIsRUFBMkI7QUFDekIsZUFBTztBQUNMO0FBQ0FuK0QsVUFBQUEsRUFBRSxFQUFFQSxFQUZDO0FBR0wxSCxVQUFBQSxLQUFLLEVBQUVBO0FBSEYsU0FBUDtBQUtEO0FBQ0YsS0FmRCxNQWVPO0FBQ0xnbkUsTUFBQUEsVUFBVSxHQUFHckIsWUFBWSxDQUFDM2xFLEtBQUssQ0FBQ2dpRSxjQUFQLENBQXpCOztBQUNBLFVBQUlnRixVQUFVLENBQUNuQixTQUFmLEVBQTBCO0FBQ3hCO0FBQ0EsZUFBTztBQUNMbitELFVBQUFBLEVBQUUsRUFBRWsrRCxHQUFHLENBQUNtQixPQUFELEVBQVVwQixZQUFZLENBQUNzQixVQUFVLENBQUNqRixjQUFaLENBQVosQ0FBd0M0RCxHQUFsRCxDQURGO0FBRUw1bEUsVUFBQUEsS0FBSyxFQUFFaW5FO0FBRkYsU0FBUDtBQUlELE9BTkQsTUFNTztBQUNMO0FBQ0EsZUFBTztBQUNMdi9ELFVBQUFBLEVBQUUsRUFBRUEsRUFBRSxJQUFJaytELEdBQUcsQ0FBQ2wrRCxFQUFELEVBQUtzL0QsVUFBVSxDQUFDcEIsR0FBaEIsQ0FEUjtBQUVMNWxFLFVBQUFBLEtBQUssRUFBRUE7QUFGRixTQUFQO0FBSUQ7QUFDRjtBQUNGLEdBakNELFFBaUNTMEgsRUFqQ1QsRUFOaUM7OztBQTBDakMsU0FBTztBQUNMQSxJQUFBQSxFQUFFLEVBQUVrK0QsR0FBRyxDQUFDbUIsT0FBRCxFQUFVcEIsWUFBWSxDQUFDc0IsVUFBVSxDQUFDakYsY0FBWixDQUFaLENBQXdDNEQsR0FBbEQsQ0FERjtBQUVMNWxFLElBQUFBLEtBQUssRUFBRWluRTtBQUZGLEdBQVA7QUFJRDs7O0FBR0QsU0FBU0Msc0JBQVQsQ0FBZ0N4L0QsRUFBaEMsRUFBb0NxeEIsSUFBcEMsRUFBMEM7QUFDeEMsTUFBSWl1QyxVQUFKO0FBQUEsTUFDRUcsR0FBRyxHQUFHcHVDLElBRFI7O0FBR0EsS0FBRztBQUNELFFBQUksQ0FBQ3l0QyxXQUFXLENBQUM5K0QsRUFBRCxFQUFLeS9ELEdBQUwsQ0FBaEIsRUFBMkI7QUFDekIsYUFBTyxJQUFQO0FBQ0Q7O0FBQ0RBLElBQUFBLEdBQUcsR0FBR0EsR0FBRyxDQUFDaDhDLElBQVY7O0FBQ0EsUUFBSSxDQUFDZzhDLEdBQUwsRUFBVTtBQUNSLGFBQU8sSUFBUDtBQUNEOztBQUNESCxJQUFBQSxVQUFVLEdBQUdyQixZQUFZLENBQUN3QixHQUFHLENBQUNuRixjQUFMLENBQXpCO0FBQ0F0NkQsSUFBQUEsRUFBRSxHQUFHaytELEdBQUcsQ0FBQ2wrRCxFQUFELEVBQUtzL0QsVUFBVSxDQUFDcEIsR0FBaEIsQ0FBUjtBQUNELEdBVkQsUUFVU2wrRCxFQUFFLElBQUlzL0QsVUFBVSxDQUFDbkIsU0FWMUI7O0FBV0EsTUFBSSxDQUFDbitELEVBQUwsRUFBUztBQUNQLFdBQU8sSUFBUDtBQUNEOztBQUNELFNBQU87QUFDTEEsSUFBQUEsRUFBRSxFQUFFQSxFQURDO0FBRUwxSCxJQUFBQSxLQUFLLEVBQUVtbkU7QUFGRixHQUFQO0FBSUQ7O0FBRUQsU0FBU0MsS0FBVCxDQUFlMS9ELEVBQWYsRUFBbUI7QUFDakIsTUFBSTIvRCxVQUFKOztBQUVBLE1BQUl2RCxZQUFKLEVBQWtCO0FBQ2hCLFFBQUksRUFBRXVELFVBQVUsR0FBRzMvRCxFQUFFLENBQUN3MUQsWUFBSCxDQUFnQjBHLG9CQUFoQixDQUFmLENBQUosRUFBMkQ7QUFDekRsOEQsTUFBQUEsRUFBRSxDQUFDKzFELFlBQUgsQ0FBZ0JtRyxvQkFBaEIsRUFBc0N5RCxVQUFVLEdBQUksQ0FBQyxJQUFJLy9DLElBQUosRUFBRCxHQUFjLEdBQWQsR0FBcUIsRUFBRXk4QyxJQUEzRTtBQUNEO0FBQ0YsR0FKRCxNQUlPO0FBQ0wsUUFBSSxFQUFFc0QsVUFBVSxHQUFHMy9ELEVBQUUsQ0FBQ2s4RCxvQkFBRCxDQUFqQixDQUFKLEVBQThDO0FBQzVDeUQsTUFBQUEsVUFBVSxHQUFHMy9ELEVBQUUsQ0FBQ2s4RCxvQkFBRCxDQUFGLEdBQTRCLENBQUMsSUFBSXQ4QyxJQUFKLEVBQUYsR0FBZ0IsR0FBaEIsR0FBdUIsRUFBRXk4QyxJQUFqRTtBQUNEO0FBQ0Y7O0FBRUQsU0FBT3NELFVBQVA7QUFDRDs7QUFFRCxTQUFTQyxRQUFULENBQWtCNS9ELEVBQWxCLEVBQXNCMUgsS0FBdEIsRUFBNkI7QUFDM0IsTUFBSXFuRSxVQUFVLEdBQUdELEtBQUssQ0FBQzEvRCxFQUFELENBQXRCO0FBQUEsTUFDRTYvRCxRQURGO0FBRUFBLEVBQUFBLFFBQVEsR0FBR0YsVUFBVSxHQUFHLEdBQWIsSUFBb0JybkUsS0FBSyxDQUFDbWlFLEtBQU4sSUFBZSxDQUFuQyxDQUFYOztBQUNBLE1BQUlvRixRQUFRLElBQUl2RCxlQUFoQixFQUFpQztBQUMvQixXQUFPQSxlQUFlLENBQUN1RCxRQUFELENBQXRCO0FBQ0Q7O0FBQ0R2RCxFQUFBQSxlQUFlLENBQUN1RCxRQUFELENBQWYsR0FBNEJDLGdCQUFnQixDQUFDOS9ELEVBQUQsRUFBSzFILEtBQUwsQ0FBNUM7QUFDQSxTQUFPZ2tFLGVBQWUsQ0FBQ3VELFFBQUQsQ0FBdEI7QUFDRDtBQUdEOzs7QUFDQSxTQUFTQyxnQkFBVCxDQUEwQjkvRCxFQUExQixFQUE4QjFILEtBQTlCLEVBQXFDO0FBQ25DLE1BQUl5bkUsaUJBQWlCLEdBQUdYLGNBQWMsQ0FBQ3AvRCxFQUFELEVBQUsxSCxLQUFMLENBQXRDOztBQUNBLE1BQUl5bkUsaUJBQWlCLEtBQUssSUFBMUIsRUFBZ0M7QUFDOUIsV0FBTyxJQUFQO0FBQ0QsR0FGRCxNQUVPO0FBQ0wvL0QsSUFBQUEsRUFBRSxHQUFHKy9ELGlCQUFpQixDQUFDLy9ELEVBQXZCO0FBQ0ExSCxJQUFBQSxLQUFLLEdBQUd5bkUsaUJBQWlCLENBQUN6bkUsS0FBMUI7O0FBQ0EsV0FBTzBILEVBQVAsRUFBVztBQUNULFVBQUk0L0QsUUFBUSxDQUFDNS9ELEVBQUQsRUFBSzFILEtBQUwsQ0FBWixFQUF5QjtBQUN2QixlQUFPLElBQVA7QUFDRDs7QUFDRDBILE1BQUFBLEVBQUUsR0FBR2srRCxHQUFHLENBQUNsK0QsRUFBRCxFQUFLaStELFlBQVksQ0FBQzNsRSxLQUFLLENBQUNnaUUsY0FBUCxDQUFaLENBQW1DNEQsR0FBeEMsQ0FBUjtBQUNEOztBQUNELFdBQU8sS0FBUDtBQUNEO0FBQ0Y7O0FBRUQsU0FBU1csUUFBVCxDQUFnQnArQyxHQUFoQixFQUFxQjAxQyxPQUFyQixFQUE4QnlJLEtBQTlCLEVBQXFDO0FBQ25DLE1BQUksQ0FBQ3pDLE1BQU0sQ0FBQzE3QyxHQUFELENBQVgsRUFBa0I7QUFDaEIwN0MsSUFBQUEsTUFBTSxDQUFDMTdDLEdBQUQsQ0FBTixHQUFjbzNDLE1BQU0sQ0FBQ3ZGLEtBQVAsQ0FBYTd4QyxHQUFiLENBQWQ7QUFDRDs7QUFFRCxNQUFJdS9DLFFBQVEsR0FBRzdELE1BQU0sQ0FBQzE3QyxHQUFELENBQXJCO0FBQUEsTUFDRXcvQyxVQUFVLEdBQUcsQ0FEZjtBQUFBLE1BRUVDLFFBQVEsR0FBR0YsUUFBUSxDQUFDbG9FLE1BRnRCO0FBQUEsTUFHRXFvRSxlQUhGO0FBQUEsTUFJRXRrQyxLQUpGO0FBQUEsTUFLRXc1QixHQUFHLEdBQUcsRUFMUjs7QUFPQSxNQUFJdUosS0FBSixFQUFXO0FBQ1R6SSxJQUFBQSxPQUFPLEdBQUdBLE9BQU8sSUFBSXlJLEtBQUssQ0FBQyxDQUFELENBQUwsQ0FBUzlJLGFBQTlCO0FBQ0Q7O0FBRURxSyxFQUFBQSxlQUFlLEdBQUdoSyxPQUFPLElBQUlBLE9BQU8sQ0FBQ0wsYUFBbkIsSUFBb0MsT0FBT3g2RCxRQUFQLEtBQW9CLFdBQXBCLElBQW1DQSxRQUF6Rjs7QUFFQSxNQUFJNjZELE9BQU8sSUFBSUEsT0FBTyxDQUFDTixRQUFSLEtBQXFCLENBQWhDLElBQXFDLENBQUNzSyxlQUExQyxFQUEyRDtBQUN6REEsSUFBQUEsZUFBZSxHQUFHaEssT0FBbEI7QUFDRDs7QUFFREEsRUFBQUEsT0FBTyxHQUFHQSxPQUFPLElBQUlnSyxlQUFyQjtBQUVBL0QsRUFBQUEsWUFBWSxHQUFHdUMsS0FBSyxDQUFDeEksT0FBRCxDQUFwQjs7QUFFQSxTQUFPOEosVUFBVSxHQUFHQyxRQUFwQixFQUE4QkQsVUFBVSxFQUF4QyxFQUE0QztBQUMxQ3pCLElBQUFBLFdBQVc7QUFFWDNpQyxJQUFBQSxLQUFLLEdBQUdta0MsUUFBUSxDQUFDQyxVQUFELENBQWhCO0FBRUEsUUFBSXpJLE1BQU0sR0FBRzM3QixLQUFLLENBQUMyN0IsTUFBbkI7QUFBQSxRQUNFNEksV0FERjtBQUFBLFFBRUVDLFNBRkY7QUFBQSxRQUdFQyxVQUhGO0FBQUEsUUFJRUMsT0FBTyxHQUFHM0IsS0FKWjtBQUFBLFFBS0U0QixRQUxGO0FBQUEsUUFNRW5tRSxFQUFFLEdBQUcsSUFOUDs7QUFRQSxRQUFJLENBQUNrbUUsT0FBTCxFQUFjO0FBQ1osVUFBSS9JLE1BQU0sSUFBSSxDQUFDNEUsWUFBZixFQUE2QjtBQUMzQmdFLFFBQUFBLFdBQVcsR0FBRyxDQUFkO0FBQ0FDLFFBQUFBLFNBQVMsR0FBRzdJLE1BQU0sQ0FBQzEvRCxNQUFuQjs7QUFDQSxlQUFPc29FLFdBQVcsR0FBR0MsU0FBckIsRUFBZ0NELFdBQVcsRUFBM0MsRUFBK0M7QUFDN0MsY0FBSUssWUFBWSxHQUFHakosTUFBTSxDQUFDNEksV0FBRCxDQUF6Qjs7QUFDQSxjQUFJSyxZQUFZLENBQUNyNEMsQ0FBYixLQUFtQixJQUF2QixFQUE2QjtBQUMzQi90QixZQUFBQSxFQUFFLEdBQUdvbUUsWUFBWSxDQUFDNXBFLEtBQWxCO0FBQ0E7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsVUFBSXdELEVBQUosRUFBUTtBQUNOO0FBQ0EsWUFBSXFtRSxjQUFjLEdBQUcsQ0FBQ3ZLLE9BQU8sQ0FBQ3dLLGNBQTlCO0FBQUEsWUFDRUMsWUFBWSxHQUFHakssSUFBSSxDQUFDTSxRQUFMLENBQWNrSixlQUFkLEVBQStCaEssT0FBL0IsQ0FEakI7QUFBQSxZQUVFMEssR0FBRyxHQUFHSCxjQUFjLEdBQ2xCRSxZQUFZLEdBQ1ZULGVBQWUsQ0FBQ1EsY0FBaEIsQ0FBK0J0bUUsRUFBL0IsQ0FEVSxHQUVWLElBSGdCLEdBSWhCODdELE9BQU8sQ0FBQ3dLLGNBQVIsQ0FBdUJ0bUUsRUFBdkIsQ0FOTixDQUZNO0FBVU47O0FBQ0EsWUFBSSxDQUFDd21FLEdBQUQsSUFBUUgsY0FBUixJQUEwQkcsR0FBRyxJQUFJdEUsT0FBTyxDQUFDc0UsR0FBRCxFQUFNLElBQU4sQ0FBUCxLQUF1QnhtRSxFQUE1RCxFQUFnRTtBQUM5RCxjQUFJeW1FLElBQUksR0FBR25LLElBQUksQ0FBQ1Qsb0JBQUwsQ0FBMEIsR0FBMUIsRUFBK0JDLE9BQS9CLENBQVg7QUFBQSxjQUNFNEssTUFBTSxHQUFHRCxJQUFJLENBQUNocEUsTUFEaEI7QUFBQSxjQUVFa3BFLElBQUksR0FBRyxDQUZUOztBQUdBLGlCQUFPQSxJQUFJLEdBQUdELE1BQWQsRUFBc0JDLElBQUksRUFBMUIsRUFBOEI7QUFDNUJILFlBQUFBLEdBQUcsR0FBR0MsSUFBSSxDQUFDRSxJQUFELENBQVY7O0FBQ0EsZ0JBQUl6RSxPQUFPLENBQUNzRSxHQUFELEVBQU0sSUFBTixDQUFQLEtBQXVCeG1FLEVBQTNCLEVBQStCO0FBQzdCa21FLGNBQUFBLE9BQU8sR0FBRyxDQUFDTSxHQUFELENBQVY7QUFDQTtBQUNEO0FBQ0Y7O0FBQ0QsY0FBSUcsSUFBSSxLQUFLRCxNQUFiLEVBQXFCO0FBQ25CUixZQUFBQSxPQUFPLEdBQUcsRUFBVjtBQUNEO0FBQ0YsU0FkRCxNQWNPO0FBQ0wsY0FBSUssWUFBWSxJQUFJQyxHQUFoQixJQUF1QjFLLE9BQU8sS0FBS2dLLGVBQXZDLEVBQXdEO0FBQ3REVSxZQUFBQSxHQUFHLEdBQUdsSyxJQUFJLENBQUNNLFFBQUwsQ0FBY2QsT0FBZCxFQUF1QjBLLEdBQXZCLElBQThCQSxHQUE5QixHQUFvQyxJQUExQztBQUNEOztBQUNETixVQUFBQSxPQUFPLEdBQUdNLEdBQUcsR0FBRyxDQUFDQSxHQUFELENBQUgsR0FBVyxFQUF4QjtBQUNEO0FBQ0YsT0EvQkQsTUErQk87QUFDTE4sUUFBQUEsT0FBTyxHQUFHNUosSUFBSSxDQUFDVCxvQkFBTCxDQUEwQnI2QixLQUFLLENBQUNobEMsS0FBTixJQUFlLEdBQXpDLEVBQThDcy9ELE9BQTlDLENBQVY7QUFDRDtBQUNGOztBQUVEbUssSUFBQUEsVUFBVSxHQUFHLENBQWI7QUFDQUUsSUFBQUEsUUFBUSxHQUFHRCxPQUFPLENBQUN6b0UsTUFBbkI7O0FBRUEsUUFBSSxDQUFDMG9FLFFBQUwsRUFBZTtBQUNiO0FBQ0Q7O0FBRUQsV0FBT0YsVUFBVSxHQUFHRSxRQUFwQixFQUE4QkYsVUFBVSxFQUF4QyxFQUE0QztBQUMxQyxVQUFJbHNCLElBQUksR0FBR21zQixPQUFPLENBQUNELFVBQUQsQ0FBbEI7QUFDQSxVQUFJVyxTQUFTLEdBQUd6QixzQkFBc0IsQ0FBQ3ByQixJQUFELEVBQU92WSxLQUFQLENBQXRDOztBQUNBLFVBQUlvbEMsU0FBUyxLQUFLLElBQWxCLEVBQXdCO0FBQ3RCNUwsUUFBQUEsR0FBRyxDQUFDdDdELElBQUosQ0FBU3E2QyxJQUFUO0FBQ0QsT0FGRCxNQUVPLElBQUk2c0IsU0FBSixFQUFlO0FBQ3BCLFlBQUlyQixRQUFRLENBQUNxQixTQUFTLENBQUNqaEUsRUFBWCxFQUFlaWhFLFNBQVMsQ0FBQzNvRSxLQUF6QixDQUFaLEVBQTZDO0FBQzNDKzhELFVBQUFBLEdBQUcsQ0FBQ3Q3RCxJQUFKLENBQVNxNkMsSUFBVDtBQUNEO0FBQ0Y7QUFDRjtBQUNGOztBQUVELE1BQUk4ckIsUUFBUSxHQUFHLENBQWYsRUFBa0I7QUFDaEI3SyxJQUFBQSxHQUFHLEdBQUdzQixJQUFJLENBQUNDLE1BQUwsQ0FBWXZCLEdBQVosQ0FBTjtBQUNEOztBQUVELFNBQU9BLEdBQVA7QUFDRDs7SUFFRDkvRCxlQUFBLEdBQWlCc3BFLFFBQWpCOztBQUVBQSxRQUFNLENBQUN2TSxLQUFQLEdBQWUsVUFBVTd4QyxHQUFWLEVBQWU7QUFDNUIsU0FBT28zQyxNQUFNLENBQUN2RixLQUFQLENBQWE3eEMsR0FBYixDQUFQO0FBQ0QsQ0FGRDs7QUFJQW8rQyxRQUFNLENBQUNsRixPQUFQLEdBQWlCQSxPQUFqQjtBQUVBa0YsUUFBTSxDQUFDbEksSUFBUCxHQUFjQSxJQUFkO0FBRUFrSSxRQUFNLENBQUN6bUUsT0FBUCxHQUFpQixXQUFqQjs7SUM5cUJBN0MsYUFBQSxHQUFpQlMsZUFBakI7O0FDQUEsSUFBSWtyRSxnQkFBZ0IsR0FBRyxhQUF2Qjs7QUFFQSxTQUFTQyxtQkFBVCxDQUE4QjdvRSxLQUE5QixFQUFxQ2lOLENBQXJDLEVBQXdDa1csTUFBeEMsRUFBZ0Q7QUFDOUMsTUFBSUEsTUFBTSxLQUFLLENBQWYsRUFBa0I7QUFDaEIsV0FBT2xXLENBQUMsQ0FBQ29kLFdBQUYsRUFBUDtBQUNELEdBRkQsTUFFTztBQUNMLFdBQU9wZCxDQUFQO0FBQ0Q7QUFDRjs7QUFFRCxTQUFTNjdELFdBQVQsQ0FBb0IzZ0QsR0FBcEIsRUFBeUI7QUFDdkIsTUFBSTRnRCxVQUFVLEdBQUc1Z0QsR0FBRyxDQUFDM2hCLE9BQUosQ0FBWW9pRSxnQkFBWixFQUE4QkMsbUJBQTlCLENBQWpCO0FBQ0FELEVBQUFBLGdCQUFnQixDQUFDOW5DLFNBQWpCLEdBQTZCLENBQTdCO0FBQ0EsU0FBT2lvQyxVQUFQO0FBQ0Q7O0lBRUQ5ckUsV0FBQSxHQUFpQjZyRSxXQUFqQjs7QUNoQkEsU0FBU0UsVUFBVCxDQUFtQnpxRSxLQUFuQixFQUEwQjtBQUN4QixTQUFPLE9BQU9BLEtBQVAsS0FBaUIsUUFBeEI7QUFDRDs7SUFFRHRCLFVBQUEsR0FBaUIrckUsVUFBakI7O0FDSkEsU0FBU0MsYUFBVCxDQUFzQjFxRSxLQUF0QixFQUE2QjtBQUMzQixTQUFPLE9BQU9BLEtBQVAsS0FBaUIsV0FBeEI7QUFDRDs7SUFFRHRCLGFBQUEsR0FBaUJnc0UsYUFBakI7O0FDSkEsU0FBU3IwQyxRQUFULENBQWlCczBDLElBQWpCLEVBQXVCO0FBQ3JCLE1BQUlyM0QsSUFBSSxHQUFHdFMsU0FBWDtBQUNBLE1BQUlrSCxNQUFKOztBQUVBLE9BQUssSUFBSXNCLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUc4SixJQUFJLENBQUNyUyxNQUF6QixFQUFpQ3VJLENBQUMsRUFBbEMsRUFBc0M7QUFDcEN0QixJQUFBQSxNQUFNLEdBQUdvTCxJQUFJLENBQUM5SixDQUFELENBQWI7O0FBRUEsU0FBSyxJQUFJMUcsR0FBVCxJQUFnQm9GLE1BQWhCLEVBQXdCO0FBQ3RCeWlFLE1BQUFBLElBQUksQ0FBQzduRSxHQUFELENBQUosR0FBWW9GLE1BQU0sQ0FBQ3BGLEdBQUQsQ0FBbEI7QUFDRDtBQUNGOztBQUVELFNBQU82bkUsSUFBUDtBQUNEOztJQUVEanNFLFFBQUEsR0FBaUIyM0IsUUFBakI7O0FDZkEsU0FBU3NrQixXQUFULENBQW9CenlDLE1BQXBCLEVBQTRCdkYsRUFBNUIsRUFBZ0M7QUFDOUIsTUFBSWlvRSxXQUFXLEdBQUcsRUFBbEI7O0FBRUEsT0FBSyxJQUFJOW5FLEdBQVQsSUFBZ0JvRixNQUFoQixFQUF3QjtBQUN0QixRQUFJQSxNQUFNLENBQUM1RSxjQUFQLENBQXNCUixHQUF0QixDQUFKLEVBQWdDO0FBQzlCOG5FLE1BQUFBLFdBQVcsQ0FBQzluRSxHQUFELENBQVgsR0FBbUJILEVBQUUsQ0FBQ3VGLE1BQU0sQ0FBQ3BGLEdBQUQsQ0FBUCxDQUFyQjtBQUNEO0FBQ0Y7O0FBRUQsU0FBTzhuRSxXQUFQO0FBQ0Q7O0lBRURsc0UsV0FBQSxHQUFpQmk4QyxXQUFqQjs7QUNaQSxJQUFJNHZCLFdBQVMsR0FBR3ByRSxXQUFoQjs7QUFFQSxTQUFTMHJFLGdCQUFULENBQXlCN21FLElBQXpCLEVBQStCO0FBQzdCLE1BQUk4bUUsS0FBSyxHQUFHUCxXQUFTLENBQUN2bUUsSUFBRCxDQUFyQixDQUQ2QjtBQUk3Qjs7QUFDQSxNQUFJOG1FLEtBQUssQ0FBQ3JxRCxNQUFOLENBQWEsQ0FBYixFQUFnQnFMLFdBQWhCLE9BQWtDOW5CLElBQUksQ0FBQ3ljLE1BQUwsQ0FBWSxDQUFaLENBQXRDLEVBQXNEO0FBQ3BELFdBQU96YyxJQUFJLENBQUN5YyxNQUFMLENBQVksQ0FBWixJQUFpQnFxRCxLQUFLLENBQUMxcUUsS0FBTixDQUFZLENBQVosQ0FBeEI7QUFDRDs7QUFFRCxNQUFJNEQsSUFBSSxDQUFDeWMsTUFBTCxDQUFZLENBQVosTUFBbUIsR0FBdkIsRUFBNEI7QUFDMUIsV0FBT3FxRCxLQUFLLENBQUN4aEUsT0FBTixDQUFjLElBQWQsTUFBd0IsQ0FBeEIsR0FBNEJ3aEUsS0FBNUIsR0FDSEEsS0FBSyxDQUFDcnFELE1BQU4sQ0FBYSxDQUFiLEVBQWdCcUwsV0FBaEIsS0FBZ0NnL0MsS0FBSyxDQUFDMXFFLEtBQU4sQ0FBWSxDQUFaLENBRHBDO0FBRUQsR0FIRCxNQUdPO0FBQ0wsV0FBTzBxRSxLQUFQO0FBQ0Q7QUFDRjs7SUFFRHBzRSxnQkFBQSxHQUFpQm1zRSxnQkFBakI7O0FDbkJBLElBQUlFLE9BQUssR0FBRzVyRSxRQUFRLE9BQUQsQ0FBbkI7O0FBQ0EsSUFBSTZyRSxTQUFTLEdBQUc3ckUsR0FBaEI7O0FBQ0EsSUFBSThyRSxnQkFBZ0IsR0FBRzlyRSxhQUF2Qjs7QUFDQSxJQUFJb3JFLFNBQVMsR0FBR3ByRSxXQUFoQjs7QUFDQSxJQUFJc3JFLFFBQVEsR0FBR3RyRSxVQUFmOztBQUNBLElBQUl1ckUsV0FBVyxHQUFHdnJFLGFBQWxCOztBQUNBLElBQUlrM0IsTUFBTSxHQUFHbDNCLFFBQWI7O0FBQ0EsSUFBSXc3QyxXQUFTLEdBQUd4N0MsV0FBaEI7O0FBQ0EsSUFBSTByRSxjQUFjLEdBQUcxckUsZ0JBQXJCOztBQUVBLFNBQVM0YSxTQUFULEdBQW9CO0FBQ2xCLFdBQVM4NkMsT0FBVCxDQUFrQmlJLFFBQWxCLEVBQTRCdUQsVUFBNUIsRUFBd0M7QUFDdEMsU0FBS3ZELFFBQUwsR0FBZ0JBLFFBQWhCO0FBQ0EsU0FBS3VELFVBQUwsR0FBa0JBLFVBQWxCO0FBQ0EsU0FBS3ZCLFVBQUwsR0FBa0IsRUFBbEI7QUFDQSxTQUFLb00sY0FBTCxHQUFzQixFQUF0QjtBQUNBLFNBQUtuVSxJQUFMLEdBQVksRUFBWjtBQUNBLFFBQUlsNEQsSUFBSSxHQUFHLElBQVg7QUFDQSxRQUFJazdELEtBQUssR0FBRyxLQUFLQSxLQUFMLEdBQWE7QUFDdkJvUixNQUFBQSxHQUFHLEVBQUUsVUFBVUMsU0FBVixFQUFxQjtBQUN4QnZzRSxRQUFBQSxJQUFJLENBQUN1c0UsU0FBTCxHQUFpQkEsU0FBakI7QUFDRCxPQUhzQjtBQUl2Qjk5RCxNQUFBQSxLQUFLLEVBQUU7QUFDTCs5RCxRQUFBQSxXQUFXLEVBQUUsVUFBVXJuRSxJQUFWLEVBQWdCaEUsS0FBaEIsRUFBdUI7QUFDbEMrNUQsVUFBQUEsS0FBSyxDQUFDenNELEtBQU4sQ0FBWXU5RCxjQUFjLENBQUM3bUUsSUFBRCxDQUExQixJQUFvQ2hFLEtBQXBDO0FBQ0QsU0FISTtBQUlMc3JFLFFBQUFBLFdBQVcsRUFBRSxVQUFVdG5FLElBQVYsRUFBZ0I7QUFDM0IsaUJBQU8rMUQsS0FBSyxDQUFDenNELEtBQU4sQ0FBWXU5RCxjQUFjLENBQUM3bUUsSUFBRCxDQUExQixLQUFxQyxFQUE1QztBQUNELFNBTkk7QUFPTHVuRSxRQUFBQSxnQkFBZ0IsRUFBRSxVQUFVdm5FLElBQVYsRUFBZ0I7QUFDaEMsaUJBQU8rMUQsS0FBSyxDQUFDenNELEtBQU4sQ0FBWWcrRCxXQUFaLENBQXdCdG5FLElBQXhCLENBQVA7QUFDRCxTQVRJO0FBVUx3bkUsUUFBQUEsY0FBYyxFQUFFLFVBQVV4bkUsSUFBVixFQUFnQjtBQUM5QixpQkFBTysxRCxLQUFLLENBQUN6c0QsS0FBTixDQUFZdTlELGNBQWMsQ0FBQzdtRSxJQUFELENBQTFCLENBQVA7QUFDRDtBQVpJO0FBSmdCLEtBQXpCO0FBb0JBLFNBQUtzSixLQUFMLEdBQWF5c0QsS0FBSyxDQUFDenNELEtBQW5CO0FBQ0Q7O0FBRUR1bkQsRUFBQUEsT0FBTyxDQUFDNFcsWUFBUixHQUF1QixDQUF2QjtBQUNBNVcsRUFBQUEsT0FBTyxDQUFDNlcsOEJBQVIsR0FBeUMsQ0FBekM7QUFDQTdXLEVBQUFBLE9BQU8sQ0FBQzhXLDJCQUFSLEdBQXNDLENBQXRDO0FBQ0E5VyxFQUFBQSxPQUFPLENBQUMrVywyQkFBUixHQUFzQyxDQUF0QztBQUNBL1csRUFBQUEsT0FBTyxDQUFDZ1gsMEJBQVIsR0FBcUMsQ0FBckM7QUFDQWhYLEVBQUFBLE9BQU8sQ0FBQ2lYLDhCQUFSLEdBQXlDLEVBQXpDO0FBRUFqWCxFQUFBQSxPQUFPLENBQUMxdEQsU0FBUixDQUFrQjYzRCxRQUFsQixHQUE2QixDQUE3QixDQXRDa0I7QUF5Q2xCOztBQUNBbkssRUFBQUEsT0FBTyxDQUFDMXRELFNBQVIsQ0FBa0I0a0UsaUJBQWxCLEdBQXNDO0FBQ3BDLFlBQVEsUUFENEI7QUFFcEMsY0FBVSxVQUYwQjtBQUdwQyxhQUFTLFNBSDJCO0FBSXBDLG1CQUFlLGVBSnFCO0FBS3BDLFlBQVEsUUFMNEI7QUFNcEMsV0FBTyxPQU42QjtBQU9wQyxtQkFBZSxlQVBxQjtBQVFwQyxZQUFRLFFBUjRCO0FBU3BDLGVBQVcsV0FUeUI7QUFVcEMsaUJBQWEsYUFWdUI7QUFXcEMsZ0JBQVksWUFYd0I7QUFZcEMsaUJBQWEsYUFadUI7QUFhcEMsZ0JBQVksWUFid0I7QUFjcEMsaUJBQWEsYUFkdUI7QUFlcEMsWUFBUSxRQWY0QjtBQWdCcEMsYUFBUyxTQWhCMkI7QUFpQnBDLGFBQVMsU0FqQjJCO0FBa0JwQyxhQUFTLFNBbEIyQjtBQW1CcEMsZUFBVyxXQW5CeUI7QUFvQnBDLGdCQUFZLFlBcEJ3QjtBQXFCcEMsYUFBUyxTQXJCMkI7QUFzQnBDLFlBQVEsUUF0QjRCO0FBdUJwQyxpQkFBYSxhQXZCdUI7QUF3QnBDLGtCQUFjLGNBeEJzQjtBQXlCcEMsa0JBQWMsY0F6QnNCO0FBMEJwQyxpQkFBYSxhQTFCdUI7QUEyQnBDLGdCQUFZLFlBM0J3QjtBQTRCcEMsaUJBQWEsYUE1QnVCO0FBNkJwQyxlQUFXLFdBN0J5QjtBQThCcEMsYUFBUyxTQTlCMkI7QUErQnBDLGNBQVUsVUEvQjBCO0FBZ0NwQyxjQUFVLFVBaEMwQjtBQWlDcEMsbUJBQWUsZUFqQ3FCO0FBa0NwQyxnQkFBWSxZQWxDd0I7QUFtQ3BDLGlCQUFhLGFBbkN1QjtBQW9DcEMsa0JBQWMsY0FwQ3NCO0FBcUNwQyxhQUFTO0FBckMyQixHQUF0QztBQXdDQWxYLEVBQUFBLE9BQU8sQ0FBQzF0RCxTQUFSLENBQWtCNmtFLGlDQUFsQixHQUFzRCxDQUNwRCxRQURvRCxFQUVwRCxRQUZvRCxDQUF0RDtBQUtBblgsRUFBQUEsT0FBTyxDQUFDMXRELFNBQVIsQ0FBa0I4a0UscUJBQWxCLEdBQTBDO0FBQ3hDLGFBQVM7QUFEK0IsR0FBMUM7O0FBSUFwWCxFQUFBQSxPQUFPLENBQUMxdEQsU0FBUixDQUFrQitrRSxtQkFBbEIsR0FBd0MsVUFBVWxvRSxJQUFWLEVBQWdCO0FBQ3RELFFBQUltb0Usb0JBQW9CLEdBQUcsS0FBS0gsaUNBQUwsQ0FBdUMxN0QsR0FBdkMsQ0FBMkMsVUFBVTg3RCxJQUFWLEVBQWdCO0FBQ3BGLGFBQU9BLElBQUksQ0FBQ3RtRSxJQUFMLENBQVU5QixJQUFWLENBQVA7QUFDRCxLQUYwQixDQUEzQjs7QUFJQSxRQUFJbW9FLG9CQUFvQixDQUFDMzdELElBQXJCLENBQTBCNEcsT0FBMUIsQ0FBSixFQUF3QztBQUN0QyxhQUFPcFQsSUFBUDtBQUNELEtBRkQsTUFFTztBQUNMLGFBQU8sS0FBS2lvRSxxQkFBTCxDQUEyQmpvRSxJQUEzQixLQUFvQ3VtRSxTQUFTLENBQUN2bUUsSUFBRCxDQUFwRDtBQUNEO0FBQ0YsR0FWRDs7QUFZQTZ3RCxFQUFBQSxPQUFPLENBQUMxdEQsU0FBUixDQUFrQiszRCxZQUFsQixHQUFpQyxVQUFVbDdELElBQVYsRUFBZ0JoRSxLQUFoQixFQUF1QjtBQUN0RCxRQUFJZ0UsSUFBSSxLQUFLLE9BQVQsSUFBb0J5bUUsUUFBUSxDQUFDenFFLEtBQUQsQ0FBaEMsRUFBeUM7QUFDdkMsVUFBSXFzRSxNQUFNLEdBQUdyQixTQUFTLENBQUN2UCxLQUFWLENBQWdCejdELEtBQWhCLENBQWI7O0FBRUEsV0FBSyxJQUFJOEMsR0FBVCxJQUFnQnVwRSxNQUFoQixFQUF3QjtBQUN0QixhQUFLLytELEtBQUwsQ0FBVys5RCxXQUFYLENBQXVCdm9FLEdBQXZCLEVBQTRCdXBFLE1BQU0sQ0FBQ3ZwRSxHQUFELENBQWxDO0FBQ0Q7QUFDRixLQU5ELE1BTU87QUFDTCxXQUFLaTNELEtBQUwsQ0FBVyxLQUFLbVMsbUJBQUwsQ0FBeUJsb0UsSUFBekIsQ0FBWCxJQUE2Q2hFLEtBQTdDO0FBQ0Q7QUFDRixHQVZEOztBQVlBNjBELEVBQUFBLE9BQU8sQ0FBQzF0RCxTQUFSLENBQWtCdzNELFlBQWxCLEdBQWlDLFVBQVUzNkQsSUFBVixFQUFnQjtBQUMvQyxXQUFPLEtBQUsrMUQsS0FBTCxDQUFXLEtBQUttUyxtQkFBTCxDQUF5QmxvRSxJQUF6QixDQUFYLENBQVA7QUFDRCxHQUZEOztBQUlBNndELEVBQUFBLE9BQU8sQ0FBQzF0RCxTQUFSLENBQWtCeTFELGdCQUFsQixHQUFxQyxVQUFVNTRELElBQVYsRUFBZ0I7QUFDbkQsUUFBSWhFLEtBQUssR0FBRyxLQUFLMitELFlBQUwsQ0FBa0IzNkQsSUFBbEIsQ0FBWjs7QUFFQSxRQUFJLENBQUMwbUUsV0FBVyxDQUFDMXFFLEtBQUQsQ0FBaEIsRUFBeUI7QUFDdkIsYUFBTztBQUNMQSxRQUFBQSxLQUFLLEVBQUVBLEtBREY7QUFFTDY4RCxRQUFBQSxTQUFTLEVBQUU7QUFGTixPQUFQO0FBSUQ7QUFDRixHQVREOztBQVdBaEksRUFBQUEsT0FBTyxDQUFDMXRELFNBQVIsQ0FBa0JtbEUsZUFBbEIsR0FBb0MsVUFBVXRvRSxJQUFWLEVBQWdCO0FBQ2xELFdBQU8sS0FBSysxRCxLQUFMLENBQVcsS0FBS21TLG1CQUFMLENBQXlCbG9FLElBQXpCLENBQVgsQ0FBUDtBQUNELEdBRkQ7O0FBSUE2d0QsRUFBQUEsT0FBTyxDQUFDMXRELFNBQVIsQ0FBa0JvbEUsZUFBbEIsR0FBb0MsVUFBVXZvRSxJQUFWLEVBQWdCO0FBQ2xELFdBQU8sS0FBSytuRSxpQkFBTCxDQUF1Qi9uRSxJQUF2QixLQUFnQ0EsSUFBdkM7QUFDRCxHQUZEOztBQUlBNndELEVBQUFBLE9BQU8sQ0FBQzF0RCxTQUFSLENBQWtCd3lCLGdCQUFsQixHQUFxQyxVQUFVMzFCLElBQVYsRUFBZ0JyQixFQUFoQixFQUFvQjtBQUN2RCxRQUFJNnBFLElBQUksR0FBRyxLQUFLRCxlQUFMLENBQXFCdm9FLElBQXJCLENBQVg7QUFDQSxTQUFLa25FLGNBQUwsQ0FBb0JzQixJQUFwQixJQUE0QixLQUFLdEIsY0FBTCxDQUFvQnNCLElBQXBCLEtBQTZCLEVBQXpEO0FBQ0EsU0FBS3RCLGNBQUwsQ0FBb0JzQixJQUFwQixFQUEwQnRwRSxJQUExQixDQUErQlAsRUFBL0I7QUFDRCxHQUpEOztBQU1Ba3lELEVBQUFBLE9BQU8sQ0FBQzF0RCxTQUFSLENBQWtCc2xFLG1CQUFsQixHQUF3QyxVQUFVem9FLElBQVYsRUFBZ0JyQixFQUFoQixFQUFvQjtBQUMxRCxRQUFJK3BFLFNBQVMsR0FBRyxLQUFLeEIsY0FBTCxDQUFvQixLQUFLcUIsZUFBTCxDQUFxQnZvRSxJQUFyQixDQUFwQixDQUFoQjs7QUFFQSxRQUFJMG9FLFNBQUosRUFBZTtBQUNiLFVBQUlqckUsS0FBSyxHQUFHaXJFLFNBQVMsQ0FBQ3BqRSxPQUFWLENBQWtCM0csRUFBbEIsQ0FBWjs7QUFFQSxVQUFJbEIsS0FBSyxLQUFLLENBQUMsQ0FBZixFQUFrQjtBQUNoQmlyRSxRQUFBQSxTQUFTLENBQUN2ckQsTUFBVixDQUFpQjFmLEtBQWpCLEVBQXdCLENBQXhCO0FBQ0Q7QUFDRjtBQUNGLEdBVkQ7O0FBWUFvekQsRUFBQUEsT0FBTyxDQUFDMXRELFNBQVIsQ0FBa0JxRyxXQUFsQixHQUFnQyxVQUFVckUsRUFBVixFQUFjO0FBQzVDLFFBQUlBLEVBQUUsWUFBWTByRCxPQUFsQixFQUEyQjtBQUN6QjFyRCxNQUFBQSxFQUFFLENBQUNrM0QsVUFBSCxHQUFnQixJQUFoQjtBQUNEOztBQUVELFNBQUt2QixVQUFMLENBQWdCNTdELElBQWhCLENBQXFCaUcsRUFBckI7QUFDQSxXQUFPQSxFQUFQO0FBQ0QsR0FQRDs7QUFTQTByRCxFQUFBQSxPQUFPLENBQUMxdEQsU0FBUixDQUFrQndsRSxZQUFsQixHQUFpQyxVQUFVeGpFLEVBQVYsRUFBY3lqRSxNQUFkLEVBQXNCO0FBQ3JELFFBQUlsa0UsS0FBSyxHQUFHLEtBQUtvMkQsVUFBTCxDQUFnQngxRCxPQUFoQixDQUF3QnNqRSxNQUF4QixDQUFaO0FBQ0F6akUsSUFBQUEsRUFBRSxDQUFDazNELFVBQUgsR0FBZ0IsSUFBaEI7O0FBRUEsUUFBSTMzRCxLQUFLLEtBQUssQ0FBQyxDQUFmLEVBQWtCO0FBQ2hCLFdBQUtvMkQsVUFBTCxDQUFnQjM5QyxNQUFoQixDQUF1QnpZLEtBQXZCLEVBQThCLENBQTlCLEVBQWlDUyxFQUFqQztBQUNELEtBRkQsTUFFTztBQUNMLFdBQUsyMUQsVUFBTCxDQUFnQjU3RCxJQUFoQixDQUFxQmlHLEVBQXJCO0FBQ0Q7O0FBRUQsV0FBT0EsRUFBUDtBQUNELEdBWEQ7O0FBYUEwckQsRUFBQUEsT0FBTyxDQUFDMXRELFNBQVIsQ0FBa0IweUIsV0FBbEIsR0FBZ0MsVUFBVXNzQyxLQUFWLEVBQWlCO0FBQy9DLFFBQUlsOEQsTUFBTSxHQUFHLEtBQUs2MEQsVUFBTCxDQUFnQngxRCxPQUFoQixDQUF3QjY4RCxLQUF4QixDQUFiO0FBQ0EsU0FBS3JILFVBQUwsQ0FBZ0IzOUMsTUFBaEIsQ0FBdUJsWCxNQUF2QixFQUErQixDQUEvQjtBQUNELEdBSEQ7O0FBS0E0cUQsRUFBQUEsT0FBTyxDQUFDMXRELFNBQVIsQ0FBa0IwbEUsYUFBbEIsR0FBa0MsWUFBWTtBQUM1QyxXQUFPLEtBQUs1QixnQkFBTCxDQUFzQnQ4RCxLQUF0QixDQUE0QixJQUE1QixFQUFrQzNOLFNBQWxDLEVBQTZDLENBQTdDLEtBQW1ELElBQTFEO0FBQ0QsR0FGRDs7QUFJQTZ6RCxFQUFBQSxPQUFPLENBQUMxdEQsU0FBUixDQUFrQjhqRSxnQkFBbEIsR0FBcUMsVUFBVTlCLFFBQVYsRUFBb0I7QUFDdkQsUUFBSSxDQUFDQSxRQUFMLEVBQWU7QUFDYixZQUFNLElBQUkzeUQsS0FBSixDQUFVLHNCQUFWLENBQU47QUFDRDs7QUFFRCxXQUFPeTBELGdCQUFnQixDQUFDOUIsUUFBRCxFQUFXLElBQVgsQ0FBdkI7QUFDRCxHQU5EOztBQVFBdFUsRUFBQUEsT0FBTyxDQUFDMXRELFNBQVIsQ0FBa0JrNEQsb0JBQWxCLEdBQXlDLFVBQVV2QyxRQUFWLEVBQW9CO0FBQzNELFFBQUlnUSxRQUFRLEdBQUcsS0FBS0EsUUFBcEI7O0FBRUEsUUFBSUEsUUFBUSxDQUFDN3JFLE1BQVQsS0FBb0IsQ0FBeEIsRUFBMkI7QUFDekIsYUFBTyxFQUFQO0FBQ0QsS0FGRCxNQUVPO0FBQ0wsVUFBSTZoRSxPQUFKOztBQUVBLFVBQUloRyxRQUFRLEtBQUssR0FBakIsRUFBc0I7QUFDcEJnRyxRQUFBQSxPQUFPLEdBQUdnSyxRQUFRLENBQUN2OEQsTUFBVCxDQUFnQixVQUFVcEgsRUFBVixFQUFjO0FBQ3RDLGlCQUFPQSxFQUFFLENBQUMyekQsUUFBSCxLQUFnQkEsUUFBdkI7QUFDRCxTQUZTLENBQVY7QUFHRCxPQUpELE1BSU87QUFDTGdHLFFBQUFBLE9BQU8sR0FBR2dLLFFBQVY7QUFDRDs7QUFFRCxVQUFJQyxZQUFZLEdBQUdELFFBQVEsQ0FBQ3g4RCxHQUFULENBQWEsVUFBVW5ILEVBQVYsRUFBYztBQUM1QyxlQUFPQSxFQUFFLENBQUNrMkQsb0JBQUgsQ0FBd0J2QyxRQUF4QixDQUFQO0FBQ0QsT0FGa0IsQ0FBbkI7QUFJQSxhQUFPZ0csT0FBTyxDQUFDbjVELE1BQVIsQ0FBZWdGLEtBQWYsQ0FBcUJtMEQsT0FBckIsRUFBOEJpSyxZQUE5QixDQUFQO0FBQ0Q7QUFDRixHQXRCRDs7QUF3QkFsWSxFQUFBQSxPQUFPLENBQUMxdEQsU0FBUixDQUFrQjJpRSxjQUFsQixHQUFtQyxVQUFVdG1FLEVBQVYsRUFBYztBQUMvQyxRQUFJc3BFLFFBQVEsR0FBRyxLQUFLQSxRQUFwQjs7QUFFQSxRQUFJQSxRQUFRLENBQUM3ckUsTUFBVCxLQUFvQixDQUF4QixFQUEyQjtBQUN6QixhQUFPLElBQVA7QUFDRCxLQUZELE1BRU87QUFDTCxVQUFJUSxLQUFLLEdBQUdxckUsUUFBUSxDQUFDdjhELE1BQVQsQ0FBZ0IsVUFBVXBILEVBQVYsRUFBYztBQUN4QyxlQUFPQSxFQUFFLENBQUN3MUQsWUFBSCxDQUFnQixJQUFoQixNQUEwQm43RCxFQUFqQztBQUNELE9BRlcsRUFFVCxDQUZTLENBQVo7O0FBSUEsVUFBSS9CLEtBQUosRUFBVztBQUNULGVBQU9BLEtBQVA7QUFDRCxPQUZELE1BRU87QUFDTCxZQUFJc3JFLFlBQVksR0FBR0QsUUFBUSxDQUFDeDhELEdBQVQsQ0FBYSxVQUFVbkgsRUFBVixFQUFjO0FBQzVDLGlCQUFPQSxFQUFFLENBQUMyZ0UsY0FBSCxDQUFrQnRtRSxFQUFsQixDQUFQO0FBQ0QsU0FGa0IsQ0FBbkI7QUFJQSxlQUFPdXBFLFlBQVksQ0FBQ3g4RCxNQUFiLENBQW9CLFVBQVU5TyxLQUFWLEVBQWlCO0FBQzFDLGlCQUFPQSxLQUFLLEtBQUssSUFBakI7QUFDRCxTQUZNLEVBRUosQ0FGSSxLQUVFLElBRlQ7QUFHRDtBQUNGO0FBQ0YsR0F0QkQ7O0FBd0JBb3pELEVBQUFBLE9BQU8sQ0FBQzF0RCxTQUFSLENBQWtCNmxFLHFCQUFsQixHQUEwQyxZQUFZO0FBQ3BELFFBQUksQ0FBQyxLQUFLNUIsU0FBVixFQUFxQjtBQUNuQixhQUFPN3FFLFNBQVA7QUFDRDs7QUFFRCxXQUFPLEtBQUs2cUUsU0FBTCxDQUFlNEIscUJBQWYsRUFBUDtBQUNELEdBTkQ7O0FBUUFuWSxFQUFBQSxPQUFPLENBQUMxdEQsU0FBUixDQUFrQjhsRSxTQUFsQixHQUE4QixVQUFVQyxJQUFWLEVBQWdCO0FBQzVDO0FBQ0EsUUFBSUEsSUFBSSxLQUFLM3NFLFNBQWIsRUFBd0I7QUFDdEIyc0UsTUFBQUEsSUFBSSxHQUFHLElBQVA7QUFDRDs7QUFDRCxRQUFJL2pFLEVBQUUsR0FBRyxJQUFJMHJELE9BQUosQ0FBWSxLQUFLaUksUUFBakIsRUFBMkIsS0FBS3VELFVBQWhDLENBQVQsQ0FMNEM7O0FBTzVDLFFBQUksS0FBS3JCLFFBQVQsRUFBbUI7QUFDakI3MUQsTUFBQUEsRUFBRSxDQUFDNjFELFFBQUgsR0FBYyxLQUFLQSxRQUFuQjtBQUNEOztBQUVELFFBQUlqb0QsQ0FBSixDQVg0Qzs7QUFjNUMsU0FBS0EsQ0FBTCxJQUFVLEtBQUtnakQsS0FBZixFQUFzQjtBQUNwQixVQUFJLEtBQUtBLEtBQUwsQ0FBV3oyRCxjQUFYLENBQTBCeVQsQ0FBMUIsS0FBZ0NBLENBQUMsS0FBSyxLQUF0QyxJQUErQ0EsQ0FBQyxLQUFLLE9BQXpELEVBQWtFO0FBQ2hFNU4sUUFBQUEsRUFBRSxDQUFDNHdELEtBQUgsQ0FBU2hqRCxDQUFULElBQWMsS0FBS2dqRCxLQUFMLENBQVdoakQsQ0FBWCxDQUFkO0FBQ0Q7QUFDRixLQWxCMkM7OztBQW9CNUMsU0FBS0EsQ0FBTCxJQUFVLEtBQUt6SixLQUFmLEVBQXNCO0FBQ3BCLFVBQUksS0FBS0EsS0FBTCxDQUFXaEssY0FBWCxDQUEwQnlULENBQTFCLEtBQWdDLENBQ2xDLGFBRGtDLEVBRWxDLGFBRmtDLEVBR2xDLGtCQUhrQyxFQUlsQyxnQkFKa0MsRUFLbEN6TixPQUxrQyxDQUsxQnlOLENBTDBCLE1BS25CLENBQUMsQ0FMbEIsRUFLcUI7QUFDbkI1TixRQUFBQSxFQUFFLENBQUNtRSxLQUFILENBQVN5SixDQUFULElBQWMsS0FBS3pKLEtBQUwsQ0FBV3lKLENBQVgsQ0FBZDtBQUNEO0FBQ0Y7O0FBQ0QsUUFBSW0yRCxJQUFKLEVBQVU7QUFDUi9qRSxNQUFBQSxFQUFFLENBQUMyMUQsVUFBSCxHQUFnQixLQUFLQSxVQUFMLENBQWdCeHVELEdBQWhCLENBQW9CLFVBQVU2OEQsT0FBVixFQUFtQjtBQUNyRCxZQUFJLENBQUNBLE9BQU8sQ0FBQ25PLFFBQWIsRUFBdUI7QUFDckI7QUFDQSxpQkFBTytMLE9BQUssQ0FBQ3FDLFlBQU4sQ0FBbUJELE9BQW5CLENBQVA7QUFDRCxTQUpvRDs7O0FBTXJEQSxRQUFBQSxPQUFPLEdBQUdBLE9BQU8sQ0FBQ0YsU0FBUixDQUFrQixJQUFsQixDQUFWLENBTnFEOztBQVFyRCxZQUFJRSxPQUFPLFlBQVl0WSxPQUF2QixFQUFnQztBQUM5QnNZLFVBQUFBLE9BQU8sQ0FBQzlNLFVBQVIsR0FBcUJsM0QsRUFBckI7QUFDRDs7QUFDRCxlQUFPZ2tFLE9BQVA7QUFDRCxPQVplLENBQWhCO0FBYUQ7O0FBQ0QsV0FBT2hrRSxFQUFQO0FBQ0QsR0E5Q0Q7O0FBZ0RBMHJELEVBQUFBLE9BQU8sQ0FBQzF0RCxTQUFSLENBQWtCa21FLE9BQWxCLEdBQTRCLFVBQVUza0UsS0FBVixFQUFpQjtBQUMzQ0EsSUFBQUEsS0FBSyxHQUFHQSxLQUFLLElBQUksQ0FBakI7QUFDQSxRQUFJcXhELEtBQUssR0FBRzFqQyxNQUFNLENBQUMsRUFBRCxFQUFLLEtBQUswakMsS0FBVixDQUFsQjtBQUNBQSxJQUFBQSxLQUFLLENBQUN6c0QsS0FBTixHQUFjK29CLE1BQU0sQ0FBQyxFQUFELEVBQUswakMsS0FBSyxDQUFDenNELEtBQVgsQ0FBcEI7QUFFQSxRQUFJZ2dFLGVBQWUsR0FBRyxJQUF0Qjs7QUFFQSxhQUFTQyxTQUFULEdBQXNCO0FBQ3BCLGFBQU8sY0FBYzdrRSxLQUFyQjtBQUNEOztBQUVELFFBQUlnaUUsV0FBVyxDQUFDM1EsS0FBSyxDQUFDajNELEdBQVAsQ0FBZixFQUE0QjtBQUMxQmkzRCxNQUFBQSxLQUFLLENBQUNqM0QsR0FBTixHQUFZeXFFLFNBQVMsRUFBckI7QUFDRDs7QUFFRCxXQUFPeFQsS0FBSyxDQUFDenNELEtBQU4sQ0FBWSs5RCxXQUFuQjtBQUNBLFdBQU90UixLQUFLLENBQUN6c0QsS0FBTixDQUFZZytELFdBQW5CO0FBQ0EsV0FBT3ZSLEtBQUssQ0FBQ3pzRCxLQUFOLENBQVlpK0QsZ0JBQW5CO0FBQ0EsV0FBT3hSLEtBQUssQ0FBQ3pzRCxLQUFOLENBQVlrK0QsY0FBbkI7QUFFQW4xQyxJQUFBQSxNQUFNLENBQUMwakMsS0FBRCxFQUFRcGYsV0FBUyxDQUFDLEtBQUt1d0IsY0FBTixFQUFzQixVQUFVd0IsU0FBVixFQUFxQjtBQUNoRSxhQUFPLFVBQVVjLGNBQVYsRUFBMEI7QUFDL0IsWUFBSXQwQyxLQUFKOztBQUVBLFlBQUlzMEMsY0FBSixFQUFvQjtBQUNsQnQwQyxVQUFBQSxLQUFLLEdBQUdzMEMsY0FBYyxDQUFDQyxXQUF2QjtBQUNBdjBDLFVBQUFBLEtBQUssQ0FBQ3MwQyxjQUFOLEdBQXVCQSxjQUF2QjtBQUNEOztBQUVEN3lCLFFBQUFBLFdBQVMsQ0FBQyt4QixTQUFELEVBQVksVUFBVXp6QyxRQUFWLEVBQW9CO0FBQ3ZDQSxVQUFBQSxRQUFRLENBQUN0NUIsSUFBVCxDQUFjMnRFLGVBQWQsRUFBK0JwMEMsS0FBL0I7QUFDRCxTQUZRLENBQVQ7QUFHRCxPQVhEO0FBWUQsS0Fic0IsQ0FBakIsQ0FBTjtBQWVBLFdBQU82eEMsT0FBSyxDQUFDcG1FLGFBQU4sQ0FBb0IsS0FBS200RCxRQUF6QixFQUFtQy9DLEtBQW5DLEVBQTBDLEtBQUtoRCxJQUFMLElBQWEsS0FBSytWLFFBQUwsQ0FBY3g4RCxHQUFkLENBQWtCLFVBQVVuSCxFQUFWLEVBQWNLLENBQWQsRUFBaUI7QUFDL0YsVUFBSUwsRUFBRSxZQUFZMHJELE9BQWxCLEVBQTJCO0FBQ3pCLGVBQU8xckQsRUFBRSxDQUFDa2tFLE9BQUgsQ0FBVzdqRSxDQUFYLENBQVA7QUFDRCxPQUZELE1BRU87QUFDTCxlQUFPTCxFQUFQO0FBQ0Q7QUFDRixLQU42RCxDQUF2RCxDQUFQO0FBT0QsR0ExQ0Q7O0FBNENBMHJELEVBQUFBLE9BQU8sQ0FBQzF0RCxTQUFSLENBQWtCeTRELHVCQUFsQixHQUE0QyxVQUFVOE4sS0FBVixFQUFpQjtBQUMzRCxhQUFTQyxtQkFBVCxDQUE4Qm5PLEtBQTlCLEVBQXFDb08sT0FBckMsRUFBOENDLE9BQTlDLEVBQXVEO0FBQ3JELGFBQU9yTyxLQUFLLENBQUNuaEQsTUFBTixDQUFhLFVBQVU5WixNQUFWLEVBQWtCbzJCLElBQWxCLEVBQXdCO0FBQzFDLFlBQUlwMkIsTUFBTSxLQUFLLEtBQWYsRUFBc0I7QUFDcEIsaUJBQU9BLE1BQVA7QUFDRCxTQUZELE1BRU8sSUFBSW8yQixJQUFJLEtBQUtpekMsT0FBYixFQUFzQjtBQUMzQixpQkFBT0EsT0FBUDtBQUNELFNBRk0sTUFFQSxJQUFJanpDLElBQUksS0FBS2t6QyxPQUFiLEVBQXNCO0FBQzNCLGlCQUFPQSxPQUFQO0FBQ0QsU0FGTSxNQUVBLElBQUlsekMsSUFBSSxDQUFDbWtDLFVBQVQsRUFBcUI7QUFDMUIsaUJBQU82TyxtQkFBbUIsQ0FBQ2h6QyxJQUFJLENBQUNta0MsVUFBTixFQUFrQjhPLE9BQWxCLEVBQTJCQyxPQUEzQixDQUExQjtBQUNELFNBRk0sTUFFQTtBQUNMLGlCQUFPLEtBQVA7QUFDRDtBQUNGLE9BWk0sRUFZSixLQVpJLENBQVA7QUFhRDs7QUFFRCxhQUFTQyxVQUFULENBQXFCNWxFLE1BQXJCLEVBQTZCK0IsTUFBN0IsRUFBcUM7QUFDbkMsYUFBT0EsTUFBTSxDQUFDbzJELFVBQWQsRUFBMEI7QUFDeEJwMkQsUUFBQUEsTUFBTSxHQUFHQSxNQUFNLENBQUNvMkQsVUFBaEI7O0FBQ0EsWUFBSXAyRCxNQUFNLEtBQUsvQixNQUFmLEVBQXVCO0FBQ3JCLGlCQUFPLElBQVA7QUFDRDtBQUNGOztBQUNELGFBQU8sS0FBUDtBQUNEOztBQUVELGFBQVM2bEUsY0FBVCxDQUF5Qmh3RCxJQUF6QixFQUErQkMsS0FBL0IsRUFBc0M7QUFDcEMsYUFBTzh2RCxVQUFVLENBQUMvdkQsSUFBRCxFQUFPQyxLQUFQLENBQVYsR0FDSDYyQyxPQUFPLENBQUNpWCw4QkFBUixHQUF5Q2pYLE9BQU8sQ0FBQytXLDJCQUQ5QyxHQUVIa0MsVUFBVSxDQUFDOXZELEtBQUQsRUFBUUQsSUFBUixDQUFWLEdBQ0U4MkMsT0FBTyxDQUFDZ1gsMEJBQVIsR0FBcUNoWCxPQUFPLENBQUM4VywyQkFEL0MsR0FFRSxLQUpOO0FBS0Q7O0FBRUQsYUFBU3FDLFdBQVQsQ0FBc0JyekMsSUFBdEIsRUFBNEI7QUFDMUIsYUFBT0EsSUFBSSxDQUFDMGxDLFVBQVosRUFBd0I7QUFDdEIxbEMsUUFBQUEsSUFBSSxHQUFHQSxJQUFJLENBQUMwbEMsVUFBWjtBQUNEOztBQUNELGFBQU8xbEMsSUFBUDtBQUNEOztBQUVELFFBQUksU0FBUyt5QyxLQUFiLEVBQW9CO0FBQ2xCLGFBQU8sQ0FBUDtBQUNEOztBQUVELFFBQUlPLGFBQWEsR0FBR0QsV0FBVyxDQUFDLElBQUQsQ0FBL0I7QUFDQSxRQUFJRSxTQUFTLEdBQUdGLFdBQVcsQ0FBQ04sS0FBRCxDQUEzQjs7QUFFQSxRQUFJTyxhQUFhLEtBQUtDLFNBQXRCLEVBQWlDO0FBQy9CLGFBQU9yWixPQUFPLENBQUM2Vyw4QkFBZjtBQUNEOztBQUVELFFBQUlubkUsTUFBTSxHQUFHd3BFLGNBQWMsQ0FBQyxJQUFELEVBQU9MLEtBQVAsQ0FBM0I7O0FBQ0EsUUFBSW5wRSxNQUFKLEVBQVk7QUFDVixhQUFPQSxNQUFQO0FBQ0Q7O0FBRUQsUUFBSXFrQixLQUFLLEdBQUcra0QsbUJBQW1CLENBQUMsQ0FBQ00sYUFBRCxDQUFELEVBQWtCLElBQWxCLEVBQXdCUCxLQUF4QixDQUEvQjtBQUNBLFdBQU85a0QsS0FBSyxLQUFLLElBQVYsR0FDSGlzQyxPQUFPLENBQUMrVywyQkFETCxHQUVIaGpELEtBQUssS0FBSzhrRCxLQUFWLEdBQ0U3WSxPQUFPLENBQUM4VywyQkFEVixHQUVFOVcsT0FBTyxDQUFDNlcsOEJBSmQ7QUFLRCxHQWhFRDs7QUFrRUF0c0UsRUFBQUEsTUFBTSxDQUFDNE0sZ0JBQVAsQ0FBd0I2b0QsT0FBTyxDQUFDMXRELFNBQWhDLEVBQTJDO0FBQ3pDZ25FLElBQUFBLFdBQVcsRUFBRTtBQUNYN3VFLE1BQUFBLEdBQUcsRUFBRSxZQUFZO0FBQ2YsWUFBSTh1RSxRQUFRLEdBQUcsS0FBSy9OLFVBQUwsQ0FBZ0J5TSxRQUEvQjtBQUNBLFlBQUl1QixFQUFFLEdBQUdELFFBQVEsQ0FBQzlrRSxPQUFULENBQWlCLElBQWpCLENBQVQ7QUFDQSxlQUFPOGtFLFFBQVEsQ0FBQ0MsRUFBRSxHQUFHLENBQU4sQ0FBZjtBQUNEO0FBTFUsS0FENEI7QUFRekNDLElBQUFBLGVBQWUsRUFBRTtBQUNmaHZFLE1BQUFBLEdBQUcsRUFBRSxZQUFZO0FBQ2YsWUFBSTh1RSxRQUFRLEdBQUcsS0FBSy9OLFVBQUwsQ0FBZ0J5TSxRQUEvQjtBQUNBLFlBQUl1QixFQUFFLEdBQUdELFFBQVEsQ0FBQzlrRSxPQUFULENBQWlCLElBQWpCLENBQVQ7QUFDQSxlQUFPOGtFLFFBQVEsQ0FBQ0MsRUFBRSxHQUFHLENBQU4sQ0FBZjtBQUNEO0FBTGMsS0FSd0I7QUFlekNFLElBQUFBLFNBQVMsRUFBRTtBQUNUanZFLE1BQUFBLEdBQUcsRUFBRSxZQUFZO0FBQ2YsZUFBTyxLQUFLeTNELElBQVo7QUFDRCxPQUhRO0FBSVQxd0QsTUFBQUEsR0FBRyxFQUFFLFVBQVUwd0QsSUFBVixFQUFnQjtBQUNuQixhQUFLQSxJQUFMLEdBQVlBLElBQVo7QUFDRDtBQU5RLEtBZjhCO0FBdUJ6Q3lYLElBQUFBLFdBQVcsRUFBRTtBQUNYbHZFLE1BQUFBLEdBQUcsRUFBRSxZQUFZO0FBQ2YsZUFBTyxLQUFLeTNELElBQVo7QUFDRCxPQUhVO0FBSVgxd0QsTUFBQUEsR0FBRyxFQUFFLFVBQVUwd0QsSUFBVixFQUFnQjtBQUNuQixhQUFLQSxJQUFMLEdBQVlBLElBQVo7QUFDRDtBQU5VLEtBdkI0QjtBQStCekMrVixJQUFBQSxRQUFRLEVBQUU7QUFDUnh0RSxNQUFBQSxHQUFHLEVBQUUsWUFBWTtBQUNmO0FBQ0E7QUFDQSxlQUFPLEtBQUt3L0QsVUFBTCxDQUFnQnZ1RCxNQUFoQixDQUF1QixVQUFVcEgsRUFBVixFQUFjO0FBQzFDLGNBQUksQ0FBQ0EsRUFBRSxDQUFDNjFELFFBQVIsRUFBa0I7QUFDaEI7QUFDQSxtQkFBTyxJQUFQO0FBQ0QsV0FKeUM7OztBQU8xQyxpQkFBTzcxRCxFQUFFLENBQUM2MUQsUUFBSCxLQUFnQixDQUF2QjtBQUNELFNBUk0sQ0FBUDtBQVNEO0FBYk87QUEvQitCLEdBQTNDLEVBelprQjtBQTBjbEI7O0FBQ0EsTUFBSXlQLGdCQUFnQixHQUFHLENBQ3JCLGNBRHFCLEVBRXJCLGNBRnFCLEVBR3JCLGtCQUhxQixFQUlyQixpQkFKcUIsRUFLckIsc0JBTHFCLEVBTXJCLGdCQU5xQixDQUF2QjtBQVNBQSxFQUFBQSxnQkFBZ0IsQ0FBQ3ArRCxPQUFqQixDQUF5QixVQUFVck0sSUFBVixFQUFnQjtBQUN2QyxRQUFJckIsRUFBRSxHQUFHa3lELE9BQU8sQ0FBQzF0RCxTQUFSLENBQWtCbkQsSUFBbEIsQ0FBVDs7QUFDQTZ3RCxJQUFBQSxPQUFPLENBQUMxdEQsU0FBUixDQUFrQm5ELElBQUksR0FBRyxJQUF6QixJQUFpQyxZQUFZO0FBQzNDLGFBQU9yQixFQUFFLENBQUNnTSxLQUFILENBQVMsSUFBVCxFQUFlckQsS0FBSyxDQUFDbkUsU0FBTixDQUFnQi9HLEtBQWhCLENBQXNCVCxJQUF0QixDQUEyQnFCLFNBQTNCLEVBQXNDLENBQXRDLENBQWYsQ0FBUDtBQUNELEtBRkQ7QUFHRCxHQUxEO0FBT0EsU0FBTzZ6RCxPQUFQO0FBQ0Q7O0lBRURuMkQsUUFBQSxHQUFpQnFiLFNBQWpCOztBQ3hlQSxTQUFTbmIsUUFBVCxHQUFtQjtBQUNqQixNQUFJOHZFLE1BQU0sR0FBRztBQUNYQyxJQUFBQSxnQkFBZ0IsRUFBRSxVQUFVaDBDLElBQVYsRUFBZ0I7QUFDaEMsYUFBTztBQUNMNHdDLFFBQUFBLGdCQUFnQixFQUFFNXdDLElBQUksQ0FBQ3J0QixLQUFMLENBQVdnK0Q7QUFEeEIsT0FBUDtBQUdEO0FBTFUsR0FBYjtBQVFBLFNBQU9vRCxNQUFQO0FBQ0Q7O0lBRURod0UsT0FBQSxHQUFpQkUsUUFBakI7Ozs7Ozs7Ozs7QUNGQSxJQUFJZ3dFLE9BQU8sR0FBR3p2RSxZQUFkOzs7QUFJQSxJQUFJMHZFLFdBQVcsR0FBRyxFQUFsQjs7QUFFMkM7QUFDekN6dkUsRUFBQUEsTUFBTSxDQUFDNDNCLE1BQVAsQ0FBYzYzQyxXQUFkO0FBQ0Q7O0FBRUQsSUFBSUMsY0FBYyxHQUFHLFNBQVNBLGNBQVQsQ0FBd0JDLE1BQXhCLEVBQWdDLEVBQXJEOztBQUUyQztBQUN6Q0QsRUFBQUEsY0FBYyxHQUFHLFNBQVNBLGNBQVQsQ0FBd0JDLE1BQXhCLEVBQWdDO0FBQy9DLFFBQUlBLE1BQU0sS0FBS3h1RSxTQUFmLEVBQTBCO0FBQ3hCLFlBQU0sSUFBSWlXLEtBQUosQ0FBVSw4Q0FBVixDQUFOO0FBQ0Q7QUFDRixHQUpEO0FBS0Q7O0FBRUQsU0FBU3c0RCxVQUFULENBQW9CajVELFNBQXBCLEVBQStCZzVELE1BQS9CLEVBQXVDbHFFLENBQXZDLEVBQTBDNEosQ0FBMUMsRUFBNkNDLENBQTdDLEVBQWdEdWdFLENBQWhELEVBQW1EbDVDLENBQW5ELEVBQXNEMXdCLENBQXRELEVBQXlEO0FBQ3ZEeXBFLEVBQUFBLGNBQWMsQ0FBQ0MsTUFBRCxDQUFkOztBQUVBLE1BQUksQ0FBQ2g1RCxTQUFMLEVBQWdCO0FBQ2QsUUFBSTlXLEtBQUo7O0FBQ0EsUUFBSTh2RSxNQUFNLEtBQUt4dUUsU0FBZixFQUEwQjtBQUN4QnRCLE1BQUFBLEtBQUssR0FBRyxJQUFJdVgsS0FBSixDQUFVLHVFQUF1RSw2REFBakYsQ0FBUjtBQUNELEtBRkQsTUFFTztBQUNMLFVBQUlsRCxJQUFJLEdBQUcsQ0FBQ3pPLENBQUQsRUFBSTRKLENBQUosRUFBT0MsQ0FBUCxFQUFVdWdFLENBQVYsRUFBYWw1QyxDQUFiLEVBQWdCMXdCLENBQWhCLENBQVg7QUFDQSxVQUFJNnBFLFFBQVEsR0FBRyxDQUFmO0FBQ0Fqd0UsTUFBQUEsS0FBSyxHQUFHLElBQUl1WCxLQUFKLENBQVV1NEQsTUFBTSxDQUFDOW1FLE9BQVAsQ0FBZSxLQUFmLEVBQXNCLFlBQVk7QUFDbEQsZUFBT3FMLElBQUksQ0FBQzQ3RCxRQUFRLEVBQVQsQ0FBWDtBQUNELE9BRmlCLENBQVYsQ0FBUjtBQUdBandFLE1BQUFBLEtBQUssQ0FBQytFLElBQU4sR0FBYSxxQkFBYjtBQUNEOztBQUVEL0UsSUFBQUEsS0FBSyxDQUFDa3dFLFdBQU4sR0FBb0IsQ0FBcEIsQ0FiYzs7QUFjZCxVQUFNbHdFLEtBQU47QUFDRDtBQUNGOztBQUVELElBQUltd0UsT0FBTyxHQUFHLFlBQVUsRUFBeEI7O0FBRTJDO0FBQ3pDLE1BQUl2WSxZQUFZLEdBQUcsU0FBU0EsWUFBVCxDQUFzQmtZLE1BQXRCLEVBQThCO0FBQy9DLFNBQUssSUFBSU0sSUFBSSxHQUFHcnVFLFNBQVMsQ0FBQ0MsTUFBckIsRUFBNkJxUyxJQUFJLEdBQUdoSSxLQUFLLENBQUMrakUsSUFBSSxHQUFHLENBQVAsR0FBV0EsSUFBSSxHQUFHLENBQWxCLEdBQXNCLENBQXZCLENBQXpDLEVBQW9FQyxJQUFJLEdBQUcsQ0FBaEYsRUFBbUZBLElBQUksR0FBR0QsSUFBMUYsRUFBZ0dDLElBQUksRUFBcEcsRUFBd0c7QUFDdEdoOEQsTUFBQUEsSUFBSSxDQUFDZzhELElBQUksR0FBRyxDQUFSLENBQUosR0FBaUJ0dUUsU0FBUyxDQUFDc3VFLElBQUQsQ0FBMUI7QUFDRDs7QUFFRCxRQUFJSixRQUFRLEdBQUcsQ0FBZjtBQUNBLFFBQUkzNEQsT0FBTyxHQUFHLGNBQWN3NEQsTUFBTSxDQUFDOW1FLE9BQVAsQ0FBZSxLQUFmLEVBQXNCLFlBQVk7QUFDNUQsYUFBT3FMLElBQUksQ0FBQzQ3RCxRQUFRLEVBQVQsQ0FBWDtBQUNELEtBRjJCLENBQTVCOztBQUdBLFFBQUksT0FBT3R6QyxPQUFQLEtBQW1CLFdBQXZCLEVBQW9DO0FBQ2xDQSxNQUFBQSxPQUFPLENBQUMzOEIsS0FBUixDQUFjc1gsT0FBZDtBQUNEOztBQUNELFFBQUk7QUFDRjtBQUNBO0FBQ0E7QUFDQSxZQUFNLElBQUlDLEtBQUosQ0FBVUQsT0FBVixDQUFOO0FBQ0QsS0FMRCxDQUtFLE9BQU9vSyxDQUFQLEVBQVU7QUFDYixHQWxCRDs7QUFvQkF5dUQsRUFBQUEsT0FBTyxHQUFHLFNBQVNBLE9BQVQsQ0FBaUJyNUQsU0FBakIsRUFBNEJnNUQsTUFBNUIsRUFBb0M7QUFDNUMsUUFBSUEsTUFBTSxLQUFLeHVFLFNBQWYsRUFBMEI7QUFDeEIsWUFBTSxJQUFJaVcsS0FBSixDQUFVLDhEQUE4RCxrQkFBeEUsQ0FBTjtBQUNEOztBQUVELFFBQUl1NEQsTUFBTSxDQUFDemxFLE9BQVAsQ0FBZSw2QkFBZixNQUFrRCxDQUF0RCxFQUF5RDtBQUN2RCxhQUR1RDtBQUV4RDs7QUFFRCxRQUFJLENBQUN5TSxTQUFMLEVBQWdCO0FBQ2QsV0FBSyxJQUFJdzVELEtBQUssR0FBR3Z1RSxTQUFTLENBQUNDLE1BQXRCLEVBQThCcVMsSUFBSSxHQUFHaEksS0FBSyxDQUFDaWtFLEtBQUssR0FBRyxDQUFSLEdBQVlBLEtBQUssR0FBRyxDQUFwQixHQUF3QixDQUF6QixDQUExQyxFQUF1RUMsS0FBSyxHQUFHLENBQXBGLEVBQXVGQSxLQUFLLEdBQUdELEtBQS9GLEVBQXNHQyxLQUFLLEVBQTNHLEVBQStHO0FBQzdHbDhELFFBQUFBLElBQUksQ0FBQ2s4RCxLQUFLLEdBQUcsQ0FBVCxDQUFKLEdBQWtCeHVFLFNBQVMsQ0FBQ3d1RSxLQUFELENBQTNCO0FBQ0Q7O0FBRUQzWSxNQUFBQSxZQUFZLENBQUNsb0QsS0FBYixDQUFtQnBPLFNBQW5CLEVBQThCLENBQUN3dUUsTUFBRCxFQUFTcGxFLE1BQVQsQ0FBZ0IySixJQUFoQixDQUE5QjtBQUNEO0FBQ0YsR0FoQkQ7QUFpQkQ7OztBQUlELElBQUltOEQsVUFBVSxHQUFHLFFBQWpCO0FBR0E7O0FBQ0EsU0FBU0MsUUFBVCxDQUFrQi9zRSxFQUFsQixFQUFzQjtBQUNwQixTQUFPQSxFQUFQO0FBQ0Q7O0FBRUQsSUFBSWd0RSwwQkFBSjs7QUFDMkM7QUFDekNBLEVBQUFBLDBCQUEwQixHQUFHO0FBQzNCbkQsSUFBQUEsSUFBSSxFQUFFLE1BRHFCO0FBRTNCbE4sSUFBQUEsT0FBTyxFQUFFLFNBRmtCO0FBRzNCc1EsSUFBQUEsWUFBWSxFQUFFO0FBSGEsR0FBN0I7QUFLRDs7QUFJRCxTQUFTQyxTQUFULENBQWlCQyxjQUFqQixFQUFpQ3BZLGNBQWpDLEVBQWlEcVksb0JBQWpELEVBQXVFO0FBQ3JFO0FBQ0Y7QUFDQTtBQUVFLE1BQUlDLGNBQWMsR0FBRyxFQUFyQjtBQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNFLE1BQUlDLG1CQUFtQixHQUFHO0FBQ3hCO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNJQyxJQUFBQSxNQUFNLEVBQUUsYUFQZ0I7O0FBU3hCO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0lDLElBQUFBLE9BQU8sRUFBRSxhQWhCZTs7QUFrQnhCO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNJQyxJQUFBQSxTQUFTLEVBQUUsYUF4QmE7O0FBMEJ4QjtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDSUMsSUFBQUEsWUFBWSxFQUFFLGFBaENVOztBQWtDeEI7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0lDLElBQUFBLGlCQUFpQixFQUFFLGFBeENLO0FBMEN4Qjs7QUFFQTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNJQyxJQUFBQSxlQUFlLEVBQUUsb0JBdERPOztBQXdEeEI7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNJQyxJQUFBQSxlQUFlLEVBQUUsb0JBdEVPOztBQXdFeEI7QUFDSjtBQUNBO0FBQ0E7QUFDSUMsSUFBQUEsZUFBZSxFQUFFLG9CQTVFTzs7QUE4RXhCO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNJQyxJQUFBQSxNQUFNLEVBQUUsYUE3RmdCO0FBK0Z4Qjs7QUFFQTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNJQyxJQUFBQSxrQkFBa0IsRUFBRSxhQXhHSTs7QUEwR3hCO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0lDLElBQUFBLGlCQUFpQixFQUFFLGFBcEhLOztBQXNIeEI7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDSUMsSUFBQUEseUJBQXlCLEVBQUUsYUF6SUg7O0FBMkl4QjtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0lDLElBQUFBLHFCQUFxQixFQUFFLGFBL0pDOztBQWlLeEI7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0lDLElBQUFBLG1CQUFtQixFQUFFLGFBaExHOztBQWtMeEI7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0lDLElBQUFBLGtCQUFrQixFQUFFLGFBOUxJOztBQWdNeEI7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNJQyxJQUFBQSxvQkFBb0IsRUFBRSxhQTNNRTs7QUE2TXhCO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDSUMsSUFBQUEseUJBQXlCLEVBQUUsYUFsTkg7O0FBb054QjtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0lDLElBQUFBLGdDQUFnQyxFQUFFLGFBek5WOztBQTJOeEI7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNJQyxJQUFBQSwwQkFBMEIsRUFBRSxhQWhPSjtBQWtPeEI7O0FBRUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDSUMsSUFBQUEsZUFBZSxFQUFFO0FBOU9PLEdBQTFCO0FBaVBBO0FBQ0Y7QUFDQTs7QUFDRSxNQUFJQyx5QkFBeUIsR0FBRztBQUM5QjtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNJQyxJQUFBQSx3QkFBd0IsRUFBRTtBQVhJLEdBQWhDO0FBY0E7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNFLE1BQUlDLGtCQUFrQixHQUFHO0FBQ3ZCQyxJQUFBQSxXQUFXLEVBQUUsVUFBUzd5RCxXQUFULEVBQXNCNnlELFdBQXRCLEVBQW1DO0FBQzlDN3lELE1BQUFBLFdBQVcsQ0FBQzZ5RCxXQUFaLEdBQTBCQSxXQUExQjtBQUNELEtBSHNCO0FBSXZCdkIsSUFBQUEsTUFBTSxFQUFFLFVBQVN0eEQsV0FBVCxFQUFzQnN4RCxNQUF0QixFQUE4QjtBQUNwQyxVQUFJQSxNQUFKLEVBQVk7QUFDVixhQUFLLElBQUkxbUUsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRzBtRSxNQUFNLENBQUNqdkUsTUFBM0IsRUFBbUN1SSxDQUFDLEVBQXBDLEVBQXdDO0FBQ3RDa29FLFVBQUFBLG9CQUFvQixDQUFDOXlELFdBQUQsRUFBY3N4RCxNQUFNLENBQUMxbUUsQ0FBRCxDQUFwQixDQUFwQjtBQUNEO0FBQ0Y7QUFDRixLQVZzQjtBQVd2QjhtRSxJQUFBQSxpQkFBaUIsRUFBRSxVQUFTMXhELFdBQVQsRUFBc0IweEQsaUJBQXRCLEVBQXlDO0FBQzFELE1BQTJDO0FBQ3pDcUIsUUFBQUEsZUFBZSxDQUFDL3lELFdBQUQsRUFBYzB4RCxpQkFBZCxFQUFpQyxjQUFqQyxDQUFmO0FBQ0Q7O0FBQ0QxeEQsTUFBQUEsV0FBVyxDQUFDMHhELGlCQUFaLEdBQWdDMUIsT0FBTyxDQUNyQyxFQURxQyxFQUVyQ2h3RCxXQUFXLENBQUMweEQsaUJBRnlCLEVBR3JDQSxpQkFIcUMsQ0FBdkM7QUFLRCxLQXBCc0I7QUFxQnZCRCxJQUFBQSxZQUFZLEVBQUUsVUFBU3p4RCxXQUFULEVBQXNCeXhELFlBQXRCLEVBQW9DO0FBQ2hELE1BQTJDO0FBQ3pDc0IsUUFBQUEsZUFBZSxDQUFDL3lELFdBQUQsRUFBY3l4RCxZQUFkLEVBQTRCLFNBQTVCLENBQWY7QUFDRDs7QUFDRHp4RCxNQUFBQSxXQUFXLENBQUN5eEQsWUFBWixHQUEyQnpCLE9BQU8sQ0FDaEMsRUFEZ0MsRUFFaENod0QsV0FBVyxDQUFDeXhELFlBRm9CLEVBR2hDQSxZQUhnQyxDQUFsQztBQUtELEtBOUJzQjs7QUErQnZCO0FBQ0o7QUFDQTtBQUNBO0FBQ0lFLElBQUFBLGVBQWUsRUFBRSxVQUFTM3hELFdBQVQsRUFBc0IyeEQsZUFBdEIsRUFBdUM7QUFDdEQsVUFBSTN4RCxXQUFXLENBQUMyeEQsZUFBaEIsRUFBaUM7QUFDL0IzeEQsUUFBQUEsV0FBVyxDQUFDMnhELGVBQVosR0FBOEJxQiwwQkFBMEIsQ0FDdERoekQsV0FBVyxDQUFDMnhELGVBRDBDLEVBRXREQSxlQUZzRCxDQUF4RDtBQUlELE9BTEQsTUFLTztBQUNMM3hELFFBQUFBLFdBQVcsQ0FBQzJ4RCxlQUFaLEdBQThCQSxlQUE5QjtBQUNEO0FBQ0YsS0E1Q3NCO0FBNkN2QkgsSUFBQUEsU0FBUyxFQUFFLFVBQVN4eEQsV0FBVCxFQUFzQnd4RCxTQUF0QixFQUFpQztBQUMxQyxNQUEyQztBQUN6Q3VCLFFBQUFBLGVBQWUsQ0FBQy95RCxXQUFELEVBQWN3eEQsU0FBZCxFQUF5QixNQUF6QixDQUFmO0FBQ0Q7O0FBQ0R4eEQsTUFBQUEsV0FBVyxDQUFDd3hELFNBQVosR0FBd0J4QixPQUFPLENBQUMsRUFBRCxFQUFLaHdELFdBQVcsQ0FBQ3d4RCxTQUFqQixFQUE0QkEsU0FBNUIsQ0FBL0I7QUFDRCxLQWxEc0I7QUFtRHZCRCxJQUFBQSxPQUFPLEVBQUUsVUFBU3Z4RCxXQUFULEVBQXNCdXhELE9BQXRCLEVBQStCO0FBQ3RDMEIsTUFBQUEsMEJBQTBCLENBQUNqekQsV0FBRCxFQUFjdXhELE9BQWQsQ0FBMUI7QUFDRCxLQXJEc0I7QUFzRHZCMkIsSUFBQUEsUUFBUSxFQUFFLFlBQVc7QUF0REUsR0FBekI7O0FBeURBLFdBQVNILGVBQVQsQ0FBeUIveUQsV0FBekIsRUFBc0NtekQsT0FBdEMsRUFBK0NwNUMsUUFBL0MsRUFBeUQ7QUFDdkQsU0FBSyxJQUFJcWhDLFFBQVQsSUFBcUIrWCxPQUFyQixFQUE4QjtBQUM1QixVQUFJQSxPQUFPLENBQUN6dUUsY0FBUixDQUF1QjAyRCxRQUF2QixDQUFKLEVBQXNDO0FBQ3BDO0FBQ0E7QUFDQSxRQUEyQztBQUN6Q29WLFVBQUFBLE9BQU8sQ0FDTCxPQUFPMkMsT0FBTyxDQUFDL1gsUUFBRCxDQUFkLEtBQTZCLFVBRHhCLEVBRUwsc0VBQ0Usa0JBSEcsRUFJTHA3QyxXQUFXLENBQUM2eUQsV0FBWixJQUEyQixZQUp0QixFQUtMOUIsMEJBQTBCLENBQUNoM0MsUUFBRCxDQUxyQixFQU1McWhDLFFBTkssQ0FBUDtBQVFEO0FBQ0Y7QUFDRjtBQUNGOztBQUVELFdBQVNnWSxzQkFBVCxDQUFnQ0MsZ0JBQWhDLEVBQWtEanVFLElBQWxELEVBQXdEO0FBQ3RELFFBQUlrdUUsVUFBVSxHQUFHakMsbUJBQW1CLENBQUMzc0UsY0FBcEIsQ0FBbUNVLElBQW5DLElBQ2Jpc0UsbUJBQW1CLENBQUNqc0UsSUFBRCxDQUROLEdBRWIsSUFGSixDQURzRDs7QUFNdEQsUUFBSW11RSxlQUFlLENBQUM3dUUsY0FBaEIsQ0FBK0JVLElBQS9CLENBQUosRUFBMEM7QUFDeENnckUsTUFBQUEsVUFBVSxDQUNSa0QsVUFBVSxLQUFLLGVBRFAsRUFFUix5REFDRSxvRUFERixHQUVFLG9DQUpNLEVBS1JsdUUsSUFMUSxDQUFWO0FBT0QsS0FkcUQ7OztBQWlCdEQsUUFBSWl1RSxnQkFBSixFQUFzQjtBQUNwQmpELE1BQUFBLFVBQVUsQ0FDUmtELFVBQVUsS0FBSyxhQUFmLElBQWdDQSxVQUFVLEtBQUssb0JBRHZDLEVBRVIsdURBQ0Usa0VBREYsR0FFRSxhQUpNLEVBS1JsdUUsSUFMUSxDQUFWO0FBT0Q7QUFDRjtBQUVEO0FBQ0Y7QUFDQTtBQUNBOzs7QUFDRSxXQUFTMHRFLG9CQUFULENBQThCOXlELFdBQTlCLEVBQTJDd3pELElBQTNDLEVBQWlEO0FBQy9DLFFBQUksQ0FBQ0EsSUFBTCxFQUFXO0FBQ1QsTUFBMkM7QUFDekMsWUFBSUMsVUFBVSxHQUFHLE9BQU9ELElBQXhCO0FBQ0EsWUFBSUUsWUFBWSxHQUFHRCxVQUFVLEtBQUssUUFBZixJQUEyQkQsSUFBSSxLQUFLLElBQXZEOztBQUVBLFFBQTJDO0FBQ3pDaEQsVUFBQUEsT0FBTyxDQUNMa0QsWUFESyxFQUVMLGtFQUNFLGdFQURGLEdBRUUsaURBRkYsR0FHRSw2QkFMRyxFQU1MMXpELFdBQVcsQ0FBQzZ5RCxXQUFaLElBQTJCLFlBTnRCLEVBT0xXLElBQUksS0FBSyxJQUFULEdBQWdCLElBQWhCLEdBQXVCQyxVQVBsQixDQUFQO0FBU0Q7QUFDRjs7QUFFRDtBQUNEOztBQUVEckQsSUFBQUEsVUFBVSxDQUNSLE9BQU9vRCxJQUFQLEtBQWdCLFVBRFIsRUFFUixzQ0FDRSxvRUFERixHQUVFLGlCQUpNLENBQVY7O0FBTUFwRCxJQUFBQSxVQUFVLENBQ1IsQ0FBQ3RYLGNBQWMsQ0FBQzBhLElBQUQsQ0FEUCxFQUVSLHNDQUNFLGlFQUhNLENBQVY7O0FBTUEsUUFBSS85RCxLQUFLLEdBQUd1SyxXQUFXLENBQUN6WCxTQUF4QjtBQUNBLFFBQUlvckUsYUFBYSxHQUFHbCtELEtBQUssQ0FBQ20rRCxvQkFBMUIsQ0FuQytDO0FBc0MvQztBQUNBOztBQUNBLFFBQUlKLElBQUksQ0FBQzl1RSxjQUFMLENBQW9CbXNFLFVBQXBCLENBQUosRUFBcUM7QUFDbkMrQixNQUFBQSxrQkFBa0IsQ0FBQ3RCLE1BQW5CLENBQTBCdHhELFdBQTFCLEVBQXVDd3pELElBQUksQ0FBQ2xDLE1BQTVDO0FBQ0Q7O0FBRUQsU0FBSyxJQUFJbHNFLElBQVQsSUFBaUJvdUUsSUFBakIsRUFBdUI7QUFDckIsVUFBSSxDQUFDQSxJQUFJLENBQUM5dUUsY0FBTCxDQUFvQlUsSUFBcEIsQ0FBTCxFQUFnQztBQUM5QjtBQUNEOztBQUVELFVBQUlBLElBQUksS0FBS3lyRSxVQUFiLEVBQXlCO0FBQ3ZCO0FBQ0E7QUFDRDs7QUFFRCxVQUFJem5ELFFBQVEsR0FBR29xRCxJQUFJLENBQUNwdUUsSUFBRCxDQUFuQjtBQUNBLFVBQUlpdUUsZ0JBQWdCLEdBQUc1OUQsS0FBSyxDQUFDL1EsY0FBTixDQUFxQlUsSUFBckIsQ0FBdkI7QUFDQWd1RSxNQUFBQSxzQkFBc0IsQ0FBQ0MsZ0JBQUQsRUFBbUJqdUUsSUFBbkIsQ0FBdEI7O0FBRUEsVUFBSXd0RSxrQkFBa0IsQ0FBQ2x1RSxjQUFuQixDQUFrQ1UsSUFBbEMsQ0FBSixFQUE2QztBQUMzQ3d0RSxRQUFBQSxrQkFBa0IsQ0FBQ3h0RSxJQUFELENBQWxCLENBQXlCNGEsV0FBekIsRUFBc0NvSixRQUF0QztBQUNELE9BRkQsTUFFTztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBSXlxRCxrQkFBa0IsR0FBR3hDLG1CQUFtQixDQUFDM3NFLGNBQXBCLENBQW1DVSxJQUFuQyxDQUF6QjtBQUNBLFlBQUlzOEIsVUFBVSxHQUFHLE9BQU90WSxRQUFQLEtBQW9CLFVBQXJDO0FBQ0EsWUFBSTBxRCxjQUFjLEdBQ2hCcHlDLFVBQVUsSUFDVixDQUFDbXlDLGtCQURELElBRUEsQ0FBQ1IsZ0JBRkQsSUFHQUcsSUFBSSxDQUFDTixRQUFMLEtBQWtCLEtBSnBCOztBQU1BLFlBQUlZLGNBQUosRUFBb0I7QUFDbEJILFVBQUFBLGFBQWEsQ0FBQ3J2RSxJQUFkLENBQW1CYyxJQUFuQixFQUF5QmdrQixRQUF6QjtBQUNBM1QsVUFBQUEsS0FBSyxDQUFDclEsSUFBRCxDQUFMLEdBQWNna0IsUUFBZDtBQUNELFNBSEQsTUFHTztBQUNMLGNBQUlpcUQsZ0JBQUosRUFBc0I7QUFDcEIsZ0JBQUlDLFVBQVUsR0FBR2pDLG1CQUFtQixDQUFDanNFLElBQUQsQ0FBcEMsQ0FEb0I7O0FBSXBCZ3JFLFlBQUFBLFVBQVUsQ0FDUnlELGtCQUFrQixLQUNmUCxVQUFVLEtBQUssb0JBQWYsSUFDQ0EsVUFBVSxLQUFLLGFBRkQsQ0FEVixFQUlSLHNEQUNFLGlDQUxNLEVBTVJBLFVBTlEsRUFPUmx1RSxJQVBRLENBQVYsQ0FKb0I7QUFlcEI7OztBQUNBLGdCQUFJa3VFLFVBQVUsS0FBSyxvQkFBbkIsRUFBeUM7QUFDdkM3OUQsY0FBQUEsS0FBSyxDQUFDclEsSUFBRCxDQUFMLEdBQWM0dEUsMEJBQTBCLENBQUN2OUQsS0FBSyxDQUFDclEsSUFBRCxDQUFOLEVBQWNna0IsUUFBZCxDQUF4QztBQUNELGFBRkQsTUFFTyxJQUFJa3FELFVBQVUsS0FBSyxhQUFuQixFQUFrQztBQUN2Qzc5RCxjQUFBQSxLQUFLLENBQUNyUSxJQUFELENBQUwsR0FBYzJ1RSxxQkFBcUIsQ0FBQ3QrRCxLQUFLLENBQUNyUSxJQUFELENBQU4sRUFBY2drQixRQUFkLENBQW5DO0FBQ0Q7QUFDRixXQXJCRCxNQXFCTztBQUNMM1QsWUFBQUEsS0FBSyxDQUFDclEsSUFBRCxDQUFMLEdBQWNna0IsUUFBZDs7QUFDQSxZQUEyQztBQUN6QztBQUNBO0FBQ0Esa0JBQUksT0FBT0EsUUFBUCxLQUFvQixVQUFwQixJQUFrQ29xRCxJQUFJLENBQUNYLFdBQTNDLEVBQXdEO0FBQ3REcDlELGdCQUFBQSxLQUFLLENBQUNyUSxJQUFELENBQUwsQ0FBWXl0RSxXQUFaLEdBQTBCVyxJQUFJLENBQUNYLFdBQUwsR0FBbUIsR0FBbkIsR0FBeUJ6dEUsSUFBbkQ7QUFDRDtBQUNGO0FBQ0Y7QUFDRjtBQUNGO0FBQ0Y7QUFDRjs7QUFFRCxXQUFTNnRFLDBCQUFULENBQW9DanpELFdBQXBDLEVBQWlEdXhELE9BQWpELEVBQTBEO0FBQ3hELFFBQUksQ0FBQ0EsT0FBTCxFQUFjO0FBQ1o7QUFDRDs7QUFFRCxTQUFLLElBQUluc0UsSUFBVCxJQUFpQm1zRSxPQUFqQixFQUEwQjtBQUN4QixVQUFJbm9ELFFBQVEsR0FBR21vRCxPQUFPLENBQUNuc0UsSUFBRCxDQUF0Qjs7QUFDQSxVQUFJLENBQUNtc0UsT0FBTyxDQUFDN3NFLGNBQVIsQ0FBdUJVLElBQXZCLENBQUwsRUFBbUM7QUFDakM7QUFDRDs7QUFFRCxVQUFJNHVFLFVBQVUsSUFBRzV1RSxJQUFJLElBQUl3dEUsa0JBQVgsQ0FBZDs7QUFDQXhDLE1BQUFBLFVBQVUsQ0FDUixDQUFDNEQsVUFETyxFQUVSLHlEQUNFLHFFQURGLEdBRUUsc0VBRkYsR0FHRSxjQUxNLEVBTVI1dUUsSUFOUSxDQUFWOztBQVNBLFVBQUlpdUUsZ0JBQWdCLElBQUdqdUUsSUFBSSxJQUFJNGEsV0FBWCxDQUFwQjs7QUFDQSxVQUFJcXpELGdCQUFKLEVBQXNCO0FBQ3BCLFlBQUlDLFVBQVUsR0FBR1oseUJBQXlCLENBQUNodUUsY0FBMUIsQ0FBeUNVLElBQXpDLElBQ2JzdEUseUJBQXlCLENBQUN0dEUsSUFBRCxDQURaLEdBRWIsSUFGSjs7QUFJQWdyRSxRQUFBQSxVQUFVLENBQ1JrRCxVQUFVLEtBQUssb0JBRFAsRUFFUiw4Q0FDRSw4REFERixHQUVFLGlCQUpNLEVBS1JsdUUsSUFMUSxDQUFWOztBQVFBNGEsUUFBQUEsV0FBVyxDQUFDNWEsSUFBRCxDQUFYLEdBQW9CNHRFLDBCQUEwQixDQUFDaHpELFdBQVcsQ0FBQzVhLElBQUQsQ0FBWixFQUFvQmdrQixRQUFwQixDQUE5QztBQUVBO0FBQ0Q7O0FBRURwSixNQUFBQSxXQUFXLENBQUM1YSxJQUFELENBQVgsR0FBb0Jna0IsUUFBcEI7QUFDRDtBQUNGO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNFLFdBQVM2cUQsNEJBQVQsQ0FBc0M5NkIsR0FBdEMsRUFBMkMrNkIsR0FBM0MsRUFBZ0Q7QUFDOUM5RCxJQUFBQSxVQUFVLENBQ1JqM0IsR0FBRyxJQUFJKzZCLEdBQVAsSUFBYyxPQUFPLzZCLEdBQVAsS0FBZSxRQUE3QixJQUF5QyxPQUFPKzZCLEdBQVAsS0FBZSxRQURoRCxFQUVSLDJEQUZRLENBQVY7O0FBS0EsU0FBSyxJQUFJaHdFLEdBQVQsSUFBZ0Jnd0UsR0FBaEIsRUFBcUI7QUFDbkIsVUFBSUEsR0FBRyxDQUFDeHZFLGNBQUosQ0FBbUJSLEdBQW5CLENBQUosRUFBNkI7QUFDM0Jrc0UsUUFBQUEsVUFBVSxDQUNSajNCLEdBQUcsQ0FBQ2oxQyxHQUFELENBQUgsS0FBYXZDLFNBREwsRUFFUixxQ0FDRSxvRUFERixHQUVFLGtFQUZGLEdBR0UsbUVBSEYsR0FJRSxxQkFOTSxFQU9SdUMsR0FQUSxDQUFWOztBQVNBaTFDLFFBQUFBLEdBQUcsQ0FBQ2oxQyxHQUFELENBQUgsR0FBV2d3RSxHQUFHLENBQUNod0UsR0FBRCxDQUFkO0FBQ0Q7QUFDRjs7QUFDRCxXQUFPaTFDLEdBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNFLFdBQVM2NUIsMEJBQVQsQ0FBb0M3NUIsR0FBcEMsRUFBeUMrNkIsR0FBekMsRUFBOEM7QUFDNUMsV0FBTyxTQUFTQyxZQUFULEdBQXdCO0FBQzdCLFVBQUlsdUUsQ0FBQyxHQUFHa3pDLEdBQUcsQ0FBQ3BwQyxLQUFKLENBQVUsSUFBVixFQUFnQjNOLFNBQWhCLENBQVI7QUFDQSxVQUFJeU4sQ0FBQyxHQUFHcWtFLEdBQUcsQ0FBQ25rRSxLQUFKLENBQVUsSUFBVixFQUFnQjNOLFNBQWhCLENBQVI7O0FBQ0EsVUFBSTZELENBQUMsSUFBSSxJQUFULEVBQWU7QUFDYixlQUFPNEosQ0FBUDtBQUNELE9BRkQsTUFFTyxJQUFJQSxDQUFDLElBQUksSUFBVCxFQUFlO0FBQ3BCLGVBQU81SixDQUFQO0FBQ0Q7O0FBQ0QsVUFBSTZKLENBQUMsR0FBRyxFQUFSO0FBQ0Fta0UsTUFBQUEsNEJBQTRCLENBQUNua0UsQ0FBRCxFQUFJN0osQ0FBSixDQUE1QjtBQUNBZ3VFLE1BQUFBLDRCQUE0QixDQUFDbmtFLENBQUQsRUFBSUQsQ0FBSixDQUE1QjtBQUNBLGFBQU9DLENBQVA7QUFDRCxLQVpEO0FBYUQ7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDRSxXQUFTaWtFLHFCQUFULENBQStCNTZCLEdBQS9CLEVBQW9DKzZCLEdBQXBDLEVBQXlDO0FBQ3ZDLFdBQU8sU0FBU0UsZUFBVCxHQUEyQjtBQUNoQ2o3QixNQUFBQSxHQUFHLENBQUNwcEMsS0FBSixDQUFVLElBQVYsRUFBZ0IzTixTQUFoQjtBQUNBOHhFLE1BQUFBLEdBQUcsQ0FBQ25rRSxLQUFKLENBQVUsSUFBVixFQUFnQjNOLFNBQWhCO0FBQ0QsS0FIRDtBQUlEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNFLFdBQVNpeUUsa0JBQVQsQ0FBNEI3SCxTQUE1QixFQUF1Q3JxRSxNQUF2QyxFQUErQztBQUM3QyxRQUFJbXlFLFdBQVcsR0FBR255RSxNQUFNLENBQUMwTyxJQUFQLENBQVkyN0QsU0FBWixDQUFsQjs7QUFDQSxJQUEyQztBQUN6QzhILE1BQUFBLFdBQVcsQ0FBQ0MsbUJBQVosR0FBa0MvSCxTQUFsQztBQUNBOEgsTUFBQUEsV0FBVyxDQUFDRSxrQkFBWixHQUFpQ3J5RSxNQUFqQztBQUNBbXlFLE1BQUFBLFdBQVcsQ0FBQ0cscUJBQVosR0FBb0MsSUFBcEM7QUFDQSxVQUFJbmMsYUFBYSxHQUFHa1UsU0FBUyxDQUFDNzdELFdBQVYsQ0FBc0JraUUsV0FBMUM7QUFDQSxVQUFJNkIsS0FBSyxHQUFHSixXQUFXLENBQUN6akUsSUFBeEI7O0FBQ0F5akUsTUFBQUEsV0FBVyxDQUFDempFLElBQVosR0FBbUIsVUFBUzhqRSxPQUFULEVBQWtCO0FBQ25DLGFBQ0UsSUFBSWxFLElBQUksR0FBR3J1RSxTQUFTLENBQUNDLE1BQXJCLEVBQ0VxUyxJQUFJLEdBQUdoSSxLQUFLLENBQUMrakUsSUFBSSxHQUFHLENBQVAsR0FBV0EsSUFBSSxHQUFHLENBQWxCLEdBQXNCLENBQXZCLENBRGQsRUFFRUMsSUFBSSxHQUFHLENBSFgsRUFJRUEsSUFBSSxHQUFHRCxJQUpULEVBS0VDLElBQUksRUFMTixFQU1FO0FBQ0FoOEQsVUFBQUEsSUFBSSxDQUFDZzhELElBQUksR0FBRyxDQUFSLENBQUosR0FBaUJ0dUUsU0FBUyxDQUFDc3VFLElBQUQsQ0FBMUI7QUFDRCxTQVRrQztBQVluQztBQUNBOzs7QUFDQSxZQUFJaUUsT0FBTyxLQUFLbkksU0FBWixJQUF5Qm1JLE9BQU8sS0FBSyxJQUF6QyxFQUErQztBQUM3QyxVQUEyQztBQUN6Q25FLFlBQUFBLE9BQU8sQ0FDTCxLQURLLEVBRUwsOERBQ0UsNEJBSEcsRUFJTGxZLGFBSkssQ0FBUDtBQU1EO0FBQ0YsU0FURCxNQVNPLElBQUksQ0FBQzVqRCxJQUFJLENBQUNyUyxNQUFWLEVBQWtCO0FBQ3ZCLFVBQTJDO0FBQ3pDbXVFLFlBQUFBLE9BQU8sQ0FDTCxLQURLLEVBRUwsa0VBQ0UsOERBREYsR0FFRSxpREFKRyxFQUtMbFksYUFMSyxDQUFQO0FBT0Q7O0FBQ0QsaUJBQU9nYyxXQUFQO0FBQ0Q7O0FBQ0QsWUFBSU0sYUFBYSxHQUFHRixLQUFLLENBQUMza0UsS0FBTixDQUFZdWtFLFdBQVosRUFBeUJseUUsU0FBekIsQ0FBcEI7O0FBQ0F3eUUsUUFBQUEsYUFBYSxDQUFDTCxtQkFBZCxHQUFvQy9ILFNBQXBDO0FBQ0FvSSxRQUFBQSxhQUFhLENBQUNKLGtCQUFkLEdBQW1DcnlFLE1BQW5DO0FBQ0F5eUUsUUFBQUEsYUFBYSxDQUFDSCxxQkFBZCxHQUFzQy8vRCxJQUF0QztBQUNBLGVBQU9rZ0UsYUFBUDtBQUNELE9BeENEO0FBeUNEOztBQUNELFdBQU9OLFdBQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7OztBQUNFLFdBQVNPLG1CQUFULENBQTZCckksU0FBN0IsRUFBd0M7QUFDdEMsUUFBSXNJLEtBQUssR0FBR3RJLFNBQVMsQ0FBQ29ILG9CQUF0Qjs7QUFDQSxTQUFLLElBQUlocEUsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR2txRSxLQUFLLENBQUN6eUUsTUFBMUIsRUFBa0N1SSxDQUFDLElBQUksQ0FBdkMsRUFBMEM7QUFDeEMsVUFBSW1xRSxXQUFXLEdBQUdELEtBQUssQ0FBQ2xxRSxDQUFELENBQXZCO0FBQ0EsVUFBSXpJLE1BQU0sR0FBRzJ5RSxLQUFLLENBQUNscUUsQ0FBQyxHQUFHLENBQUwsQ0FBbEI7QUFDQTRoRSxNQUFBQSxTQUFTLENBQUN1SSxXQUFELENBQVQsR0FBeUJWLGtCQUFrQixDQUFDN0gsU0FBRCxFQUFZcnFFLE1BQVosQ0FBM0M7QUFDRDtBQUNGOztBQUVELE1BQUk2eUUsaUJBQWlCLEdBQUc7QUFDdEJoRCxJQUFBQSxpQkFBaUIsRUFBRSxZQUFXO0FBQzVCLFdBQUtpRCxXQUFMLEdBQW1CLElBQW5CO0FBQ0Q7QUFIcUIsR0FBeEI7QUFNQSxNQUFJQyxrQkFBa0IsR0FBRztBQUN2QjdDLElBQUFBLG9CQUFvQixFQUFFLFlBQVc7QUFDL0IsV0FBSzRDLFdBQUwsR0FBbUIsS0FBbkI7QUFDRDtBQUhzQixHQUF6QjtBQU1BO0FBQ0Y7QUFDQTtBQUNBOztBQUNFLE1BQUkxQixlQUFlLEdBQUc7QUFDcEI7QUFDSjtBQUNBO0FBQ0E7QUFDSTRCLElBQUFBLFlBQVksRUFBRSxVQUFTNU8sUUFBVCxFQUFtQnZxQixRQUFuQixFQUE2QjtBQUN6QyxXQUFLbzVCLE9BQUwsQ0FBYUMsbUJBQWIsQ0FBaUMsSUFBakMsRUFBdUM5TyxRQUF2QyxFQUFpRHZxQixRQUFqRDtBQUNELEtBUG1COztBQVNwQjtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDSXM1QixJQUFBQSxTQUFTLEVBQUUsWUFBVztBQUNwQixNQUEyQztBQUN6QzlFLFFBQUFBLE9BQU8sQ0FDTCxLQUFLK0Usa0JBREEsRUFFTCxpRUFDRSxnRUFERixHQUVFLHVCQUpHLEVBS0osS0FBSzVrRSxXQUFMLElBQW9CLEtBQUtBLFdBQUwsQ0FBaUJraUUsV0FBdEMsSUFDRSxLQUFLenRFLElBRFAsSUFFRSxXQVBHLENBQVA7QUFTQSxhQUFLbXdFLGtCQUFMLEdBQTBCLElBQTFCO0FBQ0Q7O0FBQ0QsYUFBTyxDQUFDLENBQUMsS0FBS04sV0FBZDtBQUNEO0FBN0JtQixHQUF0Qjs7QUFnQ0EsTUFBSU8sbUJBQW1CLEdBQUcsWUFBVyxFQUFyQzs7QUFDQXhGLEVBQUFBLE9BQU8sQ0FDTHdGLG1CQUFtQixDQUFDanRFLFNBRGYsRUFFTDJvRSxjQUFjLENBQUMzb0UsU0FGVixFQUdMZ3JFLGVBSEssQ0FBUDtBQU1BO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNFLFdBQVNrQyxXQUFULENBQXFCakMsSUFBckIsRUFBMkI7QUFDekI7QUFDQTtBQUNBO0FBQ0EsUUFBSXh6RCxXQUFXLEdBQUc4d0QsUUFBUSxDQUFDLFVBQVMzVixLQUFULEVBQWdCdUYsT0FBaEIsRUFBeUIwVSxPQUF6QixFQUFrQztBQUMzRDtBQUNBO0FBRUEsTUFBMkM7QUFDekM1RSxRQUFBQSxPQUFPLENBQ0wsZ0JBQWdCeHdELFdBRFgsRUFFTCx1RUFDRSxxREFIRyxDQUFQO0FBS0QsT0FWMEQ7OztBQWEzRCxVQUFJLEtBQUs0ekQsb0JBQUwsQ0FBMEJ2eEUsTUFBOUIsRUFBc0M7QUFDcEN3eUUsUUFBQUEsbUJBQW1CLENBQUMsSUFBRCxDQUFuQjtBQUNEOztBQUVELFdBQUsxWixLQUFMLEdBQWFBLEtBQWI7QUFDQSxXQUFLdUYsT0FBTCxHQUFlQSxPQUFmO0FBQ0EsV0FBS2dWLElBQUwsR0FBWXpGLFdBQVo7QUFDQSxXQUFLbUYsT0FBTCxHQUFlQSxPQUFPLElBQUlqRSxvQkFBMUI7QUFFQSxXQUFLcnBFLEtBQUwsR0FBYSxJQUFiLENBdEIyRDtBQXlCM0Q7O0FBRUEsVUFBSTZ0RSxZQUFZLEdBQUcsS0FBSy9ELGVBQUwsR0FBdUIsS0FBS0EsZUFBTCxFQUF2QixHQUFnRCxJQUFuRTs7QUFDQSxNQUEyQztBQUN6QztBQUNBLFlBQ0UrRCxZQUFZLEtBQUtoMEUsU0FBakIsSUFDQSxLQUFLaXdFLGVBQUwsQ0FBcUJnRSxlQUZ2QixFQUdFO0FBQ0E7QUFDQTtBQUNBRCxVQUFBQSxZQUFZLEdBQUcsSUFBZjtBQUNEO0FBQ0Y7O0FBQ0R2RixNQUFBQSxVQUFVLENBQ1IsT0FBT3VGLFlBQVAsS0FBd0IsUUFBeEIsSUFBb0MsQ0FBQ2pwRSxLQUFLLENBQUNDLE9BQU4sQ0FBY2dwRSxZQUFkLENBRDdCLEVBRVIscURBRlEsRUFHUjMxRCxXQUFXLENBQUM2eUQsV0FBWixJQUEyQix5QkFIbkIsQ0FBVjs7QUFNQSxXQUFLL3FFLEtBQUwsR0FBYTZ0RSxZQUFiO0FBQ0QsS0E5Q3lCLENBQTFCO0FBK0NBMzFELElBQUFBLFdBQVcsQ0FBQ3pYLFNBQVosR0FBd0IsSUFBSWl0RSxtQkFBSixFQUF4QjtBQUNBeDFELElBQUFBLFdBQVcsQ0FBQ3pYLFNBQVosQ0FBc0JvSSxXQUF0QixHQUFvQ3FQLFdBQXBDO0FBQ0FBLElBQUFBLFdBQVcsQ0FBQ3pYLFNBQVosQ0FBc0JxckUsb0JBQXRCLEdBQTZDLEVBQTdDO0FBRUF4QyxJQUFBQSxjQUFjLENBQUMzL0QsT0FBZixDQUF1QnFoRSxvQkFBb0IsQ0FBQ2ppRSxJQUFyQixDQUEwQixJQUExQixFQUFnQ21QLFdBQWhDLENBQXZCO0FBRUE4eUQsSUFBQUEsb0JBQW9CLENBQUM5eUQsV0FBRCxFQUFjZzFELGlCQUFkLENBQXBCO0FBQ0FsQyxJQUFBQSxvQkFBb0IsQ0FBQzl5RCxXQUFELEVBQWN3ekQsSUFBZCxDQUFwQjtBQUNBVixJQUFBQSxvQkFBb0IsQ0FBQzl5RCxXQUFELEVBQWNrMUQsa0JBQWQsQ0FBcEIsQ0EzRHlCOztBQThEekIsUUFBSWwxRCxXQUFXLENBQUMyeEQsZUFBaEIsRUFBaUM7QUFDL0IzeEQsTUFBQUEsV0FBVyxDQUFDNjFELFlBQVosR0FBMkI3MUQsV0FBVyxDQUFDMnhELGVBQVosRUFBM0I7QUFDRDs7QUFFRCxJQUEyQztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQUkzeEQsV0FBVyxDQUFDMnhELGVBQWhCLEVBQWlDO0FBQy9CM3hELFFBQUFBLFdBQVcsQ0FBQzJ4RCxlQUFaLENBQTRCbUUsb0JBQTVCLEdBQW1ELEVBQW5EO0FBQ0Q7O0FBQ0QsVUFBSTkxRCxXQUFXLENBQUN6WCxTQUFaLENBQXNCcXBFLGVBQTFCLEVBQTJDO0FBQ3pDNXhELFFBQUFBLFdBQVcsQ0FBQ3pYLFNBQVosQ0FBc0JxcEUsZUFBdEIsQ0FBc0NrRSxvQkFBdEMsR0FBNkQsRUFBN0Q7QUFDRDtBQUNGOztBQUVEMUYsSUFBQUEsVUFBVSxDQUNScHdELFdBQVcsQ0FBQ3pYLFNBQVosQ0FBc0J1cEUsTUFEZCxFQUVSLHlFQUZRLENBQVY7O0FBS0EsSUFBMkM7QUFDekN0QixNQUFBQSxPQUFPLENBQ0wsQ0FBQ3h3RCxXQUFXLENBQUN6WCxTQUFaLENBQXNCd3RFLHFCQURsQixFQUVMLDRCQUNFLGlFQURGLEdBRUUsNERBRkYsR0FHRSw2QkFMRyxFQU1MdkMsSUFBSSxDQUFDWCxXQUFMLElBQW9CLGFBTmYsQ0FBUDtBQVFBckMsTUFBQUEsT0FBTyxDQUNMLENBQUN4d0QsV0FBVyxDQUFDelgsU0FBWixDQUFzQnl0RSx5QkFEbEIsRUFFTCw0QkFDRSx3RUFIRyxFQUlMeEMsSUFBSSxDQUFDWCxXQUFMLElBQW9CLGFBSmYsQ0FBUDtBQU1BckMsTUFBQUEsT0FBTyxDQUNMLENBQUN4d0QsV0FBVyxDQUFDelgsU0FBWixDQUFzQjB0RSxnQ0FEbEIsRUFFTCxnRUFDRSxrREFIRyxFQUlMekMsSUFBSSxDQUFDWCxXQUFMLElBQW9CLGFBSmYsQ0FBUDtBQU1ELEtBekd3Qjs7O0FBNEd6QixTQUFLLElBQUlxRCxVQUFULElBQXVCN0UsbUJBQXZCLEVBQTRDO0FBQzFDLFVBQUksQ0FBQ3J4RCxXQUFXLENBQUN6WCxTQUFaLENBQXNCMnRFLFVBQXRCLENBQUwsRUFBd0M7QUFDdENsMkQsUUFBQUEsV0FBVyxDQUFDelgsU0FBWixDQUFzQjJ0RSxVQUF0QixJQUFvQyxJQUFwQztBQUNEO0FBQ0Y7O0FBRUQsV0FBT2wyRCxXQUFQO0FBQ0Q7O0FBRUQsU0FBT3kxRCxXQUFQO0FBQ0Q7O0lBRUQzMUUsV0FBQSxHQUFpQm14RSxTQUFqQjs7Ozs7Ozs7OztBQy85QkEsSUFBSTlFLE9BQUssR0FBRzVyRSxRQUFRLE9BQUQsQ0FBbkI7O0FBQ0EsSUFBSTB3RSxTQUFPLEdBQUcxd0UsV0FBZDs7QUFFQSxJQUFJLE9BQU80ckUsT0FBUCxLQUFpQixXQUFyQixFQUFrQztBQUNoQyxRQUFNdjBELEtBQUssQ0FDVCx1RkFDRSxpRUFGTyxDQUFYO0FBSUQ7OztBQUdELElBQUl1NUQsb0JBQW9CLEdBQUcsSUFBSWhGLE9BQUssQ0FBQ2dLLFNBQVYsR0FBc0JmLE9BQWpEO0lBRUF0MUUsa0JBQUEsR0FBaUJteEUsU0FBTyxDQUN0QjlFLE9BQUssQ0FBQ2dLLFNBRGdCLEVBRXRCaEssT0FBSyxDQUFDclQsY0FGZ0IsRUFHdEJxWSxvQkFIc0IsQ0FBeEI7O0FDckJBLElBQUlpRixPQUFPLEdBQUc3MUUsaUJBQWQ7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsSUFBSTgxRSxhQUFhLEdBQUc7QUFDbEIzRSxFQUFBQSxpQkFBaUIsRUFBRSxJQUREO0FBRWxCNEUsRUFBQUEsV0FBVyxFQUFFLElBRks7QUFHbEI3RSxFQUFBQSxZQUFZLEVBQUUsSUFISTtBQUlsQm9FLEVBQUFBLFlBQVksRUFBRSxJQUpJO0FBS2xCaEQsRUFBQUEsV0FBVyxFQUFFLElBTEs7QUFNbEJsQixFQUFBQSxlQUFlLEVBQUUsSUFOQztBQU9sQjRFLEVBQUFBLHdCQUF3QixFQUFFLElBUFI7QUFRbEI1RCxFQUFBQSx3QkFBd0IsRUFBRSxJQVJSO0FBU2xCckIsRUFBQUEsTUFBTSxFQUFFLElBVFU7QUFVbEJFLEVBQUFBLFNBQVMsRUFBRSxJQVZPO0FBV2xCenBFLEVBQUFBLElBQUksRUFBRTtBQVhZLENBQXBCO0FBYUEsSUFBSXl1RSxhQUFhLEdBQUc7QUFDbEJweEUsRUFBQUEsSUFBSSxFQUFFLElBRFk7QUFFbEIvQyxFQUFBQSxNQUFNLEVBQUUsSUFGVTtBQUdsQmtHLEVBQUFBLFNBQVMsRUFBRSxJQUhPO0FBSWxCa3VFLEVBQUFBLE1BQU0sRUFBRSxJQUpVO0FBS2xCdnBFLEVBQUFBLE1BQU0sRUFBRSxJQUxVO0FBTWxCOUssRUFBQUEsU0FBUyxFQUFFLElBTk87QUFPbEJzMEUsRUFBQUEsS0FBSyxFQUFFO0FBUFcsQ0FBcEI7QUFTQSxJQUFJQyxtQkFBbUIsR0FBRztBQUN4QixjQUFZLElBRFk7QUFFeEI3RSxFQUFBQSxNQUFNLEVBQUUsSUFGZ0I7QUFHeEIrRCxFQUFBQSxZQUFZLEVBQUUsSUFIVTtBQUl4QmhELEVBQUFBLFdBQVcsRUFBRSxJQUpXO0FBS3hCckIsRUFBQUEsU0FBUyxFQUFFO0FBTGEsQ0FBMUI7QUFPQSxJQUFJb0YsWUFBWSxHQUFHO0FBQ2pCLGNBQVksSUFESztBQUVqQkMsRUFBQUEsT0FBTyxFQUFFLElBRlE7QUFHakJoQixFQUFBQSxZQUFZLEVBQUUsSUFIRztBQUlqQmhELEVBQUFBLFdBQVcsRUFBRSxJQUpJO0FBS2pCckIsRUFBQUEsU0FBUyxFQUFFLElBTE07QUFNakJ6cEUsRUFBQUEsSUFBSSxFQUFFO0FBTlcsQ0FBbkI7QUFRQSxJQUFJK3VFLFlBQVksR0FBRyxFQUFuQjtBQUNBQSxZQUFZLENBQUNWLE9BQU8sQ0FBQ2xnQixVQUFULENBQVosR0FBbUN5Z0IsbUJBQW5DO0FBQ0FHLFlBQVksQ0FBQ1YsT0FBTyxDQUFDL2YsSUFBVCxDQUFaLEdBQTZCdWdCLFlBQTdCOztBQUVBLFNBQVNHLFVBQVQsQ0FBb0J2SyxTQUFwQixFQUErQjtBQUM3QjtBQUNBLE1BQUk0SixPQUFPLENBQUNqZixNQUFSLENBQWVxVixTQUFmLENBQUosRUFBK0I7QUFDN0IsV0FBT29LLFlBQVA7QUFDRCxHQUo0Qjs7O0FBTzdCLFNBQU9FLFlBQVksQ0FBQ3RLLFNBQVMsQ0FBQyxVQUFELENBQVYsQ0FBWixJQUF1QzZKLGFBQTlDO0FBQ0Q7O0FBRUQsSUFBSTUxRSxjQUFjLEdBQUdELE1BQU0sQ0FBQ0MsY0FBNUI7QUFDQSxJQUFJdUssbUJBQW1CLEdBQUd4SyxNQUFNLENBQUN3SyxtQkFBakM7QUFDQSxJQUFJakkscUJBQXFCLEdBQUd2QyxNQUFNLENBQUN1QyxxQkFBbkM7QUFDQSxJQUFJbEMsd0JBQXdCLEdBQUdMLE1BQU0sQ0FBQ0ssd0JBQXRDO0FBQ0EsSUFBSXVVLGNBQWMsR0FBRzVVLE1BQU0sQ0FBQzRVLGNBQTVCO0FBQ0EsSUFBSTRoRSxlQUFlLEdBQUd4MkUsTUFBTSxDQUFDK0gsU0FBN0I7O0FBQ0EsU0FBUzB1RSxzQkFBVCxDQUE4QkMsZUFBOUIsRUFBK0NDLGVBQS9DLEVBQWdFQyxTQUFoRSxFQUEyRTtBQUN6RSxNQUFJLE9BQU9ELGVBQVAsS0FBMkIsUUFBL0IsRUFBeUM7QUFDdkM7QUFDQSxRQUFJSCxlQUFKLEVBQXFCO0FBQ25CLFVBQUlLLGtCQUFrQixHQUFHamlFLGNBQWMsQ0FBQytoRSxlQUFELENBQXZDOztBQUVBLFVBQUlFLGtCQUFrQixJQUFJQSxrQkFBa0IsS0FBS0wsZUFBakQsRUFBa0U7QUFDaEVDLFFBQUFBLHNCQUFvQixDQUFDQyxlQUFELEVBQWtCRyxrQkFBbEIsRUFBc0NELFNBQXRDLENBQXBCO0FBQ0Q7QUFDRjs7QUFFRCxRQUFJandFLElBQUksR0FBRzZELG1CQUFtQixDQUFDbXNFLGVBQUQsQ0FBOUI7O0FBRUEsUUFBSXAwRSxxQkFBSixFQUEyQjtBQUN6Qm9FLE1BQUFBLElBQUksR0FBR0EsSUFBSSxDQUFDNEQsTUFBTCxDQUFZaEkscUJBQXFCLENBQUNvMEUsZUFBRCxDQUFqQyxDQUFQO0FBQ0Q7O0FBRUQsUUFBSUcsYUFBYSxHQUFHUCxVQUFVLENBQUNHLGVBQUQsQ0FBOUI7QUFDQSxRQUFJSyxhQUFhLEdBQUdSLFVBQVUsQ0FBQ0ksZUFBRCxDQUE5Qjs7QUFFQSxTQUFLLElBQUl2c0UsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR3pELElBQUksQ0FBQzlFLE1BQXpCLEVBQWlDLEVBQUV1SSxDQUFuQyxFQUFzQztBQUNwQyxVQUFJMUcsR0FBRyxHQUFHaUQsSUFBSSxDQUFDeUQsQ0FBRCxDQUFkOztBQUVBLFVBQUksQ0FBQzRyRSxhQUFhLENBQUN0eUUsR0FBRCxDQUFkLElBQXVCLEVBQUVrekUsU0FBUyxJQUFJQSxTQUFTLENBQUNsekUsR0FBRCxDQUF4QixDQUF2QixJQUF5RCxFQUFFcXpFLGFBQWEsSUFBSUEsYUFBYSxDQUFDcnpFLEdBQUQsQ0FBaEMsQ0FBekQsSUFBbUcsRUFBRW96RSxhQUFhLElBQUlBLGFBQWEsQ0FBQ3B6RSxHQUFELENBQWhDLENBQXZHLEVBQStJO0FBQzdJLFlBQUlqRCxVQUFVLEdBQUdKLHdCQUF3QixDQUFDczJFLGVBQUQsRUFBa0JqekUsR0FBbEIsQ0FBekM7O0FBRUEsWUFBSTtBQUNGO0FBQ0F6RCxVQUFBQSxjQUFjLENBQUN5MkUsZUFBRCxFQUFrQmh6RSxHQUFsQixFQUF1QmpELFVBQXZCLENBQWQ7QUFDRCxTQUhELENBR0UsT0FBT2syQixDQUFQLEVBQVU7QUFDYjtBQUNGO0FBQ0Y7O0FBRUQsU0FBTysvQyxlQUFQO0FBQ0Q7O0lBRURwM0Usd0JBQUEsR0FBaUJtM0Usc0JBQWpCOztBQ3RHQSxJQUFJOUssS0FBSyxHQUFHNXJFLFFBQVEsT0FBRCxDQUFuQjs7QUFDQSxJQUFJaTNFLGdCQUFnQixHQUFHajNFLGtCQUF2Qjs7QUFDQSxJQUFJdzdDLFNBQVMsR0FBR3g3QyxXQUFoQjs7QUFDQSxJQUFJMDJFLG9CQUFvQixHQUFHMTJFLHdCQUEzQjs7QUFFQSxTQUFTazNFLGtCQUFULENBQTZCeGhCLE9BQTdCLEVBQXNDO0FBQ3BDLFdBQVN5aEIsV0FBVCxDQUFzQkMsZ0JBQXRCLEVBQXdDO0FBQ3RDLFFBQUlDLFdBQVcsR0FBR0osZ0JBQWdCLENBQUM7QUFDakN6RixNQUFBQSxrQkFBa0IsRUFBRSxZQUFZO0FBQzlCLGFBQUs4RixnQkFBTCxHQUF3QixFQUF4QjtBQUNBLGFBQUtDLG1CQUFMLEdBQTJCLENBQTNCO0FBQ0QsT0FKZ0M7QUFLakN6RixNQUFBQSxvQkFBb0IsRUFBRSxZQUFZO0FBQ2hDLGFBQUswRixvQkFBTDtBQUNBLGFBQUtDLGVBQUw7QUFDRCxPQVJnQztBQVNqQ0MsTUFBQUEsY0FBYyxFQUFFLFVBQVVsOEMsSUFBVixFQUFnQjMyQixJQUFoQixFQUFzQjh5RSxXQUF0QixFQUFtQztBQUNqRCxZQUFJLENBQUMsS0FBS0wsZ0JBQUwsQ0FBc0J6eUUsSUFBdEIsQ0FBRCxJQUFnQzh5RSxXQUFwQyxFQUFpRDtBQUMvQyxlQUFLTCxnQkFBTCxDQUFzQnp5RSxJQUF0QixJQUE4QixPQUFPMjJCLElBQVAsS0FBZ0IsUUFBaEIsR0FBMkJBLElBQTNCLEdBQWtDLElBQUlrNkIsT0FBSixDQUFZbDZCLElBQVosQ0FBaEU7QUFDQSxlQUFLbzhDLGtCQUFMLEdBQTBCajlDLFVBQVUsQ0FBQyxLQUFLazlDLFdBQU4sQ0FBcEM7QUFDRDs7QUFDRCxlQUFPLEtBQUtQLGdCQUFMLENBQXNCenlFLElBQXRCLENBQVA7QUFDRCxPQWZnQztBQWdCakNnekUsTUFBQUEsV0FBVyxFQUFFLFlBQVk7QUFDdkIsWUFBSUMsVUFBVSxHQUFHdDhCLFNBQVMsQ0FBQyxLQUFLODdCLGdCQUFOLEVBQXdCLFVBQVV6K0QsQ0FBVixFQUFhO0FBQzdELGlCQUFPQSxDQUFDLENBQUNxMUQsT0FBRixFQUFQO0FBQ0QsU0FGeUIsQ0FBMUI7QUFHQSxhQUFLNkosUUFBTCxDQUFjRCxVQUFkO0FBQ0QsT0FyQmdDO0FBc0JqQ0UsTUFBQUEsY0FBYyxFQUFFLFVBQVVDLFFBQVYsRUFBb0I7QUFDbEMsYUFBS1YsbUJBQUwsR0FBMkJqNEUsSUFBSSxDQUFDK0osR0FBTCxDQUFTdWdCLElBQUksQ0FBQ0csR0FBTCxLQUFha3VELFFBQXRCLEVBQWdDLEtBQUtWLG1CQUFyQyxDQUEzQjs7QUFDQSxZQUFJLENBQUMsS0FBS1csd0JBQVYsRUFBb0M7QUFDbEMsZUFBS0Esd0JBQUwsR0FBZ0N6eEIsV0FBVyxDQUFDLFlBQVk7QUFDdEQsZ0JBQUk3OEIsSUFBSSxDQUFDRyxHQUFMLEtBQWEsS0FBS3d0RCxtQkFBdEIsRUFBMkM7QUFDekMsbUJBQUtNLFdBQUw7QUFDRCxhQUZELE1BRU87QUFDTCxtQkFBS0wsb0JBQUw7QUFDRDtBQUNGLFdBTjJDLENBTTFDbG5FLElBTjBDLENBTXJDLElBTnFDLENBQUQsRUFNN0IsRUFONkIsQ0FBM0M7QUFPRDtBQUNGLE9BakNnQztBQWtDakNrbkUsTUFBQUEsb0JBQW9CLEVBQUUsWUFBWTtBQUNoQyxhQUFLVSx3QkFBTCxHQUFnQ0MsYUFBYSxDQUFDLEtBQUtELHdCQUFOLENBQTdDO0FBQ0EsYUFBS1gsbUJBQUwsR0FBMkIsQ0FBM0I7QUFDRCxPQXJDZ0M7QUFzQ2pDRSxNQUFBQSxlQUFlLEVBQUUsWUFBWTtBQUMzQixhQUFLRyxrQkFBTCxHQUEwQlEsWUFBWSxDQUFDLEtBQUtSLGtCQUFOLENBQXRDO0FBQ0QsT0F4Q2dDO0FBeUNqQ1MsTUFBQUEsa0JBQWtCLEVBQUUsWUFBWTtBQUM5QixlQUFPLENBQUMsQ0FBQyxLQUFLSCx3QkFBZDtBQUNELE9BM0NnQztBQTRDakMzRyxNQUFBQSxNQUFNLEVBQUUsWUFBWTtBQUNsQixZQUFJM1csS0FBSyxHQUFHMzZELE1BQU0sQ0FBQ2kzQixNQUFQLENBQWMsRUFBZCxFQUFrQixLQUFLMGpDLEtBQXZCLEVBQThCLEtBQUtyekQsS0FBbkMsRUFBMEM7QUFDcERtd0UsVUFBQUEsY0FBYyxFQUFFLEtBQUtBLGNBRCtCO0FBRXBERyxVQUFBQSxXQUFXLEVBQUUsS0FBS0EsV0FGa0M7QUFHcERHLFVBQUFBLGNBQWMsRUFBRSxLQUFLQSxjQUgrQjtBQUlwRFIsVUFBQUEsb0JBQW9CLEVBQUUsS0FBS0Esb0JBSnlCO0FBS3BEYSxVQUFBQSxrQkFBa0IsRUFBRSxLQUFLQTtBQUwyQixTQUExQyxDQUFaO0FBT0EsZUFBT3pNLEtBQUssQ0FBQ3BtRSxhQUFOLENBQW9CNHhFLGdCQUFwQixFQUFzQ3hjLEtBQXRDLENBQVA7QUFDRDtBQXJEZ0MsS0FBRCxDQUFsQztBQXVEQXljLElBQUFBLFdBQVcsQ0FBQy9FLFdBQVosR0FBMEIsaUJBQWlCZ0csY0FBYyxDQUFDbEIsZ0JBQUQsQ0FBL0IsR0FBb0QsR0FBOUU7QUFDQVYsSUFBQUEsb0JBQW9CLENBQUNXLFdBQUQsRUFBY0QsZ0JBQWQsQ0FBcEI7QUFDQSxXQUFPQyxXQUFQO0FBQ0Q7O0FBRUQsU0FBT0YsV0FBUDtBQUNEOztBQUVELFNBQVNtQixjQUFULENBQXlCbEIsZ0JBQXpCLEVBQTJDO0FBQ3pDLFNBQU9BLGdCQUFnQixDQUFDOUUsV0FBakIsSUFBZ0M4RSxnQkFBZ0IsQ0FBQ3Z5RSxJQUFqRCxJQUF5RCxXQUFoRTtBQUNEOztJQUVEdEYsWUFBQSxHQUFpQjIzRSxrQkFBakI7O0FDMUVBLElBQUl0OEQsT0FBTyxHQUFHNWEsUUFBZDs7QUFDQSxJQUFJUCxRQUFNLEdBQUdPLE9BQWI7O0FBQ0EsSUFBSW0zRSxXQUFXLEdBQUduM0UsWUFBbEI7O0FBRUEsU0FBUzB3RSxTQUFULEdBQW9CO0FBQ2xCLE1BQUloYixPQUFPLEdBQUc5NkMsT0FBTyxFQUFyQjtBQUNBLE1BQUkyMEQsTUFBTSxHQUFHOXZFLFFBQU0sRUFBbkI7QUFDQSxNQUFJODRFLFlBQVksR0FBRztBQUNqQjdpQixJQUFBQSxPQUFPLEVBQUVBLE9BRFE7QUFFakI4aUIsSUFBQUEsV0FBVyxFQUFFakosTUFGSTtBQUdqQjRILElBQUFBLFdBQVcsRUFBRUEsV0FBVyxDQUFDemhCLE9BQUQsQ0FIUDtBQUlqQmx3RCxJQUFBQSxhQUFhLEVBQUUsVUFBVW00RCxRQUFWLEVBQW9CO0FBQ2pDLGFBQU8sSUFBSWpJLE9BQUosQ0FBWWlJLFFBQVosQ0FBUDtBQUNELEtBTmdCO0FBT2pCOGEsSUFBQUEsZUFBZSxFQUFFLFVBQVU5MkUsU0FBVixFQUFxQmc4RCxRQUFyQixFQUErQjtBQUM5QyxhQUFPLEtBQUtuNEQsYUFBTCxDQUFtQm00RCxRQUFuQixDQUFQO0FBQ0QsS0FUZ0I7QUFVakI4QyxJQUFBQSx1QkFBdUIsRUFBRSxZQUFZO0FBQ25DO0FBQ0E7QUFDQSxhQUFPLENBQVA7QUFDRDtBQWRnQixHQUFuQjtBQWlCQS9LLEVBQUFBLE9BQU8sQ0FBQzF0RCxTQUFSLENBQWtCODNELGFBQWxCLEdBQWtDeVksWUFBbEM7QUFDQSxTQUFPQSxZQUFQO0FBQ0Q7O0lBRURoNUUsU0FBQSxHQUFpQm14RSxTQUFqQjs7QUM1QkEsSUFBSUEsT0FBTyxHQUFHMXdFLFNBQWQ7O0lBQ0FULFlBQUEsR0FBaUJteEUsT0FBTyxFQUF4Qjs7QUNEQSxJQUFJZ0ksSUFBSSxHQUFHO0FBQUM3M0UsRUFBQUEsS0FBSyxFQUFFLFlBQVc7QUFBbkIsQ0FBWDs7QUFFQSxTQUFTODNFLFVBQVQsR0FBb0I7QUFDbEIsT0FBSyxJQUFJdHVFLENBQUMsR0FBRyxDQUFSLEVBQVd3TyxDQUFDLEdBQUdoWCxTQUFTLENBQUNDLE1BQXpCLEVBQWlDd3BDLENBQUMsR0FBRyxFQUFyQyxFQUF5Q2xaLENBQTlDLEVBQWlEL25CLENBQUMsR0FBR3dPLENBQXJELEVBQXdELEVBQUV4TyxDQUExRCxFQUE2RDtBQUMzRCxRQUFJLEVBQUUrbkIsQ0FBQyxHQUFHdndCLFNBQVMsQ0FBQ3dJLENBQUQsQ0FBVCxHQUFlLEVBQXJCLEtBQTZCK25CLENBQUMsSUFBSWtaLENBQWxDLElBQXdDLFFBQVEza0MsSUFBUixDQUFheXJCLENBQWIsQ0FBNUMsRUFBNkQsTUFBTSxJQUFJL2EsS0FBSixDQUFVLG1CQUFtQithLENBQTdCLENBQU47QUFDN0RrWixJQUFBQSxDQUFDLENBQUNsWixDQUFELENBQUQsR0FBTyxFQUFQO0FBQ0Q7O0FBQ0QsU0FBTyxJQUFJZ0gsUUFBSixDQUFha1MsQ0FBYixDQUFQO0FBQ0Q7O0FBRUQsU0FBU2xTLFFBQVQsQ0FBa0JrUyxDQUFsQixFQUFxQjtBQUNuQixPQUFLQSxDQUFMLEdBQVNBLENBQVQ7QUFDRDs7QUFFRCxTQUFTc3RDLGdCQUFULENBQXdCQyxTQUF4QixFQUFtQ0MsS0FBbkMsRUFBMEM7QUFDeEMsU0FBT0QsU0FBUyxDQUFDcmtELElBQVYsR0FBaUJyekIsS0FBakIsQ0FBdUIsT0FBdkIsRUFBZ0NnUSxHQUFoQyxDQUFvQyxVQUFTaWhCLENBQVQsRUFBWTtBQUNyRCxRQUFJdnRCLElBQUksR0FBRyxFQUFYO0FBQUEsUUFBZXdGLENBQUMsR0FBRytuQixDQUFDLENBQUNqb0IsT0FBRixDQUFVLEdBQVYsQ0FBbkI7QUFDQSxRQUFJRSxDQUFDLElBQUksQ0FBVCxFQUFZeEYsSUFBSSxHQUFHdXRCLENBQUMsQ0FBQ254QixLQUFGLENBQVFvSixDQUFDLEdBQUcsQ0FBWixDQUFQLEVBQXVCK25CLENBQUMsR0FBR0EsQ0FBQyxDQUFDbnhCLEtBQUYsQ0FBUSxDQUFSLEVBQVdvSixDQUFYLENBQTNCO0FBQ1osUUFBSStuQixDQUFDLElBQUksQ0FBQzBtRCxLQUFLLENBQUMzMEUsY0FBTixDQUFxQml1QixDQUFyQixDQUFWLEVBQW1DLE1BQU0sSUFBSS9hLEtBQUosQ0FBVSxtQkFBbUIrYSxDQUE3QixDQUFOO0FBQ25DLFdBQU87QUFBQzVxQixNQUFBQSxJQUFJLEVBQUU0cUIsQ0FBUDtBQUFVdnRCLE1BQUFBLElBQUksRUFBRUE7QUFBaEIsS0FBUDtBQUNELEdBTE0sQ0FBUDtBQU1EOztBQUVEdTBCLFFBQVEsQ0FBQ3B4QixTQUFULEdBQXFCMndFLFVBQVEsQ0FBQzN3RSxTQUFULEdBQXFCO0FBQ3hDb0ksRUFBQUEsV0FBVyxFQUFFZ3BCLFFBRDJCO0FBRXhDMi9DLEVBQUFBLEVBQUUsRUFBRSxVQUFTQyxRQUFULEVBQW1CdjlCLFFBQW5CLEVBQTZCO0FBQy9CLFFBQUluUSxDQUFDLEdBQUcsS0FBS0EsQ0FBYjtBQUFBLFFBQ0lqVSxDQUFDLEdBQUd1aEQsZ0JBQWMsQ0FBQ0ksUUFBUSxHQUFHLEVBQVosRUFBZ0IxdEMsQ0FBaEIsQ0FEdEI7QUFBQSxRQUVJbFosQ0FGSjtBQUFBLFFBR0kvbkIsQ0FBQyxHQUFHLENBQUMsQ0FIVDtBQUFBLFFBSUl3TyxDQUFDLEdBQUd3ZSxDQUFDLENBQUN2MUIsTUFKVixDQUQrQjs7QUFRL0IsUUFBSUQsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQXZCLEVBQTBCO0FBQ3hCLGFBQU8sRUFBRXVJLENBQUYsR0FBTXdPLENBQWIsRUFBZ0IsSUFBSSxDQUFDdVosQ0FBQyxHQUFHLENBQUM0bUQsUUFBUSxHQUFHM2hELENBQUMsQ0FBQ2h0QixDQUFELENBQWIsRUFBa0I3QyxJQUF2QixNQUFpQzRxQixDQUFDLEdBQUdqeUIsR0FBRyxDQUFDbXJDLENBQUMsQ0FBQ2xaLENBQUQsQ0FBRixFQUFPNG1ELFFBQVEsQ0FBQ24wRSxJQUFoQixDQUF4QyxDQUFKLEVBQW9FLE9BQU91dEIsQ0FBUDs7QUFDcEY7QUFDRCxLQVg4QjtBQWMvQjs7O0FBQ0EsUUFBSXFwQixRQUFRLElBQUksSUFBWixJQUFvQixPQUFPQSxRQUFQLEtBQW9CLFVBQTVDLEVBQXdELE1BQU0sSUFBSXBrQyxLQUFKLENBQVUsdUJBQXVCb2tDLFFBQWpDLENBQU47O0FBQ3hELFdBQU8sRUFBRXB4QyxDQUFGLEdBQU13TyxDQUFiLEVBQWdCO0FBQ2QsVUFBSXVaLENBQUMsR0FBRyxDQUFDNG1ELFFBQVEsR0FBRzNoRCxDQUFDLENBQUNodEIsQ0FBRCxDQUFiLEVBQWtCN0MsSUFBMUIsRUFBZ0M4akMsQ0FBQyxDQUFDbFosQ0FBRCxDQUFELEdBQU9sckIsR0FBRyxDQUFDb2tDLENBQUMsQ0FBQ2xaLENBQUQsQ0FBRixFQUFPNG1ELFFBQVEsQ0FBQ24wRSxJQUFoQixFQUFzQjQyQyxRQUF0QixDQUFWLENBQWhDLEtBQ0ssSUFBSUEsUUFBUSxJQUFJLElBQWhCLEVBQXNCLEtBQUtycEIsQ0FBTCxJQUFVa1osQ0FBVixFQUFhQSxDQUFDLENBQUNsWixDQUFELENBQUQsR0FBT2xyQixHQUFHLENBQUNva0MsQ0FBQyxDQUFDbFosQ0FBRCxDQUFGLEVBQU80bUQsUUFBUSxDQUFDbjBFLElBQWhCLEVBQXNCLElBQXRCLENBQVY7QUFDekM7O0FBRUQsV0FBTyxJQUFQO0FBQ0QsR0F4QnVDO0FBeUJ4Q28wRSxFQUFBQSxJQUFJLEVBQUUsWUFBVztBQUNmLFFBQUlBLElBQUksR0FBRyxFQUFYO0FBQUEsUUFBZTN0QyxDQUFDLEdBQUcsS0FBS0EsQ0FBeEI7O0FBQ0EsU0FBSyxJQUFJbFosQ0FBVCxJQUFja1osQ0FBZCxFQUFpQjJ0QyxJQUFJLENBQUM3bUQsQ0FBRCxDQUFKLEdBQVVrWixDQUFDLENBQUNsWixDQUFELENBQUQsQ0FBS254QixLQUFMLEVBQVY7O0FBQ2pCLFdBQU8sSUFBSW00QixRQUFKLENBQWE2L0MsSUFBYixDQUFQO0FBQ0QsR0E3QnVDO0FBOEJ4Q3o0RSxFQUFBQSxJQUFJLEVBQUUsVUFBU2dILElBQVQsRUFBZTZILElBQWYsRUFBcUI7QUFDekIsUUFBSSxDQUFDd0osQ0FBQyxHQUFHaFgsU0FBUyxDQUFDQyxNQUFWLEdBQW1CLENBQXhCLElBQTZCLENBQWpDLEVBQW9DLEtBQUssSUFBSXFTLElBQUksR0FBRyxJQUFJaEksS0FBSixDQUFVME0sQ0FBVixDQUFYLEVBQXlCeE8sQ0FBQyxHQUFHLENBQTdCLEVBQWdDd08sQ0FBaEMsRUFBbUN1WixDQUF4QyxFQUEyQy9uQixDQUFDLEdBQUd3TyxDQUEvQyxFQUFrRCxFQUFFeE8sQ0FBcEQsRUFBdUQ4SixJQUFJLENBQUM5SixDQUFELENBQUosR0FBVXhJLFNBQVMsQ0FBQ3dJLENBQUMsR0FBRyxDQUFMLENBQW5CO0FBQzNGLFFBQUksQ0FBQyxLQUFLaWhDLENBQUwsQ0FBT25uQyxjQUFQLENBQXNCcUQsSUFBdEIsQ0FBTCxFQUFrQyxNQUFNLElBQUk2UCxLQUFKLENBQVUsbUJBQW1CN1AsSUFBN0IsQ0FBTjs7QUFDbEMsU0FBSzRxQixDQUFDLEdBQUcsS0FBS2taLENBQUwsQ0FBTzlqQyxJQUFQLENBQUosRUFBa0I2QyxDQUFDLEdBQUcsQ0FBdEIsRUFBeUJ3TyxDQUFDLEdBQUd1WixDQUFDLENBQUN0d0IsTUFBcEMsRUFBNEN1SSxDQUFDLEdBQUd3TyxDQUFoRCxFQUFtRCxFQUFFeE8sQ0FBckQsRUFBd0QrbkIsQ0FBQyxDQUFDL25CLENBQUQsQ0FBRCxDQUFLeEosS0FBTCxDQUFXMk8sS0FBWCxDQUFpQkgsSUFBakIsRUFBdUI4RSxJQUF2QjtBQUN6RCxHQWxDdUM7QUFtQ3hDM0UsRUFBQUEsS0FBSyxFQUFFLFVBQVNoSSxJQUFULEVBQWU2SCxJQUFmLEVBQXFCOEUsSUFBckIsRUFBMkI7QUFDaEMsUUFBSSxDQUFDLEtBQUttM0IsQ0FBTCxDQUFPbm5DLGNBQVAsQ0FBc0JxRCxJQUF0QixDQUFMLEVBQWtDLE1BQU0sSUFBSTZQLEtBQUosQ0FBVSxtQkFBbUI3UCxJQUE3QixDQUFOOztBQUNsQyxTQUFLLElBQUk0cUIsQ0FBQyxHQUFHLEtBQUtrWixDQUFMLENBQU85akMsSUFBUCxDQUFSLEVBQXNCNkMsQ0FBQyxHQUFHLENBQTFCLEVBQTZCd08sQ0FBQyxHQUFHdVosQ0FBQyxDQUFDdHdCLE1BQXhDLEVBQWdEdUksQ0FBQyxHQUFHd08sQ0FBcEQsRUFBdUQsRUFBRXhPLENBQXpELEVBQTREK25CLENBQUMsQ0FBQy9uQixDQUFELENBQUQsQ0FBS3hKLEtBQUwsQ0FBVzJPLEtBQVgsQ0FBaUJILElBQWpCLEVBQXVCOEUsSUFBdkI7QUFDN0Q7QUF0Q3VDLENBQTFDOztBQXlDQSxTQUFTaFUsR0FBVCxDQUFhcUgsSUFBYixFQUFtQjNDLElBQW5CLEVBQXlCO0FBQ3ZCLE9BQUssSUFBSXdGLENBQUMsR0FBRyxDQUFSLEVBQVd3TyxDQUFDLEdBQUdyUixJQUFJLENBQUMxRixNQUFwQixFQUE0QnlOLENBQWpDLEVBQW9DbEYsQ0FBQyxHQUFHd08sQ0FBeEMsRUFBMkMsRUFBRXhPLENBQTdDLEVBQWdEO0FBQzlDLFFBQUksQ0FBQ2tGLENBQUMsR0FBRy9ILElBQUksQ0FBQzZDLENBQUQsQ0FBVCxFQUFjeEYsSUFBZCxLQUF1QkEsSUFBM0IsRUFBaUM7QUFDL0IsYUFBTzBLLENBQUMsQ0FBQzFPLEtBQVQ7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsU0FBU3FHLEdBQVQsQ0FBYU0sSUFBYixFQUFtQjNDLElBQW5CLEVBQXlCNDJDLFFBQXpCLEVBQW1DO0FBQ2pDLE9BQUssSUFBSXB4QyxDQUFDLEdBQUcsQ0FBUixFQUFXd08sQ0FBQyxHQUFHclIsSUFBSSxDQUFDMUYsTUFBekIsRUFBaUN1SSxDQUFDLEdBQUd3TyxDQUFyQyxFQUF3QyxFQUFFeE8sQ0FBMUMsRUFBNkM7QUFDM0MsUUFBSTdDLElBQUksQ0FBQzZDLENBQUQsQ0FBSixDQUFReEYsSUFBUixLQUFpQkEsSUFBckIsRUFBMkI7QUFDekIyQyxNQUFBQSxJQUFJLENBQUM2QyxDQUFELENBQUosR0FBVXF1RSxJQUFWLEVBQWdCbHhFLElBQUksR0FBR0EsSUFBSSxDQUFDdkcsS0FBTCxDQUFXLENBQVgsRUFBY29KLENBQWQsRUFBaUJHLE1BQWpCLENBQXdCaEQsSUFBSSxDQUFDdkcsS0FBTCxDQUFXb0osQ0FBQyxHQUFHLENBQWYsQ0FBeEIsQ0FBdkI7QUFDQTtBQUNEO0FBQ0Y7O0FBQ0QsTUFBSW94QyxRQUFRLElBQUksSUFBaEIsRUFBc0JqMEMsSUFBSSxDQUFDekQsSUFBTCxDQUFVO0FBQUNjLElBQUFBLElBQUksRUFBRUEsSUFBUDtBQUFhaEUsSUFBQUEsS0FBSyxFQUFFNDZDO0FBQXBCLEdBQVY7QUFDdEIsU0FBT2owQyxJQUFQO0FBQ0Q7Ozs7Ozs7QUNqRkQ7QUFDQTtBQUVBLElBQUlteEUsUUFBUSxHQUFHMzRFLEdBQUEsQ0FBdUIyNEUsUUFBdEM7O0FBRUEsSUFBSU8sWUFBWSxHQUFHNTVFLElBQUksQ0FBQzg4QyxFQUFMLEdBQVUsR0FBN0I7QUFBQSxJQUNJKzhCLEVBQUUsR0FBRyxLQUFLLEVBQUwsSUFBVyxDQURwQjtBQUFBLElBRUlwdUMsRUFBRSxHQUFHLEtBQUssRUFGZDs7SUFJQXhyQyxPQUFBLEdBQWlCLFlBQVc7QUFDMUIsTUFBSTh3QixJQUFJLEdBQUcsQ0FBQyxHQUFELEVBQU0sR0FBTixDQUFYO0FBQUEsTUFDSXVuQyxJQUFJLEdBQUd3aEIsU0FEWDtBQUFBLE1BRUlDLElBQUksR0FBR0MsU0FGWDtBQUFBLE1BR0lDLFFBQVEsR0FBR0MsYUFIZjtBQUFBLE1BSUlDLFNBQVMsR0FBR0MsZUFKaEI7QUFBQSxNQUtJQyxVQUFVLEdBQUdELGVBTGpCO0FBQUEsTUFNSUUsTUFBTSxHQUFHQyxXQU5iO0FBQUEsTUFPSUMsT0FBTyxHQUFHQyxZQVBkO0FBQUEsTUFRSUMsTUFBTSxHQUFHQyxpQkFSYjtBQUFBLE1BU0lDLEtBQUssR0FBRyxFQVRaO0FBQUEsTUFVSUMsWUFBWSxHQUFHNTJELFFBVm5CO0FBQUEsTUFXSXdXLEtBQUssR0FBRzQrQyxRQUFRLENBQUMsTUFBRCxFQUFTLEtBQVQsQ0FYcEI7QUFBQSxNQVlJeUIsS0FBSyxHQUFHLElBWlo7QUFBQSxNQWFJNzFFLE1BQU0sR0FBR2pGLElBQUksQ0FBQ2lGLE1BYmxCO0FBQUEsTUFjSTgxRSxLQUFLLEdBQUcsRUFkWjtBQUFBLE1BZUlDLE1BQU0sR0FBR0MsV0FmYjs7QUFpQkFGLEVBQUFBLEtBQUssQ0FBQ0MsTUFBTixHQUFlLFVBQVNodkMsQ0FBVCxFQUFZO0FBQ3pCLFdBQU96cEMsU0FBUyxDQUFDQyxNQUFWLElBQW9CdzRFLE1BQU0sR0FBR0UsT0FBTyxDQUFDbHZDLENBQUQsQ0FBaEIsRUFBcUIrdUMsS0FBekMsSUFBa0RDLE1BQXpEO0FBQ0QsR0FGRDs7QUFJQUQsRUFBQUEsS0FBSyxDQUFDcmhFLEtBQU4sR0FBYyxZQUFXO0FBQ3ZCLFFBQUl5aEUsZUFBZSxHQUFHQyxVQUFVLENBQUNKLE1BQU0sRUFBUCxDQUFoQztBQUFBLFFBQ0lLLEtBQUssR0FBR0MsU0FBUyxDQUFDLENBQUN2cUQsSUFBSSxDQUFDLENBQUQsQ0FBSixJQUFXLENBQVosSUFBaUJBLElBQUksQ0FBQyxDQUFELENBQXRCLENBRHJCO0FBQUEsUUFFSXdxRCxNQUFNLEdBQUcsSUFGYjtBQUFBLFFBR0loaUUsQ0FBQyxHQUFHcWhFLEtBQUssQ0FBQ3A0RSxNQUhkO0FBQUEsUUFJSXVJLENBQUMsR0FBRyxDQUFDLENBSlQ7QUFBQSxRQUtJeXdFLElBQUksR0FBRyxFQUxYO0FBQUEsUUFNSTN2RSxJQUFJLEdBQUcrdUUsS0FBSyxDQUFDL29FLEdBQU4sQ0FBVSxVQUFTMitELENBQVQsRUFBWXpsRSxDQUFaLEVBQWU7QUFDOUJ5bEUsTUFBQUEsQ0FBQyxDQUFDbFksSUFBRixHQUFTQSxJQUFJLENBQUNwM0QsSUFBTCxDQUFVLElBQVYsRUFBZ0JzdkUsQ0FBaEIsRUFBbUJ6bEUsQ0FBbkIsQ0FBVDtBQUNBeWxFLE1BQUFBLENBQUMsQ0FBQ3VKLElBQUYsR0FBU0EsSUFBSSxDQUFDNzRFLElBQUwsQ0FBVSxJQUFWLEVBQWdCc3ZFLENBQWhCLEVBQW1CemxFLENBQW5CLENBQVQ7QUFDQXlsRSxNQUFBQSxDQUFDLENBQUMzaEUsS0FBRixHQUFVc3JFLFNBQVMsQ0FBQ2o1RSxJQUFWLENBQWUsSUFBZixFQUFxQnN2RSxDQUFyQixFQUF3QnpsRSxDQUF4QixDQUFWO0FBQ0F5bEUsTUFBQUEsQ0FBQyxDQUFDaUwsTUFBRixHQUFXcEIsVUFBVSxDQUFDbjVFLElBQVgsQ0FBZ0IsSUFBaEIsRUFBc0JzdkUsQ0FBdEIsRUFBeUJ6bEUsQ0FBekIsQ0FBWDtBQUNBeWxFLE1BQUFBLENBQUMsQ0FBQzhKLE1BQUYsR0FBV0EsTUFBTSxDQUFDcDVFLElBQVAsQ0FBWSxJQUFaLEVBQWtCc3ZFLENBQWxCLEVBQXFCemxFLENBQXJCLENBQVg7QUFDQXlsRSxNQUFBQSxDQUFDLENBQUN6L0MsSUFBRixHQUFTLENBQUMsQ0FBQ2twRCxRQUFRLENBQUMvNEUsSUFBVCxDQUFjLElBQWQsRUFBb0JzdkUsQ0FBcEIsRUFBdUJ6bEUsQ0FBdkIsQ0FBWDtBQUNBeWxFLE1BQUFBLENBQUMsQ0FBQ2dLLE9BQUYsR0FBWUEsT0FBTyxDQUFDdDVFLElBQVIsQ0FBYSxJQUFiLEVBQW1Cc3ZFLENBQW5CLEVBQXNCemxFLENBQXRCLENBQVo7QUFDQSxhQUFPeWxFLENBQVA7QUFDRCxLQVRNLEVBU0podkQsSUFUSSxDQVNDLFVBQVNwYixDQUFULEVBQVk0SixDQUFaLEVBQWU7QUFBRSxhQUFPQSxDQUFDLENBQUMrZ0IsSUFBRixHQUFTM3FCLENBQUMsQ0FBQzJxQixJQUFsQjtBQUF5QixLQVQzQyxDQU5YO0FBaUJBLFFBQUkrcEQsS0FBSixFQUFXakMsYUFBYSxDQUFDaUMsS0FBRCxDQUFiO0FBQ1hBLElBQUFBLEtBQUssR0FBRzN6QixXQUFXLENBQUMvdkMsSUFBRCxFQUFPLENBQVAsQ0FBbkI7QUFDQUEsSUFBQUEsSUFBSTtBQUVKLFdBQU8yakUsS0FBUDs7QUFFQSxhQUFTM2pFLElBQVQsR0FBZ0I7QUFDZCxVQUFJc0MsS0FBSyxHQUFHNFEsSUFBSSxDQUFDRyxHQUFMLEVBQVo7O0FBQ0EsYUFBT0gsSUFBSSxDQUFDRyxHQUFMLEtBQWEvUSxLQUFiLEdBQXFCbWhFLFlBQXJCLElBQXFDLEVBQUU5dkUsQ0FBRixHQUFNd08sQ0FBM0MsSUFBZ0R1aEUsS0FBdkQsRUFBOEQ7QUFDNUQsWUFBSXRLLENBQUMsR0FBRzNrRSxJQUFJLENBQUNkLENBQUQsQ0FBWjtBQUNBeWxFLFFBQUFBLENBQUMsQ0FBQ3R1RCxDQUFGLEdBQU82TyxJQUFJLENBQUMsQ0FBRCxDQUFKLElBQVc5ckIsTUFBTSxLQUFLLEVBQXRCLENBQUQsSUFBK0IsQ0FBckM7QUFDQXVyRSxRQUFBQSxDQUFDLENBQUNydUQsQ0FBRixHQUFPNE8sSUFBSSxDQUFDLENBQUQsQ0FBSixJQUFXOXJCLE1BQU0sS0FBSyxFQUF0QixDQUFELElBQStCLENBQXJDO0FBQ0F5MkUsUUFBQUEsV0FBVyxDQUFDUCxlQUFELEVBQWtCM0ssQ0FBbEIsRUFBcUIza0UsSUFBckIsRUFBMkJkLENBQTNCLENBQVg7O0FBQ0EsWUFBSXlsRSxDQUFDLENBQUNtTCxPQUFGLElBQWFDLEtBQUssQ0FBQ1AsS0FBRCxFQUFRN0ssQ0FBUixFQUFXK0ssTUFBWCxDQUF0QixFQUEwQztBQUN4Q0MsVUFBQUEsSUFBSSxDQUFDLzJFLElBQUwsQ0FBVStyRSxDQUFWO0FBQ0EvMUMsVUFBQUEsS0FBSyxDQUFDdjVCLElBQU4sQ0FBVyxNQUFYLEVBQW1CNjVFLEtBQW5CLEVBQTBCdkssQ0FBMUI7QUFDQSxjQUFJK0ssTUFBSixFQUFZTSxXQUFXLENBQUNOLE1BQUQsRUFBUy9LLENBQVQsQ0FBWCxDQUFaLEtBQ0srSyxNQUFNLEdBQUcsQ0FBQztBQUFDcjVELFlBQUFBLENBQUMsRUFBRXN1RCxDQUFDLENBQUN0dUQsQ0FBRixHQUFNc3VELENBQUMsQ0FBQy95QixFQUFaO0FBQWdCdDdCLFlBQUFBLENBQUMsRUFBRXF1RCxDQUFDLENBQUNydUQsQ0FBRixHQUFNcXVELENBQUMsQ0FBQzd5QjtBQUEzQixXQUFELEVBQWlDO0FBQUN6N0IsWUFBQUEsQ0FBQyxFQUFFc3VELENBQUMsQ0FBQ3R1RCxDQUFGLEdBQU1zdUQsQ0FBQyxDQUFDOXlCLEVBQVo7QUFBZ0J2N0IsWUFBQUEsQ0FBQyxFQUFFcXVELENBQUMsQ0FBQ3J1RCxDQUFGLEdBQU1xdUQsQ0FBQyxDQUFDNXlCO0FBQTNCLFdBQWpDLENBQVQsQ0FKbUM7O0FBTXhDNHlCLFVBQUFBLENBQUMsQ0FBQ3R1RCxDQUFGLElBQU82TyxJQUFJLENBQUMsQ0FBRCxDQUFKLElBQVcsQ0FBbEI7QUFDQXkvQyxVQUFBQSxDQUFDLENBQUNydUQsQ0FBRixJQUFPNE8sSUFBSSxDQUFDLENBQUQsQ0FBSixJQUFXLENBQWxCO0FBQ0Q7QUFDRjs7QUFDRCxVQUFJaG1CLENBQUMsSUFBSXdPLENBQVQsRUFBWTtBQUNWd2hFLFFBQUFBLEtBQUssQ0FBQzFqRSxJQUFOO0FBQ0FvakIsUUFBQUEsS0FBSyxDQUFDdjVCLElBQU4sQ0FBVyxLQUFYLEVBQWtCNjVFLEtBQWxCLEVBQXlCUyxJQUF6QixFQUErQkQsTUFBL0I7QUFDRDtBQUNGO0FBQ0YsR0E5Q0Q7O0FBZ0RBUixFQUFBQSxLQUFLLENBQUMxakUsSUFBTixHQUFhLFlBQVc7QUFDdEIsUUFBSXlqRSxLQUFKLEVBQVc7QUFDVGpDLE1BQUFBLGFBQWEsQ0FBQ2lDLEtBQUQsQ0FBYjtBQUNBQSxNQUFBQSxLQUFLLEdBQUcsSUFBUjtBQUNEOztBQUNELFdBQU9DLEtBQVA7QUFDRCxHQU5EOztBQVFBLFdBQVNLLFVBQVQsQ0FBb0JKLE1BQXBCLEVBQTRCO0FBQzFCQSxJQUFBQSxNQUFNLENBQUNjLEtBQVAsR0FBZWQsTUFBTSxDQUFDZSxNQUFQLEdBQWdCLENBQS9CO0FBQ0EsUUFBSUMsS0FBSyxHQUFHaDhFLElBQUksQ0FBQyt4QixJQUFMLENBQVVpcEQsTUFBTSxDQUFDSSxVQUFQLENBQWtCLElBQWxCLEVBQXdCYSxZQUF4QixDQUFxQyxDQUFyQyxFQUF3QyxDQUF4QyxFQUEyQyxDQUEzQyxFQUE4QyxDQUE5QyxFQUFpRHB3RSxJQUFqRCxDQUFzRHJKLE1BQXRELElBQWdFLENBQTFFLENBQVo7QUFDQXc0RSxJQUFBQSxNQUFNLENBQUNjLEtBQVAsR0FBZSxDQUFDakMsRUFBRSxJQUFJLENBQVAsSUFBWW1DLEtBQTNCO0FBQ0FoQixJQUFBQSxNQUFNLENBQUNlLE1BQVAsR0FBZ0J0d0MsRUFBRSxHQUFHdXdDLEtBQXJCO0FBRUEsUUFBSW5iLE9BQU8sR0FBR21hLE1BQU0sQ0FBQ0ksVUFBUCxDQUFrQixJQUFsQixDQUFkO0FBQ0F2YSxJQUFBQSxPQUFPLENBQUNxYixTQUFSLEdBQW9CcmIsT0FBTyxDQUFDc2IsV0FBUixHQUFzQixLQUExQztBQUNBdGIsSUFBQUEsT0FBTyxDQUFDdWIsU0FBUixHQUFvQixRQUFwQjtBQUVBLFdBQU87QUFBQ3ZiLE1BQUFBLE9BQU8sRUFBRUEsT0FBVjtBQUFtQm1iLE1BQUFBLEtBQUssRUFBRUE7QUFBMUIsS0FBUDtBQUNEOztBQUVELFdBQVNKLEtBQVQsQ0FBZVAsS0FBZixFQUFzQmp1RSxHQUF0QixFQUEyQm11RSxNQUEzQixFQUFtQztBQUNqQyxJQUFnQixDQUFDO0FBQUNyNUQsTUFBQUEsQ0FBQyxFQUFFLENBQUo7QUFBT0MsTUFBQUEsQ0FBQyxFQUFFO0FBQVYsS0FBRCxFQUFlO0FBQUNELE1BQUFBLENBQUMsRUFBRTZPLElBQUksQ0FBQyxDQUFELENBQVI7QUFBYTVPLE1BQUFBLENBQUMsRUFBRTRPLElBQUksQ0FBQyxDQUFEO0FBQXBCLEtBQWYsQ0FBaEI7QUFBQSxZQUNJc3JELE1BQU0sR0FBR2p2RSxHQUFHLENBQUM4VSxDQURqQjtBQUFBLFFBRUlvNkQsTUFBTSxHQUFHbHZFLEdBQUcsQ0FBQytVLENBRmpCO0FBQUEsUUFHSW82RCxRQUFRLEdBQUd2OEUsSUFBSSxDQUFDK3hCLElBQUwsQ0FBVWhCLElBQUksQ0FBQyxDQUFELENBQUosR0FBVUEsSUFBSSxDQUFDLENBQUQsQ0FBZCxHQUFvQkEsSUFBSSxDQUFDLENBQUQsQ0FBSixHQUFVQSxJQUFJLENBQUMsQ0FBRCxDQUE1QyxDQUhmO0FBQUEsUUFJSW9HLENBQUMsR0FBR3VqRCxNQUFNLENBQUMzcEQsSUFBRCxDQUpkO0FBQUEsUUFLSXlyRCxFQUFFLEdBQUd2M0UsTUFBTSxLQUFLLEVBQVgsR0FBZ0IsQ0FBaEIsR0FBb0IsQ0FBQyxDQUw5QjtBQUFBLFFBTUk2dEIsQ0FBQyxHQUFHLENBQUMwcEQsRUFOVDtBQUFBLFFBT0lDLElBUEo7QUFBQSxRQVFJQyxFQVJKO0FBQUEsUUFTSUM7O0FBRUosV0FBT0YsSUFBSSxHQUFHdGxELENBQUMsQ0FBQ3JFLENBQUMsSUFBSTBwRCxFQUFOLENBQWYsRUFBMEI7QUFDeEJFLE1BQUFBLEVBQUUsR0FBRyxDQUFDLENBQUNELElBQUksQ0FBQyxDQUFELENBQVg7QUFDQUUsTUFBQUEsRUFBRSxHQUFHLENBQUMsQ0FBQ0YsSUFBSSxDQUFDLENBQUQsQ0FBWDtBQUVBLFVBQUl6OEUsSUFBSSxDQUFDZ0ssR0FBTCxDQUFTaEssSUFBSSxDQUFDa2pCLEdBQUwsQ0FBU3c1RCxFQUFULENBQVQsRUFBdUIxOEUsSUFBSSxDQUFDa2pCLEdBQUwsQ0FBU3k1RCxFQUFULENBQXZCLEtBQXdDSixRQUE1QyxFQUFzRDtBQUV0RG52RSxNQUFBQSxHQUFHLENBQUM4VSxDQUFKLEdBQVFtNkQsTUFBTSxHQUFHSyxFQUFqQjtBQUNBdHZFLE1BQUFBLEdBQUcsQ0FBQytVLENBQUosR0FBUW02RCxNQUFNLEdBQUdLLEVBQWpCO0FBRUEsVUFBSXZ2RSxHQUFHLENBQUM4VSxDQUFKLEdBQVE5VSxHQUFHLENBQUNxd0MsRUFBWixHQUFpQixDQUFqQixJQUFzQnJ3QyxHQUFHLENBQUMrVSxDQUFKLEdBQVEvVSxHQUFHLENBQUN1d0MsRUFBWixHQUFpQixDQUF2QyxJQUNBdndDLEdBQUcsQ0FBQzhVLENBQUosR0FBUTlVLEdBQUcsQ0FBQ3N3QyxFQUFaLEdBQWlCM3NCLElBQUksQ0FBQyxDQUFELENBRHJCLElBQzRCM2pCLEdBQUcsQ0FBQytVLENBQUosR0FBUS9VLEdBQUcsQ0FBQ3d3QyxFQUFaLEdBQWlCN3NCLElBQUksQ0FBQyxDQUFELENBRHJELEVBQzBELFNBVmxDOztBQVl4QixVQUFJLENBQUN3cUQsTUFBRCxJQUFXLENBQUNxQixZQUFZLENBQUN4dkUsR0FBRCxFQUFNaXVFLEtBQU4sRUFBYXRxRCxJQUFJLENBQUMsQ0FBRCxDQUFqQixDQUE1QixFQUFtRDtBQUNqRCxZQUFJLENBQUN3cUQsTUFBRCxJQUFXc0IsWUFBWSxDQUFDenZFLEdBQUQsRUFBTW11RSxNQUFOLENBQTNCLEVBQTBDO0FBQ3hDLGNBQUl1QixNQUFNLEdBQUcxdkUsR0FBRyxDQUFDMHZFLE1BQWpCO0FBQUEsY0FDSUMsQ0FBQyxHQUFHM3ZFLEdBQUcsQ0FBQzB1RSxLQUFKLElBQWEsQ0FEckI7QUFBQSxjQUVJa0IsRUFBRSxHQUFHanNELElBQUksQ0FBQyxDQUFELENBQUosSUFBVyxDQUZwQjtBQUFBLGNBR0lrc0QsRUFBRSxHQUFHN3ZFLEdBQUcsQ0FBQzhVLENBQUosSUFBUzY2RCxDQUFDLElBQUksQ0FBZCxDQUhUO0FBQUEsY0FJSUcsRUFBRSxHQUFHRCxFQUFFLEdBQUcsSUFKZDtBQUFBLGNBS0lFLEdBQUcsR0FBRyxLQUFLRCxFQUxmO0FBQUEsY0FNSUUsQ0FBQyxHQUFHaHdFLEdBQUcsQ0FBQ3d3QyxFQUFKLEdBQVN4d0MsR0FBRyxDQUFDdXdDLEVBTnJCO0FBQUEsY0FPSXo3QixDQUFDLEdBQUcsQ0FBQzlVLEdBQUcsQ0FBQytVLENBQUosR0FBUS9VLEdBQUcsQ0FBQ3V3QyxFQUFiLElBQW1CcS9CLEVBQW5CLElBQXlCQyxFQUFFLElBQUksQ0FBL0IsQ0FQUjtBQUFBLGNBUUluc0QsSUFSSjs7QUFTQSxlQUFLLElBQUlwUSxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHMDhELENBQXBCLEVBQXVCMThELENBQUMsRUFBeEIsRUFBNEI7QUFDMUJvUSxZQUFBQSxJQUFJLEdBQUcsQ0FBUDs7QUFDQSxpQkFBSyxJQUFJL2xCLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLElBQUlneUUsQ0FBckIsRUFBd0JoeUUsQ0FBQyxFQUF6QixFQUE2QjtBQUMzQnN3RSxjQUFBQSxLQUFLLENBQUNuNUQsQ0FBQyxHQUFHblgsQ0FBTCxDQUFMLElBQWlCK2xCLElBQUksSUFBSXFzRCxHQUFULElBQWlCcHlFLENBQUMsR0FBR2d5RSxDQUFKLEdBQVEsQ0FBQ2pzRCxJQUFJLEdBQUdnc0QsTUFBTSxDQUFDcDhELENBQUMsR0FBR3E4RCxDQUFKLEdBQVFoeUUsQ0FBVCxDQUFkLE1BQStCbXlFLEVBQXZDLEdBQTRDLENBQTdELENBQWhCO0FBQ0Q7O0FBQ0RoN0QsWUFBQUEsQ0FBQyxJQUFJODZELEVBQUw7QUFDRDs7QUFDRCxpQkFBTzV2RSxHQUFHLENBQUMwdkUsTUFBWDtBQUNBLGlCQUFPLElBQVA7QUFDRDtBQUNGO0FBQ0Y7O0FBQ0QsV0FBTyxLQUFQO0FBQ0Q7O0FBRUQvQixFQUFBQSxLQUFLLENBQUNGLFlBQU4sR0FBcUIsVUFBUzd1QyxDQUFULEVBQVk7QUFDL0IsV0FBT3pwQyxTQUFTLENBQUNDLE1BQVYsSUFBb0JxNEUsWUFBWSxHQUFHN3VDLENBQUMsSUFBSSxJQUFMLEdBQVkvbkIsUUFBWixHQUF1QituQixDQUF0QyxFQUF5Qyt1QyxLQUE3RCxJQUFzRUYsWUFBN0U7QUFDRCxHQUZEOztBQUlBRSxFQUFBQSxLQUFLLENBQUNILEtBQU4sR0FBYyxVQUFTNXVDLENBQVQsRUFBWTtBQUN4QixXQUFPenBDLFNBQVMsQ0FBQ0MsTUFBVixJQUFvQm80RSxLQUFLLEdBQUc1dUMsQ0FBUixFQUFXK3VDLEtBQS9CLElBQXdDSCxLQUEvQztBQUNELEdBRkQ7O0FBSUFHLEVBQUFBLEtBQUssQ0FBQ2hxRCxJQUFOLEdBQWEsVUFBU2liLENBQVQsRUFBWTtBQUN2QixXQUFPenBDLFNBQVMsQ0FBQ0MsTUFBVixJQUFvQnV1QixJQUFJLEdBQUcsQ0FBQyxDQUFDaWIsQ0FBQyxDQUFDLENBQUQsQ0FBSCxFQUFRLENBQUNBLENBQUMsQ0FBQyxDQUFELENBQVYsQ0FBUCxFQUF1Qit1QyxLQUEzQyxJQUFvRGhxRCxJQUEzRDtBQUNELEdBRkQ7O0FBSUFncUQsRUFBQUEsS0FBSyxDQUFDaEIsSUFBTixHQUFhLFVBQVMvdEMsQ0FBVCxFQUFZO0FBQ3ZCLFdBQU96cEMsU0FBUyxDQUFDQyxNQUFWLElBQW9CdTNFLElBQUksR0FBR21CLE9BQU8sQ0FBQ2x2QyxDQUFELENBQWQsRUFBbUIrdUMsS0FBdkMsSUFBZ0RoQixJQUF2RDtBQUNELEdBRkQ7O0FBSUFnQixFQUFBQSxLQUFLLENBQUNaLFNBQU4sR0FBa0IsVUFBU251QyxDQUFULEVBQVk7QUFDNUIsV0FBT3pwQyxTQUFTLENBQUNDLE1BQVYsSUFBb0IyM0UsU0FBUyxHQUFHZSxPQUFPLENBQUNsdkMsQ0FBRCxDQUFuQixFQUF3Qit1QyxLQUE1QyxJQUFxRFosU0FBNUQ7QUFDRCxHQUZEOztBQUlBWSxFQUFBQSxLQUFLLENBQUNWLFVBQU4sR0FBbUIsVUFBU3J1QyxDQUFULEVBQVk7QUFDN0IsV0FBT3pwQyxTQUFTLENBQUNDLE1BQVYsSUFBb0I2M0UsVUFBVSxHQUFHYSxPQUFPLENBQUNsdkMsQ0FBRCxDQUFwQixFQUF5Qit1QyxLQUE3QyxJQUFzRFYsVUFBN0Q7QUFDRCxHQUZEOztBQUlBVSxFQUFBQSxLQUFLLENBQUNULE1BQU4sR0FBZSxVQUFTdHVDLENBQVQsRUFBWTtBQUN6QixXQUFPenBDLFNBQVMsQ0FBQ0MsTUFBVixJQUFvQjgzRSxNQUFNLEdBQUdZLE9BQU8sQ0FBQ2x2QyxDQUFELENBQWhCLEVBQXFCK3VDLEtBQXpDLElBQWtEVCxNQUF6RDtBQUNELEdBRkQ7O0FBSUFTLEVBQUFBLEtBQUssQ0FBQ3ppQixJQUFOLEdBQWEsVUFBU3RzQixDQUFULEVBQVk7QUFDdkIsV0FBT3pwQyxTQUFTLENBQUNDLE1BQVYsSUFBb0I4MUQsSUFBSSxHQUFHNGlCLE9BQU8sQ0FBQ2x2QyxDQUFELENBQWQsRUFBbUIrdUMsS0FBdkMsSUFBZ0R6aUIsSUFBdkQ7QUFDRCxHQUZEOztBQUlBeWlCLEVBQUFBLEtBQUssQ0FBQ0wsTUFBTixHQUFlLFVBQVMxdUMsQ0FBVCxFQUFZO0FBQ3pCLFdBQU96cEMsU0FBUyxDQUFDQyxNQUFWLElBQW9CazRFLE1BQU0sR0FBRzJDLE9BQU8sQ0FBQ3J4QyxDQUFELENBQVAsSUFBY0EsQ0FBdkIsRUFBMEIrdUMsS0FBOUMsSUFBdURMLE1BQTlEO0FBQ0QsR0FGRDs7QUFJQUssRUFBQUEsS0FBSyxDQUFDZCxRQUFOLEdBQWlCLFVBQVNqdUMsQ0FBVCxFQUFZO0FBQzNCLFdBQU96cEMsU0FBUyxDQUFDQyxNQUFWLElBQW9CeTNFLFFBQVEsR0FBR2lCLE9BQU8sQ0FBQ2x2QyxDQUFELENBQWxCLEVBQXVCK3VDLEtBQTNDLElBQW9EZCxRQUEzRDtBQUNELEdBRkQ7O0FBSUFjLEVBQUFBLEtBQUssQ0FBQ1AsT0FBTixHQUFnQixVQUFTeHVDLENBQVQsRUFBWTtBQUMxQixXQUFPenBDLFNBQVMsQ0FBQ0MsTUFBVixJQUFvQmc0RSxPQUFPLEdBQUdVLE9BQU8sQ0FBQ2x2QyxDQUFELENBQWpCLEVBQXNCK3VDLEtBQTFDLElBQW1EUCxPQUExRDtBQUNELEdBRkQ7O0FBSUFPLEVBQUFBLEtBQUssQ0FBQzkxRSxNQUFOLEdBQWUsVUFBUyttQyxDQUFULEVBQVk7QUFDekIsV0FBT3pwQyxTQUFTLENBQUNDLE1BQVYsSUFBb0J5QyxNQUFNLEdBQUcrbUMsQ0FBVCxFQUFZK3VDLEtBQWhDLElBQXlDOTFFLE1BQWhEO0FBQ0QsR0FGRDs7QUFJQTgxRSxFQUFBQSxLQUFLLENBQUN0QixFQUFOLEdBQVcsWUFBVztBQUNwQixRQUFJbDRFLEtBQUssR0FBR2s1QixLQUFLLENBQUNnL0MsRUFBTixDQUFTdnBFLEtBQVQsQ0FBZXVxQixLQUFmLEVBQXNCbDRCLFNBQXRCLENBQVo7QUFDQSxXQUFPaEIsS0FBSyxLQUFLazVCLEtBQVYsR0FBa0JzZ0QsS0FBbEIsR0FBMEJ4NUUsS0FBakM7QUFDRCxHQUhEOztBQUtBLFNBQU93NUUsS0FBUDtBQUNELENBbk1EOztBQXFNQSxTQUFTakIsU0FBVCxDQUFtQnRKLENBQW5CLEVBQXNCO0FBQ3BCLFNBQU9BLENBQUMsQ0FBQ2xZLElBQVQ7QUFDRDs7QUFFRCxTQUFTMGhCLFNBQVQsR0FBcUI7QUFDbkIsU0FBTyxPQUFQO0FBQ0Q7O0FBRUQsU0FBU0ksZUFBVCxHQUEyQjtBQUN6QixTQUFPLFFBQVA7QUFDRDs7QUFFRCxTQUFTRixhQUFULENBQXVCMUosQ0FBdkIsRUFBMEI7QUFDeEIsU0FBT3h3RSxJQUFJLENBQUMreEIsSUFBTCxDQUFVeStDLENBQUMsQ0FBQ2p2RSxLQUFaLENBQVA7QUFDRDs7QUFFRCxTQUFTZzVFLFdBQVQsR0FBdUI7QUFDckIsU0FBTyxDQUFDLENBQUMsRUFBRXY2RSxJQUFJLENBQUNpRixNQUFMLEtBQWdCLENBQWxCLENBQUQsR0FBd0IsQ0FBekIsSUFBOEIsRUFBckM7QUFDRDs7QUFFRCxTQUFTdzFFLFlBQVQsR0FBd0I7QUFDdEIsU0FBTyxDQUFQO0FBQ0Q7QUFHRDs7O0FBQ0EsU0FBU2lCLFdBQVQsQ0FBcUJQLGVBQXJCLEVBQXNDM0ssQ0FBdEMsRUFBeUMza0UsSUFBekMsRUFBK0N5eEUsRUFBL0MsRUFBbUQ7QUFDakQsTUFBSTlNLENBQUMsQ0FBQ3NNLE1BQU4sRUFBYztBQUNkLE1BQUk3c0UsQ0FBQyxHQUFHa3JFLGVBQWUsQ0FBQ3RhLE9BQXhCO0FBQUEsTUFDSW1iLEtBQUssR0FBR2IsZUFBZSxDQUFDYSxLQUQ1QjtBQUdBL3JFLEVBQUFBLENBQUMsQ0FBQ3N0RSxTQUFGLENBQVksQ0FBWixFQUFlLENBQWYsRUFBa0IsQ0FBQzFELEVBQUUsSUFBSSxDQUFQLElBQVltQyxLQUE5QixFQUFxQ3Z3QyxFQUFFLEdBQUd1d0MsS0FBMUM7QUFDQSxNQUFJOTVELENBQUMsR0FBRyxDQUFSO0FBQUEsTUFDSUMsQ0FBQyxHQUFHLENBRFI7QUFBQSxNQUVJcTdELElBQUksR0FBRyxDQUZYO0FBQUEsTUFHSWprRSxDQUFDLEdBQUcxTixJQUFJLENBQUNySixNQUhiO0FBSUEsSUFBRTg2RSxFQUFGOztBQUNBLFNBQU8sRUFBRUEsRUFBRixHQUFPL2pFLENBQWQsRUFBaUI7QUFDZmkzRCxJQUFBQSxDQUFDLEdBQUcza0UsSUFBSSxDQUFDeXhFLEVBQUQsQ0FBUjtBQUNBcnRFLElBQUFBLENBQUMsQ0FBQ3d0RSxJQUFGO0FBQ0F4dEUsSUFBQUEsQ0FBQyxDQUFDOHBFLElBQUYsR0FBU3ZKLENBQUMsQ0FBQzNoRSxLQUFGLEdBQVUsR0FBVixHQUFnQjJoRSxDQUFDLENBQUNpTCxNQUFsQixHQUEyQixHQUEzQixHQUFpQyxDQUFDLEVBQUUsQ0FBQ2pMLENBQUMsQ0FBQ3ovQyxJQUFGLEdBQVMsQ0FBVixJQUFlaXJELEtBQWpCLENBQWxDLEdBQTRELEtBQTVELEdBQW9FeEwsQ0FBQyxDQUFDdUosSUFBL0U7QUFDQSxRQUFJZ0QsQ0FBQyxHQUFHOXNFLENBQUMsQ0FBQ3l0RSxXQUFGLENBQWNsTixDQUFDLENBQUNsWSxJQUFGLEdBQVMsR0FBdkIsRUFBNEJ3akIsS0FBNUIsR0FBb0NFLEtBQTVDO0FBQUEsUUFDSW9CLENBQUMsR0FBRzVNLENBQUMsQ0FBQ3ovQyxJQUFGLElBQVUsQ0FEbEI7O0FBRUEsUUFBSXkvQyxDQUFDLENBQUM4SixNQUFOLEVBQWM7QUFDWixVQUFJcUQsRUFBRSxHQUFHMzlFLElBQUksQ0FBQzQ5RSxHQUFMLENBQVNwTixDQUFDLENBQUM4SixNQUFGLEdBQVdWLFlBQXBCLENBQVQ7QUFBQSxVQUNJaUUsRUFBRSxHQUFHNzlFLElBQUksQ0FBQzg5RSxHQUFMLENBQVN0TixDQUFDLENBQUM4SixNQUFGLEdBQVdWLFlBQXBCLENBRFQ7QUFBQSxVQUVJbUUsR0FBRyxHQUFHaEIsQ0FBQyxHQUFHYyxFQUZkO0FBQUEsVUFHSUcsR0FBRyxHQUFHakIsQ0FBQyxHQUFHWSxFQUhkO0FBQUEsVUFJSU0sR0FBRyxHQUFHYixDQUFDLEdBQUdTLEVBSmQ7QUFBQSxVQUtJSyxHQUFHLEdBQUdkLENBQUMsR0FBR08sRUFMZDtBQU1BWixNQUFBQSxDQUFDLEdBQUkvOEUsSUFBSSxDQUFDK0osR0FBTCxDQUFTL0osSUFBSSxDQUFDa2pCLEdBQUwsQ0FBUzY2RCxHQUFHLEdBQUdHLEdBQWYsQ0FBVCxFQUE4QmwrRSxJQUFJLENBQUNrakIsR0FBTCxDQUFTNjZELEdBQUcsR0FBR0csR0FBZixDQUE5QixJQUFxRCxJQUF0RCxJQUErRCxDQUEvRCxJQUFvRSxDQUF4RTtBQUNBZCxNQUFBQSxDQUFDLEdBQUcsQ0FBQyxDQUFDcDlFLElBQUksQ0FBQytKLEdBQUwsQ0FBUy9KLElBQUksQ0FBQ2tqQixHQUFMLENBQVM4NkQsR0FBRyxHQUFHQyxHQUFmLENBQVQsRUFBOEJqK0UsSUFBSSxDQUFDa2pCLEdBQUwsQ0FBUzg2RCxHQUFHLEdBQUdDLEdBQWYsQ0FBOUIsQ0FBTjtBQUNELEtBVEQsTUFTTztBQUNMbEIsTUFBQUEsQ0FBQyxHQUFJQSxDQUFDLEdBQUcsSUFBTCxJQUFjLENBQWQsSUFBbUIsQ0FBdkI7QUFDRDs7QUFDRCxRQUFJSyxDQUFDLEdBQUdJLElBQVIsRUFBY0EsSUFBSSxHQUFHSixDQUFQOztBQUNkLFFBQUlsN0QsQ0FBQyxHQUFHNjZELENBQUosSUFBVWxELEVBQUUsSUFBSSxDQUFwQixFQUF3QjtBQUN0QjMzRCxNQUFBQSxDQUFDLEdBQUcsQ0FBSjtBQUNBQyxNQUFBQSxDQUFDLElBQUlxN0QsSUFBTDtBQUNBQSxNQUFBQSxJQUFJLEdBQUcsQ0FBUDtBQUNEOztBQUNELFFBQUlyN0QsQ0FBQyxHQUFHaTdELENBQUosSUFBUzN4QyxFQUFiLEVBQWlCO0FBQ2pCeDdCLElBQUFBLENBQUMsQ0FBQ2t1RSxTQUFGLENBQVksQ0FBQ2o4RCxDQUFDLElBQUk2NkQsQ0FBQyxJQUFJLENBQVQsQ0FBRixJQUFpQmYsS0FBN0IsRUFBb0MsQ0FBQzc1RCxDQUFDLElBQUlpN0QsQ0FBQyxJQUFJLENBQVQsQ0FBRixJQUFpQnBCLEtBQXJEO0FBQ0EsUUFBSXhMLENBQUMsQ0FBQzhKLE1BQU4sRUFBY3JxRSxDQUFDLENBQUNxcUUsTUFBRixDQUFTOUosQ0FBQyxDQUFDOEosTUFBRixHQUFXVixZQUFwQjtBQUNkM3BFLElBQUFBLENBQUMsQ0FBQ211RSxRQUFGLENBQVc1TixDQUFDLENBQUNsWSxJQUFiLEVBQW1CLENBQW5CLEVBQXNCLENBQXRCO0FBQ0EsUUFBSWtZLENBQUMsQ0FBQ2dLLE9BQU4sRUFBZXZxRSxDQUFDLENBQUNvdUUsU0FBRixHQUFjLElBQUk3TixDQUFDLENBQUNnSyxPQUFwQixFQUE2QnZxRSxDQUFDLENBQUNxdUUsVUFBRixDQUFhOU4sQ0FBQyxDQUFDbFksSUFBZixFQUFxQixDQUFyQixFQUF3QixDQUF4QixDQUE3QjtBQUNmcm9ELElBQUFBLENBQUMsQ0FBQ3N1RSxPQUFGO0FBQ0EvTixJQUFBQSxDQUFDLENBQUNzTCxLQUFGLEdBQVVpQixDQUFWO0FBQ0F2TSxJQUFBQSxDQUFDLENBQUN1TCxNQUFGLEdBQVdxQixDQUFYO0FBQ0E1TSxJQUFBQSxDQUFDLENBQUNnTyxJQUFGLEdBQVN0OEQsQ0FBVDtBQUNBc3VELElBQUFBLENBQUMsQ0FBQ2lPLElBQUYsR0FBU3Q4RCxDQUFUO0FBQ0FxdUQsSUFBQUEsQ0FBQyxDQUFDOXlCLEVBQUYsR0FBT3EvQixDQUFDLElBQUksQ0FBWjtBQUNBdk0sSUFBQUEsQ0FBQyxDQUFDNXlCLEVBQUYsR0FBT3cvQixDQUFDLElBQUksQ0FBWjtBQUNBNU0sSUFBQUEsQ0FBQyxDQUFDL3lCLEVBQUYsR0FBTyxDQUFDK3lCLENBQUMsQ0FBQzl5QixFQUFWO0FBQ0E4eUIsSUFBQUEsQ0FBQyxDQUFDN3lCLEVBQUYsR0FBTyxDQUFDNnlCLENBQUMsQ0FBQzV5QixFQUFWO0FBQ0E0eUIsSUFBQUEsQ0FBQyxDQUFDbUwsT0FBRixHQUFZLElBQVo7QUFDQXo1RCxJQUFBQSxDQUFDLElBQUk2NkQsQ0FBTDtBQUNEOztBQUNELE1BQUkyQixNQUFNLEdBQUd6dUUsQ0FBQyxDQUFDZ3NFLFlBQUYsQ0FBZSxDQUFmLEVBQWtCLENBQWxCLEVBQXFCLENBQUNwQyxFQUFFLElBQUksQ0FBUCxJQUFZbUMsS0FBakMsRUFBd0N2d0MsRUFBRSxHQUFHdXdDLEtBQTdDLEVBQW9EbndFLElBQWpFO0FBQUEsTUFDSWl4RSxNQUFNLEdBQUcsRUFEYjs7QUFFQSxTQUFPLEVBQUVRLEVBQUYsSUFBUSxDQUFmLEVBQWtCO0FBQ2hCOU0sSUFBQUEsQ0FBQyxHQUFHM2tFLElBQUksQ0FBQ3l4RSxFQUFELENBQVI7QUFDQSxRQUFJLENBQUM5TSxDQUFDLENBQUNtTCxPQUFQLEVBQWdCO0FBQ2hCLFFBQUlvQixDQUFDLEdBQUd2TSxDQUFDLENBQUNzTCxLQUFWO0FBQUEsUUFDSTZDLEdBQUcsR0FBRzVCLENBQUMsSUFBSSxDQURmO0FBQUEsUUFFSUssQ0FBQyxHQUFHNU0sQ0FBQyxDQUFDNXlCLEVBQUYsR0FBTzR5QixDQUFDLENBQUM3eUIsRUFGakIsQ0FIZ0I7O0FBT2hCLFNBQUssSUFBSTV5QyxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHcXlFLENBQUMsR0FBR3VCLEdBQXhCLEVBQTZCNXpFLENBQUMsRUFBOUIsRUFBa0MreEUsTUFBTSxDQUFDL3hFLENBQUQsQ0FBTixHQUFZLENBQVo7O0FBQ2xDbVgsSUFBQUEsQ0FBQyxHQUFHc3VELENBQUMsQ0FBQ2dPLElBQU47QUFDQSxRQUFJdDhELENBQUMsSUFBSSxJQUFULEVBQWU7QUFDZkMsSUFBQUEsQ0FBQyxHQUFHcXVELENBQUMsQ0FBQ2lPLElBQU47QUFDQSxRQUFJRyxJQUFJLEdBQUcsQ0FBWDtBQUFBLFFBQ0lDLE9BQU8sR0FBRyxDQUFDLENBRGY7O0FBRUEsU0FBSyxJQUFJbitELENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUcwOEQsQ0FBcEIsRUFBdUIxOEQsQ0FBQyxFQUF4QixFQUE0QjtBQUMxQixXQUFLLElBQUkzVixDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHZ3lFLENBQXBCLEVBQXVCaHlFLENBQUMsRUFBeEIsRUFBNEI7QUFDMUIsWUFBSXVOLENBQUMsR0FBR3FtRSxHQUFHLEdBQUdqK0QsQ0FBTixJQUFXM1YsQ0FBQyxJQUFJLENBQWhCLENBQVI7QUFBQSxZQUNJd2dDLENBQUMsR0FBR216QyxNQUFNLENBQUUsQ0FBQ3Y4RCxDQUFDLEdBQUd6QixDQUFMLEtBQVdtNUQsRUFBRSxJQUFJLENBQWpCLEtBQXVCMzNELENBQUMsR0FBR25YLENBQTNCLENBQUQsSUFBbUMsQ0FBcEMsQ0FBTixHQUErQyxLQUFNLEtBQU1BLENBQUMsR0FBRyxFQUEvRCxHQUFzRSxDQUQ5RTtBQUVBK3hFLFFBQUFBLE1BQU0sQ0FBQ3hrRSxDQUFELENBQU4sSUFBYWl6QixDQUFiO0FBQ0FxekMsUUFBQUEsSUFBSSxJQUFJcnpDLENBQVI7QUFDRDs7QUFDRCxVQUFJcXpDLElBQUosRUFBVUMsT0FBTyxHQUFHbitELENBQVYsQ0FBVixLQUNLO0FBQ0g4dkQsUUFBQUEsQ0FBQyxDQUFDN3lCLEVBQUY7QUFDQXkvQixRQUFBQSxDQUFDO0FBQ0QxOEQsUUFBQUEsQ0FBQztBQUNEeUIsUUFBQUEsQ0FBQztBQUNGO0FBQ0Y7O0FBQ0RxdUQsSUFBQUEsQ0FBQyxDQUFDNXlCLEVBQUYsR0FBTzR5QixDQUFDLENBQUM3eUIsRUFBRixHQUFPa2hDLE9BQWQ7QUFDQXJPLElBQUFBLENBQUMsQ0FBQ3NNLE1BQUYsR0FBV0EsTUFBTSxDQUFDbjdFLEtBQVAsQ0FBYSxDQUFiLEVBQWdCLENBQUM2dUUsQ0FBQyxDQUFDNXlCLEVBQUYsR0FBTzR5QixDQUFDLENBQUM3eUIsRUFBVixJQUFnQmdoQyxHQUFoQyxDQUFYO0FBQ0Q7QUFDRjs7O0FBR0QsU0FBUy9CLFlBQVQsQ0FBc0J4dkUsR0FBdEIsRUFBMkJpdUUsS0FBM0IsRUFBa0MyQixFQUFsQyxFQUFzQztBQUNwQ0EsRUFBQUEsRUFBRSxLQUFLLENBQVA7QUFDQSxNQUFJRixNQUFNLEdBQUcxdkUsR0FBRyxDQUFDMHZFLE1BQWpCO0FBQUEsTUFDSUMsQ0FBQyxHQUFHM3ZFLEdBQUcsQ0FBQzB1RSxLQUFKLElBQWEsQ0FEckI7QUFBQSxNQUVJbUIsRUFBRSxHQUFHN3ZFLEdBQUcsQ0FBQzhVLENBQUosSUFBUzY2RCxDQUFDLElBQUksQ0FBZCxDQUZUO0FBQUEsTUFHSUcsRUFBRSxHQUFHRCxFQUFFLEdBQUcsSUFIZDtBQUFBLE1BSUlFLEdBQUcsR0FBRyxLQUFLRCxFQUpmO0FBQUEsTUFLSUUsQ0FBQyxHQUFHaHdFLEdBQUcsQ0FBQ3d3QyxFQUFKLEdBQVN4d0MsR0FBRyxDQUFDdXdDLEVBTHJCO0FBQUEsTUFNSXo3QixDQUFDLEdBQUcsQ0FBQzlVLEdBQUcsQ0FBQytVLENBQUosR0FBUS9VLEdBQUcsQ0FBQ3V3QyxFQUFiLElBQW1CcS9CLEVBQW5CLElBQXlCQyxFQUFFLElBQUksQ0FBL0IsQ0FOUjtBQUFBLE1BT0luc0QsSUFQSjs7QUFRQSxPQUFLLElBQUlwUSxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHMDhELENBQXBCLEVBQXVCMThELENBQUMsRUFBeEIsRUFBNEI7QUFDMUJvUSxJQUFBQSxJQUFJLEdBQUcsQ0FBUDs7QUFDQSxTQUFLLElBQUkvbEIsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsSUFBSWd5RSxDQUFyQixFQUF3Qmh5RSxDQUFDLEVBQXpCLEVBQTZCO0FBQzNCLFVBQUksQ0FBRStsQixJQUFJLElBQUlxc0QsR0FBVCxJQUFpQnB5RSxDQUFDLEdBQUdneUUsQ0FBSixHQUFRLENBQUNqc0QsSUFBSSxHQUFHZ3NELE1BQU0sQ0FBQ3A4RCxDQUFDLEdBQUdxOEQsQ0FBSixHQUFRaHlFLENBQVQsQ0FBZCxNQUErQm15RSxFQUF2QyxHQUE0QyxDQUE3RCxDQUFELElBQ0U3QixLQUFLLENBQUNuNUQsQ0FBQyxHQUFHblgsQ0FBTCxDQURYLEVBQ29CLE9BQU8sSUFBUDtBQUNyQjs7QUFDRG1YLElBQUFBLENBQUMsSUFBSTg2RCxFQUFMO0FBQ0Q7O0FBQ0QsU0FBTyxLQUFQO0FBQ0Q7O0FBRUQsU0FBU25CLFdBQVQsQ0FBcUJOLE1BQXJCLEVBQTZCL0ssQ0FBN0IsRUFBZ0M7QUFDOUIsTUFBSXNPLEVBQUUsR0FBR3ZELE1BQU0sQ0FBQyxDQUFELENBQWY7QUFBQSxNQUNJd0QsRUFBRSxHQUFHeEQsTUFBTSxDQUFDLENBQUQsQ0FEZjtBQUVBLE1BQUkvSyxDQUFDLENBQUN0dUQsQ0FBRixHQUFNc3VELENBQUMsQ0FBQy95QixFQUFSLEdBQWFxaEMsRUFBRSxDQUFDNThELENBQXBCLEVBQXVCNDhELEVBQUUsQ0FBQzU4RCxDQUFILEdBQU9zdUQsQ0FBQyxDQUFDdHVELENBQUYsR0FBTXN1RCxDQUFDLENBQUMveUIsRUFBZjtBQUN2QixNQUFJK3lCLENBQUMsQ0FBQ3J1RCxDQUFGLEdBQU1xdUQsQ0FBQyxDQUFDN3lCLEVBQVIsR0FBYW1oQyxFQUFFLENBQUMzOEQsQ0FBcEIsRUFBdUIyOEQsRUFBRSxDQUFDMzhELENBQUgsR0FBT3F1RCxDQUFDLENBQUNydUQsQ0FBRixHQUFNcXVELENBQUMsQ0FBQzd5QixFQUFmO0FBQ3ZCLE1BQUk2eUIsQ0FBQyxDQUFDdHVELENBQUYsR0FBTXN1RCxDQUFDLENBQUM5eUIsRUFBUixHQUFhcWhDLEVBQUUsQ0FBQzc4RCxDQUFwQixFQUF1QjY4RCxFQUFFLENBQUM3OEQsQ0FBSCxHQUFPc3VELENBQUMsQ0FBQ3R1RCxDQUFGLEdBQU1zdUQsQ0FBQyxDQUFDOXlCLEVBQWY7QUFDdkIsTUFBSTh5QixDQUFDLENBQUNydUQsQ0FBRixHQUFNcXVELENBQUMsQ0FBQzV5QixFQUFSLEdBQWFtaEMsRUFBRSxDQUFDNThELENBQXBCLEVBQXVCNDhELEVBQUUsQ0FBQzU4RCxDQUFILEdBQU9xdUQsQ0FBQyxDQUFDcnVELENBQUYsR0FBTXF1RCxDQUFDLENBQUM1eUIsRUFBZjtBQUN4Qjs7QUFFRCxTQUFTaS9CLFlBQVQsQ0FBc0J6MkUsQ0FBdEIsRUFBeUI0SixDQUF6QixFQUE0QjtBQUMxQixTQUFPNUosQ0FBQyxDQUFDOGIsQ0FBRixHQUFNOWIsQ0FBQyxDQUFDczNDLEVBQVIsR0FBYTF0QyxDQUFDLENBQUMsQ0FBRCxDQUFELENBQUtrUyxDQUFsQixJQUF1QjliLENBQUMsQ0FBQzhiLENBQUYsR0FBTTliLENBQUMsQ0FBQ3EzQyxFQUFSLEdBQWF6dEMsQ0FBQyxDQUFDLENBQUQsQ0FBRCxDQUFLa1MsQ0FBekMsSUFBOEM5YixDQUFDLENBQUMrYixDQUFGLEdBQU0vYixDQUFDLENBQUN3M0MsRUFBUixHQUFhNXRDLENBQUMsQ0FBQyxDQUFELENBQUQsQ0FBS21TLENBQWhFLElBQXFFL2IsQ0FBQyxDQUFDK2IsQ0FBRixHQUFNL2IsQ0FBQyxDQUFDdTNDLEVBQVIsR0FBYTN0QyxDQUFDLENBQUMsQ0FBRCxDQUFELENBQUttUyxDQUE5RjtBQUNEOztBQUVELFNBQVN3NEQsaUJBQVQsQ0FBMkI1cEQsSUFBM0IsRUFBaUM7QUFDL0IsTUFBSXVHLENBQUMsR0FBR3ZHLElBQUksQ0FBQyxDQUFELENBQUosR0FBVUEsSUFBSSxDQUFDLENBQUQsQ0FBdEI7QUFDQSxTQUFPLFVBQVMrQixDQUFULEVBQVk7QUFDakIsV0FBTyxDQUFDd0UsQ0FBQyxJQUFJeEUsQ0FBQyxJQUFJLEVBQVQsQ0FBRCxHQUFnQjl5QixJQUFJLENBQUM4OUUsR0FBTCxDQUFTaHJELENBQVQsQ0FBakIsRUFBOEJBLENBQUMsR0FBRzl5QixJQUFJLENBQUM0OUUsR0FBTCxDQUFTOXFELENBQVQsQ0FBbEMsQ0FBUDtBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTa3NELGlCQUFULENBQTJCanVELElBQTNCLEVBQWlDO0FBQy9CLE1BQUk0ckQsRUFBRSxHQUFHLENBQVQ7QUFBQSxNQUNJRCxFQUFFLEdBQUdDLEVBQUUsR0FBRzVyRCxJQUFJLENBQUMsQ0FBRCxDQUFULEdBQWVBLElBQUksQ0FBQyxDQUFELENBRDVCO0FBQUEsTUFFSTdPLENBQUMsR0FBRyxDQUZSO0FBQUEsTUFHSUMsQ0FBQyxHQUFHLENBSFI7QUFJQSxTQUFPLFVBQVMyUSxDQUFULEVBQVk7QUFDakIsUUFBSWhQLElBQUksR0FBR2dQLENBQUMsR0FBRyxDQUFKLEdBQVEsQ0FBQyxDQUFULEdBQWEsQ0FBeEIsQ0FEaUI7O0FBR2pCLFlBQVM5eUIsSUFBSSxDQUFDK3hCLElBQUwsQ0FBVSxJQUFJLElBQUlqTyxJQUFKLEdBQVdnUCxDQUF6QixJQUE4QmhQLElBQS9CLEdBQXVDLENBQS9DO0FBQ0UsV0FBSyxDQUFMO0FBQVM1QixRQUFBQSxDQUFDLElBQUl3NkQsRUFBTDtBQUFTOztBQUNsQixXQUFLLENBQUw7QUFBU3Y2RCxRQUFBQSxDQUFDLElBQUl3NkQsRUFBTDtBQUFTOztBQUNsQixXQUFLLENBQUw7QUFBU3o2RCxRQUFBQSxDQUFDLElBQUl3NkQsRUFBTDtBQUFTOztBQUNsQjtBQUFTdjZELFFBQUFBLENBQUMsSUFBSXc2RCxFQUFMO0FBQVM7QUFKcEI7O0FBTUEsV0FBTyxDQUFDejZELENBQUQsRUFBSUMsQ0FBSixDQUFQO0FBQ0QsR0FWRDtBQVdEOzs7QUFHRCxTQUFTbTVELFNBQVQsQ0FBbUIvaEUsQ0FBbkIsRUFBc0I7QUFDcEIsTUFBSW5ULENBQUMsR0FBRyxFQUFSO0FBQUEsTUFDSTJFLENBQUMsR0FBRyxDQUFDLENBRFQ7O0FBRUEsU0FBTyxFQUFFQSxDQUFGLEdBQU13TyxDQUFiLEVBQWdCblQsQ0FBQyxDQUFDMkUsQ0FBRCxDQUFELEdBQU8sQ0FBUDs7QUFDaEIsU0FBTzNFLENBQVA7QUFDRDs7QUFFRCxTQUFTNjBFLFdBQVQsR0FBdUI7QUFDckIsU0FBT2oxRSxRQUFRLENBQUNFLGFBQVQsQ0FBdUIsUUFBdkIsQ0FBUDtBQUNEOztBQUVELFNBQVNnMUUsT0FBVCxDQUFpQjFLLENBQWpCLEVBQW9CO0FBQ2xCLFNBQU8sT0FBT0EsQ0FBUCxLQUFhLFVBQWIsR0FBMEJBLENBQTFCLEdBQThCLFlBQVc7QUFBRSxXQUFPQSxDQUFQO0FBQVcsR0FBN0Q7QUFDRDs7QUFFRCxJQUFJNk0sT0FBTyxHQUFHO0FBQ1o0QixFQUFBQSxXQUFXLEVBQUV0RSxpQkFERDtBQUVadUUsRUFBQUEsV0FBVyxFQUFFRjtBQUZELENBQWQ7Ozs7QUN6WUEsSUFBSUcsY0FBYyxHQUFHLE9BQU8vb0IsT0FBUCxLQUFtQixXQUF4QztBQUNBLElBQUlncEIsTUFBTSxHQUFHLE9BQU96dEQsR0FBUCxLQUFlLFVBQTVCO0FBQ0EsSUFBSTB0RCxNQUFNLEdBQUcsT0FBT2g0QyxHQUFQLEtBQWUsVUFBNUI7QUFDQSxJQUFJaTRDLGNBQWMsR0FBRyxPQUFPdjhELFdBQVAsS0FBdUIsVUFBdkIsSUFBcUMsQ0FBQyxDQUFDQSxXQUFXLENBQUNrRyxNQUF4RTs7QUFJQSxTQUFTczJELEtBQVQsQ0FBZW41RSxDQUFmLEVBQWtCNEosQ0FBbEIsRUFBcUI7QUFDbkI7QUFDQSxNQUFJNUosQ0FBQyxLQUFLNEosQ0FBVixFQUFhLE9BQU8sSUFBUDs7QUFFYixNQUFJNUosQ0FBQyxJQUFJNEosQ0FBTCxJQUFVLE9BQU81SixDQUFQLElBQVksUUFBdEIsSUFBa0MsT0FBTzRKLENBQVAsSUFBWSxRQUFsRCxFQUE0RDtBQUMxRCxRQUFJNUosQ0FBQyxDQUFDMEssV0FBRixLQUFrQmQsQ0FBQyxDQUFDYyxXQUF4QixFQUFxQyxPQUFPLEtBQVA7QUFFckMsUUFBSXRPLE1BQUosRUFBWXVJLENBQVosRUFBZXpELElBQWY7O0FBQ0EsUUFBSXVGLEtBQUssQ0FBQ0MsT0FBTixDQUFjMUcsQ0FBZCxDQUFKLEVBQXNCO0FBQ3BCNUQsTUFBQUEsTUFBTSxHQUFHNEQsQ0FBQyxDQUFDNUQsTUFBWDtBQUNBLFVBQUlBLE1BQU0sSUFBSXdOLENBQUMsQ0FBQ3hOLE1BQWhCLEVBQXdCLE9BQU8sS0FBUDs7QUFDeEIsV0FBS3VJLENBQUMsR0FBR3ZJLE1BQVQsRUFBaUJ1SSxDQUFDLE9BQU8sQ0FBekIsR0FDRSxJQUFJLENBQUN3MEUsS0FBSyxDQUFDbjVFLENBQUMsQ0FBQzJFLENBQUQsQ0FBRixFQUFPaUYsQ0FBQyxDQUFDakYsQ0FBRCxDQUFSLENBQVYsRUFBd0IsT0FBTyxLQUFQOztBQUMxQixhQUFPLElBQVA7QUFDRCxLQVZ5RDtBQWExRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0EsUUFBSWhMLEVBQUo7O0FBQ0EsUUFBSXEvRSxNQUFNLElBQUtoNUUsQ0FBQyxZQUFZdXJCLEdBQXhCLElBQWlDM2hCLENBQUMsWUFBWTJoQixHQUFsRCxFQUF3RDtBQUN0RCxVQUFJdnJCLENBQUMsQ0FBQzJxQixJQUFGLEtBQVcvZ0IsQ0FBQyxDQUFDK2dCLElBQWpCLEVBQXVCLE9BQU8sS0FBUDtBQUN2Qmh4QixNQUFBQSxFQUFFLEdBQUdxRyxDQUFDLENBQUM2WCxPQUFGLEVBQUw7O0FBQ0EsYUFBTyxDQUFDLENBQUNsVCxDQUFDLEdBQUdoTCxFQUFFLENBQUNvWCxJQUFILEVBQUwsRUFBZ0JLLElBQXhCLEVBQ0UsSUFBSSxDQUFDeEgsQ0FBQyxDQUFDbkksR0FBRixDQUFNa0QsQ0FBQyxDQUFDeEosS0FBRixDQUFRLENBQVIsQ0FBTixDQUFMLEVBQXdCLE9BQU8sS0FBUDs7QUFDMUJ4QixNQUFBQSxFQUFFLEdBQUdxRyxDQUFDLENBQUM2WCxPQUFGLEVBQUw7O0FBQ0EsYUFBTyxDQUFDLENBQUNsVCxDQUFDLEdBQUdoTCxFQUFFLENBQUNvWCxJQUFILEVBQUwsRUFBZ0JLLElBQXhCLEVBQ0UsSUFBSSxDQUFDK25FLEtBQUssQ0FBQ3gwRSxDQUFDLENBQUN4SixLQUFGLENBQVEsQ0FBUixDQUFELEVBQWF5TyxDQUFDLENBQUNuUCxHQUFGLENBQU1rSyxDQUFDLENBQUN4SixLQUFGLENBQVEsQ0FBUixDQUFOLENBQWIsQ0FBVixFQUEyQyxPQUFPLEtBQVA7O0FBQzdDLGFBQU8sSUFBUDtBQUNEOztBQUVELFFBQUk4OUUsTUFBTSxJQUFLajVFLENBQUMsWUFBWWloQyxHQUF4QixJQUFpQ3IzQixDQUFDLFlBQVlxM0IsR0FBbEQsRUFBd0Q7QUFDdEQsVUFBSWpoQyxDQUFDLENBQUMycUIsSUFBRixLQUFXL2dCLENBQUMsQ0FBQytnQixJQUFqQixFQUF1QixPQUFPLEtBQVA7QUFDdkJoeEIsTUFBQUEsRUFBRSxHQUFHcUcsQ0FBQyxDQUFDNlgsT0FBRixFQUFMOztBQUNBLGFBQU8sQ0FBQyxDQUFDbFQsQ0FBQyxHQUFHaEwsRUFBRSxDQUFDb1gsSUFBSCxFQUFMLEVBQWdCSyxJQUF4QixFQUNFLElBQUksQ0FBQ3hILENBQUMsQ0FBQ25JLEdBQUYsQ0FBTWtELENBQUMsQ0FBQ3hKLEtBQUYsQ0FBUSxDQUFSLENBQU4sQ0FBTCxFQUF3QixPQUFPLEtBQVA7O0FBQzFCLGFBQU8sSUFBUDtBQUNELEtBbER5RDs7O0FBcUQxRCxRQUFJKzlFLGNBQWMsSUFBSXY4RCxXQUFXLENBQUNrRyxNQUFaLENBQW1CN2lCLENBQW5CLENBQWxCLElBQTJDMmMsV0FBVyxDQUFDa0csTUFBWixDQUFtQmpaLENBQW5CLENBQS9DLEVBQXNFO0FBQ3BFeE4sTUFBQUEsTUFBTSxHQUFHNEQsQ0FBQyxDQUFDNUQsTUFBWDtBQUNBLFVBQUlBLE1BQU0sSUFBSXdOLENBQUMsQ0FBQ3hOLE1BQWhCLEVBQXdCLE9BQU8sS0FBUDs7QUFDeEIsV0FBS3VJLENBQUMsR0FBR3ZJLE1BQVQsRUFBaUJ1SSxDQUFDLE9BQU8sQ0FBekIsR0FDRSxJQUFJM0UsQ0FBQyxDQUFDMkUsQ0FBRCxDQUFELEtBQVNpRixDQUFDLENBQUNqRixDQUFELENBQWQsRUFBbUIsT0FBTyxLQUFQOztBQUNyQixhQUFPLElBQVA7QUFDRDs7QUFFRCxRQUFJM0UsQ0FBQyxDQUFDMEssV0FBRixLQUFrQmtrQixNQUF0QixFQUE4QixPQUFPNXVCLENBQUMsQ0FBQ3FELE1BQUYsS0FBYXVHLENBQUMsQ0FBQ3ZHLE1BQWYsSUFBeUJyRCxDQUFDLENBQUMyOUIsS0FBRixLQUFZL3pCLENBQUMsQ0FBQyt6QixLQUE5QztBQUM5QixRQUFJMzlCLENBQUMsQ0FBQ2hDLE9BQUYsS0FBY3pELE1BQU0sQ0FBQytILFNBQVAsQ0FBaUJ0RSxPQUFuQyxFQUE0QyxPQUFPZ0MsQ0FBQyxDQUFDaEMsT0FBRixPQUFnQjRMLENBQUMsQ0FBQzVMLE9BQUYsRUFBdkI7QUFDNUMsUUFBSWdDLENBQUMsQ0FBQzFFLFFBQUYsS0FBZWYsTUFBTSxDQUFDK0gsU0FBUCxDQUFpQmhILFFBQXBDLEVBQThDLE9BQU8wRSxDQUFDLENBQUMxRSxRQUFGLE9BQWlCc08sQ0FBQyxDQUFDdE8sUUFBRixFQUF4QjtBQUU5QzRGLElBQUFBLElBQUksR0FBRzNHLE1BQU0sQ0FBQzJHLElBQVAsQ0FBWWxCLENBQVosQ0FBUDtBQUNBNUQsSUFBQUEsTUFBTSxHQUFHOEUsSUFBSSxDQUFDOUUsTUFBZDtBQUNBLFFBQUlBLE1BQU0sS0FBSzdCLE1BQU0sQ0FBQzJHLElBQVAsQ0FBWTBJLENBQVosRUFBZXhOLE1BQTlCLEVBQXNDLE9BQU8sS0FBUDs7QUFFdEMsU0FBS3VJLENBQUMsR0FBR3ZJLE1BQVQsRUFBaUJ1SSxDQUFDLE9BQU8sQ0FBekIsR0FDRSxJQUFJLENBQUNwSyxNQUFNLENBQUMrSCxTQUFQLENBQWlCN0QsY0FBakIsQ0FBZ0MzRCxJQUFoQyxDQUFxQzhPLENBQXJDLEVBQXdDMUksSUFBSSxDQUFDeUQsQ0FBRCxDQUE1QyxDQUFMLEVBQXVELE9BQU8sS0FBUCxDQXRFQztBQXlFMUQ7QUFDQTs7O0FBQ0EsUUFBSW8wRSxjQUFjLElBQUkvNEUsQ0FBQyxZQUFZZ3dELE9BQW5DLEVBQTRDLE9BQU8sS0FBUCxDQTNFYzs7QUE4RTFELFNBQUtyckQsQ0FBQyxHQUFHdkksTUFBVCxFQUFpQnVJLENBQUMsT0FBTyxDQUF6QixHQUE2QjtBQUMzQixVQUFJLENBQUN6RCxJQUFJLENBQUN5RCxDQUFELENBQUosS0FBWSxRQUFaLElBQXdCekQsSUFBSSxDQUFDeUQsQ0FBRCxDQUFKLEtBQVksS0FBcEMsSUFBNkN6RCxJQUFJLENBQUN5RCxDQUFELENBQUosS0FBWSxLQUExRCxLQUFvRTNFLENBQUMsQ0FBQ3l2RCxRQUExRSxFQUFvRjtBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0QsT0FYMEI7OztBQWMzQixVQUFJLENBQUMwcEIsS0FBSyxDQUFDbjVFLENBQUMsQ0FBQ2tCLElBQUksQ0FBQ3lELENBQUQsQ0FBTCxDQUFGLEVBQWFpRixDQUFDLENBQUMxSSxJQUFJLENBQUN5RCxDQUFELENBQUwsQ0FBZCxDQUFWLEVBQW9DLE9BQU8sS0FBUDtBQUNyQyxLQTdGeUQ7QUFnRzFEOzs7QUFDQSxXQUFPLElBQVA7QUFDRDs7QUFFRCxTQUFPM0UsQ0FBQyxLQUFLQSxDQUFOLElBQVc0SixDQUFDLEtBQUtBLENBQXhCO0FBQ0Q7OztJQUdEL1AsZ0JBQUEsR0FBaUIsU0FBU3UvRSxPQUFULENBQWlCcDVFLENBQWpCLEVBQW9CNEosQ0FBcEIsRUFBdUI7QUFDdEMsTUFBSTtBQUNGLFdBQU91dkUsS0FBSyxDQUFDbjVFLENBQUQsRUFBSTRKLENBQUosQ0FBWjtBQUNELEdBRkQsQ0FFRSxPQUFPeFAsS0FBUCxFQUFjO0FBQ2QsUUFBSyxDQUFDQSxLQUFLLENBQUNzWCxPQUFOLElBQWlCLEVBQWxCLEVBQXNCOVUsS0FBdEIsQ0FBNEIsa0JBQTVCLENBQUwsRUFBdUQ7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBbTZCLE1BQUFBLE9BQU8sQ0FBQ3NpRCxJQUFSLENBQWEsZ0RBQWI7QUFDQSxhQUFPLEtBQVA7QUFDRCxLQVRhOzs7QUFXZCxVQUFNai9FLEtBQU47QUFDRDtBQUNGLENBaEJEOztBQ3JITyxJQUFJay9FLEtBQUssR0FBRyw4QkFBWjtBQUVQLGlCQUFlO0FBQ2JDLEVBQUFBLEdBQUcsRUFBRSw0QkFEUTtBQUViRCxFQUFBQSxLQUFLLEVBQUVBLEtBRk07QUFHYkUsRUFBQUEsS0FBSyxFQUFFLDhCQUhNO0FBSWJDLEVBQUFBLEdBQUcsRUFBRSxzQ0FKUTtBQUtiQyxFQUFBQSxLQUFLLEVBQUU7QUFMTSxDQUFmOztBQ0FlLG9CQUFTdjZFLElBQVQsRUFBZTtBQUM1QixNQUFJMDhELE1BQU0sR0FBRzE4RCxJQUFJLElBQUksRUFBckI7QUFBQSxNQUF5QndGLENBQUMsR0FBR2szRCxNQUFNLENBQUNwM0QsT0FBUCxDQUFlLEdBQWYsQ0FBN0I7QUFDQSxNQUFJRSxDQUFDLElBQUksQ0FBTCxJQUFVLENBQUNrM0QsTUFBTSxHQUFHMThELElBQUksQ0FBQzVELEtBQUwsQ0FBVyxDQUFYLEVBQWNvSixDQUFkLENBQVYsTUFBZ0MsT0FBOUMsRUFBdUR4RixJQUFJLEdBQUdBLElBQUksQ0FBQzVELEtBQUwsQ0FBV29KLENBQUMsR0FBRyxDQUFmLENBQVA7QUFDdkQsU0FBT2cxRSxVQUFVLENBQUNsN0UsY0FBWCxDQUEwQm85RCxNQUExQixJQUFvQztBQUFDcnRELElBQUFBLEtBQUssRUFBRW1yRSxVQUFVLENBQUM5ZCxNQUFELENBQWxCO0FBQTRCK2QsSUFBQUEsS0FBSyxFQUFFejZFO0FBQW5DLEdBQXBDLEdBQStFQSxJQUF0RixDQUg0QjtBQUk3Qjs7QUNIRCxTQUFTMDZFLGNBQVQsQ0FBd0IxNkUsSUFBeEIsRUFBOEI7QUFDNUIsU0FBTyxZQUFXO0FBQ2hCLFFBQUlTLFFBQVEsR0FBRyxLQUFLdzZELGFBQXBCO0FBQUEsUUFDSTBmLEdBQUcsR0FBRyxLQUFLQyxZQURmO0FBRUEsV0FBT0QsR0FBRyxLQUFLUixLQUFSLElBQWlCMTVFLFFBQVEsQ0FBQ2s3RCxlQUFULENBQXlCaWYsWUFBekIsS0FBMENULEtBQTNELEdBQ0QxNUUsUUFBUSxDQUFDRSxhQUFULENBQXVCWCxJQUF2QixDQURDLEdBRURTLFFBQVEsQ0FBQ216RSxlQUFULENBQXlCK0csR0FBekIsRUFBOEIzNkUsSUFBOUIsQ0FGTjtBQUdELEdBTkQ7QUFPRDs7QUFFRCxTQUFTNjZFLFlBQVQsQ0FBc0JDLFFBQXRCLEVBQWdDO0FBQzlCLFNBQU8sWUFBVztBQUNoQixXQUFPLEtBQUs3ZixhQUFMLENBQW1CMlksZUFBbkIsQ0FBbUNrSCxRQUFRLENBQUN6ckUsS0FBNUMsRUFBbUR5ckUsUUFBUSxDQUFDTCxLQUE1RCxDQUFQO0FBQ0QsR0FGRDtBQUdEOztBQUVjLGtCQUFTejZFLElBQVQsRUFBZTtBQUM1QixNQUFJODZFLFFBQVEsR0FBR2grRSxTQUFTLENBQUNrRCxJQUFELENBQXhCO0FBQ0EsU0FBTyxDQUFDODZFLFFBQVEsQ0FBQ0wsS0FBVCxHQUNGSSxZQURFLEdBRUZILGNBRkMsRUFFZUksUUFGZixDQUFQO0FBR0Q7O0FDeEJELFNBQVNDLElBQVQsR0FBZ0I7O0FBRUQsbUJBQVM1VixRQUFULEVBQW1CO0FBQ2hDLFNBQU9BLFFBQVEsSUFBSSxJQUFaLEdBQW1CNFYsSUFBbkIsR0FBMEIsWUFBVztBQUMxQyxXQUFPLEtBQUtsUyxhQUFMLENBQW1CMUQsUUFBbkIsQ0FBUDtBQUNELEdBRkQ7QUFHRDs7QUNIYywyQkFBU25CLE1BQVQsRUFBaUI7QUFDOUIsTUFBSSxPQUFPQSxNQUFQLEtBQWtCLFVBQXRCLEVBQWtDQSxNQUFNLEdBQUdtQixRQUFRLENBQUNuQixNQUFELENBQWpCOztBQUVsQyxPQUFLLElBQUl2bEMsTUFBTSxHQUFHLEtBQUt1OEMsT0FBbEIsRUFBMkJoMUMsQ0FBQyxHQUFHdkgsTUFBTSxDQUFDeGhDLE1BQXRDLEVBQThDZytFLFNBQVMsR0FBRyxJQUFJM3pFLEtBQUosQ0FBVTArQixDQUFWLENBQTFELEVBQXdFN3FCLENBQUMsR0FBRyxDQUFqRixFQUFvRkEsQ0FBQyxHQUFHNnFCLENBQXhGLEVBQTJGLEVBQUU3cUIsQ0FBN0YsRUFBZ0c7QUFDOUYsU0FBSyxJQUFJNmxCLEtBQUssR0FBR3ZDLE1BQU0sQ0FBQ3RqQixDQUFELENBQWxCLEVBQXVCbkgsQ0FBQyxHQUFHZ3RCLEtBQUssQ0FBQy9qQyxNQUFqQyxFQUF5Q2krRSxRQUFRLEdBQUdELFNBQVMsQ0FBQzkvRCxDQUFELENBQVQsR0FBZSxJQUFJN1QsS0FBSixDQUFVME0sQ0FBVixDQUFuRSxFQUFpRjJpQixJQUFqRixFQUF1RndrRCxPQUF2RixFQUFnRzMxRSxDQUFDLEdBQUcsQ0FBekcsRUFBNEdBLENBQUMsR0FBR3dPLENBQWhILEVBQW1ILEVBQUV4TyxDQUFySCxFQUF3SDtBQUN0SCxVQUFJLENBQUNteEIsSUFBSSxHQUFHcUssS0FBSyxDQUFDeDdCLENBQUQsQ0FBYixNQUFzQjIxRSxPQUFPLEdBQUduWCxNQUFNLENBQUNyb0UsSUFBUCxDQUFZZzdCLElBQVosRUFBa0JBLElBQUksQ0FBQ3lrRCxRQUF2QixFQUFpQzUxRSxDQUFqQyxFQUFvQ3c3QixLQUFwQyxDQUFoQyxDQUFKLEVBQWlGO0FBQy9FLFlBQUksY0FBY3JLLElBQWxCLEVBQXdCd2tELE9BQU8sQ0FBQ0MsUUFBUixHQUFtQnprRCxJQUFJLENBQUN5a0QsUUFBeEI7QUFDeEJGLFFBQUFBLFFBQVEsQ0FBQzExRSxDQUFELENBQVIsR0FBYzIxRSxPQUFkO0FBQ0Q7QUFDRjtBQUNGOztBQUVELFNBQU8sSUFBSUUsU0FBSixDQUFjSixTQUFkLEVBQXlCLEtBQUtLLFFBQTlCLENBQVA7QUFDRDs7QUNoQmMsZ0JBQVMzK0QsQ0FBVCxFQUFZO0FBQ3pCLFNBQU8sT0FBT0EsQ0FBUCxLQUFhLFFBQWIsSUFBeUIsWUFBWUEsQ0FBckMsR0FDSEEsQ0FERztBQUFBLElBRUhyVixLQUFLLENBQUMrTSxJQUFOLENBQVdzSSxDQUFYLENBRkosQ0FEeUI7QUFJMUI7O0FDSkQsU0FBUy9SLEtBQVQsR0FBaUI7QUFDZixTQUFPLEVBQVA7QUFDRDs7QUFFYyxzQkFBU3U2RCxRQUFULEVBQW1CO0FBQ2hDLFNBQU9BLFFBQVEsSUFBSSxJQUFaLEdBQW1CdjZELEtBQW5CLEdBQTJCLFlBQVc7QUFDM0MsV0FBTyxLQUFLcThELGdCQUFMLENBQXNCOUIsUUFBdEIsQ0FBUDtBQUNELEdBRkQ7QUFHRDs7QUNKRCxTQUFTb1csUUFBVCxDQUFrQnZYLE1BQWxCLEVBQTBCO0FBQ3hCLFNBQU8sWUFBVztBQUNoQixRQUFJaGpDLEtBQUssR0FBR2dqQyxNQUFNLENBQUNyNUQsS0FBUCxDQUFhLElBQWIsRUFBbUIzTixTQUFuQixDQUFaO0FBQ0EsV0FBT2drQyxLQUFLLElBQUksSUFBVCxHQUFnQixFQUFoQixHQUFxQjl0QixLQUFLLENBQUM4dEIsS0FBRCxDQUFqQztBQUNELEdBSEQ7QUFJRDs7QUFFYyw4QkFBU2dqQyxNQUFULEVBQWlCO0FBQzlCLE1BQUksT0FBT0EsTUFBUCxLQUFrQixVQUF0QixFQUFrQ0EsTUFBTSxHQUFHdVgsUUFBUSxDQUFDdlgsTUFBRCxDQUFqQixDQUFsQyxLQUNLQSxNQUFNLEdBQUd3WCxXQUFXLENBQUN4WCxNQUFELENBQXBCOztBQUVMLE9BQUssSUFBSXZsQyxNQUFNLEdBQUcsS0FBS3U4QyxPQUFsQixFQUEyQmgxQyxDQUFDLEdBQUd2SCxNQUFNLENBQUN4aEMsTUFBdEMsRUFBOENnK0UsU0FBUyxHQUFHLEVBQTFELEVBQThEUSxPQUFPLEdBQUcsRUFBeEUsRUFBNEV0Z0UsQ0FBQyxHQUFHLENBQXJGLEVBQXdGQSxDQUFDLEdBQUc2cUIsQ0FBNUYsRUFBK0YsRUFBRTdxQixDQUFqRyxFQUFvRztBQUNsRyxTQUFLLElBQUk2bEIsS0FBSyxHQUFHdkMsTUFBTSxDQUFDdGpCLENBQUQsQ0FBbEIsRUFBdUJuSCxDQUFDLEdBQUdndEIsS0FBSyxDQUFDL2pDLE1BQWpDLEVBQXlDMDVCLElBQXpDLEVBQStDbnhCLENBQUMsR0FBRyxDQUF4RCxFQUEyREEsQ0FBQyxHQUFHd08sQ0FBL0QsRUFBa0UsRUFBRXhPLENBQXBFLEVBQXVFO0FBQ3JFLFVBQUlteEIsSUFBSSxHQUFHcUssS0FBSyxDQUFDeDdCLENBQUQsQ0FBaEIsRUFBcUI7QUFDbkJ5MUUsUUFBQUEsU0FBUyxDQUFDLzdFLElBQVYsQ0FBZThrRSxNQUFNLENBQUNyb0UsSUFBUCxDQUFZZzdCLElBQVosRUFBa0JBLElBQUksQ0FBQ3lrRCxRQUF2QixFQUFpQzUxRSxDQUFqQyxFQUFvQ3c3QixLQUFwQyxDQUFmO0FBQ0F5NkMsUUFBQUEsT0FBTyxDQUFDdjhFLElBQVIsQ0FBYXkzQixJQUFiO0FBQ0Q7QUFDRjtBQUNGOztBQUVELFNBQU8sSUFBSTBrRCxTQUFKLENBQWNKLFNBQWQsRUFBeUJRLE9BQXpCLENBQVA7QUFDRDs7QUN6QmMsa0JBQVN0VyxRQUFULEVBQW1CO0FBQ2hDLFNBQU8sWUFBVztBQUNoQixXQUFPLEtBQUtyRyxPQUFMLENBQWFxRyxRQUFiLENBQVA7QUFDRCxHQUZEO0FBR0Q7QUFFTSxTQUFTdVcsWUFBVCxDQUFzQnZXLFFBQXRCLEVBQWdDO0FBQ3JDLFNBQU8sVUFBU3h1QyxJQUFULEVBQWU7QUFDcEIsV0FBT0EsSUFBSSxDQUFDbW9DLE9BQUwsQ0FBYXFHLFFBQWIsQ0FBUDtBQUNELEdBRkQ7QUFHRDs7QUNSRCxJQUFJejRELElBQUksR0FBR3BGLEtBQUssQ0FBQ25FLFNBQU4sQ0FBZ0J1SixJQUEzQjs7QUFFQSxTQUFTaXZFLFNBQVQsQ0FBbUJsK0UsS0FBbkIsRUFBMEI7QUFDeEIsU0FBTyxZQUFXO0FBQ2hCLFdBQU9pUCxJQUFJLENBQUMvUSxJQUFMLENBQVUsS0FBS210RSxRQUFmLEVBQXlCcnJFLEtBQXpCLENBQVA7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBU20rRSxVQUFULEdBQXNCO0FBQ3BCLFNBQU8sS0FBS0MsaUJBQVo7QUFDRDs7QUFFYyxnQ0FBU3ArRSxLQUFULEVBQWdCO0FBQzdCLFNBQU8sS0FBS3VtRSxNQUFMLENBQVl2bUUsS0FBSyxJQUFJLElBQVQsR0FBZ0JtK0UsVUFBaEIsR0FDYkQsU0FBUyxDQUFDLE9BQU9sK0UsS0FBUCxLQUFpQixVQUFqQixHQUE4QkEsS0FBOUIsR0FBc0NpK0UsWUFBWSxDQUFDaitFLEtBQUQsQ0FBbkQsQ0FEUixDQUFQO0FBRUQ7O0FDZkQsSUFBSThPLE1BQU0sR0FBR2pGLEtBQUssQ0FBQ25FLFNBQU4sQ0FBZ0JvSixNQUE3Qjs7QUFFQSxTQUFTdThELFFBQVQsR0FBb0I7QUFDbEIsU0FBTyxLQUFLQSxRQUFaO0FBQ0Q7O0FBRUQsU0FBU2dULGNBQVQsQ0FBd0JyK0UsS0FBeEIsRUFBK0I7QUFDN0IsU0FBTyxZQUFXO0FBQ2hCLFdBQU84TyxNQUFNLENBQUM1USxJQUFQLENBQVksS0FBS210RSxRQUFqQixFQUEyQnJyRSxLQUEzQixDQUFQO0FBQ0QsR0FGRDtBQUdEOztBQUVjLG1DQUFTQSxLQUFULEVBQWdCO0FBQzdCLFNBQU8sS0FBS3MrRSxTQUFMLENBQWV0K0UsS0FBSyxJQUFJLElBQVQsR0FBZ0JxckUsUUFBaEIsR0FDaEJnVCxjQUFjLENBQUMsT0FBT3IrRSxLQUFQLEtBQWlCLFVBQWpCLEdBQThCQSxLQUE5QixHQUFzQ2krRSxZQUFZLENBQUNqK0UsS0FBRCxDQUFuRCxDQURiLENBQVA7QUFFRDs7QUNkYywyQkFBU0EsS0FBVCxFQUFnQjtBQUM3QixNQUFJLE9BQU9BLEtBQVAsS0FBaUIsVUFBckIsRUFBaUNBLEtBQUssR0FBR3ltQyxPQUFPLENBQUN6bUMsS0FBRCxDQUFmOztBQUVqQyxPQUFLLElBQUlnaEMsTUFBTSxHQUFHLEtBQUt1OEMsT0FBbEIsRUFBMkJoMUMsQ0FBQyxHQUFHdkgsTUFBTSxDQUFDeGhDLE1BQXRDLEVBQThDZytFLFNBQVMsR0FBRyxJQUFJM3pFLEtBQUosQ0FBVTArQixDQUFWLENBQTFELEVBQXdFN3FCLENBQUMsR0FBRyxDQUFqRixFQUFvRkEsQ0FBQyxHQUFHNnFCLENBQXhGLEVBQTJGLEVBQUU3cUIsQ0FBN0YsRUFBZ0c7QUFDOUYsU0FBSyxJQUFJNmxCLEtBQUssR0FBR3ZDLE1BQU0sQ0FBQ3RqQixDQUFELENBQWxCLEVBQXVCbkgsQ0FBQyxHQUFHZ3RCLEtBQUssQ0FBQy9qQyxNQUFqQyxFQUF5Q2krRSxRQUFRLEdBQUdELFNBQVMsQ0FBQzkvRCxDQUFELENBQVQsR0FBZSxFQUFuRSxFQUF1RXdiLElBQXZFLEVBQTZFbnhCLENBQUMsR0FBRyxDQUF0RixFQUF5RkEsQ0FBQyxHQUFHd08sQ0FBN0YsRUFBZ0csRUFBRXhPLENBQWxHLEVBQXFHO0FBQ25HLFVBQUksQ0FBQ214QixJQUFJLEdBQUdxSyxLQUFLLENBQUN4N0IsQ0FBRCxDQUFiLEtBQXFCL0gsS0FBSyxDQUFDOUIsSUFBTixDQUFXZzdCLElBQVgsRUFBaUJBLElBQUksQ0FBQ3lrRCxRQUF0QixFQUFnQzUxRSxDQUFoQyxFQUFtQ3c3QixLQUFuQyxDQUF6QixFQUFvRTtBQUNsRWs2QyxRQUFBQSxRQUFRLENBQUNoOEUsSUFBVCxDQUFjeTNCLElBQWQ7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsU0FBTyxJQUFJMGtELFNBQUosQ0FBY0osU0FBZCxFQUF5QixLQUFLSyxRQUE5QixDQUFQO0FBQ0Q7O0FDZmMsaUJBQVN4bEMsTUFBVCxFQUFpQjtBQUM5QixTQUFPLElBQUl4dUMsS0FBSixDQUFVd3VDLE1BQU0sQ0FBQzc0QyxNQUFqQixDQUFQO0FBQ0Q7O0FDQ2MsNEJBQVc7QUFDeEIsU0FBTyxJQUFJbytFLFNBQUosQ0FBYyxLQUFLVyxNQUFMLElBQWUsS0FBS2hCLE9BQUwsQ0FBYTF1RSxHQUFiLENBQWlCMnZFLE1BQWpCLENBQTdCLEVBQXVELEtBQUtYLFFBQTVELENBQVA7QUFDRDtBQUVNLFNBQVNZLFNBQVQsQ0FBbUJwbEQsTUFBbkIsRUFBMkJxbEQsS0FBM0IsRUFBa0M7QUFDdkMsT0FBS2xoQixhQUFMLEdBQXFCbmtDLE1BQU0sQ0FBQ21rQyxhQUE1QjtBQUNBLE9BQUsyZixZQUFMLEdBQW9COWpELE1BQU0sQ0FBQzhqRCxZQUEzQjtBQUNBLE9BQUt3QixLQUFMLEdBQWEsSUFBYjtBQUNBLE9BQUtDLE9BQUwsR0FBZXZsRCxNQUFmO0FBQ0EsT0FBS3NrRCxRQUFMLEdBQWdCZSxLQUFoQjtBQUNEO0FBRURELFNBQVMsQ0FBQy80RSxTQUFWLEdBQXNCO0FBQ3BCb0ksRUFBQUEsV0FBVyxFQUFFMndFLFNBRE87QUFFcEIxeUUsRUFBQUEsV0FBVyxFQUFFLFVBQVMyNEQsS0FBVCxFQUFnQjtBQUFFLFdBQU8sS0FBS2thLE9BQUwsQ0FBYTFULFlBQWIsQ0FBMEJ4RyxLQUExQixFQUFpQyxLQUFLaWEsS0FBdEMsQ0FBUDtBQUFzRCxHQUZqRTtBQUdwQnpULEVBQUFBLFlBQVksRUFBRSxVQUFTeEcsS0FBVCxFQUFnQnZ3RCxJQUFoQixFQUFzQjtBQUFFLFdBQU8sS0FBS3lxRSxPQUFMLENBQWExVCxZQUFiLENBQTBCeEcsS0FBMUIsRUFBaUN2d0QsSUFBakMsQ0FBUDtBQUFnRCxHQUhsRTtBQUlwQmkzRCxFQUFBQSxhQUFhLEVBQUUsVUFBUzFELFFBQVQsRUFBbUI7QUFBRSxXQUFPLEtBQUtrWCxPQUFMLENBQWF4VCxhQUFiLENBQTJCMUQsUUFBM0IsQ0FBUDtBQUE4QyxHQUo5RDtBQUtwQjhCLEVBQUFBLGdCQUFnQixFQUFFLFVBQVM5QixRQUFULEVBQW1CO0FBQUUsV0FBTyxLQUFLa1gsT0FBTCxDQUFhcFYsZ0JBQWIsQ0FBOEI5QixRQUE5QixDQUFQO0FBQWlEO0FBTHBFLENBQXRCOztBQ2ZlLG1CQUFTeG9ELENBQVQsRUFBWTtBQUN6QixTQUFPLFlBQVc7QUFDaEIsV0FBT0EsQ0FBUDtBQUNELEdBRkQ7QUFHRDs7QUNDRCxTQUFTMi9ELFNBQVQsQ0FBbUJ4bEQsTUFBbkIsRUFBMkJrSyxLQUEzQixFQUFrQ2hLLEtBQWxDLEVBQXlDOGUsTUFBekMsRUFBaUQvZSxJQUFqRCxFQUF1RHp3QixJQUF2RCxFQUE2RDtBQUMzRCxNQUFJZCxDQUFDLEdBQUcsQ0FBUjtBQUFBLE1BQ0lteEIsSUFESjtBQUFBLE1BRUk0bEQsV0FBVyxHQUFHdjdDLEtBQUssQ0FBQy9qQyxNQUZ4QjtBQUFBLE1BR0l1L0UsVUFBVSxHQUFHbDJFLElBQUksQ0FBQ3JKLE1BSHRCLENBRDJEO0FBTzNEO0FBQ0E7O0FBQ0EsU0FBT3VJLENBQUMsR0FBR2czRSxVQUFYLEVBQXVCLEVBQUVoM0UsQ0FBekIsRUFBNEI7QUFDMUIsUUFBSW14QixJQUFJLEdBQUdxSyxLQUFLLENBQUN4N0IsQ0FBRCxDQUFoQixFQUFxQjtBQUNuQm14QixNQUFBQSxJQUFJLENBQUN5a0QsUUFBTCxHQUFnQjkwRSxJQUFJLENBQUNkLENBQUQsQ0FBcEI7QUFDQXN3QyxNQUFBQSxNQUFNLENBQUN0d0MsQ0FBRCxDQUFOLEdBQVlteEIsSUFBWjtBQUNELEtBSEQsTUFHTztBQUNMSyxNQUFBQSxLQUFLLENBQUN4eEIsQ0FBRCxDQUFMLEdBQVcsSUFBSTAyRSxTQUFKLENBQWNwbEQsTUFBZCxFQUFzQnh3QixJQUFJLENBQUNkLENBQUQsQ0FBMUIsQ0FBWDtBQUNEO0FBQ0YsR0FoQjBEOzs7QUFtQjNELFNBQU9BLENBQUMsR0FBRysyRSxXQUFYLEVBQXdCLEVBQUUvMkUsQ0FBMUIsRUFBNkI7QUFDM0IsUUFBSW14QixJQUFJLEdBQUdxSyxLQUFLLENBQUN4N0IsQ0FBRCxDQUFoQixFQUFxQjtBQUNuQnV4QixNQUFBQSxJQUFJLENBQUN2eEIsQ0FBRCxDQUFKLEdBQVVteEIsSUFBVjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxTQUFTOGxELE9BQVQsQ0FBaUIzbEQsTUFBakIsRUFBeUJrSyxLQUF6QixFQUFnQ2hLLEtBQWhDLEVBQXVDOGUsTUFBdkMsRUFBK0MvZSxJQUEvQyxFQUFxRHp3QixJQUFyRCxFQUEyRHhILEdBQTNELEVBQWdFO0FBQzlELE1BQUkwRyxDQUFKO0FBQUEsTUFDSW14QixJQURKO0FBQUEsTUFFSStsRCxjQUFjLEdBQUcsSUFBSXR3RCxHQUFKLEVBRnJCO0FBQUEsTUFHSW13RCxXQUFXLEdBQUd2N0MsS0FBSyxDQUFDL2pDLE1BSHhCO0FBQUEsTUFJSXUvRSxVQUFVLEdBQUdsMkUsSUFBSSxDQUFDckosTUFKdEI7QUFBQSxNQUtJMC9FLFNBQVMsR0FBRyxJQUFJcjFFLEtBQUosQ0FBVWkxRSxXQUFWLENBTGhCO0FBQUEsTUFNSUssUUFOSixDQUQ4RDtBQVU5RDs7QUFDQSxPQUFLcDNFLENBQUMsR0FBRyxDQUFULEVBQVlBLENBQUMsR0FBRysyRSxXQUFoQixFQUE2QixFQUFFLzJFLENBQS9CLEVBQWtDO0FBQ2hDLFFBQUlteEIsSUFBSSxHQUFHcUssS0FBSyxDQUFDeDdCLENBQUQsQ0FBaEIsRUFBcUI7QUFDbkJtM0UsTUFBQUEsU0FBUyxDQUFDbjNFLENBQUQsQ0FBVCxHQUFlbzNFLFFBQVEsR0FBRzk5RSxHQUFHLENBQUNuRCxJQUFKLENBQVNnN0IsSUFBVCxFQUFlQSxJQUFJLENBQUN5a0QsUUFBcEIsRUFBOEI1MUUsQ0FBOUIsRUFBaUN3N0IsS0FBakMsSUFBMEMsRUFBcEU7O0FBQ0EsVUFBSTA3QyxjQUFjLENBQUNwNkUsR0FBZixDQUFtQnM2RSxRQUFuQixDQUFKLEVBQWtDO0FBQ2hDN2xELFFBQUFBLElBQUksQ0FBQ3Z4QixDQUFELENBQUosR0FBVW14QixJQUFWO0FBQ0QsT0FGRCxNQUVPO0FBQ0wrbEQsUUFBQUEsY0FBYyxDQUFDcjZFLEdBQWYsQ0FBbUJ1NkUsUUFBbkIsRUFBNkJqbUQsSUFBN0I7QUFDRDtBQUNGO0FBQ0YsR0FwQjZEO0FBdUI5RDtBQUNBOzs7QUFDQSxPQUFLbnhCLENBQUMsR0FBRyxDQUFULEVBQVlBLENBQUMsR0FBR2czRSxVQUFoQixFQUE0QixFQUFFaDNFLENBQTlCLEVBQWlDO0FBQy9CbzNFLElBQUFBLFFBQVEsR0FBRzk5RSxHQUFHLENBQUNuRCxJQUFKLENBQVNtN0IsTUFBVCxFQUFpQnh3QixJQUFJLENBQUNkLENBQUQsQ0FBckIsRUFBMEJBLENBQTFCLEVBQTZCYyxJQUE3QixJQUFxQyxFQUFoRDs7QUFDQSxRQUFJcXdCLElBQUksR0FBRytsRCxjQUFjLENBQUNwaEYsR0FBZixDQUFtQnNoRixRQUFuQixDQUFYLEVBQXlDO0FBQ3ZDOW1DLE1BQUFBLE1BQU0sQ0FBQ3R3QyxDQUFELENBQU4sR0FBWW14QixJQUFaO0FBQ0FBLE1BQUFBLElBQUksQ0FBQ3lrRCxRQUFMLEdBQWdCOTBFLElBQUksQ0FBQ2QsQ0FBRCxDQUFwQjtBQUNBazNFLE1BQUFBLGNBQWMsQ0FBQ0csTUFBZixDQUFzQkQsUUFBdEI7QUFDRCxLQUpELE1BSU87QUFDTDVsRCxNQUFBQSxLQUFLLENBQUN4eEIsQ0FBRCxDQUFMLEdBQVcsSUFBSTAyRSxTQUFKLENBQWNwbEQsTUFBZCxFQUFzQnh3QixJQUFJLENBQUNkLENBQUQsQ0FBMUIsQ0FBWDtBQUNEO0FBQ0YsR0FsQzZEOzs7QUFxQzlELE9BQUtBLENBQUMsR0FBRyxDQUFULEVBQVlBLENBQUMsR0FBRysyRSxXQUFoQixFQUE2QixFQUFFLzJFLENBQS9CLEVBQWtDO0FBQ2hDLFFBQUksQ0FBQ214QixJQUFJLEdBQUdxSyxLQUFLLENBQUN4N0IsQ0FBRCxDQUFiLEtBQXNCazNFLGNBQWMsQ0FBQ3BoRixHQUFmLENBQW1CcWhGLFNBQVMsQ0FBQ24zRSxDQUFELENBQTVCLE1BQXFDbXhCLElBQS9ELEVBQXNFO0FBQ3BFSSxNQUFBQSxJQUFJLENBQUN2eEIsQ0FBRCxDQUFKLEdBQVVteEIsSUFBVjtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxTQUFTd2xELEtBQVQsQ0FBZXhsRCxJQUFmLEVBQXFCO0FBQ25CLFNBQU9BLElBQUksQ0FBQ3lrRCxRQUFaO0FBQ0Q7O0FBRWMseUJBQVNwL0UsS0FBVCxFQUFnQjhDLEdBQWhCLEVBQXFCO0FBQ2xDLE1BQUksQ0FBQzlCLFNBQVMsQ0FBQ0MsTUFBZixFQUF1QixPQUFPcUssS0FBSyxDQUFDK00sSUFBTixDQUFXLElBQVgsRUFBaUI4bkUsS0FBakIsQ0FBUDtBQUV2QixNQUFJMXdFLElBQUksR0FBRzNNLEdBQUcsR0FBRzI5RSxPQUFILEdBQWFILFNBQTNCO0FBQUEsTUFDSWIsT0FBTyxHQUFHLEtBQUtILFFBRG5CO0FBQUEsTUFFSTc4QyxNQUFNLEdBQUcsS0FBS3U4QyxPQUZsQjtBQUlBLE1BQUksT0FBT2gvRSxLQUFQLEtBQWlCLFVBQXJCLEVBQWlDQSxLQUFLLEdBQUc4Z0YsUUFBUSxDQUFDOWdGLEtBQUQsQ0FBaEI7O0FBRWpDLE9BQUssSUFBSWdxQyxDQUFDLEdBQUd2SCxNQUFNLENBQUN4aEMsTUFBZixFQUF1QjY0QyxNQUFNLEdBQUcsSUFBSXh1QyxLQUFKLENBQVUwK0IsQ0FBVixDQUFoQyxFQUE4Q2hQLEtBQUssR0FBRyxJQUFJMXZCLEtBQUosQ0FBVTArQixDQUFWLENBQXRELEVBQW9FalAsSUFBSSxHQUFHLElBQUl6dkIsS0FBSixDQUFVMCtCLENBQVYsQ0FBM0UsRUFBeUY3cUIsQ0FBQyxHQUFHLENBQWxHLEVBQXFHQSxDQUFDLEdBQUc2cUIsQ0FBekcsRUFBNEcsRUFBRTdxQixDQUE5RyxFQUFpSDtBQUMvRyxRQUFJMmIsTUFBTSxHQUFHMmtELE9BQU8sQ0FBQ3RnRSxDQUFELENBQXBCO0FBQUEsUUFDSTZsQixLQUFLLEdBQUd2QyxNQUFNLENBQUN0akIsQ0FBRCxDQURsQjtBQUFBLFFBRUlvaEUsV0FBVyxHQUFHdjdDLEtBQUssQ0FBQy9qQyxNQUZ4QjtBQUFBLFFBR0lxSixJQUFJLEdBQUc0TSxLQUFLLENBQUNsWCxLQUFLLENBQUNMLElBQU4sQ0FBV203QixNQUFYLEVBQW1CQSxNQUFNLElBQUlBLE1BQU0sQ0FBQ3NrRCxRQUFwQyxFQUE4Q2pnRSxDQUE5QyxFQUFpRHNnRSxPQUFqRCxDQUFELENBSGhCO0FBQUEsUUFJSWUsVUFBVSxHQUFHbDJFLElBQUksQ0FBQ3JKLE1BSnRCO0FBQUEsUUFLSTgvRSxVQUFVLEdBQUcvbEQsS0FBSyxDQUFDN2IsQ0FBRCxDQUFMLEdBQVcsSUFBSTdULEtBQUosQ0FBVWsxRSxVQUFWLENBTDVCO0FBQUEsUUFNSVEsV0FBVyxHQUFHbG5DLE1BQU0sQ0FBQzM2QixDQUFELENBQU4sR0FBWSxJQUFJN1QsS0FBSixDQUFVazFFLFVBQVYsQ0FOOUI7QUFBQSxRQU9JUyxTQUFTLEdBQUdsbUQsSUFBSSxDQUFDNWIsQ0FBRCxDQUFKLEdBQVUsSUFBSTdULEtBQUosQ0FBVWkxRSxXQUFWLENBUDFCO0FBU0E5d0UsSUFBQUEsSUFBSSxDQUFDcXJCLE1BQUQsRUFBU2tLLEtBQVQsRUFBZ0IrN0MsVUFBaEIsRUFBNEJDLFdBQTVCLEVBQXlDQyxTQUF6QyxFQUFvRDMyRSxJQUFwRCxFQUEwRHhILEdBQTFELENBQUosQ0FWK0c7QUFhL0c7QUFDQTs7QUFDQSxTQUFLLElBQUlvK0UsRUFBRSxHQUFHLENBQVQsRUFBWUMsRUFBRSxHQUFHLENBQWpCLEVBQW9CdnhELFFBQXBCLEVBQThCaGEsSUFBbkMsRUFBeUNzckUsRUFBRSxHQUFHVixVQUE5QyxFQUEwRCxFQUFFVSxFQUE1RCxFQUFnRTtBQUM5RCxVQUFJdHhELFFBQVEsR0FBR214RCxVQUFVLENBQUNHLEVBQUQsQ0FBekIsRUFBK0I7QUFDN0IsWUFBSUEsRUFBRSxJQUFJQyxFQUFWLEVBQWNBLEVBQUUsR0FBR0QsRUFBRSxHQUFHLENBQVY7O0FBQ2QsZUFBTyxFQUFFdHJFLElBQUksR0FBR29yRSxXQUFXLENBQUNHLEVBQUQsQ0FBcEIsS0FBNkIsRUFBRUEsRUFBRixHQUFPWCxVQUEzQyxDQUFzRDs7QUFDdEQ1d0QsUUFBQUEsUUFBUSxDQUFDd3dELEtBQVQsR0FBaUJ4cUUsSUFBSSxJQUFJLElBQXpCO0FBQ0Q7QUFDRjtBQUNGOztBQUVEa2tDLEVBQUFBLE1BQU0sR0FBRyxJQUFJdWxDLFNBQUosQ0FBY3ZsQyxNQUFkLEVBQXNCMmxDLE9BQXRCLENBQVQ7QUFDQTNsQyxFQUFBQSxNQUFNLENBQUNrbUMsTUFBUCxHQUFnQmhsRCxLQUFoQjtBQUNBOGUsRUFBQUEsTUFBTSxDQUFDc25DLEtBQVAsR0FBZXJtRCxJQUFmO0FBQ0EsU0FBTytlLE1BQVA7QUFDRDs7QUNqSGMsMkJBQVc7QUFDeEIsU0FBTyxJQUFJdWxDLFNBQUosQ0FBYyxLQUFLK0IsS0FBTCxJQUFjLEtBQUtwQyxPQUFMLENBQWExdUUsR0FBYixDQUFpQjJ2RSxNQUFqQixDQUE1QixFQUFzRCxLQUFLWCxRQUEzRCxDQUFQO0FBQ0Q7O0FDTGMseUJBQVMrQixPQUFULEVBQWtCQyxRQUFsQixFQUE0QkMsTUFBNUIsRUFBb0M7QUFDakQsTUFBSXZtRCxLQUFLLEdBQUcsS0FBS0EsS0FBTCxFQUFaO0FBQUEsTUFBMEI4ZSxNQUFNLEdBQUcsSUFBbkM7QUFBQSxNQUF5Qy9lLElBQUksR0FBRyxLQUFLQSxJQUFMLEVBQWhEO0FBQ0FDLEVBQUFBLEtBQUssR0FBRyxPQUFPcW1ELE9BQVAsS0FBbUIsVUFBbkIsR0FBZ0NBLE9BQU8sQ0FBQ3JtRCxLQUFELENBQXZDLEdBQWlEQSxLQUFLLENBQUNxdkIsTUFBTixDQUFhZzNCLE9BQU8sR0FBRyxFQUF2QixDQUF6RDtBQUNBLE1BQUlDLFFBQVEsSUFBSSxJQUFoQixFQUFzQnhuQyxNQUFNLEdBQUd3bkMsUUFBUSxDQUFDeG5DLE1BQUQsQ0FBakI7QUFDdEIsTUFBSXluQyxNQUFNLElBQUksSUFBZCxFQUFvQnhtRCxJQUFJLENBQUN5bUQsTUFBTCxHQUFwQixLQUF3Q0QsTUFBTSxDQUFDeG1ELElBQUQsQ0FBTjtBQUN4QyxTQUFPQyxLQUFLLElBQUk4ZSxNQUFULEdBQWtCOWUsS0FBSyxDQUFDOWIsS0FBTixDQUFZNDZCLE1BQVosRUFBb0I4cEIsS0FBcEIsRUFBbEIsR0FBZ0Q5cEIsTUFBdkQ7QUFDRDs7QUNKYywwQkFBUzJuQyxTQUFULEVBQW9CO0FBQ2pDLE1BQUksRUFBRUEsU0FBUyxZQUFZcEMsU0FBdkIsQ0FBSixFQUF1QyxNQUFNLElBQUk3b0UsS0FBSixDQUFVLGVBQVYsQ0FBTjs7QUFFdkMsT0FBSyxJQUFJa3JFLE9BQU8sR0FBRyxLQUFLMUMsT0FBbkIsRUFBNEIyQyxPQUFPLEdBQUdGLFNBQVMsQ0FBQ3pDLE9BQWhELEVBQXlENEMsRUFBRSxHQUFHRixPQUFPLENBQUN6Z0YsTUFBdEUsRUFBOEU0Z0YsRUFBRSxHQUFHRixPQUFPLENBQUMxZ0YsTUFBM0YsRUFBbUcrb0MsQ0FBQyxHQUFHdnJDLElBQUksQ0FBQ2dLLEdBQUwsQ0FBU201RSxFQUFULEVBQWFDLEVBQWIsQ0FBdkcsRUFBeUhDLE1BQU0sR0FBRyxJQUFJeDJFLEtBQUosQ0FBVXMyRSxFQUFWLENBQWxJLEVBQWlKemlFLENBQUMsR0FBRyxDQUExSixFQUE2SkEsQ0FBQyxHQUFHNnFCLENBQWpLLEVBQW9LLEVBQUU3cUIsQ0FBdEssRUFBeUs7QUFDdkssU0FBSyxJQUFJNGlFLE1BQU0sR0FBR0wsT0FBTyxDQUFDdmlFLENBQUQsQ0FBcEIsRUFBeUI2aUUsTUFBTSxHQUFHTCxPQUFPLENBQUN4aUUsQ0FBRCxDQUF6QyxFQUE4Q25ILENBQUMsR0FBRytwRSxNQUFNLENBQUM5Z0YsTUFBekQsRUFBaUVpZSxLQUFLLEdBQUc0aUUsTUFBTSxDQUFDM2lFLENBQUQsQ0FBTixHQUFZLElBQUk3VCxLQUFKLENBQVUwTSxDQUFWLENBQXJGLEVBQW1HMmlCLElBQW5HLEVBQXlHbnhCLENBQUMsR0FBRyxDQUFsSCxFQUFxSEEsQ0FBQyxHQUFHd08sQ0FBekgsRUFBNEgsRUFBRXhPLENBQTlILEVBQWlJO0FBQy9ILFVBQUlteEIsSUFBSSxHQUFHb25ELE1BQU0sQ0FBQ3Y0RSxDQUFELENBQU4sSUFBYXc0RSxNQUFNLENBQUN4NEUsQ0FBRCxDQUE5QixFQUFtQztBQUNqQzBWLFFBQUFBLEtBQUssQ0FBQzFWLENBQUQsQ0FBTCxHQUFXbXhCLElBQVg7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsU0FBT3hiLENBQUMsR0FBR3lpRSxFQUFYLEVBQWUsRUFBRXppRSxDQUFqQixFQUFvQjtBQUNsQjJpRSxJQUFBQSxNQUFNLENBQUMzaUUsQ0FBRCxDQUFOLEdBQVl1aUUsT0FBTyxDQUFDdmlFLENBQUQsQ0FBbkI7QUFDRDs7QUFFRCxTQUFPLElBQUlrZ0UsU0FBSixDQUFjeUMsTUFBZCxFQUFzQixLQUFLeEMsUUFBM0IsQ0FBUDtBQUNEOztBQ2xCYyw0QkFBVztBQUV4QixPQUFLLElBQUk3OEMsTUFBTSxHQUFHLEtBQUt1OEMsT0FBbEIsRUFBMkI3L0QsQ0FBQyxHQUFHLENBQUMsQ0FBaEMsRUFBbUM2cUIsQ0FBQyxHQUFHdkgsTUFBTSxDQUFDeGhDLE1BQW5ELEVBQTJELEVBQUVrZSxDQUFGLEdBQU02cUIsQ0FBakUsR0FBcUU7QUFDbkUsU0FBSyxJQUFJaEYsS0FBSyxHQUFHdkMsTUFBTSxDQUFDdGpCLENBQUQsQ0FBbEIsRUFBdUIzVixDQUFDLEdBQUd3N0IsS0FBSyxDQUFDL2pDLE1BQU4sR0FBZSxDQUExQyxFQUE2QzJVLElBQUksR0FBR292QixLQUFLLENBQUN4N0IsQ0FBRCxDQUF6RCxFQUE4RG14QixJQUFuRSxFQUF5RSxFQUFFbnhCLENBQUYsSUFBTyxDQUFoRixHQUFvRjtBQUNsRixVQUFJbXhCLElBQUksR0FBR3FLLEtBQUssQ0FBQ3g3QixDQUFELENBQWhCLEVBQXFCO0FBQ25CLFlBQUlvTSxJQUFJLElBQUkra0IsSUFBSSxDQUFDaWxDLHVCQUFMLENBQTZCaHFELElBQTdCLElBQXFDLENBQWpELEVBQW9EQSxJQUFJLENBQUN5cUQsVUFBTCxDQUFnQnNNLFlBQWhCLENBQTZCaHlDLElBQTdCLEVBQW1DL2tCLElBQW5DO0FBQ3BEQSxRQUFBQSxJQUFJLEdBQUcra0IsSUFBUDtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxTQUFPLElBQVA7QUFDRDs7QUNWYyx5QkFBUzg2QyxPQUFULEVBQWtCO0FBQy9CLE1BQUksQ0FBQ0EsT0FBTCxFQUFjQSxPQUFPLEdBQUd3TSxTQUFWOztBQUVkLFdBQVNDLFdBQVQsQ0FBcUJyOUUsQ0FBckIsRUFBd0I0SixDQUF4QixFQUEyQjtBQUN6QixXQUFPNUosQ0FBQyxJQUFJNEosQ0FBTCxHQUFTZ25FLE9BQU8sQ0FBQzV3RSxDQUFDLENBQUN1NkUsUUFBSCxFQUFhM3dFLENBQUMsQ0FBQzJ3RSxRQUFmLENBQWhCLEdBQTJDLENBQUN2NkUsQ0FBRCxHQUFLLENBQUM0SixDQUF4RDtBQUNEOztBQUVELE9BQUssSUFBSWcwQixNQUFNLEdBQUcsS0FBS3U4QyxPQUFsQixFQUEyQmgxQyxDQUFDLEdBQUd2SCxNQUFNLENBQUN4aEMsTUFBdEMsRUFBOENraEYsVUFBVSxHQUFHLElBQUk3MkUsS0FBSixDQUFVMCtCLENBQVYsQ0FBM0QsRUFBeUU3cUIsQ0FBQyxHQUFHLENBQWxGLEVBQXFGQSxDQUFDLEdBQUc2cUIsQ0FBekYsRUFBNEYsRUFBRTdxQixDQUE5RixFQUFpRztBQUMvRixTQUFLLElBQUk2bEIsS0FBSyxHQUFHdkMsTUFBTSxDQUFDdGpCLENBQUQsQ0FBbEIsRUFBdUJuSCxDQUFDLEdBQUdndEIsS0FBSyxDQUFDL2pDLE1BQWpDLEVBQXlDbWhGLFNBQVMsR0FBR0QsVUFBVSxDQUFDaGpFLENBQUQsQ0FBVixHQUFnQixJQUFJN1QsS0FBSixDQUFVME0sQ0FBVixDQUFyRSxFQUFtRjJpQixJQUFuRixFQUF5Rm54QixDQUFDLEdBQUcsQ0FBbEcsRUFBcUdBLENBQUMsR0FBR3dPLENBQXpHLEVBQTRHLEVBQUV4TyxDQUE5RyxFQUFpSDtBQUMvRyxVQUFJbXhCLElBQUksR0FBR3FLLEtBQUssQ0FBQ3g3QixDQUFELENBQWhCLEVBQXFCO0FBQ25CNDRFLFFBQUFBLFNBQVMsQ0FBQzU0RSxDQUFELENBQVQsR0FBZW14QixJQUFmO0FBQ0Q7QUFDRjs7QUFDRHluRCxJQUFBQSxTQUFTLENBQUNuaUUsSUFBVixDQUFlaWlFLFdBQWY7QUFDRDs7QUFFRCxTQUFPLElBQUk3QyxTQUFKLENBQWM4QyxVQUFkLEVBQTBCLEtBQUs3QyxRQUEvQixFQUF5QzFiLEtBQXpDLEVBQVA7QUFDRDs7QUFFRCxTQUFTcWUsU0FBVCxDQUFtQnA5RSxDQUFuQixFQUFzQjRKLENBQXRCLEVBQXlCO0FBQ3ZCLFNBQU81SixDQUFDLEdBQUc0SixDQUFKLEdBQVEsQ0FBQyxDQUFULEdBQWE1SixDQUFDLEdBQUc0SixDQUFKLEdBQVEsQ0FBUixHQUFZNUosQ0FBQyxJQUFJNEosQ0FBTCxHQUFTLENBQVQsR0FBYW9VLEdBQTdDO0FBQ0Q7O0FDdkJjLDJCQUFXO0FBQ3hCLE1BQUkrM0IsUUFBUSxHQUFHNTVDLFNBQVMsQ0FBQyxDQUFELENBQXhCO0FBQ0FBLEVBQUFBLFNBQVMsQ0FBQyxDQUFELENBQVQsR0FBZSxJQUFmO0FBQ0E0NUMsRUFBQUEsUUFBUSxDQUFDanNDLEtBQVQsQ0FBZSxJQUFmLEVBQXFCM04sU0FBckI7QUFDQSxTQUFPLElBQVA7QUFDRDs7QUNMYyw0QkFBVztBQUN4QixTQUFPc0ssS0FBSyxDQUFDK00sSUFBTixDQUFXLElBQVgsQ0FBUDtBQUNEOztBQ0ZjLDJCQUFXO0FBRXhCLE9BQUssSUFBSW9xQixNQUFNLEdBQUcsS0FBS3U4QyxPQUFsQixFQUEyQjcvRCxDQUFDLEdBQUcsQ0FBL0IsRUFBa0M2cUIsQ0FBQyxHQUFHdkgsTUFBTSxDQUFDeGhDLE1BQWxELEVBQTBEa2UsQ0FBQyxHQUFHNnFCLENBQTlELEVBQWlFLEVBQUU3cUIsQ0FBbkUsRUFBc0U7QUFDcEUsU0FBSyxJQUFJNmxCLEtBQUssR0FBR3ZDLE1BQU0sQ0FBQ3RqQixDQUFELENBQWxCLEVBQXVCM1YsQ0FBQyxHQUFHLENBQTNCLEVBQThCd08sQ0FBQyxHQUFHZ3RCLEtBQUssQ0FBQy9qQyxNQUE3QyxFQUFxRHVJLENBQUMsR0FBR3dPLENBQXpELEVBQTRELEVBQUV4TyxDQUE5RCxFQUFpRTtBQUMvRCxVQUFJbXhCLElBQUksR0FBR3FLLEtBQUssQ0FBQ3g3QixDQUFELENBQWhCO0FBQ0EsVUFBSW14QixJQUFKLEVBQVUsT0FBT0EsSUFBUDtBQUNYO0FBQ0Y7O0FBRUQsU0FBTyxJQUFQO0FBQ0Q7O0FDVmMsMkJBQVc7QUFDeEIsTUFBSW5MLElBQUksR0FBRyxDQUFYOztBQUNBLE9BQUssTUFBTW1MLElBQVgsSUFBbUIsSUFBbkIsRUFBeUIsRUFBRW5MLElBQUYsQ0FGRDs7O0FBR3hCLFNBQU9BLElBQVA7QUFDRDs7QUNKYyw0QkFBVztBQUN4QixTQUFPLENBQUMsS0FBS21MLElBQUwsRUFBUjtBQUNEOztBQ0ZjLHlCQUFTaWdCLFFBQVQsRUFBbUI7QUFFaEMsT0FBSyxJQUFJblksTUFBTSxHQUFHLEtBQUt1OEMsT0FBbEIsRUFBMkI3L0QsQ0FBQyxHQUFHLENBQS9CLEVBQWtDNnFCLENBQUMsR0FBR3ZILE1BQU0sQ0FBQ3hoQyxNQUFsRCxFQUEwRGtlLENBQUMsR0FBRzZxQixDQUE5RCxFQUFpRSxFQUFFN3FCLENBQW5FLEVBQXNFO0FBQ3BFLFNBQUssSUFBSTZsQixLQUFLLEdBQUd2QyxNQUFNLENBQUN0akIsQ0FBRCxDQUFsQixFQUF1QjNWLENBQUMsR0FBRyxDQUEzQixFQUE4QndPLENBQUMsR0FBR2d0QixLQUFLLENBQUMvakMsTUFBeEMsRUFBZ0QwNUIsSUFBckQsRUFBMkRueEIsQ0FBQyxHQUFHd08sQ0FBL0QsRUFBa0UsRUFBRXhPLENBQXBFLEVBQXVFO0FBQ3JFLFVBQUlteEIsSUFBSSxHQUFHcUssS0FBSyxDQUFDeDdCLENBQUQsQ0FBaEIsRUFBcUJveEMsUUFBUSxDQUFDajdDLElBQVQsQ0FBY2c3QixJQUFkLEVBQW9CQSxJQUFJLENBQUN5a0QsUUFBekIsRUFBbUM1MUUsQ0FBbkMsRUFBc0N3N0IsS0FBdEM7QUFDdEI7QUFDRjs7QUFFRCxTQUFPLElBQVA7QUFDRDs7QUNQRCxTQUFTcTlDLFVBQVQsQ0FBb0JyK0UsSUFBcEIsRUFBMEI7QUFDeEIsU0FBTyxZQUFXO0FBQ2hCLFNBQUtzb0UsZUFBTCxDQUFxQnRvRSxJQUFyQjtBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTcytFLFlBQVQsQ0FBc0J4RCxRQUF0QixFQUFnQztBQUM5QixTQUFPLFlBQVc7QUFDaEIsU0FBS3lELGlCQUFMLENBQXVCekQsUUFBUSxDQUFDenJFLEtBQWhDLEVBQXVDeXJFLFFBQVEsQ0FBQ0wsS0FBaEQ7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBUytELFlBQVQsQ0FBc0J4K0UsSUFBdEIsRUFBNEJoRSxLQUE1QixFQUFtQztBQUNqQyxTQUFPLFlBQVc7QUFDaEIsU0FBS2svRCxZQUFMLENBQWtCbDdELElBQWxCLEVBQXdCaEUsS0FBeEI7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBU3lpRixjQUFULENBQXdCM0QsUUFBeEIsRUFBa0M5K0UsS0FBbEMsRUFBeUM7QUFDdkMsU0FBTyxZQUFXO0FBQ2hCLFNBQUswaUYsY0FBTCxDQUFvQjVELFFBQVEsQ0FBQ3pyRSxLQUE3QixFQUFvQ3lyRSxRQUFRLENBQUNMLEtBQTdDLEVBQW9EeitFLEtBQXBEO0FBQ0QsR0FGRDtBQUdEOztBQUVELFNBQVMyaUYsWUFBVCxDQUFzQjMrRSxJQUF0QixFQUE0QmhFLEtBQTVCLEVBQW1DO0FBQ2pDLFNBQU8sWUFBVztBQUNoQixRQUFJd2dCLENBQUMsR0FBR3hnQixLQUFLLENBQUMyTyxLQUFOLENBQVksSUFBWixFQUFrQjNOLFNBQWxCLENBQVI7QUFDQSxRQUFJd2YsQ0FBQyxJQUFJLElBQVQsRUFBZSxLQUFLOHJELGVBQUwsQ0FBcUJ0b0UsSUFBckIsRUFBZixLQUNLLEtBQUtrN0QsWUFBTCxDQUFrQmw3RCxJQUFsQixFQUF3QndjLENBQXhCO0FBQ04sR0FKRDtBQUtEOztBQUVELFNBQVNvaUUsY0FBVCxDQUF3QjlELFFBQXhCLEVBQWtDOStFLEtBQWxDLEVBQXlDO0FBQ3ZDLFNBQU8sWUFBVztBQUNoQixRQUFJd2dCLENBQUMsR0FBR3hnQixLQUFLLENBQUMyTyxLQUFOLENBQVksSUFBWixFQUFrQjNOLFNBQWxCLENBQVI7QUFDQSxRQUFJd2YsQ0FBQyxJQUFJLElBQVQsRUFBZSxLQUFLK2hFLGlCQUFMLENBQXVCekQsUUFBUSxDQUFDenJFLEtBQWhDLEVBQXVDeXJFLFFBQVEsQ0FBQ0wsS0FBaEQsRUFBZixLQUNLLEtBQUtpRSxjQUFMLENBQW9CNUQsUUFBUSxDQUFDenJFLEtBQTdCLEVBQW9DeXJFLFFBQVEsQ0FBQ0wsS0FBN0MsRUFBb0RqK0QsQ0FBcEQ7QUFDTixHQUpEO0FBS0Q7O0FBRWMseUJBQVN4YyxJQUFULEVBQWVoRSxLQUFmLEVBQXNCO0FBQ25DLE1BQUk4K0UsUUFBUSxHQUFHaCtFLFNBQVMsQ0FBQ2tELElBQUQsQ0FBeEI7O0FBRUEsTUFBSWhELFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUF2QixFQUEwQjtBQUN4QixRQUFJMDVCLElBQUksR0FBRyxLQUFLQSxJQUFMLEVBQVg7QUFDQSxXQUFPbWtELFFBQVEsQ0FBQ0wsS0FBVCxHQUNEOWpELElBQUksQ0FBQ2tvRCxjQUFMLENBQW9CL0QsUUFBUSxDQUFDenJFLEtBQTdCLEVBQW9DeXJFLFFBQVEsQ0FBQ0wsS0FBN0MsQ0FEQyxHQUVEOWpELElBQUksQ0FBQ2drQyxZQUFMLENBQWtCbWdCLFFBQWxCLENBRk47QUFHRDs7QUFFRCxTQUFPLEtBQUsxZ0IsSUFBTCxDQUFVLENBQUNwK0QsS0FBSyxJQUFJLElBQVQsR0FDWDgrRSxRQUFRLENBQUNMLEtBQVQsR0FBaUI2RCxZQUFqQixHQUFnQ0QsVUFEckIsR0FDb0MsT0FBT3JpRixLQUFQLEtBQWlCLFVBQWpCLEdBQy9DOCtFLFFBQVEsQ0FBQ0wsS0FBVCxHQUFpQm1FLGNBQWpCLEdBQWtDRCxZQURhLEdBRS9DN0QsUUFBUSxDQUFDTCxLQUFULEdBQWlCZ0UsY0FBakIsR0FBa0NELFlBSHhCLEVBR3dDMUQsUUFIeEMsRUFHa0Q5K0UsS0FIbEQsQ0FBVixDQUFQO0FBSUQ7O0FDeERjLHNCQUFTMjZCLElBQVQsRUFBZTtBQUM1QixTQUFRQSxJQUFJLENBQUNza0MsYUFBTCxJQUFzQnRrQyxJQUFJLENBQUNza0MsYUFBTCxDQUFtQjBZLFdBQTFDO0FBQUEsS0FDQ2g5QyxJQUFJLENBQUNsMkIsUUFBTCxJQUFpQmsyQixJQURsQjtBQUFBLEtBRUFBLElBQUksQ0FBQ2c5QyxXQUZaLENBRDRCO0FBSTdCOztBQ0ZELFNBQVNtTCxXQUFULENBQXFCOStFLElBQXJCLEVBQTJCO0FBQ3pCLFNBQU8sWUFBVztBQUNoQixTQUFLc0osS0FBTCxDQUFXaytELGNBQVgsQ0FBMEJ4bkUsSUFBMUI7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBUysrRSxhQUFULENBQXVCLytFLElBQXZCLEVBQTZCaEUsS0FBN0IsRUFBb0NnakYsUUFBcEMsRUFBOEM7QUFDNUMsU0FBTyxZQUFXO0FBQ2hCLFNBQUsxMUUsS0FBTCxDQUFXKzlELFdBQVgsQ0FBdUJybkUsSUFBdkIsRUFBNkJoRSxLQUE3QixFQUFvQ2dqRixRQUFwQztBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTQyxhQUFULENBQXVCai9FLElBQXZCLEVBQTZCaEUsS0FBN0IsRUFBb0NnakYsUUFBcEMsRUFBOEM7QUFDNUMsU0FBTyxZQUFXO0FBQ2hCLFFBQUl4aUUsQ0FBQyxHQUFHeGdCLEtBQUssQ0FBQzJPLEtBQU4sQ0FBWSxJQUFaLEVBQWtCM04sU0FBbEIsQ0FBUjtBQUNBLFFBQUl3ZixDQUFDLElBQUksSUFBVCxFQUFlLEtBQUtsVCxLQUFMLENBQVdrK0QsY0FBWCxDQUEwQnhuRSxJQUExQixFQUFmLEtBQ0ssS0FBS3NKLEtBQUwsQ0FBVys5RCxXQUFYLENBQXVCcm5FLElBQXZCLEVBQTZCd2MsQ0FBN0IsRUFBZ0N3aUUsUUFBaEM7QUFDTixHQUpEO0FBS0Q7O0FBRWMsMEJBQVNoL0UsSUFBVCxFQUFlaEUsS0FBZixFQUFzQmdqRixRQUF0QixFQUFnQztBQUM3QyxTQUFPaGlGLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUNELEtBQUttOUQsSUFBTCxDQUFVLENBQUNwK0QsS0FBSyxJQUFJLElBQVQsR0FDTDhpRixXQURLLEdBQ1MsT0FBTzlpRixLQUFQLEtBQWlCLFVBQWpCLEdBQ2RpakYsYUFEYyxHQUVkRixhQUhJLEVBR1cvK0UsSUFIWCxFQUdpQmhFLEtBSGpCLEVBR3dCZ2pGLFFBQVEsSUFBSSxJQUFaLEdBQW1CLEVBQW5CLEdBQXdCQSxRQUhoRCxDQUFWLENBREMsR0FLREUsVUFBVSxDQUFDLEtBQUt2b0QsSUFBTCxFQUFELEVBQWMzMkIsSUFBZCxDQUxoQjtBQU1EO0FBRU0sU0FBU2svRSxVQUFULENBQW9Cdm9ELElBQXBCLEVBQTBCMzJCLElBQTFCLEVBQWdDO0FBQ3JDLFNBQU8yMkIsSUFBSSxDQUFDcnRCLEtBQUwsQ0FBV2krRCxnQkFBWCxDQUE0QnZuRSxJQUE1QixLQUNBMnpFLFdBQVcsQ0FBQ2g5QyxJQUFELENBQVgsQ0FBa0JnMEMsZ0JBQWxCLENBQW1DaDBDLElBQW5DLEVBQXlDLElBQXpDLEVBQStDNHdDLGdCQUEvQyxDQUFnRXZuRSxJQUFoRSxDQURQO0FBRUQ7O0FDbENELFNBQVNtL0UsY0FBVCxDQUF3Qm4vRSxJQUF4QixFQUE4QjtBQUM1QixTQUFPLFlBQVc7QUFDaEIsV0FBTyxLQUFLQSxJQUFMLENBQVA7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBU28vRSxnQkFBVCxDQUEwQnAvRSxJQUExQixFQUFnQ2hFLEtBQWhDLEVBQXVDO0FBQ3JDLFNBQU8sWUFBVztBQUNoQixTQUFLZ0UsSUFBTCxJQUFhaEUsS0FBYjtBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTcWpGLGdCQUFULENBQTBCci9FLElBQTFCLEVBQWdDaEUsS0FBaEMsRUFBdUM7QUFDckMsU0FBTyxZQUFXO0FBQ2hCLFFBQUl3Z0IsQ0FBQyxHQUFHeGdCLEtBQUssQ0FBQzJPLEtBQU4sQ0FBWSxJQUFaLEVBQWtCM04sU0FBbEIsQ0FBUjtBQUNBLFFBQUl3ZixDQUFDLElBQUksSUFBVCxFQUFlLE9BQU8sS0FBS3hjLElBQUwsQ0FBUCxDQUFmLEtBQ0ssS0FBS0EsSUFBTCxJQUFhd2MsQ0FBYjtBQUNOLEdBSkQ7QUFLRDs7QUFFYyw2QkFBU3hjLElBQVQsRUFBZWhFLEtBQWYsRUFBc0I7QUFDbkMsU0FBT2dCLFNBQVMsQ0FBQ0MsTUFBVixHQUFtQixDQUFuQixHQUNELEtBQUttOUQsSUFBTCxDQUFVLENBQUNwK0QsS0FBSyxJQUFJLElBQVQsR0FDUG1qRixjQURPLEdBQ1UsT0FBT25qRixLQUFQLEtBQWlCLFVBQWpCLEdBQ2pCcWpGLGdCQURpQixHQUVqQkQsZ0JBSE0sRUFHWXAvRSxJQUhaLEVBR2tCaEUsS0FIbEIsQ0FBVixDQURDLEdBS0QsS0FBSzI2QixJQUFMLEdBQVkzMkIsSUFBWixDQUxOO0FBTUQ7O0FDM0JELFNBQVNzL0UsVUFBVCxDQUFvQjU0RSxNQUFwQixFQUE0QjtBQUMxQixTQUFPQSxNQUFNLENBQUNpcEIsSUFBUCxHQUFjcnpCLEtBQWQsQ0FBb0IsT0FBcEIsQ0FBUDtBQUNEOztBQUVELFNBQVMwa0QsU0FBVCxDQUFtQnJxQixJQUFuQixFQUF5QjtBQUN2QixTQUFPQSxJQUFJLENBQUNxcUIsU0FBTCxJQUFrQixJQUFJdStCLFNBQUosQ0FBYzVvRCxJQUFkLENBQXpCO0FBQ0Q7O0FBRUQsU0FBUzRvRCxTQUFULENBQW1CNW9ELElBQW5CLEVBQXlCO0FBQ3ZCLE9BQUs2b0QsS0FBTCxHQUFhN29ELElBQWI7QUFDQSxPQUFLOG9ELE1BQUwsR0FBY0gsVUFBVSxDQUFDM29ELElBQUksQ0FBQ2drQyxZQUFMLENBQWtCLE9BQWxCLEtBQThCLEVBQS9CLENBQXhCO0FBQ0Q7O0FBRUQ0a0IsU0FBUyxDQUFDcDhFLFNBQVYsR0FBc0I7QUFDcEJ3bkIsRUFBQUEsR0FBRyxFQUFFLFVBQVMzcUIsSUFBVCxFQUFlO0FBQ2xCLFFBQUl3RixDQUFDLEdBQUcsS0FBS2k2RSxNQUFMLENBQVluNkUsT0FBWixDQUFvQnRGLElBQXBCLENBQVI7O0FBQ0EsUUFBSXdGLENBQUMsR0FBRyxDQUFSLEVBQVc7QUFDVCxXQUFLaTZFLE1BQUwsQ0FBWXZnRixJQUFaLENBQWlCYyxJQUFqQjs7QUFDQSxXQUFLdy9FLEtBQUwsQ0FBV3RrQixZQUFYLENBQXdCLE9BQXhCLEVBQWlDLEtBQUt1a0IsTUFBTCxDQUFZdDdFLElBQVosQ0FBaUIsR0FBakIsQ0FBakM7QUFDRDtBQUNGLEdBUG1CO0FBUXBCcTVFLEVBQUFBLE1BQU0sRUFBRSxVQUFTeDlFLElBQVQsRUFBZTtBQUNyQixRQUFJd0YsQ0FBQyxHQUFHLEtBQUtpNkUsTUFBTCxDQUFZbjZFLE9BQVosQ0FBb0J0RixJQUFwQixDQUFSOztBQUNBLFFBQUl3RixDQUFDLElBQUksQ0FBVCxFQUFZO0FBQ1YsV0FBS2k2RSxNQUFMLENBQVl0aUUsTUFBWixDQUFtQjNYLENBQW5CLEVBQXNCLENBQXRCOztBQUNBLFdBQUtnNkUsS0FBTCxDQUFXdGtCLFlBQVgsQ0FBd0IsT0FBeEIsRUFBaUMsS0FBS3VrQixNQUFMLENBQVl0N0UsSUFBWixDQUFpQixHQUFqQixDQUFqQztBQUNEO0FBQ0YsR0FkbUI7QUFlcEJpNEQsRUFBQUEsUUFBUSxFQUFFLFVBQVNwOEQsSUFBVCxFQUFlO0FBQ3ZCLFdBQU8sS0FBS3kvRSxNQUFMLENBQVluNkUsT0FBWixDQUFvQnRGLElBQXBCLEtBQTZCLENBQXBDO0FBQ0Q7QUFqQm1CLENBQXRCOztBQW9CQSxTQUFTMC9FLFVBQVQsQ0FBb0Ivb0QsSUFBcEIsRUFBMEJweEIsS0FBMUIsRUFBaUM7QUFDL0IsTUFBSTBpQixJQUFJLEdBQUcrNEIsU0FBUyxDQUFDcnFCLElBQUQsQ0FBcEI7QUFBQSxNQUE0Qm54QixDQUFDLEdBQUcsQ0FBQyxDQUFqQztBQUFBLE1BQW9Dd08sQ0FBQyxHQUFHek8sS0FBSyxDQUFDdEksTUFBOUM7O0FBQ0EsU0FBTyxFQUFFdUksQ0FBRixHQUFNd08sQ0FBYixFQUFnQmlVLElBQUksQ0FBQzBDLEdBQUwsQ0FBU3BsQixLQUFLLENBQUNDLENBQUQsQ0FBZDtBQUNqQjs7QUFFRCxTQUFTbTZFLGFBQVQsQ0FBdUJocEQsSUFBdkIsRUFBNkJweEIsS0FBN0IsRUFBb0M7QUFDbEMsTUFBSTBpQixJQUFJLEdBQUcrNEIsU0FBUyxDQUFDcnFCLElBQUQsQ0FBcEI7QUFBQSxNQUE0Qm54QixDQUFDLEdBQUcsQ0FBQyxDQUFqQztBQUFBLE1BQW9Dd08sQ0FBQyxHQUFHek8sS0FBSyxDQUFDdEksTUFBOUM7O0FBQ0EsU0FBTyxFQUFFdUksQ0FBRixHQUFNd08sQ0FBYixFQUFnQmlVLElBQUksQ0FBQ3UxRCxNQUFMLENBQVlqNEUsS0FBSyxDQUFDQyxDQUFELENBQWpCO0FBQ2pCOztBQUVELFNBQVNvNkUsV0FBVCxDQUFxQnI2RSxLQUFyQixFQUE0QjtBQUMxQixTQUFPLFlBQVc7QUFDaEJtNkUsSUFBQUEsVUFBVSxDQUFDLElBQUQsRUFBT242RSxLQUFQLENBQVY7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBU3M2RSxZQUFULENBQXNCdDZFLEtBQXRCLEVBQTZCO0FBQzNCLFNBQU8sWUFBVztBQUNoQm82RSxJQUFBQSxhQUFhLENBQUMsSUFBRCxFQUFPcDZFLEtBQVAsQ0FBYjtBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTdTZFLGVBQVQsQ0FBeUJ2NkUsS0FBekIsRUFBZ0N2SixLQUFoQyxFQUF1QztBQUNyQyxTQUFPLFlBQVc7QUFDaEIsS0FBQ0EsS0FBSyxDQUFDMk8sS0FBTixDQUFZLElBQVosRUFBa0IzTixTQUFsQixJQUErQjBpRixVQUEvQixHQUE0Q0MsYUFBN0MsRUFBNEQsSUFBNUQsRUFBa0VwNkUsS0FBbEU7QUFDRCxHQUZEO0FBR0Q7O0FBRWMsNEJBQVN2RixJQUFULEVBQWVoRSxLQUFmLEVBQXNCO0FBQ25DLE1BQUl1SixLQUFLLEdBQUcrNUUsVUFBVSxDQUFDdC9FLElBQUksR0FBRyxFQUFSLENBQXRCOztBQUVBLE1BQUloRCxTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBdkIsRUFBMEI7QUFDeEIsUUFBSWdyQixJQUFJLEdBQUcrNEIsU0FBUyxDQUFDLEtBQUtycUIsSUFBTCxFQUFELENBQXBCO0FBQUEsUUFBbUNueEIsQ0FBQyxHQUFHLENBQUMsQ0FBeEM7QUFBQSxRQUEyQ3dPLENBQUMsR0FBR3pPLEtBQUssQ0FBQ3RJLE1BQXJEOztBQUNBLFdBQU8sRUFBRXVJLENBQUYsR0FBTXdPLENBQWIsRUFBZ0IsSUFBSSxDQUFDaVUsSUFBSSxDQUFDbTBDLFFBQUwsQ0FBYzcyRCxLQUFLLENBQUNDLENBQUQsQ0FBbkIsQ0FBTCxFQUE4QixPQUFPLEtBQVA7O0FBQzlDLFdBQU8sSUFBUDtBQUNEOztBQUVELFNBQU8sS0FBSzQwRCxJQUFMLENBQVUsQ0FBQyxPQUFPcCtELEtBQVAsS0FBaUIsVUFBakIsR0FDWjhqRixlQURZLEdBQ005akYsS0FBSyxHQUN2QjRqRixXQUR1QixHQUV2QkMsWUFIVyxFQUdHdDZFLEtBSEgsRUFHVXZKLEtBSFYsQ0FBVixDQUFQO0FBSUQ7O0FDMUVELFNBQVMrakYsVUFBVCxHQUFzQjtBQUNwQixPQUFLdlYsV0FBTCxHQUFtQixFQUFuQjtBQUNEOztBQUVELFNBQVN3VixZQUFULENBQXNCaGtGLEtBQXRCLEVBQTZCO0FBQzNCLFNBQU8sWUFBVztBQUNoQixTQUFLd3VFLFdBQUwsR0FBbUJ4dUUsS0FBbkI7QUFDRCxHQUZEO0FBR0Q7O0FBRUQsU0FBU2lrRixZQUFULENBQXNCamtGLEtBQXRCLEVBQTZCO0FBQzNCLFNBQU8sWUFBVztBQUNoQixRQUFJd2dCLENBQUMsR0FBR3hnQixLQUFLLENBQUMyTyxLQUFOLENBQVksSUFBWixFQUFrQjNOLFNBQWxCLENBQVI7QUFDQSxTQUFLd3RFLFdBQUwsR0FBbUJodUQsQ0FBQyxJQUFJLElBQUwsR0FBWSxFQUFaLEdBQWlCQSxDQUFwQztBQUNELEdBSEQ7QUFJRDs7QUFFYyx5QkFBU3hnQixLQUFULEVBQWdCO0FBQzdCLFNBQU9nQixTQUFTLENBQUNDLE1BQVYsR0FDRCxLQUFLbTlELElBQUwsQ0FBVXArRCxLQUFLLElBQUksSUFBVCxHQUNOK2pGLFVBRE0sR0FDTyxDQUFDLE9BQU8vakYsS0FBUCxLQUFpQixVQUFqQixHQUNkaWtGLFlBRGMsR0FFZEQsWUFGYSxFQUVDaGtGLEtBRkQsQ0FEakIsQ0FEQyxHQUtELEtBQUsyNkIsSUFBTCxHQUFZNnpDLFdBTGxCO0FBTUQ7O0FDeEJELFNBQVMwVixVQUFULEdBQXNCO0FBQ3BCLE9BQUszVixTQUFMLEdBQWlCLEVBQWpCO0FBQ0Q7O0FBRUQsU0FBUzRWLFlBQVQsQ0FBc0Jua0YsS0FBdEIsRUFBNkI7QUFDM0IsU0FBTyxZQUFXO0FBQ2hCLFNBQUt1dUUsU0FBTCxHQUFpQnZ1RSxLQUFqQjtBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTb2tGLFlBQVQsQ0FBc0Jwa0YsS0FBdEIsRUFBNkI7QUFDM0IsU0FBTyxZQUFXO0FBQ2hCLFFBQUl3Z0IsQ0FBQyxHQUFHeGdCLEtBQUssQ0FBQzJPLEtBQU4sQ0FBWSxJQUFaLEVBQWtCM04sU0FBbEIsQ0FBUjtBQUNBLFNBQUt1dEUsU0FBTCxHQUFpQi90RCxDQUFDLElBQUksSUFBTCxHQUFZLEVBQVosR0FBaUJBLENBQWxDO0FBQ0QsR0FIRDtBQUlEOztBQUVjLHlCQUFTeGdCLEtBQVQsRUFBZ0I7QUFDN0IsU0FBT2dCLFNBQVMsQ0FBQ0MsTUFBVixHQUNELEtBQUttOUQsSUFBTCxDQUFVcCtELEtBQUssSUFBSSxJQUFULEdBQ05ra0YsVUFETSxHQUNPLENBQUMsT0FBT2xrRixLQUFQLEtBQWlCLFVBQWpCLEdBQ2Rva0YsWUFEYyxHQUVkRCxZQUZhLEVBRUNua0YsS0FGRCxDQURqQixDQURDLEdBS0QsS0FBSzI2QixJQUFMLEdBQVk0ekMsU0FMbEI7QUFNRDs7QUN4QkQsU0FBUzhWLEtBQVQsR0FBaUI7QUFDZixNQUFJLEtBQUtsVyxXQUFULEVBQXNCLEtBQUs5TixVQUFMLENBQWdCN3lELFdBQWhCLENBQTRCLElBQTVCO0FBQ3ZCOztBQUVjLDRCQUFXO0FBQ3hCLFNBQU8sS0FBSzR3RCxJQUFMLENBQVVpbUIsS0FBVixDQUFQO0FBQ0Q7O0FDTkQsU0FBU2pwQyxLQUFULEdBQWlCO0FBQ2YsTUFBSSxLQUFLa3pCLGVBQVQsRUFBMEIsS0FBS2pPLFVBQUwsQ0FBZ0JzTSxZQUFoQixDQUE2QixJQUE3QixFQUFtQyxLQUFLdE0sVUFBTCxDQUFnQmlrQixVQUFuRDtBQUMzQjs7QUFFYyw0QkFBVztBQUN4QixTQUFPLEtBQUtsbUIsSUFBTCxDQUFVaGpCLEtBQVYsQ0FBUDtBQUNEOztBQ0pjLDJCQUFTcDNDLElBQVQsRUFBZTtBQUM1QixNQUFJZ0ssTUFBTSxHQUFHLE9BQU9oSyxJQUFQLEtBQWdCLFVBQWhCLEdBQTZCQSxJQUE3QixHQUFvQ3VnRixPQUFPLENBQUN2Z0YsSUFBRCxDQUF4RDtBQUNBLFNBQU8sS0FBS2drRSxNQUFMLENBQVksWUFBVztBQUM1QixXQUFPLEtBQUt4NkQsV0FBTCxDQUFpQlEsTUFBTSxDQUFDVyxLQUFQLENBQWEsSUFBYixFQUFtQjNOLFNBQW5CLENBQWpCLENBQVA7QUFDRCxHQUZNLENBQVA7QUFHRDs7QUNKRCxTQUFTd2pGLFlBQVQsR0FBd0I7QUFDdEIsU0FBTyxJQUFQO0FBQ0Q7O0FBRWMsMkJBQVN4Z0YsSUFBVCxFQUFlNG9FLE1BQWYsRUFBdUI7QUFDcEMsTUFBSTUrRCxNQUFNLEdBQUcsT0FBT2hLLElBQVAsS0FBZ0IsVUFBaEIsR0FBNkJBLElBQTdCLEdBQW9DdWdGLE9BQU8sQ0FBQ3ZnRixJQUFELENBQXhEO0FBQUEsTUFDSWdrRSxNQUFNLEdBQUc0RSxNQUFNLElBQUksSUFBVixHQUFpQjRYLFlBQWpCLEdBQWdDLE9BQU81WCxNQUFQLEtBQWtCLFVBQWxCLEdBQStCQSxNQUEvQixHQUF3Q3pELFFBQVEsQ0FBQ3lELE1BQUQsQ0FEN0Y7QUFFQSxTQUFPLEtBQUs1RSxNQUFMLENBQVksWUFBVztBQUM1QixXQUFPLEtBQUsyRSxZQUFMLENBQWtCMytELE1BQU0sQ0FBQ1csS0FBUCxDQUFhLElBQWIsRUFBbUIzTixTQUFuQixDQUFsQixFQUFpRGduRSxNQUFNLENBQUNyNUQsS0FBUCxDQUFhLElBQWIsRUFBbUIzTixTQUFuQixLQUFpQyxJQUFsRixDQUFQO0FBQ0QsR0FGTSxDQUFQO0FBR0Q7O0FDYkQsU0FBU3dnRixNQUFULEdBQWtCO0FBQ2hCLE1BQUkxbUQsTUFBTSxHQUFHLEtBQUt1bEMsVUFBbEI7QUFDQSxNQUFJdmxDLE1BQUosRUFBWUEsTUFBTSxDQUFDakIsV0FBUCxDQUFtQixJQUFuQjtBQUNiOztBQUVjLDZCQUFXO0FBQ3hCLFNBQU8sS0FBS3VrQyxJQUFMLENBQVVvakIsTUFBVixDQUFQO0FBQ0Q7O0FDUEQsU0FBU2lELHNCQUFULEdBQWtDO0FBQ2hDLE1BQUlDLEtBQUssR0FBRyxLQUFLelgsU0FBTCxDQUFlLEtBQWYsQ0FBWjtBQUFBLE1BQW1DbnlDLE1BQU0sR0FBRyxLQUFLdWxDLFVBQWpEO0FBQ0EsU0FBT3ZsQyxNQUFNLEdBQUdBLE1BQU0sQ0FBQzZ4QyxZQUFQLENBQW9CK1gsS0FBcEIsRUFBMkIsS0FBS3ZXLFdBQWhDLENBQUgsR0FBa0R1VyxLQUEvRDtBQUNEOztBQUVELFNBQVNDLG1CQUFULEdBQStCO0FBQzdCLE1BQUlELEtBQUssR0FBRyxLQUFLelgsU0FBTCxDQUFlLElBQWYsQ0FBWjtBQUFBLE1BQWtDbnlDLE1BQU0sR0FBRyxLQUFLdWxDLFVBQWhEO0FBQ0EsU0FBT3ZsQyxNQUFNLEdBQUdBLE1BQU0sQ0FBQzZ4QyxZQUFQLENBQW9CK1gsS0FBcEIsRUFBMkIsS0FBS3ZXLFdBQWhDLENBQUgsR0FBa0R1VyxLQUEvRDtBQUNEOztBQUVjLDBCQUFTeFgsSUFBVCxFQUFlO0FBQzVCLFNBQU8sS0FBS2xGLE1BQUwsQ0FBWWtGLElBQUksR0FBR3lYLG1CQUFILEdBQXlCRixzQkFBekMsQ0FBUDtBQUNEOztBQ1pjLDBCQUFTemtGLEtBQVQsRUFBZ0I7QUFDN0IsU0FBT2dCLFNBQVMsQ0FBQ0MsTUFBVixHQUNELEtBQUsrbUIsUUFBTCxDQUFjLFVBQWQsRUFBMEJob0IsS0FBMUIsQ0FEQyxHQUVELEtBQUsyNkIsSUFBTCxHQUFZeWtELFFBRmxCO0FBR0Q7O0FDSkQsU0FBU3dGLGVBQVQsQ0FBeUIzckQsUUFBekIsRUFBbUM7QUFDakMsU0FBTyxVQUFTQyxLQUFULEVBQWdCO0FBQ3JCRCxJQUFBQSxRQUFRLENBQUN0NUIsSUFBVCxDQUFjLElBQWQsRUFBb0J1NUIsS0FBcEIsRUFBMkIsS0FBS2ttRCxRQUFoQztBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTckgsY0FBVCxDQUF3QkMsU0FBeEIsRUFBbUM7QUFDakMsU0FBT0EsU0FBUyxDQUFDcmtELElBQVYsR0FBaUJyekIsS0FBakIsQ0FBdUIsT0FBdkIsRUFBZ0NnUSxHQUFoQyxDQUFvQyxVQUFTaWhCLENBQVQsRUFBWTtBQUNyRCxRQUFJdnRCLElBQUksR0FBRyxFQUFYO0FBQUEsUUFBZXdGLENBQUMsR0FBRytuQixDQUFDLENBQUNqb0IsT0FBRixDQUFVLEdBQVYsQ0FBbkI7QUFDQSxRQUFJRSxDQUFDLElBQUksQ0FBVCxFQUFZeEYsSUFBSSxHQUFHdXRCLENBQUMsQ0FBQ254QixLQUFGLENBQVFvSixDQUFDLEdBQUcsQ0FBWixDQUFQLEVBQXVCK25CLENBQUMsR0FBR0EsQ0FBQyxDQUFDbnhCLEtBQUYsQ0FBUSxDQUFSLEVBQVdvSixDQUFYLENBQTNCO0FBQ1osV0FBTztBQUFDN0MsTUFBQUEsSUFBSSxFQUFFNHFCLENBQVA7QUFBVXZ0QixNQUFBQSxJQUFJLEVBQUVBO0FBQWhCLEtBQVA7QUFDRCxHQUpNLENBQVA7QUFLRDs7QUFFRCxTQUFTNmdGLFFBQVQsQ0FBa0IxTSxRQUFsQixFQUE0QjtBQUMxQixTQUFPLFlBQVc7QUFDaEIsUUFBSUQsRUFBRSxHQUFHLEtBQUs0TSxJQUFkO0FBQ0EsUUFBSSxDQUFDNU0sRUFBTCxFQUFTOztBQUNULFNBQUssSUFBSS80RCxDQUFDLEdBQUcsQ0FBUixFQUFXM1YsQ0FBQyxHQUFHLENBQUMsQ0FBaEIsRUFBbUJ3Z0MsQ0FBQyxHQUFHa3VDLEVBQUUsQ0FBQ2ozRSxNQUExQixFQUFrQzhqRixDQUF2QyxFQUEwQzVsRSxDQUFDLEdBQUc2cUIsQ0FBOUMsRUFBaUQsRUFBRTdxQixDQUFuRCxFQUFzRDtBQUNwRCxVQUFJNGxFLENBQUMsR0FBRzdNLEVBQUUsQ0FBQy80RCxDQUFELENBQU4sRUFBVyxDQUFDLENBQUNnNUQsUUFBUSxDQUFDeHhFLElBQVYsSUFBa0JvK0UsQ0FBQyxDQUFDcCtFLElBQUYsS0FBV3d4RSxRQUFRLENBQUN4eEUsSUFBdkMsS0FBZ0RvK0UsQ0FBQyxDQUFDL2dGLElBQUYsS0FBV20wRSxRQUFRLENBQUNuMEUsSUFBbkYsRUFBeUY7QUFDdkYsYUFBS3lvRSxtQkFBTCxDQUF5QnNZLENBQUMsQ0FBQ3ArRSxJQUEzQixFQUFpQ28rRSxDQUFDLENBQUM5ckQsUUFBbkMsRUFBNkM4ckQsQ0FBQyxDQUFDbDlFLE9BQS9DO0FBQ0QsT0FGRCxNQUVPO0FBQ0xxd0UsUUFBQUEsRUFBRSxDQUFDLEVBQUUxdUUsQ0FBSCxDQUFGLEdBQVV1N0UsQ0FBVjtBQUNEO0FBQ0Y7O0FBQ0QsUUFBSSxFQUFFdjdFLENBQU4sRUFBUzB1RSxFQUFFLENBQUNqM0UsTUFBSCxHQUFZdUksQ0FBWixDQUFULEtBQ0ssT0FBTyxLQUFLczdFLElBQVo7QUFDTixHQVpEO0FBYUQ7O0FBRUQsU0FBU0UsS0FBVCxDQUFlN00sUUFBZixFQUF5Qm40RSxLQUF6QixFQUFnQzZILE9BQWhDLEVBQXlDO0FBQ3ZDLFNBQU8sWUFBVztBQUNoQixRQUFJcXdFLEVBQUUsR0FBRyxLQUFLNE0sSUFBZDtBQUFBLFFBQW9CQyxDQUFwQjtBQUFBLFFBQXVCOXJELFFBQVEsR0FBRzJyRCxlQUFlLENBQUM1a0YsS0FBRCxDQUFqRDtBQUNBLFFBQUlrNEUsRUFBSixFQUFRLEtBQUssSUFBSS80RCxDQUFDLEdBQUcsQ0FBUixFQUFXNnFCLENBQUMsR0FBR2t1QyxFQUFFLENBQUNqM0UsTUFBdkIsRUFBK0JrZSxDQUFDLEdBQUc2cUIsQ0FBbkMsRUFBc0MsRUFBRTdxQixDQUF4QyxFQUEyQztBQUNqRCxVQUFJLENBQUM0bEUsQ0FBQyxHQUFHN00sRUFBRSxDQUFDLzRELENBQUQsQ0FBUCxFQUFZeFksSUFBWixLQUFxQnd4RSxRQUFRLENBQUN4eEUsSUFBOUIsSUFBc0NvK0UsQ0FBQyxDQUFDL2dGLElBQUYsS0FBV20wRSxRQUFRLENBQUNuMEUsSUFBOUQsRUFBb0U7QUFDbEUsYUFBS3lvRSxtQkFBTCxDQUF5QnNZLENBQUMsQ0FBQ3ArRSxJQUEzQixFQUFpQ28rRSxDQUFDLENBQUM5ckQsUUFBbkMsRUFBNkM4ckQsQ0FBQyxDQUFDbDlFLE9BQS9DO0FBQ0EsYUFBSzh4QixnQkFBTCxDQUFzQm9yRCxDQUFDLENBQUNwK0UsSUFBeEIsRUFBOEJvK0UsQ0FBQyxDQUFDOXJELFFBQUYsR0FBYUEsUUFBM0MsRUFBcUQ4ckQsQ0FBQyxDQUFDbDlFLE9BQUYsR0FBWUEsT0FBakU7QUFDQWs5RSxRQUFBQSxDQUFDLENBQUMva0YsS0FBRixHQUFVQSxLQUFWO0FBQ0E7QUFDRDtBQUNGO0FBQ0QsU0FBSzI1QixnQkFBTCxDQUFzQncrQyxRQUFRLENBQUN4eEUsSUFBL0IsRUFBcUNzeUIsUUFBckMsRUFBK0NweEIsT0FBL0M7QUFDQWs5RSxJQUFBQSxDQUFDLEdBQUc7QUFBQ3ArRSxNQUFBQSxJQUFJLEVBQUV3eEUsUUFBUSxDQUFDeHhFLElBQWhCO0FBQXNCM0MsTUFBQUEsSUFBSSxFQUFFbTBFLFFBQVEsQ0FBQ24wRSxJQUFyQztBQUEyQ2hFLE1BQUFBLEtBQUssRUFBRUEsS0FBbEQ7QUFBeURpNUIsTUFBQUEsUUFBUSxFQUFFQSxRQUFuRTtBQUE2RXB4QixNQUFBQSxPQUFPLEVBQUVBO0FBQXRGLEtBQUo7QUFDQSxRQUFJLENBQUNxd0UsRUFBTCxFQUFTLEtBQUs0TSxJQUFMLEdBQVksQ0FBQ0MsQ0FBRCxDQUFaLENBQVQsS0FDSzdNLEVBQUUsQ0FBQ2gxRSxJQUFILENBQVE2aEYsQ0FBUjtBQUNOLEdBZEQ7QUFlRDs7QUFFYyx1QkFBUzVNLFFBQVQsRUFBbUJuNEUsS0FBbkIsRUFBMEI2SCxPQUExQixFQUFtQztBQUNoRCxNQUFJbXdFLFNBQVMsR0FBR0QsY0FBYyxDQUFDSSxRQUFRLEdBQUcsRUFBWixDQUE5QjtBQUFBLE1BQStDM3VFLENBQS9DO0FBQUEsTUFBa0R3TyxDQUFDLEdBQUdnZ0UsU0FBUyxDQUFDLzJFLE1BQWhFO0FBQUEsTUFBd0Vzd0IsQ0FBeEU7O0FBRUEsTUFBSXZ3QixTQUFTLENBQUNDLE1BQVYsR0FBbUIsQ0FBdkIsRUFBMEI7QUFDeEIsUUFBSWkzRSxFQUFFLEdBQUcsS0FBS3Y5QyxJQUFMLEdBQVltcUQsSUFBckI7O0FBQ0EsUUFBSTVNLEVBQUosRUFBUSxLQUFLLElBQUkvNEQsQ0FBQyxHQUFHLENBQVIsRUFBVzZxQixDQUFDLEdBQUdrdUMsRUFBRSxDQUFDajNFLE1BQWxCLEVBQTBCOGpGLENBQS9CLEVBQWtDNWxFLENBQUMsR0FBRzZxQixDQUF0QyxFQUF5QyxFQUFFN3FCLENBQTNDLEVBQThDO0FBQ3BELFdBQUszVixDQUFDLEdBQUcsQ0FBSixFQUFPdTdFLENBQUMsR0FBRzdNLEVBQUUsQ0FBQy80RCxDQUFELENBQWxCLEVBQXVCM1YsQ0FBQyxHQUFHd08sQ0FBM0IsRUFBOEIsRUFBRXhPLENBQWhDLEVBQW1DO0FBQ2pDLFlBQUksQ0FBQytuQixDQUFDLEdBQUd5bUQsU0FBUyxDQUFDeHVFLENBQUQsQ0FBZCxFQUFtQjdDLElBQW5CLEtBQTRCbytFLENBQUMsQ0FBQ3ArRSxJQUE5QixJQUFzQzRxQixDQUFDLENBQUN2dEIsSUFBRixLQUFXK2dGLENBQUMsQ0FBQy9nRixJQUF2RCxFQUE2RDtBQUMzRCxpQkFBTytnRixDQUFDLENBQUMva0YsS0FBVDtBQUNEO0FBQ0Y7QUFDRjtBQUNEO0FBQ0Q7O0FBRURrNEUsRUFBQUEsRUFBRSxHQUFHbDRFLEtBQUssR0FBR2dsRixLQUFILEdBQVdILFFBQXJCOztBQUNBLE9BQUtyN0UsQ0FBQyxHQUFHLENBQVQsRUFBWUEsQ0FBQyxHQUFHd08sQ0FBaEIsRUFBbUIsRUFBRXhPLENBQXJCLEVBQXdCLEtBQUs0MEQsSUFBTCxDQUFVOFosRUFBRSxDQUFDRixTQUFTLENBQUN4dUUsQ0FBRCxDQUFWLEVBQWV4SixLQUFmLEVBQXNCNkgsT0FBdEIsQ0FBWjs7QUFDeEIsU0FBTyxJQUFQO0FBQ0Q7O0FDaEVELFNBQVMrMEIsYUFBVCxDQUF1QmpDLElBQXZCLEVBQTZCaDBCLElBQTdCLEVBQW1Db2pELE1BQW5DLEVBQTJDO0FBQ3pDLE1BQUluckQsTUFBTSxHQUFHKzRFLFdBQVcsQ0FBQ2g5QyxJQUFELENBQXhCO0FBQUEsTUFDSXpCLEtBQUssR0FBR3Q2QixNQUFNLENBQUNxbUYsV0FEbkI7O0FBR0EsTUFBSSxPQUFPL3JELEtBQVAsS0FBaUIsVUFBckIsRUFBaUM7QUFDL0JBLElBQUFBLEtBQUssR0FBRyxJQUFJQSxLQUFKLENBQVV2eUIsSUFBVixFQUFnQm9qRCxNQUFoQixDQUFSO0FBQ0QsR0FGRCxNQUVPO0FBQ0w3d0IsSUFBQUEsS0FBSyxHQUFHdDZCLE1BQU0sQ0FBQzZGLFFBQVAsQ0FBZ0JrNEIsV0FBaEIsQ0FBNEIsT0FBNUIsQ0FBUjtBQUNBLFFBQUlvdEIsTUFBSixFQUFZN3dCLEtBQUssQ0FBQzJGLFNBQU4sQ0FBZ0JsNEIsSUFBaEIsRUFBc0JvakQsTUFBTSxDQUFDbTdCLE9BQTdCLEVBQXNDbjdCLE1BQU0sQ0FBQ283QixVQUE3QyxHQUEwRGpzRCxLQUFLLENBQUNrc0QsTUFBTixHQUFlcjdCLE1BQU0sQ0FBQ3E3QixNQUFoRixDQUFaLEtBQ0tsc0QsS0FBSyxDQUFDMkYsU0FBTixDQUFnQmw0QixJQUFoQixFQUFzQixLQUF0QixFQUE2QixLQUE3QjtBQUNOOztBQUVEZzBCLEVBQUFBLElBQUksQ0FBQ2lDLGFBQUwsQ0FBbUIxRCxLQUFuQjtBQUNEOztBQUVELFNBQVNtc0QsZ0JBQVQsQ0FBMEIxK0UsSUFBMUIsRUFBZ0NvakQsTUFBaEMsRUFBd0M7QUFDdEMsU0FBTyxZQUFXO0FBQ2hCLFdBQU9udEIsYUFBYSxDQUFDLElBQUQsRUFBT2oyQixJQUFQLEVBQWFvakQsTUFBYixDQUFwQjtBQUNELEdBRkQ7QUFHRDs7QUFFRCxTQUFTdTdCLGdCQUFULENBQTBCMytFLElBQTFCLEVBQWdDb2pELE1BQWhDLEVBQXdDO0FBQ3RDLFNBQU8sWUFBVztBQUNoQixXQUFPbnRCLGFBQWEsQ0FBQyxJQUFELEVBQU9qMkIsSUFBUCxFQUFhb2pELE1BQU0sQ0FBQ3A3QyxLQUFQLENBQWEsSUFBYixFQUFtQjNOLFNBQW5CLENBQWIsQ0FBcEI7QUFDRCxHQUZEO0FBR0Q7O0FBRWMsNkJBQVMyRixJQUFULEVBQWVvakQsTUFBZixFQUF1QjtBQUNwQyxTQUFPLEtBQUtxVSxJQUFMLENBQVUsQ0FBQyxPQUFPclUsTUFBUCxLQUFrQixVQUFsQixHQUNadTdCLGdCQURZLEdBRVpELGdCQUZXLEVBRU8xK0UsSUFGUCxFQUVhb2pELE1BRmIsQ0FBVixDQUFQO0FBR0Q7O0FDakNjLGdDQUFZO0FBQ3pCLE9BQUssSUFBSXRuQixNQUFNLEdBQUcsS0FBS3U4QyxPQUFsQixFQUEyQjcvRCxDQUFDLEdBQUcsQ0FBL0IsRUFBa0M2cUIsQ0FBQyxHQUFHdkgsTUFBTSxDQUFDeGhDLE1BQWxELEVBQTBEa2UsQ0FBQyxHQUFHNnFCLENBQTlELEVBQWlFLEVBQUU3cUIsQ0FBbkUsRUFBc0U7QUFDcEUsU0FBSyxJQUFJNmxCLEtBQUssR0FBR3ZDLE1BQU0sQ0FBQ3RqQixDQUFELENBQWxCLEVBQXVCM1YsQ0FBQyxHQUFHLENBQTNCLEVBQThCd08sQ0FBQyxHQUFHZ3RCLEtBQUssQ0FBQy9qQyxNQUF4QyxFQUFnRDA1QixJQUFyRCxFQUEyRG54QixDQUFDLEdBQUd3TyxDQUEvRCxFQUFrRSxFQUFFeE8sQ0FBcEUsRUFBdUU7QUFDckUsVUFBSW14QixJQUFJLEdBQUdxSyxLQUFLLENBQUN4N0IsQ0FBRCxDQUFoQixFQUFxQixNQUFNbXhCLElBQU47QUFDdEI7QUFDRjtBQUNGOztBQzZCTSxJQUFJbWUsSUFBSSxHQUFHLENBQUMsSUFBRCxDQUFYO0FBRUEsU0FBU3VtQyxTQUFULENBQW1CNThDLE1BQW5CLEVBQTJCZzlDLE9BQTNCLEVBQW9DO0FBQ3pDLE9BQUtULE9BQUwsR0FBZXY4QyxNQUFmO0FBQ0EsT0FBSzY4QyxRQUFMLEdBQWdCRyxPQUFoQjtBQUNEOztBQU1ELFNBQVM4RixtQkFBVCxHQUErQjtBQUM3QixTQUFPLElBQVA7QUFDRDs7QUFFRGxHLFNBQVMsQ0FBQ2w0RSxTQUFWLEdBQTRDO0FBQzFDb0ksRUFBQUEsV0FBVyxFQUFFOHZFLFNBRDZCO0FBRTFDclgsRUFBQUEsTUFBTSxFQUFFd2QsZ0JBRmtDO0FBRzFDekYsRUFBQUEsU0FBUyxFQUFFMEYsbUJBSCtCO0FBSTFDQyxFQUFBQSxXQUFXLEVBQUVDLHFCQUo2QjtBQUsxQ0MsRUFBQUEsY0FBYyxFQUFFQyx3QkFMMEI7QUFNMUN0MUUsRUFBQUEsTUFBTSxFQUFFdTFFLGdCQU5rQztBQU8xQ3g3RSxFQUFBQSxJQUFJLEVBQUV5N0UsY0FQb0M7QUFRMUMvcUQsRUFBQUEsS0FBSyxFQUFFZ3JELGVBUm1DO0FBUzFDanJELEVBQUFBLElBQUksRUFBRWtyRCxjQVRvQztBQVUxQzk5RSxFQUFBQSxJQUFJLEVBQUUrOUUsY0FWb0M7QUFXMUNobkUsRUFBQUEsS0FBSyxFQUFFaW5FLGVBWG1DO0FBWTFDMUUsRUFBQUEsU0FBUyxFQUFFOEQsbUJBWitCO0FBYTFDM2hCLEVBQUFBLEtBQUssRUFBRXdpQixlQWJtQztBQWMxQ25tRSxFQUFBQSxJQUFJLEVBQUVvbUUsY0Fkb0M7QUFlMUMxbUYsRUFBQUEsSUFBSSxFQUFFMm1GLGNBZm9DO0FBZ0IxQzltQixFQUFBQSxLQUFLLEVBQUUrbUIsZUFoQm1DO0FBaUIxQzVyRCxFQUFBQSxJQUFJLEVBQUU2ckQsY0FqQm9DO0FBa0IxQ2gzRCxFQUFBQSxJQUFJLEVBQUVpM0QsY0FsQm9DO0FBbUIxQzczRSxFQUFBQSxLQUFLLEVBQUU4M0UsZUFuQm1DO0FBb0IxQ3RvQixFQUFBQSxJQUFJLEVBQUV1b0IsY0FwQm9DO0FBcUIxQzlsQixFQUFBQSxJQUFJLEVBQUUrbEIsY0FyQm9DO0FBc0IxQ3Q1RSxFQUFBQSxLQUFLLEVBQUV1NUUsZUF0Qm1DO0FBdUIxQzcrRCxFQUFBQSxRQUFRLEVBQUU4K0Qsa0JBdkJnQztBQXdCMUNDLEVBQUFBLE9BQU8sRUFBRUMsaUJBeEJpQztBQXlCMUNqd0IsRUFBQUEsSUFBSSxFQUFFa3dCLGNBekJvQztBQTBCMUMvNkUsRUFBQUEsSUFBSSxFQUFFZzdFLGNBMUJvQztBQTJCMUM3QyxFQUFBQSxLQUFLLEVBQUU4QyxlQTNCbUM7QUE0QjFDL3JDLEVBQUFBLEtBQUssRUFBRWdzQyxlQTVCbUM7QUE2QjFDLzhCLEVBQUFBLE1BQU0sRUFBRWc5QixnQkE3QmtDO0FBOEIxQ3R0QyxFQUFBQSxNQUFNLEVBQUV1dEMsZ0JBOUJrQztBQStCMUM5RixFQUFBQSxNQUFNLEVBQUUrRixnQkEvQmtDO0FBZ0MxQzdDLEVBQUFBLEtBQUssRUFBRThDLGVBaENtQztBQWlDMUNySCxFQUFBQSxLQUFLLEVBQUVzSCxlQWpDbUM7QUFrQzFDdlAsRUFBQUEsRUFBRSxFQUFFd1AsWUFsQ3NDO0FBbUMxQzVQLEVBQUFBLFFBQVEsRUFBRTZQLGtCQW5DZ0M7QUFvQzFDLEdBQUM5bEYsTUFBTSxDQUFDSSxRQUFSLEdBQW1CMmxGO0FBcEN1QixDQUE1Qzs7QUNoRGUsaUJBQVN6ZSxRQUFULEVBQW1CO0FBQ2hDLFNBQU8sT0FBT0EsUUFBUCxLQUFvQixRQUFwQixHQUNELElBQUlrVyxTQUFKLENBQWMsQ0FBQyxDQUFDNTZFLFFBQVEsQ0FBQ29vRSxhQUFULENBQXVCMUQsUUFBdkIsQ0FBRCxDQUFELENBQWQsRUFBb0QsQ0FBQzFrRSxRQUFRLENBQUNrN0QsZUFBVixDQUFwRCxDQURDLEdBRUQsSUFBSTBmLFNBQUosQ0FBYyxDQUFDLENBQUNsVyxRQUFELENBQUQsQ0FBZCxFQUE0QnJ3QixJQUE1QixDQUZOO0FBR0Q7O0FDTk0sU0FBUyt1QyxTQUFULENBQW1COTVFLE1BQW5CLEVBQTJCeXFDLEtBQTNCLEVBQWtDO0FBQ3ZDLFVBQVF4M0MsU0FBUyxDQUFDQyxNQUFsQjtBQUNFLFNBQUssQ0FBTDtBQUFROztBQUNSLFNBQUssQ0FBTDtBQUFRLFdBQUt1M0MsS0FBTCxDQUFXenFDLE1BQVg7QUFBb0I7O0FBQzVCO0FBQVMsV0FBS3lxQyxLQUFMLENBQVdBLEtBQVgsRUFBa0J6cUMsTUFBbEIsQ0FBeUJBLE1BQXpCO0FBQWtDO0FBSDdDOztBQUtBLFNBQU8sSUFBUDtBQUNEOztBQ0xNLE1BQU0rNUUsUUFBUSxHQUFHam1GLE1BQU0sQ0FBQyxVQUFELENBQXZCO0FBRVEsU0FBU2ttRixPQUFULEdBQW1CO0FBQ2hDLE1BQUlyL0UsS0FBSyxHQUFHLElBQUkwbkIsR0FBSixFQUFaO0FBQUEsTUFDSXJpQixNQUFNLEdBQUcsRUFEYjtBQUFBLE1BRUl5cUMsS0FBSyxHQUFHLEVBRlo7QUFBQSxNQUdJd3ZDLE9BQU8sR0FBR0YsUUFIZDs7QUFLQSxXQUFTbnNDLEtBQVQsQ0FBZXN6QixDQUFmLEVBQWtCO0FBQ2hCLFFBQUluc0UsR0FBRyxHQUFHbXNFLENBQUMsR0FBRyxFQUFkO0FBQUEsUUFBa0J6bEUsQ0FBQyxHQUFHZCxLQUFLLENBQUNwSixHQUFOLENBQVV3RCxHQUFWLENBQXRCOztBQUNBLFFBQUksQ0FBQzBHLENBQUwsRUFBUTtBQUNOLFVBQUl3K0UsT0FBTyxLQUFLRixRQUFoQixFQUEwQixPQUFPRSxPQUFQO0FBQzFCdC9FLE1BQUFBLEtBQUssQ0FBQ3JDLEdBQU4sQ0FBVXZELEdBQVYsRUFBZTBHLENBQUMsR0FBR3VFLE1BQU0sQ0FBQzdLLElBQVAsQ0FBWStyRSxDQUFaLENBQW5CO0FBQ0Q7O0FBQ0QsV0FBT3oyQixLQUFLLENBQUMsQ0FBQ2h2QyxDQUFDLEdBQUcsQ0FBTCxJQUFVZ3ZDLEtBQUssQ0FBQ3YzQyxNQUFqQixDQUFaO0FBQ0Q7O0FBRUQwNkMsRUFBQUEsS0FBSyxDQUFDNXRDLE1BQU4sR0FBZSxVQUFTMDhCLENBQVQsRUFBWTtBQUN6QixRQUFJLENBQUN6cEMsU0FBUyxDQUFDQyxNQUFmLEVBQXVCLE9BQU84TSxNQUFNLENBQUMzTixLQUFQLEVBQVA7QUFDdkIyTixJQUFBQSxNQUFNLEdBQUcsRUFBVCxFQUFhckYsS0FBSyxHQUFHLElBQUkwbkIsR0FBSixFQUFyQjs7QUFDQSxTQUFLLE1BQU1wd0IsS0FBWCxJQUFvQnlxQyxDQUFwQixFQUF1QjtBQUNyQixZQUFNM25DLEdBQUcsR0FBRzlDLEtBQUssR0FBRyxFQUFwQjtBQUNBLFVBQUkwSSxLQUFLLENBQUNwQyxHQUFOLENBQVV4RCxHQUFWLENBQUosRUFBb0I7QUFDcEI0RixNQUFBQSxLQUFLLENBQUNyQyxHQUFOLENBQVV2RCxHQUFWLEVBQWVpTCxNQUFNLENBQUM3SyxJQUFQLENBQVlsRCxLQUFaLENBQWY7QUFDRDs7QUFDRCxXQUFPMjdDLEtBQVA7QUFDRCxHQVREOztBQVdBQSxFQUFBQSxLQUFLLENBQUNuRCxLQUFOLEdBQWMsVUFBUy9OLENBQVQsRUFBWTtBQUN4QixXQUFPenBDLFNBQVMsQ0FBQ0MsTUFBVixJQUFvQnUzQyxLQUFLLEdBQUdsdEMsS0FBSyxDQUFDK00sSUFBTixDQUFXb3lCLENBQVgsQ0FBUixFQUF1QmtSLEtBQTNDLElBQW9EbkQsS0FBSyxDQUFDcDRDLEtBQU4sRUFBM0Q7QUFDRCxHQUZEOztBQUlBdTdDLEVBQUFBLEtBQUssQ0FBQ3FzQyxPQUFOLEdBQWdCLFVBQVN2OUMsQ0FBVCxFQUFZO0FBQzFCLFdBQU96cEMsU0FBUyxDQUFDQyxNQUFWLElBQW9CK21GLE9BQU8sR0FBR3Y5QyxDQUFWLEVBQWFrUixLQUFqQyxJQUEwQ3FzQyxPQUFqRDtBQUNELEdBRkQ7O0FBSUFyc0MsRUFBQUEsS0FBSyxDQUFDeThCLElBQU4sR0FBYSxZQUFXO0FBQ3RCLFdBQU8yUCxPQUFPLENBQUNoNkUsTUFBRCxFQUFTeXFDLEtBQVQsQ0FBUCxDQUF1Qnd2QyxPQUF2QixDQUErQkEsT0FBL0IsQ0FBUDtBQUNELEdBRkQ7O0FBSUFILEVBQUFBLFNBQVMsQ0FBQ2w1RSxLQUFWLENBQWdCZ3RDLEtBQWhCLEVBQXVCMzZDLFNBQXZCO0FBRUEsU0FBTzI2QyxLQUFQO0FBQ0Q7O0FDN0NjLGlCQUFTc3NDLFNBQVQsRUFBb0I7QUFDakMsTUFBSWp3RSxDQUFDLEdBQUdpd0UsU0FBUyxDQUFDaG5GLE1BQVYsR0FBbUIsQ0FBbkIsR0FBdUIsQ0FBL0I7QUFBQSxNQUFrQ2luRixNQUFNLEdBQUcsSUFBSTU4RSxLQUFKLENBQVUwTSxDQUFWLENBQTNDO0FBQUEsTUFBeUR4TyxDQUFDLEdBQUcsQ0FBN0Q7O0FBQ0EsU0FBT0EsQ0FBQyxHQUFHd08sQ0FBWCxFQUFja3dFLE1BQU0sQ0FBQzErRSxDQUFELENBQU4sR0FBWSxNQUFNeStFLFNBQVMsQ0FBQzduRixLQUFWLENBQWdCb0osQ0FBQyxHQUFHLENBQXBCLEVBQXVCLEVBQUVBLENBQUYsR0FBTSxDQUE3QixDQUFsQjs7QUFDZCxTQUFPMCtFLE1BQVA7QUFDRDs7QUNGRCx1QkFBZUEsTUFBTSxDQUFDLDhEQUFELENBQXJCOztBQ0FBLFNBQVNDLGNBQVQsQ0FBd0I5cEIsR0FBeEIsRUFBNkI3MEQsQ0FBN0IsRUFBZ0M7QUFBRSxTQUFPNCtFLGVBQWUsQ0FBQy9wQixHQUFELENBQWYsSUFBd0JncUIscUJBQXFCLENBQUNocUIsR0FBRCxFQUFNNzBELENBQU4sQ0FBN0MsSUFBeUQ4K0UsMkJBQTJCLENBQUNqcUIsR0FBRCxFQUFNNzBELENBQU4sQ0FBcEYsSUFBZ0crK0UsZ0JBQWdCLEVBQXZIO0FBQTRIOztBQUU5SixTQUFTQSxnQkFBVCxHQUE0QjtBQUFFLFFBQU0sSUFBSS9uRixTQUFKLENBQWMsMklBQWQsQ0FBTjtBQUFtSzs7QUFFak0sU0FBUzhuRiwyQkFBVCxDQUFxQ3ZELENBQXJDLEVBQXdDeUQsTUFBeEMsRUFBZ0Q7QUFBRSxNQUFJLENBQUN6RCxDQUFMLEVBQVE7QUFBUSxNQUFJLE9BQU9BLENBQVAsS0FBYSxRQUFqQixFQUEyQixPQUFPMEQsaUJBQWlCLENBQUMxRCxDQUFELEVBQUl5RCxNQUFKLENBQXhCO0FBQXFDLE1BQUl4d0UsQ0FBQyxHQUFHNVksTUFBTSxDQUFDK0gsU0FBUCxDQUFpQmhILFFBQWpCLENBQTBCUixJQUExQixDQUErQm9sRixDQUEvQixFQUFrQzNrRixLQUFsQyxDQUF3QyxDQUF4QyxFQUEyQyxDQUFDLENBQTVDLENBQVI7QUFBd0QsTUFBSTRYLENBQUMsS0FBSyxRQUFOLElBQWtCK3NFLENBQUMsQ0FBQ3gxRSxXQUF4QixFQUFxQ3lJLENBQUMsR0FBRytzRSxDQUFDLENBQUN4MUUsV0FBRixDQUFjdkwsSUFBbEI7QUFBd0IsTUFBSWdVLENBQUMsS0FBSyxLQUFOLElBQWVBLENBQUMsS0FBSyxLQUF6QixFQUFnQyxPQUFPMU0sS0FBSyxDQUFDK00sSUFBTixDQUFXMHNFLENBQVgsQ0FBUDtBQUFzQixNQUFJL3NFLENBQUMsS0FBSyxXQUFOLElBQXFCLDJDQUEyQ2xTLElBQTNDLENBQWdEa1MsQ0FBaEQsQ0FBekIsRUFBNkUsT0FBT3l3RSxpQkFBaUIsQ0FBQzFELENBQUQsRUFBSXlELE1BQUosQ0FBeEI7QUFBc0M7O0FBRWhhLFNBQVNDLGlCQUFULENBQTJCcHFCLEdBQTNCLEVBQWdDeG5ELEdBQWhDLEVBQXFDO0FBQUUsTUFBSUEsR0FBRyxJQUFJLElBQVAsSUFBZUEsR0FBRyxHQUFHd25ELEdBQUcsQ0FBQ3A5RCxNQUE3QixFQUFxQzRWLEdBQUcsR0FBR3duRCxHQUFHLENBQUNwOUQsTUFBVjs7QUFBa0IsT0FBSyxJQUFJdUksQ0FBQyxHQUFHLENBQVIsRUFBV2svRSxJQUFJLEdBQUcsSUFBSXA5RSxLQUFKLENBQVV1TCxHQUFWLENBQXZCLEVBQXVDck4sQ0FBQyxHQUFHcU4sR0FBM0MsRUFBZ0RyTixDQUFDLEVBQWpELEVBQXFEO0FBQUVrL0UsSUFBQUEsSUFBSSxDQUFDbC9FLENBQUQsQ0FBSixHQUFVNjBELEdBQUcsQ0FBQzcwRCxDQUFELENBQWI7QUFBbUI7O0FBQUMsU0FBT2svRSxJQUFQO0FBQWM7O0FBRXZMLFNBQVNMLHFCQUFULENBQStCaHFCLEdBQS9CLEVBQW9DNzBELENBQXBDLEVBQXVDO0FBQUUsTUFBSW0vRSxFQUFFLEdBQUd0cUIsR0FBRyxJQUFJLElBQVAsR0FBYyxJQUFkLEdBQXFCLE9BQU94OEQsTUFBUCxLQUFrQixXQUFsQixJQUFpQ3c4RCxHQUFHLENBQUN4OEQsTUFBTSxDQUFDSSxRQUFSLENBQXBDLElBQXlEbzhELEdBQUcsQ0FBQyxZQUFELENBQTFGOztBQUEwRyxNQUFJc3FCLEVBQUUsSUFBSSxJQUFWLEVBQWdCO0FBQVEsTUFBSUMsSUFBSSxHQUFHLEVBQVg7QUFBZSxNQUFJQyxFQUFFLEdBQUcsSUFBVDtBQUFlLE1BQUlDLEVBQUUsR0FBRyxLQUFUOztBQUFnQixNQUFJQyxFQUFKLEVBQVFDLEVBQVI7O0FBQVksTUFBSTtBQUFFLFNBQUtMLEVBQUUsR0FBR0EsRUFBRSxDQUFDaHBGLElBQUgsQ0FBUTArRCxHQUFSLENBQVYsRUFBd0IsRUFBRXdxQixFQUFFLEdBQUcsQ0FBQ0UsRUFBRSxHQUFHSixFQUFFLENBQUMveUUsSUFBSCxFQUFOLEVBQWlCSyxJQUF4QixDQUF4QixFQUF1RDR5RSxFQUFFLEdBQUcsSUFBNUQsRUFBa0U7QUFBRUQsTUFBQUEsSUFBSSxDQUFDMWxGLElBQUwsQ0FBVTZsRixFQUFFLENBQUMvb0YsS0FBYjs7QUFBcUIsVUFBSXdKLENBQUMsSUFBSW8vRSxJQUFJLENBQUMzbkYsTUFBTCxLQUFnQnVJLENBQXpCLEVBQTRCO0FBQVE7QUFBRSxHQUFySSxDQUFzSSxPQUFPbXRDLEdBQVAsRUFBWTtBQUFFbXlDLElBQUFBLEVBQUUsR0FBRyxJQUFMO0FBQVdFLElBQUFBLEVBQUUsR0FBR3J5QyxHQUFMO0FBQVcsR0FBMUssU0FBbUw7QUFBRSxRQUFJO0FBQUUsVUFBSSxDQUFDa3lDLEVBQUQsSUFBT0YsRUFBRSxDQUFDLFFBQUQsQ0FBRixJQUFnQixJQUEzQixFQUFpQ0EsRUFBRSxDQUFDLFFBQUQsQ0FBRjtBQUFpQixLQUF4RCxTQUFpRTtBQUFFLFVBQUlHLEVBQUosRUFBUSxNQUFNRSxFQUFOO0FBQVc7QUFBRTs7QUFBQyxTQUFPSixJQUFQO0FBQWM7O0FBRWpnQixTQUFTUixlQUFULENBQXlCL3BCLEdBQXpCLEVBQThCO0FBQUUsTUFBSS95RCxLQUFLLENBQUNDLE9BQU4sQ0FBYzh5RCxHQUFkLENBQUosRUFBd0IsT0FBT0EsR0FBUDtBQUFhO0FBU3JFLElBQUk0cUIsbUJBQW1CLEdBQUdDLE9BQVksQ0FBQ0MsZ0JBQUQsQ0FBdEM7O0FBRUEsU0FBU0MsU0FBVCxDQUFtQkMsSUFBbkIsRUFBeUI7QUFDdkIsTUFBSS8rRSxJQUFJLEdBQUcrK0UsSUFBSSxDQUFDLytFLElBQWhCO0FBQUEsTUFDSWcvRSxVQUFVLEdBQUdELElBQUksQ0FBQzlPLEtBRHRCO0FBQUEsTUFFSUEsS0FBSyxHQUFHK08sVUFBVSxLQUFLLEtBQUssQ0FBcEIsR0FBd0IsR0FBeEIsR0FBOEJBLFVBRjFDO0FBQUEsTUFHSUMsV0FBVyxHQUFHRixJQUFJLENBQUM3TyxNQUh2QjtBQUFBLE1BSUlBLE1BQU0sR0FBRytPLFdBQVcsS0FBSyxLQUFLLENBQXJCLEdBQXlCLEdBQXpCLEdBQStCQSxXQUo1QztBQUFBLE1BS0lDLFNBQVMsR0FBR0gsSUFBSSxDQUFDN1EsSUFMckI7QUFBQSxNQU1JQSxJQUFJLEdBQUdnUixTQUFTLEtBQUssS0FBSyxDQUFuQixHQUF1QixPQUF2QixHQUFpQ0EsU0FONUM7QUFBQSxNQU9JQyxjQUFjLEdBQUdKLElBQUksQ0FBQ3pRLFNBUDFCO0FBQUEsTUFRSUEsU0FBUyxHQUFHNlEsY0FBYyxLQUFLLEtBQUssQ0FBeEIsR0FBNEIsUUFBNUIsR0FBdUNBLGNBUnZEO0FBQUEsTUFTSUMsZUFBZSxHQUFHTCxJQUFJLENBQUN2USxVQVQzQjtBQUFBLE1BVUlBLFVBQVUsR0FBRzRRLGVBQWUsS0FBSyxLQUFLLENBQXpCLEdBQTZCLFFBQTdCLEdBQXdDQSxlQVZ6RDtBQUFBLE1BV0lDLGFBQWEsR0FBR04sSUFBSSxDQUFDM1EsUUFYekI7QUFBQSxNQVlJQSxRQUFRLEdBQUdpUixhQUFhLEtBQUssS0FBSyxDQUF2QixHQUEyQixVQUFVMWEsQ0FBVixFQUFhO0FBQ3JELFdBQU94d0UsSUFBSSxDQUFDK3hCLElBQUwsQ0FBVXkrQyxDQUFDLENBQUNqdkUsS0FBWixDQUFQO0FBQ0QsR0FGYyxHQUVYMnBGLGFBZEo7QUFBQSxNQWVJQyxXQUFXLEdBQUdQLElBQUksQ0FBQ3RRLE1BZnZCO0FBQUEsTUFnQklBLE1BQU0sR0FBRzZRLFdBQVcsS0FBSyxLQUFLLENBQXJCLEdBQXlCLFlBQVk7QUFDaEQsV0FBTyxDQUFDLENBQUMsRUFBRW5yRixJQUFJLENBQUNpRixNQUFMLEtBQWdCLENBQWxCLENBQUQsR0FBd0IsQ0FBekIsSUFBOEIsRUFBckM7QUFDRCxHQUZZLEdBRVRrbUYsV0FsQko7QUFBQSxNQW1CSUMsV0FBVyxHQUFHUixJQUFJLENBQUNsUSxNQW5CdkI7QUFBQSxNQW9CSUEsTUFBTSxHQUFHMFEsV0FBVyxLQUFLLEtBQUssQ0FBckIsR0FBeUIsYUFBekIsR0FBeUNBLFdBcEJ0RDtBQUFBLE1BcUJJQyxZQUFZLEdBQUdULElBQUksQ0FBQ3BRLE9BckJ4QjtBQUFBLE1Bc0JJQSxPQUFPLEdBQUc2USxZQUFZLEtBQUssS0FBSyxDQUF0QixHQUEwQixDQUExQixHQUE4QkEsWUF0QjVDO0FBQUEsTUF1QklDLFdBQVcsR0FBR1YsSUFBSSxDQUFDM2xGLE1BdkJ2QjtBQUFBLE1Bd0JJQSxNQUFNLEdBQUdxbUYsV0FBVyxLQUFLLEtBQUssQ0FBckIsR0FBeUJ0ckYsSUFBSSxDQUFDaUYsTUFBOUIsR0FBdUNxbUYsV0F4QnBEO0FBQUEsTUF5QklDLFNBQVMsR0FBR1gsSUFBSSxDQUFDendFLElBekJyQjtBQUFBLE1BMEJJQSxJQUFJLEdBQUdveEUsU0FBUyxLQUFLLEtBQUssQ0FBbkIsR0FBdUIsVUFBVXYvQyxDQUFWLEVBQWFqaEMsQ0FBYixFQUFnQjtBQUNoRCxXQUFPeS9FLG1CQUFtQixDQUFDei9FLENBQUQsQ0FBMUI7QUFDRCxHQUZVLEdBRVB3Z0YsU0E1Qko7QUFBQSxNQTZCSUMsV0FBVyxHQUFHWixJQUFJLENBQUNZLFdBN0J2QjtBQUFBLE1BOEJJQyxlQUFlLEdBQUdiLElBQUksQ0FBQ2EsZUE5QjNCO0FBQUEsTUErQklDLGNBQWMsR0FBR2QsSUFBSSxDQUFDYyxjQS9CMUI7QUFnQ0EsTUFBSUMsVUFBVSxHQUFHQyxNQUFNLEVBQXZCOztBQUVBLE1BQUksQ0FBQ0QsVUFBVSxDQUFDRSxPQUFoQixFQUF5QjtBQUN2QkYsSUFBQUEsVUFBVSxDQUFDRSxPQUFYLEdBQXFCQyxZQUFZLENBQUM1bEYsYUFBYixDQUEyQixLQUEzQixDQUFyQjtBQUNEOztBQUVELE1BQUl3RSxFQUFFLEdBQUdpaEYsVUFBVSxDQUFDRSxPQUFwQixDQXZDdUI7O0FBeUN2QnRpQixFQUFBQSxNQUFNLENBQUM3K0QsRUFBRCxDQUFOLENBQVc0MkUsU0FBWCxDQUFxQixHQUFyQixFQUEwQnlCLE1BQTFCLEdBekN1Qjs7QUEyQ3ZCLE1BQUlnSixNQUFNLEdBQUdoUixPQUFLLEdBQUdILEtBQVIsQ0FBYy91RSxJQUFkLEVBQW9Ca2xCLElBQXBCLENBQXlCLENBQUMrcUQsS0FBRCxFQUFRQyxNQUFSLENBQXpCLEVBQTBDaEMsSUFBMUMsQ0FBK0NBLElBQS9DLEVBQXFESSxTQUFyRCxDQUErREEsU0FBL0QsRUFBMEVFLFVBQTFFLENBQXFGQSxVQUFyRixFQUFpR0osUUFBakcsQ0FBMEdBLFFBQTFHLEVBQW9ISyxNQUFwSCxDQUEySEEsTUFBM0gsRUFBbUlJLE1BQW5JLENBQTBJQSxNQUExSSxFQUFrSkYsT0FBbEosQ0FBMEpBLE9BQTFKLEVBQW1LdjFFLE1BQW5LLENBQTBLQSxNQUExSyxFQUFrTHcwRSxFQUFsTCxDQUFxTCxLQUFyTCxFQUE0TCxVQUFVbUIsS0FBVixFQUFpQjtBQUN4TixRQUFJb1IsWUFBWSxHQUFHRCxNQUFNLENBQUNoN0QsSUFBUCxFQUFuQjtBQUFBLFFBQ0lrN0QsYUFBYSxHQUFHdkMsY0FBYyxDQUFDc0MsWUFBRCxFQUFlLENBQWYsQ0FEbEM7QUFBQSxRQUVJalAsQ0FBQyxHQUFHa1AsYUFBYSxDQUFDLENBQUQsQ0FGckI7QUFBQSxRQUdJN08sQ0FBQyxHQUFHNk8sYUFBYSxDQUFDLENBQUQsQ0FIckI7O0FBS0EsUUFBSUMsS0FBSyxHQUFHM2lCLE1BQU0sQ0FBQzcrRCxFQUFELENBQU4sQ0FBV2toRCxNQUFYLENBQWtCLEtBQWxCLEVBQXlCd1csSUFBekIsQ0FBOEIsU0FBOUIsRUFBeUMsT0FBT2wzRCxNQUFQLENBQWM2eEUsQ0FBZCxFQUFpQixHQUFqQixFQUFzQjd4RSxNQUF0QixDQUE2Qmt5RSxDQUE3QixDQUF6QyxFQUEwRWhiLElBQTFFLENBQStFLHFCQUEvRSxFQUFzRyxlQUF0RyxFQUF1SHhXLE1BQXZILENBQThILEdBQTlILEVBQW1Jd1csSUFBbkksQ0FBd0ksV0FBeEksRUFBcUosYUFBYWwzRCxNQUFiLENBQW9CNnhFLENBQUMsR0FBRyxDQUF4QixFQUEyQixHQUEzQixFQUFnQzd4RSxNQUFoQyxDQUF1Q2t5RSxDQUFDLEdBQUcsQ0FBM0MsRUFBOEMsR0FBOUMsQ0FBckosRUFBeU1rRSxTQUF6TSxDQUFtTixNQUFuTixFQUEyTnoxRSxJQUEzTixDQUFnTyt1RSxLQUFoTyxFQUF1T3IrQyxLQUF2TyxHQUErT3F2QixNQUEvTyxDQUFzUCxNQUF0UCxFQUE4UC84QyxLQUE5UCxDQUFvUSxhQUFwUSxFQUFtUixVQUFVMmhFLENBQVYsRUFBYTtBQUMxUyxhQUFPQSxDQUFDLENBQUN1SixJQUFUO0FBQ0QsS0FGVyxFQUVUbHJFLEtBRlMsQ0FFSCxZQUZHLEVBRVcsVUFBVTJoRSxDQUFWLEVBQWE7QUFDbEMsYUFBT0EsQ0FBQyxDQUFDM2hFLEtBQVQ7QUFDRCxLQUpXLEVBSVRBLEtBSlMsQ0FJSCxhQUpHLEVBSVksVUFBVTJoRSxDQUFWLEVBQWE7QUFDbkMsYUFBT0EsQ0FBQyxDQUFDaUwsTUFBVDtBQUNELEtBTlcsRUFNVDVzRSxLQU5TLENBTUgsV0FORyxFQU1VLFVBQVUyaEUsQ0FBVixFQUFhO0FBQ2pDLGFBQU8sR0FBR3RsRSxNQUFILENBQVVzbEUsQ0FBQyxDQUFDei9DLElBQVosRUFBa0IsSUFBbEIsQ0FBUDtBQUNELEtBUlcsRUFRVGxpQixLQVJTLENBUUgsTUFSRyxFQVFLc0wsSUFSTCxFQVFXaW9ELElBUlgsQ0FRZ0IsYUFSaEIsRUFRK0IsUUFSL0IsRUFReUNBLElBUnpDLENBUThDLFdBUjlDLEVBUTJELFVBQVVvTyxDQUFWLEVBQWE7QUFDbEYsYUFBTyxhQUFhdGxFLE1BQWIsQ0FBb0IsQ0FBQ3NsRSxDQUFDLENBQUN0dUQsQ0FBSCxFQUFNc3VELENBQUMsQ0FBQ3J1RCxDQUFSLENBQXBCLEVBQWdDLFVBQWhDLEVBQTRDalgsTUFBNUMsQ0FBbURzbEUsQ0FBQyxDQUFDOEosTUFBckQsRUFBNkQsR0FBN0QsQ0FBUDtBQUNELEtBVlcsRUFVVGhpQixJQVZTLENBVUosVUFBVWtZLENBQVYsRUFBYTtBQUNuQixhQUFPQSxDQUFDLENBQUNsWSxJQUFUO0FBQ0QsS0FaVyxDQUFaOztBQWNBLFFBQUlrekIsV0FBSixFQUFpQjtBQUNmVSxNQUFBQSxLQUFLLENBQUN6UyxFQUFOLENBQVMsT0FBVCxFQUFrQitSLFdBQWxCO0FBQ0Q7O0FBRUQsUUFBSUMsZUFBSixFQUFxQjtBQUNuQlMsTUFBQUEsS0FBSyxDQUFDelMsRUFBTixDQUFTLFdBQVQsRUFBc0JnUyxlQUF0QjtBQUNEOztBQUVELFFBQUlDLGNBQUosRUFBb0I7QUFDbEJRLE1BQUFBLEtBQUssQ0FBQ3pTLEVBQU4sQ0FBUyxVQUFULEVBQXFCaVMsY0FBckI7QUFDRDtBQUNGLEdBL0JZLENBQWI7QUFnQ0FLLEVBQUFBLE1BQU0sQ0FBQ3J5RSxLQUFQO0FBQ0EsU0FBT2hQLEVBQUUsQ0FBQ2trRSxPQUFILEVBQVA7QUFDRDs7QUFFRCtiLFNBQVMsQ0FBQ2haLFNBQVYsR0FBc0I7QUFDcEI5bEUsRUFBQUEsSUFBSSxFQUFFc2dGLEdBQUcsQ0FBQ3R5QixPQUFKLENBQVlzeUIsR0FBRyxDQUFDeHhCLEtBQUosQ0FBVTtBQUMxQnJDLElBQUFBLElBQUksRUFBRTZ6QixHQUFHLENBQUNsZ0YsTUFBSixDQUFXb3ZELFVBRFM7QUFFMUI5NUQsSUFBQUEsS0FBSyxFQUFFNHFGLEdBQUcsQ0FBQ3RpRixNQUFKLENBQVd3eEQ7QUFGUSxHQUFWLENBQVosRUFHRkEsVUFKZ0I7QUFLcEJ5Z0IsRUFBQUEsS0FBSyxFQUFFcVEsR0FBRyxDQUFDdGlGLE1BTFM7QUFNcEJreUUsRUFBQUEsTUFBTSxFQUFFb1EsR0FBRyxDQUFDdGlGLE1BTlE7QUFPcEJrd0UsRUFBQUEsSUFBSSxFQUFFb1MsR0FBRyxDQUFDMXhCLFNBQUosQ0FBYyxDQUFDMHhCLEdBQUcsQ0FBQ2xnRixNQUFMLEVBQWFrZ0YsR0FBRyxDQUFDcm9GLElBQWpCLENBQWQsQ0FQYztBQVFwQnEyRSxFQUFBQSxTQUFTLEVBQUVnUyxHQUFHLENBQUMxeEIsU0FBSixDQUFjLENBQUMweEIsR0FBRyxDQUFDbGdGLE1BQUwsRUFBYWtnRixHQUFHLENBQUNyb0YsSUFBakIsQ0FBZCxDQVJTO0FBU3BCdTJFLEVBQUFBLFVBQVUsRUFBRThSLEdBQUcsQ0FBQzF4QixTQUFKLENBQWMsQ0FBQzB4QixHQUFHLENBQUNsZ0YsTUFBTCxFQUFha2dGLEdBQUcsQ0FBQ3RpRixNQUFqQixFQUF5QnNpRixHQUFHLENBQUNyb0YsSUFBN0IsQ0FBZCxDQVRRO0FBVXBCbTJFLEVBQUFBLFFBQVEsRUFBRWtTLEdBQUcsQ0FBQzF4QixTQUFKLENBQWMsQ0FBQzB4QixHQUFHLENBQUN0aUYsTUFBTCxFQUFhc2lGLEdBQUcsQ0FBQ3JvRixJQUFqQixDQUFkLENBVlU7QUFXcEJ3MkUsRUFBQUEsTUFBTSxFQUFFNlIsR0FBRyxDQUFDMXhCLFNBQUosQ0FBYyxDQUFDMHhCLEdBQUcsQ0FBQ3RpRixNQUFMLEVBQWFzaUYsR0FBRyxDQUFDcm9GLElBQWpCLENBQWQsQ0FYWTtBQVlwQjQyRSxFQUFBQSxNQUFNLEVBQUV5UixHQUFHLENBQUMxeEIsU0FBSixDQUFjLENBQUMweEIsR0FBRyxDQUFDNXhCLEtBQUosQ0FBVSxDQUFDLGFBQUQsQ0FBVixDQUFELEVBQTZCNHhCLEdBQUcsQ0FBQzV4QixLQUFKLENBQVUsQ0FBQyxhQUFELENBQVYsQ0FBN0IsRUFBeUQ0eEIsR0FBRyxDQUFDcm9GLElBQTdELENBQWQsQ0FaWTtBQWFwQjAyRSxFQUFBQSxPQUFPLEVBQUUyUixHQUFHLENBQUMxeEIsU0FBSixDQUFjLENBQUMweEIsR0FBRyxDQUFDdGlGLE1BQUwsRUFBYXNpRixHQUFHLENBQUNyb0YsSUFBakIsQ0FBZCxDQWJXO0FBY3BCbUIsRUFBQUEsTUFBTSxFQUFFa25GLEdBQUcsQ0FBQ3JvRixJQWRRO0FBZXBCMG5GLEVBQUFBLFdBQVcsRUFBRVcsR0FBRyxDQUFDcm9GLElBZkc7QUFnQnBCMm5GLEVBQUFBLGVBQWUsRUFBRVUsR0FBRyxDQUFDcm9GLElBaEJEO0FBaUJwQjRuRixFQUFBQSxjQUFjLEVBQUVTLEdBQUcsQ0FBQ3JvRjtBQWpCQSxDQUF0QjtBQW1CQSxrQkFBZSxhQUFhd29FLE9BQUssQ0FBQ2p0RCxJQUFOLENBQVdzckUsU0FBWCxFQUFzQnlCLGdCQUF0QixDQUE1Qjs7QUNqSGUsU0FBU0Msd0JBQVQsQ0FBa0Mvd0IsS0FBbEMsRUFBeUM7QUFFdEQsUUFBTXp2RCxJQUFJLEdBQUd5dkQsS0FBSyxDQUFDZ3hCLFNBQW5COztBQUNBLFFBQU1DLGNBQWMsR0FBR0MsSUFBSSxJQUFJeHNGLElBQUksQ0FBQ3kwQixJQUFMLENBQVUrM0QsSUFBSSxDQUFDanJGLEtBQWYsSUFBd0IsQ0FBdkQ7O0FBQ0EsUUFBTSs0RSxNQUFNLEdBQUdrUyxJQUFJLElBQUt4c0YsSUFBSSxDQUFDNEosS0FBTCxDQUFXNUosSUFBSSxDQUFDaUYsTUFBTCxLQUFnQixDQUEzQixJQUFnQyxFQUF4RDs7QUFDQSxRQUFNd25GLGFBQWEsR0FBSW4wQixJQUFELElBQVU7QUFFN0JnRCxJQUFBQSxLQUFLLENBQUNveEIsYUFBTixDQUFvQkMsVUFBcEIsSUFBa0MsQ0FBQ3J4QixLQUFLLENBQUNveEIsYUFBTixDQUFvQkUsV0FBeEQ7QUFFQTtBQUNFdHhCLE1BQUFBLEtBQUssQ0FBQ3V4QixVQUFOLENBQWlCQyxRQUFqQixDQUEwQngwQixJQUExQjtBQUNBZ0QsTUFBQUEsS0FBSyxDQUFDb3hCLGFBQU4sQ0FBb0JLLE9BQXBCO0FBQ0Q7QUFDRixHQVJEOztBQVVBLFNBRUU3bUYsZ0JBQUN5a0YsV0FBRDtBQUFXLElBQUEsSUFBSSxFQUFFOStFLElBQWpCO0FBQXVCLElBQUEsY0FBYyxFQUFFMGdGLGNBQXZDO0FBQXVELElBQUEsTUFBTSxFQUFFalMsTUFBL0Q7QUFBdUUsSUFBQSxXQUFXLEVBQUUsQ0FBQzcvQyxLQUFELEVBQVEreEQsSUFBUixLQUFpQkMsYUFBYSxDQUFDRCxJQUFJLENBQUNsMEIsSUFBTjtBQUFsSCxJQUZGO0FBS0Q7O0FDbkJjLE1BQU0wMEIsZUFBTixTQUE4QjFXLFNBQTlCLENBQXdDO0FBR25EakUsRUFBQUEscUJBQXFCLENBQUM0YSxTQUFELEVBQVk7QUFFN0IsV0FBT0EsU0FBUyxDQUFDQyxVQUFWLEtBQXlCLEtBQUs1eEIsS0FBTCxDQUFXNHhCLFVBQTNDO0FBQ0g7O0FBRURqYixFQUFBQSxNQUFNLEdBQUc7QUFFTCxRQUFJa2IsWUFBWSxHQUFHLEVBQW5COztBQUVBLFFBQUksS0FBSzd4QixLQUFMLENBQVc0eEIsVUFBWCxDQUFzQjdyRCxNQUF0QixLQUFpQyxXQUFqQyxJQUFnRCxLQUFLaTZCLEtBQUwsQ0FBVzR4QixVQUFYLENBQXNCOXFFLEtBQTFFLEVBQWlGO0FBRTdFLFVBQUlyWCxDQUFDLEdBQUcsQ0FBUjs7QUFDWSxXQUFLQSxDQUFDLEdBQUcsQ0FBVCxFQUFZQSxDQUFDLEdBQUcsS0FBS3V3RCxLQUFMLENBQVc0eEIsVUFBWCxDQUFzQjlxRSxLQUF0QixDQUE0QjVmLE1BQTVDLEVBQW9EdUksQ0FBQyxFQUFyRCxFQUF5RDtBQUNqRW9pRixRQUFBQSxZQUFZLENBQUMxb0YsSUFBYixDQUFrQjtBQUdkNnpELFVBQUFBLElBQUksRUFBRSxLQUFLZ0QsS0FBTCxDQUFXOHhCLFVBQVgsQ0FBc0J2c0YsR0FBdEIsQ0FBMkIsS0FBS3k2RCxLQUFMLENBQVc0eEIsVUFBWCxDQUFzQjlxRSxLQUF0QixDQUE0QnJYLENBQTVCLENBQTNCLEVBQTREeEosS0FIcEQ7QUFJZEEsVUFBQUEsS0FBSyxFQUFFLEtBQUsrNUQsS0FBTCxDQUFXK3hCLFNBQVgsQ0FBcUJ4c0YsR0FBckIsQ0FBMEIsS0FBS3k2RCxLQUFMLENBQVc0eEIsVUFBWCxDQUFzQjlxRSxLQUF0QixDQUE0QnJYLENBQTVCLENBQTFCLEVBQTJEeEo7QUFKcEQsU0FBbEI7QUFNSDtBQUNKOztBQUNELFdBQU8yRSxnQkFBQyx3QkFBRDtBQUEwQixNQUFBLFNBQVMsRUFBRWluRixZQUFyQztBQUFtRCxNQUFBLFVBQVUsRUFBRSxLQUFLN3hCLEtBQUwsQ0FBV3V4QixVQUExRTtBQUFzRixNQUFBLGFBQWEsRUFBRSxLQUFLdnhCLEtBQUwsQ0FBV294QjtBQUFoSCxNQUFQO0FBRUg7O0FBMUJrRDs7OzsifQ== diff --git a/dist/tmp/widgets/package.xml b/dist/tmp/widgets/package.xml new file mode 100644 index 0000000..323b4a8 --- /dev/null +++ b/dist/tmp/widgets/package.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/package-lock.json b/package-lock.json index 9da3535..7ad5caf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,57 +1,60 @@ { "name": "wordcloud", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, - "dependencies": { - "@babel/cli": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.13.14.tgz", - "integrity": "sha512-zmEFV8WBRsW+mPQumO1/4b34QNALBVReaiHJOkxhUsdo/AvYM62c+SKSuLi2aZ42t3ocK6OI0uwUXRvrIbREZw==", - "dev": true, - "requires": { - "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents", - "chokidar": "^3.4.0", - "commander": "^4.0.1", - "convert-source-map": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "glob": "^7.0.0", - "lodash": "^4.17.19", - "make-dir": "^2.1.0", - "slash": "^2.0.0", - "source-map": "^0.5.0" + "packages": { + "": { + "name": "wordcloud", + "version": "1.0.0", + "license": "Apache-2.0", + "dependencies": { + "@types/d3-cloud": "^1.2.5", + "classnames": "^2.3.1", + "react-d3-cloud": "^1.0.5", + "react-wordcloud": "^1.2.7" + }, + "devDependencies": { + "@mendix/pluggable-widgets-tools": "^9.5.4", + "@types/node": "^16.10.9" } }, - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "node_modules/@babel/code-frame": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", + "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" + "dependencies": { + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/compat-data": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.12.tgz", - "integrity": "sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ==", - "dev": true + "node_modules/@babel/compat-data": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", + "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/core": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.14.tgz", - "integrity": "sha512-wZso/vyF4ki0l0znlgM4inxbdrUvCb+cVz8grxDq+6C9k6qbqoIJteQOKicaKjCipU3ISV+XedCqpL2RJJVehA==", + "node_modules/@babel/core": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz", + "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==", "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-compilation-targets": "^7.13.13", - "@babel/helper-module-transforms": "^7.13.14", - "@babel/helpers": "^7.13.10", - "@babel/parser": "^7.13.13", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.13", - "@babel/types": "^7.13.14", + "dependencies": { + "@babel/code-frame": "^7.15.8", + "@babel/generator": "^7.15.8", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.8", + "@babel/helpers": "^7.15.4", + "@babel/parser": "^7.15.8", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -59,109 +62,131 @@ "semver": "^6.3.0", "source-map": "^0.5.0" }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "@babel/generator": { - "version": "7.13.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", - "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "requires": { - "@babel/types": "^7.13.0", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", + "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.6", "jsesc": "^2.5.1", "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-annotate-as-pure": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", - "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz", + "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==", "dev": true, - "requires": { - "@babel/types": "^7.12.13" + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", - "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz", + "integrity": "sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q==", "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.12.13", - "@babel/types": "^7.12.13" + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-compilation-targets": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz", - "integrity": "sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ==", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", + "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", "dev": true, - "requires": { - "@babel/compat-data": "^7.13.12", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", + "dependencies": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", "semver": "^6.3.0" }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-create-class-features-plugin": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz", - "integrity": "sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw==", + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-member-expression-to-functions": "^7.13.0", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.13.0", - "@babel/helper-split-export-declaration": "^7.12.13" + "bin": { + "semver": "bin/semver.js" } }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", - "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz", + "integrity": "sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", "regexpu-core": "^4.7.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-define-polyfill-provider": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", - "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==", + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", + "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-compilation-targets": "^7.13.0", "@babel/helper-module-imports": "^7.12.13", "@babel/helper-plugin-utils": "^7.13.0", @@ -171,996 +196,1533 @@ "resolve": "^1.14.2", "semver": "^6.1.2" }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "peerDependencies": { + "@babel/core": "^7.4.0-0" } }, - "@babel/helper-explode-assignable-expression": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", - "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "requires": { - "@babel/types": "^7.13.0" + "bin": { + "semver": "bin/semver.js" } }, - "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz", + "integrity": "sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g==", "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "node_modules/@babel/helper-function-name": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", + "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", "dev": true, - "requires": { - "@babel/types": "^7.12.13" + "dependencies": { + "@babel/helper-get-function-arity": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-hoist-variables": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz", - "integrity": "sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g==", + "node_modules/@babel/helper-get-function-arity": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", + "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", "dev": true, - "requires": { - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "node_modules/@babel/helper-hoist-variables": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", + "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", "dev": true, - "requires": { - "@babel/types": "^7.13.12" + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", + "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", "dev": true, - "requires": { - "@babel/types": "^7.13.12" + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-module-transforms": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz", - "integrity": "sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==", + "node_modules/@babel/helper-module-imports": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", + "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.12.11", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.13", - "@babel/types": "^7.13.14" + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "node_modules/@babel/helper-module-transforms": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz", + "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==", "dev": true, - "requires": { - "@babel/types": "^7.12.13" + "dependencies": { + "@babel/helper-module-imports": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-simple-access": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", + "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-remap-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", - "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", + "node_modules/@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-wrap-function": "^7.13.0", - "@babel/types": "^7.13.0" + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz", + "integrity": "sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ==", "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-wrap-function": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "node_modules/@babel/helper-replace-supers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", + "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", "dev": true, - "requires": { - "@babel/types": "^7.13.12" + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "node_modules/@babel/helper-simple-access": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", + "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", "dev": true, - "requires": { - "@babel/types": "^7.12.1" + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz", + "integrity": "sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A==", "dev": true, - "requires": { - "@babel/types": "^7.12.13" + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", + "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", - "dev": true + "node_modules/@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "@babel/helper-wrap-function": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", - "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", + "node_modules/@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", "dev": true, - "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "engines": { + "node": ">=6.9.0" } }, - "@babel/helpers": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz", - "integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==", + "node_modules/@babel/helper-wrap-function": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz", + "integrity": "sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw==", "dev": true, - "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "dependencies": { + "@babel/helper-function-name": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "node_modules/@babel/helpers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", + "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", + "dependencies": { + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", - "dev": true + "node_modules/@babel/parser": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", + "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", - "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz", + "integrity": "sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.13.12" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4", + "@babel/plugin-proposal-optional-chaining": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" } }, - "@babel/plugin-external-helpers": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-external-helpers/-/plugin-external-helpers-7.12.13.tgz", - "integrity": "sha512-ClvAsk4RqpE6iacYUjdU9PtvIwC9yAefZENsPfGeG5FckX3jFZLDlWPuyv5gi9/9C2VgwX6H8q1ukBifC0ha+Q==", + "node_modules/@babel/plugin-external-helpers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-external-helpers/-/plugin-external-helpers-7.14.5.tgz", + "integrity": "sha512-q/B/hLX+nDGk73Xn529d7Ar4ih17J8pNBbsXafq8oXij0XfFEA/bks+u+6q5q04zO5o/qivjzui6BqzPfYShEg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz", - "integrity": "sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA==", + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.8.tgz", + "integrity": "sha512-2Z5F2R2ibINTc63mY7FLqGfEbmofrHU9FitJW1Q7aPaKFhiPvSq6QEt/BoWN5oME3GVyjcRuNNSRbb9LC0CSWA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.15.4", "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-class-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", - "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz", - "integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==", + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz", + "integrity": "sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", + "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-export-default-from": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.12.13.tgz", - "integrity": "sha512-idIsBT+DGXdOHL82U+8bwX4goHm/z10g8sGGrQroh+HCRcm7mDv/luaGdWJQMTuCX2FsdXS7X0Nyyzp4znAPJA==", + "node_modules/@babel/plugin-proposal-export-default-from": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.14.5.tgz", + "integrity": "sha512-T8KZ5abXvKMjF6JcoXjgac3ElmXf0AWzJwi2O/42Jk+HmCky3D9+i1B7NPP1FblyceqTevKeV/9szeikFoaMDg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/plugin-syntax-export-default-from": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-default-from": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz", - "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==", + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", + "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-json-strings": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz", - "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==", + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", + "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz", - "integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==", + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz", - "integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==", + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz", - "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==", + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", + "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", - "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==", + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz", + "integrity": "sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg==", "dev": true, - "requires": { - "@babel/compat-data": "^7.13.8", - "@babel/helper-compilation-targets": "^7.13.8", - "@babel/helper-plugin-utils": "^7.13.0", + "dependencies": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.13.0" + "@babel/plugin-transform-parameters": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", - "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==", + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz", - "integrity": "sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==", + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-private-methods": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", - "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", + "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", - "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz", + "integrity": "sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-create-class-features-plugin": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-async-generators": { + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", + "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-bigint": { + "node_modules/@babel/plugin-syntax-bigint": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-class-properties": { + "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-dynamic-import": { + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-export-default-from": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.12.13.tgz", - "integrity": "sha512-gVry0zqoums0hA+EniCYK3gABhjYSLX1dVuwYpPw9DrLNA4/GovXySHVg4FGRsZht09ON/5C2NVx3keq+qqVGQ==", + "node_modules/@babel/plugin-syntax-export-default-from": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.14.5.tgz", + "integrity": "sha512-snWDxjuaPEobRBnhpqEfZ8RMxDbHt8+87fiEioGuE+Uc0xAKgSD8QiuL3lF93hPVQfZFAcYwrrf+H5qUhike3Q==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-export-namespace-from": { + "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-flow": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.12.13.tgz", - "integrity": "sha512-J/RYxnlSLXZLVR7wTRsozxKT8qbsx1mNKJzXEEjQ0Kjx1ZACcyHgbanNWNCFtc36IzuWhYWPpvJFFoexoOWFmA==", + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.14.5.tgz", + "integrity": "sha512-9WK5ZwKCdWHxVuU13XNT6X73FGmutAXeor5lGFq6qhOFtMFUF4jkbijuyUdZZlpYq6E2hZeZf/u3959X9wsv0Q==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-import-meta": { + "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-json-strings": { + "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.13.tgz", - "integrity": "sha512-d4HM23Q1K7oq/SLNmG6mRt85l2csmQ0cHRaxRXjKW0YFdEXqlZ5kzFQKH5Uc3rDJECgu+yCRgPkG04Mm98R/1g==", + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", + "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-logical-assignment-operators": { + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-nullish-coalescing-operator": { + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-numeric-separator": { + "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-object-rest-spread": { + "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-optional-catch-binding": { + "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-optional-chaining": { + "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-typescript": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.13.tgz", - "integrity": "sha512-cHP3u1JiUiG2LFDKbXnwVad81GvfyIOmCD6HIEId6ojrY0Drfy2q1jw7BwN7dE84+kTnBjLkXoL3IEy/3JPu2w==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", - "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", + "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", - "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", - "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-block-scoping": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz", - "integrity": "sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==", + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-classes": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", - "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==", + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz", + "integrity": "sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-replace-supers": "^7.13.0", - "@babel/helper-split-export-declaration": "^7.12.13", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz", + "integrity": "sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-computed-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", - "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-destructuring": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz", - "integrity": "sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==", + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", + "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", - "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", + "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", - "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", + "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", - "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.13.0.tgz", - "integrity": "sha512-EXAGFMJgSX8gxWD7PZtW/P6M+z74jpx3wm/+9pn+c2dOawPpBkUX7BrfyPvo6ZpXbgRIEuwgwDb/MGlKvu2pOg==", + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.14.5.tgz", + "integrity": "sha512-KhcolBKfXbvjwI3TV7r7TkYm8oNXHNBqGOy6JDVwtecFaRoKYsUUqJdS10q0YDKW1c6aZQgO+Ys3LfGkox8pXA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-flow": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-flow": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-for-of": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", - "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz", + "integrity": "sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", - "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", + "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", "dev": true, - "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", - "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", + "node_modules/@babel/plugin-transform-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", - "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", + "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-amd": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz", - "integrity": "sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==", + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", + "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", + "dependencies": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz", - "integrity": "sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==", + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz", + "integrity": "sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA==", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-simple-access": "^7.12.13", + "dependencies": { + "@babel/helper-module-transforms": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.15.4", "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", - "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz", + "integrity": "sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw==", "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.13.0", - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-identifier": "^7.12.11", + "dependencies": { + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.9", "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-umd": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz", - "integrity": "sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==", + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", + "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" + "dependencies": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", - "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz", + "integrity": "sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13" + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-transform-new-target": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", - "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", + "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-object-assign": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.12.13.tgz", - "integrity": "sha512-4QxDMc0lAOkIBSfCrnSGbAJ+4epDBF2XXwcLXuBcG1xl9u7LrktNVD4+LwhL47XuKVPQ7R25e/WdcV+h97HyZA==", + "node_modules/@babel/plugin-transform-object-assign": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.14.5.tgz", + "integrity": "sha512-lvhjk4UN9xJJYB1mI5KC0/o1D5EcJXdbhVe+4fSk08D6ZN+iuAIs7LJC+71h8av9Ew4+uRq9452v9R93SFmQlQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-object-super": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", - "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-replace-supers": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-parameters": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", - "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==", + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz", + "integrity": "sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-property-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", - "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-react-display-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.13.tgz", - "integrity": "sha512-MprESJzI9O5VnJZrL7gg1MpdqmiFcUv41Jc7SahxYsNP2kDkFqClxxTZq+1Qv4AFCamm+GXMRDQINNn+qrxmiA==", + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.15.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.15.1.tgz", + "integrity": "sha512-yQZ/i/pUCJAHI/LbtZr413S3VT26qNrEm0M5RRxQJA947/YNYwbZbBaXGDrq6CG5QsZycI1VIP6d7pQaBfP+8Q==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-react-jsx": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.13.12.tgz", - "integrity": "sha512-jcEI2UqIcpCqB5U5DRxIl0tQEProI2gcu+g8VTIqxLO5Iidojb4d77q+fwGseCvd8af/lJ9masp4QWzBXFE2xA==", + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.9.tgz", + "integrity": "sha512-30PeETvS+AeD1f58i1OVyoDlVYQhap/K20ZrMjLmmzmC2AYR/G43D4sdJAaDAqCD3MYpSWbmrz3kES158QSLjw==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-jsx": "^7.12.13", - "@babel/types": "^7.13.12" + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-jsx": "^7.14.5", + "@babel/types": "^7.14.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.17.tgz", - "integrity": "sha512-BPjYV86SVuOaudFhsJR1zjgxxOhJDt6JHNoD48DxWEIxUCAMjV1ys6DYw4SDYZh0b1QsS2vfIA9t/ZsQGsDOUQ==", + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz", + "integrity": "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==", "dev": true, - "requires": { - "@babel/plugin-transform-react-jsx": "^7.12.17" + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.13.tgz", - "integrity": "sha512-FXYw98TTJ125GVCCkFLZXlZ1qGcsYqNQhVBQcZjyrwf8FEUtVfKIoidnO8S0q+KBQpDYNTmiGo1gn67Vti04lQ==", + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.14.9.tgz", + "integrity": "sha512-Fqqu0f8zv9W+RyOnx29BX/RlEsBRANbOf5xs5oxb2aHP4FKbLXxIaVPUiCti56LAR1IixMH4EyaixhUsKqoBHw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.13.tgz", - "integrity": "sha512-O5JJi6fyfih0WfDgIJXksSPhGP/G0fQpfxYy87sDc+1sFmsCS6wr3aAn+whbzkhbjtq4VMqLRaSzR6IsshIC0Q==", + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.14.5.tgz", + "integrity": "sha512-1TpSDnD9XR/rQ2tzunBVPThF5poaYT9GqP+of8fAtguYuI/dm2RkrMBDemsxtY0XBzvW7nXjYM0hRyKX9QYj7Q==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz", - "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==", + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz", + "integrity": "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-regenerator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz", - "integrity": "sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA==", + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", "dev": true, - "requires": { + "dependencies": { "regenerator-transform": "^0.14.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-reserved-words": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", - "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", + "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-runtime": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.10.tgz", - "integrity": "sha512-Y5k8ipgfvz5d/76tx7JYbKQTcgFSU6VgJ3kKQv4zGTKr+a9T/KBvfRvGtSFgKDQGt/DBykQixV0vNWKIdzWErA==", + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.8.tgz", + "integrity": "sha512-+6zsde91jMzzvkzuEA3k63zCw+tm/GvuuabkpisgbDMTPQsIMHllE3XczJFFtEHLjjhKQFZmGQVRdELetlWpVw==", "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-polyfill-corejs2": "^0.1.4", - "babel-plugin-polyfill-corejs3": "^0.1.3", - "babel-plugin-polyfill-regenerator": "^0.1.2", + "dependencies": { + "@babel/helper-module-imports": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.5", + "babel-plugin-polyfill-regenerator": "^0.2.2", "semver": "^6.3.0" }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", - "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "bin": { + "semver": "bin/semver.js" } }, - "@babel/plugin-transform-spread": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", - "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", - "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", + "node_modules/@babel/plugin-transform-spread": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.15.8.tgz", + "integrity": "sha512-/daZ8s2tNaRekl9YJa9X4bzjpeRZLt122cpgFnQPLGUe61PH8zMEBmYqKkW5xF5JUEh5buEGXJoQpqBmIbpmEQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-template-literals": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", - "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", - "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-typescript": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.13.0.tgz", - "integrity": "sha512-elQEwluzaU8R8dbVuW2Q2Y8Nznf7hnjM7+DSCd14Lo5fF63C9qNLbwZYbmZrtV9/ySpSUpkRpQXvJb6xyu4hCQ==", + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-typescript": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", - "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.15.8.tgz", + "integrity": "sha512-ZXIkJpbaf6/EsmjeTbiJN/yMxWPFWvlr7sEG1P95Xb4S4IBcrf2n7s/fItIhsAmOf8oSh3VJPDppO6ExfAfKRQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-typescript": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", - "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", + "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/preset-env": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.12.tgz", - "integrity": "sha512-JzElc6jk3Ko6zuZgBtjOd01pf9yYDEIH8BcqVuYIuOkzOwDesoa/Nz4gIo4lBG6K861KTV9TvIgmFuT6ytOaAA==", + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", "dev": true, - "requires": { - "@babel/compat-data": "^7.13.12", - "@babel/helper-compilation-targets": "^7.13.10", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-async-generator-functions": "^7.13.8", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-dynamic-import": "^7.13.8", - "@babel/plugin-proposal-export-namespace-from": "^7.12.13", - "@babel/plugin-proposal-json-strings": "^7.13.8", - "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-numeric-separator": "^7.12.13", - "@babel/plugin-proposal-object-rest-spread": "^7.13.8", - "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-private-methods": "^7.13.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.8.tgz", + "integrity": "sha512-rCC0wH8husJgY4FPbHsiYyiLxSY8oMDJH7Rl6RQMknbN9oDDHhM9RDFvnGM2MgkbUJzSQB4gtuwygY5mCqGSsA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.15.4", + "@babel/plugin-proposal-async-generator-functions": "^7.15.8", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.15.4", + "@babel/plugin-proposal-dynamic-import": "^7.14.5", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-proposal-json-strings": "^7.14.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", + "@babel/plugin-proposal-numeric-separator": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.15.6", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-private-methods": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.15.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.3", @@ -1170,296 +1732,395 @@ "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.12.13", - "@babel/plugin-transform-arrow-functions": "^7.13.0", - "@babel/plugin-transform-async-to-generator": "^7.13.0", - "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.12.13", - "@babel/plugin-transform-classes": "^7.13.0", - "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.13.0", - "@babel/plugin-transform-dotall-regex": "^7.12.13", - "@babel/plugin-transform-duplicate-keys": "^7.12.13", - "@babel/plugin-transform-exponentiation-operator": "^7.12.13", - "@babel/plugin-transform-for-of": "^7.13.0", - "@babel/plugin-transform-function-name": "^7.12.13", - "@babel/plugin-transform-literals": "^7.12.13", - "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.13.0", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/plugin-transform-modules-systemjs": "^7.13.8", - "@babel/plugin-transform-modules-umd": "^7.13.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", - "@babel/plugin-transform-new-target": "^7.12.13", - "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.13.0", - "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.12.13", - "@babel/plugin-transform-reserved-words": "^7.12.13", - "@babel/plugin-transform-shorthand-properties": "^7.12.13", - "@babel/plugin-transform-spread": "^7.13.0", - "@babel/plugin-transform-sticky-regex": "^7.12.13", - "@babel/plugin-transform-template-literals": "^7.13.0", - "@babel/plugin-transform-typeof-symbol": "^7.12.13", - "@babel/plugin-transform-unicode-escapes": "^7.12.13", - "@babel/plugin-transform-unicode-regex": "^7.12.13", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.14.5", + "@babel/plugin-transform-async-to-generator": "^7.14.5", + "@babel/plugin-transform-block-scoped-functions": "^7.14.5", + "@babel/plugin-transform-block-scoping": "^7.15.3", + "@babel/plugin-transform-classes": "^7.15.4", + "@babel/plugin-transform-computed-properties": "^7.14.5", + "@babel/plugin-transform-destructuring": "^7.14.7", + "@babel/plugin-transform-dotall-regex": "^7.14.5", + "@babel/plugin-transform-duplicate-keys": "^7.14.5", + "@babel/plugin-transform-exponentiation-operator": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.15.4", + "@babel/plugin-transform-function-name": "^7.14.5", + "@babel/plugin-transform-literals": "^7.14.5", + "@babel/plugin-transform-member-expression-literals": "^7.14.5", + "@babel/plugin-transform-modules-amd": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.15.4", + "@babel/plugin-transform-modules-systemjs": "^7.15.4", + "@babel/plugin-transform-modules-umd": "^7.14.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9", + "@babel/plugin-transform-new-target": "^7.14.5", + "@babel/plugin-transform-object-super": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.15.4", + "@babel/plugin-transform-property-literals": "^7.14.5", + "@babel/plugin-transform-regenerator": "^7.14.5", + "@babel/plugin-transform-reserved-words": "^7.14.5", + "@babel/plugin-transform-shorthand-properties": "^7.14.5", + "@babel/plugin-transform-spread": "^7.15.8", + "@babel/plugin-transform-sticky-regex": "^7.14.5", + "@babel/plugin-transform-template-literals": "^7.14.5", + "@babel/plugin-transform-typeof-symbol": "^7.14.5", + "@babel/plugin-transform-unicode-escapes": "^7.14.5", + "@babel/plugin-transform-unicode-regex": "^7.14.5", "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.13.12", - "babel-plugin-polyfill-corejs2": "^0.1.4", - "babel-plugin-polyfill-corejs3": "^0.1.3", - "babel-plugin-polyfill-regenerator": "^0.1.2", - "core-js-compat": "^3.9.0", + "@babel/types": "^7.15.6", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.5", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "core-js-compat": "^3.16.0", "semver": "^6.3.0" }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/preset-modules": { + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/preset-react": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.13.13.tgz", - "integrity": "sha512-gx+tDLIE06sRjKJkVtpZ/t3mzCDOnPG+ggHZG9lffUbX8+wC739x20YQc9V35Do6ZAxaUc/HhVHIiOzz5MvDmA==", + "node_modules/@babel/preset-react": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.14.5.tgz", + "integrity": "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-transform-react-display-name": "^7.12.13", - "@babel/plugin-transform-react-jsx": "^7.13.12", - "@babel/plugin-transform-react-jsx-development": "^7.12.17", - "@babel/plugin-transform-react-pure-annotations": "^7.12.1" + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-react-display-name": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.5", + "@babel/plugin-transform-react-jsx-development": "^7.14.5", + "@babel/plugin-transform-react-pure-annotations": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/register": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.13.14.tgz", - "integrity": "sha512-iyw0hUwjh/fzN8qklVqZodbyWjEBOG0KdDnBOpv3zzIgK3NmuRXBmIXH39ZBdspkn8LTHvSboN+oYb4MT43+9Q==", + "node_modules/@babel/register": { + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.15.3.tgz", + "integrity": "sha512-mj4IY1ZJkorClxKTImccn4T81+UKTo4Ux0+OFSV9hME1ooqS9UV+pJ6BjD0qXPK4T3XW/KNa79XByjeEMZz+fw==", "dev": true, - "requires": { + "dependencies": { + "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", - "lodash": "^4.17.19", "make-dir": "^2.1.0", "pirates": "^4.0.0", "source-map-support": "^0.5.16" }, - "dependencies": { - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - } + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/runtime": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz", - "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==", + "node_modules/@babel/register/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" } }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "node_modules/@babel/register/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" + "engines": { + "node": ">=6" } }, - "@babel/traverse": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", - "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "node_modules/@babel/register/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.13", - "@babel/types": "^7.13.13", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz", + "integrity": "sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg==", + "dev": true, + "dependencies": { + "core-js-pure": "^3.16.0", + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", + "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", + "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4", "debug": "^4.1.0", "globals": "^11.1.0" }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "engines": { + "node": ">=6.9.0" } }, - "@babel/types": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz", - "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==", + "node_modules/@babel/types": { + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", + "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@bcoe/v8-coverage": { + "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "@cnakazawa/watch": { + "node_modules/@cnakazawa/watch": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", "dev": true, - "requires": { + "dependencies": { "exec-sh": "^0.3.2", "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" + }, + "engines": { + "node": ">=0.1.95" } }, - "@hapi/address": { + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@hapi/address": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==", + "deprecated": "Moved to 'npm install @sideway/address'", "dev": true }, - "@hapi/bourne": { + "node_modules/@hapi/bourne": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==", + "deprecated": "This version has been deprecated and is no longer supported or maintained", "dev": true }, - "@hapi/hoek": { + "node_modules/@hapi/hoek": { "version": "8.5.1", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==", + "deprecated": "This version has been deprecated and is no longer supported or maintained", "dev": true }, - "@hapi/joi": { + "node_modules/@hapi/joi": { "version": "15.1.1", "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "deprecated": "Switch to 'npm install joi'", "dev": true, - "requires": { + "dependencies": { "@hapi/address": "2.x.x", "@hapi/bourne": "1.x.x", "@hapi/hoek": "8.x.x", "@hapi/topo": "3.x.x" } }, - "@hapi/topo": { + "node_modules/@hapi/topo": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "deprecated": "This version has been deprecated and is no longer supported or maintained", "dev": true, - "requires": { + "dependencies": { "@hapi/hoek": "^8.3.0" } }, - "@istanbuljs/load-nyc-config": { + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, - "requires": { + "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", "get-package-type": "^0.1.0", "js-yaml": "^3.13.1", "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" } }, - "@istanbuljs/schema": { + "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "@jest/console": { + "node_modules/@jest/console": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", "dev": true, - "requires": { + "dependencies": { "@jest/types": "^26.6.2", "@types/node": "*", "chalk": "^4.0.0", @@ -1467,70 +2128,86 @@ "jest-util": "^26.6.2", "slash": "^3.0.0" }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "@jest/core": { + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/console/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core": { "version": "26.6.3", "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", "dev": true, - "requires": { + "dependencies": { "@jest/console": "^26.6.2", "@jest/reporters": "^26.6.2", "@jest/test-result": "^26.6.2", @@ -1560,150 +2237,132 @@ "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "@jest/environment": { + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", "dev": true, - "requires": { + "dependencies": { "@jest/fake-timers": "^26.6.2", "@jest/types": "^26.6.2", "@types/node": "*", "jest-mock": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" } }, - "@jest/fake-timers": { + "node_modules/@jest/fake-timers": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", "dev": true, - "requires": { + "dependencies": { "@jest/types": "^26.6.2", "@sinonjs/fake-timers": "^6.0.1", "@types/node": "*", "jest-message-util": "^26.6.2", "jest-mock": "^26.6.2", "jest-util": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" } }, - "@jest/globals": { + "node_modules/@jest/globals": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", "dev": true, - "requires": { + "dependencies": { "@jest/environment": "^26.6.2", "@jest/types": "^26.6.2", "expect": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" } }, - "@jest/reporters": { + "node_modules/@jest/reporters": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", "dev": true, - "requires": { + "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^26.6.2", "@jest/test-result": "^26.6.2", @@ -1723,127 +2382,158 @@ "jest-resolve": "^26.6.2", "jest-util": "^26.6.2", "jest-worker": "^26.6.2", - "node-notifier": "^8.0.0", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", "terminal-link": "^2.0.0", "v8-to-istanbul": "^7.0.0" }, + "engines": { + "node": ">= 10.14.2" + }, + "optionalDependencies": { + "node-notifier": "^8.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "@jest/source-map": { + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/source-map": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", "dev": true, - "requires": { + "dependencies": { "callsites": "^3.0.0", "graceful-fs": "^4.2.4", "source-map": "^0.6.0" }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "engines": { + "node": ">= 10.14.2" } }, - "@jest/test-result": { + "node_modules/@jest/source-map/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/test-result": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", "dev": true, - "requires": { + "dependencies": { "@jest/console": "^26.6.2", "@jest/types": "^26.6.2", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": ">= 10.14.2" } }, - "@jest/test-sequencer": { + "node_modules/@jest/test-sequencer": { "version": "26.6.3", "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", "dev": true, - "requires": { + "dependencies": { "@jest/test-result": "^26.6.2", "graceful-fs": "^4.2.4", "jest-haste-map": "^26.6.2", "jest-runner": "^26.6.3", "jest-runtime": "^26.6.3" + }, + "engines": { + "node": ">= 10.14.2" } }, - "@jest/transform": { + "node_modules/@jest/transform": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", "dev": true, - "requires": { + "dependencies": { "@babel/core": "^7.1.0", "@jest/types": "^26.6.2", "babel-plugin-istanbul": "^6.0.0", @@ -1860,10814 +2550,28888 @@ "source-map": "^0.6.1", "write-file-atomic": "^3.0.0" }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "@jest/types": { + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", "dev": true, - "requires": { + "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", "@types/yargs": "^15.0.0", "chalk": "^4.0.0" }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "@mendix/pluggable-widgets-tools": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@mendix/pluggable-widgets-tools/-/pluggable-widgets-tools-8.18.0.tgz", - "integrity": "sha512-3/iHbVIaF6w2G9eL1y4f0s/gjAq6TYdXwrc+vy9Zq7orAxGWMCZAr9p7IOryDK6hdRFvwhHUqhArHoK4XtCBzw==", - "dev": true, - "requires": { - "@babel/cli": "^7.6.0", - "@babel/core": "^7.6.0", - "@babel/plugin-proposal-class-properties": "^7.4.4", - "@babel/preset-env": "^7.5.5", - "@babel/preset-react": "^7.0.0", - "@typescript-eslint/eslint-plugin": "^2.19.2", - "@typescript-eslint/parser": "^2.19.2", - "@wdio/cli": "^5.11.13", - "@wdio/dot-reporter": "^5.11.7", - "@wdio/jasmine-framework": "^5.11.0", - "@wdio/local-runner": "^5.11.13", - "@wdio/selenium-standalone-service": "^5.11.2", - "@wdio/spec-reporter": "^5.11.7", - "@wdio/sync": "^5.11.13", - "babel-eslint": "^10.0.2", - "babel-jest": "^26.1.0", - "babel-loader": "^8.0.6", - "big.js": "^5.2.2", - "colors": "^1.4.0", - "concurrently": "^5.0.1", - "copy-webpack-plugin": "^6.0.0", - "core-js": "^3.6.4", - "css-loader": "^3.1.0", - "del": "^4.1.1", - "dotenv": "^8.2.0", - "enzyme": "^3.10.0", - "enzyme-adapter-react-16": "^1.14.0", - "enzyme-to-json": "^3.3.5", - "eslint": "^6.8.0", - "eslint-config-prettier": "^6.10.0", - "eslint-plugin-jest": "^23.19.0", - "eslint-plugin-prettier": "^3.1.2", - "eslint-plugin-promise": "^4.2.1", - "eslint-plugin-react": "^7.18.3", - "extract-text-webpack-plugin": "^4.0.0-beta.0", - "file-loader": "^4.0.0", - "find-free-port": "^2.0.0", - "gulp": "^4.0.2", - "gulp-zip": "^5.0.0", - "jasmine": "^3.4.0", - "jasmine-core": "^3.4.0", - "jest": "^26.1.0", - "jest-junit": "^11.1.0", - "json-loader": "^0.5.7", - "json-source-map": "^0.6.1", - "map-stream": "^0.0.7", - "mendix": "^8.14.0", - "metro-react-native-babel-preset": "~0.61.0", - "node-fetch": "^2.6.0", - "plugin-error": "^1.0.1", - "prettier": "^1.19.1", - "raw-loader": "^3.1.0", - "react": "~16.9.0", - "react-dom": "~16.9.0", - "react-hot-loader": "^4.12.19", - "react-native": "0.61.5", - "react-test-renderer": "~16.9.0", - "sass": "^1.26.10", - "sass-loader": "^9.0.2", - "semver": "^7.3.2", - "source-map-loader": "^0.2.4", - "style-loader": "^0.23.1", - "to-string-loader": "^1.1.6", - "ts-jest": "^26.1.4", - "ts-loader": "^6.2.1", - "ts-node": "^8.10.2", - "typescript": "^3.8.3", - "url-loader": "^1.1.2", - "webdriverio": "^5.18.6", - "webpack": "^4.41.6", - "webpack-cli": "^3.3.11", - "webpack-dev-server": "^3.10.3", - "webpack-merge": "^4.2.2", - "xml2js": "^0.4.23" - } - }, - "@nicolo-ribaudo/chokidar-2": { - "version": "2.1.8-no-fsevents", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.tgz", - "integrity": "sha512-+nb9vWloHNNMFHjGofEam3wopE3m1yuambrrd/fnPc+lFOMB9ROTqQlche9ByFWNkdNqfSgR/kkQtQ8DzEWt2w==", + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "@nodelib/fs.scandir": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", - "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.4", - "run-parallel": "^1.1.9" + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "@nodelib/fs.walk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", - "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.4", - "fastq": "^1.6.0" + "engines": { + "node": ">=8" } }, - "@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "@popperjs/core": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.9.1.tgz", - "integrity": "sha512-DvJbbn3dUgMxDnJLH+RZQPnXak1h4ZVYQ7CWiFWjQwBFkVajT4rfw2PdpHLTSTwxrYfnoEXkuBiwkDm6tPMQeA==" - }, - "@react-native-community/cli-debugger-ui": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-3.0.0.tgz", - "integrity": "sha512-m3X+iWLsK/H7/b7PpbNO33eQayR/+M26la4ZbYe1KRke5Umg4PIWsvg21O8Tw4uJcY8LA5hsP+rBi/syBkBf0g==", + "node_modules/@mendix/pluggable-widgets-tools": { + "version": "9.5.4", + "resolved": "https://registry.npmjs.org/@mendix/pluggable-widgets-tools/-/pluggable-widgets-tools-9.5.4.tgz", + "integrity": "sha512-FMKBdLkR2aisE3Ip+i5nL0392nZYsY6wcluga4uHuyF820tN1HJLcp9VVVtWtsvs6s807NW7Pf2f1wzlLJNmIg==", "dev": true, - "requires": { - "serve-static": "^1.13.1" + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.1", + "@rollup/plugin-alias": "^3.1.5", + "@rollup/plugin-babel": "^5.3.0", + "@rollup/plugin-commonjs": "^20.0.0", + "@rollup/plugin-image": "^2.1.0", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-node-resolve": "^13.0.4", + "@rollup/plugin-typescript": "^8.2.5", + "@rollup/plugin-url": "^6.1.0", + "@testing-library/dom": "^8.1.0", + "@testing-library/jest-dom": "^5.14.1", + "@testing-library/react": "^12.0.0", + "@testing-library/user-event": "^13.2.1", + "@types/testing-library__jest-dom": "^5.14.1", + "@typescript-eslint/eslint-plugin": "^4.15.2", + "@typescript-eslint/parser": "^4.15.2", + "@wdio/cli": "^7.5.3", + "@wdio/jasmine-framework": "^7.5.3", + "@wdio/local-runner": "^7.5.5", + "@wdio/selenium-standalone-service": "^7.5.3", + "@wdio/spec-reporter": "^7.5.3", + "@wdio/sync": "^7.5.3", + "@wojtekmaj/enzyme-adapter-react-17": "^0.6.3", + "babel-eslint": "^10.1.0", + "babel-jest": "^26.6.1", + "big.js": "^6.0.2", + "colors": "^1.4.0", + "concurrently": "^5.3.0", + "core-js": "^3.6.5", + "dotenv": "^8.2.0", + "enzyme": "^3.11.0", + "enzyme-to-json": "^3.6.1", + "eslint": "^7.20.0", + "eslint-config-prettier": "^8.0.0", + "eslint-plugin-jest": "^24.1.5", + "eslint-plugin-prettier": "^3.3.1", + "eslint-plugin-promise": "^4.3.1", + "eslint-plugin-react": "^7.22.0", + "eslint-plugin-react-hooks": "^4.2.0", + "fast-glob": "^2.2.7", + "find-free-port": "^2.0.0", + "fs-extra": "^9.0.1", + "identity-obj-proxy": "^3.0.0", + "jasmine": "^3.6.2", + "jasmine-core": "^3.6.0", + "jest": "^26.6.1", + "jest-junit": "^12.0.0", + "jest-react-hooks-shallow": "^1.4.1", + "jest-svg-transformer": "^1.0.0", + "mendix": "^9.5.25874", + "metro-react-native-babel-preset": "~0.63.0", + "node-fetch": "^2.6.1", + "postcss": "^8.1.10", + "postcss-url": "^10.1.0", + "prettier": "^2.2.1", + "react": "~17.0.1", + "react-dom": "~17.0.1", + "react-hot-loader": "^4.13.0", + "react-native": "0.63.3", + "react-test-renderer": "~17.0.1", + "recursive-copy": "^2.0.11", + "resolve": "^1.19.0", + "rollup": "^2.56.2", + "rollup-plugin-clear": "^2.0.7", + "rollup-plugin-command": "^1.1.3", + "rollup-plugin-livereload": "^2.0.0", + "rollup-plugin-re": "^1.0.7", + "rollup-plugin-sass": "^1.2.6", + "rollup-plugin-terser": "^7.0.2", + "semver": "^7.3.2", + "shelljs": "^0.8.4", + "ts-jest": "^26.4.3", + "ts-node": "^9.0.0", + "typescript": "~4.3.5", + "webdriverio": "^7.5.3", + "xml2js": "^0.4.23", + "zip-a-folder": "^0.0.12" + }, + "bin": { + "pluggable-widgets-tools": "bin/mx-scripts.js" + }, + "engines": { + "node": ">=12" } }, - "@react-native-community/cli-platform-android": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-3.1.4.tgz", - "integrity": "sha512-ClSdY20F0gzWVLTqCv7vHjnUqOcuq10jd9GgHX6lGSc2GI+Ql3/aQg3tmG4uY3KXNNwAv3U8QCoYgg1WGfwiHA==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", "dev": true, - "requires": { - "@react-native-community/cli-tools": "^3.0.0", - "chalk": "^2.4.2", - "execa": "^1.0.0", - "jetifier": "^1.6.2", - "logkitty": "^0.6.0", - "slash": "^3.0.0", - "xmldoc": "^1.1.2" - }, "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - } + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + }, + "engines": { + "node": ">= 6" } }, - "@react-native-community/cli-platform-ios": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-3.2.0.tgz", - "integrity": "sha512-pzEnx68H6+mHBq5jsMrr3UmAmkrLSMlC9BZ4yoUdfUXCQq6/R70zNYvH4hjUw8h2Al7Kgq53UzHUsM0ph8TSWQ==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", "dev": true, - "requires": { - "@react-native-community/cli-tools": "^3.0.0", - "chalk": "^2.4.2", - "js-yaml": "^3.13.1", - "xcode": "^2.0.0" + "dependencies": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" } }, - "@react-native-community/cli-tools": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-3.0.0.tgz", - "integrity": "sha512-8IhQKZdf3E4CR8T7HhkPGgorot/cLkRDgneJFDSWk/wCYZAuUh4NEAdumQV7N0jLSMWX7xxiWUPi94lOBxVY9g==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/@types/yargs": { + "version": "13.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", + "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", "dev": true, - "requires": { - "chalk": "^2.4.2", - "lodash": "^4.17.5", - "mime": "^2.4.1", - "node-fetch": "^2.5.0" - }, "dependencies": { - "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "dev": true - } + "@types/yargs-parser": "*" } }, - "@react-native-community/cli-types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-3.0.0.tgz", - "integrity": "sha512-ng6Tm537E/M42GjE4TRUxQyL8sRfClcL7bQWblOCoxPZzJ2J3bdALsjeG3vDnVCIfI/R0AeFalN9KjMt0+Z/Zg==", - "dev": true - }, - "@sindresorhus/is": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.0.tgz", - "integrity": "sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ==", - "dev": true - }, - "@sinonjs/commons": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.2.tgz", - "integrity": "sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/@wojtekmaj/enzyme-adapter-react-17": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@wojtekmaj/enzyme-adapter-react-17/-/enzyme-adapter-react-17-0.6.3.tgz", + "integrity": "sha512-Kp1ZJxtHkKEnUksaWrcMABNTOgL4wOt8VI6k2xOek2aH9PtZcWRXJNUEgnKrdJrqg5UqIjRslbVF9uUqwQJtFg==", "dev": true, - "requires": { - "type-detect": "4.0.8" + "dependencies": { + "@wojtekmaj/enzyme-adapter-utils": "^0.1.1", + "enzyme-shallow-equal": "^1.0.0", + "has": "^1.0.0", + "object.assign": "^4.1.0", + "object.values": "^1.1.0", + "prop-types": "^15.7.0", + "react-is": "^17.0.2", + "react-test-renderer": "^17.0.0" + }, + "peerDependencies": { + "enzyme": "^3.0.0", + "react": "^17.0.0-0", + "react-dom": "^17.0.0-0" } }, - "@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/@wojtekmaj/enzyme-adapter-utils": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@wojtekmaj/enzyme-adapter-utils/-/enzyme-adapter-utils-0.1.1.tgz", + "integrity": "sha512-bNPWtN/d8huKOkC6j1E3EkSamnRrHHT7YuR6f9JppAQqtoAm3v4/vERe4J14jQKmHLCyEBHXrlgb7H6l817hVg==", "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" + "dependencies": { + "function.prototype.name": "^1.1.0", + "has": "^1.0.0", + "object.assign": "^4.1.0", + "object.fromentries": "^2.0.0", + "prop-types": "^15.7.0" + }, + "peerDependencies": { + "react": "^17.0.0-0" } }, - "@szmarczak/http-timer": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", - "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/ansi-escapes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz", + "integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=", "dev": true, - "requires": { - "defer-to-connect": "^2.0.0" + "engines": { + "node": ">=4" } }, - "@types/babel__core": { - "version": "7.1.14", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", - "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "engines": { + "node": ">=6" } }, - "@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/big.js": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.1.1.tgz", + "integrity": "sha512-1vObw81a8ylZO5ePrtMay0n018TcftpTA5HFKDaSuiUDBo8biRBtjIobw60OpwuvrGk+FsxKamqN4cnmj/eXdg==", "dev": true, - "requires": { - "@babel/types": "^7.0.0" + "engines": { + "node": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/bigjs" } }, - "@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" } }, - "@types/babel__traverse": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", - "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "@babel/types": "^7.3.0" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "@types/big.js": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/big.js/-/big.js-4.0.5.tgz", - "integrity": "sha512-D9KFrAt05FDSqLo7PU9TDHfDgkarlwdkuwFsg7Zm4xl62tTNaz+zN+Tkcdx2wGLBbSMf8BnoMhOVeUGUaJfLKg==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", "dev": true }, - "@types/cacheable-request": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", - "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "@types/caseless": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", - "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", "dev": true }, - "@types/cheerio": { - "version": "0.22.28", - "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.28.tgz", - "integrity": "sha512-ehUMGSW5IeDxJjbru4awKYMlKGmo1wSSGUVqXtYwlgmUM8X1a0PZttEIm6yEY7vHsY/hh6iPnklF213G0UColw==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "requires": { - "@types/node": "*" + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "@types/eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/@mendix/pluggable-widgets-tools/node_modules/deepmerge": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", + "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==", "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" + "engines": { + "node": ">=0.10.0" } }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "dev": true, - "requires": { - "@types/node": "*" + "dependencies": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=0.12" } }, - "@types/http-cache-semantics": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", - "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==", - "dev": true - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "dev": true + "node_modules/@mendix/pluggable-widgets-tools/node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" + "engines": { + "node": ">=8" } }, - "@types/istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/inquirer": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.1.1.tgz", + "integrity": "sha512-H50sHQwgvvaTBd3HpKMVtL/u6LoHDvYym51gd7bGQe/+9HkCE+J0/3N5FJLfd6O6oz44hHewC2Pc2LodzWVafQ==", "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" + "dependencies": { + "ansi-escapes": "^2.0.0", + "chalk": "^1.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.0.0", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" } }, - "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", - "dev": true + "node_modules/@mendix/pluggable-widgets-tools/node_modules/inquirer/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "@types/keyv": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", - "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/inquirer/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true, - "requires": { - "@types/node": "*" + "engines": { + "node": ">=0.10.0" } }, - "@types/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", - "dev": true + "node_modules/@mendix/pluggable-widgets-tools/node_modules/inquirer/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "@types/node": { - "version": "14.14.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz", - "integrity": "sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw==", - "dev": true + "node_modules/@mendix/pluggable-widgets-tools/node_modules/inquirer/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "@types/normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", - "dev": true + "node_modules/@mendix/pluggable-widgets-tools/node_modules/inquirer/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, - "@types/prettier": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz", - "integrity": "sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==", - "dev": true + "node_modules/@mendix/pluggable-widgets-tools/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } }, - "@types/prop-types": { - "version": "15.7.3", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", - "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==", - "dev": true + "node_modules/@mendix/pluggable-widgets-tools/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } }, - "@types/react": { - "version": "16.9.56", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.56.tgz", - "integrity": "sha512-gIkl4J44G/qxbuC6r2Xh+D3CGZpJ+NdWTItAPmZbR5mUS+JQ8Zvzpl0ea5qT/ZT3ZNTUcDKUVqV3xBE8wv/DyQ==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "dev": true, - "requires": { - "@types/prop-types": "*", - "csstype": "^3.0.2" + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" } }, - "@types/react-native": { - "version": "0.61.23", - "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.61.23.tgz", - "integrity": "sha512-upHmySsrVBDBokWWhYIKkKnpvadsHdioSjbBTu4xl7fjN0yb94KR5ngUOBXsyqAYqQzF+hP6qpvobG9M7Jr6hw==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/log-symbols/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "requires": { - "@types/react": "*" + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "@types/request": { - "version": "2.48.5", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.5.tgz", - "integrity": "sha512-/LO7xRVnL3DxJ1WkPGDQrp4VTV1reX9RkC85mJ+Qzykj2Bdw+mG15aAfDahc76HtknjzE16SX/Yddn6MxVbmGQ==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/log-symbols/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, - "requires": { - "@types/caseless": "*", - "@types/node": "*", - "@types/tough-cookie": "*", - "form-data": "^2.5.0" + "engines": { + "node": ">=4" } }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/log-symbols/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "requires": { - "@types/node": "*" + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "@types/selenium-standalone": { - "version": "6.15.2", - "resolved": "https://registry.npmjs.org/@types/selenium-standalone/-/selenium-standalone-6.15.2.tgz", - "integrity": "sha512-Jnt4AHHcUOPGuZ5cJRYfP3IpPalNc/o1BmFvuFFmLtU2PtvEGvyyJPdpErqzZDxsP8E4yjTst0GL+QMJiEWuBA==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true, - "requires": { - "@types/node": "*" + "engines": { + "node": ">=4" } }, - "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", - "dev": true + "node_modules/@mendix/pluggable-widgets-tools/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } }, - "@types/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, - "@types/yargs": { - "version": "15.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", - "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, - "requires": { - "@types/yargs-parser": "*" + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "@types/yargs-parser": { - "version": "20.2.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", - "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", - "dev": true + "node_modules/@mendix/pluggable-widgets-tools/node_modules/ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=6" + } }, - "@typescript-eslint/eslint-plugin": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", - "integrity": "sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/ora/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "2.34.0", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.0.0", - "tsutils": "^3.17.1" + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "@typescript-eslint/experimental-utils": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", - "integrity": "sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/ora/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, - "requires": { - "@types/json-schema": "^7.0.3", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^2.0.0" + "engines": { + "node": ">=4" } }, - "@typescript-eslint/parser": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.34.0.tgz", - "integrity": "sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/ora/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "requires": { - "@types/eslint-visitor-keys": "^1.0.0", - "@typescript-eslint/experimental-utils": "2.34.0", - "@typescript-eslint/typescript-estree": "2.34.0", - "eslint-visitor-keys": "^1.1.0" + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "@typescript-eslint/typescript-estree": { - "version": "2.34.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", - "integrity": "sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/pretty-format": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", "dev": true, - "requires": { - "debug": "^4.1.1", - "eslint-visitor-keys": "^1.1.0", - "glob": "^7.1.6", - "is-glob": "^4.0.1", - "lodash": "^4.17.15", - "semver": "^7.3.2", - "tsutils": "^3.17.1" + "dependencies": { + "@jest/types": "^24.9.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@mendix/pluggable-widgets-tools/node_modules/pretty-format/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/@mendix/pluggable-widgets-tools/node_modules/promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "dev": true, "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "asap": "~2.0.6" } }, - "@wdio/cli": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-5.23.0.tgz", - "integrity": "sha512-QYhVQUIBamgr627dU88XE7yyiZ/Oe6gQR2ZGiZMyxDQ3zxXnf9BRhKtn1x+AKLO7Dwag8+Apy/3xNeY4OOsfog==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", "dev": true, - "requires": { - "@wdio/config": "5.22.4", - "@wdio/logger": "5.16.10", - "@wdio/utils": "5.23.0", - "async-exit-hook": "^2.0.1", - "chalk": "^3.0.0", - "chokidar": "^3.0.0", - "cli-spinners": "^2.1.0", - "ejs": "^3.0.1", - "fs-extra": "^8.0.1", - "inquirer": "^7.0.0", - "lodash.flattendeep": "^4.4.0", - "lodash.pickby": "^4.6.0", - "lodash.union": "^4.6.0", - "log-update": "^3.2.0", - "webdriverio": "5.23.0", - "yargs": "^15.0.1", - "yarn-install": "^1.0.0" - }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "@wdio/config": { - "version": "5.22.4", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-5.22.4.tgz", - "integrity": "sha512-i5dJQWb80darcRA//tfG0guMeQCeRUXroZNnHjGNb1qzvTRZmcIIhdxaD+DbK/5dWEx6aoMfoi6wjVp/CXwdAg==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", "dev": true, - "requires": { - "@wdio/logger": "5.16.10", - "deepmerge": "^4.0.0", - "glob": "^7.1.2" + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" } }, - "@wdio/dot-reporter": { - "version": "5.22.4", - "resolved": "https://registry.npmjs.org/@wdio/dot-reporter/-/dot-reporter-5.22.4.tgz", - "integrity": "sha512-PKhfPugbYCy3qoPvsYjfxnYI1fVQOLYVh1R9tEvwZx5lMM3bZGSoyfqqyjRb5S4H6rQG5s+S8DczpCub+wJA2A==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/@mendix/pluggable-widgets-tools/node_modules/react-native": { + "version": "0.63.3", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.63.3.tgz", + "integrity": "sha512-71wq13uNo5W8QVQnFlnzZ3AD+XgUBYGhpsxysQFW/hJ8GAt/J5o+Bvhy81FXichp6IBDJDh/JgfHH2gNji8dFA==", "dev": true, - "requires": { - "@wdio/reporter": "5.22.4", - "chalk": "^3.0.0" - }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "@babel/runtime": "^7.0.0", + "@react-native-community/cli": "^4.10.0", + "@react-native-community/cli-platform-android": "^4.10.0", + "@react-native-community/cli-platform-ios": "^4.10.0", + "abort-controller": "^3.0.0", + "anser": "^1.4.9", + "base64-js": "^1.1.2", + "event-target-shim": "^5.0.1", + "fbjs": "^1.0.0", + "fbjs-scripts": "^1.1.0", + "hermes-engine": "~0.5.0", + "invariant": "^2.2.4", + "jsc-android": "^245459.0.0", + "metro-babel-register": "0.59.0", + "metro-react-native-babel-transformer": "0.59.0", + "metro-source-map": "0.59.0", + "nullthrows": "^1.1.1", + "pretty-format": "^24.9.0", + "promise": "^8.0.3", + "prop-types": "^15.7.2", + "react-devtools-core": "^4.6.0", + "react-refresh": "^0.4.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "0.19.1", + "stacktrace-parser": "^0.1.3", + "use-subscription": "^1.0.0", + "whatwg-fetch": "^3.0.0" + }, + "bin": { + "react-native": "cli.js" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "16.13.1" } }, - "@wdio/jasmine-framework": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/jasmine-framework/-/jasmine-framework-5.23.0.tgz", - "integrity": "sha512-GKz9AEYC1ltKtlXzy9y1Jw4cFCFt099AJTTQ2BK43ZHtkx1pEa2a7bkZ/FnGtpLyj9eSDQ+Q0FqTl2vjCBNIdA==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/react-native/node_modules/@jest/types": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", + "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", "dev": true, - "requires": { - "@wdio/logger": "5.16.10", - "@wdio/utils": "5.23.0", - "jasmine": "^3.5.0" + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0" + }, + "engines": { + "node": ">= 8.3" } }, - "@wdio/local-runner": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-5.23.0.tgz", - "integrity": "sha512-+hlkaLemsOodCq19DEWi6ILu4qi8q023LZfLj6ZJdxLdVxkqrvm6VlRhI3B7u6T5CGA7CaOe500LeKK4strKwA==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/react-native/node_modules/@react-native-community/cli": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-4.14.0.tgz", + "integrity": "sha512-EYJKBuxFxAu/iwNUfwDq41FjORpvSh1wvQ3qsHjzcR5uaGlWEOJrd3uNJDuKBAS0TVvbEesLF9NEXipjyRVr4Q==", "dev": true, - "requires": { - "@wdio/logger": "5.16.10", - "@wdio/repl": "5.23.0", - "@wdio/runner": "5.23.0", - "async-exit-hook": "^2.0.1", - "stream-buffers": "^3.0.2" + "dependencies": { + "@hapi/joi": "^15.0.3", + "@react-native-community/cli-debugger-ui": "^4.13.1", + "@react-native-community/cli-hermes": "^4.13.0", + "@react-native-community/cli-server-api": "^4.13.1", + "@react-native-community/cli-tools": "^4.13.0", + "@react-native-community/cli-types": "^4.10.1", + "chalk": "^3.0.0", + "command-exists": "^1.2.8", + "commander": "^2.19.0", + "cosmiconfig": "^5.1.0", + "deepmerge": "^3.2.0", + "envinfo": "^7.7.2", + "execa": "^1.0.0", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0", + "glob": "^7.1.3", + "graceful-fs": "^4.1.3", + "inquirer": "^3.0.6", + "leven": "^3.1.0", + "lodash": "^4.17.15", + "metro": "^0.59.0", + "metro-config": "^0.59.0", + "metro-core": "^0.59.0", + "metro-react-native-babel-transformer": "^0.59.0", + "metro-resolver": "^0.59.0", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "node-stream-zip": "^1.9.1", + "ora": "^3.4.0", + "pretty-format": "^25.2.0", + "semver": "^6.3.0", + "serve-static": "^1.13.1", + "strip-ansi": "^5.2.0", + "sudo-prompt": "^9.0.0", + "wcwidth": "^1.0.1" + }, + "bin": { + "react-native": "build/bin.js" + }, + "engines": { + "node": ">=8.3" + }, + "peerDependencies": { + "react-native": ">=0.62.0-rc.0 <0.64.0" } }, - "@wdio/logger": { - "version": "5.16.10", - "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-5.16.10.tgz", - "integrity": "sha512-hRKhxgd9uB48Dtj2xe2ckxU4KwI/RO8IwguySuaI2SLFj6EDbdonwzpVkq111/fjBuq7R1NauAaNcm3AMEbIFA==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/react-native/node_modules/@react-native-community/cli/node_modules/pretty-format": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", + "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", "dev": true, - "requires": { - "chalk": "^3.0.0", - "loglevel": "^1.6.0", - "loglevel-plugin-prefix": "^0.8.4", - "strip-ansi": "^6.0.0" - }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "@jest/types": "^25.5.0", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.12.0" + }, + "engines": { + "node": ">= 8.3" } }, - "@wdio/protocols": { - "version": "5.22.1", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-5.22.1.tgz", - "integrity": "sha512-GdoWb/HTrb09Qb0S/7sLp1NU94LAhTsF1NnFj5sEFSUpecrl0S07pnhVg54pUImectN/woaqSl7uJGjlSGZcdQ==", - "dev": true - }, - "@wdio/repl": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-5.23.0.tgz", - "integrity": "sha512-cKG9m0XuqcQenQmoup0yJX1fkDQEdY06QXuwt636ZQf6XgDoeoAdNOgnRnNruQ0+JsC2eqHFoSNto1q8wcLH/g==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/react-native/node_modules/@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", "dev": true, - "requires": { - "@wdio/utils": "5.23.0" + "dependencies": { + "@types/yargs-parser": "*" } }, - "@wdio/reporter": { - "version": "5.22.4", - "resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-5.22.4.tgz", - "integrity": "sha512-y/HIKGJHsKXroWWH1B7upynoYmFMuAwJs3LEVwdnpiJIBF4DxzIrRGCY/SSA6U1a/+cRTdI5m1+vA1gcFxcmwQ==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/react-native/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "requires": { - "fs-extra": "^8.0.1" + "engines": { + "node": ">=8" } }, - "@wdio/runner": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-5.23.0.tgz", - "integrity": "sha512-G4ddjgYeaopF3L+1+48V/MgCVSTOpiNXfHpQG3RBi9iw2dCYraZtn1bZEiBqTZaGd+tqd+DBvfQ0HjP0JUT8Kw==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/react-native/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "@wdio/config": "5.22.4", - "@wdio/logger": "5.16.10", - "@wdio/utils": "5.23.0", - "deepmerge": "^4.0.0", - "gaze": "^1.1.2", - "webdriverio": "5.23.0" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "@wdio/selenium-standalone-service": { - "version": "5.16.10", - "resolved": "https://registry.npmjs.org/@wdio/selenium-standalone-service/-/selenium-standalone-service-5.16.10.tgz", - "integrity": "sha512-IudfrPgFoejkM+UT4sPv9g5pAGax7+CyHDZkbPDl2XXsct3gdAXDVe57KWuNYX+s0jFu8MSR/4nLnvJjdydNjw==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/react-native/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, - "requires": { - "@types/selenium-standalone": "^6.15.0", - "@wdio/logger": "5.16.10", - "fs-extra": "^8.0.1", - "selenium-standalone": "^6.15.1" + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" } }, - "@wdio/spec-reporter": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-5.23.0.tgz", - "integrity": "sha512-dqVqo5+wbSaJhQfOOnw8o53StFtPOlUwrsMsp80YATZZxGjtLLuNFWlT9xGVhMDzTnzBUNO8ZxsSIl8gSE2Iew==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/react-native/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/@mendix/pluggable-widgets-tools/node_modules/react-native/node_modules/react-native": { + "version": "0.63.4", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.63.4.tgz", + "integrity": "sha512-I4kM8kYO2mWEYUFITMcpRulcy4/jd+j9T6PbIzR0FuMcz/xwd+JwHoLPa1HmCesvR1RDOw9o4D+OFLwuXXfmGw==", "dev": true, - "requires": { - "@wdio/reporter": "5.22.4", - "chalk": "^3.0.0", - "easy-table": "^1.1.1", - "pretty-ms": "^6.0.0" - }, + "peer": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "@babel/runtime": "^7.0.0", + "@react-native-community/cli": "^4.10.0", + "@react-native-community/cli-platform-android": "^4.10.0", + "@react-native-community/cli-platform-ios": "^4.10.0", + "abort-controller": "^3.0.0", + "anser": "^1.4.9", + "base64-js": "^1.1.2", + "event-target-shim": "^5.0.1", + "fbjs": "^1.0.0", + "fbjs-scripts": "^1.1.0", + "hermes-engine": "~0.5.0", + "invariant": "^2.2.4", + "jsc-android": "^245459.0.0", + "metro-babel-register": "0.59.0", + "metro-react-native-babel-transformer": "0.59.0", + "metro-source-map": "0.59.0", + "nullthrows": "^1.1.1", + "pretty-format": "^24.9.0", + "promise": "^8.0.3", + "prop-types": "^15.7.2", + "react-devtools-core": "^4.6.0", + "react-refresh": "^0.4.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "0.19.1", + "stacktrace-parser": "^0.1.3", + "use-subscription": "^1.0.0", + "whatwg-fetch": "^3.0.0" + }, + "bin": { + "react-native": "cli.js" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "16.13.1" } }, - "@wdio/sync": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/sync/-/sync-5.23.0.tgz", - "integrity": "sha512-i+ntMVXqKcdQRfnjZ0qCXUoPlQhK2/GwDeCeO35fBeLkd7hbo5r8jGd/maXgnL19Jscjeotid5w53HJqSDYCYA==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/react-native/node_modules/scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", "dev": true, - "requires": { - "@wdio/logger": "5.16.10", - "fibers": "^4.0.1", - "fibers_node_v8": "^3.1.2" + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" } }, - "@wdio/utils": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-5.23.0.tgz", - "integrity": "sha512-dWPEkDiaNUqJXPO6L2di2apI7Rle7Er4euh67Wlb5+3MrPNjCKhiF8gHcpQeL8oe6A1MH/f89kpSEEXe4BMkAw==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/react-native/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "requires": { - "@wdio/logger": "5.16.10", - "deepmerge": "^4.0.0" + "bin": { + "semver": "bin/semver.js" } }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/react-native/node_modules/use-subscription": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz", + "integrity": "sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==", "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "dependencies": { + "object-assign": "^4.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0" } }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/react-test-renderer": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.2.tgz", + "integrity": "sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==", "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" + "dependencies": { + "object-assign": "^4.1.1", + "react-is": "^17.0.2", + "react-shallow-renderer": "^16.13.1", + "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" } }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" } }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" } }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/string-width": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz", + "integrity": "sha1-Y1xUNsxypuDDh87KJ41OLuxSaH4=", "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/string-width/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true, - "requires": { - "@xtuc/long": "4.2.2" + "engines": { + "node": ">=0.10.0" } }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/string-width/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" } }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "node_modules/@mendix/pluggable-widgets-tools/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "node_modules/@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "dependencies": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + }, + "engines": { + "node": ">=4" } }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" } }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "node_modules/@nodelib/fs.scandir/node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" + "engines": { + "node": ">= 8" } }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "node_modules/@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", "dev": true, - "requires": { - "event-target-shim": "^5.0.0" + "engines": { + "node": ">= 6" } }, - "absolute-path": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/absolute-path/-/absolute-path-0.0.0.tgz", - "integrity": "sha1-p4di+9rftSl76ZsV01p4Wy8JW/c=", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" } }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true + "node_modules/@popperjs/core": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.9.1.tgz", + "integrity": "sha512-DvJbbn3dUgMxDnJLH+RZQPnXak1h4ZVYQ7CWiFWjQwBFkVajT4rfw2PdpHLTSTwxrYfnoEXkuBiwkDm6tPMQeA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "node_modules/@react-native-community/cli-debugger-ui": { + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-4.13.1.tgz", + "integrity": "sha512-UFnkg5RTq3s2X15fSkrWY9+5BKOFjihNSnJjTV2H5PtTUFbd55qnxxPw8CxSfK0bXb1IrSvCESprk2LEpqr5cg==", "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" + "dependencies": { + "serve-static": "^1.13.1" } }, - "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/@react-native-community/cli-hermes": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-4.13.0.tgz", + "integrity": "sha512-oG+w0Uby6rSGsUkJGLvMQctZ5eVRLLfhf84lLyz942OEDxFRa9U19YJxOe9FmgCKtotbYiM3P/XhK+SVCuerPQ==", "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, "dependencies": { - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - } + "@react-native-community/cli-platform-android": "^4.13.0", + "@react-native-community/cli-tools": "^4.13.0", + "chalk": "^3.0.0", + "hermes-profile-transformer": "^0.0.6", + "ip": "^1.1.5" } }, - "airbnb-prop-types": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz", - "integrity": "sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg==", - "requires": { - "array.prototype.find": "^2.1.1", - "function.prototype.name": "^1.1.2", - "is-regex": "^1.1.0", - "object-is": "^1.1.2", - "object.assign": "^4.1.0", - "object.entries": "^1.1.2", - "prop-types": "^15.7.2", - "prop-types-exact": "^1.2.0", - "react-is": "^16.13.1" + "node_modules/@react-native-community/cli-hermes/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/@react-native-community/cli-hermes/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, "dependencies": { - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" } }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true + "node_modules/@react-native-community/cli-hermes/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "node_modules/@react-native-community/cli-hermes/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "node_modules/@react-native-community/cli-hermes/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "ansi-wrap": "^0.1.0" + "engines": { + "node": ">=8" } }, - "ansi-cyan": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", - "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", + "node_modules/@react-native-community/cli-hermes/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "ansi-wrap": "0.1.0" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/@react-native-community/cli-platform-android": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-4.13.0.tgz", + "integrity": "sha512-3i8sX8GklEytUZwPnojuoFbCjIRzMugCdzDIdZ9UNmi/OhD4/8mLGO0dgXfT4sMWjZwu3qjy45sFfk2zOAgHbA==", "dev": true, - "requires": { - "type-fest": "^0.21.3" + "dependencies": { + "@react-native-community/cli-tools": "^4.13.0", + "chalk": "^3.0.0", + "execa": "^1.0.0", + "fs-extra": "^8.1.0", + "glob": "^7.1.3", + "jetifier": "^1.6.2", + "lodash": "^4.17.15", + "logkitty": "^0.7.1", + "slash": "^3.0.0", + "xmldoc": "^1.1.2" } }, - "ansi-fragments": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", - "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", + "node_modules/@react-native-community/cli-platform-android/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "colorette": "^1.0.7", - "slice-ansi": "^2.0.0", - "strip-ansi": "^5.0.0" + "dependencies": { + "color-convert": "^2.0.1" }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" } }, - "ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "node_modules/@react-native-community/cli-platform-android/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "requires": { - "ansi-wrap": "0.1.0" + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "node_modules/@react-native-community/cli-platform-android/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "ansi-red": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", - "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", + "node_modules/@react-native-community/cli-platform-android/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, - "requires": { - "ansi-wrap": "0.1.0" + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" } }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@react-native-community/cli-platform-android/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "color-convert": "^1.9.0" + "engines": { + "node": ">=8" } }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true + "node_modules/@react-native-community/cli-platform-android/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "node_modules/@react-native-community/cli-platform-android/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "node_modules/@react-native-community/cli-platform-ios": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-4.13.0.tgz", + "integrity": "sha512-6THlTu8zp62efkzimfGr3VIuQJ2514o+vScZERJCV1xgEi8XtV7mb/ZKt9o6Y9WGxKKkc0E0b/aVAtgy+L27CA==", "dev": true, - "requires": { - "buffer-equal": "^1.0.0" + "dependencies": { + "@react-native-community/cli-tools": "^4.13.0", + "chalk": "^3.0.0", + "glob": "^7.1.3", + "js-yaml": "^3.13.1", + "lodash": "^4.17.15", + "plist": "^3.0.1", + "xcode": "^2.0.0" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "archiver": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz", - "integrity": "sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==", + "node_modules/@react-native-community/cli-platform-ios/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "archiver-utils": "^2.1.0", - "async": "^2.6.3", - "buffer-crc32": "^0.2.1", - "glob": "^7.1.4", - "readable-stream": "^3.4.0", - "tar-stream": "^2.1.0", - "zip-stream": "^2.1.2" - }, "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "node_modules/@react-native-community/cli-platform-ios/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, - "requires": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" } }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/@react-native-community/cli-platform-ios/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "requires": { - "sprintf-js": "~1.0.2" + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "node_modules/@react-native-community/cli-platform-ios/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "arr-filter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", - "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", + "node_modules/@react-native-community/cli-platform-ios/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "make-iterator": "^1.0.0" + "engines": { + "node": ">=8" } }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", - "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", + "node_modules/@react-native-community/cli-platform-ios/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "make-iterator": "^1.0.0" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", - "dev": true - }, - "array-filter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", - "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", - "dev": true - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "array-includes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", - "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "node_modules/@react-native-community/cli-server-api": { + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-4.13.1.tgz", + "integrity": "sha512-vQzsFKD9CjHthA2ehTQX8c7uIzlI9A7ejaIow1I9RlEnLraPH2QqVDmzIdbdh5Od47UPbRzamCgAP8Bnqv3qwQ==", "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" + "dependencies": { + "@react-native-community/cli-debugger-ui": "^4.13.1", + "@react-native-community/cli-tools": "^4.13.0", + "compression": "^1.7.1", + "connect": "^3.6.5", + "errorhandler": "^1.5.0", + "nocache": "^2.1.0", + "pretty-format": "^25.1.0", + "serve-static": "^1.13.1", + "ws": "^1.1.0" } }, - "array-initial": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", - "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", + "node_modules/@react-native-community/cli-server-api/node_modules/@jest/types": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", + "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", "dev": true, - "requires": { - "array-slice": "^1.0.0", - "is-number": "^4.0.0" + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0" }, + "engines": { + "node": ">= 8.3" + } + }, + "node_modules/@react-native-community/cli-server-api/node_modules/@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" } }, - "array-last": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", - "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "node_modules/@react-native-community/cli-server-api/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "is-number": "^4.0.0" - }, "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true + "node_modules/@react-native-community/cli-server-api/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", - "dev": true + "node_modules/@react-native-community/cli-server-api/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } }, - "array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "node_modules/@react-native-community/cli-server-api/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "array-sort": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", - "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "node_modules/@react-native-community/cli-server-api/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "default-compare": "^1.0.0", - "get-value": "^2.0.6", - "kind-of": "^5.0.2" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "engines": { + "node": ">=8" } }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true + "node_modules/@react-native-community/cli-server-api/node_modules/pretty-format": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", + "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", + "dev": true, + "dependencies": { + "@jest/types": "^25.5.0", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.12.0" + }, + "engines": { + "node": ">= 8.3" + } }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true + "node_modules/@react-native-community/cli-server-api/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "node_modules/@react-native-community/cli-server-api/node_modules/ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "dev": true, + "dependencies": { + "options": ">=0.0.5", + "ultron": "1.0.x" + } }, - "array.prototype.find": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.1.tgz", - "integrity": "sha512-mi+MYNJYLTx2eNYy+Yh6raoQacCsNeeMUaspFPh9Y141lFSsWxxB8V9mM2ye+eqiRs917J6/pJ4M9ZPzenWckA==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.4" + "node_modules/@react-native-community/cli-tools": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-4.13.0.tgz", + "integrity": "sha512-s4f489h5+EJksn4CfheLgv5PGOM0CDmK1UEBLw2t/ncWs3cW2VI7vXzndcd/WJHTv3GntJhXDcJMuL+Z2IAOgg==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "lodash": "^4.17.15", + "mime": "^2.4.1", + "node-fetch": "^2.6.0", + "open": "^6.2.0", + "shell-quote": "1.6.1" } }, - "array.prototype.flat": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", - "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "node_modules/@react-native-community/cli-tools/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "array.prototype.flatmap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", - "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "node_modules/@react-native-community/cli-tools/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" } }, - "art": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/art/-/art-0.10.3.tgz", - "integrity": "sha512-HXwbdofRTiJT6qZX/FnchtldzJjS3vkLJxQilc3Xj+ma2MXjY4UAyQ0ls1XZYVnDvVIBiFZbC6QsvtW86TD6tQ==", - "dev": true + "node_modules/@react-native-community/cli-tools/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "node_modules/@react-native-community/cli-tools/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "node_modules/@react-native-community/cli-tools/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "safer-buffer": "~2.1.0" + "engines": { + "node": ">=8" } }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "node_modules/@react-native-community/cli-tools/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "node_modules/@react-native-community/cli-types": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-4.10.1.tgz", + "integrity": "sha512-ael2f1onoPF3vF7YqHGWy7NnafzGu+yp88BbFbP0ydoCP2xGSUzmZVw0zakPTC040Id+JQ9WeFczujMkDy6jYQ==", + "dev": true + }, + "node_modules/@rollup/plugin-alias": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-3.1.8.tgz", + "integrity": "sha512-tf7HeSs/06wO2LPqKNY3Ckbvy0JRe7Jyn98bXnt/gfrxbe+AJucoNJlsEVi9sdgbQtXemjbakCpO/76JVgnHpA==", "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" + "dependencies": { + "slash": "^3.0.0" }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz", + "integrity": "sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==", + "dev": true, "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true } } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "node_modules/@rollup/plugin-commonjs": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz", + "integrity": "sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^2.38.3" + } }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true + "node_modules/@rollup/plugin-image": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-image/-/plugin-image-2.1.1.tgz", + "integrity": "sha512-AgP4U85zuQJdUopLUCM+hTf45RepgXeTb8EJsleExVy99dIoYpt3ZlDYJdKmAc2KLkNntCDg6BPJvgJU3uGF+g==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "mini-svg-data-uri": "^1.2.3" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true + "node_modules/@rollup/plugin-json": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", + "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.0.8" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } }, - "async": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", - "dev": true + "node_modules/@rollup/plugin-node-resolve": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.6.tgz", + "integrity": "sha512-sFsPDMPd4gMqnh2gS0uIxELnoRUp5kBl5knxD2EO0778G1oOJv4G1vyT2cpWz75OU2jDVcXhjVUuTAczGyFNKA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^2.42.0" + } }, - "async-done": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", - "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "node_modules/@rollup/plugin-typescript": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-8.3.0.tgz", + "integrity": "sha512-I5FpSvLbtAdwJ+naznv+B4sjXZUcIvLLceYpITAn7wAP8W0wqc5noLdGIp9HGVntNhRWXctwPYrSSFQxtl0FPA==", "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.2", - "process-nextick-args": "^2.0.0", - "stream-exhaust": "^1.0.1" + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "resolve": "^1.17.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "rollup": "^2.14.0", + "tslib": "*", + "typescript": ">=3.7.0" } }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true + "node_modules/@rollup/plugin-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-url/-/plugin-url-6.1.0.tgz", + "integrity": "sha512-FJNWBnBB7nLzbcaGmu1no+U/LlRR67TtgfRFP+VEKSrWlDTE6n9jMns/N4Q/VL6l4x6kTHQX4HQfwTcldaAfHQ==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "make-dir": "^3.1.0", + "mime": "^2.4.6" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } }, - "async-exit-hook": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", - "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", - "dev": true + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } }, - "async-limiter": { + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", "dev": true }, - "async-settle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", - "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", + "node_modules/@sindresorhus/is": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", + "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", "dev": true, - "requires": { - "async-done": "^1.2.2" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true + "node_modules/@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } }, - "babel-eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.0", - "@babel/traverse": "^7.7.0", - "@babel/types": "^7.7.0", - "eslint-visitor-keys": "^1.0.0", - "resolve": "^1.12.0" + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" } }, - "babel-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", + "node_modules/@testing-library/dom": { + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.10.1.tgz", + "integrity": "sha512-rab7vpf1uGig5efWwsCOn9j4/doy+W3VBoUyzX7C4y77u0wAckwc7R8nyH6e2rw0rRzKJR+gWPiAg8zhiFbxWQ==", "dev": true, - "requires": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^4.2.0", + "aria-query": "^5.0.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.4.4", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=12" } }, - "babel-loader": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", - "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "node_modules/@testing-library/dom/node_modules/@jest/types": { + "version": "27.2.5", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.5.tgz", + "integrity": "sha512-nmuM4VuDtCZcY+eTpw+0nvstwReMsjPoj7ZR80/BbixulhLaiX+fbv8oeLW8WZlJMcsGQsTmMKT/iTZu1Uy/lQ==", "dev": true, - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "node_modules/@testing-library/dom/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, - "requires": { - "object.assign": "^4.1.0" + "dependencies": { + "@types/yargs-parser": "*" } }, - "babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", + "node_modules/@testing-library/dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", - "test-exclude": "^6.0.0" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", + "node_modules/@testing-library/dom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "babel-plugin-polyfill-corejs2": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz", - "integrity": "sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA==", + "node_modules/@testing-library/dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "requires": { - "@babel/compat-data": "^7.13.0", - "@babel/helper-define-polyfill-provider": "^0.1.5", - "semver": "^6.1.1" - }, "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "babel-plugin-polyfill-corejs3": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", - "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==", + "node_modules/@testing-library/dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@testing-library/dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.1.5", - "core-js-compat": "^3.8.1" + "engines": { + "node": ">=8" } }, - "babel-plugin-polyfill-regenerator": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz", - "integrity": "sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg==", + "node_modules/@testing-library/dom/node_modules/pretty-format": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.3.1.tgz", + "integrity": "sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==", "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.1.5" + "dependencies": { + "@jest/types": "^27.2.5", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "7.0.0-beta.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", - "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==", + "node_modules/@testing-library/dom/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "node_modules/@testing-library/dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "babel-preset-fbjs": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.3.0.tgz", - "integrity": "sha512-7QTLTCd2gwB2qGoi5epSULMHugSVgpcVt5YAeiFO9ABLrutDQzKfGwzxgZHLpugq8qMdg/DhRZDZ5CLKxBkEbw==", + "node_modules/@testing-library/jest-dom": { + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.14.1.tgz", + "integrity": "sha512-dfB7HVIgTNCxH22M1+KU6viG5of2ldoA5ly8Ar8xkezKHKXjRvznCdbMbqjYGgO2xjRbwnR+rR8MLUIqF3kKbQ==", "dev": true, - "requires": { - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-syntax-class-properties": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoped-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-member-expression-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-super": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-property-literals": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" + "dependencies": { + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^4.2.2", + "chalk": "^3.0.0", + "css": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=8", + "npm": ">=6", + "yarn": ">=1" } }, - "babel-preset-jest": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", + "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "bach": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", - "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", + "node_modules/@testing-library/jest-dom/node_modules/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", "dev": true, - "requires": { - "arr-filter": "^1.1.1", - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "array-each": "^1.0.0", - "array-initial": "^1.0.0", - "array-last": "^1.1.1", - "async-done": "^1.2.2", - "async-settle": "^1.0.0", - "now-and-later": "^2.0.0" + "dependencies": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + }, + "engines": { + "node": ">=6.0" } }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "node_modules/@testing-library/jest-dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "node_modules/@testing-library/jest-dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "safe-buffer": "5.1.2" + "engines": { + "node": ">=8" } }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true + "node_modules/@testing-library/jest-dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "node_modules/@testing-library/react": { + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-12.1.2.tgz", + "integrity": "sha512-ihQiEOklNyHIpo2Y8FREkyD1QAea054U0MVbwH1m8N9TxeFz+KoJ9LkqoKqJlzx2JDm56DVwaJ1r36JYxZM05g==", "dev": true, - "requires": { - "tweetnacl": "^0.14.3" + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" } }, - "big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", - "dev": true + "node_modules/@testing-library/user-event": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", + "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "node_modules/@types/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", "dev": true }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/@types/babel__core": { + "version": "7.1.16", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", + "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", - "dev": true + "node_modules/@types/babel__generator": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", + "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - } + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "node_modules/@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", "dev": true, - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" + "dependencies": { + "@babel/types": "^7.3.0" } }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "node_modules/@types/big.js": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@types/big.js/-/big.js-6.1.2.tgz", + "integrity": "sha512-h24JIZ52rvSvi2jkpYDk2yLH99VzZoCJiSfDWwjst7TwJVuXN61XVCUlPCzRl7mxKEMsGf8z42Q+J4TZwU3z2w==", "dev": true }, - "bplist-creator": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.8.tgz", - "integrity": "sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==", + "node_modules/@types/cacheable-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", "dev": true, - "requires": { - "stream-buffers": "~2.2.0" - }, "dependencies": { - "stream-buffers": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", - "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=", - "dev": true - } + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" } }, - "bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "node_modules/@types/cheerio": { + "version": "0.22.30", + "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.30.tgz", + "integrity": "sha512-t7ZVArWZlq3dFa9Yt33qFBQIK4CQd1Q3UJp0V+UhP6vgLWLM6Qug7vZuRSGXg45zXeB1Fm5X2vmBkEX58LV2Tw==", "dev": true, - "requires": { - "big-integer": "^1.6.44" + "dependencies": { + "@types/node": "*" } }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } + "node_modules/@types/d3": { + "version": "3.5.46", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-3.5.46.tgz", + "integrity": "sha512-jNHfiGd41+JUV43LTMzQNidyp4Hn0XfhoSmy8baE0d/N5pGYpD+yX03JacY/MH+smFxYOQGXlz4HxkRZOuRNOQ==" }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, + "node_modules/@types/d3-cloud": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/d3-cloud/-/d3-cloud-1.2.5.tgz", + "integrity": "sha512-vEIER9DsEBUOdpRiwCh3n1qE+cV6h4e1LhxhY2sLt+m8LPNAIkOOhTlqk0JDiBwD+ZPM8ynFAOU3AuPuVYBFBA==", "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "@types/d3": "^3" } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "node_modules/@types/diff": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/diff/-/diff-5.0.1.tgz", + "integrity": "sha512-XIpxU6Qdvp1ZE6Kr3yrkv1qgUab0fyf4mHYvW8N3Bx3PCsbN6or1q9/q72cv5jIFWolaGH08U9XyYoLLIykyKQ==", "dev": true }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "node_modules/@types/easy-table": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/easy-table/-/easy-table-0.0.33.tgz", + "integrity": "sha512-/vvqcJPmZUfQwCgemL0/34G7bIQnCuvgls379ygRlcC1FqNqk3n+VZ15dAO51yl6JNDoWd8vsk+kT8zfZ1VZSw==", "dev": true }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "node_modules/@types/ejs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.0.tgz", + "integrity": "sha512-DCg+Ka+uDQ31lJ/UtEXVlaeV3d6t81gifaVWKJy4MYVVgvJttyX/viREy+If7fz+tK/gVxTGMtyrFPnm4gjrVA==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@types/fibers": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/fibers/-/fibers-3.1.1.tgz", + "integrity": "sha512-yHoUi46uika0snoTpNcVqUSvgbRndaIps4TUCotrXjtc0DHDoPQckmyXEZ2bX3e4mpJmyEW3hRhCwQa/ISCPaA==", + "dev": true + }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "dependencies": { + "@types/node": "*" } }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "dependencies": { + "@types/node": "*" } }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "node_modules/@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, + "node_modules/@types/inquirer": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-8.1.3.tgz", + "integrity": "sha512-AayK4ZL5ssPzR1OtnOLGAwpT0Dda3Xi/h1G0l1oJDNrowp7T1423q4Zb8/emr7tzRlCy4ssEri0LWVexAqHyKQ==", "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "dependencies": { + "@types/through": "*", + "rxjs": "^7.2.0" } }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "node_modules/@types/inquirer/node_modules/rxjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", + "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", "dev": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" + "dependencies": { + "tslib": "~2.1.0" } }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "node_modules/@types/inquirer/node_modules/tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "dev": true + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } + "@types/istanbul-lib-coverage": "*" } }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", "dev": true, - "requires": { - "pako": "~1.0.5" + "dependencies": { + "@types/istanbul-lib-report": "*" } }, - "browserslist": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", - "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", + "node_modules/@types/jasmine": { + "version": "3.6.9", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.6.9.tgz", + "integrity": "sha512-B53NIwMj/AO0O+xfSWLYmKB0Mo6TYxfv2Mk8/c1T2w/e38t55iaPR6p7pHXTTtqfTmevPK3i8T1YweYFTZlxDw==", + "dev": true + }, + "node_modules/@types/jest": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.2.tgz", + "integrity": "sha512-4dRxkS/AFX0c5XW6IPMNOydLn2tEhNhJV7DnYK+0bjoJZ+QTmfucBlihX7aoEsh/ocYtkLC73UbnBXBXIxsULA==", "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001181", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.649", - "escalade": "^3.1.1", - "node-releases": "^1.1.70" + "dependencies": { + "jest-diff": "^27.0.0", + "pretty-format": "^27.0.0" } }, - "bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "node_modules/@types/jest/node_modules/@jest/types": { + "version": "27.2.5", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.5.tgz", + "integrity": "sha512-nmuM4VuDtCZcY+eTpw+0nvstwReMsjPoj7ZR80/BbixulhLaiX+fbv8oeLW8WZlJMcsGQsTmMKT/iTZu1Uy/lQ==", "dev": true, - "requires": { - "fast-json-stable-stringify": "2.x" + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "node_modules/@types/jest/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", "dev": true, - "requires": { - "node-int64": "^0.4.0" + "dependencies": { + "@types/yargs-parser": "*" } }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "node_modules/@types/jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true + "node_modules/@types/jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } }, - "buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", - "dev": true + "node_modules/@types/jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "node_modules/@types/jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true + "node_modules/@types/jest/node_modules/diff-sequences": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", + "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true + "node_modules/@types/jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true + "node_modules/@types/jest/node_modules/jest-diff": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.3.1.tgz", + "integrity": "sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.0.6", + "jest-get-type": "^27.3.1", + "pretty-format": "^27.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true + "node_modules/@types/jest/node_modules/jest-get-type": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.3.1.tgz", + "integrity": "sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } }, - "cac": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/cac/-/cac-3.0.4.tgz", - "integrity": "sha1-bSTO7Dcu/lybeYgIvH9JtHJCpO8=", + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.3.1.tgz", + "integrity": "sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==", "dev": true, - "requires": { - "camelcase-keys": "^3.0.0", - "chalk": "^1.1.3", - "indent-string": "^3.0.0", - "minimist": "^1.2.0", - "read-pkg-up": "^1.0.1", - "suffix": "^0.1.0", - "text-table": "^0.2.0" - }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "@jest/types": "^27.2.5", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "cacache": { - "version": "15.0.6", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.6.tgz", - "integrity": "sha512-g1WYDMct/jzW+JdWEyjaX2zoBkZ6ZT9VpOyp2I/VMtDsNLffNat3kqPFfi1eDRSK9/SuKGyORDHcQMcPF8sQ/w==", + "node_modules/@types/jest/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "requires": { - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "node_modules/@types/jest/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/@types/jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "node_modules/@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, - "cacheable-request": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", - "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", + "node_modules/@types/keyv": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", + "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^2.0.0" + "dependencies": { + "@types/node": "*" } }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "node_modules/@types/lodash": { + "version": "4.14.175", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.175.tgz", + "integrity": "sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw==", + "dev": true + }, + "node_modules/@types/lodash.flattendeep": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@types/lodash.flattendeep/-/lodash.flattendeep-4.4.6.tgz", + "integrity": "sha512-uLm2MaRVlqJSGsMK0RZpP5T3KqReq+9WbYDHCUhBhp98v56hMG/Yht52bsoTSui9xz2mUvQ9NfG3LrNGDL92Ng==", + "dev": true, + "dependencies": { + "@types/lodash": "*" } }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "node_modules/@types/lodash.pickby": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/@types/lodash.pickby/-/lodash.pickby-4.6.6.tgz", + "integrity": "sha512-NFa13XxlMd9eFi0UFZFWIztpMpXhozbijrx3Yb1viYZphT7jyopIFVoIRF4eYMjruWNEG1rnyrRmg/8ej9T8Iw==", "dev": true, - "requires": { - "callsites": "^2.0.0" - }, "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - } + "@types/lodash": "*" } }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "node_modules/@types/lodash.union": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/@types/lodash.union/-/lodash.union-4.6.6.tgz", + "integrity": "sha512-Wu0ZEVNcyCz8eAn6TlUbYWZoGbH9E+iOHxAZbwUoCEXdUiy6qpcz5o44mMXViM4vlPLLCPlkAubEP1gokoSZaw==", "dev": true, - "requires": { - "caller-callsite": "^2.0.0" + "dependencies": { + "@types/lodash": "*" } }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/@types/node": { + "version": "16.10.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.9.tgz", + "integrity": "sha512-H9ReOt+yqIJPCutkTYjFjlyK6WEMQYT9hLZMlWtOjFQY2ItppsWZ6RJf8Aw+jz5qTYceuHvFgPIaKOHtLAEWBw==", "dev": true }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, - "camelcase-keys": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-3.0.0.tgz", - "integrity": "sha1-/AxsNgNj9zd+N5O5oWvM8QcMHKQ=", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - } - } + "node_modules/@types/object-inspect": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@types/object-inspect/-/object-inspect-1.8.1.tgz", + "integrity": "sha512-0JTdf3CGV0oWzE6Wa40Ayv2e2GhpP3pEJMcrlM74vBSJPuuNkVwfDnl0SZxyFCXETcB4oKA/MpTVfuYSMOelBg==", + "dev": true }, - "caniuse-lite": { - "version": "1.0.30001204", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001204.tgz", - "integrity": "sha512-JUdjWpcxfJ9IPamy2f5JaRDCaqJOxDzOSKtbdx4rH9VivMd1vIzoPumsJa9LoMIi4Fx2BV2KZOxWhNkBjaYivQ==", + "node_modules/@types/prettier": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", "dev": true }, - "capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "node_modules/@types/prop-types": { + "version": "15.7.4", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", + "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==", + "dev": true + }, + "node_modules/@types/puppeteer": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-5.4.4.tgz", + "integrity": "sha512-3Nau+qi69CN55VwZb0ATtdUAlYlqOOQ3OfQfq0Hqgc4JMFXiQT/XInlwQ9g6LbicDslE6loIFsXFklGh5XmI6Q==", "dev": true, - "requires": { - "rsvp": "^4.8.4" + "dependencies": { + "@types/node": "*" } }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true + "node_modules/@types/react": { + "version": "17.0.30", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.30.tgz", + "integrity": "sha512-3Dt/A8gd3TCXi2aRe84y7cK1K8G+N9CZRDG8kDGguOKa0kf/ZkSwTmVIDPsm/KbQOVMaDJXwhBtuOXxqwdpWVg==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/@types/react-native": { + "version": "0.64.16", + "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.64.16.tgz", + "integrity": "sha512-5XMYf+QfYICgvDtLI5xBxNHcApuIOhfKqLiLWeBVusgLYCIVSzlaCWUgbSsn39IXsVDPMFJQ1g/AIFWwg6PxBA==", "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "dependencies": { + "@types/react": "*" } }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "cheerio": { - "version": "1.0.0-rc.5", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.5.tgz", - "integrity": "sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw==", + "node_modules/@types/recursive-readdir": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/recursive-readdir/-/recursive-readdir-2.2.0.tgz", + "integrity": "sha512-HGk753KRu2N4mWduovY4BLjYq4jTOL29gV2OfGdGxHcPSWGFkC5RRIdk+VTs5XmYd7MVAD+JwKrcb5+5Y7FOCg==", "dev": true, - "requires": { - "cheerio-select-tmp": "^0.1.0", - "dom-serializer": "~1.2.0", - "domhandler": "^4.0.0", - "entities": "~2.1.0", - "htmlparser2": "^6.0.0", - "parse5": "^6.0.0", - "parse5-htmlparser2-tree-adapter": "^6.0.0" + "dependencies": { + "@types/node": "*" } }, - "cheerio-select-tmp": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz", - "integrity": "sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ==", + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", "dev": true, - "requires": { - "css-select": "^3.1.2", - "css-what": "^4.0.0", - "domelementtype": "^2.1.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.4" + "dependencies": { + "@types/node": "*" } }, - "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "node_modules/@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - }, "dependencies": { - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } + "@types/node": "*" } }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", "dev": true }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "node_modules/@types/selenium-standalone": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@types/selenium-standalone/-/selenium-standalone-7.0.1.tgz", + "integrity": "sha512-zbKenL0fAXzPyiOaaFMrvFdMNhj5BgNJQq8bxiZfwQD9ID2J8bUG5xbcS3tQtlzIX/62z9nG5Vo45oaHWTbvbw==", "dev": true, - "requires": { - "tslib": "^1.9.0" + "dependencies": { + "@types/node": "*" } }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "node_modules/@types/stream-buffers": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/stream-buffers/-/stream-buffers-3.0.4.tgz", + "integrity": "sha512-qU/K1tb2yUdhXkLIATzsIPwbtX6BpZk0l3dPW6xqWyhfzzM1ECaQ/8faEnu3CNraLiQ9LHyQQPBGp7N9Fbs25w==", "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "dependencies": { + "@types/node": "*" } }, - "cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", + "node_modules/@types/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-dPWnWsf+kzIG140B8z2w3fr5D03TLWbOAFQl45xUpI3vcizeXriNR5VYkWZ+WTMsUHqZ9Xlt3hrxGNANFyNQfw==", "dev": true }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "node_modules/@types/testing-library__jest-dom": { + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.1.tgz", + "integrity": "sha512-Gk9vaXfbzc5zCXI9eYE9BI5BNHEp4D3FWjgqBE/ePGYElLAP+KvxBcsdkwfIVvezs605oiyd/VrpiHe3Oeg+Aw==", "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "@types/jest": "*" } }, - "classnames": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", - "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" + "node_modules/@types/through": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz", + "integrity": "sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "node_modules/@types/which": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/which/-/which-1.3.2.tgz", + "integrity": "sha512-8oDqyLC7eD4HM307boe2QWKyuzdzWBj56xI/imSl2cpL+U3tCMaTAkMJ4ee5JBZ/FsOJlvRGeIShiZDAl1qERA==", "dev": true }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "node_modules/@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", "dev": true, - "requires": { - "restore-cursor": "^3.1.0" + "dependencies": { + "@types/yargs-parser": "*" } }, - "cli-spinners": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", - "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==", + "node_modules/@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", "dev": true }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true + "node_modules/@types/yauzl": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", + "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", + "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^4.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true } } }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "node_modules/@typescript-eslint/experimental-utils": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", + "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", "dev": true, - "requires": { - "mimic-response": "^1.0.0" + "dependencies": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" } }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "node_modules/@typescript-eslint/parser": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", + "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", "dev": true, - "requires": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" + "dependencies": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "collection-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", - "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", + "node_modules/@typescript-eslint/scope-manager": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", + "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", "dev": true, - "requires": { - "arr-map": "^2.0.2", - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "node_modules/@typescript-eslint/types": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", "dev": true, - "requires": { - "color-name": "1.1.3" + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "node_modules/@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } }, - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true + "node_modules/@wdio/cli": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-7.14.1.tgz", + "integrity": "sha512-ydFsNlimP9W77NXRAYCn8xVtnS7/08UcaQT0iH0iCaaw+h9JJH4IIFhzIcPojG78g1ojEfBsQOqvD54elJpwzw==", + "dev": true, + "dependencies": { + "@types/ejs": "^3.0.5", + "@types/fs-extra": "^9.0.4", + "@types/inquirer": "^8.1.2", + "@types/lodash.flattendeep": "^4.4.6", + "@types/lodash.pickby": "^4.6.6", + "@types/lodash.union": "^4.6.6", + "@types/node": "^15.12.5", + "@types/recursive-readdir": "^2.2.0", + "@wdio/config": "7.14.1", + "@wdio/logger": "7.7.0", + "@wdio/types": "7.14.1", + "@wdio/utils": "7.14.1", + "async-exit-hook": "^2.0.1", + "chalk": "^4.0.0", + "chokidar": "^3.0.0", + "cli-spinners": "^2.1.0", + "ejs": "^3.0.1", + "fs-extra": "^10.0.0", + "inquirer": "8.1.5", + "lodash.flattendeep": "^4.4.0", + "lodash.pickby": "^4.6.0", + "lodash.union": "^4.6.0", + "mkdirp": "^1.0.4", + "recursive-readdir": "^2.2.2", + "webdriverio": "7.14.1", + "yargs": "^17.0.0", + "yarn-install": "^1.0.0" + }, + "bin": { + "wdio": "bin/wdio.js" + }, + "engines": { + "node": ">=12.0.0" + } }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "node_modules/@wdio/cli/node_modules/@types/node": { + "version": "15.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz", + "integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==", "dev": true }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/@wdio/cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "delayed-stream": "~1.0.0" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true + "node_modules/@wdio/cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "node_modules/@wdio/cli/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/@wdio/cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@wdio/cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "node_modules/@wdio/cli/node_modules/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@wdio/cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wdio/cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wdio/cli/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@wdio/cli/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@wdio/cli/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@wdio/cli/node_modules/yargs": { + "version": "17.2.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz", + "integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@wdio/cli/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@wdio/config": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-7.14.1.tgz", + "integrity": "sha512-Moa5ea/0so50OX+xm4sX9ty9vbVcIowSnm/SINayzg+waAAVbjHi10hZke8TaTsQ/kmZGeJv6Qjq8PTOZeaNCw==", + "dev": true, + "dependencies": { + "@wdio/logger": "7.7.0", + "@wdio/types": "7.14.1", + "deepmerge": "^4.0.0", + "glob": "^7.1.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@wdio/jasmine-framework": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@wdio/jasmine-framework/-/jasmine-framework-7.14.1.tgz", + "integrity": "sha512-+IgAhy+aznd3uaLSVs3axG12ondeU80blBvVwk8eVJyK6VhOrAp9T7F9zMgYUyskFuzR7B3upaEVbiKlEUAn3A==", + "dev": true, + "dependencies": { + "@types/jasmine": "3.6.9", + "@types/node": "^15.12.5", + "@wdio/logger": "7.7.0", + "@wdio/types": "7.14.1", + "@wdio/utils": "7.14.1", + "expect-webdriverio": "^3.0.0", + "jasmine": "3.9.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@wdio/cli": "^7.0.0" + } + }, + "node_modules/@wdio/jasmine-framework/node_modules/@types/node": { + "version": "15.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz", + "integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==", "dev": true }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "node_modules/@wdio/jasmine-framework/node_modules/jasmine": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.9.0.tgz", + "integrity": "sha512-JgtzteG7xnqZZ51fg7N2/wiQmXon09szkALcRMTgCMX4u/m17gVJFjObnvw5FXkZOWuweHPaPRVB6DI2uN0wVA==", + "dev": true, + "dependencies": { + "glob": "^7.1.6", + "jasmine-core": "~3.9.0" + }, + "bin": { + "jasmine": "bin/jasmine.js" + } + }, + "node_modules/@wdio/jasmine-framework/node_modules/jasmine-core": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.9.0.tgz", + "integrity": "sha512-Tv3kVbPCGVrjsnHBZ38NsPU3sDOtNa0XmbG2baiyJqdb5/SPpDO6GVwJYtUryl6KB4q1Ssckwg612ES9Z0dreQ==", "dev": true }, - "compress-commons": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz", - "integrity": "sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==", + "node_modules/@wdio/local-runner": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-7.14.1.tgz", + "integrity": "sha512-q/BXKN5hld1MpcABGTkurVKuNWy5GJNJvMamt0Fi5SLFDrTtndxaKFw9aciJiDqkJGCREVjYOOdMnsY+UmMKdg==", "dev": true, - "requires": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^3.0.1", - "normalize-path": "^3.0.0", - "readable-stream": "^2.3.6" + "dependencies": { + "@types/stream-buffers": "^3.0.3", + "@wdio/logger": "7.7.0", + "@wdio/repl": "7.14.1", + "@wdio/runner": "7.14.1", + "@wdio/types": "7.14.1", + "async-exit-hook": "^2.0.1", + "split2": "^3.2.2", + "stream-buffers": "^3.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@wdio/cli": "^7.0.0" } }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "node_modules/@wdio/logger": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-7.7.0.tgz", + "integrity": "sha512-XX/OkC8NlvsBdhKsb9j7ZbuQtF/Vuo0xf38PXdqYtVezOrYbDuba0hPG++g/IGNuAF34ZbSi+49cvz4u5w92kQ==", "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" + "dependencies": { + "chalk": "^4.0.0", + "loglevel": "^1.6.0", + "loglevel-plugin-prefix": "^0.8.4", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=12.0.0" } }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "node_modules/@wdio/logger/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "node_modules/@wdio/logger/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@wdio/logger/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@wdio/logger/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "node_modules/@wdio/logger/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "engines": { + "node": ">=8" } }, - "concurrently": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.3.0.tgz", - "integrity": "sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==", + "node_modules/@wdio/logger/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "chalk": "^2.4.2", - "date-fns": "^2.0.1", - "lodash": "^4.17.15", - "read-pkg": "^4.0.1", - "rxjs": "^6.5.2", - "spawn-command": "^0.0.2-1", - "supports-color": "^6.1.0", - "tree-kill": "^1.2.2", - "yargs": "^13.3.0" + "dependencies": { + "has-flag": "^4.0.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@wdio/protocols": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-7.13.2.tgz", + "integrity": "sha512-GUbYbV2IjPlPhlz457nMD6C0GA9yPfVtZQAwgqaKXf9yR2cuNGHHkidWivfXJNG3zws2uFm/9I1+K9OaYIKVkQ==", + "dev": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@wdio/repl": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-7.14.1.tgz", + "integrity": "sha512-nD1RVihoEZaQ71eMyiPWMVUct40Wf8cp9Q6PZVn4MlIatRqB+X26C98qw6Bcjzfz72nEcmfkbN3tZpf9pY4saw==", + "dev": true, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", - "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", - "dev": true, - "requires": { - "normalize-package-data": "^2.3.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0" - } - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } + "@wdio/utils": "7.14.1" + }, + "engines": { + "node": ">=12.0.0" } }, - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "node_modules/@wdio/reporter": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-7.14.1.tgz", + "integrity": "sha512-x/rV+aTTYf0Kj4Ti/6Yq/XEiA9k3StM6EnkMhaA3S/J6TeuQ8ZHZf6T4Lu/Izafg8F25ky0yH98HxZi2b2Fw1g==", "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" + "dependencies": { + "@types/diff": "^5.0.0", + "@types/node": "^15.12.5", + "@types/object-inspect": "^1.8.0", + "@types/supports-color": "^8.1.0", + "@wdio/types": "7.14.1", + "diff": "^5.0.0", + "fs-extra": "^10.0.0", + "object-inspect": "^1.10.3", + "supports-color": "8.1.1" + }, + "engines": { + "node": ">=12.0.0" } }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "node_modules/@wdio/reporter/node_modules/@types/node": { + "version": "15.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz", + "integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==", "dev": true }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true + "node_modules/@wdio/reporter/node_modules/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true + "node_modules/@wdio/reporter/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "node_modules/@wdio/reporter/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "requires": { - "safe-buffer": "5.1.2" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true + "node_modules/@wdio/reporter/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "node_modules/@wdio/runner": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-7.14.1.tgz", + "integrity": "sha512-wMnv4yQX24/kcINUPq+OcGWAlCL5NldMi45zzt2iOuCeMNEv/Scchahr0gNZ1Mc0zubyCGDzrERYsYHmYAK3Dw==", "dev": true, - "requires": { - "safe-buffer": "~5.1.1" + "dependencies": { + "@wdio/config": "7.14.1", + "@wdio/logger": "7.7.0", + "@wdio/types": "7.14.1", + "@wdio/utils": "7.14.1", + "deepmerge": "^4.0.0", + "gaze": "^1.1.2", + "webdriver": "7.14.1", + "webdriverio": "7.14.1" + }, + "engines": { + "node": ">=12.0.0" } }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true + "node_modules/@wdio/selenium-standalone-service": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@wdio/selenium-standalone-service/-/selenium-standalone-service-7.14.1.tgz", + "integrity": "sha512-jciVimPFTopX/bnkU+8xPJGKFfOsqByLvXgTwJwc8jxHmK6MfkIHH8BO2Mij6FhycHvg17dH4panASDk6m10TA==", + "dev": true, + "dependencies": { + "@types/fs-extra": "^9.0.1", + "@types/node": "^15.12.5", + "@types/selenium-standalone": "^7.0.0", + "@wdio/config": "7.14.1", + "@wdio/logger": "7.7.0", + "@wdio/types": "7.14.1", + "fs-extra": "^10.0.0", + "selenium-standalone": "^7.0.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@wdio/cli": "^7.0.0" + } }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "node_modules/@wdio/selenium-standalone-service/node_modules/@types/node": { + "version": "15.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz", + "integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==", "dev": true }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "node_modules/@wdio/selenium-standalone-service/node_modules/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - }, "dependencies": { - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" } }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true + "node_modules/@wdio/selenium-standalone-service/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } }, - "copy-props": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", - "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", + "node_modules/@wdio/spec-reporter": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-7.14.1.tgz", + "integrity": "sha512-vViWdv2ExsgyN04QZ0w+Kj1Qi03/WR2kriOJCrGmCVZFXpZKFFOscf6irLeGL6zMRy6k86mf+AwFxV6PZB9K/w==", "dev": true, - "requires": { - "each-props": "^1.3.2", - "is-plain-object": "^5.0.0" + "dependencies": { + "@types/easy-table": "^0.0.33", + "@wdio/reporter": "7.14.1", + "@wdio/types": "7.14.1", + "chalk": "^4.0.0", + "easy-table": "^1.1.1", + "pretty-ms": "^7.0.0" }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@wdio/cli": "^7.0.0" + } + }, + "node_modules/@wdio/spec-reporter/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "copy-webpack-plugin": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.4.1.tgz", - "integrity": "sha512-MXyPCjdPVx5iiWyl40Va3JGh27bKzOTNY3NjUTrosD2q7dR/cLD0013uqJ3BpFbUjyONINjb6qI7nDIJujrMbA==", + "node_modules/@wdio/spec-reporter/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "requires": { - "cacache": "^15.0.5", - "fast-glob": "^3.2.4", - "find-cache-dir": "^3.3.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.1", - "loader-utils": "^2.0.0", - "normalize-path": "^3.0.0", - "p-limit": "^3.0.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "webpack-sources": "^1.4.3" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@wdio/spec-reporter/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "core-js": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.9.1.tgz", - "integrity": "sha512-gSjRvzkxQc1zjM/5paAmL4idJBFzuJoo+jDjF1tStYFMV2ERfD02HhahhCGXUyHxQRG4yFKVSdO6g62eoRMcDg==", + "node_modules/@wdio/spec-reporter/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "core-js-compat": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.9.1.tgz", - "integrity": "sha512-jXAirMQxrkbiiLsCx9bQPJFA6llDadKMpYrBJQJ3/c4/vsPP/fAf29h24tviRlvwUL6AmY5CHLu2GvjuYviQqA==", + "node_modules/@wdio/spec-reporter/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "browserslist": "^4.16.3", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } + "engines": { + "node": ">=8" } }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "node_modules/@wdio/spec-reporter/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, "dependencies": { - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "node_modules/@wdio/sync": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@wdio/sync/-/sync-7.14.1.tgz", + "integrity": "sha512-lFRgV5G9X7UqrLAVbEielbYnKiHFcaQ66Xl+Ek+EqvTLL1HfII5kt0AkjfwMcybCbDqCYaI4unzjvfYkfvyvig==", "dev": true, - "requires": { - "buffer": "^5.1.0" + "dependencies": { + "@types/fibers": "^3.1.0", + "@types/puppeteer": "^5.4.0", + "@wdio/logger": "7.7.0", + "@wdio/types": "7.14.1", + "fibers": "^5.0.0", + "webdriverio": "7.14.1" + }, + "engines": { + "node": ">=12.0.0" } }, - "crc32-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz", - "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", + "node_modules/@wdio/types": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.14.1.tgz", + "integrity": "sha512-W1ctBarjFuLz7wub6wNFd3sWfaENf1+thQL2YQW/cgFuTvhyK5hhUPoP2Q1suXBDE+qs90wWwx4z8XwDC6S8OA==", "dev": true, - "requires": { - "crc": "^3.4.4", - "readable-stream": "^3.4.0" - }, "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "@types/node": "^15.12.5", + "got": "^11.8.1" + }, + "engines": { + "node": ">=12.0.0" } }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "node_modules/@wdio/types/node_modules/@types/node": { + "version": "15.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz", + "integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==", + "dev": true + }, + "node_modules/@wdio/utils": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.14.1.tgz", + "integrity": "sha512-2LMjTiCccohUKGaHWpodIz9eF+5HApT4NVFJjWYqGQFAUrLaBrSocie7NW5+moYolY5dESYSNVB6qJlSdMbQlA==", "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } + "@wdio/logger": "7.7.0", + "@wdio/types": "7.14.1", + "p-iteration": "^1.1.8" + }, + "engines": { + "node": ">=12.0.0" } }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" } }, - "create-react-class": { - "version": "15.7.0", - "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz", - "integrity": "sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==", - "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } + "node_modules/absolute-path": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/absolute-path/-/absolute-path-0.0.0.tgz", + "integrity": "sha1-p4di+9rftSl76ZsV01p4Wy8JW/c=", + "dev": true }, - "cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - }, "dependencies": { - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" } }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "css-loader": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", - "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", "dev": true, - "requires": { - "camelcase": "^5.3.1", - "cssesc": "^3.0.0", - "icss-utils": "^4.1.1", - "loader-utils": "^1.2.3", - "normalize-path": "^3.0.0", - "postcss": "^7.0.32", - "postcss-modules-extract-imports": "^2.0.0", - "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.2.0", - "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^2.7.0", - "semver": "^6.3.0" - }, "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" } }, - "css-select": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", - "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^4.0.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.3", - "nth-check": "^2.0.0" + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "css-value": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", - "integrity": "sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo=", - "dev": true - }, - "css-what": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", - "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, - "requires": { - "cssom": "~0.3.6" - }, "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" } }, - "csstype": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.7.tgz", - "integrity": "sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g==", - "dev": true + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "node_modules/anser": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", "dev": true }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "engines": { + "node": ">=6" } }, - "d3-array": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", - "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", - "requires": { - "internmap": "^1.0.0" + "node_modules/ansi-cyan": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", + "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", + "dev": true, + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "d3-cloud": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/d3-cloud/-/d3-cloud-1.2.5.tgz", - "integrity": "sha512-4s2hXZgvs0CoUIw31oBAGrHt9Kt/7P9Ik5HIVzISFiWkD0Ga2VLAuO/emO/z1tYIpE7KG2smB4PhMPfFMJpahw==", - "requires": { - "d3-dispatch": "^1.0.3" + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "d3-collection": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", - "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" - }, - "d3-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz", - "integrity": "sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==" + "node_modules/ansi-fragments": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", + "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", + "dev": true, + "dependencies": { + "colorette": "^1.0.7", + "slice-ansi": "^2.0.0", + "strip-ansi": "^5.0.0" + } }, - "d3-dispatch": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", - "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==" + "node_modules/ansi-fragments/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "d3-ease": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz", - "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==" + "node_modules/ansi-fragments/node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true, + "engines": { + "node": ">=4" + } }, - "d3-format": { + "node_modules/ansi-fragments/node_modules/is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-2.0.0.tgz", - "integrity": "sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA==" + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } }, - "d3-interpolate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-2.0.1.tgz", - "integrity": "sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==", - "requires": { - "d3-color": "1 - 2" + "node_modules/ansi-fragments/node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "d3-scale": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.2.4.tgz", - "integrity": "sha512-PG6gtpbPCFqKbvdBEswQcJcTzHC8VEd/XzezF5e68KlkT4/ggELw/nR1tv863jY6ufKTvDlzCMZvhe06codbbA==", - "requires": { - "d3-array": "^2.3.0", - "d3-format": "1 - 2", - "d3-interpolate": "1.2.0 - 2", - "d3-time": "1 - 2", - "d3-time-format": "2 - 3" + "node_modules/ansi-fragments/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" } }, - "d3-scale-chromatic": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", - "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", - "requires": { - "d3-color": "1", - "d3-interpolate": "1" + "node_modules/ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "dev": true, + "dependencies": { + "ansi-wrap": "0.1.0" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-red": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", + "dev": true, "dependencies": { - "d3-color": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", - "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" - }, - "d3-interpolate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", - "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", - "requires": { - "d3-color": "1" - } - } + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "d3-selection": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", - "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==" + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "d3-time": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.0.0.tgz", - "integrity": "sha512-2mvhstTFcMvwStWd9Tj3e6CEqtOivtD8AUiHT8ido/xmzrI9ijrUUihZ6nHuf/vsScRBonagOdj0Vv+SEL5G3Q==" + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } }, - "d3-time-format": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-3.0.0.tgz", - "integrity": "sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==", - "requires": { - "d3-time": "1 - 2" + "node_modules/ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "d3-timer": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", - "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } }, - "d3-transition": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz", - "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==", - "requires": { - "d3-color": "1", - "d3-dispatch": "1", - "d3-ease": "1", - "d3-interpolate": "1", - "d3-selection": "^1.1.0", - "d3-timer": "1" + "node_modules/archiver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", + "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", + "dev": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.0", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, "dependencies": { - "d3-color": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", - "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" - }, - "d3-interpolate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", - "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", - "requires": { - "d3-color": "1" - } - } + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "requires": { - "assert-plus": "^1.0.0" + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "date-fns": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.19.0.tgz", - "integrity": "sha512-X3bf2iTPgCAQp9wvjOQytnf5vO5rESYRXlPIVcgSbtT5OTScPcsf9eZU+B/YIkKAtYr5WeCii58BgATrNitlWg==", + "node_modules/archiver/node_modules/async": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz", + "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==", "dev": true }, - "dayjs": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.4.tgz", - "integrity": "sha512-RI/Hh4kqRc1UKLOAf/T5zdMMX5DQIlDxwUe3wSyMMnEbGunnpENCdbUgM+dW7kXidZqCttBrmw7BhN4TMddkCw==", + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "requires": { - "ms": "2.0.0" + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "node_modules/aria-query": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", + "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", + "dev": true, + "engines": { + "node": ">=6.0" + } }, - "decimal.js": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", - "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", - "dev": true + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true, - "requires": { - "mimic-response": "^3.1.0" - }, - "dependencies": { - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true - } + "engines": { + "node": ">=0.10.0" } }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" + "engines": { + "node": ">=0.10.0" } }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true + "node_modules/array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "node_modules/array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", "dev": true }, - "default-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", - "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "node_modules/array-includes": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", "dev": true, - "requires": { - "kind-of": "^5.0.2" - }, "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "node_modules/array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "dev": true + }, + "node_modules/array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "dev": true + }, + "node_modules/array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", "dev": true, - "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" + "engines": { + "node": ">=0.10.0" } }, - "default-resolution": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", - "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", - "dev": true + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "defaults": { + "node_modules/array-uniq": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true, - "requires": { - "clone": "^1.0.2" + "engines": { + "node": ">=0.10.0" } }, - "defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "node_modules/array.prototype.filter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.1.tgz", + "integrity": "sha512-Dk3Ty7N42Odk7PjU/Ci3zT4pLj20YvuVnneG/58ICM6bt4Ij5kZaJTVQ9TSaWaIECX2sFyz4KItkVZqHNnciqw==", "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "node_modules/array.prototype.flat": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, "dependencies": { - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "^1.0.1" - } - }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "denodeify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", - "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", - "dev": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true + "node_modules/array.prototype.flatmap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", + "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "des.js": { + "node_modules/arrify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "engines": { + "node": ">=0.10.0" } }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", "dev": true }, - "detect-file": { + "node_modules/assign-symbols": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true, - "optional": true + "engines": { + "node": ">=0.10.0" + } }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "detect-node": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.5.tgz", - "integrity": "sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw==", + "node_modules/async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", "dev": true }, - "didyoumean": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.1.tgz", - "integrity": "sha1-6S7f2tplN9SE1zwBcv0eugxJdv8=", - "dev": true + "node_modules/async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, - "diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } + "engines": { + "node": ">= 4.0.0" } }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true, - "requires": { - "path-type": "^4.0.0" + "bin": { + "atob": "bin/atob.js" }, - "dependencies": { - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - } + "engines": { + "node": ">= 4.5.0" } }, - "discontinuous-range": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=", - "dev": true - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "node_modules/babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", "dev": true, - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "eslint": ">= 4.12.1" } }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "node_modules/babel-jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", + "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", "dev": true, - "requires": { - "buffer-indexof": "^1.0.0" + "dependencies": { + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "esutils": "^2.0.2" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "dom-serializer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz", - "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==", + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "entities": "^2.0.0" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", - "dev": true - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "domelementtype": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", - "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", - "dev": true - }, - "domexception": { + "node_modules/babel-jest/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "domhandler": { + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/babel-jest/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", - "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "domelementtype": "^2.1.0" + "engines": { + "node": ">=8" } }, - "domutils": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.5.0.tgz", - "integrity": "sha512-Ho16rzNMOFk2fPwChGh3D2D9OEHAfG19HgmRR2l+WLSsIstNsAYBzePH412bL0y5T44ejABIVfTHQ8nqi/tBCg==", + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", - "dev": true - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "dependencies": { + "object.assign": "^4.1.0" } }, - "each-props": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", - "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "node_modules/babel-plugin-istanbul": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", + "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", "dev": true, - "requires": { - "is-plain-object": "^2.0.1", - "object.defaults": "^1.1.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^4.0.0", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" } }, - "easy-table": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.1.tgz", - "integrity": "sha512-C9Lvm0WFcn2RgxbMnTbXZenMIWcBtkzMr+dWqq/JsVoGFSVUVlPqeOa5LP5kM0I3zoOazFpckOEb2/0LDFfToQ==", + "node_modules/babel-plugin-jest-hoist": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", + "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", "dev": true, - "requires": { - "ansi-regex": "^3.0.0", - "wcwidth": ">=1.0.1" - }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - } + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": ">= 10.14.2" } }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", + "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.2", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "ejs": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", - "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "requires": { - "jake": "^10.6.1" + "bin": { + "semver": "bin/semver.js" } }, - "electron-to-chromium": { - "version": "1.3.702", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.702.tgz", - "integrity": "sha512-qJVUKFWQnF6wP7MmTngDkmm8/KPzaiTXNFOAg5j7DSa6J7kPou7mTBqC8jpUOxauQWwHR3pn4dMRdV8IE1xdtA==", - "dev": true - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz", + "integrity": "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==", "dev": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.16.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", + "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.2.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "node_modules/babel-plugin-syntax-trailing-function-commas": { + "version": "7.0.0-beta.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", + "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==", "dev": true }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", "dev": true, - "requires": { - "iconv-lite": "^0.6.2" - }, "dependencies": { - "iconv-lite": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", - "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/babel-preset-fbjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz", + "integrity": "sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==", "dev": true, - "requires": { - "once": "^1.4.0" + "dependencies": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-syntax-class-properties": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoped-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-member-expression-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-property-literals": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "node_modules/babel-preset-jest": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", + "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" + "dependencies": { + "babel-plugin-jest-hoist": "^26.6.2", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": ">= 10.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", - "dev": true - }, - "envinfo": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.4.tgz", - "integrity": "sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ==", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "enzyme": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz", - "integrity": "sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==", + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, - "requires": { - "array.prototype.flat": "^1.2.3", - "cheerio": "^1.0.0-rc.3", - "enzyme-shallow-equal": "^1.0.1", - "function.prototype.name": "^1.1.2", - "has": "^1.0.3", - "html-element-map": "^1.2.0", - "is-boolean-object": "^1.0.1", - "is-callable": "^1.1.5", - "is-number-object": "^1.0.4", - "is-regex": "^1.0.5", - "is-string": "^1.0.5", - "is-subset": "^0.1.1", - "lodash.escape": "^4.0.1", - "lodash.isequal": "^4.5.0", - "object-inspect": "^1.7.0", - "object-is": "^1.0.2", - "object.assign": "^4.1.0", - "object.entries": "^1.1.1", - "object.values": "^1.1.1", - "raf": "^3.4.1", - "rst-selector-parser": "^2.2.3", - "string.prototype.trim": "^1.2.1" + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "enzyme-adapter-react-16": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.6.tgz", - "integrity": "sha512-yFlVJCXh8T+mcQo8M6my9sPgeGzj85HSHi6Apgf1Cvq/7EL/J9+1JoJmJsRxZgyTvPMAqOEpRSu/Ii/ZpyOk0g==", - "requires": { - "enzyme-adapter-utils": "^1.14.0", - "enzyme-shallow-equal": "^1.0.4", - "has": "^1.0.3", - "object.assign": "^4.1.2", - "object.values": "^1.1.2", - "prop-types": "^15.7.2", - "react-is": "^16.13.1", - "react-test-renderer": "^16.0.0-0", - "semver": "^5.7.0" - }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "enzyme-adapter-utils": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.0.tgz", - "integrity": "sha512-F/z/7SeLt+reKFcb7597IThpDp0bmzcH1E9Oabqv+o01cID2/YInlqHbFl7HzWBl4h3OdZYedtwNDOmSKkk0bg==", - "requires": { - "airbnb-prop-types": "^2.16.0", - "function.prototype.name": "^1.1.3", - "has": "^1.0.3", - "object.assign": "^4.1.2", - "object.fromentries": "^2.0.3", - "prop-types": "^15.7.2", - "semver": "^5.7.1" - }, + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "enzyme-shallow-equal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.4.tgz", - "integrity": "sha512-MttIwB8kKxypwHvRynuC3ahyNc+cFbR8mjVIltnmzQ0uKGqmsfO4bfBuLxb0beLNPhjblUEYvEbsg+VSygvF1Q==", - "requires": { - "has": "^1.0.3", - "object-is": "^1.1.2" + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "enzyme-to-json": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/enzyme-to-json/-/enzyme-to-json-3.6.1.tgz", - "integrity": "sha512-15tXuONeq5ORoZjV/bUo2gbtZrN2IH+Z6DvL35QmZyKHgbY1ahn6wcnLd9Xv9OjiwbAXiiP8MRZwbZrCv1wYNg==", + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, - "requires": { - "@types/cheerio": "^0.22.22", - "lodash": "^4.17.15", - "react-is": "^16.12.0" + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, - "requires": { - "prr": "~1.0.1" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/big-integer": { + "version": "1.6.50", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.50.tgz", + "integrity": "sha512-+O2uoQWFRo8ysZNo/rjtri2jIwjr3XfeAgRjAUADRqGG+ZITvyn8J1kvXLTaKVr3hhGXk+f23tKfdzmklVM9vQ==", "dev": true, - "requires": { - "is-arrayish": "^0.2.1" + "engines": { + "node": ">=0.6" } }, - "errorhandler": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", - "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true, - "requires": { - "accepts": "~1.3.7", - "escape-html": "~1.0.3" + "engines": { + "node": "*" } }, - "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" } }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" } }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "node_modules/bplist-creator": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.8.tgz", + "integrity": "sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==", "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "dependencies": { + "stream-buffers": "~2.2.0" } }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "node_modules/bplist-creator/node_modules/stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=", "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" + "engines": { + "node": ">= 0.10.0" } }, - "es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" } }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", "dev": true }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "node_modules/browserslist": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.4.tgz", + "integrity": "sha512-Zg7RpbZpIJRW3am9Lyckue7PLytvVxxhJj1CaJVlCWENsGEAOlnlt8X0ZxGRPp7Bt9o8tIRM5SEXy4BCPMJjLQ==", "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } + "caniuse-lite": "^1.0.30001265", + "electron-to-chromium": "^1.3.867", + "escalade": "^3.1.1", + "node-releases": "^2.0.0", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" } }, - "eslint": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", - "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^5.0.0", - "eslint-utils": "^1.4.3", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.1.2", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^7.0.0", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.3", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^6.1.2", - "strip-ansi": "^5.2.0", - "strip-json-comments": "^3.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "dependencies": { + "fast-json-stable-stringify": "2.x" }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true + { + "type": "consulting", + "url": "https://feross.org/support" } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "eslint-config-prettier": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", "dev": true, - "requires": { - "get-stdin": "^6.0.0" + "engines": { + "node": "*" } }, - "eslint-plugin-jest": { - "version": "23.20.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-23.20.0.tgz", - "integrity": "sha512-+6BGQt85OREevBDWCvhqj1yYA4+BFK4XnRZSGJionuEYmcglMZYLNNBBemwzbqUAckURaHdJSBcjHPyrtypZOw==", + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "^2.5.0" + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "eslint-plugin-prettier": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz", - "integrity": "sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ==", + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" + "engines": { + "node": ">= 0.8" } }, - "eslint-plugin-promise": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz", - "integrity": "sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==", - "dev": true - }, - "eslint-plugin-react": { - "version": "7.23.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.1.tgz", - "integrity": "sha512-MvFGhZjI8Z4HusajmSw0ougGrq3Gs4vT/0WgwksZgf5RrLrRa2oYAw56okU4tZJl8+j7IYNuTM+2RnFEuTSdRQ==", + "node_modules/cac": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/cac/-/cac-3.0.4.tgz", + "integrity": "sha1-bSTO7Dcu/lybeYgIvH9JtHJCpO8=", "dev": true, - "requires": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.3", - "object.fromentries": "^2.0.4", - "object.values": "^1.1.3", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "string.prototype.matchall": "^4.0.4" - }, "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - } + "camelcase-keys": "^3.0.0", + "chalk": "^1.1.3", + "indent-string": "^3.0.0", + "minimist": "^1.2.0", + "read-pkg-up": "^1.0.1", + "suffix": "^0.1.0", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=4" } }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/cac/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "engines": { + "node": ">=0.10.0" } }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/cac/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" + "engines": { + "node": ">=0.10.0" } }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - }, - "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "node_modules/cac/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "node_modules/cac/node_modules/indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true, + "engines": { + "node": ">=4" + } }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "node_modules/cac/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, - "requires": { - "estraverse": "^5.1.0" + "dependencies": { + "ansi-regex": "^2.0.0" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cac/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", "dev": true, - "requires": { - "estraverse": "^5.2.0" + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", "dev": true }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true + "node_modules/caller-callsite/node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true, + "engines": { + "node": ">=4" + } }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } }, - "eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", - "dev": true + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "eventsource": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", - "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", + "node_modules/camelcase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-3.0.0.tgz", + "integrity": "sha1-/AxsNgNj9zd+N5O5oWvM8QcMHKQ=", "dev": true, - "requires": { - "original": "^1.0.0" + "dependencies": { + "camelcase": "^3.0.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "node_modules/camelcase-keys/node_modules/camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "engines": { + "node": ">=0.10.0" } }, - "exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", - "dev": true + "node_modules/caniuse-lite": { + "version": "1.0.30001267", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001267.tgz", + "integrity": "sha512-r1mjTzAuJ9W8cPBGbbus8E0SKcUP7gn03R14Wk8FlAlqhH9hroy9nLqmpuXlfKEw/oILW+FGz47ipXV2O7x8lg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "node_modules/capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "dependencies": { + "rsvp": "^4.8.4" }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - } + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "node_modules/cheerio": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" } }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "node_modules/cheerio-select": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", + "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" + "dependencies": { + "css-select": "^4.1.3", + "css-what": "^5.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", + "node_modules/cheerio/node_modules/tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/chrome-launcher": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.14.1.tgz", + "integrity": "sha512-iQ4s61NkIyaozsE2VKg1Vu3YGdD3JGw+fBBrt3FYJi7uflO9TvlTLW4MUq0fq3EKGhzB/QHPd5AsLb14+9++JQ==", "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - } + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "engines": { + "node": ">=12.13.0" } }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "node_modules/chrome-launcher/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "requires": { - "type": "^2.0.0" + "engines": { + "node": ">=10" }, - "dependencies": { - "type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", - "dev": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "node_modules/cjs-module-lexer": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", + "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", + "dev": true + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "external-editor": { + "node_modules/classnames": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", + "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" + }, + "node_modules/cli-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "engines": { + "node": ">=6" }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "extract-text-webpack-plugin": { - "version": "4.0.0-beta.0", - "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-4.0.0-beta.0.tgz", - "integrity": "sha512-Hypkn9jUTnFr0DpekNam53X47tXn3ucY08BQumv7kdGgeVUBLq3DJHJTi6HNxv4jl9W+Skxjz9+RnK0sJyqqjA==", + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, - "requires": { - "async": "^2.4.1", - "loader-utils": "^1.1.0", - "schema-utils": "^0.4.5", - "webpack-sources": "^1.1.0" - }, "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "schema-utils": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" - } - } + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "fast-deep-equal": { + "node_modules/cliui/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", "dev": true }, - "fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } + "color-name": "1.1.3" } }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", "dev": true }, - "fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true, - "requires": { - "reusify": "^1.0.4" + "engines": { + "node": ">=0.1.90" } }, - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, - "requires": { - "bser": "2.1.1" + "engines": { + "node": ">= 10" } }, - "fbjs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-1.0.0.tgz", - "integrity": "sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA==", + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/compress-commons": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", "dev": true, - "requires": { - "core-js": "^2.4.1", - "fbjs-css-vars": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" - }, "dependencies": { - "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "dev": true - } + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" } }, - "fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", - "dev": true + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } }, - "fbjs-scripts": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fbjs-scripts/-/fbjs-scripts-1.2.0.tgz", - "integrity": "sha512-5krZ8T0Bf8uky0abPoCLrfa7Orxd8UH4Qq8hRUF2RZYNMu+FmEOrBc7Ib3YVONmxTXTlLAvyrrdrVmksDb2OqQ==", + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, - "requires": { - "@babel/core": "^7.0.0", - "ansi-colors": "^1.0.1", - "babel-preset-fbjs": "^3.2.0", - "core-js": "^2.4.1", - "cross-spawn": "^5.1.0", - "fancy-log": "^1.3.2", - "object-assign": "^4.0.1", - "plugin-error": "^0.1.2", - "semver": "^5.1.0", - "through2": "^2.0.0" + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "dependencies": { - "arr-diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1", - "array-slice": "^0.2.3" - } - }, - "arr-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", - "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", - "dev": true - }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true - }, - "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "dev": true - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "extend-shallow": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", - "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", - "dev": true, - "requires": { - "kind-of": "^1.1.0" - } - }, - "kind-of": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "plugin-error": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", - "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", - "dev": true, - "requires": { - "ansi-cyan": "^0.1.1", - "ansi-red": "^0.1.1", - "arr-diff": "^1.0.1", - "arr-union": "^2.0.1", - "extend-shallow": "^1.1.2" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } + "ms": "2.0.0" } }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, - "requires": { - "pend": "~1.2.0" + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, - "fibers": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fibers/-/fibers-4.0.3.tgz", - "integrity": "sha512-MW5VrDtTOLpKK7lzw4qD7Z9tXaAhdOmOED5RHzg3+HjUk+ibkjVW0Py2ERtdqgTXaerLkVkBy2AEmJiT6RMyzg==", + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.3" + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "fibers_node_v8": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/fibers_node_v8/-/fibers_node_v8-3.1.5.tgz", - "integrity": "sha512-jcut+gL68TclewWH/9si73yDhFOzu8LhmWg6SZRBw13rk4+7DCtqOMdsBhAyXaWRjI7c1XqcRp4AgebLJnvfCQ==", + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.3" + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true + "node_modules/concurrently": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.3.0.tgz", + "integrity": "sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "date-fns": "^2.0.1", + "lodash": "^4.17.15", + "read-pkg": "^4.0.1", + "rxjs": "^6.5.2", + "spawn-command": "^0.0.2-1", + "supports-color": "^6.1.0", + "tree-kill": "^1.2.2", + "yargs": "^13.3.0" + }, + "bin": { + "concurrently": "bin/concurrently.js" + }, + "engines": { + "node": ">=6.0.0" + } }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "node_modules/concurrently/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" + "engines": { + "node": ">=6" } }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "node_modules/concurrently/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, - "requires": { - "flat-cache": "^2.0.1" + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" } }, - "file-loader": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz", - "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==", + "node_modules/concurrently/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/concurrently/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, - "requires": { - "loader-utils": "^1.2.3", - "schema-utils": "^2.5.0" + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "filelist": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", - "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", + "node_modules/concurrently/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true, - "requires": { - "minimatch": "^3.0.4" + "engines": { + "node": ">=4" } }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "node_modules/concurrently/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "node_modules/concurrently/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "node_modules/concurrently/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, "dependencies": { - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" } }, - "find-free-port": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-free-port/-/find-free-port-2.0.0.tgz", - "integrity": "sha1-SyLl9leesaOMQaxryz7+0bbamxs=", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/concurrently/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "engines": { + "node": ">=4" } }, - "findup-sync": { + "node_modules/concurrently/node_modules/pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" + "engines": { + "node": ">=4" } }, - "fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "node_modules/concurrently/node_modules/read-pkg": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" + "dependencies": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true - }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "node_modules/concurrently/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concurrently/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, "dependencies": { - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" } }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true + "node_modules/concurrently/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "node_modules/concurrently/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" } }, - "follow-redirects": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", - "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==", - "dev": true + "node_modules/concurrently/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "requires": { - "for-in": "^1.0.1" + "dependencies": { + "ms": "2.0.0" } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "dependencies": { + "safe-buffer": "~5.1.1" } }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "node_modules/core-js": { + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.18.3.tgz", + "integrity": "sha512-tReEhtMReZaPFVw7dajMx0vlsz3oOb8ajgPoHVYGxr8ErnZ6PcYEvvmjGmXlfpnxpkYSdOQttjB+MvVbCGfvLw==", "dev": true, - "requires": { - "map-cache": "^0.2.2" + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true + "node_modules/core-js-compat": { + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.18.3.tgz", + "integrity": "sha512-4zP6/y0a2RTHN5bRGT7PTq9lVt3WzvffTNjqnTKsXhkAYNDTkdCLOIfAdOLcQ/7TDdyRj3c+NeHe1NmF1eDScw==", + "dev": true, + "dependencies": { + "browserslist": "^4.17.3", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" + "bin": { + "semver": "bin/semver.js" } }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "node_modules/core-js-pure": { + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.3.tgz", + "integrity": "sha512-qfskyO/KjtbYn09bn1IPkuhHl5PlJ6IzJ9s9sraJ1EqcuGyLGKzhSM1cY0zgyL9hx42eulQLZ6WaeK5ycJCkqw==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" } }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "node_modules/cosmiconfig/node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "dev": true, - "requires": { - "minipass": "^3.0.0" + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "node_modules/cosmiconfig/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" } }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true + "node_modules/cosmiconfig/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true, + "engines": { + "node": ">=4" + } }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "node_modules/crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" + "dependencies": { + "buffer": "^5.1.0" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "node_modules/crc-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "dev": true, + "dependencies": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + }, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "node_modules/crc32-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", "dev": true, - "optional": true + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } }, - "function-bind": { + "node_modules/create-react-class": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz", + "integrity": "sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==", + "dependencies": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + }, + "node_modules/create-require": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true }, - "function.prototype.name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.4.tgz", - "integrity": "sha512-iqy1pIotY/RmhdFZygSSlW0wko2yxkSCKqsuv4pr8QESohpYyG/Z7B/XXvPRKTJS//960rgguE5mSRUsDdaJrQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "functions-have-names": "^1.2.2" + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } }, - "functions-have-names": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.2.tgz", - "integrity": "sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA==" + "node_modules/css": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + } }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "node_modules/css-select": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", "dev": true, - "requires": { - "globule": "^1.0.0" + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "node_modules/css-shorthand-properties": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/css-shorthand-properties/-/css-shorthand-properties-1.1.1.tgz", + "integrity": "sha512-Md+Juc7M3uOdbAFwOYlTrccIZ7oCFuzrhKYQjdeUEW/sE1hv17Jp/Bws+ReOPpGVBTYCBoYo+G17V5Qo8QQ75A==", "dev": true }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/css-value": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", + "integrity": "sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo=", "dev": true }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "node_modules/css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=", "dev": true }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true + "node_modules/css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/css/node_modules/source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", "dev": true, - "requires": { - "pump": "^3.0.0" + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", "dev": true }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, - "requires": { - "assert-plus": "^1.0.0" + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" } }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/csstype": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz", + "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==", + "dev": true + }, + "node_modules/cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=", + "dev": true + }, + "node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "dependencies": { + "internmap": "^1.0.0" } }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, + "node_modules/d3-cloud": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/d3-cloud/-/d3-cloud-1.2.5.tgz", + "integrity": "sha512-4s2hXZgvs0CoUIw31oBAGrHt9Kt/7P9Ik5HIVzISFiWkD0Ga2VLAuO/emO/z1tYIpE7KG2smB4PhMPfFMJpahw==", "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } + "d3-dispatch": "^1.0.3" } }, - "glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", - "dev": true, - "requires": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" + "node_modules/d3-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz", + "integrity": "sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==" + }, + "node_modules/d3-dispatch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", + "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==" + }, + "node_modules/d3-ease": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz", + "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==" + }, + "node_modules/d3-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-2.0.0.tgz", + "integrity": "sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA==" + }, + "node_modules/d3-interpolate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-2.0.1.tgz", + "integrity": "sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==", + "dependencies": { + "d3-color": "1 - 2" } }, - "glob-watcher": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", - "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "normalize-path": "^3.0.0", - "object.defaults": "^1.1.0" - }, + "node_modules/d3-scale": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.2.4.tgz", + "integrity": "sha512-PG6gtpbPCFqKbvdBEswQcJcTzHC8VEd/XzezF5e68KlkT4/ggELw/nR1tv863jY6ufKTvDlzCMZvhe06codbbA==", "dependencies": { - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true - } + "d3-array": "^2.3.0", + "d3-format": "1 - 2", + "d3-interpolate": "1.2.0 - 2", + "d3-time": "1 - 2", + "d3-time-format": "2 - 3" } }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dev": true, - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" + "node_modules/d3-scale-chromatic": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", + "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", + "dependencies": { + "d3-color": "1", + "d3-interpolate": "1" } }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "node_modules/d3-scale-chromatic/node_modules/d3-color": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", + "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" + }, + "node_modules/d3-scale-chromatic/node_modules/d3-interpolate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", + "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", + "dependencies": { + "d3-color": "1" + } + }, + "node_modules/d3-selection": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", + "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==" + }, + "node_modules/d3-time": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.0.0.tgz", + "integrity": "sha512-2mvhstTFcMvwStWd9Tj3e6CEqtOivtD8AUiHT8ido/xmzrI9ijrUUihZ6nHuf/vsScRBonagOdj0Vv+SEL5G3Q==" + }, + "node_modules/d3-time-format": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-3.0.0.tgz", + "integrity": "sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==", + "dependencies": { + "d3-time": "1 - 2" + } + }, + "node_modules/d3-timer": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" + }, + "node_modules/d3-transition": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz", + "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==", + "dependencies": { + "d3-color": "1", + "d3-dispatch": "1", + "d3-ease": "1", + "d3-interpolate": "1", + "d3-selection": "^1.1.0", + "d3-timer": "1" + } + }, + "node_modules/d3-transition/node_modules/d3-color": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", + "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" + }, + "node_modules/d3-transition/node_modules/d3-interpolate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", + "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", + "dependencies": { + "d3-color": "1" + } + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" } }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "node_modules/date-fns": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.25.0.tgz", + "integrity": "sha512-ovYRFnTrbGPD4nqaEqescPEv1mNwvt+UTqI3Ay9SzNtey9NZnYu6E2qCcBBgJ6/2VF1zGGygpyTDITqpQQ5e+w==", "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" } }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/dayjs": { + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", + "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==", "dev": true }, - "globby": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", - "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "globule": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz", - "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==", + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true, - "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" + "engines": { + "node": ">=0.10.0" } }, - "glogg": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", - "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", + "node_modules/decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "dev": true + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true, - "requires": { - "sparkles": "^1.0.0" + "engines": { + "node": ">=0.10" } }, - "got": { - "version": "11.8.2", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz", - "integrity": "sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==", + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, - "requires": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.1", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "gulp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", - "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dev": true, - "requires": { - "glob-watcher": "^5.0.3", - "gulp-cli": "^2.2.0", - "undertaker": "^1.2.1", - "vinyl-fs": "^3.0.0" - }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "gulp-cli": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", - "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.4.0", - "isobject": "^3.0.1", - "liftoff": "^3.1.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.2.0", - "yargs": "^7.1.0" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, - "y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true - }, - "yargs": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.1.tgz", - "integrity": "sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g==", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "5.0.0-security.0" - } - }, - "yargs-parser": { - "version": "5.0.0-security.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz", - "integrity": "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "object.assign": "^4.1.0" - } - } + "clone": "^1.0.2" } }, - "gulp-zip": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/gulp-zip/-/gulp-zip-5.1.0.tgz", - "integrity": "sha512-XZr/y91IliK/SpR74g3TkZejGkGEmK7CSDjSghT1jXshgO+dFvpLIz9w9fpuwkew6i7k4F+G24TubNgq1ISzEw==", + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, - "requires": { - "get-stream": "^5.2.0", - "plugin-error": "^1.0.1", - "through2": "^3.0.1", - "vinyl": "^2.1.0", - "yazl": "^2.5.1" + "engines": { + "node": ">=10" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, "dependencies": { - "through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" - } - } + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "gulplog": { + "node_modules/define-property/node_modules/is-accessor-descriptor": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, - "requires": { - "glogg": "^1.0.0" + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "node_modules/del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - } + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" + }, + "engines": { + "node": ">=0.10.0" } }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { + "node_modules/del/node_modules/array-union": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "node_modules/del/node_modules/globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "node_modules/del/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" } }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "engines": { + "node": ">=0.4.0" } }, - "hermes-engine": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/hermes-engine/-/hermes-engine-0.2.1.tgz", - "integrity": "sha512-eNHUQHuadDMJARpaqvlCZoK/Nitpj6oywq3vQ3wCwEsww5morX34mW5PmKWQTO7aU0ck0hgulxR+EVDlXygGxQ==", + "node_modules/denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", "dev": true }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "engines": { + "node": ">= 0.6" } }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.0" - } + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true }, - "homedir-polyfill": { + "node_modules/detect-libc": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "dev": true, - "requires": { - "parse-passwd": "^1.0.0" + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" } }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" + "engines": { + "node": ">=8" } }, - "html-element-map": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.3.0.tgz", - "integrity": "sha512-AqCt/m9YaiMwaaAyOPdq4Ga0cM+jdDWWGueUMkdROZcTeClaGpN0AQeyGchZhTegQoABmc6+IqH7oCR/8vhQYg==", + "node_modules/devtools": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/devtools/-/devtools-7.14.1.tgz", + "integrity": "sha512-NpGjos9SMOZeDXnlmxKBVrbxJuPqFgLDUX/g9IlMtsjUKFq+ePcDNxTr1gRLax+boinc5UoFYPEpeFUKbBzR4Q==", "dev": true, - "requires": { - "array-filter": "^1.0.0", - "call-bind": "^1.0.2" + "dependencies": { + "@types/node": "^15.12.5", + "@wdio/config": "7.14.1", + "@wdio/logger": "7.7.0", + "@wdio/protocols": "7.13.2", + "@wdio/types": "7.14.1", + "@wdio/utils": "7.14.1", + "chrome-launcher": "^0.14.0", + "edge-paths": "^2.1.0", + "puppeteer-core": "^10.1.0", + "query-selector-shadow-dom": "^1.0.0", + "ua-parser-js": "^0.7.21", + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=12.0.0" } }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "node_modules/devtools-protocol": { + "version": "0.0.927104", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.927104.tgz", + "integrity": "sha512-5jfffjSuTOv0Lz53wTNNTcCUV8rv7d82AhYcapj28bC2B5tDxEZzVb7k51cNxZP2KHw24QE+sW7ZuSeD9NfMpA==", + "dev": true + }, + "node_modules/devtools/node_modules/@types/node": { + "version": "15.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz", + "integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==", + "dev": true + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" + "engines": { + "node": ">=0.3.1" } }, - "html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "node_modules/diff-sequences": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", + "dev": true, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/discontinuous-range": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", + "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=", "dev": true }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.9.tgz", + "integrity": "sha512-+KPF4o71fl6NrdnqIrJc6m44NA+Rhf1h7In2MRznejSQasWkjqmHOBUlk+pXJ77cVOSYyZeNHFwn/sjotB6+Sw==", "dev": true }, - "htmlparser2": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.1.tgz", - "integrity": "sha512-GDKPd+vk4jvSuvCbyuzx/unmXkk090Azec7LovXP8as1Hn8q9p3hbjmDGbUqqhknw0ajwit6LiiWqfiTUPMK7w==", + "node_modules/dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, - "requires": { + "dependencies": { "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.4.4", + "domhandler": "^4.2.0", "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "node_modules/dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", "dev": true }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true + "node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] }, - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" } }, - "http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", - "dev": true + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "node_modules/domhandler": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", + "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" + "dependencies": { + "domelementtype": "^2.2.0" }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, "dependencies": { - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - } + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", "dev": true, - "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" + "engines": { + "node": ">=10" } }, - "http-signature": { + "node_modules/easy-table": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz", + "integrity": "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==", "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "optionalDependencies": { + "wcwidth": "^1.0.1" } }, - "http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "node_modules/edge-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/edge-paths/-/edge-paths-2.2.1.tgz", + "integrity": "sha512-AI5fC7dfDmCdKo3m5y7PkYE8m6bMqR6pvVpgtrZkkhcJXFLelUgkjrhk3kXXx8Kbw2cRaTT4LkOR7hqf39KJdw==", "dev": true, - "requires": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" + "dependencies": { + "@types/which": "^1.3.2", + "which": "^2.0.2" } }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true + "node_modules/edge-paths/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } }, - "human-signals": { + "node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/ejs": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", + "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "dependencies": { + "jake": "^10.6.1" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" } }, - "icss-utils": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", - "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "node_modules/electron-to-chromium": { + "version": "1.3.868", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.868.tgz", + "integrity": "sha512-kZYCHqwJ1ctGrYDlOcWQH+/AftAm/KD4lEnLDNwS0kKwx1x6dU4zv+GuDjsPPOGn/2TjnKBaZjDyjXaoix0q/A==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", + "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", "dev": true, - "requires": { - "postcss": "^7.0.14" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } }, - "image-size": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.6.3.tgz", - "integrity": "sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA==", - "dev": true + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "engines": { + "node": ">= 0.8" + } }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } + "iconv-lite": "^0.6.2" } }, - "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" + "dependencies": { + "once": "^1.4.0" } }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" + "bin": { + "envinfo": "dist/cli.js" }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "engines": { + "node": ">=4" } }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "node_modules/enzyme": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz", + "integrity": "sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==", "dev": true, - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" + "dependencies": { + "array.prototype.flat": "^1.2.3", + "cheerio": "^1.0.0-rc.3", + "enzyme-shallow-equal": "^1.0.1", + "function.prototype.name": "^1.1.2", + "has": "^1.0.3", + "html-element-map": "^1.2.0", + "is-boolean-object": "^1.0.1", + "is-callable": "^1.1.5", + "is-number-object": "^1.0.4", + "is-regex": "^1.0.5", + "is-string": "^1.0.5", + "is-subset": "^0.1.1", + "lodash.escape": "^4.0.1", + "lodash.isequal": "^4.5.0", + "object-inspect": "^1.7.0", + "object-is": "^1.0.2", + "object.assign": "^4.1.0", + "object.entries": "^1.1.1", + "object.values": "^1.1.1", + "raf": "^3.4.1", + "rst-selector-parser": "^2.2.3", + "string.prototype.trim": "^1.2.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "node_modules/enzyme-shallow-equal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.4.tgz", + "integrity": "sha512-MttIwB8kKxypwHvRynuC3ahyNc+cFbR8mjVIltnmzQ0uKGqmsfO4bfBuLxb0beLNPhjblUEYvEbsg+VSygvF1Q==", "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", + "dependencies": { "has": "^1.0.3", - "side-channel": "^1.0.4" + "object-is": "^1.1.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "internmap": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", - "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "node_modules/enzyme-to-json": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/enzyme-to-json/-/enzyme-to-json-3.6.2.tgz", + "integrity": "sha512-Ynm6Z6R6iwQ0g2g1YToz6DWhxVnt8Dy1ijR2zynRKxTyBGA8rCDXU3rs2Qc4OKvUvc2Qoe1bcFK6bnPs20TrTg==", "dev": true, - "requires": { - "loose-envify": "^1.0.0" + "dependencies": { + "@types/cheerio": "^0.22.22", + "lodash": "^4.17.21", + "react-is": "^16.12.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "enzyme": "^3.4.0" } }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" + "dependencies": { + "is-arrayish": "^0.2.1" } }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true + "node_modules/error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "dev": true, + "dependencies": { + "stackframe": "^1.1.1" + } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "node_modules/errorhandler": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", + "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "accepts": "~1.3.7", + "escape-html": "~1.0.3" + }, + "engines": { + "node": ">= 0.8" } }, - "is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "node_modules/es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, - "requires": { - "call-bind": "^1.0.0" + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", "dev": true }, - "is-bigint": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", - "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==" - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "requires": { - "binary-extensions": "^1.0.0" + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-boolean-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", - "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", - "requires": { - "call-bind": "^1.0.0" + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", "dev": true }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, - "requires": { - "ci-info": "^2.0.0" + "engines": { + "node": ">=0.8.0" } }, - "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.7.0.tgz", + "integrity": "sha512-wUxdF2bAZiYSKBclsUMrYHH6WxiBreNjyDxbRv345TIvPeoCEgPNEn3Sa+ZrSqsf1Dl9SqqSREXMHExlMMu1DA==", + "dev": true, "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true + "@typescript-eslint/experimental-utils": "^4.0.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": ">= 4", + "eslint": ">=5" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true } } }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "node_modules/eslint-plugin-prettier": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", + "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", "dev": true, - "optional": true + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "eslint": ">=5.0.0", + "prettier": ">=1.13.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true + "node_modules/eslint-plugin-promise": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz", + "integrity": "sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "node_modules/eslint-plugin-react": { + "version": "7.26.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.26.1.tgz", + "integrity": "sha512-Lug0+NOFXeOE+ORZ5pbsh6mSKjBKXDXItUD2sQoT+5Yl0eoT82DqnXeTMfUare4QVCn9QwXbfzO/dBLjLXwVjQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.3", + "array.prototype.flatmap": "^1.2.4", + "doctrine": "^2.1.0", + "estraverse": "^5.2.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.4", + "object.fromentries": "^2.0.4", + "object.hasown": "^1.0.0", + "object.values": "^1.1.4", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.5" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7" + } }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "node_modules/eslint-plugin-react-hooks": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz", + "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" + } }, - "is-generator-fn": { + "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "node_modules/eslint-plugin-react/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true, - "requires": { - "is-extglob": "^2.1.1" + "engines": { + "node": ">=4.0" } }, - "is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", - "dev": true + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "is-number-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", - "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==" - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } }, - "is-path-in-cwd": { + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, - "requires": { - "is-path-inside": "^2.1.0" + "engines": { + "node": ">=10" } }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, - "requires": { - "path-is-inside": "^1.0.2" + "engines": { + "node": ">=4" } }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, - "requires": { - "isobject": "^3.0.1" + "dependencies": { + "@babel/highlight": "^7.10.4" } }, - "is-potential-custom-element-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz", - "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=", - "dev": true + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "requires": { - "is-unc-path": "^1.0.0" + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==" + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "is-subset": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", - "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "requires": { - "has-symbols": "^1.0.1" + "node_modules/eslint/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, - "requires": { - "unc-path-regex": "^0.1.2" + "engines": { + "node": ">=4" } }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, - "optional": true, - "requires": { - "is-docker": "^2.0.0" + "engines": { + "node": ">=10" } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "node_modules/eslint/node_modules/globals": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "node_modules/eslint/node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - }, "dependencies": { - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dev": true, - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - } + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true + "node_modules/eslint/node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } }, - "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "dev": true + "node_modules/eslint/node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" + "dependencies": { + "has-flag": "^4.0.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" } }, - "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "engines": { + "node": ">=4.0" } }, - "jake": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", - "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "requires": { - "async": "0.9.x", - "chalk": "^2.4.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" } }, - "jasmine": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.7.0.tgz", - "integrity": "sha512-wlzGQ+cIFzMEsI+wDqmOwvnjTvolLFwlcpYLCqSPPH0prOQaW3P+IzMhHYn934l1imNvw07oCyX+vGUv3wmtSQ==", + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true, - "requires": { - "glob": "^7.1.6", - "jasmine-core": "~3.7.0" + "engines": { + "node": ">=4.0" } }, - "jasmine-core": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.7.1.tgz", - "integrity": "sha512-DH3oYDS/AUvvr22+xUBW62m1Xoy7tUlY1tsxKEJvl5JeJ7q8zd1K5bUwiOxdH+erj6l2vAMM3hV25Xs9/WrmuQ==", + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, - "jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "requires": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "dev": true, - "requires": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "engines": { + "node": ">=0.10.0" } }, - "jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } + "engines": { + "node": ">= 0.6" } }, - "jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "dev": true + }, + "node_modules/exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", + "dev": true + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" - }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" } }, - "jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "node_modules/execa/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "jest-docblock": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", + "node_modules/execa/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true, - "requires": { - "detect-newline": "^3.0.0" + "engines": { + "node": ">=4" } }, - "jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", + "node_modules/execa/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/execa/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "jest-environment-jsdom": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" + "dependencies": { + "ms": "2.0.0" } }, - "jest-environment-node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, - "requires": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "jest-haste-map": { + "node_modules/expect": { "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", + "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", "dev": true, - "requires": { + "dependencies": { "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.1.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0" }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/expect-webdriverio": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/expect-webdriverio/-/expect-webdriverio-3.1.4.tgz", + "integrity": "sha512-65FTS3bmxcIp0cq6fLb/72TrCQXBCpwPLC7SwMWdpPlLq461mXcK1BPKJJjnIC587aXSKD+3E4hvnlCtwDmXfg==", + "dev": true, "dependencies": { - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } + "expect": "^27.0.2", + "jest-matcher-utils": "^27.0.2" } }, - "jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", + "node_modules/expect-webdriverio/node_modules/@jest/types": { + "version": "27.2.5", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.5.tgz", + "integrity": "sha512-nmuM4VuDtCZcY+eTpw+0nvstwReMsjPoj7ZR80/BbixulhLaiX+fbv8oeLW8WZlJMcsGQsTmMKT/iTZu1Uy/lQ==", "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^26.6.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/expect-webdriverio/node_modules/@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "@types/yargs-parser": "*" } }, - "jest-junit": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-11.1.0.tgz", - "integrity": "sha512-c2LFOyKY7+ZxL5zSu+WHmHfsJ2wqbOpeYJ4Uu26yMhFxny2J2NQj6AVS7M+Eaxji9Q/oIDDK5tQy0DGzDp9xOw==", + "node_modules/expect-webdriverio/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "strip-ansi": "^5.2.0", - "uuid": "^3.3.3", - "xml": "^1.0.1" + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/expect-webdriverio/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "jest-leak-detector": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", + "node_modules/expect-webdriverio/node_modules/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", + "node_modules/expect-webdriverio/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "requires": { + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/expect-webdriverio/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/expect-webdriverio/node_modules/diff-sequences": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", + "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/expect-webdriverio/node_modules/expect": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.3.1.tgz", + "integrity": "sha512-MrNXV2sL9iDRebWPGOGFdPQRl2eDQNu/uhxIMShjjx74T6kC6jFIkmQ6OqXDtevjGUkyB2IT56RzDBqXf/QPCg==", + "dev": true, + "dependencies": { + "@jest/types": "^27.2.5", + "ansi-styles": "^5.0.0", + "jest-get-type": "^27.3.1", + "jest-matcher-utils": "^27.3.1", + "jest-message-util": "^27.3.1", + "jest-regex-util": "^27.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/expect-webdriverio/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/expect-webdriverio/node_modules/jest-diff": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.3.1.tgz", + "integrity": "sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ==", + "dev": true, + "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" + "diff-sequences": "^27.0.6", + "jest-get-type": "^27.3.1", + "pretty-format": "^27.3.1" }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/expect-webdriverio/node_modules/jest-get-type": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.3.1.tgz", + "integrity": "sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/expect-webdriverio/node_modules/jest-matcher-utils": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.3.1.tgz", + "integrity": "sha512-hX8N7zXS4k+8bC1Aj0OWpGb7D3gIXxYvPNK1inP5xvE4ztbz3rc4AkI6jGVaerepBnfWB17FL5lWFJT3s7qo8w==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "chalk": "^4.0.0", + "jest-diff": "^27.3.1", + "jest-get-type": "^27.3.1", + "pretty-format": "^27.3.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "node_modules/expect-webdriverio/node_modules/jest-message-util": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.3.1.tgz", + "integrity": "sha512-bh3JEmxsTZ/9rTm0jQrPElbY2+y48Rw2t47uMfByNyUVR+OfPh4anuyKsGqsNkXk/TI4JbLRZx+7p7Hdt6q1yg==", "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.2.5", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", + "micromatch": "^4.0.4", + "pretty-format": "^27.3.1", "slash": "^3.0.0", - "stack-utils": "^2.0.2" + "stack-utils": "^2.0.3" }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/expect-webdriverio/node_modules/jest-regex-util": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz", + "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/expect-webdriverio/node_modules/pretty-format": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.3.1.tgz", + "integrity": "sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } + "@jest/types": "^27.2.5", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", + "node_modules/expect-webdriverio/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/expect-webdriverio/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true + "node_modules/expect/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "node_modules/expect/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/expect/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", - "slash": "^3.0.0" + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" } }, - "jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" } }, - "jest-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, - "requires": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" + "dependencies": { + "is-extendable": "^0.1.0" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, - "requires": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", - "chalk": "^4.0.0", - "expect": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", - "semver": "^7.3.2" + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" } }, - "jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "node_modules/fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" + "dependencies": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" } }, - "jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + "node_modules/fast-glob/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" - }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "jest-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", + "node_modules/fast-glob/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, - "requires": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^26.6.2", - "string-length": "^4.0.1" - }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "node_modules/fast-glob/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "jetifier": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-1.6.6.tgz", - "integrity": "sha512-JNAkmPeB/GS2tCRqUzRPsTOHpGDah7xP18vGJfIjZC+W2sxEHbxgJxetIjIqhjQ3yYbYNEELkM/spKLtwoOSUQ==", - "dev": true + "node_modules/fast-glob/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsc-android": { - "version": "245459.0.0", - "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-245459.0.0.tgz", - "integrity": "sha512-wkjURqwaB1daNkDi2OYYbsLnIdC/lUM2nPXQKRs5pqEU9chDg435bjvo+LSaHotDENygHQDHe+ntUkkw2gwMtg==", - "dev": true + "node_modules/fast-glob/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "jsdom": { - "version": "16.5.2", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.5.2.tgz", - "integrity": "sha512-JxNtPt9C1ut85boCbJmffaQ06NBnzkQY/MWO3YxPW8IWS38A26z+B1oBvA9LwKrytewdfymnhi4UNH3/RAgZrg==", + "node_modules/fast-glob/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, - "requires": { - "abab": "^2.0.5", - "acorn": "^8.1.0", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "html-encoding-sniffer": "^2.0.1", - "is-potential-custom-element-name": "^1.0.0", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "request": "^2.88.2", - "request-promise-native": "^1.0.9", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.4", - "xml-name-validator": "^3.0.0" + "dependencies": { + "kind-of": "^3.0.2" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-glob/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { - "acorn": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.0.tgz", - "integrity": "sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA==", - "dev": true - }, - "tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - } - } + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true + "node_modules/fast-glob/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "node_modules/fast-glob/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } }, - "json-loader": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "node_modules/fbjs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-1.0.0.tgz", + "integrity": "sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA==", + "dev": true, + "dependencies": { + "core-js": "^2.4.1", + "fbjs-css-vars": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } }, - "json-source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/json-source-map/-/json-source-map-0.6.1.tgz", - "integrity": "sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg==", + "node_modules/fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", "dev": true }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "node_modules/fbjs-scripts": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fbjs-scripts/-/fbjs-scripts-1.2.0.tgz", + "integrity": "sha512-5krZ8T0Bf8uky0abPoCLrfa7Orxd8UH4Qq8hRUF2RZYNMu+FmEOrBc7Ib3YVONmxTXTlLAvyrrdrVmksDb2OqQ==", "dev": true, - "requires": { - "jsonify": "~0.0.0" + "dependencies": { + "@babel/core": "^7.0.0", + "ansi-colors": "^1.0.1", + "babel-preset-fbjs": "^3.2.0", + "core-js": "^2.4.1", + "cross-spawn": "^5.1.0", + "fancy-log": "^1.3.2", + "object-assign": "^4.0.1", + "plugin-error": "^0.1.2", + "semver": "^5.1.0", + "through2": "^2.0.0" } }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true + "node_modules/fbjs-scripts/node_modules/ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, + "dependencies": { + "ansi-wrap": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", - "dev": true + "node_modules/fbjs-scripts/node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "node_modules/fbjs-scripts/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, - "requires": { - "minimist": "^1.2.5" + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "node_modules/fbjs-scripts/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, - "requires": { - "graceful-fs": "^4.1.6" + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "node_modules/fbjs-scripts/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" + "bin": { + "semver": "bin/semver" } }, - "jsx-ast-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", - "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "node_modules/fbjs-scripts/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, - "requires": { - "array-includes": "^3.1.2", - "object.assign": "^4.1.2" + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "just-debounce": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", - "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", - "dev": true - }, - "keyv": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", - "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==", + "node_modules/fbjs-scripts/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true, - "requires": { - "json-buffer": "3.0.1" + "engines": { + "node": ">=0.10.0" } }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "node_modules/fbjs-scripts/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true + "node_modules/fbjs/node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "dev": true, - "requires": { - "graceful-fs": "^4.1.9" + "dependencies": { + "pend": "~1.2.0" } }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "klona": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/klona/-/klona-1.1.2.tgz", - "integrity": "sha512-xf88rTeHiXk+XE2Vhi6yj8Wm3gMZrygGdKjJqN8HkV+PwF/t50/LdAKHoHpPcxFAlmQszTZ1CugrK25S7qDRLA==", - "dev": true - }, - "last-run": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", - "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", + "node_modules/fibers": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fibers/-/fibers-5.0.0.tgz", + "integrity": "sha512-UpGv/YAZp7mhKHxDvC1tColrroGRX90sSvh8RMZV9leo+e5+EkRVgCEZPlmXeo3BUNQTZxUaVdLskq1Q2FyCPg==", "dev": true, - "requires": { - "default-resolution": "^2.0.0", - "es6-weak-map": "^2.0.1" + "hasInstallScript": true, + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">=10.0.0" } }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, - "requires": { - "readable-stream": "^2.0.5" + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "requires": { - "invert-kv": "^1.0.0" + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "lead": { + "node_modules/file-uri-to-path": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", "dev": true, - "requires": { - "flush-write-stream": "^1.0.2" + "optional": true + }, + "node_modules/filelist": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", + "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.4" } }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "liftoff": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", - "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "requires": { - "extend": "^3.0.0", - "findup-sync": "^3.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" + "dependencies": { + "ms": "2.0.0" } }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true + "node_modules/find-cache-dir/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "node_modules/find-cache-dir/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/find-cache-dir/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true, - "requires": { - "p-locate": "^4.1.0" + "engines": { + "node": ">=4" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "node_modules/find-cache-dir/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + "node_modules/find-cache-dir/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + "node_modules/find-cache-dir/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "node_modules/find-free-port": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-free-port/-/find-free-port-2.0.0.tgz", + "integrity": "sha1-SyLl9leesaOMQaxryz7+0bbamxs=", "dev": true }, - "lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", - "dev": true + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=", - "dev": true + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "node_modules/flatted": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", "dev": true }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "dev": true + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } }, - "lodash.isobject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", - "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=", - "dev": true + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, - "lodash.mapvalues": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", - "dev": true + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "node_modules/fs-extra/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } }, - "lodash.pickby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", - "integrity": "sha1-feoh2MGNdwOifHBMFdO4SmfjOv8=", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=", + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "lodash.zip": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", - "integrity": "sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=", + "node_modules/functions-have-names": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.2.tgz", + "integrity": "sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "dependencies": { + "globule": "^1.0.0" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", "dev": true }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "node_modules/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", "dev": true, - "requires": { - "chalk": "^2.0.1" + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" } }, - "log-update": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-3.4.0.tgz", - "integrity": "sha512-ILKe88NeMt4gmDvk/eb615U/IVn7K9KWGkoYbdatQ69Z65nj1ZzjM6fHXfcs0Uge+e+EGnMW7DY4T9yko8vWFg==", + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, - "requires": { - "ansi-escapes": "^3.2.0", - "cli-cursor": "^2.1.0", - "wrap-ansi": "^5.0.0" + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/globby/node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - } - } + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8" } }, - "logkitty": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.6.1.tgz", - "integrity": "sha512-cHuXN8qUZuzX/7kB6VyS7kB4xyD24e8gyHXIFNhIv+fjW3P+jEXNUhj0o/7qWJtv7UZpbnPgUqzu/AZQ8RAqxQ==", + "node_modules/globule": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.3.tgz", + "integrity": "sha512-mb1aYtDbIjTu4ShMB85m3UzjX9BVKe9WCzsnfMSZk+K5GpIbBOexgg4PPCt5eHDEG5/ZQAUX2Kct02zfiPLsKg==", "dev": true, - "requires": { - "ansi-fragments": "^0.2.1", - "dayjs": "^1.8.15", - "yargs": "^12.0.5" + "dependencies": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/globule/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", + "node_modules/got": { + "version": "11.8.2", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz", + "integrity": "sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.1", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", "dev": true }, - "loglevel-plugin-prefix": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", - "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } + "node_modules/growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true, + "optional": true }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "node_modules/harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", "dev": true }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, - "requires": { - "yallist": "^4.0.0" + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" } }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "make-iterator": { + "node_modules/has-bigints": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", "dev": true, - "requires": { - "kind-of": "^6.0.2" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, - "requires": { - "tmpl": "1.0.x" + "engines": { + "node": ">=4" } }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true, - "requires": { - "p-defer": "^1.0.0" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "map-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", - "integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg=", - "dev": true + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "map-visit": { + "node_modules/has-values": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, - "requires": { - "object-visit": "^1.0.0" + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "matchdep": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, - "requires": { - "findup-sync": "^2.0.0", - "micromatch": "^3.0.4", - "resolve": "^1.4.0", - "stack-trace": "0.0.10" + "dependencies": { + "kind-of": "^3.0.2" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { - "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "node_modules/hermes-engine": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/hermes-engine/-/hermes-engine-0.5.1.tgz", + "integrity": "sha512-hLwqh8dejHayjlpvZY40e1aDCDvyP98cWx/L5DhAjSJLH8g4z9Tp08D7y4+3vErDsncPOdf1bxm+zUWpx0/Fxg==", "dev": true }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "node_modules/hermes-profile-transformer": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz", + "integrity": "sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==", "dev": true, - "requires": { - "mimic-fn": "^1.0.0" + "dependencies": { + "source-map": "^0.7.3" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/hermes-profile-transformer/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", "dependencies": { - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - } + "react-is": "^16.7.0" } }, - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/html-element-map": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.3.1.tgz", + "integrity": "sha512-6XMlxrAFX4UEEGxctfFnmrFaaZFNf9i5fNuV5wZ3WWQ4FVaNP1aX1LkX9j2mfEx1NpjeE/rL3nmgEn23GdFmrg==", "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "dependencies": { + "array.prototype.filter": "^1.0.0", + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "mendix": { - "version": "8.18.13281", - "resolved": "https://registry.npmjs.org/mendix/-/mendix-8.18.13281.tgz", - "integrity": "sha512-9CG2HRz6JimuLPPtnuRmiXGJSBmWlPqnr4eDHlR64F0yXZcD6cjeNgc4DTrmDFzsLwzg0kqR8WmvIHMCVDtvDA==", + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", "dev": true, - "requires": { - "@types/big.js": "^4.0.5", - "@types/react": "~16.9.0", - "@types/react-native": "~0.61.0" + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" } }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true + "node_modules/http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } }, - "metro": { - "version": "0.56.4", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.56.4.tgz", - "integrity": "sha512-Kt3OQJQtQdts0JrKnyGdLpKHDjqYBgIfzvYrvfhmFCkKuZ8aqRlVnvpfjQ4/OBm0Fmm9NyyxbNRD9VIbj7WjnA==", + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, - "requires": { - "@babel/core": "^7.0.0", - "@babel/generator": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/plugin-external-helpers": "^7.0.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "absolute-path": "^0.0.0", - "async": "^2.4.0", - "babel-preset-fbjs": "^3.1.2", - "buffer-crc32": "^0.2.13", - "chalk": "^2.4.1", - "concat-stream": "^1.6.0", - "connect": "^3.6.5", - "debug": "^2.2.0", - "denodeify": "^1.2.1", - "eventemitter3": "^3.0.0", - "fbjs": "^1.0.0", - "fs-extra": "^1.0.0", - "graceful-fs": "^4.1.3", - "image-size": "^0.6.0", - "invariant": "^2.2.4", - "jest-haste-map": "^24.7.1", - "jest-worker": "^24.6.0", - "json-stable-stringify": "^1.0.1", - "lodash.throttle": "^4.1.1", - "merge-stream": "^1.0.1", - "metro-babel-register": "^0.56.4", - "metro-babel-transformer": "^0.56.4", - "metro-cache": "^0.56.4", - "metro-config": "^0.56.4", - "metro-core": "^0.56.4", - "metro-inspector-proxy": "^0.56.4", - "metro-minify-uglify": "^0.56.4", - "metro-react-native-babel-preset": "^0.56.4", - "metro-resolver": "^0.56.4", - "metro-source-map": "^0.56.4", - "metro-symbolicate": "^0.56.4", - "mime-types": "2.1.11", - "mkdirp": "^0.5.1", - "node-fetch": "^2.2.0", - "nullthrows": "^1.1.0", - "resolve": "^1.5.0", - "rimraf": "^2.5.4", - "serialize-error": "^2.1.0", - "source-map": "^0.5.6", - "temp": "0.8.3", - "throat": "^4.1.0", - "wordwrap": "^1.0.0", - "write-file-atomic": "^1.2.0", - "ws": "^1.1.5", - "xpipe": "^1.0.5", - "yargs": "^9.0.0" + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, "dependencies": { - "@jest/console": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", - "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", - "dev": true, - "requires": { - "@jest/source-map": "^24.9.0", - "chalk": "^2.0.1", - "slash": "^2.0.0" - } - }, - "@jest/fake-timers": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", - "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0" - } + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=", + "dev": true, + "dependencies": { + "harmony-reflect": "^1.4.6" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "@jest/source-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", - "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "@jest/test-result": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", - "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", - "dev": true, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.6.3.tgz", + "integrity": "sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA==", + "dev": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", + "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/inquirer": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.1.5.tgz", + "integrity": "sha512-G6/9xUqmt/r+UvufSyrPpt84NYwhKZ9jLsgMbQzlx804XErNupor8WQdBnBRrXmBfTPpuwf1sV+ss2ovjgdXIg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.2.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/rxjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", + "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", + "dev": true, + "dependencies": { + "tslib": "~2.1.0" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz", + "integrity": "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "dependencies": { + "is-path-inside": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "dependencies": { + "path-is-inside": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-port-reachable": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-3.1.0.tgz", + "integrity": "sha512-vjc0SSRNZ32s9SbZBzGaiP6YVB+xglLShhgZD/FHMZUXBvQWaV9CtzgeVhjccFJrI6RAMV+LX7NYxueW/A8W5A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-subset": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", + "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", + "dev": true + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "node_modules/is-weakref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", + "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "dev": true, + "dependencies": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "node_modules/isomorphic-fetch/node_modules/node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "dev": true, + "dependencies": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.2.tgz", + "integrity": "sha512-o5+eTUYzCJ11/+JhW5/FUCdfsdoYVdQ/8I/OveE2XsjehYn5DdeSnNQAbjYaO8gQ6hvGTN6GM6ddQqpTVG5j8g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", + "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jake": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", + "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", + "dev": true, + "dependencies": { + "async": "0.9.x", + "chalk": "^2.4.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jasmine": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.10.0.tgz", + "integrity": "sha512-2Y42VsC+3CQCTzTwJezOvji4qLORmKIE0kwowWC+934Krn6ZXNQYljiwK5st9V3PVx96BSiDYXSB60VVah3IlQ==", + "dev": true, + "dependencies": { + "glob": "^7.1.6", + "jasmine-core": "~3.10.0" + }, + "bin": { + "jasmine": "bin/jasmine.js" + } + }, + "node_modules/jasmine-core": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.10.0.tgz", + "integrity": "sha512-XWGaJ25RUdOQnjGiLoQa9QG/R4u1e9Bk4uhLdn9F4JCBco84L4SKM52bxci4vWTSUzhmhuHNAkAHFN/6Cox9wQ==", + "dev": true + }, + "node_modules/jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", + "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", + "dev": true, + "dependencies": { + "@jest/core": "^26.6.3", + "import-local": "^3.0.2", + "jest-cli": "^26.6.3" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-changed-files": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", + "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "execa": "^4.0.0", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-changed-files/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/jest-changed-files/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-changed-files/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", + "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", + "dev": true, + "dependencies": { + "@jest/core": "^26.6.3", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^26.6.3", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "prompts": "^2.0.1", + "yargs": "^15.4.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", + "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^26.6.3", + "@jest/types": "^26.6.2", + "babel-jest": "^26.6.3", + "chalk": "^4.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^26.6.2", + "jest-environment-node": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-jasmine2": "^26.6.3", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-docblock": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", + "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-each": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", + "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", + "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", + "dev": true, + "dependencies": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2", + "jsdom": "^16.4.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-environment-node": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", + "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", + "dev": true, + "dependencies": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "dev": true, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, + "engines": { + "node": ">= 10.14.2" + }, + "optionalDependencies": { + "fsevents": "^2.1.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", + "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^26.6.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-jasmine2/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-jasmine2/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-junit": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-12.3.0.tgz", + "integrity": "sha512-+NmE5ogsEjFppEl90GChrk7xgz8xzvF0f+ZT5AnhW6suJC93gvQtmQjfyjDnE0Z2nXJqEkxF0WXlvjG/J+wn/g==", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "strip-ansi": "^5.2.0", + "uuid": "^8.3.2", + "xml": "^1.0.1" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/jest-junit/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-junit/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jest-leak-detector": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", + "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", + "dev": true, + "dependencies": { + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-matcher-utils": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", + "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", + "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-react-hooks-shallow": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/jest-react-hooks-shallow/-/jest-react-hooks-shallow-1.5.1.tgz", + "integrity": "sha512-tyIUh2aKLTGPxbc6aK54pymvvRlX8eGNn3GzXefXAX5BkUwj4geS1pPJijmYeCELbn8+BUP9uS9+6OG5ElVI5Q==", + "dev": true, + "dependencies": { + "react": "^16.8.0" + } + }, + "node_modules/jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "dev": true, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", + "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-snapshot": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-resolve/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-resolve/node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-resolve/node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", + "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", + "dev": true, + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.7.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-docblock": "^26.0.0", + "jest-haste-map": "^26.6.2", + "jest-leak-detector": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runner/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", + "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", + "dev": true, + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/globals": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^0.6.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.4.1" + }, + "bin": { + "jest-runtime": "bin/jest-runtime.js" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-snapshot": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", + "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.0.0", + "chalk": "^4.0.0", + "expect": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-haste-map": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "natural-compare": "^1.4.0", + "pretty-format": "^26.6.2", + "semver": "^7.3.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-svg-transformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jest-svg-transformer/-/jest-svg-transformer-1.0.0.tgz", + "integrity": "sha1-44iEykzYsilc36KgskZnkgw6im0=", + "dev": true, + "peerDependencies": { + "jest": ">22", + "react": ">=16" + } + }, + "node_modules/jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "leven": "^3.1.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", + "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", + "dev": true, + "dependencies": { + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^26.6.2", + "string-length": "^4.0.1" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jetifier": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-1.6.8.tgz", + "integrity": "sha512-3Zi16h6L5tXDRQJTb221cnRoVG9/9OvreLdLU2/ZjRv/GILL+2Cemt0IKvkowwkDpvouAU1DQPOJ7qaiHeIdrw==", + "dev": true, + "bin": { + "jetifier": "bin/jetify", + "jetifier-standalone": "bin/jetifier-standalone", + "jetify": "bin/jetify" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsc-android": { + "version": "245459.0.0", + "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-245459.0.0.tgz", + "integrity": "sha512-wkjURqwaB1daNkDi2OYYbsLnIdC/lUM2nPXQKRs5pqEU9chDg435bjvo+LSaHotDENygHQDHe+ntUkkw2gwMtg==", + "dev": true + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsdom/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "dependencies": { + "jsonify": "~0.0.0" + } + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", + "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.3", + "object.assign": "^4.1.2" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/junk": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/junk/-/junk-1.0.3.tgz", + "integrity": "sha1-h75jSIZJy9ym9Tqzm+yczSNH9ZI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/keyv": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", + "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ky": { + "version": "0.28.6", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.28.6.tgz", + "integrity": "sha512-EjxET5qSsaLUj1BSFtxPjEtRgF5JOhdroPwMNJFH/VvzruWQFBmh6W7GtqjBR56UZw4dBFTKLvx9nDxxnFXc7w==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/ky?sponsor=1" + } + }, + "node_modules/lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lighthouse-logger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz", + "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==", + "dev": true, + "dependencies": { + "debug": "^2.6.9", + "marky": "^1.2.2" + } + }, + "node_modules/lighthouse-logger/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/lighthouse-logger/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "node_modules/livereload": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.9.3.tgz", + "integrity": "sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.0", + "livereload-js": "^3.3.1", + "opts": ">= 1.2.0", + "ws": "^7.4.3" + }, + "bin": { + "livereload": "bin/livereload.js" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/livereload-js": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-3.3.2.tgz", + "integrity": "sha512-w677WnINxFkuixAoUEXOStewzLYGI76XVag+0JWMMEyjJQKs0ibWZMxkTlB96Lm3EjZ7IeOxVziBEbtxVQqQZA==", + "dev": true + }, + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", + "dev": true + }, + "node_modules/lodash.escape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", + "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=", + "dev": true + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "dev": true + }, + "node_modules/lodash.isobject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", + "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "node_modules/lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.pickby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", + "integrity": "sha1-feoh2MGNdwOifHBMFdO4SmfjOv8=", + "dev": true + }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", + "dev": true + }, + "node_modules/lodash.zip": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", + "integrity": "sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logkitty": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", + "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", + "dev": true, + "dependencies": { + "ansi-fragments": "^0.2.1", + "dayjs": "^1.8.15", + "yargs": "^15.1.0" + }, + "bin": { + "logkitty": "bin/logkitty.js" + } + }, + "node_modules/loglevel": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", + "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, + "node_modules/loglevel-plugin-prefix": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", + "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lz-string": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", + "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=", + "dev": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "dependencies": { + "tmpl": "1.0.x" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/marky": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.2.tgz", + "integrity": "sha512-k1dB2HNeaNyORco8ulVEhctyEGkKHb2YWAhDsxeFlW2nROIirsctBYzKwwS3Vza+sKTS1zO4Z+n9/+9WbGLIxQ==", + "dev": true + }, + "node_modules/maximatch": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/maximatch/-/maximatch-0.1.0.tgz", + "integrity": "sha1-hs2NawTJ8wfAWmuUGZBtA2D7E6I=", + "dev": true, + "dependencies": { + "array-differ": "^1.0.0", + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "minimatch": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/maximatch/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mendix": { + "version": "9.6.27784", + "resolved": "https://registry.npmjs.org/mendix/-/mendix-9.6.27784.tgz", + "integrity": "sha512-2dSAQKSdH9eVg21FCprBMaOnLQBjCPetze82iqiyUwbkN+xGFWvv0akaEFnOx/gkfh+fw8W+hP51cD9YEpsM5w==", + "dev": true, + "dependencies": { + "@types/big.js": "^6.0.0", + "@types/react": "~17.0.0", + "@types/react-native": "~0.64.10" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/metro": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.59.0.tgz", + "integrity": "sha512-OpVgYXyuTvouusFZQJ/UYKEbwfLmialrSCUUTGTFaBor6UMUHZgXPYtK86LzesgMqRc8aiuTQVO78iKW2Iz3wg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@babel/core": "^7.0.0", + "@babel/generator": "^7.5.0", + "@babel/parser": "^7.0.0", + "@babel/plugin-external-helpers": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "absolute-path": "^0.0.0", + "async": "^2.4.0", + "babel-preset-fbjs": "^3.3.0", + "buffer-crc32": "^0.2.13", + "chalk": "^2.4.1", + "ci-info": "^2.0.0", + "concat-stream": "^1.6.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "denodeify": "^1.2.1", + "error-stack-parser": "^2.0.6", + "eventemitter3": "^3.0.0", + "fbjs": "^1.0.0", + "fs-extra": "^1.0.0", + "graceful-fs": "^4.1.3", + "image-size": "^0.6.0", + "invariant": "^2.2.4", + "jest-haste-map": "^24.9.0", + "jest-worker": "^24.9.0", + "json-stable-stringify": "^1.0.1", + "lodash.throttle": "^4.1.1", + "merge-stream": "^1.0.1", + "metro-babel-register": "0.59.0", + "metro-babel-transformer": "0.59.0", + "metro-cache": "0.59.0", + "metro-config": "0.59.0", + "metro-core": "0.59.0", + "metro-inspector-proxy": "0.59.0", + "metro-minify-uglify": "0.59.0", + "metro-react-native-babel-preset": "0.59.0", + "metro-resolver": "0.59.0", + "metro-source-map": "0.59.0", + "metro-symbolicate": "0.59.0", + "mime-types": "2.1.11", + "mkdirp": "^0.5.1", + "node-fetch": "^2.2.0", + "nullthrows": "^1.1.1", + "resolve": "^1.5.0", + "rimraf": "^2.5.4", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "strip-ansi": "^4.0.0", + "temp": "0.8.3", + "throat": "^4.1.0", + "wordwrap": "^1.0.0", + "ws": "^1.1.5", + "xpipe": "^1.0.5", + "yargs": "^14.2.0" + }, + "bin": { + "metro": "src/cli.js" + } + }, + "node_modules/metro-babel-register": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-babel-register/-/metro-babel-register-0.59.0.tgz", + "integrity": "sha512-JtWc29erdsXO/V3loenXKw+aHUXgj7lt0QPaZKPpctLLy8kcEpI/8pfXXgVK9weXICCpCnYtYncIosAyzh0xjg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/register": "^7.0.0", + "escape-string-regexp": "^1.0.5" + } + }, + "node_modules/metro-babel-transformer": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.59.0.tgz", + "integrity": "sha512-fdZJl8rs54GVFXokxRdD7ZrQ1TJjxWzOi/xSP25VR3E8tbm3nBZqS+/ylu643qSr/IueABR+jrlqAyACwGEf6w==", + "dev": true, + "dependencies": { + "@babel/core": "^7.0.0", + "metro-source-map": "0.59.0" + } + }, + "node_modules/metro-cache": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.59.0.tgz", + "integrity": "sha512-ryWNkSnpyADfRpHGb8BRhQ3+k8bdT/bsxMH2O0ntlZYZ188d8nnYWmxbRvFmEzToJxe/ol4uDw0tJFAaQsN8KA==", + "dev": true, + "dependencies": { + "jest-serializer": "^24.9.0", + "metro-core": "0.59.0", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4" + } + }, + "node_modules/metro-cache/node_modules/jest-serializer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro-cache/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/metro-cache/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/metro-config": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.59.0.tgz", + "integrity": "sha512-MDsknFG9vZ4Nb5VR6OUDmGHaWz6oZg/FtE3up1zVBKPVRTXE1Z+k7zypnPtMXjMh3WHs/Sy4+wU1xnceE/zdnA==", + "dev": true, + "dependencies": { + "cosmiconfig": "^5.0.5", + "jest-validate": "^24.9.0", + "metro": "0.59.0", + "metro-cache": "0.59.0", + "metro-core": "0.59.0" + } + }, + "node_modules/metro-config/node_modules/@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro-config/node_modules/@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/metro-config/node_modules/@types/yargs": { + "version": "13.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", + "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/metro-config/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/metro-config/node_modules/jest-get-type": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", + "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro-config/node_modules/jest-validate": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", + "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", + "dev": true, + "dependencies": { + "@jest/types": "^24.9.0", + "camelcase": "^5.3.1", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "leven": "^3.1.0", + "pretty-format": "^24.9.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro-config/node_modules/pretty-format": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "dev": true, + "dependencies": { + "@jest/types": "^24.9.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro-core": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.59.0.tgz", + "integrity": "sha512-kb5LKvV5r2pqMEzGyTid8ai2mIjW13NMduQ8oBmfha7/EPTATcTQ//s+bkhAs1toQD8vqVvjAb0cPNjWQEmcmQ==", + "dev": true, + "dependencies": { + "jest-haste-map": "^24.9.0", + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.59.0", + "wordwrap": "^1.0.0" + } + }, + "node_modules/metro-core/node_modules/@jest/console": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", + "dev": true, + "dependencies": { + "@jest/source-map": "^24.9.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro-core/node_modules/@jest/fake-timers": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", + "dev": true, + "dependencies": { + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro-core/node_modules/@jest/source-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro-core/node_modules/@jest/test-result": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", + "dev": true, + "dependencies": { + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/istanbul-lib-coverage": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro-core/node_modules/@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro-core/node_modules/@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/metro-core/node_modules/@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "node_modules/metro-core/node_modules/@types/yargs": { + "version": "13.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", + "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/metro-core/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/metro-core/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro-core/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro-core/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/metro-core/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro-core/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro-core/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/metro-core/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro-core/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro-core/node_modules/jest-haste-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", + "dev": true, + "dependencies": { + "@jest/types": "^24.9.0", + "anymatch": "^2.0.0", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, + "engines": { + "node": ">= 6" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/metro-core/node_modules/jest-message-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro-core/node_modules/jest-mock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", + "dev": true, + "dependencies": { + "@jest/types": "^24.9.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro-core/node_modules/jest-serializer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro-core/node_modules/jest-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", + "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", + "dev": true, + "dependencies": { + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "callsites": "^3.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.15", + "is-ci": "^2.0.0", + "mkdirp": "^0.5.1", + "slash": "^2.0.0", + "source-map": "^0.6.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro-core/node_modules/jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, + "dependencies": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro-core/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro-core/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/metro-core/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro-core/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/metro-core/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro-core/node_modules/stack-utils": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", + "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/metro-core/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/metro-core/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro-inspector-proxy": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.59.0.tgz", + "integrity": "sha512-hPeAuQcofTOH0F+2GEZqWkvkVY1/skezSSlMocDQDaqds+Kw6JgdA7FlZXxnKmQ/jYrWUzff/pl8SUCDwuYthQ==", + "dev": true, + "dependencies": { + "connect": "^3.6.5", + "debug": "^2.2.0", + "ws": "^1.1.5", + "yargs": "^14.2.0" + }, + "bin": { + "metro-inspector-proxy": "src/cli.js" + } + }, + "node_modules/metro-inspector-proxy/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/metro-inspector-proxy/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/metro-inspector-proxy/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/metro-inspector-proxy/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/metro-inspector-proxy/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/metro-inspector-proxy/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/metro-inspector-proxy/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/metro-inspector-proxy/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/metro-inspector-proxy/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/metro-inspector-proxy/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/metro-inspector-proxy/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/metro-inspector-proxy/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/metro-inspector-proxy/node_modules/ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "dev": true, + "dependencies": { + "options": ">=0.0.5", + "ultron": "1.0.x" + } + }, + "node_modules/metro-inspector-proxy/node_modules/yargs": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", + "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^15.0.1" + } + }, + "node_modules/metro-inspector-proxy/node_modules/yargs-parser": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.3.tgz", + "integrity": "sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/metro-minify-uglify": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.59.0.tgz", + "integrity": "sha512-7IzVgCVWZMymgZ/quieg/9v5EQ8QmZWAgDc86Zp9j0Vy6tQTjUn6jlU+YAKW3mfMEjMr6iIUzCD8YklX78tFAw==", + "dev": true, + "dependencies": { + "uglify-es": "^3.1.9" + } + }, + "node_modules/metro-react-native-babel-preset": { + "version": "0.63.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.63.0.tgz", + "integrity": "sha512-iTM6V/hzqTd2dg0LHtD4f/TU+d4A7MFiMPUmIYDb0OZmCq6avfcxHQTXk/ZNbAr+eRoN/owx9OIkjt/CvG4vUA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-assign": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/metro-react-native-babel-transformer": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.59.0.tgz", + "integrity": "sha512-1O3wrnMq4NcPQ1asEcl9lRDn/t+F1Oef6S9WaYVIKEhg9m/EQRGVrrTVP+R6B5Eeaj3+zNKbzM8Dx/NWy1hUbQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.0.0", + "babel-preset-fbjs": "^3.3.0", + "metro-babel-transformer": "0.59.0", + "metro-react-native-babel-preset": "0.59.0", + "metro-source-map": "0.59.0" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/metro-react-native-babel-transformer/node_modules/metro-react-native-babel-preset": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.59.0.tgz", + "integrity": "sha512-BoO6ncPfceIDReIH8pQ5tQptcGo5yRWQXJGVXfANbiKLq4tfgdZB1C1e2rMUJ6iypmeJU9dzl+EhPmIFKtgREg==", + "dev": true, + "dependencies": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-assign": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/metro-resolver": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.59.0.tgz", + "integrity": "sha512-lbgiumnwoVosffEI96z0FGuq1ejTorHAj3QYUPmp5dFMfitRxLP7Wm/WP9l4ZZjIptxTExsJwuEff1SLRCPD9w==", + "dev": true, + "dependencies": { + "absolute-path": "^0.0.0" + } + }, + "node_modules/metro-source-map": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.59.0.tgz", + "integrity": "sha512-0w5CmCM+ybSqXIjqU4RiK40t4bvANL6lafabQ2GP2XD3vSwkLY+StWzCtsb4mPuyi9R/SgoLBel+ZOXHXAH0eQ==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.59.0", + "ob1": "0.59.0", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + } + }, + "node_modules/metro-symbolicate": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.59.0.tgz", + "integrity": "sha512-asLaF2A7rndrToGFIknL13aiohwPJ95RKHf0NM3hP/nipiLDoMzXT6ZnQvBqDxkUKyP+51AI75DMtb+Wcyw4Bw==", + "dev": true, + "dependencies": { + "invariant": "^2.2.4", + "metro-source-map": "0.59.0", + "source-map": "^0.5.6", + "through2": "^2.0.1", + "vlq": "^1.0.0" + }, + "bin": { + "metro-symbolicate": "src/symbolicate.js" + }, + "engines": { + "node": ">=8.3" + } + }, + "node_modules/metro/node_modules/@jest/console": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", + "dev": true, + "dependencies": { + "@jest/source-map": "^24.9.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro/node_modules/@jest/fake-timers": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", + "dev": true, + "dependencies": { + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro/node_modules/@jest/source-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro/node_modules/@jest/source-map/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro/node_modules/@jest/test-result": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", + "dev": true, + "dependencies": { + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/istanbul-lib-coverage": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro/node_modules/@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro/node_modules/@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/metro/node_modules/@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "node_modules/metro/node_modules/@types/yargs": { + "version": "13.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", + "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/metro/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/metro/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/metro/node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/metro/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro/node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/metro/node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/metro/node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/metro/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/metro/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/metro/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/metro/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/metro/node_modules/fs-extra": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" + } + }, + "node_modules/metro/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/metro/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/metro/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro/node_modules/jest-haste-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", + "dev": true, + "dependencies": { + "@jest/types": "^24.9.0", + "anymatch": "^2.0.0", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, + "engines": { + "node": ">= 6" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/metro/node_modules/jest-message-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro/node_modules/jest-mock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", + "dev": true, + "dependencies": { + "@jest/types": "^24.9.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro/node_modules/jest-serializer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro/node_modules/jest-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", + "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", + "dev": true, + "dependencies": { + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "callsites": "^3.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.15", + "is-ci": "^2.0.0", + "mkdirp": "^0.5.1", + "slash": "^2.0.0", + "source-map": "^0.6.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro/node_modules/jest-util/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro/node_modules/jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, + "dependencies": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/metro/node_modules/jest-worker/node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/metro/node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/metro/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/metro/node_modules/merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/metro/node_modules/metro-react-native-babel-preset": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.59.0.tgz", + "integrity": "sha512-BoO6ncPfceIDReIH8pQ5tQptcGo5yRWQXJGVXfANbiKLq4tfgdZB1C1e2rMUJ6iypmeJU9dzl+EhPmIFKtgREg==", + "dev": true, + "dependencies": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-assign": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/metro/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro/node_modules/mime-db": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.23.0.tgz", + "integrity": "sha1-oxtAcK2uon1zLqMzdApk0OyaZlk=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/metro/node_modules/mime-types": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.11.tgz", + "integrity": "sha1-wlnEcb2oCKhdbNGTtDCl+uRHOzw=", + "dev": true, + "dependencies": { + "mime-db": "~1.23.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/metro/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/metro/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/metro/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/metro/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/metro/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/metro/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/metro/node_modules/serialize-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", + "integrity": "sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/metro/node_modules/stack-utils": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", + "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/metro/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/metro/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/metro/node_modules/string-width/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/metro/node_modules/string-width/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/metro/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/metro/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/metro/node_modules/throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", + "dev": true + }, + "node_modules/metro/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro/node_modules/ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "dev": true, + "dependencies": { + "options": ">=0.0.5", + "ultron": "1.0.x" + } + }, + "node_modules/metro/node_modules/yargs": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", + "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^15.0.1" + } + }, + "node_modules/metro/node_modules/yargs-parser": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.3.tgz", + "integrity": "sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", + "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.33", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", + "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", + "dev": true, + "dependencies": { + "mime-db": "1.50.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "dev": true, + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.3.tgz", + "integrity": "sha512-gSfqpMRC8IxghvMcxzzmMnWpXAChSA+vy4cia33RgerMS8Fex95akUyQZPbxJJmeBGiGmK7n/1OpUX8ksRjIdA==", + "dev": true, + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/moo": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz", + "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==", + "dev": true + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "dev": true, + "optional": true + }, + "node_modules/nanoid": { + "version": "3.1.30", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", + "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/nearley": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", + "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", + "dev": true, + "dependencies": { + "commander": "^2.19.0", + "moo": "^0.5.0", + "railroad-diagrams": "^1.0.0", + "randexp": "0.4.6" + }, + "bin": { + "nearley-railroad": "bin/nearley-railroad.js", + "nearley-test": "bin/nearley-test.js", + "nearley-unparse": "bin/nearley-unparse.js", + "nearleyc": "bin/nearleyc.js" + }, + "funding": { + "type": "individual", + "url": "https://nearley.js.org/#give-to-nearley" + } + }, + "node_modules/nearley/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/nocache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz", + "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/node-fetch": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", + "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node_modules/node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-notifier": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", + "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", + "dev": true, + "optional": true, + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + } + }, + "node_modules/node-notifier/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "optional": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-releases": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.0.tgz", + "integrity": "sha512-aA87l0flFYMzCHpTM3DERFSYxc6lv/BltdbRTOMZuxZ0cwZCD3mejE5n9vLhSJCN++/eOqr77G1IO5uXxlQYWA==", + "dev": true + }, + "node_modules/node-stream-zip": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", + "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", + "dev": true, + "engines": { + "node": ">=0.12.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/antelle" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "dev": true + }, + "node_modules/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "node_modules/ob1": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.59.0.tgz", + "integrity": "sha512-opXMTxyWJ9m68ZglCxwo0OPRESIC/iGmKFPXEXzMZqsVIrgoRXOHmoMDkQzz4y3irVjbyPJRAh5pI9fd0MJTFQ==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", + "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/open/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/opts": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/opts/-/opts-2.0.2.tgz", + "integrity": "sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==", + "dev": true + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-each-series": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-iteration": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/p-iteration/-/p-iteration-1.1.8.tgz", + "integrity": "sha512-IMFBSDIYcPNnW7uWYGrBqmvTiq7W0uB0fJn6shQZs7dlF3OvrHOre+JT9ikSZ7gZS3vWqclVgoQSvToJrns7uQ==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "dependencies": { + "node-modules-regexp": "^1.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/plist": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.4.tgz", + "integrity": "sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg==", + "dev": true, + "dependencies": { + "base64-js": "^1.5.1", + "xmlbuilder": "^9.0.7" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/plugin-error": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", + "dev": true, + "dependencies": { + "ansi-cyan": "^0.1.1", + "ansi-red": "^0.1.1", + "arr-diff": "^1.0.1", + "arr-union": "^2.0.1", + "extend-shallow": "^1.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plugin-error/node_modules/arr-diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", + "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", + "dev": true, + "dependencies": { + "arr-flatten": "^1.0.1", + "array-slice": "^0.2.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plugin-error/node_modules/arr-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", + "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plugin-error/node_modules/extend-shallow": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", + "dev": true, + "dependencies": { + "kind-of": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plugin-error/node_modules/kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.3.9", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.9.tgz", + "integrity": "sha512-f/ZFyAKh9Dnqytx5X62jgjhhzttjZS7hMsohcI7HEI5tjELX/HxCy3EFhsRxyzGvrzFF+82XPvCS8T9TFleVJw==", + "dev": true, + "dependencies": { + "nanoid": "^3.1.28", + "picocolors": "^0.2.1", + "source-map-js": "^0.6.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-url": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", + "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", + "dev": true, + "dependencies": { + "make-dir": "~3.1.0", + "mime": "~2.5.2", + "minimatch": "~3.0.4", + "xxhashjs": "~0.2.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/pretty-format/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/pretty-ms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", + "dev": true, + "dependencies": { + "parse-ms": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/printj": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", + "dev": true, + "bin": { + "printj": "bin/printj.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/puppeteer-core": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-10.4.0.tgz", + "integrity": "sha512-KU8zyb7AIOqNjLCN3wkrFXxh+EVaG+zrs2P03ATNjc3iwSxHsu5/EvZiREpQ/IJiT9xfQbDVgKcsvRuzLCxglQ==", + "dev": true, + "dependencies": { + "debug": "4.3.1", + "devtools-protocol": "0.0.901419", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.0", + "node-fetch": "2.6.1", + "pkg-dir": "4.2.0", + "progress": "2.0.1", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.0.0", + "unbzip2-stream": "1.3.3", + "ws": "7.4.6" + }, + "engines": { + "node": ">=10.18.1" + } + }, + "node_modules/puppeteer-core/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/puppeteer-core/node_modules/devtools-protocol": { + "version": "0.0.901419", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.901419.tgz", + "integrity": "sha512-4INMPwNm9XRpBukhNbF7OB6fNTTCaI8pzy/fXg0xQzAy5h3zL1P8xT3QazgKqBrb/hAYwIBizqDBZ7GtJE74QQ==", + "dev": true + }, + "node_modules/puppeteer-core/node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "dev": true, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/puppeteer-core/node_modules/progress": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz", + "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/puppeteer-core/node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/query-selector": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/query-selector/-/query-selector-1.0.9.tgz", + "integrity": "sha1-kX/TG3N5tT/UQeU2r2R1UuAefp4=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/query-selector-shadow-dom": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/query-selector-shadow-dom/-/query-selector-shadow-dom-1.0.0.tgz", + "integrity": "sha512-bK0/0cCI+R8ZmOF1QjT7HupDUYCxbf/9TJgAmSXQxZpftXmTAeil9DRoCnTDkWbvOyZzhcMBwKpptWcdkGFIMg==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dev": true, + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/railroad-diagrams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", + "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=", + "dev": true + }, + "node_modules/randexp": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", + "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "dev": true, + "dependencies": { + "discontinuous-range": "1.0.0", + "ret": "~0.1.10" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/react": { + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.9.0.tgz", + "integrity": "sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-d3-cloud": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/react-d3-cloud/-/react-d3-cloud-1.0.5.tgz", + "integrity": "sha512-zKrJY+apmhw+J1se64vFW4Cr7y4W1sSYQLjQXHc9JaxiwhBOK1bikVui1IeOy4UHbUqis0YPQUE+9BBL4O8K9g==", + "dependencies": { + "d3-cloud": "^1.2.5", + "d3-scale": "^3.3.0", + "d3-scale-chromatic": "^2.0.0", + "d3-selection": "^2.0.0", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.2.0", + "react-faux-dom": "^4.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-0", + "react-dom": "^16.8.0 || ^17.0.0-0" + } + }, + "node_modules/react-d3-cloud/node_modules/d3-scale": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.3.0.tgz", + "integrity": "sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==", + "dependencies": { + "d3-array": "^2.3.0", + "d3-format": "1 - 2", + "d3-interpolate": "1.2.0 - 2", + "d3-time": "^2.1.1", + "d3-time-format": "2 - 3" + } + }, + "node_modules/react-d3-cloud/node_modules/d3-scale-chromatic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-2.0.0.tgz", + "integrity": "sha512-LLqy7dJSL8yDy7NRmf6xSlsFZ6zYvJ4BcWFE4zBrOPnQERv9zj24ohnXKRbyi9YHnYV+HN1oEO3iFK971/gkzA==", + "dependencies": { + "d3-color": "1 - 2", + "d3-interpolate": "1 - 2" + } + }, + "node_modules/react-d3-cloud/node_modules/d3-selection": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-2.0.0.tgz", + "integrity": "sha512-XoGGqhLUN/W14NmaqcO/bb1nqjDAw5WtSYb2X8wiuQWvSZUsUVYsOSkOybUrNvcBjaywBdYPy03eXHMXjk9nZA==" + }, + "node_modules/react-d3-cloud/node_modules/d3-time": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz", + "integrity": "sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==", + "dependencies": { + "d3-array": "2" + } + }, + "node_modules/react-devtools-core": { + "version": "4.20.1", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.20.1.tgz", + "integrity": "sha512-HBcLfLi2R6VxlWFF2i5lONYlr3KLh324RPFeApZ3G6GGaJrcS/qtk9M/iESw7fRTlgPHEg+A4j6e1j9oXpvi5w==", + "dev": true, + "dependencies": { + "shell-quote": "^1.6.1", + "ws": "^7" + } + }, + "node_modules/react-dom": { + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.9.0.tgz", + "integrity": "sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ==", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.15.0" + }, + "peerDependencies": { + "react": "^16.0.0" + } + }, + "node_modules/react-fast-compare": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", + "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" + }, + "node_modules/react-faux-dom": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/react-faux-dom/-/react-faux-dom-4.5.0.tgz", + "integrity": "sha512-T03fyZw/He4EYPqQpK5KJ9BQXNNMMgUo5DiwWkFG5wlpMDuiiYc4Q8WfeODjl3g2S2OBqy3+0VUr44sZkqz2Sw==", + "dependencies": { + "create-react-class": "^15.6.3", + "hoist-non-react-statics": "^3.3.0", + "query-selector": "^1.0.9", + "style-attr": "^1.0.1" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-hot-loader": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.13.0.tgz", + "integrity": "sha512-JrLlvUPqh6wIkrK2hZDfOyq/Uh/WeVEr8nc7hkn2/3Ul0sx1Kr5y4kOGNacNRoj7RhwLNcQ3Udf1KJXrqc0ZtA==", + "dev": true, + "dependencies": { + "fast-levenshtein": "^2.0.6", + "global": "^4.3.0", + "hoist-non-react-statics": "^3.3.0", + "loader-utils": "^1.1.0", + "prop-types": "^15.6.1", + "react-lifecycles-compat": "^3.0.4", + "shallowequal": "^1.1.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "@types/react": "^15.0.0 || ^16.0.0 || ^17.0.0 ", + "react": "^15.0.0 || ^16.0.0 || ^17.0.0 ", + "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 " + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-hot-loader/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", + "dev": true + }, + "node_modules/react-refresh": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", + "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-shallow-renderer": { + "version": "16.14.1", + "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.14.1.tgz", + "integrity": "sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.1", + "react-is": "^16.12.0 || ^17.0.0" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0" + } + }, + "node_modules/react-wordcloud": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/react-wordcloud/-/react-wordcloud-1.2.7.tgz", + "integrity": "sha512-pyXvL8Iu2J258Qk2/kAwY23dIVhNpMC3dnvbXRkw5+Ert5EkJWwnwVjs9q8CmX38NWbfCKhGmpjuumBoQEtniw==", + "dependencies": { + "d3-array": "^2.5.0", + "d3-cloud": "^1.2.5", + "d3-dispatch": "^1.0.6", + "d3-scale": "^3.2.1", + "d3-scale-chromatic": "^1.5.0", + "d3-selection": "1.4.2", + "d3-transition": "^1.3.2", + "lodash.clonedeep": "^4.5.0", + "lodash.debounce": "^4.0.8", + "resize-observer-polyfill": "^1.5.1", + "seedrandom": "^3.0.5", + "tippy.js": "^6.2.6" + }, + "peerDependencies": { + "react": "^16.13.0" + } + }, + "node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", + "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/recursive-copy": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/recursive-copy/-/recursive-copy-2.0.13.tgz", + "integrity": "sha512-BjmE6R/dOImStEku+017L3Z0I6u/lA+SVr1sySWbTLjmQKDTESNmJ9WBZP8wbN5FuvqNvSYvRKA/IKQhAjqnpQ==", + "dev": true, + "dependencies": { + "del": "^2.2.0", + "errno": "^0.1.2", + "graceful-fs": "^4.1.4", + "junk": "^1.0.1", + "maximatch": "^0.1.0", + "mkdirp": "^0.5.1", + "pify": "^2.3.0", + "promise": "^7.0.1", + "slash": "^1.0.0" + } + }, + "node_modules/recursive-copy/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/recursive-copy/node_modules/slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "dev": true, + "dependencies": { + "minimatch": "3.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", + "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", + "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^9.0.0", + "regjsgen": "^0.5.2", + "regjsparser": "^0.7.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", + "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/responselike": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", + "dev": true, + "dependencies": { + "lowercase-keys": "^2.0.0" + } + }, + "node_modules/resq": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/resq/-/resq-1.10.1.tgz", + "integrity": "sha512-zhp1iyUH02MLciv3bIM2bNtTFx/fqRsK4Jk73jcPqp00d/sMTTjOtjdTMAcgjrQKGx5DvQ/HSpeqaMW0atGRJA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^2.0.1" + } + }, + "node_modules/resq/node_modules/fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rgb2hex": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.2.5.tgz", + "integrity": "sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.58.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.58.0.tgz", + "integrity": "sha512-NOXpusKnaRpbS7ZVSzcEXqxcLDOagN6iFS8p45RkoiMqPHDLwJm758UF05KlMoCRbLBTZsPOIa887gZJ1AiXvw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-clear": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/rollup-plugin-clear/-/rollup-plugin-clear-2.0.7.tgz", + "integrity": "sha512-Hg8NC3JcJBO1ofgyQC0IACpyKn/yhHPGZ3C7R3ubNGWUXy9JXHQrewk4J4hVcZznw6SOKayLsaNae596Rwt8Vg==", + "dev": true, + "dependencies": { + "rimraf": "^2.6.2" + } + }, + "node_modules/rollup-plugin-clear/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rollup-plugin-command": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-command/-/rollup-plugin-command-1.1.3.tgz", + "integrity": "sha512-9nIcP5mgVYWGU7x/6ufTgtqI4vl5vvsYs6fTTil91NX53EIPcim42FXmq1TPdZRFJbUM1ikrg05clahPxObL1g==", + "dev": true + }, + "node_modules/rollup-plugin-livereload": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/rollup-plugin-livereload/-/rollup-plugin-livereload-2.0.5.tgz", + "integrity": "sha512-vqQZ/UQowTW7VoiKEM5ouNW90wE5/GZLfdWuR0ELxyKOJUIaj+uismPZZaICU4DnWPVjnpCDDxEqwU7pcKY/PA==", + "dev": true, + "dependencies": { + "livereload": "^0.9.1" + }, + "engines": { + "node": ">=8.3" + } + }, + "node_modules/rollup-plugin-re": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/rollup-plugin-re/-/rollup-plugin-re-1.0.7.tgz", + "integrity": "sha1-/hdHBO1ZzahMrwK9ATtYLm/apPY=", + "dev": true, + "dependencies": { + "magic-string": "^0.16.0", + "rollup-pluginutils": "^2.0.1" + } + }, + "node_modules/rollup-plugin-re/node_modules/magic-string": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.16.0.tgz", + "integrity": "sha1-lw67DacZMwEoX7GqZQ85vdgetFo=", + "dev": true, + "dependencies": { + "vlq": "^0.2.1" + } + }, + "node_modules/rollup-plugin-re/node_modules/vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true + }, + "node_modules/rollup-plugin-sass": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/rollup-plugin-sass/-/rollup-plugin-sass-1.2.9.tgz", + "integrity": "sha512-ShI0T6tQxvM0B/njgZ35/1RuiNZTo9LtrUYFRupNokmXbresGb6RvYnkQvWbq4a5UBIp57VJ+cjPcsJKthXV8Q==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "resolve": "^1.5.0", + "sass": "^1.7.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/rollup-pluginutils/node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "node_modules/rst-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", + "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=", + "dev": true, + "dependencies": { + "lodash.flattendeep": "^4.4.0", + "nearley": "^2.7.10" + } + }, + "node_modules/rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true, + "engines": { + "node": "6.* || >= 7.*" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "node_modules/rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "dependencies": { + "rx-lite": "*" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", + "dev": true, + "dependencies": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "bin": { + "sane": "src/cli.js" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/sane/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/sane/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sass": { + "version": "1.43.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.43.2.tgz", + "integrity": "sha512-DncYhjl3wBaPMMJR0kIUaH3sF536rVrOcqqVGmTZHQRRzj7LQlyGV7Mb8aCKFyILMr5VsPHwRYtyKpnKYlmQSQ==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/scheduler": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz", + "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + }, + "node_modules/selenium-standalone": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/selenium-standalone/-/selenium-standalone-7.1.0.tgz", + "integrity": "sha512-Pc7U48qwB4LVy/XczBrPPXwUhEPl3XQSik8SjLfj2qzBEtZqrjyzOlnnXq4aVCdr5wH9FiFJm8LwheJbK2+/oQ==", + "dev": true, + "dependencies": { + "commander": "^7.2.0", + "cross-spawn": "^7.0.3", + "debug": "^4.3.1", + "fs-extra": "^10.0.0", + "got": "^11.8.2", + "is-port-reachable": "^3.0.0", + "lodash.mapvalues": "^4.6.0", + "lodash.merge": "^4.6.2", + "minimist": "^1.2.5", + "mkdirp": "^1.0.4", + "progress": "2.0.3", + "tar-stream": "2.2.0", + "which": "^2.0.2", + "yauzl": "^2.10.0" + }, + "bin": { + "selenium-standalone": "bin/selenium-standalone" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=6.0.0" + } + }, + "node_modules/selenium-standalone/node_modules/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/selenium-standalone/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/selenium-standalone/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/serialize-error": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true, + "dependencies": { + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" + } + }, + "node_modules/shelljs": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "dev": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true, + "optional": true + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", + "dev": true + }, + "node_modules/simple-plist": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.1.1.tgz", + "integrity": "sha512-pKMCVKvZbZTsqYR6RKgLfBHkh2cV89GXcA/0CVPje3sOiNOnXA8+rp/ciAMZ7JRaUdLzlEM6JFfUn+fS6Nt3hg==", + "dev": true, + "dependencies": { + "bplist-creator": "0.0.8", + "bplist-parser": "0.2.0", + "plist": "^3.0.1" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "node_modules/spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", + "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", + "dev": true + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", + "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==", + "dev": true + }, + "node_modules/stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "dev": true, + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-buffers": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", + "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", + "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.5.tgz", + "integrity": "sha512-Lnh17webJVsD6ECeovpVN17RlAKjmz4rF9S+8Y45CkMc/ufVpTkU3vZIyIC7sllQ1FCvObZnnCdNs/HXTUOTlg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-attr": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/style-attr/-/style-attr-1.3.0.tgz", + "integrity": "sha512-srFr54gzEZoy73WgYfnbxCAtNCzF0Hn5RGzK7gi/0G6ttZd9v3WZFGY4ed5ABr43dbGjPNr4T46geUxxUP9i6w==" + }, + "node_modules/sudo-prompt": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", + "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==", + "dev": true + }, + "node_modules/suffix": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/suffix/-/suffix-0.1.1.tgz", + "integrity": "sha1-zFgjFkag7xEC95R47zqSSP2chC8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/table": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz", + "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/tar-fs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz", + "integrity": "sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp": "^0.5.1", + "pump": "^3.0.0", + "tar-stream": "^2.0.0" + } + }, + "node_modules/tar-fs/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/temp": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", + "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", + "dev": true, + "engines": [ + "node >=0.8.0" + ], + "dependencies": { + "os-tmpdir": "^1.0.0", + "rimraf": "~2.2.6" + } + }, + "node_modules/temp/node_modules/rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "dev": true, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", + "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tippy.js": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.1.tgz", + "integrity": "sha512-JnFncCq+rF1dTURupoJ4yPie5Cof978inW6/4S6kmWV7LL9YOSEVMifED3KdrVPEG+Z/TFH2CDNJcQEfaeuQww==", + "dependencies": { + "@popperjs/core": "^2.8.3" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-jest": { + "version": "26.5.6", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.6.tgz", + "integrity": "sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^26.1.0", + "json5": "2.x", + "lodash": "4.x", + "make-error": "1.x", + "mkdirp": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "jest": ">=26 <27", + "typescript": ">=3.8 <5.0" + } + }, + "node_modules/ts-jest/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, + "dependencies": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "typescript": ">=2.7" + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "deprecated": "support for ECMAScript is superseded by `uglify-js` as of v3.13.0", + "dev": true, + "dependencies": { + "commander": "~2.13.0", + "source-map": "~0.6.1" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uglify-es/node_modules/commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "dev": true + }, + "node_modules/uglify-es/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "dev": true + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", + "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", + "dev": true, + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/v8-to-istanbul": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", + "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vlq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", + "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==", + "dev": true + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "dependencies": { + "makeerror": "1.0.x" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webdriver": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-7.14.1.tgz", + "integrity": "sha512-YhnuVquRQBVDO4seFDSpKsT5VFTpNTK7YZIPB6MwDBsIiiXA5Lt8QJN4kBuE6zuHmRuGRFv1y1dONCxsumEtXQ==", + "dev": true, + "dependencies": { + "@types/node": "^15.12.5", + "@wdio/config": "7.14.1", + "@wdio/logger": "7.7.0", + "@wdio/protocols": "7.13.2", + "@wdio/types": "7.14.1", + "@wdio/utils": "7.14.1", + "got": "^11.0.2", + "ky": "^0.28.5", + "lodash.merge": "^4.6.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/webdriver/node_modules/@types/node": { + "version": "15.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz", + "integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==", + "dev": true + }, + "node_modules/webdriverio": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-7.14.1.tgz", + "integrity": "sha512-LE3YbEkzqqpCt2lN4JIYSpfv1mOXUk2SCglUXHD1O/uNY/Z1hUM5iL0X7tW0Wg5QKvH5YYJ/YPmtqza1OrtNAg==", + "dev": true, + "dependencies": { + "@types/aria-query": "^4.2.1", + "@types/node": "^15.12.5", + "@wdio/config": "7.14.1", + "@wdio/logger": "7.7.0", + "@wdio/protocols": "7.13.2", + "@wdio/repl": "7.14.1", + "@wdio/types": "7.14.1", + "@wdio/utils": "7.14.1", + "archiver": "^5.0.0", + "aria-query": "^5.0.0", + "atob": "^2.1.2", + "css-shorthand-properties": "^1.1.1", + "css-value": "^0.0.1", + "devtools": "7.14.1", + "devtools-protocol": "^0.0.927104", + "fs-extra": "^10.0.0", + "get-port": "^5.1.1", + "grapheme-splitter": "^1.0.2", + "lodash.clonedeep": "^4.5.0", + "lodash.isobject": "^3.0.2", + "lodash.isplainobject": "^4.0.6", + "lodash.zip": "^4.2.0", + "minimatch": "^3.0.4", + "puppeteer-core": "^10.1.0", + "query-selector-shadow-dom": "^1.0.0", + "resq": "^1.9.1", + "rgb2hex": "0.2.5", + "serialize-error": "^8.0.0", + "webdriver": "7.14.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/webdriverio/node_modules/@types/node": { + "version": "15.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz", + "integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==", + "dev": true + }, + "node_modules/webdriverio/node_modules/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/webdriverio/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", + "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", + "dev": true + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", + "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xcode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/xcode/-/xcode-2.1.0.tgz", + "integrity": "sha512-uCrmPITrqTEzhn0TtT57fJaNaw8YJs1aCzs+P/QqxsDbvPZSv7XMPPwXrKvHtD6pLjBM/NaVwraWJm8q83Y4iQ==", + "dev": true, + "dependencies": { + "simple-plist": "^1.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/xcode/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/xml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", + "integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=", + "dev": true + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dev": true, + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xml2js/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/xmldoc": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.1.2.tgz", + "integrity": "sha512-ruPC/fyPNck2BD1dpz0AZZyrEwMOrWTO5lDdIXS91rs3wtm4j+T8Rp2o+zoOYkkAxJTZRPOSnOGei1egoRmKMQ==", + "dev": true, + "dependencies": { + "sax": "^1.2.1" + } + }, + "node_modules/xpipe": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/xpipe/-/xpipe-1.0.5.tgz", + "integrity": "sha1-jdi/Rfw/f1Xw4FS4ePQ6YmFNr98=", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", + "dev": true, + "dependencies": { + "cuint": "^0.2.2" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yarn-install": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yarn-install/-/yarn-install-1.0.0.tgz", + "integrity": "sha1-V/RQULgu/VcYKzlzxUqgXLXSUjA=", + "dev": true, + "dependencies": { + "cac": "^3.0.3", + "chalk": "^1.1.3", + "cross-spawn": "^4.0.2" + }, + "bin": { + "yarn-install": "bin/yarn-install.js", + "yarn-remove": "bin/yarn-remove.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yarn-install/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yarn-install/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yarn-install/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yarn-install/node_modules/cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "dev": true, + "dependencies": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "node_modules/yarn-install/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/yarn-install/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yarn-install/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/yarn-install/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/zip-a-folder": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/zip-a-folder/-/zip-a-folder-0.0.12.tgz", + "integrity": "sha512-wZGiWgp3z2TocBlzx3S5tsLgPbT39qG2uIZmn2MhYLVjhKIr2nMhg7i4iPDL4W3XvMDaOEEVU5ZB0Y/Pt6BLvA==", + "dev": true, + "dependencies": { + "archiver": "^3.1.1" + } + }, + "node_modules/zip-a-folder/node_modules/archiver": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz", + "integrity": "sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==", + "dev": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^2.6.3", + "buffer-crc32": "^0.2.1", + "glob": "^7.1.4", + "readable-stream": "^3.4.0", + "tar-stream": "^2.1.0", + "zip-stream": "^2.1.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/zip-a-folder/node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/zip-a-folder/node_modules/compress-commons": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz", + "integrity": "sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==", + "dev": true, + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^3.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^2.3.6" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/zip-a-folder/node_modules/compress-commons/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/zip-a-folder/node_modules/crc32-stream": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz", + "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", + "dev": true, + "dependencies": { + "crc": "^3.4.4", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "node_modules/zip-a-folder/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/zip-a-folder/node_modules/zip-stream": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.1.3.tgz", + "integrity": "sha512-EkXc2JGcKhO5N5aZ7TmuNo45budRaFGHOmz24wtJR7znbNqDPmdZtUauKX6et8KAVseAMBOyWJqEpXcHTBsh7Q==", + "dev": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "compress-commons": "^2.1.1", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/zip-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "dev": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", + "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/compat-data": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", + "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", + "dev": true + }, + "@babel/core": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz", + "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.15.8", + "@babel/generator": "^7.15.8", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.8", + "@babel/helpers": "^7.15.4", + "@babel/parser": "^7.15.8", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz", + "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==", + "dev": true, + "requires": { + "@babel/types": "^7.15.6", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz", + "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz", + "integrity": "sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", + "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz", + "integrity": "sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", + "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz", + "integrity": "sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-function-name": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", + "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", + "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", + "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", + "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-module-imports": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", + "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-module-transforms": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz", + "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-simple-access": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/helper-validator-identifier": "^7.15.7", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.6" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", + "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz", + "integrity": "sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-wrap-function": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-replace-supers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", + "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-simple-access": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", + "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz", + "integrity": "sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", + "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", + "dev": true, + "requires": { + "@babel/types": "^7.15.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz", + "integrity": "sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/helpers": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", + "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", + "dev": true, + "requires": { + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz", + "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==", + "dev": true + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz", + "integrity": "sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4", + "@babel/plugin-proposal-optional-chaining": "^7.14.5" + } + }, + "@babel/plugin-external-helpers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-external-helpers/-/plugin-external-helpers-7.14.5.tgz", + "integrity": "sha512-q/B/hLX+nDGk73Xn529d7Ar4ih17J8pNBbsXafq8oXij0XfFEA/bks+u+6q5q04zO5o/qivjzui6BqzPfYShEg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.15.8.tgz", + "integrity": "sha512-2Z5F2R2ibINTc63mY7FLqGfEbmofrHU9FitJW1Q7aPaKFhiPvSq6QEt/BoWN5oME3GVyjcRuNNSRbb9LC0CSWA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.15.4", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz", + "integrity": "sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", + "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-default-from": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.14.5.tgz", + "integrity": "sha512-T8KZ5abXvKMjF6JcoXjgac3ElmXf0AWzJwi2O/42Jk+HmCky3D9+i1B7NPP1FblyceqTevKeV/9szeikFoaMDg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-default-from": "^7.14.5" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", + "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", + "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", + "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz", + "integrity": "sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.15.4" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", + "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz", + "integrity": "sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-create-class-features-plugin": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", + "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-default-from": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.14.5.tgz", + "integrity": "sha512-snWDxjuaPEobRBnhpqEfZ8RMxDbHt8+87fiEioGuE+Uc0xAKgSD8QiuL3lF93hPVQfZFAcYwrrf+H5qUhike3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-flow": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.14.5.tgz", + "integrity": "sha512-9WK5ZwKCdWHxVuU13XNT6X73FGmutAXeor5lGFq6qhOFtMFUF4jkbijuyUdZZlpYq6E2hZeZf/u3959X9wsv0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", + "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", + "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz", + "integrity": "sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz", + "integrity": "sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", + "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", + "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", + "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.14.5.tgz", + "integrity": "sha512-KhcolBKfXbvjwI3TV7r7TkYm8oNXHNBqGOy6JDVwtecFaRoKYsUUqJdS10q0YDKW1c6aZQgO+Ys3LfGkox8pXA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-flow": "^7.14.5" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz", + "integrity": "sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", + "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", + "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", + "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz", + "integrity": "sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.15.4", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz", + "integrity": "sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.9", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", + "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz", + "integrity": "sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", + "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-object-assign": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.14.5.tgz", + "integrity": "sha512-lvhjk4UN9xJJYB1mI5KC0/o1D5EcJXdbhVe+4fSk08D6ZN+iuAIs7LJC+71h8av9Ew4+uRq9452v9R93SFmQlQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz", + "integrity": "sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.15.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.15.1.tgz", + "integrity": "sha512-yQZ/i/pUCJAHI/LbtZr413S3VT26qNrEm0M5RRxQJA947/YNYwbZbBaXGDrq6CG5QsZycI1VIP6d7pQaBfP+8Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.9.tgz", + "integrity": "sha512-30PeETvS+AeD1f58i1OVyoDlVYQhap/K20ZrMjLmmzmC2AYR/G43D4sdJAaDAqCD3MYpSWbmrz3kES158QSLjw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-jsx": "^7.14.5", + "@babel/types": "^7.14.9" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz", + "integrity": "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==", + "dev": true, + "requires": { + "@babel/plugin-transform-react-jsx": "^7.14.5" + } + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.14.9.tgz", + "integrity": "sha512-Fqqu0f8zv9W+RyOnx29BX/RlEsBRANbOf5xs5oxb2aHP4FKbLXxIaVPUiCti56LAR1IixMH4EyaixhUsKqoBHw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.14.5.tgz", + "integrity": "sha512-1TpSDnD9XR/rQ2tzunBVPThF5poaYT9GqP+of8fAtguYuI/dm2RkrMBDemsxtY0XBzvW7nXjYM0hRyKX9QYj7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz", + "integrity": "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", + "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.15.8.tgz", + "integrity": "sha512-+6zsde91jMzzvkzuEA3k63zCw+tm/GvuuabkpisgbDMTPQsIMHllE3XczJFFtEHLjjhKQFZmGQVRdELetlWpVw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.5", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.15.8.tgz", + "integrity": "sha512-/daZ8s2tNaRekl9YJa9X4bzjpeRZLt122cpgFnQPLGUe61PH8zMEBmYqKkW5xF5JUEh5buEGXJoQpqBmIbpmEQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.15.8.tgz", + "integrity": "sha512-ZXIkJpbaf6/EsmjeTbiJN/yMxWPFWvlr7sEG1P95Xb4S4IBcrf2n7s/fItIhsAmOf8oSh3VJPDppO6ExfAfKRQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-typescript": "^7.14.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", + "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/preset-env": { + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.8.tgz", + "integrity": "sha512-rCC0wH8husJgY4FPbHsiYyiLxSY8oMDJH7Rl6RQMknbN9oDDHhM9RDFvnGM2MgkbUJzSQB4gtuwygY5mCqGSsA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.15.0", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.15.4", + "@babel/plugin-proposal-async-generator-functions": "^7.15.8", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.15.4", + "@babel/plugin-proposal-dynamic-import": "^7.14.5", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-proposal-json-strings": "^7.14.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", + "@babel/plugin-proposal-numeric-separator": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.15.6", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-private-methods": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.15.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.14.5", + "@babel/plugin-transform-async-to-generator": "^7.14.5", + "@babel/plugin-transform-block-scoped-functions": "^7.14.5", + "@babel/plugin-transform-block-scoping": "^7.15.3", + "@babel/plugin-transform-classes": "^7.15.4", + "@babel/plugin-transform-computed-properties": "^7.14.5", + "@babel/plugin-transform-destructuring": "^7.14.7", + "@babel/plugin-transform-dotall-regex": "^7.14.5", + "@babel/plugin-transform-duplicate-keys": "^7.14.5", + "@babel/plugin-transform-exponentiation-operator": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.15.4", + "@babel/plugin-transform-function-name": "^7.14.5", + "@babel/plugin-transform-literals": "^7.14.5", + "@babel/plugin-transform-member-expression-literals": "^7.14.5", + "@babel/plugin-transform-modules-amd": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.15.4", + "@babel/plugin-transform-modules-systemjs": "^7.15.4", + "@babel/plugin-transform-modules-umd": "^7.14.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9", + "@babel/plugin-transform-new-target": "^7.14.5", + "@babel/plugin-transform-object-super": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.15.4", + "@babel/plugin-transform-property-literals": "^7.14.5", + "@babel/plugin-transform-regenerator": "^7.14.5", + "@babel/plugin-transform-reserved-words": "^7.14.5", + "@babel/plugin-transform-shorthand-properties": "^7.14.5", + "@babel/plugin-transform-spread": "^7.15.8", + "@babel/plugin-transform-sticky-regex": "^7.14.5", + "@babel/plugin-transform-template-literals": "^7.14.5", + "@babel/plugin-transform-typeof-symbol": "^7.14.5", + "@babel/plugin-transform-unicode-escapes": "^7.14.5", + "@babel/plugin-transform-unicode-regex": "^7.14.5", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.15.6", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.5", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "core-js-compat": "^3.16.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-react": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.14.5.tgz", + "integrity": "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-react-display-name": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.5", + "@babel/plugin-transform-react-jsx-development": "^7.14.5", + "@babel/plugin-transform-react-pure-annotations": "^7.14.5" + } + }, + "@babel/register": { + "version": "7.15.3", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.15.3.tgz", + "integrity": "sha512-mj4IY1ZJkorClxKTImccn4T81+UKTo4Ux0+OFSV9hME1ooqS9UV+pJ6BjD0qXPK4T3XW/KNa79XByjeEMZz+fw==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.0", + "source-map-support": "^0.5.16" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs3": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz", + "integrity": "sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg==", + "dev": true, + "requires": { + "core-js-pure": "^3.16.0", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", + "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4" + } + }, + "@babel/traverse": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", + "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.15.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz", + "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.9", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==", + "dev": true + }, + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==", + "dev": true + }, + "@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==", + "dev": true + }, + "@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "dev": true, + "requires": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "dev": true, + "requires": { + "@hapi/hoek": "^8.3.0" + } + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jest/console": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/core": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", + "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/reporters": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^26.6.2", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-resolve-dependencies": "^26.6.3", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "jest-watcher": "^26.6.2", + "micromatch": "^4.0.2", + "p-each-series": "^2.1.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/environment": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", + "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", + "dev": true, + "requires": { + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2" + } + }, + "@jest/fake-timers": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", + "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@sinonjs/fake-timers": "^6.0.1", + "@types/node": "*", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + } + }, + "@jest/globals": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", + "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", + "dev": true, + "requires": { + "@jest/environment": "^26.6.2", + "@jest/types": "^26.6.2", + "expect": "^26.6.2" + } + }, + "@jest/reporters": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", + "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "node-notifier": "^8.0.0", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/source-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", + "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/test-result": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", + "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", + "dev": true, + "requires": { + "@jest/test-result": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3" + } + }, + "@jest/transform": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", + "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^26.6.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@mendix/pluggable-widgets-tools": { + "version": "9.5.4", + "resolved": "https://registry.npmjs.org/@mendix/pluggable-widgets-tools/-/pluggable-widgets-tools-9.5.4.tgz", + "integrity": "sha512-FMKBdLkR2aisE3Ip+i5nL0392nZYsY6wcluga4uHuyF820tN1HJLcp9VVVtWtsvs6s807NW7Pf2f1wzlLJNmIg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.1", + "@rollup/plugin-alias": "^3.1.5", + "@rollup/plugin-babel": "^5.3.0", + "@rollup/plugin-commonjs": "^20.0.0", + "@rollup/plugin-image": "^2.1.0", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-node-resolve": "^13.0.4", + "@rollup/plugin-typescript": "^8.2.5", + "@rollup/plugin-url": "^6.1.0", + "@testing-library/dom": "^8.1.0", + "@testing-library/jest-dom": "^5.14.1", + "@testing-library/react": "^12.0.0", + "@testing-library/user-event": "^13.2.1", + "@types/testing-library__jest-dom": "^5.14.1", + "@typescript-eslint/eslint-plugin": "^4.15.2", + "@typescript-eslint/parser": "^4.15.2", + "@wdio/cli": "^7.5.3", + "@wdio/jasmine-framework": "^7.5.3", + "@wdio/local-runner": "^7.5.5", + "@wdio/selenium-standalone-service": "^7.5.3", + "@wdio/spec-reporter": "^7.5.3", + "@wdio/sync": "^7.5.3", + "@wojtekmaj/enzyme-adapter-react-17": "^0.6.3", + "babel-eslint": "^10.1.0", + "babel-jest": "^26.6.1", + "big.js": "^6.0.2", + "colors": "^1.4.0", + "concurrently": "^5.3.0", + "core-js": "^3.6.5", + "dotenv": "^8.2.0", + "enzyme": "^3.11.0", + "enzyme-to-json": "^3.6.1", + "eslint": "^7.20.0", + "eslint-config-prettier": "^8.0.0", + "eslint-plugin-jest": "^24.1.5", + "eslint-plugin-prettier": "^3.3.1", + "eslint-plugin-promise": "^4.3.1", + "eslint-plugin-react": "^7.22.0", + "eslint-plugin-react-hooks": "^4.2.0", + "fast-glob": "^2.2.7", + "find-free-port": "^2.0.0", + "fs-extra": "^9.0.1", + "identity-obj-proxy": "^3.0.0", + "jasmine": "^3.6.2", + "jasmine-core": "^3.6.0", + "jest": "^26.6.1", + "jest-junit": "^12.0.0", + "jest-react-hooks-shallow": "^1.4.1", + "jest-svg-transformer": "^1.0.0", + "mendix": "^9.5.25874", + "metro-react-native-babel-preset": "~0.63.0", + "node-fetch": "^2.6.1", + "postcss": "^8.1.10", + "postcss-url": "^10.1.0", + "prettier": "^2.2.1", + "react": "~17.0.1", + "react-dom": "~17.0.1", + "react-hot-loader": "^4.13.0", + "react-native": "0.63.3", + "react-test-renderer": "~17.0.1", + "recursive-copy": "^2.0.11", + "resolve": "^1.19.0", + "rollup": "^2.56.2", + "rollup-plugin-clear": "^2.0.7", + "rollup-plugin-command": "^1.1.3", + "rollup-plugin-livereload": "^2.0.0", + "rollup-plugin-re": "^1.0.7", + "rollup-plugin-sass": "^1.2.6", + "rollup-plugin-terser": "^7.0.2", + "semver": "^7.3.2", + "shelljs": "^0.8.4", + "ts-jest": "^26.4.3", + "ts-node": "^9.0.0", + "typescript": "~4.3.5", + "webdriverio": "^7.5.3", + "xml2js": "^0.4.23", + "zip-a-folder": "^0.0.12" + }, + "dependencies": { + "@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + } + }, + "@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "13.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", + "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@wojtekmaj/enzyme-adapter-react-17": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@wojtekmaj/enzyme-adapter-react-17/-/enzyme-adapter-react-17-0.6.3.tgz", + "integrity": "sha512-Kp1ZJxtHkKEnUksaWrcMABNTOgL4wOt8VI6k2xOek2aH9PtZcWRXJNUEgnKrdJrqg5UqIjRslbVF9uUqwQJtFg==", + "dev": true, + "requires": { + "@wojtekmaj/enzyme-adapter-utils": "^0.1.1", + "enzyme-shallow-equal": "^1.0.0", + "has": "^1.0.0", + "object.assign": "^4.1.0", + "object.values": "^1.1.0", + "prop-types": "^15.7.0", + "react-is": "^17.0.2", + "react-test-renderer": "^17.0.0" + } + }, + "@wojtekmaj/enzyme-adapter-utils": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@wojtekmaj/enzyme-adapter-utils/-/enzyme-adapter-utils-0.1.1.tgz", + "integrity": "sha512-bNPWtN/d8huKOkC6j1E3EkSamnRrHHT7YuR6f9JppAQqtoAm3v4/vERe4J14jQKmHLCyEBHXrlgb7H6l817hVg==", + "dev": true, + "requires": { + "function.prototype.name": "^1.1.0", + "has": "^1.0.0", + "object.assign": "^4.1.0", + "object.fromentries": "^2.0.0", + "prop-types": "^15.7.0" + } + }, + "ansi-escapes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz", + "integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=", + "dev": true + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "big.js": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.1.1.tgz", + "integrity": "sha512-1vObw81a8ylZO5ePrtMay0n018TcftpTA5HFKDaSuiUDBo8biRBtjIobw60OpwuvrGk+FsxKamqN4cnmj/eXdg==", + "dev": true + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + } + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "deepmerge": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", + "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==", + "dev": true + }, + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "inquirer": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.1.1.tgz", + "integrity": "sha512-H50sHQwgvvaTBd3HpKMVtL/u6LoHDvYym51gd7bGQe/+9HkCE+J0/3N5FJLfd6O6oz44hHewC2Pc2LodzWVafQ==", + "dev": true, + "requires": { + "ansi-escapes": "^2.0.0", + "chalk": "^1.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.0.0", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "pretty-format": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + } + } + }, + "promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "dev": true, + "requires": { + "asap": "~2.0.6" + } + }, + "react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "react-native": { + "version": "0.63.3", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.63.3.tgz", + "integrity": "sha512-71wq13uNo5W8QVQnFlnzZ3AD+XgUBYGhpsxysQFW/hJ8GAt/J5o+Bvhy81FXichp6IBDJDh/JgfHH2gNji8dFA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@react-native-community/cli": "^4.10.0", + "@react-native-community/cli-platform-android": "^4.10.0", + "@react-native-community/cli-platform-ios": "^4.10.0", + "abort-controller": "^3.0.0", + "anser": "^1.4.9", + "base64-js": "^1.1.2", + "event-target-shim": "^5.0.1", + "fbjs": "^1.0.0", + "fbjs-scripts": "^1.1.0", + "hermes-engine": "~0.5.0", + "invariant": "^2.2.4", + "jsc-android": "^245459.0.0", + "metro-babel-register": "0.59.0", + "metro-react-native-babel-transformer": "0.59.0", + "metro-source-map": "0.59.0", + "nullthrows": "^1.1.1", + "pretty-format": "^24.9.0", + "promise": "^8.0.3", + "prop-types": "^15.7.2", + "react-devtools-core": "^4.6.0", + "react-refresh": "^0.4.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "0.19.1", + "stacktrace-parser": "^0.1.3", + "use-subscription": "^1.0.0", + "whatwg-fetch": "^3.0.0" + }, + "dependencies": { + "@jest/types": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", + "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0" + } + }, + "@react-native-community/cli": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-4.14.0.tgz", + "integrity": "sha512-EYJKBuxFxAu/iwNUfwDq41FjORpvSh1wvQ3qsHjzcR5uaGlWEOJrd3uNJDuKBAS0TVvbEesLF9NEXipjyRVr4Q==", + "dev": true, + "requires": { + "@hapi/joi": "^15.0.3", + "@react-native-community/cli-debugger-ui": "^4.13.1", + "@react-native-community/cli-hermes": "^4.13.0", + "@react-native-community/cli-server-api": "^4.13.1", + "@react-native-community/cli-tools": "^4.13.0", + "@react-native-community/cli-types": "^4.10.1", + "chalk": "^3.0.0", + "command-exists": "^1.2.8", + "commander": "^2.19.0", + "cosmiconfig": "^5.1.0", + "deepmerge": "^3.2.0", + "envinfo": "^7.7.2", + "execa": "^1.0.0", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0", + "glob": "^7.1.3", + "graceful-fs": "^4.1.3", + "inquirer": "^3.0.6", + "leven": "^3.1.0", + "lodash": "^4.17.15", + "metro": "^0.59.0", + "metro-config": "^0.59.0", + "metro-core": "^0.59.0", + "metro-react-native-babel-transformer": "^0.59.0", + "metro-resolver": "^0.59.0", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "node-stream-zip": "^1.9.1", + "ora": "^3.4.0", + "pretty-format": "^25.2.0", + "semver": "^6.3.0", + "serve-static": "^1.13.1", + "strip-ansi": "^5.2.0", + "sudo-prompt": "^9.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "pretty-format": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", + "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", + "dev": true, + "requires": { + "@jest/types": "^25.5.0", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.12.0" + } + } + } + }, + "@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "react-native": { + "version": "0.63.4", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.63.4.tgz", + "integrity": "sha512-I4kM8kYO2mWEYUFITMcpRulcy4/jd+j9T6PbIzR0FuMcz/xwd+JwHoLPa1HmCesvR1RDOw9o4D+OFLwuXXfmGw==", + "dev": true, + "peer": true, + "requires": { + "@babel/runtime": "^7.0.0", + "@react-native-community/cli": "^4.10.0", + "@react-native-community/cli-platform-android": "^4.10.0", + "@react-native-community/cli-platform-ios": "^4.10.0", + "abort-controller": "^3.0.0", + "anser": "^1.4.9", + "base64-js": "^1.1.2", + "event-target-shim": "^5.0.1", + "fbjs": "^1.0.0", + "fbjs-scripts": "^1.1.0", + "hermes-engine": "~0.5.0", + "invariant": "^2.2.4", + "jsc-android": "^245459.0.0", + "metro-babel-register": "0.59.0", + "metro-react-native-babel-transformer": "0.59.0", + "metro-source-map": "0.59.0", + "nullthrows": "^1.1.1", + "pretty-format": "^24.9.0", + "promise": "^8.0.3", + "prop-types": "^15.7.2", + "react-devtools-core": "^4.6.0", + "react-refresh": "^0.4.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "0.19.1", + "stacktrace-parser": "^0.1.3", + "use-subscription": "^1.0.0", + "whatwg-fetch": "^3.0.0" + } + }, + "scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "use-subscription": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/use-subscription/-/use-subscription-1.5.1.tgz", + "integrity": "sha512-Xv2a1P/yReAjAbhylMfFplFKj9GssgTwN7RlcTxBujFQcloStWNDQdc4g4NRWH9xS4i/FDk04vQBptAXoF3VcA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1" + } + } + } + }, + "react-test-renderer": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.2.tgz", + "integrity": "sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "react-is": "^17.0.2", + "react-shallow-renderer": "^16.13.1", + "scheduler": "^0.20.2" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "string-width": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.0.0.tgz", + "integrity": "sha1-Y1xUNsxypuDDh87KJ41OLuxSaH4=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + } + } + }, + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@popperjs/core": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.9.1.tgz", + "integrity": "sha512-DvJbbn3dUgMxDnJLH+RZQPnXak1h4ZVYQ7CWiFWjQwBFkVajT4rfw2PdpHLTSTwxrYfnoEXkuBiwkDm6tPMQeA==" + }, + "@react-native-community/cli-debugger-ui": { + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-4.13.1.tgz", + "integrity": "sha512-UFnkg5RTq3s2X15fSkrWY9+5BKOFjihNSnJjTV2H5PtTUFbd55qnxxPw8CxSfK0bXb1IrSvCESprk2LEpqr5cg==", + "dev": true, + "requires": { + "serve-static": "^1.13.1" + } + }, + "@react-native-community/cli-hermes": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-hermes/-/cli-hermes-4.13.0.tgz", + "integrity": "sha512-oG+w0Uby6rSGsUkJGLvMQctZ5eVRLLfhf84lLyz942OEDxFRa9U19YJxOe9FmgCKtotbYiM3P/XhK+SVCuerPQ==", + "dev": true, + "requires": { + "@react-native-community/cli-platform-android": "^4.13.0", + "@react-native-community/cli-tools": "^4.13.0", + "chalk": "^3.0.0", + "hermes-profile-transformer": "^0.0.6", + "ip": "^1.1.5" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@react-native-community/cli-platform-android": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-4.13.0.tgz", + "integrity": "sha512-3i8sX8GklEytUZwPnojuoFbCjIRzMugCdzDIdZ9UNmi/OhD4/8mLGO0dgXfT4sMWjZwu3qjy45sFfk2zOAgHbA==", + "dev": true, + "requires": { + "@react-native-community/cli-tools": "^4.13.0", + "chalk": "^3.0.0", + "execa": "^1.0.0", + "fs-extra": "^8.1.0", + "glob": "^7.1.3", + "jetifier": "^1.6.2", + "lodash": "^4.17.15", + "logkitty": "^0.7.1", + "slash": "^3.0.0", + "xmldoc": "^1.1.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@react-native-community/cli-platform-ios": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-ios/-/cli-platform-ios-4.13.0.tgz", + "integrity": "sha512-6THlTu8zp62efkzimfGr3VIuQJ2514o+vScZERJCV1xgEi8XtV7mb/ZKt9o6Y9WGxKKkc0E0b/aVAtgy+L27CA==", + "dev": true, + "requires": { + "@react-native-community/cli-tools": "^4.13.0", + "chalk": "^3.0.0", + "glob": "^7.1.3", + "js-yaml": "^3.13.1", + "lodash": "^4.17.15", + "plist": "^3.0.1", + "xcode": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@react-native-community/cli-server-api": { + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-4.13.1.tgz", + "integrity": "sha512-vQzsFKD9CjHthA2ehTQX8c7uIzlI9A7ejaIow1I9RlEnLraPH2QqVDmzIdbdh5Od47UPbRzamCgAP8Bnqv3qwQ==", + "dev": true, + "requires": { + "@react-native-community/cli-debugger-ui": "^4.13.1", + "@react-native-community/cli-tools": "^4.13.0", + "compression": "^1.7.1", + "connect": "^3.6.5", + "errorhandler": "^1.5.0", + "nocache": "^2.1.0", + "pretty-format": "^25.1.0", + "serve-static": "^1.13.1", + "ws": "^1.1.0" + }, + "dependencies": { + "@jest/types": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", + "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^15.0.0", + "chalk": "^3.0.0" + } + }, + "@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "pretty-format": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", + "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", + "dev": true, + "requires": { + "@jest/types": "^25.5.0", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^16.12.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "dev": true, + "requires": { + "options": ">=0.0.5", + "ultron": "1.0.x" + } + } + } + }, + "@react-native-community/cli-tools": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-4.13.0.tgz", + "integrity": "sha512-s4f489h5+EJksn4CfheLgv5PGOM0CDmK1UEBLw2t/ncWs3cW2VI7vXzndcd/WJHTv3GntJhXDcJMuL+Z2IAOgg==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "lodash": "^4.17.15", + "mime": "^2.4.1", + "node-fetch": "^2.6.0", + "open": "^6.2.0", + "shell-quote": "1.6.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@react-native-community/cli-types": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@react-native-community/cli-types/-/cli-types-4.10.1.tgz", + "integrity": "sha512-ael2f1onoPF3vF7YqHGWy7NnafzGu+yp88BbFbP0ydoCP2xGSUzmZVw0zakPTC040Id+JQ9WeFczujMkDy6jYQ==", + "dev": true + }, + "@rollup/plugin-alias": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-3.1.8.tgz", + "integrity": "sha512-tf7HeSs/06wO2LPqKNY3Ckbvy0JRe7Jyn98bXnt/gfrxbe+AJucoNJlsEVi9sdgbQtXemjbakCpO/76JVgnHpA==", + "dev": true, + "requires": { + "slash": "^3.0.0" + } + }, + "@rollup/plugin-babel": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz", + "integrity": "sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + } + }, + "@rollup/plugin-commonjs": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz", + "integrity": "sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + } + }, + "@rollup/plugin-image": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-image/-/plugin-image-2.1.1.tgz", + "integrity": "sha512-AgP4U85zuQJdUopLUCM+hTf45RepgXeTb8EJsleExVy99dIoYpt3ZlDYJdKmAc2KLkNntCDg6BPJvgJU3uGF+g==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "mini-svg-data-uri": "^1.2.3" + } + }, + "@rollup/plugin-json": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", + "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.8" + } + }, + "@rollup/plugin-node-resolve": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.6.tgz", + "integrity": "sha512-sFsPDMPd4gMqnh2gS0uIxELnoRUp5kBl5knxD2EO0778G1oOJv4G1vyT2cpWz75OU2jDVcXhjVUuTAczGyFNKA==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/plugin-typescript": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-8.3.0.tgz", + "integrity": "sha512-I5FpSvLbtAdwJ+naznv+B4sjXZUcIvLLceYpITAn7wAP8W0wqc5noLdGIp9HGVntNhRWXctwPYrSSFQxtl0FPA==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "resolve": "^1.17.0" + } + }, + "@rollup/plugin-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-url/-/plugin-url-6.1.0.tgz", + "integrity": "sha512-FJNWBnBB7nLzbcaGmu1no+U/LlRR67TtgfRFP+VEKSrWlDTE6n9jMns/N4Q/VL6l4x6kTHQX4HQfwTcldaAfHQ==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "make-dir": "^3.1.0", + "mime": "^2.4.6" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + } + } + }, + "@sindresorhus/is": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.2.0.tgz", + "integrity": "sha512-VkE3KLBmJwcCaVARtQpfuKcKv8gcBmUubrfHGF84dXuuW6jgsRYxPtzcIhPyK9WAPpRt2/xY6zkD9MnRaJzSyw==", + "dev": true + }, + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "requires": { + "defer-to-connect": "^2.0.0" + } + }, + "@testing-library/dom": { + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.10.1.tgz", + "integrity": "sha512-rab7vpf1uGig5efWwsCOn9j4/doy+W3VBoUyzX7C4y77u0wAckwc7R8nyH6e2rw0rRzKJR+gWPiAg8zhiFbxWQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^4.2.0", + "aria-query": "^5.0.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.4.4", + "pretty-format": "^27.0.2" + }, + "dependencies": { + "@jest/types": { + "version": "27.2.5", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.5.tgz", + "integrity": "sha512-nmuM4VuDtCZcY+eTpw+0nvstwReMsjPoj7ZR80/BbixulhLaiX+fbv8oeLW8WZlJMcsGQsTmMKT/iTZu1Uy/lQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "pretty-format": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.3.1.tgz", + "integrity": "sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==", + "dev": true, + "requires": { + "@jest/types": "^27.2.5", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@testing-library/jest-dom": { + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.14.1.tgz", + "integrity": "sha512-dfB7HVIgTNCxH22M1+KU6viG5of2ldoA5ly8Ar8xkezKHKXjRvznCdbMbqjYGgO2xjRbwnR+rR8MLUIqF3kKbQ==", + "dev": true, + "requires": { + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^4.2.2", + "chalk": "^3.0.0", + "css": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@testing-library/react": { + "version": "12.1.2", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-12.1.2.tgz", + "integrity": "sha512-ihQiEOklNyHIpo2Y8FREkyD1QAea054U0MVbwH1m8N9TxeFz+KoJ9LkqoKqJlzx2JDm56DVwaJ1r36JYxZM05g==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^8.0.0" + } + }, + "@testing-library/user-event": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", + "integrity": "sha512-5Kwtbo3Y/NowpkbRuSepbyMFkZmHgD+vPzYB/RJ4oxt5Gj/avFFBYjhw27cqSVPVw/3a67NK1PbiIr9k4Gwmdg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.12.5" + } + }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, + "@types/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", + "dev": true + }, + "@types/babel__core": { + "version": "7.1.16", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.16.tgz", + "integrity": "sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", + "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/big.js": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@types/big.js/-/big.js-6.1.2.tgz", + "integrity": "sha512-h24JIZ52rvSvi2jkpYDk2yLH99VzZoCJiSfDWwjst7TwJVuXN61XVCUlPCzRl7mxKEMsGf8z42Q+J4TZwU3z2w==", + "dev": true + }, + "@types/cacheable-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "dev": true, + "requires": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" + } + }, + "@types/cheerio": { + "version": "0.22.30", + "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.30.tgz", + "integrity": "sha512-t7ZVArWZlq3dFa9Yt33qFBQIK4CQd1Q3UJp0V+UhP6vgLWLM6Qug7vZuRSGXg45zXeB1Fm5X2vmBkEX58LV2Tw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/d3": { + "version": "3.5.46", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-3.5.46.tgz", + "integrity": "sha512-jNHfiGd41+JUV43LTMzQNidyp4Hn0XfhoSmy8baE0d/N5pGYpD+yX03JacY/MH+smFxYOQGXlz4HxkRZOuRNOQ==" + }, + "@types/d3-cloud": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/d3-cloud/-/d3-cloud-1.2.5.tgz", + "integrity": "sha512-vEIER9DsEBUOdpRiwCh3n1qE+cV6h4e1LhxhY2sLt+m8LPNAIkOOhTlqk0JDiBwD+ZPM8ynFAOU3AuPuVYBFBA==", + "requires": { + "@types/d3": "^3" + } + }, + "@types/diff": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/diff/-/diff-5.0.1.tgz", + "integrity": "sha512-XIpxU6Qdvp1ZE6Kr3yrkv1qgUab0fyf4mHYvW8N3Bx3PCsbN6or1q9/q72cv5jIFWolaGH08U9XyYoLLIykyKQ==", + "dev": true + }, + "@types/easy-table": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/easy-table/-/easy-table-0.0.33.tgz", + "integrity": "sha512-/vvqcJPmZUfQwCgemL0/34G7bIQnCuvgls379ygRlcC1FqNqk3n+VZ15dAO51yl6JNDoWd8vsk+kT8zfZ1VZSw==", + "dev": true + }, + "@types/ejs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.0.tgz", + "integrity": "sha512-DCg+Ka+uDQ31lJ/UtEXVlaeV3d6t81gifaVWKJy4MYVVgvJttyX/viREy+If7fz+tK/gVxTGMtyrFPnm4gjrVA==", + "dev": true + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/fibers": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/fibers/-/fibers-3.1.1.tgz", + "integrity": "sha512-yHoUi46uika0snoTpNcVqUSvgbRndaIps4TUCotrXjtc0DHDoPQckmyXEZ2bX3e4mpJmyEW3hRhCwQa/ISCPaA==", + "dev": true + }, + "@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, + "@types/inquirer": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-8.1.3.tgz", + "integrity": "sha512-AayK4ZL5ssPzR1OtnOLGAwpT0Dda3Xi/h1G0l1oJDNrowp7T1423q4Zb8/emr7tzRlCy4ssEri0LWVexAqHyKQ==", + "dev": true, + "requires": { + "@types/through": "*", + "rxjs": "^7.2.0" + }, + "dependencies": { + "rxjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", + "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", + "dev": true, + "requires": { + "tslib": "~2.1.0" + } + }, + "tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "dev": true + } + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jasmine": { + "version": "3.6.9", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.6.9.tgz", + "integrity": "sha512-B53NIwMj/AO0O+xfSWLYmKB0Mo6TYxfv2Mk8/c1T2w/e38t55iaPR6p7pHXTTtqfTmevPK3i8T1YweYFTZlxDw==", + "dev": true + }, + "@types/jest": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.2.tgz", + "integrity": "sha512-4dRxkS/AFX0c5XW6IPMNOydLn2tEhNhJV7DnYK+0bjoJZ+QTmfucBlihX7aoEsh/ocYtkLC73UbnBXBXIxsULA==", + "dev": true, + "requires": { + "jest-diff": "^27.0.0", + "pretty-format": "^27.0.0" + }, + "dependencies": { + "@jest/types": { + "version": "27.2.5", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.5.tgz", + "integrity": "sha512-nmuM4VuDtCZcY+eTpw+0nvstwReMsjPoj7ZR80/BbixulhLaiX+fbv8oeLW8WZlJMcsGQsTmMKT/iTZu1Uy/lQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "diff-sequences": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", + "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jest-diff": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.3.1.tgz", + "integrity": "sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^27.0.6", + "jest-get-type": "^27.3.1", + "pretty-format": "^27.3.1" + } + }, + "jest-get-type": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.3.1.tgz", + "integrity": "sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg==", + "dev": true + }, + "pretty-format": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.3.1.tgz", + "integrity": "sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==", + "dev": true, + "requires": { + "@jest/types": "^27.2.5", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true + }, + "@types/keyv": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", + "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/lodash": { + "version": "4.14.175", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.175.tgz", + "integrity": "sha512-XmdEOrKQ8a1Y/yxQFOMbC47G/V2VDO1GvMRnl4O75M4GW/abC5tnfzadQYkqEveqRM1dEJGFFegfPNA2vvx2iw==", + "dev": true + }, + "@types/lodash.flattendeep": { + "version": "4.4.6", + "resolved": "https://registry.npmjs.org/@types/lodash.flattendeep/-/lodash.flattendeep-4.4.6.tgz", + "integrity": "sha512-uLm2MaRVlqJSGsMK0RZpP5T3KqReq+9WbYDHCUhBhp98v56hMG/Yht52bsoTSui9xz2mUvQ9NfG3LrNGDL92Ng==", + "dev": true, + "requires": { + "@types/lodash": "*" + } + }, + "@types/lodash.pickby": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/@types/lodash.pickby/-/lodash.pickby-4.6.6.tgz", + "integrity": "sha512-NFa13XxlMd9eFi0UFZFWIztpMpXhozbijrx3Yb1viYZphT7jyopIFVoIRF4eYMjruWNEG1rnyrRmg/8ej9T8Iw==", + "dev": true, + "requires": { + "@types/lodash": "*" + } + }, + "@types/lodash.union": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/@types/lodash.union/-/lodash.union-4.6.6.tgz", + "integrity": "sha512-Wu0ZEVNcyCz8eAn6TlUbYWZoGbH9E+iOHxAZbwUoCEXdUiy6qpcz5o44mMXViM4vlPLLCPlkAubEP1gokoSZaw==", + "dev": true, + "requires": { + "@types/lodash": "*" + } + }, + "@types/node": { + "version": "16.10.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.9.tgz", + "integrity": "sha512-H9ReOt+yqIJPCutkTYjFjlyK6WEMQYT9hLZMlWtOjFQY2ItppsWZ6RJf8Aw+jz5qTYceuHvFgPIaKOHtLAEWBw==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "@types/object-inspect": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@types/object-inspect/-/object-inspect-1.8.1.tgz", + "integrity": "sha512-0JTdf3CGV0oWzE6Wa40Ayv2e2GhpP3pEJMcrlM74vBSJPuuNkVwfDnl0SZxyFCXETcB4oKA/MpTVfuYSMOelBg==", + "dev": true + }, + "@types/prettier": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-Fo79ojj3vdEZOHg3wR9ksAMRz4P3S5fDB5e/YWZiFnyFQI1WY2Vftu9XoXVVtJfxB7Bpce/QTqWSSntkz2Znrw==", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.4", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", + "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==", + "dev": true + }, + "@types/puppeteer": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-5.4.4.tgz", + "integrity": "sha512-3Nau+qi69CN55VwZb0ATtdUAlYlqOOQ3OfQfq0Hqgc4JMFXiQT/XInlwQ9g6LbicDslE6loIFsXFklGh5XmI6Q==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/react": { + "version": "17.0.30", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.30.tgz", + "integrity": "sha512-3Dt/A8gd3TCXi2aRe84y7cK1K8G+N9CZRDG8kDGguOKa0kf/ZkSwTmVIDPsm/KbQOVMaDJXwhBtuOXxqwdpWVg==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-native": { + "version": "0.64.16", + "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.64.16.tgz", + "integrity": "sha512-5XMYf+QfYICgvDtLI5xBxNHcApuIOhfKqLiLWeBVusgLYCIVSzlaCWUgbSsn39IXsVDPMFJQ1g/AIFWwg6PxBA==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/recursive-readdir": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@types/recursive-readdir/-/recursive-readdir-2.2.0.tgz", + "integrity": "sha512-HGk753KRu2N4mWduovY4BLjYq4jTOL29gV2OfGdGxHcPSWGFkC5RRIdk+VTs5XmYd7MVAD+JwKrcb5+5Y7FOCg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "@types/selenium-standalone": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@types/selenium-standalone/-/selenium-standalone-7.0.1.tgz", + "integrity": "sha512-zbKenL0fAXzPyiOaaFMrvFdMNhj5BgNJQq8bxiZfwQD9ID2J8bUG5xbcS3tQtlzIX/62z9nG5Vo45oaHWTbvbw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "@types/stream-buffers": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/stream-buffers/-/stream-buffers-3.0.4.tgz", + "integrity": "sha512-qU/K1tb2yUdhXkLIATzsIPwbtX6BpZk0l3dPW6xqWyhfzzM1ECaQ/8faEnu3CNraLiQ9LHyQQPBGp7N9Fbs25w==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-dPWnWsf+kzIG140B8z2w3fr5D03TLWbOAFQl45xUpI3vcizeXriNR5VYkWZ+WTMsUHqZ9Xlt3hrxGNANFyNQfw==", + "dev": true + }, + "@types/testing-library__jest-dom": { + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.1.tgz", + "integrity": "sha512-Gk9vaXfbzc5zCXI9eYE9BI5BNHEp4D3FWjgqBE/ePGYElLAP+KvxBcsdkwfIVvezs605oiyd/VrpiHe3Oeg+Aw==", + "dev": true, + "requires": { + "@types/jest": "*" + } + }, + "@types/through": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz", + "integrity": "sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/which": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/which/-/which-1.3.2.tgz", + "integrity": "sha512-8oDqyLC7eD4HM307boe2QWKyuzdzWBj56xI/imSl2cpL+U3tCMaTAkMJ4ee5JBZ/FsOJlvRGeIShiZDAl1qERA==", + "dev": true + }, + "@types/yargs": { + "version": "15.0.14", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", + "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "20.2.1", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", + "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "dev": true + }, + "@types/yauzl": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.2.tgz", + "integrity": "sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", + "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.33.0", + "@typescript-eslint/scope-manager": "4.33.0", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", + "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", + "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "debug": "^4.3.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", + "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + } + }, + "@typescript-eslint/types": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", + "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", + "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", + "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "@wdio/cli": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-7.14.1.tgz", + "integrity": "sha512-ydFsNlimP9W77NXRAYCn8xVtnS7/08UcaQT0iH0iCaaw+h9JJH4IIFhzIcPojG78g1ojEfBsQOqvD54elJpwzw==", + "dev": true, + "requires": { + "@types/ejs": "^3.0.5", + "@types/fs-extra": "^9.0.4", + "@types/inquirer": "^8.1.2", + "@types/lodash.flattendeep": "^4.4.6", + "@types/lodash.pickby": "^4.6.6", + "@types/lodash.union": "^4.6.6", + "@types/node": "^15.12.5", + "@types/recursive-readdir": "^2.2.0", + "@wdio/config": "7.14.1", + "@wdio/logger": "7.7.0", + "@wdio/types": "7.14.1", + "@wdio/utils": "7.14.1", + "async-exit-hook": "^2.0.1", + "chalk": "^4.0.0", + "chokidar": "^3.0.0", + "cli-spinners": "^2.1.0", + "ejs": "^3.0.1", + "fs-extra": "^10.0.0", + "inquirer": "8.1.5", + "lodash.flattendeep": "^4.4.0", + "lodash.pickby": "^4.6.0", + "lodash.union": "^4.6.0", + "mkdirp": "^1.0.4", + "recursive-readdir": "^2.2.2", + "webdriverio": "7.14.1", + "yargs": "^17.0.0", + "yarn-install": "^1.0.0" + }, + "dependencies": { + "@types/node": { + "version": "15.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz", + "integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "17.2.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz", + "integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + } + } + }, + "@wdio/config": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-7.14.1.tgz", + "integrity": "sha512-Moa5ea/0so50OX+xm4sX9ty9vbVcIowSnm/SINayzg+waAAVbjHi10hZke8TaTsQ/kmZGeJv6Qjq8PTOZeaNCw==", + "dev": true, + "requires": { + "@wdio/logger": "7.7.0", + "@wdio/types": "7.14.1", + "deepmerge": "^4.0.0", + "glob": "^7.1.2" + } + }, + "@wdio/jasmine-framework": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@wdio/jasmine-framework/-/jasmine-framework-7.14.1.tgz", + "integrity": "sha512-+IgAhy+aznd3uaLSVs3axG12ondeU80blBvVwk8eVJyK6VhOrAp9T7F9zMgYUyskFuzR7B3upaEVbiKlEUAn3A==", + "dev": true, + "requires": { + "@types/jasmine": "3.6.9", + "@types/node": "^15.12.5", + "@wdio/logger": "7.7.0", + "@wdio/types": "7.14.1", + "@wdio/utils": "7.14.1", + "expect-webdriverio": "^3.0.0", + "jasmine": "3.9.0" + }, + "dependencies": { + "@types/node": { + "version": "15.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz", + "integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==", + "dev": true + }, + "jasmine": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.9.0.tgz", + "integrity": "sha512-JgtzteG7xnqZZ51fg7N2/wiQmXon09szkALcRMTgCMX4u/m17gVJFjObnvw5FXkZOWuweHPaPRVB6DI2uN0wVA==", + "dev": true, + "requires": { + "glob": "^7.1.6", + "jasmine-core": "~3.9.0" + } + }, + "jasmine-core": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.9.0.tgz", + "integrity": "sha512-Tv3kVbPCGVrjsnHBZ38NsPU3sDOtNa0XmbG2baiyJqdb5/SPpDO6GVwJYtUryl6KB4q1Ssckwg612ES9Z0dreQ==", + "dev": true + } + } + }, + "@wdio/local-runner": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-7.14.1.tgz", + "integrity": "sha512-q/BXKN5hld1MpcABGTkurVKuNWy5GJNJvMamt0Fi5SLFDrTtndxaKFw9aciJiDqkJGCREVjYOOdMnsY+UmMKdg==", + "dev": true, + "requires": { + "@types/stream-buffers": "^3.0.3", + "@wdio/logger": "7.7.0", + "@wdio/repl": "7.14.1", + "@wdio/runner": "7.14.1", + "@wdio/types": "7.14.1", + "async-exit-hook": "^2.0.1", + "split2": "^3.2.2", + "stream-buffers": "^3.0.2" + } + }, + "@wdio/logger": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-7.7.0.tgz", + "integrity": "sha512-XX/OkC8NlvsBdhKsb9j7ZbuQtF/Vuo0xf38PXdqYtVezOrYbDuba0hPG++g/IGNuAF34ZbSi+49cvz4u5w92kQ==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "loglevel": "^1.6.0", + "loglevel-plugin-prefix": "^0.8.4", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@wdio/protocols": { + "version": "7.13.2", + "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-7.13.2.tgz", + "integrity": "sha512-GUbYbV2IjPlPhlz457nMD6C0GA9yPfVtZQAwgqaKXf9yR2cuNGHHkidWivfXJNG3zws2uFm/9I1+K9OaYIKVkQ==", + "dev": true + }, + "@wdio/repl": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-7.14.1.tgz", + "integrity": "sha512-nD1RVihoEZaQ71eMyiPWMVUct40Wf8cp9Q6PZVn4MlIatRqB+X26C98qw6Bcjzfz72nEcmfkbN3tZpf9pY4saw==", + "dev": true, + "requires": { + "@wdio/utils": "7.14.1" + } + }, + "@wdio/reporter": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-7.14.1.tgz", + "integrity": "sha512-x/rV+aTTYf0Kj4Ti/6Yq/XEiA9k3StM6EnkMhaA3S/J6TeuQ8ZHZf6T4Lu/Izafg8F25ky0yH98HxZi2b2Fw1g==", + "dev": true, + "requires": { + "@types/diff": "^5.0.0", + "@types/node": "^15.12.5", + "@types/object-inspect": "^1.8.0", + "@types/supports-color": "^8.1.0", + "@wdio/types": "7.14.1", + "diff": "^5.0.0", + "fs-extra": "^10.0.0", + "object-inspect": "^1.10.3", + "supports-color": "8.1.1" + }, + "dependencies": { + "@types/node": { + "version": "15.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz", + "integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==", + "dev": true + }, + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "@wdio/runner": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-7.14.1.tgz", + "integrity": "sha512-wMnv4yQX24/kcINUPq+OcGWAlCL5NldMi45zzt2iOuCeMNEv/Scchahr0gNZ1Mc0zubyCGDzrERYsYHmYAK3Dw==", + "dev": true, + "requires": { + "@wdio/config": "7.14.1", + "@wdio/logger": "7.7.0", + "@wdio/types": "7.14.1", + "@wdio/utils": "7.14.1", + "deepmerge": "^4.0.0", + "gaze": "^1.1.2", + "webdriver": "7.14.1", + "webdriverio": "7.14.1" + } + }, + "@wdio/selenium-standalone-service": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@wdio/selenium-standalone-service/-/selenium-standalone-service-7.14.1.tgz", + "integrity": "sha512-jciVimPFTopX/bnkU+8xPJGKFfOsqByLvXgTwJwc8jxHmK6MfkIHH8BO2Mij6FhycHvg17dH4panASDk6m10TA==", + "dev": true, + "requires": { + "@types/fs-extra": "^9.0.1", + "@types/node": "^15.12.5", + "@types/selenium-standalone": "^7.0.0", + "@wdio/config": "7.14.1", + "@wdio/logger": "7.7.0", + "@wdio/types": "7.14.1", + "fs-extra": "^10.0.0", + "selenium-standalone": "^7.0.1" + }, + "dependencies": { + "@types/node": { + "version": "15.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz", + "integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==", + "dev": true + }, + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "@wdio/spec-reporter": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-7.14.1.tgz", + "integrity": "sha512-vViWdv2ExsgyN04QZ0w+Kj1Qi03/WR2kriOJCrGmCVZFXpZKFFOscf6irLeGL6zMRy6k86mf+AwFxV6PZB9K/w==", + "dev": true, + "requires": { + "@types/easy-table": "^0.0.33", + "@wdio/reporter": "7.14.1", + "@wdio/types": "7.14.1", + "chalk": "^4.0.0", + "easy-table": "^1.1.1", + "pretty-ms": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@wdio/sync": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@wdio/sync/-/sync-7.14.1.tgz", + "integrity": "sha512-lFRgV5G9X7UqrLAVbEielbYnKiHFcaQ66Xl+Ek+EqvTLL1HfII5kt0AkjfwMcybCbDqCYaI4unzjvfYkfvyvig==", + "dev": true, + "requires": { + "@types/fibers": "^3.1.0", + "@types/puppeteer": "^5.4.0", + "@wdio/logger": "7.7.0", + "@wdio/types": "7.14.1", + "fibers": "^5.0.0", + "webdriverio": "7.14.1" + } + }, + "@wdio/types": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-7.14.1.tgz", + "integrity": "sha512-W1ctBarjFuLz7wub6wNFd3sWfaENf1+thQL2YQW/cgFuTvhyK5hhUPoP2Q1suXBDE+qs90wWwx4z8XwDC6S8OA==", + "dev": true, + "requires": { + "@types/node": "^15.12.5", + "got": "^11.8.1" + }, + "dependencies": { + "@types/node": { + "version": "15.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz", + "integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==", + "dev": true + } + } + }, + "@wdio/utils": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-7.14.1.tgz", + "integrity": "sha512-2LMjTiCccohUKGaHWpodIz9eF+5HApT4NVFJjWYqGQFAUrLaBrSocie7NW5+moYolY5dESYSNVB6qJlSdMbQlA==", + "dev": true, + "requires": { + "@wdio/logger": "7.7.0", + "@wdio/types": "7.14.1", + "p-iteration": "^1.1.8" + } + }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "absolute-path": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/absolute-path/-/absolute-path-0.0.0.tgz", + "integrity": "sha1-p4di+9rftSl76ZsV01p4Wy8JW/c=", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "anser": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", + "dev": true + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-cyan": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", + "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", + "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-fragments": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/ansi-fragments/-/ansi-fragments-0.2.1.tgz", + "integrity": "sha512-DykbNHxuXQwUDRv5ibc2b0x7uw7wmwOGLBUd5RmaQ5z8Lhx19vwvKV+FAsM5rEA6dEcHxX+/Ad5s9eF2k2bB+w==", + "dev": true, + "requires": { + "colorette": "^1.0.7", + "slice-ansi": "^2.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-red": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", + "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "dev": true + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "archiver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.0.tgz", + "integrity": "sha512-iUw+oDwK0fgNpvveEsdQ0Ase6IIKztBJU2U0E9MzszMfmVVUyv1QJhS2ITW9ZCqx8dktAxVAjWWkKehuZE8OPg==", + "dev": true, + "requires": { + "archiver-utils": "^2.1.0", + "async": "^3.2.0", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "dependencies": { + "async": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz", + "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==", + "dev": true + } + } + }, + "archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, + "requires": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-query": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", + "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", + "dev": true + }, + "array-includes": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "dev": true + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "dev": true + }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "array.prototype.filter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.1.tgz", + "integrity": "sha512-Dk3Ty7N42Odk7PjU/Ci3zT4pLj20YvuVnneG/58ICM6bt4Ij5kZaJTVQ9TSaWaIECX2sFyz4KItkVZqHNnciqw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + } + }, + "array.prototype.flat": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" + } + }, + "array.prototype.flatmap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", + "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + }, + "async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + } + }, + "babel-jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", + "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", + "dev": true, + "requires": { + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", + "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^4.0.0", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", + "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", + "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.2", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.5.tgz", + "integrity": "sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.16.2" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", + "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.2" + } + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "7.0.0-beta.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz", + "integrity": "sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==", + "dev": true + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-fbjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-3.4.0.tgz", + "integrity": "sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==", + "dev": true, + "requires": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-syntax-class-properties": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoped-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-member-expression-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-property-literals": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "babel-plugin-syntax-trailing-function-commas": "^7.0.0-beta.0" + } + }, + "babel-preset-jest": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", + "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^26.6.2", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "big-integer": { + "version": "1.6.50", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.50.tgz", + "integrity": "sha512-+O2uoQWFRo8ysZNo/rjtri2jIwjr3XfeAgRjAUADRqGG+ZITvyn8J1kvXLTaKVr3hhGXk+f23tKfdzmklVM9vQ==", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "bplist-creator": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.8.tgz", + "integrity": "sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==", + "dev": true, + "requires": { + "stream-buffers": "~2.2.0" + }, + "dependencies": { + "stream-buffers": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", + "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=", + "dev": true + } + } + }, + "bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "requires": { + "big-integer": "^1.6.44" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "browserslist": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.4.tgz", + "integrity": "sha512-Zg7RpbZpIJRW3am9Lyckue7PLytvVxxhJj1CaJVlCWENsGEAOlnlt8X0ZxGRPp7Bt9o8tIRM5SEXy4BCPMJjLQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001265", + "electron-to-chromium": "^1.3.867", + "escalade": "^3.1.1", + "node-releases": "^2.0.0", + "picocolors": "^1.0.0" + } + }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cac": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/cac/-/cac-3.0.4.tgz", + "integrity": "sha1-bSTO7Dcu/lybeYgIvH9JtHJCpO8=", + "dev": true, + "requires": { + "camelcase-keys": "^3.0.0", + "chalk": "^1.1.3", + "indent-string": "^3.0.0", + "minimist": "^1.2.0", + "read-pkg-up": "^1.0.1", + "suffix": "^0.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true + }, + "cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + }, + "dependencies": { + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + } + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-3.0.0.tgz", + "integrity": "sha1-/AxsNgNj9zd+N5O5oWvM8QcMHKQ=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + } + } + }, + "caniuse-lite": { + "version": "1.0.30001267", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001267.tgz", + "integrity": "sha512-r1mjTzAuJ9W8cPBGbbus8E0SKcUP7gn03R14Wk8FlAlqhH9hroy9nLqmpuXlfKEw/oILW+FGz47ipXV2O7x8lg==", + "dev": true + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "requires": { + "rsvp": "^4.8.4" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cheerio": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", + "dev": true, + "requires": { + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + }, + "dependencies": { + "tslib": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", + "dev": true + } + } + }, + "cheerio-select": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", + "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "css-what": "^5.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.7.0" + } + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "chrome-launcher": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.14.1.tgz", + "integrity": "sha512-iQ4s61NkIyaozsE2VKg1Vu3YGdD3JGw+fBBrt3FYJi7uflO9TvlTLW4MUq0fq3EKGhzB/QHPd5AsLb14+9++JQ==", + "dev": true, + "requires": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + } + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cjs-module-lexer": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", + "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "classnames": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", + "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true + }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "compress-commons": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", + "dev": true, + "requires": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + } + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "concurrently": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.3.0.tgz", + "integrity": "sha512-8MhqOB6PWlBfA2vJ8a0bSFKATOdWlHiQlk11IfmQBPaHVP8oP2gsh2MObE6UR3hqDHqvaIvLTyceNW6obVuFHQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "date-fns": "^2.0.1", + "lodash": "^4.17.15", + "read-pkg": "^4.0.1", + "rxjs": "^6.5.2", + "spawn-command": "^0.0.2-1", + "supports-color": "^6.1.0", + "tree-kill": "^1.2.2", + "yargs": "^13.3.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "dev": true, + "requires": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js": { + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.18.3.tgz", + "integrity": "sha512-tReEhtMReZaPFVw7dajMx0vlsz3oOb8ajgPoHVYGxr8ErnZ6PcYEvvmjGmXlfpnxpkYSdOQttjB+MvVbCGfvLw==", + "dev": true + }, + "core-js-compat": { + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.18.3.tgz", + "integrity": "sha512-4zP6/y0a2RTHN5bRGT7PTq9lVt3WzvffTNjqnTKsXhkAYNDTkdCLOIfAdOLcQ/7TDdyRj3c+NeHe1NmF1eDScw==", + "dev": true, + "requires": { + "browserslist": "^4.17.3", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-js-pure": { + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.3.tgz", + "integrity": "sha512-qfskyO/KjtbYn09bn1IPkuhHl5PlJ6IzJ9s9sraJ1EqcuGyLGKzhSM1cY0zgyL9hx42eulQLZ6WaeK5ycJCkqw==", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "dependencies": { + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "requires": { + "buffer": "^5.1.0" + } + }, + "crc-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "dev": true, + "requires": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + } + }, + "crc32-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "dev": true, + "requires": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + } + }, + "create-react-class": { + "version": "15.7.0", + "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz", + "integrity": "sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==", + "requires": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "css": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + } + } + }, + "css-select": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + } + }, + "css-shorthand-properties": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/css-shorthand-properties/-/css-shorthand-properties-1.1.1.tgz", + "integrity": "sha512-Md+Juc7M3uOdbAFwOYlTrccIZ7oCFuzrhKYQjdeUEW/sE1hv17Jp/Bws+ReOPpGVBTYCBoYo+G17V5Qo8QQ75A==", + "dev": true + }, + "css-value": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", + "integrity": "sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo=", + "dev": true + }, + "css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true + }, + "css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=", + "dev": true + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, + "csstype": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz", + "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==", + "dev": true + }, + "cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=", + "dev": true + }, + "d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "requires": { + "internmap": "^1.0.0" + } + }, + "d3-cloud": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/d3-cloud/-/d3-cloud-1.2.5.tgz", + "integrity": "sha512-4s2hXZgvs0CoUIw31oBAGrHt9Kt/7P9Ik5HIVzISFiWkD0Ga2VLAuO/emO/z1tYIpE7KG2smB4PhMPfFMJpahw==", + "requires": { + "d3-dispatch": "^1.0.3" + } + }, + "d3-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-2.0.0.tgz", + "integrity": "sha512-SPXi0TSKPD4g9tw0NMZFnR95XVgUZiBH+uUTqQuDu1OsE2zomHU7ho0FISciaPvosimixwHFl3WHLGabv6dDgQ==" + }, + "d3-dispatch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", + "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==" + }, + "d3-ease": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz", + "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==" + }, + "d3-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-2.0.0.tgz", + "integrity": "sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA==" + }, + "d3-interpolate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-2.0.1.tgz", + "integrity": "sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==", + "requires": { + "d3-color": "1 - 2" + } + }, + "d3-scale": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.2.4.tgz", + "integrity": "sha512-PG6gtpbPCFqKbvdBEswQcJcTzHC8VEd/XzezF5e68KlkT4/ggELw/nR1tv863jY6ufKTvDlzCMZvhe06codbbA==", + "requires": { + "d3-array": "^2.3.0", + "d3-format": "1 - 2", + "d3-interpolate": "1.2.0 - 2", + "d3-time": "1 - 2", + "d3-time-format": "2 - 3" + } + }, + "d3-scale-chromatic": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", + "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", + "requires": { + "d3-color": "1", + "d3-interpolate": "1" + }, + "dependencies": { + "d3-color": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", + "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" + }, + "d3-interpolate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", + "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", + "requires": { + "d3-color": "1" + } + } + } + }, + "d3-selection": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", + "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==" + }, + "d3-time": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.0.0.tgz", + "integrity": "sha512-2mvhstTFcMvwStWd9Tj3e6CEqtOivtD8AUiHT8ido/xmzrI9ijrUUihZ6nHuf/vsScRBonagOdj0Vv+SEL5G3Q==" + }, + "d3-time-format": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-3.0.0.tgz", + "integrity": "sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==", + "requires": { + "d3-time": "1 - 2" + } + }, + "d3-timer": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" + }, + "d3-transition": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz", + "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==", + "requires": { + "d3-color": "1", + "d3-dispatch": "1", + "d3-ease": "1", + "d3-interpolate": "1", + "d3-selection": "^1.1.0", + "d3-timer": "1" + }, + "dependencies": { + "d3-color": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", + "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" + }, + "d3-interpolate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", + "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", + "requires": { + "d3-color": "1" + } + } + } + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "date-fns": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.25.0.tgz", + "integrity": "sha512-ovYRFnTrbGPD4nqaEqescPEv1mNwvt+UTqI3Ay9SzNtey9NZnYu6E2qCcBBgJ6/2VF1zGGygpyTDITqpQQ5e+w==", + "dev": true + }, + "dayjs": { + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.10.7.tgz", + "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==", + "dev": true + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "requires": { + "mimic-response": "^3.1.0" + }, + "dependencies": { + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true + } + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" + }, + "dependencies": { + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "devtools": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/devtools/-/devtools-7.14.1.tgz", + "integrity": "sha512-NpGjos9SMOZeDXnlmxKBVrbxJuPqFgLDUX/g9IlMtsjUKFq+ePcDNxTr1gRLax+boinc5UoFYPEpeFUKbBzR4Q==", + "dev": true, + "requires": { + "@types/node": "^15.12.5", + "@wdio/config": "7.14.1", + "@wdio/logger": "7.7.0", + "@wdio/protocols": "7.13.2", + "@wdio/types": "7.14.1", + "@wdio/utils": "7.14.1", + "chrome-launcher": "^0.14.0", + "edge-paths": "^2.1.0", + "puppeteer-core": "^10.1.0", + "query-selector-shadow-dom": "^1.0.0", + "ua-parser-js": "^0.7.21", + "uuid": "^8.0.0" + }, + "dependencies": { + "@types/node": { + "version": "15.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz", + "integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==", + "dev": true + } + } + }, + "devtools-protocol": { + "version": "0.0.927104", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.927104.tgz", + "integrity": "sha512-5jfffjSuTOv0Lz53wTNNTcCUV8rv7d82AhYcapj28bC2B5tDxEZzVb7k51cNxZP2KHw24QE+sW7ZuSeD9NfMpA==", + "dev": true + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "diff-sequences": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "discontinuous-range": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", + "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-accessibility-api": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.9.tgz", + "integrity": "sha512-+KPF4o71fl6NrdnqIrJc6m44NA+Rhf1h7In2MRznejSQasWkjqmHOBUlk+pXJ77cVOSYyZeNHFwn/sjotB6+Sw==", + "dev": true + }, + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", + "dev": true + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true + } + } + }, + "domhandler": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", + "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true + }, + "easy-table": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz", + "integrity": "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "wcwidth": "^1.0.1" + } + }, + "edge-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/edge-paths/-/edge-paths-2.2.1.tgz", + "integrity": "sha512-AI5fC7dfDmCdKo3m5y7PkYE8m6bMqR6pvVpgtrZkkhcJXFLelUgkjrhk3kXXx8Kbw2cRaTT4LkOR7hqf39KJdw==", + "dev": true, + "requires": { + "@types/which": "^1.3.2", + "which": "^2.0.2" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "ejs": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", + "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", + "dev": true, + "requires": { + "jake": "^10.6.1" + } + }, + "electron-to-chromium": { + "version": "1.3.868", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.868.tgz", + "integrity": "sha512-kZYCHqwJ1ctGrYDlOcWQH+/AftAm/KD4lEnLDNwS0kKwx1x6dU4zv+GuDjsPPOGn/2TjnKBaZjDyjXaoix0q/A==", + "dev": true + }, + "emittery": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", + "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true + }, + "enzyme": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz", + "integrity": "sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==", + "dev": true, + "requires": { + "array.prototype.flat": "^1.2.3", + "cheerio": "^1.0.0-rc.3", + "enzyme-shallow-equal": "^1.0.1", + "function.prototype.name": "^1.1.2", + "has": "^1.0.3", + "html-element-map": "^1.2.0", + "is-boolean-object": "^1.0.1", + "is-callable": "^1.1.5", + "is-number-object": "^1.0.4", + "is-regex": "^1.0.5", + "is-string": "^1.0.5", + "is-subset": "^0.1.1", + "lodash.escape": "^4.0.1", + "lodash.isequal": "^4.5.0", + "object-inspect": "^1.7.0", + "object-is": "^1.0.2", + "object.assign": "^4.1.0", + "object.entries": "^1.1.1", + "object.values": "^1.1.1", + "raf": "^3.4.1", + "rst-selector-parser": "^2.2.3", + "string.prototype.trim": "^1.2.1" + } + }, + "enzyme-shallow-equal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.4.tgz", + "integrity": "sha512-MttIwB8kKxypwHvRynuC3ahyNc+cFbR8mjVIltnmzQ0uKGqmsfO4bfBuLxb0beLNPhjblUEYvEbsg+VSygvF1Q==", + "dev": true, + "requires": { + "has": "^1.0.3", + "object-is": "^1.1.2" + } + }, + "enzyme-to-json": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/enzyme-to-json/-/enzyme-to-json-3.6.2.tgz", + "integrity": "sha512-Ynm6Z6R6iwQ0g2g1YToz6DWhxVnt8Dy1ijR2zynRKxTyBGA8rCDXU3rs2Qc4OKvUvc2Qoe1bcFK6bnPs20TrTg==", + "dev": true, + "requires": { + "@types/cheerio": "^0.22.22", + "lodash": "^4.17.21", + "react-is": "^16.12.0" + } + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "dev": true, + "requires": { + "stackframe": "^1.1.1" + } + }, + "errorhandler": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", + "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "escape-html": "~1.0.3" + } + }, + "es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "globals": { + "version": "13.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", + "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "requires": {} + }, + "eslint-plugin-jest": { + "version": "24.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-24.7.0.tgz", + "integrity": "sha512-wUxdF2bAZiYSKBclsUMrYHH6WxiBreNjyDxbRv345TIvPeoCEgPNEn3Sa+ZrSqsf1Dl9SqqSREXMHExlMMu1DA==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "^4.0.1" + } + }, + "eslint-plugin-prettier": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", + "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-plugin-promise": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz", + "integrity": "sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==", + "dev": true + }, + "eslint-plugin-react": { + "version": "7.26.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.26.1.tgz", + "integrity": "sha512-Lug0+NOFXeOE+ORZ5pbsh6mSKjBKXDXItUD2sQoT+5Yl0eoT82DqnXeTMfUare4QVCn9QwXbfzO/dBLjLXwVjQ==", + "dev": true, + "requires": { + "array-includes": "^3.1.3", + "array.prototype.flatmap": "^1.2.4", + "doctrine": "^2.1.0", + "estraverse": "^5.2.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.4", + "object.fromentries": "^2.0.4", + "object.hasown": "^1.0.0", + "object.values": "^1.1.4", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.5" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + }, + "resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "eslint-plugin-react-hooks": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz", + "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==", + "dev": true, + "requires": {} + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true + }, + "eventemitter3": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", + "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "dev": true + }, + "exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", + "dev": true + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + } + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "expect": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", + "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "expect-webdriverio": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/expect-webdriverio/-/expect-webdriverio-3.1.4.tgz", + "integrity": "sha512-65FTS3bmxcIp0cq6fLb/72TrCQXBCpwPLC7SwMWdpPlLq461mXcK1BPKJJjnIC587aXSKD+3E4hvnlCtwDmXfg==", + "dev": true, + "requires": { + "expect": "^27.0.2", + "jest-matcher-utils": "^27.0.2" + }, + "dependencies": { + "@jest/types": { + "version": "27.2.5", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.2.5.tgz", + "integrity": "sha512-nmuM4VuDtCZcY+eTpw+0nvstwReMsjPoj7ZR80/BbixulhLaiX+fbv8oeLW8WZlJMcsGQsTmMKT/iTZu1Uy/lQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", + "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "diff-sequences": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.6.tgz", + "integrity": "sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==", + "dev": true + }, + "expect": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.3.1.tgz", + "integrity": "sha512-MrNXV2sL9iDRebWPGOGFdPQRl2eDQNu/uhxIMShjjx74T6kC6jFIkmQ6OqXDtevjGUkyB2IT56RzDBqXf/QPCg==", + "dev": true, + "requires": { + "@jest/types": "^27.2.5", + "ansi-styles": "^5.0.0", + "jest-get-type": "^27.3.1", + "jest-matcher-utils": "^27.3.1", + "jest-message-util": "^27.3.1", + "jest-regex-util": "^27.0.6" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jest-diff": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.3.1.tgz", + "integrity": "sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^27.0.6", + "jest-get-type": "^27.3.1", + "pretty-format": "^27.3.1" + } + }, + "jest-get-type": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.3.1.tgz", + "integrity": "sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg==", + "dev": true + }, + "jest-matcher-utils": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.3.1.tgz", + "integrity": "sha512-hX8N7zXS4k+8bC1Aj0OWpGb7D3gIXxYvPNK1inP5xvE4ztbz3rc4AkI6jGVaerepBnfWB17FL5lWFJT3s7qo8w==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^27.3.1", + "jest-get-type": "^27.3.1", + "pretty-format": "^27.3.1" + } + }, + "jest-message-util": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.3.1.tgz", + "integrity": "sha512-bh3JEmxsTZ/9rTm0jQrPElbY2+y48Rw2t47uMfByNyUVR+OfPh4anuyKsGqsNkXk/TI4JbLRZx+7p7Hdt6q1yg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.2.5", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.4", + "pretty-format": "^27.3.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-regex-util": { + "version": "27.0.6", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.6.tgz", + "integrity": "sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==", + "dev": true + }, + "pretty-format": { + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.3.1.tgz", + "integrity": "sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==", + "dev": true, + "requires": { + "@jest/types": "^27.2.5", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { - "@jest/console": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/istanbul-lib-coverage": "^2.0.0" + "is-descriptor": "^1.0.0" } }, - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" + "is-extendable": "^0.1.0" } }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" + "kind-of": "^6.0.0" } }, - "@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", - "dev": true + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } }, - "@types/yargs": { - "version": "13.0.11", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.11.tgz", - "integrity": "sha512-NRqD6T4gktUrDi1o1wLH3EKC1o2caCr7/wR87ODcbVITQF106OM3sFN92ysZ++wqelOd1CTzatnOBRDYYG6wGQ==", + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "@types/yargs-parser": "*" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + } + }, + "fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "dev": true, + "requires": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "lodash": "^4.17.14" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } } }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "fbjs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-1.0.0.tgz", + "integrity": "sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA==", + "dev": true, + "requires": { + "core-js": "^2.4.1", + "fbjs-css-vars": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + }, + "dependencies": { + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "dev": true + } + } + }, + "fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", + "dev": true + }, + "fbjs-scripts": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fbjs-scripts/-/fbjs-scripts-1.2.0.tgz", + "integrity": "sha512-5krZ8T0Bf8uky0abPoCLrfa7Orxd8UH4Qq8hRUF2RZYNMu+FmEOrBc7Ib3YVONmxTXTlLAvyrrdrVmksDb2OqQ==", + "dev": true, + "requires": { + "@babel/core": "^7.0.0", + "ansi-colors": "^1.0.1", + "babel-preset-fbjs": "^3.2.0", + "core-js": "^2.4.1", + "cross-spawn": "^5.1.0", + "fancy-log": "^1.3.2", + "object-assign": "^4.0.1", + "plugin-error": "^0.1.2", + "semver": "^5.1.0", + "through2": "^2.0.0" + }, + "dependencies": { + "ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } + "ansi-wrap": "^0.1.0" } }, + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "dev": true + }, "cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", @@ -12679,2761 +31443,4051 @@ "which": "^1.2.9" } }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "locate-path": "^2.0.0" + "shebang-regex": "^1.0.0" } }, - "fs-extra": { + "shebang-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", - "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "fibers": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fibers/-/fibers-5.0.0.tgz", + "integrity": "sha512-UpGv/YAZp7mhKHxDvC1tColrroGRX90sSvh8RMZV9leo+e5+EkRVgCEZPlmXeo3BUNQTZxUaVdLskq1Q2FyCPg==", + "dev": true, + "requires": { + "detect-libc": "^1.0.3" + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "filelist": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", + "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0" + "ms": "2.0.0" } }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true - }, - "get-stream": { + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "dependencies": { + "find-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "locate-path": "^3.0.0" } }, - "jest-haste-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", - "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "@jest/types": "^24.9.0", - "anymatch": "^2.0.0", - "fb-watchman": "^2.0.0", - "fsevents": "^1.2.7", - "graceful-fs": "^4.1.15", - "invariant": "^2.2.4", - "jest-serializer": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.9.0", - "micromatch": "^3.1.10", - "sane": "^4.0.3", - "walker": "^1.0.7" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, - "jest-message-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", - "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^2.0.1", - "micromatch": "^3.1.10", - "slash": "^2.0.0", - "stack-utils": "^1.0.1" + "pify": "^4.0.1", + "semver": "^5.6.0" } }, - "jest-mock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", - "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "@jest/types": "^24.9.0" + "p-limit": "^2.0.0" } }, - "jest-serializer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", - "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, - "jest-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", - "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", - "dev": true, - "requires": { - "@jest/console": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/source-map": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "callsites": "^3.0.0", - "chalk": "^2.0.1", - "graceful-fs": "^4.1.15", - "is-ci": "^2.0.0", - "mkdirp": "^0.5.1", - "slash": "^2.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", - "dev": true, - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - } - } + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "find-up": "^3.0.0" } }, - "load-json-file": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "find-free-port": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-free-port/-/find-free-port-2.0.0.tgz", + "integrity": "sha1-SyLl9leesaOMQaxryz7+0bbamxs=", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "functions-have-names": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.2.tgz", + "integrity": "sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA==", + "dev": true + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "requires": { + "globule": "^1.0.0" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "dev": true + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + } + } + }, + "globule": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.3.tgz", + "integrity": "sha512-mb1aYtDbIjTu4ShMB85m3UzjX9BVKe9WCzsnfMSZk+K5GpIbBOexgg4PPCt5eHDEG5/ZQAUX2Kct02zfiPLsKg==", + "dev": true, + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + }, + "dependencies": { + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } - }, - "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + } + } + }, + "got": { + "version": "11.8.2", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz", + "integrity": "sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==", + "dev": true, + "requires": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.1", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true, + "optional": true + }, + "harmony-reflect": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", + "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "readable-stream": "^2.0.1" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "metro-react-native-babel-preset": { - "version": "0.56.4", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.56.4.tgz", - "integrity": "sha512-CzbBDM9Rh6w8s1fq+ZqihAh7DDqUAcfo9pPww25+N/eJ7UK436Q7JdfxwdIPpBwLFn6o6MyYn+uwL9OEWBJarA==", + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.2.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-exponentiation-operator": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-assign": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-regenerator": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.0.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "react-refresh": "^0.4.0" + "is-buffer": "^1.1.5" } - }, - "mime-db": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.23.0.tgz", - "integrity": "sha1-oxtAcK2uon1zLqMzdApk0OyaZlk=", + } + } + }, + "hermes-engine": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/hermes-engine/-/hermes-engine-0.5.1.tgz", + "integrity": "sha512-hLwqh8dejHayjlpvZY40e1aDCDvyP98cWx/L5DhAjSJLH8g4z9Tp08D7y4+3vErDsncPOdf1bxm+zUWpx0/Fxg==", + "dev": true + }, + "hermes-profile-transformer": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/hermes-profile-transformer/-/hermes-profile-transformer-0.0.6.tgz", + "integrity": "sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==", + "dev": true, + "requires": { + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "html-element-map": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.3.1.tgz", + "integrity": "sha512-6XMlxrAFX4UEEGxctfFnmrFaaZFNf9i5fNuV5wZ3WWQ4FVaNP1aX1LkX9j2mfEx1NpjeE/rL3nmgEn23GdFmrg==", + "dev": true, + "requires": { + "array.prototype.filter": "^1.0.0", + "call-bind": "^1.0.2" + } + }, + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "http-errors": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", + "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "requires": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + } + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "identity-obj-proxy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", + "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=", + "dev": true, + "requires": { + "harmony-reflect": "^1.4.6" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "image-size": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.6.3.tgz", + "integrity": "sha512-47xSUiQioGaB96nqtp5/q55m0aBQSQdyIloMOc/x+QVTDZLNmXE892IIDrJ0hM1A5vcNUDD5tDffkSP5lCaIIA==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true - }, - "mime-types": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.11.tgz", - "integrity": "sha1-wlnEcb2oCKhdbNGTtDCl+uRHOzw=", - "dev": true, - "requires": { - "mime-db": "~1.23.0" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + } + } + }, + "import-local": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.3.tgz", + "integrity": "sha512-bE9iaUY3CXH8Cwfan/abDKAxe1KGT9kyGsBPqf6DMK/z0a2OzAsrukeYNgIH6cH5Xr452jb1TUL8rSfCLjZ9uA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "inquirer": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.1.5.tgz", + "integrity": "sha512-G6/9xUqmt/r+UvufSyrPpt84NYwhKZ9jLsgMbQzlx804XErNupor8WQdBnBRrXmBfTPpuwf1sV+ss2ovjgdXIg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.2.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" + "color-convert": "^2.0.1" } }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "p-try": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "p-limit": "^1.1.0" + "color-name": "~1.1.4" } }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "rxjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz", + "integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==", "dev": true, "requires": { - "pify": "^2.0.0" + "tslib": "~2.1.0" } }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" + "has-flag": "^4.0.0" } }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "dev": true + } + } + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" + "is-buffer": "^1.1.5" } - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz", + "integrity": "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "glob": "^7.1.3" + "is-buffer": "^1.1.5" } - }, - "serialize-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", - "integrity": "sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=", + } + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-port-reachable": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-3.1.0.tgz", + "integrity": "sha512-vjc0SSRNZ32s9SbZBzGaiP6YVB+xglLShhgZD/FHMZUXBvQWaV9CtzgeVhjccFJrI6RAMV+LX7NYxueW/A8W5A==", + "dev": true + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "requires": { + "@types/estree": "*" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-subset": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", + "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", + "dev": true + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-weakref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", + "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "dev": true, + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + }, + "dependencies": { + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "encoding": "^0.1.11", + "is-stream": "^1.0.1" } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + } + } + }, + "istanbul-lib-coverage": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.2.tgz", + "integrity": "sha512-o5+eTUYzCJ11/+JhW5/FUCdfsdoYVdQ/8I/OveE2XsjehYn5DdeSnNQAbjYaO8gQ6hvGTN6GM6ddQqpTVG5j8g==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true - }, - "stack-utils": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.4.tgz", - "integrity": "sha512-IPDJfugEGbfizBwBZRZ3xpccMdRyP5lqsBWXGQWimVjua/ccLCeMOAVjlc1R7LxFjo5sEDhyNIXd8mo/AiDS9w==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "throat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", - "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "slide": "^1.1.5" - } - }, - "ws": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", - "dev": true, - "requires": { - "options": ">=0.0.5", - "ultron": "1.0.x" - } - }, - "y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yargs": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", - "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", - "dev": true, - "requires": { - "camelcase": "^4.1.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "read-pkg-up": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^7.0.0" - } - }, - "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "camelcase": "^4.1.0" + "has-flag": "^4.0.0" } } } }, - "metro-babel-register": { - "version": "0.56.4", - "resolved": "https://registry.npmjs.org/metro-babel-register/-/metro-babel-register-0.56.4.tgz", - "integrity": "sha512-Phm6hMluOWYqfykftjJ1jsTpWvbgb49AC/1taxEctxUdRCZlFgZwBleJZAhQYxJD5J+ikFkEbHDzePEXb29KVA==", + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "requires": { - "@babel/core": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-transform-async-to-generator": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/register": "^7.0.0", - "core-js": "^2.2.2", - "escape-string-regexp": "^1.0.5" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "dependencies": { - "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, - "metro-babel-transformer": { - "version": "0.56.4", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.56.4.tgz", - "integrity": "sha512-IOi4ILgZvaX7GCGHBJp79paNVOq5QxhhbyqAdEJgDP8bHfl/OVHoVKSypfrsMSKSiBrqxhIjyc4XjkXsQtkx5g==", + "istanbul-reports": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz", + "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==", "dev": true, "requires": { - "@babel/core": "^7.0.0", - "metro-source-map": "^0.56.4" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jake": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", + "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", + "dev": true, + "requires": { + "async": "0.9.x", + "chalk": "^2.4.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + } + }, + "jasmine": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.10.0.tgz", + "integrity": "sha512-2Y42VsC+3CQCTzTwJezOvji4qLORmKIE0kwowWC+934Krn6ZXNQYljiwK5st9V3PVx96BSiDYXSB60VVah3IlQ==", + "dev": true, + "requires": { + "glob": "^7.1.6", + "jasmine-core": "~3.10.0" + } + }, + "jasmine-core": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.10.0.tgz", + "integrity": "sha512-XWGaJ25RUdOQnjGiLoQa9QG/R4u1e9Bk4uhLdn9F4JCBco84L4SKM52bxci4vWTSUzhmhuHNAkAHFN/6Cox9wQ==", + "dev": true + }, + "jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", + "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", + "dev": true, + "requires": { + "@jest/core": "^26.6.3", + "import-local": "^3.0.2", + "jest-cli": "^26.6.3" } }, - "metro-cache": { - "version": "0.56.4", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.56.4.tgz", - "integrity": "sha512-d1hiUSKwtRsuMxUhHVJ3tjK2BbpUlJGvTyMWohK8Wxx+0GbnWRWWFcI4vlCzlZfoK0VtZK2MJEl5t7Du1mIniQ==", + "jest-changed-files": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", + "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", "dev": true, "requires": { - "jest-serializer": "^24.4.0", - "metro-core": "^0.56.4", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4" + "@jest/types": "^26.6.2", + "execa": "^4.0.0", + "throat": "^5.0.0" }, "dependencies": { - "jest-serializer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", - "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, "requires": { - "minimist": "^1.2.5" + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" } }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { - "glob": "^7.1.3" + "path-key": "^3.0.0" } } } }, - "metro-config": { - "version": "0.56.4", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.56.4.tgz", - "integrity": "sha512-O85QDHwWdMn/8ERe13y4a6vbZL0AHyO8atTvL+9BCulLEO+FQBi1iJjr3+ViLa8cf0m5dRftDsa7P47m5euk4A==", + "jest-cli": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", + "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", "dev": true, "requires": { - "cosmiconfig": "^5.0.5", - "jest-validate": "^24.7.0", - "metro": "^0.56.4", - "metro-cache": "^0.56.4", - "metro-core": "^0.56.4", - "pretty-format": "^24.7.0" + "@jest/core": "^26.6.3", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^26.6.3", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "prompts": "^2.0.1", + "yargs": "^15.4.1" }, "dependencies": { - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" + "color-convert": "^2.0.1" } }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "@types/yargs": { - "version": "13.0.11", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.11.tgz", - "integrity": "sha512-NRqD6T4gktUrDi1o1wLH3EKC1o2caCr7/wR87ODcbVITQF106OM3sFN92ysZ++wqelOd1CTzatnOBRDYYG6wGQ==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "@types/yargs-parser": "*" + "color-name": "~1.1.4" } }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "jest-get-type": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", - "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "jest-validate": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", - "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "camelcase": "^5.3.1", - "chalk": "^2.0.1", - "jest-get-type": "^24.9.0", - "leven": "^3.1.0", - "pretty-format": "^24.9.0" - } - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" + "has-flag": "^4.0.0" } } } }, - "metro-core": { - "version": "0.56.4", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.56.4.tgz", - "integrity": "sha512-hMzkBdgPt5Zm9nr/1KtIT+A6H7TNiLVCEGG5OiAXj8gTRsA2yy7wAdQpwy0xbE+zi88t/pLOzXpd3ClG/YxyWg==", + "jest-config": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", + "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", "dev": true, "requires": { - "jest-haste-map": "^24.7.1", - "lodash.throttle": "^4.1.1", - "metro-resolver": "^0.56.4", - "wordwrap": "^1.0.0" + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^26.6.3", + "@jest/types": "^26.6.2", + "babel-jest": "^26.6.3", + "chalk": "^4.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^26.6.2", + "jest-environment-node": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-jasmine2": "^26.6.3", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2" }, "dependencies": { - "@jest/console": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", - "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", - "dev": true, - "requires": { - "@jest/source-map": "^24.9.0", - "chalk": "^2.0.1", - "slash": "^2.0.0" - } - }, - "@jest/fake-timers": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", - "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", - "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "jest-message-util": "^24.9.0", - "jest-mock": "^24.9.0" - } - }, - "@jest/source-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", - "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.1.15", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", - "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@jest/console": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/istanbul-lib-coverage": "^2.0.0" + "color-convert": "^2.0.1" } }, - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" + "color-name": "~1.1.4" } }, - "@types/stack-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", - "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "@types/yargs": { - "version": "13.0.11", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.11.tgz", - "integrity": "sha512-NRqD6T4gktUrDi1o1wLH3EKC1o2caCr7/wR87ODcbVITQF106OM3sFN92ysZ++wqelOd1CTzatnOBRDYYG6wGQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "optional": true - }, - "jest-haste-map": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", - "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jest-diff": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@jest/types": "^24.9.0", - "anymatch": "^2.0.0", - "fb-watchman": "^2.0.0", - "fsevents": "^1.2.7", - "graceful-fs": "^4.1.15", - "invariant": "^2.2.4", - "jest-serializer": "^24.9.0", - "jest-util": "^24.9.0", - "jest-worker": "^24.9.0", - "micromatch": "^3.1.10", - "sane": "^4.0.3", - "walker": "^1.0.7" + "color-convert": "^2.0.1" } }, - "jest-message-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", - "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "@types/stack-utils": "^1.0.1", - "chalk": "^2.0.1", - "micromatch": "^3.1.10", - "slash": "^2.0.0", - "stack-utils": "^1.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "jest-mock": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", - "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "@jest/types": "^24.9.0" + "color-name": "~1.1.4" } }, - "jest-serializer": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", - "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "jest-util": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", - "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "@jest/console": "^24.9.0", - "@jest/fake-timers": "^24.9.0", - "@jest/source-map": "^24.9.0", - "@jest/test-result": "^24.9.0", - "@jest/types": "^24.9.0", - "callsites": "^3.0.0", - "chalk": "^2.0.1", - "graceful-fs": "^4.1.15", - "is-ci": "^2.0.0", - "mkdirp": "^0.5.1", - "slash": "^2.0.0", - "source-map": "^0.6.0" + "has-flag": "^4.0.0" } - }, - "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + } + } + }, + "jest-docblock": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", + "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", + "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" + "color-convert": "^2.0.1" } }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "minimist": "^1.2.5" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "stack-utils": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.4.tgz", - "integrity": "sha512-IPDJfugEGbfizBwBZRZ3xpccMdRyP5lqsBWXGQWimVjua/ccLCeMOAVjlc1R7LxFjo5sEDhyNIXd8mo/AiDS9w==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "escape-string-regexp": "^2.0.0" + "color-name": "~1.1.4" } }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } } } }, - "metro-inspector-proxy": { - "version": "0.56.4", - "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.56.4.tgz", - "integrity": "sha512-E1S3MO25mWKmcLn1UQuCDiS0hf9P2Fwq8sEAX5lBLoZbehepNH+4xJ3xXSY51JX4dozBrE8GGoKL4ll3II40LA==", + "jest-environment-jsdom": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", + "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", "dev": true, "requires": { - "connect": "^3.6.5", - "debug": "^2.2.0", - "rxjs": "^5.4.3", - "ws": "^1.1.5", - "yargs": "^9.0.0" + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2", + "jsdom": "^16.4.0" + } + }, + "jest-environment-node": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", + "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", + "dev": true, + "requires": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + } + }, + "jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "dev": true + }, + "jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.1.2", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", + "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^26.6.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2", + "throat": "^5.0.0" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "color-convert": "^2.0.1" } }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "locate-path": "^2.0.0" + "color-name": "~1.1.4" } }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "p-limit": "^1.1.0" + "has-flag": "^4.0.0" } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + } + } + }, + "jest-junit": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-12.3.0.tgz", + "integrity": "sha512-+NmE5ogsEjFppEl90GChrk7xgz8xzvF0f+ZT5AnhW6suJC93gvQtmQjfyjDnE0Z2nXJqEkxF0WXlvjG/J+wn/g==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "strip-ansi": "^5.2.0", + "uuid": "^8.3.2", + "xml": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "pify": "^2.0.0" + "ansi-regex": "^4.1.0" } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + } + } + }, + "jest-leak-detector": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", + "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", + "dev": true, + "requires": { + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + } + }, + "jest-matcher-utils": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", + "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" + "color-convert": "^2.0.1" } }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "rxjs": { - "version": "5.5.12", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", - "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "symbol-observable": "1.0.1" + "color-name": "~1.1.4" } }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } + "has-flag": "^4.0.0" } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + } + } + }, + "jest-message-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "color-convert": "^2.0.1" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "ws": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "options": ">=0.0.5", - "ultron": "1.0.x" + "color-name": "~1.1.4" } }, - "y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "yargs": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", - "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", - "dev": true, - "requires": { - "camelcase": "^4.1.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "read-pkg-up": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^7.0.0" - } - }, - "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "camelcase": "^4.1.0" + "has-flag": "^4.0.0" } } } }, - "metro-minify-uglify": { - "version": "0.56.4", - "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.56.4.tgz", - "integrity": "sha512-BHgj7+BKEK2pHvWHUR730bIrsZwl8DPtr49x9L0j2grPZ5/UROWXzEr8VZgIss7fl64t845uu1HXNNyuSj2EhA==", + "jest-mock": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", + "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", "dev": true, "requires": { - "uglify-es": "^3.1.9" + "@jest/types": "^26.6.2", + "@types/node": "*" } }, - "metro-react-native-babel-preset": { - "version": "0.61.0", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.61.0.tgz", - "integrity": "sha512-k0j2K70YadKFFayFOtw9sbaB38LdkkJLluwqHvyl9CRAa3m7cWQ6pZbakCPrp3OWyo7dJWbP70ybOvjoDv2jwQ==", + "jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "requires": {} + }, + "jest-react-hooks-shallow": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/jest-react-hooks-shallow/-/jest-react-hooks-shallow-1.5.1.tgz", + "integrity": "sha512-tyIUh2aKLTGPxbc6aK54pymvvRlX8eGNn3GzXefXAX5BkUwj4geS1pPJijmYeCELbn8+BUP9uS9+6OG5ElVI5Q==", "dev": true, "requires": { - "@babel/core": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.2.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-syntax-optional-chaining": "^7.0.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-exponentiation-operator": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-assign": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-regenerator": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.5.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "react-refresh": "^0.4.0" + "react": "^16.8.0" } }, - "metro-react-native-babel-transformer": { - "version": "0.56.4", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.56.4.tgz", - "integrity": "sha512-ng74eutuy1nyGI9+TDzzVAVfEmNPDlapV4msTQMKPi4EFqo/fBn7Ct33ME9l5E51pQBBnxt/UwcpTvd13b29kQ==", + "jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "dev": true + }, + "jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", "dev": true, "requires": { - "@babel/core": "^7.0.0", - "babel-preset-fbjs": "^3.1.2", - "metro-babel-transformer": "^0.56.4", - "metro-react-native-babel-preset": "^0.56.4", - "metro-source-map": "^0.56.4" + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" }, "dependencies": { - "metro-react-native-babel-preset": { - "version": "0.56.4", - "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.56.4.tgz", - "integrity": "sha512-CzbBDM9Rh6w8s1fq+ZqihAh7DDqUAcfo9pPww25+N/eJ7UK436Q7JdfxwdIPpBwLFn6o6MyYn+uwL9OEWBJarA==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-export-default-from": "^7.0.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", - "@babel/plugin-proposal-optional-chaining": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-syntax-export-default-from": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.2.0", - "@babel/plugin-transform-arrow-functions": "^7.0.0", - "@babel/plugin-transform-block-scoping": "^7.0.0", - "@babel/plugin-transform-classes": "^7.0.0", - "@babel/plugin-transform-computed-properties": "^7.0.0", - "@babel/plugin-transform-destructuring": "^7.0.0", - "@babel/plugin-transform-exponentiation-operator": "^7.0.0", - "@babel/plugin-transform-flow-strip-types": "^7.0.0", - "@babel/plugin-transform-for-of": "^7.0.0", - "@babel/plugin-transform-function-name": "^7.0.0", - "@babel/plugin-transform-literals": "^7.0.0", - "@babel/plugin-transform-modules-commonjs": "^7.0.0", - "@babel/plugin-transform-object-assign": "^7.0.0", - "@babel/plugin-transform-parameters": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0", - "@babel/plugin-transform-regenerator": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/plugin-transform-shorthand-properties": "^7.0.0", - "@babel/plugin-transform-spread": "^7.0.0", - "@babel/plugin-transform-sticky-regex": "^7.0.0", - "@babel/plugin-transform-template-literals": "^7.0.0", - "@babel/plugin-transform-typescript": "^7.0.0", - "@babel/plugin-transform-unicode-regex": "^7.0.0", - "@babel/template": "^7.0.0", - "react-refresh": "^0.4.0" + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true } } }, - "metro-resolver": { - "version": "0.56.4", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.56.4.tgz", - "integrity": "sha512-Ug4ulVfpkKZ1Wu7mdYj9XLGuOqZTuWCqEhyx3siKTc/2eBwKZQXmiNo5d/IxWNvmwL/87Abeb724I6CMzMfjiQ==", - "dev": true, - "requires": { - "absolute-path": "^0.0.0" - } - }, - "metro-source-map": { - "version": "0.56.4", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.56.4.tgz", - "integrity": "sha512-f1P9/rpFmG3Z0Jatiw2zvLItx1TwR7mXTSDj4qLDCWeVMB3kEXAr3R0ucumTW8c6HfpJljeRBWzYFXF33fd81g==", - "dev": true, - "requires": { - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "invariant": "^2.2.4", - "metro-symbolicate": "^0.56.4", - "ob1": "^0.56.4", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - } - }, - "metro-symbolicate": { - "version": "0.56.4", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.56.4.tgz", - "integrity": "sha512-8mCNNn6zV5FFKCIcRgI7736Xl+owgvYuy8qanPxZN36f7utiWRYeB+PirEBPcglBk4qQvoy2lT6oPULNXZQbbQ==", - "dev": true, - "requires": { - "invariant": "^2.2.4", - "metro-source-map": "^0.56.4", - "source-map": "^0.5.6", - "through2": "^2.0.1", - "vlq": "^1.0.0" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "jest-resolve-dependencies": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", + "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "@jest/types": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-snapshot": "^26.6.2" } }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "jest-runner": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", + "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", "dev": true, "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.7.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-docblock": "^26.0.0", + "jest-haste-map": "^26.6.2", + "jest-leak-detector": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" }, "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.46.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", - "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.29", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", - "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", - "dev": true, - "requires": { - "mime-db": "1.46.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true, - "requires": { - "dom-walk": "^0.1.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "jest-runtime": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", + "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/globals": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^0.6.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.4.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", "dev": true, "requires": { - "yallist": "^4.0.0" + "@types/node": "*", + "graceful-fs": "^4.2.4" } }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "jest-snapshot": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", + "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", "dev": true, "requires": { - "minipass": "^3.0.0" + "@babel/types": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.0.0", + "chalk": "^4.0.0", + "expect": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-haste-map": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "natural-compare": "^1.4.0", + "pretty-format": "^26.6.2", + "semver": "^7.3.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "jest-svg-transformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jest-svg-transformer/-/jest-svg-transformer-1.0.0.tgz", + "integrity": "sha1-44iEykzYsilc36KgskZnkgw6im0=", "dev": true, - "requires": { - "minipass": "^3.0.0" - } + "requires": {} }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", "dev": true, "requires": { - "minipass": "^3.0.0" + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "jest-validate": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", "dev": true, "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "@jest/types": "^26.6.2", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "leven": "^3.1.0", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "jest-watcher": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", + "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", "dev": true, "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^26.6.2", + "string-length": "^4.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "dev": true, "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" }, "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "has-flag": "^4.0.0" } } } }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "jetifier": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-1.6.8.tgz", + "integrity": "sha512-3Zi16h6L5tXDRQJTb221cnRoVG9/9OvreLdLU2/ZjRv/GILL+2Cemt0IKvkowwkDpvouAU1DQPOJ7qaiHeIdrw==", "dev": true }, - "moo": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz", - "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==", - "dev": true + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, - "morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.0.2" - }, - "dependencies": { - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - } + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "jsc-android": { + "version": "245459.0.0", + "resolved": "https://registry.npmjs.org/jsc-android/-/jsc-android-245459.0.0.tgz", + "integrity": "sha512-wkjURqwaB1daNkDi2OYYbsLnIdC/lUM2nPXQKRs5pqEU9chDg435bjvo+LSaHotDENygHQDHe+ntUkkw2gwMtg==", + "dev": true + }, + "jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" }, "dependencies": { - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "dev": true, "requires": { - "minimist": "^1.2.5" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" } }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", "dev": true, "requires": { - "glob": "^7.1.3" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" } } } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, - "mute-stdout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", - "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "jsonify": "~0.0.0" } }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "nearley": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", - "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "requires": { - "commander": "^2.19.0", - "moo": "^0.5.0", - "railroad-diagrams": "^1.0.0", - "randexp": "0.4.6" + "minimist": "^1.2.5" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" }, "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true } } }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", "dev": true }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "jsx-ast-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", + "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", + "dev": true, + "requires": { + "array-includes": "^3.1.3", + "object.assign": "^4.1.2" + } }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "junk": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/junk/-/junk-1.0.3.tgz", + "integrity": "sha1-h75jSIZJy9ym9Tqzm+yczSNH9ZI=", "dev": true }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "keyv": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz", + "integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } }, - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, - "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "dev": true + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "ky": { + "version": "0.28.6", + "resolved": "https://registry.npmjs.org/ky/-/ky-0.28.6.tgz", + "integrity": "sha512-EjxET5qSsaLUj1BSFtxPjEtRgF5JOhdroPwMNJFH/VvzruWQFBmh6W7GtqjBR56UZw4dBFTKLvx9nDxxnFXc7w==", "dev": true }, - "node-notifier": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", - "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", "dev": true, - "optional": true, "requires": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" + "readable-stream": "^2.0.5" }, "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "optional": true + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "optional": true, "requires": { - "isexe": "^2.0.0" + "safe-buffer": "~5.1.0" } } } }, - "node-releases": { - "version": "1.1.71", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", - "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lighthouse-logger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.3.0.tgz", + "integrity": "sha512-BbqAKApLb9ywUli+0a+PcV04SyJ/N1q/8qgCNe6U97KbPCS1BTksEuHFLYdvc8DltuhfxIUBqDZsC0bBGtl3lA==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "marky": "^1.2.2" }, "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, - "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "livereload": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.9.3.tgz", + "integrity": "sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw==", + "dev": true, + "requires": { + "chokidar": "^3.5.0", + "livereload-js": "^3.3.1", + "opts": ">= 1.2.0", + "ws": "^7.4.3" + } + }, + "livereload-js": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-3.3.2.tgz", + "integrity": "sha512-w677WnINxFkuixAoUEXOStewzLYGI76XVag+0JWMMEyjJQKs0ibWZMxkTlB96Lm3EjZ7IeOxVziBEbtxVQqQZA==", "dev": true }, - "now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "once": "^1.3.2" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" } }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "requires": { - "path-key": "^2.0.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" }, "dependencies": { - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } } } }, - "nth-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", - "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "boolbase": "^1.0.0" + "p-locate": "^4.1.0" } }, - "nullthrows": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", "dev": true }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", "dev": true }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "lodash.escape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", + "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=", "dev": true }, - "ob1": { - "version": "0.56.4", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.56.4.tgz", - "integrity": "sha512-URgFof9z2wotiYFsqlydXtQfGV81gvBI2ODy64xfd3vPo+AYom5PVDX4t4zn23t/O+S2IxqApSQM8uJAybmz7w==", + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", "dev": true }, - "object-assign": { + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "dev": true + }, + "lodash.isobject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", + "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.pickby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", + "integrity": "sha1-feoh2MGNdwOifHBMFdO4SmfjOv8=", + "dev": true + }, + "lodash.throttle": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=", + "dev": true }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", + "dev": true + }, + "lodash.zip": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", + "integrity": "sha1-7GZi5IlkCO1KtsVCo5kLcswIACA=", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "color-convert": "^2.0.1" } }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" } } } }, - "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==" - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "logkitty": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", + "integrity": "sha512-/3ER20CTTbahrCrpYfPn7Xavv9diBROZpoXGVZDWMw4b/X4uuUwAC0ki85tgsdMRONURyIJbcOvS94QsUBYPbQ==", "dev": true, "requires": { - "isobject": "^3.0.0" + "ansi-fragments": "^0.2.1", + "dayjs": "^1.8.15", + "yargs": "^15.1.0" } }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } + "loglevel": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", + "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", + "dev": true }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "dev": true, - "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - } + "loglevel-plugin-prefix": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", + "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", + "dev": true }, - "object.entries": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz", - "integrity": "sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==", + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" + "js-tokens": "^3.0.0 || ^4.0.0" } }, - "object.fromentries": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", - "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - } + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true }, - "object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" + "yallist": "^4.0.0" } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } + "lz-string": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", + "integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY=", + "dev": true }, - "object.reduce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", - "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", "dev": true, "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" + "sourcemap-codec": "^1.4.4" } }, - "object.values": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", - "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", "dev": true, "requires": { - "ee-first": "1.1.1" + "tmpl": "1.0.x" } }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "mimic-fn": "^2.1.0" + "object-visit": "^1.0.0" } }, - "open": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", - "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - }, - "dependencies": { - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - } - } + "marky": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.2.2.tgz", + "integrity": "sha512-k1dB2HNeaNyORco8ulVEhctyEGkKHb2YWAhDsxeFlW2nROIirsctBYzKwwS3Vza+sKTS1zO4Z+n9/+9WbGLIxQ==", + "dev": true }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "maximatch": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/maximatch/-/maximatch-0.1.0.tgz", + "integrity": "sha1-hs2NawTJ8wfAWmuUGZBtA2D7E6I=", "dev": true, "requires": { - "is-wsl": "^1.1.0" + "array-differ": "^1.0.0", + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "minimatch": "^3.0.0" }, "dependencies": { - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } } } }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "mendix": { + "version": "9.6.27784", + "resolved": "https://registry.npmjs.org/mendix/-/mendix-9.6.27784.tgz", + "integrity": "sha512-2dSAQKSdH9eVg21FCprBMaOnLQBjCPetze82iqiyUwbkN+xGFWvv0akaEFnOx/gkfh+fw8W+hP51cD9YEpsM5w==", "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" + "@types/big.js": "^6.0.0", + "@types/react": "~17.0.0", + "@types/react-native": "~0.64.10" } }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, - "ora": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", - "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "metro": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.59.0.tgz", + "integrity": "sha512-OpVgYXyuTvouusFZQJ/UYKEbwfLmialrSCUUTGTFaBor6UMUHZgXPYtK86LzesgMqRc8aiuTQVO78iKW2Iz3wg==", "dev": true, "requires": { - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-spinners": "^2.0.0", - "log-symbols": "^2.2.0", - "strip-ansi": "^5.2.0", - "wcwidth": "^1.0.1" + "@babel/code-frame": "^7.0.0", + "@babel/core": "^7.0.0", + "@babel/generator": "^7.5.0", + "@babel/parser": "^7.0.0", + "@babel/plugin-external-helpers": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "absolute-path": "^0.0.0", + "async": "^2.4.0", + "babel-preset-fbjs": "^3.3.0", + "buffer-crc32": "^0.2.13", + "chalk": "^2.4.1", + "ci-info": "^2.0.0", + "concat-stream": "^1.6.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "denodeify": "^1.2.1", + "error-stack-parser": "^2.0.6", + "eventemitter3": "^3.0.0", + "fbjs": "^1.0.0", + "fs-extra": "^1.0.0", + "graceful-fs": "^4.1.3", + "image-size": "^0.6.0", + "invariant": "^2.2.4", + "jest-haste-map": "^24.9.0", + "jest-worker": "^24.9.0", + "json-stable-stringify": "^1.0.1", + "lodash.throttle": "^4.1.1", + "merge-stream": "^1.0.1", + "metro-babel-register": "0.59.0", + "metro-babel-transformer": "0.59.0", + "metro-cache": "0.59.0", + "metro-config": "0.59.0", + "metro-core": "0.59.0", + "metro-inspector-proxy": "0.59.0", + "metro-minify-uglify": "0.59.0", + "metro-react-native-babel-preset": "0.59.0", + "metro-resolver": "0.59.0", + "metro-source-map": "0.59.0", + "metro-symbolicate": "0.59.0", + "mime-types": "2.1.11", + "mkdirp": "^0.5.1", + "node-fetch": "^2.2.0", + "nullthrows": "^1.1.1", + "resolve": "^1.5.0", + "rimraf": "^2.5.4", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "strip-ansi": "^4.0.0", + "temp": "0.8.3", + "throat": "^4.1.0", + "wordwrap": "^1.0.0", + "ws": "^1.1.5", + "xpipe": "^1.0.5", + "yargs": "^14.2.0" }, "dependencies": { + "@jest/console": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", + "dev": true, + "requires": { + "@jest/source-map": "^24.9.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" + } + }, + "@jest/fake-timers": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" + } + }, + "@jest/source-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@jest/test-result": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", + "dev": true, + "requires": { + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/istanbul-lib-coverage": "^2.0.0" + } + }, + "@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + } + }, + "@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", + "dev": true + }, + "@types/yargs": { + "version": "13.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", + "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "restore-cursor": "^2.0.0" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "fs-extra": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", + "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "dev": true, + "optional": true, "requires": { - "mimic-fn": "^1.0.0" + "bindings": "^1.5.0", + "nan": "^2.12.1" } }, - "restore-cursor": { + "is-fullwidth-code-point": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "jest-haste-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dev": true, - "requires": { - "url-parse": "^1.4.3" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "p-cancelable": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.0.tgz", - "integrity": "sha512-HAZyB3ZodPo+BDpb4/Iu7Jv4P6cSazBz9ZM0ChhEXp70scx834aWCEjQRwgt41UzzejUAPdbqqONfRWTPYrPAQ==", - "dev": true - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", - "dev": true, - "requires": { - "retry": "^0.12.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "parse-ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", - "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", - "dev": true - }, - "parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "requires": { - "parse5": "^6.0.1" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, - "requires": { - "path-root-regex": "^0.1.0" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "requires": { + "@jest/types": "^24.9.0", + "anymatch": "^2.0.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.7", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3", + "walker": "^1.0.7" + } + }, + "jest-message-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" + } + }, + "jest-mock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0" + } + }, + "jest-serializer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", "dev": true - } - } - }, - "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "plist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.2.tgz", - "integrity": "sha512-MSrkwZBdQ6YapHy87/8hDU8MnIcyxBKjeF+McXnr5A9MtffPewTs7G3hlpodT5TacyfIyFTaJEhh3GGcmasTgQ==", - "dev": true, - "requires": { - "base64-js": "^1.5.1", - "xmlbuilder": "^9.0.7", - "xmldom": "^0.5.0" - } - }, - "plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "arr-diff": "^4.0.0", - "arr-union": "^3.1.0", - "extend-shallow": "^3.0.2" - } - }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + }, + "jest-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", + "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", "dev": true, "requires": { - "lodash": "^4.17.14" + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "callsites": "^3.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.15", + "is-ci": "^2.0.0", + "mkdirp": "^0.5.1", + "slash": "^2.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + } + } + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "metro-react-native-babel-preset": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.59.0.tgz", + "integrity": "sha512-BoO6ncPfceIDReIH8pQ5tQptcGo5yRWQXJGVXfANbiKLq4tfgdZB1C1e2rMUJ6iypmeJU9dzl+EhPmIFKtgREg==", + "dev": true, + "requires": { + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-assign": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "mime-db": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.23.0.tgz", + "integrity": "sha1-oxtAcK2uon1zLqMzdApk0OyaZlk=", + "dev": true + }, + "mime-types": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.11.tgz", + "integrity": "sha1-wlnEcb2oCKhdbNGTtDCl+uRHOzw=", "dev": true, "requires": { - "ms": "^2.1.1" + "mime-db": "~1.23.0" } }, "mkdirp": { @@ -15446,1080 +35500,791 @@ } }, "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "has-flag": "^3.0.0" + "remove-trailing-separator": "^1.0.1" } - } - } - }, - "postcss-modules-extract-imports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", - "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", - "dev": true, - "requires": { - "postcss": "^7.0.5" - } - }, - "postcss-modules-local-by-default": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", - "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", - "dev": true, - "requires": { - "icss-utils": "^4.1.1", - "postcss": "^7.0.32", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", - "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", - "dev": true, - "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^6.0.0" - } - }, - "postcss-modules-values": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", - "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", - "dev": true, - "requires": { - "icss-utils": "^4.0.0", - "postcss": "^7.0.6" - } - }, - "postcss-selector-parser": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", - "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1", - "util-deprecate": "^1.0.2" - } - }, - "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", - "dev": true - }, - "prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "requires": { - "fast-diff": "^1.1.2" - } - }, - "pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "requires": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "p-limit": "^2.0.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "color-name": "~1.1.4" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "serialize-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", + "integrity": "sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=", "dev": true }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true - } - } - }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true - }, - "pretty-ms": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-6.0.1.tgz", - "integrity": "sha512-ke4njoVmlotekHlHyCZ3wI/c5AMT8peuHs8rKJqekj/oR5G8lND2dVpicFlUz5cbZgE290vvkMuDwfj/OcW1kw==", - "dev": true, - "requires": { - "parse-ms": "^2.1.0" - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "requires": { - "asap": "~2.0.3" + }, + "stack-utils": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", + "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "throat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", + "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=", + "dev": true + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "dev": true, + "requires": { + "options": ">=0.0.5", + "ultron": "1.0.x" + } + }, + "yargs": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", + "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^15.0.1" + } + }, + "yargs-parser": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.3.tgz", + "integrity": "sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } } }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "prompts": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz", - "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==", + "metro-babel-register": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-babel-register/-/metro-babel-register-0.59.0.tgz", + "integrity": "sha512-JtWc29erdsXO/V3loenXKw+aHUXgj7lt0QPaZKPpctLLy8kcEpI/8pfXXgVK9weXICCpCnYtYncIosAyzh0xjg==", "dev": true, "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" - } - }, - "prop-types-exact": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz", - "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==", - "requires": { - "has": "^1.0.3", - "object.assign": "^4.1.0", - "reflect.ownkeys": "^0.2.0" + "@babel/core": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/register": "^7.0.0", + "escape-string-regexp": "^1.0.5" } }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "metro-babel-transformer": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.59.0.tgz", + "integrity": "sha512-fdZJl8rs54GVFXokxRdD7ZrQ1TJjxWzOi/xSP25VR3E8tbm3nBZqS+/ylu643qSr/IueABR+jrlqAyACwGEf6w==", "dev": true, "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" + "@babel/core": "^7.0.0", + "metro-source-map": "0.59.0" } }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "metro-cache": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.59.0.tgz", + "integrity": "sha512-ryWNkSnpyADfRpHGb8BRhQ3+k8bdT/bsxMH2O0ntlZYZ188d8nnYWmxbRvFmEzToJxe/ol4uDw0tJFAaQsN8KA==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" + "jest-serializer": "^24.9.0", + "metro-core": "0.59.0", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4" }, "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "jest-serializer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", "dev": true - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "glob": "^7.1.3" } } } }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "query-selector": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/query-selector/-/query-selector-1.0.9.tgz", - "integrity": "sha1-kX/TG3N5tT/UQeU2r2R1UuAefp4=" - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true - }, - "raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "dev": true, - "requires": { - "performance-now": "^2.1.0" - } - }, - "railroad-diagrams": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", - "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=", - "dev": true - }, - "randexp": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", - "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", - "dev": true, - "requires": { - "discontinuous-range": "1.0.0", - "ret": "~0.1.10" - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "metro-config": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.59.0.tgz", + "integrity": "sha512-MDsknFG9vZ4Nb5VR6OUDmGHaWz6oZg/FtE3up1zVBKPVRTXE1Z+k7zypnPtMXjMh3WHs/Sy4+wU1xnceE/zdnA==", "dev": true, "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "cosmiconfig": "^5.0.5", + "jest-validate": "^24.9.0", + "metro": "0.59.0", + "metro-cache": "0.59.0", + "metro-core": "0.59.0" }, "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + } + }, + "@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" + } + }, + "@types/yargs": { + "version": "13.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", + "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "jest-get-type": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", + "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", "dev": true }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "jest-validate": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", + "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "camelcase": "^5.3.1", + "chalk": "^2.0.1", + "jest-get-type": "^24.9.0", + "leven": "^3.1.0", + "pretty-format": "^24.9.0" + } + }, + "pretty-format": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", "dev": true, "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "@jest/types": "^24.9.0", + "ansi-regex": "^4.0.0", + "ansi-styles": "^3.2.0", + "react-is": "^16.8.4" } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true } } }, - "raw-loader": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-3.1.0.tgz", - "integrity": "sha512-lzUVMuJ06HF4rYveaz9Tv0WRlUMxJ0Y1hgSkkgg+50iEdaI0TthyEDe08KIHb0XsF6rn8WYTqPCaGTZg3sX+qA==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^2.0.1" - } - }, - "react": { - "version": "16.9.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.9.0.tgz", - "integrity": "sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w==", + "metro-core": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.59.0.tgz", + "integrity": "sha512-kb5LKvV5r2pqMEzGyTid8ai2mIjW13NMduQ8oBmfha7/EPTATcTQ//s+bkhAs1toQD8vqVvjAb0cPNjWQEmcmQ==", "dev": true, "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - } - }, - "react-d3-cloud": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/react-d3-cloud/-/react-d3-cloud-0.7.0.tgz", - "integrity": "sha512-Zx8WaHDLFqnwvo2JXwFOOzPMJiPWxmJrVfh7qS9b6Y0ltsy9G8taDBgAk3jDOYNxe32akbIIqWIJwuICES2XEw==", - "requires": { - "d3-cloud": "^1.2.5", - "d3-scale": "^2.1.2", - "d3-scale-chromatic": "^1.3.3", - "d3-selection": "^1.3.2", - "enzyme-adapter-react-16": "^1.6.0", - "react-faux-dom": "^4.2.0" + "jest-haste-map": "^24.9.0", + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.59.0", + "wordwrap": "^1.0.0" }, "dependencies": { - "d3-array": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", - "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" - }, - "d3-color": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", - "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" + "@jest/console": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", + "dev": true, + "requires": { + "@jest/source-map": "^24.9.0", + "chalk": "^2.0.1", + "slash": "^2.0.0" + } }, - "d3-format": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", - "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" + "@jest/fake-timers": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", + "dev": true, + "requires": { + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" + } }, - "d3-interpolate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", - "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", + "@jest/source-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", + "dev": true, "requires": { - "d3-color": "1" + "callsites": "^3.0.0", + "graceful-fs": "^4.1.15", + "source-map": "^0.6.0" } }, - "d3-scale": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", - "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", + "@jest/test-result": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", + "dev": true, "requires": { - "d3-array": "^1.2.0", - "d3-collection": "1", - "d3-format": "1", - "d3-interpolate": "1", - "d3-time": "1", - "d3-time-format": "2" + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/istanbul-lib-coverage": "^2.0.0" } }, - "d3-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", - "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" + "@jest/types": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^1.1.1", + "@types/yargs": "^13.0.0" + } }, - "d3-time-format": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", - "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", + "@types/istanbul-reports": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "dev": true, "requires": { - "d3-time": "1" + "@types/istanbul-lib-coverage": "*", + "@types/istanbul-lib-report": "*" } - } - } - }, - "react-devtools-core": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-3.6.3.tgz", - "integrity": "sha512-+P+eFy/yo8Z/UH9J0DqHZuUM5+RI2wl249TNvMx3J2jpUomLQa4Zxl56GEotGfw3PIP1eI+hVf1s53FlUONStQ==", - "dev": true, - "requires": { - "shell-quote": "^1.6.1", - "ws": "^3.3.1" - }, - "dependencies": { - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + }, + "@types/stack-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", + "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==", "dev": true }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "@types/yargs": { + "version": "13.0.12", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.12.tgz", + "integrity": "sha512-qCxJE1qgz2y0hA4pIxjBR+PelCH0U5CK1XJXFwCNqfmliatKp47UCXXE9Dyk1OXBDLvsCF57TqQEJaeLfDYEOQ==", "dev": true, "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" + "@types/yargs-parser": "*" } - } - } - }, - "react-dom": { - "version": "16.9.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.9.0.tgz", - "integrity": "sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ==", - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.15.0" - } - }, - "react-faux-dom": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/react-faux-dom/-/react-faux-dom-4.5.0.tgz", - "integrity": "sha512-T03fyZw/He4EYPqQpK5KJ9BQXNNMMgUo5DiwWkFG5wlpMDuiiYc4Q8WfeODjl3g2S2OBqy3+0VUr44sZkqz2Sw==", - "requires": { - "create-react-class": "^15.6.3", - "hoist-non-react-statics": "^3.3.0", - "query-selector": "^1.0.9", - "style-attr": "^1.0.1" - } - }, - "react-hot-loader": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.13.0.tgz", - "integrity": "sha512-JrLlvUPqh6wIkrK2hZDfOyq/Uh/WeVEr8nc7hkn2/3Ul0sx1Kr5y4kOGNacNRoj7RhwLNcQ3Udf1KJXrqc0ZtA==", - "dev": true, - "requires": { - "fast-levenshtein": "^2.0.6", - "global": "^4.3.0", - "hoist-non-react-statics": "^3.3.0", - "loader-utils": "^1.1.0", - "prop-types": "^15.6.1", - "react-lifecycles-compat": "^3.0.4", - "shallowequal": "^1.1.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true - } - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", - "dev": true - }, - "react-native": { - "version": "0.61.5", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.61.5.tgz", - "integrity": "sha512-MXqE3NoGO0T3dUKIKkIppijBhRRMpfN6ANbhMXHDuyfA+fSilRWgCwYgR/YNCC7ntECoJYikKaNTUBB0DeQy6Q==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@react-native-community/cli": "^3.0.0", - "@react-native-community/cli-platform-android": "^3.0.0", - "@react-native-community/cli-platform-ios": "^3.0.0", - "abort-controller": "^3.0.0", - "art": "^0.10.0", - "base64-js": "^1.1.2", - "connect": "^3.6.5", - "create-react-class": "^15.6.3", - "escape-string-regexp": "^1.0.5", - "event-target-shim": "^5.0.1", - "fbjs": "^1.0.0", - "fbjs-scripts": "^1.1.0", - "hermes-engine": "^0.2.1", - "invariant": "^2.2.4", - "jsc-android": "^245459.0.0", - "metro-babel-register": "^0.56.0", - "metro-react-native-babel-transformer": "^0.56.0", - "metro-source-map": "^0.56.0", - "nullthrows": "^1.1.0", - "pretty-format": "^24.7.0", - "promise": "^7.1.1", - "prop-types": "^15.7.2", - "react-devtools-core": "^3.6.3", - "react-refresh": "^0.4.0", - "regenerator-runtime": "^0.13.2", - "scheduler": "0.15.0", - "stacktrace-parser": "^0.1.3", - "whatwg-fetch": "^3.0.0" - }, - "dependencies": { - "@jest/types": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-25.5.0.tgz", - "integrity": "sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==", + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^15.0.0", - "chalk": "^3.0.0" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "is-extendable": "^0.1.0" } } } }, - "@react-native-community/cli": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-3.2.1.tgz", - "integrity": "sha512-bZ/bfZ+9r1gQSxp6t7+00DcpC6vmbVYSvzUCFM/yo5k8bhsDdcy8aocscIaXXVGG+v9Edri/Q7hH9ks7L18/Rg==", + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "dev": true, + "optional": true, "requires": { - "@hapi/joi": "^15.0.3", - "@react-native-community/cli-debugger-ui": "^3.0.0", - "@react-native-community/cli-tools": "^3.0.0", - "@react-native-community/cli-types": "^3.0.0", - "chalk": "^2.4.2", - "command-exists": "^1.2.8", - "commander": "^2.19.0", - "compression": "^1.7.1", - "connect": "^3.6.5", - "cosmiconfig": "^5.1.0", - "deepmerge": "^3.2.0", - "didyoumean": "^1.2.1", - "envinfo": "^7.1.0", - "errorhandler": "^1.5.0", - "execa": "^1.0.0", - "find-up": "^4.1.0", - "fs-extra": "^7.0.1", - "glob": "^7.1.1", - "graceful-fs": "^4.1.3", - "inquirer": "^3.0.6", - "lodash": "^4.17.5", - "metro": "^0.56.0", - "metro-config": "^0.56.0", - "metro-core": "^0.56.0", - "metro-react-native-babel-transformer": "^0.56.0", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "morgan": "^1.9.0", - "node-notifier": "^5.2.1", - "open": "^6.2.0", - "ora": "^3.4.0", - "plist": "^3.0.0", - "pretty-format": "^25.1.0", - "semver": "^6.3.0", - "serve-static": "^1.13.1", - "shell-quote": "1.6.1", - "strip-ansi": "^5.2.0", - "sudo-prompt": "^9.0.0", - "wcwidth": "^1.0.1", - "ws": "^1.1.0" + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "pretty-format": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-25.5.0.tgz", - "integrity": "sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "@jest/types": "^25.5.0", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^16.12.0" + "is-buffer": "^1.1.5" } } } }, - "@types/istanbul-reports": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz", - "integrity": "sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw==", + "jest-haste-map": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" + "@jest/types": "^24.9.0", + "anymatch": "^2.0.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.7", + "graceful-fs": "^4.1.15", + "invariant": "^2.2.4", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", + "micromatch": "^3.1.10", + "sane": "^4.0.3", + "walker": "^1.0.7" } }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "jest-message-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "@babel/code-frame": "^7.0.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/stack-utils": "^1.0.1", + "chalk": "^2.0.1", + "micromatch": "^3.1.10", + "slash": "^2.0.0", + "stack-utils": "^1.0.1" } }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "jest-mock": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", "dev": true, "requires": { - "restore-cursor": "^2.0.0" + "@jest/types": "^24.9.0" } }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "jest-serializer": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", "dev": true }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "jest-util": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", + "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", "dev": true, "requires": { - "color-name": "~1.1.4" + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "callsites": "^3.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.15", + "is-ci": "^2.0.0", + "mkdirp": "^0.5.1", + "slash": "^2.0.0", + "source-map": "^0.6.0" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "deepmerge": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.3.0.tgz", - "integrity": "sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==", - "dev": true - }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", "dev": true, "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" } }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "minimist": "^1.2.5" } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } + "remove-trailing-separator": "^1.0.1" } }, - "is-fullwidth-code-point": { + "slash": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true + "stack-utils": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", + "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + } }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { - "minimist": "^1.2.5" + "has-flag": "^3.0.0" } }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "metro-inspector-proxy": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-inspector-proxy/-/metro-inspector-proxy-0.59.0.tgz", + "integrity": "sha512-hPeAuQcofTOH0F+2GEZqWkvkVY1/skezSSlMocDQDaqds+Kw6JgdA7FlZXxnKmQ/jYrWUzff/pl8SUCDwuYthQ==", + "dev": true, + "requires": { + "connect": "^3.6.5", + "debug": "^2.2.0", + "ws": "^1.1.5", + "yargs": "^14.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, - "node-notifier": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.5.tgz", - "integrity": "sha512-tVbHs7DyTLtzOiN78izLA85zRqB9NvEXkAf014Vx3jtSvn/xBl6bR8ZYifj+dFcFrKI21huSQgJZ6ZtL3B4HfQ==", + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { - "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", - "shellwords": "^0.1.1", - "which": "^1.3.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" } }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "locate-path": "^3.0.0" } }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - }, - "dependencies": { - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" - } - }, - "@types/yargs": { - "version": "13.0.11", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.11.tgz", - "integrity": "sha512-NRqD6T4gktUrDi1o1wLH3EKC1o2caCr7/wR87ODcbVITQF106OM3sFN92ysZ++wqelOd1CTzatnOBRDYYG6wGQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - } + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, - "restore-cursor": { + "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" + "p-limit": "^2.0.0" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { + "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } + "strip-ansi": "^5.1.0" } }, "strip-ansi": { @@ -16529,23 +36294,6 @@ "dev": true, "requires": { "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - } - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" } }, "ws": { @@ -16557,2005 +36305,1700 @@ "options": ">=0.0.5", "ultron": "1.0.x" } + }, + "yargs": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", + "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^15.0.1" + } + }, + "yargs-parser": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.3.tgz", + "integrity": "sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } }, - "react-refresh": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", - "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", - "dev": true - }, - "react-test-renderer": { - "version": "16.9.0", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.9.0.tgz", - "integrity": "sha512-R62stB73qZyhrJo7wmCW9jgl/07ai+YzvouvCXIJLBkRlRqLx4j9RqcLEAfNfU3OxTGucqR2Whmn3/Aad6L3hQ==", - "requires": { - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "react-is": "^16.9.0", - "scheduler": "^0.15.0" - } - }, - "react-wordcloud": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/react-wordcloud/-/react-wordcloud-1.2.7.tgz", - "integrity": "sha512-pyXvL8Iu2J258Qk2/kAwY23dIVhNpMC3dnvbXRkw5+Ert5EkJWwnwVjs9q8CmX38NWbfCKhGmpjuumBoQEtniw==", + "metro-minify-uglify": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-minify-uglify/-/metro-minify-uglify-0.59.0.tgz", + "integrity": "sha512-7IzVgCVWZMymgZ/quieg/9v5EQ8QmZWAgDc86Zp9j0Vy6tQTjUn6jlU+YAKW3mfMEjMr6iIUzCD8YklX78tFAw==", + "dev": true, "requires": { - "d3-array": "^2.5.0", - "d3-cloud": "^1.2.5", - "d3-dispatch": "^1.0.6", - "d3-scale": "^3.2.1", - "d3-scale-chromatic": "^1.5.0", - "d3-selection": "1.4.2", - "d3-transition": "^1.3.2", - "lodash.clonedeep": "^4.5.0", - "lodash.debounce": "^4.0.8", - "resize-observer-polyfill": "^1.5.1", - "seedrandom": "^3.0.5", - "tippy.js": "^6.2.6" + "uglify-es": "^3.1.9" } }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "metro-react-native-babel-preset": { + "version": "0.63.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.63.0.tgz", + "integrity": "sha512-iTM6V/hzqTd2dg0LHtD4f/TU+d4A7MFiMPUmIYDb0OZmCq6avfcxHQTXk/ZNbAr+eRoN/owx9OIkjt/CvG4vUA==", "dev": true, "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "@babel/core": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-assign": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" } }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "metro-react-native-babel-transformer": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.59.0.tgz", + "integrity": "sha512-1O3wrnMq4NcPQ1asEcl9lRDn/t+F1Oef6S9WaYVIKEhg9m/EQRGVrrTVP+R6B5Eeaj3+zNKbzM8Dx/NWy1hUbQ==", "dev": true, "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" + "@babel/core": "^7.0.0", + "babel-preset-fbjs": "^3.3.0", + "metro-babel-transformer": "0.59.0", + "metro-react-native-babel-preset": "0.59.0", + "metro-source-map": "0.59.0" }, "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "metro-react-native-babel-preset": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.59.0.tgz", + "integrity": "sha512-BoO6ncPfceIDReIH8pQ5tQptcGo5yRWQXJGVXfANbiKLq4tfgdZB1C1e2rMUJ6iypmeJU9dzl+EhPmIFKtgREg==", "dev": true, "requires": { - "pinkie-promise": "^2.0.0" + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-export-default-from": "^7.0.0", + "@babel/plugin-syntax-flow": "^7.2.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-syntax-optional-chaining": "^7.0.0", + "@babel/plugin-transform-arrow-functions": "^7.0.0", + "@babel/plugin-transform-block-scoping": "^7.0.0", + "@babel/plugin-transform-classes": "^7.0.0", + "@babel/plugin-transform-computed-properties": "^7.0.0", + "@babel/plugin-transform-destructuring": "^7.0.0", + "@babel/plugin-transform-exponentiation-operator": "^7.0.0", + "@babel/plugin-transform-flow-strip-types": "^7.0.0", + "@babel/plugin-transform-for-of": "^7.0.0", + "@babel/plugin-transform-function-name": "^7.0.0", + "@babel/plugin-transform-literals": "^7.0.0", + "@babel/plugin-transform-modules-commonjs": "^7.0.0", + "@babel/plugin-transform-object-assign": "^7.0.0", + "@babel/plugin-transform-parameters": "^7.0.0", + "@babel/plugin-transform-react-display-name": "^7.0.0", + "@babel/plugin-transform-react-jsx": "^7.0.0", + "@babel/plugin-transform-react-jsx-self": "^7.0.0", + "@babel/plugin-transform-react-jsx-source": "^7.0.0", + "@babel/plugin-transform-regenerator": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.0.0", + "@babel/plugin-transform-shorthand-properties": "^7.0.0", + "@babel/plugin-transform-spread": "^7.0.0", + "@babel/plugin-transform-sticky-regex": "^7.0.0", + "@babel/plugin-transform-template-literals": "^7.0.0", + "@babel/plugin-transform-typescript": "^7.5.0", + "@babel/plugin-transform-unicode-regex": "^7.0.0", + "@babel/template": "^7.0.0", + "react-refresh": "^0.4.0" } } } }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "metro-resolver": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.59.0.tgz", + "integrity": "sha512-lbgiumnwoVosffEI96z0FGuq1ejTorHAj3QYUPmp5dFMfitRxLP7Wm/WP9l4ZZjIptxTExsJwuEff1SLRCPD9w==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "absolute-path": "^0.0.0" } }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "metro-source-map": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.59.0.tgz", + "integrity": "sha512-0w5CmCM+ybSqXIjqU4RiK40t4bvANL6lafabQ2GP2XD3vSwkLY+StWzCtsb4mPuyi9R/SgoLBel+ZOXHXAH0eQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "invariant": "^2.2.4", + "metro-symbolicate": "0.59.0", + "ob1": "0.59.0", + "source-map": "^0.5.6", + "vlq": "^1.0.0" } }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "metro-symbolicate": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.59.0.tgz", + "integrity": "sha512-asLaF2A7rndrToGFIknL13aiohwPJ95RKHf0NM3hP/nipiLDoMzXT6ZnQvBqDxkUKyP+51AI75DMtb+Wcyw4Bw==", "dev": true, "requires": { - "resolve": "^1.1.6" + "invariant": "^2.2.4", + "metro-source-map": "0.59.0", + "source-map": "^0.5.6", + "through2": "^2.0.1", + "vlq": "^1.0.0" } }, - "reflect.ownkeys": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz", - "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=" - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { - "regenerate": "^1.4.0" + "braces": "^3.0.1", + "picomatch": "^2.2.3" } }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", "dev": true }, - "regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } + "mime-db": { + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", + "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", + "dev": true }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "mime-types": { + "version": "2.1.33", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", + "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", "dev": true, "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "mime-db": "1.50.0" } }, - "regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "dom-walk": "^0.1.0" } }, - "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true }, - "regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "mini-svg-data-uri": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.3.tgz", + "integrity": "sha512-gSfqpMRC8IxghvMcxzzmMnWpXAChSA+vy4cia33RgerMS8Fex95akUyQZPbxJJmeBGiGmK7n/1OpUX8ksRjIdA==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" + "brace-expansion": "^1.1.7" } }, - "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, - "regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "requires": { - "jsesc": "~0.5.0" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } } } }, - "remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - } - }, - "remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", - "dev": true, - "requires": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "moo": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz", + "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==", "dev": true }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "replace-homedir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", - "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1", - "is-absolute": "^1.0.0", - "remove-trailing-separator": "^1.1.0" - } - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - } - } + "nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "dev": true, + "optional": true }, - "request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "nanoid": { + "version": "3.1.30", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", + "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", + "dev": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { - "lodash": "^4.17.19" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" } }, - "request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "nearley": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", + "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", "dev": true, "requires": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" + "commander": "^2.19.0", + "moo": "^0.5.0", + "railroad-diagrams": "^1.0.0", + "randexp": "0.4.6" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } } }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, - "resize-observer-polyfill": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + "nocache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz", + "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==", + "dev": true }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "node-fetch": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", + "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", "dev": true, "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } } }, - "resolve-alpn": { + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-modules-regexp": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz", - "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA==", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", "dev": true }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "node-notifier": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", + "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", "dev": true, + "optional": true, "requires": { - "resolve-from": "^5.0.0" + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "optional": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } + "node-releases": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.0.tgz", + "integrity": "sha512-aA87l0flFYMzCHpTM3DERFSYxc6lv/BltdbRTOMZuxZ0cwZCD3mejE5n9vLhSJCN++/eOqr77G1IO5uXxlQYWA==", + "dev": true }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "node-stream-zip": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", + "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", "dev": true }, - "resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { - "value-or-function": "^3.0.0" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", - "dev": true, - "requires": { - "lowercase-keys": "^2.0.0" - } + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true }, - "resq": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resq/-/resq-1.10.0.tgz", - "integrity": "sha512-hCUd0xMalqtPDz4jXIqs0M5Wnv/LZXN8h7unFOo4/nvExT9dDPbhwd3udRxLlp0HgBnHcV009UlduE9NZi7A6w==", + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1" + "path-key": "^2.0.0" + }, + "dependencies": { + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + } } }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", "dev": true, "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "boolbase": "^1.0.0" } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", "dev": true }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "ob1": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.59.0.tgz", + "integrity": "sha512-opXMTxyWJ9m68ZglCxwo0OPRESIC/iGmKFPXEXzMZqsVIrgoRXOHmoMDkQzz4y3irVjbyPJRAh5pI9fd0MJTFQ==", "dev": true }, - "rgb2hex": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.1.10.tgz", - "integrity": "sha512-vKz+kzolWbL3rke/xeTE2+6vHmZnNxGyDnaVW4OckntAIcc7DcZzWkQSfxMDwqHS8vhgySnIFyBUH7lIk6PxvQ==", - "dev": true + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "glob": "^7.1.3" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } } }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } + "object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "dev": true }, - "rst-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", - "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=", + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "requires": { - "lodash.flattendeep": "^4.4.0", - "nearley": "^2.7.10" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, - "rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "queue-microtask": "^1.2.2" + "isobject": "^3.0.0" } }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "aproba": "^1.1.1" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" } }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", "dev": true, "requires": { - "rx-lite": "*" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" } }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "object.fromentries": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", "dev": true, "requires": { - "tslib": "^1.9.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { + "object.hasown": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", + "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", "dev": true, "requires": { - "ret": "~0.1.10" + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" } }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" + "isobject": "^3.0.1" } }, - "sass": { - "version": "1.32.8", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.8.tgz", - "integrity": "sha512-Sl6mIeGpzjIUZqvKnKETfMf0iDAswD9TNlv13A7aAF3XZlRPMq4VvJWBC2N2DXbp94MQVdNSFG6LfF/iOXrPHQ==", + "object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "dev": true, "requires": { - "chokidar": ">=2.0.0 <4.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" } }, - "sass-loader": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-9.0.3.tgz", - "integrity": "sha512-fOwsP98ac1VMme+V3+o0HaaMHp8Q/C9P+MUazLFVi3Jl7ORGHQXL1XeRZt3zLSGZQQPC8xE42Y2WptItvGjDQg==", + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "dev": true, "requires": { - "klona": "^1.1.2", - "loader-utils": "^2.0.0", - "neo-async": "^2.6.2", - "schema-utils": "^2.7.0", - "semver": "^7.3.2" - }, - "dependencies": { - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } + "ee-first": "1.1.1" } }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "xmlchars": "^2.2.0" + "wrappy": "1" } }, - "scheduler": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz", - "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==", + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "mimic-fn": "^2.1.0" } }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", "dev": true, "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" + "is-wsl": "^1.1.0" + }, + "dependencies": { + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + } } }, - "seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", "dev": true }, - "selenium-standalone": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/selenium-standalone/-/selenium-standalone-6.23.0.tgz", - "integrity": "sha512-6dVLSEvbixd/MRSEmrcRQD8dmABrzNsxRqroKFQY+RVzm1JVPgGHIlo6qJzG6akfjc2V8SadHslE6lN4BFVM3w==", + "opts": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/opts/-/opts-2.0.2.tgz", + "integrity": "sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==", + "dev": true + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, "requires": { - "commander": "^2.20.3", - "cross-spawn": "^7.0.3", - "debug": "^4.3.1", - "got": "^11.8.0", - "lodash.mapvalues": "^4.6.0", - "lodash.merge": "^4.6.2", - "minimist": "^1.2.5", - "mkdirp": "^1.0.4", - "progress": "2.0.3", - "tar-stream": "2.1.4", - "which": "^2.0.2", - "yauzl": "^2.10.0" + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" }, "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "color-convert": "^2.0.1" } }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "ms": "2.1.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "color-name": "~1.1.4" } }, - "tar-stream": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz", - "integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "isexe": "^2.0.0" + "has-flag": "^4.0.0" } } } }, - "selfsigned": { - "version": "1.10.8", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", - "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", - "dev": true, - "requires": { - "node-forge": "^0.10.0" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true }, - "semver-greatest-satisfied-range": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", - "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", - "dev": true, - "requires": { - "sver-compat": "^1.5.0" - } + "p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } + "p-each-series": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", + "dev": true }, - "serialize-error": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-5.0.0.tgz", - "integrity": "sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA==", + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-iteration": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/p-iteration/-/p-iteration-1.1.8.tgz", + "integrity": "sha512-IMFBSDIYcPNnW7uWYGrBqmvTiq7W0uB0fJn6shQZs7dlF3OvrHOre+JT9ikSZ7gZS3vWqclVgoQSvToJrns7uQ==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "type-fest": "^0.8.0" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } + "p-try": "^2.0.0" } }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "randombytes": "^2.1.0" + "p-limit": "^2.2.0" } }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - } + "callsites": "^3.0.0" } }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" + "error-ex": "^1.2.0" } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", "dev": true }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", "dev": true }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "parse5": "^6.0.1" } }, - "shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", "dev": true }, - "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - }, - "dependencies": { - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true - } - } + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true }, - "shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, - "simple-plist": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.1.1.tgz", - "integrity": "sha512-pKMCVKvZbZTsqYR6RKgLfBHkh2cV89GXcA/0CVPje3sOiNOnXA8+rp/ciAMZ7JRaUdLzlEM6JFfUn+fS6Nt3hg==", - "dev": true, - "requires": { - "bplist-creator": "0.0.8", - "bplist-parser": "0.2.0", - "plist": "^3.0.1" - } + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", "dev": true }, - "slice-ansi": { + "performance-now": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - } - } + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", "dev": true }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "pinkie": "^2.0.0" } }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", "dev": true, "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "node-modules-regexp": "^1.0.0" } }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "find-up": "^4.0.0" } }, - "sockjs": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", - "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "plist": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.4.tgz", + "integrity": "sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg==", "dev": true, "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^3.4.0", - "websocket-driver": "^0.7.4" + "base64-js": "^1.5.1", + "xmlbuilder": "^9.0.7" } }, - "sockjs-client": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", - "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", + "plugin-error": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", "dev": true, "requires": { - "debug": "^3.2.6", - "eventsource": "^1.0.7", - "faye-websocket": "^0.11.3", - "inherits": "^2.0.4", - "json3": "^3.3.3", - "url-parse": "^1.5.1" + "ansi-cyan": "^0.1.1", + "ansi-red": "^0.1.1", + "arr-diff": "^1.0.1", + "arr-union": "^2.0.1", + "extend-shallow": "^1.1.2" }, "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "arr-diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", + "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", "dev": true, "requires": { - "ms": "^2.1.1" + "arr-flatten": "^1.0.1", + "array-slice": "^0.2.3" } }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "arr-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", + "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", "dev": true - } - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-loader": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.2.4.tgz", - "integrity": "sha512-OU6UJUty+i2JDpTItnizPrlpOIBLmQbWMuBg9q5bVtnHACqw1tn9nNwqJLbv0/00JjnJb/Ee5g5WS5vrRv7zIQ==", - "dev": true, - "requires": { - "async": "^2.5.0", - "loader-utils": "^1.1.0" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + }, + "extend-shallow": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", "dev": true, "requires": { - "lodash": "^4.17.14" + "kind-of": "^1.1.0" } + }, + "kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", + "dev": true } } }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "postcss": { + "version": "8.3.9", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.9.tgz", + "integrity": "sha512-f/ZFyAKh9Dnqytx5X62jgjhhzttjZS7hMsohcI7HEI5tjELX/HxCy3EFhsRxyzGvrzFF+82XPvCS8T9TFleVJw==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "nanoid": "^3.1.28", + "picocolors": "^0.2.1", + "source-map-js": "^0.6.2" }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", "dev": true } } }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true - }, - "sparkles": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", - "dev": true - }, - "spawn-command": { - "version": "0.0.2-1", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", - "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "postcss-url": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-10.1.3.tgz", + "integrity": "sha512-FUzyxfI5l2tKmXdYc6VTu3TWZsInayEKPbiyW+P6vmmIrrb4I6CGX0BFoewgYHLK+oIL5FECEK02REYRpBvUCw==", "dev": true, "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "make-dir": "~3.1.0", + "mime": "~2.5.2", + "minimatch": "~3.0.4", + "xxhashjs": "~0.2.2" } }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "prettier": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.4.1.tgz", + "integrity": "sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==", "dev": true }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" } }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dev": true, "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" }, "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "ms": "2.1.2" + "color-convert": "^2.0.1" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "color-name": "~1.1.4" } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true } } }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "pretty-ms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", "dev": true, "requires": { - "extend-shallow": "^3.0.0" + "parse-ms": "^2.1.0" } }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "printj": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", "dev": true }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "stack-utils": { + "progress": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", "dev": true, "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } + "asap": "~2.0.3" } }, - "stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, "requires": { - "type-fest": "^0.7.1" - }, - "dependencies": { - "type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "dev": true - } + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" } }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" } }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", "dev": true }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true }, - "stream-buffers": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", - "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==", + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", "dev": true }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" + "once": "^1.3.1" } }, - "stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" + "puppeteer-core": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-10.4.0.tgz", + "integrity": "sha512-KU8zyb7AIOqNjLCN3wkrFXxh+EVaG+zrs2P03ATNjc3iwSxHsu5/EvZiREpQ/IJiT9xfQbDVgKcsvRuzLCxglQ==", + "dev": true, + "requires": { + "debug": "4.3.1", + "devtools-protocol": "0.0.901419", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.0", + "node-fetch": "2.6.1", + "pkg-dir": "4.2.0", + "progress": "2.0.1", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.0.0", + "unbzip2-stream": "1.3.3", + "ws": "7.4.6" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "devtools-protocol": { + "version": "0.0.901419", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.901419.tgz", + "integrity": "sha512-4INMPwNm9XRpBukhNbF7OB6fNTTCaI8pzy/fXg0xQzAy5h3zL1P8xT3QazgKqBrb/hAYwIBizqDBZ7GtJE74QQ==", + "dev": true + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "dev": true + }, + "progress": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz", + "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==", + "dev": true + }, + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "dev": true, + "requires": {} + } } }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "query-selector": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/query-selector/-/query-selector-1.0.9.tgz", + "integrity": "sha1-kX/TG3N5tT/UQeU2r2R1UuAefp4=" + }, + "query-selector-shadow-dom": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/query-selector-shadow-dom/-/query-selector-shadow-dom-1.0.0.tgz", + "integrity": "sha512-bK0/0cCI+R8ZmOF1QjT7HupDUYCxbf/9TJgAmSXQxZpftXmTAeil9DRoCnTDkWbvOyZzhcMBwKpptWcdkGFIMg==", "dev": true }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true }, - "string.prototype.matchall": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz", - "integrity": "sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==", + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has-symbols": "^1.0.1", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.3.1", - "side-channel": "^1.0.4" + "performance-now": "^2.1.0" } }, - "string.prototype.trim": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.4.tgz", - "integrity": "sha512-hWCk/iqf7lp0/AgTF7/ddO1IWtSNPASjlzCicV5irAVdE1grjsneK26YG6xACMBEdCvO8fUST0UzDMh/2Qy+9Q==", + "railroad-diagrams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", + "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=", + "dev": true + }, + "randexp": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", + "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" + "discontinuous-range": "1.0.0", + "ret": "~0.1.10" } }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "safe-buffer": "^5.1.0" } }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "react": { + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.9.0.tgz", + "integrity": "sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w==", "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, + "react-d3-cloud": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/react-d3-cloud/-/react-d3-cloud-1.0.5.tgz", + "integrity": "sha512-zKrJY+apmhw+J1se64vFW4Cr7y4W1sSYQLjQXHc9JaxiwhBOK1bikVui1IeOy4UHbUqis0YPQUE+9BBL4O8K9g==", "requires": { - "safe-buffer": "~5.1.0" + "d3-cloud": "^1.2.5", + "d3-scale": "^3.3.0", + "d3-scale-chromatic": "^2.0.0", + "d3-selection": "^2.0.0", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.2.0", + "react-faux-dom": "^4.5.0" + }, + "dependencies": { + "d3-scale": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.3.0.tgz", + "integrity": "sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==", + "requires": { + "d3-array": "^2.3.0", + "d3-format": "1 - 2", + "d3-interpolate": "1.2.0 - 2", + "d3-time": "^2.1.1", + "d3-time-format": "2 - 3" + } + }, + "d3-scale-chromatic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-2.0.0.tgz", + "integrity": "sha512-LLqy7dJSL8yDy7NRmf6xSlsFZ6zYvJ4BcWFE4zBrOPnQERv9zj24ohnXKRbyi9YHnYV+HN1oEO3iFK971/gkzA==", + "requires": { + "d3-color": "1 - 2", + "d3-interpolate": "1 - 2" + } + }, + "d3-selection": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-2.0.0.tgz", + "integrity": "sha512-XoGGqhLUN/W14NmaqcO/bb1nqjDAw5WtSYb2X8wiuQWvSZUsUVYsOSkOybUrNvcBjaywBdYPy03eXHMXjk9nZA==" + }, + "d3-time": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz", + "integrity": "sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==", + "requires": { + "d3-array": "2" + } + } } }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "react-devtools-core": { + "version": "4.20.1", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.20.1.tgz", + "integrity": "sha512-HBcLfLi2R6VxlWFF2i5lONYlr3KLh324RPFeApZ3G6GGaJrcS/qtk9M/iESw7fRTlgPHEg+A4j6e1j9oXpvi5w==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "shell-quote": "^1.6.1", + "ws": "^7" } }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, + "react-dom": { + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.9.0.tgz", + "integrity": "sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ==", + "peer": true, "requires": { - "is-utf8": "^0.2.0" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.15.0" } }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "react-fast-compare": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", + "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" }, - "style-attr": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/style-attr/-/style-attr-1.3.0.tgz", - "integrity": "sha512-srFr54gzEZoy73WgYfnbxCAtNCzF0Hn5RGzK7gi/0G6ttZd9v3WZFGY4ed5ABr43dbGjPNr4T46geUxxUP9i6w==" + "react-faux-dom": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/react-faux-dom/-/react-faux-dom-4.5.0.tgz", + "integrity": "sha512-T03fyZw/He4EYPqQpK5KJ9BQXNNMMgUo5DiwWkFG5wlpMDuiiYc4Q8WfeODjl3g2S2OBqy3+0VUr44sZkqz2Sw==", + "requires": { + "create-react-class": "^15.6.3", + "hoist-non-react-statics": "^3.3.0", + "query-selector": "^1.0.9", + "style-attr": "^1.0.1" + } }, - "style-loader": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", - "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", + "react-hot-loader": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.13.0.tgz", + "integrity": "sha512-JrLlvUPqh6wIkrK2hZDfOyq/Uh/WeVEr8nc7hkn2/3Ul0sx1Kr5y4kOGNacNRoj7RhwLNcQ3Udf1KJXrqc0ZtA==", "dev": true, "requires": { + "fast-levenshtein": "^2.0.6", + "global": "^4.3.0", + "hoist-non-react-statics": "^3.3.0", "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0" + "prop-types": "^15.6.1", + "react-lifecycles-compat": "^3.0.4", + "shallowequal": "^1.1.0", + "source-map": "^0.7.3" }, "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true } } }, - "sudo-prompt": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", - "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==", + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", "dev": true }, - "suffix": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/suffix/-/suffix-0.1.1.tgz", - "integrity": "sha1-zFgjFkag7xEC95R47zqSSP2chC8=", + "react-refresh": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.4.3.tgz", + "integrity": "sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==", "dev": true }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "react-shallow-renderer": { + "version": "16.14.1", + "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.14.1.tgz", + "integrity": "sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "object-assign": "^4.1.1", + "react-is": "^16.12.0 || ^17.0.0" } }, - "supports-hyperlinks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", - "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", + "react-wordcloud": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/react-wordcloud/-/react-wordcloud-1.2.7.tgz", + "integrity": "sha512-pyXvL8Iu2J258Qk2/kAwY23dIVhNpMC3dnvbXRkw5+Ert5EkJWwnwVjs9q8CmX38NWbfCKhGmpjuumBoQEtniw==", + "requires": { + "d3-array": "^2.5.0", + "d3-cloud": "^1.2.5", + "d3-dispatch": "^1.0.6", + "d3-scale": "^3.2.1", + "d3-scale-chromatic": "^1.5.0", + "d3-selection": "1.4.2", + "d3-transition": "^1.3.2", + "lodash.clonedeep": "^4.5.0", + "lodash.debounce": "^4.0.8", + "resize-observer-polyfill": "^1.5.1", + "seedrandom": "^3.0.5", + "tippy.js": "^6.2.6" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" }, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "has-flag": "^4.0.0" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } } } }, - "sver-compat": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", - "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", - "dev": true, - "requires": { - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" - } - }, - "symbol-observable": { + "read-pkg-up": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", - "dev": true - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "pinkie-promise": "^2.0.0" } } } }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, - "tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, - "temp": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", - "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", + "readdir-glob": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.1.tgz", + "integrity": "sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==", "dev": true, "requires": { - "os-tmpdir": "^1.0.0", - "rimraf": "~2.2.6" - }, - "dependencies": { - "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", - "dev": true - } + "minimatch": "^3.0.4" } }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" + "picomatch": "^2.2.1" } }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "resolve": "^1.1.6" } }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "recursive-copy": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/recursive-copy/-/recursive-copy-2.0.13.tgz", + "integrity": "sha512-BjmE6R/dOImStEku+017L3Z0I6u/lA+SVr1sySWbTLjmQKDTESNmJ9WBZP8wbN5FuvqNvSYvRKA/IKQhAjqnpQ==", "dev": true, "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" + "del": "^2.2.0", + "errno": "^0.1.2", + "graceful-fs": "^4.1.4", + "junk": "^1.0.1", + "maximatch": "^0.1.0", + "mkdirp": "^0.5.1", + "pify": "^2.3.0", + "promise": "^7.0.1", + "slash": "^1.0.0" }, "dependencies": { - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, "mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -18565,1822 +38008,2215 @@ "minimist": "^1.2.5" } }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "schema-utils": { + "slash": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", "dev": true } } }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "dev": true, + "requires": { + "minimatch": "3.0.4" + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", + "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "regexpu-core": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", + "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^9.0.0", + "regjsgen": "^0.5.2", + "regjsparser": "^0.7.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "regjsparser": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", + "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", "dev": true, "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } } }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", "dev": true }, - "throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", "dev": true }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" } }, - "through2-filter": { + "resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, + "resolve-cwd": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "requires": { - "through2": "~2.0.0", - "xtend": "~4.0.0" + "resolve-from": "^5.0.0" } }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, - "timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "responselike": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", + "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", "dev": true, "requires": { - "setimmediate": "^1.0.4" + "lowercase-keys": "^2.0.0" } }, - "tippy.js": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.1.tgz", - "integrity": "sha512-JnFncCq+rF1dTURupoJ4yPie5Cof978inW6/4S6kmWV7LL9YOSEVMifED3KdrVPEG+Z/TFH2CDNJcQEfaeuQww==", + "resq": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/resq/-/resq-1.10.1.tgz", + "integrity": "sha512-zhp1iyUH02MLciv3bIM2bNtTFx/fqRsK4Jk73jcPqp00d/sMTTjOtjdTMAcgjrQKGx5DvQ/HSpeqaMW0atGRJA==", + "dev": true, "requires": { - "@popperjs/core": "^2.8.3" + "fast-deep-equal": "^2.0.1" + }, + "dependencies": { + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + } } }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "requires": { - "os-tmpdir": "~1.0.2" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" } }, - "tmpl": { + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, - "to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", + "rgb2hex": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.2.5.tgz", + "integrity": "sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" + "glob": "^7.1.3" } }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true + "rollup": { + "version": "2.58.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.58.0.tgz", + "integrity": "sha512-NOXpusKnaRpbS7ZVSzcEXqxcLDOagN6iFS8p45RkoiMqPHDLwJm758UF05KlMoCRbLBTZsPOIa887gZJ1AiXvw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "rollup-plugin-clear": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/rollup-plugin-clear/-/rollup-plugin-clear-2.0.7.tgz", + "integrity": "sha512-Hg8NC3JcJBO1ofgyQC0IACpyKn/yhHPGZ3C7R3ubNGWUXy9JXHQrewk4J4hVcZznw6SOKayLsaNae596Rwt8Vg==", + "dev": true, + "requires": { + "rimraf": "^2.6.2" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "rollup-plugin-command": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-command/-/rollup-plugin-command-1.1.3.tgz", + "integrity": "sha512-9nIcP5mgVYWGU7x/6ufTgtqI4vl5vvsYs6fTTil91NX53EIPcim42FXmq1TPdZRFJbUM1ikrg05clahPxObL1g==", "dev": true }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "rollup-plugin-livereload": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/rollup-plugin-livereload/-/rollup-plugin-livereload-2.0.5.tgz", + "integrity": "sha512-vqQZ/UQowTW7VoiKEM5ouNW90wE5/GZLfdWuR0ELxyKOJUIaj+uismPZZaICU4DnWPVjnpCDDxEqwU7pcKY/PA==", "dev": true, "requires": { - "kind-of": "^3.0.2" + "livereload": "^0.9.1" + } + }, + "rollup-plugin-re": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/rollup-plugin-re/-/rollup-plugin-re-1.0.7.tgz", + "integrity": "sha1-/hdHBO1ZzahMrwK9ATtYLm/apPY=", + "dev": true, + "requires": { + "magic-string": "^0.16.0", + "rollup-pluginutils": "^2.0.1" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "magic-string": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.16.0.tgz", + "integrity": "sha1-lw67DacZMwEoX7GqZQ85vdgetFo=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "vlq": "^0.2.1" } + }, + "vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true } } }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "rollup-plugin-sass": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/rollup-plugin-sass/-/rollup-plugin-sass-1.2.9.tgz", + "integrity": "sha512-ShI0T6tQxvM0B/njgZ35/1RuiNZTo9LtrUYFRupNokmXbresGb6RvYnkQvWbq4a5UBIp57VJ+cjPcsJKthXV8Q==", "dev": true, "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "@rollup/pluginutils": "^3.1.0", + "resolve": "^1.5.0", + "sass": "^1.7.2" } }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" } }, - "to-string-loader": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/to-string-loader/-/to-string-loader-1.1.6.tgz", - "integrity": "sha512-VNg62//PS1WfNwrK3n7t6wtK5Vdtx/qeYLLEioW46VMlYUwAYT6wnfB+OwS2FMTCalIHu0tk79D3RXX8ttmZTQ==", + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", "dev": true, "requires": { - "loader-utils": "^1.0.0" + "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + } } }, - "to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", + "rst-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", + "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=", "dev": true, "requires": { - "through2": "^2.0.3" + "lodash.flattendeep": "^4.4.0", + "nearley": "^2.7.10" } }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", "dev": true }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "queue-microtask": "^1.2.2" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "requires": { + "rx-lite": "*" } }, - "tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "requires": { - "punycode": "^2.1.1" + "tslib": "^1.9.0" } }, - "tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "ts-jest": { - "version": "26.5.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.4.tgz", - "integrity": "sha512-I5Qsddo+VTm94SukBJ4cPimOoFZsYTeElR2xy6H2TOVs+NsvgYglW8KuQgKoApOKuaU/Ix/vrF9ebFZlb5D2Pg==", + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "bs-logger": "0.x", - "buffer-from": "1.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^26.1.0", - "json5": "2.x", - "lodash": "4.x", - "make-error": "1.x", - "mkdirp": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - }, - "dependencies": { - "yargs-parser": { - "version": "20.2.7", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", - "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", - "dev": true - } + "ret": "~0.1.10" } }, - "ts-loader": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-6.2.2.tgz", - "integrity": "sha512-HDo5kXZCBml3EUPcc7RlZOV/JGlLHwppTLEHb3SHnr5V7NXD4klMEkrhJe5wgRbaWsSXi+Y1SIBN/K9B6zWGWQ==", + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", "dev": true, "requires": { - "chalk": "^2.3.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^1.0.2", - "micromatch": "^4.0.0", - "semver": "^6.0.0" + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" }, "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "to-regex-range": "^5.0.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } } }, "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } }, "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" + "remove-trailing-separator": "^1.0.1" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "^7.0.0" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } } } }, - "ts-node": { - "version": "8.10.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", - "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", + "sass": { + "version": "1.43.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.43.2.tgz", + "integrity": "sha512-DncYhjl3wBaPMMJR0kIUaH3sF536rVrOcqqVGmTZHQRRzj7LQlyGV7Mb8aCKFyILMr5VsPHwRYtyKpnKYlmQSQ==", "dev": true, "requires": { - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" + "chokidar": ">=3.0.0 <4.0.0" } }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, "requires": { - "tslib": "^1.8.1" + "xmlchars": "^2.2.0" } }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, + "scheduler": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz", + "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==", + "peer": true, "requires": { - "safe-buffer": "^5.0.1" + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" } }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true + "seedrandom": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "selenium-standalone": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/selenium-standalone/-/selenium-standalone-7.1.0.tgz", + "integrity": "sha512-Pc7U48qwB4LVy/XczBrPPXwUhEPl3XQSik8SjLfj2qzBEtZqrjyzOlnnXq4aVCdr5wH9FiFJm8LwheJbK2+/oQ==", "dev": true, "requires": { - "prelude-ls": "~1.1.2" + "commander": "^7.2.0", + "cross-spawn": "^7.0.3", + "debug": "^4.3.1", + "fs-extra": "^10.0.0", + "got": "^11.8.2", + "is-port-reachable": "^3.0.0", + "lodash.mapvalues": "^4.6.0", + "lodash.merge": "^4.6.2", + "minimist": "^1.2.5", + "mkdirp": "^1.0.4", + "progress": "2.0.3", + "tar-stream": "2.2.0", + "which": "^2.0.2", + "yauzl": "^2.10.0" + }, + "dependencies": { + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "lru-cache": "^6.0.0" } }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "dev": true, "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "3.9.9", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz", - "integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w==", - "dev": true - }, - "ua-parser-js": { - "version": "0.7.26", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.26.tgz", - "integrity": "sha512-VwIvGlFNmpKbjzRt51jpbbFTrKIEgGHxIwA8Y69K1Bqc6bTIV7TaGGABOkghSFQWsLmcRB4drGvpfv9z2szqoQ==", - "dev": true + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } }, - "uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "serialize-error": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", "dev": true, "requires": { - "commander": "~2.13.0", - "source-map": "~0.6.1" + "type-fest": "^0.20.2" }, "dependencies": { - "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true } } }, - "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", - "dev": true + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" } }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, - "undertaker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", - "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "requires": { - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "bach": "^1.0.0", - "collection-map": "^1.0.0", - "es6-weak-map": "^2.0.1", - "fast-levenshtein": "^1.0.0", - "last-run": "^1.1.0", - "object.defaults": "^1.0.0", - "object.reduce": "^1.0.0", - "undertaker-registry": "^1.0.0" - }, - "dependencies": { - "fast-levenshtein": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", - "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=", - "dev": true + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } } } }, - "undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", "dev": true }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "kind-of": "^6.0.2" } }, - "unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { + "shallowequal": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", "dev": true }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" + "shebang-regex": "^3.0.0" } }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", "dev": true, "requires": { - "unique-slug": "^2.0.0" + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" } }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "shelljs": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", "dev": true, "requires": { - "imurmurhash": "^0.1.4" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" } }, - "unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true, + "optional": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.0.0" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" } }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "signal-exit": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", + "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", "dev": true }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "simple-plist": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.1.1.tgz", + "integrity": "sha512-pKMCVKvZbZTsqYR6RKgLfBHkh2cV89GXcA/0CVPje3sOiNOnXA8+rp/ciAMZ7JRaUdLzlEM6JFfUn+fS6Nt3hg==", + "dev": true, + "requires": { + "bplist-creator": "0.0.8", + "bplist-parser": "0.2.0", + "plist": "^3.0.1" + } + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "dev": true }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" } }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } } } }, - "url-loader": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz", - "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==", + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "mime": "^2.0.3", - "schema-utils": "^1.0.0" + "kind-of": "^3.2.0" }, "dependencies": { - "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "is-buffer": "^1.1.5" } } } }, - "url-parse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", - "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "dev": true, "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "source-map-support": { + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "dev": true, "requires": { - "inherits": "2.0.3" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" }, "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "dev": true }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "dev": true }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", "dev": true }, - "v8-compile-cache": { + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, - "v8-to-istanbul": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.1.tgz", - "integrity": "sha512-p0BB09E5FRjx0ELN6RgusIPsSPhtgexSRcKETybEs6IGOTXJSZqfwxp7r//55nnu0f1AxltY5VvdVqy2vZf9AA==", + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "spdx-license-ids": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", + "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "homedir-polyfill": "^1.0.1" + "extend-shallow": "^3.0.0" } }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "readable-stream": "^3.0.0" } }, - "value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", - "dev": true - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "stack-utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", + "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } } }, - "vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "stackframe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", + "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==", + "dev": true + }, + "stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", "dev": true, "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" + "type-fest": "^0.7.1" }, "dependencies": { - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", "dev": true } } }, - "vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, - "requires": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - } - }, - "vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "remove-trailing-separator": "^1.0.1" + "is-descriptor": "^0.1.0" } } } }, - "vlq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", - "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==", + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "stream-buffers": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", + "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==", "dev": true }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "requires": { - "browser-process-hrtime": "^1.0.0" + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, "requires": { - "xml-name-validator": "^3.0.0" + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" } }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "makeerror": "1.0.x" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, - "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "string.prototype.matchall": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", + "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", "dev": true, "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" } }, - "watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "string.prototype.trim": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.5.tgz", + "integrity": "sha512-Lnh17webJVsD6ECeovpVN17RlAKjmz4rF9S+8Y45CkMc/ufVpTkU3vZIyIC7sllQ1FCvObZnnCdNs/HXTUOTlg==", "dev": true, - "optional": true, "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true - } + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" } }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { - "minimalistic-assert": "^1.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { - "defaults": "^1.0.3" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, - "webdriver": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-5.23.0.tgz", - "integrity": "sha512-r7IrbZ2SuTIRyWV8mv4a4hZoFcT9Qt4MznOkdRWPE1sPpZ8lyLZsIEjKCEbHelOzPwURqk+biwGrm4z2OZRAiw==", + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "@types/request": "^2.48.4", - "@wdio/config": "5.22.4", - "@wdio/logger": "5.16.10", - "@wdio/protocols": "5.22.1", - "@wdio/utils": "5.23.0", - "lodash.merge": "^4.6.1", - "request": "^2.83.0" + "ansi-regex": "^5.0.1" } }, - "webdriverio": { - "version": "5.23.0", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-5.23.0.tgz", - "integrity": "sha512-hxt6Nuu2bBrTsVk7GfoFRTh63l4fRVXlK9U30RtPbHoWO5tcFdyUz2UTgeHEZ54ea1DQEVPfsgFiLnJULkWp1Q==", + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "@wdio/config": "5.22.4", - "@wdio/logger": "5.16.10", - "@wdio/repl": "5.23.0", - "@wdio/utils": "5.23.0", - "archiver": "^3.0.0", - "css-value": "^0.0.1", - "grapheme-splitter": "^1.0.2", - "lodash.clonedeep": "^4.5.0", - "lodash.isobject": "^3.0.2", - "lodash.isplainobject": "^4.0.6", - "lodash.zip": "^4.2.0", - "resq": "^1.6.0", - "rgb2hex": "^0.1.0", - "serialize-error": "^5.0.0", - "webdriver": "5.23.0" + "is-utf8": "^0.2.0" } }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, - "webpack": { - "version": "4.46.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", - "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.5.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" } }, - "webpack-cli": { - "version": "3.3.12", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz", - "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "style-attr": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/style-attr/-/style-attr-1.3.0.tgz", + "integrity": "sha512-srFr54gzEZoy73WgYfnbxCAtNCzF0Hn5RGzK7gi/0G6ttZd9v3WZFGY4ed5ABr43dbGjPNr4T46geUxxUP9i6w==" + }, + "sudo-prompt": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", + "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==", + "dev": true + }, + "suffix": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/suffix/-/suffix-0.1.1.tgz", + "integrity": "sha1-zFgjFkag7xEC95R47zqSSP2chC8=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.1", - "findup-sync": "^3.0.0", - "global-modules": "^2.0.0", - "import-local": "^2.0.0", - "interpret": "^1.4.0", - "loader-utils": "^1.4.0", - "supports-color": "^6.1.0", - "v8-compile-cache": "^2.1.1", - "yargs": "^13.3.2" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "has-flag": "^3.0.0" + } + }, + "supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "has-flag": "^4.0.0" } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + } + } + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "table": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.2.tgz", + "integrity": "sha512-UFZK67uvyNivLeQbVtkiUs8Uuuxv24aSL4/Vil2PJVtMgU8Lx0CYkP12uCGa3kjyQzOSgV1+z9Wkb82fCGsO0g==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + } + } + }, + "tar-fs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz", + "integrity": "sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp": "^0.5.1", + "pump": "^3.0.0", + "tar-stream": "^2.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "resolve-from": "^3.0.0" + "minimist": "^1.2.5" } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + } + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, + "temp": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", + "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", + "dev": true, + "requires": { + "os-tmpdir": "^1.0.0", + "rimraf": "~2.2.6" + }, + "dependencies": { + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + } + } + }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + } + }, + "terser": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", + "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + } + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "safe-buffer": "~5.1.0" } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + } + } + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "dev": true + }, + "tippy.js": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.1.tgz", + "integrity": "sha512-JnFncCq+rF1dTURupoJ4yPie5Cof978inW6/4S6kmWV7LL9YOSEVMifED3KdrVPEG+Z/TFH2CDNJcQEfaeuQww==", + "requires": { + "@popperjs/core": "^2.8.3" + } + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" + "is-buffer": "^1.1.5" } - }, + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, + "ts-jest": { + "version": "26.5.6", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.6.tgz", + "integrity": "sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "buffer-from": "1.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^26.1.0", + "json5": "2.x", + "lodash": "4.x", + "make-error": "1.x", + "mkdirp": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "dependencies": { "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true } } }, - "webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", "dev": true, "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", - "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" }, "dependencies": { - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + } + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "dev": true + }, + "ua-parser-js": { + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", + "dev": true + }, + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "dev": true, + "requires": { + "commander": "~2.13.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", "dev": true }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, - "webpack-dev-server": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", - "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, + "unbzip2-stream": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", + "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", + "dev": true, + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.1.8", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", - "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", - "selfsigned": "^1.10.8", - "semver": "^6.3.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "sockjs-client": "^1.5.0", - "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "isarray": "1.0.0" } } } }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } } } }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "v8-to-istanbul": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", + "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", "dev": true, "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" }, "dependencies": { - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true } } }, - "webpack-merge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", - "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { - "lodash": "^4.17.15" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vlq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", + "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==", + "dev": true + }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", "dev": true, "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "requires": { + "xml-name-validator": "^3.0.0" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "requires": { + "makeerror": "1.0.x" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webdriver": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-7.14.1.tgz", + "integrity": "sha512-YhnuVquRQBVDO4seFDSpKsT5VFTpNTK7YZIPB6MwDBsIiiXA5Lt8QJN4kBuE6zuHmRuGRFv1y1dONCxsumEtXQ==", + "dev": true, + "requires": { + "@types/node": "^15.12.5", + "@wdio/config": "7.14.1", + "@wdio/logger": "7.7.0", + "@wdio/protocols": "7.13.2", + "@wdio/types": "7.14.1", + "@wdio/utils": "7.14.1", + "got": "^11.0.2", + "ky": "^0.28.5", + "lodash.merge": "^4.6.1" }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "@types/node": { + "version": "15.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz", + "integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==", "dev": true } } }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" + "webdriverio": { + "version": "7.14.1", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-7.14.1.tgz", + "integrity": "sha512-LE3YbEkzqqpCt2lN4JIYSpfv1mOXUk2SCglUXHD1O/uNY/Z1hUM5iL0X7tW0Wg5QKvH5YYJ/YPmtqza1OrtNAg==", + "dev": true, + "requires": { + "@types/aria-query": "^4.2.1", + "@types/node": "^15.12.5", + "@wdio/config": "7.14.1", + "@wdio/logger": "7.7.0", + "@wdio/protocols": "7.13.2", + "@wdio/repl": "7.14.1", + "@wdio/types": "7.14.1", + "@wdio/utils": "7.14.1", + "archiver": "^5.0.0", + "aria-query": "^5.0.0", + "atob": "^2.1.2", + "css-shorthand-properties": "^1.1.1", + "css-value": "^0.0.1", + "devtools": "7.14.1", + "devtools-protocol": "^0.0.927104", + "fs-extra": "^10.0.0", + "get-port": "^5.1.1", + "grapheme-splitter": "^1.0.2", + "lodash.clonedeep": "^4.5.0", + "lodash.isobject": "^3.0.2", + "lodash.isplainobject": "^4.0.6", + "lodash.zip": "^4.2.0", + "minimatch": "^3.0.4", + "puppeteer-core": "^10.1.0", + "query-selector-shadow-dom": "^1.0.0", + "resq": "^1.9.1", + "rgb2hex": "0.2.5", + "serialize-error": "^8.0.0", + "webdriver": "7.14.1" + }, + "dependencies": { + "@types/node": { + "version": "15.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz", + "integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==", + "dev": true + }, + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + } } }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true }, "whatwg-encoding": { @@ -20405,13 +40241,13 @@ "dev": true }, "whatwg-url": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.5.0.tgz", - "integrity": "sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, "requires": { "lodash": "^4.7.0", - "tr46": "^2.0.2", + "tr46": "^2.1.0", "webidl-conversions": "^6.1.0" } }, @@ -20428,6 +40264,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, "requires": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -20454,15 +40291,6 @@ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, "wrap-ansi": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", @@ -20520,26 +40348,6 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - } - } - }, "write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", @@ -20553,10 +40361,11 @@ } }, "ws": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", - "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", - "dev": true + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", + "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", + "dev": true, + "requires": {} }, "xcode": { "version": "2.1.0", @@ -20566,6 +40375,14 @@ "requires": { "simple-plist": "^1.0.0", "uuid": "^3.3.2" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } } }, "xml": { @@ -20619,12 +40436,6 @@ "sax": "^1.2.1" } }, - "xmldom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.5.0.tgz", - "integrity": "sha512-Foaj5FXVzgn7xFzsKeNIde9g6aFBxTPi37iwsno8QvApmtg7KYrr+OPyRHcJF7dud2a5nGRBXK3n0dL62Gf7PA==", - "dev": true - }, "xpipe": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/xpipe/-/xpipe-1.0.5.tgz", @@ -20637,10 +40448,19 @@ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true }, + "xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", + "dev": true, + "requires": { + "cuint": "^0.2.2" + } + }, "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yallist": { @@ -20714,6 +40534,26 @@ "supports-color": "^2.0.0" } }, + "cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -20728,6 +40568,12 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true } } }, @@ -20741,50 +40587,116 @@ "fd-slicer": "~1.1.0" } }, - "yazl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", - "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3" - } - }, "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - }, - "zip-stream": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.1.3.tgz", - "integrity": "sha512-EkXc2JGcKhO5N5aZ7TmuNo45budRaFGHOmz24wtJR7znbNqDPmdZtUauKX6et8KAVseAMBOyWJqEpXcHTBsh7Q==", + "zip-a-folder": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/zip-a-folder/-/zip-a-folder-0.0.12.tgz", + "integrity": "sha512-wZGiWgp3z2TocBlzx3S5tsLgPbT39qG2uIZmn2MhYLVjhKIr2nMhg7i4iPDL4W3XvMDaOEEVU5ZB0Y/Pt6BLvA==", "dev": true, "requires": { - "archiver-utils": "^2.1.0", - "compress-commons": "^2.1.1", - "readable-stream": "^3.4.0" + "archiver": "^3.1.1" }, "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "archiver": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.1.1.tgz", + "integrity": "sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==", + "dev": true, + "requires": { + "archiver-utils": "^2.1.0", + "async": "^2.6.3", + "buffer-crc32": "^0.2.1", + "glob": "^7.1.4", + "readable-stream": "^3.4.0", + "tar-stream": "^2.1.0", + "zip-stream": "^2.1.2" + } + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "compress-commons": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-2.1.1.tgz", + "integrity": "sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==", + "dev": true, + "requires": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^3.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^2.3.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + } + } + }, + "crc32-stream": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-3.0.1.tgz", + "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", + "dev": true, + "requires": { + "crc": "^3.4.4", + "readable-stream": "^3.4.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "zip-stream": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.1.3.tgz", + "integrity": "sha512-EkXc2JGcKhO5N5aZ7TmuNo45budRaFGHOmz24wtJR7znbNqDPmdZtUauKX6et8KAVseAMBOyWJqEpXcHTBsh7Q==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "archiver-utils": "^2.1.0", + "compress-commons": "^2.1.1", + "readable-stream": "^3.4.0" } } } + }, + "zip-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "dev": true, + "requires": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" + } } } } diff --git a/package.json b/package.json index b963ca1..318b402 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@ { "name": "wordcloud", "widgetName": "WordCloud", - "version": "1.0.0", + "version": "1.0.1", "description": "Show word cloud based on react-d3-cloud", "copyright": "2021 Objectivity", - "author": "Bartosz Hetmanski", + "author": "Tomasz Macisowicz", "config": { "projectPath": "../..//", "mendixHost": "http://localhost:8080", @@ -22,11 +22,13 @@ }, "license": "Apache-2.0", "devDependencies": { - "@mendix/pluggable-widgets-tools": "^8.14.0" + "@mendix/pluggable-widgets-tools": "^9.5.4", + "@types/node": "^16.10.9" }, "dependencies": { - "classnames": "^2.2.6", - "react-d3-cloud": "^0.7.0", + "@types/d3-cloud": "^1.2.5", + "classnames": "^2.3.1", + "react-d3-cloud": "^1.0.5", "react-wordcloud": "^1.2.7" } } diff --git a/src/WordCloud.jsx b/src/WordCloud.jsx index 82ed90a..7c90c8e 100644 --- a/src/WordCloud.jsx +++ b/src/WordCloud.jsx @@ -1,23 +1,34 @@ -import { Component, createElement } from "react"; +import React from 'react'; +import 'core-js'; +import { Component, createElement, render } from "react"; + + + import WordCloudWidgetComponent from "./components/WordCloudWidgetComponent"; + export default class WordCloudWidget extends Component { + + + shouldComponentUpdate(nextProps) { - shouldComponentUpdate(nextProps){ return nextProps.dataSource !== this.props.dataSource; } render() { + var dataToRender = []; - if(this.props.dataSource.status === "available"){ - var i=0; - for(i=0; i< this.props.dataSource.totalCount; i++) { - dataToRender.push({ - text: this.props.textAttrib(this.props.dataSource.items[i]).value, - value: this.props.intAttrib(this.props.dataSource.items[i]).value + + if (this.props.dataSource.status === "available" && this.props.dataSource.items) { + var i = 0; + for (i = 0; i < this.props.dataSource.items.length; i++) { + dataToRender.push({ + text: this.props.textAttrib.get((this.props.dataSource.items[i])).value, + value: this.props.intAttrib.get((this.props.dataSource.items[i])).value }); } } return ; + } } diff --git a/src/WordCloud.xml b/src/WordCloud.xml index 78f2b62..60728b6 100644 --- a/src/WordCloud.xml +++ b/src/WordCloud.xml @@ -34,7 +34,7 @@ - + Chosen word This attribute stores the clicked word diff --git a/src/components/WordCloudWidgetComponent.jsx b/src/components/WordCloudWidgetComponent.jsx index cf83dbc..9f6028a 100644 --- a/src/components/WordCloudWidgetComponent.jsx +++ b/src/components/WordCloudWidgetComponent.jsx @@ -1,20 +1,29 @@ -import { createElement } from "react"; -import { render } from "react-dom"; +import React from 'react'; +import { Component, createElement, render } from "react"; +import 'core-js'; import WordCloud from "react-d3-cloud"; -export default function WordCloudWidgetComponent(props){ + + + +export default function WordCloudWidgetComponent(props) { + const data = props.inputData; const fontSizeMapper = word => Math.log2(word.value) * 5; - const rotate = word => (Math.floor(Math.random()*2) * 90); - + const rotate = word => (Math.floor(Math.random() * 2) * 90); const onClickHandle = (text) => { - if (props.onClickAction.canExecute && !props.onClickAction.isExecuting) { - props.chosenWord.setValue(text); - props.onClickAction.execute(); + + (props.onClickAction.canExecute && !props.onClickAction.isExecuting) + + { + props.chosenWord.setValue(text); + props.onClickAction.execute(); } }; - + return ( - onClickHandle(word.text)}/> + + onClickHandle(word.text)} /> + ); } \ No newline at end of file