MediaWiki:Gadget-JSX.js

闲敲棋子落灯花-flood​(留言 | 贡献)2026年8月3日 (一) 15:22的版本 (Git commit 9db9f2f: refactor!: rename `ext.gadget.React` to `ext.gadget.JSX`)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
/**
 * SPDX-License-Identifier: BSD-3-Clause
 * _addText: '{{Gadget Header|license=BSD|attribution=proteriax}}'
 *
 * @base {@link https://github.com/alex-kinokon/jsx-dom}
 * @source {@link https://git.qiuwen.net.cn/InterfaceAdmin/QiuwenGadgets/src/branch/master/src/React}
 * @license BSD-3-Clause {@link https://github.com/alex-kinokon/jsx-dom/blob/master/LICENSE}
 */

/**
 * BSD 3-Clause License
 *
 * Copyright (c) proteriax
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice, this
 *    list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 *
 * 3. Neither the name of the copyright holder nor the names of its
 *    contributors may be used to endorse or promote products derived from
 *    this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
/**
 * +------------------------------------------------------------+
 * |            === WARNING: GLOBAL GADGET FILE ===             |
 * +------------------------------------------------------------+
 * |       All changes should be made in the repository,        |
 * |                otherwise they will be lost.                |
 * +------------------------------------------------------------+
 * |        Changes to this page may affect many users.         |
 * | Please discuss changes by opening an issue before editing. |
 * +------------------------------------------------------------+
 */
/* <nowiki> */

(() => {

"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __esm = (fn, res) => function __init() {
  return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
};
var __commonJS = (cb, mod) => function __require() {
  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __copyProps = (to, from, except, desc) => {
  if (from && typeof from === "object" || typeof from === "function") {
    for (let key of __getOwnPropNames(from))
      if (!__hasOwnProp.call(to, key) && key !== except)
        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  }
  return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/global-this.js
var require_global_this = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/global-this.js"(exports2, module2) {
    "use strict";
    var check = function(it) {
      return it && it.Math === Math && it;
    };
    module2.exports = // 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 global == "object" && global) || check(typeof exports2 == "object" && exports2) || // eslint-disable-next-line no-new-func -- fallback
    /* @__PURE__ */ function() {
      return this;
    }() || Function("return this")();
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/fails.js
var require_fails = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/fails.js"(exports2, module2) {
    "use strict";
    module2.exports = function(exec) {
      try {
        return !!exec();
      } catch (error) {
        return true;
      }
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/descriptors.js
var require_descriptors = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/descriptors.js"(exports2, module2) {
    "use strict";
    var fails = require_fails();
    module2.exports = !fails(function() {
      return Object.defineProperty({}, 1, { get: function() {
        return 7;
      } })[1] !== 7;
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-bind-native.js
var require_function_bind_native = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-bind-native.js"(exports2, module2) {
    "use strict";
    var fails = require_fails();
    module2.exports = !fails(function() {
      var test = function() {
      }.bind();
      return typeof test != "function" || test.hasOwnProperty("prototype");
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-call.js
var require_function_call = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-call.js"(exports2, module2) {
    "use strict";
    var NATIVE_BIND = require_function_bind_native();
    var call = Function.prototype.call;
    module2.exports = NATIVE_BIND ? call.bind(call) : function() {
      return call.apply(call, arguments);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-property-is-enumerable.js
var require_object_property_is_enumerable = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-property-is-enumerable.js"(exports2) {
    "use strict";
    var $propertyIsEnumerable = {}.propertyIsEnumerable;
    var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
    var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);
    exports2.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
      var descriptor = getOwnPropertyDescriptor(this, V);
      return !!descriptor && descriptor.enumerable;
    } : $propertyIsEnumerable;
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/create-property-descriptor.js
var require_create_property_descriptor = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/create-property-descriptor.js"(exports2, module2) {
    "use strict";
    module2.exports = function(bitmap, value) {
      return {
        enumerable: !(bitmap & 1),
        configurable: !(bitmap & 2),
        writable: !(bitmap & 4),
        value
      };
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-uncurry-this.js
var require_function_uncurry_this = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-uncurry-this.js"(exports2, module2) {
    "use strict";
    var NATIVE_BIND = require_function_bind_native();
    var FunctionPrototype = Function.prototype;
    var call = FunctionPrototype.call;
    var uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);
    module2.exports = NATIVE_BIND ? uncurryThisWithBind : function(fn) {
      return function() {
        return call.apply(fn, arguments);
      };
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/classof-raw.js
var require_classof_raw = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/classof-raw.js"(exports2, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var toString = uncurryThis({}.toString);
    var stringSlice = uncurryThis("".slice);
    module2.exports = function(it) {
      return stringSlice(toString(it), 8, -1);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/indexed-object.js
var require_indexed_object = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/indexed-object.js"(exports2, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var fails = require_fails();
    var classof = require_classof_raw();
    var $Object = Object;
    var split = uncurryThis("".split);
    module2.exports = fails(function() {
      return !$Object("z").propertyIsEnumerable(0);
    }) ? function(it) {
      return classof(it) === "String" ? split(it, "") : $Object(it);
    } : $Object;
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-null-or-undefined.js
var require_is_null_or_undefined = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-null-or-undefined.js"(exports2, module2) {
    "use strict";
    module2.exports = function(it) {
      return it === null || it === void 0;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/require-object-coercible.js
var require_require_object_coercible = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/require-object-coercible.js"(exports2, module2) {
    "use strict";
    var isNullOrUndefined = require_is_null_or_undefined();
    var $TypeError = TypeError;
    module2.exports = function(it) {
      if (isNullOrUndefined(it)) throw new $TypeError("Can't call method on " + it);
      return it;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-indexed-object.js
var require_to_indexed_object = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-indexed-object.js"(exports2, module2) {
    "use strict";
    var IndexedObject = require_indexed_object();
    var requireObjectCoercible = require_require_object_coercible();
    module2.exports = function(it) {
      return IndexedObject(requireObjectCoercible(it));
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-callable.js
var require_is_callable = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-callable.js"(exports2, module2) {
    "use strict";
    var documentAll = typeof document == "object" && document.all;
    module2.exports = typeof documentAll == "undefined" && documentAll !== void 0 ? function(argument) {
      return typeof argument == "function" || argument === documentAll;
    } : function(argument) {
      return typeof argument == "function";
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-object.js
var require_is_object = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-object.js"(exports2, module2) {
    "use strict";
    var isCallable = require_is_callable();
    module2.exports = function(it) {
      return typeof it == "object" ? it !== null : isCallable(it);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-built-in.js
var require_get_built_in = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-built-in.js"(exports2, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    var isCallable = require_is_callable();
    var aFunction = function(argument) {
      return isCallable(argument) ? argument : void 0;
    };
    module2.exports = function(namespace, method) {
      return arguments.length < 2 ? aFunction(globalThis2[namespace]) : globalThis2[namespace] && globalThis2[namespace][method];
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-is-prototype-of.js
var require_object_is_prototype_of = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-is-prototype-of.js"(exports2, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    module2.exports = uncurryThis({}.isPrototypeOf);
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/environment-user-agent.js
var require_environment_user_agent = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/environment-user-agent.js"(exports2, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    var navigator2 = globalThis2.navigator;
    var userAgent = navigator2 && navigator2.userAgent;
    module2.exports = userAgent ? String(userAgent) : "";
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/environment-v8-version.js
var require_environment_v8_version = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/environment-v8-version.js"(exports2, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    var userAgent = require_environment_user_agent();
    var process2 = globalThis2.process;
    var Deno2 = globalThis2.Deno;
    var versions = process2 && process2.versions || Deno2 && Deno2.version;
    var v8 = versions && versions.v8;
    var match;
    var version;
    if (v8) {
      match = v8.split(".");
      version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);
    }
    if (!version && userAgent) {
      match = userAgent.match(/Edge\/(\d+)/);
      if (!match || match[1] >= 74) {
        match = userAgent.match(/Chrome\/(\d+)/);
        if (match) version = +match[1];
      }
    }
    module2.exports = version;
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/symbol-constructor-detection.js
var require_symbol_constructor_detection = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/symbol-constructor-detection.js"(exports2, module2) {
    "use strict";
    var V8_VERSION = require_environment_v8_version();
    var fails = require_fails();
    var globalThis2 = require_global_this();
    var $String = globalThis2.String;
    module2.exports = !!Object.getOwnPropertySymbols && !fails(function() {
      var symbol = Symbol("symbol detection");
      return !$String(symbol) || !(Object(symbol) instanceof Symbol) || // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances
      !Symbol.sham && V8_VERSION && V8_VERSION < 41;
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/use-symbol-as-uid.js
var require_use_symbol_as_uid = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/use-symbol-as-uid.js"(exports2, module2) {
    "use strict";
    var NATIVE_SYMBOL = require_symbol_constructor_detection();
    module2.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol";
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-symbol.js
var require_is_symbol = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-symbol.js"(exports2, module2) {
    "use strict";
    var getBuiltIn = require_get_built_in();
    var isCallable = require_is_callable();
    var isPrototypeOf = require_object_is_prototype_of();
    var USE_SYMBOL_AS_UID = require_use_symbol_as_uid();
    var $Object = Object;
    module2.exports = USE_SYMBOL_AS_UID ? function(it) {
      return typeof it == "symbol";
    } : function(it) {
      var $Symbol = getBuiltIn("Symbol");
      return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/try-to-string.js
var require_try_to_string = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/try-to-string.js"(exports2, module2) {
    "use strict";
    var $String = String;
    module2.exports = function(argument) {
      try {
        return $String(argument);
      } catch (error) {
        return "Object";
      }
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/a-callable.js
var require_a_callable = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/a-callable.js"(exports2, module2) {
    "use strict";
    var isCallable = require_is_callable();
    var tryToString = require_try_to_string();
    var $TypeError = TypeError;
    module2.exports = function(argument) {
      if (isCallable(argument)) return argument;
      throw new $TypeError(tryToString(argument) + " is not a function");
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-method.js
var require_get_method = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-method.js"(exports2, module2) {
    "use strict";
    var aCallable = require_a_callable();
    var isNullOrUndefined = require_is_null_or_undefined();
    module2.exports = function(V, P) {
      var func = V[P];
      return isNullOrUndefined(func) ? void 0 : aCallable(func);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/ordinary-to-primitive.js
var require_ordinary_to_primitive = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/ordinary-to-primitive.js"(exports2, module2) {
    "use strict";
    var call = require_function_call();
    var isCallable = require_is_callable();
    var isObject2 = require_is_object();
    var $TypeError = TypeError;
    module2.exports = function(input, pref) {
      var fn, val;
      if (pref === "string" && isCallable(fn = input.toString) && !isObject2(val = call(fn, input))) return val;
      if (isCallable(fn = input.valueOf) && !isObject2(val = call(fn, input))) return val;
      if (pref !== "string" && isCallable(fn = input.toString) && !isObject2(val = call(fn, input))) return val;
      throw new $TypeError("Can't convert object to primitive value");
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-pure.js
var require_is_pure = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-pure.js"(exports2, module2) {
    "use strict";
    module2.exports = false;
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/define-global-property.js
var require_define_global_property = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/define-global-property.js"(exports2, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    var defineProperty = Object.defineProperty;
    module2.exports = function(key, value) {
      try {
        defineProperty(globalThis2, key, { value, configurable: true, writable: true });
      } catch (error) {
        globalThis2[key] = value;
      }
      return value;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/shared-store.js
var require_shared_store = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/shared-store.js"(exports2, module2) {
    "use strict";
    var IS_PURE = require_is_pure();
    var globalThis2 = require_global_this();
    var defineGlobalProperty = require_define_global_property();
    var SHARED = "__core-js_shared__";
    var store = module2.exports = globalThis2[SHARED] || defineGlobalProperty(SHARED, {});
    (store.versions || (store.versions = [])).push({
      version: "3.41.0",
      mode: IS_PURE ? "pure" : "global",
      copyright: "© 2014-2025 Denis Pushkarev (zloirock.ru)",
      license: "https://github.com/zloirock/core-js/blob/v3.41.0/LICENSE",
      source: "https://github.com/zloirock/core-js"
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/shared.js
var require_shared = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/shared.js"(exports2, module2) {
    "use strict";
    var store = require_shared_store();
    module2.exports = function(key, value) {
      return store[key] || (store[key] = value || {});
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-object.js
var require_to_object = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-object.js"(exports2, module2) {
    "use strict";
    var requireObjectCoercible = require_require_object_coercible();
    var $Object = Object;
    module2.exports = function(argument) {
      return $Object(requireObjectCoercible(argument));
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/has-own-property.js
var require_has_own_property = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/has-own-property.js"(exports2, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var toObject = require_to_object();
    var hasOwnProperty = uncurryThis({}.hasOwnProperty);
    module2.exports = Object.hasOwn || function hasOwn(it, key) {
      return hasOwnProperty(toObject(it), key);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/uid.js
var require_uid = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/uid.js"(exports2, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var id = 0;
    var postfix = Math.random();
    var toString = uncurryThis(1 .toString);
    module2.exports = function(key) {
      return "Symbol(" + (key === void 0 ? "" : key) + ")_" + toString(++id + postfix, 36);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/well-known-symbol.js
var require_well_known_symbol = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/well-known-symbol.js"(exports2, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    var shared = require_shared();
    var hasOwn = require_has_own_property();
    var uid = require_uid();
    var NATIVE_SYMBOL = require_symbol_constructor_detection();
    var USE_SYMBOL_AS_UID = require_use_symbol_as_uid();
    var Symbol2 = globalThis2.Symbol;
    var WellKnownSymbolsStore = shared("wks");
    var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol2["for"] || Symbol2 : Symbol2 && Symbol2.withoutSetter || uid;
    module2.exports = function(name) {
      if (!hasOwn(WellKnownSymbolsStore, name)) {
        WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol2, name) ? Symbol2[name] : createWellKnownSymbol("Symbol." + name);
      }
      return WellKnownSymbolsStore[name];
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-primitive.js
var require_to_primitive = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-primitive.js"(exports2, module2) {
    "use strict";
    var call = require_function_call();
    var isObject2 = require_is_object();
    var isSymbol = require_is_symbol();
    var getMethod = require_get_method();
    var ordinaryToPrimitive = require_ordinary_to_primitive();
    var wellKnownSymbol = require_well_known_symbol();
    var $TypeError = TypeError;
    var TO_PRIMITIVE = wellKnownSymbol("toPrimitive");
    module2.exports = function(input, pref) {
      if (!isObject2(input) || isSymbol(input)) return input;
      var exoticToPrim = getMethod(input, TO_PRIMITIVE);
      var result;
      if (exoticToPrim) {
        if (pref === void 0) pref = "default";
        result = call(exoticToPrim, input, pref);
        if (!isObject2(result) || isSymbol(result)) return result;
        throw new $TypeError("Can't convert object to primitive value");
      }
      if (pref === void 0) pref = "number";
      return ordinaryToPrimitive(input, pref);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-property-key.js
var require_to_property_key = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-property-key.js"(exports2, module2) {
    "use strict";
    var toPrimitive = require_to_primitive();
    var isSymbol = require_is_symbol();
    module2.exports = function(argument) {
      var key = toPrimitive(argument, "string");
      return isSymbol(key) ? key : key + "";
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/document-create-element.js
var require_document_create_element = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/document-create-element.js"(exports2, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    var isObject2 = require_is_object();
    var document2 = globalThis2.document;
    var EXISTS = isObject2(document2) && isObject2(document2.createElement);
    module2.exports = function(it) {
      return EXISTS ? document2.createElement(it) : {};
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/ie8-dom-define.js
var require_ie8_dom_define = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/ie8-dom-define.js"(exports2, module2) {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var fails = require_fails();
    var createElement2 = require_document_create_element();
    module2.exports = !DESCRIPTORS && !fails(function() {
      return Object.defineProperty(createElement2("div"), "a", {
        get: function() {
          return 7;
        }
      }).a !== 7;
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-descriptor.js
var require_object_get_own_property_descriptor = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-descriptor.js"(exports2) {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var call = require_function_call();
    var propertyIsEnumerableModule = require_object_property_is_enumerable();
    var createPropertyDescriptor = require_create_property_descriptor();
    var toIndexedObject = require_to_indexed_object();
    var toPropertyKey = require_to_property_key();
    var hasOwn = require_has_own_property();
    var IE8_DOM_DEFINE = require_ie8_dom_define();
    var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
    exports2.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {
      O = toIndexedObject(O);
      P = toPropertyKey(P);
      if (IE8_DOM_DEFINE) try {
        return $getOwnPropertyDescriptor(O, P);
      } catch (error) {
      }
      if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/v8-prototype-define-bug.js
var require_v8_prototype_define_bug = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/v8-prototype-define-bug.js"(exports2, module2) {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var fails = require_fails();
    module2.exports = DESCRIPTORS && fails(function() {
      return Object.defineProperty(function() {
      }, "prototype", {
        value: 42,
        writable: false
      }).prototype !== 42;
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/an-object.js
var require_an_object = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/an-object.js"(exports2, module2) {
    "use strict";
    var isObject2 = require_is_object();
    var $String = String;
    var $TypeError = TypeError;
    module2.exports = function(argument) {
      if (isObject2(argument)) return argument;
      throw new $TypeError($String(argument) + " is not an object");
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-define-property.js
var require_object_define_property = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-define-property.js"(exports2) {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var IE8_DOM_DEFINE = require_ie8_dom_define();
    var V8_PROTOTYPE_DEFINE_BUG = require_v8_prototype_define_bug();
    var anObject = require_an_object();
    var toPropertyKey = require_to_property_key();
    var $TypeError = TypeError;
    var $defineProperty = Object.defineProperty;
    var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
    var ENUMERABLE = "enumerable";
    var CONFIGURABLE = "configurable";
    var WRITABLE = "writable";
    exports2.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {
      anObject(O);
      P = toPropertyKey(P);
      anObject(Attributes);
      if (typeof O === "function" && P === "prototype" && "value" in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {
        var current = $getOwnPropertyDescriptor(O, P);
        if (current && current[WRITABLE]) {
          O[P] = Attributes.value;
          Attributes = {
            configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],
            enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],
            writable: false
          };
        }
      }
      return $defineProperty(O, P, Attributes);
    } : $defineProperty : function defineProperty(O, P, Attributes) {
      anObject(O);
      P = toPropertyKey(P);
      anObject(Attributes);
      if (IE8_DOM_DEFINE) try {
        return $defineProperty(O, P, Attributes);
      } catch (error) {
      }
      if ("get" in Attributes || "set" in Attributes) throw new $TypeError("Accessors not supported");
      if ("value" in Attributes) O[P] = Attributes.value;
      return O;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/create-non-enumerable-property.js
var require_create_non_enumerable_property = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/create-non-enumerable-property.js"(exports2, module2) {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var definePropertyModule = require_object_define_property();
    var createPropertyDescriptor = require_create_property_descriptor();
    module2.exports = DESCRIPTORS ? function(object, key, value) {
      return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));
    } : function(object, key, value) {
      object[key] = value;
      return object;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-name.js
var require_function_name = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-name.js"(exports2, module2) {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var hasOwn = require_has_own_property();
    var FunctionPrototype = Function.prototype;
    var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;
    var EXISTS = hasOwn(FunctionPrototype, "name");
    var PROPER = EXISTS && function something() {
    }.name === "something";
    var CONFIGURABLE = EXISTS && (!DESCRIPTORS || DESCRIPTORS && getDescriptor(FunctionPrototype, "name").configurable);
    module2.exports = {
      EXISTS,
      PROPER,
      CONFIGURABLE
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/inspect-source.js
var require_inspect_source = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/inspect-source.js"(exports2, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var isCallable = require_is_callable();
    var store = require_shared_store();
    var functionToString = uncurryThis(Function.toString);
    if (!isCallable(store.inspectSource)) {
      store.inspectSource = function(it) {
        return functionToString(it);
      };
    }
    module2.exports = store.inspectSource;
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/weak-map-basic-detection.js
var require_weak_map_basic_detection = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/weak-map-basic-detection.js"(exports2, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    var isCallable = require_is_callable();
    var WeakMap2 = globalThis2.WeakMap;
    module2.exports = isCallable(WeakMap2) && /native code/.test(String(WeakMap2));
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/shared-key.js
var require_shared_key = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/shared-key.js"(exports2, module2) {
    "use strict";
    var shared = require_shared();
    var uid = require_uid();
    var keys2 = shared("keys");
    module2.exports = function(key) {
      return keys2[key] || (keys2[key] = uid(key));
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/hidden-keys.js
var require_hidden_keys = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/hidden-keys.js"(exports2, module2) {
    "use strict";
    module2.exports = {};
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/internal-state.js
var require_internal_state = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/internal-state.js"(exports2, module2) {
    "use strict";
    var NATIVE_WEAK_MAP = require_weak_map_basic_detection();
    var globalThis2 = require_global_this();
    var isObject2 = require_is_object();
    var createNonEnumerableProperty = require_create_non_enumerable_property();
    var hasOwn = require_has_own_property();
    var shared = require_shared_store();
    var sharedKey = require_shared_key();
    var hiddenKeys = require_hidden_keys();
    var OBJECT_ALREADY_INITIALIZED = "Object already initialized";
    var TypeError2 = globalThis2.TypeError;
    var WeakMap2 = globalThis2.WeakMap;
    var set;
    var get2;
    var has;
    var enforce = function(it) {
      return has(it) ? get2(it) : set(it, {});
    };
    var getterFor = function(TYPE) {
      return function(it) {
        var state;
        if (!isObject2(it) || (state = get2(it)).type !== TYPE) {
          throw new TypeError2("Incompatible receiver, " + TYPE + " required");
        }
        return state;
      };
    };
    if (NATIVE_WEAK_MAP || shared.state) {
      store = shared.state || (shared.state = new WeakMap2());
      store.get = store.get;
      store.has = store.has;
      store.set = store.set;
      set = function(it, metadata) {
        if (store.has(it)) throw new TypeError2(OBJECT_ALREADY_INITIALIZED);
        metadata.facade = it;
        store.set(it, metadata);
        return metadata;
      };
      get2 = function(it) {
        return store.get(it) || {};
      };
      has = function(it) {
        return store.has(it);
      };
    } else {
      STATE = sharedKey("state");
      hiddenKeys[STATE] = true;
      set = function(it, metadata) {
        if (hasOwn(it, STATE)) throw new TypeError2(OBJECT_ALREADY_INITIALIZED);
        metadata.facade = it;
        createNonEnumerableProperty(it, STATE, metadata);
        return metadata;
      };
      get2 = function(it) {
        return hasOwn(it, STATE) ? it[STATE] : {};
      };
      has = function(it) {
        return hasOwn(it, STATE);
      };
    }
    var store;
    var STATE;
    module2.exports = {
      set,
      get: get2,
      has,
      enforce,
      getterFor
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/make-built-in.js
var require_make_built_in = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/make-built-in.js"(exports2, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var fails = require_fails();
    var isCallable = require_is_callable();
    var hasOwn = require_has_own_property();
    var DESCRIPTORS = require_descriptors();
    var CONFIGURABLE_FUNCTION_NAME = require_function_name().CONFIGURABLE;
    var inspectSource = require_inspect_source();
    var InternalStateModule = require_internal_state();
    var enforceInternalState = InternalStateModule.enforce;
    var getInternalState = InternalStateModule.get;
    var $String = String;
    var defineProperty = Object.defineProperty;
    var stringSlice = uncurryThis("".slice);
    var replace = uncurryThis("".replace);
    var join = uncurryThis([].join);
    var CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function() {
      return defineProperty(function() {
      }, "length", { value: 8 }).length !== 8;
    });
    var TEMPLATE = String(String).split("String");
    var makeBuiltIn = module2.exports = function(value, name, options) {
      if (stringSlice($String(name), 0, 7) === "Symbol(") {
        name = "[" + replace($String(name), /^Symbol\(([^)]*)\).*$/, "$1") + "]";
      }
      if (options && options.getter) name = "get " + name;
      if (options && options.setter) name = "set " + name;
      if (!hasOwn(value, "name") || CONFIGURABLE_FUNCTION_NAME && value.name !== name) {
        if (DESCRIPTORS) defineProperty(value, "name", { value: name, configurable: true });
        else value.name = name;
      }
      if (CONFIGURABLE_LENGTH && options && hasOwn(options, "arity") && value.length !== options.arity) {
        defineProperty(value, "length", { value: options.arity });
      }
      try {
        if (options && hasOwn(options, "constructor") && options.constructor) {
          if (DESCRIPTORS) defineProperty(value, "prototype", { writable: false });
        } else if (value.prototype) value.prototype = void 0;
      } catch (error) {
      }
      var state = enforceInternalState(value);
      if (!hasOwn(state, "source")) {
        state.source = join(TEMPLATE, typeof name == "string" ? name : "");
      }
      return value;
    };
    Function.prototype.toString = makeBuiltIn(function toString() {
      return isCallable(this) && getInternalState(this).source || inspectSource(this);
    }, "toString");
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/define-built-in.js
var require_define_built_in = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/define-built-in.js"(exports2, module2) {
    "use strict";
    var isCallable = require_is_callable();
    var definePropertyModule = require_object_define_property();
    var makeBuiltIn = require_make_built_in();
    var defineGlobalProperty = require_define_global_property();
    module2.exports = function(O, key, value, options) {
      if (!options) options = {};
      var simple = options.enumerable;
      var name = options.name !== void 0 ? options.name : key;
      if (isCallable(value)) makeBuiltIn(value, name, options);
      if (options.global) {
        if (simple) O[key] = value;
        else defineGlobalProperty(key, value);
      } else {
        try {
          if (!options.unsafe) delete O[key];
          else if (O[key]) simple = true;
        } catch (error) {
        }
        if (simple) O[key] = value;
        else definePropertyModule.f(O, key, {
          value,
          enumerable: false,
          configurable: !options.nonConfigurable,
          writable: !options.nonWritable
        });
      }
      return O;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/math-trunc.js
var require_math_trunc = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/math-trunc.js"(exports2, module2) {
    "use strict";
    var ceil = Math.ceil;
    var floor = Math.floor;
    module2.exports = Math.trunc || function trunc(x) {
      var n = +x;
      return (n > 0 ? floor : ceil)(n);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-integer-or-infinity.js
var require_to_integer_or_infinity = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-integer-or-infinity.js"(exports2, module2) {
    "use strict";
    var trunc = require_math_trunc();
    module2.exports = function(argument) {
      var number = +argument;
      return number !== number || number === 0 ? 0 : trunc(number);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-absolute-index.js
var require_to_absolute_index = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-absolute-index.js"(exports2, module2) {
    "use strict";
    var toIntegerOrInfinity = require_to_integer_or_infinity();
    var max = Math.max;
    var min = Math.min;
    module2.exports = function(index, length) {
      var integer = toIntegerOrInfinity(index);
      return integer < 0 ? max(integer + length, 0) : min(integer, length);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-length.js
var require_to_length = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-length.js"(exports2, module2) {
    "use strict";
    var toIntegerOrInfinity = require_to_integer_or_infinity();
    var min = Math.min;
    module2.exports = function(argument) {
      var len = toIntegerOrInfinity(argument);
      return len > 0 ? min(len, 9007199254740991) : 0;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/length-of-array-like.js
var require_length_of_array_like = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/length-of-array-like.js"(exports2, module2) {
    "use strict";
    var toLength = require_to_length();
    module2.exports = function(obj) {
      return toLength(obj.length);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-includes.js
var require_array_includes = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-includes.js"(exports2, module2) {
    "use strict";
    var toIndexedObject = require_to_indexed_object();
    var toAbsoluteIndex = require_to_absolute_index();
    var lengthOfArrayLike = require_length_of_array_like();
    var createMethod = function(IS_INCLUDES) {
      return function($this, el, fromIndex) {
        var O = toIndexedObject($this);
        var length = lengthOfArrayLike(O);
        if (length === 0) return !IS_INCLUDES && -1;
        var index = toAbsoluteIndex(fromIndex, length);
        var value;
        if (IS_INCLUDES && el !== el) while (length > index) {
          value = O[index++];
          if (value !== value) return true;
        }
        else for (; length > index; index++) {
          if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;
        }
        return !IS_INCLUDES && -1;
      };
    };
    module2.exports = {
      // `Array.prototype.includes` method
      // https://tc39.es/ecma262/#sec-array.prototype.includes
      includes: createMethod(true),
      // `Array.prototype.indexOf` method
      // https://tc39.es/ecma262/#sec-array.prototype.indexof
      indexOf: createMethod(false)
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-keys-internal.js
var require_object_keys_internal = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-keys-internal.js"(exports2, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var hasOwn = require_has_own_property();
    var toIndexedObject = require_to_indexed_object();
    var indexOf = require_array_includes().indexOf;
    var hiddenKeys = require_hidden_keys();
    var push = uncurryThis([].push);
    module2.exports = function(object, names) {
      var O = toIndexedObject(object);
      var i = 0;
      var result = [];
      var key;
      for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);
      while (names.length > i) if (hasOwn(O, key = names[i++])) {
        ~indexOf(result, key) || push(result, key);
      }
      return result;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/enum-bug-keys.js
var require_enum_bug_keys = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/enum-bug-keys.js"(exports2, module2) {
    "use strict";
    module2.exports = [
      "constructor",
      "hasOwnProperty",
      "isPrototypeOf",
      "propertyIsEnumerable",
      "toLocaleString",
      "toString",
      "valueOf"
    ];
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-names.js
var require_object_get_own_property_names = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-names.js"(exports2) {
    "use strict";
    var internalObjectKeys = require_object_keys_internal();
    var enumBugKeys = require_enum_bug_keys();
    var hiddenKeys = enumBugKeys.concat("length", "prototype");
    exports2.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
      return internalObjectKeys(O, hiddenKeys);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-symbols.js
var require_object_get_own_property_symbols = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-symbols.js"(exports2) {
    "use strict";
    exports2.f = Object.getOwnPropertySymbols;
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/own-keys.js
var require_own_keys = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/own-keys.js"(exports2, module2) {
    "use strict";
    var getBuiltIn = require_get_built_in();
    var uncurryThis = require_function_uncurry_this();
    var getOwnPropertyNamesModule = require_object_get_own_property_names();
    var getOwnPropertySymbolsModule = require_object_get_own_property_symbols();
    var anObject = require_an_object();
    var concat = uncurryThis([].concat);
    module2.exports = getBuiltIn("Reflect", "ownKeys") || function ownKeys2(it) {
      var keys2 = getOwnPropertyNamesModule.f(anObject(it));
      var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
      return getOwnPropertySymbols ? concat(keys2, getOwnPropertySymbols(it)) : keys2;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/copy-constructor-properties.js
var require_copy_constructor_properties = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/copy-constructor-properties.js"(exports2, module2) {
    "use strict";
    var hasOwn = require_has_own_property();
    var ownKeys2 = require_own_keys();
    var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor();
    var definePropertyModule = require_object_define_property();
    module2.exports = function(target, source, exceptions) {
      var keys2 = ownKeys2(source);
      var defineProperty = definePropertyModule.f;
      var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
      for (var i = 0; i < keys2.length; i++) {
        var key = keys2[i];
        if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {
          defineProperty(target, key, getOwnPropertyDescriptor(source, key));
        }
      }
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-forced.js
var require_is_forced = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-forced.js"(exports2, module2) {
    "use strict";
    var fails = require_fails();
    var isCallable = require_is_callable();
    var replacement = /#|\.prototype\./;
    var isForced = function(feature, detection) {
      var value = data[normalize(feature)];
      return value === POLYFILL ? true : value === NATIVE ? false : isCallable(detection) ? fails(detection) : !!detection;
    };
    var normalize = isForced.normalize = function(string) {
      return String(string).replace(replacement, ".").toLowerCase();
    };
    var data = isForced.data = {};
    var NATIVE = isForced.NATIVE = "N";
    var POLYFILL = isForced.POLYFILL = "P";
    module2.exports = isForced;
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/export.js
var require_export = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/export.js"(exports2, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f;
    var createNonEnumerableProperty = require_create_non_enumerable_property();
    var defineBuiltIn = require_define_built_in();
    var defineGlobalProperty = require_define_global_property();
    var copyConstructorProperties = require_copy_constructor_properties();
    var isForced = require_is_forced();
    module2.exports = 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 = globalThis2;
      } else if (STATIC) {
        target = globalThis2[TARGET] || defineGlobalProperty(TARGET, {});
      } else {
        target = globalThis2[TARGET] && globalThis2[TARGET].prototype;
      }
      if (target) for (key in source) {
        sourceProperty = source[key];
        if (options.dontCallGetSet) {
          descriptor = getOwnPropertyDescriptor(target, key);
          targetProperty = descriptor && descriptor.value;
        } else targetProperty = target[key];
        FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? "." : "#") + key, options.forced);
        if (!FORCED && targetProperty !== void 0) {
          if (typeof sourceProperty == typeof targetProperty) continue;
          copyConstructorProperties(sourceProperty, targetProperty);
        }
        if (options.sham || targetProperty && targetProperty.sham) {
          createNonEnumerableProperty(sourceProperty, "sham", true);
        }
        defineBuiltIn(target, key, sourceProperty, options);
      }
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-string-tag-support.js
var require_to_string_tag_support = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-string-tag-support.js"(exports2, module2) {
    "use strict";
    var wellKnownSymbol = require_well_known_symbol();
    var TO_STRING_TAG = wellKnownSymbol("toStringTag");
    var test = {};
    test[TO_STRING_TAG] = "z";
    module2.exports = String(test) === "[object z]";
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/classof.js
var require_classof = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/classof.js"(exports2, module2) {
    "use strict";
    var TO_STRING_TAG_SUPPORT = require_to_string_tag_support();
    var isCallable = require_is_callable();
    var classofRaw = require_classof_raw();
    var wellKnownSymbol = require_well_known_symbol();
    var TO_STRING_TAG = wellKnownSymbol("toStringTag");
    var $Object = Object;
    var CORRECT_ARGUMENTS = classofRaw(/* @__PURE__ */ function() {
      return arguments;
    }()) === "Arguments";
    var tryGet = function(it, key) {
      try {
        return it[key];
      } catch (error) {
      }
    };
    module2.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function(it) {
      var O, tag, result;
      return it === void 0 ? "Undefined" : it === null ? "Null" : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == "string" ? tag : CORRECT_ARGUMENTS ? classofRaw(O) : (result = classofRaw(O)) === "Object" && isCallable(O.callee) ? "Arguments" : result;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-string.js
var require_to_string = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/to-string.js"(exports2, module2) {
    "use strict";
    var classof = require_classof();
    var $String = String;
    module2.exports = function(argument) {
      if (classof(argument) === "Symbol") throw new TypeError("Cannot convert a Symbol value to a string");
      return $String(argument);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-keys.js
var require_object_keys = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-keys.js"(exports2, module2) {
    "use strict";
    var internalObjectKeys = require_object_keys_internal();
    var enumBugKeys = require_enum_bug_keys();
    module2.exports = Object.keys || function keys2(O) {
      return internalObjectKeys(O, enumBugKeys);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-define-properties.js
var require_object_define_properties = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-define-properties.js"(exports2) {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var V8_PROTOTYPE_DEFINE_BUG = require_v8_prototype_define_bug();
    var definePropertyModule = require_object_define_property();
    var anObject = require_an_object();
    var toIndexedObject = require_to_indexed_object();
    var objectKeys = require_object_keys();
    exports2.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {
      anObject(O);
      var props = toIndexedObject(Properties);
      var keys2 = objectKeys(Properties);
      var length = keys2.length;
      var index = 0;
      var key;
      while (length > index) definePropertyModule.f(O, key = keys2[index++], props[key]);
      return O;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/html.js
var require_html = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/html.js"(exports2, module2) {
    "use strict";
    var getBuiltIn = require_get_built_in();
    module2.exports = getBuiltIn("document", "documentElement");
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-create.js
var require_object_create = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-create.js"(exports2, module2) {
    "use strict";
    var anObject = require_an_object();
    var definePropertiesModule = require_object_define_properties();
    var enumBugKeys = require_enum_bug_keys();
    var hiddenKeys = require_hidden_keys();
    var html = require_html();
    var documentCreateElement = require_document_create_element();
    var sharedKey = require_shared_key();
    var GT = ">";
    var LT = "<";
    var PROTOTYPE = "prototype";
    var SCRIPT = "script";
    var IE_PROTO = sharedKey("IE_PROTO");
    var EmptyConstructor = function() {
    };
    var scriptTag = function(content) {
      return LT + SCRIPT + GT + content + LT + "/" + SCRIPT + GT;
    };
    var NullProtoObjectViaActiveX = function(activeXDocument2) {
      activeXDocument2.write(scriptTag(""));
      activeXDocument2.close();
      var temp = activeXDocument2.parentWindow.Object;
      activeXDocument2 = null;
      return temp;
    };
    var NullProtoObjectViaIFrame = function() {
      var iframe = documentCreateElement("iframe");
      var JS = "java" + SCRIPT + ":";
      var iframeDocument;
      iframe.style.display = "none";
      html.appendChild(iframe);
      iframe.src = String(JS);
      iframeDocument = iframe.contentWindow.document;
      iframeDocument.open();
      iframeDocument.write(scriptTag("document.F=Object"));
      iframeDocument.close();
      return iframeDocument.F;
    };
    var activeXDocument;
    var NullProtoObject = function() {
      try {
        activeXDocument = new ActiveXObject("htmlfile");
      } catch (error) {
      }
      NullProtoObject = typeof document != "undefined" ? document.domain && activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame() : NullProtoObjectViaActiveX(activeXDocument);
      var length = enumBugKeys.length;
      while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];
      return NullProtoObject();
    };
    hiddenKeys[IE_PROTO] = true;
    module2.exports = Object.create || function create(O, Properties) {
      var result;
      if (O !== null) {
        EmptyConstructor[PROTOTYPE] = anObject(O);
        result = new EmptyConstructor();
        EmptyConstructor[PROTOTYPE] = null;
        result[IE_PROTO] = O;
      } else result = NullProtoObject();
      return Properties === void 0 ? result : definePropertiesModule.f(result, Properties);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-slice.js
var require_array_slice = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-slice.js"(exports2, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    module2.exports = uncurryThis([].slice);
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-names-external.js
var require_object_get_own_property_names_external = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-own-property-names-external.js"(exports2, module2) {
    "use strict";
    var classof = require_classof_raw();
    var toIndexedObject = require_to_indexed_object();
    var $getOwnPropertyNames = require_object_get_own_property_names().f;
    var arraySlice = require_array_slice();
    var windowNames = typeof window == "object" && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : [];
    var getWindowNames = function(it) {
      try {
        return $getOwnPropertyNames(it);
      } catch (error) {
        return arraySlice(windowNames);
      }
    };
    module2.exports.f = function getOwnPropertyNames(it) {
      return windowNames && classof(it) === "Window" ? getWindowNames(it) : $getOwnPropertyNames(toIndexedObject(it));
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/define-built-in-accessor.js
var require_define_built_in_accessor = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/define-built-in-accessor.js"(exports2, module2) {
    "use strict";
    var makeBuiltIn = require_make_built_in();
    var defineProperty = require_object_define_property();
    module2.exports = function(target, name, descriptor) {
      if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });
      if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });
      return defineProperty.f(target, name, descriptor);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/well-known-symbol-wrapped.js
var require_well_known_symbol_wrapped = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/well-known-symbol-wrapped.js"(exports2) {
    "use strict";
    var wellKnownSymbol = require_well_known_symbol();
    exports2.f = wellKnownSymbol;
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/path.js
var require_path = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/path.js"(exports2, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    module2.exports = globalThis2;
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/well-known-symbol-define.js
var require_well_known_symbol_define = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/well-known-symbol-define.js"(exports2, module2) {
    "use strict";
    var path = require_path();
    var hasOwn = require_has_own_property();
    var wrappedWellKnownSymbolModule = require_well_known_symbol_wrapped();
    var defineProperty = require_object_define_property().f;
    module2.exports = function(NAME) {
      var Symbol2 = path.Symbol || (path.Symbol = {});
      if (!hasOwn(Symbol2, NAME)) defineProperty(Symbol2, NAME, {
        value: wrappedWellKnownSymbolModule.f(NAME)
      });
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/symbol-define-to-primitive.js
var require_symbol_define_to_primitive = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/symbol-define-to-primitive.js"(exports2, module2) {
    "use strict";
    var call = require_function_call();
    var getBuiltIn = require_get_built_in();
    var wellKnownSymbol = require_well_known_symbol();
    var defineBuiltIn = require_define_built_in();
    module2.exports = function() {
      var Symbol2 = getBuiltIn("Symbol");
      var SymbolPrototype = Symbol2 && Symbol2.prototype;
      var valueOf = SymbolPrototype && SymbolPrototype.valueOf;
      var TO_PRIMITIVE = wellKnownSymbol("toPrimitive");
      if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) {
        defineBuiltIn(SymbolPrototype, TO_PRIMITIVE, function(hint) {
          return call(valueOf, this);
        }, { arity: 1 });
      }
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/set-to-string-tag.js
var require_set_to_string_tag = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/set-to-string-tag.js"(exports2, module2) {
    "use strict";
    var defineProperty = require_object_define_property().f;
    var hasOwn = require_has_own_property();
    var wellKnownSymbol = require_well_known_symbol();
    var TO_STRING_TAG = wellKnownSymbol("toStringTag");
    module2.exports = function(target, TAG, STATIC) {
      if (target && !STATIC) target = target.prototype;
      if (target && !hasOwn(target, TO_STRING_TAG)) {
        defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });
      }
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-uncurry-this-clause.js
var require_function_uncurry_this_clause = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-uncurry-this-clause.js"(exports2, module2) {
    "use strict";
    var classofRaw = require_classof_raw();
    var uncurryThis = require_function_uncurry_this();
    module2.exports = function(fn) {
      if (classofRaw(fn) === "Function") return uncurryThis(fn);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-bind-context.js
var require_function_bind_context = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-bind-context.js"(exports2, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this_clause();
    var aCallable = require_a_callable();
    var NATIVE_BIND = require_function_bind_native();
    var bind = uncurryThis(uncurryThis.bind);
    module2.exports = function(fn, that) {
      aCallable(fn);
      return that === void 0 ? fn : NATIVE_BIND ? bind(fn, that) : function() {
        return fn.apply(that, arguments);
      };
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-array.js
var require_is_array = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-array.js"(exports2, module2) {
    "use strict";
    var classof = require_classof_raw();
    module2.exports = Array.isArray || function isArray(argument) {
      return classof(argument) === "Array";
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-constructor.js
var require_is_constructor = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-constructor.js"(exports2, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var fails = require_fails();
    var isCallable = require_is_callable();
    var classof = require_classof();
    var getBuiltIn = require_get_built_in();
    var inspectSource = require_inspect_source();
    var noop = function() {
    };
    var construct = getBuiltIn("Reflect", "construct");
    var constructorRegExp = /^\s*(?:class|function)\b/;
    var exec = uncurryThis(constructorRegExp.exec);
    var INCORRECT_TO_STRING = !constructorRegExp.test(noop);
    var isConstructorModern = function isConstructor(argument) {
      if (!isCallable(argument)) return false;
      try {
        construct(noop, [], argument);
        return true;
      } catch (error) {
        return false;
      }
    };
    var isConstructorLegacy = function isConstructor(argument) {
      if (!isCallable(argument)) return false;
      switch (classof(argument)) {
        case "AsyncFunction":
        case "GeneratorFunction":
        case "AsyncGeneratorFunction":
          return false;
      }
      try {
        return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));
      } catch (error) {
        return true;
      }
    };
    isConstructorLegacy.sham = true;
    module2.exports = !construct || fails(function() {
      var called;
      return isConstructorModern(isConstructorModern.call) || !isConstructorModern(Object) || !isConstructorModern(function() {
        called = true;
      }) || called;
    }) ? isConstructorLegacy : isConstructorModern;
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-species-constructor.js
var require_array_species_constructor = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-species-constructor.js"(exports2, module2) {
    "use strict";
    var isArray = require_is_array();
    var isConstructor = require_is_constructor();
    var isObject2 = require_is_object();
    var wellKnownSymbol = require_well_known_symbol();
    var SPECIES = wellKnownSymbol("species");
    var $Array = Array;
    module2.exports = function(originalArray) {
      var C;
      if (isArray(originalArray)) {
        C = originalArray.constructor;
        if (isConstructor(C) && (C === $Array || isArray(C.prototype))) C = void 0;
        else if (isObject2(C)) {
          C = C[SPECIES];
          if (C === null) C = void 0;
        }
      }
      return C === void 0 ? $Array : C;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-species-create.js
var require_array_species_create = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-species-create.js"(exports2, module2) {
    "use strict";
    var arraySpeciesConstructor = require_array_species_constructor();
    module2.exports = function(originalArray, length) {
      return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-iteration.js
var require_array_iteration = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-iteration.js"(exports2, module2) {
    "use strict";
    var bind = require_function_bind_context();
    var uncurryThis = require_function_uncurry_this();
    var IndexedObject = require_indexed_object();
    var toObject = require_to_object();
    var lengthOfArrayLike = require_length_of_array_like();
    var arraySpeciesCreate = require_array_species_create();
    var push = uncurryThis([].push);
    var createMethod = 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($this);
        var self2 = IndexedObject(O);
        var length = lengthOfArrayLike(self2);
        var boundFunction = bind(callbackfn, that);
        var index = 0;
        var create = specificCreate || arraySpeciesCreate;
        var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : void 0;
        var value, result;
        for (; length > index; index++) if (NO_HOLES || index in self2) {
          value = self2[index];
          result = boundFunction(value, index, O);
          if (TYPE) {
            if (IS_MAP) target[index] = result;
            else if (result) switch (TYPE) {
              case 3:
                return true;
              // some
              case 5:
                return value;
              // find
              case 6:
                return index;
              // findIndex
              case 2:
                push(target, value);
            }
            else switch (TYPE) {
              case 4:
                return false;
              // every
              case 7:
                push(target, value);
            }
          }
        }
        return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;
      };
    };
    module2.exports = {
      // `Array.prototype.forEach` method
      // https://tc39.es/ecma262/#sec-array.prototype.foreach
      forEach: createMethod(0),
      // `Array.prototype.map` method
      // https://tc39.es/ecma262/#sec-array.prototype.map
      map: createMethod(1),
      // `Array.prototype.filter` method
      // https://tc39.es/ecma262/#sec-array.prototype.filter
      filter: createMethod(2),
      // `Array.prototype.some` method
      // https://tc39.es/ecma262/#sec-array.prototype.some
      some: createMethod(3),
      // `Array.prototype.every` method
      // https://tc39.es/ecma262/#sec-array.prototype.every
      every: createMethod(4),
      // `Array.prototype.find` method
      // https://tc39.es/ecma262/#sec-array.prototype.find
      find: createMethod(5),
      // `Array.prototype.findIndex` method
      // https://tc39.es/ecma262/#sec-array.prototype.findIndex
      findIndex: createMethod(6),
      // `Array.prototype.filterReject` method
      // https://github.com/tc39/proposal-array-filtering
      filterReject: createMethod(7)
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.constructor.js
var require_es_symbol_constructor = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.constructor.js"() {
    "use strict";
    var $ = require_export();
    var globalThis2 = require_global_this();
    var call = require_function_call();
    var uncurryThis = require_function_uncurry_this();
    var IS_PURE = require_is_pure();
    var DESCRIPTORS = require_descriptors();
    var NATIVE_SYMBOL = require_symbol_constructor_detection();
    var fails = require_fails();
    var hasOwn = require_has_own_property();
    var isPrototypeOf = require_object_is_prototype_of();
    var anObject = require_an_object();
    var toIndexedObject = require_to_indexed_object();
    var toPropertyKey = require_to_property_key();
    var $toString = require_to_string();
    var createPropertyDescriptor = require_create_property_descriptor();
    var nativeObjectCreate = require_object_create();
    var objectKeys = require_object_keys();
    var getOwnPropertyNamesModule = require_object_get_own_property_names();
    var getOwnPropertyNamesExternal = require_object_get_own_property_names_external();
    var getOwnPropertySymbolsModule = require_object_get_own_property_symbols();
    var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor();
    var definePropertyModule = require_object_define_property();
    var definePropertiesModule = require_object_define_properties();
    var propertyIsEnumerableModule = require_object_property_is_enumerable();
    var defineBuiltIn = require_define_built_in();
    var defineBuiltInAccessor = require_define_built_in_accessor();
    var shared = require_shared();
    var sharedKey = require_shared_key();
    var hiddenKeys = require_hidden_keys();
    var uid = require_uid();
    var wellKnownSymbol = require_well_known_symbol();
    var wrappedWellKnownSymbolModule = require_well_known_symbol_wrapped();
    var defineWellKnownSymbol = require_well_known_symbol_define();
    var defineSymbolToPrimitive = require_symbol_define_to_primitive();
    var setToStringTag = require_set_to_string_tag();
    var InternalStateModule = require_internal_state();
    var $forEach = require_array_iteration().forEach;
    var HIDDEN = sharedKey("hidden");
    var SYMBOL = "Symbol";
    var PROTOTYPE = "prototype";
    var setInternalState = InternalStateModule.set;
    var getInternalState = InternalStateModule.getterFor(SYMBOL);
    var ObjectPrototype = Object[PROTOTYPE];
    var $Symbol = globalThis2.Symbol;
    var SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];
    var RangeError = globalThis2.RangeError;
    var TypeError2 = globalThis2.TypeError;
    var QObject = globalThis2.QObject;
    var nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
    var nativeDefineProperty = definePropertyModule.f;
    var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;
    var nativePropertyIsEnumerable = propertyIsEnumerableModule.f;
    var push = uncurryThis([].push);
    var AllSymbols = shared("symbols");
    var ObjectPrototypeSymbols = shared("op-symbols");
    var WellKnownSymbolsStore = shared("wks");
    var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
    var fallbackDefineProperty = function(O, P, Attributes) {
      var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);
      if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];
      nativeDefineProperty(O, P, Attributes);
      if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {
        nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);
      }
    };
    var setSymbolDescriptor = DESCRIPTORS && fails(function() {
      return nativeObjectCreate(nativeDefineProperty({}, "a", {
        get: function() {
          return nativeDefineProperty(this, "a", { value: 7 }).a;
        }
      })).a !== 7;
    }) ? fallbackDefineProperty : nativeDefineProperty;
    var wrap = function(tag, description) {
      var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);
      setInternalState(symbol, {
        type: SYMBOL,
        tag,
        description
      });
      if (!DESCRIPTORS) symbol.description = description;
      return symbol;
    };
    var $defineProperty = function defineProperty(O, P, Attributes) {
      if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);
      anObject(O);
      var key = toPropertyKey(P);
      anObject(Attributes);
      if (hasOwn(AllSymbols, key)) {
        if (!Attributes.enumerable) {
          if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, nativeObjectCreate(null)));
          O[HIDDEN][key] = true;
        } else {
          if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;
          Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });
        }
        return setSymbolDescriptor(O, key, Attributes);
      }
      return nativeDefineProperty(O, key, Attributes);
    };
    var $defineProperties = function defineProperties(O, Properties) {
      anObject(O);
      var properties = toIndexedObject(Properties);
      var keys2 = objectKeys(properties).concat($getOwnPropertySymbols(properties));
      $forEach(keys2, function(key) {
        if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);
      });
      return O;
    };
    var $create = function create(O, Properties) {
      return Properties === void 0 ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);
    };
    var $propertyIsEnumerable = function propertyIsEnumerable(V) {
      var P = toPropertyKey(V);
      var enumerable = call(nativePropertyIsEnumerable, this, P);
      if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;
      return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;
    };
    var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {
      var it = toIndexedObject(O);
      var key = toPropertyKey(P);
      if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;
      var descriptor = nativeGetOwnPropertyDescriptor(it, key);
      if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {
        descriptor.enumerable = true;
      }
      return descriptor;
    };
    var $getOwnPropertyNames = function getOwnPropertyNames(O) {
      var names = nativeGetOwnPropertyNames(toIndexedObject(O));
      var result = [];
      $forEach(names, function(key) {
        if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);
      });
      return result;
    };
    var $getOwnPropertySymbols = function(O) {
      var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;
      var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));
      var result = [];
      $forEach(names, function(key) {
        if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {
          push(result, AllSymbols[key]);
        }
      });
      return result;
    };
    if (!NATIVE_SYMBOL) {
      $Symbol = function Symbol2() {
        if (isPrototypeOf(SymbolPrototype, this)) throw new TypeError2("Symbol is not a constructor");
        var description = !arguments.length || arguments[0] === void 0 ? void 0 : $toString(arguments[0]);
        var tag = uid(description);
        var setter = function(value) {
          var $this = this === void 0 ? globalThis2 : this;
          if ($this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);
          if (hasOwn($this, HIDDEN) && hasOwn($this[HIDDEN], tag)) $this[HIDDEN][tag] = false;
          var descriptor = createPropertyDescriptor(1, value);
          try {
            setSymbolDescriptor($this, tag, descriptor);
          } catch (error) {
            if (!(error instanceof RangeError)) throw error;
            fallbackDefineProperty($this, tag, descriptor);
          }
        };
        if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });
        return wrap(tag, description);
      };
      SymbolPrototype = $Symbol[PROTOTYPE];
      defineBuiltIn(SymbolPrototype, "toString", function toString() {
        return getInternalState(this).tag;
      });
      defineBuiltIn($Symbol, "withoutSetter", function(description) {
        return wrap(uid(description), description);
      });
      propertyIsEnumerableModule.f = $propertyIsEnumerable;
      definePropertyModule.f = $defineProperty;
      definePropertiesModule.f = $defineProperties;
      getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;
      getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;
      getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;
      wrappedWellKnownSymbolModule.f = function(name) {
        return wrap(wellKnownSymbol(name), name);
      };
      if (DESCRIPTORS) {
        defineBuiltInAccessor(SymbolPrototype, "description", {
          configurable: true,
          get: function description() {
            return getInternalState(this).description;
          }
        });
        if (!IS_PURE) {
          defineBuiltIn(ObjectPrototype, "propertyIsEnumerable", $propertyIsEnumerable, { unsafe: true });
        }
      }
    }
    $({ global: true, constructor: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {
      Symbol: $Symbol
    });
    $forEach(objectKeys(WellKnownSymbolsStore), function(name) {
      defineWellKnownSymbol(name);
    });
    $({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {
      useSetter: function() {
        USE_SETTER = true;
      },
      useSimple: function() {
        USE_SETTER = false;
      }
    });
    $({ target: "Object", stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {
      // `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
    });
    $({ target: "Object", stat: true, forced: !NATIVE_SYMBOL }, {
      // `Object.getOwnPropertyNames` method
      // https://tc39.es/ecma262/#sec-object.getownpropertynames
      getOwnPropertyNames: $getOwnPropertyNames
    });
    defineSymbolToPrimitive();
    setToStringTag($Symbol, SYMBOL);
    hiddenKeys[HIDDEN] = true;
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/symbol-registry-detection.js
var require_symbol_registry_detection = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/symbol-registry-detection.js"(exports2, module2) {
    "use strict";
    var NATIVE_SYMBOL = require_symbol_constructor_detection();
    module2.exports = NATIVE_SYMBOL && !!Symbol["for"] && !!Symbol.keyFor;
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.for.js
var require_es_symbol_for = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.for.js"() {
    "use strict";
    var $ = require_export();
    var getBuiltIn = require_get_built_in();
    var hasOwn = require_has_own_property();
    var toString = require_to_string();
    var shared = require_shared();
    var NATIVE_SYMBOL_REGISTRY = require_symbol_registry_detection();
    var StringToSymbolRegistry = shared("string-to-symbol-registry");
    var SymbolToStringRegistry = shared("symbol-to-string-registry");
    $({ target: "Symbol", stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {
      "for": function(key) {
        var string = toString(key);
        if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];
        var symbol = getBuiltIn("Symbol")(string);
        StringToSymbolRegistry[string] = symbol;
        SymbolToStringRegistry[symbol] = string;
        return symbol;
      }
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.key-for.js
var require_es_symbol_key_for = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.key-for.js"() {
    "use strict";
    var $ = require_export();
    var hasOwn = require_has_own_property();
    var isSymbol = require_is_symbol();
    var tryToString = require_try_to_string();
    var shared = require_shared();
    var NATIVE_SYMBOL_REGISTRY = require_symbol_registry_detection();
    var SymbolToStringRegistry = shared("symbol-to-string-registry");
    $({ target: "Symbol", stat: true, forced: !NATIVE_SYMBOL_REGISTRY }, {
      keyFor: function keyFor(sym) {
        if (!isSymbol(sym)) throw new TypeError(tryToString(sym) + " is not a symbol");
        if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];
      }
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-apply.js
var require_function_apply = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-apply.js"(exports2, module2) {
    "use strict";
    var NATIVE_BIND = require_function_bind_native();
    var FunctionPrototype = Function.prototype;
    var apply = FunctionPrototype.apply;
    var call = FunctionPrototype.call;
    module2.exports = typeof Reflect == "object" && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function() {
      return call.apply(apply, arguments);
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-json-replacer-function.js
var require_get_json_replacer_function = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-json-replacer-function.js"(exports2, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var isArray = require_is_array();
    var isCallable = require_is_callable();
    var classof = require_classof_raw();
    var toString = require_to_string();
    var push = uncurryThis([].push);
    module2.exports = function(replacer) {
      if (isCallable(replacer)) return replacer;
      if (!isArray(replacer)) return;
      var rawLength = replacer.length;
      var keys2 = [];
      for (var i = 0; i < rawLength; i++) {
        var element = replacer[i];
        if (typeof element == "string") push(keys2, element);
        else if (typeof element == "number" || classof(element) === "Number" || classof(element) === "String") push(keys2, toString(element));
      }
      var keysLength = keys2.length;
      var root = true;
      return function(key, value) {
        if (root) {
          root = false;
          return value;
        }
        if (isArray(this)) return value;
        for (var j = 0; j < keysLength; j++) if (keys2[j] === key) return value;
      };
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.json.stringify.js
var require_es_json_stringify = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.json.stringify.js"() {
    "use strict";
    var $ = require_export();
    var getBuiltIn = require_get_built_in();
    var apply = require_function_apply();
    var call = require_function_call();
    var uncurryThis = require_function_uncurry_this();
    var fails = require_fails();
    var isCallable = require_is_callable();
    var isSymbol = require_is_symbol();
    var arraySlice = require_array_slice();
    var getReplacerFunction = require_get_json_replacer_function();
    var NATIVE_SYMBOL = require_symbol_constructor_detection();
    var $String = String;
    var $stringify = getBuiltIn("JSON", "stringify");
    var exec = uncurryThis(/./.exec);
    var charAt = uncurryThis("".charAt);
    var charCodeAt = uncurryThis("".charCodeAt);
    var replace = uncurryThis("".replace);
    var numberToString = uncurryThis(1 .toString);
    var tester = /[\uD800-\uDFFF]/g;
    var low = /^[\uD800-\uDBFF]$/;
    var hi = /^[\uDC00-\uDFFF]$/;
    var WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function() {
      var symbol = getBuiltIn("Symbol")("stringify detection");
      return $stringify([symbol]) !== "[null]" || $stringify({ a: symbol }) !== "{}" || $stringify(Object(symbol)) !== "{}";
    });
    var ILL_FORMED_UNICODE = fails(function() {
      return $stringify("\uDF06\uD834") !== '"\\udf06\\ud834"' || $stringify("\uDEAD") !== '"\\udead"';
    });
    var stringifyWithSymbolsFix = function(it, replacer) {
      var args = arraySlice(arguments);
      var $replacer = getReplacerFunction(replacer);
      if (!isCallable($replacer) && (it === void 0 || isSymbol(it))) return;
      args[1] = function(key, value) {
        if (isCallable($replacer)) value = call($replacer, this, $String(key), value);
        if (!isSymbol(value)) return value;
      };
      return apply($stringify, null, args);
    };
    var fixIllFormed = function(match, offset, string) {
      var prev = charAt(string, offset - 1);
      var next = charAt(string, offset + 1);
      if (exec(low, match) && !exec(hi, next) || exec(hi, match) && !exec(low, prev)) {
        return "\\u" + numberToString(charCodeAt(match, 0), 16);
      }
      return match;
    };
    if ($stringify) {
      $({ target: "JSON", stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, {
        // eslint-disable-next-line no-unused-vars -- required for `.length`
        stringify: function stringify(it, replacer, space) {
          var args = arraySlice(arguments);
          var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args);
          return ILL_FORMED_UNICODE && typeof result == "string" ? replace(result, tester, fixIllFormed) : result;
        }
      });
    }
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.get-own-property-symbols.js
var require_es_object_get_own_property_symbols = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.get-own-property-symbols.js"() {
    "use strict";
    var $ = require_export();
    var NATIVE_SYMBOL = require_symbol_constructor_detection();
    var fails = require_fails();
    var getOwnPropertySymbolsModule = require_object_get_own_property_symbols();
    var toObject = require_to_object();
    var FORCED = !NATIVE_SYMBOL || fails(function() {
      getOwnPropertySymbolsModule.f(1);
    });
    $({ target: "Object", stat: true, forced: FORCED }, {
      getOwnPropertySymbols: function getOwnPropertySymbols(it) {
        var $getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
        return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject(it)) : [];
      }
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.js
var require_es_symbol = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.js"() {
    "use strict";
    require_es_symbol_constructor();
    require_es_symbol_for();
    require_es_symbol_key_for();
    require_es_json_stringify();
    require_es_object_get_own_property_symbols();
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.description.js
var require_es_symbol_description = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.description.js"() {
    "use strict";
    var $ = require_export();
    var DESCRIPTORS = require_descriptors();
    var globalThis2 = require_global_this();
    var uncurryThis = require_function_uncurry_this();
    var hasOwn = require_has_own_property();
    var isCallable = require_is_callable();
    var isPrototypeOf = require_object_is_prototype_of();
    var toString = require_to_string();
    var defineBuiltInAccessor = require_define_built_in_accessor();
    var copyConstructorProperties = require_copy_constructor_properties();
    var NativeSymbol = globalThis2.Symbol;
    var SymbolPrototype = NativeSymbol && NativeSymbol.prototype;
    if (DESCRIPTORS && isCallable(NativeSymbol) && (!("description" in SymbolPrototype) || // Safari 12 bug
    NativeSymbol().description !== void 0)) {
      EmptyStringDescriptionStore = {};
      SymbolWrapper = function Symbol2() {
        var description = arguments.length < 1 || arguments[0] === void 0 ? void 0 : toString(arguments[0]);
        var result = isPrototypeOf(SymbolPrototype, this) ? new NativeSymbol(description) : description === void 0 ? NativeSymbol() : NativeSymbol(description);
        if (description === "") EmptyStringDescriptionStore[result] = true;
        return result;
      };
      copyConstructorProperties(SymbolWrapper, NativeSymbol);
      SymbolWrapper.prototype = SymbolPrototype;
      SymbolPrototype.constructor = SymbolWrapper;
      NATIVE_SYMBOL = String(NativeSymbol("description detection")) === "Symbol(description detection)";
      thisSymbolValue = uncurryThis(SymbolPrototype.valueOf);
      symbolDescriptiveString = uncurryThis(SymbolPrototype.toString);
      regexp = /^Symbol\((.*)\)[^)]+$/;
      replace = uncurryThis("".replace);
      stringSlice = uncurryThis("".slice);
      defineBuiltInAccessor(SymbolPrototype, "description", {
        configurable: true,
        get: function description() {
          var symbol = thisSymbolValue(this);
          if (hasOwn(EmptyStringDescriptionStore, symbol)) return "";
          var string = symbolDescriptiveString(symbol);
          var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, "$1");
          return desc === "" ? void 0 : desc;
        }
      });
      $({ global: true, constructor: true, forced: true }, {
        Symbol: SymbolWrapper
      });
    }
    var EmptyStringDescriptionStore;
    var SymbolWrapper;
    var NATIVE_SYMBOL;
    var thisSymbolValue;
    var symbolDescriptiveString;
    var regexp;
    var replace;
    var stringSlice;
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.to-primitive.js
var require_es_symbol_to_primitive = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.to-primitive.js"() {
    "use strict";
    var defineWellKnownSymbol = require_well_known_symbol_define();
    var defineSymbolToPrimitive = require_symbol_define_to_primitive();
    defineWellKnownSymbol("toPrimitive");
    defineSymbolToPrimitive();
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-set-length.js
var require_array_set_length = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-set-length.js"(exports2, module2) {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var isArray = require_is_array();
    var $TypeError = TypeError;
    var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
    var SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function() {
      if (this !== void 0) return true;
      try {
        Object.defineProperty([], "length", { writable: false }).length = 1;
      } catch (error) {
        return error instanceof TypeError;
      }
    }();
    module2.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function(O, length) {
      if (isArray(O) && !getOwnPropertyDescriptor(O, "length").writable) {
        throw new $TypeError("Cannot set read only .length");
      }
      return O.length = length;
    } : function(O, length) {
      return O.length = length;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/does-not-exceed-safe-integer.js
var require_does_not_exceed_safe_integer = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/does-not-exceed-safe-integer.js"(exports2, module2) {
    "use strict";
    var $TypeError = TypeError;
    var MAX_SAFE_INTEGER = 9007199254740991;
    module2.exports = function(it) {
      if (it > MAX_SAFE_INTEGER) throw $TypeError("Maximum allowed index exceeded");
      return it;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.push.js
var require_es_array_push = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.push.js"() {
    "use strict";
    var $ = require_export();
    var toObject = require_to_object();
    var lengthOfArrayLike = require_length_of_array_like();
    var setArrayLength = require_array_set_length();
    var doesNotExceedSafeInteger = require_does_not_exceed_safe_integer();
    var fails = require_fails();
    var INCORRECT_TO_LENGTH = fails(function() {
      return [].push.call({ length: 4294967296 }, 1) !== 4294967297;
    });
    var properErrorOnNonWritableLength = function() {
      try {
        Object.defineProperty([], "length", { writable: false }).push();
      } catch (error) {
        return error instanceof TypeError;
      }
    };
    var FORCED = INCORRECT_TO_LENGTH || !properErrorOnNonWritableLength();
    $({ target: "Array", proto: true, arity: 1, forced: FORCED }, {
      // eslint-disable-next-line no-unused-vars -- required for `.length`
      push: function push(item) {
        var O = toObject(this);
        var len = lengthOfArrayLike(O);
        var argCount = arguments.length;
        doesNotExceedSafeInteger(len + argCount);
        for (var i = 0; i < argCount; i++) {
          O[len] = arguments[i];
          len++;
        }
        setArrayLength(O, len);
        return len;
      }
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/date-to-primitive.js
var require_date_to_primitive = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/date-to-primitive.js"(exports2, module2) {
    "use strict";
    var anObject = require_an_object();
    var ordinaryToPrimitive = require_ordinary_to_primitive();
    var $TypeError = TypeError;
    module2.exports = function(hint) {
      anObject(this);
      if (hint === "string" || hint === "default") hint = "string";
      else if (hint !== "number") throw new $TypeError("Incorrect hint");
      return ordinaryToPrimitive(this, hint);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.date.to-primitive.js
var require_es_date_to_primitive = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.date.to-primitive.js"() {
    "use strict";
    var hasOwn = require_has_own_property();
    var defineBuiltIn = require_define_built_in();
    var dateToPrimitive = require_date_to_primitive();
    var wellKnownSymbol = require_well_known_symbol();
    var TO_PRIMITIVE = wellKnownSymbol("toPrimitive");
    var DatePrototype = Date.prototype;
    if (!hasOwn(DatePrototype, TO_PRIMITIVE)) {
      defineBuiltIn(DatePrototype, TO_PRIMITIVE, dateToPrimitive);
    }
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-uncurry-this-accessor.js
var require_function_uncurry_this_accessor = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/function-uncurry-this-accessor.js"(exports2, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var aCallable = require_a_callable();
    module2.exports = function(object, key, method) {
      try {
        return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));
      } catch (error) {
      }
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-possible-prototype.js
var require_is_possible_prototype = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-possible-prototype.js"(exports2, module2) {
    "use strict";
    var isObject2 = require_is_object();
    module2.exports = function(argument) {
      return isObject2(argument) || argument === null;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/a-possible-prototype.js
var require_a_possible_prototype = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/a-possible-prototype.js"(exports2, module2) {
    "use strict";
    var isPossiblePrototype = require_is_possible_prototype();
    var $String = String;
    var $TypeError = TypeError;
    module2.exports = function(argument) {
      if (isPossiblePrototype(argument)) return argument;
      throw new $TypeError("Can't set " + $String(argument) + " as a prototype");
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-set-prototype-of.js
var require_object_set_prototype_of = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-set-prototype-of.js"(exports2, module2) {
    "use strict";
    var uncurryThisAccessor = require_function_uncurry_this_accessor();
    var isObject2 = require_is_object();
    var requireObjectCoercible = require_require_object_coercible();
    var aPossiblePrototype = require_a_possible_prototype();
    module2.exports = Object.setPrototypeOf || ("__proto__" in {} ? function() {
      var CORRECT_SETTER = false;
      var test = {};
      var setter;
      try {
        setter = uncurryThisAccessor(Object.prototype, "__proto__", "set");
        setter(test, []);
        CORRECT_SETTER = test instanceof Array;
      } catch (error) {
      }
      return function setPrototypeOf(O, proto) {
        requireObjectCoercible(O);
        aPossiblePrototype(proto);
        if (!isObject2(O)) return O;
        if (CORRECT_SETTER) setter(O, proto);
        else O.__proto__ = proto;
        return O;
      };
    }() : void 0);
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/inherit-if-required.js
var require_inherit_if_required = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/inherit-if-required.js"(exports2, module2) {
    "use strict";
    var isCallable = require_is_callable();
    var isObject2 = require_is_object();
    var setPrototypeOf = require_object_set_prototype_of();
    module2.exports = function($this, dummy, Wrapper) {
      var NewTarget, NewTargetPrototype;
      if (
        // it can work only with native `setPrototypeOf`
        setPrototypeOf && // we haven't completely correct pre-ES6 way for getting `new.target`, so use this
        isCallable(NewTarget = dummy.constructor) && NewTarget !== Wrapper && isObject2(NewTargetPrototype = NewTarget.prototype) && NewTargetPrototype !== Wrapper.prototype
      ) setPrototypeOf($this, NewTargetPrototype);
      return $this;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/this-number-value.js
var require_this_number_value = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/this-number-value.js"(exports2, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    module2.exports = uncurryThis(1 .valueOf);
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/whitespaces.js
var require_whitespaces = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/whitespaces.js"(exports2, module2) {
    "use strict";
    module2.exports = "	\n\v\f\r                 \u2028\u2029\uFEFF";
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/string-trim.js
var require_string_trim = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/string-trim.js"(exports2, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var requireObjectCoercible = require_require_object_coercible();
    var toString = require_to_string();
    var whitespaces = require_whitespaces();
    var replace = uncurryThis("".replace);
    var ltrim = RegExp("^[" + whitespaces + "]+");
    var rtrim = RegExp("(^|[^" + whitespaces + "])[" + whitespaces + "]+$");
    var createMethod = function(TYPE) {
      return function($this) {
        var string = toString(requireObjectCoercible($this));
        if (TYPE & 1) string = replace(string, ltrim, "");
        if (TYPE & 2) string = replace(string, rtrim, "$1");
        return string;
      };
    };
    module2.exports = {
      // `String.prototype.{ trimLeft, trimStart }` methods
      // https://tc39.es/ecma262/#sec-string.prototype.trimstart
      start: createMethod(1),
      // `String.prototype.{ trimRight, trimEnd }` methods
      // https://tc39.es/ecma262/#sec-string.prototype.trimend
      end: createMethod(2),
      // `String.prototype.trim` method
      // https://tc39.es/ecma262/#sec-string.prototype.trim
      trim: createMethod(3)
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.number.constructor.js
var require_es_number_constructor = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.number.constructor.js"() {
    "use strict";
    var $ = require_export();
    var IS_PURE = require_is_pure();
    var DESCRIPTORS = require_descriptors();
    var globalThis2 = require_global_this();
    var path = require_path();
    var uncurryThis = require_function_uncurry_this();
    var isForced = require_is_forced();
    var hasOwn = require_has_own_property();
    var inheritIfRequired = require_inherit_if_required();
    var isPrototypeOf = require_object_is_prototype_of();
    var isSymbol = require_is_symbol();
    var toPrimitive = require_to_primitive();
    var fails = require_fails();
    var getOwnPropertyNames = require_object_get_own_property_names().f;
    var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f;
    var defineProperty = require_object_define_property().f;
    var thisNumberValue = require_this_number_value();
    var trim = require_string_trim().trim;
    var NUMBER = "Number";
    var NativeNumber = globalThis2[NUMBER];
    var PureNumberNamespace = path[NUMBER];
    var NumberPrototype = NativeNumber.prototype;
    var TypeError2 = globalThis2.TypeError;
    var stringSlice = uncurryThis("".slice);
    var charCodeAt = uncurryThis("".charCodeAt);
    var toNumeric = function(value) {
      var primValue = toPrimitive(value, "number");
      return typeof primValue == "bigint" ? primValue : toNumber(primValue);
    };
    var toNumber = function(argument) {
      var it = toPrimitive(argument, "number");
      var first, third, radix, maxCode, digits, length, index, code;
      if (isSymbol(it)) throw new TypeError2("Cannot convert a Symbol value to a number");
      if (typeof it == "string" && it.length > 2) {
        it = trim(it);
        first = charCodeAt(it, 0);
        if (first === 43 || first === 45) {
          third = charCodeAt(it, 2);
          if (third === 88 || third === 120) return NaN;
        } else if (first === 48) {
          switch (charCodeAt(it, 1)) {
            // fast equal of /^0b[01]+$/i
            case 66:
            case 98:
              radix = 2;
              maxCode = 49;
              break;
            // fast equal of /^0o[0-7]+$/i
            case 79:
            case 111:
              radix = 8;
              maxCode = 55;
              break;
            default:
              return +it;
          }
          digits = stringSlice(it, 2);
          length = digits.length;
          for (index = 0; index < length; index++) {
            code = charCodeAt(digits, index);
            if (code < 48 || code > maxCode) return NaN;
          }
          return parseInt(digits, radix);
        }
      }
      return +it;
    };
    var FORCED = isForced(NUMBER, !NativeNumber(" 0o1") || !NativeNumber("0b1") || NativeNumber("+0x1"));
    var calledWithNew = function(dummy) {
      return isPrototypeOf(NumberPrototype, dummy) && fails(function() {
        thisNumberValue(dummy);
      });
    };
    var NumberWrapper = function Number2(value) {
      var n = arguments.length < 1 ? 0 : NativeNumber(toNumeric(value));
      return calledWithNew(this) ? inheritIfRequired(Object(n), this, NumberWrapper) : n;
    };
    NumberWrapper.prototype = NumberPrototype;
    if (FORCED && !IS_PURE) NumberPrototype.constructor = NumberWrapper;
    $({ global: true, constructor: true, wrap: true, forced: FORCED }, {
      Number: NumberWrapper
    });
    var copyConstructorProperties = function(target, source) {
      for (var keys2 = DESCRIPTORS ? getOwnPropertyNames(source) : (
        // ES3:
        "MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(",")
      ), j = 0, key; keys2.length > j; j++) {
        if (hasOwn(source, key = keys2[j]) && !hasOwn(target, key)) {
          defineProperty(target, key, getOwnPropertyDescriptor(source, key));
        }
      }
    };
    if (IS_PURE && PureNumberNamespace) copyConstructorProperties(path[NUMBER], PureNumberNamespace);
    if (FORCED || IS_PURE) copyConstructorProperties(path[NUMBER], NativeNumber);
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-flags.js
var require_regexp_flags = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-flags.js"(exports2, module2) {
    "use strict";
    var anObject = require_an_object();
    module2.exports = function() {
      var that = anObject(this);
      var result = "";
      if (that.hasIndices) result += "d";
      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.unicodeSets) result += "v";
      if (that.sticky) result += "y";
      return result;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-get-flags.js
var require_regexp_get_flags = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-get-flags.js"(exports2, module2) {
    "use strict";
    var call = require_function_call();
    var hasOwn = require_has_own_property();
    var isPrototypeOf = require_object_is_prototype_of();
    var regExpFlags = require_regexp_flags();
    var RegExpPrototype = RegExp.prototype;
    module2.exports = function(R) {
      var flags = R.flags;
      return flags === void 0 && !("flags" in RegExpPrototype) && !hasOwn(R, "flags") && isPrototypeOf(RegExpPrototype, R) ? call(regExpFlags, R) : flags;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.regexp.to-string.js
var require_es_regexp_to_string = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.regexp.to-string.js"() {
    "use strict";
    var PROPER_FUNCTION_NAME = require_function_name().PROPER;
    var defineBuiltIn = require_define_built_in();
    var anObject = require_an_object();
    var $toString = require_to_string();
    var fails = require_fails();
    var getRegExpFlags = require_regexp_get_flags();
    var TO_STRING = "toString";
    var RegExpPrototype = RegExp.prototype;
    var nativeToString = RegExpPrototype[TO_STRING];
    var NOT_GENERIC = fails(function() {
      return nativeToString.call({ source: "a", flags: "b" }) !== "/a/b";
    });
    var INCORRECT_NAME = PROPER_FUNCTION_NAME && nativeToString.name !== TO_STRING;
    if (NOT_GENERIC || INCORRECT_NAME) {
      defineBuiltIn(RegExpPrototype, TO_STRING, function toString() {
        var R = anObject(this);
        var pattern = $toString(R.source);
        var flags = $toString(getRegExpFlags(R));
        return "/" + pattern + "/" + flags;
      }, { unsafe: true });
    }
  }
});

// node_modules/.pnpm/[email protected]/node_modules/proxy-polyfill/proxy.min.js
var require_proxy_min = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/proxy-polyfill/proxy.min.js"() {
    (function() {
      function n() {
        function v() {
          return null;
        }
        function l(a) {
          return a ? "object" === typeof a || "function" === typeof a : false;
        }
        function p(a) {
          if (null !== a && !l(a)) throw new TypeError("Object prototype may only be an Object or null: " + a);
        }
        var q = null, e = Object, w = !!e.create || !({ __proto__: null } instanceof e), A = e.create || (w ? function(a) {
          p(a);
          return { __proto__: a };
        } : function(a) {
          function c() {
          }
          p(a);
          if (null === a) throw new SyntaxError("Native Object.create is required to create objects with null prototype");
          c.prototype = a;
          return new c();
        }), B = e.getPrototypeOf || ([].__proto__ === Array.prototype ? function(a) {
          a = a.__proto__;
          return l(a) ? a : null;
        } : v);
        var m = function(a, c) {
          function k() {
          }
          if (void 0 === (this && this instanceof m ? this.constructor : void 0)) throw new TypeError("Constructor Proxy requires 'new'");
          if (!l(a) || !l(c)) throw new TypeError("Cannot create proxy with a non-object as target or handler");
          q = function() {
            a = null;
            k = function(b) {
              throw new TypeError("Cannot perform '" + b + "' on a proxy that has been revoked");
            };
          };
          setTimeout(function() {
            q = null;
          }, 0);
          var g = c;
          c = { get: null, set: null, apply: null, construct: null };
          for (var h2 in g) {
            if (!(h2 in c)) throw new TypeError("Proxy polyfill does not support trap '" + h2 + "'");
            c[h2] = g[h2];
          }
          "function" === typeof g && (c.apply = g.apply.bind(g));
          g = B(a);
          var r = false, t = false;
          if ("function" === typeof a) {
            var f = function() {
              var b = this && this.constructor === f, d = Array.prototype.slice.call(arguments);
              k(b ? "construct" : "apply");
              return b && c.construct ? c.construct.call(this, a, d) : !b && c.apply ? c.apply(a, this, d) : b ? (d.unshift(a), new (a.bind.apply(a, d))()) : a.apply(
                this,
                d
              );
            };
            r = true;
          } else a instanceof Array ? (f = [], t = true) : f = w || null !== g ? A(g) : {};
          var x = c.get ? function(b) {
            k("get");
            return c.get(this, b, f);
          } : function(b) {
            k("get");
            return this[b];
          }, C = c.set ? function(b, d) {
            k("set");
            c.set(this, b, d, f);
          } : function(b, d) {
            k("set");
            this[b] = d;
          }, y = {};
          e.getOwnPropertyNames(a).forEach(function(b) {
            if (!((r || t) && b in f)) {
              var d = e.getOwnPropertyDescriptor(a, b);
              e.defineProperty(f, b, { enumerable: !!d.enumerable, get: x.bind(a, b), set: C.bind(a, b) });
              y[b] = true;
            }
          });
          h2 = true;
          if (r || t) {
            var D = e.setPrototypeOf || ([].__proto__ === Array.prototype ? function(b, d) {
              p(d);
              b.__proto__ = d;
              return b;
            } : v);
            g && D(f, g) || (h2 = false);
          }
          if (c.get || !h2) for (var u in a) y[u] || e.defineProperty(f, u, { get: x.bind(a, u) });
          e.seal(a);
          e.seal(f);
          return f;
        };
        m.revocable = function(a, c) {
          return { proxy: new m(a, c), revoke: q };
        };
        return m;
      }
      ;
      var z = "undefined" !== typeof process && "[object process]" === {}.toString.call(process) || "undefined" !== typeof navigator && "ReactNative" === navigator.product ? global : self;
      z.Proxy || (z.Proxy = n(), z.Proxy.revocable = z.Proxy.revocable);
    })();
  }
});

// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/NodeList.prototype.forEach.js
var require_NodeList_prototype_forEach = __commonJS({
  "node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/NodeList.prototype.forEach.js"() {
    (function(undefined2) {
      if (!("forEach" in NodeList.prototype)) {
        NodeList.prototype.forEach = Array.prototype.forEach;
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/helpers/_Iterator.js
var Iterator, Iterator_default;
var init_Iterator = __esm({
  "node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/helpers/_Iterator.js"() {
    Iterator = function() {
      var clear = function() {
        this.length = 0;
        return this;
      };
      var callable = function(fn) {
        if (typeof fn !== "function") throw new TypeError(fn + " is not a function");
        return fn;
      };
      var Iterator2 = function(list, context) {
        if (!(this instanceof Iterator2)) {
          return new Iterator2(list, context);
        }
        Object.defineProperties(this, {
          __list__: {
            writable: true,
            value: list
          },
          __context__: {
            writable: true,
            value: context
          },
          __nextIndex__: {
            writable: true,
            value: 0
          }
        });
        if (!context) return;
        callable(context.on);
        context.on("_add", this._onAdd.bind(this));
        context.on("_delete", this._onDelete.bind(this));
        context.on("_clear", this._onClear.bind(this));
      };
      Object.defineProperties(Iterator2.prototype, Object.assign({
        constructor: {
          value: Iterator2,
          configurable: true,
          enumerable: false,
          writable: true
        },
        _next: {
          value: function() {
            var i;
            if (!this.__list__) return;
            if (this.__redo__) {
              i = this.__redo__.shift();
              if (i !== void 0) return i;
            }
            if (this.__nextIndex__ < this.__list__.length) return this.__nextIndex__++;
            this._unBind();
          },
          configurable: true,
          enumerable: false,
          writable: true
        },
        next: {
          value: function() {
            return this._createResult(this._next());
          },
          configurable: true,
          enumerable: false,
          writable: true
        },
        _createResult: {
          value: function(i) {
            if (i === void 0) return {
              done: true,
              value: void 0
            };
            return {
              done: false,
              value: this._resolve(i)
            };
          },
          configurable: true,
          enumerable: false,
          writable: true
        },
        _resolve: {
          value: function(i) {
            return this.__list__[i];
          },
          configurable: true,
          enumerable: false,
          writable: true
        },
        _unBind: {
          value: function() {
            this.__list__ = null;
            delete this.__redo__;
            if (!this.__context__) return;
            this.__context__.off("_add", this._onAdd.bind(this));
            this.__context__.off("_delete", this._onDelete.bind(this));
            this.__context__.off("_clear", this._onClear.bind(this));
            this.__context__ = null;
          },
          configurable: true,
          enumerable: false,
          writable: true
        },
        toString: {
          value: function() {
            return "[object Iterator]";
          },
          configurable: true,
          enumerable: false,
          writable: true
        }
      }, {
        _onAdd: {
          value: function(index) {
            if (index >= this.__nextIndex__) return;
            ++this.__nextIndex__;
            if (!this.__redo__) {
              Object.defineProperty(this, "__redo__", {
                value: [index],
                configurable: true,
                enumerable: false,
                writable: false
              });
              return;
            }
            this.__redo__.forEach(function(redo, i) {
              if (redo >= index) this.__redo__[i] = ++redo;
            }, this);
            this.__redo__.push(index);
          },
          configurable: true,
          enumerable: false,
          writable: true
        },
        _onDelete: {
          value: function(index) {
            var i;
            if (index >= this.__nextIndex__) return;
            --this.__nextIndex__;
            if (!this.__redo__) return;
            i = this.__redo__.indexOf(index);
            if (i !== -1) this.__redo__.splice(i, 1);
            this.__redo__.forEach(function(redo, i2) {
              if (redo > index) this.__redo__[i2] = --redo;
            }, this);
          },
          configurable: true,
          enumerable: false,
          writable: true
        },
        _onClear: {
          value: function() {
            if (this.__redo__) clear.call(this.__redo__);
            this.__nextIndex__ = 0;
          },
          configurable: true,
          enumerable: false,
          writable: true
        }
      }));
      Object.defineProperty(Iterator2.prototype, Symbol.iterator, {
        value: function() {
          return this;
        },
        configurable: true,
        enumerable: false,
        writable: true
      });
      Object.defineProperty(Iterator2.prototype, Symbol.toStringTag, {
        value: "Iterator",
        configurable: false,
        enumerable: false,
        writable: true
      });
      return Iterator2;
    }();
    Iterator_default = Iterator;
  }
});

// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/helpers/_ArrayIterator.js
var ArrayIterator, ArrayIterator_default;
var init_ArrayIterator = __esm({
  "node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/helpers/_ArrayIterator.js"() {
    init_Iterator();
    ArrayIterator = function() {
      var ArrayIterator2 = function(arr, kind) {
        if (!(this instanceof ArrayIterator2)) return new ArrayIterator2(arr, kind);
        Iterator_default.call(this, arr);
        if (!kind) kind = "value";
        else if (String.prototype.includes.call(kind, "key+value")) kind = "key+value";
        else if (String.prototype.includes.call(kind, "key")) kind = "key";
        else kind = "value";
        Object.defineProperty(this, "__kind__", {
          value: kind,
          configurable: false,
          enumerable: false,
          writable: false
        });
      };
      if (Object.setPrototypeOf) Object.setPrototypeOf(ArrayIterator2, Iterator_default.prototype);
      ArrayIterator2.prototype = Object.create(Iterator_default.prototype, {
        constructor: {
          value: ArrayIterator2,
          configurable: true,
          enumerable: false,
          writable: true
        },
        _resolve: {
          value: function(i) {
            if (this.__kind__ === "value") return this.__list__[i];
            if (this.__kind__ === "key+value") return [i, this.__list__[i]];
            return i;
          },
          configurable: true,
          enumerable: false,
          writable: true
        },
        toString: {
          value: function() {
            return "[object Array Iterator]";
          },
          configurable: true,
          enumerable: false,
          writable: true
        }
      });
      Object.defineProperty(ArrayIterator2.prototype, Symbol.toStringTag, {
        value: "Array Iterator",
        writable: false,
        enumerable: false,
        configurable: true
      });
      return ArrayIterator2;
    }();
    ArrayIterator_default = ArrayIterator;
  }
});

// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/NodeList.prototype.@@iterator.js
var NodeList_prototype_iterator_exports = {};
var init_NodeList_prototype_iterator = __esm({
  "node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/NodeList.prototype.@@iterator.js"() {
    init_ArrayIterator();
    init_Iterator();
    (function(undefined2) {
      if (!("Symbol" in self && "iterator" in self.Symbol && function() {
        var e = document.createDocumentFragment();
        return e.appendChild(document.createElement("div")), !!e.childNodes[self.Symbol.iterator];
      }())) {
        NodeList.prototype[Symbol.iterator] = function() {
          return new ArrayIterator_default(this);
        };
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/Event.js
var require_Event = __commonJS({
  "node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/Event.js"() {
    (function(undefined2) {
      if (!function() {
        if (!("Event" in self)) return false;
        try {
          return new Event("click"), true;
        } catch (n) {
          return false;
        }
      }()) {
        (function() {
          if (typeof document === "undefined" || typeof window === "undefined") return;
          var existingProto = window.Event && window.Event.prototype || null;
          function Event2(type, eventInitDict) {
            if (!type) {
              throw new Error("Not enough arguments");
            }
            var event;
            if ("createEvent" in document) {
              event = document.createEvent("Event");
              var bubbles = eventInitDict && eventInitDict.bubbles !== undefined2 ? eventInitDict.bubbles : false;
              var cancelable = eventInitDict && eventInitDict.cancelable !== undefined2 ? eventInitDict.cancelable : false;
              event.initEvent(type, bubbles, cancelable);
              return event;
            }
            event = document.createEventObject();
            event.type = type;
            event.bubbles = eventInitDict && eventInitDict.bubbles !== undefined2 ? eventInitDict.bubbles : false;
            event.cancelable = eventInitDict && eventInitDict.cancelable !== undefined2 ? eventInitDict.cancelable : false;
            return event;
          }
          Event2.NONE = 0;
          Event2.CAPTURING_PHASE = 1;
          Event2.AT_TARGET = 2;
          Event2.BUBBLING_PHASE = 3;
          window.Event = Window.prototype.Event = Event2;
          if (existingProto) {
            Object.defineProperty(window.Event, "prototype", {
              configurable: false,
              enumerable: false,
              writable: true,
              value: existingProto
            });
          }
          if (!("createEvent" in document)) {
            window.addEventListener = Window.prototype.addEventListener = Document.prototype.addEventListener = Element.prototype.addEventListener = function addEventListener() {
              var element = this, type = arguments[0], listener = arguments[1];
              if (!element._events) {
                element._events = {};
              }
              if (!element._events[type]) {
                element._events[type] = function(event) {
                  var list = element._events[event.type].list, events = list.slice(), index = -1, length = events.length, eventElement;
                  event.preventDefault = function preventDefault2() {
                    if (event.cancelable !== false) {
                      event.returnValue = false;
                    }
                  };
                  event.stopPropagation = function stopPropagation2() {
                    event.cancelBubble = true;
                  };
                  event.stopImmediatePropagation = function stopImmediatePropagation() {
                    event.cancelBubble = true;
                    event.cancelImmediate = true;
                  };
                  event.currentTarget = element;
                  event.relatedTarget = event.fromElement || null;
                  event.target = event.target || event.srcElement || element;
                  event.timeStamp = (/* @__PURE__ */ new Date()).getTime();
                  if (event.clientX) {
                    event.pageX = event.clientX + document.documentElement.scrollLeft;
                    event.pageY = event.clientY + document.documentElement.scrollTop;
                  }
                  while (++index < length && !event.cancelImmediate) {
                    if (index in events) {
                      eventElement = events[index];
                      if (list.includes(eventElement) && typeof eventElement === "function") {
                        eventElement.call(element, event);
                      }
                    }
                  }
                };
                element._events[type].list = [];
                if (element.attachEvent) {
                  element.attachEvent("on" + type, element._events[type]);
                }
              }
              element._events[type].list.push(listener);
            };
            window.removeEventListener = Window.prototype.removeEventListener = Document.prototype.removeEventListener = Element.prototype.removeEventListener = function removeEventListener() {
              var element = this, type = arguments[0], listener = arguments[1], index;
              if (element._events && element._events[type] && element._events[type].list) {
                index = element._events[type].list.indexOf(listener);
                if (index !== -1) {
                  element._events[type].list.splice(index, 1);
                  if (!element._events[type].list.length) {
                    if (element.detachEvent) {
                      element.detachEvent("on" + type, element._events[type]);
                    }
                    delete element._events[type];
                  }
                }
              }
            };
            window.dispatchEvent = Window.prototype.dispatchEvent = Document.prototype.dispatchEvent = Element.prototype.dispatchEvent = function dispatchEvent(event) {
              if (!arguments.length) {
                throw new Error("Not enough arguments");
              }
              if (!event || typeof event.type !== "string") {
                throw new Error("DOM Events Exception 0");
              }
              var element = this, type = event.type;
              try {
                if (!event.bubbles) {
                  event.cancelBubble = true;
                  var cancelBubbleEvent = function(event2) {
                    event2.cancelBubble = true;
                    (element || window).detachEvent("on" + type, cancelBubbleEvent);
                  };
                  this.attachEvent("on" + type, cancelBubbleEvent);
                }
                this.fireEvent("on" + type, event);
              } catch (error) {
                event.target = element;
                do {
                  event.currentTarget = element;
                  if ("_events" in element && typeof element._events[type] === "function") {
                    element._events[type].call(element, event);
                  }
                  if (typeof element["on" + type] === "function") {
                    element["on" + type].call(element, event);
                  }
                  element = element.nodeType === 9 ? element.parentWindow : element.parentNode;
                } while (element && !event.cancelBubble);
              }
              return true;
            };
            document.attachEvent("onreadystatechange", function() {
              if (document.readyState === "complete") {
                document.dispatchEvent(new Event2("DOMContentLoaded", {
                  bubbles: true
                }));
              }
            });
          }
        })();
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/CustomEvent.js
var require_CustomEvent = __commonJS({
  "node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/CustomEvent.js"() {
    (function(undefined2) {
      if (!("CustomEvent" in self && ("function" == typeof self.CustomEvent || -1 < self.CustomEvent.toString().indexOf("CustomEventConstructor")))) {
        self.CustomEvent = function CustomEvent2(type, eventInitDict) {
          if (!type) {
            throw Error('TypeError: Failed to construct "CustomEvent": An event name must be provided.');
          }
          var event;
          eventInitDict = eventInitDict || { bubbles: false, cancelable: false, detail: null };
          try {
            event = document.createEvent("CustomEvent");
            event.initCustomEvent(type, eventInitDict.bubbles, eventInitDict.cancelable, eventInitDict.detail);
          } catch (error) {
            event = document.createEvent("Event");
            event.initEvent(type, eventInitDict.bubbles, eventInitDict.cancelable);
            event.detail = eventInitDict.detail;
          }
          return event;
        };
        CustomEvent.prototype = Event.prototype;
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DocumentFragment.js
var require_DocumentFragment = __commonJS({
  "node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DocumentFragment.js"() {
    (function(undefined2) {
      if (!("DocumentFragment" in self && function() {
        try {
          return new DocumentFragment(), true;
        } catch (n) {
          return false;
        }
      }())) {
        (function(global2) {
          global2.DocumentFragment = function DocumentFragment2() {
            return document.createDocumentFragment();
          };
          var fragment = document.createDocumentFragment();
          global2.DocumentFragment.prototype = Object.create(fragment.constructor.prototype);
        })(self);
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/Element.prototype.matches.js
var require_Element_prototype_matches = __commonJS({
  "node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/Element.prototype.matches.js"() {
    (function(undefined2) {
      if (!("document" in self && "matches" in document.documentElement)) {
        Element.prototype.matches = Element.prototype.webkitMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.mozMatchesSelector || function matches(selector) {
          var element = this;
          var elements = (element.document || element.ownerDocument).querySelectorAll(selector);
          var index = 0;
          while (elements[index] && elements[index] !== element) {
            ++index;
          }
          return !!elements[index];
        };
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/HTMLTemplateElement.js
var require_HTMLTemplateElement = __commonJS({
  "node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/HTMLTemplateElement.js"() {
    /**
     * @license
     * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
     * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
     * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
     * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
     * Code distributed by Google as part of the polymer project is also
     * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
     */
    (function() {
      "use strict";
      var needsTemplate = typeof HTMLTemplateElement === "undefined";
      var brokenDocFragment = !(document.createDocumentFragment().cloneNode() instanceof DocumentFragment);
      var needsDocFrag = false;
      if (/Trident/.test(navigator.userAgent)) {
        (function() {
          needsDocFrag = true;
          var origCloneNode = Node.prototype.cloneNode;
          Node.prototype.cloneNode = function cloneNode2(deep) {
            var newDom = origCloneNode.call(this, deep);
            if (this instanceof DocumentFragment) {
              newDom.__proto__ = DocumentFragment.prototype;
            }
            return newDom;
          };
          DocumentFragment.prototype.querySelectorAll = HTMLElement.prototype.querySelectorAll;
          DocumentFragment.prototype.querySelector = HTMLElement.prototype.querySelector;
          Object.defineProperties(DocumentFragment.prototype, {
            "nodeType": {
              get: function() {
                return Node.DOCUMENT_FRAGMENT_NODE;
              },
              configurable: true
            },
            "localName": {
              get: function() {
                return void 0;
              },
              configurable: true
            },
            "nodeName": {
              get: function() {
                return "#document-fragment";
              },
              configurable: true
            }
          });
          var origInsertBefore = Node.prototype.insertBefore;
          function insertBefore(newNode, refNode) {
            if (newNode instanceof DocumentFragment) {
              var child;
              while (child = newNode.firstChild) {
                origInsertBefore.call(this, child, refNode);
              }
            } else {
              origInsertBefore.call(this, newNode, refNode);
            }
            return newNode;
          }
          Node.prototype.insertBefore = insertBefore;
          var origAppendChild = Node.prototype.appendChild;
          Node.prototype.appendChild = function appendChild2(child) {
            if (child instanceof DocumentFragment) {
              insertBefore.call(this, child, null);
            } else {
              origAppendChild.call(this, child);
            }
            return child;
          };
          var origRemoveChild = Node.prototype.removeChild;
          var origReplaceChild = Node.prototype.replaceChild;
          Node.prototype.replaceChild = function replaceChild(newChild, oldChild) {
            if (newChild instanceof DocumentFragment) {
              insertBefore.call(this, newChild, oldChild);
              origRemoveChild.call(this, oldChild);
            } else {
              origReplaceChild.call(this, newChild, oldChild);
            }
            return oldChild;
          };
          Document.prototype.createDocumentFragment = function createDocumentFragment() {
            var frag = this.createElement("df");
            frag.__proto__ = DocumentFragment.prototype;
            return frag;
          };
          var origImportNode = Document.prototype.importNode;
          Document.prototype.importNode = function importNode2(impNode, deep) {
            deep = deep || false;
            var newNode = origImportNode.call(this, impNode, deep);
            if (impNode instanceof DocumentFragment) {
              newNode.__proto__ = DocumentFragment.prototype;
            }
            return newNode;
          };
        })();
      }
      var capturedCloneNode = Node.prototype.cloneNode;
      var capturedCreateElement = Document.prototype.createElement;
      var capturedImportNode = Document.prototype.importNode;
      var capturedRemoveChild = Node.prototype.removeChild;
      var capturedAppendChild = Node.prototype.appendChild;
      var capturedReplaceChild = Node.prototype.replaceChild;
      var capturedParseFromString = DOMParser.prototype.parseFromString;
      var capturedHTMLElementInnerHTML = Object.getOwnPropertyDescriptor(
        window.HTMLElement.prototype,
        "innerHTML"
      ) || {
        /**
         * @this {!HTMLElement}
         * @return {string}
         */
        get: function() {
          return this.innerHTML;
        },
        /**
         * @this {!HTMLElement}
         * @param {string}
         */
        set: function(text) {
          this.innerHTML = text;
        }
      };
      var capturedChildNodes = Object.getOwnPropertyDescriptor(
        window.Node.prototype,
        "childNodes"
      ) || {
        /**
         * @this {!Node}
         * @return {!NodeList}
         */
        get: function() {
          return this.childNodes;
        }
      };
      var elementQuerySelectorAll = Element.prototype.querySelectorAll;
      var docQuerySelectorAll = Document.prototype.querySelectorAll;
      var fragQuerySelectorAll = DocumentFragment.prototype.querySelectorAll;
      var scriptSelector = 'script:not([type]),script[type="application/javascript"],script[type="text/javascript"]';
      function QSA(node, selector) {
        if (!node.childNodes.length) {
          return [];
        }
        switch (node.nodeType) {
          case Node.DOCUMENT_NODE:
            return docQuerySelectorAll.call(node, selector);
          case Node.DOCUMENT_FRAGMENT_NODE:
            return fragQuerySelectorAll.call(node, selector);
          default:
            return elementQuerySelectorAll.call(node, selector);
        }
      }
      var needsCloning = function() {
        if (!needsTemplate) {
          var t = document.createElement("template");
          var t2 = document.createElement("template");
          t2.content.appendChild(document.createElement("div"));
          t.content.appendChild(t2);
          var clone = t.cloneNode(true);
          return clone.content.childNodes.length === 0 || clone.content.firstChild.content.childNodes.length === 0 || brokenDocFragment;
        }
      }();
      var TEMPLATE_TAG = "template";
      var PolyfilledHTMLTemplateElement = function() {
      };
      if (needsTemplate) {
        var contentDoc = document.implementation.createHTMLDocument("template");
        var canDecorate = true;
        var templateStyle = document.createElement("style");
        templateStyle.textContent = TEMPLATE_TAG + "{display:none;}";
        var head = document.head;
        head.insertBefore(templateStyle, head.firstElementChild);
        PolyfilledHTMLTemplateElement.prototype = Object.create(
          HTMLElement.prototype
        );
        var canProtoPatch = !document.createElement("div").hasOwnProperty("innerHTML");
        PolyfilledHTMLTemplateElement.decorate = function(template) {
          if (template.content || template.namespaceURI !== document.documentElement.namespaceURI) {
            return;
          }
          template.content = contentDoc.createDocumentFragment();
          var child;
          while (child = template.firstChild) {
            capturedAppendChild.call(template.content, child);
          }
          if (canProtoPatch) {
            template.__proto__ = PolyfilledHTMLTemplateElement.prototype;
          } else {
            template.cloneNode = function(deep) {
              return PolyfilledHTMLTemplateElement._cloneNode(this, deep);
            };
            if (canDecorate) {
              try {
                defineInnerHTML(template);
                defineOuterHTML(template);
              } catch (err) {
                canDecorate = false;
              }
            }
          }
          PolyfilledHTMLTemplateElement.bootstrap(template.content);
        };
        var topLevelWrappingMap = {
          "option": ["select"],
          "thead": ["table"],
          "col": ["colgroup", "table"],
          "tr": ["tbody", "table"],
          "th": ["tr", "tbody", "table"],
          "td": ["tr", "tbody", "table"]
        };
        var getTagName = function(text) {
          return (/<([a-z][^/\0>\x20\t\r\n\f]+)/i.exec(text) || [
            "",
            ""
          ])[1].toLowerCase();
        };
        var defineInnerHTML = function defineInnerHTML2(obj) {
          Object.defineProperty(obj, "innerHTML", {
            get: function() {
              return getInnerHTML(this);
            },
            set: function(text) {
              var wrap = topLevelWrappingMap[getTagName(text)];
              if (wrap) {
                for (var i = 0; i < wrap.length; i++) {
                  text = "<" + wrap[i] + ">" + text + "</" + wrap[i] + ">";
                }
              }
              contentDoc.body.innerHTML = text;
              PolyfilledHTMLTemplateElement.bootstrap(contentDoc);
              while (this.content.firstChild) {
                capturedRemoveChild.call(this.content, this.content.firstChild);
              }
              var body = contentDoc.body;
              if (wrap) {
                for (var j = 0; j < wrap.length; j++) {
                  body = body.lastChild;
                }
              }
              while (body.firstChild) {
                capturedAppendChild.call(this.content, body.firstChild);
              }
            },
            configurable: true
          });
        };
        var defineOuterHTML = function defineOuterHTML2(obj) {
          Object.defineProperty(obj, "outerHTML", {
            get: function() {
              return `<${TEMPLATE_TAG}>${this.innerHTML}</${TEMPLATE_TAG}>`;
            },
            set: function(innerHTML) {
              if (this.parentNode) {
                contentDoc.body.innerHTML = innerHTML;
                var docFrag = this.ownerDocument.createDocumentFragment();
                while (contentDoc.body.firstChild) {
                  capturedAppendChild.call(docFrag, contentDoc.body.firstChild);
                }
                capturedReplaceChild.call(this.parentNode, docFrag, this);
              } else {
                throw new Error(
                  "Failed to set the 'outerHTML' property on 'Element': This element has no parent node."
                );
              }
            },
            configurable: true
          });
        };
        defineInnerHTML(PolyfilledHTMLTemplateElement.prototype);
        defineOuterHTML(PolyfilledHTMLTemplateElement.prototype);
        PolyfilledHTMLTemplateElement.bootstrap = function bootstrap(doc) {
          var templates = QSA(doc, TEMPLATE_TAG);
          for (var i = 0, l = templates.length, t; i < l && (t = templates[i]); i++) {
            PolyfilledHTMLTemplateElement.decorate(t);
          }
        };
        document.addEventListener("DOMContentLoaded", function() {
          PolyfilledHTMLTemplateElement.bootstrap(document);
        });
        Document.prototype.createElement = function createElement2() {
          var el = capturedCreateElement.apply(this, arguments);
          if (el.localName === "template") {
            PolyfilledHTMLTemplateElement.decorate(el);
          }
          return el;
        };
        DOMParser.prototype.parseFromString = function() {
          var el = capturedParseFromString.apply(this, arguments);
          PolyfilledHTMLTemplateElement.bootstrap(el);
          return el;
        };
        Object.defineProperty(HTMLElement.prototype, "innerHTML", {
          get: function() {
            return getInnerHTML(this);
          },
          set: function(text) {
            capturedHTMLElementInnerHTML.set.call(this, text);
            PolyfilledHTMLTemplateElement.bootstrap(this);
          },
          configurable: true,
          enumerable: true
        });
        var escapeAttrRegExp = /[&\u00A0"]/g;
        var escapeDataRegExp = /[&\u00A0<>]/g;
        var escapeReplace = function(c) {
          switch (c) {
            case "&":
              return "&amp;";
            case "<":
              return "&lt;";
            case ">":
              return "&gt;";
            case '"':
              return "&quot;";
            case " ":
              return "&nbsp;";
          }
        };
        var escapeAttr = function(s) {
          return s.replace(escapeAttrRegExp, escapeReplace);
        };
        var escapeData = function(s) {
          return s.replace(escapeDataRegExp, escapeReplace);
        };
        var makeSet = function(arr) {
          var set = {};
          for (var i = 0; i < arr.length; i++) {
            set[arr[i]] = true;
          }
          return set;
        };
        var voidElements = makeSet([
          "area",
          "base",
          "br",
          "col",
          "command",
          "embed",
          "hr",
          "img",
          "input",
          "keygen",
          "link",
          "meta",
          "param",
          "source",
          "track",
          "wbr"
        ]);
        var plaintextParents = makeSet([
          "style",
          "script",
          "xmp",
          "iframe",
          "noembed",
          "noframes",
          "plaintext",
          "noscript"
        ]);
        var getOuterHTML = function(node, parentNode, callback) {
          switch (node.nodeType) {
            case Node.ELEMENT_NODE: {
              var tagName = node.localName;
              var s = "<" + tagName;
              var attrs = node.attributes;
              for (var i = 0, attr2; attr2 = attrs[i]; i++) {
                s += " " + attr2.name + '="' + escapeAttr(attr2.value) + '"';
              }
              s += ">";
              if (voidElements[tagName]) {
                return s;
              }
              return s + getInnerHTML(node, callback) + "</" + tagName + ">";
            }
            case Node.TEXT_NODE: {
              var data = (
                /** @type {Text} */
                node.data
              );
              if (parentNode && plaintextParents[parentNode.localName]) {
                return data;
              }
              return escapeData(data);
            }
            case Node.COMMENT_NODE: {
              return "<!--" + /** @type {Comment} */
              node.data + "-->";
            }
            default: {
              window.console.error(node);
              throw new Error("not implemented");
            }
          }
        };
        var getInnerHTML = function(node, callback) {
          if (node.localName === "template") {
            node = /** @type {HTMLTemplateElement} */
            node.content;
          }
          var s = "";
          var c$ = callback ? callback(node) : capturedChildNodes.get.call(node);
          for (var i = 0, l = c$.length, child; i < l && (child = c$[i]); i++) {
            s += getOuterHTML(child, node, callback);
          }
          return s;
        };
      }
      if (needsTemplate || needsCloning) {
        PolyfilledHTMLTemplateElement._cloneNode = function _cloneNode(template, deep) {
          var clone = capturedCloneNode.call(template, false);
          if (this.decorate) {
            this.decorate(clone);
          }
          if (deep) {
            capturedAppendChild.call(
              clone.content,
              capturedCloneNode.call(template.content, true)
            );
            fixClonedDom(clone.content, template.content);
          }
          return clone;
        };
        var fixClonedDom = function fixClonedDom2(clone, source) {
          if (!source.querySelectorAll) {
            return;
          }
          var s$ = QSA(source, TEMPLATE_TAG);
          if (s$.length === 0) {
            return;
          }
          var t$ = QSA(clone, TEMPLATE_TAG);
          for (var i = 0, l = t$.length, t, s; i < l; i++) {
            s = s$[i];
            t = t$[i];
            if (PolyfilledHTMLTemplateElement && PolyfilledHTMLTemplateElement.decorate) {
              PolyfilledHTMLTemplateElement.decorate(s);
            }
            capturedReplaceChild.call(t.parentNode, cloneNode.call(s, true), t);
          }
        };
        var fixClonedScripts = function fixClonedScripts2(fragment) {
          var scripts = QSA(fragment, scriptSelector);
          for (var ns, s, i = 0; i < scripts.length; i++) {
            s = scripts[i];
            ns = capturedCreateElement.call(document, "script");
            ns.textContent = s.textContent;
            var attrs = s.attributes;
            for (var ai = 0, a; ai < attrs.length; ai++) {
              a = attrs[ai];
              ns.setAttribute(a.name, a.value);
            }
            capturedReplaceChild.call(s.parentNode, ns, s);
          }
        };
        var cloneNode = Node.prototype.cloneNode = function cloneNode2(deep) {
          var dom;
          if (!needsDocFrag && brokenDocFragment && this instanceof DocumentFragment) {
            if (!deep) {
              return this.ownerDocument.createDocumentFragment();
            } else {
              dom = importNode.call(this.ownerDocument, this, true);
            }
          } else if (this.nodeType === Node.ELEMENT_NODE && this.localName === TEMPLATE_TAG && this.namespaceURI == document.documentElement.namespaceURI) {
            dom = PolyfilledHTMLTemplateElement._cloneNode(this, deep);
          } else {
            dom = capturedCloneNode.call(this, deep);
          }
          if (deep) {
            fixClonedDom(dom, this);
          }
          return dom;
        };
        var importNode = Document.prototype.importNode = function importNode2(element, deep) {
          deep = deep || false;
          if (element.localName === TEMPLATE_TAG) {
            return PolyfilledHTMLTemplateElement._cloneNode(element, deep);
          } else {
            var dom = capturedImportNode.call(this, element, deep);
            if (deep) {
              fixClonedDom(dom, element);
              fixClonedScripts(dom);
            }
            return dom;
          }
        };
      }
      if (needsTemplate) {
        window.HTMLTemplateElement = PolyfilledHTMLTemplateElement;
      }
    })();
  }
});

// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/MutationObserver.js
var require_MutationObserver = __commonJS({
  "node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/MutationObserver.js"() {
    (function(undefined2) {
      if (!("MutationObserver" in self)) {
        /*!
         * Shim for MutationObserver interface
         * Author: Graeme Yeates (github.com/megawac)
         * Repository: https://github.com/megawac/MutationObserver.js
         * License: WTFPL V2, 2004 (wtfpl.net).
         * Though credit and staring the repo will make me feel pretty, you can modify and redistribute as you please.
         * Attempts to follow spec (https://www.w3.org/TR/dom/#mutation-observers) as closely as possible for native javascript
         * See https://github.com/WebKit/webkit/blob/master/Source/WebCore/dom/MutationObserver.cpp for current webkit source c++ implementation
         */
        if (!window.MutationObserver) {
          window.MutationObserver = function(undefined3) {
            "use strict";
            function MutationObserver2(listener) {
              this._watched = [];
              this._listener = listener;
            }
            function startMutationChecker(observer) {
              (function check() {
                var mutations = observer.takeRecords();
                if (mutations.length) {
                  observer._listener(mutations, observer);
                }
                observer._timeout = setTimeout(check, MutationObserver2._period);
              })();
            }
            MutationObserver2._period = 30;
            MutationObserver2.prototype = {
              /**
               * see https://dom.spec.whatwg.org/#dom-mutationobserver-observe
               * not going to throw here but going to follow the current spec config sets
               * @param {Node|null} $target
               * @param {Object|null} config : MutationObserverInit configuration dictionary
               * @expose
               * @return undefined
               */
              observe: function($target, config) {
                var settings = {
                  attr: !!(config.attributes || config.attributeFilter || config.attributeOldValue),
                  // some browsers enforce that subtree must be set with childList, attributes or characterData.
                  // We don't care as spec doesn't specify this rule.
                  kids: !!config.childList,
                  descendents: !!config.subtree,
                  charData: !!(config.characterData || config.characterDataOldValue)
                };
                var watched = this._watched;
                for (var i = 0; i < watched.length; i++) {
                  if (watched[i].tar === $target) watched.splice(i, 1);
                }
                if (config.attributeFilter) {
                  settings.afilter = reduce(config.attributeFilter, function(a, b) {
                    a[b] = true;
                    return a;
                  }, {});
                }
                watched.push({
                  tar: $target,
                  fn: createMutationSearcher($target, settings)
                });
                if (!this._timeout) {
                  startMutationChecker(this);
                }
              },
              /**
               * Finds mutations since last check and empties the "record queue" i.e. mutations will only be found once
               * @expose
               * @return {Array.<MutationRecord>}
               */
              takeRecords: function() {
                var mutations = [];
                var watched = this._watched;
                for (var i = 0; i < watched.length; i++) {
                  watched[i].fn(mutations);
                }
                return mutations;
              },
              /**
               * @expose
               * @return undefined
               */
              disconnect: function() {
                this._watched = [];
                clearTimeout(this._timeout);
                this._timeout = null;
              }
            };
            function MutationRecord(data) {
              var settings = {
                // technically these should be on proto so hasOwnProperty will return false for non explicitly props
                type: null,
                target: null,
                addedNodes: [],
                removedNodes: [],
                previousSibling: null,
                nextSibling: null,
                attributeName: null,
                attributeNamespace: null,
                oldValue: null
              };
              for (var prop in data) {
                if (has(settings, prop) && data[prop] !== undefined3) settings[prop] = data[prop];
              }
              return settings;
            }
            function createMutationSearcher($target, config) {
              var $oldstate = clone($target, config);
              return function(mutations) {
                var olen = mutations.length, dirty;
                if (config.charData && $target.nodeType === 3 && $target.nodeValue !== $oldstate.charData) {
                  mutations.push(new MutationRecord({
                    type: "characterData",
                    target: $target,
                    oldValue: $oldstate.charData
                  }));
                }
                if (config.attr && $oldstate.attr) {
                  findAttributeMutations(mutations, $target, $oldstate.attr, config.afilter);
                }
                if (config.kids || config.descendents) {
                  dirty = searchSubtree(mutations, $target, $oldstate, config);
                }
                if (dirty || mutations.length !== olen) {
                  $oldstate = clone($target, config);
                }
              };
            }
            var hasAttributeBug = document.createElement("i");
            hasAttributeBug.style.top = 0;
            hasAttributeBug = hasAttributeBug.attributes.style.value != "null";
            function getAttributeSimple(el, attr2) {
              return attr2.value;
            }
            function getAttributeWithStyleHack(el, attr2) {
              return attr2.name !== "style" ? attr2.value : el.style.cssText;
            }
            var getAttributeValue = hasAttributeBug ? getAttributeSimple : getAttributeWithStyleHack;
            function findAttributeMutations(mutations, $target, $oldstate, filter) {
              var checked = {};
              var attributes2 = $target.attributes;
              var attr2;
              var name;
              var i = attributes2.length;
              while (i--) {
                attr2 = attributes2[i];
                name = attr2.name;
                if (!filter || has(filter, name)) {
                  if (getAttributeValue($target, attr2) !== $oldstate[name]) {
                    mutations.push(MutationRecord({
                      type: "attributes",
                      target: $target,
                      attributeName: name,
                      oldValue: $oldstate[name],
                      attributeNamespace: attr2.namespaceURI
                      // in ie<8 it incorrectly will return undefined
                    }));
                  }
                  checked[name] = true;
                }
              }
              for (name in $oldstate) {
                if (!checked[name]) {
                  mutations.push(MutationRecord({
                    target: $target,
                    type: "attributes",
                    attributeName: name,
                    oldValue: $oldstate[name]
                  }));
                }
              }
            }
            function searchSubtree(mutations, $target, $oldstate, config) {
              var dirty;
              function resolveConflicts(conflicts, node, $kids, $oldkids, numAddedNodes) {
                var distance = conflicts.length - 1;
                var counter2 = -~((distance - numAddedNodes) / 2);
                var $cur;
                var oldstruct;
                var conflict;
                while (conflict = conflicts.pop()) {
                  $cur = $kids[conflict.i];
                  oldstruct = $oldkids[conflict.j];
                  if (config.kids && counter2 && Math.abs(conflict.i - conflict.j) >= distance) {
                    mutations.push(MutationRecord({
                      type: "childList",
                      target: node,
                      addedNodes: [$cur],
                      removedNodes: [$cur],
                      // haha don't rely on this please
                      nextSibling: $cur.nextSibling,
                      previousSibling: $cur.previousSibling
                    }));
                    counter2--;
                  }
                  if (config.attr && oldstruct.attr) findAttributeMutations(mutations, $cur, oldstruct.attr, config.afilter);
                  if (config.charData && $cur.nodeType === 3 && $cur.nodeValue !== oldstruct.charData) {
                    mutations.push(MutationRecord({
                      type: "characterData",
                      target: $cur,
                      oldValue: oldstruct.charData
                    }));
                  }
                  if (config.descendents) findMutations($cur, oldstruct);
                }
              }
              function findMutations(node, old) {
                var $kids = node.childNodes;
                var $oldkids = old.kids;
                var klen = $kids.length;
                var olen = $oldkids ? $oldkids.length : 0;
                var map2;
                var conflicts;
                var id;
                var idx;
                var oldstruct;
                var $cur;
                var $old;
                var numAddedNodes = 0;
                var i = 0, j = 0;
                while (i < klen || j < olen) {
                  $cur = $kids[i];
                  oldstruct = $oldkids[j];
                  $old = oldstruct && oldstruct.node;
                  if ($cur === $old) {
                    if (config.attr && oldstruct.attr) findAttributeMutations(mutations, $cur, oldstruct.attr, config.afilter);
                    if (config.charData && oldstruct.charData !== undefined3 && $cur.nodeValue !== oldstruct.charData) {
                      mutations.push(MutationRecord({
                        type: "characterData",
                        target: $cur,
                        oldValue: oldstruct.charData
                      }));
                    }
                    if (conflicts) resolveConflicts(conflicts, node, $kids, $oldkids, numAddedNodes);
                    if (config.descendents && ($cur.childNodes.length || oldstruct.kids && oldstruct.kids.length)) findMutations($cur, oldstruct);
                    i++;
                    j++;
                  } else {
                    dirty = true;
                    if (!map2) {
                      map2 = {};
                      conflicts = [];
                    }
                    if ($cur) {
                      if (!map2[id = getElementId($cur)]) {
                        map2[id] = true;
                        if ((idx = indexOfCustomNode($oldkids, $cur, j)) === -1) {
                          if (config.kids) {
                            mutations.push(MutationRecord({
                              type: "childList",
                              target: node,
                              addedNodes: [$cur],
                              // $cur is a new node
                              nextSibling: $cur.nextSibling,
                              previousSibling: $cur.previousSibling
                            }));
                            numAddedNodes++;
                          }
                        } else {
                          conflicts.push({
                            // add conflict
                            i,
                            j: idx
                          });
                        }
                      }
                      i++;
                    }
                    if ($old && // special case: the changes may have been resolved: i and j appear congurent so we can continue using the expected case
                    $old !== $kids[i]) {
                      if (!map2[id = getElementId($old)]) {
                        map2[id] = true;
                        if ((idx = indexOf($kids, $old, i)) === -1) {
                          if (config.kids) {
                            mutations.push(MutationRecord({
                              type: "childList",
                              target: old.node,
                              removedNodes: [$old],
                              nextSibling: $oldkids[j + 1],
                              // praise no indexoutofbounds exception
                              previousSibling: $oldkids[j - 1]
                            }));
                            numAddedNodes--;
                          }
                        } else {
                          conflicts.push({
                            i: idx,
                            j
                          });
                        }
                      }
                      j++;
                    }
                  }
                }
                if (conflicts) resolveConflicts(conflicts, node, $kids, $oldkids, numAddedNodes);
              }
              findMutations($target, $oldstate);
              return dirty;
            }
            function clone($target, config) {
              var recurse = true;
              return function copy($target2) {
                var elestruct = {
                  /** @type {Node} */
                  node: $target2
                };
                if (config.charData && ($target2.nodeType === 3 || $target2.nodeType === 8)) {
                  elestruct.charData = $target2.nodeValue;
                } else {
                  if (config.attr && recurse && $target2.nodeType === 1) {
                    elestruct.attr = reduce($target2.attributes, function(memo2, attr2) {
                      if (!config.afilter || config.afilter[attr2.name]) {
                        memo2[attr2.name] = getAttributeValue($target2, attr2);
                      }
                      return memo2;
                    }, {});
                  }
                  if (recurse && (config.kids || config.charData || config.attr && config.descendents)) {
                    elestruct.kids = map($target2.childNodes, copy);
                  }
                  recurse = config.descendents;
                }
                return elestruct;
              }($target);
            }
            function indexOfCustomNode(set, $node, idx) {
              return indexOf(set, $node, idx, JSCompiler_renameProperty("node"));
            }
            var counter = 1;
            var expando = "mo_id";
            function getElementId($ele) {
              try {
                return $ele.id || ($ele[expando] = $ele[expando] || counter++);
              } catch (o_O) {
                try {
                  return $ele.nodeValue;
                } catch (shitie) {
                  return counter++;
                }
              }
            }
            function map(set, iterator) {
              var results = [];
              for (var index = 0; index < set.length; index++) {
                results[index] = iterator(set[index], index, set);
              }
              return results;
            }
            function reduce(set, iterator, memo2) {
              for (var index = 0; index < set.length; index++) {
                memo2 = iterator(memo2, set[index], index, set);
              }
              return memo2;
            }
            function indexOf(set, item, idx, prop) {
              for (; idx < set.length; idx++) {
                if ((prop ? set[idx][prop] : set[idx]) === item) return idx;
              }
              return -1;
            }
            function has(obj, prop) {
              return obj[prop] !== undefined3;
            }
            function JSCompiler_renameProperty(a) {
              return a;
            }
            return MutationObserver2;
          }(void 0);
        }
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/Node.prototype.contains.js
var require_Node_prototype_contains = __commonJS({
  "node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/Node.prototype.contains.js"() {
    (function(undefined2) {
      if (!document.contains) {
        (function() {
          function contains(node) {
            if (!(0 in arguments)) {
              throw new TypeError("1 argument is required");
            }
            do {
              if (this === node) {
                return true;
              }
            } while (node = node && node.parentNode);
            return false;
          }
          if ("HTMLElement" in self && "contains" in HTMLElement.prototype) {
            try {
              delete HTMLElement.prototype.contains;
            } catch (e) {
            }
          }
          if ("Node" in self) {
            Node.prototype.contains = contains;
          } else {
            document.contains = Element.prototype.contains = contains;
          }
        })();
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/~shadydom.js
var require_shadydom = __commonJS({
  "node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/~shadydom.js"(exports2) {
    (function() {
      try {
        window["ShadyDOM"] = window["ShadyDOM"] || {};
        window["ShadyDOM"]["querySelectorImplementation"] = window["ShadyDOM"]["querySelectorImplementation"] || "native";
      } catch (err) {
      }
    })();
    (function() {
      "use strict";
      var n;
      function aa(a) {
        var b = 0;
        return function() {
          return b < a.length ? { done: false, value: a[b++] } : { done: true };
        };
      }
      function p(a) {
        var b = "undefined" != typeof Symbol && Symbol.iterator && a[Symbol.iterator];
        return b ? b.call(a) : { next: aa(a) };
      }
      function q(a) {
        if (!(a instanceof Array)) {
          a = p(a);
          for (var b, c = []; !(b = a.next()).done; ) c.push(b.value);
          a = c;
        }
        return a;
      }
      function ba(a) {
        a = ["object" == typeof globalThis && globalThis, a, "object" == typeof window && window, "object" == typeof self && self, "object" == typeof global && global];
        for (var b = 0; b < a.length; ++b) {
          var c = a[b];
          if (c && c.Math == Math) return c;
        }
        throw Error("Cannot find global object");
      }
      var ca = ba(this);
      function da() {
      }
      da.prototype.toJSON = function() {
        return {};
      };
      function t(a) {
        a.__shady || (a.__shady = new da());
        return a.__shady;
      }
      function u(a) {
        return a && a.__shady;
      }
      ;
      var v = window.ShadyDOM || {};
      v.da = !(!Element.prototype.attachShadow || !Node.prototype.getRootNode);
      var ea = Object.getOwnPropertyDescriptor(Node.prototype, "firstChild");
      v.i = !!(ea && ea.configurable && ea.get);
      v.N = v.force || !v.da;
      v.l = v.noPatch || false;
      v.C = v.preferPerformance;
      v.O = "on-demand" === v.l;
      var fa;
      var ha = v.querySelectorImplementation;
      fa = -1 < ["native", "selectorEngine"].indexOf(ha) ? ha : void 0;
      v.ga = fa;
      v.V = navigator.userAgent.match("Trident");
      function ia() {
        return Document.prototype.msElementsFromPoint ? "msElementsFromPoint" : "elementsFromPoint";
      }
      function w(a) {
        return (a = u(a)) && void 0 !== a.firstChild;
      }
      function x(a) {
        return a instanceof ShadowRoot;
      }
      function ja(a) {
        return (a = (a = u(a)) && a.root) && ka(a);
      }
      var y = Element.prototype, la = y.matches || y.matchesSelector || y.mozMatchesSelector || y.msMatchesSelector || y.oMatchesSelector || y.webkitMatchesSelector, ma = document.createTextNode(""), na = 0, oa = [];
      new MutationObserver(function() {
        for (; oa.length; ) try {
          oa.shift()();
        } catch (a) {
          throw ma.textContent = na++, a;
        }
      }).observe(ma, { characterData: true });
      function pa(a) {
        oa.push(a);
        ma.textContent = na++;
      }
      var qa = document.contains ? function(a, b) {
        return a.__shady_native_contains(b);
      } : function(a, b) {
        return a === b || a.documentElement && a.documentElement.__shady_native_contains(b);
      };
      function ra(a, b) {
        for (; b; ) {
          if (b == a) return true;
          b = b.__shady_parentNode;
        }
        return false;
      }
      function z(a) {
        for (var b = a.length - 1; 0 <= b; b--) {
          var c = a[b], d = c.getAttribute("id") || c.getAttribute("name");
          d && "length" !== d && isNaN(d) && (a[d] = c);
        }
        a.item = function(e) {
          return a[e];
        };
        a.namedItem = function(e) {
          if ("length" !== e && isNaN(e) && a[e]) return a[e];
          for (var f = p(a), g = f.next(); !g.done; g = f.next()) if (g = g.value, (g.getAttribute("id") || g.getAttribute("name")) == e) return g;
          return null;
        };
        return a;
      }
      function sa(a) {
        var b = [];
        for (a = a.__shady_native_firstChild; a; a = a.__shady_native_nextSibling) b.push(a);
        return b;
      }
      function ta(a) {
        var b = [];
        for (a = a.__shady_firstChild; a; a = a.__shady_nextSibling) b.push(a);
        return b;
      }
      function ua(a, b, c) {
        c.configurable = true;
        if (c.value) a[b] = c.value;
        else try {
          Object.defineProperty(a, b, c);
        } catch (d) {
        }
      }
      function A(a, b, c, d) {
        c = void 0 === c ? "" : c;
        for (var e in b) d && 0 <= d.indexOf(e) || ua(a, c + e, b[e]);
      }
      function va(a, b) {
        for (var c in b) c in a && ua(a, c, b[c]);
      }
      function B(a) {
        var b = {};
        Object.getOwnPropertyNames(a).forEach(function(c) {
          b[c] = Object.getOwnPropertyDescriptor(a, c);
        });
        return b;
      }
      function wa(a, b) {
        for (var c = Object.getOwnPropertyNames(b), d = 0, e; d < c.length; d++) e = c[d], a[e] = b[e];
      }
      function xa(a) {
        return a instanceof Node ? a : document.createTextNode("" + a);
      }
      function D(a) {
        for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
        if (1 === b.length) return xa(b[0]);
        c = document.createDocumentFragment();
        b = p(b);
        for (var d = b.next(); !d.done; d = b.next()) c.appendChild(xa(d.value));
        return c;
      }
      function ya(a) {
        var b;
        for (b = void 0 === b ? 1 : b; 0 < b; b--) a = a.reduce(function(c, d) {
          Array.isArray(d) ? c.push.apply(c, q(d)) : c.push(d);
          return c;
        }, []);
        return a;
      }
      function za(a) {
        var b = [], c = /* @__PURE__ */ new Set();
        a = p(a);
        for (var d = a.next(); !d.done; d = a.next()) d = d.value, c.has(d) || (b.push(d), c.add(d));
        return b;
      }
      ;
      var E = [], Aa;
      function Ba(a) {
        Aa || (Aa = true, pa(F));
        E.push(a);
      }
      function F() {
        Aa = false;
        for (var a = !!E.length; E.length; ) E.shift()();
        return a;
      }
      F.list = E;
      function Ca() {
        this.g = false;
        this.addedNodes = [];
        this.removedNodes = [];
        this.H = /* @__PURE__ */ new Set();
      }
      function Da(a) {
        a.g || (a.g = true, pa(function() {
          a.flush();
        }));
      }
      Ca.prototype.flush = function() {
        if (this.g) {
          this.g = false;
          var a = this.takeRecords();
          a.length && this.H.forEach(function(b) {
            b(a);
          });
        }
      };
      Ca.prototype.takeRecords = function() {
        if (this.addedNodes.length || this.removedNodes.length) {
          var a = [{ addedNodes: this.addedNodes, removedNodes: this.removedNodes }];
          this.addedNodes = [];
          this.removedNodes = [];
          return a;
        }
        return [];
      };
      function Ea(a, b) {
        var c = t(a);
        c.B || (c.B = new Ca());
        c.B.H.add(b);
        var d = c.B;
        return { Z: b, ba: d, aa: a, takeRecords: function() {
          return d.takeRecords();
        } };
      }
      function Fa(a) {
        var b = a && a.ba;
        b && (b.H.delete(a.Z), b.H.size || (t(a.aa).B = null));
      }
      function Ga(a, b) {
        var c = b.getRootNode();
        return a.map(function(d) {
          var e = c === d.target.getRootNode();
          if (e && d.addedNodes) {
            if (e = [].slice.call(d.addedNodes).filter(function(f) {
              return c === f.getRootNode();
            }), e.length) return d = Object.create(d), Object.defineProperty(d, "addedNodes", { value: e, configurable: true }), d;
          } else if (e) return d;
        }).filter(function(d) {
          return d;
        });
      }
      ;
      var Ha = /[&\u00A0"]/g, Ia = /[&\u00A0<>]/g;
      function Ja(a) {
        switch (a) {
          case "&":
            return "&amp;";
          case "<":
            return "&lt;";
          case ">":
            return "&gt;";
          case '"':
            return "&quot;";
          case " ":
            return "&nbsp;";
        }
      }
      function Ka(a) {
        for (var b = {}, c = 0; c < a.length; c++) b[a[c]] = true;
        return b;
      }
      var La = Ka("area base br col command embed hr img input keygen link meta param source track wbr".split(" ")), Ma = Ka("style script xmp iframe noembed noframes plaintext noscript".split(" "));
      function Na(a, b) {
        "template" === a.localName && (a = a.content);
        for (var c = "", d = b ? b(a) : a.childNodes, e = 0, f = d.length, g = void 0; e < f && (g = d[e]); e++) {
          a: {
            var h2 = g;
            var k = a, l = b;
            switch (h2.nodeType) {
              case Node.ELEMENT_NODE:
                k = h2.localName;
                for (var m = "<" + k, r = h2.attributes, C = 0, S; S = r[C]; C++) m += " " + S.name + '="' + S.value.replace(Ha, Ja) + '"';
                m += ">";
                h2 = La[k] ? m : m + Na(h2, l) + "</" + k + ">";
                break a;
              case Node.TEXT_NODE:
                h2 = h2.data;
                h2 = k && Ma[k.localName] ? h2 : h2.replace(Ia, Ja);
                break a;
              case Node.COMMENT_NODE:
                h2 = "<!--" + h2.data + "-->";
                break a;
              default:
                throw window.console.error(h2), Error("not implemented");
            }
          }
          c += h2;
        }
        return c;
      }
      ;
      var G = v.i, Oa = { querySelector: function(a) {
        return this.__shady_native_querySelector(a);
      }, querySelectorAll: function(a) {
        return this.__shady_native_querySelectorAll(a);
      } }, Pa = {};
      function Qa(a) {
        Pa[a] = function(b) {
          return b["__shady_native_" + a];
        };
      }
      function H(a, b) {
        A(a, b, "__shady_native_");
        for (var c in b) Qa(c);
      }
      function I(a, b) {
        b = void 0 === b ? [] : b;
        for (var c = 0; c < b.length; c++) {
          var d = b[c], e = Object.getOwnPropertyDescriptor(a, d);
          e && (Object.defineProperty(a, "__shady_native_" + d, e), e.value ? Oa[d] || (Oa[d] = e.value) : Qa(d));
        }
      }
      var J = document.createTreeWalker(document, NodeFilter.SHOW_ALL, null, false), K = document.createTreeWalker(document, NodeFilter.SHOW_ELEMENT, null, false), Ra = document.implementation.createHTMLDocument("inert");
      function Sa(a) {
        for (var b; b = a.__shady_native_firstChild; ) a.__shady_native_removeChild(b);
      }
      var Ta = ["firstElementChild", "lastElementChild", "children", "childElementCount"], Ua = ["querySelector", "querySelectorAll", "append", "prepend", "replaceChildren"];
      function Va() {
        var a = ["dispatchEvent", "addEventListener", "removeEventListener"];
        window.EventTarget ? (I(window.EventTarget.prototype, a), void 0 === window.__shady_native_addEventListener && I(Window.prototype, a)) : (I(Node.prototype, a), I(Window.prototype, a), I(XMLHttpRequest.prototype, a));
        G ? I(Node.prototype, "parentNode firstChild lastChild previousSibling nextSibling childNodes parentElement textContent".split(" ")) : H(Node.prototype, { parentNode: { get: function() {
          J.currentNode = this;
          return J.parentNode();
        } }, firstChild: { get: function() {
          J.currentNode = this;
          return J.firstChild();
        } }, lastChild: { get: function() {
          J.currentNode = this;
          return J.lastChild();
        } }, previousSibling: { get: function() {
          J.currentNode = this;
          return J.previousSibling();
        } }, nextSibling: { get: function() {
          J.currentNode = this;
          return J.nextSibling();
        } }, childNodes: { get: function() {
          var b = [];
          J.currentNode = this;
          for (var c = J.firstChild(); c; ) b.push(c), c = J.nextSibling();
          return b;
        } }, parentElement: { get: function() {
          K.currentNode = this;
          return K.parentNode();
        } }, textContent: { get: function() {
          switch (this.nodeType) {
            case Node.ELEMENT_NODE:
            case Node.DOCUMENT_FRAGMENT_NODE:
              for (var b = document.createTreeWalker(this, NodeFilter.SHOW_TEXT, null, false), c = "", d; d = b.nextNode(); ) c += d.nodeValue;
              return c;
            default:
              return this.nodeValue;
          }
        }, set: function(b) {
          if ("undefined" === typeof b || null === b) b = "";
          switch (this.nodeType) {
            case Node.ELEMENT_NODE:
            case Node.DOCUMENT_FRAGMENT_NODE:
              Sa(this);
              (0 < b.length || this.nodeType === Node.ELEMENT_NODE) && this.__shady_native_insertBefore(document.createTextNode(b), void 0);
              break;
            default:
              this.nodeValue = b;
          }
        } } });
        I(Node.prototype, "appendChild insertBefore removeChild replaceChild cloneNode contains".split(" "));
        I(HTMLElement.prototype, ["parentElement", "contains"]);
        a = { firstElementChild: { get: function() {
          K.currentNode = this;
          return K.firstChild();
        } }, lastElementChild: { get: function() {
          K.currentNode = this;
          return K.lastChild();
        } }, children: { get: function() {
          var b = [];
          K.currentNode = this;
          for (var c = K.firstChild(); c; ) b.push(c), c = K.nextSibling();
          return z(b);
        } }, childElementCount: { get: function() {
          return this.children ? this.children.length : 0;
        } } };
        G ? (I(Element.prototype, Ta), I(Element.prototype, [
          "previousElementSibling",
          "nextElementSibling",
          "innerHTML",
          "className"
        ]), I(HTMLElement.prototype, ["children", "innerHTML", "className"])) : (H(Element.prototype, a), H(Element.prototype, { previousElementSibling: { get: function() {
          K.currentNode = this;
          return K.previousSibling();
        } }, nextElementSibling: { get: function() {
          K.currentNode = this;
          return K.nextSibling();
        } }, innerHTML: { get: function() {
          return Na(this, sa);
        }, set: function(b) {
          var c = "template" === this.localName ? this.content : this;
          Sa(c);
          var d = this.localName || "div";
          d = this.namespaceURI && this.namespaceURI !== Ra.namespaceURI ? Ra.createElementNS(this.namespaceURI, d) : Ra.createElement(d);
          d.innerHTML = b;
          for (b = "template" === this.localName ? d.content : d; d = b.__shady_native_firstChild; ) c.__shady_native_insertBefore(d, void 0);
        } }, className: { get: function() {
          return this.getAttribute("class") || "";
        }, set: function(b) {
          this.setAttribute("class", b);
        } } }));
        I(Element.prototype, "setAttribute getAttribute hasAttribute removeAttribute toggleAttribute focus blur".split(" "));
        I(Element.prototype, Ua);
        I(HTMLElement.prototype, ["focus", "blur"]);
        window.HTMLTemplateElement && I(window.HTMLTemplateElement.prototype, ["innerHTML"]);
        G ? I(DocumentFragment.prototype, Ta) : H(DocumentFragment.prototype, a);
        I(DocumentFragment.prototype, Ua);
        G ? (I(Document.prototype, Ta), I(Document.prototype, ["activeElement"])) : H(Document.prototype, a);
        I(Document.prototype, ["importNode", "getElementById", "elementFromPoint", ia()]);
        I(Document.prototype, Ua);
      }
      ;
      var Wa = B({ get childNodes() {
        return this.__shady_childNodes;
      }, get firstChild() {
        return this.__shady_firstChild;
      }, get lastChild() {
        return this.__shady_lastChild;
      }, get childElementCount() {
        return this.__shady_childElementCount;
      }, get children() {
        return this.__shady_children;
      }, get firstElementChild() {
        return this.__shady_firstElementChild;
      }, get lastElementChild() {
        return this.__shady_lastElementChild;
      }, get shadowRoot() {
        return this.__shady_shadowRoot;
      } }), Xa = B({ get textContent() {
        return this.__shady_textContent;
      }, set textContent(a) {
        this.__shady_textContent = a;
      }, get innerHTML() {
        return this.__shady_innerHTML;
      }, set innerHTML(a) {
        this.__shady_innerHTML = a;
      } }), Ya = B({ get parentElement() {
        return this.__shady_parentElement;
      }, get parentNode() {
        return this.__shady_parentNode;
      }, get nextSibling() {
        return this.__shady_nextSibling;
      }, get previousSibling() {
        return this.__shady_previousSibling;
      }, get nextElementSibling() {
        return this.__shady_nextElementSibling;
      }, get previousElementSibling() {
        return this.__shady_previousElementSibling;
      }, get className() {
        return this.__shady_className;
      }, set className(a) {
        this.__shady_className = a;
      } });
      function Za(a) {
        for (var b in a) {
          var c = a[b];
          c && (c.enumerable = false);
        }
      }
      Za(Wa);
      Za(Xa);
      Za(Ya);
      var $a = v.i || true === v.l, ab = $a ? function() {
      } : function(a) {
        var b = t(a);
        b.X || (b.X = true, va(a, Ya));
      }, bb = $a ? function() {
      } : function(a) {
        var b = t(a);
        b.W || (b.W = true, va(a, Wa), window.customElements && window.customElements.polyfillWrapFlushCallback && !v.l || va(a, Xa));
      };
      var L = "__eventWrappers" + Date.now(), cb = function() {
        var a = Object.getOwnPropertyDescriptor(Event.prototype, "composed");
        return a ? function(b) {
          return a.get.call(b);
        } : null;
      }(), db = function() {
        function a() {
        }
        var b = false, c = { get capture() {
          b = true;
          return false;
        } };
        window.addEventListener("test", a, c);
        window.removeEventListener("test", a, c);
        return b;
      }();
      function eb(a) {
        if (null === a || "object" !== typeof a && "function" !== typeof a) {
          var b = !!a;
          var c = false;
        } else {
          b = !!a.capture;
          c = !!a.once;
          var d = a.o;
        }
        return { U: d, capture: b, once: c, T: db ? a : b };
      }
      var fb = {
        blur: true,
        focus: true,
        focusin: true,
        focusout: true,
        click: true,
        dblclick: true,
        mousedown: true,
        mouseenter: true,
        mouseleave: true,
        mousemove: true,
        mouseout: true,
        mouseover: true,
        mouseup: true,
        wheel: true,
        beforeinput: true,
        input: true,
        keydown: true,
        keyup: true,
        compositionstart: true,
        compositionupdate: true,
        compositionend: true,
        touchstart: true,
        touchend: true,
        touchmove: true,
        touchcancel: true,
        pointerover: true,
        pointerenter: true,
        pointerdown: true,
        pointermove: true,
        pointerup: true,
        pointercancel: true,
        pointerout: true,
        pointerleave: true,
        gotpointercapture: true,
        lostpointercapture: true,
        dragstart: true,
        drag: true,
        dragenter: true,
        dragleave: true,
        dragover: true,
        drop: true,
        dragend: true,
        DOMActivate: true,
        DOMFocusIn: true,
        DOMFocusOut: true,
        keypress: true
      }, gb = { DOMAttrModified: true, DOMAttributeNameChanged: true, DOMCharacterDataModified: true, DOMElementNameChanged: true, DOMNodeInserted: true, DOMNodeInsertedIntoDocument: true, DOMNodeRemoved: true, DOMNodeRemovedFromDocument: true, DOMSubtreeModified: true };
      function hb(a) {
        return a instanceof Node ? a.__shady_getRootNode() : a;
      }
      function M(a, b) {
        var c = [], d = a;
        for (a = hb(a); d; ) c.push(d), d = d.__shady_assignedSlot ? d.__shady_assignedSlot : d.nodeType === Node.DOCUMENT_FRAGMENT_NODE && d.host && (b || d !== a) ? d.host : d.__shady_parentNode;
        c[c.length - 1] === document && c.push(window);
        return c;
      }
      function ib(a) {
        a.__composedPath || (a.__composedPath = M(a.target, true));
        return a.__composedPath;
      }
      function jb(a, b) {
        if (!x) return a;
        a = M(a, true);
        for (var c = 0, d, e = void 0, f, g = void 0; c < b.length; c++) if (d = b[c], f = hb(d), f !== e && (g = a.indexOf(f), e = f), !x(f) || -1 < g) return d;
      }
      var kb = { get composed() {
        void 0 === this.__composed && (cb ? this.__composed = "focusin" === this.type || "focusout" === this.type || cb(this) : false !== this.isTrusted && (this.__composed = fb[this.type]));
        return this.__composed || false;
      }, composedPath: function() {
        this.__composedPath || (this.__composedPath = M(this.__target, this.composed));
        return this.__composedPath;
      }, get target() {
        return jb(this.currentTarget || this.__previousCurrentTarget, this.composedPath());
      }, get relatedTarget() {
        if (!this.__relatedTarget) return null;
        this.__relatedTargetComposedPath || (this.__relatedTargetComposedPath = M(this.__relatedTarget, true));
        return jb(this.currentTarget || this.__previousCurrentTarget, this.__relatedTargetComposedPath);
      }, stopPropagation: function() {
        Event.prototype.stopPropagation.call(this);
        this.K = true;
      }, stopImmediatePropagation: function() {
        Event.prototype.stopImmediatePropagation.call(this);
        this.K = this.__immediatePropagationStopped = true;
      } }, lb = v.i && Object.getOwnPropertyDescriptor(Event.prototype, "eventPhase");
      lb && (Object.defineProperty(kb, "eventPhase", { get: function() {
        return this.currentTarget === this.target ? Event.AT_TARGET : this.__shady_native_eventPhase;
      }, enumerable: true, configurable: true }), Object.defineProperty(kb, "__shady_native_eventPhase", lb));
      function mb(a) {
        function b(c, d) {
          c = new a(c, d);
          c.__composed = d && !!d.composed;
          return c;
        }
        b.__proto__ = a;
        b.prototype = a.prototype;
        return b;
      }
      var nb = { focus: true, blur: true };
      function ob(a) {
        return a.__target !== a.target || a.__relatedTarget !== a.relatedTarget;
      }
      function pb(a, b, c) {
        if (c = b.__handlers && b.__handlers[a.type] && b.__handlers[a.type][c]) for (var d = 0, e; (e = c[d]) && (!ob(a) || a.target !== a.relatedTarget) && (e.call(b, a), !a.__immediatePropagationStopped); d++) ;
      }
      var qb = new Event("e").hasOwnProperty("currentTarget");
      function rb(a) {
        a = qb ? Object.create(a) : a;
        var b = a.composedPath(), c = b.map(function(m) {
          return jb(m, b);
        }), d = a.bubbles, e = Object.getOwnPropertyDescriptor(a, "currentTarget");
        Object.defineProperty(a, "currentTarget", { configurable: true, enumerable: true, get: function() {
          return k;
        } });
        var f = Event.CAPTURING_PHASE, g = Object.getOwnPropertyDescriptor(a, "eventPhase");
        Object.defineProperty(a, "eventPhase", { configurable: true, enumerable: true, get: function() {
          return f;
        } });
        try {
          for (var h2 = b.length - 1; 0 <= h2; h2--) {
            var k = b[h2];
            f = k === c[h2] ? Event.AT_TARGET : Event.CAPTURING_PHASE;
            pb(a, k, "capture");
            if (a.K) return;
          }
          for (h2 = 0; h2 < b.length; h2++) {
            k = b[h2];
            var l = k === c[h2];
            if (l || d) {
              if (f = l ? Event.AT_TARGET : Event.BUBBLING_PHASE, pb(a, k, "bubble"), a.K) break;
            }
          }
        } finally {
          qb || (e ? Object.defineProperty(a, "currentTarget", e) : delete a.currentTarget, g ? Object.defineProperty(a, "eventPhase", g) : delete a.eventPhase);
        }
      }
      function sb(a, b, c, d) {
        for (var e = 0; e < a.length; e++) {
          var f = a[e], g = f.type, h2 = f.capture;
          if (b === f.node && c === g && d === h2) return e;
        }
        return -1;
      }
      function tb(a) {
        F();
        return !v.C && this instanceof Node && !qa(document, this) ? (a.__target || ub(a, this), rb(a)) : this.__shady_native_dispatchEvent(a);
      }
      function vb(a, b, c) {
        var d = this, e = eb(c), f = e.capture, g = e.once, h2 = e.U;
        e = e.T;
        if (b) {
          var k = typeof b;
          if ("function" === k || "object" === k) {
            if ("object" !== k || b.handleEvent && "function" === typeof b.handleEvent) {
              if (gb[a]) return this.__shady_native_addEventListener(a, b, e);
              var l = h2 || this;
              if (h2 = b[L]) {
                if (-1 < sb(h2, l, a, f)) return;
              } else b[L] = [];
              h2 = function(m) {
                g && d.__shady_removeEventListener(a, b, c);
                m.__target || ub(m);
                if (l !== d) {
                  var r = Object.getOwnPropertyDescriptor(m, "currentTarget");
                  Object.defineProperty(m, "currentTarget", {
                    get: function() {
                      return l;
                    },
                    configurable: true
                  });
                  var C = Object.getOwnPropertyDescriptor(m, "eventPhase");
                  Object.defineProperty(m, "eventPhase", { configurable: true, enumerable: true, get: function() {
                    return f ? Event.CAPTURING_PHASE : Event.BUBBLING_PHASE;
                  } });
                }
                m.__previousCurrentTarget = m.currentTarget;
                if (!x(l) && "slot" !== l.localName || -1 != m.composedPath().indexOf(l)) {
                  if (m.composed || -1 < m.composedPath().indexOf(l)) {
                    if (ob(m) && m.target === m.relatedTarget) m.eventPhase === Event.BUBBLING_PHASE && m.stopImmediatePropagation();
                    else if (m.eventPhase === Event.CAPTURING_PHASE || m.bubbles || m.target === l || l instanceof Window) {
                      var S = "function" === k ? b.call(l, m) : b.handleEvent && b.handleEvent(m);
                      l !== d && (r ? (Object.defineProperty(m, "currentTarget", r), r = null) : delete m.currentTarget, C ? (Object.defineProperty(m, "eventPhase", C), C = null) : delete m.eventPhase);
                      return S;
                    }
                  }
                }
              };
              b[L].push({ node: l, type: a, capture: f, fa: h2 });
              this.__handlers = this.__handlers || {};
              this.__handlers[a] = this.__handlers[a] || { capture: [], bubble: [] };
              this.__handlers[a][f ? "capture" : "bubble"].push(h2);
              nb[a] || this.__shady_native_addEventListener(
                a,
                h2,
                e
              );
            }
          }
        }
      }
      function wb(a, b, c) {
        if (b) {
          var d = eb(c);
          c = d.capture;
          var e = d.U;
          d = d.T;
          if (gb[a]) return this.__shady_native_removeEventListener(a, b, d);
          var f = e || this;
          e = void 0;
          var g = null;
          try {
            g = b[L];
          } catch (h2) {
          }
          g && (f = sb(g, f, a, c), -1 < f && (e = g.splice(f, 1)[0].fa, g.length || (b[L] = void 0)));
          this.__shady_native_removeEventListener(a, e || b, d);
          e && this.__handlers && this.__handlers[a] && (a = this.__handlers[a][c ? "capture" : "bubble"], b = a.indexOf(e), -1 < b && a.splice(b, 1));
        }
      }
      function xb() {
        for (var a in nb) window.__shady_native_addEventListener(a, function(b) {
          b.__target || (ub(b), rb(b));
        }, true);
      }
      var yb = B(kb);
      function ub(a, b) {
        b = void 0 === b ? a.target : b;
        a.__target = b;
        a.__relatedTarget = a.relatedTarget;
        if (v.i) {
          b = Object.getPrototypeOf(a);
          if (!b.hasOwnProperty("__shady_patchedProto")) {
            var c = Object.create(b);
            c.__shady_sourceProto = b;
            A(c, yb);
            b.__shady_patchedProto = c;
          }
          a.__proto__ = b.__shady_patchedProto;
        } else A(a, yb);
      }
      var zb = mb(Event), Ab = mb(CustomEvent), Bb = mb(MouseEvent);
      function Cb() {
        if (!cb && Object.getOwnPropertyDescriptor(Event.prototype, "isTrusted")) {
          var a = function() {
            var b = new MouseEvent("click", { bubbles: true, cancelable: true, composed: true });
            this.__shady_dispatchEvent(b);
          };
          Element.prototype.click ? Element.prototype.click = a : HTMLElement.prototype.click && (HTMLElement.prototype.click = a);
        }
      }
      var Db = Object.getOwnPropertyNames(Element.prototype).filter(function(a) {
        return "on" === a.substring(0, 2);
      }), Eb = Object.getOwnPropertyNames(HTMLElement.prototype).filter(function(a) {
        return "on" === a.substring(0, 2);
      });
      function Fb(a) {
        return { set: function(b) {
          var c = t(this), d = a.substring(2);
          c.m || (c.m = {});
          c.m[a] && this.removeEventListener(d, c.m[a]);
          this.__shady_addEventListener(d, b);
          c.m[a] = b;
        }, get: function() {
          var b = u(this);
          return b && b.m && b.m[a];
        }, configurable: true };
      }
      ;
      function N(a, b) {
        return { index: a, D: [], G: b };
      }
      function Gb(a, b, c, d) {
        var e = 0, f = 0, g = 0, h2 = 0, k = Math.min(b - e, d - f);
        if (0 == e && 0 == f) a: {
          for (g = 0; g < k; g++) if (a[g] !== c[g]) break a;
          g = k;
        }
        if (b == a.length && d == c.length) {
          h2 = a.length;
          for (var l = c.length, m = 0; m < k - g && Hb(a[--h2], c[--l]); ) m++;
          h2 = m;
        }
        e += g;
        f += g;
        b -= h2;
        d -= h2;
        if (0 == b - e && 0 == d - f) return [];
        if (e == b) {
          for (b = N(e, 0); f < d; ) b.D.push(c[f++]);
          return [b];
        }
        if (f == d) return [N(e, b - e)];
        k = e;
        g = f;
        d = d - g + 1;
        h2 = b - k + 1;
        b = Array(d);
        for (l = 0; l < d; l++) b[l] = Array(h2), b[l][0] = l;
        for (l = 0; l < h2; l++) b[0][l] = l;
        for (l = 1; l < d; l++) for (m = 1; m < h2; m++) if (a[k + m - 1] === c[g + l - 1]) b[l][m] = b[l - 1][m - 1];
        else {
          var r = b[l - 1][m] + 1, C = b[l][m - 1] + 1;
          b[l][m] = r < C ? r : C;
        }
        k = b.length - 1;
        g = b[0].length - 1;
        d = b[k][g];
        for (a = []; 0 < k || 0 < g; ) 0 == k ? (a.push(2), g--) : 0 == g ? (a.push(3), k--) : (h2 = b[k - 1][g - 1], l = b[k - 1][g], m = b[k][g - 1], r = l < m ? l < h2 ? l : h2 : m < h2 ? m : h2, r == h2 ? (h2 == d ? a.push(0) : (a.push(1), d = h2), k--, g--) : r == l ? (a.push(3), k--, d = l) : (a.push(2), g--, d = m));
        a.reverse();
        b = void 0;
        k = [];
        for (g = 0; g < a.length; g++) switch (a[g]) {
          case 0:
            b && (k.push(b), b = void 0);
            e++;
            f++;
            break;
          case 1:
            b || (b = N(e, 0));
            b.G++;
            e++;
            b.D.push(c[f]);
            f++;
            break;
          case 2:
            b || (b = N(e, 0));
            b.G++;
            e++;
            break;
          case 3:
            b || (b = N(e, 0)), b.D.push(c[f]), f++;
        }
        b && k.push(b);
        return k;
      }
      function Hb(a, b) {
        return a === b;
      }
      ;
      var Ib = B({ dispatchEvent: tb, addEventListener: vb, removeEventListener: wb });
      var Jb = null;
      function O() {
        Jb || (Jb = window.ShadyCSS && window.ShadyCSS.ScopingShim);
        return Jb || null;
      }
      function Kb(a, b, c) {
        var d = O();
        return d && "class" === b ? (d.setElementClass(a, c), true) : false;
      }
      function Lb(a, b) {
        var c = O();
        c && c.unscopeNode(a, b);
      }
      function Mb(a, b) {
        var c = O();
        if (!c) return true;
        if (a.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
          c = true;
          for (a = a.__shady_firstChild; a; a = a.__shady_nextSibling) c = c && Mb(a, b);
          return c;
        }
        return a.nodeType !== Node.ELEMENT_NODE ? true : c.currentScopeForNode(a) === b;
      }
      function Nb(a) {
        if (a.nodeType !== Node.ELEMENT_NODE) return "";
        var b = O();
        return b ? b.currentScopeForNode(a) : "";
      }
      function Ob(a, b) {
        if (a) for (a.nodeType === Node.ELEMENT_NODE && b(a), a = a.__shady_firstChild; a; a = a.__shady_nextSibling) a.nodeType === Node.ELEMENT_NODE && Ob(a, b);
      }
      ;
      var Pb = window.document, Qb = v.C, Rb = Object.getOwnPropertyDescriptor(Node.prototype, "isConnected"), Sb = Rb && Rb.get;
      function Tb(a) {
        for (var b; b = a.__shady_firstChild; ) a.__shady_removeChild(b);
      }
      function Ub(a) {
        var b = u(a);
        if (b && void 0 !== b.J) for (b = a.__shady_firstChild; b; b = b.__shady_nextSibling) Ub(b);
        if (a = u(a)) a.J = void 0;
      }
      function Vb(a) {
        var b = a;
        if (a && "slot" === a.localName) {
          var c = u(a);
          (c = c && c.u) && (b = c.length ? c[0] : Vb(a.__shady_nextSibling));
        }
        return b;
      }
      function Wb(a, b, c) {
        if (a = (a = u(a)) && a.B) {
          if (b) if (b.nodeType === Node.DOCUMENT_FRAGMENT_NODE) for (var d = 0, e = b.childNodes.length; d < e; d++) a.addedNodes.push(b.childNodes[d]);
          else a.addedNodes.push(b);
          c && a.removedNodes.push(c);
          Da(a);
        }
      }
      var ac = B({
        get parentNode() {
          var a = u(this);
          a = a && a.parentNode;
          return void 0 !== a ? a : this.__shady_native_parentNode;
        },
        get firstChild() {
          var a = u(this);
          a = a && a.firstChild;
          return void 0 !== a ? a : this.__shady_native_firstChild;
        },
        get lastChild() {
          var a = u(this);
          a = a && a.lastChild;
          return void 0 !== a ? a : this.__shady_native_lastChild;
        },
        get nextSibling() {
          var a = u(this);
          a = a && a.nextSibling;
          return void 0 !== a ? a : this.__shady_native_nextSibling;
        },
        get previousSibling() {
          var a = u(this);
          a = a && a.previousSibling;
          return void 0 !== a ? a : this.__shady_native_previousSibling;
        },
        get childNodes() {
          if (w(this)) {
            var a = u(this);
            if (!a.childNodes) {
              a.childNodes = [];
              for (var b = this.__shady_firstChild; b; b = b.__shady_nextSibling) a.childNodes.push(b);
            }
            var c = a.childNodes;
          } else c = this.__shady_native_childNodes;
          c.item = function(d) {
            return c[d];
          };
          return c;
        },
        get parentElement() {
          var a = u(this);
          (a = a && a.parentNode) && a.nodeType !== Node.ELEMENT_NODE && (a = null);
          return void 0 !== a ? a : this.__shady_native_parentElement;
        },
        get isConnected() {
          if (Sb && Sb.call(this)) return true;
          if (this.nodeType == Node.DOCUMENT_FRAGMENT_NODE) return false;
          var a = this.ownerDocument;
          if (null === a || qa(a, this)) return true;
          for (a = this; a && !(a instanceof Document); ) a = a.__shady_parentNode || (x(a) ? a.host : void 0);
          return !!(a && a instanceof Document);
        },
        get textContent() {
          if (w(this)) {
            for (var a = [], b = this.__shady_firstChild; b; b = b.__shady_nextSibling) b.nodeType !== Node.COMMENT_NODE && a.push(b.__shady_textContent);
            return a.join("");
          }
          return this.__shady_native_textContent;
        },
        set textContent(a) {
          if ("undefined" === typeof a || null === a) a = "";
          switch (this.nodeType) {
            case Node.ELEMENT_NODE:
            case Node.DOCUMENT_FRAGMENT_NODE:
              if (!w(this) && v.i) {
                var b = this.__shady_firstChild;
                (b != this.__shady_lastChild || b && b.nodeType != Node.TEXT_NODE) && Tb(this);
                this.__shady_native_textContent = a;
              } else Tb(this), (0 < a.length || this.nodeType === Node.ELEMENT_NODE) && this.__shady_insertBefore(document.createTextNode(a));
              break;
            default:
              this.nodeValue = a;
          }
        },
        insertBefore: function(a, b) {
          if (this.ownerDocument !== Pb && a.ownerDocument !== Pb) return this.__shady_native_insertBefore(a, b), a;
          if (a === this) throw Error("Failed to execute 'appendChild' on 'Node': The new child element contains the parent.");
          if (b) {
            var c = u(b);
            c = c && c.parentNode;
            if (void 0 !== c && c !== this || void 0 === c && b.__shady_native_parentNode !== this) throw Error("Failed to execute 'insertBefore' on 'Node': The node before which the new node is to be inserted is not a child of this node.");
          }
          if (b === a) return a;
          Wb(this, a);
          var d = [], e = (c = P(this)) ? c.host.localName : Nb(this), f = a.__shady_parentNode;
          if (f) {
            var g = Nb(a);
            var h2 = !!c || !P(a) || Qb && void 0 !== this.__noInsertionPoint;
            f.__shady_removeChild(a, h2);
          }
          f = true;
          var k = (!Qb || void 0 === a.__noInsertionPoint && void 0 === this.__noInsertionPoint) && !Mb(a, e), l = c && !a.__noInsertionPoint && (!Qb || a.nodeType === Node.DOCUMENT_FRAGMENT_NODE);
          if (l || k) k && (g = g || Nb(a)), Ob(a, function(m) {
            l && "slot" === m.localName && d.push(m);
            if (k) {
              var r = g;
              O() && (r && Lb(m, r), (r = O()) && r.scopeNode(m, e));
            }
          });
          d.length && (Xb(c), c.j.push.apply(c.j, q(d)), Q(c));
          w(this) && (Yb(a, this, b), h2 = u(this), h2.root ? (f = false, ja(this) && Q(h2.root)) : c && "slot" === this.localName && (f = false, Q(c)));
          f ? (c = x(this) ? this.host : this, b ? (b = Vb(b), c.__shady_native_insertBefore(a, b)) : c.__shady_native_appendChild(a)) : a.ownerDocument !== this.ownerDocument && this.ownerDocument.adoptNode(a);
          return a;
        },
        appendChild: function(a) {
          if (this != a || !x(a)) return this.__shady_insertBefore(a);
        },
        removeChild: function(a, b) {
          b = void 0 === b ? false : b;
          if (this.ownerDocument !== Pb) return this.__shady_native_removeChild(a);
          if (a.__shady_parentNode !== this) throw Error("The node to be removed is not a child of this node: " + a);
          Wb(this, null, a);
          var c = P(a), d = c && Zb(c, a), e = u(this);
          if (w(this) && ($b(a, this), ja(this))) {
            Q(e.root);
            var f = true;
          }
          if (O() && !b && c && a.nodeType !== Node.TEXT_NODE) {
            var g = Nb(a);
            Ob(a, function(h2) {
              Lb(h2, g);
            });
          }
          Ub(a);
          c && ((b = "slot" === this.localName) && (f = true), (d || b) && Q(c));
          f || (f = x(this) ? this.host : this, (!e.root && "slot" !== a.localName || f === a.__shady_native_parentNode) && f.__shady_native_removeChild(a));
          return a;
        },
        replaceChild: function(a, b) {
          this.__shady_insertBefore(a, b);
          this.__shady_removeChild(b);
          return a;
        },
        cloneNode: function(a) {
          if ("template" == this.localName) return this.__shady_native_cloneNode(a);
          var b = this.__shady_native_cloneNode(false);
          if (a && b.nodeType !== Node.ATTRIBUTE_NODE) {
            a = this.__shady_firstChild;
            for (var c; a; a = a.__shady_nextSibling) c = a.__shady_cloneNode(true), b.__shady_appendChild(c);
          }
          return b;
        },
        getRootNode: function(a) {
          if (this && this.nodeType) {
            var b = t(this), c = b.J;
            void 0 === c && (x(this) ? (c = this, b.J = c) : (c = (c = this.__shady_parentNode) ? c.__shady_getRootNode(a) : this, document.documentElement.__shady_native_contains(this) && (b.J = c)));
            return c;
          }
        },
        contains: function(a) {
          return ra(this, a);
        }
      });
      var R = B({ get assignedSlot() {
        var a = this.__shady_parentNode;
        (a = a && a.__shady_shadowRoot) && bc(a);
        return (a = u(this)) && a.assignedSlot || null;
      } });
      var cc = /* @__PURE__ */ new Map();
      [["(", { end: ")", I: true }], ["[", { end: "]", I: true }], ['"', { end: '"', I: false }], ["'", { end: "'", I: false }]].forEach(function(a) {
        var b = p(a);
        a = b.next().value;
        b = b.next().value;
        cc.set(a, b);
      });
      function dc(a, b, c, d) {
        for (d = void 0 === d ? true : d; b < a.length; b++) if ("\\" === a[b] && b < a.length - 1 && "\n" !== a[b + 1]) b++;
        else {
          if (-1 !== c.indexOf(a[b])) return b;
          if (d && cc.has(a[b])) {
            var e = cc.get(a[b]);
            b = dc(a, b + 1, [e.end], e.I);
          }
        }
        return a.length;
      }
      function ec(a) {
        function b() {
          if (0 < d.length) {
            for (; " " === d[d.length - 1]; ) d.pop();
            c.push({ S: d.filter(function(k, l) {
              return 0 === l % 2;
            }), ca: d.filter(function(k, l) {
              return 1 === l % 2;
            }) });
            d.length = 0;
          }
        }
        for (var c = [], d = [], e = 0; e < a.length; ) {
          var f = d[d.length - 1], g = dc(a, e, [",", " ", ">", "+", "~"]), h2 = g === e ? a[e] : a.substring(e, g);
          if ("," === h2) b();
          else if (-1 === [void 0, " ", ">", "+", "~"].indexOf(f) || " " !== h2) " " === f && -1 !== [">", "+", "~"].indexOf(h2) ? d[d.length - 1] = h2 : d.push(h2);
          e = g + (g === e ? 1 : 0);
        }
        b();
        return c;
      }
      ;
      function fc(a, b, c) {
        var d = [];
        gc(a, b, c, d);
        return d;
      }
      function gc(a, b, c, d) {
        for (a = a.__shady_firstChild; a; a = a.__shady_nextSibling) {
          var e;
          if (e = a.nodeType === Node.ELEMENT_NODE) {
            e = a;
            var f = b, g = c, h2 = d, k = f(e);
            k && h2.push(e);
            g && g(k) ? e = k : (gc(e, f, g, h2), e = void 0);
          }
          if (e) break;
        }
      }
      var hc = { get firstElementChild() {
        var a = u(this);
        if (a && void 0 !== a.firstChild) {
          for (a = this.__shady_firstChild; a && a.nodeType !== Node.ELEMENT_NODE; ) a = a.__shady_nextSibling;
          return a;
        }
        return this.__shady_native_firstElementChild;
      }, get lastElementChild() {
        var a = u(this);
        if (a && void 0 !== a.lastChild) {
          for (a = this.__shady_lastChild; a && a.nodeType !== Node.ELEMENT_NODE; ) a = a.__shady_previousSibling;
          return a;
        }
        return this.__shady_native_lastElementChild;
      }, get children() {
        return w(this) ? z(Array.prototype.filter.call(ta(this), function(a) {
          return a.nodeType === Node.ELEMENT_NODE;
        })) : this.__shady_native_children;
      }, get childElementCount() {
        var a = this.__shady_children;
        return a ? a.length : 0;
      } }, T = B((hc.append = function(a) {
        for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
        this.__shady_insertBefore(D.apply(null, q(b)), null);
      }, hc.prepend = function(a) {
        for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
        this.__shady_insertBefore(D.apply(null, q(b)), this.__shady_firstChild);
      }, hc.replaceChildren = function(a) {
        for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
        for (; null !== (c = this.__shady_firstChild); ) this.__shady_removeChild(c);
        this.__shady_insertBefore(D.apply(null, q(b)), null);
      }, hc));
      function ic(a, b) {
        function c(e, f) {
          return (e === a || -1 === f.indexOf(":scope")) && la.call(e, f);
        }
        var d = ec(b);
        if (1 > d.length) return [];
        for (b = ya(fc(a, function() {
          return true;
        }).map(function(e) {
          return ya(d.map(function(f) {
            var g = f.S, h2 = g.length - 1;
            return c(e, g[h2]) ? { target: e, v: f, A: e, index: h2 } : [];
          }));
        })); b.some(function(e) {
          return 0 < e.index;
        }); ) b = ya(b.map(function(e) {
          if (0 >= e.index) return e;
          var f = e.target, g = e.A, h2 = e.v;
          e = e.index - 1;
          var k = h2.ca[e], l = h2.S[e];
          if (" " === k) {
            k = [];
            for (g = g.__shady_parentElement; g; g = g.__shady_parentElement) c(
              g,
              l
            ) && k.push({ target: f, v: h2, A: g, index: e });
            return k;
          }
          if (">" === k) return g = g.__shady_parentElement, c(g, l) ? { target: f, v: h2, A: g, index: e } : [];
          if ("+" === k) return (g = g.__shady_previousElementSibling) && c(g, l) ? { target: f, v: h2, A: g, index: e } : [];
          if ("~" === k) {
            k = [];
            for (g = g.__shady_previousElementSibling; g; g = g.__shady_previousElementSibling) c(g, l) && k.push({ target: f, v: h2, A: g, index: e });
            return k;
          }
          throw Error("Unrecognized combinator: '" + k + "'.");
        }));
        return za(b.map(function(e) {
          return e.target;
        }));
      }
      var U = v.querySelectorImplementation, jc = B({ querySelector: function(a) {
        if ("native" === U) {
          var b = Array.prototype.slice.call((this instanceof ShadowRoot ? this.host : this).__shady_native_querySelectorAll(a)), c = this.__shady_getRootNode();
          b = p(b);
          for (var d = b.next(); !d.done; d = b.next()) if (d = d.value, d.__shady_getRootNode() == c) return d;
          return null;
        }
        if ("selectorEngine" === U) return ic(this, a)[0] || null;
        if (void 0 === U) return fc(this, function(e) {
          return la.call(e, a);
        }, function(e) {
          return !!e;
        })[0] || null;
        throw Error("Unrecognized value of ShadyDOM.querySelectorImplementation: '" + (U + "'"));
      }, querySelectorAll: function(a, b) {
        if (b || "native" === U) {
          b = Array.prototype.slice.call((this instanceof ShadowRoot ? this.host : this).__shady_native_querySelectorAll(a));
          var c = this.__shady_getRootNode();
          return z(b.filter(function(d) {
            return d.__shady_getRootNode() == c;
          }));
        }
        if ("selectorEngine" === U) return z(ic(this, a));
        if (void 0 === U) return z(fc(this, function(d) {
          return la.call(d, a);
        }));
        throw Error("Unrecognized value of ShadyDOM.querySelectorImplementation: '" + (U + "'"));
      } }), kc = v.C && !v.l ? wa({}, T) : T;
      wa(T, jc);
      var lc = B({ after: function(a) {
        for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
        c = this.__shady_parentNode;
        if (null !== c) {
          var d = this.__shady_nextSibling;
          c.__shady_insertBefore(D.apply(null, q(b)), d);
        }
      }, before: function(a) {
        for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
        c = this.__shady_parentNode;
        null !== c && c.__shady_insertBefore(D.apply(null, q(b)), this);
      }, remove: function() {
        var a = this.__shady_parentNode;
        null !== a && a.__shady_removeChild(this);
      }, replaceWith: function(a) {
        for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
        c = this.__shady_parentNode;
        if (null !== c) {
          var d = this.__shady_nextSibling;
          c.__shady_removeChild(this);
          c.__shady_insertBefore(D.apply(null, q(b)), d);
        }
      } });
      var mc = window.document;
      function nc(a, b) {
        if ("slot" === b) a = a.__shady_parentNode, ja(a) && Q(u(a).root);
        else if ("slot" === a.localName && "name" === b && (b = P(a))) {
          if (b.g) {
            oc(b);
            var c = a.Y, d = pc(a);
            if (d !== c) {
              c = b.h[c];
              var e = c.indexOf(a);
              0 <= e && c.splice(e, 1);
              c = b.h[d] || (b.h[d] = []);
              c.push(a);
              1 < c.length && (b.h[d] = qc(c));
            }
          }
          Q(b);
        }
      }
      var rc = B({
        get previousElementSibling() {
          var a = u(this);
          if (a && void 0 !== a.previousSibling) {
            for (a = this.__shady_previousSibling; a && a.nodeType !== Node.ELEMENT_NODE; ) a = a.__shady_previousSibling;
            return a;
          }
          return this.__shady_native_previousElementSibling;
        },
        get nextElementSibling() {
          var a = u(this);
          if (a && void 0 !== a.nextSibling) {
            for (a = this.__shady_nextSibling; a && a.nodeType !== Node.ELEMENT_NODE; ) a = a.__shady_nextSibling;
            return a;
          }
          return this.__shady_native_nextElementSibling;
        },
        get slot() {
          return this.getAttribute("slot");
        },
        set slot(a) {
          this.__shady_setAttribute("slot", a);
        },
        get className() {
          return this.getAttribute("class") || "";
        },
        set className(a) {
          this.__shady_setAttribute("class", a);
        },
        setAttribute: function(a, b) {
          this.ownerDocument !== mc ? this.__shady_native_setAttribute(a, b) : Kb(this, a, b) || (this.__shady_native_setAttribute(a, b), nc(this, a));
        },
        removeAttribute: function(a) {
          this.ownerDocument !== mc ? this.__shady_native_removeAttribute(a) : Kb(this, a, "") ? "" === this.getAttribute(a) && this.__shady_native_removeAttribute(a) : (this.__shady_native_removeAttribute(a), nc(this, a));
        },
        toggleAttribute: function(a, b) {
          if (this.ownerDocument !== mc) return this.__shady_native_toggleAttribute(a, b);
          if (!Kb(this, a, "")) return b = this.__shady_native_toggleAttribute(a, b), nc(this, a), b;
          if ("" === this.getAttribute(a) && !b) return this.__shady_native_toggleAttribute(a, b);
        }
      });
      v.C || Db.forEach(function(a) {
        rc[a] = Fb(a);
      });
      var wc = B({ attachShadow: function(a) {
        if (!this) throw Error("Must provide a host.");
        if (!a) throw Error("Not enough arguments.");
        if (a.shadyUpgradeFragment && !v.V) {
          var b = a.shadyUpgradeFragment;
          b.__proto__ = ShadowRoot.prototype;
          sc(b, this, a);
          tc(b, b);
          a = b.__noInsertionPoint ? null : b.querySelectorAll("slot");
          b.__noInsertionPoint = void 0;
          if (a && a.length) {
            var c = b;
            Xb(c);
            c.j.push.apply(c.j, q(a));
            Q(b);
          }
          b.host.__shady_native_appendChild(b);
        } else b = new uc(vc, this, a);
        return this.__CE_shadowRoot = b;
      }, get shadowRoot() {
        var a = u(this);
        return a && a.ea || null;
      } });
      wa(rc, wc);
      var xc = document.implementation.createHTMLDocument("inert"), yc = B({ get innerHTML() {
        return w(this) ? Na("template" === this.localName ? this.content : this, ta) : this.__shady_native_innerHTML;
      }, set innerHTML(a) {
        if ("template" === this.localName) this.__shady_native_innerHTML = a;
        else {
          Tb(this);
          var b = this.localName || "div";
          b = this.namespaceURI && this.namespaceURI !== xc.namespaceURI ? xc.createElementNS(this.namespaceURI, b) : xc.createElement(b);
          for (v.i ? b.__shady_native_innerHTML = a : b.innerHTML = a; a = b.__shady_firstChild; ) this.__shady_insertBefore(a);
        }
      } });
      var zc = B({ blur: function() {
        var a = u(this);
        (a = (a = a && a.root) && a.activeElement) ? a.__shady_blur() : this.__shady_native_blur();
      } });
      v.C || Eb.forEach(function(a) {
        zc[a] = Fb(a);
      });
      var Ac = B({ assignedNodes: function(a) {
        if ("slot" === this.localName) {
          var b = this.__shady_getRootNode();
          b && x(b) && bc(b);
          return (b = u(this)) ? (a && a.flatten ? b.u : b.assignedNodes) || [] : [];
        }
      }, addEventListener: function(a, b, c) {
        if ("slot" !== this.localName || "slotchange" === a) vb.call(this, a, b, c);
        else {
          "object" !== typeof c && (c = { capture: !!c });
          var d = this.__shady_parentNode;
          if (!d) throw Error("ShadyDOM cannot attach event to slot unless it has a `parentNode`");
          c.o = this;
          d.__shady_addEventListener(a, b, c);
        }
      }, removeEventListener: function(a, b, c) {
        if ("slot" !== this.localName || "slotchange" === a) wb.call(this, a, b, c);
        else {
          "object" !== typeof c && (c = { capture: !!c });
          var d = this.__shady_parentNode;
          if (!d) throw Error("ShadyDOM cannot attach event to slot unless it has a `parentNode`");
          c.o = this;
          d.__shady_removeEventListener(a, b, c);
        }
      } });
      var Bc = B({ getElementById: function(a) {
        return "" === a ? null : fc(this, function(b) {
          return b.id == a;
        }, function(b) {
          return !!b;
        })[0] || null;
      } });
      function Cc(a, b) {
        for (var c; b && !a.has(c = b.__shady_getRootNode()); ) b = c.host;
        return b;
      }
      function Dc(a) {
        var b = /* @__PURE__ */ new Set();
        for (b.add(a); x(a) && a.host; ) a = a.host.__shady_getRootNode(), b.add(a);
        return b;
      }
      var Ec = "__shady_native_" + ia(), Fc = B({ get activeElement() {
        var a = v.i ? document.__shady_native_activeElement : document.activeElement;
        if (!a || !a.nodeType) return null;
        var b = !!x(this);
        if (!(this === document || b && this.host !== a && this.host.__shady_native_contains(a))) return null;
        for (b = P(a); b && b !== this; ) a = b.host, b = P(a);
        return this === document ? b ? null : a : b === this ? a : null;
      }, elementsFromPoint: function(a, b) {
        a = document[Ec](a, b);
        if (this === document && v.useNativeDocumentEFP) return a;
        a = [].slice.call(a);
        b = Dc(this);
        for (var c = /* @__PURE__ */ new Set(), d = 0; d < a.length; d++) c.add(Cc(b, a[d]));
        var e = [];
        c.forEach(function(f) {
          return e.push(f);
        });
        return e;
      }, elementFromPoint: function(a, b) {
        return this === document && v.useNativeDocumentEFP ? this.__shady_native_elementFromPoint(a, b) : this.__shady_elementsFromPoint(a, b)[0] || null;
      } });
      var Gc = window.document, Hc = B({ importNode: function(a, b) {
        if (a.ownerDocument !== Gc || "template" === a.localName) return this.__shady_native_importNode(a, b);
        var c = this.__shady_native_importNode(a, false);
        if (b) for (a = a.__shady_firstChild; a; a = a.__shady_nextSibling) b = this.__shady_importNode(a, true), c.__shady_appendChild(b);
        return c;
      } });
      var Ic = B({ dispatchEvent: tb, addEventListener: vb.bind(window), removeEventListener: wb.bind(window) });
      var V = {};
      Object.getOwnPropertyDescriptor(HTMLElement.prototype, "parentElement") && (V.parentElement = ac.parentElement);
      Object.getOwnPropertyDescriptor(HTMLElement.prototype, "contains") && (V.contains = ac.contains);
      Object.getOwnPropertyDescriptor(HTMLElement.prototype, "children") && (V.children = T.children);
      Object.getOwnPropertyDescriptor(HTMLElement.prototype, "innerHTML") && (V.innerHTML = yc.innerHTML);
      Object.getOwnPropertyDescriptor(HTMLElement.prototype, "className") && (V.className = rc.className);
      var W = { EventTarget: [Ib], Node: [ac, window.EventTarget ? null : Ib], Text: [R], Comment: [R], CDATASection: [R], ProcessingInstruction: [R], Element: [rc, T, lc, R, !v.i || "innerHTML" in Element.prototype ? yc : null, window.HTMLSlotElement ? null : Ac], HTMLElement: [zc, V], HTMLSlotElement: [Ac], DocumentFragment: [kc, Bc], Document: [Hc, kc, Bc, Fc], Window: [Ic], CharacterData: [lc], XMLHttpRequest: [window.EventTarget ? null : Ib] }, Jc = v.i ? null : ["innerHTML", "textContent"];
      function X(a, b, c, d) {
        b.forEach(function(e) {
          return a && e && A(a, e, c, d);
        });
      }
      function Kc(a) {
        var b = a ? null : Jc, c;
        for (c in W) X(window[c] && window[c].prototype, W[c], a, b);
      }
      ["Text", "Comment", "CDATASection", "ProcessingInstruction"].forEach(function(a) {
        var b = window[a], c = Object.create(b.prototype);
        c.__shady_protoIsPatched = true;
        X(c, W.EventTarget);
        X(c, W.Node);
        W[a] && X(c, W[a]);
        b.prototype.__shady_patchedProto = c;
      });
      function Lc(a) {
        a.__shady_protoIsPatched = true;
        X(a, W.EventTarget);
        X(a, W.Node);
        X(a, W.Element);
        X(a, W.HTMLElement);
        X(a, W.HTMLSlotElement);
        return a;
      }
      ;
      var Mc = v.O, Nc = v.i;
      function Oc(a, b) {
        if (Mc && !a.__shady_protoIsPatched && !x(a)) {
          var c = Object.getPrototypeOf(a), d = c.hasOwnProperty("__shady_patchedProto") && c.__shady_patchedProto;
          d || (d = Object.create(c), Lc(d), c.__shady_patchedProto = d);
          Object.setPrototypeOf(a, d);
        }
        Nc || (1 === b ? ab(a) : 2 === b && bb(a));
      }
      function Pc(a, b, c, d) {
        Oc(a, 1);
        d = d || null;
        var e = t(a), f = d ? t(d) : null;
        e.previousSibling = d ? f.previousSibling : b.__shady_lastChild;
        if (f = u(e.previousSibling)) f.nextSibling = a;
        if (f = u(e.nextSibling = d)) f.previousSibling = a;
        e.parentNode = b;
        d ? d === c.firstChild && (c.firstChild = a) : (c.lastChild = a, c.firstChild || (c.firstChild = a));
        c.childNodes = null;
      }
      function Yb(a, b, c) {
        Oc(b, 2);
        var d = t(b);
        void 0 !== d.firstChild && (d.childNodes = null);
        if (a.nodeType === Node.DOCUMENT_FRAGMENT_NODE) for (a = a.__shady_native_firstChild; a; a = a.__shady_native_nextSibling) Pc(a, b, d, c);
        else Pc(a, b, d, c);
      }
      function $b(a, b) {
        var c = t(a);
        b = t(b);
        a === b.firstChild && (b.firstChild = c.nextSibling);
        a === b.lastChild && (b.lastChild = c.previousSibling);
        a = c.previousSibling;
        var d = c.nextSibling;
        a && (t(a).nextSibling = d);
        d && (t(d).previousSibling = a);
        c.parentNode = c.previousSibling = c.nextSibling = void 0;
        void 0 !== b.childNodes && (b.childNodes = null);
      }
      function tc(a, b) {
        var c = t(a);
        if (b || void 0 === c.firstChild) {
          c.childNodes = null;
          var d = c.firstChild = a.__shady_native_firstChild;
          c.lastChild = a.__shady_native_lastChild;
          Oc(a, 2);
          c = d;
          for (d = void 0; c; c = c.__shady_native_nextSibling) {
            var e = t(c);
            e.parentNode = b || a;
            e.nextSibling = c.__shady_native_nextSibling;
            e.previousSibling = d || null;
            d = c;
            Oc(c, 1);
          }
        }
      }
      ;
      var Qc = B({ addEventListener: function(a, b, c) {
        "object" !== typeof c && (c = { capture: !!c });
        c.o = c.o || this;
        this.host.__shady_addEventListener(a, b, c);
      }, removeEventListener: function(a, b, c) {
        "object" !== typeof c && (c = { capture: !!c });
        c.o = c.o || this;
        this.host.__shady_removeEventListener(a, b, c);
      } });
      function Rc(a, b) {
        A(a, Qc, b);
        A(a, Fc, b);
        A(a, yc, b);
        A(a, T, b);
        v.l && !b ? (A(a, ac, b), A(a, Bc, b)) : v.i || (A(a, Ya), A(a, Wa), A(a, Xa));
      }
      ;
      var vc = {}, Y = v.deferConnectionCallbacks && "loading" === document.readyState, Sc;
      function Tc(a) {
        var b = [];
        do
          b.unshift(a);
        while (a = a.__shady_parentNode);
        return b;
      }
      function uc(a, b, c) {
        if (a !== vc) throw new TypeError("Illegal constructor");
        this.g = null;
        sc(this, b, c);
      }
      function sc(a, b, c) {
        a.host = b;
        a.mode = c && c.mode;
        tc(a.host);
        b = t(a.host);
        b.root = a;
        b.ea = "closed" !== a.mode ? a : null;
        b = t(a);
        b.firstChild = b.lastChild = b.parentNode = b.nextSibling = b.previousSibling = null;
        if (v.preferPerformance) for (; b = a.host.__shady_native_firstChild; ) a.host.__shady_native_removeChild(b);
        else Q(a);
      }
      function Q(a) {
        a.s || (a.s = true, Ba(function() {
          return bc(a);
        }));
      }
      function bc(a) {
        var b;
        if (b = a.s) {
          for (var c; a; ) a: {
            a.s && (c = a), b = a;
            a = b.host.__shady_getRootNode();
            if (x(a) && (b = u(b.host)) && 0 < b.F) break a;
            a = void 0;
          }
          b = c;
        }
        (c = b) && c._renderSelf();
      }
      uc.prototype._renderSelf = function() {
        var a = Y;
        Y = true;
        this.s = false;
        if (this.g) {
          oc(this);
          for (var b = 0, c; b < this.g.length; b++) {
            c = this.g[b];
            var d = u(c), e = d.assignedNodes;
            d.assignedNodes = [];
            d.u = [];
            if (d.R = e) for (d = 0; d < e.length; d++) {
              var f = u(e[d]);
              f.L = f.assignedSlot;
              f.assignedSlot === c && (f.assignedSlot = null);
            }
          }
          for (b = this.host.__shady_firstChild; b; b = b.__shady_nextSibling) Uc(this, b);
          for (b = 0; b < this.g.length; b++) {
            c = this.g[b];
            e = u(c);
            if (!e.assignedNodes.length) for (d = c.__shady_firstChild; d; d = d.__shady_nextSibling) Uc(this, d, c);
            (d = (d = u(c.__shady_parentNode)) && d.root) && (ka(d) || d.s) && d._renderSelf();
            Vc(this, e.u, e.assignedNodes);
            if (d = e.R) {
              for (f = 0; f < d.length; f++) u(d[f]).L = null;
              e.R = null;
              d.length > e.assignedNodes.length && (e.M = true);
            }
            e.M && (e.M = false, Wc(this, c));
          }
          c = this.g;
          b = [];
          for (e = 0; e < c.length; e++) d = c[e].__shady_parentNode, (f = u(d)) && f.root || !(0 > b.indexOf(d)) || b.push(d);
          for (c = 0; c < b.length; c++) {
            f = b[c];
            e = f === this ? this.host : f;
            d = [];
            for (f = f.__shady_firstChild; f; f = f.__shady_nextSibling) if ("slot" == f.localName) for (var g = u(f).u, h2 = 0; h2 < g.length; h2++) d.push(g[h2]);
            else d.push(f);
            f = sa(e);
            g = Gb(d, d.length, f, f.length);
            for (var k = h2 = 0, l = void 0; h2 < g.length && (l = g[h2]); h2++) {
              for (var m = 0, r = void 0; m < l.D.length && (r = l.D[m]); m++) r.__shady_native_parentNode === e && e.__shady_native_removeChild(r), f.splice(l.index + k, 1);
              k -= l.G;
            }
            k = 0;
            for (l = void 0; k < g.length && (l = g[k]); k++) for (h2 = f[l.index], m = l.index; m < l.index + l.G; m++) r = d[m], e.__shady_native_insertBefore(r, h2), f.splice(m, 0, r);
          }
        }
        if (!v.preferPerformance && !this.P) for (b = this.host.__shady_firstChild; b; b = b.__shady_nextSibling) c = u(b), b.__shady_native_parentNode !== this.host || "slot" !== b.localName && c.assignedSlot || this.host.__shady_native_removeChild(b);
        this.P = true;
        Y = a;
        Sc && Sc();
      };
      function Uc(a, b, c) {
        var d = t(b), e = d.L;
        d.L = null;
        c || (c = (a = a.h[b.__shady_slot || "__catchall"]) && a[0]);
        c ? (t(c).assignedNodes.push(b), d.assignedSlot = c) : d.assignedSlot = void 0;
        e !== d.assignedSlot && d.assignedSlot && (t(d.assignedSlot).M = true);
      }
      function Vc(a, b, c) {
        for (var d = 0, e = void 0; d < c.length && (e = c[d]); d++) if ("slot" == e.localName) {
          var f = u(e).assignedNodes;
          f && f.length && Vc(a, b, f);
        } else b.push(c[d]);
      }
      function Wc(a, b) {
        b.__shady_native_dispatchEvent(new Event("slotchange"));
        b = u(b);
        b.assignedSlot && Wc(a, b.assignedSlot);
      }
      function Xb(a) {
        a.j = a.j || [];
        a.g = a.g || [];
        a.h = a.h || {};
      }
      function oc(a) {
        if (a.j && a.j.length) {
          for (var b = a.j, c, d = 0; d < b.length; d++) {
            var e = b[d];
            tc(e);
            var f = e.__shady_parentNode;
            tc(f);
            f = u(f);
            f.F = (f.F || 0) + 1;
            f = pc(e);
            a.h[f] ? (c = c || {}, c[f] = true, a.h[f].push(e)) : a.h[f] = [e];
            a.g.push(e);
          }
          if (c) for (var g in c) a.h[g] = qc(a.h[g]);
          a.j = [];
        }
      }
      function pc(a) {
        var b = a.name || a.getAttribute("name") || "__catchall";
        return a.Y = b;
      }
      function qc(a) {
        return a.sort(function(b, c) {
          b = Tc(b);
          for (var d = Tc(c), e = 0; e < b.length; e++) {
            c = b[e];
            var f = d[e];
            if (c !== f) return b = ta(c.__shady_parentNode), b.indexOf(c) - b.indexOf(f);
          }
        });
      }
      function Zb(a, b) {
        if (a.g) {
          oc(a);
          var c = a.h, d;
          for (d in c) for (var e = c[d], f = 0; f < e.length; f++) {
            var g = e[f];
            if (ra(b, g)) {
              e.splice(f, 1);
              var h2 = a.g.indexOf(g);
              0 <= h2 && (a.g.splice(h2, 1), (h2 = u(g.__shady_parentNode)) && h2.F && h2.F--);
              f--;
              g = u(g);
              if (h2 = g.u) for (var k = 0; k < h2.length; k++) {
                var l = h2[k], m = l.__shady_native_parentNode;
                m && m.__shady_native_removeChild(l);
              }
              g.u = [];
              g.assignedNodes = [];
              h2 = true;
            }
          }
          return h2;
        }
      }
      function ka(a) {
        oc(a);
        return !(!a.g || !a.g.length);
      }
      (function(a) {
        a.__proto__ = DocumentFragment.prototype;
        Rc(a, "__shady_");
        Rc(a);
        Object.defineProperties(a, { nodeType: { value: Node.DOCUMENT_FRAGMENT_NODE, configurable: true }, nodeName: { value: "#document-fragment", configurable: true }, nodeValue: { value: null, configurable: true } });
        ["localName", "namespaceURI", "prefix"].forEach(function(b) {
          Object.defineProperty(a, b, { value: void 0, configurable: true });
        });
        ["ownerDocument", "baseURI", "isConnected"].forEach(function(b) {
          Object.defineProperty(a, b, {
            get: function() {
              return this.host[b];
            },
            configurable: true
          });
        });
      })(uc.prototype);
      if (window.customElements && window.customElements.define && v.N && !v.preferPerformance) {
        var Xc = /* @__PURE__ */ new Map();
        Sc = function() {
          var a = [];
          Xc.forEach(function(d, e) {
            a.push([e, d]);
          });
          Xc.clear();
          for (var b = 0; b < a.length; b++) {
            var c = a[b][0];
            a[b][1] ? c.__shadydom_connectedCallback() : c.__shadydom_disconnectedCallback();
          }
        };
        Y && document.addEventListener("readystatechange", function() {
          Y = false;
          Sc();
        }, { once: true });
        var Yc = function(a, b, c) {
          var d = 0, e = "__isConnected" + d++;
          if (b || c) a.prototype.connectedCallback = a.prototype.__shadydom_connectedCallback = function() {
            Y ? Xc.set(this, true) : this[e] || (this[e] = true, b && b.call(this));
          }, a.prototype.disconnectedCallback = a.prototype.__shadydom_disconnectedCallback = function() {
            Y ? this.isConnected || Xc.set(this, false) : this[e] && (this[e] = false, c && c.call(this));
          };
          return a;
        }, Zc = window.customElements.define, $c = function(a, b) {
          var c = b.prototype.connectedCallback, d = b.prototype.disconnectedCallback;
          Zc.call(window.customElements, a, Yc(b, c, d));
          b.prototype.connectedCallback = c;
          b.prototype.disconnectedCallback = d;
        };
        window.customElements.define = $c;
        Object.defineProperty(window.CustomElementRegistry.prototype, "define", { value: $c, configurable: true });
      }
      function P(a) {
        a = a.__shady_getRootNode();
        if (x(a)) return a;
      }
      ;
      function Z(a) {
        this.node = a;
      }
      n = Z.prototype;
      n.addEventListener = function(a, b, c) {
        return this.node.__shady_addEventListener(a, b, c);
      };
      n.removeEventListener = function(a, b, c) {
        return this.node.__shady_removeEventListener(a, b, c);
      };
      n.appendChild = function(a) {
        return this.node.__shady_appendChild(a);
      };
      n.insertBefore = function(a, b) {
        return this.node.__shady_insertBefore(a, b);
      };
      n.removeChild = function(a) {
        return this.node.__shady_removeChild(a);
      };
      n.replaceChild = function(a, b) {
        return this.node.__shady_replaceChild(a, b);
      };
      n.cloneNode = function(a) {
        return this.node.__shady_cloneNode(a);
      };
      n.getRootNode = function(a) {
        return this.node.__shady_getRootNode(a);
      };
      n.contains = function(a) {
        return this.node.__shady_contains(a);
      };
      n.dispatchEvent = function(a) {
        return this.node.__shady_dispatchEvent(a);
      };
      n.setAttribute = function(a, b) {
        this.node.__shady_setAttribute(a, b);
      };
      n.getAttribute = function(a) {
        return this.node.__shady_native_getAttribute(a);
      };
      n.removeAttribute = function(a) {
        this.node.__shady_removeAttribute(a);
      };
      n.toggleAttribute = function(a, b) {
        return this.node.__shady_toggleAttribute(a, b);
      };
      n.attachShadow = function(a) {
        return this.node.__shady_attachShadow(a);
      };
      n.focus = function() {
        this.node.__shady_native_focus();
      };
      n.blur = function() {
        this.node.__shady_blur();
      };
      n.importNode = function(a, b) {
        if (this.node.nodeType === Node.DOCUMENT_NODE) return this.node.__shady_importNode(a, b);
      };
      n.getElementById = function(a) {
        if (this.node.nodeType === Node.DOCUMENT_NODE) return this.node.__shady_getElementById(a);
      };
      n.elementsFromPoint = function(a, b) {
        return this.node.__shady_elementsFromPoint(a, b);
      };
      n.elementFromPoint = function(a, b) {
        return this.node.__shady_elementFromPoint(a, b);
      };
      n.querySelector = function(a) {
        return this.node.__shady_querySelector(a);
      };
      n.querySelectorAll = function(a, b) {
        return this.node.__shady_querySelectorAll(a, b);
      };
      n.assignedNodes = function(a) {
        if ("slot" === this.node.localName) return this.node.__shady_assignedNodes(a);
      };
      n.append = function(a) {
        for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
        return this.node.__shady_append.apply(this.node, q(b));
      };
      n.prepend = function(a) {
        for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
        return this.node.__shady_prepend.apply(this.node, q(b));
      };
      n.after = function(a) {
        for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
        return this.node.__shady_after.apply(this.node, q(b));
      };
      n.before = function(a) {
        for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
        return this.node.__shady_before.apply(this.node, q(b));
      };
      n.remove = function() {
        return this.node.__shady_remove();
      };
      n.replaceWith = function(a) {
        for (var b = [], c = 0; c < arguments.length; ++c) b[c] = arguments[c];
        return this.node.__shady_replaceWith.apply(this.node, q(b));
      };
      ca.Object.defineProperties(Z.prototype, {
        activeElement: { configurable: true, enumerable: true, get: function() {
          if (x(this.node) || this.node.nodeType === Node.DOCUMENT_NODE) return this.node.__shady_activeElement;
        } },
        _activeElement: { configurable: true, enumerable: true, get: function() {
          return this.activeElement;
        } },
        host: { configurable: true, enumerable: true, get: function() {
          if (x(this.node)) return this.node.host;
        } },
        parentNode: { configurable: true, enumerable: true, get: function() {
          return this.node.__shady_parentNode;
        } },
        firstChild: {
          configurable: true,
          enumerable: true,
          get: function() {
            return this.node.__shady_firstChild;
          }
        },
        lastChild: { configurable: true, enumerable: true, get: function() {
          return this.node.__shady_lastChild;
        } },
        nextSibling: { configurable: true, enumerable: true, get: function() {
          return this.node.__shady_nextSibling;
        } },
        previousSibling: { configurable: true, enumerable: true, get: function() {
          return this.node.__shady_previousSibling;
        } },
        childNodes: { configurable: true, enumerable: true, get: function() {
          return this.node.__shady_childNodes;
        } },
        parentElement: {
          configurable: true,
          enumerable: true,
          get: function() {
            return this.node.__shady_parentElement;
          }
        },
        firstElementChild: { configurable: true, enumerable: true, get: function() {
          return this.node.__shady_firstElementChild;
        } },
        lastElementChild: { configurable: true, enumerable: true, get: function() {
          return this.node.__shady_lastElementChild;
        } },
        nextElementSibling: { configurable: true, enumerable: true, get: function() {
          return this.node.__shady_nextElementSibling;
        } },
        previousElementSibling: { configurable: true, enumerable: true, get: function() {
          return this.node.__shady_previousElementSibling;
        } },
        children: { configurable: true, enumerable: true, get: function() {
          return this.node.__shady_children;
        } },
        childElementCount: { configurable: true, enumerable: true, get: function() {
          return this.node.__shady_childElementCount;
        } },
        shadowRoot: { configurable: true, enumerable: true, get: function() {
          return this.node.__shady_shadowRoot;
        } },
        assignedSlot: { configurable: true, enumerable: true, get: function() {
          return this.node.__shady_assignedSlot;
        } },
        isConnected: { configurable: true, enumerable: true, get: function() {
          return this.node.__shady_isConnected;
        } },
        innerHTML: {
          configurable: true,
          enumerable: true,
          get: function() {
            return this.node.__shady_innerHTML;
          },
          set: function(a) {
            this.node.__shady_innerHTML = a;
          }
        },
        textContent: { configurable: true, enumerable: true, get: function() {
          return this.node.__shady_textContent;
        }, set: function(a) {
          this.node.__shady_textContent = a;
        } },
        slot: { configurable: true, enumerable: true, get: function() {
          return this.node.__shady_slot;
        }, set: function(a) {
          this.node.__shady_slot = a;
        } },
        className: { configurable: true, enumerable: true, get: function() {
          return this.node.__shady_className;
        }, set: function(a) {
          this.node.__shady_className = a;
        } }
      });
      function ad(a) {
        Object.defineProperty(Z.prototype, a, { get: function() {
          return this.node["__shady_" + a];
        }, set: function(b) {
          this.node["__shady_" + a] = b;
        }, configurable: true });
      }
      Db.forEach(function(a) {
        return ad(a);
      });
      Eb.forEach(function(a) {
        return ad(a);
      });
      var bd = /* @__PURE__ */ new WeakMap();
      function cd(a) {
        if (x(a) || a instanceof Z) return a;
        var b = bd.get(a);
        b || (b = new Z(a), bd.set(a, b));
        return b;
      }
      ;
      if (v.N) {
        var dd = v.i ? function(a) {
          return a;
        } : function(a) {
          bb(a);
          ab(a);
          return a;
        };
        window.ShadyDOM = {
          inUse: v.N,
          patch: dd,
          isShadyRoot: x,
          enqueue: Ba,
          flush: F,
          flushInitial: function(a) {
            !a.P && a.s && bc(a);
          },
          settings: v,
          filterMutations: Ga,
          observeChildren: Ea,
          unobserveChildren: Fa,
          deferConnectionCallbacks: v.deferConnectionCallbacks,
          preferPerformance: v.preferPerformance,
          handlesDynamicScoping: true,
          wrap: v.l ? cd : dd,
          wrapIfNeeded: true === v.l ? cd : function(a) {
            return a;
          },
          Wrapper: Z,
          composedPath: ib,
          noPatch: v.l,
          patchOnDemand: v.O,
          nativeMethods: Oa,
          nativeTree: Pa,
          patchElementProto: Lc,
          querySelectorImplementation: v.querySelectorImplementation
        };
        Va();
        Kc("__shady_");
        Object.defineProperty(document, "_activeElement", Fc.activeElement);
        A(Window.prototype, Ic, "__shady_");
        v.l ? v.O && A(Element.prototype, wc) : (Kc(), Cb());
        xb();
        window.Event = zb;
        window.CustomEvent = Ab;
        window.MouseEvent = Bb;
        window.ShadowRoot = uc;
      }
      ;
    }).call(exports2);
  }
});

// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/helpers/_DOMTokenList.js
var _DOMTokenList, DOMTokenList_default;
var init_DOMTokenList = __esm({
  "node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/helpers/_DOMTokenList.js"() {
    _DOMTokenList = function() {
      var dpSupport = true;
      var defineGetter = function(object, name, fn, configurable) {
        if (Object.defineProperty)
          Object.defineProperty(object, name, {
            configurable: false === dpSupport ? true : !!configurable,
            get: fn
          });
        else object.__defineGetter__(name, fn);
      };
      try {
        defineGetter({}, "support");
      } catch (e) {
        dpSupport = false;
      }
      var _DOMTokenList2 = function(el, prop) {
        var that = this;
        var tokens = [];
        var tokenMap = {};
        var length = 0;
        var maxLength = 0;
        var addIndexGetter = function(i) {
          defineGetter(that, i, function() {
            preop();
            return tokens[i];
          }, false);
        };
        var reindex = function() {
          if (length >= maxLength)
            for (; maxLength < length; ++maxLength) {
              addIndexGetter(maxLength);
            }
        };
        var preop = function() {
          var error;
          var i;
          var args = arguments;
          var rSpace = /\s+/;
          if (args.length) {
            for (i = 0; i < args.length; ++i)
              if (rSpace.test(args[i])) {
                error = new SyntaxError('String "' + args[i] + '" contains an invalid character');
                error.code = 5;
                error.name = "InvalidCharacterError";
                throw error;
              }
          }
          if (typeof el[prop] === "object") {
            tokens = ("" + el[prop].baseVal).replace(/^\s+|\s+$/g, "").split(rSpace);
          } else {
            tokens = ("" + el[prop]).replace(/^\s+|\s+$/g, "").split(rSpace);
          }
          if ("" === tokens[0]) tokens = [];
          tokenMap = {};
          for (i = 0; i < tokens.length; ++i)
            tokenMap[tokens[i]] = true;
          length = tokens.length;
          reindex();
        };
        preop();
        defineGetter(that, "length", function() {
          preop();
          return length;
        });
        that.toLocaleString = that.toString = function() {
          preop();
          return tokens.join(" ");
        };
        that.item = function(idx) {
          preop();
          return tokens[idx];
        };
        that.contains = function(token) {
          preop();
          return !!tokenMap[token];
        };
        that.add = function() {
          preop.apply(that, args = arguments);
          for (var args, token, i = 0, l = args.length; i < l; ++i) {
            token = args[i];
            if (!tokenMap[token]) {
              tokens.push(token);
              tokenMap[token] = true;
            }
          }
          if (length !== tokens.length) {
            length = tokens.length >>> 0;
            if (typeof el[prop] === "object") {
              el[prop].baseVal = tokens.join(" ");
            } else {
              el[prop] = tokens.join(" ");
            }
            reindex();
          }
        };
        that.remove = function() {
          preop.apply(that, args = arguments);
          for (var args, ignore = {}, i = 0, t = []; i < args.length; ++i) {
            ignore[args[i]] = true;
            delete tokenMap[args[i]];
          }
          for (i = 0; i < tokens.length; ++i)
            if (!ignore[tokens[i]]) t.push(tokens[i]);
          tokens = t;
          length = t.length >>> 0;
          if (typeof el[prop] === "object") {
            el[prop].baseVal = tokens.join(" ");
          } else {
            el[prop] = tokens.join(" ");
          }
          reindex();
        };
        that.toggle = function(token, force) {
          preop.apply(that, [token]);
          if (void 0 !== force) {
            if (force) {
              that.add(token);
              return true;
            } else {
              that.remove(token);
              return false;
            }
          }
          if (tokenMap[token]) {
            that.remove(token);
            return false;
          }
          that.add(token);
          return true;
        };
        that.forEach = Array.prototype.forEach;
        return that;
      };
      return _DOMTokenList2;
    }();
    DOMTokenList_default = _DOMTokenList;
  }
});

// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DOMTokenList.js
var DOMTokenList_exports = {};
var init_DOMTokenList2 = __esm({
  "node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DOMTokenList.js"() {
    init_DOMTokenList();
    (function(undefined2) {
      if (!("DOMTokenList" in self && function(e) {
        return !("classList" in e) || !e.classList.toggle("x", false) && !e.className;
      }(document.createElement("x")))) {
        (function(global2) {
          var nativeImpl = "DOMTokenList" in global2 && global2.DOMTokenList;
          if (!nativeImpl || !!document.createElementNS && !!document.createElementNS("http://www.w3.org/2000/svg", "svg") && !(document.createElementNS("http://www.w3.org/2000/svg", "svg").classList instanceof DOMTokenList)) {
            global2.DOMTokenList = DOMTokenList_default;
          }
          (function() {
            var e = document.createElement("span");
            if (!("classList" in e)) return;
            e.classList.toggle("x", false);
            if (!e.classList.contains("x")) return;
            e.classList.constructor.prototype.toggle = function toggle(token) {
              var force = arguments[1];
              if (force === undefined2) {
                var add = !this.contains(token);
                this[add ? "add" : "remove"](token);
                return add;
              }
              force = !!force;
              this[force ? "add" : "remove"](token);
              return force;
            };
          })();
          (function() {
            var e = document.createElement("span");
            if (!("classList" in e)) return;
            e.classList.add("a", "b");
            if (e.classList.contains("b")) return;
            var native = e.classList.constructor.prototype.add;
            e.classList.constructor.prototype.add = function() {
              var args = arguments;
              var l = arguments.length;
              for (var i = 0; i < l; i++) {
                native.call(this, args[i]);
              }
            };
          })();
          (function() {
            var e = document.createElement("span");
            if (!("classList" in e)) return;
            e.classList.add("a");
            e.classList.add("b");
            e.classList.remove("a", "b");
            if (!e.classList.contains("b")) return;
            var native = e.classList.constructor.prototype.remove;
            e.classList.constructor.prototype.remove = function() {
              var args = arguments;
              var l = arguments.length;
              for (var i = 0; i < l; i++) {
                native.call(this, args[i]);
              }
            };
          })();
        })(self);
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.replace.js
var DOMTokenList_prototype_replace_exports = {};
var init_DOMTokenList_prototype_replace = __esm({
  "node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.replace.js"() {
    init_DOMTokenList();
    (function(undefined2) {
      if (!("replace" in (document.createElement("div").classList || {}))) {
        (function() {
          var classList = document.createElement("div").classList;
          classList && (classList.constructor.prototype.replace = function(token, newToken) {
            var tokenString = "" + token, newTokenString = "" + newToken;
            try {
              new DOMException();
            } catch (e) {
              self.DOMException = function(message, name) {
                if (!(this instanceof DOMException)) return new DOMException(message, name);
                this.message = message;
                this.name = name;
              };
            }
            var error;
            if (!(tokenString && newTokenString)) error = "SyntaxError";
            if (!error && (/\s/.test(tokenString) || /\s/.test(newTokenString))) error = "InvalidCharacterError";
            if (error) throw new DOMException("DOMTokenList.replace was provided tokens '" + tokenString + "' and '" + newTokenString + "'", error);
            if (!this.contains(tokenString)) return false;
            var tokensTobeMoved = [];
            var newTokenFound = false;
            for (var i = 0; i < this.length; ++i)
              if (newTokenString === this.item(i)) newTokenFound = true;
              else if (tokenString === this.item(i)) break;
            for (; i < this.length; ++i) tokensTobeMoved.push(this.item(i));
            for (i = 0; i < tokensTobeMoved.length; ++i) {
              var currentToken = tokensTobeMoved[i];
              currentToken !== newTokenString && this.remove(currentToken);
              currentToken !== tokenString && this.add(currentToken);
              currentToken === tokenString && !newTokenFound && (this.remove(newTokenString), this.add(newTokenString));
            }
            return true;
          });
        })();
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.forEach.js
var DOMTokenList_prototype_forEach_exports = {};
var init_DOMTokenList_prototype_forEach = __esm({
  "node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.forEach.js"() {
    init_DOMTokenList();
    (function(undefined2) {
      if (!("DOMTokenList" in self && "forEach" in self.DOMTokenList.prototype)) {
        (function(global2) {
          global2.DOMTokenList.prototype.forEach = global2.Array.prototype.forEach;
          var e = document.createElement("span");
          if (e.classList && e.classList.constructor && e.classList.constructor.prototype && !e.classList.constructor.prototype.forEach) {
            e.classList.constructor.prototype.forEach = global2.Array.prototype.forEach;
          }
        })(self);
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.@@iterator.js
var DOMTokenList_prototype_iterator_exports = {};
var init_DOMTokenList_prototype_iterator = __esm({
  "node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/DOMTokenList.prototype.@@iterator.js"() {
    init_ArrayIterator();
    init_Iterator();
    init_DOMTokenList();
    (function(undefined2) {
      if (!("Symbol" in self && "iterator" in self.Symbol && function() {
        try {
          var t = document.createElement("div");
          return !(!t.classList || !t.classList[self.Symbol.iterator]);
        } catch (t2) {
          return false;
        }
      }())) {
        (function(global2) {
          global2.DOMTokenList.prototype[global2.Symbol.iterator] = function() {
            return new ArrayIterator_default(this);
          };
          var e = document.createElement("span");
          if (e.classList && e.classList.constructor && e.classList.constructor.prototype && !e.classList.constructor.prototype[global2.Symbol.iterator]) {
            e.classList.constructor.prototype[global2.Symbol.iterator] = function() {
              return new ArrayIterator_default(this);
            };
          }
        })(self);
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/helpers/_mutation.js
var init_mutation = __esm({
  "node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/helpers/_mutation.js"() {
  }
});

// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/Element.prototype.remove.js
var Element_prototype_remove_exports = {};
var init_Element_prototype_remove = __esm({
  "node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/Element.prototype.remove.js"() {
    init_mutation();
    (function(undefined2) {
      if (!("Element" in self && "remove" in Element.prototype)) {
        Document.prototype.remove = Element.prototype.remove = function remove() {
          if (this.parentNode) {
            this.parentNode.removeChild(this);
          }
        };
        if ("Text" in self) {
          Text.prototype.remove = Element.prototype.remove;
        }
        (function() {
          var originalRemove = HTMLSelectElement.prototype.remove;
          HTMLSelectElement.prototype.remove = function remove(index) {
            if (arguments.length === 0) {
              return Element.prototype.remove.call(this);
            }
            return originalRemove.call(this, index);
          };
        })();
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/CharacterData.prototype.remove.js
var CharacterData_prototype_remove_exports = {};
var init_CharacterData_prototype_remove = __esm({
  "node_modules/.pnpm/@[email protected]/node_modules/@mrhenry/core-web/modules/CharacterData.prototype.remove.js"() {
    init_mutation();
    (function(undefined2) {
      if (!("remove" in CharacterData.prototype)) {
        CharacterData.prototype.remove = Element.prototype.remove;
      }
    }).call("object" === typeof window && window || "object" === typeof self && self || "object" === typeof global && global || {});
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.iterator.js
var require_es_symbol_iterator = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.symbol.iterator.js"() {
    "use strict";
    var defineWellKnownSymbol = require_well_known_symbol_define();
    defineWellKnownSymbol("iterator");
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/proxy-accessor.js
var require_proxy_accessor = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/proxy-accessor.js"(exports2, module2) {
    "use strict";
    var defineProperty = require_object_define_property().f;
    module2.exports = function(Target, Source, key) {
      key in Target || defineProperty(Target, key, {
        configurable: true,
        get: function() {
          return Source[key];
        },
        set: function(it) {
          Source[key] = it;
        }
      });
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/normalize-string-argument.js
var require_normalize_string_argument = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/normalize-string-argument.js"(exports2, module2) {
    "use strict";
    var toString = require_to_string();
    module2.exports = function(argument, $default) {
      return argument === void 0 ? arguments.length < 2 ? "" : $default : toString(argument);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/install-error-cause.js
var require_install_error_cause = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/install-error-cause.js"(exports2, module2) {
    "use strict";
    var isObject2 = require_is_object();
    var createNonEnumerableProperty = require_create_non_enumerable_property();
    module2.exports = function(O, options) {
      if (isObject2(options) && "cause" in options) {
        createNonEnumerableProperty(O, "cause", options.cause);
      }
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/error-stack-clear.js
var require_error_stack_clear = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/error-stack-clear.js"(exports2, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var $Error = Error;
    var replace = uncurryThis("".replace);
    var TEST = function(arg) {
      return String(new $Error(arg).stack);
    }("zxcasd");
    var V8_OR_CHAKRA_STACK_ENTRY = /\n\s*at [^:]*:[^\n]*/;
    var IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);
    module2.exports = function(stack, dropEntries) {
      if (IS_V8_OR_CHAKRA_STACK && typeof stack == "string" && !$Error.prepareStackTrace) {
        while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, "");
      }
      return stack;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/error-stack-installable.js
var require_error_stack_installable = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/error-stack-installable.js"(exports2, module2) {
    "use strict";
    var fails = require_fails();
    var createPropertyDescriptor = require_create_property_descriptor();
    module2.exports = !fails(function() {
      var error = new Error("a");
      if (!("stack" in error)) return true;
      Object.defineProperty(error, "stack", createPropertyDescriptor(1, 7));
      return error.stack !== 7;
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/error-stack-install.js
var require_error_stack_install = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/error-stack-install.js"(exports2, module2) {
    "use strict";
    var createNonEnumerableProperty = require_create_non_enumerable_property();
    var clearErrorStack = require_error_stack_clear();
    var ERROR_STACK_INSTALLABLE = require_error_stack_installable();
    var captureStackTrace = Error.captureStackTrace;
    module2.exports = function(error, C, stack, dropEntries) {
      if (ERROR_STACK_INSTALLABLE) {
        if (captureStackTrace) captureStackTrace(error, C);
        else createNonEnumerableProperty(error, "stack", clearErrorStack(stack, dropEntries));
      }
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/wrap-error-constructor-with-cause.js
var require_wrap_error_constructor_with_cause = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/wrap-error-constructor-with-cause.js"(exports2, module2) {
    "use strict";
    var getBuiltIn = require_get_built_in();
    var hasOwn = require_has_own_property();
    var createNonEnumerableProperty = require_create_non_enumerable_property();
    var isPrototypeOf = require_object_is_prototype_of();
    var setPrototypeOf = require_object_set_prototype_of();
    var copyConstructorProperties = require_copy_constructor_properties();
    var proxyAccessor = require_proxy_accessor();
    var inheritIfRequired = require_inherit_if_required();
    var normalizeStringArgument = require_normalize_string_argument();
    var installErrorCause = require_install_error_cause();
    var installErrorStack = require_error_stack_install();
    var DESCRIPTORS = require_descriptors();
    var IS_PURE = require_is_pure();
    module2.exports = function(FULL_NAME, wrapper, FORCED, IS_AGGREGATE_ERROR) {
      var STACK_TRACE_LIMIT = "stackTraceLimit";
      var OPTIONS_POSITION = IS_AGGREGATE_ERROR ? 2 : 1;
      var path = FULL_NAME.split(".");
      var ERROR_NAME = path[path.length - 1];
      var OriginalError = getBuiltIn.apply(null, path);
      if (!OriginalError) return;
      var OriginalErrorPrototype = OriginalError.prototype;
      if (!IS_PURE && hasOwn(OriginalErrorPrototype, "cause")) delete OriginalErrorPrototype.cause;
      if (!FORCED) return OriginalError;
      var BaseError = getBuiltIn("Error");
      var WrappedError = wrapper(function(a, b) {
        var message = normalizeStringArgument(IS_AGGREGATE_ERROR ? b : a, void 0);
        var result = IS_AGGREGATE_ERROR ? new OriginalError(a) : new OriginalError();
        if (message !== void 0) createNonEnumerableProperty(result, "message", message);
        installErrorStack(result, WrappedError, result.stack, 2);
        if (this && isPrototypeOf(OriginalErrorPrototype, this)) inheritIfRequired(result, this, WrappedError);
        if (arguments.length > OPTIONS_POSITION) installErrorCause(result, arguments[OPTIONS_POSITION]);
        return result;
      });
      WrappedError.prototype = OriginalErrorPrototype;
      if (ERROR_NAME !== "Error") {
        if (setPrototypeOf) setPrototypeOf(WrappedError, BaseError);
        else copyConstructorProperties(WrappedError, BaseError, { name: true });
      } else if (DESCRIPTORS && STACK_TRACE_LIMIT in OriginalError) {
        proxyAccessor(WrappedError, OriginalError, STACK_TRACE_LIMIT);
        proxyAccessor(WrappedError, OriginalError, "prepareStackTrace");
      }
      copyConstructorProperties(WrappedError, OriginalError);
      if (!IS_PURE) try {
        if (OriginalErrorPrototype.name !== ERROR_NAME) {
          createNonEnumerableProperty(OriginalErrorPrototype, "name", ERROR_NAME);
        }
        OriginalErrorPrototype.constructor = WrappedError;
      } catch (error) {
      }
      return WrappedError;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.error.cause.js
var require_es_error_cause = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.error.cause.js"() {
    "use strict";
    var $ = require_export();
    var globalThis2 = require_global_this();
    var apply = require_function_apply();
    var wrapErrorConstructorWithCause = require_wrap_error_constructor_with_cause();
    var WEB_ASSEMBLY = "WebAssembly";
    var WebAssembly = globalThis2[WEB_ASSEMBLY];
    var FORCED = new Error("e", { cause: 7 }).cause !== 7;
    var exportGlobalErrorCauseWrapper = function(ERROR_NAME, wrapper) {
      var O = {};
      O[ERROR_NAME] = wrapErrorConstructorWithCause(ERROR_NAME, wrapper, FORCED);
      $({ global: true, constructor: true, arity: 1, forced: FORCED }, O);
    };
    var exportWebAssemblyErrorCauseWrapper = function(ERROR_NAME, wrapper) {
      if (WebAssembly && WebAssembly[ERROR_NAME]) {
        var O = {};
        O[ERROR_NAME] = wrapErrorConstructorWithCause(WEB_ASSEMBLY + "." + ERROR_NAME, wrapper, FORCED);
        $({ target: WEB_ASSEMBLY, stat: true, constructor: true, arity: 1, forced: FORCED }, O);
      }
    };
    exportGlobalErrorCauseWrapper("Error", function(init) {
      return function Error2(message) {
        return apply(init, this, arguments);
      };
    });
    exportGlobalErrorCauseWrapper("EvalError", function(init) {
      return function EvalError(message) {
        return apply(init, this, arguments);
      };
    });
    exportGlobalErrorCauseWrapper("RangeError", function(init) {
      return function RangeError(message) {
        return apply(init, this, arguments);
      };
    });
    exportGlobalErrorCauseWrapper("ReferenceError", function(init) {
      return function ReferenceError2(message) {
        return apply(init, this, arguments);
      };
    });
    exportGlobalErrorCauseWrapper("SyntaxError", function(init) {
      return function SyntaxError2(message) {
        return apply(init, this, arguments);
      };
    });
    exportGlobalErrorCauseWrapper("TypeError", function(init) {
      return function TypeError2(message) {
        return apply(init, this, arguments);
      };
    });
    exportGlobalErrorCauseWrapper("URIError", function(init) {
      return function URIError(message) {
        return apply(init, this, arguments);
      };
    });
    exportWebAssemblyErrorCauseWrapper("CompileError", function(init) {
      return function CompileError(message) {
        return apply(init, this, arguments);
      };
    });
    exportWebAssemblyErrorCauseWrapper("LinkError", function(init) {
      return function LinkError(message) {
        return apply(init, this, arguments);
      };
    });
    exportWebAssemblyErrorCauseWrapper("RuntimeError", function(init) {
      return function RuntimeError(message) {
        return apply(init, this, arguments);
      };
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/error-to-string.js
var require_error_to_string = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/error-to-string.js"(exports2, module2) {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var fails = require_fails();
    var anObject = require_an_object();
    var normalizeStringArgument = require_normalize_string_argument();
    var nativeErrorToString = Error.prototype.toString;
    var INCORRECT_TO_STRING = fails(function() {
      if (DESCRIPTORS) {
        var object = Object.create(Object.defineProperty({}, "name", { get: function() {
          return this === object;
        } }));
        if (nativeErrorToString.call(object) !== "true") return true;
      }
      return nativeErrorToString.call({ message: 1, name: 2 }) !== "2: 1" || nativeErrorToString.call({}) !== "Error";
    });
    module2.exports = INCORRECT_TO_STRING ? function toString() {
      var O = anObject(this);
      var name = normalizeStringArgument(O.name, "Error");
      var message = normalizeStringArgument(O.message);
      return !name ? message : !message ? name : name + ": " + message;
    } : nativeErrorToString;
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.error.to-string.js
var require_es_error_to_string = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.error.to-string.js"() {
    "use strict";
    var defineBuiltIn = require_define_built_in();
    var errorToString = require_error_to_string();
    var ErrorPrototype = Error.prototype;
    if (ErrorPrototype.toString !== errorToString) {
      defineBuiltIn(ErrorPrototype, "toString", errorToString);
    }
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-method-has-species-support.js
var require_array_method_has_species_support = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-method-has-species-support.js"(exports2, module2) {
    "use strict";
    var fails = require_fails();
    var wellKnownSymbol = require_well_known_symbol();
    var V8_VERSION = require_environment_v8_version();
    var SPECIES = wellKnownSymbol("species");
    module2.exports = function(METHOD_NAME) {
      return V8_VERSION >= 51 || !fails(function() {
        var array = [];
        var constructor = array.constructor = {};
        constructor[SPECIES] = function() {
          return { foo: 1 };
        };
        return array[METHOD_NAME](Boolean).foo !== 1;
      });
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.filter.js
var require_es_array_filter = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.filter.js"() {
    "use strict";
    var $ = require_export();
    var $filter = require_array_iteration().filter;
    var arrayMethodHasSpeciesSupport = require_array_method_has_species_support();
    var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("filter");
    $({ target: "Array", proto: true, forced: !HAS_SPECIES_SUPPORT }, {
      filter: function filter(callbackfn) {
        return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : void 0);
      }
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-method-is-strict.js
var require_array_method_is_strict = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-method-is-strict.js"(exports2, module2) {
    "use strict";
    var fails = require_fails();
    module2.exports = function(METHOD_NAME, argument) {
      var method = [][METHOD_NAME];
      return !!method && fails(function() {
        method.call(null, argument || function() {
          return 1;
        }, 1);
      });
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-for-each.js
var require_array_for_each = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-for-each.js"(exports2, module2) {
    "use strict";
    var $forEach = require_array_iteration().forEach;
    var arrayMethodIsStrict = require_array_method_is_strict();
    var STRICT_METHOD = arrayMethodIsStrict("forEach");
    module2.exports = !STRICT_METHOD ? function forEach2(callbackfn) {
      return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : void 0);
    } : [].forEach;
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.for-each.js
var require_es_array_for_each = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.for-each.js"() {
    "use strict";
    var $ = require_export();
    var forEach2 = require_array_for_each();
    $({ target: "Array", proto: true, forced: [].forEach !== forEach2 }, {
      forEach: forEach2
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-close.js
var require_iterator_close = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-close.js"(exports2, module2) {
    "use strict";
    var call = require_function_call();
    var anObject = require_an_object();
    var getMethod = require_get_method();
    module2.exports = function(iterator, kind, value) {
      var innerResult, innerError;
      anObject(iterator);
      try {
        innerResult = getMethod(iterator, "return");
        if (!innerResult) {
          if (kind === "throw") throw value;
          return value;
        }
        innerResult = call(innerResult, iterator);
      } catch (error) {
        innerError = true;
        innerResult = error;
      }
      if (kind === "throw") throw value;
      if (innerError) throw innerResult;
      anObject(innerResult);
      return value;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/call-with-safe-iteration-closing.js
var require_call_with_safe_iteration_closing = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/call-with-safe-iteration-closing.js"(exports2, module2) {
    "use strict";
    var anObject = require_an_object();
    var iteratorClose = require_iterator_close();
    module2.exports = function(iterator, fn, value, ENTRIES) {
      try {
        return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);
      } catch (error) {
        iteratorClose(iterator, "throw", error);
      }
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterators.js
var require_iterators = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterators.js"(exports2, module2) {
    "use strict";
    module2.exports = {};
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-array-iterator-method.js
var require_is_array_iterator_method = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-array-iterator-method.js"(exports2, module2) {
    "use strict";
    var wellKnownSymbol = require_well_known_symbol();
    var Iterators = require_iterators();
    var ITERATOR = wellKnownSymbol("iterator");
    var ArrayPrototype = Array.prototype;
    module2.exports = function(it) {
      return it !== void 0 && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/create-property.js
var require_create_property = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/create-property.js"(exports2, module2) {
    "use strict";
    var DESCRIPTORS = require_descriptors();
    var definePropertyModule = require_object_define_property();
    var createPropertyDescriptor = require_create_property_descriptor();
    module2.exports = function(object, key, value) {
      if (DESCRIPTORS) definePropertyModule.f(object, key, createPropertyDescriptor(0, value));
      else object[key] = value;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-iterator-method.js
var require_get_iterator_method = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-iterator-method.js"(exports2, module2) {
    "use strict";
    var classof = require_classof();
    var getMethod = require_get_method();
    var isNullOrUndefined = require_is_null_or_undefined();
    var Iterators = require_iterators();
    var wellKnownSymbol = require_well_known_symbol();
    var ITERATOR = wellKnownSymbol("iterator");
    module2.exports = function(it) {
      if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR) || getMethod(it, "@@iterator") || Iterators[classof(it)];
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-iterator.js
var require_get_iterator = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-iterator.js"(exports2, module2) {
    "use strict";
    var call = require_function_call();
    var aCallable = require_a_callable();
    var anObject = require_an_object();
    var tryToString = require_try_to_string();
    var getIteratorMethod = require_get_iterator_method();
    var $TypeError = TypeError;
    module2.exports = function(argument, usingIterator) {
      var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;
      if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));
      throw new $TypeError(tryToString(argument) + " is not iterable");
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-from.js
var require_array_from = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-from.js"(exports2, module2) {
    "use strict";
    var bind = require_function_bind_context();
    var call = require_function_call();
    var toObject = require_to_object();
    var callWithSafeIterationClosing = require_call_with_safe_iteration_closing();
    var isArrayIteratorMethod = require_is_array_iterator_method();
    var isConstructor = require_is_constructor();
    var lengthOfArrayLike = require_length_of_array_like();
    var createProperty = require_create_property();
    var getIterator = require_get_iterator();
    var getIteratorMethod = require_get_iterator_method();
    var $Array = Array;
    module2.exports = function from(arrayLike) {
      var O = toObject(arrayLike);
      var IS_CONSTRUCTOR = isConstructor(this);
      var argumentsLength = arguments.length;
      var mapfn = argumentsLength > 1 ? arguments[1] : void 0;
      var mapping = mapfn !== void 0;
      if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : void 0);
      var iteratorMethod = getIteratorMethod(O);
      var index = 0;
      var length, result, step, iterator, next, value;
      if (iteratorMethod && !(this === $Array && isArrayIteratorMethod(iteratorMethod))) {
        result = IS_CONSTRUCTOR ? new this() : [];
        iterator = getIterator(O, iteratorMethod);
        next = iterator.next;
        for (; !(step = call(next, iterator)).done; index++) {
          value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;
          createProperty(result, index, value);
        }
      } else {
        length = lengthOfArrayLike(O);
        result = IS_CONSTRUCTOR ? new this(length) : $Array(length);
        for (; length > index; index++) {
          value = mapping ? mapfn(O[index], index) : O[index];
          createProperty(result, index, value);
        }
      }
      result.length = index;
      return result;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/check-correctness-of-iteration.js
var require_check_correctness_of_iteration = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/check-correctness-of-iteration.js"(exports2, module2) {
    "use strict";
    var wellKnownSymbol = require_well_known_symbol();
    var ITERATOR = wellKnownSymbol("iterator");
    var SAFE_CLOSING = false;
    try {
      called = 0;
      iteratorWithReturn = {
        next: function() {
          return { done: !!called++ };
        },
        "return": function() {
          SAFE_CLOSING = true;
        }
      };
      iteratorWithReturn[ITERATOR] = function() {
        return this;
      };
      Array.from(iteratorWithReturn, function() {
        throw 2;
      });
    } catch (error) {
    }
    var called;
    var iteratorWithReturn;
    module2.exports = function(exec, SKIP_CLOSING) {
      try {
        if (!SKIP_CLOSING && !SAFE_CLOSING) return false;
      } catch (error) {
        return false;
      }
      var ITERATION_SUPPORT = false;
      try {
        var object = {};
        object[ITERATOR] = function() {
          return {
            next: function() {
              return { done: ITERATION_SUPPORT = true };
            }
          };
        };
        exec(object);
      } catch (error) {
      }
      return ITERATION_SUPPORT;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.from.js
var require_es_array_from = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.from.js"() {
    "use strict";
    var $ = require_export();
    var from = require_array_from();
    var checkCorrectnessOfIteration = require_check_correctness_of_iteration();
    var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function(iterable) {
      Array.from(iterable);
    });
    $({ target: "Array", stat: true, forced: INCORRECT_ITERATION }, {
      from
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/add-to-unscopables.js
var require_add_to_unscopables = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/add-to-unscopables.js"(exports2, module2) {
    "use strict";
    var wellKnownSymbol = require_well_known_symbol();
    var create = require_object_create();
    var defineProperty = require_object_define_property().f;
    var UNSCOPABLES = wellKnownSymbol("unscopables");
    var ArrayPrototype = Array.prototype;
    if (ArrayPrototype[UNSCOPABLES] === void 0) {
      defineProperty(ArrayPrototype, UNSCOPABLES, {
        configurable: true,
        value: create(null)
      });
    }
    module2.exports = function(key) {
      ArrayPrototype[UNSCOPABLES][key] = true;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.includes.js
var require_es_array_includes = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.includes.js"() {
    "use strict";
    var $ = require_export();
    var $includes = require_array_includes().includes;
    var fails = require_fails();
    var addToUnscopables = require_add_to_unscopables();
    var BROKEN_ON_SPARSE = fails(function() {
      return !Array(1).includes();
    });
    $({ target: "Array", proto: true, forced: BROKEN_ON_SPARSE }, {
      includes: function includes(el) {
        return $includes(this, el, arguments.length > 1 ? arguments[1] : void 0);
      }
    });
    addToUnscopables("includes");
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.index-of.js
var require_es_array_index_of = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.index-of.js"() {
    "use strict";
    var $ = require_export();
    var uncurryThis = require_function_uncurry_this_clause();
    var $indexOf = require_array_includes().indexOf;
    var arrayMethodIsStrict = require_array_method_is_strict();
    var nativeIndexOf = uncurryThis([].indexOf);
    var NEGATIVE_ZERO = !!nativeIndexOf && 1 / nativeIndexOf([1], 1, -0) < 0;
    var FORCED = NEGATIVE_ZERO || !arrayMethodIsStrict("indexOf");
    $({ target: "Array", proto: true, forced: FORCED }, {
      indexOf: function indexOf(searchElement) {
        var fromIndex = arguments.length > 1 ? arguments[1] : void 0;
        return NEGATIVE_ZERO ? nativeIndexOf(this, searchElement, fromIndex) || 0 : $indexOf(this, searchElement, fromIndex);
      }
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/correct-prototype-getter.js
var require_correct_prototype_getter = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/correct-prototype-getter.js"(exports2, module2) {
    "use strict";
    var fails = require_fails();
    module2.exports = !fails(function() {
      function F() {
      }
      F.prototype.constructor = null;
      return Object.getPrototypeOf(new F()) !== F.prototype;
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-prototype-of.js
var require_object_get_prototype_of = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-get-prototype-of.js"(exports2, module2) {
    "use strict";
    var hasOwn = require_has_own_property();
    var isCallable = require_is_callable();
    var toObject = require_to_object();
    var sharedKey = require_shared_key();
    var CORRECT_PROTOTYPE_GETTER = require_correct_prototype_getter();
    var IE_PROTO = sharedKey("IE_PROTO");
    var $Object = Object;
    var ObjectPrototype = $Object.prototype;
    module2.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function(O) {
      var object = toObject(O);
      if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];
      var constructor = object.constructor;
      if (isCallable(constructor) && object instanceof constructor) {
        return constructor.prototype;
      }
      return object instanceof $Object ? ObjectPrototype : null;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterators-core.js
var require_iterators_core = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterators-core.js"(exports2, module2) {
    "use strict";
    var fails = require_fails();
    var isCallable = require_is_callable();
    var isObject2 = require_is_object();
    var create = require_object_create();
    var getPrototypeOf = require_object_get_prototype_of();
    var defineBuiltIn = require_define_built_in();
    var wellKnownSymbol = require_well_known_symbol();
    var IS_PURE = require_is_pure();
    var ITERATOR = wellKnownSymbol("iterator");
    var BUGGY_SAFARI_ITERATORS = false;
    var IteratorPrototype;
    var PrototypeOfArrayIteratorPrototype;
    var arrayIterator;
    if ([].keys) {
      arrayIterator = [].keys();
      if (!("next" in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;
      else {
        PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));
        if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;
      }
    }
    var NEW_ITERATOR_PROTOTYPE = !isObject2(IteratorPrototype) || fails(function() {
      var test = {};
      return IteratorPrototype[ITERATOR].call(test) !== test;
    });
    if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};
    else if (IS_PURE) IteratorPrototype = create(IteratorPrototype);
    if (!isCallable(IteratorPrototype[ITERATOR])) {
      defineBuiltIn(IteratorPrototype, ITERATOR, function() {
        return this;
      });
    }
    module2.exports = {
      IteratorPrototype,
      BUGGY_SAFARI_ITERATORS
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-create-constructor.js
var require_iterator_create_constructor = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-create-constructor.js"(exports2, module2) {
    "use strict";
    var IteratorPrototype = require_iterators_core().IteratorPrototype;
    var create = require_object_create();
    var createPropertyDescriptor = require_create_property_descriptor();
    var setToStringTag = require_set_to_string_tag();
    var Iterators = require_iterators();
    var returnThis = function() {
      return this;
    };
    module2.exports = function(IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {
      var TO_STRING_TAG = NAME + " Iterator";
      IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });
      setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);
      Iterators[TO_STRING_TAG] = returnThis;
      return IteratorConstructor;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-define.js
var require_iterator_define = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-define.js"(exports2, module2) {
    "use strict";
    var $ = require_export();
    var call = require_function_call();
    var IS_PURE = require_is_pure();
    var FunctionName = require_function_name();
    var isCallable = require_is_callable();
    var createIteratorConstructor = require_iterator_create_constructor();
    var getPrototypeOf = require_object_get_prototype_of();
    var setPrototypeOf = require_object_set_prototype_of();
    var setToStringTag = require_set_to_string_tag();
    var createNonEnumerableProperty = require_create_non_enumerable_property();
    var defineBuiltIn = require_define_built_in();
    var wellKnownSymbol = require_well_known_symbol();
    var Iterators = require_iterators();
    var IteratorsCore = require_iterators_core();
    var PROPER_FUNCTION_NAME = FunctionName.PROPER;
    var CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;
    var IteratorPrototype = IteratorsCore.IteratorPrototype;
    var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;
    var ITERATOR = wellKnownSymbol("iterator");
    var KEYS = "keys";
    var VALUES = "values";
    var ENTRIES = "entries";
    var returnThis = function() {
      return this;
    };
    module2.exports = function(Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {
      createIteratorConstructor(IteratorConstructor, NAME, next);
      var getIterationMethod = function(KIND) {
        if (KIND === DEFAULT && defaultIterator) return defaultIterator;
        if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) return IterablePrototype[KIND];
        switch (KIND) {
          case KEYS:
            return function keys2() {
              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] || 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;
      if (anyNativeIterator) {
        CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));
        if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {
          if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {
            if (setPrototypeOf) {
              setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);
            } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {
              defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis);
            }
          }
          setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);
          if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;
        }
      }
      if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) {
        if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {
          createNonEnumerableProperty(IterablePrototype, "name", VALUES);
        } else {
          INCORRECT_VALUES_NAME = true;
          defaultIterator = function values() {
            return call(nativeIterator, this);
          };
        }
      }
      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)) {
            defineBuiltIn(IterablePrototype, KEY, methods[KEY]);
          }
        }
        else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);
      }
      if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {
        defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });
      }
      Iterators[NAME] = defaultIterator;
      return methods;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/create-iter-result-object.js
var require_create_iter_result_object = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/create-iter-result-object.js"(exports2, module2) {
    "use strict";
    module2.exports = function(value, done) {
      return { value, done };
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.iterator.js
var require_es_array_iterator = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.iterator.js"(exports2, module2) {
    "use strict";
    var toIndexedObject = require_to_indexed_object();
    var addToUnscopables = require_add_to_unscopables();
    var Iterators = require_iterators();
    var InternalStateModule = require_internal_state();
    var defineProperty = require_object_define_property().f;
    var defineIterator = require_iterator_define();
    var createIterResultObject = require_create_iter_result_object();
    var IS_PURE = require_is_pure();
    var DESCRIPTORS = require_descriptors();
    var ARRAY_ITERATOR = "Array Iterator";
    var setInternalState = InternalStateModule.set;
    var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);
    module2.exports = defineIterator(Array, "Array", function(iterated, kind) {
      setInternalState(this, {
        type: ARRAY_ITERATOR,
        target: toIndexedObject(iterated),
        // target
        index: 0,
        // next index
        kind
        // kind
      });
    }, function() {
      var state = getInternalState(this);
      var target = state.target;
      var index = state.index++;
      if (!target || index >= target.length) {
        state.target = null;
        return createIterResultObject(void 0, true);
      }
      switch (state.kind) {
        case "keys":
          return createIterResultObject(index, false);
        case "values":
          return createIterResultObject(target[index], false);
      }
      return createIterResultObject([index, target[index]], false);
    }, "values");
    var values = Iterators.Arguments = Iterators.Array;
    addToUnscopables("keys");
    addToUnscopables("values");
    addToUnscopables("entries");
    if (!IS_PURE && DESCRIPTORS && values.name !== "values") try {
      defineProperty(values, "name", { value: "values" });
    } catch (error) {
    }
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.join.js
var require_es_array_join = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.join.js"() {
    "use strict";
    var $ = require_export();
    var uncurryThis = require_function_uncurry_this();
    var IndexedObject = require_indexed_object();
    var toIndexedObject = require_to_indexed_object();
    var arrayMethodIsStrict = require_array_method_is_strict();
    var nativeJoin = uncurryThis([].join);
    var ES3_STRINGS = IndexedObject !== Object;
    var FORCED = ES3_STRINGS || !arrayMethodIsStrict("join", ",");
    $({ target: "Array", proto: true, forced: FORCED }, {
      join: function join(separator) {
        return nativeJoin(toIndexedObject(this), separator === void 0 ? "," : separator);
      }
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.map.js
var require_es_array_map = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.map.js"() {
    "use strict";
    var $ = require_export();
    var $map = require_array_iteration().map;
    var arrayMethodHasSpeciesSupport = require_array_method_has_species_support();
    var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("map");
    $({ target: "Array", proto: true, forced: !HAS_SPECIES_SUPPORT }, {
      map: function map(callbackfn) {
        return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : void 0);
      }
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-reduce.js
var require_array_reduce = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-reduce.js"(exports2, module2) {
    "use strict";
    var aCallable = require_a_callable();
    var toObject = require_to_object();
    var IndexedObject = require_indexed_object();
    var lengthOfArrayLike = require_length_of_array_like();
    var $TypeError = TypeError;
    var REDUCE_EMPTY = "Reduce of empty array with no initial value";
    var createMethod = function(IS_RIGHT) {
      return function(that, callbackfn, argumentsLength, memo2) {
        var O = toObject(that);
        var self2 = IndexedObject(O);
        var length = lengthOfArrayLike(O);
        aCallable(callbackfn);
        if (length === 0 && argumentsLength < 2) throw new $TypeError(REDUCE_EMPTY);
        var index = IS_RIGHT ? length - 1 : 0;
        var i = IS_RIGHT ? -1 : 1;
        if (argumentsLength < 2) while (true) {
          if (index in self2) {
            memo2 = self2[index];
            index += i;
            break;
          }
          index += i;
          if (IS_RIGHT ? index < 0 : length <= index) {
            throw new $TypeError(REDUCE_EMPTY);
          }
        }
        for (; IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self2) {
          memo2 = callbackfn(memo2, self2[index], index, O);
        }
        return memo2;
      };
    };
    module2.exports = {
      // `Array.prototype.reduce` method
      // https://tc39.es/ecma262/#sec-array.prototype.reduce
      left: createMethod(false),
      // `Array.prototype.reduceRight` method
      // https://tc39.es/ecma262/#sec-array.prototype.reduceright
      right: createMethod(true)
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/environment.js
var require_environment = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/environment.js"(exports2, module2) {
    "use strict";
    var globalThis2 = require_global_this();
    var userAgent = require_environment_user_agent();
    var classof = require_classof_raw();
    var userAgentStartsWith = function(string) {
      return userAgent.slice(0, string.length) === string;
    };
    module2.exports = function() {
      if (userAgentStartsWith("Bun/")) return "BUN";
      if (userAgentStartsWith("Cloudflare-Workers")) return "CLOUDFLARE";
      if (userAgentStartsWith("Deno/")) return "DENO";
      if (userAgentStartsWith("Node.js/")) return "NODE";
      if (globalThis2.Bun && typeof Bun.version == "string") return "BUN";
      if (globalThis2.Deno && typeof Deno.version == "object") return "DENO";
      if (classof(globalThis2.process) === "process") return "NODE";
      if (globalThis2.window && globalThis2.document) return "BROWSER";
      return "REST";
    }();
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/environment-is-node.js
var require_environment_is_node = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/environment-is-node.js"(exports2, module2) {
    "use strict";
    var ENVIRONMENT = require_environment();
    module2.exports = ENVIRONMENT === "NODE";
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.reduce.js
var require_es_array_reduce = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.reduce.js"() {
    "use strict";
    var $ = require_export();
    var $reduce = require_array_reduce().left;
    var arrayMethodIsStrict = require_array_method_is_strict();
    var CHROME_VERSION = require_environment_v8_version();
    var IS_NODE = require_environment_is_node();
    var CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;
    var FORCED = CHROME_BUG || !arrayMethodIsStrict("reduce");
    $({ target: "Array", proto: true, forced: FORCED }, {
      reduce: function reduce(callbackfn) {
        var length = arguments.length;
        return $reduce(this, callbackfn, length, length > 1 ? arguments[1] : void 0);
      }
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.slice.js
var require_es_array_slice = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.slice.js"() {
    "use strict";
    var $ = require_export();
    var isArray = require_is_array();
    var isConstructor = require_is_constructor();
    var isObject2 = require_is_object();
    var toAbsoluteIndex = require_to_absolute_index();
    var lengthOfArrayLike = require_length_of_array_like();
    var toIndexedObject = require_to_indexed_object();
    var createProperty = require_create_property();
    var wellKnownSymbol = require_well_known_symbol();
    var arrayMethodHasSpeciesSupport = require_array_method_has_species_support();
    var nativeSlice = require_array_slice();
    var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport("slice");
    var SPECIES = wellKnownSymbol("species");
    var $Array = Array;
    var max = Math.max;
    $({ target: "Array", proto: true, forced: !HAS_SPECIES_SUPPORT }, {
      slice: function slice(start, end) {
        var O = toIndexedObject(this);
        var length = lengthOfArrayLike(O);
        var k = toAbsoluteIndex(start, length);
        var fin = toAbsoluteIndex(end === void 0 ? length : end, length);
        var Constructor, result, n;
        if (isArray(O)) {
          Constructor = O.constructor;
          if (isConstructor(Constructor) && (Constructor === $Array || isArray(Constructor.prototype))) {
            Constructor = void 0;
          } else if (isObject2(Constructor)) {
            Constructor = Constructor[SPECIES];
            if (Constructor === null) Constructor = void 0;
          }
          if (Constructor === $Array || Constructor === void 0) {
            return nativeSlice(O, k, fin);
          }
        }
        result = new (Constructor === void 0 ? $Array : Constructor)(max(fin - k, 0));
        for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);
        result.length = n;
        return result;
      }
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/delete-property-or-throw.js
var require_delete_property_or_throw = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/delete-property-or-throw.js"(exports2, module2) {
    "use strict";
    var tryToString = require_try_to_string();
    var $TypeError = TypeError;
    module2.exports = function(O, P) {
      if (!delete O[P]) throw new $TypeError("Cannot delete property " + tryToString(P) + " of " + tryToString(O));
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.unshift.js
var require_es_array_unshift = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.array.unshift.js"() {
    "use strict";
    var $ = require_export();
    var toObject = require_to_object();
    var lengthOfArrayLike = require_length_of_array_like();
    var setArrayLength = require_array_set_length();
    var deletePropertyOrThrow = require_delete_property_or_throw();
    var doesNotExceedSafeInteger = require_does_not_exceed_safe_integer();
    var INCORRECT_RESULT = [].unshift(0) !== 1;
    var properErrorOnNonWritableLength = function() {
      try {
        Object.defineProperty([], "length", { writable: false }).unshift();
      } catch (error) {
        return error instanceof TypeError;
      }
    };
    var FORCED = INCORRECT_RESULT || !properErrorOnNonWritableLength();
    $({ target: "Array", proto: true, arity: 1, forced: FORCED }, {
      // eslint-disable-next-line no-unused-vars -- required for `.length`
      unshift: function unshift(item) {
        var O = toObject(this);
        var len = lengthOfArrayLike(O);
        var argCount = arguments.length;
        if (argCount) {
          doesNotExceedSafeInteger(len + argCount);
          var k = len;
          while (k--) {
            var to = k + argCount;
            if (k in O) O[to] = O[k];
            else deletePropertyOrThrow(O, to);
          }
          for (var j = 0; j < argCount; j++) {
            O[j] = arguments[j];
          }
        }
        return setArrayLength(O, len + argCount);
      }
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/an-instance.js
var require_an_instance = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/an-instance.js"(exports2, module2) {
    "use strict";
    var isPrototypeOf = require_object_is_prototype_of();
    var $TypeError = TypeError;
    module2.exports = function(it, Prototype) {
      if (isPrototypeOf(Prototype, it)) return it;
      throw new $TypeError("Incorrect invocation");
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.iterator.constructor.js
var require_es_iterator_constructor = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.iterator.constructor.js"() {
    "use strict";
    var $ = require_export();
    var globalThis2 = require_global_this();
    var anInstance = require_an_instance();
    var anObject = require_an_object();
    var isCallable = require_is_callable();
    var getPrototypeOf = require_object_get_prototype_of();
    var defineBuiltInAccessor = require_define_built_in_accessor();
    var createProperty = require_create_property();
    var fails = require_fails();
    var hasOwn = require_has_own_property();
    var wellKnownSymbol = require_well_known_symbol();
    var IteratorPrototype = require_iterators_core().IteratorPrototype;
    var DESCRIPTORS = require_descriptors();
    var IS_PURE = require_is_pure();
    var CONSTRUCTOR = "constructor";
    var ITERATOR = "Iterator";
    var TO_STRING_TAG = wellKnownSymbol("toStringTag");
    var $TypeError = TypeError;
    var NativeIterator = globalThis2[ITERATOR];
    var FORCED = IS_PURE || !isCallable(NativeIterator) || NativeIterator.prototype !== IteratorPrototype || !fails(function() {
      NativeIterator({});
    });
    var IteratorConstructor = function Iterator2() {
      anInstance(this, IteratorPrototype);
      if (getPrototypeOf(this) === IteratorPrototype) throw new $TypeError("Abstract class Iterator not directly constructable");
    };
    var defineIteratorPrototypeAccessor = function(key, value) {
      if (DESCRIPTORS) {
        defineBuiltInAccessor(IteratorPrototype, key, {
          configurable: true,
          get: function() {
            return value;
          },
          set: function(replacement) {
            anObject(this);
            if (this === IteratorPrototype) throw new $TypeError("You can't redefine this property");
            if (hasOwn(this, key)) this[key] = replacement;
            else createProperty(this, key, replacement);
          }
        });
      } else IteratorPrototype[key] = value;
    };
    if (!hasOwn(IteratorPrototype, TO_STRING_TAG)) defineIteratorPrototypeAccessor(TO_STRING_TAG, ITERATOR);
    if (FORCED || !hasOwn(IteratorPrototype, CONSTRUCTOR) || IteratorPrototype[CONSTRUCTOR] === Object) {
      defineIteratorPrototypeAccessor(CONSTRUCTOR, IteratorConstructor);
    }
    IteratorConstructor.prototype = IteratorPrototype;
    $({ global: true, constructor: true, forced: FORCED }, {
      Iterator: IteratorConstructor
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-iterator-direct.js
var require_get_iterator_direct = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-iterator-direct.js"(exports2, module2) {
    "use strict";
    module2.exports = function(obj) {
      return {
        iterator: obj,
        next: obj.next,
        done: false
      };
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/define-built-ins.js
var require_define_built_ins = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/define-built-ins.js"(exports2, module2) {
    "use strict";
    var defineBuiltIn = require_define_built_in();
    module2.exports = function(target, src, options) {
      for (var key in src) defineBuiltIn(target, key, src[key], options);
      return target;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-create-proxy.js
var require_iterator_create_proxy = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-create-proxy.js"(exports2, module2) {
    "use strict";
    var call = require_function_call();
    var create = require_object_create();
    var createNonEnumerableProperty = require_create_non_enumerable_property();
    var defineBuiltIns = require_define_built_ins();
    var wellKnownSymbol = require_well_known_symbol();
    var InternalStateModule = require_internal_state();
    var getMethod = require_get_method();
    var IteratorPrototype = require_iterators_core().IteratorPrototype;
    var createIterResultObject = require_create_iter_result_object();
    var iteratorClose = require_iterator_close();
    var TO_STRING_TAG = wellKnownSymbol("toStringTag");
    var ITERATOR_HELPER = "IteratorHelper";
    var WRAP_FOR_VALID_ITERATOR = "WrapForValidIterator";
    var setInternalState = InternalStateModule.set;
    var createIteratorProxyPrototype = function(IS_ITERATOR) {
      var getInternalState = InternalStateModule.getterFor(IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER);
      return defineBuiltIns(create(IteratorPrototype), {
        next: function next() {
          var state = getInternalState(this);
          if (IS_ITERATOR) return state.nextHandler();
          if (state.done) return createIterResultObject(void 0, true);
          try {
            var result = state.nextHandler();
            return state.returnHandlerResult ? result : createIterResultObject(result, state.done);
          } catch (error) {
            state.done = true;
            throw error;
          }
        },
        "return": function() {
          var state = getInternalState(this);
          var iterator = state.iterator;
          state.done = true;
          if (IS_ITERATOR) {
            var returnMethod = getMethod(iterator, "return");
            return returnMethod ? call(returnMethod, iterator) : createIterResultObject(void 0, true);
          }
          if (state.inner) try {
            iteratorClose(state.inner.iterator, "normal");
          } catch (error) {
            return iteratorClose(iterator, "throw", error);
          }
          if (iterator) iteratorClose(iterator, "normal");
          return createIterResultObject(void 0, true);
        }
      });
    };
    var WrapForValidIteratorPrototype = createIteratorProxyPrototype(true);
    var IteratorHelperPrototype = createIteratorProxyPrototype(false);
    createNonEnumerableProperty(IteratorHelperPrototype, TO_STRING_TAG, "Iterator Helper");
    module2.exports = function(nextHandler, IS_ITERATOR, RETURN_HANDLER_RESULT) {
      var IteratorProxy = function Iterator2(record, state) {
        if (state) {
          state.iterator = record.iterator;
          state.next = record.next;
        } else state = record;
        state.type = IS_ITERATOR ? WRAP_FOR_VALID_ITERATOR : ITERATOR_HELPER;
        state.returnHandlerResult = !!RETURN_HANDLER_RESULT;
        state.nextHandler = nextHandler;
        state.counter = 0;
        state.done = false;
        setInternalState(this, state);
      };
      IteratorProxy.prototype = IS_ITERATOR ? WrapForValidIteratorPrototype : IteratorHelperPrototype;
      return IteratorProxy;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.iterator.filter.js
var require_es_iterator_filter = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.iterator.filter.js"() {
    "use strict";
    var $ = require_export();
    var call = require_function_call();
    var aCallable = require_a_callable();
    var anObject = require_an_object();
    var getIteratorDirect = require_get_iterator_direct();
    var createIteratorProxy = require_iterator_create_proxy();
    var callWithSafeIterationClosing = require_call_with_safe_iteration_closing();
    var IS_PURE = require_is_pure();
    var IteratorProxy = createIteratorProxy(function() {
      var iterator = this.iterator;
      var predicate = this.predicate;
      var next = this.next;
      var result, done, value;
      while (true) {
        result = anObject(call(next, iterator));
        done = this.done = !!result.done;
        if (done) return;
        value = result.value;
        if (callWithSafeIterationClosing(iterator, predicate, [value, this.counter++], true)) return value;
      }
    });
    $({ target: "Iterator", proto: true, real: true, forced: IS_PURE }, {
      filter: function filter(predicate) {
        anObject(this);
        aCallable(predicate);
        return new IteratorProxy(getIteratorDirect(this), {
          predicate
        });
      }
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterate.js
var require_iterate = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterate.js"(exports2, module2) {
    "use strict";
    var bind = require_function_bind_context();
    var call = require_function_call();
    var anObject = require_an_object();
    var tryToString = require_try_to_string();
    var isArrayIteratorMethod = require_is_array_iterator_method();
    var lengthOfArrayLike = require_length_of_array_like();
    var isPrototypeOf = require_object_is_prototype_of();
    var getIterator = require_get_iterator();
    var getIteratorMethod = require_get_iterator_method();
    var iteratorClose = require_iterator_close();
    var $TypeError = TypeError;
    var Result = function(stopped, result) {
      this.stopped = stopped;
      this.result = result;
    };
    var ResultPrototype = Result.prototype;
    module2.exports = function(iterable, unboundFunction, options) {
      var that = options && options.that;
      var AS_ENTRIES = !!(options && options.AS_ENTRIES);
      var IS_RECORD = !!(options && options.IS_RECORD);
      var IS_ITERATOR = !!(options && options.IS_ITERATOR);
      var INTERRUPTED = !!(options && options.INTERRUPTED);
      var fn = bind(unboundFunction, that);
      var iterator, iterFn, index, length, result, next, step;
      var stop = function(condition) {
        if (iterator) iteratorClose(iterator, "normal", condition);
        return new Result(true, condition);
      };
      var callFn = function(value) {
        if (AS_ENTRIES) {
          anObject(value);
          return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);
        }
        return INTERRUPTED ? fn(value, stop) : fn(value);
      };
      if (IS_RECORD) {
        iterator = iterable.iterator;
      } else if (IS_ITERATOR) {
        iterator = iterable;
      } else {
        iterFn = getIteratorMethod(iterable);
        if (!iterFn) throw new $TypeError(tryToString(iterable) + " is not iterable");
        if (isArrayIteratorMethod(iterFn)) {
          for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {
            result = callFn(iterable[index]);
            if (result && isPrototypeOf(ResultPrototype, result)) return result;
          }
          return new Result(false);
        }
        iterator = getIterator(iterable, iterFn);
      }
      next = IS_RECORD ? iterable.next : iterator.next;
      while (!(step = call(next, iterator)).done) {
        try {
          result = callFn(step.value);
        } catch (error) {
          iteratorClose(iterator, "throw", error);
        }
        if (typeof result == "object" && result && isPrototypeOf(ResultPrototype, result)) return result;
      }
      return new Result(false);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.iterator.for-each.js
var require_es_iterator_for_each = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.iterator.for-each.js"() {
    "use strict";
    var $ = require_export();
    var iterate = require_iterate();
    var aCallable = require_a_callable();
    var anObject = require_an_object();
    var getIteratorDirect = require_get_iterator_direct();
    $({ target: "Iterator", proto: true, real: true }, {
      forEach: function forEach2(fn) {
        anObject(this);
        aCallable(fn);
        var record = getIteratorDirect(this);
        var counter = 0;
        iterate(record, function(value) {
          fn(value, counter++);
        }, { IS_RECORD: true });
      }
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-map.js
var require_iterator_map = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/iterator-map.js"(exports2, module2) {
    "use strict";
    var call = require_function_call();
    var aCallable = require_a_callable();
    var anObject = require_an_object();
    var getIteratorDirect = require_get_iterator_direct();
    var createIteratorProxy = require_iterator_create_proxy();
    var callWithSafeIterationClosing = require_call_with_safe_iteration_closing();
    var IteratorProxy = createIteratorProxy(function() {
      var iterator = this.iterator;
      var result = anObject(call(this.next, iterator));
      var done = this.done = !!result.done;
      if (!done) return callWithSafeIterationClosing(iterator, this.mapper, [result.value, this.counter++], true);
    });
    module2.exports = function map(mapper) {
      anObject(this);
      aCallable(mapper);
      return new IteratorProxy(getIteratorDirect(this), {
        mapper
      });
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.iterator.map.js
var require_es_iterator_map = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.iterator.map.js"() {
    "use strict";
    var $ = require_export();
    var map = require_iterator_map();
    var IS_PURE = require_is_pure();
    $({ target: "Iterator", proto: true, real: true, forced: IS_PURE }, {
      map
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.iterator.reduce.js
var require_es_iterator_reduce = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.iterator.reduce.js"() {
    "use strict";
    var $ = require_export();
    var iterate = require_iterate();
    var aCallable = require_a_callable();
    var anObject = require_an_object();
    var getIteratorDirect = require_get_iterator_direct();
    var $TypeError = TypeError;
    $({ target: "Iterator", proto: true, real: true }, {
      reduce: function reduce(reducer) {
        anObject(this);
        aCallable(reducer);
        var record = getIteratorDirect(this);
        var noInitial = arguments.length < 2;
        var accumulator = noInitial ? void 0 : arguments[1];
        var counter = 0;
        iterate(record, function(value) {
          if (noInitial) {
            noInitial = false;
            accumulator = value;
          } else {
            accumulator = reducer(accumulator, value, counter);
          }
          counter++;
        }, { IS_RECORD: true });
        if (noInitial) throw new $TypeError("Reduce of empty iterator with no initial value");
        return accumulator;
      }
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-buffer-non-extensible.js
var require_array_buffer_non_extensible = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/array-buffer-non-extensible.js"(exports2, module2) {
    "use strict";
    var fails = require_fails();
    module2.exports = fails(function() {
      if (typeof ArrayBuffer == "function") {
        var buffer = new ArrayBuffer(8);
        if (Object.isExtensible(buffer)) Object.defineProperty(buffer, "a", { value: 8 });
      }
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-is-extensible.js
var require_object_is_extensible = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-is-extensible.js"(exports2, module2) {
    "use strict";
    var fails = require_fails();
    var isObject2 = require_is_object();
    var classof = require_classof_raw();
    var ARRAY_BUFFER_NON_EXTENSIBLE = require_array_buffer_non_extensible();
    var $isExtensible = Object.isExtensible;
    var FAILS_ON_PRIMITIVES = fails(function() {
      $isExtensible(1);
    });
    module2.exports = FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE ? function isExtensible(it) {
      if (!isObject2(it)) return false;
      if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) === "ArrayBuffer") return false;
      return $isExtensible ? $isExtensible(it) : true;
    } : $isExtensible;
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/freezing.js
var require_freezing = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/freezing.js"(exports2, module2) {
    "use strict";
    var fails = require_fails();
    module2.exports = !fails(function() {
      return Object.isExtensible(Object.preventExtensions({}));
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/internal-metadata.js
var require_internal_metadata = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/internal-metadata.js"(exports2, module2) {
    "use strict";
    var $ = require_export();
    var uncurryThis = require_function_uncurry_this();
    var hiddenKeys = require_hidden_keys();
    var isObject2 = require_is_object();
    var hasOwn = require_has_own_property();
    var defineProperty = require_object_define_property().f;
    var getOwnPropertyNamesModule = require_object_get_own_property_names();
    var getOwnPropertyNamesExternalModule = require_object_get_own_property_names_external();
    var isExtensible = require_object_is_extensible();
    var uid = require_uid();
    var FREEZING = require_freezing();
    var REQUIRED = false;
    var METADATA = uid("meta");
    var id = 0;
    var setMetadata = function(it) {
      defineProperty(it, METADATA, { value: {
        objectID: "O" + id++,
        // object ID
        weakData: {}
        // weak collections IDs
      } });
    };
    var fastKey = function(it, create) {
      if (!isObject2(it)) return typeof it == "symbol" ? it : (typeof it == "string" ? "S" : "P") + it;
      if (!hasOwn(it, METADATA)) {
        if (!isExtensible(it)) return "F";
        if (!create) return "E";
        setMetadata(it);
      }
      return it[METADATA].objectID;
    };
    var getWeakData = function(it, create) {
      if (!hasOwn(it, METADATA)) {
        if (!isExtensible(it)) return true;
        if (!create) return false;
        setMetadata(it);
      }
      return it[METADATA].weakData;
    };
    var onFreeze = function(it) {
      if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);
      return it;
    };
    var enable = function() {
      meta.enable = function() {
      };
      REQUIRED = true;
      var getOwnPropertyNames = getOwnPropertyNamesModule.f;
      var splice = uncurryThis([].splice);
      var test = {};
      test[METADATA] = 1;
      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(result, i, 1);
              break;
            }
          }
          return result;
        };
        $({ target: "Object", stat: true, forced: true }, {
          getOwnPropertyNames: getOwnPropertyNamesExternalModule.f
        });
      }
    };
    var meta = module2.exports = {
      enable,
      fastKey,
      getWeakData,
      onFreeze
    };
    hiddenKeys[METADATA] = true;
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/collection.js
var require_collection = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/collection.js"(exports2, module2) {
    "use strict";
    var $ = require_export();
    var globalThis2 = require_global_this();
    var uncurryThis = require_function_uncurry_this();
    var isForced = require_is_forced();
    var defineBuiltIn = require_define_built_in();
    var InternalMetadataModule = require_internal_metadata();
    var iterate = require_iterate();
    var anInstance = require_an_instance();
    var isCallable = require_is_callable();
    var isNullOrUndefined = require_is_null_or_undefined();
    var isObject2 = require_is_object();
    var fails = require_fails();
    var checkCorrectnessOfIteration = require_check_correctness_of_iteration();
    var setToStringTag = require_set_to_string_tag();
    var inheritIfRequired = require_inherit_if_required();
    module2.exports = 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 = globalThis2[CONSTRUCTOR_NAME];
      var NativePrototype = NativeConstructor && NativeConstructor.prototype;
      var Constructor = NativeConstructor;
      var exported = {};
      var fixMethod = function(KEY) {
        var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]);
        defineBuiltIn(
          NativePrototype,
          KEY,
          KEY === "add" ? function add(value) {
            uncurriedNativeMethod(this, value === 0 ? 0 : value);
            return this;
          } : KEY === "delete" ? function(key) {
            return IS_WEAK && !isObject2(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);
          } : KEY === "get" ? function get2(key) {
            return IS_WEAK && !isObject2(key) ? void 0 : uncurriedNativeMethod(this, key === 0 ? 0 : key);
          } : KEY === "has" ? function has(key) {
            return IS_WEAK && !isObject2(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);
          } : function set(key, value) {
            uncurriedNativeMethod(this, key === 0 ? 0 : key, value);
            return this;
          }
        );
      };
      var REPLACE = isForced(
        CONSTRUCTOR_NAME,
        !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function() {
          new NativeConstructor().entries().next();
        }))
      );
      if (REPLACE) {
        Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);
        InternalMetadataModule.enable();
      } else if (isForced(CONSTRUCTOR_NAME, true)) {
        var instance = new Constructor();
        var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) !== instance;
        var THROWS_ON_PRIMITIVES = fails(function() {
          instance.has(1);
        });
        var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function(iterable) {
          new NativeConstructor(iterable);
        });
        var BUGGY_ZERO = !IS_WEAK && fails(function() {
          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(dummy, NativePrototype);
            var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);
            if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { 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);
        if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;
      }
      exported[CONSTRUCTOR_NAME] = Constructor;
      $({ global: true, constructor: true, forced: Constructor !== NativeConstructor }, exported);
      setToStringTag(Constructor, CONSTRUCTOR_NAME);
      if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);
      return Constructor;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/set-species.js
var require_set_species = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/set-species.js"(exports2, module2) {
    "use strict";
    var getBuiltIn = require_get_built_in();
    var defineBuiltInAccessor = require_define_built_in_accessor();
    var wellKnownSymbol = require_well_known_symbol();
    var DESCRIPTORS = require_descriptors();
    var SPECIES = wellKnownSymbol("species");
    module2.exports = function(CONSTRUCTOR_NAME) {
      var Constructor = getBuiltIn(CONSTRUCTOR_NAME);
      if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {
        defineBuiltInAccessor(Constructor, SPECIES, {
          configurable: true,
          get: function() {
            return this;
          }
        });
      }
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/collection-strong.js
var require_collection_strong = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/collection-strong.js"(exports2, module2) {
    "use strict";
    var create = require_object_create();
    var defineBuiltInAccessor = require_define_built_in_accessor();
    var defineBuiltIns = require_define_built_ins();
    var bind = require_function_bind_context();
    var anInstance = require_an_instance();
    var isNullOrUndefined = require_is_null_or_undefined();
    var iterate = require_iterate();
    var defineIterator = require_iterator_define();
    var createIterResultObject = require_create_iter_result_object();
    var setSpecies = require_set_species();
    var DESCRIPTORS = require_descriptors();
    var fastKey = require_internal_metadata().fastKey;
    var InternalStateModule = require_internal_state();
    var setInternalState = InternalStateModule.set;
    var internalStateGetterFor = InternalStateModule.getterFor;
    module2.exports = {
      getConstructor: function(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {
        var Constructor = wrapper(function(that, iterable) {
          anInstance(that, Prototype);
          setInternalState(that, {
            type: CONSTRUCTOR_NAME,
            index: create(null),
            first: null,
            last: null,
            size: 0
          });
          if (!DESCRIPTORS) that.size = 0;
          if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that, AS_ENTRIES: IS_MAP });
        });
        var Prototype = Constructor.prototype;
        var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);
        var define = function(that, key, value) {
          var state = getInternalState(that);
          var entry = getEntry(that, key);
          var previous, index;
          if (entry) {
            entry.value = value;
          } else {
            state.last = entry = {
              index: index = fastKey(key, true),
              key,
              value,
              previous: previous = state.last,
              next: null,
              removed: false
            };
            if (!state.first) state.first = entry;
            if (previous) previous.next = entry;
            if (DESCRIPTORS) state.size++;
            else that.size++;
            if (index !== "F") state.index[index] = entry;
          }
          return that;
        };
        var getEntry = function(that, key) {
          var state = getInternalState(that);
          var index = fastKey(key);
          var entry;
          if (index !== "F") return state.index[index];
          for (entry = state.first; entry; entry = entry.next) {
            if (entry.key === key) return entry;
          }
        };
        defineBuiltIns(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 entry = state.first;
            while (entry) {
              entry.removed = true;
              if (entry.previous) entry.previous = entry.previous.next = null;
              entry = entry.next;
            }
            state.first = state.last = null;
            state.index = create(null);
            if (DESCRIPTORS) 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) 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 forEach2(callbackfn) {
            var state = getInternalState(this);
            var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : void 0);
            var entry;
            while (entry = entry ? entry.next : state.first) {
              boundFunction(entry.value, entry.key, this);
              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);
          }
        });
        defineBuiltIns(Prototype, IS_MAP ? {
          // `Map.prototype.get(key)` method
          // https://tc39.es/ecma262/#sec-map.prototype.get
          get: function get2(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) defineBuiltInAccessor(Prototype, "size", {
          configurable: true,
          get: function() {
            return getInternalState(this).size;
          }
        });
        return Constructor;
      },
      setStrong: function(Constructor, CONSTRUCTOR_NAME, IS_MAP) {
        var ITERATOR_NAME = CONSTRUCTOR_NAME + " Iterator";
        var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);
        var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);
        defineIterator(Constructor, CONSTRUCTOR_NAME, function(iterated, kind) {
          setInternalState(this, {
            type: ITERATOR_NAME,
            target: iterated,
            state: getInternalCollectionState(iterated),
            kind,
            last: null
          });
        }, function() {
          var state = getInternalIteratorState(this);
          var kind = state.kind;
          var entry = state.last;
          while (entry && entry.removed) entry = entry.previous;
          if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {
            state.target = null;
            return createIterResultObject(void 0, true);
          }
          if (kind === "keys") return createIterResultObject(entry.key, false);
          if (kind === "values") return createIterResultObject(entry.value, false);
          return createIterResultObject([entry.key, entry.value], false);
        }, IS_MAP ? "entries" : "values", !IS_MAP, true);
        setSpecies(CONSTRUCTOR_NAME);
      }
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.map.constructor.js
var require_es_map_constructor = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.map.constructor.js"() {
    "use strict";
    var collection = require_collection();
    var collectionStrong = require_collection_strong();
    collection("Map", function(init) {
      return function Map2() {
        return init(this, arguments.length ? arguments[0] : void 0);
      };
    }, collectionStrong);
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.map.js
var require_es_map = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.map.js"() {
    "use strict";
    require_es_map_constructor();
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.define-properties.js
var require_es_object_define_properties = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.define-properties.js"() {
    "use strict";
    var $ = require_export();
    var DESCRIPTORS = require_descriptors();
    var defineProperties = require_object_define_properties().f;
    $({ target: "Object", stat: true, forced: Object.defineProperties !== defineProperties, sham: !DESCRIPTORS }, {
      defineProperties
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.define-property.js
var require_es_object_define_property = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.define-property.js"() {
    "use strict";
    var $ = require_export();
    var DESCRIPTORS = require_descriptors();
    var defineProperty = require_object_define_property().f;
    $({ target: "Object", stat: true, forced: Object.defineProperty !== defineProperty, sham: !DESCRIPTORS }, {
      defineProperty
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.get-own-property-descriptor.js
var require_es_object_get_own_property_descriptor = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.get-own-property-descriptor.js"() {
    "use strict";
    var $ = require_export();
    var fails = require_fails();
    var toIndexedObject = require_to_indexed_object();
    var nativeGetOwnPropertyDescriptor = require_object_get_own_property_descriptor().f;
    var DESCRIPTORS = require_descriptors();
    var FORCED = !DESCRIPTORS || fails(function() {
      nativeGetOwnPropertyDescriptor(1);
    });
    $({ target: "Object", stat: true, forced: FORCED, sham: !DESCRIPTORS }, {
      getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {
        return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);
      }
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.get-own-property-descriptors.js
var require_es_object_get_own_property_descriptors = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.get-own-property-descriptors.js"() {
    "use strict";
    var $ = require_export();
    var DESCRIPTORS = require_descriptors();
    var ownKeys2 = require_own_keys();
    var toIndexedObject = require_to_indexed_object();
    var getOwnPropertyDescriptorModule = require_object_get_own_property_descriptor();
    var createProperty = require_create_property();
    $({ target: "Object", stat: true, sham: !DESCRIPTORS }, {
      getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {
        var O = toIndexedObject(object);
        var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
        var keys2 = ownKeys2(O);
        var result = {};
        var index = 0;
        var key, descriptor;
        while (keys2.length > index) {
          descriptor = getOwnPropertyDescriptor(O, key = keys2[index++]);
          if (descriptor !== void 0) createProperty(result, key, descriptor);
        }
        return result;
      }
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.get-own-property-names.js
var require_es_object_get_own_property_names = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.get-own-property-names.js"() {
    "use strict";
    var $ = require_export();
    var fails = require_fails();
    var getOwnPropertyNames = require_object_get_own_property_names_external().f;
    var FAILS_ON_PRIMITIVES = fails(function() {
      return !Object.getOwnPropertyNames(1);
    });
    $({ target: "Object", stat: true, forced: FAILS_ON_PRIMITIVES }, {
      getOwnPropertyNames
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.keys.js
var require_es_object_keys = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.keys.js"() {
    "use strict";
    var $ = require_export();
    var toObject = require_to_object();
    var nativeKeys = require_object_keys();
    var fails = require_fails();
    var FAILS_ON_PRIMITIVES = fails(function() {
      nativeKeys(1);
    });
    $({ target: "Object", stat: true, forced: FAILS_ON_PRIMITIVES }, {
      keys: function keys2(it) {
        return nativeKeys(toObject(it));
      }
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.seal.js
var require_es_object_seal = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.seal.js"() {
    "use strict";
    var $ = require_export();
    var isObject2 = require_is_object();
    var onFreeze = require_internal_metadata().onFreeze;
    var FREEZING = require_freezing();
    var fails = require_fails();
    var $seal = Object.seal;
    var FAILS_ON_PRIMITIVES = fails(function() {
      $seal(1);
    });
    $({ target: "Object", stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {
      seal: function seal(it) {
        return $seal && isObject2(it) ? $seal(onFreeze(it)) : it;
      }
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-to-string.js
var require_object_to_string = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/object-to-string.js"(exports2, module2) {
    "use strict";
    var TO_STRING_TAG_SUPPORT = require_to_string_tag_support();
    var classof = require_classof();
    module2.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {
      return "[object " + classof(this) + "]";
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.to-string.js
var require_es_object_to_string = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.object.to-string.js"() {
    "use strict";
    var TO_STRING_TAG_SUPPORT = require_to_string_tag_support();
    var defineBuiltIn = require_define_built_in();
    var toString = require_object_to_string();
    if (!TO_STRING_TAG_SUPPORT) {
      defineBuiltIn(Object.prototype, "toString", toString, { unsafe: true });
    }
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-sticky-helpers.js
var require_regexp_sticky_helpers = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-sticky-helpers.js"(exports2, module2) {
    "use strict";
    var fails = require_fails();
    var globalThis2 = require_global_this();
    var $RegExp = globalThis2.RegExp;
    var UNSUPPORTED_Y = fails(function() {
      var re = $RegExp("a", "y");
      re.lastIndex = 2;
      return re.exec("abcd") !== null;
    });
    var MISSED_STICKY = UNSUPPORTED_Y || fails(function() {
      return !$RegExp("a", "y").sticky;
    });
    var BROKEN_CARET = UNSUPPORTED_Y || fails(function() {
      var re = $RegExp("^r", "gy");
      re.lastIndex = 2;
      return re.exec("str") !== null;
    });
    module2.exports = {
      BROKEN_CARET,
      MISSED_STICKY,
      UNSUPPORTED_Y
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-unsupported-dot-all.js
var require_regexp_unsupported_dot_all = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-unsupported-dot-all.js"(exports2, module2) {
    "use strict";
    var fails = require_fails();
    var globalThis2 = require_global_this();
    var $RegExp = globalThis2.RegExp;
    module2.exports = fails(function() {
      var re = $RegExp(".", "s");
      return !(re.dotAll && re.test("\n") && re.flags === "s");
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-unsupported-ncg.js
var require_regexp_unsupported_ncg = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-unsupported-ncg.js"(exports2, module2) {
    "use strict";
    var fails = require_fails();
    var globalThis2 = require_global_this();
    var $RegExp = globalThis2.RegExp;
    module2.exports = fails(function() {
      var re = $RegExp("(?<a>b)", "g");
      return re.exec("b").groups.a !== "b" || "b".replace(re, "$<a>c") !== "bc";
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-exec.js
var require_regexp_exec = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-exec.js"(exports2, module2) {
    "use strict";
    var call = require_function_call();
    var uncurryThis = require_function_uncurry_this();
    var toString = require_to_string();
    var regexpFlags = require_regexp_flags();
    var stickyHelpers = require_regexp_sticky_helpers();
    var shared = require_shared();
    var create = require_object_create();
    var getInternalState = require_internal_state().get;
    var UNSUPPORTED_DOT_ALL = require_regexp_unsupported_dot_all();
    var UNSUPPORTED_NCG = require_regexp_unsupported_ncg();
    var nativeReplace = shared("native-string-replace", String.prototype.replace);
    var nativeExec = RegExp.prototype.exec;
    var patchedExec = nativeExec;
    var charAt = uncurryThis("".charAt);
    var indexOf = uncurryThis("".indexOf);
    var replace = uncurryThis("".replace);
    var stringSlice = uncurryThis("".slice);
    var UPDATES_LAST_INDEX_WRONG = function() {
      var re1 = /a/;
      var re2 = /b*/g;
      call(nativeExec, re1, "a");
      call(nativeExec, re2, "a");
      return re1.lastIndex !== 0 || re2.lastIndex !== 0;
    }();
    var UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET;
    var NPCG_INCLUDED = /()??/.exec("")[1] !== void 0;
    var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;
    if (PATCH) {
      patchedExec = function exec(string) {
        var re = this;
        var state = getInternalState(re);
        var str = toString(string);
        var raw = state.raw;
        var result, reCopy, lastIndex, match, i, object, group;
        if (raw) {
          raw.lastIndex = re.lastIndex;
          result = call(patchedExec, raw, str);
          re.lastIndex = raw.lastIndex;
          return result;
        }
        var groups = state.groups;
        var sticky = UNSUPPORTED_Y && re.sticky;
        var flags = call(regexpFlags, re);
        var source = re.source;
        var charsAdded = 0;
        var strCopy = str;
        if (sticky) {
          flags = replace(flags, "y", "");
          if (indexOf(flags, "g") === -1) {
            flags += "g";
          }
          strCopy = stringSlice(str, re.lastIndex);
          if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== "\n")) {
            source = "(?: " + source + ")";
            strCopy = " " + strCopy;
            charsAdded++;
          }
          reCopy = new RegExp("^(?:" + source + ")", flags);
        }
        if (NPCG_INCLUDED) {
          reCopy = new RegExp("^" + source + "$(?!\\s)", flags);
        }
        if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;
        match = call(nativeExec, sticky ? reCopy : re, strCopy);
        if (sticky) {
          if (match) {
            match.input = stringSlice(match.input, charsAdded);
            match[0] = stringSlice(match[0], 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) {
          call(nativeReplace, match[0], reCopy, function() {
            for (i = 1; i < arguments.length - 2; i++) {
              if (arguments[i] === void 0) match[i] = void 0;
            }
          });
        }
        if (match && groups) {
          match.groups = object = create(null);
          for (i = 0; i < groups.length; i++) {
            group = groups[i];
            object[group[0]] = match[group[1]];
          }
        }
        return match;
      };
    }
    module2.exports = patchedExec;
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.regexp.exec.js
var require_es_regexp_exec = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.regexp.exec.js"() {
    "use strict";
    var $ = require_export();
    var exec = require_regexp_exec();
    $({ target: "RegExp", proto: true, forced: /./.exec !== exec }, {
      exec
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.regexp.test.js
var require_es_regexp_test = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.regexp.test.js"() {
    "use strict";
    require_es_regexp_exec();
    var $ = require_export();
    var call = require_function_call();
    var isCallable = require_is_callable();
    var anObject = require_an_object();
    var toString = require_to_string();
    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;
    $({ target: "RegExp", proto: true, forced: !DELEGATES_TO_EXEC }, {
      test: function(S) {
        var R = anObject(this);
        var string = toString(S);
        var exec = R.exec;
        if (!isCallable(exec)) return call(nativeTest, R, string);
        var result = call(exec, R, string);
        if (result === null) return false;
        anObject(result);
        return true;
      }
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-regexp.js
var require_is_regexp = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/is-regexp.js"(exports2, module2) {
    "use strict";
    var isObject2 = require_is_object();
    var classof = require_classof_raw();
    var wellKnownSymbol = require_well_known_symbol();
    var MATCH = wellKnownSymbol("match");
    module2.exports = function(it) {
      var isRegExp;
      return isObject2(it) && ((isRegExp = it[MATCH]) !== void 0 ? !!isRegExp : classof(it) === "RegExp");
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/not-a-regexp.js
var require_not_a_regexp = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/not-a-regexp.js"(exports2, module2) {
    "use strict";
    var isRegExp = require_is_regexp();
    var $TypeError = TypeError;
    module2.exports = function(it) {
      if (isRegExp(it)) {
        throw new $TypeError("The method doesn't accept regular expressions");
      }
      return it;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/correct-is-regexp-logic.js
var require_correct_is_regexp_logic = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/correct-is-regexp-logic.js"(exports2, module2) {
    "use strict";
    var wellKnownSymbol = require_well_known_symbol();
    var MATCH = wellKnownSymbol("match");
    module2.exports = function(METHOD_NAME) {
      var regexp = /./;
      try {
        "/./"[METHOD_NAME](regexp);
      } catch (error1) {
        try {
          regexp[MATCH] = false;
          return "/./"[METHOD_NAME](regexp);
        } catch (error2) {
        }
      }
      return false;
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.string.ends-with.js
var require_es_string_ends_with = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.string.ends-with.js"() {
    "use strict";
    var $ = require_export();
    var uncurryThis = require_function_uncurry_this_clause();
    var getOwnPropertyDescriptor = require_object_get_own_property_descriptor().f;
    var toLength = require_to_length();
    var toString = require_to_string();
    var notARegExp = require_not_a_regexp();
    var requireObjectCoercible = require_require_object_coercible();
    var correctIsRegExpLogic = require_correct_is_regexp_logic();
    var IS_PURE = require_is_pure();
    var slice = uncurryThis("".slice);
    var min = Math.min;
    var CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic("endsWith");
    var MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function() {
      var descriptor = getOwnPropertyDescriptor(String.prototype, "endsWith");
      return descriptor && !descriptor.writable;
    }();
    $({ target: "String", proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {
      endsWith: function endsWith(searchString) {
        var that = toString(requireObjectCoercible(this));
        notARegExp(searchString);
        var endPosition = arguments.length > 1 ? arguments[1] : void 0;
        var len = that.length;
        var end = endPosition === void 0 ? len : min(toLength(endPosition), len);
        var search = toString(searchString);
        return slice(that, end - search.length, end) === search;
      }
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.string.includes.js
var require_es_string_includes = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.string.includes.js"() {
    "use strict";
    var $ = require_export();
    var uncurryThis = require_function_uncurry_this();
    var notARegExp = require_not_a_regexp();
    var requireObjectCoercible = require_require_object_coercible();
    var toString = require_to_string();
    var correctIsRegExpLogic = require_correct_is_regexp_logic();
    var stringIndexOf = uncurryThis("".indexOf);
    $({ target: "String", proto: true, forced: !correctIsRegExpLogic("includes") }, {
      includes: function includes(searchString) {
        return !!~stringIndexOf(
          toString(requireObjectCoercible(this)),
          toString(notARegExp(searchString)),
          arguments.length > 1 ? arguments[1] : void 0
        );
      }
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/string-multibyte.js
var require_string_multibyte = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/string-multibyte.js"(exports2, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var toIntegerOrInfinity = require_to_integer_or_infinity();
    var toString = require_to_string();
    var requireObjectCoercible = require_require_object_coercible();
    var charAt = uncurryThis("".charAt);
    var charCodeAt = uncurryThis("".charCodeAt);
    var stringSlice = uncurryThis("".slice);
    var createMethod = function(CONVERT_TO_STRING) {
      return function($this, pos) {
        var S = toString(requireObjectCoercible($this));
        var position = toIntegerOrInfinity(pos);
        var size = S.length;
        var first, second;
        if (position < 0 || position >= size) return CONVERT_TO_STRING ? "" : void 0;
        first = charCodeAt(S, position);
        return first < 55296 || first > 56319 || position + 1 === size || (second = charCodeAt(S, position + 1)) < 56320 || second > 57343 ? CONVERT_TO_STRING ? charAt(S, position) : first : CONVERT_TO_STRING ? stringSlice(S, position, position + 2) : (first - 55296 << 10) + (second - 56320) + 65536;
      };
    };
    module2.exports = {
      // `String.prototype.codePointAt` method
      // https://tc39.es/ecma262/#sec-string.prototype.codepointat
      codeAt: createMethod(false),
      // `String.prototype.at` method
      // https://github.com/mathiasbynens/String.prototype.at
      charAt: createMethod(true)
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.string.iterator.js
var require_es_string_iterator = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.string.iterator.js"() {
    "use strict";
    var charAt = require_string_multibyte().charAt;
    var toString = require_to_string();
    var InternalStateModule = require_internal_state();
    var defineIterator = require_iterator_define();
    var createIterResultObject = require_create_iter_result_object();
    var STRING_ITERATOR = "String Iterator";
    var setInternalState = InternalStateModule.set;
    var getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);
    defineIterator(String, "String", function(iterated) {
      setInternalState(this, {
        type: STRING_ITERATOR,
        string: toString(iterated),
        index: 0
      });
    }, function next() {
      var state = getInternalState(this);
      var string = state.string;
      var index = state.index;
      var point;
      if (index >= string.length) return createIterResultObject(void 0, true);
      point = charAt(string, index);
      state.index += point.length;
      return createIterResultObject(point, false);
    });
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js
var require_fix_regexp_well_known_symbol_logic = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js"(exports2, module2) {
    "use strict";
    require_es_regexp_exec();
    var call = require_function_call();
    var defineBuiltIn = require_define_built_in();
    var regexpExec = require_regexp_exec();
    var fails = require_fails();
    var wellKnownSymbol = require_well_known_symbol();
    var createNonEnumerableProperty = require_create_non_enumerable_property();
    var SPECIES = wellKnownSymbol("species");
    var RegExpPrototype = RegExp.prototype;
    module2.exports = function(KEY, exec, FORCED, SHAM) {
      var SYMBOL = wellKnownSymbol(KEY);
      var DELEGATES_TO_SYMBOL = !fails(function() {
        var O = {};
        O[SYMBOL] = function() {
          return 7;
        };
        return ""[KEY](O) !== 7;
      });
      var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function() {
        var execCalled = false;
        var re = /a/;
        if (KEY === "split") {
          re = {};
          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 || $exec === RegExpPrototype.exec) {
            if (DELEGATES_TO_SYMBOL && !forceStringMethod) {
              return { done: true, value: call(nativeRegExpMethod, regexp, str, arg2) };
            }
            return { done: true, value: call(nativeMethod, str, regexp, arg2) };
          }
          return { done: false };
        });
        defineBuiltIn(String.prototype, KEY, methods[0]);
        defineBuiltIn(RegExpPrototype, SYMBOL, methods[1]);
      }
      if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], "sham", true);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/advance-string-index.js
var require_advance_string_index = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/advance-string-index.js"(exports2, module2) {
    "use strict";
    var charAt = require_string_multibyte().charAt;
    module2.exports = function(S, index, unicode) {
      return index + (unicode ? charAt(S, index).length : 1);
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-substitution.js
var require_get_substitution = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/get-substitution.js"(exports2, module2) {
    "use strict";
    var uncurryThis = require_function_uncurry_this();
    var toObject = require_to_object();
    var floor = Math.floor;
    var charAt = uncurryThis("".charAt);
    var replace = uncurryThis("".replace);
    var stringSlice = uncurryThis("".slice);
    var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d{1,2}|<[^>]*>)/g;
    var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d{1,2})/g;
    module2.exports = function(matched, str, position, captures, namedCaptures, replacement) {
      var tailPos = position + matched.length;
      var m = captures.length;
      var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;
      if (namedCaptures !== void 0) {
        namedCaptures = toObject(namedCaptures);
        symbols = SUBSTITUTION_SYMBOLS;
      }
      return replace(replacement, symbols, function(match, ch) {
        var capture;
        switch (charAt(ch, 0)) {
          case "$":
            return "$";
          case "&":
            return matched;
          case "`":
            return stringSlice(str, 0, position);
          case "'":
            return stringSlice(str, tailPos);
          case "<":
            capture = namedCaptures[stringSlice(ch, 1, -1)];
            break;
          default:
            var n = +ch;
            if (n === 0) return match;
            if (n > m) {
              var f = floor(n / 10);
              if (f === 0) return match;
              if (f <= m) return captures[f - 1] === void 0 ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);
              return match;
            }
            capture = captures[n - 1];
        }
        return capture === void 0 ? "" : capture;
      });
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-exec-abstract.js
var require_regexp_exec_abstract = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/internals/regexp-exec-abstract.js"(exports2, module2) {
    "use strict";
    var call = require_function_call();
    var anObject = require_an_object();
    var isCallable = require_is_callable();
    var classof = require_classof_raw();
    var regexpExec = require_regexp_exec();
    var $TypeError = TypeError;
    module2.exports = function(R, S) {
      var exec = R.exec;
      if (isCallable(exec)) {
        var result = call(exec, R, S);
        if (result !== null) anObject(result);
        return result;
      }
      if (classof(R) === "RegExp") return call(regexpExec, R, S);
      throw new $TypeError("RegExp#exec called on incompatible receiver");
    };
  }
});

// node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.string.replace.js
var require_es_string_replace = __commonJS({
  "node_modules/.pnpm/[email protected]/node_modules/core-js/modules/es.string.replace.js"() {
    "use strict";
    var apply = require_function_apply();
    var call = require_function_call();
    var uncurryThis = require_function_uncurry_this();
    var fixRegExpWellKnownSymbolLogic = require_fix_regexp_well_known_symbol_logic();
    var fails = require_fails();
    var anObject = require_an_object();
    var isCallable = require_is_callable();
    var isNullOrUndefined = require_is_null_or_undefined();
    var toIntegerOrInfinity = require_to_integer_or_infinity();
    var toLength = require_to_length();
    var toString = require_to_string();
    var requireObjectCoercible = require_require_object_coercible();
    var advanceStringIndex = require_advance_string_index();
    var getMethod = require_get_method();
    var getSubstitution = require_get_substitution();
    var regExpExec = require_regexp_exec_abstract();
    var wellKnownSymbol = require_well_known_symbol();
    var REPLACE = wellKnownSymbol("replace");
    var max = Math.max;
    var min = Math.min;
    var concat = uncurryThis([].concat);
    var push = uncurryThis([].push);
    var stringIndexOf = uncurryThis("".indexOf);
    var stringSlice = uncurryThis("".slice);
    var maybeToString = function(it) {
      return it === void 0 ? it : String(it);
    };
    var REPLACE_KEEPS_$0 = function() {
      return "a".replace(/./, "$0") === "$0";
    }();
    var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = function() {
      if (/./[REPLACE]) {
        return /./[REPLACE]("a", "$0") === "";
      }
      return false;
    }();
    var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function() {
      var re = /./;
      re.exec = function() {
        var result = [];
        result.groups = { a: "7" };
        return result;
      };
      return "".replace(re, "$<a>") !== "7";
    });
    fixRegExpWellKnownSymbolLogic("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(this);
          var replacer = isNullOrUndefined(searchValue) ? void 0 : getMethod(searchValue, REPLACE);
          return replacer ? call(replacer, searchValue, O, replaceValue) : call(nativeReplace, toString(O), searchValue, replaceValue);
        },
        // `RegExp.prototype[@@replace]` method
        // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace
        function(string, replaceValue) {
          var rx = anObject(this);
          var S = toString(string);
          if (typeof replaceValue == "string" && stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 && stringIndexOf(replaceValue, "$<") === -1) {
            var res = maybeCallNative(nativeReplace, rx, S, replaceValue);
            if (res.done) return res.value;
          }
          var functionalReplace = isCallable(replaceValue);
          if (!functionalReplace) replaceValue = toString(replaceValue);
          var global2 = rx.global;
          var fullUnicode;
          if (global2) {
            fullUnicode = rx.unicode;
            rx.lastIndex = 0;
          }
          var results = [];
          var result;
          while (true) {
            result = regExpExec(rx, S);
            if (result === null) break;
            push(results, result);
            if (!global2) break;
            var matchStr = toString(result[0]);
            if (matchStr === "") rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);
          }
          var accumulatedResult = "";
          var nextSourcePosition = 0;
          for (var i = 0; i < results.length; i++) {
            result = results[i];
            var matched = toString(result[0]);
            var position = max(min(toIntegerOrInfinity(result.index), S.length), 0);
            var captures = [];
            var replacement;
            for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j]));
            var namedCaptures = result.groups;
            if (functionalReplace) {
              var replacerArgs = concat([matched], captures, position, S);
              if (namedCaptures !== void 0) push(replacerArgs, namedCaptures);
              replacement = toString(apply(replaceValue, void 0, replacerArgs));
            } else {
              replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);
            }
            if (position >= nextSourcePosition) {
              accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;
              nextSourcePosition = position + matched.length;
            }
          }
          return accumulatedResult + stringSlice(S, nextSourcePosition);
        }
      ];
    }, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);
  }
});

// dist/JSX/JSX.js
require_es_symbol();
require_es_symbol_description();
require_es_symbol_to_primitive();
require_es_array_push();
require_es_date_to_primitive();
require_es_number_constructor();
require_es_regexp_to_string();
require_proxy_min();
require_NodeList_prototype_forEach();
init_NodeList_prototype_iterator();
require_Event();
require_CustomEvent();
require_DocumentFragment();
require_Element_prototype_matches();
require_HTMLTemplateElement();
require_MutationObserver();
require_Node_prototype_contains();
require_shadydom();
init_DOMTokenList2();
init_DOMTokenList_prototype_replace();
init_DOMTokenList_prototype_forEach();
init_DOMTokenList_prototype_iterator();
init_Element_prototype_remove();
init_CharacterData_prototype_remove();
require_es_symbol_iterator();
require_es_error_cause();
require_es_error_to_string();
require_es_array_filter();
require_es_array_for_each();
require_es_array_from();
require_es_array_includes();
require_es_array_index_of();
require_es_array_iterator();
require_es_array_join();
require_es_array_map();
require_es_array_reduce();
require_es_array_slice();
require_es_array_unshift();
require_es_iterator_constructor();
require_es_iterator_filter();
require_es_iterator_for_each();
require_es_iterator_map();
require_es_iterator_reduce();
require_es_map();
require_es_object_define_properties();
require_es_object_define_property();
require_es_object_get_own_property_descriptor();
require_es_object_get_own_property_descriptors();
require_es_object_get_own_property_names();
require_es_object_keys();
require_es_object_seal();
require_es_object_to_string();
require_es_regexp_exec();
require_es_regexp_test();
require_es_string_ends_with();
require_es_string_includes();
require_es_string_iterator();
require_es_string_replace();
var _Class;
var _excluded = ["children", "ref"];
var _excluded2 = ["children"];
var _excluded3 = ["children"];
var _excluded4 = ["ref"];
var _excluded5 = ["style"];
function _toConsumableArray(r) {
  return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();
}
function _nonIterableSpread() {
  throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _iterableToArray(r) {
  if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
}
function _arrayWithoutHoles(r) {
  if (Array.isArray(r)) return _arrayLikeToArray(r);
}
function ownKeys(e, r) {
  var t = Object.keys(e);
  if (Object.getOwnPropertySymbols) {
    var o = Object.getOwnPropertySymbols(e);
    r && (o = o.filter(function(r2) {
      return Object.getOwnPropertyDescriptor(e, r2).enumerable;
    })), t.push.apply(t, o);
  }
  return t;
}
function _objectSpread(e) {
  for (var r = 1; r < arguments.length; r++) {
    var t = null != arguments[r] ? arguments[r] : {};
    r % 2 ? ownKeys(Object(t), true).forEach(function(r2) {
      _defineProperty(e, r2, t[r2]);
    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r2) {
      Object.defineProperty(e, r2, Object.getOwnPropertyDescriptor(t, r2));
    });
  }
  return e;
}
function _classCallCheck(a, n) {
  if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
}
function _defineProperties(e, r) {
  for (var t = 0; t < r.length; t++) {
    var o = r[t];
    o.enumerable = o.enumerable || false, o.configurable = true, "value" in o && (o.writable = true), Object.defineProperty(e, _toPropertyKey(o.key), o);
  }
}
function _createClass(e, r, t) {
  return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: false }), e;
}
function _defineProperty(e, r, t) {
  return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
}
function _toPropertyKey(t) {
  var i = _toPrimitive(t, "string");
  return "symbol" == _typeof(i) ? i : i + "";
}
function _toPrimitive(t, r) {
  if ("object" != _typeof(t) || !t) return t;
  var e = t[Symbol.toPrimitive];
  if (void 0 !== e) {
    var i = e.call(t, r || "default");
    if ("object" != _typeof(i)) return i;
    throw new TypeError("@@toPrimitive must return a primitive value.");
  }
  return ("string" === r ? String : Number)(t);
}
function _objectWithoutProperties(e, t) {
  if (null == e) return {};
  var o, r, i = _objectWithoutPropertiesLoose(e, t);
  if (Object.getOwnPropertySymbols) {
    var n = Object.getOwnPropertySymbols(e);
    for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
  }
  return i;
}
function _objectWithoutPropertiesLoose(r, e) {
  if (null == r) return {};
  var t = {};
  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
    if (-1 !== e.indexOf(n)) continue;
    t[n] = r[n];
  }
  return t;
}
function _createForOfIteratorHelper(r, e) {
  var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
  if (!t) {
    if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
      t && (r = t);
      var _n = 0, F = function F2() {
      };
      return { s: F, n: function n() {
        return _n >= r.length ? { done: true } : { done: false, value: r[_n++] };
      }, e: function e2(r2) {
        throw r2;
      }, f: F };
    }
    throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
  }
  var o, a = true, u = false;
  return { s: function s() {
    t = t.call(r);
  }, n: function n() {
    var r2 = t.next();
    return a = r2.done, r2;
  }, e: function e2(r2) {
    u = true, o = r2;
  }, f: function f() {
    try {
      a || null == t.return || t.return();
    } finally {
      if (u) throw o;
    }
  } };
}
function _unsupportedIterableToArray(r, a) {
  if (r) {
    if ("string" == typeof r) return _arrayLikeToArray(r, a);
    var t = {}.toString.call(r).slice(8, -1);
    return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
  }
}
function _arrayLikeToArray(r, a) {
  (null == a || a > r.length) && (a = r.length);
  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
  return n;
}
function _typeof(o) {
  "@babel/helpers - typeof";
  return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o2) {
    return typeof o2;
  } : function(o2) {
    return o2 && "function" == typeof Symbol && o2.constructor === Symbol && o2 !== Symbol.prototype ? "symbol" : typeof o2;
  }, _typeof(o);
}
var __defProp2 = Object.defineProperty;
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
var __getOwnPropNames2 = Object.getOwnPropertyNames;
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
var __export = function __export2(target, all) {
  for (var name in all) __defProp2(target, name, {
    get: all[name],
    enumerable: true
  });
};
var __copyProps2 = function __copyProps3(to, from, except, desc) {
  if (from && _typeof(from) === "object" || typeof from === "function") {
    var _iterator = _createForOfIteratorHelper(__getOwnPropNames2(from)), _step;
    try {
      var _loop = function _loop2() {
        var key = _step.value;
        if (!__hasOwnProp2.call(to, key) && key !== except) __defProp2(to, key, {
          get: function get2() {
            return from[key];
          },
          enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable
        });
      };
      for (_iterator.s(); !(_step = _iterator.n()).done; ) {
        _loop();
      }
    } catch (err) {
      _iterator.e(err);
    } finally {
      _iterator.f();
    }
  }
  return to;
};
var __toCommonJS2 = function __toCommonJS3(mod) {
  return __copyProps2(__defProp2({}, "__esModule", {
    value: true
  }), mod);
};
//! src/JSX/JSX.ts
var JSX_exports = {};
__export(JSX_exports, {
  Component: function Component() {
    return _Component;
  },
  Fragment: function Fragment() {
    return _Fragment;
  },
  PureComponent: function PureComponent() {
    return _Component;
  },
  SVGNamespace: function SVGNamespace() {
    return _SVGNamespace;
  },
  ShadowRoot: function ShadowRoot2() {
    return _ShadowRoot;
  },
  StrictMode: function StrictMode() {
    return _Fragment;
  },
  className: function className() {
    return _className;
  },
  createElement: function createElement() {
    return _createElement;
  },
  createFactory: function createFactory() {
    return _createFactory;
  },
  createRef: function createRef() {
    return _createRef;
  },
  forwardRef: function forwardRef() {
    return _forwardRef;
  },
  h: function h() {
    return _createElement;
  },
  isRef: function isRef() {
    return _isRef;
  },
  jsx: function jsx() {
    return _jsx;
  },
  jsxs: function jsxs() {
    return _jsx;
  },
  memo: function memo() {
    return identity;
  },
  preventDefault: function preventDefault() {
    return _preventDefault;
  },
  stopPropagation: function stopPropagation() {
    return _stopPropagation;
  },
  styled: function styled() {
    return _styled;
  },
  useCallback: function useCallback() {
    return identity;
  },
  useClassList: function useClassList() {
    return _useClassList;
  },
  useImperativeHandle: function useImperativeHandle() {
    return _useImperativeHandle;
  },
  useMemo: function useMemo() {
    return _useMemo;
  },
  useRef: function useRef() {
    return _createRef;
  },
  useText: function useText() {
    return _useText;
  }
});
module.exports = __toCommonJS2(JSX_exports);
var keys = Object.keys;
function identity(value) {
  return value;
}
function isBoolean(val) {
  return typeof val === "boolean";
}
function isElement(val) {
  return val && typeof val.nodeType === "number";
}
function isString(val) {
  return typeof val === "string";
}
function isNumber(val) {
  return typeof val === "number";
}
function isObject(val) {
  return _typeof(val) === "object" ? val !== null : isFunction(val);
}
function isFunction(val) {
  return typeof val === "function";
}
function isComponentClass(Component2) {
  return !!(Component2 && Component2.isComponent);
}
function isArrayLike(obj) {
  return isObject(obj) && typeof obj.length === "number" && typeof obj.nodeType !== "number";
}
function forEach(value, fn) {
  if (!value) return;
  var _iterator2 = _createForOfIteratorHelper(keys(value)), _step2;
  try {
    for (_iterator2.s(); !(_step2 = _iterator2.n()).done; ) {
      var key = _step2.value;
      fn(value[key], key);
    }
  } catch (err) {
    _iterator2.e(err);
  } finally {
    _iterator2.f();
  }
}
function _createRef() {
  return Object.seal({
    current: null
  });
}
function _isRef(maybeRef) {
  return isObject(maybeRef) && "current" in maybeRef;
}
var isUnitlessNumber = {
  animationIterationCount: 0,
  borderImageOutset: 0,
  borderImageSlice: 0,
  borderImageWidth: 0,
  boxFlex: 0,
  boxFlexGroup: 0,
  boxOrdinalGroup: 0,
  columnCount: 0,
  columns: 0,
  flex: 0,
  flexGrow: 0,
  flexPositive: 0,
  flexShrink: 0,
  flexNegative: 0,
  flexOrder: 0,
  gridArea: 0,
  gridRow: 0,
  gridRowEnd: 0,
  gridRowSpan: 0,
  gridRowStart: 0,
  gridColumn: 0,
  gridColumnEnd: 0,
  gridColumnSpan: 0,
  gridColumnStart: 0,
  fontWeight: 0,
  lineClamp: 0,
  lineHeight: 0,
  opacity: 0,
  order: 0,
  orphans: 0,
  tabSize: 0,
  widows: 0,
  zIndex: 0,
  zoom: 0,
  // SVG-related properties
  fillOpacity: 0,
  floodOpacity: 0,
  stopOpacity: 0,
  strokeDasharray: 0,
  strokeDashoffset: 0,
  strokeMiterlimit: 0,
  strokeOpacity: 0,
  strokeWidth: 0
};
function prefixKey(prefix, key) {
  return prefix + key.charAt(0).toUpperCase() + key.substring(1);
}
var prefixes = ["Webkit", "ms", "Moz", "O"];
keys(isUnitlessNumber).forEach(function(prop) {
  prefixes.forEach(function(prefix) {
    isUnitlessNumber[prefixKey(prefix, prop)] = 0;
  });
});
var jsxDomType = Symbol.for("jsx-dom:type");
var JsxDomType = /* @__PURE__ */ function(JsxDomType2) {
  JsxDomType2["ShadowRoot"] = "ShadowRoot";
  return JsxDomType2;
}(JsxDomType || {});
function _ShadowRoot(_ref) {
  var children = _ref.children, ref = _ref.ref, attr2 = _objectWithoutProperties(_ref, _excluded);
  return _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, jsxDomType, JsxDomType.ShadowRoot), "ref", ref), "attr", attr2), "children", children);
}
function isShadowRoot(el) {
  return el != null && el[jsxDomType] === JsxDomType.ShadowRoot;
}
var _SVGNamespace = "http://www.w3.org/2000/svg";
var XLinkNamespace = "http://www.w3.org/1999/xlink";
var XMLNamespace = "http://www.w3.org/XML/1998/namespace";
function isVisibleChild(value) {
  return !isBoolean(value) && value != null;
}
function _className(value) {
  if (Array.isArray(value)) {
    return value.map(_className).filter(Boolean).join(" ");
  } else if (isObject(value)) {
    if (Symbol.iterator in value) {
      return _className(Array.from(value));
    }
    return keys(value).filter(function(k) {
      return value[k];
    }).join(" ");
  } else if (isVisibleChild(value)) {
    return "" + value;
  } else {
    return "";
  }
}
var svg = {
  animate: 0,
  circle: 0,
  clipPath: 0,
  defs: 0,
  desc: 0,
  ellipse: 0,
  feBlend: 0,
  feColorMatrix: 0,
  feComponentTransfer: 0,
  feComposite: 0,
  feConvolveMatrix: 0,
  feDiffuseLighting: 0,
  feDisplacementMap: 0,
  feDistantLight: 0,
  feFlood: 0,
  feFuncA: 0,
  feFuncB: 0,
  feFuncG: 0,
  feFuncR: 0,
  feGaussianBlur: 0,
  feImage: 0,
  feMerge: 0,
  feMergeNode: 0,
  feMorphology: 0,
  feOffset: 0,
  fePointLight: 0,
  feSpecularLighting: 0,
  feSpotLight: 0,
  feTile: 0,
  feTurbulence: 0,
  filter: 0,
  foreignObject: 0,
  g: 0,
  image: 0,
  line: 0,
  linearGradient: 0,
  marker: 0,
  mask: 0,
  metadata: 0,
  path: 0,
  pattern: 0,
  polygon: 0,
  polyline: 0,
  radialGradient: 0,
  rect: 0,
  stop: 0,
  svg: 0,
  switch: 0,
  symbol: 0,
  text: 0,
  textPath: 0,
  tspan: 0,
  use: 0,
  view: 0
};
var nonPresentationSVGAttributes = /^(a(ll|t|u)|base[FP]|c(al|lipPathU|on)|di|ed|ex|filter[RU]|g(lyphR|r)|ke|l(en|im)|ma(rker[HUW]|s)|n|pat|pr|point[^e]|re[^n]|s[puy]|st[^or]|ta|textL|vi|xC|y|z)/;
function _createFactory(tag) {
  return _createElement.bind(null, tag);
}
function _Fragment(attr2) {
  var fragment = document.createDocumentFragment();
  appendChild(attr2.children, fragment);
  return fragment;
}
var _Component = (_Class = /* @__PURE__ */ function() {
  function _Component2(props) {
    _classCallCheck(this, _Component2);
    this.props = props;
  }
  return _createClass(_Component2, [{
    key: "render",
    value: function render() {
      return null;
    }
  }]);
}(), _defineProperty(_Class, "isComponent", true), _Class);
function initComponentClass(Class, attr2, children) {
  attr2 = _objectSpread(_objectSpread({}, attr2), {}, {
    children
  });
  var instance = new Class(attr2);
  var node = instance.render();
  if ("ref" in attr2) {
    attachRef(attr2.ref, instance);
  }
  return node;
}
function _jsx(tag, _ref) {
  var children = _ref.children, attr2 = _objectWithoutProperties(_ref, _excluded2);
  if (!attr2.namespaceURI && svg[tag] === 0) {
    attr2 = _objectSpread(_objectSpread({}, attr2), {}, {
      namespaceURI: _SVGNamespace
    });
  }
  var node;
  if (isString(tag)) {
    node = attr2.namespaceURI ? document.createElementNS(attr2.namespaceURI, tag) : document.createElement(tag);
    attributes(attr2, node);
    appendChild(children, node);
    if (node instanceof window.HTMLSelectElement && attr2.value != null) {
      if (attr2.multiple === true && Array.isArray(attr2.value)) {
        var values = attr2.value.map(function(value) {
          return String(value);
        });
        node.querySelectorAll("option").forEach(function(option) {
          return option.selected = values.includes(option.value);
        });
      } else {
        node.value = attr2.value;
      }
    }
    attachRef(attr2.ref, node);
  } else if (isFunction(tag)) {
    if (isObject(tag.defaultProps)) {
      attr2 = _objectSpread(_objectSpread({}, tag.defaultProps), attr2);
    }
    node = isComponentClass(tag) ? initComponentClass(tag, attr2, children) : tag(_objectSpread(_objectSpread({}, attr2), {}, {
      children
    }));
  } else {
    throw new TypeError("Invalid JSX element type: ".concat(tag));
  }
  return node;
}
function _createElement(tag, attr2) {
  for (var _len = arguments.length, children = new Array(_len > 2 ? _len - 2 : 0), _key2 = 2; _key2 < _len; _key2++) {
    children[_key2 - 2] = arguments[_key2];
  }
  if (isString(attr2) || Array.isArray(attr2)) {
    children.unshift(attr2);
    attr2 = {};
  }
  attr2 = attr2 || {};
  if (attr2.children != null && !children.length) {
    var _attr = attr2;
    children = _attr.children;
    attr2 = _objectWithoutProperties(_attr, _excluded3);
    _attr;
  }
  return _jsx(tag, _objectSpread(_objectSpread({}, attr2), {}, {
    children
  }), attr2.key);
}
function attachRef(ref, node) {
  if (_isRef(ref)) {
    ref.current = node;
  } else if (isFunction(ref)) {
    ref(node);
  }
}
function appendChild(child, node) {
  if (isArrayLike(child)) {
    appendChildren(child, node);
  } else if (isString(child) || isNumber(child)) {
    appendChildToNode(document.createTextNode(child), node);
  } else if (child === null) {
    appendChildToNode(document.createComment(""), node);
  } else if (isElement(child)) {
    appendChildToNode(child, node);
  } else if (isShadowRoot(child)) {
    var shadowRoot = node.attachShadow(child.attr);
    appendChild(child.children, shadowRoot);
    attachRef(child.ref, shadowRoot);
  }
}
function appendChildren(children, node) {
  for (var _i = 0, _arr = _toConsumableArray(children); _i < _arr.length; _i++) {
    var child = _arr[_i];
    appendChild(child, node);
  }
  return node;
}
function appendChildToNode(child, node) {
  if (node instanceof window.HTMLTemplateElement) {
    node.content.appendChild(child);
  } else {
    node.appendChild(child);
  }
}
function normalizeAttribute(s, separator) {
  return s.replace(/[A-Z]/g, function(match) {
    return separator + match.toLowerCase();
  });
}
function style(node, value) {
  if (value == null || value === false) ;
  else if (Array.isArray(value)) {
    value.forEach(function(v) {
      return style(node, v);
    });
  } else if (isString(value)) {
    node.setAttribute("style", value);
  } else if (isObject(value)) {
    forEach(value, function(val, key) {
      if (key.indexOf("-") === 0) {
        node.style.setProperty(key, val);
      } else if (isNumber(val) && isUnitlessNumber[key] !== 0) {
        node.style[key] = val + "px";
      } else {
        node.style[key] = val;
      }
    });
  }
}
function attribute(key, value, node) {
  switch (key) {
    case "xlinkActuate":
    case "xlinkArcrole":
    case "xlinkHref":
    case "xlinkRole":
    case "xlinkShow":
    case "xlinkTitle":
    case "xlinkType":
      attrNS(node, XLinkNamespace, normalizeAttribute(key, ":"), value);
      return;
    case "xmlnsXlink":
      attr(node, normalizeAttribute(key, ":"), value);
      return;
    case "xmlBase":
    case "xmlLang":
    case "xmlSpace":
      attrNS(node, XMLNamespace, normalizeAttribute(key, ":"), value);
      return;
  }
  switch (key) {
    case "htmlFor":
      attr(node, "for", value);
      return;
    case "dataset":
      forEach(value, function(dataValue, dataKey) {
        if (dataValue != null) {
          node.dataset[dataKey] = dataValue;
        }
      });
      return;
    case "innerHTML":
    case "innerText":
    case "textContent":
      if (isVisibleChild(value)) {
        node[key] = value;
      }
      return;
    case "dangerouslySetInnerHTML":
      if (isObject(value)) {
        node.innerHTML = value["__html"];
      }
      return;
    case "value":
      if (value == null || node instanceof window.HTMLSelectElement) {
        return;
      } else if (node instanceof window.HTMLTextAreaElement) {
        node.value = value;
        return;
      }
      break;
    case "spellCheck":
      node.spellcheck = value;
      return;
    case "class":
    case "className":
      if (isFunction(value)) {
        value(node);
      } else {
        attr(node, "class", _className(value));
      }
      return;
    case "ref":
    case "namespaceURI":
      return;
    case "style":
      style(node, value);
      return;
    case "on":
    case "onCapture":
      forEach(value, function(eventHandler, eventName2) {
        node.addEventListener(eventName2, eventHandler, key === "onCapture");
      });
      return;
  }
  if (isFunction(value)) {
    if (key[0] === "o" && key[1] === "n") {
      var attribute2 = key.toLowerCase();
      var useCapture = attribute2.endsWith("capture");
      if (attribute2 === "ondoubleclick") {
        attribute2 = "ondblclick";
      } else if (useCapture && attribute2 === "ondoubleclickcapture") {
        attribute2 = "ondblclickcapture";
      }
      if (!useCapture && node[attribute2] === null) {
        node[attribute2] = value;
      } else if (useCapture) {
        node.addEventListener(attribute2.substring(2, attribute2.length - 7), value, true);
      } else {
        var eventName;
        if (attribute2 in window) {
          var standardEventName = attribute2.substring(2);
          eventName = standardEventName;
        } else {
          var customEventName = attribute2[2] + key.slice(3);
          eventName = customEventName;
        }
        node.addEventListener(eventName, value);
      }
    }
  } else if (isObject(value)) {
    node[key] = value;
  } else if (value === true) {
    attr(node, key, "");
  } else if (value !== false && value != null) {
    if (node instanceof SVGElement && !nonPresentationSVGAttributes.test(key)) {
      attr(node, normalizeAttribute(key, "-"), value);
    } else {
      attr(node, key, value);
    }
  }
}
function attr(node, key, value) {
  node.setAttribute(key, value);
}
function attrNS(node, namespace, key, value) {
  node.setAttributeNS(namespace, key, value);
}
function attributes(attr2, node) {
  var _iterator3 = _createForOfIteratorHelper(keys(attr2)), _step3;
  try {
    for (_iterator3.s(); !(_step3 = _iterator3.n()).done; ) {
      var key = _step3.value;
      attribute(key, attr2[key], node);
    }
  } catch (err) {
    _iterator3.e(err);
  } finally {
    _iterator3.f();
  }
  return node;
}
function _useText(initialValue) {
  var text = new Text();
  Object.defineProperty(text, "toString", {
    value: function value() {
      return this.textContent;
    }
  });
  function setText(value) {
    text.textContent = value;
  }
  if (initialValue != null) {
    setText(initialValue);
  }
  return [text, setText];
}
function _useClassList(initialValue) {
  var div = document.createElement("div");
  if (initialValue != null) {
    div.className = _className(initialValue);
  }
  var list = div.classList;
  function ClassList(value) {
    value.setAttribute("class", list.value);
    list = value.classList;
  }
  Object.defineProperties(ClassList, Object.getOwnPropertyDescriptors({
    get size() {
      return list.length;
    },
    get value() {
      return list.value;
    },
    add: function add() {
      var _list;
      (_list = list).add.apply(_list, arguments);
    },
    remove: function remove() {
      var _list2;
      (_list2 = list).remove.apply(_list2, arguments);
    },
    toggle: function toggle(token, force) {
      list.toggle(token, force);
    },
    contains: function contains(token) {
      return list.contains(token);
    }
  }));
  return ClassList;
}
function _useMemo(factory) {
  return factory();
}
function _forwardRef(render) {
  return function(_ref) {
    var ref = _ref.ref, props = _objectWithoutProperties(_ref, _excluded4);
    return render(props, ref !== null && ref !== void 0 ? ref : _createRef());
  };
}
function _useImperativeHandle(ref, init) {
  attachRef(ref, init());
}
var cache = /* @__PURE__ */ new Map();
var createStyledComponent = function createStyledComponent2(name) {
  return function(list) {
    for (var _len = arguments.length, interpolations = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
      interpolations[_key - 1] = arguments[_key];
    }
    return function(_ref) {
      var style2 = _ref.style, props = _objectWithoutProperties(_ref, _excluded5);
      var lastIndex = list.length - 1;
      var css = list.slice(0, lastIndex).reduce(function(p, s, i) {
        var interpolation = interpolations[i];
        var current = typeof interpolation === "function" ? interpolation(props) : interpolation;
        return p + s + current;
      }, "") + list[lastIndex];
      return _createElement(name, _objectSpread({
        style: [css, style2]
      }, props));
    };
  };
};
var baseStyled = function baseStyled2(customComponent) {
  return createStyledComponent(customComponent);
};
var _styled = /* @__PURE__ */ new Proxy(baseStyled, {
  get: function get(_, name) {
    return setIfAbsent(cache, name, function() {
      return createStyledComponent(name);
    });
  }
});
function setIfAbsent(map, key, getValue) {
  if (map.has(key)) {
    return map.get(key);
  } else {
    var value = getValue(key);
    map.set(key, value);
    return value;
  }
}
function _preventDefault(event) {
  event.preventDefault();
  return event;
}
function _stopPropagation(event) {
  event.stopPropagation();
  return event;
}

})();

/* </nowiki> */

//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZTgtZG9tLWRlZmluZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zbGljZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BhdGguanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3ltYm9sLXJlZ2lzdHJ5LWRldGVjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZm9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLnRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGguanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kYXRlLXRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5kYXRlLnRvLXByaW1pdGl2ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3Nvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXBvc3NpYmxlLXByb3RvdHlwZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdGhpcy1udW1iZXItdmFsdWUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93aGl0ZXNwYWNlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy10cmltLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci5jb25zdHJ1Y3Rvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1mbGFncy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1nZXQtZmxhZ3MuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vcHJveHktcG9seWZpbGxAMC4zLjIvbm9kZV9tb2R1bGVzL3Byb3h5LXBvbHlmaWxsL3Byb3h5Lm1pbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjQvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL21vZHVsZXMvTm9kZUxpc3QucHJvdG90eXBlLmZvckVhY2guanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19JdGVyYXRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjQvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX0FycmF5SXRlcmF0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL05vZGVMaXN0LnByb3RvdHlwZS5AQGl0ZXJhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuNC9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9FdmVudC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjQvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL21vZHVsZXMvQ3VzdG9tRXZlbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0RvY3VtZW50RnJhZ21lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0VsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0hUTUxUZW1wbGF0ZUVsZW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL011dGF0aW9uT2JzZXJ2ZXIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL05vZGUucHJvdG90eXBlLmNvbnRhaW5zLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuNC9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9+c2hhZHlkb20uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19ET01Ub2tlbkxpc3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0RPTVRva2VuTGlzdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjQvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL21vZHVsZXMvRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZXBsYWNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuNC9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9ET01Ub2tlbkxpc3QucHJvdG90eXBlLmZvckVhY2guanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0RPTVRva2VuTGlzdC5wcm90b3R5cGUuQEBpdGVyYXRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vQG1yaGVucnkrY29yZS13ZWJAMS4yLjQvbm9kZV9tb2R1bGVzL0BtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX211dGF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbXJoZW5yeStjb3JlLXdlYkAxLjIuNC9ub2RlX21vZHVsZXMvQG1yaGVucnkvY29yZS13ZWIvbW9kdWxlcy9FbGVtZW50LnByb3RvdHlwZS5yZW1vdmUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL0BtcmhlbnJ5K2NvcmUtd2ViQDEuMi40L25vZGVfbW9kdWxlcy9AbXJoZW5yeS9jb3JlLXdlYi9tb2R1bGVzL0NoYXJhY3RlckRhdGEucHJvdG90eXBlLnJlbW92ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuaXRlcmF0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wcm94eS1hY2Nlc3Nvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93cmFwLWVycm9yLWNvbnN0cnVjdG9yLXdpdGgtY2F1c2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IuY2F1c2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci10by1zdHJpbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZXJyb3IudG8tc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZvci1lYWNoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3IuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1mcm9tLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZyb20uanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5kZXgtb2YuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5qb2luLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXJlZHVjZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vudmlyb25tZW50LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtbm9kZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5yZWR1Y2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWxldGUtcHJvcGVydHktb3ItdGhyb3cuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkudW5zaGlmdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLWRpcmVjdC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtcHJveHkuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IuZmlsdGVyLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0ZS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5mb3ItZWFjaC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLW1hcC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5tYXAuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IucmVkdWNlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5vbi1leHRlbnNpYmxlLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWlzLWV4dGVuc2libGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mcmVlemluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29sbGVjdGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zcGVjaWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29sbGVjdGlvbi1zdHJvbmcuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubWFwLmNvbnN0cnVjdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm1hcC5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmRlZmluZS1wcm9wZXJ0eS5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5rZXlzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5zZWFsLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLWRvdC1hbGwuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRlc3QuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1yZWdleHAuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9ub3QtYS1yZWdleHAuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuZW5kcy13aXRoLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pbmNsdWRlcy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUuanMiLCAibm9kZV9tb2R1bGVzLy5wbnBtL2NvcmUtanNAMy40MS4wL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LXN1YnN0aXR1dGlvbi5qcyIsICJub2RlX21vZHVsZXMvLnBucG0vY29yZS1qc0AzLjQxLjAvbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9jb3JlLWpzQDMuNDEuMC9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzIiwgInNyYy9KU1gvSlNYLnRzIiwgIm5vZGVfbW9kdWxlcy8ucG5wbS9qc3gtZG9tQDguMS42L25vZGVfbW9kdWxlcy9qc3gtZG9tL2luZGV4LmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIndXNlIHN0cmljdCc7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT09IE1hdGggJiYgaXQ7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxubW9kdWxlLmV4cG9ydHMgPVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZ2xvYmFsLXRoaXMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2YgZ2xvYmFsVGhpcyA9PSAnb2JqZWN0JyAmJiBnbG9iYWxUaGlzKSB8fFxuICBjaGVjayh0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFscyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYpIHx8XG4gIGNoZWNrKHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsKSB8fFxuICBjaGVjayh0eXBlb2YgdGhpcyA9PSAnb2JqZWN0JyAmJiB0aGlzKSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmMgLS0gZmFsbGJhY2tcbiAgKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pKCkgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBEZXRlY3QgSUU4J3MgaW5jb21wbGV0ZSBkZWZpbmVQcm9wZXJ0eSBpbXBsZW1lbnRhdGlvblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pWzFdICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbiAgdmFyIHRlc3QgPSAoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KS5iaW5kKCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gdHlwZW9mIHRlc3QgIT0gJ2Z1bmN0aW9uJyB8fCB0ZXN0Lmhhc093blByb3BlcnR5KCdwcm90b3R5cGUnKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyh7fS50b1N0cmluZyk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBzdHJpbmdTbGljZSh0b1N0cmluZyhpdCksIDgsIC0xKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3Ncbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyB0aHJvd3MgYW4gZXJyb3IgaW4gcmhpbm8sIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9yaGluby9pc3N1ZXMvMzQ2XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnMgLS0gc2FmZVxuICByZXR1cm4gISRPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKTtcbn0pID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjbGFzc29mKGl0KSA9PT0gJ1N0cmluZycgPyBzcGxpdChpdCwgJycpIDogJE9iamVjdChpdCk7XG59IDogJE9iamVjdDtcbiIsICIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlcXVpcmVPYmplY3RDb2VyY2libGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZXF1aXJlb2JqZWN0Y29lcmNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoaXQpKSB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJbmRleGVkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoaXQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgYUZ1bmN0aW9uID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogdW5kZWZpbmVkO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZXNwYWNlLCBtZXRob2QpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gYUZ1bmN0aW9uKGdsb2JhbFRoaXNbbmFtZXNwYWNlXSkgOiBnbG9iYWxUaGlzW25hbWVzcGFjZV0gJiYgZ2xvYmFsVGhpc1tuYW1lc3BhY2VdW21ldGhvZF07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsVGhpcy5uYXZpZ2F0b3I7XG52YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQ7XG5cbm1vZHVsZS5leHBvcnRzID0gdXNlckFnZW50ID8gU3RyaW5nKHVzZXJBZ2VudCkgOiAnJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG5cbnZhciBwcm9jZXNzID0gZ2xvYmFsVGhpcy5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWxUaGlzLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MICYmXG4gICFTeW1ib2wuc2hhbSAmJlxuICB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBpc051bGxPclVuZGVmaW5lZChmdW5jKSA/IHVuZGVmaW5lZCA6IGFDYWxsYWJsZShmdW5jKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGdsb2JhbFRoaXNba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuNDEuMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI1IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuNDEuMC9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgc3RvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSB8fCB7fSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gYFRvT2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9vYmplY3Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiAkT2JqZWN0KHJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFN5bWJvbCA9IGdsb2JhbFRoaXMuU3ltYm9sO1xudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgY3JlYXRlV2VsbEtub3duU3ltYm9sID0gVVNFX1NZTUJPTF9BU19VSUQgPyBTeW1ib2xbJ2ZvciddIHx8IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSkge1xuICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IE5BVElWRV9TWU1CT0wgJiYgaGFzT3duKFN5bWJvbCwgbmFtZSlcbiAgICAgID8gU3ltYm9sW25hbWVdXG4gICAgICA6IGNyZWF0ZVdlbGxLbm93blN5bWJvbCgnU3ltYm9sLicgKyBuYW1lKTtcbiAgfSByZXR1cm4gV2VsbEtub3duU3ltYm9sc1N0b3JlW25hbWVdO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgRVhJU1RTID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gRVhJU1RTID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBWOCB+IENocm9tZSAzNi1cbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMzMzRcbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAncHJvdG90eXBlJywge1xuICAgIHZhbHVlOiA0MixcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSkucHJvdG90eXBlICE9PSA0Mjtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgRU5VTUVSQUJMRSA9ICdlbnVtZXJhYmxlJztcbnZhciBDT05GSUdVUkFCTEUgPSAnY29uZmlndXJhYmxlJztcbnZhciBXUklUQUJMRSA9ICd3cml0YWJsZSc7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmICh0eXBlb2YgTyA9PT0gJ2Z1bmN0aW9uJyAmJiBQID09PSAncHJvdG90eXBlJyAmJiAndmFsdWUnIGluIEF0dHJpYnV0ZXMgJiYgV1JJVEFCTEUgaW4gQXR0cmlidXRlcyAmJiAhQXR0cmlidXRlc1tXUklUQUJMRV0pIHtcbiAgICB2YXIgY3VycmVudCA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudFtXUklUQUJMRV0pIHtcbiAgICAgIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICAgICAgQXR0cmlidXRlcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBDT05GSUdVUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbQ09ORklHVVJBQkxFXSA6IGN1cnJlbnRbQ09ORklHVVJBQkxFXSxcbiAgICAgICAgZW51bWVyYWJsZTogRU5VTUVSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tFTlVNRVJBQkxFXSA6IGN1cnJlbnRbRU5VTUVSQUJMRV0sXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gIH0gcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbn0gOiAkZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IG5ldyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0ge307XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24nKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFdlYWtNYXAgPSBnbG9iYWxUaGlzLldlYWtNYXA7XG52YXIgc2V0LCBnZXQsIGhhcztcblxudmFyIGVuZm9yY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGhhcyhpdCkgPyBnZXQoaXQpIDogc2V0KGl0LCB7fSk7XG59O1xuXG52YXIgZ2V0dGVyRm9yID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBzdGF0ZTtcbiAgICBpZiAoIWlzT2JqZWN0KGl0KSB8fCAoc3RhdGUgPSBnZXQoaXQpKS50eXBlICE9PSBUWVBFKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBzdG9yZS5zZXQoaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5nZXQoaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuaGFzKGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIG1ha2VCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XG4gIHZhciBzaW1wbGUgPSBvcHRpb25zLmVudW1lcmFibGU7XG4gIHZhciBuYW1lID0gb3B0aW9ucy5uYW1lICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5hbWUgOiBrZXk7XG4gIGlmIChpc0NhbGxhYmxlKHZhbHVlKSkgbWFrZUJ1aWx0SW4odmFsdWUsIG5hbWUsIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy5nbG9iYWwpIHtcbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZUdsb2JhbFByb3BlcnR5KGtleSwgdmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIW9wdGlvbnMudW5zYWZlKSBkZWxldGUgT1trZXldO1xuICAgICAgZWxzZSBpZiAoT1trZXldKSBzaW1wbGUgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgICBpZiAoc2ltcGxlKSBPW2tleV0gPSB2YWx1ZTtcbiAgICBlbHNlIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogIW9wdGlvbnMubm9uQ29uZmlndXJhYmxlLFxuICAgICAgd3JpdGFibGU6ICFvcHRpb25zLm5vbldyaXRhYmxlXG4gICAgfSk7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWF0aC10cnVuYyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgudHJ1bmMgfHwgZnVuY3Rpb24gdHJ1bmMoeCkge1xuICB2YXIgbiA9ICt4O1xuICByZXR1cm4gKG4gPiAwID8gZmxvb3IgOiBjZWlsKShuKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYFRvTGVuZ3RoYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9sZW5ndGhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBsZW4gPSB0b0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KTtcbiAgcmV0dXJuIGxlbiA+IDAgPyBtaW4obGVuLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIGlmIChsZW5ndGggPT09IDApIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9PSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9PSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgaWYgKChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSAmJiBPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCh0cnVlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5kZXhvZlxuICBpbmRleE9mOiBjcmVhdGVNZXRob2QoZmFsc2UpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmRleE9mO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT09IE5BVElWRSA/IGZhbHNlXG4gICAgOiBpc0NhbGxhYmxlKGRldGVjdGlvbikgPyBmYWlscyhkZXRlY3Rpb24pXG4gICAgOiAhIWRldGVjdGlvbjtcbn07XG5cbnZhciBub3JtYWxpemUgPSBpc0ZvcmNlZC5ub3JtYWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHJldHVybiBTdHJpbmcoc3RyaW5nKS5yZXBsYWNlKHJlcGxhY2VtZW50LCAnLicpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG52YXIgZGF0YSA9IGlzRm9yY2VkLmRhdGEgPSB7fTtcbnZhciBOQVRJVkUgPSBpc0ZvcmNlZC5OQVRJVkUgPSAnTic7XG52YXIgUE9MWUZJTEwgPSBpc0ZvcmNlZC5QT0xZRklMTCA9ICdQJztcblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSAmJiBnbG9iYWxUaGlzW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBDT1JSRUNUX0FSR1VNRU5UUyA9IGNsYXNzb2ZSYXcoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSAkT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT09ICdPYmplY3QnICYmIGlzQ2FsbGFibGUoTy5jYWxsZWUpID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ1N5bWJvbCcpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nJyk7XG4gIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qta2V5cyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTICYmICFWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcHMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgcHJvcHNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdkb2N1bWVudCcsICdkb2N1bWVudEVsZW1lbnQnKTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAtLSBvbGQgSUUsIFdTSCAqL1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGRlZmluZVByb3BlcnRpZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cycpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2h0bWwnKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xuXG52YXIgR1QgPSAnPic7XG52YXIgTFQgPSAnPCc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgU0NSSVBUID0gJ3NjcmlwdCc7XG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG5cbnZhciBFbXB0eUNvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuXG52YXIgc2NyaXB0VGFnID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgcmV0dXJuIExUICsgU0NSSVBUICsgR1QgKyBjb250ZW50ICsgTFQgKyAnLycgKyBTQ1JJUFQgKyBHVDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBBY3RpdmVYIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIChhY3RpdmVYRG9jdW1lbnQpIHtcbiAgYWN0aXZlWERvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnJykpO1xuICBhY3RpdmVYRG9jdW1lbnQuY2xvc2UoKTtcbiAgdmFyIHRlbXAgPSBhY3RpdmVYRG9jdW1lbnQucGFyZW50V2luZG93Lk9iamVjdDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtYXNzaWdubWVudCAtLSBhdm9pZCBtZW1vcnkgbGVha1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsO1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgYWN0aXZlWERvY3VtZW50ID0gbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJ1xuICAgID8gZG9jdW1lbnQuZG9tYWluICYmIGFjdGl2ZVhEb2N1bWVudFxuICAgICAgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgLy8gb2xkIElFXG4gICAgICA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpXG4gICAgOiBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCk7IC8vIFdTSFxuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZihyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoW10uc2xpY2UpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmUgKi9cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKS5mO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGFycmF5U2xpY2Uod2luZG93TmFtZXMpO1xuICB9XG59O1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgY2xhc3NvZihpdCkgPT09ICdXaW5kb3cnXG4gICAgPyBnZXRXaW5kb3dOYW1lcyhpdClcbiAgICA6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzKHRvSW5kZXhlZE9iamVjdChpdCkpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKSB7XG4gIGlmIChkZXNjcmlwdG9yLmdldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5nZXQsIG5hbWUsIHsgZ2V0dGVyOiB0cnVlIH0pO1xuICBpZiAoZGVzY3JpcHRvci5zZXQpIG1ha2VCdWlsdEluKGRlc2NyaXB0b3Iuc2V0LCBuYW1lLCB7IHNldHRlcjogdHJ1ZSB9KTtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5LmYodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG5leHBvcnRzLmYgPSB3ZWxsS25vd25TeW1ib2w7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxUaGlzO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHZhciBTeW1ib2wgPSBwYXRoLlN5bWJvbCB8fCAocGF0aC5TeW1ib2wgPSB7fSk7XG4gIGlmICghaGFzT3duKFN5bWJvbCwgTkFNRSkpIGRlZmluZVByb3BlcnR5KFN5bWJvbCwgTkFNRSwge1xuICAgIHZhbHVlOiB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoTkFNRSlcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgU3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJyk7XG4gIHZhciBTeW1ib2xQcm90b3R5cGUgPSBTeW1ib2wgJiYgU3ltYm9sLnByb3RvdHlwZTtcbiAgdmFyIHZhbHVlT2YgPSBTeW1ib2xQcm90b3R5cGUgJiYgU3ltYm9sUHJvdG90eXBlLnZhbHVlT2Y7XG4gIHZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbiAgaWYgKFN5bWJvbFByb3RvdHlwZSAmJiAhU3ltYm9sUHJvdG90eXBlW1RPX1BSSU1JVElWRV0pIHtcbiAgICAvLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIC5sZW5ndGhcbiAgICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgVE9fUFJJTUlUSVZFLCBmdW5jdGlvbiAoaGludCkge1xuICAgICAgcmV0dXJuIGNhbGwodmFsdWVPZiwgdGhpcyk7XG4gICAgfSwgeyBhcml0eTogMSB9KTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgVEFHLCBTVEFUSUMpIHtcbiAgaWYgKHRhcmdldCAmJiAhU1RBVElDKSB0YXJnZXQgPSB0YXJnZXQucHJvdG90eXBlO1xuICBpZiAodGFyZ2V0ICYmICFoYXNPd24odGFyZ2V0LCBUT19TVFJJTkdfVEFHKSkge1xuICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgVE9fU1RSSU5HX1RBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBUQUcgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2ZSYXcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4pIHtcbiAgLy8gTmFzaG9ybiBidWc6XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMjhcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTEzMFxuICBpZiAoY2xhc3NvZlJhdyhmbikgPT09ICdGdW5jdGlvbicpIHJldHVybiB1bmN1cnJ5VGhpcyhmbik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgYmluZCA9IHVuY3VycnlUaGlzKHVuY3VycnlUaGlzLmJpbmQpO1xuXG4vLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0KSB7XG4gIGFDYWxsYWJsZShmbik7XG4gIHJldHVybiB0aGF0ID09PSB1bmRlZmluZWQgPyBmbiA6IE5BVElWRV9CSU5EID8gYmluZChmbiwgdGhhdCkgOiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG4vLyBgSXNBcnJheWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzYXJyYXlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1pc2FycmF5IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZ3VtZW50KSB7XG4gIHJldHVybiBjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ0FycmF5Jztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xuXG52YXIgbm9vcCA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBjb25zdHJ1Y3QgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ2NvbnN0cnVjdCcpO1xudmFyIGNvbnN0cnVjdG9yUmVnRXhwID0gL15cXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXFxiLztcbnZhciBleGVjID0gdW5jdXJyeVRoaXMoY29uc3RydWN0b3JSZWdFeHAuZXhlYyk7XG52YXIgSU5DT1JSRUNUX1RPX1NUUklORyA9ICFjb25zdHJ1Y3RvclJlZ0V4cC50ZXN0KG5vb3ApO1xuXG52YXIgaXNDb25zdHJ1Y3Rvck1vZGVybiA9IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IoYXJndW1lbnQpIHtcbiAgaWYgKCFpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0cnVjdChub29wLCBbXSwgYXJndW1lbnQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxudmFyIGlzQ29uc3RydWN0b3JMZWdhY3kgPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgc3dpdGNoIChjbGFzc29mKGFyZ3VtZW50KSkge1xuICAgIGNhc2UgJ0FzeW5jRnVuY3Rpb24nOlxuICAgIGNhc2UgJ0dlbmVyYXRvckZ1bmN0aW9uJzpcbiAgICBjYXNlICdBc3luY0dlbmVyYXRvckZ1bmN0aW9uJzogcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gd2UgY2FuJ3QgY2hlY2sgLnByb3RvdHlwZSBzaW5jZSBjb25zdHJ1Y3RvcnMgcHJvZHVjZWQgYnkgLmJpbmQgaGF2ZW4ndCBpdFxuICAgIC8vIGBGdW5jdGlvbiN0b1N0cmluZ2AgdGhyb3dzIG9uIHNvbWUgYnVpbHQtaXQgZnVuY3Rpb24gaW4gc29tZSBsZWdhY3kgZW5naW5lc1xuICAgIC8vIChmb3IgZXhhbXBsZSwgYERPTVF1YWRgIGFuZCBzaW1pbGFyIGluIEZGNDEtKVxuICAgIHJldHVybiBJTkNPUlJFQ1RfVE9fU1RSSU5HIHx8ICEhZXhlYyhjb25zdHJ1Y3RvclJlZ0V4cCwgaW5zcGVjdFNvdXJjZShhcmd1bWVudCkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5pc0NvbnN0cnVjdG9yTGVnYWN5LnNoYW0gPSB0cnVlO1xuXG4vLyBgSXNDb25zdHJ1Y3RvcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gIWNvbnN0cnVjdCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBjYWxsZWQ7XG4gIHJldHVybiBpc0NvbnN0cnVjdG9yTW9kZXJuKGlzQ29uc3RydWN0b3JNb2Rlcm4uY2FsbClcbiAgICB8fCAhaXNDb25zdHJ1Y3Rvck1vZGVybihPYmplY3QpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oZnVuY3Rpb24gKCkgeyBjYWxsZWQgPSB0cnVlOyB9KVxuICAgIHx8IGNhbGxlZDtcbn0pID8gaXNDb25zdHJ1Y3RvckxlZ2FjeSA6IGlzQ29uc3RydWN0b3JNb2Rlcm47XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGEgcGFydCBvZiBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5KSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKGlzQ29uc3RydWN0b3IoQykgJiYgKEMgPT09ICRBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyAkQXJyYXkgOiBDO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5LCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoYXJyYXlTcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWxBcnJheSkpKGxlbmd0aCA9PT0gMCA/IDAgOiBsZW5ndGgpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGZvckVhY2gsIG1hcCwgZmlsdGVyLCBzb21lLCBldmVyeSwgZmluZCwgZmluZEluZGV4LCBmaWx0ZXJSZWplY3QgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT09IDY7XG4gIHZhciBJU19GSUxURVJfUkVKRUNUID0gVFlQRSA9PT0gNztcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0LCBzcGVjaWZpY0NyZWF0ZSkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2Uoc2VsZik7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNyZWF0ZSA9IHNwZWNpZmljQ3JlYXRlIHx8IGFycmF5U3BlY2llc0NyZWF0ZTtcbiAgICB2YXIgdGFyZ2V0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSIHx8IElTX0ZJTFRFUl9SRUpFQ1QgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2Ugc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSA0OiByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgIC8vIGV2ZXJ5XG4gICAgICAgICAgY2FzZSA3OiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclJlamVjdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiB0YXJnZXQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuICBmaWx0ZXI6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4gIGZpbmQ6IGNyZWF0ZU1ldGhvZCg1KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcbiAgZmluZEluZGV4OiBjcmVhdGVNZXRob2QoNiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyUmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmlsdGVyaW5nXG4gIGZpbHRlclJlamVjdDogY3JlYXRlTWV0aG9kKDcpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBuYXRpdmVPYmplY3RDcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJyk7XG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtZGVmaW5lJyk7XG52YXIgZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xuXG52YXIgSElEREVOID0gc2hhcmVkS2V5KCdoaWRkZW4nKTtcbnZhciBTWU1CT0wgPSAnU3ltYm9sJztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1lNQk9MKTtcblxudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyICRTeW1ib2wgPSBnbG9iYWxUaGlzLlN5bWJvbDtcbnZhciBTeW1ib2xQcm90b3R5cGUgPSAkU3ltYm9sICYmICRTeW1ib2xbUFJPVE9UWVBFXTtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsVGhpcy5SYW5nZUVycm9yO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbFRoaXMuVHlwZUVycm9yO1xudmFyIFFPYmplY3QgPSBnbG9iYWxUaGlzLlFPYmplY3Q7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG52YXIgbmF0aXZlRGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZjtcbnZhciBuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmY7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvdHlwZVN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xuXG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBVU0VfU0VUVEVSID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgZmFsbGJhY2tEZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIHZhciBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yID0gbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgUCk7XG4gIGlmIChPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKSBkZWxldGUgT2JqZWN0UHJvdG90eXBlW1BdO1xuICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgJiYgTyAhPT0gT2JqZWN0UHJvdG90eXBlKSB7XG4gICAgbmF0aXZlRGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlLCBQLCBPYmplY3RQcm90b3R5cGVEZXNjcmlwdG9yKTtcbiAgfVxufTtcblxudmFyIHNldFN5bWJvbERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RDcmVhdGUobmF0aXZlRGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT09IDc7XG59KSA/IGZhbGxiYWNrRGVmaW5lUHJvcGVydHkgOiBuYXRpdmVEZWZpbmVQcm9wZXJ0eTtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnLCBkZXNjcmlwdGlvbikge1xuICB2YXIgc3ltYm9sID0gQWxsU3ltYm9sc1t0YWddID0gbmF0aXZlT2JqZWN0Q3JlYXRlKFN5bWJvbFByb3RvdHlwZSk7XG4gIHNldEludGVybmFsU3RhdGUoc3ltYm9sLCB7XG4gICAgdHlwZTogU1lNQk9MLFxuICAgIHRhZzogdGFnLFxuICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvblxuICB9KTtcbiAgaWYgKCFERVNDUklQVE9SUykgc3ltYm9sLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gIHJldHVybiBzeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBpZiAoTyA9PT0gT2JqZWN0UHJvdG90eXBlKSAkZGVmaW5lUHJvcGVydHkoT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCwgQXR0cmlidXRlcyk7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5ID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChoYXNPd24oQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghQXR0cmlidXRlcy5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhc093bihPLCBISURERU4pKSBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBISURERU4sIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCBuYXRpdmVPYmplY3RDcmVhdGUobnVsbCkpKTtcbiAgICAgIE9bSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc093bihPLCBISURERU4pICYmIE9bSElEREVOXVtrZXldKSBPW0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgQXR0cmlidXRlcyA9IG5hdGl2ZU9iamVjdENyZWF0ZShBdHRyaWJ1dGVzLCB7IGVudW1lcmFibGU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzY3JpcHRvcihPLCBrZXksIEF0dHJpYnV0ZXMpO1xuICB9IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBrZXksIEF0dHJpYnV0ZXMpO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcGVydGllcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKHByb3BlcnRpZXMpLmNvbmNhdCgkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHByb3BlcnRpZXMpKTtcbiAgJGZvckVhY2goa2V5cywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbCgkcHJvcGVydHlJc0VudW1lcmFibGUsIHByb3BlcnRpZXMsIGtleSkpICRkZWZpbmVQcm9wZXJ0eShPLCBrZXksIHByb3BlcnRpZXNba2V5XSk7XG4gIH0pO1xuICByZXR1cm4gTztcbn07XG5cbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IG5hdGl2ZU9iamVjdENyZWF0ZShPKSA6ICRkZWZpbmVQcm9wZXJ0aWVzKG5hdGl2ZU9iamVjdENyZWF0ZShPKSwgUHJvcGVydGllcyk7XG59O1xuXG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgUCA9IHRvUHJvcGVydHlLZXkoVik7XG4gIHZhciBlbnVtZXJhYmxlID0gY2FsbChuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSwgdGhpcywgUCk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIFApICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGVudW1lcmFibGUgfHwgIWhhc093bih0aGlzLCBQKSB8fCAhaGFzT3duKEFsbFN5bWJvbHMsIFApIHx8IGhhc093bih0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtQXVxuICAgID8gZW51bWVyYWJsZSA6IHRydWU7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIHZhciBpdCA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgZGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbiAgaWYgKGRlc2NyaXB0b3IgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXNPd24oaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkge1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKGhpZGRlbktleXMsIGtleSkpIHB1c2gocmVzdWx0LCBrZXkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gKE8pIHtcbiAgdmFyIElTX09CSkVDVF9QUk9UT1RZUEUgPSBPID09PSBPYmplY3RQcm90b3R5cGU7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMoSVNfT0JKRUNUX1BST1RPVFlQRSA/IE9iamVjdFByb3RvdHlwZVN5bWJvbHMgOiB0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICghSVNfT0JKRUNUX1BST1RPVFlQRSB8fCBoYXNPd24oT2JqZWN0UHJvdG90eXBlLCBrZXkpKSkge1xuICAgICAgcHVzaChyZXN1bHQsIEFsbFN5bWJvbHNba2V5XSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIGBTeW1ib2xgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC1jb25zdHJ1Y3RvclxuaWYgKCFOQVRJVkVfU1lNQk9MKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKGlzUHJvdG90eXBlT2YoU3ltYm9sUHJvdG90eXBlLCB0aGlzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yJyk7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gIWFyZ3VtZW50cy5sZW5ndGggfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiAkdG9TdHJpbmcoYXJndW1lbnRzWzBdKTtcbiAgICB2YXIgdGFnID0gdWlkKGRlc2NyaXB0aW9uKTtcbiAgICB2YXIgc2V0dGVyID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB2YXIgJHRoaXMgPSB0aGlzID09PSB1bmRlZmluZWQgPyBnbG9iYWxUaGlzIDogdGhpcztcbiAgICAgIGlmICgkdGhpcyA9PT0gT2JqZWN0UHJvdG90eXBlKSBjYWxsKHNldHRlciwgT2JqZWN0UHJvdG90eXBlU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhc093bigkdGhpcywgSElEREVOKSAmJiBoYXNPd24oJHRoaXNbSElEREVOXSwgdGFnKSkgJHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSk7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRTeW1ib2xEZXNjcmlwdG9yKCR0aGlzLCB0YWcsIGRlc2NyaXB0b3IpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBSYW5nZUVycm9yKSkgdGhyb3cgZXJyb3I7XG4gICAgICAgIGZhbGxiYWNrRGVmaW5lUHJvcGVydHkoJHRoaXMsIHRhZywgZGVzY3JpcHRvcik7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgVVNFX1NFVFRFUikgc2V0U3ltYm9sRGVzY3JpcHRvcihPYmplY3RQcm90b3R5cGUsIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogc2V0dGVyIH0pO1xuICAgIHJldHVybiB3cmFwKHRhZywgZGVzY3JpcHRpb24pO1xuICB9O1xuXG4gIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2xbUFJPVE9UWVBFXTtcblxuICBkZWZpbmVCdWlsdEluKFN5bWJvbFByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykudGFnO1xuICB9KTtcblxuICBkZWZpbmVCdWlsdEluKCRTeW1ib2wsICd3aXRob3V0U2V0dGVyJywgZnVuY3Rpb24gKGRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIHdyYXAodWlkKGRlc2NyaXB0aW9uKSwgZGVzY3JpcHRpb24pO1xuICB9KTtcblxuICBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mID0gJGRlZmluZVByb3BlcnR5O1xuICBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydGllcztcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgd3JhcHBlZFdlbGxLbm93blN5bWJvbE1vZHVsZS5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3ZWxsS25vd25TeW1ib2wobmFtZSksIG5hbWUpO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLVN5bWJvbC1kZXNjcmlwdGlvblxuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihTeW1ib2xQcm90b3R5cGUsICdkZXNjcmlwdGlvbicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpLmRlc2NyaXB0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghSVNfUFVSRSkge1xuICAgICAgZGVmaW5lQnVpbHRJbihPYmplY3RQcm90b3R5cGUsICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgeyB1bnNhZmU6IHRydWUgfSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIFN5bWJvbDogJFN5bWJvbFxufSk7XG5cbiRmb3JFYWNoKG9iamVjdEtleXMoV2VsbEtub3duU3ltYm9sc1N0b3JlKSwgZnVuY3Rpb24gKG5hbWUpIHtcbiAgZGVmaW5lV2VsbEtub3duU3ltYm9sKG5hbWUpO1xufSk7XG5cbiQoeyB0YXJnZXQ6IFNZTUJPTCwgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCB9LCB7XG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IFVTRV9TRVRURVIgPSBmYWxzZTsgfVxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICAvLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXG59KTtcblxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICAvLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzXG59KTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddYCBwcm9wZXJ0eVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9zdHJpbmd0YWdcbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsIFNZTUJPTCk7XG5cbmhpZGRlbktleXNbSElEREVOXSA9IHRydWU7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1zeW1ib2wgLS0gc2FmZSAqL1xubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MICYmICEhU3ltYm9sWydmb3InXSAmJiAhIVN5bWJvbC5rZXlGb3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N0cmluZy10by1zeW1ib2wtcmVnaXN0cnknKTtcbnZhciBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtdG8tc3RyaW5nLXJlZ2lzdHJ5Jyk7XG5cbi8vIGBTeW1ib2wuZm9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLmZvclxuJCh7IHRhcmdldDogJ1N5bWJvbCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0xfUkVHSVNUUlkgfSwge1xuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhrZXkpO1xuICAgIGlmIChoYXNPd24oU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSwgc3RyaW5nKSkgcmV0dXJuIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXTtcbiAgICB2YXIgc3ltYm9sID0gZ2V0QnVpbHRJbignU3ltYm9sJykoc3RyaW5nKTtcbiAgICBTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5W3N0cmluZ10gPSBzeW1ib2w7XG4gICAgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1ib2xdID0gc3RyaW5nO1xuICAgIHJldHVybiBzeW1ib2w7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBOQVRJVkVfU1lNQk9MX1JFR0lTVFJZID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1yZWdpc3RyeS1kZXRlY3Rpb24nKTtcblxudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5rZXlGb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wua2V5Zm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgbmV3IFR5cGVFcnJvcih0cnlUb1N0cmluZyhzeW0pICsgJyBpcyBub3QgYSBzeW1ib2wnKTtcbiAgICBpZiAoaGFzT3duKFN5bWJvbFRvU3RyaW5nUmVnaXN0cnksIHN5bSkpIHJldHVybiBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bV07XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgYXBwbHkgPSBGdW5jdGlvblByb3RvdHlwZS5hcHBseTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kLCBlcy9uby1yZWZsZWN0IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFJlZmxlY3QgPT0gJ29iamVjdCcgJiYgUmVmbGVjdC5hcHBseSB8fCAoTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoYXBwbHkpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShhcHBseSwgYXJndW1lbnRzKTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVwbGFjZXIpIHtcbiAgaWYgKGlzQ2FsbGFibGUocmVwbGFjZXIpKSByZXR1cm4gcmVwbGFjZXI7XG4gIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJldHVybjtcbiAgdmFyIHJhd0xlbmd0aCA9IHJlcGxhY2VyLmxlbmd0aDtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdMZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGVtZW50ID0gcmVwbGFjZXJbaV07XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdzdHJpbmcnKSBwdXNoKGtleXMsIGVsZW1lbnQpO1xuICAgIGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdudW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT09ICdOdW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT09ICdTdHJpbmcnKSBwdXNoKGtleXMsIHRvU3RyaW5nKGVsZW1lbnQpKTtcbiAgfVxuICB2YXIga2V5c0xlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgcm9vdCA9IHRydWU7XG4gIHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChyb290KSB7XG4gICAgICByb290ID0gZmFsc2U7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KHRoaXMpKSByZXR1cm4gdmFsdWU7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXlzTGVuZ3RoOyBqKyspIGlmIChrZXlzW2pdID09PSBrZXkpIHJldHVybiB2YWx1ZTtcbiAgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBnZXRSZXBsYWNlckZ1bmN0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRzdHJpbmdpZnkgPSBnZXRCdWlsdEluKCdKU09OJywgJ3N0cmluZ2lmeScpO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcygvLi8uZXhlYyk7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIG51bWJlclRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxudmFyIHRlc3RlciA9IC9bXFx1RDgwMC1cXHVERkZGXS9nO1xudmFyIGxvdyA9IC9eW1xcdUQ4MDAtXFx1REJGRl0kLztcbnZhciBoaSA9IC9eW1xcdURDMDAtXFx1REZGRl0kLztcblxudmFyIFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpKCdzdHJpbmdpZnkgZGV0ZWN0aW9uJyk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIHJldHVybiAkc3RyaW5naWZ5KFtzeW1ib2xdKSAhPT0gJ1tudWxsXSdcbiAgICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgICB8fCAkc3RyaW5naWZ5KHsgYTogc3ltYm9sIH0pICE9PSAne30nXG4gICAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgICB8fCAkc3RyaW5naWZ5KE9iamVjdChzeW1ib2wpKSAhPT0gJ3t9Jztcbn0pO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC13ZWxsLWZvcm1lZC1zdHJpbmdpZnlcbnZhciBJTExfRk9STUVEX1VOSUNPREUgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkc3RyaW5naWZ5KCdcXHVERjA2XFx1RDgzNCcpICE9PSAnXCJcXFxcdWRmMDZcXFxcdWQ4MzRcIidcbiAgICB8fCAkc3RyaW5naWZ5KCdcXHVERUFEJykgIT09ICdcIlxcXFx1ZGVhZFwiJztcbn0pO1xuXG52YXIgc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggPSBmdW5jdGlvbiAoaXQsIHJlcGxhY2VyKSB7XG4gIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICB2YXIgJHJlcGxhY2VyID0gZ2V0UmVwbGFjZXJGdW5jdGlvbihyZXBsYWNlcik7XG4gIGlmICghaXNDYWxsYWJsZSgkcmVwbGFjZXIpICYmIChpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICBhcmdzWzFdID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAvLyBzb21lIG9sZCBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgV2ViS2l0KSBjb3VsZCBwYXNzIG51bWJlcnMgYXMga2V5c1xuICAgIGlmIChpc0NhbGxhYmxlKCRyZXBsYWNlcikpIHZhbHVlID0gY2FsbCgkcmVwbGFjZXIsIHRoaXMsICRTdHJpbmcoa2V5KSwgdmFsdWUpO1xuICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIH07XG4gIHJldHVybiBhcHBseSgkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbn07XG5cbnZhciBmaXhJbGxGb3JtZWQgPSBmdW5jdGlvbiAobWF0Y2gsIG9mZnNldCwgc3RyaW5nKSB7XG4gIHZhciBwcmV2ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0IC0gMSk7XG4gIHZhciBuZXh0ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0ICsgMSk7XG4gIGlmICgoZXhlYyhsb3csIG1hdGNoKSAmJiAhZXhlYyhoaSwgbmV4dCkpIHx8IChleGVjKGhpLCBtYXRjaCkgJiYgIWV4ZWMobG93LCBwcmV2KSkpIHtcbiAgICByZXR1cm4gJ1xcXFx1JyArIG51bWJlclRvU3RyaW5nKGNoYXJDb2RlQXQobWF0Y2gsIDApLCAxNik7XG4gIH0gcmV0dXJuIG1hdGNoO1xufTtcblxuaWYgKCRzdHJpbmdpZnkpIHtcbiAgLy8gYEpTT04uc3RyaW5naWZ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1qc29uLnN0cmluZ2lmeVxuICAkKHsgdGFyZ2V0OiAnSlNPTicsIHN0YXQ6IHRydWUsIGFyaXR5OiAzLCBmb3JjZWQ6IFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiB8fCBJTExfRk9STUVEX1VOSUNPREUgfSwge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gICAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICAgICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cyk7XG4gICAgICB2YXIgcmVzdWx0ID0gYXBwbHkoV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OID8gc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggOiAkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbiAgICAgIHJldHVybiBJTExfRk9STUVEX1VOSUNPREUgJiYgdHlwZW9mIHJlc3VsdCA9PSAnc3RyaW5nJyA/IHJlcGxhY2UocmVzdWx0LCB0ZXN0ZXIsIGZpeElsbEZvcm1lZCkgOiByZXN1bHQ7XG4gICAgfVxuICB9KTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZPUkNFRCA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHsgZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmYoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eXN5bWJvbHNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgdmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5U3ltYm9scyA/ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHModG9PYmplY3QoaXQpKSA6IFtdO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHNwbGl0IHRvIG1vZHVsZXMgbGlzdGVkIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN5bWJvbC5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5zeW1ib2wuZm9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN5bWJvbC5rZXktZm9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5Jyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMnKTtcbiIsICIvLyBgU3ltYm9sLnByb3RvdHlwZS5kZXNjcmlwdGlvbmAgZ2V0dGVyXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUuZGVzY3JpcHRpb25cbid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xuXG52YXIgTmF0aXZlU3ltYm9sID0gZ2xvYmFsVGhpcy5TeW1ib2w7XG52YXIgU3ltYm9sUHJvdG90eXBlID0gTmF0aXZlU3ltYm9sICYmIE5hdGl2ZVN5bWJvbC5wcm90b3R5cGU7XG5cbmlmIChERVNDUklQVE9SUyAmJiBpc0NhbGxhYmxlKE5hdGl2ZVN5bWJvbCkgJiYgKCEoJ2Rlc2NyaXB0aW9uJyBpbiBTeW1ib2xQcm90b3R5cGUpIHx8XG4gIC8vIFNhZmFyaSAxMiBidWdcbiAgTmF0aXZlU3ltYm9sKCkuZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZFxuKSkge1xuICB2YXIgRW1wdHlTdHJpbmdEZXNjcmlwdGlvblN0b3JlID0ge307XG4gIC8vIHdyYXAgU3ltYm9sIGNvbnN0cnVjdG9yIGZvciBjb3JyZWN0IHdvcmsgd2l0aCB1bmRlZmluZWQgZGVzY3JpcHRpb25cbiAgdmFyIFN5bWJvbFdyYXBwZXIgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgdmFyIGRlc2NyaXB0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB0b1N0cmluZyhhcmd1bWVudHNbMF0pO1xuICAgIHZhciByZXN1bHQgPSBpc1Byb3RvdHlwZU9mKFN5bWJvbFByb3RvdHlwZSwgdGhpcylcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL2luY29uc2lzdGVudC1mdW5jdGlvbi1jYWxsIC0tIG9rXG4gICAgICA/IG5ldyBOYXRpdmVTeW1ib2woZGVzY3JpcHRpb24pXG4gICAgICAvLyBpbiBFZGdlIDEzLCBTdHJpbmcoU3ltYm9sKHVuZGVmaW5lZCkpID09PSAnU3ltYm9sKHVuZGVmaW5lZCknXG4gICAgICA6IGRlc2NyaXB0aW9uID09PSB1bmRlZmluZWQgPyBOYXRpdmVTeW1ib2woKSA6IE5hdGl2ZVN5bWJvbChkZXNjcmlwdGlvbik7XG4gICAgaWYgKGRlc2NyaXB0aW9uID09PSAnJykgRW1wdHlTdHJpbmdEZXNjcmlwdGlvblN0b3JlW3Jlc3VsdF0gPSB0cnVlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhTeW1ib2xXcmFwcGVyLCBOYXRpdmVTeW1ib2wpO1xuICBTeW1ib2xXcmFwcGVyLnByb3RvdHlwZSA9IFN5bWJvbFByb3RvdHlwZTtcbiAgU3ltYm9sUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ltYm9sV3JhcHBlcjtcblxuICB2YXIgTkFUSVZFX1NZTUJPTCA9IFN0cmluZyhOYXRpdmVTeW1ib2woJ2Rlc2NyaXB0aW9uIGRldGVjdGlvbicpKSA9PT0gJ1N5bWJvbChkZXNjcmlwdGlvbiBkZXRlY3Rpb24pJztcbiAgdmFyIHRoaXNTeW1ib2xWYWx1ZSA9IHVuY3VycnlUaGlzKFN5bWJvbFByb3RvdHlwZS52YWx1ZU9mKTtcbiAgdmFyIHN5bWJvbERlc2NyaXB0aXZlU3RyaW5nID0gdW5jdXJyeVRoaXMoU3ltYm9sUHJvdG90eXBlLnRvU3RyaW5nKTtcbiAgdmFyIHJlZ2V4cCA9IC9eU3ltYm9sXFwoKC4qKVxcKVteKV0rJC87XG4gIHZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG4gIHZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoU3ltYm9sUHJvdG90eXBlLCAnZGVzY3JpcHRpb24nLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZGVzY3JpcHRpb24oKSB7XG4gICAgICB2YXIgc3ltYm9sID0gdGhpc1N5bWJvbFZhbHVlKHRoaXMpO1xuICAgICAgaWYgKGhhc093bihFbXB0eVN0cmluZ0Rlc2NyaXB0aW9uU3RvcmUsIHN5bWJvbCkpIHJldHVybiAnJztcbiAgICAgIHZhciBzdHJpbmcgPSBzeW1ib2xEZXNjcmlwdGl2ZVN0cmluZyhzeW1ib2wpO1xuICAgICAgdmFyIGRlc2MgPSBOQVRJVkVfU1lNQk9MID8gc3RyaW5nU2xpY2Uoc3RyaW5nLCA3LCAtMSkgOiByZXBsYWNlKHN0cmluZywgcmVnZXhwLCAnJDEnKTtcbiAgICAgIHJldHVybiBkZXNjID09PSAnJyA/IHVuZGVmaW5lZCA6IGRlc2M7XG4gICAgfVxuICB9KTtcblxuICAkKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICBTeW1ib2w6IFN5bWJvbFdyYXBwZXJcbiAgfSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC1kZWZpbmUnKTtcbnZhciBkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zeW1ib2wtZGVmaW5lLXRvLXByaW1pdGl2ZScpO1xuXG4vLyBgU3ltYm9sLnRvUHJpbWl0aXZlYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudG9wcmltaXRpdmVcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndG9QcmltaXRpdmUnKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLUBAdG9wcmltaXRpdmVcbmRlZmluZVN5bWJvbFRvUHJpbWl0aXZlKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBTYWZhcmkgPCAxMyBkb2VzIG5vdCB0aHJvdyBhbiBlcnJvciBpbiB0aGlzIGNhc2VcbnZhciBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPSBERVNDUklQVE9SUyAmJiAhZnVuY3Rpb24gKCkge1xuICAvLyBtYWtlcyBubyBzZW5zZSB3aXRob3V0IHByb3BlciBzdHJpY3QgbW9kZSBzdXBwb3J0XG4gIGlmICh0aGlzICE9PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLmxlbmd0aCA9IDE7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID8gZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICBpZiAoaXNBcnJheShPKSAmJiAhZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sICdsZW5ndGgnKS53cml0YWJsZSkge1xuICAgIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3Qgc2V0IHJlYWQgb25seSAubGVuZ3RoJyk7XG4gIH0gcmV0dXJuIE8ubGVuZ3RoID0gbGVuZ3RoO1xufSA6IGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgcmV0dXJuIE8ubGVuZ3RoID0gbGVuZ3RoO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gMHgxRkZGRkZGRkZGRkZGRjsgLy8gMiAqKiA1MyAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPiBNQVhfU0FGRV9JTlRFR0VSKSB0aHJvdyAkVHlwZUVycm9yKCdNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHNldEFycmF5TGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGgnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBJTkNPUlJFQ1RfVE9fTEVOR1RIID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gW10ucHVzaC5jYWxsKHsgbGVuZ3RoOiAweDEwMDAwMDAwMCB9LCAxKSAhPT0gNDI5NDk2NzI5Nztcbn0pO1xuXG4vLyBWOCA8PSAxMjEgYW5kIFNhZmFyaSA8PSAxNS40OyBGRiA8IDIzIHRocm93cyBJbnRlcm5hbEVycm9yXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMjY4MVxudmFyIHByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5wdXNoKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59O1xuXG52YXIgRk9SQ0VEID0gSU5DT1JSRUNUX1RPX0xFTkdUSCB8fCAhcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoKCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucHVzaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5wdXNoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgcHVzaDogZnVuY3Rpb24gcHVzaChpdGVtKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobGVuICsgYXJnQ291bnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykge1xuICAgICAgT1tsZW5dID0gYXJndW1lbnRzW2ldO1xuICAgICAgbGVuKys7XG4gICAgfVxuICAgIHNldEFycmF5TGVuZ3RoKE8sIGxlbik7XG4gICAgcmV0dXJuIGxlbjtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgRGF0ZS5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1kYXRlLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoaW50KSB7XG4gIGFuT2JqZWN0KHRoaXMpO1xuICBpZiAoaGludCA9PT0gJ3N0cmluZycgfHwgaGludCA9PT0gJ2RlZmF1bHQnKSBoaW50ID0gJ3N0cmluZyc7XG4gIGVsc2UgaWYgKGhpbnQgIT09ICdudW1iZXInKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignSW5jb3JyZWN0IGhpbnQnKTtcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUodGhpcywgaGludCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGF0ZVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RhdGUtdG8tcHJpbWl0aXZlJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG52YXIgRGF0ZVByb3RvdHlwZSA9IERhdGUucHJvdG90eXBlO1xuXG4vLyBgRGF0ZS5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1kYXRlLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5pZiAoIWhhc093bihEYXRlUHJvdG90eXBlLCBUT19QUklNSVRJVkUpKSB7XG4gIGRlZmluZUJ1aWx0SW4oRGF0ZVByb3RvdHlwZSwgVE9fUFJJTUlUSVZFLCBkYXRlVG9QcmltaXRpdmUpO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgbWV0aG9kKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICAgIHJldHVybiB1bmN1cnJ5VGhpcyhhQ2FsbGFibGUoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIGtleSlbbWV0aG9kXSkpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KGFyZ3VtZW50KSB8fCBhcmd1bWVudCA9PT0gbnVsbDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc1Bvc3NpYmxlUHJvdG90eXBlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArICRTdHJpbmcoYXJndW1lbnQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAtLSBzYWZlICovXG52YXIgdW5jdXJyeVRoaXNBY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qtc2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gZnVuY3Rpb24gKCkge1xuICB2YXIgQ09SUkVDVF9TRVRURVIgPSBmYWxzZTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdmFyIHNldHRlcjtcbiAgdHJ5IHtcbiAgICBzZXR0ZXIgPSB1bmN1cnJ5VGhpc0FjY2Vzc29yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nLCAnc2V0Jyk7XG4gICAgc2V0dGVyKHRlc3QsIFtdKTtcbiAgICBDT1JSRUNUX1NFVFRFUiA9IHRlc3QgaW5zdGFuY2VvZiBBcnJheTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIE87XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xuXG4vLyBtYWtlcyBzdWJjbGFzc2luZyB3b3JrIGNvcnJlY3QgZm9yIHdyYXBwZWQgYnVpbHQtaW5zXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgkdGhpcywgZHVtbXksIFdyYXBwZXIpIHtcbiAgdmFyIE5ld1RhcmdldCwgTmV3VGFyZ2V0UHJvdG90eXBlO1xuICBpZiAoXG4gICAgLy8gaXQgY2FuIHdvcmsgb25seSB3aXRoIG5hdGl2ZSBgc2V0UHJvdG90eXBlT2ZgXG4gICAgc2V0UHJvdG90eXBlT2YgJiZcbiAgICAvLyB3ZSBoYXZlbid0IGNvbXBsZXRlbHkgY29ycmVjdCBwcmUtRVM2IHdheSBmb3IgZ2V0dGluZyBgbmV3LnRhcmdldGAsIHNvIHVzZSB0aGlzXG4gICAgaXNDYWxsYWJsZShOZXdUYXJnZXQgPSBkdW1teS5jb25zdHJ1Y3RvcikgJiZcbiAgICBOZXdUYXJnZXQgIT09IFdyYXBwZXIgJiZcbiAgICBpc09iamVjdChOZXdUYXJnZXRQcm90b3R5cGUgPSBOZXdUYXJnZXQucHJvdG90eXBlKSAmJlxuICAgIE5ld1RhcmdldFByb3RvdHlwZSAhPT0gV3JhcHBlci5wcm90b3R5cGVcbiAgKSBzZXRQcm90b3R5cGVPZigkdGhpcywgTmV3VGFyZ2V0UHJvdG90eXBlKTtcbiAgcmV0dXJuICR0aGlzO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbi8vIGB0aGlzTnVtYmVyVmFsdWVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10aGlzbnVtYmVydmFsdWVcbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoMS4wLnZhbHVlT2YpO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIGEgc3RyaW5nIG9mIGFsbCB2YWxpZCB1bmljb2RlIHdoaXRlc3BhY2VzXG5tb2R1bGUuZXhwb3J0cyA9ICdcXHUwMDA5XFx1MDAwQVxcdTAwMEJcXHUwMDBDXFx1MDAwRFxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTIwMDBcXHUyMDAxXFx1MjAwMicgK1xuICAnXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ15bJyArIHdoaXRlc3BhY2VzICsgJ10rJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoJyhefFteJyArIHdoaXRlc3BhY2VzICsgJ10pWycgKyB3aGl0ZXNwYWNlcyArICddKyQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltLCB0cmltU3RhcnQsIHRyaW1FbmQsIHRyaW1MZWZ0LCB0cmltUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMpIHtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIGlmIChUWVBFICYgMSkgc3RyaW5nID0gcmVwbGFjZShzdHJpbmcsIGx0cmltLCAnJyk7XG4gICAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSByZXBsYWNlKHN0cmluZywgcnRyaW0sICckMScpO1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltTGVmdCwgdHJpbVN0YXJ0IH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1zdGFydFxuICBzdGFydDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1SaWdodCwgdHJpbUVuZCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltZW5kXG4gIGVuZDogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiAgdHJpbTogY3JlYXRlTWV0aG9kKDMpXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHBhdGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGF0aCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByaW1pdGl2ZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpLmY7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIHRoaXNOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90aGlzLW51bWJlci12YWx1ZScpO1xudmFyIHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xuXG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgTmF0aXZlTnVtYmVyID0gZ2xvYmFsVGhpc1tOVU1CRVJdO1xudmFyIFB1cmVOdW1iZXJOYW1lc3BhY2UgPSBwYXRoW05VTUJFUl07XG52YXIgTnVtYmVyUHJvdG90eXBlID0gTmF0aXZlTnVtYmVyLnByb3RvdHlwZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG5cbi8vIGBUb051bWVyaWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b251bWVyaWNcbnZhciB0b051bWVyaWMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByaW1WYWx1ZSA9IHRvUHJpbWl0aXZlKHZhbHVlLCAnbnVtYmVyJyk7XG4gIHJldHVybiB0eXBlb2YgcHJpbVZhbHVlID09ICdiaWdpbnQnID8gcHJpbVZhbHVlIDogdG9OdW1iZXIocHJpbVZhbHVlKTtcbn07XG5cbi8vIGBUb051bWJlcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbnVtYmVyXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsICdudW1iZXInKTtcbiAgdmFyIGZpcnN0LCB0aGlyZCwgcmFkaXgsIG1heENvZGUsIGRpZ2l0cywgbGVuZ3RoLCBpbmRleCwgY29kZTtcbiAgaWYgKGlzU3ltYm9sKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBudW1iZXInKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSB0cmltKGl0KTtcbiAgICBmaXJzdCA9IGNoYXJDb2RlQXQoaXQsIDApO1xuICAgIGlmIChmaXJzdCA9PT0gNDMgfHwgZmlyc3QgPT09IDQ1KSB7XG4gICAgICB0aGlyZCA9IGNoYXJDb2RlQXQoaXQsIDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoY2hhckNvZGVBdChpdCwgMSkpIHtcbiAgICAgICAgLy8gZmFzdCBlcXVhbCBvZiAvXjBiWzAxXSskL2lcbiAgICAgICAgY2FzZSA2NjpcbiAgICAgICAgY2FzZSA5ODpcbiAgICAgICAgICByYWRpeCA9IDI7XG4gICAgICAgICAgbWF4Q29kZSA9IDQ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBmYXN0IGVxdWFsIG9mIC9eMG9bMC03XSskL2lcbiAgICAgICAgY2FzZSA3OTpcbiAgICAgICAgY2FzZSAxMTE6XG4gICAgICAgICAgcmFkaXggPSA4O1xuICAgICAgICAgIG1heENvZGUgPSA1NTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZGlnaXRzID0gc3RyaW5nU2xpY2UoaXQsIDIpO1xuICAgICAgbGVuZ3RoID0gZGlnaXRzLmxlbmd0aDtcbiAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb2RlID0gY2hhckNvZGVBdChkaWdpdHMsIGluZGV4KTtcbiAgICAgICAgLy8gcGFyc2VJbnQgcGFyc2VzIGEgc3RyaW5nIHRvIGEgZmlyc3QgdW5hdmFpbGFibGUgc3ltYm9sXG4gICAgICAgIC8vIGJ1dCBUb051bWJlciBzaG91bGQgcmV0dXJuIE5hTiBpZiBhIHN0cmluZyBjb250YWlucyB1bmF2YWlsYWJsZSBzeW1ib2xzXG4gICAgICAgIGlmIChjb2RlIDwgNDggfHwgY29kZSA+IG1heENvZGUpIHJldHVybiBOYU47XG4gICAgICB9IHJldHVybiBwYXJzZUludChkaWdpdHMsIHJhZGl4KTtcbiAgICB9XG4gIH0gcmV0dXJuICtpdDtcbn07XG5cbnZhciBGT1JDRUQgPSBpc0ZvcmNlZChOVU1CRVIsICFOYXRpdmVOdW1iZXIoJyAwbzEnKSB8fCAhTmF0aXZlTnVtYmVyKCcwYjEnKSB8fCBOYXRpdmVOdW1iZXIoJysweDEnKSk7XG5cbnZhciBjYWxsZWRXaXRoTmV3ID0gZnVuY3Rpb24gKGR1bW15KSB7XG4gIC8vIGluY2x1ZGVzIGNoZWNrIG9uIDEuLmNvbnN0cnVjdG9yKGZvbykgY2FzZVxuICByZXR1cm4gaXNQcm90b3R5cGVPZihOdW1iZXJQcm90b3R5cGUsIGR1bW15KSAmJiBmYWlscyhmdW5jdGlvbiAoKSB7IHRoaXNOdW1iZXJWYWx1ZShkdW1teSk7IH0pO1xufTtcblxuLy8gYE51bWJlcmAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbnVtYmVyLWNvbnN0cnVjdG9yXG52YXIgTnVtYmVyV3JhcHBlciA9IGZ1bmN0aW9uIE51bWJlcih2YWx1ZSkge1xuICB2YXIgbiA9IGFyZ3VtZW50cy5sZW5ndGggPCAxID8gMCA6IE5hdGl2ZU51bWJlcih0b051bWVyaWModmFsdWUpKTtcbiAgcmV0dXJuIGNhbGxlZFdpdGhOZXcodGhpcykgPyBpbmhlcml0SWZSZXF1aXJlZChPYmplY3QobiksIHRoaXMsIE51bWJlcldyYXBwZXIpIDogbjtcbn07XG5cbk51bWJlcldyYXBwZXIucHJvdG90eXBlID0gTnVtYmVyUHJvdG90eXBlO1xuaWYgKEZPUkNFRCAmJiAhSVNfUFVSRSkgTnVtYmVyUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTnVtYmVyV3JhcHBlcjtcblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgTnVtYmVyOiBOdW1iZXJXcmFwcGVyXG59KTtcblxuLy8gVXNlIGBpbnRlcm5hbC9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXNgIGhlbHBlciBpbiBgY29yZS1qc0A0YFxudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcbiAgZm9yICh2YXIga2V5cyA9IERFU0NSSVBUT1JTID8gZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2UpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVMyMDE1IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVMyMDE1IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04sTUFYX1NBRkVfSU5URUdFUixNSU5fU0FGRV9JTlRFR0VSLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLHBhcnNlRmxvYXQscGFyc2VJbnQsJyArXG4gICAgLy8gRVNOZXh0XG4gICAgJ2Zyb21TdHJpbmcscmFuZ2UnXG4gICkuc3BsaXQoJywnKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOyBqKyspIHtcbiAgICBpZiAoaGFzT3duKHNvdXJjZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhc093bih0YXJnZXQsIGtleSkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbn07XG5cbmlmIChJU19QVVJFICYmIFB1cmVOdW1iZXJOYW1lc3BhY2UpIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMocGF0aFtOVU1CRVJdLCBQdXJlTnVtYmVyTmFtZXNwYWNlKTtcbmlmIChGT1JDRUQgfHwgSVNfUFVSRSkgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhwYXRoW05VTUJFUl0sIE5hdGl2ZU51bWJlcik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5mbGFnc2AgZ2V0dGVyIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLmZsYWdzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5oYXNJbmRpY2VzKSByZXN1bHQgKz0gJ2QnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQuZG90QWxsKSByZXN1bHQgKz0gJ3MnO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC51bmljb2RlU2V0cykgcmVzdWx0ICs9ICd2JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciByZWdFeHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcblxudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIpIHtcbiAgdmFyIGZsYWdzID0gUi5mbGFncztcbiAgcmV0dXJuIGZsYWdzID09PSB1bmRlZmluZWQgJiYgISgnZmxhZ3MnIGluIFJlZ0V4cFByb3RvdHlwZSkgJiYgIWhhc093bihSLCAnZmxhZ3MnKSAmJiBpc1Byb3RvdHlwZU9mKFJlZ0V4cFByb3RvdHlwZSwgUilcbiAgICA/IGNhbGwocmVnRXhwRmxhZ3MsIFIpIDogZmxhZ3M7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuUFJPUEVSO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0UmVnRXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWdldC1mbGFncycpO1xuXG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xudmFyIG5hdGl2ZVRvU3RyaW5nID0gUmVnRXhwUHJvdG90eXBlW1RPX1NUUklOR107XG5cbnZhciBOT1RfR0VORVJJQyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hdGl2ZVRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPT0gJy9hL2InOyB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG52YXIgSU5DT1JSRUNUX05BTUUgPSBQUk9QRVJfRlVOQ1RJT05fTkFNRSAmJiBuYXRpdmVUb1N0cmluZy5uYW1lICE9PSBUT19TVFJJTkc7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKE5PVF9HRU5FUklDIHx8IElOQ09SUkVDVF9OQU1FKSB7XG4gIGRlZmluZUJ1aWx0SW4oUmVnRXhwUHJvdG90eXBlLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIHBhdHRlcm4gPSAkdG9TdHJpbmcoUi5zb3VyY2UpO1xuICAgIHZhciBmbGFncyA9ICR0b1N0cmluZyhnZXRSZWdFeHBGbGFncyhSKSk7XG4gICAgcmV0dXJuICcvJyArIHBhdHRlcm4gKyAnLycgKyBmbGFncztcbiAgfSwgeyB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCAiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe2Z1bmN0aW9uIHYoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBsKGEpe3JldHVybiBhP1wib2JqZWN0XCI9PT10eXBlb2YgYXx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGE6ITF9ZnVuY3Rpb24gcChhKXtpZihudWxsIT09YSYmIWwoYSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBwcm90b3R5cGUgbWF5IG9ubHkgYmUgYW4gT2JqZWN0IG9yIG51bGw6IFwiK2EpO312YXIgcT1udWxsLGU9T2JqZWN0LHc9ISFlLmNyZWF0ZXx8ISh7X19wcm90b19fOm51bGx9aW5zdGFuY2VvZiBlKSxBPWUuY3JlYXRlfHwodz9mdW5jdGlvbihhKXtwKGEpO3JldHVybntfX3Byb3RvX186YX19OmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMoKXt9cChhKTtpZihudWxsPT09YSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJOYXRpdmUgT2JqZWN0LmNyZWF0ZSBpcyByZXF1aXJlZCB0byBjcmVhdGUgb2JqZWN0cyB3aXRoIG51bGwgcHJvdG90eXBlXCIpO2MucHJvdG90eXBlPWE7cmV0dXJuIG5ldyBjfSksXG5CPWUuZ2V0UHJvdG90eXBlT2Z8fChbXS5fX3Byb3RvX189PT1BcnJheS5wcm90b3R5cGU/ZnVuY3Rpb24oYSl7YT1hLl9fcHJvdG9fXztyZXR1cm4gbChhKT9hOm51bGx9OnYpO3ZhciBtPWZ1bmN0aW9uKGEsYyl7ZnVuY3Rpb24gaygpe31pZih2b2lkIDA9PT0odGhpcyYmdGhpcyBpbnN0YW5jZW9mIG0/dGhpcy5jb25zdHJ1Y3Rvcjp2b2lkIDApKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDb25zdHJ1Y3RvciBQcm94eSByZXF1aXJlcyAnbmV3J1wiKTtpZighbChhKXx8IWwoYykpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjcmVhdGUgcHJveHkgd2l0aCBhIG5vbi1vYmplY3QgYXMgdGFyZ2V0IG9yIGhhbmRsZXJcIik7cT1mdW5jdGlvbigpe2E9bnVsbDtrPWZ1bmN0aW9uKGIpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcGVyZm9ybSAnXCIrYitcIicgb24gYSBwcm94eSB0aGF0IGhhcyBiZWVuIHJldm9rZWRcIik7fX07c2V0VGltZW91dChmdW5jdGlvbigpe3E9bnVsbH0sMCk7dmFyIGc9XG5jO2M9e2dldDpudWxsLHNldDpudWxsLGFwcGx5Om51bGwsY29uc3RydWN0Om51bGx9O2Zvcih2YXIgaCBpbiBnKXtpZighKGggaW4gYykpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3h5IHBvbHlmaWxsIGRvZXMgbm90IHN1cHBvcnQgdHJhcCAnXCIraCtcIidcIik7Y1toXT1nW2hdfVwiZnVuY3Rpb25cIj09PXR5cGVvZiBnJiYoYy5hcHBseT1nLmFwcGx5LmJpbmQoZykpO2c9QihhKTt2YXIgcj0hMSx0PSExO2lmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBhKXt2YXIgZj1mdW5jdGlvbigpe3ZhciBiPXRoaXMmJnRoaXMuY29uc3RydWN0b3I9PT1mLGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtrKGI/XCJjb25zdHJ1Y3RcIjpcImFwcGx5XCIpO3JldHVybiBiJiZjLmNvbnN0cnVjdD9jLmNvbnN0cnVjdC5jYWxsKHRoaXMsYSxkKTohYiYmYy5hcHBseT9jLmFwcGx5KGEsdGhpcyxkKTpiPyhkLnVuc2hpZnQoYSksbmV3IChhLmJpbmQuYXBwbHkoYSxkKSkpOmEuYXBwbHkodGhpcyxcbmQpfTtyPSEwfWVsc2UgYSBpbnN0YW5jZW9mIEFycmF5PyhmPVtdLHQ9ITApOmY9d3x8bnVsbCE9PWc/QShnKTp7fTt2YXIgeD1jLmdldD9mdW5jdGlvbihiKXtrKFwiZ2V0XCIpO3JldHVybiBjLmdldCh0aGlzLGIsZil9OmZ1bmN0aW9uKGIpe2soXCJnZXRcIik7cmV0dXJuIHRoaXNbYl19LEM9Yy5zZXQ/ZnVuY3Rpb24oYixkKXtrKFwic2V0XCIpO2Muc2V0KHRoaXMsYixkLGYpfTpmdW5jdGlvbihiLGQpe2soXCJzZXRcIik7dGhpc1tiXT1kfSx5PXt9O2UuZ2V0T3duUHJvcGVydHlOYW1lcyhhKS5mb3JFYWNoKGZ1bmN0aW9uKGIpe2lmKCEoKHJ8fHQpJiZiIGluIGYpKXt2YXIgZD1lLmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLGIpO2UuZGVmaW5lUHJvcGVydHkoZixiLHtlbnVtZXJhYmxlOiEhZC5lbnVtZXJhYmxlLGdldDp4LmJpbmQoYSxiKSxzZXQ6Qy5iaW5kKGEsYil9KTt5W2JdPSEwfX0pO2g9ITA7aWYocnx8dCl7dmFyIEQ9ZS5zZXRQcm90b3R5cGVPZnx8KFtdLl9fcHJvdG9fXz09PVxuQXJyYXkucHJvdG90eXBlP2Z1bmN0aW9uKGIsZCl7cChkKTtiLl9fcHJvdG9fXz1kO3JldHVybiBifTp2KTtnJiZEKGYsZyl8fChoPSExKX1pZihjLmdldHx8IWgpZm9yKHZhciB1IGluIGEpeVt1XXx8ZS5kZWZpbmVQcm9wZXJ0eShmLHUse2dldDp4LmJpbmQoYSx1KX0pO2Uuc2VhbChhKTtlLnNlYWwoZik7cmV0dXJuIGZ9O20ucmV2b2NhYmxlPWZ1bmN0aW9uKGEsYyl7cmV0dXJue3Byb3h5Om5ldyBtKGEsYykscmV2b2tlOnF9fTtyZXR1cm4gbX07dmFyIHo9XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBwcm9jZXNzJiZcIltvYmplY3QgcHJvY2Vzc11cIj09PXt9LnRvU3RyaW5nLmNhbGwocHJvY2Vzcyl8fFwidW5kZWZpbmVkXCIhPT10eXBlb2YgbmF2aWdhdG9yJiZcIlJlYWN0TmF0aXZlXCI9PT1uYXZpZ2F0b3IucHJvZHVjdD9nbG9iYWw6c2VsZjt6LlByb3h5fHwoei5Qcm94eT1uKCksei5Qcm94eS5yZXZvY2FibGU9ei5Qcm94eS5yZXZvY2FibGUpO30pKCk7XG4iLCAiKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoXCJmb3JFYWNoXCJpbiBOb2RlTGlzdC5wcm90b3R5cGVcbikpIHtcbi8vIE5vZGVMaXN0LnByb3RvdHlwZS5mb3JFYWNoXG5Ob2RlTGlzdC5wcm90b3R5cGUuZm9yRWFjaCA9IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoO1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiXG4vLyBfSXRlcmF0b3Jcbi8qIGdsb2JhbCBTeW1ib2wgKi9cbi8vIEEgbW9kaWZpY2F0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9tZWRpa29vL2VzNi1pdGVyYXRvclxuLy8gQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgTWFyaXVzeiBOb3dhayAod3d3Lm1lZGlrb28uY29tKVxuXG52YXIgSXRlcmF0b3IgPSAoZnVuY3Rpb24gKCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cdHZhciBjbGVhciA9IGZ1bmN0aW9uICgpIHtcblx0XHR0aGlzLmxlbmd0aCA9IDA7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH07XG5cdHZhciBjYWxsYWJsZSA9IGZ1bmN0aW9uIChmbikge1xuXHRcdGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IoZm4gKyBcIiBpcyBub3QgYSBmdW5jdGlvblwiKTtcblx0XHRyZXR1cm4gZm47XG5cdH07XG5cblx0dmFyIEl0ZXJhdG9yID0gZnVuY3Rpb24gKGxpc3QsIGNvbnRleHQpIHtcblx0XHRpZiAoISh0aGlzIGluc3RhbmNlb2YgSXRlcmF0b3IpKSB7XG5cdFx0XHRyZXR1cm4gbmV3IEl0ZXJhdG9yKGxpc3QsIGNvbnRleHQpO1xuXHRcdH1cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCB7XG5cdFx0XHRfX2xpc3RfXzoge1xuXHRcdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdFx0dmFsdWU6IGxpc3Rcblx0XHRcdH0sXG5cdFx0XHRfX2NvbnRleHRfXzoge1xuXHRcdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdFx0dmFsdWU6IGNvbnRleHRcblx0XHRcdH0sXG5cdFx0XHRfX25leHRJbmRleF9fOiB7XG5cdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHR2YWx1ZTogMFxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmICghY29udGV4dCkgcmV0dXJuO1xuXHRcdGNhbGxhYmxlKGNvbnRleHQub24pO1xuXHRcdGNvbnRleHQub24oJ19hZGQnLCB0aGlzLl9vbkFkZC5iaW5kKHRoaXMpKTtcblx0XHRjb250ZXh0Lm9uKCdfZGVsZXRlJywgdGhpcy5fb25EZWxldGUuYmluZCh0aGlzKSk7XG5cdFx0Y29udGV4dC5vbignX2NsZWFyJywgdGhpcy5fb25DbGVhci5iaW5kKHRoaXMpKTtcblx0fTtcblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyhJdGVyYXRvci5wcm90b3R5cGUsIE9iamVjdC5hc3NpZ24oe1xuXHRcdGNvbnN0cnVjdG9yOiB7XG5cdFx0XHR2YWx1ZTogSXRlcmF0b3IsXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fSxcblx0XHRfbmV4dDoge1xuXHRcdFx0dmFsdWU6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dmFyIGk7XG5cdFx0XHRcdGlmICghdGhpcy5fX2xpc3RfXykgcmV0dXJuO1xuXHRcdFx0XHRpZiAodGhpcy5fX3JlZG9fXykge1xuXHRcdFx0XHRcdGkgPSB0aGlzLl9fcmVkb19fLnNoaWZ0KCk7XG5cdFx0XHRcdFx0aWYgKGkgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuX19uZXh0SW5kZXhfXyA8IHRoaXMuX19saXN0X18ubGVuZ3RoKSByZXR1cm4gdGhpcy5fX25leHRJbmRleF9fKys7XG5cdFx0XHRcdHRoaXMuX3VuQmluZCgpO1xuXHRcdFx0fSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9LFxuXHRcdG5leHQ6IHtcblx0XHRcdHZhbHVlOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9jcmVhdGVSZXN1bHQodGhpcy5fbmV4dCgpKTtcblx0XHRcdH0sXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fSxcblx0XHRfY3JlYXRlUmVzdWx0OiB7XG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gKGkpIHtcblx0XHRcdFx0aWYgKGkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHtcblx0XHRcdFx0XHRkb25lOiB0cnVlLFxuXHRcdFx0XHRcdHZhbHVlOiB1bmRlZmluZWRcblx0XHRcdFx0fTtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRkb25lOiBmYWxzZSxcblx0XHRcdFx0XHR2YWx1ZTogdGhpcy5fcmVzb2x2ZShpKVxuXHRcdFx0XHR9O1xuXHRcdFx0fSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9LFxuXHRcdF9yZXNvbHZlOiB7XG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gKGkpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX19saXN0X19baV07XG5cdFx0XHR9LFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0X3VuQmluZDoge1xuXHRcdFx0dmFsdWU6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhpcy5fX2xpc3RfXyA9IG51bGw7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLl9fcmVkb19fO1xuXHRcdFx0XHRpZiAoIXRoaXMuX19jb250ZXh0X18pIHJldHVybjtcblx0XHRcdFx0dGhpcy5fX2NvbnRleHRfXy5vZmYoJ19hZGQnLCB0aGlzLl9vbkFkZC5iaW5kKHRoaXMpKTtcblx0XHRcdFx0dGhpcy5fX2NvbnRleHRfXy5vZmYoJ19kZWxldGUnLCB0aGlzLl9vbkRlbGV0ZS5iaW5kKHRoaXMpKTtcblx0XHRcdFx0dGhpcy5fX2NvbnRleHRfXy5vZmYoJ19jbGVhcicsIHRoaXMuX29uQ2xlYXIuYmluZCh0aGlzKSk7XG5cdFx0XHRcdHRoaXMuX19jb250ZXh0X18gPSBudWxsO1xuXHRcdFx0fSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9LFxuXHRcdHRvU3RyaW5nOiB7XG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRyZXR1cm4gJ1tvYmplY3QgSXRlcmF0b3JdJztcblx0XHRcdH0sXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fVxuXHR9LCB7XG5cdFx0X29uQWRkOiB7XG5cdFx0XHR2YWx1ZTogZnVuY3Rpb24gKGluZGV4KSB7XG5cdFx0XHRcdGlmIChpbmRleCA+PSB0aGlzLl9fbmV4dEluZGV4X18pIHJldHVybjtcblx0XHRcdFx0Kyt0aGlzLl9fbmV4dEluZGV4X187XG5cdFx0XHRcdGlmICghdGhpcy5fX3JlZG9fXykge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX19yZWRvX18nLCB7XG5cdFx0XHRcdFx0XHR2YWx1ZTogW2luZGV4XSxcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0d3JpdGFibGU6IGZhbHNlXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX19yZWRvX18uZm9yRWFjaChmdW5jdGlvbiAocmVkbywgaSkge1xuXHRcdFx0XHRcdGlmIChyZWRvID49IGluZGV4KSB0aGlzLl9fcmVkb19fW2ldID0gKytyZWRvO1xuXHRcdFx0XHR9LCB0aGlzKTtcblx0XHRcdFx0dGhpcy5fX3JlZG9fXy5wdXNoKGluZGV4KTtcblx0XHRcdH0sXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fSxcblx0XHRfb25EZWxldGU6IHtcblx0XHRcdHZhbHVlOiBmdW5jdGlvbiAoaW5kZXgpIHtcblx0XHRcdFx0dmFyIGk7XG5cdFx0XHRcdGlmIChpbmRleCA+PSB0aGlzLl9fbmV4dEluZGV4X18pIHJldHVybjtcblx0XHRcdFx0LS10aGlzLl9fbmV4dEluZGV4X187XG5cdFx0XHRcdGlmICghdGhpcy5fX3JlZG9fXykgcmV0dXJuO1xuXHRcdFx0XHRpID0gdGhpcy5fX3JlZG9fXy5pbmRleE9mKGluZGV4KTtcblx0XHRcdFx0aWYgKGkgIT09IC0xKSB0aGlzLl9fcmVkb19fLnNwbGljZShpLCAxKTtcblx0XHRcdFx0dGhpcy5fX3JlZG9fXy5mb3JFYWNoKGZ1bmN0aW9uIChyZWRvLCBpKSB7XG5cdFx0XHRcdFx0aWYgKHJlZG8gPiBpbmRleCkgdGhpcy5fX3JlZG9fX1tpXSA9IC0tcmVkbztcblx0XHRcdFx0fSwgdGhpcyk7XG5cdFx0XHR9LFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0X29uQ2xlYXI6IHtcblx0XHRcdHZhbHVlOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmICh0aGlzLl9fcmVkb19fKSBjbGVhci5jYWxsKHRoaXMuX19yZWRvX18pO1xuXHRcdFx0XHR0aGlzLl9fbmV4dEluZGV4X18gPSAwO1xuXHRcdFx0fSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9XG5cdH0pKTtcblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoSXRlcmF0b3IucHJvdG90eXBlLCBTeW1ib2wuaXRlcmF0b3IsIHtcblx0XHR2YWx1ZTogZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0d3JpdGFibGU6IHRydWVcblx0fSk7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJdGVyYXRvci5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuXHRcdHZhbHVlOiAnSXRlcmF0b3InLFxuXHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0d3JpdGFibGU6IHRydWVcblx0fSk7XG5cblx0cmV0dXJuIEl0ZXJhdG9yO1xufSgpKTtcbmV4cG9ydCBkZWZhdWx0IEl0ZXJhdG9yO1xuIiwgImltcG9ydCBJdGVyYXRvciBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fSXRlcmF0b3JcIjtcblxuLy8gX0FycmF5SXRlcmF0b3Jcbi8qIGdsb2JhbCBJdGVyYXRvciwgU3ltYm9sICovXG4vLyBBIG1vZGlmaWNhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20vbWVkaWtvby9lczYtaXRlcmF0b3Jcbi8vIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IE1hcml1c3ogTm93YWsgKHd3dy5tZWRpa29vLmNvbSlcblxudmFyIEFycmF5SXRlcmF0b3IgPSAoZnVuY3Rpb24oKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblxuXHR2YXIgQXJyYXlJdGVyYXRvciA9IGZ1bmN0aW9uKGFyciwga2luZCkge1xuXHRcdGlmICghKHRoaXMgaW5zdGFuY2VvZiBBcnJheUl0ZXJhdG9yKSkgcmV0dXJuIG5ldyBBcnJheUl0ZXJhdG9yKGFyciwga2luZCk7XG5cdFx0SXRlcmF0b3IuY2FsbCh0aGlzLCBhcnIpO1xuXHRcdGlmICgha2luZCkga2luZCA9ICd2YWx1ZSc7XG5cdFx0ZWxzZSBpZiAoU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcy5jYWxsKGtpbmQsICdrZXkrdmFsdWUnKSkga2luZCA9ICdrZXkrdmFsdWUnO1xuXHRcdGVsc2UgaWYgKFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMuY2FsbChraW5kLCAna2V5JykpIGtpbmQgPSAna2V5Jztcblx0XHRlbHNlIGtpbmQgPSAndmFsdWUnO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX19raW5kX18nLCB7XG5cdFx0XHR2YWx1ZToga2luZCxcblx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdH0pO1xuXHR9O1xuXHRpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSBPYmplY3Quc2V0UHJvdG90eXBlT2YoQXJyYXlJdGVyYXRvciwgSXRlcmF0b3IucHJvdG90eXBlKTtcblxuXHRBcnJheUl0ZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3IucHJvdG90eXBlLCB7XG5cdFx0Y29uc3RydWN0b3I6IHtcblx0XHRcdHZhbHVlOiBBcnJheUl0ZXJhdG9yLFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0X3Jlc29sdmU6IHtcblx0XHRcdHZhbHVlOiBmdW5jdGlvbihpKSB7XG5cdFx0XHRcdGlmICh0aGlzLl9fa2luZF9fID09PSAndmFsdWUnKSByZXR1cm4gdGhpcy5fX2xpc3RfX1tpXTtcblx0XHRcdFx0aWYgKHRoaXMuX19raW5kX18gPT09ICdrZXkrdmFsdWUnKSByZXR1cm4gW2ksIHRoaXMuX19saXN0X19baV1dO1xuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdH0sXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fSxcblx0XHR0b1N0cmluZzoge1xuXHRcdFx0dmFsdWU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gJ1tvYmplY3QgQXJyYXkgSXRlcmF0b3JdJztcblx0XHRcdH0sXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fVxuXHR9KTtcblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoQXJyYXlJdGVyYXRvci5wcm90b3R5cGUsIFN5bWJvbC50b1N0cmluZ1RhZywge1xuXHRcdHZhbHVlOiAnQXJyYXkgSXRlcmF0b3InLFxuXHRcdHdyaXRhYmxlOiBmYWxzZSxcblx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRjb25maWd1cmFibGU6IHRydWVcblx0fSk7XG5cblx0cmV0dXJuIEFycmF5SXRlcmF0b3I7XG59KCkpO1xuZXhwb3J0IGRlZmF1bHQgQXJyYXlJdGVyYXRvcjtcbiIsICJpbXBvcnQgQXJyYXlJdGVyYXRvciBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fQXJyYXlJdGVyYXRvclwiO1xuaW1wb3J0IEl0ZXJhdG9yIGZyb20gXCJAbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19JdGVyYXRvclwiO1xuKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoXCJTeW1ib2xcImluIHNlbGYmJlwiaXRlcmF0b3JcImluIHNlbGYuU3ltYm9sJiZmdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKVxucmV0dXJuIGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSksISFlLmNoaWxkTm9kZXNbc2VsZi5TeW1ib2wuaXRlcmF0b3JdfSgpXG4pKSB7XG4vLyBOb2RlTGlzdC5wcm90b3R5cGUuQEBpdGVyYXRvclxuLyogZ2xvYmFsIFN5bWJvbCwgQXJyYXlJdGVyYXRvciovXG5Ob2RlTGlzdC5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcblx0cmV0dXJuIG5ldyBBcnJheUl0ZXJhdG9yKHRoaXMpO1xufTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgIihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKChmdW5jdGlvbigpe2lmKCEoXCJFdmVudFwiaW4gc2VsZikpcmV0dXJuITFcbnRyeXtyZXR1cm4gbmV3IEV2ZW50KFwiY2xpY2tcIiksITB9Y2F0Y2gobil7cmV0dXJuITF9fSkoKVxuKSkge1xuLy8gRXZlbnRcbihmdW5jdGlvbiAoKSB7XG5cdC8vIFRoaXMgcG9seWZpbGwgZGVwZW5kcyBvbiBhdmFpbGFiaWxpdHkgb2YgYGRvY3VtZW50YCBzbyB3aWxsIG5vdCBydW4gaW4gYSB3b3JrZXJcblx0Ly8gSG93ZXZlciwgd2UgYXNzc3VtZSB0aGVyZSBhcmUgbm8gYnJvd3NlcnMgd2l0aCB3b3JrZXIgc3VwcG9ydCB0aGF0IGxhY2sgcHJvcGVyXG5cdC8vIHN1cHBvcnQgZm9yIGBFdmVudGAgd2l0aGluIHRoZSB3b3JrZXJcblx0aWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcblxuXHR2YXIgZXhpc3RpbmdQcm90byA9ICh3aW5kb3cuRXZlbnQgJiYgd2luZG93LkV2ZW50LnByb3RvdHlwZSkgfHwgbnVsbDtcblx0ZnVuY3Rpb24gRXZlbnQodHlwZSwgZXZlbnRJbml0RGljdCkge1xuXHRcdGlmICghdHlwZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdOb3QgZW5vdWdoIGFyZ3VtZW50cycpO1xuXHRcdH1cblxuXHRcdHZhciBldmVudDtcblx0XHQvLyBTaG9ydGN1dCBpZiBicm93c2VyIHN1cHBvcnRzIGNyZWF0ZUV2ZW50XG5cdFx0aWYgKCdjcmVhdGVFdmVudCcgaW4gZG9jdW1lbnQpIHtcblx0XHRcdGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG5cdFx0XHR2YXIgYnViYmxlcyA9IGV2ZW50SW5pdERpY3QgJiYgZXZlbnRJbml0RGljdC5idWJibGVzICE9PSB1bmRlZmluZWQgPyBldmVudEluaXREaWN0LmJ1YmJsZXMgOiBmYWxzZTtcblx0XHRcdHZhciBjYW5jZWxhYmxlID0gZXZlbnRJbml0RGljdCAmJiBldmVudEluaXREaWN0LmNhbmNlbGFibGUgIT09IHVuZGVmaW5lZCA/IGV2ZW50SW5pdERpY3QuY2FuY2VsYWJsZSA6IGZhbHNlO1xuXG5cdFx0XHRldmVudC5pbml0RXZlbnQodHlwZSwgYnViYmxlcywgY2FuY2VsYWJsZSk7XG5cblx0XHRcdHJldHVybiBldmVudDtcblx0XHR9XG5cblx0XHRldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50T2JqZWN0KCk7XG5cblx0XHRldmVudC50eXBlID0gdHlwZTtcblx0XHRldmVudC5idWJibGVzID0gZXZlbnRJbml0RGljdCAmJiBldmVudEluaXREaWN0LmJ1YmJsZXMgIT09IHVuZGVmaW5lZCA/IGV2ZW50SW5pdERpY3QuYnViYmxlcyA6IGZhbHNlO1xuXHRcdGV2ZW50LmNhbmNlbGFibGUgPSBldmVudEluaXREaWN0ICYmIGV2ZW50SW5pdERpY3QuY2FuY2VsYWJsZSAhPT0gdW5kZWZpbmVkID8gZXZlbnRJbml0RGljdC5jYW5jZWxhYmxlIDogZmFsc2U7XG5cblx0XHRyZXR1cm4gZXZlbnQ7XG5cdH1cblx0RXZlbnQuTk9ORSA9IDA7XG5cdEV2ZW50LkNBUFRVUklOR19QSEFTRSA9IDE7XG5cdEV2ZW50LkFUX1RBUkdFVCA9IDI7XG5cdEV2ZW50LkJVQkJMSU5HX1BIQVNFID0gMztcblx0d2luZG93LkV2ZW50ID0gV2luZG93LnByb3RvdHlwZS5FdmVudCA9IEV2ZW50O1xuXHRpZiAoZXhpc3RpbmdQcm90bykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3cuRXZlbnQsICdwcm90b3R5cGUnLCB7XG5cdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdHZhbHVlOiBleGlzdGluZ1Byb3RvXG5cdFx0fSk7XG5cdH1cblxuXHRpZiAoISgnY3JlYXRlRXZlbnQnIGluIGRvY3VtZW50KSkge1xuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyID0gV2luZG93LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyID0gRG9jdW1lbnQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXIgPSBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcigpIHtcblx0XHRcdHZhclxuXHRcdFx0ZWxlbWVudCA9IHRoaXMsXG5cdFx0XHR0eXBlID0gYXJndW1lbnRzWzBdLFxuXHRcdFx0bGlzdGVuZXIgPSBhcmd1bWVudHNbMV07XG5cblx0XHRcdGlmICghZWxlbWVudC5fZXZlbnRzKSB7XG5cdFx0XHRcdGVsZW1lbnQuX2V2ZW50cyA9IHt9O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWVsZW1lbnQuX2V2ZW50c1t0eXBlXSkge1xuXHRcdFx0XHRlbGVtZW50Ll9ldmVudHNbdHlwZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRcdFx0XHR2YXJcblx0XHRcdFx0XHRsaXN0ID0gZWxlbWVudC5fZXZlbnRzW2V2ZW50LnR5cGVdLmxpc3QsXG5cdFx0XHRcdFx0ZXZlbnRzID0gbGlzdC5zbGljZSgpLFxuXHRcdFx0XHRcdGluZGV4ID0gLTEsXG5cdFx0XHRcdFx0bGVuZ3RoID0gZXZlbnRzLmxlbmd0aCxcblx0XHRcdFx0XHRldmVudEVsZW1lbnQ7XG5cblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KCkge1xuXHRcdFx0XHRcdFx0aWYgKGV2ZW50LmNhbmNlbGFibGUgIT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uIHN0b3BQcm9wYWdhdGlvbigpIHtcblx0XHRcdFx0XHRcdGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG5cdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiA9IGZ1bmN0aW9uIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpIHtcblx0XHRcdFx0XHRcdGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRldmVudC5jYW5jZWxJbW1lZGlhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0ID0gZWxlbWVudDtcblx0XHRcdFx0XHRldmVudC5yZWxhdGVkVGFyZ2V0ID0gZXZlbnQuZnJvbUVsZW1lbnQgfHwgbnVsbDtcblx0XHRcdFx0XHRldmVudC50YXJnZXQgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudCB8fCBlbGVtZW50O1xuXHRcdFx0XHRcdGV2ZW50LnRpbWVTdGFtcCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXG5cdFx0XHRcdFx0aWYgKGV2ZW50LmNsaWVudFgpIHtcblx0XHRcdFx0XHRcdGV2ZW50LnBhZ2VYID0gZXZlbnQuY2xpZW50WCArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0O1xuXHRcdFx0XHRcdFx0ZXZlbnQucGFnZVkgPSBldmVudC5jbGllbnRZICsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR3aGlsZSAoKytpbmRleCA8IGxlbmd0aCAmJiAhZXZlbnQuY2FuY2VsSW1tZWRpYXRlKSB7XG5cdFx0XHRcdFx0XHRpZiAoaW5kZXggaW4gZXZlbnRzKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50RWxlbWVudCA9IGV2ZW50c1tpbmRleF07XG5cblx0XHRcdFx0XHRcdFx0aWYgKGxpc3QuaW5jbHVkZXMoZXZlbnRFbGVtZW50KSAmJiB0eXBlb2YgZXZlbnRFbGVtZW50ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnRFbGVtZW50LmNhbGwoZWxlbWVudCwgZXZlbnQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGVsZW1lbnQuX2V2ZW50c1t0eXBlXS5saXN0ID0gW107XG5cblx0XHRcdFx0aWYgKGVsZW1lbnQuYXR0YWNoRXZlbnQpIHtcblx0XHRcdFx0XHRlbGVtZW50LmF0dGFjaEV2ZW50KCdvbicgKyB0eXBlLCBlbGVtZW50Ll9ldmVudHNbdHlwZV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGVsZW1lbnQuX2V2ZW50c1t0eXBlXS5saXN0LnB1c2gobGlzdGVuZXIpO1xuXHRcdH07XG5cblx0XHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IFdpbmRvdy5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IERvY3VtZW50LnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyID0gRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIoKSB7XG5cdFx0XHR2YXJcblx0XHRcdGVsZW1lbnQgPSB0aGlzLFxuXHRcdFx0dHlwZSA9IGFyZ3VtZW50c1swXSxcblx0XHRcdGxpc3RlbmVyID0gYXJndW1lbnRzWzFdLFxuXHRcdFx0aW5kZXg7XG5cblx0XHRcdGlmIChlbGVtZW50Ll9ldmVudHMgJiYgZWxlbWVudC5fZXZlbnRzW3R5cGVdICYmIGVsZW1lbnQuX2V2ZW50c1t0eXBlXS5saXN0KSB7XG5cdFx0XHRcdGluZGV4ID0gZWxlbWVudC5fZXZlbnRzW3R5cGVdLmxpc3QuaW5kZXhPZihsaXN0ZW5lcik7XG5cblx0XHRcdFx0aWYgKGluZGV4ICE9PSAtMSkge1xuXHRcdFx0XHRcdGVsZW1lbnQuX2V2ZW50c1t0eXBlXS5saXN0LnNwbGljZShpbmRleCwgMSk7XG5cblx0XHRcdFx0XHRpZiAoIWVsZW1lbnQuX2V2ZW50c1t0eXBlXS5saXN0Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0aWYgKGVsZW1lbnQuZGV0YWNoRXZlbnQpIHtcblx0XHRcdFx0XHRcdFx0ZWxlbWVudC5kZXRhY2hFdmVudCgnb24nICsgdHlwZSwgZWxlbWVudC5fZXZlbnRzW3R5cGVdKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGRlbGV0ZSBlbGVtZW50Ll9ldmVudHNbdHlwZV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHdpbmRvdy5kaXNwYXRjaEV2ZW50ID0gV2luZG93LnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50ID0gRG9jdW1lbnQucHJvdG90eXBlLmRpc3BhdGNoRXZlbnQgPSBFbGVtZW50LnByb3RvdHlwZS5kaXNwYXRjaEV2ZW50ID0gZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChldmVudCkge1xuXHRcdFx0aWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignTm90IGVub3VnaCBhcmd1bWVudHMnKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFldmVudCB8fCB0eXBlb2YgZXZlbnQudHlwZSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdET00gRXZlbnRzIEV4Y2VwdGlvbiAwJyk7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBlbGVtZW50ID0gdGhpcywgdHlwZSA9IGV2ZW50LnR5cGU7XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmICghZXZlbnQuYnViYmxlcykge1xuXHRcdFx0XHRcdGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG5cblx0XHRcdFx0XHR2YXIgY2FuY2VsQnViYmxlRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRcdFx0XHRcdGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG5cblx0XHRcdFx0XHRcdChlbGVtZW50IHx8IHdpbmRvdykuZGV0YWNoRXZlbnQoJ29uJyArIHR5cGUsIGNhbmNlbEJ1YmJsZUV2ZW50KTtcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0dGhpcy5hdHRhY2hFdmVudCgnb24nICsgdHlwZSwgY2FuY2VsQnViYmxlRXZlbnQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoJ29uJyArIHR5cGUsIGV2ZW50KTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdGV2ZW50LnRhcmdldCA9IGVsZW1lbnQ7XG5cblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBlbGVtZW50O1xuXG5cdFx0XHRcdFx0aWYgKCdfZXZlbnRzJyBpbiBlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50Ll9ldmVudHNbdHlwZV0gPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRcdGVsZW1lbnQuX2V2ZW50c1t0eXBlXS5jYWxsKGVsZW1lbnQsIGV2ZW50KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAodHlwZW9mIGVsZW1lbnRbJ29uJyArIHR5cGVdID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50WydvbicgKyB0eXBlXS5jYWxsKGVsZW1lbnQsIGV2ZW50KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtZW50ID0gZWxlbWVudC5ub2RlVHlwZSA9PT0gOSA/IGVsZW1lbnQucGFyZW50V2luZG93IDogZWxlbWVudC5wYXJlbnROb2RlO1xuXHRcdFx0XHR9IHdoaWxlIChlbGVtZW50ICYmICFldmVudC5jYW5jZWxCdWJibGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9O1xuXG5cdFx0Ly8gQWRkIHRoZSBET01Db250ZW50TG9hZGVkIEV2ZW50XG5cdFx0ZG9jdW1lbnQuYXR0YWNoRXZlbnQoJ29ucmVhZHlzdGF0ZWNoYW5nZScsIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScpIHtcblx0XHRcdFx0ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ0RPTUNvbnRlbnRMb2FkZWQnLCB7XG5cdFx0XHRcdFx0YnViYmxlczogdHJ1ZVxuXHRcdFx0XHR9KSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn0oKSk7XG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICIoZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcIkN1c3RvbUV2ZW50XCJpbiBzZWxmJiYoXCJmdW5jdGlvblwiPT10eXBlb2Ygc2VsZi5DdXN0b21FdmVudHx8LTE8c2VsZi5DdXN0b21FdmVudC50b1N0cmluZygpLmluZGV4T2YoXCJDdXN0b21FdmVudENvbnN0cnVjdG9yXCIpKVxuKSkge1xuLy8gQ3VzdG9tRXZlbnRcbnNlbGYuQ3VzdG9tRXZlbnQgPSBmdW5jdGlvbiBDdXN0b21FdmVudCh0eXBlLCBldmVudEluaXREaWN0KSB7XG5cdGlmICghdHlwZSkge1xuXHRcdHRocm93IEVycm9yKCdUeXBlRXJyb3I6IEZhaWxlZCB0byBjb25zdHJ1Y3QgXCJDdXN0b21FdmVudFwiOiBBbiBldmVudCBuYW1lIG11c3QgYmUgcHJvdmlkZWQuJyk7XG5cdH1cblxuXHR2YXIgZXZlbnQ7XG5cdGV2ZW50SW5pdERpY3QgPSBldmVudEluaXREaWN0IHx8IHtidWJibGVzOiBmYWxzZSwgY2FuY2VsYWJsZTogZmFsc2UsIGRldGFpbDogbnVsbH07XG5cblx0dHJ5IHtcblx0XHRldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpO1xuXHRcdGV2ZW50LmluaXRDdXN0b21FdmVudCh0eXBlLCBldmVudEluaXREaWN0LmJ1YmJsZXMsIGV2ZW50SW5pdERpY3QuY2FuY2VsYWJsZSwgZXZlbnRJbml0RGljdC5kZXRhaWwpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIGZvciBicm93c2VycyB3aGljaCBkb24ndCBzdXBwb3J0IEN1c3RvbUV2ZW50IGF0IGFsbCwgd2UgdXNlIGEgcmVndWxhciBldmVudCBpbnN0ZWFkXG5cdFx0ZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcblx0XHRldmVudC5pbml0RXZlbnQodHlwZSwgZXZlbnRJbml0RGljdC5idWJibGVzLCBldmVudEluaXREaWN0LmNhbmNlbGFibGUpO1xuXHRcdGV2ZW50LmRldGFpbCA9IGV2ZW50SW5pdERpY3QuZGV0YWlsO1xuXHR9XG5cdHJldHVybiBldmVudDtcbn07XG5cbkN1c3RvbUV2ZW50LnByb3RvdHlwZSA9IEV2ZW50LnByb3RvdHlwZTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgIihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwiRG9jdW1lbnRGcmFnbWVudFwiaW4gc2VsZiYmZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBEb2N1bWVudEZyYWdtZW50LCEwfWNhdGNoKG4pe3JldHVybiExfX0oKVxuKSkge1xuLy8gRG9jdW1lbnRGcmFnbWVudFxuKGZ1bmN0aW9uIChnbG9iYWwpIHtcblx0Z2xvYmFsLkRvY3VtZW50RnJhZ21lbnQgPSBmdW5jdGlvbiBEb2N1bWVudEZyYWdtZW50KCkge1xuXHRcdHJldHVybiBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cdH07XG5cblx0dmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXHRnbG9iYWwuRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGZyYWdtZW50LmNvbnN0cnVjdG9yLnByb3RvdHlwZSlcbn0oc2VsZikpO1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoXCJkb2N1bWVudFwiaW4gc2VsZiYmXCJtYXRjaGVzXCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbikpIHtcbi8vIEVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXNcbkVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMgPSBFbGVtZW50LnByb3RvdHlwZS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwgRWxlbWVudC5wcm90b3R5cGUub01hdGNoZXNTZWxlY3RvciB8fCBFbGVtZW50LnByb3RvdHlwZS5tc01hdGNoZXNTZWxlY3RvciB8fCBFbGVtZW50LnByb3RvdHlwZS5tb3pNYXRjaGVzU2VsZWN0b3IgfHwgZnVuY3Rpb24gbWF0Y2hlcyhzZWxlY3Rvcikge1xuXG5cdHZhciBlbGVtZW50ID0gdGhpcztcblx0dmFyIGVsZW1lbnRzID0gKGVsZW1lbnQuZG9jdW1lbnQgfHwgZWxlbWVudC5vd25lckRvY3VtZW50KS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcblx0dmFyIGluZGV4ID0gMDtcblxuXHR3aGlsZSAoZWxlbWVudHNbaW5kZXhdICYmIGVsZW1lbnRzW2luZGV4XSAhPT0gZWxlbWVudCkge1xuXHRcdCsraW5kZXg7XG5cdH1cblxuXHRyZXR1cm4gISFlbGVtZW50c1tpbmRleF07XG59O1xufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHRcbiAqIFRoZSBjb21wbGV0ZSBzZXQgb2YgYXV0aG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0FVVEhPUlMudHh0XG4gKiBUaGUgY29tcGxldGUgc2V0IG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0NPTlRSSUJVVE9SUy50eHRcbiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvXG4gKiBzdWJqZWN0IHRvIGFuIGFkZGl0aW9uYWwgSVAgcmlnaHRzIGdyYW50IGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9QQVRFTlRTLnR4dFxuICovXG5cbi8vIG1pbmltYWwgdGVtcGxhdGUgcG9seWZpbGxcbihmdW5jdGlvbiAoKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgbmVlZHNUZW1wbGF0ZSA9IHR5cGVvZiBIVE1MVGVtcGxhdGVFbGVtZW50ID09PSAndW5kZWZpbmVkJztcbiAgdmFyIGJyb2tlbkRvY0ZyYWdtZW50ID0gIShcbiAgICBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuY2xvbmVOb2RlKCkgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50XG4gICk7XG4gIHZhciBuZWVkc0RvY0ZyYWcgPSBmYWxzZTtcblxuICAvLyBOT1RFOiBSZXBsYWNlIERvY3VtZW50RnJhZ21lbnQgdG8gd29yayBhcm91bmQgSUUxMSBidWcgdGhhdFxuICAvLyBjYXVzZXMgY2hpbGRyZW4gb2YgYSBkb2N1bWVudCBmcmFnbWVudCBtb2RpZmllZCB3aGlsZVxuICAvLyB0aGVyZSBpcyBhIG11dGF0aW9uIG9ic2VydmVyIHRvIG5vdCBoYXZlIGEgcGFyZW50Tm9kZSwgb3JcbiAgLy8gaGF2ZSBhIGJyb2tlbiBwYXJlbnROb2RlICghPyEpXG4gIGlmICgvVHJpZGVudC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkge1xuICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICBuZWVkc0RvY0ZyYWcgPSB0cnVlO1xuXG4gICAgICB2YXIgb3JpZ0Nsb25lTm9kZSA9IE5vZGUucHJvdG90eXBlLmNsb25lTm9kZTtcbiAgICAgIE5vZGUucHJvdG90eXBlLmNsb25lTm9kZSA9IGZ1bmN0aW9uIGNsb25lTm9kZShkZWVwKSB7XG4gICAgICAgIHZhciBuZXdEb20gPSBvcmlnQ2xvbmVOb2RlLmNhbGwodGhpcywgZGVlcCk7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCkge1xuICAgICAgICAgIG5ld0RvbS5fX3Byb3RvX18gPSBEb2N1bWVudEZyYWdtZW50LnByb3RvdHlwZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3RG9tO1xuICAgICAgfTtcblxuICAgICAgLy8gSUUncyBEb2N1bWVudEZyYWdtZW50IHF1ZXJ5U2VsZWN0b3IgY29kZSBkb2Vzbid0IHdvcmsgd2hlblxuICAgICAgLy8gY2FsbGVkIG9uIGFuIGVsZW1lbnQgaW5zdGFuY2VcbiAgICAgIERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGwgPVxuICAgICAgICBIVE1MRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbDtcbiAgICAgIERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3IgPVxuICAgICAgICBIVE1MRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvcjtcblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUsIHtcbiAgICAgICAgJ25vZGVUeXBlJzoge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgfSxcblxuICAgICAgICAnbG9jYWxOYW1lJzoge1xuICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgfSxcblxuICAgICAgICAnbm9kZU5hbWUnOiB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gJyNkb2N1bWVudC1mcmFnbWVudCc7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgdmFyIG9yaWdJbnNlcnRCZWZvcmUgPSBOb2RlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmU7XG4gICAgICBmdW5jdGlvbiBpbnNlcnRCZWZvcmUobmV3Tm9kZSwgcmVmTm9kZSkge1xuICAgICAgICBpZiAobmV3Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgICAgICB2YXIgY2hpbGQ7XG4gICAgICAgICAgd2hpbGUgKChjaGlsZCA9IG5ld05vZGUuZmlyc3RDaGlsZCkpIHtcbiAgICAgICAgICAgIG9yaWdJbnNlcnRCZWZvcmUuY2FsbCh0aGlzLCBjaGlsZCwgcmVmTm9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9yaWdJbnNlcnRCZWZvcmUuY2FsbCh0aGlzLCBuZXdOb2RlLCByZWZOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3Tm9kZTtcbiAgICAgIH1cbiAgICAgIE5vZGUucHJvdG90eXBlLmluc2VydEJlZm9yZSA9IGluc2VydEJlZm9yZTtcblxuICAgICAgdmFyIG9yaWdBcHBlbmRDaGlsZCA9IE5vZGUucHJvdG90eXBlLmFwcGVuZENoaWxkO1xuICAgICAgTm9kZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQgPSBmdW5jdGlvbiBhcHBlbmRDaGlsZChjaGlsZCkge1xuICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSB7XG4gICAgICAgICAgaW5zZXJ0QmVmb3JlLmNhbGwodGhpcywgY2hpbGQsIG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9yaWdBcHBlbmRDaGlsZC5jYWxsKHRoaXMsIGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9O1xuXG4gICAgICB2YXIgb3JpZ1JlbW92ZUNoaWxkID0gTm9kZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQ7XG4gICAgICB2YXIgb3JpZ1JlcGxhY2VDaGlsZCA9IE5vZGUucHJvdG90eXBlLnJlcGxhY2VDaGlsZDtcbiAgICAgIE5vZGUucHJvdG90eXBlLnJlcGxhY2VDaGlsZCA9IGZ1bmN0aW9uIHJlcGxhY2VDaGlsZChuZXdDaGlsZCwgb2xkQ2hpbGQpIHtcbiAgICAgICAgaWYgKG5ld0NoaWxkIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCkge1xuICAgICAgICAgIGluc2VydEJlZm9yZS5jYWxsKHRoaXMsIG5ld0NoaWxkLCBvbGRDaGlsZCk7XG4gICAgICAgICAgb3JpZ1JlbW92ZUNoaWxkLmNhbGwodGhpcywgb2xkQ2hpbGQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9yaWdSZXBsYWNlQ2hpbGQuY2FsbCh0aGlzLCBuZXdDaGlsZCwgb2xkQ2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvbGRDaGlsZDtcbiAgICAgIH07XG5cbiAgICAgIERvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50ID0gZnVuY3Rpb24gY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpIHtcbiAgICAgICAgdmFyIGZyYWcgPSB0aGlzLmNyZWF0ZUVsZW1lbnQoJ2RmJyk7XG4gICAgICAgIGZyYWcuX19wcm90b19fID0gRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGU7XG4gICAgICAgIHJldHVybiBmcmFnO1xuICAgICAgfTtcblxuICAgICAgdmFyIG9yaWdJbXBvcnROb2RlID0gRG9jdW1lbnQucHJvdG90eXBlLmltcG9ydE5vZGU7XG4gICAgICBEb2N1bWVudC5wcm90b3R5cGUuaW1wb3J0Tm9kZSA9IGZ1bmN0aW9uIGltcG9ydE5vZGUoaW1wTm9kZSwgZGVlcCkge1xuICAgICAgICBkZWVwID0gZGVlcCB8fCBmYWxzZTtcbiAgICAgICAgdmFyIG5ld05vZGUgPSBvcmlnSW1wb3J0Tm9kZS5jYWxsKHRoaXMsIGltcE5vZGUsIGRlZXApO1xuICAgICAgICBpZiAoaW1wTm9kZSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgICAgICBuZXdOb2RlLl9fcHJvdG9fXyA9IERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdOb2RlO1xuICAgICAgfTtcbiAgICB9KSgpO1xuICB9XG5cbiAgLy8gTk9URTogd2UgcmVseSBvbiB0aGlzIGNsb25lTm9kZSBub3QgY2F1c2luZyBlbGVtZW50IHVwZ3JhZGUuXG4gIC8vIFRoaXMgbWVhbnMgdGhpcyBwb2x5ZmlsbCBtdXN0IGxvYWQgYmVmb3JlIHRoZSBDRSBwb2x5ZmlsbCBhbmRcbiAgLy8gdGhpcyB3b3VsZCBuZWVkIHRvIGJlIHJlLXdvcmtlZCBpZiBhIGJyb3dzZXIgc3VwcG9ydHMgbmF0aXZlIENFXG4gIC8vIGJ1dCBub3QgPHRlbXBsYXRlPi5cbiAgdmFyIGNhcHR1cmVkQ2xvbmVOb2RlID0gTm9kZS5wcm90b3R5cGUuY2xvbmVOb2RlO1xuICB2YXIgY2FwdHVyZWRDcmVhdGVFbGVtZW50ID0gRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnQ7XG4gIHZhciBjYXB0dXJlZEltcG9ydE5vZGUgPSBEb2N1bWVudC5wcm90b3R5cGUuaW1wb3J0Tm9kZTtcbiAgdmFyIGNhcHR1cmVkUmVtb3ZlQ2hpbGQgPSBOb2RlLnByb3RvdHlwZS5yZW1vdmVDaGlsZDtcbiAgdmFyIGNhcHR1cmVkQXBwZW5kQ2hpbGQgPSBOb2RlLnByb3RvdHlwZS5hcHBlbmRDaGlsZDtcbiAgdmFyIGNhcHR1cmVkUmVwbGFjZUNoaWxkID0gTm9kZS5wcm90b3R5cGUucmVwbGFjZUNoaWxkO1xuICB2YXIgY2FwdHVyZWRQYXJzZUZyb21TdHJpbmcgPSBET01QYXJzZXIucHJvdG90eXBlLnBhcnNlRnJvbVN0cmluZztcbiAgdmFyIGNhcHR1cmVkSFRNTEVsZW1lbnRJbm5lckhUTUwgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgIHdpbmRvdy5IVE1MRWxlbWVudC5wcm90b3R5cGUsXG4gICAgJ2lubmVySFRNTCdcbiAgKSB8fCB7XG4gICAgLyoqXG4gICAgICogQHRoaXMgeyFIVE1MRWxlbWVudH1cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAgICovXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbm5lckhUTUw7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBAdGhpcyB7IUhUTUxFbGVtZW50fVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfVxuICAgICAqL1xuICAgIHNldDogZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgIHRoaXMuaW5uZXJIVE1MID0gdGV4dDtcbiAgICB9LFxuICB9O1xuICB2YXIgY2FwdHVyZWRDaGlsZE5vZGVzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICB3aW5kb3cuTm9kZS5wcm90b3R5cGUsXG4gICAgJ2NoaWxkTm9kZXMnXG4gICkgfHwge1xuICAgIC8qKlxuICAgICAqIEB0aGlzIHshTm9kZX1cbiAgICAgKiBAcmV0dXJuIHshTm9kZUxpc3R9XG4gICAgICovXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzO1xuICAgIH0sXG4gIH07XG5cbiAgdmFyIGVsZW1lbnRRdWVyeVNlbGVjdG9yQWxsID0gRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbDtcbiAgdmFyIGRvY1F1ZXJ5U2VsZWN0b3JBbGwgPSBEb2N1bWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbDtcbiAgdmFyIGZyYWdRdWVyeVNlbGVjdG9yQWxsID0gRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbDtcblxuICB2YXIgc2NyaXB0U2VsZWN0b3IgPVxuICAgICdzY3JpcHQ6bm90KFt0eXBlXSksc2NyaXB0W3R5cGU9XCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0XCJdLHNjcmlwdFt0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCJdJztcblxuICBmdW5jdGlvbiBRU0Eobm9kZSwgc2VsZWN0b3IpIHtcbiAgICAvLyBJRSAxMSB0aHJvd3MgYSBTeW50YXhFcnJvciB3aXRoIGBzY3JpcHRTZWxlY3RvcmAgaWYgdGhlIG5vZGUgaGFzIG5vIGNoaWxkcmVuIGR1ZSB0byB0aGUgYDpub3QoW3R5cGVdKWAgc3ludGF4XG4gICAgaWYgKCFub2RlLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHN3aXRjaCAobm9kZS5ub2RlVHlwZSkge1xuICAgICAgY2FzZSBOb2RlLkRPQ1VNRU5UX05PREU6XG4gICAgICAgIHJldHVybiBkb2NRdWVyeVNlbGVjdG9yQWxsLmNhbGwobm9kZSwgc2VsZWN0b3IpO1xuICAgICAgY2FzZSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6XG4gICAgICAgIHJldHVybiBmcmFnUXVlcnlTZWxlY3RvckFsbC5jYWxsKG5vZGUsIHNlbGVjdG9yKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBlbGVtZW50UXVlcnlTZWxlY3RvckFsbC5jYWxsKG5vZGUsIHNlbGVjdG9yKTtcbiAgICB9XG4gIH1cblxuICAvLyByZXR1cm5zIHRydWUgaWYgbmVzdGVkIHRlbXBsYXRlcyBjYW5ub3QgYmUgY2xvbmVkICh0aGV5IGNhbm5vdCBiZSBvblxuICAvLyBzb21lIGltcGwncyBsaWtlIFNhZmFyaSA4IGFuZCBFZGdlKVxuICAvLyBPUiBpZiBjbG9uaW5nIGEgZG9jdW1lbnQgZnJhZ21lbnQgZG9lcyBub3QgcmVzdWx0IGluIGEgZG9jdW1lbnQgZnJhZ21lbnRcbiAgdmFyIG5lZWRzQ2xvbmluZyA9IChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFuZWVkc1RlbXBsYXRlKSB7XG4gICAgICB2YXIgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgICB2YXIgdDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpO1xuICAgICAgdDIuY29udGVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4gICAgICB0LmNvbnRlbnQuYXBwZW5kQ2hpbGQodDIpO1xuICAgICAgdmFyIGNsb25lID0gdC5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBjbG9uZS5jb250ZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwIHx8XG4gICAgICAgIGNsb25lLmNvbnRlbnQuZmlyc3RDaGlsZC5jb250ZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwIHx8XG4gICAgICAgIGJyb2tlbkRvY0ZyYWdtZW50XG4gICAgICApO1xuICAgIH1cbiAgfSkoKTtcblxuICB2YXIgVEVNUExBVEVfVEFHID0gJ3RlbXBsYXRlJztcbiAgdmFyIFBvbHlmaWxsZWRIVE1MVGVtcGxhdGVFbGVtZW50ID0gZnVuY3Rpb24gKCkge307XG5cbiAgaWYgKG5lZWRzVGVtcGxhdGUpIHtcbiAgICB2YXIgY29udGVudERvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgndGVtcGxhdGUnKTtcbiAgICB2YXIgY2FuRGVjb3JhdGUgPSB0cnVlO1xuXG4gICAgdmFyIHRlbXBsYXRlU3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgIHRlbXBsYXRlU3R5bGUudGV4dENvbnRlbnQgPSBURU1QTEFURV9UQUcgKyAne2Rpc3BsYXk6bm9uZTt9JztcblxuICAgIHZhciBoZWFkID0gZG9jdW1lbnQuaGVhZDtcbiAgICBoZWFkLmluc2VydEJlZm9yZSh0ZW1wbGF0ZVN0eWxlLCBoZWFkLmZpcnN0RWxlbWVudENoaWxkKTtcblxuICAgIC8qKlxuICAgICAgUHJvdmlkZXMgYSBtaW5pbWFsIHNoaW0gZm9yIHRoZSA8dGVtcGxhdGU+IGVsZW1lbnQuXG4gICAgKi9cbiAgICBQb2x5ZmlsbGVkSFRNTFRlbXBsYXRlRWxlbWVudC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFxuICAgICAgSFRNTEVsZW1lbnQucHJvdG90eXBlXG4gICAgKTtcblxuICAgIC8vIGlmIGVsZW1lbnRzIGRvIG5vdCBoYXZlIGBpbm5lckhUTUxgIG9uIGluc3RhbmNlcywgdGhlblxuICAgIC8vIHRlbXBsYXRlcyBjYW4gYmUgcGF0Y2hlZCBieSBzd2l6emxpbmcgdGhlaXIgcHJvdG90eXBlcy5cbiAgICB2YXIgY2FuUHJvdG9QYXRjaCA9ICFkb2N1bWVudFxuICAgICAgLmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgICAuaGFzT3duUHJvcGVydHkoJ2lubmVySFRNTCcpO1xuXG4gICAgLyoqXG4gICAgICBUaGUgYGRlY29yYXRlYCBtZXRob2QgbW92ZXMgZWxlbWVudCBjaGlsZHJlbiB0byB0aGUgdGVtcGxhdGUncyBgY29udGVudGAuXG4gICAgICBOT1RFOiB0aGVyZSBpcyBubyBzdXBwb3J0IGZvciBkeW5hbWljYWxseSBhZGRpbmcgZWxlbWVudHMgdG8gdGVtcGxhdGVzLlxuICAgICovXG4gICAgUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUgPSBmdW5jdGlvbiAodGVtcGxhdGUpIHtcbiAgICAgIC8vIGlmIHRoZSB0ZW1wbGF0ZSBpcyBkZWNvcmF0ZWQgb3Igbm90IGluIEhUTUwgbmFtZXNwYWNlLCByZXR1cm4gZmFzdFxuICAgICAgaWYgKFxuICAgICAgICB0ZW1wbGF0ZS5jb250ZW50IHx8XG4gICAgICAgIHRlbXBsYXRlLm5hbWVzcGFjZVVSSSAhPT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSSVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRlbXBsYXRlLmNvbnRlbnQgPSBjb250ZW50RG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgIHZhciBjaGlsZDtcbiAgICAgIHdoaWxlICgoY2hpbGQgPSB0ZW1wbGF0ZS5maXJzdENoaWxkKSkge1xuICAgICAgICBjYXB0dXJlZEFwcGVuZENoaWxkLmNhbGwodGVtcGxhdGUuY29udGVudCwgY2hpbGQpO1xuICAgICAgfVxuICAgICAgLy8gTk9URTogcHJlZmVyIHByb3RvdHlwZSBwYXRjaGluZyBmb3IgcGVyZm9ybWFuY2UgYW5kXG4gICAgICAvLyBiZWNhdXNlIG9uIHNvbWUgYnJvd3NlcnMgKElFMTEpLCByZS1kZWZpbmluZyBgaW5uZXJIVE1MYFxuICAgICAgLy8gY2FuIHJlc3VsdCBpbiBpbnRlcm1pdHRlbnQgZXJyb3JzLlxuICAgICAgaWYgKGNhblByb3RvUGF0Y2gpIHtcbiAgICAgICAgdGVtcGxhdGUuX19wcm90b19fID0gUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQucHJvdG90eXBlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGVtcGxhdGUuY2xvbmVOb2RlID0gZnVuY3Rpb24gKGRlZXApIHtcbiAgICAgICAgICByZXR1cm4gUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQuX2Nsb25lTm9kZSh0aGlzLCBkZWVwKTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gYWRkIGlubmVySFRNTCB0byB0ZW1wbGF0ZSwgaWYgcG9zc2libGVcbiAgICAgICAgLy8gTm90ZTogdGhpcyB0aHJvd3Mgb24gU2FmYXJpIDdcbiAgICAgICAgaWYgKGNhbkRlY29yYXRlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGRlZmluZUlubmVySFRNTCh0ZW1wbGF0ZSk7XG4gICAgICAgICAgICBkZWZpbmVPdXRlckhUTUwodGVtcGxhdGUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY2FuRGVjb3JhdGUgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGJvb3RzdHJhcCByZWN1cnNpdmVseVxuICAgICAgUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQuYm9vdHN0cmFwKHRlbXBsYXRlLmNvbnRlbnQpO1xuICAgIH07XG5cbiAgICAvLyBUYWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L2Jsb2IvNzNkN2U2MjU5YzYzYWM0NWY0MmM2NTkzZGE4YzI3OTZjNmNlOTI4MS9zcmMvbWFuaXB1bGF0aW9uL3dyYXBNYXAuanNcbiAgICB2YXIgdG9wTGV2ZWxXcmFwcGluZ01hcCA9IHtcbiAgICAgICdvcHRpb24nOiBbJ3NlbGVjdCddLFxuICAgICAgJ3RoZWFkJzogWyd0YWJsZSddLFxuICAgICAgJ2NvbCc6IFsnY29sZ3JvdXAnLCAndGFibGUnXSxcbiAgICAgICd0cic6IFsndGJvZHknLCAndGFibGUnXSxcbiAgICAgICd0aCc6IFsndHInLCAndGJvZHknLCAndGFibGUnXSxcbiAgICAgICd0ZCc6IFsndHInLCAndGJvZHknLCAndGFibGUnXSxcbiAgICB9O1xuXG4gICAgdmFyIGdldFRhZ05hbWUgPSBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgLy8gVGFrZW4gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9ibG9iLzczZDdlNjI1OWM2M2FjNDVmNDJjNjU5M2RhOGMyNzk2YzZjZTkyODEvc3JjL21hbmlwdWxhdGlvbi92YXIvcnRhZ05hbWUuanNcbiAgICAgIHJldHVybiAoLzwoW2Etel1bXi9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKykvaS5leGVjKHRleHQpIHx8IFtcbiAgICAgICAgJycsXG4gICAgICAgICcnLFxuICAgICAgXSlbMV0udG9Mb3dlckNhc2UoKTtcbiAgICB9O1xuXG4gICAgdmFyIGRlZmluZUlubmVySFRNTCA9IGZ1bmN0aW9uIGRlZmluZUlubmVySFRNTChvYmopIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosICdpbm5lckhUTUwnLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBnZXRJbm5lckhUTUwodGhpcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgICAvLyBGb3IgSUUxMSwgd3JhcCB0aGUgdGV4dCBpbiB0aGUgY29ycmVjdCAodGFibGUpIGNvbnRleHRcbiAgICAgICAgICB2YXIgd3JhcCA9IHRvcExldmVsV3JhcHBpbmdNYXBbZ2V0VGFnTmFtZSh0ZXh0KV07XG4gICAgICAgICAgaWYgKHdyYXApIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd3JhcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICB0ZXh0ID0gJzwnICsgd3JhcFtpXSArICc+JyArIHRleHQgKyAnPC8nICsgd3JhcFtpXSArICc+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGVudERvYy5ib2R5LmlubmVySFRNTCA9IHRleHQ7XG4gICAgICAgICAgUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQuYm9vdHN0cmFwKGNvbnRlbnREb2MpO1xuICAgICAgICAgIHdoaWxlICh0aGlzLmNvbnRlbnQuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgY2FwdHVyZWRSZW1vdmVDaGlsZC5jYWxsKHRoaXMuY29udGVudCwgdGhpcy5jb250ZW50LmZpcnN0Q2hpbGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgYm9keSA9IGNvbnRlbnREb2MuYm9keTtcbiAgICAgICAgICAvLyBJZiB3ZSBoYWQgd3JhcHBlZCwgZ2V0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIG5vZGVcbiAgICAgICAgICBpZiAod3JhcCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB3cmFwLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgIGJvZHkgPSBib2R5Lmxhc3RDaGlsZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgd2hpbGUgKGJvZHkuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgY2FwdHVyZWRBcHBlbmRDaGlsZC5jYWxsKHRoaXMuY29udGVudCwgYm9keS5maXJzdENoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB2YXIgZGVmaW5lT3V0ZXJIVE1MID0gZnVuY3Rpb24gZGVmaW5lT3V0ZXJIVE1MKG9iaikge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgJ291dGVySFRNTCcsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGA8JHtURU1QTEFURV9UQUd9PiR7dGhpcy5pbm5lckhUTUx9PC8ke1RFTVBMQVRFX1RBR30+YDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoaW5uZXJIVE1MKSB7XG4gICAgICAgICAgaWYgKHRoaXMucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgY29udGVudERvYy5ib2R5LmlubmVySFRNTCA9IGlubmVySFRNTDtcbiAgICAgICAgICAgIHZhciBkb2NGcmFnID0gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgICAgIHdoaWxlIChjb250ZW50RG9jLmJvZHkuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICBjYXB0dXJlZEFwcGVuZENoaWxkLmNhbGwoZG9jRnJhZywgY29udGVudERvYy5ib2R5LmZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FwdHVyZWRSZXBsYWNlQ2hpbGQuY2FsbCh0aGlzLnBhcmVudE5vZGUsIGRvY0ZyYWcsIHRoaXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIFwiRmFpbGVkIHRvIHNldCB0aGUgJ291dGVySFRNTCcgcHJvcGVydHkgb24gJ0VsZW1lbnQnOiBUaGlzIGVsZW1lbnQgaGFzIG5vIHBhcmVudCBub2RlLlwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGRlZmluZUlubmVySFRNTChQb2x5ZmlsbGVkSFRNTFRlbXBsYXRlRWxlbWVudC5wcm90b3R5cGUpO1xuICAgIGRlZmluZU91dGVySFRNTChQb2x5ZmlsbGVkSFRNTFRlbXBsYXRlRWxlbWVudC5wcm90b3R5cGUpO1xuXG4gICAgLyoqXG4gICAgICBUaGUgYGJvb3RzdHJhcGAgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGFuZCBcImZpeGVzXCIgYWxsXG4gICAgICA8dGVtcGxhdGU+IGVsZW1lbnRzIGluIHRoZSBkb2N1bWVudCByZWZlcmVuY2VkIGJ5IHRoZSBgZG9jYCBhcmd1bWVudC5cbiAgICAqL1xuICAgIFBvbHlmaWxsZWRIVE1MVGVtcGxhdGVFbGVtZW50LmJvb3RzdHJhcCA9IGZ1bmN0aW9uIGJvb3RzdHJhcChkb2MpIHtcbiAgICAgIHZhciB0ZW1wbGF0ZXMgPSBRU0EoZG9jLCBURU1QTEFURV9UQUcpO1xuICAgICAgZm9yIChcbiAgICAgICAgdmFyIGkgPSAwLCBsID0gdGVtcGxhdGVzLmxlbmd0aCwgdDtcbiAgICAgICAgaSA8IGwgJiYgKHQgPSB0ZW1wbGF0ZXNbaV0pO1xuICAgICAgICBpKytcbiAgICAgICkge1xuICAgICAgICBQb2x5ZmlsbGVkSFRNTFRlbXBsYXRlRWxlbWVudC5kZWNvcmF0ZSh0KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gYXV0by1ib290c3RyYXBwaW5nIGZvciBtYWluIGRvY3VtZW50XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIFBvbHlmaWxsZWRIVE1MVGVtcGxhdGVFbGVtZW50LmJvb3RzdHJhcChkb2N1bWVudCk7XG4gICAgfSk7XG5cbiAgICAvLyBQYXRjaCBkb2N1bWVudC5jcmVhdGVFbGVtZW50IHRvIGVuc3VyZSBuZXdseSBjcmVhdGVkIHRlbXBsYXRlcyBoYXZlIGNvbnRlbnRcbiAgICBEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlRWxlbWVudCA9IGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQoKSB7XG4gICAgICB2YXIgZWwgPSBjYXB0dXJlZENyZWF0ZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIGlmIChlbC5sb2NhbE5hbWUgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUoZWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVsO1xuICAgIH07XG5cbiAgICBET01QYXJzZXIucHJvdG90eXBlLnBhcnNlRnJvbVN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBlbCA9IGNhcHR1cmVkUGFyc2VGcm9tU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICBQb2x5ZmlsbGVkSFRNTFRlbXBsYXRlRWxlbWVudC5ib290c3RyYXAoZWwpO1xuICAgICAgcmV0dXJuIGVsO1xuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTEVsZW1lbnQucHJvdG90eXBlLCAnaW5uZXJIVE1MJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRJbm5lckhUTUwodGhpcyk7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAodGV4dCkge1xuICAgICAgICBjYXB0dXJlZEhUTUxFbGVtZW50SW5uZXJIVE1MLnNldC5jYWxsKHRoaXMsIHRleHQpO1xuICAgICAgICBQb2x5ZmlsbGVkSFRNTFRlbXBsYXRlRWxlbWVudC5ib290c3RyYXAodGhpcyk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RoZS1lbmQuaHRtbCNlc2NhcGluZ1N0cmluZ1xuICAgIHZhciBlc2NhcGVBdHRyUmVnRXhwID0gL1smXFx1MDBBMFwiXS9nO1xuICAgIHZhciBlc2NhcGVEYXRhUmVnRXhwID0gL1smXFx1MDBBMDw+XS9nO1xuXG4gICAgdmFyIGVzY2FwZVJlcGxhY2UgPSBmdW5jdGlvbiAoYykge1xuICAgICAgc3dpdGNoIChjKSB7XG4gICAgICAgIGNhc2UgJyYnOlxuICAgICAgICAgIHJldHVybiAnJmFtcDsnO1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgICByZXR1cm4gJyZsdDsnO1xuICAgICAgICBjYXNlICc+JzpcbiAgICAgICAgICByZXR1cm4gJyZndDsnO1xuICAgICAgICBjYXNlICdcIic6XG4gICAgICAgICAgcmV0dXJuICcmcXVvdDsnO1xuICAgICAgICBjYXNlICdcXHUwMEEwJzpcbiAgICAgICAgICByZXR1cm4gJyZuYnNwOyc7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBlc2NhcGVBdHRyID0gZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLnJlcGxhY2UoZXNjYXBlQXR0clJlZ0V4cCwgZXNjYXBlUmVwbGFjZSk7XG4gICAgfTtcblxuICAgIHZhciBlc2NhcGVEYXRhID0gZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLnJlcGxhY2UoZXNjYXBlRGF0YVJlZ0V4cCwgZXNjYXBlUmVwbGFjZSk7XG4gICAgfTtcblxuICAgIHZhciBtYWtlU2V0ID0gZnVuY3Rpb24gKGFycikge1xuICAgICAgdmFyIHNldCA9IHt9O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc2V0W2FycltpXV0gPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNldDtcbiAgICB9O1xuXG4gICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8jdm9pZC1lbGVtZW50c1xuICAgIHZhciB2b2lkRWxlbWVudHMgPSBtYWtlU2V0KFtcbiAgICAgICdhcmVhJyxcbiAgICAgICdiYXNlJyxcbiAgICAgICdicicsXG4gICAgICAnY29sJyxcbiAgICAgICdjb21tYW5kJyxcbiAgICAgICdlbWJlZCcsXG4gICAgICAnaHInLFxuICAgICAgJ2ltZycsXG4gICAgICAnaW5wdXQnLFxuICAgICAgJ2tleWdlbicsXG4gICAgICAnbGluaycsXG4gICAgICAnbWV0YScsXG4gICAgICAncGFyYW0nLFxuICAgICAgJ3NvdXJjZScsXG4gICAgICAndHJhY2snLFxuICAgICAgJ3dicicsXG4gICAgXSk7XG5cbiAgICB2YXIgcGxhaW50ZXh0UGFyZW50cyA9IG1ha2VTZXQoW1xuICAgICAgJ3N0eWxlJyxcbiAgICAgICdzY3JpcHQnLFxuICAgICAgJ3htcCcsXG4gICAgICAnaWZyYW1lJyxcbiAgICAgICdub2VtYmVkJyxcbiAgICAgICdub2ZyYW1lcycsXG4gICAgICAncGxhaW50ZXh0JyxcbiAgICAgICdub3NjcmlwdCcsXG4gICAgXSk7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICAgKiBAcGFyYW0ge05vZGV9IHBhcmVudE5vZGVcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9uPX0gY2FsbGJhY2tcbiAgICAgKi9cbiAgICB2YXIgZ2V0T3V0ZXJIVE1MID0gZnVuY3Rpb24gKG5vZGUsIHBhcmVudE5vZGUsIGNhbGxiYWNrKSB7XG4gICAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUpIHtcbiAgICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToge1xuICAgICAgICAgIHZhciB0YWdOYW1lID0gbm9kZS5sb2NhbE5hbWU7XG4gICAgICAgICAgdmFyIHMgPSAnPCcgKyB0YWdOYW1lO1xuICAgICAgICAgIHZhciBhdHRycyA9IG5vZGUuYXR0cmlidXRlcztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMCwgYXR0cjsgKGF0dHIgPSBhdHRyc1tpXSk7IGkrKykge1xuICAgICAgICAgICAgcyArPSAnICcgKyBhdHRyLm5hbWUgKyAnPVwiJyArIGVzY2FwZUF0dHIoYXR0ci52YWx1ZSkgKyAnXCInO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzICs9ICc+JztcbiAgICAgICAgICBpZiAodm9pZEVsZW1lbnRzW3RhZ05hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gcztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHMgKyBnZXRJbm5lckhUTUwobm9kZSwgY2FsbGJhY2spICsgJzwvJyArIHRhZ05hbWUgKyAnPic7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERToge1xuICAgICAgICAgIHZhciBkYXRhID0gLyoqIEB0eXBlIHtUZXh0fSAqLyAobm9kZSkuZGF0YTtcbiAgICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiBwbGFpbnRleHRQYXJlbnRzW3BhcmVudE5vZGUubG9jYWxOYW1lXSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBlc2NhcGVEYXRhKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgTm9kZS5DT01NRU5UX05PREU6IHtcbiAgICAgICAgICByZXR1cm4gJzwhLS0nICsgLyoqIEB0eXBlIHtDb21tZW50fSAqLyAobm9kZSkuZGF0YSArICctLT4nO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICB3aW5kb3cuY29uc29sZS5lcnJvcihub2RlKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb249fSBjYWxsYmFja1xuICAgICAqL1xuICAgIHZhciBnZXRJbm5lckhUTUwgPSBmdW5jdGlvbiAobm9kZSwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChub2RlLmxvY2FsTmFtZSA9PT0gJ3RlbXBsYXRlJykge1xuICAgICAgICBub2RlID0gLyoqIEB0eXBlIHtIVE1MVGVtcGxhdGVFbGVtZW50fSAqLyAobm9kZSkuY29udGVudDtcbiAgICAgIH1cbiAgICAgIHZhciBzID0gJyc7XG4gICAgICB2YXIgYyQgPSBjYWxsYmFjayA/IGNhbGxiYWNrKG5vZGUpIDogY2FwdHVyZWRDaGlsZE5vZGVzLmdldC5jYWxsKG5vZGUpO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjJC5sZW5ndGgsIGNoaWxkOyBpIDwgbCAmJiAoY2hpbGQgPSBjJFtpXSk7IGkrKykge1xuICAgICAgICBzICs9IGdldE91dGVySFRNTChjaGlsZCwgbm9kZSwgY2FsbGJhY2spO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHM7XG4gICAgfTtcbiAgfVxuXG4gIC8vIG1ha2UgY2xvbmluZy9pbXBvcnRpbmcgd29yayFcbiAgaWYgKG5lZWRzVGVtcGxhdGUgfHwgbmVlZHNDbG9uaW5nKSB7XG4gICAgUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQuX2Nsb25lTm9kZSA9IGZ1bmN0aW9uIF9jbG9uZU5vZGUoXG4gICAgICB0ZW1wbGF0ZSxcbiAgICAgIGRlZXBcbiAgICApIHtcbiAgICAgIHZhciBjbG9uZSA9IGNhcHR1cmVkQ2xvbmVOb2RlLmNhbGwodGVtcGxhdGUsIGZhbHNlKTtcbiAgICAgIC8vIE5PVEU6IGRlY29yYXRlIGRvZXNuJ3QgYXV0by1maXggY2hpbGRyZW4gYmVjYXVzZSB0aGV5IGFyZSBhbHJlYWR5XG4gICAgICAvLyBkZWNvcmF0ZWQgc28gdGhleSBuZWVkIHNwZWNpYWwgY2xvbmUgZml4dXAuXG4gICAgICBpZiAodGhpcy5kZWNvcmF0ZSkge1xuICAgICAgICB0aGlzLmRlY29yYXRlKGNsb25lKTtcbiAgICAgIH1cbiAgICAgIGlmIChkZWVwKSB7XG4gICAgICAgIC8vIE5PVEU6IHVzZSBuYXRpdmUgY2xvbmUgbm9kZSB0byBtYWtlIHN1cmUgQ0UncyB3cmFwcGVkXG4gICAgICAgIC8vIGNsb25lTm9kZSBkb2VzIG5vdCBjYXVzZSBlbGVtZW50cyB0byB1cGdyYWRlLlxuICAgICAgICBjYXB0dXJlZEFwcGVuZENoaWxkLmNhbGwoXG4gICAgICAgICAgY2xvbmUuY29udGVudCxcbiAgICAgICAgICBjYXB0dXJlZENsb25lTm9kZS5jYWxsKHRlbXBsYXRlLmNvbnRlbnQsIHRydWUpXG4gICAgICAgICk7XG4gICAgICAgIC8vIG5vdyBlbnN1cmUgbmVzdGVkIHRlbXBsYXRlcyBhcmUgY2xvbmVkIGNvcnJlY3RseS5cbiAgICAgICAgZml4Q2xvbmVkRG9tKGNsb25lLmNvbnRlbnQsIHRlbXBsYXRlLmNvbnRlbnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNsb25lO1xuICAgIH07XG5cbiAgICAvLyBHaXZlbiBhIHNvdXJjZSBhbmQgY2xvbmVkIHN1YnRyZWUsIGZpbmQgPHRlbXBsYXRlPidzIGluIHRoZSBjbG9uZWRcbiAgICAvLyBzdWJ0cmVlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCBjbG9uZWQgPHRlbXBsYXRlPidzIGZyb20gc291cmNlLlxuICAgIC8vIFdlIG11c3QgZG8gdGhpcyBiZWNhdXNlIG9ubHkgdGhlIHNvdXJjZSB0ZW1wbGF0ZXMgaGF2ZSBwcm9wZXIgLmNvbnRlbnQuXG4gICAgdmFyIGZpeENsb25lZERvbSA9IGZ1bmN0aW9uIGZpeENsb25lZERvbShjbG9uZSwgc291cmNlKSB7XG4gICAgICAvLyBkbyBub3RoaW5nIGlmIGNsb25lZCBub2RlIGlzIG5vdCBhbiBlbGVtZW50XG4gICAgICBpZiAoIXNvdXJjZS5xdWVyeVNlbGVjdG9yQWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIHRoZXNlIHR3byBsaXN0cyBzaG91bGQgYmUgY29pbmNpZGVudFxuICAgICAgdmFyIHMkID0gUVNBKHNvdXJjZSwgVEVNUExBVEVfVEFHKTtcbiAgICAgIGlmIChzJC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIHQkID0gUVNBKGNsb25lLCBURU1QTEFURV9UQUcpO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0JC5sZW5ndGgsIHQsIHM7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgcyA9IHMkW2ldO1xuICAgICAgICB0ID0gdCRbaV07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBQb2x5ZmlsbGVkSFRNTFRlbXBsYXRlRWxlbWVudCAmJlxuICAgICAgICAgIFBvbHlmaWxsZWRIVE1MVGVtcGxhdGVFbGVtZW50LmRlY29yYXRlXG4gICAgICAgICkge1xuICAgICAgICAgIFBvbHlmaWxsZWRIVE1MVGVtcGxhdGVFbGVtZW50LmRlY29yYXRlKHMpO1xuICAgICAgICB9XG4gICAgICAgIGNhcHR1cmVkUmVwbGFjZUNoaWxkLmNhbGwodC5wYXJlbnROb2RlLCBjbG9uZU5vZGUuY2FsbChzLCB0cnVlKSwgdCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIG1ha2Ugc3VyZSBzY3JpcHRzIGluc2lkZSBvZiBhIGNsb25lZCB0ZW1wbGF0ZSBhcmUgZXhlY3V0YWJsZVxuICAgIHZhciBmaXhDbG9uZWRTY3JpcHRzID0gZnVuY3Rpb24gZml4Q2xvbmVkU2NyaXB0cyhmcmFnbWVudCkge1xuICAgICAgdmFyIHNjcmlwdHMgPSBRU0EoZnJhZ21lbnQsIHNjcmlwdFNlbGVjdG9yKTtcbiAgICAgIGZvciAodmFyIG5zLCBzLCBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcyA9IHNjcmlwdHNbaV07XG4gICAgICAgIG5zID0gY2FwdHVyZWRDcmVhdGVFbGVtZW50LmNhbGwoZG9jdW1lbnQsICdzY3JpcHQnKTtcbiAgICAgICAgbnMudGV4dENvbnRlbnQgPSBzLnRleHRDb250ZW50O1xuICAgICAgICB2YXIgYXR0cnMgPSBzLmF0dHJpYnV0ZXM7XG4gICAgICAgIGZvciAodmFyIGFpID0gMCwgYTsgYWkgPCBhdHRycy5sZW5ndGg7IGFpKyspIHtcbiAgICAgICAgICBhID0gYXR0cnNbYWldO1xuICAgICAgICAgIG5zLnNldEF0dHJpYnV0ZShhLm5hbWUsIGEudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNhcHR1cmVkUmVwbGFjZUNoaWxkLmNhbGwocy5wYXJlbnROb2RlLCBucywgcyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIG92ZXJyaWRlIGFsbCBjbG9uaW5nIHRvIGZpeCB0aGUgY2xvbmVkIHN1YnRyZWUgdG8gY29udGFpbiBwcm9wZXJseVxuICAgIC8vIGNsb25lZCB0ZW1wbGF0ZXMuXG4gICAgdmFyIGNsb25lTm9kZSA9IChOb2RlLnByb3RvdHlwZS5jbG9uZU5vZGUgPSBmdW5jdGlvbiBjbG9uZU5vZGUoZGVlcCkge1xuICAgICAgdmFyIGRvbTtcbiAgICAgIC8vIHdvcmthcm91bmQgZm9yIEVkZ2UgYnVnIGNsb25pbmcgZG9jdW1lbnRGcmFnbWVudHNcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1pY3Jvc29mdC5jb20vZW4tdXMvbWljcm9zb2Z0LWVkZ2UvcGxhdGZvcm0vaXNzdWVzLzg2MTk2NDYvXG4gICAgICBpZiAoXG4gICAgICAgICFuZWVkc0RvY0ZyYWcgJiZcbiAgICAgICAgYnJva2VuRG9jRnJhZ21lbnQgJiZcbiAgICAgICAgdGhpcyBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnRcbiAgICAgICkge1xuICAgICAgICBpZiAoIWRlZXApIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkb20gPSBpbXBvcnROb2RlLmNhbGwodGhpcy5vd25lckRvY3VtZW50LCB0aGlzLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgICAgdGhpcy5sb2NhbE5hbWUgPT09IFRFTVBMQVRFX1RBRyAmJlxuICAgICAgICB0aGlzLm5hbWVzcGFjZVVSSSA9PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJXG4gICAgICApIHtcbiAgICAgICAgZG9tID0gUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQuX2Nsb25lTm9kZSh0aGlzLCBkZWVwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvbSA9IGNhcHR1cmVkQ2xvbmVOb2RlLmNhbGwodGhpcywgZGVlcCk7XG4gICAgICB9XG4gICAgICAvLyB0ZW1wbGF0ZS5jb250ZW50IGlzIGNsb25lZCBpZmYgYGRlZXBgLlxuICAgICAgaWYgKGRlZXApIHtcbiAgICAgICAgZml4Q2xvbmVkRG9tKGRvbSwgdGhpcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZG9tO1xuICAgIH0pO1xuXG4gICAgLy8gTk9URTogd2UgYXJlIGNsb25pbmcgaW5zdGVhZCBvZiBpbXBvcnRpbmcgPHRlbXBsYXRlPidzLlxuICAgIC8vIEhvd2V2ZXIsIHRoZSBvd25lckRvY3VtZW50IG9mIHRoZSBjbG9uZWQgdGVtcGxhdGUgd2lsbCBiZSBjb3JyZWN0IVxuICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGUgbmF0aXZlIGltcG9ydCBub2RlIGNyZWF0ZXMgdGhlIHJpZ2h0IGRvY3VtZW50IG93bmVkXG4gICAgLy8gc3VidHJlZSBhbmQgYGZpeENsb25lZERvbWAgaW5zZXJ0cyBjbG9uZWQgdGVtcGxhdGVzIGludG8gdGhpcyBzdWJ0cmVlLFxuICAgIC8vIHRodXMgdXBkYXRpbmcgdGhlIG93bmVyIGRvYy5cbiAgICB2YXIgaW1wb3J0Tm9kZSA9IChEb2N1bWVudC5wcm90b3R5cGUuaW1wb3J0Tm9kZSA9IGZ1bmN0aW9uIGltcG9ydE5vZGUoXG4gICAgICBlbGVtZW50LFxuICAgICAgZGVlcFxuICAgICkge1xuICAgICAgZGVlcCA9IGRlZXAgfHwgZmFsc2U7XG4gICAgICBpZiAoZWxlbWVudC5sb2NhbE5hbWUgPT09IFRFTVBMQVRFX1RBRykge1xuICAgICAgICByZXR1cm4gUG9seWZpbGxlZEhUTUxUZW1wbGF0ZUVsZW1lbnQuX2Nsb25lTm9kZShlbGVtZW50LCBkZWVwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBkb20gPSBjYXB0dXJlZEltcG9ydE5vZGUuY2FsbCh0aGlzLCBlbGVtZW50LCBkZWVwKTtcbiAgICAgICAgaWYgKGRlZXApIHtcbiAgICAgICAgICBmaXhDbG9uZWREb20oZG9tLCBlbGVtZW50KTtcbiAgICAgICAgICBmaXhDbG9uZWRTY3JpcHRzKGRvbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRvbTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChuZWVkc1RlbXBsYXRlKSB7XG4gICAgd2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQgPSBQb2x5ZmlsbGVkSFRNTFRlbXBsYXRlRWxlbWVudDtcbiAgfVxufSkoKTtcbiIsICIoZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcIk11dGF0aW9uT2JzZXJ2ZXJcImluIHNlbGZcbikpIHtcbi8vIE11dGF0aW9uT2JzZXJ2ZXJcbi8qIVxuICogU2hpbSBmb3IgTXV0YXRpb25PYnNlcnZlciBpbnRlcmZhY2VcbiAqIEF1dGhvcjogR3JhZW1lIFllYXRlcyAoZ2l0aHViLmNvbS9tZWdhd2FjKVxuICogUmVwb3NpdG9yeTogaHR0cHM6Ly9naXRodWIuY29tL21lZ2F3YWMvTXV0YXRpb25PYnNlcnZlci5qc1xuICogTGljZW5zZTogV1RGUEwgVjIsIDIwMDQgKHd0ZnBsLm5ldCkuXG4gKiBUaG91Z2ggY3JlZGl0IGFuZCBzdGFyaW5nIHRoZSByZXBvIHdpbGwgbWFrZSBtZSBmZWVsIHByZXR0eSwgeW91IGNhbiBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSBhcyB5b3UgcGxlYXNlLlxuICogQXR0ZW1wdHMgdG8gZm9sbG93IHNwZWMgKGh0dHBzOi8vd3d3LnczLm9yZy9UUi9kb20vI211dGF0aW9uLW9ic2VydmVycykgYXMgY2xvc2VseSBhcyBwb3NzaWJsZSBmb3IgbmF0aXZlIGphdmFzY3JpcHRcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L3dlYmtpdC9ibG9iL21hc3Rlci9Tb3VyY2UvV2ViQ29yZS9kb20vTXV0YXRpb25PYnNlcnZlci5jcHAgZm9yIGN1cnJlbnQgd2Via2l0IHNvdXJjZSBjKysgaW1wbGVtZW50YXRpb25cbiAqL1xuXG4vKipcbiAqIHByZWZpeCBidWdzOlxuICAgIC0gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1MTYxXG4gICAgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD03NDk5MjBcbiAqIERvbid0IHVzZSBXZWJLaXRNdXRhdGlvbk9ic2VydmVyIGFzIFNhZmFyaSAoNi4wLjUtNi4xKSB1c2UgYSBidWdneSBpbXBsZW1lbnRhdGlvblxuKi9cbmlmICghd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIpIHtcbiAgICB3aW5kb3cuTXV0YXRpb25PYnNlcnZlciA9IChmdW5jdGlvbiAodW5kZWZpbmVkKSB7XG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHtmdW5jdGlvbihBcnJheS48TXV0YXRpb25SZWNvcmQ+LCBNdXRhdGlvbk9ic2VydmVyKX0gbGlzdGVuZXJcbiAgICAgICAgICogQGNvbnN0cnVjdG9yXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBNdXRhdGlvbk9ic2VydmVyKGxpc3RlbmVyKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEB0eXBlIHtBcnJheS48T2JqZWN0Pn1cbiAgICAgICAgICAgICAqIEBwcml2YXRlXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuX3dhdGNoZWQgPSBbXTtcbiAgICAgICAgICAgIC8qKiBAcHJpdmF0ZSAqL1xuICAgICAgICAgICAgdGhpcy5fbGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTdGFydCBhIHJlY3Vyc2l2ZSB0aW1lb3V0IGZ1bmN0aW9uIHRvIGNoZWNrIGFsbCBpdGVtcyBiZWluZyBvYnNlcnZlZCBmb3IgbXV0YXRpb25zXG4gICAgICAgICAqIEB0eXBlIHtNdXRhdGlvbk9ic2VydmVyfSBvYnNlcnZlclxuICAgICAgICAgKiBAcHJpdmF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gc3RhcnRNdXRhdGlvbkNoZWNrZXIob2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIChmdW5jdGlvbiBjaGVjaygpIHtcbiAgICAgICAgICAgICAgICB2YXIgbXV0YXRpb25zID0gb2JzZXJ2ZXIudGFrZVJlY29yZHMoKTtcblxuICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbnMubGVuZ3RoKSB7IC8vIGZpcmUgYXdheVxuICAgICAgICAgICAgICAgICAgICAvLyBjYWxsaW5nIHRoZSBsaXN0ZW5lciB3aXRoIGNvbnRleHQgaXMgbm90IHNwZWMgYnV0IGN1cnJlbnRseSBjb25zaXN0ZW50IHdpdGggRkYgYW5kIFdlYktpdFxuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5fbGlzdGVuZXIobXV0YXRpb25zLCBvYnNlcnZlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qKiBAcHJpdmF0ZSAqL1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLl90aW1lb3V0ID0gc2V0VGltZW91dChjaGVjaywgTXV0YXRpb25PYnNlcnZlci5fcGVyaW9kKTtcbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogUGVyaW9kIHRvIGNoZWNrIGZvciBtdXRhdGlvbnMgKH4zMiB0aW1lcy9zZWMpXG4gICAgICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICAgICAqIEBleHBvc2VcbiAgICAgICAgICovXG4gICAgICAgIE11dGF0aW9uT2JzZXJ2ZXIuX3BlcmlvZCA9IDMwIC8qbXMrcnVudGltZSovO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFeHBvc2VkIEFQSVxuICAgICAgICAgKiBAZXhwb3NlXG4gICAgICAgICAqIEBmaW5hbFxuICAgICAgICAgKi9cbiAgICAgICAgTXV0YXRpb25PYnNlcnZlci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1tdXRhdGlvbm9ic2VydmVyLW9ic2VydmVcbiAgICAgICAgICAgICAqIG5vdCBnb2luZyB0byB0aHJvdyBoZXJlIGJ1dCBnb2luZyB0byBmb2xsb3cgdGhlIGN1cnJlbnQgc3BlYyBjb25maWcgc2V0c1xuICAgICAgICAgICAgICogQHBhcmFtIHtOb2RlfG51bGx9ICR0YXJnZXRcbiAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fG51bGx9IGNvbmZpZyA6IE11dGF0aW9uT2JzZXJ2ZXJJbml0IGNvbmZpZ3VyYXRpb24gZGljdGlvbmFyeVxuICAgICAgICAgICAgICogQGV4cG9zZVxuICAgICAgICAgICAgICogQHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgb2JzZXJ2ZTogZnVuY3Rpb24gKCR0YXJnZXQsIGNvbmZpZykge1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIFVzaW5nIHNsaWdodGx5IGRpZmZlcmVudCBuYW1lcyBzbyBjbG9zdXJlIGNhbiBnbyBoYW1cbiAgICAgICAgICAgICAgICAgKiBAdHlwZSB7IU9iamVjdH0gOiBBIGN1c3RvbSBtdXRhdGlvbiBjb25maWdcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHI6ICEhKGNvbmZpZy5hdHRyaWJ1dGVzIHx8IGNvbmZpZy5hdHRyaWJ1dGVGaWx0ZXIgfHwgY29uZmlnLmF0dHJpYnV0ZU9sZFZhbHVlKSxcblxuICAgICAgICAgICAgICAgICAgICAvLyBzb21lIGJyb3dzZXJzIGVuZm9yY2UgdGhhdCBzdWJ0cmVlIG11c3QgYmUgc2V0IHdpdGggY2hpbGRMaXN0LCBhdHRyaWJ1dGVzIG9yIGNoYXJhY3RlckRhdGEuXG4gICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IGNhcmUgYXMgc3BlYyBkb2Vzbid0IHNwZWNpZnkgdGhpcyBydWxlLlxuICAgICAgICAgICAgICAgICAgICBraWRzOiAhIWNvbmZpZy5jaGlsZExpc3QsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NlbmRlbnRzOiAhIWNvbmZpZy5zdWJ0cmVlLFxuICAgICAgICAgICAgICAgICAgICBjaGFyRGF0YTogISEoY29uZmlnLmNoYXJhY3RlckRhdGEgfHwgY29uZmlnLmNoYXJhY3RlckRhdGFPbGRWYWx1ZSlcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIHdhdGNoZWQgPSB0aGlzLl93YXRjaGVkO1xuXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGFscmVhZHkgb2JzZXJ2ZWQgdGFyZ2V0IGVsZW1lbnQgZnJvbSBwb29sXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3YXRjaGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3YXRjaGVkW2ldLnRhciA9PT0gJHRhcmdldCkgd2F0Y2hlZC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5hdHRyaWJ1dGVGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIGNvbnZlcnRzIHRvIGEge2tleTogdHJ1ZX0gZGljdCBmb3IgZmFzdGVyIGxvb2t1cFxuICAgICAgICAgICAgICAgICAgICAgKiBAdHlwZSB7T2JqZWN0LjxTdHJpbmcsQm9vbGVhbj59XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5hZmlsdGVyID0gcmVkdWNlKGNvbmZpZy5hdHRyaWJ1dGVGaWx0ZXIsIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhW2JdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICAgICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2F0Y2hlZC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdGFyOiAkdGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICBmbjogY3JlYXRlTXV0YXRpb25TZWFyY2hlcigkdGFyZ2V0LCBzZXR0aW5ncylcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8vIHJlY29ubmVjdCBpZiBub3QgY29ubmVjdGVkXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl90aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0TXV0YXRpb25DaGVja2VyKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogRmluZHMgbXV0YXRpb25zIHNpbmNlIGxhc3QgY2hlY2sgYW5kIGVtcHRpZXMgdGhlIFwicmVjb3JkIHF1ZXVlXCIgaS5lLiBtdXRhdGlvbnMgd2lsbCBvbmx5IGJlIGZvdW5kIG9uY2VcbiAgICAgICAgICAgICAqIEBleHBvc2VcbiAgICAgICAgICAgICAqIEByZXR1cm4ge0FycmF5LjxNdXRhdGlvblJlY29yZD59XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRha2VSZWNvcmRzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG11dGF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciB3YXRjaGVkID0gdGhpcy5fd2F0Y2hlZDtcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd2F0Y2hlZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB3YXRjaGVkW2ldLmZuKG11dGF0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG11dGF0aW9ucztcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQGV4cG9zZVxuICAgICAgICAgICAgICogQHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZGlzY29ubmVjdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dhdGNoZWQgPSBbXTsgLy8gY2xlYXIgdGhlIHN0dWZmIGJlaW5nIG9ic2VydmVkXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpOyAvLyByZWFkeSBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uXG4gICAgICAgICAgICAgICAgLyoqIEBwcml2YXRlICovXG4gICAgICAgICAgICAgICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNpbXBsZSBNdXRhdGlvblJlY29yZCBwc2V1ZG9jbGFzcy4gTm8gbG9uZ2VyIGV4cG9zaW5nIGFzIGl0cyBub3QgZnVsbHkgY29tcGxpYW50XG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG4gICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gYSBNdXRhdGlvblJlY29yZFxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gTXV0YXRpb25SZWNvcmQoZGF0YSkge1xuICAgICAgICAgICAgdmFyIHNldHRpbmdzID0geyAvLyB0ZWNobmljYWxseSB0aGVzZSBzaG91bGQgYmUgb24gcHJvdG8gc28gaGFzT3duUHJvcGVydHkgd2lsbCByZXR1cm4gZmFsc2UgZm9yIG5vbiBleHBsaWNpdGx5IHByb3BzXG4gICAgICAgICAgICAgICAgdHlwZTogbnVsbCxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IG51bGwsXG4gICAgICAgICAgICAgICAgYWRkZWROb2RlczogW10sXG4gICAgICAgICAgICAgICAgcmVtb3ZlZE5vZGVzOiBbXSxcbiAgICAgICAgICAgICAgICBwcmV2aW91c1NpYmxpbmc6IG51bGwsXG4gICAgICAgICAgICAgICAgbmV4dFNpYmxpbmc6IG51bGwsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZTogbnVsbCxcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lc3BhY2U6IG51bGwsXG4gICAgICAgICAgICAgICAgb2xkVmFsdWU6IG51bGxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzKHNldHRpbmdzLCBwcm9wKSAmJiBkYXRhW3Byb3BdICE9PSB1bmRlZmluZWQpIHNldHRpbmdzW3Byb3BdID0gZGF0YVtwcm9wXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZXR0aW5ncztcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDcmVhdGVzIGEgZnVuYyB0byBmaW5kIGFsbCB0aGUgbXV0YXRpb25zXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7Tm9kZX0gJHRhcmdldFxuICAgICAgICAgKiBAcGFyYW0geyFPYmplY3R9IGNvbmZpZyA6IEEgY3VzdG9tIG11dGF0aW9uIGNvbmZpZ1xuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlTXV0YXRpb25TZWFyY2hlcigkdGFyZ2V0LCBjb25maWcpIHtcbiAgICAgICAgICAgIC8qKiB0eXBlIHtFbGVzdHVjdH0gKi9cbiAgICAgICAgICAgIHZhciAkb2xkc3RhdGUgPSBjbG9uZSgkdGFyZ2V0LCBjb25maWcpOyAvLyBjcmVhdGUgdGhlIGNsb25lZCBkYXRhc3RydWN0dXJlXG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogY29uc3VtZXMgYXJyYXkgb2YgbXV0YXRpb25zIHdlIGNhbiBwdXNoIHRvXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHBhcmFtIHtBcnJheS48TXV0YXRpb25SZWNvcmQ+fSBtdXRhdGlvbnNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtdXRhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgb2xlbiA9IG11dGF0aW9ucy5sZW5ndGgsIGRpcnR5O1xuXG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5jaGFyRGF0YSAmJiAkdGFyZ2V0Lm5vZGVUeXBlID09PSAzICYmICR0YXJnZXQubm9kZVZhbHVlICE9PSAkb2xkc3RhdGUuY2hhckRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgbXV0YXRpb25zLnB1c2gobmV3IE11dGF0aW9uUmVjb3JkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY2hhcmFjdGVyRGF0YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiAkdGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgb2xkVmFsdWU6ICRvbGRzdGF0ZS5jaGFyRGF0YVxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQWxyaWdodCB3ZSBjaGVjayBiYXNlIGxldmVsIGNoYW5nZXMgaW4gYXR0cmlidXRlcy4uLiBlYXN5XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5hdHRyICYmICRvbGRzdGF0ZS5hdHRyKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbmRBdHRyaWJ1dGVNdXRhdGlvbnMobXV0YXRpb25zLCAkdGFyZ2V0LCAkb2xkc3RhdGUuYXR0ciwgY29uZmlnLmFmaWx0ZXIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGNoaWxkbGlzdCBvciBzdWJ0cmVlIGZvciBtdXRhdGlvbnNcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmtpZHMgfHwgY29uZmlnLmRlc2NlbmRlbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpcnR5ID0gc2VhcmNoU3VidHJlZShtdXRhdGlvbnMsICR0YXJnZXQsICRvbGRzdGF0ZSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyByZWNsb25lIGRhdGEgc3RydWN0dXJlIGlmIHRoZXJlcyBjaGFuZ2VzXG4gICAgICAgICAgICAgICAgaWYgKGRpcnR5IHx8IG11dGF0aW9ucy5sZW5ndGggIT09IG9sZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqIHR5cGUge0VsZXN0dWN0fSAqL1xuICAgICAgICAgICAgICAgICAgICAkb2xkc3RhdGUgPSBjbG9uZSgkdGFyZ2V0LCBjb25maWcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvKiBhdHRyaWJ1dGVzICsgYXR0cmlidXRlRmlsdGVyIGhlbHBlcnMgKi9cblxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgZW52aXJvbm1lbnQgaGFzIHRoZSBhdHRyaWJ1dGUgYnVnICgjNCkgd2hpY2ggY2F1c2VcbiAgICAgICAgLy8gZWxlbWVudC5hdHRyaWJ1dGVzLnN0eWxlIHRvIGFsd2F5cyBiZSBudWxsLlxuICAgICAgICB2YXIgaGFzQXR0cmlidXRlQnVnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlcIik7XG4gICAgICAgIGhhc0F0dHJpYnV0ZUJ1Zy5zdHlsZS50b3AgPSAwO1xuICAgICAgICBoYXNBdHRyaWJ1dGVCdWcgPSBoYXNBdHRyaWJ1dGVCdWcuYXR0cmlidXRlcy5zdHlsZS52YWx1ZSAhPSBcIm51bGxcIjtcblxuICAgICAgICAvKipcbiAgICAgICAgICogR2V0cyBhbiBhdHRyaWJ1dGUgdmFsdWUgaW4gYW4gZW52aXJvbm1lbnQgd2l0aG91dCBhdHRyaWJ1dGUgYnVnXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7Tm9kZX0gZWxcbiAgICAgICAgICogQHBhcmFtIHtBdHRyfSBhdHRyXG4gICAgICAgICAqIEByZXR1cm4ge1N0cmluZ30gYW4gYXR0cmlidXRlIHZhbHVlXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVTaW1wbGUoZWwsIGF0dHIpIHtcbiAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgcG90ZW50aWFsIGZvciBhIHdhcm5pbmcgdG8gb2NjdXIgaGVyZSBpZiB0aGUgYXR0cmlidXRlIGlzIGFcbiAgICAgICAgICAgIC8vIGN1c3RvbSBhdHRyaWJ1dGUgaW4gSUU8OSB3aXRoIGEgY3VzdG9tIC50b1N0cmluZygpIG1ldGhvZC4gVGhpcyBpc1xuICAgICAgICAgICAgLy8ganVzdCBhIHdhcm5pbmcgYW5kIGRvZXNuJ3QgYWZmZWN0IGV4ZWN1dGlvbiAoc2VlICMyMSlcbiAgICAgICAgICAgIHJldHVybiBhdHRyLnZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEdldHMgYW4gYXR0cmlidXRlIHZhbHVlIHdpdGggc3BlY2lhbCBoYWNrIGZvciBzdHlsZSBhdHRyaWJ1dGUgKHNlZSAjNClcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfSBlbFxuICAgICAgICAgKiBAcGFyYW0ge0F0dHJ9IGF0dHJcbiAgICAgICAgICogQHJldHVybiB7U3RyaW5nfSBhbiBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZVdpdGhTdHlsZUhhY2soZWwsIGF0dHIpIHtcbiAgICAgICAgICAgIC8vIEFzIHdpdGggZ2V0QXR0cmlidXRlU2ltcGxlIHRoZXJlIGlzIGEgcG90ZW50aWFsIHdhcm5pbmcgZm9yIGN1c3RvbSBhdHRyaWJ0dWVzIGluIElFNy5cbiAgICAgICAgICAgIHJldHVybiBhdHRyLm5hbWUgIT09IFwic3R5bGVcIiA/IGF0dHIudmFsdWUgOiBlbC5zdHlsZS5jc3NUZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGdldEF0dHJpYnV0ZVZhbHVlID0gaGFzQXR0cmlidXRlQnVnID8gZ2V0QXR0cmlidXRlU2ltcGxlIDogZ2V0QXR0cmlidXRlV2l0aFN0eWxlSGFjaztcblxuICAgICAgICAvKipcbiAgICAgICAgICogZmFzdCBoZWxwZXIgdG8gY2hlY2sgdG8gc2VlIGlmIGF0dHJpYnV0ZXMgb2JqZWN0IG9mIGFuIGVsZW1lbnQgaGFzIGNoYW5nZWRcbiAgICAgICAgICogZG9lc250IGhhbmRsZSB0aGUgdGV4dG5vZGUgY2FzZVxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5LjxNdXRhdGlvblJlY29yZD59IG11dGF0aW9uc1xuICAgICAgICAgKiBAcGFyYW0ge05vZGV9ICR0YXJnZXRcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywgc3RyaW5nPn0gJG9sZHN0YXRlIDogQ3VzdG9tIGF0dHJpYnV0ZSBjbG9uZSBkYXRhIHN0cnVjdHVyZSBmcm9tIGNsb25lXG4gICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmaWx0ZXJcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGZpbmRBdHRyaWJ1dGVNdXRhdGlvbnMobXV0YXRpb25zLCAkdGFyZ2V0LCAkb2xkc3RhdGUsIGZpbHRlcikge1xuICAgICAgICAgICAgdmFyIGNoZWNrZWQgPSB7fTtcbiAgICAgICAgICAgIHZhciBhdHRyaWJ1dGVzID0gJHRhcmdldC5hdHRyaWJ1dGVzO1xuICAgICAgICAgICAgdmFyIGF0dHI7XG4gICAgICAgICAgICB2YXIgbmFtZTtcbiAgICAgICAgICAgIHZhciBpID0gYXR0cmlidXRlcy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAgICAgYXR0ciA9IGF0dHJpYnV0ZXNbaV07XG4gICAgICAgICAgICAgICAgbmFtZSA9IGF0dHIubmFtZTtcbiAgICAgICAgICAgICAgICBpZiAoIWZpbHRlciB8fCBoYXMoZmlsdGVyLCBuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0QXR0cmlidXRlVmFsdWUoJHRhcmdldCwgYXR0cikgIT09ICRvbGRzdGF0ZVtuYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHB1c2hpbmcgaXMgcmVkdW5kYW50IGJ1dCBnemlwcyB2ZXJ5IG5pY2VseVxuICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRpb25zLnB1c2goTXV0YXRpb25SZWNvcmQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXR0cmlidXRlc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogJHRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlOiAkb2xkc3RhdGVbbmFtZV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlTmFtZXNwYWNlOiBhdHRyLm5hbWVzcGFjZVVSSSAvLyBpbiBpZTw4IGl0IGluY29ycmVjdGx5IHdpbGwgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrZWRbbmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobmFtZSBpbiAkb2xkc3RhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShjaGVja2VkW25hbWVdKSkge1xuICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbnMucHVzaChNdXRhdGlvblJlY29yZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6ICR0YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImF0dHJpYnV0ZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBvbGRWYWx1ZTogJG9sZHN0YXRlW25hbWVdXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogc2VhcmNoU3VidHJlZTogYXJyYXkgb2YgbXV0YXRpb25zIHNvIGZhciwgZWxlbWVudCwgZWxlbWVudCBjbG9uZSwgYm9vbFxuICAgICAgICAgKiBzeW5jaHJvbm91cyBkZnMgY29tcGFyaXNpb24gb2YgdHdvIG5vZGVzXG4gICAgICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgYXBwbGllZCB0byBhbnkgb2JzZXJ2ZWQgZWxlbWVudCB3aXRoIGNoaWxkTGlzdCBvciBzdWJ0cmVlIHNwZWNpZmllZFxuICAgICAgICAgKiBTb3JyeSB0aGlzIGlzIGtpbmQgb2YgY29uZnVzaW5nIGFzIHNoaXQsIHRyaWVkIHRvIGNvbW1lbnQgaXQgYSBiaXQuLi5cbiAgICAgICAgICogY29kZXJldmlldy5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMzgzNTEgZGlzY3Vzc2lvbiBvZiBhbiBlYXJsaWVyIHZlcnNpb24gb2YgdGhpcyBmdW5jXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IG11dGF0aW9uc1xuICAgICAgICAgKiBAcGFyYW0ge05vZGV9ICR0YXJnZXRcbiAgICAgICAgICogQHBhcmFtIHshT2JqZWN0fSAkb2xkc3RhdGUgOiBBIGN1c3RvbSBjbG9uZWQgbm9kZSBmcm9tIGNsb25lKClcbiAgICAgICAgICogQHBhcmFtIHshT2JqZWN0fSBjb25maWcgOiBBIGN1c3RvbSBtdXRhdGlvbiBjb25maWdcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHNlYXJjaFN1YnRyZWUobXV0YXRpb25zLCAkdGFyZ2V0LCAkb2xkc3RhdGUsIGNvbmZpZykge1xuICAgICAgICAgICAgLy8gVHJhY2sgaWYgdGhlIHRyZWUgaXMgZGlydHkgYW5kIGhhcyB0byBiZSByZWNvbXB1dGVkICgjMTQpLlxuICAgICAgICAgICAgdmFyIGRpcnR5O1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAqIEhlbHBlciB0byBpZGVudGlmeSBub2RlIHJlYXJyYW5nbWVudCBhbmQgc3R1ZmYuLi5cbiAgICAgICAgICAgICAqIFRoZXJlIGlzIG5vIGdhdXJlbnRlZSB0aGF0IHRoZSBzYW1lIG5vZGUgd2lsbCBiZSBpZGVudGlmaWVkIGZvciBib3RoIGFkZGVkIGFuZCByZW1vdmVkIG5vZGVzXG4gICAgICAgICAgICAgKiBpZiB0aGUgcG9zaXRpb25zIGhhdmUgYmVlbiBzaHVmZmxlZC5cbiAgICAgICAgICAgICAqIGNvbmZsaWN0cyBhcnJheSB3aWxsIGJlIGVtcHRpZWQgYnkgZW5kIG9mIG9wZXJhdGlvblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlQ29uZmxpY3RzKGNvbmZsaWN0cywgbm9kZSwgJGtpZHMsICRvbGRraWRzLCBudW1BZGRlZE5vZGVzKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIGZpcnN0IGNvbmZsaWN0aW5nIG5vZGUgYW5kIHRoZSBsYXN0XG4gICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gY29uZmxpY3RzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgLy8gcHJldmVudHMgc2FtZSBjb25mbGljdCBiZWluZyByZXNvbHZlZCB0d2ljZSBjb25zaWRlciB3aGVuIHR3byBub2RlcyBzd2l0Y2ggcGxhY2VzLlxuICAgICAgICAgICAgICAgIC8vIG9ubHkgb25lIHNob3VsZCBiZSBnaXZlbiBhIG11dGF0aW9uIGV2ZW50IChub3RlIC1+IGlzIHVzZWQgYXMgYSBtYXRoLmNlaWwgc2hvcnRoYW5kKVxuICAgICAgICAgICAgICAgIHZhciBjb3VudGVyID0gLX4oKGRpc3RhbmNlIC0gbnVtQWRkZWROb2RlcykgLyAyKTtcbiAgICAgICAgICAgICAgICB2YXIgJGN1cjtcbiAgICAgICAgICAgICAgICB2YXIgb2xkc3RydWN0O1xuICAgICAgICAgICAgICAgIHZhciBjb25mbGljdDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoKGNvbmZsaWN0ID0gY29uZmxpY3RzLnBvcCgpKSkge1xuICAgICAgICAgICAgICAgICAgICAkY3VyID0gJGtpZHNbY29uZmxpY3QuaV07XG4gICAgICAgICAgICAgICAgICAgIG9sZHN0cnVjdCA9ICRvbGRraWRzW2NvbmZsaWN0LmpdO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGF0dGVtcHQgdG8gZGV0ZXJtaW5lIGlmIHRoZXJlIHdhcyBub2RlIHJlYXJyYW5nZW1lbnQuLi4gd29uJ3QgZ2F1cmVudGVlIGFsbCBtYXRjaGVzXG4gICAgICAgICAgICAgICAgICAgIC8vIGFsc28gaGFuZGxlcyBjYXNlIHdoZXJlIGFkZGVkL3JlbW92ZWQgbm9kZXMgY2F1c2Ugbm9kZXMgdG8gYmUgaWRlbnRpZmllZCBhcyBjb25mbGljdHNcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5raWRzICYmIGNvdW50ZXIgJiYgTWF0aC5hYnMoY29uZmxpY3QuaSAtIGNvbmZsaWN0LmopID49IGRpc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbnMucHVzaChNdXRhdGlvblJlY29yZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJjaGlsZExpc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IG5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWROb2RlczogWyRjdXJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWROb2RlczogWyRjdXJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhaGEgZG9uJ3QgcmVseSBvbiB0aGlzIHBsZWFzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRTaWJsaW5nOiAkY3VyLm5leHRTaWJsaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzU2libGluZzogJGN1ci5wcmV2aW91c1NpYmxpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ZXItLTsgLy8gZm91bmQgY29uZmxpY3RcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIEFscmlnaHQgd2UgZm91bmQgdGhlIHJlc29ydGVkIG5vZGVzIG5vdyBjaGVjayBmb3Igb3RoZXIgdHlwZXMgb2YgbXV0YXRpb25zXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuYXR0ciAmJiBvbGRzdHJ1Y3QuYXR0cikgZmluZEF0dHJpYnV0ZU11dGF0aW9ucyhtdXRhdGlvbnMsICRjdXIsIG9sZHN0cnVjdC5hdHRyLCBjb25maWcuYWZpbHRlcik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcuY2hhckRhdGEgJiYgJGN1ci5ub2RlVHlwZSA9PT0gMyAmJiAkY3VyLm5vZGVWYWx1ZSAhPT0gb2xkc3RydWN0LmNoYXJEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbnMucHVzaChNdXRhdGlvblJlY29yZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJjaGFyYWN0ZXJEYXRhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiAkY3VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlOiBvbGRzdHJ1Y3QuY2hhckRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBub3cgbG9vayBAIHN1YnRyZWVcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5kZXNjZW5kZW50cykgZmluZE11dGF0aW9ucygkY3VyLCBvbGRzdHJ1Y3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBNYWluIHdvcmtlci4gRmluZHMgYW5kIGFkZHMgbXV0YXRpb25zIGlmIHRoZXJlIGFyZSBhbnlcbiAgICAgICAgICAgICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgICAgICAgICAgICogQHBhcmFtIHshT2JqZWN0fSBvbGQgOiBBIGNsb25lZCBkYXRhIHN0cnVjdHVyZSB1c2luZyBpbnRlcm5hbCBjbG9uZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBmdW5jdGlvbiBmaW5kTXV0YXRpb25zKG5vZGUsIG9sZCkge1xuICAgICAgICAgICAgICAgIHZhciAka2lkcyA9IG5vZGUuY2hpbGROb2RlcztcbiAgICAgICAgICAgICAgICB2YXIgJG9sZGtpZHMgPSBvbGQua2lkcztcbiAgICAgICAgICAgICAgICB2YXIga2xlbiA9ICRraWRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAvLyAkb2xka2lkcyB3aWxsIGJlIHVuZGVmaW5lZCBmb3IgdGV4dCBhbmQgY29tbWVudCBub2Rlc1xuICAgICAgICAgICAgICAgIHZhciBvbGVuID0gJG9sZGtpZHMgPyAkb2xka2lkcy5sZW5ndGggOiAwO1xuICAgICAgICAgICAgICAgIC8vIGlmICghb2xlbiAmJiAha2xlbikgcmV0dXJuOyAvLyBib3RoIGVtcHR5OyBjbGVhcmx5IG5vIGNoYW5nZXNcblxuICAgICAgICAgICAgICAgIC8vIHdlIGRlbGF5IHRoZSBpbnRpYWxpemF0aW9uIG9mIHRoZXNlIGZvciBtYXJnaW5hbCBwZXJmb3JtYW5jZSBpbiB0aGUgZXhwZWN0ZWQgY2FzZSAoYWN0dWFsbHkgcXVpdGUgc2lnbmZpY2FudCBvbiBsYXJnZSBzdWJ0cmVlcyB3aGVuIHRoZXNlIHdvdWxkIGJlIG90aGVyd2lzZSB1bnVzZWQpXG4gICAgICAgICAgICAgICAgLy8gbWFwIG9mIGNoZWNrZWQgZWxlbWVudCBvZiBpZHMgdG8gcHJldmVudCByZWdpc3RlcmluZyB0aGUgc2FtZSBjb25mbGljdCB0d2ljZVxuICAgICAgICAgICAgICAgIHZhciBtYXA7XG4gICAgICAgICAgICAgICAgLy8gYXJyYXkgb2YgcG90ZW50aWFsIGNvbmZsaWN0cyAoaWUgbm9kZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIHJlIGFycmFuZ2VkKVxuICAgICAgICAgICAgICAgIHZhciBjb25mbGljdHM7XG4gICAgICAgICAgICAgICAgdmFyIGlkOyAvLyBlbGVtZW50IGlkIGZyb20gZ2V0RWxlbWVudElkIGhlbHBlclxuICAgICAgICAgICAgICAgIHZhciBpZHg7IC8vIGluZGV4IG9mIGEgbW92ZWQgb3IgaW5zZXJ0ZWQgZWxlbWVudFxuXG4gICAgICAgICAgICAgICAgdmFyIG9sZHN0cnVjdDtcbiAgICAgICAgICAgICAgICAvLyBjdXJyZW50IGFuZCBvbGQgbm9kZXNcbiAgICAgICAgICAgICAgICB2YXIgJGN1cjtcbiAgICAgICAgICAgICAgICB2YXIgJG9sZDtcbiAgICAgICAgICAgICAgICAvLyB0cmFjayB0aGUgbnVtYmVyIG9mIGFkZGVkIG5vZGVzIHNvIHdlIGNhbiByZXNvbHZlIGNvbmZsaWN0cyBtb3JlIGFjY3VyYXRlbHlcbiAgICAgICAgICAgICAgICB2YXIgbnVtQWRkZWROb2RlcyA9IDA7XG5cbiAgICAgICAgICAgICAgICAvLyBpdGVyYXRlIG92ZXIgYm90aCBvbGQgYW5kIGN1cnJlbnQgY2hpbGQgbm9kZXMgYXQgdGhlIHNhbWUgdGltZVxuICAgICAgICAgICAgICAgIHZhciBpID0gMCwgaiA9IDA7XG4gICAgICAgICAgICAgICAgLy8gd2hpbGUgdGhlcmUgaXMgc3RpbGwgYW55dGhpbmcgbGVmdCBpbiAka2lkcyBvciAkb2xka2lkcyAoc2FtZSBhcyBpIDwgJGtpZHMubGVuZ3RoIHx8IGogPCAkb2xka2lkcy5sZW5ndGg7KVxuICAgICAgICAgICAgICAgIHdoaWxlIChpIDwga2xlbiB8fCBqIDwgb2xlbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBjdXJyZW50IGFuZCBvbGQgbm9kZXMgYXQgdGhlIGluZGV4c1xuICAgICAgICAgICAgICAgICAgICAkY3VyID0gJGtpZHNbaV07XG4gICAgICAgICAgICAgICAgICAgIG9sZHN0cnVjdCA9ICRvbGRraWRzW2pdO1xuICAgICAgICAgICAgICAgICAgICAkb2xkID0gb2xkc3RydWN0ICYmIG9sZHN0cnVjdC5ub2RlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICgkY3VyID09PSAkb2xkKSB7IC8vIGV4cGVjdGVkIGNhc2UgLSBvcHRpbWl6ZWQgZm9yIHRoaXMgY2FzZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgYXR0cmlidXRlcyBhcyBzcGVjaWZpZWQgYnkgY29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmF0dHIgJiYgb2xkc3RydWN0LmF0dHIpIC8qIG9sZHN0cnVjdC5hdHRyIGluc3RlYWQgb2YgdGV4dG5vZGUgY2hlY2sgKi9maW5kQXR0cmlidXRlTXV0YXRpb25zKG11dGF0aW9ucywgJGN1ciwgb2xkc3RydWN0LmF0dHIsIGNvbmZpZy5hZmlsdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGNoYXJhY3RlciBkYXRhIGlmIG5vZGUgaXMgYSBjb21tZW50IG9yIHRleHROb2RlIGFuZCBpdCdzIGJlaW5nIG9ic2VydmVkXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmNoYXJEYXRhICYmIG9sZHN0cnVjdC5jaGFyRGF0YSAhPT0gdW5kZWZpbmVkICYmICRjdXIubm9kZVZhbHVlICE9PSBvbGRzdHJ1Y3QuY2hhckRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbnMucHVzaChNdXRhdGlvblJlY29yZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY2hhcmFjdGVyRGF0YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6ICRjdXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlOiBvbGRzdHJ1Y3QuY2hhckRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlc29sdmUgY29uZmxpY3RzOyBpdCB3aWxsIGJlIHVuZGVmaW5lZCBpZiB0aGVyZSBhcmUgbm8gY29uZmxpY3RzIC0gb3RoZXJ3aXNlIGFuIGFycmF5XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmxpY3RzKSByZXNvbHZlQ29uZmxpY3RzKGNvbmZsaWN0cywgbm9kZSwgJGtpZHMsICRvbGRraWRzLCBudW1BZGRlZE5vZGVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVjdXJzZSBvbiBuZXh0IGxldmVsIG9mIGNoaWxkcmVuLiBBdm9pZHMgdGhlIHJlY3Vyc2l2ZSBjYWxsIHdoZW4gdGhlcmUgYXJlIG5vIGNoaWxkcmVuIGxlZnQgdG8gaXRlcmF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5kZXNjZW5kZW50cyAmJiAoJGN1ci5jaGlsZE5vZGVzLmxlbmd0aCB8fCBvbGRzdHJ1Y3Qua2lkcyAmJiBvbGRzdHJ1Y3Qua2lkcy5sZW5ndGgpKSBmaW5kTXV0YXRpb25zKCRjdXIsIG9sZHN0cnVjdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gKHVuY29tbW9uIGNhc2UpIGxvb2thaGVhZCB1bnRpbCB0aGV5IGFyZSB0aGUgc2FtZSBhZ2FpbiBvciB0aGUgZW5kIG9mIGNoaWxkcmVuXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hcCkgeyAvLyBkZWxheWVkIGluaXRhbGl6YXRpb24gKGJpZyBwZXJmIGJlbmVmaXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3RzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGN1cikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlkIGlzIGluIHRoZSBsb2NhdGlvbiBtYXAgb3RoZXJ3aXNlIGRvIGEgaW5kZXhPZiBzZWFyY2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtYXBbaWQgPSBnZXRFbGVtZW50SWQoJGN1cildKSkgeyAvLyB0byBwcmV2ZW50IGRvdWJsZSBjaGVja2luZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXJrIGlkIGFzIGZvdW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcFtpZF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjdXN0b20gaW5kZXhPZiB1c2luZyBjb21wYXJpdG9yIGNoZWNraW5nIG9sZGtpZHNbaV0ubm9kZSA9PT0gJGN1clxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGlkeCA9IGluZGV4T2ZDdXN0b21Ob2RlKCRvbGRraWRzLCAkY3VyLCBqKSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmtpZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbnMucHVzaChNdXRhdGlvblJlY29yZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY2hpbGRMaXN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWROb2RlczogWyRjdXJdLCAvLyAkY3VyIGlzIGEgbmV3IG5vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFNpYmxpbmc6ICRjdXIubmV4dFNpYmxpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzU2libGluZzogJGN1ci5wcmV2aW91c1NpYmxpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQWRkZWROb2RlcysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3RzLnB1c2goeyAvLyBhZGQgY29uZmxpY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGo6IGlkeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG9sZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZTogdGhlIGNoYW5nZXMgbWF5IGhhdmUgYmVlbiByZXNvbHZlZDogaSBhbmQgaiBhcHBlYXIgY29uZ3VyZW50IHNvIHdlIGNhbiBjb250aW51ZSB1c2luZyB0aGUgZXhwZWN0ZWQgY2FzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvbGQgIT09ICRraWRzW2ldXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShtYXBbaWQgPSBnZXRFbGVtZW50SWQoJG9sZCldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBbaWRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpZHggPSBpbmRleE9mKCRraWRzLCAkb2xkLCBpKSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmtpZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbnMucHVzaChNdXRhdGlvblJlY29yZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY2hpbGRMaXN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogb2xkLm5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWROb2RlczogWyRvbGRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0U2libGluZzogJG9sZGtpZHNbaiArIDFdLCAvLyBwcmFpc2Ugbm8gaW5kZXhvdXRvZmJvdW5kcyBleGNlcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNTaWJsaW5nOiAkb2xka2lkc1tqIC0gMV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQWRkZWROb2Rlcy0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmxpY3RzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk6IGlkeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqOiBqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0vLyBlbmQgdW5jb21tb24gY2FzZVxuICAgICAgICAgICAgICAgIH0vLyBlbmQgbG9vcFxuXG4gICAgICAgICAgICAgICAgLy8gcmVzb2x2ZSBhbnkgcmVtYWluaW5nIGNvbmZsaWN0c1xuICAgICAgICAgICAgICAgIGlmIChjb25mbGljdHMpIHJlc29sdmVDb25mbGljdHMoY29uZmxpY3RzLCBub2RlLCAka2lkcywgJG9sZGtpZHMsIG51bUFkZGVkTm9kZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluZE11dGF0aW9ucygkdGFyZ2V0LCAkb2xkc3RhdGUpO1xuICAgICAgICAgICAgcmV0dXJuIGRpcnR5O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFV0aWxpdHlcbiAgICAgICAgICogQ29uZXMgYSBlbGVtZW50IGludG8gYSBjdXN0b20gZGF0YSBzdHJ1Y3R1cmUgZGVzaWduZWQgZm9yIGNvbXBhcmlzaW9uLiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9tZWdhd2FjLzgyMDEwMTJcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfSAkdGFyZ2V0XG4gICAgICAgICAqIEBwYXJhbSB7IU9iamVjdH0gY29uZmlnIDogQSBjdXN0b20gbXV0YXRpb24gY29uZmlnXG4gICAgICAgICAqIEByZXR1cm4geyFPYmplY3R9IDogQ2xvbmVkIGRhdGEgc3RydWN0dXJlXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBjbG9uZSgkdGFyZ2V0LCBjb25maWcpIHtcbiAgICAgICAgICAgIHZhciByZWN1cnNlID0gdHJ1ZTsgLy8gc2V0IHRydWUgc28gY2hpbGRMaXN0IHdlJ2xsIGFsd2F5cyBjaGVjayB0aGUgZmlyc3QgbGV2ZWxcbiAgICAgICAgICAgIHJldHVybiAoZnVuY3Rpb24gY29weSgkdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGVsZXN0cnVjdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgLyoqIEB0eXBlIHtOb2RlfSAqL1xuICAgICAgICAgICAgICAgICAgICBub2RlOiAkdGFyZ2V0XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8vIFN0b3JlIGN1cnJlbnQgY2hhcmFjdGVyIGRhdGEgb2YgdGFyZ2V0IHRleHQgb3IgY29tbWVudCBub2RlIGlmIHRoZSBjb25maWcgcmVxdWVzdHNcbiAgICAgICAgICAgICAgICAvLyB0aG9zZSBwcm9wZXJ0aWVzIHRvIGJlIG9ic2VydmVkLlxuICAgICAgICAgICAgICAgIGlmIChjb25maWcuY2hhckRhdGEgJiYgKCR0YXJnZXQubm9kZVR5cGUgPT09IDMgfHwgJHRhcmdldC5ub2RlVHlwZSA9PT0gOCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlc3RydWN0LmNoYXJEYXRhID0gJHRhcmdldC5ub2RlVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGl0cyBlaXRoZXIgYSBlbGVtZW50LCBjb21tZW50LCBkb2MgZnJhZyBvciBkb2N1bWVudCBub2RlXG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBhdHRyIG9ubHkgaWYgc3VidHJlZSBpcyBzcGVjaWZpZWQgb3IgdG9wIGxldmVsIGFuZCBhdm9pZCBpZlxuICAgICAgICAgICAgICAgICAgICAvLyBhdHRyaWJ1dGVzIGlzIGEgZG9jdW1lbnQgb2JqZWN0ICgjMTMpLlxuICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmF0dHIgJiYgcmVjdXJzZSAmJiAkdGFyZ2V0Lm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIGNsb25lIGxpdmUgYXR0cmlidXRlIGxpc3QgdG8gYW4gb2JqZWN0IHN0cnVjdHVyZSB7bmFtZTogdmFsfVxuICAgICAgICAgICAgICAgICAgICAgICAgICogQHR5cGUge09iamVjdC48c3RyaW5nLCBzdHJpbmc+fVxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVzdHJ1Y3QuYXR0ciA9IHJlZHVjZSgkdGFyZ2V0LmF0dHJpYnV0ZXMsIGZ1bmN0aW9uIChtZW1vLCBhdHRyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25maWcuYWZpbHRlciB8fCBjb25maWcuYWZpbHRlclthdHRyLm5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9bYXR0ci5uYW1lXSA9IGdldEF0dHJpYnV0ZVZhbHVlKCR0YXJnZXQsIGF0dHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVtbztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdoZXRoZXIgd2Ugc2hvdWxkIGl0ZXJhdGUgdGhlIGNoaWxkcmVuIG9mICR0YXJnZXQgbm9kZVxuICAgICAgICAgICAgICAgICAgICBpZiAocmVjdXJzZSAmJiAoKGNvbmZpZy5raWRzIHx8IGNvbmZpZy5jaGFyRGF0YSkgfHwgKGNvbmZpZy5hdHRyICYmIGNvbmZpZy5kZXNjZW5kZW50cykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiogQHR5cGUge0FycmF5LjwhT2JqZWN0Pn0gOiBBcnJheSBvZiBjdXN0b20gY2xvbmUgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZXN0cnVjdC5raWRzID0gbWFwKCR0YXJnZXQuY2hpbGROb2RlcywgY29weSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZWN1cnNlID0gY29uZmlnLmRlc2NlbmRlbnRzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlc3RydWN0O1xuICAgICAgICAgICAgfSkoJHRhcmdldCk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogaW5kZXhPZiBhbiBlbGVtZW50IGluIGEgY29sbGVjdGlvbiBvZiBjdXN0b20gbm9kZXNcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtOb2RlTGlzdH0gc2V0XG4gICAgICAgICAqIEBwYXJhbSB7IU9iamVjdH0gJG5vZGUgOiBBIGN1c3RvbSBjbG9uZWQgbm9kZVxuICAgICAgICAgKiBAcGFyYW0ge251bWJlcn0gaWR4IDogaW5kZXggdG8gc3RhcnQgdGhlIGxvb3BcbiAgICAgICAgICogQHJldHVybiB7bnVtYmVyfVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gaW5kZXhPZkN1c3RvbU5vZGUoc2V0LCAkbm9kZSwgaWR4KSB7XG4gICAgICAgICAgICByZXR1cm4gaW5kZXhPZihzZXQsICRub2RlLCBpZHgsIEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoXCJub2RlXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVzaW5nIGEgbm9uIGlkIChlZyBvdXRlckhUTUwgb3Igbm9kZVZhbHVlKSBpcyBleHRyZW1lbHkgbmFpdmUgYW5kIHdpbGwgcnVuIGludG8gaXNzdWVzIHdpdGggbm9kZXMgdGhhdCBtYXkgYXBwZWFyIHRoZSBzYW1lIGxpa2UgPGxpPjwvbGk+XG4gICAgICAgIHZhciBjb3VudGVyID0gMTsgLy8gZG9uJ3QgdXNlIDAgYXMgaWQgKGZhbHN5KVxuICAgICAgICAvKiogQGNvbnN0ICovXG4gICAgICAgIHZhciBleHBhbmRvID0gXCJtb19pZFwiO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBdHRlbXB0IHRvIHVuaXF1ZWx5IGlkIGFuIGVsZW1lbnQgZm9yIGhhc2hpbmcuIFdlIGNvdWxkIG9wdGltaXplIHRoaXMgZm9yIGxlZ2FjeSBicm93c2VycyBidXQgaXQgaG9wZWZ1bGx5IHdvbnQgYmUgY2FsbGVkIGVub3VnaCB0byBiZSBhIGNvbmNlcm5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtOb2RlfSAkZWxlXG4gICAgICAgICAqIEByZXR1cm4geyhzdHJpbmd8bnVtYmVyKX1cbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGdldEVsZW1lbnRJZCgkZWxlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiAkZWxlLmlkIHx8ICgkZWxlW2V4cGFuZG9dID0gJGVsZVtleHBhbmRvXSB8fCBjb3VudGVyKyspO1xuICAgICAgICAgICAgfSBjYXRjaCAob19PKSB7IC8vIGllIDw4IHdpbGwgdGhyb3cgaWYgeW91IHNldCBhbiB1bmtub3duIHByb3BlcnR5IG9uIGEgdGV4dCBub2RlXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRlbGUubm9kZVZhbHVlOyAvLyBuYWl2ZVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKHNoaXRpZSkgeyAvLyB3aGVuIHRleHQgbm9kZSBpcyByZW1vdmVkOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9tZWdhd2FjLzgzNTU5NzggOihcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogKiptYXAqKiBBcHBseSBhIG1hcHBpbmcgZnVuY3Rpb24gdG8gZWFjaCBpdGVtIG9mIGEgc2V0XG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8Tm9kZUxpc3R9IHNldFxuICAgICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRvclxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gbWFwKHNldCwgaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgc2V0Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIHJlc3VsdHNbaW5kZXhdID0gaXRlcmF0b3Ioc2V0W2luZGV4XSwgaW5kZXgsIHNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiAqKlJlZHVjZSoqIGJ1aWxkcyB1cCBhIHNpbmdsZSByZXN1bHQgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl8Tm9kZUxpc3R8TmFtZWROb2RlTWFwfSBzZXRcbiAgICAgICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0b3JcbiAgICAgICAgICogQHBhcmFtIHsqfSBbbWVtb10gSW5pdGlhbCB2YWx1ZSBvZiB0aGUgbWVtby5cbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHJlZHVjZShzZXQsIGl0ZXJhdG9yLCBtZW1vKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgc2V0Lmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIG1lbW8gPSBpdGVyYXRvcihtZW1vLCBzZXRbaW5kZXhdLCBpbmRleCwgc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtZW1vO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqICoqaW5kZXhPZioqIGZpbmQgaW5kZXggb2YgaXRlbSBpbiBjb2xsZWN0aW9uLlxuICAgICAgICAgKiBAcGFyYW0ge0FycmF5fE5vZGVMaXN0fSBzZXRcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGl0ZW1cbiAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IGlkeFxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3Byb3BdIFByb3BlcnR5IG9uIHNldCBpdGVtIHRvIGNvbXBhcmUgdG8gaXRlbVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gaW5kZXhPZihzZXQsIGl0ZW0sIGlkeCwgcHJvcCkge1xuICAgICAgICAgICAgZm9yICgvKmlkeCA9IH5+aWR4Ki87IGlkeCA8IHNldC5sZW5ndGg7IGlkeCsrKSB7Ly8gc3RhcnQgaWR4IGlzIGFsd2F5cyBnaXZlbiBhcyB0aGlzIGlzIGludGVybmFsXG4gICAgICAgICAgICAgICAgaWYgKChwcm9wID8gc2V0W2lkeF1bcHJvcF0gOiBzZXRbaWR4XSkgPT09IGl0ZW0pIHJldHVybiBpZHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9ialxuICAgICAgICAgKiBAcGFyYW0geyhzdHJpbmd8bnVtYmVyKX0gcHJvcFxuICAgICAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gaGFzKG9iaiwgcHJvcCkge1xuICAgICAgICAgICAgcmV0dXJuIG9ialtwcm9wXSAhPT0gdW5kZWZpbmVkOyAvLyB3aWxsIGJlIG5pY2VseSBpbmxpbmVkIGJ5IGdjY1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR0NDIGhhY2sgc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMzIwMjQzOC8xNTE3OTE5XG4gICAgICAgIGZ1bmN0aW9uIEpTQ29tcGlsZXJfcmVuYW1lUHJvcGVydHkoYSkge1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gTXV0YXRpb25PYnNlcnZlcjtcbiAgICB9KSh2b2lkIDApO1xufVxufX0pLmNhbGwoJ29iamVjdCcgPT09IHR5cGVvZiB3aW5kb3cgJiYgd2luZG93IHx8ICdvYmplY3QnID09PSB0eXBlb2Ygc2VsZiAmJiBzZWxmIHx8ICdvYmplY3QnID09PSB0eXBlb2YgZ2xvYmFsICYmIGdsb2JhbCB8fCB7fSk7XG4iLCAiKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoZG9jdW1lbnQuY29udGFpbnNcbikpIHtcbi8vIE5vZGUucHJvdG90eXBlLmNvbnRhaW5zXG4oZnVuY3Rpb24oKSB7XG5cblx0ZnVuY3Rpb24gY29udGFpbnMobm9kZSkge1xuXHRcdGlmICghKDAgaW4gYXJndW1lbnRzKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignMSBhcmd1bWVudCBpcyByZXF1aXJlZCcpO1xuXHRcdH1cblxuXHRcdGRvIHtcblx0XHRcdGlmICh0aGlzID09PSBub2RlKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25kLWFzc2lnblxuXHRcdH0gd2hpbGUgKG5vZGUgPSBub2RlICYmIG5vZGUucGFyZW50Tm9kZSk7XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBJRVxuXHRpZiAoJ0hUTUxFbGVtZW50JyBpbiBzZWxmICYmICdjb250YWlucycgaW4gSFRNTEVsZW1lbnQucHJvdG90eXBlKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGRlbGV0ZSBIVE1MRWxlbWVudC5wcm90b3R5cGUuY29udGFpbnM7XG5cdFx0fSBjYXRjaCAoZSkge31cblx0fVxuXG5cdGlmICgnTm9kZScgaW4gc2VsZikge1xuXHRcdE5vZGUucHJvdG90eXBlLmNvbnRhaW5zID0gY29udGFpbnM7XG5cdH0gZWxzZSB7XG5cdFx0ZG9jdW1lbnQuY29udGFpbnMgPSBFbGVtZW50LnByb3RvdHlwZS5jb250YWlucyA9IGNvbnRhaW5zO1xuXHR9XG5cbn0oKSk7XG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICJcbjsoZnVuY3Rpb24oKXsgdHJ5IHsgd2luZG93WydTaGFkeURPTSddID0gd2luZG93WydTaGFkeURPTSddIHx8IHt9OyB3aW5kb3dbJ1NoYWR5RE9NJ11bJ3F1ZXJ5U2VsZWN0b3JJbXBsZW1lbnRhdGlvbiddID0gd2luZG93WydTaGFkeURPTSddWydxdWVyeVNlbGVjdG9ySW1wbGVtZW50YXRpb24nXSB8fCAnbmF0aXZlJzsgfSBjYXRjaChlcnIpIHt9IH0pKCk7XG4oZnVuY3Rpb24oKXsvKlxuXG5Db3B5cmlnaHQgKGMpIDIwMTYgVGhlIFBvbHltZXIgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuVGhpcyBjb2RlIG1heSBvbmx5IGJlIHVzZWQgdW5kZXIgdGhlIEJTRCBzdHlsZSBsaWNlbnNlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9MSUNFTlNFLnR4dFxuVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHRcblRoZSBjb21wbGV0ZSBzZXQgb2YgY29udHJpYnV0b3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQ09OVFJJQlVUT1JTLnR4dFxuQ29kZSBkaXN0cmlidXRlZCBieSBHb29nbGUgYXMgcGFydCBvZiB0aGUgcG9seW1lciBwcm9qZWN0IGlzIGFsc29cbnN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0XG4qL1xuJ3VzZSBzdHJpY3QnO3ZhciBuO2Z1bmN0aW9uIGFhKGEpe3ZhciBiPTA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGI8YS5sZW5ndGg/e2RvbmU6ITEsdmFsdWU6YVtiKytdfTp7ZG9uZTohMH19fWZ1bmN0aW9uIHAoYSl7dmFyIGI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yJiZhW1N5bWJvbC5pdGVyYXRvcl07cmV0dXJuIGI/Yi5jYWxsKGEpOntuZXh0OmFhKGEpfX1mdW5jdGlvbiBxKGEpe2lmKCEoYSBpbnN0YW5jZW9mIEFycmF5KSl7YT1wKGEpO2Zvcih2YXIgYixjPVtdOyEoYj1hLm5leHQoKSkuZG9uZTspYy5wdXNoKGIudmFsdWUpO2E9Y31yZXR1cm4gYX1cbmZ1bmN0aW9uIGJhKGEpe2E9W1wib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzLGEsXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyYmd2luZG93LFwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmLFwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbF07Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDsrK2Ipe3ZhciBjPWFbYl07aWYoYyYmYy5NYXRoPT1NYXRoKXJldHVybiBjfXRocm93IEVycm9yKFwiQ2Fubm90IGZpbmQgZ2xvYmFsIG9iamVjdFwiKTt9dmFyIGNhPWJhKHRoaXMpO2Z1bmN0aW9uIGRhKCl7fWRhLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57fX07ZnVuY3Rpb24gdChhKXthLl9fc2hhZHl8fChhLl9fc2hhZHk9bmV3IGRhKTtyZXR1cm4gYS5fX3NoYWR5fWZ1bmN0aW9uIHUoYSl7cmV0dXJuIGEmJmEuX19zaGFkeX07dmFyIHY9d2luZG93LlNoYWR5RE9NfHx7fTt2LmRhPSEoIUVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvd3x8IU5vZGUucHJvdG90eXBlLmdldFJvb3ROb2RlKTt2YXIgZWE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihOb2RlLnByb3RvdHlwZSxcImZpcnN0Q2hpbGRcIik7di5pPSEhKGVhJiZlYS5jb25maWd1cmFibGUmJmVhLmdldCk7di5OPXYuZm9yY2V8fCF2LmRhO3YubD12Lm5vUGF0Y2h8fCExO3YuQz12LnByZWZlclBlcmZvcm1hbmNlO3YuTz1cIm9uLWRlbWFuZFwiPT09di5sO3ZhciBmYTt2YXIgaGE9di5xdWVyeVNlbGVjdG9ySW1wbGVtZW50YXRpb247ZmE9LTE8W1wibmF0aXZlXCIsXCJzZWxlY3RvckVuZ2luZVwiXS5pbmRleE9mKGhhKT9oYTp2b2lkIDA7di5nYT1mYTt2LlY9bmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChcIlRyaWRlbnRcIik7XG5mdW5jdGlvbiBpYSgpe3JldHVybiBEb2N1bWVudC5wcm90b3R5cGUubXNFbGVtZW50c0Zyb21Qb2ludD9cIm1zRWxlbWVudHNGcm9tUG9pbnRcIjpcImVsZW1lbnRzRnJvbVBvaW50XCJ9ZnVuY3Rpb24gdyhhKXtyZXR1cm4oYT11KGEpKSYmdm9pZCAwIT09YS5maXJzdENoaWxkfWZ1bmN0aW9uIHgoYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBTaGFkb3dSb290fWZ1bmN0aW9uIGphKGEpe3JldHVybihhPShhPXUoYSkpJiZhLnJvb3QpJiZrYShhKX12YXIgeT1FbGVtZW50LnByb3RvdHlwZSxsYT15Lm1hdGNoZXN8fHkubWF0Y2hlc1NlbGVjdG9yfHx5Lm1vek1hdGNoZXNTZWxlY3Rvcnx8eS5tc01hdGNoZXNTZWxlY3Rvcnx8eS5vTWF0Y2hlc1NlbGVjdG9yfHx5LndlYmtpdE1hdGNoZXNTZWxlY3RvcixtYT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKSxuYT0wLG9hPVtdO1xuKG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKCl7Zm9yKDtvYS5sZW5ndGg7KXRyeXtvYS5zaGlmdCgpKCl9Y2F0Y2goYSl7dGhyb3cgbWEudGV4dENvbnRlbnQ9bmErKyxhO319KSkub2JzZXJ2ZShtYSx7Y2hhcmFjdGVyRGF0YTohMH0pO2Z1bmN0aW9uIHBhKGEpe29hLnB1c2goYSk7bWEudGV4dENvbnRlbnQ9bmErK312YXIgcWE9ZG9jdW1lbnQuY29udGFpbnM/ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5fX3NoYWR5X25hdGl2ZV9jb250YWlucyhiKX06ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT09PWJ8fGEuZG9jdW1lbnRFbGVtZW50JiZhLmRvY3VtZW50RWxlbWVudC5fX3NoYWR5X25hdGl2ZV9jb250YWlucyhiKX07ZnVuY3Rpb24gcmEoYSxiKXtmb3IoO2I7KXtpZihiPT1hKXJldHVybiEwO2I9Yi5fX3NoYWR5X3BhcmVudE5vZGV9cmV0dXJuITF9XG5mdW5jdGlvbiB6KGEpe2Zvcih2YXIgYj1hLmxlbmd0aC0xOzA8PWI7Yi0tKXt2YXIgYz1hW2JdLGQ9Yy5nZXRBdHRyaWJ1dGUoXCJpZFwiKXx8Yy5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpO2QmJlwibGVuZ3RoXCIhPT1kJiZpc05hTihkKSYmKGFbZF09Yyl9YS5pdGVtPWZ1bmN0aW9uKGUpe3JldHVybiBhW2VdfTthLm5hbWVkSXRlbT1mdW5jdGlvbihlKXtpZihcImxlbmd0aFwiIT09ZSYmaXNOYU4oZSkmJmFbZV0pcmV0dXJuIGFbZV07Zm9yKHZhciBmPXAoYSksZz1mLm5leHQoKTshZy5kb25lO2c9Zi5uZXh0KCkpaWYoZz1nLnZhbHVlLChnLmdldEF0dHJpYnV0ZShcImlkXCIpfHxnLmdldEF0dHJpYnV0ZShcIm5hbWVcIikpPT1lKXJldHVybiBnO3JldHVybiBudWxsfTtyZXR1cm4gYX1mdW5jdGlvbiBzYShhKXt2YXIgYj1bXTtmb3IoYT1hLl9fc2hhZHlfbmF0aXZlX2ZpcnN0Q2hpbGQ7YTthPWEuX19zaGFkeV9uYXRpdmVfbmV4dFNpYmxpbmcpYi5wdXNoKGEpO3JldHVybiBifVxuZnVuY3Rpb24gdGEoYSl7dmFyIGI9W107Zm9yKGE9YS5fX3NoYWR5X2ZpcnN0Q2hpbGQ7YTthPWEuX19zaGFkeV9uZXh0U2libGluZyliLnB1c2goYSk7cmV0dXJuIGJ9ZnVuY3Rpb24gdWEoYSxiLGMpe2MuY29uZmlndXJhYmxlPSEwO2lmKGMudmFsdWUpYVtiXT1jLnZhbHVlO2Vsc2UgdHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIsYyl9Y2F0Y2goZCl7fX1mdW5jdGlvbiBBKGEsYixjLGQpe2M9dm9pZCAwPT09Yz9cIlwiOmM7Zm9yKHZhciBlIGluIGIpZCYmMDw9ZC5pbmRleE9mKGUpfHx1YShhLGMrZSxiW2VdKX1mdW5jdGlvbiB2YShhLGIpe2Zvcih2YXIgYyBpbiBiKWMgaW4gYSYmdWEoYSxjLGJbY10pfWZ1bmN0aW9uIEIoYSl7dmFyIGI9e307T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSkuZm9yRWFjaChmdW5jdGlvbihjKXtiW2NdPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYSxjKX0pO3JldHVybiBifVxuZnVuY3Rpb24gd2EoYSxiKXtmb3IodmFyIGM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYiksZD0wLGU7ZDxjLmxlbmd0aDtkKyspZT1jW2RdLGFbZV09YltlXX1mdW5jdGlvbiB4YShhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIE5vZGU/YTpkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiK2EpfWZ1bmN0aW9uIEQoYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7KytjKWJbY109YXJndW1lbnRzW2NdO2lmKDE9PT1iLmxlbmd0aClyZXR1cm4geGEoYlswXSk7Yz1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Yj1wKGIpO2Zvcih2YXIgZD1iLm5leHQoKTshZC5kb25lO2Q9Yi5uZXh0KCkpYy5hcHBlbmRDaGlsZCh4YShkLnZhbHVlKSk7cmV0dXJuIGN9XG5mdW5jdGlvbiB5YShhKXt2YXIgYjtmb3IoYj12b2lkIDA9PT1iPzE6YjswPGI7Yi0tKWE9YS5yZWR1Y2UoZnVuY3Rpb24oYyxkKXtBcnJheS5pc0FycmF5KGQpP2MucHVzaC5hcHBseShjLHEoZCkpOmMucHVzaChkKTtyZXR1cm4gY30sW10pO3JldHVybiBhfWZ1bmN0aW9uIHphKGEpe3ZhciBiPVtdLGM9bmV3IFNldDthPXAoYSk7Zm9yKHZhciBkPWEubmV4dCgpOyFkLmRvbmU7ZD1hLm5leHQoKSlkPWQudmFsdWUsYy5oYXMoZCl8fChiLnB1c2goZCksYy5hZGQoZCkpO3JldHVybiBifTt2YXIgRT1bXSxBYTtmdW5jdGlvbiBCYShhKXtBYXx8KEFhPSEwLHBhKEYpKTtFLnB1c2goYSl9ZnVuY3Rpb24gRigpe0FhPSExO2Zvcih2YXIgYT0hIUUubGVuZ3RoO0UubGVuZ3RoOylFLnNoaWZ0KCkoKTtyZXR1cm4gYX1GLmxpc3Q9RTtmdW5jdGlvbiBDYSgpe3RoaXMuZz0hMTt0aGlzLmFkZGVkTm9kZXM9W107dGhpcy5yZW1vdmVkTm9kZXM9W107dGhpcy5IPW5ldyBTZXR9ZnVuY3Rpb24gRGEoYSl7YS5nfHwoYS5nPSEwLHBhKGZ1bmN0aW9uKCl7YS5mbHVzaCgpfSkpfUNhLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2lmKHRoaXMuZyl7dGhpcy5nPSExO3ZhciBhPXRoaXMudGFrZVJlY29yZHMoKTthLmxlbmd0aCYmdGhpcy5ILmZvckVhY2goZnVuY3Rpb24oYil7YihhKX0pfX07Q2EucHJvdG90eXBlLnRha2VSZWNvcmRzPWZ1bmN0aW9uKCl7aWYodGhpcy5hZGRlZE5vZGVzLmxlbmd0aHx8dGhpcy5yZW1vdmVkTm9kZXMubGVuZ3RoKXt2YXIgYT1be2FkZGVkTm9kZXM6dGhpcy5hZGRlZE5vZGVzLHJlbW92ZWROb2Rlczp0aGlzLnJlbW92ZWROb2Rlc31dO3RoaXMuYWRkZWROb2Rlcz1bXTt0aGlzLnJlbW92ZWROb2Rlcz1bXTtyZXR1cm4gYX1yZXR1cm5bXX07XG5mdW5jdGlvbiBFYShhLGIpe3ZhciBjPXQoYSk7Yy5CfHwoYy5CPW5ldyBDYSk7Yy5CLkguYWRkKGIpO3ZhciBkPWMuQjtyZXR1cm57WjpiLGJhOmQsYWE6YSx0YWtlUmVjb3JkczpmdW5jdGlvbigpe3JldHVybiBkLnRha2VSZWNvcmRzKCl9fX1mdW5jdGlvbiBGYShhKXt2YXIgYj1hJiZhLmJhO2ImJihiLkguZGVsZXRlKGEuWiksYi5ILnNpemV8fCh0KGEuYWEpLkI9bnVsbCkpfVxuZnVuY3Rpb24gR2EoYSxiKXt2YXIgYz1iLmdldFJvb3ROb2RlKCk7cmV0dXJuIGEubWFwKGZ1bmN0aW9uKGQpe3ZhciBlPWM9PT1kLnRhcmdldC5nZXRSb290Tm9kZSgpO2lmKGUmJmQuYWRkZWROb2Rlcyl7aWYoZT1bXS5zbGljZS5jYWxsKGQuYWRkZWROb2RlcykuZmlsdGVyKGZ1bmN0aW9uKGYpe3JldHVybiBjPT09Zi5nZXRSb290Tm9kZSgpfSksZS5sZW5ndGgpcmV0dXJuIGQ9T2JqZWN0LmNyZWF0ZShkKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZCxcImFkZGVkTm9kZXNcIix7dmFsdWU6ZSxjb25maWd1cmFibGU6ITB9KSxkfWVsc2UgaWYoZSlyZXR1cm4gZH0pLmZpbHRlcihmdW5jdGlvbihkKXtyZXR1cm4gZH0pfTt2YXIgSGE9L1smXFx1MDBBMFwiXS9nLElhPS9bJlxcdTAwQTA8Pl0vZztmdW5jdGlvbiBKYShhKXtzd2l0Y2goYSl7Y2FzZSBcIiZcIjpyZXR1cm5cIiZhbXA7XCI7Y2FzZSBcIjxcIjpyZXR1cm5cIiZsdDtcIjtjYXNlIFwiPlwiOnJldHVyblwiJmd0O1wiO2Nhc2UgJ1wiJzpyZXR1cm5cIiZxdW90O1wiO2Nhc2UgXCJcXHUwMGEwXCI6cmV0dXJuXCImbmJzcDtcIn19ZnVuY3Rpb24gS2EoYSl7Zm9yKHZhciBiPXt9LGM9MDtjPGEubGVuZ3RoO2MrKyliW2FbY11dPSEwO3JldHVybiBifXZhciBMYT1LYShcImFyZWEgYmFzZSBiciBjb2wgY29tbWFuZCBlbWJlZCBociBpbWcgaW5wdXQga2V5Z2VuIGxpbmsgbWV0YSBwYXJhbSBzb3VyY2UgdHJhY2sgd2JyXCIuc3BsaXQoXCIgXCIpKSxNYT1LYShcInN0eWxlIHNjcmlwdCB4bXAgaWZyYW1lIG5vZW1iZWQgbm9mcmFtZXMgcGxhaW50ZXh0IG5vc2NyaXB0XCIuc3BsaXQoXCIgXCIpKTtcbmZ1bmN0aW9uIE5hKGEsYil7XCJ0ZW1wbGF0ZVwiPT09YS5sb2NhbE5hbWUmJihhPWEuY29udGVudCk7Zm9yKHZhciBjPVwiXCIsZD1iP2IoYSk6YS5jaGlsZE5vZGVzLGU9MCxmPWQubGVuZ3RoLGc9dm9pZCAwO2U8ZiYmKGc9ZFtlXSk7ZSsrKXthOnt2YXIgaD1nO3ZhciBrPWEsbD1iO3N3aXRjaChoLm5vZGVUeXBlKXtjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOms9aC5sb2NhbE5hbWU7Zm9yKHZhciBtPVwiPFwiK2sscj1oLmF0dHJpYnV0ZXMsQz0wLFM7Uz1yW0NdO0MrKyltKz1cIiBcIitTLm5hbWUrJz1cIicrUy52YWx1ZS5yZXBsYWNlKEhhLEphKSsnXCInO20rPVwiPlwiO2g9TGFba10/bTptK05hKGgsbCkrXCI8L1wiK2srXCI+XCI7YnJlYWsgYTtjYXNlIE5vZGUuVEVYVF9OT0RFOmg9aC5kYXRhO2g9ayYmTWFbay5sb2NhbE5hbWVdP2g6aC5yZXBsYWNlKElhLEphKTticmVhayBhO2Nhc2UgTm9kZS5DT01NRU5UX05PREU6aD1cIlxceDNjIS0tXCIraC5kYXRhK1wiLS1cXHgzZVwiO2JyZWFrIGE7ZGVmYXVsdDp0aHJvdyB3aW5kb3cuY29uc29sZS5lcnJvcihoKSxcbkVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO319Yys9aH1yZXR1cm4gY307dmFyIEc9di5pLE9hPXtxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3F1ZXJ5U2VsZWN0b3IoYSl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfcXVlcnlTZWxlY3RvckFsbChhKX19LFBhPXt9O2Z1bmN0aW9uIFFhKGEpe1BhW2FdPWZ1bmN0aW9uKGIpe3JldHVybiBiW1wiX19zaGFkeV9uYXRpdmVfXCIrYV19fWZ1bmN0aW9uIEgoYSxiKXtBKGEsYixcIl9fc2hhZHlfbmF0aXZlX1wiKTtmb3IodmFyIGMgaW4gYilRYShjKX1mdW5jdGlvbiBJKGEsYil7Yj12b2lkIDA9PT1iP1tdOmI7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe3ZhciBkPWJbY10sZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsZCk7ZSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLFwiX19zaGFkeV9uYXRpdmVfXCIrZCxlKSxlLnZhbHVlP09hW2RdfHwoT2FbZF09ZS52YWx1ZSk6UWEoZCkpfX1cbnZhciBKPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZG9jdW1lbnQsTm9kZUZpbHRlci5TSE9XX0FMTCxudWxsLCExKSxLPWRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZG9jdW1lbnQsTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQsbnVsbCwhMSksUmE9ZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KFwiaW5lcnRcIik7ZnVuY3Rpb24gU2EoYSl7Zm9yKHZhciBiO2I9YS5fX3NoYWR5X25hdGl2ZV9maXJzdENoaWxkOylhLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKGIpfXZhciBUYT1bXCJmaXJzdEVsZW1lbnRDaGlsZFwiLFwibGFzdEVsZW1lbnRDaGlsZFwiLFwiY2hpbGRyZW5cIixcImNoaWxkRWxlbWVudENvdW50XCJdLFVhPVtcInF1ZXJ5U2VsZWN0b3JcIixcInF1ZXJ5U2VsZWN0b3JBbGxcIixcImFwcGVuZFwiLFwicHJlcGVuZFwiLFwicmVwbGFjZUNoaWxkcmVuXCJdO1xuZnVuY3Rpb24gVmEoKXt2YXIgYT1bXCJkaXNwYXRjaEV2ZW50XCIsXCJhZGRFdmVudExpc3RlbmVyXCIsXCJyZW1vdmVFdmVudExpc3RlbmVyXCJdO3dpbmRvdy5FdmVudFRhcmdldD8oSSh3aW5kb3cuRXZlbnRUYXJnZXQucHJvdG90eXBlLGEpLHZvaWQgMD09PXdpbmRvdy5fX3NoYWR5X25hdGl2ZV9hZGRFdmVudExpc3RlbmVyJiZJKFdpbmRvdy5wcm90b3R5cGUsYSkpOihJKE5vZGUucHJvdG90eXBlLGEpLEkoV2luZG93LnByb3RvdHlwZSxhKSxJKFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZSxhKSk7Rz9JKE5vZGUucHJvdG90eXBlLFwicGFyZW50Tm9kZSBmaXJzdENoaWxkIGxhc3RDaGlsZCBwcmV2aW91c1NpYmxpbmcgbmV4dFNpYmxpbmcgY2hpbGROb2RlcyBwYXJlbnRFbGVtZW50IHRleHRDb250ZW50XCIuc3BsaXQoXCIgXCIpKTpIKE5vZGUucHJvdG90eXBlLHtwYXJlbnROb2RlOntnZXQ6ZnVuY3Rpb24oKXtKLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEoucGFyZW50Tm9kZSgpfX0sZmlyc3RDaGlsZDp7Z2V0OmZ1bmN0aW9uKCl7Si5jdXJyZW50Tm9kZT1cbnRoaXM7cmV0dXJuIEouZmlyc3RDaGlsZCgpfX0sbGFzdENoaWxkOntnZXQ6ZnVuY3Rpb24oKXtKLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEoubGFzdENoaWxkKCl9fSxwcmV2aW91c1NpYmxpbmc6e2dldDpmdW5jdGlvbigpe0ouY3VycmVudE5vZGU9dGhpcztyZXR1cm4gSi5wcmV2aW91c1NpYmxpbmcoKX19LG5leHRTaWJsaW5nOntnZXQ6ZnVuY3Rpb24oKXtKLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEoubmV4dFNpYmxpbmcoKX19LGNoaWxkTm9kZXM6e2dldDpmdW5jdGlvbigpe3ZhciBiPVtdO0ouY3VycmVudE5vZGU9dGhpcztmb3IodmFyIGM9Si5maXJzdENoaWxkKCk7YzspYi5wdXNoKGMpLGM9Si5uZXh0U2libGluZygpO3JldHVybiBifX0scGFyZW50RWxlbWVudDp7Z2V0OmZ1bmN0aW9uKCl7Sy5jdXJyZW50Tm9kZT10aGlzO3JldHVybiBLLnBhcmVudE5vZGUoKX19LHRleHRDb250ZW50OntnZXQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpjYXNlIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERTpmb3IodmFyIGI9XG5kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKHRoaXMsTm9kZUZpbHRlci5TSE9XX1RFWFQsbnVsbCwhMSksYz1cIlwiLGQ7ZD1iLm5leHROb2RlKCk7KWMrPWQubm9kZVZhbHVlO3JldHVybiBjO2RlZmF1bHQ6cmV0dXJuIHRoaXMubm9kZVZhbHVlfX0sc2V0OmZ1bmN0aW9uKGIpe2lmKFwidW5kZWZpbmVkXCI9PT10eXBlb2YgYnx8bnVsbD09PWIpYj1cIlwiO3N3aXRjaCh0aGlzLm5vZGVUeXBlKXtjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOmNhc2UgTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFOlNhKHRoaXMpOygwPGIubGVuZ3RofHx0aGlzLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpJiZ0aGlzLl9fc2hhZHlfbmF0aXZlX2luc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShiKSx2b2lkIDApO2JyZWFrO2RlZmF1bHQ6dGhpcy5ub2RlVmFsdWU9Yn19fX0pO0koTm9kZS5wcm90b3R5cGUsXCJhcHBlbmRDaGlsZCBpbnNlcnRCZWZvcmUgcmVtb3ZlQ2hpbGQgcmVwbGFjZUNoaWxkIGNsb25lTm9kZSBjb250YWluc1wiLnNwbGl0KFwiIFwiKSk7XG5JKEhUTUxFbGVtZW50LnByb3RvdHlwZSxbXCJwYXJlbnRFbGVtZW50XCIsXCJjb250YWluc1wiXSk7YT17Zmlyc3RFbGVtZW50Q2hpbGQ6e2dldDpmdW5jdGlvbigpe0suY3VycmVudE5vZGU9dGhpcztyZXR1cm4gSy5maXJzdENoaWxkKCl9fSxsYXN0RWxlbWVudENoaWxkOntnZXQ6ZnVuY3Rpb24oKXtLLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEsubGFzdENoaWxkKCl9fSxjaGlsZHJlbjp7Z2V0OmZ1bmN0aW9uKCl7dmFyIGI9W107Sy5jdXJyZW50Tm9kZT10aGlzO2Zvcih2YXIgYz1LLmZpcnN0Q2hpbGQoKTtjOyliLnB1c2goYyksYz1LLm5leHRTaWJsaW5nKCk7cmV0dXJuIHooYil9fSxjaGlsZEVsZW1lbnRDb3VudDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4/dGhpcy5jaGlsZHJlbi5sZW5ndGg6MH19fTtHPyhJKEVsZW1lbnQucHJvdG90eXBlLFRhKSxJKEVsZW1lbnQucHJvdG90eXBlLFtcInByZXZpb3VzRWxlbWVudFNpYmxpbmdcIixcIm5leHRFbGVtZW50U2libGluZ1wiLFxuXCJpbm5lckhUTUxcIixcImNsYXNzTmFtZVwiXSksSShIVE1MRWxlbWVudC5wcm90b3R5cGUsW1wiY2hpbGRyZW5cIixcImlubmVySFRNTFwiLFwiY2xhc3NOYW1lXCJdKSk6KEgoRWxlbWVudC5wcm90b3R5cGUsYSksSChFbGVtZW50LnByb3RvdHlwZSx7cHJldmlvdXNFbGVtZW50U2libGluZzp7Z2V0OmZ1bmN0aW9uKCl7Sy5jdXJyZW50Tm9kZT10aGlzO3JldHVybiBLLnByZXZpb3VzU2libGluZygpfX0sbmV4dEVsZW1lbnRTaWJsaW5nOntnZXQ6ZnVuY3Rpb24oKXtLLmN1cnJlbnROb2RlPXRoaXM7cmV0dXJuIEsubmV4dFNpYmxpbmcoKX19LGlubmVySFRNTDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE5hKHRoaXMsc2EpfSxzZXQ6ZnVuY3Rpb24oYil7dmFyIGM9XCJ0ZW1wbGF0ZVwiPT09dGhpcy5sb2NhbE5hbWU/dGhpcy5jb250ZW50OnRoaXM7U2EoYyk7dmFyIGQ9dGhpcy5sb2NhbE5hbWV8fFwiZGl2XCI7ZD10aGlzLm5hbWVzcGFjZVVSSSYmdGhpcy5uYW1lc3BhY2VVUkkhPT1SYS5uYW1lc3BhY2VVUkk/XG5SYS5jcmVhdGVFbGVtZW50TlModGhpcy5uYW1lc3BhY2VVUkksZCk6UmEuY3JlYXRlRWxlbWVudChkKTtkLmlubmVySFRNTD1iO2ZvcihiPVwidGVtcGxhdGVcIj09PXRoaXMubG9jYWxOYW1lP2QuY29udGVudDpkO2Q9Yi5fX3NoYWR5X25hdGl2ZV9maXJzdENoaWxkOyljLl9fc2hhZHlfbmF0aXZlX2luc2VydEJlZm9yZShkLHZvaWQgMCl9fSxjbGFzc05hbWU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpfHxcIlwifSxzZXQ6ZnVuY3Rpb24oYil7dGhpcy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLGIpfX19KSk7SShFbGVtZW50LnByb3RvdHlwZSxcInNldEF0dHJpYnV0ZSBnZXRBdHRyaWJ1dGUgaGFzQXR0cmlidXRlIHJlbW92ZUF0dHJpYnV0ZSB0b2dnbGVBdHRyaWJ1dGUgZm9jdXMgYmx1clwiLnNwbGl0KFwiIFwiKSk7SShFbGVtZW50LnByb3RvdHlwZSxVYSk7SShIVE1MRWxlbWVudC5wcm90b3R5cGUsW1wiZm9jdXNcIixcImJsdXJcIl0pO3dpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50JiZcbkkod2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQucHJvdG90eXBlLFtcImlubmVySFRNTFwiXSk7Rz9JKERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLFRhKTpIKERvY3VtZW50RnJhZ21lbnQucHJvdG90eXBlLGEpO0koRG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGUsVWEpO0c/KEkoRG9jdW1lbnQucHJvdG90eXBlLFRhKSxJKERvY3VtZW50LnByb3RvdHlwZSxbXCJhY3RpdmVFbGVtZW50XCJdKSk6SChEb2N1bWVudC5wcm90b3R5cGUsYSk7SShEb2N1bWVudC5wcm90b3R5cGUsW1wiaW1wb3J0Tm9kZVwiLFwiZ2V0RWxlbWVudEJ5SWRcIixcImVsZW1lbnRGcm9tUG9pbnRcIixpYSgpXSk7SShEb2N1bWVudC5wcm90b3R5cGUsVWEpfTt2YXIgV2E9Qih7Z2V0IGNoaWxkTm9kZXMoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X2NoaWxkTm9kZXN9LGdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9maXJzdENoaWxkfSxnZXQgbGFzdENoaWxkKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9sYXN0Q2hpbGR9LGdldCBjaGlsZEVsZW1lbnRDb3VudCgpe3JldHVybiB0aGlzLl9fc2hhZHlfY2hpbGRFbGVtZW50Q291bnR9LGdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLl9fc2hhZHlfY2hpbGRyZW59LGdldCBmaXJzdEVsZW1lbnRDaGlsZCgpe3JldHVybiB0aGlzLl9fc2hhZHlfZmlyc3RFbGVtZW50Q2hpbGR9LGdldCBsYXN0RWxlbWVudENoaWxkKCl7cmV0dXJuIHRoaXMuX19zaGFkeV9sYXN0RWxlbWVudENoaWxkfSxnZXQgc2hhZG93Um9vdCgpe3JldHVybiB0aGlzLl9fc2hhZHlfc2hhZG93Um9vdH19KSxYYT1CKHtnZXQgdGV4dENvbnRlbnQoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X3RleHRDb250ZW50fSxzZXQgdGV4dENvbnRlbnQoYSl7dGhpcy5fX3NoYWR5X3RleHRDb250ZW50PVxuYX0sZ2V0IGlubmVySFRNTCgpe3JldHVybiB0aGlzLl9fc2hhZHlfaW5uZXJIVE1MfSxzZXQgaW5uZXJIVE1MKGEpe3RoaXMuX19zaGFkeV9pbm5lckhUTUw9YX19KSxZYT1CKHtnZXQgcGFyZW50RWxlbWVudCgpe3JldHVybiB0aGlzLl9fc2hhZHlfcGFyZW50RWxlbWVudH0sZ2V0IHBhcmVudE5vZGUoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X3BhcmVudE5vZGV9LGdldCBuZXh0U2libGluZygpe3JldHVybiB0aGlzLl9fc2hhZHlfbmV4dFNpYmxpbmd9LGdldCBwcmV2aW91c1NpYmxpbmcoKXtyZXR1cm4gdGhpcy5fX3NoYWR5X3ByZXZpb3VzU2libGluZ30sZ2V0IG5leHRFbGVtZW50U2libGluZygpe3JldHVybiB0aGlzLl9fc2hhZHlfbmV4dEVsZW1lbnRTaWJsaW5nfSxnZXQgcHJldmlvdXNFbGVtZW50U2libGluZygpe3JldHVybiB0aGlzLl9fc2hhZHlfcHJldmlvdXNFbGVtZW50U2libGluZ30sZ2V0IGNsYXNzTmFtZSgpe3JldHVybiB0aGlzLl9fc2hhZHlfY2xhc3NOYW1lfSxzZXQgY2xhc3NOYW1lKGEpe3RoaXMuX19zaGFkeV9jbGFzc05hbWU9XG5hfX0pO2Z1bmN0aW9uIFphKGEpe2Zvcih2YXIgYiBpbiBhKXt2YXIgYz1hW2JdO2MmJihjLmVudW1lcmFibGU9ITEpfX1aYShXYSk7WmEoWGEpO1phKFlhKTt2YXIgJGE9di5pfHwhMD09PXYubCxhYj0kYT9mdW5jdGlvbigpe306ZnVuY3Rpb24oYSl7dmFyIGI9dChhKTtiLlh8fChiLlg9ITAsdmEoYSxZYSkpfSxiYj0kYT9mdW5jdGlvbigpe306ZnVuY3Rpb24oYSl7dmFyIGI9dChhKTtiLld8fChiLlc9ITAsdmEoYSxXYSksd2luZG93LmN1c3RvbUVsZW1lbnRzJiZ3aW5kb3cuY3VzdG9tRWxlbWVudHMucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjayYmIXYubHx8dmEoYSxYYSkpfTt2YXIgTD1cIl9fZXZlbnRXcmFwcGVyc1wiK0RhdGUubm93KCksY2I9ZnVuY3Rpb24oKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV2ZW50LnByb3RvdHlwZSxcImNvbXBvc2VkXCIpO3JldHVybiBhP2Z1bmN0aW9uKGIpe3JldHVybiBhLmdldC5jYWxsKGIpfTpudWxsfSgpLGRiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe312YXIgYj0hMSxjPXtnZXQgY2FwdHVyZSgpe2I9ITA7cmV0dXJuITF9fTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRlc3RcIixhLGMpO3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidGVzdFwiLGEsYyk7cmV0dXJuIGJ9KCk7ZnVuY3Rpb24gZWIoYSl7aWYobnVsbD09PWF8fFwib2JqZWN0XCIhPT10eXBlb2YgYSYmXCJmdW5jdGlvblwiIT09dHlwZW9mIGEpe3ZhciBiPSEhYTt2YXIgYz0hMX1lbHNle2I9ISFhLmNhcHR1cmU7Yz0hIWEub25jZTt2YXIgZD1hLm99cmV0dXJue1U6ZCxjYXB0dXJlOmIsb25jZTpjLFQ6ZGI/YTpifX1cbnZhciBmYj17Ymx1cjohMCxmb2N1czohMCxmb2N1c2luOiEwLGZvY3Vzb3V0OiEwLGNsaWNrOiEwLGRibGNsaWNrOiEwLG1vdXNlZG93bjohMCxtb3VzZWVudGVyOiEwLG1vdXNlbGVhdmU6ITAsbW91c2Vtb3ZlOiEwLG1vdXNlb3V0OiEwLG1vdXNlb3ZlcjohMCxtb3VzZXVwOiEwLHdoZWVsOiEwLGJlZm9yZWlucHV0OiEwLGlucHV0OiEwLGtleWRvd246ITAsa2V5dXA6ITAsY29tcG9zaXRpb25zdGFydDohMCxjb21wb3NpdGlvbnVwZGF0ZTohMCxjb21wb3NpdGlvbmVuZDohMCx0b3VjaHN0YXJ0OiEwLHRvdWNoZW5kOiEwLHRvdWNobW92ZTohMCx0b3VjaGNhbmNlbDohMCxwb2ludGVyb3ZlcjohMCxwb2ludGVyZW50ZXI6ITAscG9pbnRlcmRvd246ITAscG9pbnRlcm1vdmU6ITAscG9pbnRlcnVwOiEwLHBvaW50ZXJjYW5jZWw6ITAscG9pbnRlcm91dDohMCxwb2ludGVybGVhdmU6ITAsZ290cG9pbnRlcmNhcHR1cmU6ITAsbG9zdHBvaW50ZXJjYXB0dXJlOiEwLGRyYWdzdGFydDohMCxcbmRyYWc6ITAsZHJhZ2VudGVyOiEwLGRyYWdsZWF2ZTohMCxkcmFnb3ZlcjohMCxkcm9wOiEwLGRyYWdlbmQ6ITAsRE9NQWN0aXZhdGU6ITAsRE9NRm9jdXNJbjohMCxET01Gb2N1c091dDohMCxrZXlwcmVzczohMH0sZ2I9e0RPTUF0dHJNb2RpZmllZDohMCxET01BdHRyaWJ1dGVOYW1lQ2hhbmdlZDohMCxET01DaGFyYWN0ZXJEYXRhTW9kaWZpZWQ6ITAsRE9NRWxlbWVudE5hbWVDaGFuZ2VkOiEwLERPTU5vZGVJbnNlcnRlZDohMCxET01Ob2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQ6ITAsRE9NTm9kZVJlbW92ZWQ6ITAsRE9NTm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQ6ITAsRE9NU3VidHJlZU1vZGlmaWVkOiEwfTtmdW5jdGlvbiBoYihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIE5vZGU/YS5fX3NoYWR5X2dldFJvb3ROb2RlKCk6YX1cbmZ1bmN0aW9uIE0oYSxiKXt2YXIgYz1bXSxkPWE7Zm9yKGE9aGIoYSk7ZDspYy5wdXNoKGQpLGQ9ZC5fX3NoYWR5X2Fzc2lnbmVkU2xvdD9kLl9fc2hhZHlfYXNzaWduZWRTbG90OmQubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUmJmQuaG9zdCYmKGJ8fGQhPT1hKT9kLmhvc3Q6ZC5fX3NoYWR5X3BhcmVudE5vZGU7Y1tjLmxlbmd0aC0xXT09PWRvY3VtZW50JiZjLnB1c2god2luZG93KTtyZXR1cm4gY31mdW5jdGlvbiBpYihhKXthLl9fY29tcG9zZWRQYXRofHwoYS5fX2NvbXBvc2VkUGF0aD1NKGEudGFyZ2V0LCEwKSk7cmV0dXJuIGEuX19jb21wb3NlZFBhdGh9ZnVuY3Rpb24gamIoYSxiKXtpZigheClyZXR1cm4gYTthPU0oYSwhMCk7Zm9yKHZhciBjPTAsZCxlPXZvaWQgMCxmLGc9dm9pZCAwO2M8Yi5sZW5ndGg7YysrKWlmKGQ9YltjXSxmPWhiKGQpLGYhPT1lJiYoZz1hLmluZGV4T2YoZiksZT1mKSwheChmKXx8LTE8ZylyZXR1cm4gZH1cbnZhciBrYj17Z2V0IGNvbXBvc2VkKCl7dm9pZCAwPT09dGhpcy5fX2NvbXBvc2VkJiYoY2I/dGhpcy5fX2NvbXBvc2VkPVwiZm9jdXNpblwiPT09dGhpcy50eXBlfHxcImZvY3Vzb3V0XCI9PT10aGlzLnR5cGV8fGNiKHRoaXMpOiExIT09dGhpcy5pc1RydXN0ZWQmJih0aGlzLl9fY29tcG9zZWQ9ZmJbdGhpcy50eXBlXSkpO3JldHVybiB0aGlzLl9fY29tcG9zZWR8fCExfSxjb21wb3NlZFBhdGg6ZnVuY3Rpb24oKXt0aGlzLl9fY29tcG9zZWRQYXRofHwodGhpcy5fX2NvbXBvc2VkUGF0aD1NKHRoaXMuX190YXJnZXQsdGhpcy5jb21wb3NlZCkpO3JldHVybiB0aGlzLl9fY29tcG9zZWRQYXRofSxnZXQgdGFyZ2V0KCl7cmV0dXJuIGpiKHRoaXMuY3VycmVudFRhcmdldHx8dGhpcy5fX3ByZXZpb3VzQ3VycmVudFRhcmdldCx0aGlzLmNvbXBvc2VkUGF0aCgpKX0sZ2V0IHJlbGF0ZWRUYXJnZXQoKXtpZighdGhpcy5fX3JlbGF0ZWRUYXJnZXQpcmV0dXJuIG51bGw7dGhpcy5fX3JlbGF0ZWRUYXJnZXRDb21wb3NlZFBhdGh8fFxuKHRoaXMuX19yZWxhdGVkVGFyZ2V0Q29tcG9zZWRQYXRoPU0odGhpcy5fX3JlbGF0ZWRUYXJnZXQsITApKTtyZXR1cm4gamIodGhpcy5jdXJyZW50VGFyZ2V0fHx0aGlzLl9fcHJldmlvdXNDdXJyZW50VGFyZ2V0LHRoaXMuX19yZWxhdGVkVGFyZ2V0Q29tcG9zZWRQYXRoKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7RXZlbnQucHJvdG90eXBlLnN0b3BQcm9wYWdhdGlvbi5jYWxsKHRoaXMpO3RoaXMuSz0hMH0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7RXZlbnQucHJvdG90eXBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbi5jYWxsKHRoaXMpO3RoaXMuSz10aGlzLl9faW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPSEwfX0sbGI9di5pJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEV2ZW50LnByb3RvdHlwZSxcImV2ZW50UGhhc2VcIik7XG5sYiYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrYixcImV2ZW50UGhhc2VcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudFRhcmdldD09PXRoaXMudGFyZ2V0P0V2ZW50LkFUX1RBUkdFVDp0aGlzLl9fc2hhZHlfbmF0aXZlX2V2ZW50UGhhc2V9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGtiLFwiX19zaGFkeV9uYXRpdmVfZXZlbnRQaGFzZVwiLGxiKSk7ZnVuY3Rpb24gbWIoYSl7ZnVuY3Rpb24gYihjLGQpe2M9bmV3IGEoYyxkKTtjLl9fY29tcG9zZWQ9ZCYmISFkLmNvbXBvc2VkO3JldHVybiBjfWIuX19wcm90b19fPWE7Yi5wcm90b3R5cGU9YS5wcm90b3R5cGU7cmV0dXJuIGJ9dmFyIG5iPXtmb2N1czohMCxibHVyOiEwfTtmdW5jdGlvbiBvYihhKXtyZXR1cm4gYS5fX3RhcmdldCE9PWEudGFyZ2V0fHxhLl9fcmVsYXRlZFRhcmdldCE9PWEucmVsYXRlZFRhcmdldH1cbmZ1bmN0aW9uIHBiKGEsYixjKXtpZihjPWIuX19oYW5kbGVycyYmYi5fX2hhbmRsZXJzW2EudHlwZV0mJmIuX19oYW5kbGVyc1thLnR5cGVdW2NdKWZvcih2YXIgZD0wLGU7KGU9Y1tkXSkmJighb2IoYSl8fGEudGFyZ2V0IT09YS5yZWxhdGVkVGFyZ2V0KSYmKGUuY2FsbChiLGEpLCFhLl9faW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKTtkKyspO312YXIgcWI9KG5ldyBFdmVudChcImVcIikpLmhhc093blByb3BlcnR5KFwiY3VycmVudFRhcmdldFwiKTtcbmZ1bmN0aW9uIHJiKGEpe2E9cWI/T2JqZWN0LmNyZWF0ZShhKTphO3ZhciBiPWEuY29tcG9zZWRQYXRoKCksYz1iLm1hcChmdW5jdGlvbihtKXtyZXR1cm4gamIobSxiKX0pLGQ9YS5idWJibGVzLGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLFwiY3VycmVudFRhcmdldFwiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxcImN1cnJlbnRUYXJnZXRcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGt9fSk7dmFyIGY9RXZlbnQuQ0FQVFVSSU5HX1BIQVNFLGc9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLFwiZXZlbnRQaGFzZVwiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxcImV2ZW50UGhhc2VcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGZ9fSk7dHJ5e2Zvcih2YXIgaD1iLmxlbmd0aC0xOzA8PWg7aC0tKXt2YXIgaz1iW2hdO2Y9az09PWNbaF0/RXZlbnQuQVRfVEFSR0VUOlxuRXZlbnQuQ0FQVFVSSU5HX1BIQVNFO3BiKGEsayxcImNhcHR1cmVcIik7aWYoYS5LKXJldHVybn1mb3IoaD0wO2g8Yi5sZW5ndGg7aCsrKXtrPWJbaF07dmFyIGw9az09PWNbaF07aWYobHx8ZClpZihmPWw/RXZlbnQuQVRfVEFSR0VUOkV2ZW50LkJVQkJMSU5HX1BIQVNFLHBiKGEsayxcImJ1YmJsZVwiKSxhLkspYnJlYWt9fWZpbmFsbHl7cWJ8fChlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLFwiY3VycmVudFRhcmdldFwiLGUpOmRlbGV0ZSBhLmN1cnJlbnRUYXJnZXQsZz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYSxcImV2ZW50UGhhc2VcIixnKTpkZWxldGUgYS5ldmVudFBoYXNlKX19ZnVuY3Rpb24gc2IoYSxiLGMsZCl7Zm9yKHZhciBlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciBmPWFbZV0sZz1mLnR5cGUsaD1mLmNhcHR1cmU7aWYoYj09PWYubm9kZSYmYz09PWcmJmQ9PT1oKXJldHVybiBlfXJldHVybi0xfVxuZnVuY3Rpb24gdGIoYSl7RigpO3JldHVybiF2LkMmJnRoaXMgaW5zdGFuY2VvZiBOb2RlJiYhcWEoZG9jdW1lbnQsdGhpcyk/KGEuX190YXJnZXR8fHViKGEsdGhpcykscmIoYSkpOnRoaXMuX19zaGFkeV9uYXRpdmVfZGlzcGF0Y2hFdmVudChhKX1cbmZ1bmN0aW9uIHZiKGEsYixjKXt2YXIgZD10aGlzLGU9ZWIoYyksZj1lLmNhcHR1cmUsZz1lLm9uY2UsaD1lLlU7ZT1lLlQ7aWYoYil7dmFyIGs9dHlwZW9mIGI7aWYoXCJmdW5jdGlvblwiPT09a3x8XCJvYmplY3RcIj09PWspaWYoXCJvYmplY3RcIiE9PWt8fGIuaGFuZGxlRXZlbnQmJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBiLmhhbmRsZUV2ZW50KXtpZihnYlthXSlyZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9hZGRFdmVudExpc3RlbmVyKGEsYixlKTt2YXIgbD1ofHx0aGlzO2lmKGg9YltMXSl7aWYoLTE8c2IoaCxsLGEsZikpcmV0dXJufWVsc2UgYltMXT1bXTtoPWZ1bmN0aW9uKG0pe2cmJmQuX19zaGFkeV9yZW1vdmVFdmVudExpc3RlbmVyKGEsYixjKTttLl9fdGFyZ2V0fHx1YihtKTtpZihsIT09ZCl7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLFwiY3VycmVudFRhcmdldFwiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobSxcImN1cnJlbnRUYXJnZXRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LFxuY29uZmlndXJhYmxlOiEwfSk7dmFyIEM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLFwiZXZlbnRQaGFzZVwiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobSxcImV2ZW50UGhhc2VcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGY/RXZlbnQuQ0FQVFVSSU5HX1BIQVNFOkV2ZW50LkJVQkJMSU5HX1BIQVNFfX0pfW0uX19wcmV2aW91c0N1cnJlbnRUYXJnZXQ9bS5jdXJyZW50VGFyZ2V0O2lmKCF4KGwpJiZcInNsb3RcIiE9PWwubG9jYWxOYW1lfHwtMSE9bS5jb21wb3NlZFBhdGgoKS5pbmRleE9mKGwpKWlmKG0uY29tcG9zZWR8fC0xPG0uY29tcG9zZWRQYXRoKCkuaW5kZXhPZihsKSlpZihvYihtKSYmbS50YXJnZXQ9PT1tLnJlbGF0ZWRUYXJnZXQpbS5ldmVudFBoYXNlPT09RXZlbnQuQlVCQkxJTkdfUEhBU0UmJm0uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7ZWxzZSBpZihtLmV2ZW50UGhhc2U9PT1FdmVudC5DQVBUVVJJTkdfUEhBU0V8fFxubS5idWJibGVzfHxtLnRhcmdldD09PWx8fGwgaW5zdGFuY2VvZiBXaW5kb3cpe3ZhciBTPVwiZnVuY3Rpb25cIj09PWs/Yi5jYWxsKGwsbSk6Yi5oYW5kbGVFdmVudCYmYi5oYW5kbGVFdmVudChtKTtsIT09ZCYmKHI/KE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtLFwiY3VycmVudFRhcmdldFwiLHIpLHI9bnVsbCk6ZGVsZXRlIG0uY3VycmVudFRhcmdldCxDPyhPYmplY3QuZGVmaW5lUHJvcGVydHkobSxcImV2ZW50UGhhc2VcIixDKSxDPW51bGwpOmRlbGV0ZSBtLmV2ZW50UGhhc2UpO3JldHVybiBTfX07YltMXS5wdXNoKHtub2RlOmwsdHlwZTphLGNhcHR1cmU6ZixmYTpofSk7dGhpcy5fX2hhbmRsZXJzPXRoaXMuX19oYW5kbGVyc3x8e307dGhpcy5fX2hhbmRsZXJzW2FdPXRoaXMuX19oYW5kbGVyc1thXXx8e2NhcHR1cmU6W10sYnViYmxlOltdfTt0aGlzLl9faGFuZGxlcnNbYV1bZj9cImNhcHR1cmVcIjpcImJ1YmJsZVwiXS5wdXNoKGgpO25iW2FdfHx0aGlzLl9fc2hhZHlfbmF0aXZlX2FkZEV2ZW50TGlzdGVuZXIoYSxcbmgsZSl9fX1mdW5jdGlvbiB3YihhLGIsYyl7aWYoYil7dmFyIGQ9ZWIoYyk7Yz1kLmNhcHR1cmU7dmFyIGU9ZC5VO2Q9ZC5UO2lmKGdiW2FdKXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUV2ZW50TGlzdGVuZXIoYSxiLGQpO3ZhciBmPWV8fHRoaXM7ZT12b2lkIDA7dmFyIGc9bnVsbDt0cnl7Zz1iW0xdfWNhdGNoKGgpe31nJiYoZj1zYihnLGYsYSxjKSwtMTxmJiYoZT1nLnNwbGljZShmLDEpWzBdLmZhLGcubGVuZ3RofHwoYltMXT12b2lkIDApKSk7dGhpcy5fX3NoYWR5X25hdGl2ZV9yZW1vdmVFdmVudExpc3RlbmVyKGEsZXx8YixkKTtlJiZ0aGlzLl9faGFuZGxlcnMmJnRoaXMuX19oYW5kbGVyc1thXSYmKGE9dGhpcy5fX2hhbmRsZXJzW2FdW2M/XCJjYXB0dXJlXCI6XCJidWJibGVcIl0sYj1hLmluZGV4T2YoZSksLTE8YiYmYS5zcGxpY2UoYiwxKSl9fVxuZnVuY3Rpb24geGIoKXtmb3IodmFyIGEgaW4gbmIpd2luZG93Ll9fc2hhZHlfbmF0aXZlX2FkZEV2ZW50TGlzdGVuZXIoYSxmdW5jdGlvbihiKXtiLl9fdGFyZ2V0fHwodWIoYikscmIoYikpfSwhMCl9dmFyIHliPUIoa2IpO2Z1bmN0aW9uIHViKGEsYil7Yj12b2lkIDA9PT1iP2EudGFyZ2V0OmI7YS5fX3RhcmdldD1iO2EuX19yZWxhdGVkVGFyZ2V0PWEucmVsYXRlZFRhcmdldDtpZih2Lmkpe2I9T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpO2lmKCFiLmhhc093blByb3BlcnR5KFwiX19zaGFkeV9wYXRjaGVkUHJvdG9cIikpe3ZhciBjPU9iamVjdC5jcmVhdGUoYik7Yy5fX3NoYWR5X3NvdXJjZVByb3RvPWI7QShjLHliKTtiLl9fc2hhZHlfcGF0Y2hlZFByb3RvPWN9YS5fX3Byb3RvX189Yi5fX3NoYWR5X3BhdGNoZWRQcm90b31lbHNlIEEoYSx5Yil9dmFyIHpiPW1iKEV2ZW50KSxBYj1tYihDdXN0b21FdmVudCksQmI9bWIoTW91c2VFdmVudCk7XG5mdW5jdGlvbiBDYigpe2lmKCFjYiYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFdmVudC5wcm90b3R5cGUsXCJpc1RydXN0ZWRcIikpe3ZhciBhPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IE1vdXNlRXZlbnQoXCJjbGlja1wiLHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITAsY29tcG9zZWQ6ITB9KTt0aGlzLl9fc2hhZHlfZGlzcGF0Y2hFdmVudChiKX07RWxlbWVudC5wcm90b3R5cGUuY2xpY2s/RWxlbWVudC5wcm90b3R5cGUuY2xpY2s9YTpIVE1MRWxlbWVudC5wcm90b3R5cGUuY2xpY2smJihIVE1MRWxlbWVudC5wcm90b3R5cGUuY2xpY2s9YSl9fVxudmFyIERiPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEVsZW1lbnQucHJvdG90eXBlKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuXCJvblwiPT09YS5zdWJzdHJpbmcoMCwyKX0pLEViPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEhUTUxFbGVtZW50LnByb3RvdHlwZSkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVyblwib25cIj09PWEuc3Vic3RyaW5nKDAsMil9KTtmdW5jdGlvbiBGYihhKXtyZXR1cm57c2V0OmZ1bmN0aW9uKGIpe3ZhciBjPXQodGhpcyksZD1hLnN1YnN0cmluZygyKTtjLm18fChjLm09e30pO2MubVthXSYmdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGQsYy5tW2FdKTt0aGlzLl9fc2hhZHlfYWRkRXZlbnRMaXN0ZW5lcihkLGIpO2MubVthXT1ifSxnZXQ6ZnVuY3Rpb24oKXt2YXIgYj11KHRoaXMpO3JldHVybiBiJiZiLm0mJmIubVthXX0sY29uZmlndXJhYmxlOiEwfX07ZnVuY3Rpb24gTihhLGIpe3JldHVybntpbmRleDphLEQ6W10sRzpifX1cbmZ1bmN0aW9uIEdiKGEsYixjLGQpe3ZhciBlPTAsZj0wLGc9MCxoPTAsaz1NYXRoLm1pbihiLWUsZC1mKTtpZigwPT1lJiYwPT1mKWE6e2ZvcihnPTA7ZzxrO2crKylpZihhW2ddIT09Y1tnXSlicmVhayBhO2c9a31pZihiPT1hLmxlbmd0aCYmZD09Yy5sZW5ndGgpe2g9YS5sZW5ndGg7Zm9yKHZhciBsPWMubGVuZ3RoLG09MDttPGstZyYmSGIoYVstLWhdLGNbLS1sXSk7KW0rKztoPW19ZSs9ZztmKz1nO2ItPWg7ZC09aDtpZigwPT1iLWUmJjA9PWQtZilyZXR1cm5bXTtpZihlPT1iKXtmb3IoYj1OKGUsMCk7ZjxkOyliLkQucHVzaChjW2YrK10pO3JldHVybltiXX1pZihmPT1kKXJldHVybltOKGUsYi1lKV07az1lO2c9ZjtkPWQtZysxO2g9Yi1rKzE7Yj1BcnJheShkKTtmb3IobD0wO2w8ZDtsKyspYltsXT1BcnJheShoKSxiW2xdWzBdPWw7Zm9yKGw9MDtsPGg7bCsrKWJbMF1bbF09bDtmb3IobD0xO2w8ZDtsKyspZm9yKG09MTttPGg7bSsrKWlmKGFbayttLTFdPT09Y1tnK2wtMV0pYltsXVttXT1cbmJbbC0xXVttLTFdO2Vsc2V7dmFyIHI9YltsLTFdW21dKzEsQz1iW2xdW20tMV0rMTtiW2xdW21dPXI8Qz9yOkN9az1iLmxlbmd0aC0xO2c9YlswXS5sZW5ndGgtMTtkPWJba11bZ107Zm9yKGE9W107MDxrfHwwPGc7KTA9PWs/KGEucHVzaCgyKSxnLS0pOjA9PWc/KGEucHVzaCgzKSxrLS0pOihoPWJbay0xXVtnLTFdLGw9YltrLTFdW2ddLG09YltrXVtnLTFdLHI9bDxtP2w8aD9sOmg6bTxoP206aCxyPT1oPyhoPT1kP2EucHVzaCgwKTooYS5wdXNoKDEpLGQ9aCksay0tLGctLSk6cj09bD8oYS5wdXNoKDMpLGstLSxkPWwpOihhLnB1c2goMiksZy0tLGQ9bSkpO2EucmV2ZXJzZSgpO2I9dm9pZCAwO2s9W107Zm9yKGc9MDtnPGEubGVuZ3RoO2crKylzd2l0Y2goYVtnXSl7Y2FzZSAwOmImJihrLnB1c2goYiksYj12b2lkIDApO2UrKztmKys7YnJlYWs7Y2FzZSAxOmJ8fChiPU4oZSwwKSk7Yi5HKys7ZSsrO2IuRC5wdXNoKGNbZl0pO2YrKzticmVhaztjYXNlIDI6Ynx8KGI9TihlLDApKTtcbmIuRysrO2UrKzticmVhaztjYXNlIDM6Ynx8KGI9TihlLDApKSxiLkQucHVzaChjW2ZdKSxmKyt9YiYmay5wdXNoKGIpO3JldHVybiBrfWZ1bmN0aW9uIEhiKGEsYil7cmV0dXJuIGE9PT1ifTt2YXIgSWI9Qih7ZGlzcGF0Y2hFdmVudDp0YixhZGRFdmVudExpc3RlbmVyOnZiLHJlbW92ZUV2ZW50TGlzdGVuZXI6d2J9KTt2YXIgSmI9bnVsbDtmdW5jdGlvbiBPKCl7SmJ8fChKYj13aW5kb3cuU2hhZHlDU1MmJndpbmRvdy5TaGFkeUNTUy5TY29waW5nU2hpbSk7cmV0dXJuIEpifHxudWxsfWZ1bmN0aW9uIEtiKGEsYixjKXt2YXIgZD1PKCk7cmV0dXJuIGQmJlwiY2xhc3NcIj09PWI/KGQuc2V0RWxlbWVudENsYXNzKGEsYyksITApOiExfWZ1bmN0aW9uIExiKGEsYil7dmFyIGM9TygpO2MmJmMudW5zY29wZU5vZGUoYSxiKX1mdW5jdGlvbiBNYihhLGIpe3ZhciBjPU8oKTtpZighYylyZXR1cm4hMDtpZihhLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKXtjPSEwO2ZvcihhPWEuX19zaGFkeV9maXJzdENoaWxkO2E7YT1hLl9fc2hhZHlfbmV4dFNpYmxpbmcpYz1jJiZNYihhLGIpO3JldHVybiBjfXJldHVybiBhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREU/ITA6Yy5jdXJyZW50U2NvcGVGb3JOb2RlKGEpPT09Yn1cbmZ1bmN0aW9uIE5iKGEpe2lmKGEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSlyZXR1cm5cIlwiO3ZhciBiPU8oKTtyZXR1cm4gYj9iLmN1cnJlbnRTY29wZUZvck5vZGUoYSk6XCJcIn1mdW5jdGlvbiBPYihhLGIpe2lmKGEpZm9yKGEubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmYihhKSxhPWEuX19zaGFkeV9maXJzdENoaWxkO2E7YT1hLl9fc2hhZHlfbmV4dFNpYmxpbmcpYS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZPYihhLGIpfTt2YXIgUGI9d2luZG93LmRvY3VtZW50LFFiPXYuQyxSYj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE5vZGUucHJvdG90eXBlLFwiaXNDb25uZWN0ZWRcIiksU2I9UmImJlJiLmdldDtmdW5jdGlvbiBUYihhKXtmb3IodmFyIGI7Yj1hLl9fc2hhZHlfZmlyc3RDaGlsZDspYS5fX3NoYWR5X3JlbW92ZUNoaWxkKGIpfWZ1bmN0aW9uIFViKGEpe3ZhciBiPXUoYSk7aWYoYiYmdm9pZCAwIT09Yi5KKWZvcihiPWEuX19zaGFkeV9maXJzdENoaWxkO2I7Yj1iLl9fc2hhZHlfbmV4dFNpYmxpbmcpVWIoYik7aWYoYT11KGEpKWEuSj12b2lkIDB9ZnVuY3Rpb24gVmIoYSl7dmFyIGI9YTtpZihhJiZcInNsb3RcIj09PWEubG9jYWxOYW1lKXt2YXIgYz11KGEpOyhjPWMmJmMudSkmJihiPWMubGVuZ3RoP2NbMF06VmIoYS5fX3NoYWR5X25leHRTaWJsaW5nKSl9cmV0dXJuIGJ9XG5mdW5jdGlvbiBXYihhLGIsYyl7aWYoYT0oYT11KGEpKSYmYS5CKXtpZihiKWlmKGIubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpZm9yKHZhciBkPTAsZT1iLmNoaWxkTm9kZXMubGVuZ3RoO2Q8ZTtkKyspYS5hZGRlZE5vZGVzLnB1c2goYi5jaGlsZE5vZGVzW2RdKTtlbHNlIGEuYWRkZWROb2Rlcy5wdXNoKGIpO2MmJmEucmVtb3ZlZE5vZGVzLnB1c2goYyk7RGEoYSl9fVxudmFyIGFjPUIoe2dldCBwYXJlbnROb2RlKCl7dmFyIGE9dSh0aGlzKTthPWEmJmEucGFyZW50Tm9kZTtyZXR1cm4gdm9pZCAwIT09YT9hOnRoaXMuX19zaGFkeV9uYXRpdmVfcGFyZW50Tm9kZX0sZ2V0IGZpcnN0Q2hpbGQoKXt2YXIgYT11KHRoaXMpO2E9YSYmYS5maXJzdENoaWxkO3JldHVybiB2b2lkIDAhPT1hP2E6dGhpcy5fX3NoYWR5X25hdGl2ZV9maXJzdENoaWxkfSxnZXQgbGFzdENoaWxkKCl7dmFyIGE9dSh0aGlzKTthPWEmJmEubGFzdENoaWxkO3JldHVybiB2b2lkIDAhPT1hP2E6dGhpcy5fX3NoYWR5X25hdGl2ZV9sYXN0Q2hpbGR9LGdldCBuZXh0U2libGluZygpe3ZhciBhPXUodGhpcyk7YT1hJiZhLm5leHRTaWJsaW5nO3JldHVybiB2b2lkIDAhPT1hP2E6dGhpcy5fX3NoYWR5X25hdGl2ZV9uZXh0U2libGluZ30sZ2V0IHByZXZpb3VzU2libGluZygpe3ZhciBhPXUodGhpcyk7YT1hJiZhLnByZXZpb3VzU2libGluZztyZXR1cm4gdm9pZCAwIT09YT9hOnRoaXMuX19zaGFkeV9uYXRpdmVfcHJldmlvdXNTaWJsaW5nfSxcbmdldCBjaGlsZE5vZGVzKCl7aWYodyh0aGlzKSl7dmFyIGE9dSh0aGlzKTtpZighYS5jaGlsZE5vZGVzKXthLmNoaWxkTm9kZXM9W107Zm9yKHZhciBiPXRoaXMuX19zaGFkeV9maXJzdENoaWxkO2I7Yj1iLl9fc2hhZHlfbmV4dFNpYmxpbmcpYS5jaGlsZE5vZGVzLnB1c2goYil9dmFyIGM9YS5jaGlsZE5vZGVzfWVsc2UgYz10aGlzLl9fc2hhZHlfbmF0aXZlX2NoaWxkTm9kZXM7Yy5pdGVtPWZ1bmN0aW9uKGQpe3JldHVybiBjW2RdfTtyZXR1cm4gY30sZ2V0IHBhcmVudEVsZW1lbnQoKXt2YXIgYT11KHRoaXMpOyhhPWEmJmEucGFyZW50Tm9kZSkmJmEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERSYmKGE9bnVsbCk7cmV0dXJuIHZvaWQgMCE9PWE/YTp0aGlzLl9fc2hhZHlfbmF0aXZlX3BhcmVudEVsZW1lbnR9LGdldCBpc0Nvbm5lY3RlZCgpe2lmKFNiJiZTYi5jYWxsKHRoaXMpKXJldHVybiEwO2lmKHRoaXMubm9kZVR5cGU9PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSlyZXR1cm4hMTtcbnZhciBhPXRoaXMub3duZXJEb2N1bWVudDtpZihudWxsPT09YXx8cWEoYSx0aGlzKSlyZXR1cm4hMDtmb3IoYT10aGlzO2EmJiEoYSBpbnN0YW5jZW9mIERvY3VtZW50KTspYT1hLl9fc2hhZHlfcGFyZW50Tm9kZXx8KHgoYSk/YS5ob3N0OnZvaWQgMCk7cmV0dXJuISEoYSYmYSBpbnN0YW5jZW9mIERvY3VtZW50KX0sZ2V0IHRleHRDb250ZW50KCl7aWYodyh0aGlzKSl7Zm9yKHZhciBhPVtdLGI9dGhpcy5fX3NoYWR5X2ZpcnN0Q2hpbGQ7YjtiPWIuX19zaGFkeV9uZXh0U2libGluZyliLm5vZGVUeXBlIT09Tm9kZS5DT01NRU5UX05PREUmJmEucHVzaChiLl9fc2hhZHlfdGV4dENvbnRlbnQpO3JldHVybiBhLmpvaW4oXCJcIil9cmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfdGV4dENvbnRlbnR9LHNldCB0ZXh0Q29udGVudChhKXtpZihcInVuZGVmaW5lZFwiPT09dHlwZW9mIGF8fG51bGw9PT1hKWE9XCJcIjtzd2l0Y2godGhpcy5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTpjYXNlIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERTppZighdyh0aGlzKSYmXG52Lmkpe3ZhciBiPXRoaXMuX19zaGFkeV9maXJzdENoaWxkOyhiIT10aGlzLl9fc2hhZHlfbGFzdENoaWxkfHxiJiZiLm5vZGVUeXBlIT1Ob2RlLlRFWFRfTk9ERSkmJlRiKHRoaXMpO3RoaXMuX19zaGFkeV9uYXRpdmVfdGV4dENvbnRlbnQ9YX1lbHNlIFRiKHRoaXMpLCgwPGEubGVuZ3RofHx0aGlzLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpJiZ0aGlzLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGEpKTticmVhaztkZWZhdWx0OnRoaXMubm9kZVZhbHVlPWF9fSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oYSxiKXtpZih0aGlzLm93bmVyRG9jdW1lbnQhPT1QYiYmYS5vd25lckRvY3VtZW50IT09UGIpcmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfaW5zZXJ0QmVmb3JlKGEsYiksYTtpZihhPT09dGhpcyl0aHJvdyBFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdhcHBlbmRDaGlsZCcgb24gJ05vZGUnOiBUaGUgbmV3IGNoaWxkIGVsZW1lbnQgY29udGFpbnMgdGhlIHBhcmVudC5cIik7XG5pZihiKXt2YXIgYz11KGIpO2M9YyYmYy5wYXJlbnROb2RlO2lmKHZvaWQgMCE9PWMmJmMhPT10aGlzfHx2b2lkIDA9PT1jJiZiLl9fc2hhZHlfbmF0aXZlX3BhcmVudE5vZGUhPT10aGlzKXRocm93IEVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2luc2VydEJlZm9yZScgb24gJ05vZGUnOiBUaGUgbm9kZSBiZWZvcmUgd2hpY2ggdGhlIG5ldyBub2RlIGlzIHRvIGJlIGluc2VydGVkIGlzIG5vdCBhIGNoaWxkIG9mIHRoaXMgbm9kZS5cIik7fWlmKGI9PT1hKXJldHVybiBhO1diKHRoaXMsYSk7dmFyIGQ9W10sZT0oYz1QKHRoaXMpKT9jLmhvc3QubG9jYWxOYW1lOk5iKHRoaXMpLGY9YS5fX3NoYWR5X3BhcmVudE5vZGU7aWYoZil7dmFyIGc9TmIoYSk7dmFyIGg9ISFjfHwhUChhKXx8UWImJnZvaWQgMCE9PXRoaXMuX19ub0luc2VydGlvblBvaW50O2YuX19zaGFkeV9yZW1vdmVDaGlsZChhLGgpfWY9ITA7dmFyIGs9KCFRYnx8dm9pZCAwPT09YS5fX25vSW5zZXJ0aW9uUG9pbnQmJnZvaWQgMD09PVxudGhpcy5fX25vSW5zZXJ0aW9uUG9pbnQpJiYhTWIoYSxlKSxsPWMmJiFhLl9fbm9JbnNlcnRpb25Qb2ludCYmKCFRYnx8YS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSk7aWYobHx8aylrJiYoZz1nfHxOYihhKSksT2IoYSxmdW5jdGlvbihtKXtsJiZcInNsb3RcIj09PW0ubG9jYWxOYW1lJiZkLnB1c2gobSk7aWYoayl7dmFyIHI9ZztPKCkmJihyJiZMYihtLHIpLChyPU8oKSkmJnIuc2NvcGVOb2RlKG0sZSkpfX0pO2QubGVuZ3RoJiYoWGIoYyksYy5qLnB1c2guYXBwbHkoYy5qLHEoZCkpLFEoYykpO3codGhpcykmJihZYihhLHRoaXMsYiksaD11KHRoaXMpLGgucm9vdD8oZj0hMSxqYSh0aGlzKSYmUShoLnJvb3QpKTpjJiZcInNsb3RcIj09PXRoaXMubG9jYWxOYW1lJiYoZj0hMSxRKGMpKSk7Zj8oYz14KHRoaXMpP3RoaXMuaG9zdDp0aGlzLGI/KGI9VmIoYiksYy5fX3NoYWR5X25hdGl2ZV9pbnNlcnRCZWZvcmUoYSxiKSk6Yy5fX3NoYWR5X25hdGl2ZV9hcHBlbmRDaGlsZChhKSk6XG5hLm93bmVyRG9jdW1lbnQhPT10aGlzLm93bmVyRG9jdW1lbnQmJnRoaXMub3duZXJEb2N1bWVudC5hZG9wdE5vZGUoYSk7cmV0dXJuIGF9LGFwcGVuZENoaWxkOmZ1bmN0aW9uKGEpe2lmKHRoaXMhPWF8fCF4KGEpKXJldHVybiB0aGlzLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKGEpfSxyZW1vdmVDaGlsZDpmdW5jdGlvbihhLGIpe2I9dm9pZCAwPT09Yj8hMTpiO2lmKHRoaXMub3duZXJEb2N1bWVudCE9PVBiKXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKGEpO2lmKGEuX19zaGFkeV9wYXJlbnROb2RlIT09dGhpcyl0aHJvdyBFcnJvcihcIlRoZSBub2RlIHRvIGJlIHJlbW92ZWQgaXMgbm90IGEgY2hpbGQgb2YgdGhpcyBub2RlOiBcIithKTtXYih0aGlzLG51bGwsYSk7dmFyIGM9UChhKSxkPWMmJlpiKGMsYSksZT11KHRoaXMpO2lmKHcodGhpcykmJigkYihhLHRoaXMpLGphKHRoaXMpKSl7UShlLnJvb3QpO3ZhciBmPSEwfWlmKE8oKSYmIWImJmMmJmEubm9kZVR5cGUhPT1cbk5vZGUuVEVYVF9OT0RFKXt2YXIgZz1OYihhKTtPYihhLGZ1bmN0aW9uKGgpe0xiKGgsZyl9KX1VYihhKTtjJiYoKGI9XCJzbG90XCI9PT10aGlzLmxvY2FsTmFtZSkmJihmPSEwKSwoZHx8YikmJlEoYykpO2Z8fChmPXgodGhpcyk/dGhpcy5ob3N0OnRoaXMsKCFlLnJvb3QmJlwic2xvdFwiIT09YS5sb2NhbE5hbWV8fGY9PT1hLl9fc2hhZHlfbmF0aXZlX3BhcmVudE5vZGUpJiZmLl9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKGEpKTtyZXR1cm4gYX0scmVwbGFjZUNoaWxkOmZ1bmN0aW9uKGEsYil7dGhpcy5fX3NoYWR5X2luc2VydEJlZm9yZShhLGIpO3RoaXMuX19zaGFkeV9yZW1vdmVDaGlsZChiKTtyZXR1cm4gYX0sY2xvbmVOb2RlOmZ1bmN0aW9uKGEpe2lmKFwidGVtcGxhdGVcIj09dGhpcy5sb2NhbE5hbWUpcmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfY2xvbmVOb2RlKGEpO3ZhciBiPXRoaXMuX19zaGFkeV9uYXRpdmVfY2xvbmVOb2RlKCExKTtpZihhJiZiLm5vZGVUeXBlIT09Tm9kZS5BVFRSSUJVVEVfTk9ERSl7YT1cbnRoaXMuX19zaGFkeV9maXJzdENoaWxkO2Zvcih2YXIgYzthO2E9YS5fX3NoYWR5X25leHRTaWJsaW5nKWM9YS5fX3NoYWR5X2Nsb25lTm9kZSghMCksYi5fX3NoYWR5X2FwcGVuZENoaWxkKGMpfXJldHVybiBifSxnZXRSb290Tm9kZTpmdW5jdGlvbihhKXtpZih0aGlzJiZ0aGlzLm5vZGVUeXBlKXt2YXIgYj10KHRoaXMpLGM9Yi5KO3ZvaWQgMD09PWMmJih4KHRoaXMpPyhjPXRoaXMsYi5KPWMpOihjPShjPXRoaXMuX19zaGFkeV9wYXJlbnROb2RlKT9jLl9fc2hhZHlfZ2V0Um9vdE5vZGUoYSk6dGhpcyxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuX19zaGFkeV9uYXRpdmVfY29udGFpbnModGhpcykmJihiLko9YykpKTtyZXR1cm4gY319LGNvbnRhaW5zOmZ1bmN0aW9uKGEpe3JldHVybiByYSh0aGlzLGEpfX0pO3ZhciBSPUIoe2dldCBhc3NpZ25lZFNsb3QoKXt2YXIgYT10aGlzLl9fc2hhZHlfcGFyZW50Tm9kZTsoYT1hJiZhLl9fc2hhZHlfc2hhZG93Um9vdCkmJmJjKGEpO3JldHVybihhPXUodGhpcykpJiZhLmFzc2lnbmVkU2xvdHx8bnVsbH19KTsvKlxuXG4gQ29weXJpZ2h0IChjKSAyMDIyIFRoZSBQb2x5bWVyIFByb2plY3QgQXV0aG9yc1xuIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2VcbiovXG52YXIgY2M9bmV3IE1hcDtbW1wiKFwiLHtlbmQ6XCIpXCIsSTohMH1dLFtcIltcIix7ZW5kOlwiXVwiLEk6ITB9XSxbJ1wiJyx7ZW5kOidcIicsSTohMX1dLFtcIidcIix7ZW5kOlwiJ1wiLEk6ITF9XV0uZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYj1wKGEpO2E9Yi5uZXh0KCkudmFsdWU7Yj1iLm5leHQoKS52YWx1ZTtjYy5zZXQoYSxiKX0pO2Z1bmN0aW9uIGRjKGEsYixjLGQpe2ZvcihkPXZvaWQgMD09PWQ/ITA6ZDtiPGEubGVuZ3RoO2IrKylpZihcIlxcXFxcIj09PWFbYl0mJmI8YS5sZW5ndGgtMSYmXCJcXG5cIiE9PWFbYisxXSliKys7ZWxzZXtpZigtMSE9PWMuaW5kZXhPZihhW2JdKSlyZXR1cm4gYjtpZihkJiZjYy5oYXMoYVtiXSkpe3ZhciBlPWNjLmdldChhW2JdKTtiPWRjKGEsYisxLFtlLmVuZF0sZS5JKX19cmV0dXJuIGEubGVuZ3RofVxuZnVuY3Rpb24gZWMoYSl7ZnVuY3Rpb24gYigpe2lmKDA8ZC5sZW5ndGgpe2Zvcig7XCIgXCI9PT1kW2QubGVuZ3RoLTFdOylkLnBvcCgpO2MucHVzaCh7UzpkLmZpbHRlcihmdW5jdGlvbihrLGwpe3JldHVybiAwPT09bCUyfSksY2E6ZC5maWx0ZXIoZnVuY3Rpb24oayxsKXtyZXR1cm4gMT09PWwlMn0pfSk7ZC5sZW5ndGg9MH19Zm9yKHZhciBjPVtdLGQ9W10sZT0wO2U8YS5sZW5ndGg7KXt2YXIgZj1kW2QubGVuZ3RoLTFdLGc9ZGMoYSxlLFtcIixcIixcIiBcIixcIj5cIixcIitcIixcIn5cIl0pLGg9Zz09PWU/YVtlXTphLnN1YnN0cmluZyhlLGcpO2lmKFwiLFwiPT09aCliKCk7ZWxzZSBpZigtMT09PVt2b2lkIDAsXCIgXCIsXCI+XCIsXCIrXCIsXCJ+XCJdLmluZGV4T2YoZil8fFwiIFwiIT09aClcIiBcIj09PWYmJi0xIT09W1wiPlwiLFwiK1wiLFwiflwiXS5pbmRleE9mKGgpP2RbZC5sZW5ndGgtMV09aDpkLnB1c2goaCk7ZT1nKyhnPT09ZT8xOjApfWIoKTtyZXR1cm4gY307ZnVuY3Rpb24gZmMoYSxiLGMpe3ZhciBkPVtdO2djKGEsYixjLGQpO3JldHVybiBkfWZ1bmN0aW9uIGdjKGEsYixjLGQpe2ZvcihhPWEuX19zaGFkeV9maXJzdENoaWxkO2E7YT1hLl9fc2hhZHlfbmV4dFNpYmxpbmcpe3ZhciBlO2lmKGU9YS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXtlPWE7dmFyIGY9YixnPWMsaD1kLGs9ZihlKTtrJiZoLnB1c2goZSk7ZyYmZyhrKT9lPWs6KGdjKGUsZixnLGgpLGU9dm9pZCAwKX1pZihlKWJyZWFrfX1cbnZhciBoYz17Z2V0IGZpcnN0RWxlbWVudENoaWxkKCl7dmFyIGE9dSh0aGlzKTtpZihhJiZ2b2lkIDAhPT1hLmZpcnN0Q2hpbGQpe2ZvcihhPXRoaXMuX19zaGFkeV9maXJzdENoaWxkO2EmJmEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERTspYT1hLl9fc2hhZHlfbmV4dFNpYmxpbmc7cmV0dXJuIGF9cmV0dXJuIHRoaXMuX19zaGFkeV9uYXRpdmVfZmlyc3RFbGVtZW50Q2hpbGR9LGdldCBsYXN0RWxlbWVudENoaWxkKCl7dmFyIGE9dSh0aGlzKTtpZihhJiZ2b2lkIDAhPT1hLmxhc3RDaGlsZCl7Zm9yKGE9dGhpcy5fX3NoYWR5X2xhc3RDaGlsZDthJiZhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREU7KWE9YS5fX3NoYWR5X3ByZXZpb3VzU2libGluZztyZXR1cm4gYX1yZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9sYXN0RWxlbWVudENoaWxkfSxnZXQgY2hpbGRyZW4oKXtyZXR1cm4gdyh0aGlzKT96KEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbCh0YSh0aGlzKSxmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlVHlwZT09PVxuTm9kZS5FTEVNRU5UX05PREV9KSk6dGhpcy5fX3NoYWR5X25hdGl2ZV9jaGlsZHJlbn0sZ2V0IGNoaWxkRWxlbWVudENvdW50KCl7dmFyIGE9dGhpcy5fX3NoYWR5X2NoaWxkcmVuO3JldHVybiBhP2EubGVuZ3RoOjB9fSxUPUIoKGhjLmFwcGVuZD1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDsrK2MpYltjXT1hcmd1bWVudHNbY107dGhpcy5fX3NoYWR5X2luc2VydEJlZm9yZShELmFwcGx5KG51bGwscShiKSksbnVsbCl9LGhjLnByZXBlbmQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7KytjKWJbY109YXJndW1lbnRzW2NdO3RoaXMuX19zaGFkeV9pbnNlcnRCZWZvcmUoRC5hcHBseShudWxsLHEoYikpLHRoaXMuX19zaGFkeV9maXJzdENoaWxkKX0saGMucmVwbGFjZUNoaWxkcmVuPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7Yzxhcmd1bWVudHMubGVuZ3RoOysrYyliW2NdPWFyZ3VtZW50c1tjXTtcbmZvcig7bnVsbCE9PShjPXRoaXMuX19zaGFkeV9maXJzdENoaWxkKTspdGhpcy5fX3NoYWR5X3JlbW92ZUNoaWxkKGMpO3RoaXMuX19zaGFkeV9pbnNlcnRCZWZvcmUoRC5hcHBseShudWxsLHEoYikpLG51bGwpfSxoYykpO1xuZnVuY3Rpb24gaWMoYSxiKXtmdW5jdGlvbiBjKGUsZil7cmV0dXJuKGU9PT1hfHwtMT09PWYuaW5kZXhPZihcIjpzY29wZVwiKSkmJmxhLmNhbGwoZSxmKX12YXIgZD1lYyhiKTtpZigxPmQubGVuZ3RoKXJldHVybltdO2ZvcihiPXlhKGZjKGEsZnVuY3Rpb24oKXtyZXR1cm4hMH0pLm1hcChmdW5jdGlvbihlKXtyZXR1cm4geWEoZC5tYXAoZnVuY3Rpb24oZil7dmFyIGc9Zi5TLGg9Zy5sZW5ndGgtMTtyZXR1cm4gYyhlLGdbaF0pP3t0YXJnZXQ6ZSx2OmYsQTplLGluZGV4Omh9OltdfSkpfSkpO2Iuc29tZShmdW5jdGlvbihlKXtyZXR1cm4gMDxlLmluZGV4fSk7KWI9eWEoYi5tYXAoZnVuY3Rpb24oZSl7aWYoMD49ZS5pbmRleClyZXR1cm4gZTt2YXIgZj1lLnRhcmdldCxnPWUuQSxoPWUudjtlPWUuaW5kZXgtMTt2YXIgaz1oLmNhW2VdLGw9aC5TW2VdO2lmKFwiIFwiPT09ayl7az1bXTtmb3IoZz1nLl9fc2hhZHlfcGFyZW50RWxlbWVudDtnO2c9Zy5fX3NoYWR5X3BhcmVudEVsZW1lbnQpYyhnLFxubCkmJmsucHVzaCh7dGFyZ2V0OmYsdjpoLEE6ZyxpbmRleDplfSk7cmV0dXJuIGt9aWYoXCI+XCI9PT1rKXJldHVybiBnPWcuX19zaGFkeV9wYXJlbnRFbGVtZW50LGMoZyxsKT97dGFyZ2V0OmYsdjpoLEE6ZyxpbmRleDplfTpbXTtpZihcIitcIj09PWspcmV0dXJuKGc9Zy5fX3NoYWR5X3ByZXZpb3VzRWxlbWVudFNpYmxpbmcpJiZjKGcsbCk/e3RhcmdldDpmLHY6aCxBOmcsaW5kZXg6ZX06W107aWYoXCJ+XCI9PT1rKXtrPVtdO2ZvcihnPWcuX19zaGFkeV9wcmV2aW91c0VsZW1lbnRTaWJsaW5nO2c7Zz1nLl9fc2hhZHlfcHJldmlvdXNFbGVtZW50U2libGluZyljKGcsbCkmJmsucHVzaCh7dGFyZ2V0OmYsdjpoLEE6ZyxpbmRleDplfSk7cmV0dXJuIGt9dGhyb3cgRXJyb3IoXCJVbnJlY29nbml6ZWQgY29tYmluYXRvcjogJ1wiK2srXCInLlwiKTt9KSk7cmV0dXJuIHphKGIubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRhcmdldH0pKX1cbnZhciBVPXYucXVlcnlTZWxlY3RvckltcGxlbWVudGF0aW9uLGpjPUIoe3F1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24oYSl7aWYoXCJuYXRpdmVcIj09PVUpe3ZhciBiPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCh0aGlzIGluc3RhbmNlb2YgU2hhZG93Um9vdD90aGlzLmhvc3Q6dGhpcykuX19zaGFkeV9uYXRpdmVfcXVlcnlTZWxlY3RvckFsbChhKSksYz10aGlzLl9fc2hhZHlfZ2V0Um9vdE5vZGUoKTtiPXAoYik7Zm9yKHZhciBkPWIubmV4dCgpOyFkLmRvbmU7ZD1iLm5leHQoKSlpZihkPWQudmFsdWUsZC5fX3NoYWR5X2dldFJvb3ROb2RlKCk9PWMpcmV0dXJuIGQ7cmV0dXJuIG51bGx9aWYoXCJzZWxlY3RvckVuZ2luZVwiPT09VSlyZXR1cm4gaWModGhpcyxhKVswXXx8bnVsbDtpZih2b2lkIDA9PT1VKXJldHVybiBmYyh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybiBsYS5jYWxsKGUsYSl9LGZ1bmN0aW9uKGUpe3JldHVybiEhZX0pWzBdfHxudWxsO3Rocm93IEVycm9yKFwiVW5yZWNvZ25pemVkIHZhbHVlIG9mIFNoYWR5RE9NLnF1ZXJ5U2VsZWN0b3JJbXBsZW1lbnRhdGlvbjogJ1wiK1xuKFUrXCInXCIpKTt9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oYSxiKXtpZihifHxcIm5hdGl2ZVwiPT09VSl7Yj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCgodGhpcyBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q/dGhpcy5ob3N0OnRoaXMpLl9fc2hhZHlfbmF0aXZlX3F1ZXJ5U2VsZWN0b3JBbGwoYSkpO3ZhciBjPXRoaXMuX19zaGFkeV9nZXRSb290Tm9kZSgpO3JldHVybiB6KGIuZmlsdGVyKGZ1bmN0aW9uKGQpe3JldHVybiBkLl9fc2hhZHlfZ2V0Um9vdE5vZGUoKT09Y30pKX1pZihcInNlbGVjdG9yRW5naW5lXCI9PT1VKXJldHVybiB6KGljKHRoaXMsYSkpO2lmKHZvaWQgMD09PVUpcmV0dXJuIHooZmModGhpcyxmdW5jdGlvbihkKXtyZXR1cm4gbGEuY2FsbChkLGEpfSkpO3Rocm93IEVycm9yKFwiVW5yZWNvZ25pemVkIHZhbHVlIG9mIFNoYWR5RE9NLnF1ZXJ5U2VsZWN0b3JJbXBsZW1lbnRhdGlvbjogJ1wiKyhVK1wiJ1wiKSk7fX0pLGtjPXYuQyYmIXYubD93YSh7fSxUKTpUO3dhKFQsamMpOy8qXG5cbkNvcHlyaWdodCAoYykgMjAyMCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5UaGlzIGNvZGUgbWF5IG9ubHkgYmUgdXNlZCB1bmRlciB0aGUgQlNEIHN0eWxlIGxpY2Vuc2UgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL0xJQ0VOU0UudHh0XG5UaGUgY29tcGxldGUgc2V0IG9mIGF1dGhvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9BVVRIT1JTLnR4dFxuVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0XG5Db2RlIGRpc3RyaWJ1dGVkIGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBwb2x5bWVyIHByb2plY3QgaXMgYWxzb1xuc3ViamVjdCB0byBhbiBhZGRpdGlvbmFsIElQIHJpZ2h0cyBncmFudCBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vUEFURU5UUy50eHRcbiovXG52YXIgbGM9Qih7YWZ0ZXI6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7KytjKWJbY109YXJndW1lbnRzW2NdO2M9dGhpcy5fX3NoYWR5X3BhcmVudE5vZGU7aWYobnVsbCE9PWMpe3ZhciBkPXRoaXMuX19zaGFkeV9uZXh0U2libGluZztjLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKEQuYXBwbHkobnVsbCxxKGIpKSxkKX19LGJlZm9yZTpmdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDsrK2MpYltjXT1hcmd1bWVudHNbY107Yz10aGlzLl9fc2hhZHlfcGFyZW50Tm9kZTtudWxsIT09YyYmYy5fX3NoYWR5X2luc2VydEJlZm9yZShELmFwcGx5KG51bGwscShiKSksdGhpcyl9LHJlbW92ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX19zaGFkeV9wYXJlbnROb2RlO251bGwhPT1hJiZhLl9fc2hhZHlfcmVtb3ZlQ2hpbGQodGhpcyl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7Yzxhcmd1bWVudHMubGVuZ3RoOysrYyliW2NdPVxuYXJndW1lbnRzW2NdO2M9dGhpcy5fX3NoYWR5X3BhcmVudE5vZGU7aWYobnVsbCE9PWMpe3ZhciBkPXRoaXMuX19zaGFkeV9uZXh0U2libGluZztjLl9fc2hhZHlfcmVtb3ZlQ2hpbGQodGhpcyk7Yy5fX3NoYWR5X2luc2VydEJlZm9yZShELmFwcGx5KG51bGwscShiKSksZCl9fX0pO3ZhciBtYz13aW5kb3cuZG9jdW1lbnQ7ZnVuY3Rpb24gbmMoYSxiKXtpZihcInNsb3RcIj09PWIpYT1hLl9fc2hhZHlfcGFyZW50Tm9kZSxqYShhKSYmUSh1KGEpLnJvb3QpO2Vsc2UgaWYoXCJzbG90XCI9PT1hLmxvY2FsTmFtZSYmXCJuYW1lXCI9PT1iJiYoYj1QKGEpKSl7aWYoYi5nKXtvYyhiKTt2YXIgYz1hLlksZD1wYyhhKTtpZihkIT09Yyl7Yz1iLmhbY107dmFyIGU9Yy5pbmRleE9mKGEpOzA8PWUmJmMuc3BsaWNlKGUsMSk7Yz1iLmhbZF18fChiLmhbZF09W10pO2MucHVzaChhKTsxPGMubGVuZ3RoJiYoYi5oW2RdPXFjKGMpKX19UShiKX19XG52YXIgcmM9Qih7Z2V0IHByZXZpb3VzRWxlbWVudFNpYmxpbmcoKXt2YXIgYT11KHRoaXMpO2lmKGEmJnZvaWQgMCE9PWEucHJldmlvdXNTaWJsaW5nKXtmb3IoYT10aGlzLl9fc2hhZHlfcHJldmlvdXNTaWJsaW5nO2EmJmEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERTspYT1hLl9fc2hhZHlfcHJldmlvdXNTaWJsaW5nO3JldHVybiBhfXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3ByZXZpb3VzRWxlbWVudFNpYmxpbmd9LGdldCBuZXh0RWxlbWVudFNpYmxpbmcoKXt2YXIgYT11KHRoaXMpO2lmKGEmJnZvaWQgMCE9PWEubmV4dFNpYmxpbmcpe2ZvcihhPXRoaXMuX19zaGFkeV9uZXh0U2libGluZzthJiZhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREU7KWE9YS5fX3NoYWR5X25leHRTaWJsaW5nO3JldHVybiBhfXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX25leHRFbGVtZW50U2libGluZ30sZ2V0IHNsb3QoKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoXCJzbG90XCIpfSxcbnNldCBzbG90KGEpe3RoaXMuX19zaGFkeV9zZXRBdHRyaWJ1dGUoXCJzbG90XCIsYSl9LGdldCBjbGFzc05hbWUoKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIn0sc2V0IGNsYXNzTmFtZShhKXt0aGlzLl9fc2hhZHlfc2V0QXR0cmlidXRlKFwiY2xhc3NcIixhKX0sc2V0QXR0cmlidXRlOmZ1bmN0aW9uKGEsYil7dGhpcy5vd25lckRvY3VtZW50IT09bWM/dGhpcy5fX3NoYWR5X25hdGl2ZV9zZXRBdHRyaWJ1dGUoYSxiKTpLYih0aGlzLGEsYil8fCh0aGlzLl9fc2hhZHlfbmF0aXZlX3NldEF0dHJpYnV0ZShhLGIpLG5jKHRoaXMsYSkpfSxyZW1vdmVBdHRyaWJ1dGU6ZnVuY3Rpb24oYSl7dGhpcy5vd25lckRvY3VtZW50IT09bWM/dGhpcy5fX3NoYWR5X25hdGl2ZV9yZW1vdmVBdHRyaWJ1dGUoYSk6S2IodGhpcyxhLFwiXCIpP1wiXCI9PT10aGlzLmdldEF0dHJpYnV0ZShhKSYmdGhpcy5fX3NoYWR5X25hdGl2ZV9yZW1vdmVBdHRyaWJ1dGUoYSk6KHRoaXMuX19zaGFkeV9uYXRpdmVfcmVtb3ZlQXR0cmlidXRlKGEpLFxubmModGhpcyxhKSl9LHRvZ2dsZUF0dHJpYnV0ZTpmdW5jdGlvbihhLGIpe2lmKHRoaXMub3duZXJEb2N1bWVudCE9PW1jKXJldHVybiB0aGlzLl9fc2hhZHlfbmF0aXZlX3RvZ2dsZUF0dHJpYnV0ZShhLGIpO2lmKCFLYih0aGlzLGEsXCJcIikpcmV0dXJuIGI9dGhpcy5fX3NoYWR5X25hdGl2ZV90b2dnbGVBdHRyaWJ1dGUoYSxiKSxuYyh0aGlzLGEpLGI7aWYoXCJcIj09PXRoaXMuZ2V0QXR0cmlidXRlKGEpJiYhYilyZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV90b2dnbGVBdHRyaWJ1dGUoYSxiKX19KTt2LkN8fERiLmZvckVhY2goZnVuY3Rpb24oYSl7cmNbYV09RmIoYSl9KTtcbnZhciB3Yz1CKHthdHRhY2hTaGFkb3c6ZnVuY3Rpb24oYSl7aWYoIXRoaXMpdGhyb3cgRXJyb3IoXCJNdXN0IHByb3ZpZGUgYSBob3N0LlwiKTtpZighYSl0aHJvdyBFcnJvcihcIk5vdCBlbm91Z2ggYXJndW1lbnRzLlwiKTtpZihhLnNoYWR5VXBncmFkZUZyYWdtZW50JiYhdi5WKXt2YXIgYj1hLnNoYWR5VXBncmFkZUZyYWdtZW50O2IuX19wcm90b19fPVNoYWRvd1Jvb3QucHJvdG90eXBlO3NjKGIsdGhpcyxhKTt0YyhiLGIpO2E9Yi5fX25vSW5zZXJ0aW9uUG9pbnQ/bnVsbDpiLnF1ZXJ5U2VsZWN0b3JBbGwoXCJzbG90XCIpO2IuX19ub0luc2VydGlvblBvaW50PXZvaWQgMDtpZihhJiZhLmxlbmd0aCl7dmFyIGM9YjtYYihjKTtjLmoucHVzaC5hcHBseShjLmoscShhKSk7UShiKX1iLmhvc3QuX19zaGFkeV9uYXRpdmVfYXBwZW5kQ2hpbGQoYil9ZWxzZSBiPW5ldyB1Yyh2Yyx0aGlzLGEpO3JldHVybiB0aGlzLl9fQ0Vfc2hhZG93Um9vdD1ifSxnZXQgc2hhZG93Um9vdCgpe3ZhciBhPXUodGhpcyk7XG5yZXR1cm4gYSYmYS5lYXx8bnVsbH19KTt3YShyYyx3Yyk7dmFyIHhjPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudChcImluZXJ0XCIpLHljPUIoe2dldCBpbm5lckhUTUwoKXtyZXR1cm4gdyh0aGlzKT9OYShcInRlbXBsYXRlXCI9PT10aGlzLmxvY2FsTmFtZT90aGlzLmNvbnRlbnQ6dGhpcyx0YSk6dGhpcy5fX3NoYWR5X25hdGl2ZV9pbm5lckhUTUx9LHNldCBpbm5lckhUTUwoYSl7aWYoXCJ0ZW1wbGF0ZVwiPT09dGhpcy5sb2NhbE5hbWUpdGhpcy5fX3NoYWR5X25hdGl2ZV9pbm5lckhUTUw9YTtlbHNle1RiKHRoaXMpO3ZhciBiPXRoaXMubG9jYWxOYW1lfHxcImRpdlwiO2I9dGhpcy5uYW1lc3BhY2VVUkkmJnRoaXMubmFtZXNwYWNlVVJJIT09eGMubmFtZXNwYWNlVVJJP3hjLmNyZWF0ZUVsZW1lbnROUyh0aGlzLm5hbWVzcGFjZVVSSSxiKTp4Yy5jcmVhdGVFbGVtZW50KGIpO2Zvcih2Lmk/Yi5fX3NoYWR5X25hdGl2ZV9pbm5lckhUTUw9YTpiLmlubmVySFRNTD1hO2E9Yi5fX3NoYWR5X2ZpcnN0Q2hpbGQ7KXRoaXMuX19zaGFkeV9pbnNlcnRCZWZvcmUoYSl9fX0pO3ZhciB6Yz1CKHtibHVyOmZ1bmN0aW9uKCl7dmFyIGE9dSh0aGlzKTsoYT0oYT1hJiZhLnJvb3QpJiZhLmFjdGl2ZUVsZW1lbnQpP2EuX19zaGFkeV9ibHVyKCk6dGhpcy5fX3NoYWR5X25hdGl2ZV9ibHVyKCl9fSk7di5DfHxFYi5mb3JFYWNoKGZ1bmN0aW9uKGEpe3pjW2FdPUZiKGEpfSk7dmFyIEFjPUIoe2Fzc2lnbmVkTm9kZXM6ZnVuY3Rpb24oYSl7aWYoXCJzbG90XCI9PT10aGlzLmxvY2FsTmFtZSl7dmFyIGI9dGhpcy5fX3NoYWR5X2dldFJvb3ROb2RlKCk7YiYmeChiKSYmYmMoYik7cmV0dXJuKGI9dSh0aGlzKSk/KGEmJmEuZmxhdHRlbj9iLnU6Yi5hc3NpZ25lZE5vZGVzKXx8W106W119fSxhZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYixjKXtpZihcInNsb3RcIiE9PXRoaXMubG9jYWxOYW1lfHxcInNsb3RjaGFuZ2VcIj09PWEpdmIuY2FsbCh0aGlzLGEsYixjKTtlbHNle1wib2JqZWN0XCIhPT10eXBlb2YgYyYmKGM9e2NhcHR1cmU6ISFjfSk7dmFyIGQ9dGhpcy5fX3NoYWR5X3BhcmVudE5vZGU7aWYoIWQpdGhyb3cgRXJyb3IoXCJTaGFkeURPTSBjYW5ub3QgYXR0YWNoIGV2ZW50IHRvIHNsb3QgdW5sZXNzIGl0IGhhcyBhIGBwYXJlbnROb2RlYFwiKTtjLm89dGhpcztkLl9fc2hhZHlfYWRkRXZlbnRMaXN0ZW5lcihhLGIsYyl9fSxyZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsXG5iLGMpe2lmKFwic2xvdFwiIT09dGhpcy5sb2NhbE5hbWV8fFwic2xvdGNoYW5nZVwiPT09YSl3Yi5jYWxsKHRoaXMsYSxiLGMpO2Vsc2V7XCJvYmplY3RcIiE9PXR5cGVvZiBjJiYoYz17Y2FwdHVyZTohIWN9KTt2YXIgZD10aGlzLl9fc2hhZHlfcGFyZW50Tm9kZTtpZighZCl0aHJvdyBFcnJvcihcIlNoYWR5RE9NIGNhbm5vdCBhdHRhY2ggZXZlbnQgdG8gc2xvdCB1bmxlc3MgaXQgaGFzIGEgYHBhcmVudE5vZGVgXCIpO2Mubz10aGlzO2QuX19zaGFkeV9yZW1vdmVFdmVudExpc3RlbmVyKGEsYixjKX19fSk7dmFyIEJjPUIoe2dldEVsZW1lbnRCeUlkOmZ1bmN0aW9uKGEpe3JldHVyblwiXCI9PT1hP251bGw6ZmModGhpcyxmdW5jdGlvbihiKXtyZXR1cm4gYi5pZD09YX0sZnVuY3Rpb24oYil7cmV0dXJuISFifSlbMF18fG51bGx9fSk7ZnVuY3Rpb24gQ2MoYSxiKXtmb3IodmFyIGM7YiYmIWEuaGFzKGM9Yi5fX3NoYWR5X2dldFJvb3ROb2RlKCkpOyliPWMuaG9zdDtyZXR1cm4gYn1mdW5jdGlvbiBEYyhhKXt2YXIgYj1uZXcgU2V0O2ZvcihiLmFkZChhKTt4KGEpJiZhLmhvc3Q7KWE9YS5ob3N0Ll9fc2hhZHlfZ2V0Um9vdE5vZGUoKSxiLmFkZChhKTtyZXR1cm4gYn1cbnZhciBFYz1cIl9fc2hhZHlfbmF0aXZlX1wiK2lhKCksRmM9Qih7Z2V0IGFjdGl2ZUVsZW1lbnQoKXt2YXIgYT12Lmk/ZG9jdW1lbnQuX19zaGFkeV9uYXRpdmVfYWN0aXZlRWxlbWVudDpkb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKCFhfHwhYS5ub2RlVHlwZSlyZXR1cm4gbnVsbDt2YXIgYj0hIXgodGhpcyk7aWYoISh0aGlzPT09ZG9jdW1lbnR8fGImJnRoaXMuaG9zdCE9PWEmJnRoaXMuaG9zdC5fX3NoYWR5X25hdGl2ZV9jb250YWlucyhhKSkpcmV0dXJuIG51bGw7Zm9yKGI9UChhKTtiJiZiIT09dGhpczspYT1iLmhvc3QsYj1QKGEpO3JldHVybiB0aGlzPT09ZG9jdW1lbnQ/Yj9udWxsOmE6Yj09PXRoaXM/YTpudWxsfSxlbGVtZW50c0Zyb21Qb2ludDpmdW5jdGlvbihhLGIpe2E9ZG9jdW1lbnRbRWNdKGEsYik7aWYodGhpcz09PWRvY3VtZW50JiZ2LnVzZU5hdGl2ZURvY3VtZW50RUZQKXJldHVybiBhO2E9W10uc2xpY2UuY2FsbChhKTtiPURjKHRoaXMpO2Zvcih2YXIgYz1uZXcgU2V0LFxuZD0wO2Q8YS5sZW5ndGg7ZCsrKWMuYWRkKENjKGIsYVtkXSkpO3ZhciBlPVtdO2MuZm9yRWFjaChmdW5jdGlvbihmKXtyZXR1cm4gZS5wdXNoKGYpfSk7cmV0dXJuIGV9LGVsZW1lbnRGcm9tUG9pbnQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcz09PWRvY3VtZW50JiZ2LnVzZU5hdGl2ZURvY3VtZW50RUZQP3RoaXMuX19zaGFkeV9uYXRpdmVfZWxlbWVudEZyb21Qb2ludChhLGIpOnRoaXMuX19zaGFkeV9lbGVtZW50c0Zyb21Qb2ludChhLGIpWzBdfHxudWxsfX0pO3ZhciBHYz13aW5kb3cuZG9jdW1lbnQsSGM9Qih7aW1wb3J0Tm9kZTpmdW5jdGlvbihhLGIpe2lmKGEub3duZXJEb2N1bWVudCE9PUdjfHxcInRlbXBsYXRlXCI9PT1hLmxvY2FsTmFtZSlyZXR1cm4gdGhpcy5fX3NoYWR5X25hdGl2ZV9pbXBvcnROb2RlKGEsYik7dmFyIGM9dGhpcy5fX3NoYWR5X25hdGl2ZV9pbXBvcnROb2RlKGEsITEpO2lmKGIpZm9yKGE9YS5fX3NoYWR5X2ZpcnN0Q2hpbGQ7YTthPWEuX19zaGFkeV9uZXh0U2libGluZyliPXRoaXMuX19zaGFkeV9pbXBvcnROb2RlKGEsITApLGMuX19zaGFkeV9hcHBlbmRDaGlsZChiKTtyZXR1cm4gY319KTt2YXIgSWM9Qih7ZGlzcGF0Y2hFdmVudDp0YixhZGRFdmVudExpc3RlbmVyOnZiLmJpbmQod2luZG93KSxyZW1vdmVFdmVudExpc3RlbmVyOndiLmJpbmQod2luZG93KX0pO3ZhciBWPXt9O09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTEVsZW1lbnQucHJvdG90eXBlLFwicGFyZW50RWxlbWVudFwiKSYmKFYucGFyZW50RWxlbWVudD1hYy5wYXJlbnRFbGVtZW50KTtPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEhUTUxFbGVtZW50LnByb3RvdHlwZSxcImNvbnRhaW5zXCIpJiYoVi5jb250YWlucz1hYy5jb250YWlucyk7T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRWxlbWVudC5wcm90b3R5cGUsXCJjaGlsZHJlblwiKSYmKFYuY2hpbGRyZW49VC5jaGlsZHJlbik7T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRWxlbWVudC5wcm90b3R5cGUsXCJpbm5lckhUTUxcIikmJihWLmlubmVySFRNTD15Yy5pbm5lckhUTUwpO09iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTEVsZW1lbnQucHJvdG90eXBlLFwiY2xhc3NOYW1lXCIpJiYoVi5jbGFzc05hbWU9cmMuY2xhc3NOYW1lKTtcbnZhciBXPXtFdmVudFRhcmdldDpbSWJdLE5vZGU6W2FjLHdpbmRvdy5FdmVudFRhcmdldD9udWxsOkliXSxUZXh0OltSXSxDb21tZW50OltSXSxDREFUQVNlY3Rpb246W1JdLFByb2Nlc3NpbmdJbnN0cnVjdGlvbjpbUl0sRWxlbWVudDpbcmMsVCxsYyxSLCF2Lml8fFwiaW5uZXJIVE1MXCJpbiBFbGVtZW50LnByb3RvdHlwZT95YzpudWxsLHdpbmRvdy5IVE1MU2xvdEVsZW1lbnQ/bnVsbDpBY10sSFRNTEVsZW1lbnQ6W3pjLFZdLEhUTUxTbG90RWxlbWVudDpbQWNdLERvY3VtZW50RnJhZ21lbnQ6W2tjLEJjXSxEb2N1bWVudDpbSGMsa2MsQmMsRmNdLFdpbmRvdzpbSWNdLENoYXJhY3RlckRhdGE6W2xjXSxYTUxIdHRwUmVxdWVzdDpbd2luZG93LkV2ZW50VGFyZ2V0P251bGw6SWJdfSxKYz12Lmk/bnVsbDpbXCJpbm5lckhUTUxcIixcInRleHRDb250ZW50XCJdO2Z1bmN0aW9uIFgoYSxiLGMsZCl7Yi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBhJiZlJiZBKGEsZSxjLGQpfSl9XG5mdW5jdGlvbiBLYyhhKXt2YXIgYj1hP251bGw6SmMsYztmb3IoYyBpbiBXKVgod2luZG93W2NdJiZ3aW5kb3dbY10ucHJvdG90eXBlLFdbY10sYSxiKX1bXCJUZXh0XCIsXCJDb21tZW50XCIsXCJDREFUQVNlY3Rpb25cIixcIlByb2Nlc3NpbmdJbnN0cnVjdGlvblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBiPXdpbmRvd1thXSxjPU9iamVjdC5jcmVhdGUoYi5wcm90b3R5cGUpO2MuX19zaGFkeV9wcm90b0lzUGF0Y2hlZD0hMDtYKGMsVy5FdmVudFRhcmdldCk7WChjLFcuTm9kZSk7V1thXSYmWChjLFdbYV0pO2IucHJvdG90eXBlLl9fc2hhZHlfcGF0Y2hlZFByb3RvPWN9KTtmdW5jdGlvbiBMYyhhKXthLl9fc2hhZHlfcHJvdG9Jc1BhdGNoZWQ9ITA7WChhLFcuRXZlbnRUYXJnZXQpO1goYSxXLk5vZGUpO1goYSxXLkVsZW1lbnQpO1goYSxXLkhUTUxFbGVtZW50KTtYKGEsVy5IVE1MU2xvdEVsZW1lbnQpO3JldHVybiBhfTt2YXIgTWM9di5PLE5jPXYuaTtmdW5jdGlvbiBPYyhhLGIpe2lmKE1jJiYhYS5fX3NoYWR5X3Byb3RvSXNQYXRjaGVkJiYheChhKSl7dmFyIGM9T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpLGQ9Yy5oYXNPd25Qcm9wZXJ0eShcIl9fc2hhZHlfcGF0Y2hlZFByb3RvXCIpJiZjLl9fc2hhZHlfcGF0Y2hlZFByb3RvO2R8fChkPU9iamVjdC5jcmVhdGUoYyksTGMoZCksYy5fX3NoYWR5X3BhdGNoZWRQcm90bz1kKTtPYmplY3Quc2V0UHJvdG90eXBlT2YoYSxkKX1OY3x8KDE9PT1iP2FiKGEpOjI9PT1iJiZiYihhKSl9XG5mdW5jdGlvbiBQYyhhLGIsYyxkKXtPYyhhLDEpO2Q9ZHx8bnVsbDt2YXIgZT10KGEpLGY9ZD90KGQpOm51bGw7ZS5wcmV2aW91c1NpYmxpbmc9ZD9mLnByZXZpb3VzU2libGluZzpiLl9fc2hhZHlfbGFzdENoaWxkO2lmKGY9dShlLnByZXZpb3VzU2libGluZykpZi5uZXh0U2libGluZz1hO2lmKGY9dShlLm5leHRTaWJsaW5nPWQpKWYucHJldmlvdXNTaWJsaW5nPWE7ZS5wYXJlbnROb2RlPWI7ZD9kPT09Yy5maXJzdENoaWxkJiYoYy5maXJzdENoaWxkPWEpOihjLmxhc3RDaGlsZD1hLGMuZmlyc3RDaGlsZHx8KGMuZmlyc3RDaGlsZD1hKSk7Yy5jaGlsZE5vZGVzPW51bGx9XG5mdW5jdGlvbiBZYihhLGIsYyl7T2MoYiwyKTt2YXIgZD10KGIpO3ZvaWQgMCE9PWQuZmlyc3RDaGlsZCYmKGQuY2hpbGROb2Rlcz1udWxsKTtpZihhLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKWZvcihhPWEuX19zaGFkeV9uYXRpdmVfZmlyc3RDaGlsZDthO2E9YS5fX3NoYWR5X25hdGl2ZV9uZXh0U2libGluZylQYyhhLGIsZCxjKTtlbHNlIFBjKGEsYixkLGMpfVxuZnVuY3Rpb24gJGIoYSxiKXt2YXIgYz10KGEpO2I9dChiKTthPT09Yi5maXJzdENoaWxkJiYoYi5maXJzdENoaWxkPWMubmV4dFNpYmxpbmcpO2E9PT1iLmxhc3RDaGlsZCYmKGIubGFzdENoaWxkPWMucHJldmlvdXNTaWJsaW5nKTthPWMucHJldmlvdXNTaWJsaW5nO3ZhciBkPWMubmV4dFNpYmxpbmc7YSYmKHQoYSkubmV4dFNpYmxpbmc9ZCk7ZCYmKHQoZCkucHJldmlvdXNTaWJsaW5nPWEpO2MucGFyZW50Tm9kZT1jLnByZXZpb3VzU2libGluZz1jLm5leHRTaWJsaW5nPXZvaWQgMDt2b2lkIDAhPT1iLmNoaWxkTm9kZXMmJihiLmNoaWxkTm9kZXM9bnVsbCl9XG5mdW5jdGlvbiB0YyhhLGIpe3ZhciBjPXQoYSk7aWYoYnx8dm9pZCAwPT09Yy5maXJzdENoaWxkKXtjLmNoaWxkTm9kZXM9bnVsbDt2YXIgZD1jLmZpcnN0Q2hpbGQ9YS5fX3NoYWR5X25hdGl2ZV9maXJzdENoaWxkO2MubGFzdENoaWxkPWEuX19zaGFkeV9uYXRpdmVfbGFzdENoaWxkO09jKGEsMik7Yz1kO2ZvcihkPXZvaWQgMDtjO2M9Yy5fX3NoYWR5X25hdGl2ZV9uZXh0U2libGluZyl7dmFyIGU9dChjKTtlLnBhcmVudE5vZGU9Ynx8YTtlLm5leHRTaWJsaW5nPWMuX19zaGFkeV9uYXRpdmVfbmV4dFNpYmxpbmc7ZS5wcmV2aW91c1NpYmxpbmc9ZHx8bnVsbDtkPWM7T2MoYywxKX19fTt2YXIgUWM9Qih7YWRkRXZlbnRMaXN0ZW5lcjpmdW5jdGlvbihhLGIsYyl7XCJvYmplY3RcIiE9PXR5cGVvZiBjJiYoYz17Y2FwdHVyZTohIWN9KTtjLm89Yy5vfHx0aGlzO3RoaXMuaG9zdC5fX3NoYWR5X2FkZEV2ZW50TGlzdGVuZXIoYSxiLGMpfSxyZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGEsYixjKXtcIm9iamVjdFwiIT09dHlwZW9mIGMmJihjPXtjYXB0dXJlOiEhY30pO2Mubz1jLm98fHRoaXM7dGhpcy5ob3N0Ll9fc2hhZHlfcmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGIsYyl9fSk7ZnVuY3Rpb24gUmMoYSxiKXtBKGEsUWMsYik7QShhLEZjLGIpO0EoYSx5YyxiKTtBKGEsVCxiKTt2LmwmJiFiPyhBKGEsYWMsYiksQShhLEJjLGIpKTp2Lml8fChBKGEsWWEpLEEoYSxXYSksQShhLFhhKSl9O3ZhciB2Yz17fSxZPXYuZGVmZXJDb25uZWN0aW9uQ2FsbGJhY2tzJiZcImxvYWRpbmdcIj09PWRvY3VtZW50LnJlYWR5U3RhdGUsU2M7ZnVuY3Rpb24gVGMoYSl7dmFyIGI9W107ZG8gYi51bnNoaWZ0KGEpO3doaWxlKGE9YS5fX3NoYWR5X3BhcmVudE5vZGUpO3JldHVybiBifWZ1bmN0aW9uIHVjKGEsYixjKXtpZihhIT09dmMpdGhyb3cgbmV3IFR5cGVFcnJvcihcIklsbGVnYWwgY29uc3RydWN0b3JcIik7dGhpcy5nPW51bGw7c2ModGhpcyxiLGMpfVxuZnVuY3Rpb24gc2MoYSxiLGMpe2EuaG9zdD1iO2EubW9kZT1jJiZjLm1vZGU7dGMoYS5ob3N0KTtiPXQoYS5ob3N0KTtiLnJvb3Q9YTtiLmVhPVwiY2xvc2VkXCIhPT1hLm1vZGU/YTpudWxsO2I9dChhKTtiLmZpcnN0Q2hpbGQ9Yi5sYXN0Q2hpbGQ9Yi5wYXJlbnROb2RlPWIubmV4dFNpYmxpbmc9Yi5wcmV2aW91c1NpYmxpbmc9bnVsbDtpZih2LnByZWZlclBlcmZvcm1hbmNlKWZvcig7Yj1hLmhvc3QuX19zaGFkeV9uYXRpdmVfZmlyc3RDaGlsZDspYS5ob3N0Ll9fc2hhZHlfbmF0aXZlX3JlbW92ZUNoaWxkKGIpO2Vsc2UgUShhKX1mdW5jdGlvbiBRKGEpe2Euc3x8KGEucz0hMCxCYShmdW5jdGlvbigpe3JldHVybiBiYyhhKX0pKX1cbmZ1bmN0aW9uIGJjKGEpe3ZhciBiO2lmKGI9YS5zKXtmb3IodmFyIGM7YTspYTp7YS5zJiYoYz1hKSxiPWE7YT1iLmhvc3QuX19zaGFkeV9nZXRSb290Tm9kZSgpO2lmKHgoYSkmJihiPXUoYi5ob3N0KSkmJjA8Yi5GKWJyZWFrIGE7YT12b2lkIDB9Yj1jfShjPWIpJiZjLl9yZW5kZXJTZWxmKCl9XG51Yy5wcm90b3R5cGUuX3JlbmRlclNlbGY9ZnVuY3Rpb24oKXt2YXIgYT1ZO1k9ITA7dGhpcy5zPSExO2lmKHRoaXMuZyl7b2ModGhpcyk7Zm9yKHZhciBiPTAsYztiPHRoaXMuZy5sZW5ndGg7YisrKXtjPXRoaXMuZ1tiXTt2YXIgZD11KGMpLGU9ZC5hc3NpZ25lZE5vZGVzO2QuYXNzaWduZWROb2Rlcz1bXTtkLnU9W107aWYoZC5SPWUpZm9yKGQ9MDtkPGUubGVuZ3RoO2QrKyl7dmFyIGY9dShlW2RdKTtmLkw9Zi5hc3NpZ25lZFNsb3Q7Zi5hc3NpZ25lZFNsb3Q9PT1jJiYoZi5hc3NpZ25lZFNsb3Q9bnVsbCl9fWZvcihiPXRoaXMuaG9zdC5fX3NoYWR5X2ZpcnN0Q2hpbGQ7YjtiPWIuX19zaGFkeV9uZXh0U2libGluZylVYyh0aGlzLGIpO2ZvcihiPTA7Yjx0aGlzLmcubGVuZ3RoO2IrKyl7Yz10aGlzLmdbYl07ZT11KGMpO2lmKCFlLmFzc2lnbmVkTm9kZXMubGVuZ3RoKWZvcihkPWMuX19zaGFkeV9maXJzdENoaWxkO2Q7ZD1kLl9fc2hhZHlfbmV4dFNpYmxpbmcpVWModGhpcyxkLGMpO1xuKGQ9KGQ9dShjLl9fc2hhZHlfcGFyZW50Tm9kZSkpJiZkLnJvb3QpJiYoa2EoZCl8fGQucykmJmQuX3JlbmRlclNlbGYoKTtWYyh0aGlzLGUudSxlLmFzc2lnbmVkTm9kZXMpO2lmKGQ9ZS5SKXtmb3IoZj0wO2Y8ZC5sZW5ndGg7ZisrKXUoZFtmXSkuTD1udWxsO2UuUj1udWxsO2QubGVuZ3RoPmUuYXNzaWduZWROb2Rlcy5sZW5ndGgmJihlLk09ITApfWUuTSYmKGUuTT0hMSxXYyh0aGlzLGMpKX1jPXRoaXMuZztiPVtdO2ZvcihlPTA7ZTxjLmxlbmd0aDtlKyspZD1jW2VdLl9fc2hhZHlfcGFyZW50Tm9kZSwoZj11KGQpKSYmZi5yb290fHwhKDA+Yi5pbmRleE9mKGQpKXx8Yi5wdXNoKGQpO2ZvcihjPTA7YzxiLmxlbmd0aDtjKyspe2Y9YltjXTtlPWY9PT10aGlzP3RoaXMuaG9zdDpmO2Q9W107Zm9yKGY9Zi5fX3NoYWR5X2ZpcnN0Q2hpbGQ7ZjtmPWYuX19zaGFkeV9uZXh0U2libGluZylpZihcInNsb3RcIj09Zi5sb2NhbE5hbWUpZm9yKHZhciBnPXUoZikudSxoPTA7aDxnLmxlbmd0aDtoKyspZC5wdXNoKGdbaF0pO1xuZWxzZSBkLnB1c2goZik7Zj1zYShlKTtnPUdiKGQsZC5sZW5ndGgsZixmLmxlbmd0aCk7Zm9yKHZhciBrPWg9MCxsPXZvaWQgMDtoPGcubGVuZ3RoJiYobD1nW2hdKTtoKyspe2Zvcih2YXIgbT0wLHI9dm9pZCAwO208bC5ELmxlbmd0aCYmKHI9bC5EW21dKTttKyspci5fX3NoYWR5X25hdGl2ZV9wYXJlbnROb2RlPT09ZSYmZS5fX3NoYWR5X25hdGl2ZV9yZW1vdmVDaGlsZChyKSxmLnNwbGljZShsLmluZGV4K2ssMSk7ay09bC5HfWs9MDtmb3IobD12b2lkIDA7azxnLmxlbmd0aCYmKGw9Z1trXSk7aysrKWZvcihoPWZbbC5pbmRleF0sbT1sLmluZGV4O208bC5pbmRleCtsLkc7bSsrKXI9ZFttXSxlLl9fc2hhZHlfbmF0aXZlX2luc2VydEJlZm9yZShyLGgpLGYuc3BsaWNlKG0sMCxyKX19aWYoIXYucHJlZmVyUGVyZm9ybWFuY2UmJiF0aGlzLlApZm9yKGI9dGhpcy5ob3N0Ll9fc2hhZHlfZmlyc3RDaGlsZDtiO2I9Yi5fX3NoYWR5X25leHRTaWJsaW5nKWM9dShiKSxiLl9fc2hhZHlfbmF0aXZlX3BhcmVudE5vZGUhPT1cbnRoaXMuaG9zdHx8XCJzbG90XCIhPT1iLmxvY2FsTmFtZSYmYy5hc3NpZ25lZFNsb3R8fHRoaXMuaG9zdC5fX3NoYWR5X25hdGl2ZV9yZW1vdmVDaGlsZChiKTt0aGlzLlA9ITA7WT1hO1NjJiZTYygpfTtmdW5jdGlvbiBVYyhhLGIsYyl7dmFyIGQ9dChiKSxlPWQuTDtkLkw9bnVsbDtjfHwoYz0oYT1hLmhbYi5fX3NoYWR5X3Nsb3R8fFwiX19jYXRjaGFsbFwiXSkmJmFbMF0pO2M/KHQoYykuYXNzaWduZWROb2Rlcy5wdXNoKGIpLGQuYXNzaWduZWRTbG90PWMpOmQuYXNzaWduZWRTbG90PXZvaWQgMDtlIT09ZC5hc3NpZ25lZFNsb3QmJmQuYXNzaWduZWRTbG90JiYodChkLmFzc2lnbmVkU2xvdCkuTT0hMCl9ZnVuY3Rpb24gVmMoYSxiLGMpe2Zvcih2YXIgZD0wLGU9dm9pZCAwO2Q8Yy5sZW5ndGgmJihlPWNbZF0pO2QrKylpZihcInNsb3RcIj09ZS5sb2NhbE5hbWUpe3ZhciBmPXUoZSkuYXNzaWduZWROb2RlcztmJiZmLmxlbmd0aCYmVmMoYSxiLGYpfWVsc2UgYi5wdXNoKGNbZF0pfVxuZnVuY3Rpb24gV2MoYSxiKXtiLl9fc2hhZHlfbmF0aXZlX2Rpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwic2xvdGNoYW5nZVwiKSk7Yj11KGIpO2IuYXNzaWduZWRTbG90JiZXYyhhLGIuYXNzaWduZWRTbG90KX1mdW5jdGlvbiBYYihhKXthLmo9YS5qfHxbXTthLmc9YS5nfHxbXTthLmg9YS5ofHx7fX1mdW5jdGlvbiBvYyhhKXtpZihhLmomJmEuai5sZW5ndGgpe2Zvcih2YXIgYj1hLmosYyxkPTA7ZDxiLmxlbmd0aDtkKyspe3ZhciBlPWJbZF07dGMoZSk7dmFyIGY9ZS5fX3NoYWR5X3BhcmVudE5vZGU7dGMoZik7Zj11KGYpO2YuRj0oZi5GfHwwKSsxO2Y9cGMoZSk7YS5oW2ZdPyhjPWN8fHt9LGNbZl09ITAsYS5oW2ZdLnB1c2goZSkpOmEuaFtmXT1bZV07YS5nLnB1c2goZSl9aWYoYylmb3IodmFyIGcgaW4gYylhLmhbZ109cWMoYS5oW2ddKTthLmo9W119fVxuZnVuY3Rpb24gcGMoYSl7dmFyIGI9YS5uYW1lfHxhLmdldEF0dHJpYnV0ZShcIm5hbWVcIil8fFwiX19jYXRjaGFsbFwiO3JldHVybiBhLlk9Yn1mdW5jdGlvbiBxYyhhKXtyZXR1cm4gYS5zb3J0KGZ1bmN0aW9uKGIsYyl7Yj1UYyhiKTtmb3IodmFyIGQ9VGMoYyksZT0wO2U8Yi5sZW5ndGg7ZSsrKXtjPWJbZV07dmFyIGY9ZFtlXTtpZihjIT09ZilyZXR1cm4gYj10YShjLl9fc2hhZHlfcGFyZW50Tm9kZSksYi5pbmRleE9mKGMpLWIuaW5kZXhPZihmKX19KX1cbmZ1bmN0aW9uIFpiKGEsYil7aWYoYS5nKXtvYyhhKTt2YXIgYz1hLmgsZDtmb3IoZCBpbiBjKWZvcih2YXIgZT1jW2RdLGY9MDtmPGUubGVuZ3RoO2YrKyl7dmFyIGc9ZVtmXTtpZihyYShiLGcpKXtlLnNwbGljZShmLDEpO3ZhciBoPWEuZy5pbmRleE9mKGcpOzA8PWgmJihhLmcuc3BsaWNlKGgsMSksKGg9dShnLl9fc2hhZHlfcGFyZW50Tm9kZSkpJiZoLkYmJmguRi0tKTtmLS07Zz11KGcpO2lmKGg9Zy51KWZvcih2YXIgaz0wO2s8aC5sZW5ndGg7aysrKXt2YXIgbD1oW2tdLG09bC5fX3NoYWR5X25hdGl2ZV9wYXJlbnROb2RlO20mJm0uX19zaGFkeV9uYXRpdmVfcmVtb3ZlQ2hpbGQobCl9Zy51PVtdO2cuYXNzaWduZWROb2Rlcz1bXTtoPSEwfX1yZXR1cm4gaH19ZnVuY3Rpb24ga2EoYSl7b2MoYSk7cmV0dXJuISghYS5nfHwhYS5nLmxlbmd0aCl9XG4oZnVuY3Rpb24oYSl7YS5fX3Byb3RvX189RG9jdW1lbnRGcmFnbWVudC5wcm90b3R5cGU7UmMoYSxcIl9fc2hhZHlfXCIpO1JjKGEpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGEse25vZGVUeXBlOnt2YWx1ZTpOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUsY29uZmlndXJhYmxlOiEwfSxub2RlTmFtZTp7dmFsdWU6XCIjZG9jdW1lbnQtZnJhZ21lbnRcIixjb25maWd1cmFibGU6ITB9LG5vZGVWYWx1ZTp7dmFsdWU6bnVsbCxjb25maWd1cmFibGU6ITB9fSk7W1wibG9jYWxOYW1lXCIsXCJuYW1lc3BhY2VVUklcIixcInByZWZpeFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIse3ZhbHVlOnZvaWQgMCxjb25maWd1cmFibGU6ITB9KX0pO1tcIm93bmVyRG9jdW1lbnRcIixcImJhc2VVUklcIixcImlzQ29ubmVjdGVkXCJdLmZvckVhY2goZnVuY3Rpb24oYil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsYix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaG9zdFtiXX0sXG5jb25maWd1cmFibGU6ITB9KX0pfSkodWMucHJvdG90eXBlKTtcbmlmKHdpbmRvdy5jdXN0b21FbGVtZW50cyYmd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSYmdi5OJiYhdi5wcmVmZXJQZXJmb3JtYW5jZSl7dmFyIFhjPW5ldyBNYXA7U2M9ZnVuY3Rpb24oKXt2YXIgYT1bXTtYYy5mb3JFYWNoKGZ1bmN0aW9uKGQsZSl7YS5wdXNoKFtlLGRdKX0pO1hjLmNsZWFyKCk7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspe3ZhciBjPWFbYl1bMF07YVtiXVsxXT9jLl9fc2hhZHlkb21fY29ubmVjdGVkQ2FsbGJhY2soKTpjLl9fc2hhZHlkb21fZGlzY29ubmVjdGVkQ2FsbGJhY2soKX19O1kmJmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJyZWFkeXN0YXRlY2hhbmdlXCIsZnVuY3Rpb24oKXtZPSExO1NjKCl9LHtvbmNlOiEwfSk7dmFyIFljPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD0wLGU9XCJfX2lzQ29ubmVjdGVkXCIrZCsrO2lmKGJ8fGMpYS5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2s9YS5wcm90b3R5cGUuX19zaGFkeWRvbV9jb25uZWN0ZWRDYWxsYmFjaz1cbmZ1bmN0aW9uKCl7WT9YYy5zZXQodGhpcywhMCk6dGhpc1tlXXx8KHRoaXNbZV09ITAsYiYmYi5jYWxsKHRoaXMpKX0sYS5wcm90b3R5cGUuZGlzY29ubmVjdGVkQ2FsbGJhY2s9YS5wcm90b3R5cGUuX19zaGFkeWRvbV9kaXNjb25uZWN0ZWRDYWxsYmFjaz1mdW5jdGlvbigpe1k/dGhpcy5pc0Nvbm5lY3RlZHx8WGMuc2V0KHRoaXMsITEpOnRoaXNbZV0mJih0aGlzW2VdPSExLGMmJmMuY2FsbCh0aGlzKSl9O3JldHVybiBhfSxaYz13aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lLCRjPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2ssZD1iLnByb3RvdHlwZS5kaXNjb25uZWN0ZWRDYWxsYmFjaztaYy5jYWxsKHdpbmRvdy5jdXN0b21FbGVtZW50cyxhLFljKGIsYyxkKSk7Yi5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2s9YztiLnByb3RvdHlwZS5kaXNjb25uZWN0ZWRDYWxsYmFjaz1kfTt3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lPVxuJGM7T2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdy5DdXN0b21FbGVtZW50UmVnaXN0cnkucHJvdG90eXBlLFwiZGVmaW5lXCIse3ZhbHVlOiRjLGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIFAoYSl7YT1hLl9fc2hhZHlfZ2V0Um9vdE5vZGUoKTtpZih4KGEpKXJldHVybiBhfTtmdW5jdGlvbiBaKGEpe3RoaXMubm9kZT1hfW49Wi5wcm90b3R5cGU7bi5hZGRFdmVudExpc3RlbmVyPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfYWRkRXZlbnRMaXN0ZW5lcihhLGIsYyl9O24ucmVtb3ZlRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3JlbW92ZUV2ZW50TGlzdGVuZXIoYSxiLGMpfTtuLmFwcGVuZENoaWxkPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9hcHBlbmRDaGlsZChhKX07bi5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfaW5zZXJ0QmVmb3JlKGEsYil9O24ucmVtb3ZlQ2hpbGQ9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3JlbW92ZUNoaWxkKGEpfTtuLnJlcGxhY2VDaGlsZD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9yZXBsYWNlQ2hpbGQoYSxiKX07XG5uLmNsb25lTm9kZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfY2xvbmVOb2RlKGEpfTtuLmdldFJvb3ROb2RlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9nZXRSb290Tm9kZShhKX07bi5jb250YWlucz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfY29udGFpbnMoYSl9O24uZGlzcGF0Y2hFdmVudD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfZGlzcGF0Y2hFdmVudChhKX07bi5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oYSxiKXt0aGlzLm5vZGUuX19zaGFkeV9zZXRBdHRyaWJ1dGUoYSxiKX07bi5nZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X25hdGl2ZV9nZXRBdHRyaWJ1dGUoYSl9O24ucmVtb3ZlQXR0cmlidXRlPWZ1bmN0aW9uKGEpe3RoaXMubm9kZS5fX3NoYWR5X3JlbW92ZUF0dHJpYnV0ZShhKX07XG5uLnRvZ2dsZUF0dHJpYnV0ZT1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV90b2dnbGVBdHRyaWJ1dGUoYSxiKX07bi5hdHRhY2hTaGFkb3c9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2F0dGFjaFNoYWRvdyhhKX07bi5mb2N1cz1mdW5jdGlvbigpe3RoaXMubm9kZS5fX3NoYWR5X25hdGl2ZV9mb2N1cygpfTtuLmJsdXI9ZnVuY3Rpb24oKXt0aGlzLm5vZGUuX19zaGFkeV9ibHVyKCl9O24uaW1wb3J0Tm9kZT1mdW5jdGlvbihhLGIpe2lmKHRoaXMubm9kZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfTk9ERSlyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfaW1wb3J0Tm9kZShhLGIpfTtuLmdldEVsZW1lbnRCeUlkPWZ1bmN0aW9uKGEpe2lmKHRoaXMubm9kZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfTk9ERSlyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfZ2V0RWxlbWVudEJ5SWQoYSl9O1xubi5lbGVtZW50c0Zyb21Qb2ludD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9lbGVtZW50c0Zyb21Qb2ludChhLGIpfTtuLmVsZW1lbnRGcm9tUG9pbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfZWxlbWVudEZyb21Qb2ludChhLGIpfTtuLnF1ZXJ5U2VsZWN0b3I9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3F1ZXJ5U2VsZWN0b3IoYSl9O24ucXVlcnlTZWxlY3RvckFsbD1mdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9xdWVyeVNlbGVjdG9yQWxsKGEsYil9O24uYXNzaWduZWROb2Rlcz1mdW5jdGlvbihhKXtpZihcInNsb3RcIj09PXRoaXMubm9kZS5sb2NhbE5hbWUpcmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2Fzc2lnbmVkTm9kZXMoYSl9O1xubi5hcHBlbmQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7KytjKWJbY109YXJndW1lbnRzW2NdO3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9hcHBlbmQuYXBwbHkodGhpcy5ub2RlLHEoYikpfTtuLnByZXBlbmQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPVtdLGM9MDtjPGFyZ3VtZW50cy5sZW5ndGg7KytjKWJbY109YXJndW1lbnRzW2NdO3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9wcmVwZW5kLmFwcGx5KHRoaXMubm9kZSxxKGIpKX07bi5hZnRlcj1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDsrK2MpYltjXT1hcmd1bWVudHNbY107cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2FmdGVyLmFwcGx5KHRoaXMubm9kZSxxKGIpKX07XG5uLmJlZm9yZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDsrK2MpYltjXT1hcmd1bWVudHNbY107cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2JlZm9yZS5hcHBseSh0aGlzLm5vZGUscShiKSl9O24ucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3JlbW92ZSgpfTtuLnJlcGxhY2VXaXRoPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj1bXSxjPTA7Yzxhcmd1bWVudHMubGVuZ3RoOysrYyliW2NdPWFyZ3VtZW50c1tjXTtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfcmVwbGFjZVdpdGguYXBwbHkodGhpcy5ub2RlLHEoYikpfTtcbmNhLk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFoucHJvdG90eXBlLHthY3RpdmVFbGVtZW50Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZih4KHRoaXMubm9kZSl8fHRoaXMubm9kZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfTk9ERSlyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfYWN0aXZlRWxlbWVudH19LF9hY3RpdmVFbGVtZW50Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RpdmVFbGVtZW50fX0saG9zdDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoeCh0aGlzLm5vZGUpKXJldHVybiB0aGlzLm5vZGUuaG9zdH19LHBhcmVudE5vZGU6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9wYXJlbnROb2RlfX0sZmlyc3RDaGlsZDp7Y29uZmlndXJhYmxlOiEwLFxuZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfZmlyc3RDaGlsZH19LGxhc3RDaGlsZDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2xhc3RDaGlsZH19LG5leHRTaWJsaW5nOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfbmV4dFNpYmxpbmd9fSxwcmV2aW91c1NpYmxpbmc6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9wcmV2aW91c1NpYmxpbmd9fSxjaGlsZE5vZGVzOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfY2hpbGROb2Rlc319LHBhcmVudEVsZW1lbnQ6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLFxuZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X3BhcmVudEVsZW1lbnR9fSxmaXJzdEVsZW1lbnRDaGlsZDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2ZpcnN0RWxlbWVudENoaWxkfX0sbGFzdEVsZW1lbnRDaGlsZDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2xhc3RFbGVtZW50Q2hpbGR9fSxuZXh0RWxlbWVudFNpYmxpbmc6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9uZXh0RWxlbWVudFNpYmxpbmd9fSxwcmV2aW91c0VsZW1lbnRTaWJsaW5nOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfcHJldmlvdXNFbGVtZW50U2libGluZ319LFxuY2hpbGRyZW46e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV9jaGlsZHJlbn19LGNoaWxkRWxlbWVudENvdW50Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfY2hpbGRFbGVtZW50Q291bnR9fSxzaGFkb3dSb290Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfc2hhZG93Um9vdH19LGFzc2lnbmVkU2xvdDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2Fzc2lnbmVkU2xvdH19LGlzQ29ubmVjdGVkOntjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfaXNDb25uZWN0ZWR9fSxpbm5lckhUTUw6e2NvbmZpZ3VyYWJsZTohMCxcbmVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2lubmVySFRNTH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMubm9kZS5fX3NoYWR5X2lubmVySFRNTD1hfX0sdGV4dENvbnRlbnQ6e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuX19zaGFkeV90ZXh0Q29udGVudH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMubm9kZS5fX3NoYWR5X3RleHRDb250ZW50PWF9fSxzbG90Ontjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9fc2hhZHlfc2xvdH0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMubm9kZS5fX3NoYWR5X3Nsb3Q9YX19LGNsYXNzTmFtZTp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fX3NoYWR5X2NsYXNzTmFtZX0sc2V0OmZ1bmN0aW9uKGEpe3RoaXMubm9kZS5fX3NoYWR5X2NsYXNzTmFtZT1cbmF9fX0pO2Z1bmN0aW9uIGFkKGEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShaLnByb3RvdHlwZSxhLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlW1wiX19zaGFkeV9cIithXX0sc2V0OmZ1bmN0aW9uKGIpe3RoaXMubm9kZVtcIl9fc2hhZHlfXCIrYV09Yn0sY29uZmlndXJhYmxlOiEwfSl9RGIuZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gYWQoYSl9KTtFYi5mb3JFYWNoKGZ1bmN0aW9uKGEpe3JldHVybiBhZChhKX0pO3ZhciBiZD1uZXcgV2Vha01hcDtmdW5jdGlvbiBjZChhKXtpZih4KGEpfHxhIGluc3RhbmNlb2YgWilyZXR1cm4gYTt2YXIgYj1iZC5nZXQoYSk7Ynx8KGI9bmV3IFooYSksYmQuc2V0KGEsYikpO3JldHVybiBifTtpZih2Lk4pe3ZhciBkZD12Lmk/ZnVuY3Rpb24oYSl7cmV0dXJuIGF9OmZ1bmN0aW9uKGEpe2JiKGEpO2FiKGEpO3JldHVybiBhfTt3aW5kb3cuU2hhZHlET009e2luVXNlOnYuTixwYXRjaDpkZCxpc1NoYWR5Um9vdDp4LGVucXVldWU6QmEsZmx1c2g6RixmbHVzaEluaXRpYWw6ZnVuY3Rpb24oYSl7IWEuUCYmYS5zJiZiYyhhKX0sc2V0dGluZ3M6dixmaWx0ZXJNdXRhdGlvbnM6R2Esb2JzZXJ2ZUNoaWxkcmVuOkVhLHVub2JzZXJ2ZUNoaWxkcmVuOkZhLGRlZmVyQ29ubmVjdGlvbkNhbGxiYWNrczp2LmRlZmVyQ29ubmVjdGlvbkNhbGxiYWNrcyxwcmVmZXJQZXJmb3JtYW5jZTp2LnByZWZlclBlcmZvcm1hbmNlLGhhbmRsZXNEeW5hbWljU2NvcGluZzohMCx3cmFwOnYubD9jZDpkZCx3cmFwSWZOZWVkZWQ6ITA9PT12Lmw/Y2Q6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LFdyYXBwZXI6Wixjb21wb3NlZFBhdGg6aWIsbm9QYXRjaDp2LmwscGF0Y2hPbkRlbWFuZDp2Lk8sbmF0aXZlTWV0aG9kczpPYSxcbm5hdGl2ZVRyZWU6UGEscGF0Y2hFbGVtZW50UHJvdG86TGMscXVlcnlTZWxlY3RvckltcGxlbWVudGF0aW9uOnYucXVlcnlTZWxlY3RvckltcGxlbWVudGF0aW9ufTtWYSgpO0tjKFwiX19zaGFkeV9cIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KGRvY3VtZW50LFwiX2FjdGl2ZUVsZW1lbnRcIixGYy5hY3RpdmVFbGVtZW50KTtBKFdpbmRvdy5wcm90b3R5cGUsSWMsXCJfX3NoYWR5X1wiKTt2Lmw/di5PJiZBKEVsZW1lbnQucHJvdG90eXBlLHdjKTooS2MoKSxDYigpKTt4YigpO3dpbmRvdy5FdmVudD16Yjt3aW5kb3cuQ3VzdG9tRXZlbnQ9QWI7d2luZG93Lk1vdXNlRXZlbnQ9QmI7d2luZG93LlNoYWRvd1Jvb3Q9dWN9O30pLmNhbGwodGhpcyk7XG5cbiIsICJcbi8vIF9ET01Ub2tlbkxpc3Rcbi8qXG5Db3B5cmlnaHQgKGMpIDIwMTYsIEpvaG4gR2FyZG5lclxuXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qL1xudmFyIF9ET01Ub2tlbkxpc3QgPSAoZnVuY3Rpb24oKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblx0dmFyIGRwU3VwcG9ydCA9IHRydWU7XG5cdHZhciBkZWZpbmVHZXR0ZXIgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lLCBmbiwgY29uZmlndXJhYmxlKSB7XG5cdFx0aWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSlcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSA9PT0gZHBTdXBwb3J0ID8gdHJ1ZSA6ICEhY29uZmlndXJhYmxlLFxuXHRcdFx0XHRnZXQ6IGZuXG5cdFx0XHR9KTtcblxuXHRcdGVsc2Ugb2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18obmFtZSwgZm4pO1xuXHR9O1xuXG5cdC8qKiBFbnN1cmUgdGhlIGJyb3dzZXIgYWxsb3dzIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB0byBiZSB1c2VkIG9uIG5hdGl2ZSBKYXZhU2NyaXB0IG9iamVjdHMuICovXG5cdHRyeSB7XG5cdFx0ZGVmaW5lR2V0dGVyKHt9LCBcInN1cHBvcnRcIik7XG5cdH1cblx0Y2F0Y2ggKGUpIHtcblx0XHRkcFN1cHBvcnQgPSBmYWxzZTtcblx0fVxuXG5cblx0dmFyIF9ET01Ub2tlbkxpc3QgPSBmdW5jdGlvbiAoZWwsIHByb3ApIHtcblx0XHR2YXIgdGhhdCA9IHRoaXM7XG5cdFx0dmFyIHRva2VucyA9IFtdO1xuXHRcdHZhciB0b2tlbk1hcCA9IHt9O1xuXHRcdHZhciBsZW5ndGggPSAwO1xuXHRcdHZhciBtYXhMZW5ndGggPSAwO1xuXHRcdHZhciBhZGRJbmRleEdldHRlciA9IGZ1bmN0aW9uIChpKSB7XG5cdFx0XHRkZWZpbmVHZXR0ZXIodGhhdCwgaSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRwcmVvcCgpO1xuXHRcdFx0XHRyZXR1cm4gdG9rZW5zW2ldO1xuXHRcdFx0fSwgZmFsc2UpO1xuXG5cdFx0fTtcblx0XHR2YXIgcmVpbmRleCA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0LyoqIERlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBhcnJheS1saWtlIGFjY2VzcyB0byB0aGUgdG9rZW5MaXN0J3MgY29udGVudHMuICovXG5cdFx0XHRpZiAobGVuZ3RoID49IG1heExlbmd0aClcblx0XHRcdFx0Zm9yICg7IG1heExlbmd0aCA8IGxlbmd0aDsgKyttYXhMZW5ndGgpIHtcblx0XHRcdFx0XHRhZGRJbmRleEdldHRlcihtYXhMZW5ndGgpO1xuXHRcdFx0XHR9XG5cdFx0fTtcblxuXHRcdC8qKiBIZWxwZXIgZnVuY3Rpb24gY2FsbGVkIGF0IHRoZSBzdGFydCBvZiBlYWNoIGNsYXNzIG1ldGhvZC4gSW50ZXJuYWwgdXNlIG9ubHkuICovXG5cdFx0dmFyIHByZW9wID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIGVycm9yO1xuXHRcdFx0dmFyIGk7XG5cdFx0XHR2YXIgYXJncyA9IGFyZ3VtZW50cztcblx0XHRcdHZhciByU3BhY2UgPSAvXFxzKy87XG5cblx0XHRcdC8qKiBWYWxpZGF0ZSB0aGUgdG9rZW4vcyBwYXNzZWQgdG8gYW4gaW5zdGFuY2UgbWV0aG9kLCBpZiBhbnkuICovXG5cdFx0XHRpZiAoYXJncy5sZW5ndGgpXG5cdFx0XHRcdGZvciAoaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgKytpKVxuXHRcdFx0XHRcdGlmIChyU3BhY2UudGVzdChhcmdzW2ldKSkge1xuXHRcdFx0XHRcdFx0ZXJyb3IgPSBuZXcgU3ludGF4RXJyb3IoJ1N0cmluZyBcIicgKyBhcmdzW2ldICsgJ1wiICcgKyBcImNvbnRhaW5zXCIgKyAnIGFuIGludmFsaWQgY2hhcmFjdGVyJyk7XG5cdFx0XHRcdFx0XHRlcnJvci5jb2RlID0gNTtcblx0XHRcdFx0XHRcdGVycm9yLm5hbWUgPSBcIkludmFsaWRDaGFyYWN0ZXJFcnJvclwiO1xuXHRcdFx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHRcdFx0fVxuXG5cblx0XHRcdC8qKiBTcGxpdCB0aGUgbmV3IHZhbHVlIGFwYXJ0IGJ5IHdoaXRlc3BhY2UqL1xuXHRcdFx0aWYgKHR5cGVvZiBlbFtwcm9wXSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHR0b2tlbnMgPSAoXCJcIiArIGVsW3Byb3BdLmJhc2VWYWwpLnJlcGxhY2UoL15cXHMrfFxccyskL2csIFwiXCIpLnNwbGl0KHJTcGFjZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0b2tlbnMgPSAoXCJcIiArIGVsW3Byb3BdKS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBcIlwiKS5zcGxpdChyU3BhY2UpO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiogQXZvaWQgdHJlYXRpbmcgYmxhbmsgc3RyaW5ncyBhcyBzaW5nbGUtaXRlbSB0b2tlbiBsaXN0cyAqL1xuXHRcdFx0aWYgKFwiXCIgPT09IHRva2Vuc1swXSkgdG9rZW5zID0gW107XG5cblx0XHRcdC8qKiBSZXBvcHVsYXRlIHRoZSBpbnRlcm5hbCB0b2tlbiBsaXN0cyAqL1xuXHRcdFx0dG9rZW5NYXAgPSB7fTtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyArK2kpXG5cdFx0XHRcdHRva2VuTWFwW3Rva2Vuc1tpXV0gPSB0cnVlO1xuXHRcdFx0bGVuZ3RoID0gdG9rZW5zLmxlbmd0aDtcblx0XHRcdHJlaW5kZXgoKTtcblx0XHR9O1xuXG5cdFx0LyoqIFBvcHVsYXRlIG91ciBpbnRlcm5hbCB0b2tlbiBsaXN0IGlmIHRoZSB0YXJnZXRlZCBhdHRyaWJ1dGUgb2YgdGhlIHN1YmplY3QgZWxlbWVudCBpc24ndCBlbXB0eS4gKi9cblx0XHRwcmVvcCgpO1xuXG5cdFx0LyoqIFJldHVybiB0aGUgbnVtYmVyIG9mIHRva2VucyBpbiB0aGUgdW5kZXJseWluZyBzdHJpbmcuIFJlYWQtb25seS4gKi9cblx0XHRkZWZpbmVHZXR0ZXIodGhhdCwgXCJsZW5ndGhcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cHJlb3AoKTtcblx0XHRcdHJldHVybiBsZW5ndGg7XG5cdFx0fSk7XG5cblx0XHQvKiogT3ZlcnJpZGUgdGhlIGRlZmF1bHQgdG9TdHJpbmcvdG9Mb2NhbGVTdHJpbmcgbWV0aG9kcyB0byByZXR1cm4gYSBzcGFjZS1kZWxpbWl0ZWQgbGlzdCBvZiB0b2tlbnMgd2hlbiB0eXBlY2FzdC4gKi9cblx0XHR0aGF0LnRvTG9jYWxlU3RyaW5nID1cblx0XHRcdHRoYXQudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHByZW9wKCk7XG5cdFx0XHRcdHJldHVybiB0b2tlbnMuam9pbihcIiBcIik7XG5cdFx0XHR9O1xuXG5cdFx0dGhhdC5pdGVtID0gZnVuY3Rpb24gKGlkeCkge1xuXHRcdFx0cHJlb3AoKTtcblx0XHRcdHJldHVybiB0b2tlbnNbaWR4XTtcblx0XHR9O1xuXG5cdFx0dGhhdC5jb250YWlucyA9IGZ1bmN0aW9uICh0b2tlbikge1xuXHRcdFx0cHJlb3AoKTtcblx0XHRcdHJldHVybiAhIXRva2VuTWFwW3Rva2VuXTtcblx0XHR9O1xuXG5cdFx0dGhhdC5hZGQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRwcmVvcC5hcHBseSh0aGF0LCBhcmdzID0gYXJndW1lbnRzKTtcblxuXHRcdFx0Zm9yICh2YXIgYXJncywgdG9rZW4sIGkgPSAwLCBsID0gYXJncy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcblx0XHRcdFx0dG9rZW4gPSBhcmdzW2ldO1xuXHRcdFx0XHRpZiAoIXRva2VuTWFwW3Rva2VuXSkge1xuXHRcdFx0XHRcdHRva2Vucy5wdXNoKHRva2VuKTtcblx0XHRcdFx0XHR0b2tlbk1hcFt0b2tlbl0gPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8qKiBVcGRhdGUgdGhlIHRhcmdldGVkIGF0dHJpYnV0ZSBvZiB0aGUgYXR0YWNoZWQgZWxlbWVudCBpZiB0aGUgdG9rZW4gbGlzdCdzIGNoYW5nZWQuICovXG5cdFx0XHRpZiAobGVuZ3RoICE9PSB0b2tlbnMubGVuZ3RoKSB7XG5cdFx0XHRcdGxlbmd0aCA9IHRva2Vucy5sZW5ndGggPj4+IDA7XG5cdFx0XHRcdGlmICh0eXBlb2YgZWxbcHJvcF0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRlbFtwcm9wXS5iYXNlVmFsID0gdG9rZW5zLmpvaW4oXCIgXCIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVsW3Byb3BdID0gdG9rZW5zLmpvaW4oXCIgXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlaW5kZXgoKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0dGhhdC5yZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRwcmVvcC5hcHBseSh0aGF0LCBhcmdzID0gYXJndW1lbnRzKTtcblxuXHRcdFx0LyoqIEJ1aWxkIGEgaGFzaCBvZiB0b2tlbiBuYW1lcyB0byBjb21wYXJlIGFnYWluc3Qgd2hlbiByZWNvbGxlY3Rpbmcgb3VyIHRva2VuIGxpc3QuICovXG5cdFx0XHRmb3IgKHZhciBhcmdzLCBpZ25vcmUgPSB7fSwgaSA9IDAsIHQgPSBbXTsgaSA8IGFyZ3MubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0aWdub3JlW2FyZ3NbaV1dID0gdHJ1ZTtcblx0XHRcdFx0ZGVsZXRlIHRva2VuTWFwW2FyZ3NbaV1dO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiogUnVuIHRocm91Z2ggb3VyIHRva2VucyBsaXN0IGFuZCByZWFzc2lnbiBvbmx5IHRob3NlIHRoYXQgYXJlbid0IGRlZmluZWQgaW4gdGhlIGhhc2ggZGVjbGFyZWQgYWJvdmUuICovXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgKytpKVxuXHRcdFx0XHRpZiAoIWlnbm9yZVt0b2tlbnNbaV1dKSB0LnB1c2godG9rZW5zW2ldKTtcblxuXHRcdFx0dG9rZW5zID0gdDtcblx0XHRcdGxlbmd0aCA9IHQubGVuZ3RoID4+PiAwO1xuXG5cdFx0XHQvKiogVXBkYXRlIHRoZSB0YXJnZXRlZCBhdHRyaWJ1dGUgb2YgdGhlIGF0dGFjaGVkIGVsZW1lbnQuICovXG5cdFx0XHRpZiAodHlwZW9mIGVsW3Byb3BdID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdGVsW3Byb3BdLmJhc2VWYWwgPSB0b2tlbnMuam9pbihcIiBcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbFtwcm9wXSA9IHRva2Vucy5qb2luKFwiIFwiKTtcblx0XHRcdH1cblx0XHRcdHJlaW5kZXgoKTtcblx0XHR9O1xuXG5cdFx0dGhhdC50b2dnbGUgPSBmdW5jdGlvbiAodG9rZW4sIGZvcmNlKSB7XG5cdFx0XHRwcmVvcC5hcHBseSh0aGF0LCBbdG9rZW5dKTtcblxuXHRcdFx0LyoqIFRva2VuIHN0YXRlJ3MgYmVpbmcgZm9yY2VkLiAqL1xuXHRcdFx0aWYgKHVuZGVmaW5lZCAhPT0gZm9yY2UpIHtcblx0XHRcdFx0aWYgKGZvcmNlKSB7XG5cdFx0XHRcdFx0dGhhdC5hZGQodG9rZW4pO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoYXQucmVtb3ZlKHRva2VuKTtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0LyoqIFRva2VuIGFscmVhZHkgZXhpc3RzIGluIHRva2VuTGlzdC4gUmVtb3ZlIGl0LCBhbmQgcmV0dXJuIEZBTFNFLiAqL1xuXHRcdFx0aWYgKHRva2VuTWFwW3Rva2VuXSkge1xuXHRcdFx0XHR0aGF0LnJlbW92ZSh0b2tlbik7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0LyoqIE90aGVyd2lzZSwgYWRkIHRoZSB0b2tlbiBhbmQgcmV0dXJuIFRSVUUuICovXG5cdFx0XHR0aGF0LmFkZCh0b2tlbik7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9O1xuXG5cdFx0dGhhdC5mb3JFYWNoID0gQXJyYXkucHJvdG90eXBlLmZvckVhY2g7XG5cblx0XHRyZXR1cm4gdGhhdDtcblx0fTtcblxuXHRyZXR1cm4gX0RPTVRva2VuTGlzdDtcbn0oKSk7XG5leHBvcnQgZGVmYXVsdCBfRE9NVG9rZW5MaXN0O1xuIiwgImltcG9ydCBfRE9NVG9rZW5MaXN0IGZyb20gXCJAbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19ET01Ub2tlbkxpc3RcIjtcbihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwiRE9NVG9rZW5MaXN0XCJpbiBzZWxmJiZmdW5jdGlvbihlKXtyZXR1cm4hKFwiY2xhc3NMaXN0XCJpbiBlKXx8IWUuY2xhc3NMaXN0LnRvZ2dsZShcInhcIiwhMSkmJiFlLmNsYXNzTmFtZX0oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInhcIikpXG4pKSB7XG4vLyBET01Ub2tlbkxpc3Rcbi8qIGdsb2JhbCBfRE9NVG9rZW5MaXN0ICovXG4oZnVuY3Rpb24gKGdsb2JhbCkge1xuXHR2YXIgbmF0aXZlSW1wbCA9IFwiRE9NVG9rZW5MaXN0XCIgaW4gZ2xvYmFsICYmIGdsb2JhbC5ET01Ub2tlbkxpc3Q7XG5cblx0aWYgKFxuXHRcdFx0IW5hdGl2ZUltcGwgfHxcblx0XHRcdChcblx0XHRcdFx0ISFkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMgJiZcblx0XHRcdFx0ISFkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3N2ZycpICYmXG5cdFx0XHRcdCEoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJzdmdcIikuY2xhc3NMaXN0IGluc3RhbmNlb2YgRE9NVG9rZW5MaXN0KVxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdGdsb2JhbC5ET01Ub2tlbkxpc3QgPSBfRE9NVG9rZW5MaXN0O1xuXHR9XG5cblx0Ly8gQWRkIHNlY29uZCBhcmd1bWVudCB0byBuYXRpdmUgRE9NVG9rZW5MaXN0LnRvZ2dsZSgpIGlmIG5lY2Vzc2FyeVxuXHQoZnVuY3Rpb24gKCkge1xuXHRcdHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXHRcdGlmICghKCdjbGFzc0xpc3QnIGluIGUpKSByZXR1cm47XG5cdFx0ZS5jbGFzc0xpc3QudG9nZ2xlKCd4JywgZmFsc2UpO1xuXHRcdGlmICghZS5jbGFzc0xpc3QuY29udGFpbnMoJ3gnKSkgcmV0dXJuO1xuXHRcdGUuY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiB0b2dnbGUodG9rZW4gLyosIGZvcmNlKi8pIHtcblx0XHRcdHZhciBmb3JjZSA9IGFyZ3VtZW50c1sxXTtcblx0XHRcdGlmIChmb3JjZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHZhciBhZGQgPSAhdGhpcy5jb250YWlucyh0b2tlbik7XG5cdFx0XHRcdHRoaXNbYWRkID8gJ2FkZCcgOiAncmVtb3ZlJ10odG9rZW4pO1xuXHRcdFx0XHRyZXR1cm4gYWRkO1xuXHRcdFx0fVxuXHRcdFx0Zm9yY2UgPSAhIWZvcmNlO1xuXHRcdFx0dGhpc1tmb3JjZSA/ICdhZGQnIDogJ3JlbW92ZSddKHRva2VuKTtcblx0XHRcdHJldHVybiBmb3JjZTtcblx0XHR9O1xuXHR9KCkpO1xuXG5cdC8vIEFkZCBtdWx0aXBsZSBhcmd1bWVudHMgdG8gbmF0aXZlIERPTVRva2VuTGlzdC5hZGQoKSBpZiBuZWNlc3Nhcnlcblx0KGZ1bmN0aW9uICgpIHtcblx0XHR2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRpZiAoISgnY2xhc3NMaXN0JyBpbiBlKSkgcmV0dXJuO1xuXHRcdGUuY2xhc3NMaXN0LmFkZCgnYScsICdiJyk7XG5cdFx0aWYgKGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdiJykpIHJldHVybjtcblx0XHR2YXIgbmF0aXZlID0gZS5jbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlLmFkZDtcblx0XHRlLmNsYXNzTGlzdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cdFx0XHR2YXIgbCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRuYXRpdmUuY2FsbCh0aGlzLCBhcmdzW2ldKTtcblx0XHRcdH1cblx0XHR9O1xuXHR9KCkpO1xuXG5cdC8vIEFkZCBtdWx0aXBsZSBhcmd1bWVudHMgdG8gbmF0aXZlIERPTVRva2VuTGlzdC5yZW1vdmUoKSBpZiBuZWNlc3Nhcnlcblx0KGZ1bmN0aW9uICgpIHtcblx0XHR2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRpZiAoISgnY2xhc3NMaXN0JyBpbiBlKSkgcmV0dXJuO1xuXHRcdGUuY2xhc3NMaXN0LmFkZCgnYScpO1xuXHRcdGUuY2xhc3NMaXN0LmFkZCgnYicpO1xuXHRcdGUuY2xhc3NMaXN0LnJlbW92ZSgnYScsICdiJyk7XG5cdFx0aWYgKCFlLmNsYXNzTGlzdC5jb250YWlucygnYicpKSByZXR1cm47XG5cdFx0dmFyIG5hdGl2ZSA9IGUuY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5yZW1vdmU7XG5cdFx0ZS5jbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHZhciBhcmdzID0gYXJndW1lbnRzO1xuXHRcdFx0dmFyIGwgPSBhcmd1bWVudHMubGVuZ3RoO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0bmF0aXZlLmNhbGwodGhpcywgYXJnc1tpXSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fSgpKTtcblxufShzZWxmKSk7XG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICJpbXBvcnQgX0RPTVRva2VuTGlzdCBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fRE9NVG9rZW5MaXN0XCI7XG4oZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcInJlcGxhY2VcImluKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikuY2xhc3NMaXN0fHx7fSlcbikpIHtcbi8vIERPTVRva2VuTGlzdC5wcm90b3R5cGUucmVwbGFjZVxuKGZ1bmN0aW9uICgpIHtcblx0dmFyIGNsYXNzTGlzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLmNsYXNzTGlzdDtcblx0Y2xhc3NMaXN0ICYmIChjbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlLnJlcGxhY2UgPVxuXHRcdGZ1bmN0aW9uICh0b2tlbiwgbmV3VG9rZW4pIHtcblx0XHRcdHZhciB0b2tlblN0cmluZyA9ICcnICsgdG9rZW4sIG5ld1Rva2VuU3RyaW5nID0gJycgKyBuZXdUb2tlbjtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bmV3IERPTUV4Y2VwdGlvbigpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRzZWxmLkRPTUV4Y2VwdGlvbiA9IGZ1bmN0aW9uIChtZXNzYWdlLCBuYW1lKSB7XG5cdFx0XHRcdFx0aWYgKCEodGhpcyBpbnN0YW5jZW9mIERPTUV4Y2VwdGlvbikpIHJldHVybiBuZXcgRE9NRXhjZXB0aW9uKG1lc3NhZ2UsIG5hbWUpO1xuXHRcdFx0XHRcdHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG5cdFx0XHRcdFx0dGhpcy5uYW1lID0gbmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR2YXIgZXJyb3I7XG5cdFx0XHRpZiAoISh0b2tlblN0cmluZyAmJiBuZXdUb2tlblN0cmluZykpIGVycm9yID0gJ1N5bnRheEVycm9yJztcblx0XHRcdGlmICghZXJyb3IgJiYgKC9cXHMvLnRlc3QodG9rZW5TdHJpbmcpIHx8IC9cXHMvLnRlc3QobmV3VG9rZW5TdHJpbmcpKSkgZXJyb3IgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcblx0XHRcdGlmIChlcnJvcikgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignRE9NVG9rZW5MaXN0LnJlcGxhY2Ugd2FzIHByb3ZpZGVkIHRva2VucyBcXCcnICsgdG9rZW5TdHJpbmcgKyAnXFwnIGFuZCBcXCcnICsgbmV3VG9rZW5TdHJpbmcgKyAnXFwnJywgZXJyb3IpO1xuXG5cdFx0XHRpZiAoIXRoaXMuY29udGFpbnModG9rZW5TdHJpbmcpKSByZXR1cm4gZmFsc2U7XG5cblx0XHRcdC8vIHRva2Vuc1RvYmVNb3ZlZCBhcmUgXCJ0b2tlblN0cmluZ1wiIGFuZCBhbGwgdG9rZW5zIGZvdW5kIGFmdGVyIGl0XG5cdFx0XHR2YXIgdG9rZW5zVG9iZU1vdmVkID0gW107XG5cdFx0XHR2YXIgbmV3VG9rZW5Gb3VuZCA9IGZhbHNlO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgKytpKVxuXHRcdFx0XHRpZiAobmV3VG9rZW5TdHJpbmcgPT09IHRoaXMuaXRlbShpKSkgbmV3VG9rZW5Gb3VuZCA9IHRydWU7XG5cdFx0XHRcdGVsc2UgaWYgKHRva2VuU3RyaW5nID09PSB0aGlzLml0ZW0oaSkpIGJyZWFrO1xuXHRcdFx0Zm9yICg7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB0b2tlbnNUb2JlTW92ZWQucHVzaCh0aGlzLml0ZW0oaSkpO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IHRva2Vuc1RvYmVNb3ZlZC5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHR2YXIgY3VycmVudFRva2VuID0gdG9rZW5zVG9iZU1vdmVkW2ldO1xuXHRcdFx0XHRjdXJyZW50VG9rZW4gIT09IG5ld1Rva2VuU3RyaW5nICYmIHRoaXMucmVtb3ZlKGN1cnJlbnRUb2tlbik7XG5cdFx0XHRcdGN1cnJlbnRUb2tlbiAhPT0gdG9rZW5TdHJpbmcgJiYgdGhpcy5hZGQoY3VycmVudFRva2VuKTtcblx0XHRcdFx0Y3VycmVudFRva2VuID09PSB0b2tlblN0cmluZyAmJiAhbmV3VG9rZW5Gb3VuZCAmJiAodGhpcy5yZW1vdmUobmV3VG9rZW5TdHJpbmcpLCB0aGlzLmFkZChuZXdUb2tlblN0cmluZykpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHQpO1xufSkoKTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgImltcG9ydCBfRE9NVG9rZW5MaXN0IGZyb20gXCJAbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19ET01Ub2tlbkxpc3RcIjtcbihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwiRE9NVG9rZW5MaXN0XCJpbiBzZWxmJiZcImZvckVhY2hcImluIHNlbGYuRE9NVG9rZW5MaXN0LnByb3RvdHlwZVxuKSkge1xuLy8gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5mb3JFYWNoXG4oZnVuY3Rpb24gKGdsb2JhbCkge1xuXHRnbG9iYWwuRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5mb3JFYWNoID0gZ2xvYmFsLkFycmF5LnByb3RvdHlwZS5mb3JFYWNoO1xuXG5cdHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXHRpZiAoXG5cdFx0ZS5jbGFzc0xpc3QgJiZcblx0XHRlLmNsYXNzTGlzdC5jb25zdHJ1Y3RvciAmJlxuXHRcdGUuY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZSAmJlxuXHRcdCFlLmNsYXNzTGlzdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuZm9yRWFjaFxuXHQpIHtcblx0XHRlLmNsYXNzTGlzdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuZm9yRWFjaCA9IGdsb2JhbC5BcnJheS5wcm90b3R5cGUuZm9yRWFjaDtcblx0fVxufShzZWxmKSk7XG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICJpbXBvcnQgQXJyYXlJdGVyYXRvciBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fQXJyYXlJdGVyYXRvclwiO1xuaW1wb3J0IEl0ZXJhdG9yIGZyb20gXCJAbXJoZW5yeS9jb3JlLXdlYi9oZWxwZXJzL19JdGVyYXRvclwiO1xuaW1wb3J0IF9ET01Ub2tlbkxpc3QgZnJvbSBcIkBtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX0RPTVRva2VuTGlzdFwiO1xuKGZ1bmN0aW9uKHVuZGVmaW5lZCkge1xuaWYgKCEoXCJTeW1ib2xcImluIHNlbGYmJlwiaXRlcmF0b3JcImluIHNlbGYuU3ltYm9sJiZmdW5jdGlvbigpe3RyeXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpXG5yZXR1cm4hKCF0LmNsYXNzTGlzdHx8IXQuY2xhc3NMaXN0W3NlbGYuU3ltYm9sLml0ZXJhdG9yXSl9Y2F0Y2godCl7cmV0dXJuITF9fSgpXG4pKSB7XG4vLyBET01Ub2tlbkxpc3QucHJvdG90eXBlLkBAaXRlcmF0b3Jcbi8qIGdsb2JhbCBBcnJheUl0ZXJhdG9yICovXG4oZnVuY3Rpb24gKGdsb2JhbCkge1xuXHRnbG9iYWwuRE9NVG9rZW5MaXN0LnByb3RvdHlwZVtnbG9iYWwuU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gbmV3IEFycmF5SXRlcmF0b3IodGhpcyk7XG5cdH07XG5cblx0dmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cdGlmIChcblx0XHRlLmNsYXNzTGlzdCAmJlxuXHRcdGUuY2xhc3NMaXN0LmNvbnN0cnVjdG9yICYmXG5cdFx0ZS5jbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlICYmXG5cdFx0IWUuY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZVtnbG9iYWwuU3ltYm9sLml0ZXJhdG9yXVxuXHQpIHtcblx0XHRlLmNsYXNzTGlzdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGVbZ2xvYmFsLlN5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gbmV3IEFycmF5SXRlcmF0b3IodGhpcyk7XG5cdFx0fVxuXHR9XG59KHNlbGYpKTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgIlxuLy8gX211dGF0aW9uXG52YXIgX211dGF0aW9uID0gKGZ1bmN0aW9uICgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuXG5cdGZ1bmN0aW9uIGlzTm9kZShvYmplY3QpIHtcblx0XHQvLyBET00sIExldmVsMlxuXHRcdGlmICh0eXBlb2YgTm9kZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0cmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIE5vZGU7XG5cdFx0fVxuXHRcdC8vIE9sZGVyIGJyb3dzZXJzLCBjaGVjayBpZiBpdCBsb29rcyBsaWtlIGEgTm9kZSBpbnN0YW5jZSlcblx0XHRyZXR1cm4gb2JqZWN0ICYmXG5cdFx0XHR0eXBlb2Ygb2JqZWN0ID09PSBcIm9iamVjdFwiICYmXG5cdFx0XHRvYmplY3Qubm9kZU5hbWUgJiZcblx0XHRcdG9iamVjdC5ub2RlVHlwZSA+PSAxICYmXG5cdFx0XHRvYmplY3Qubm9kZVR5cGUgPD0gMTI7XG5cdH1cblxuXHQvLyBodHRwOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jbXV0YXRpb24tbWV0aG9kLW1hY3JvXG5cdHJldHVybiBmdW5jdGlvbiBtdXRhdGlvbihub2Rlcykge1xuXHRcdGlmIChub2Rlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHJldHVybiBpc05vZGUobm9kZXNbMF0pID8gbm9kZXNbMF0gOiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShub2Rlc1swXSArICcnKTtcblx0XHR9XG5cblx0XHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0ZnJhZ21lbnQuYXBwZW5kQ2hpbGQoaXNOb2RlKG5vZGVzW2ldKSA/IG5vZGVzW2ldIDogZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobm9kZXNbaV0gKyAnJykpO1xuXG5cdFx0fVxuXHRcdHJldHVybiBmcmFnbWVudDtcblx0fTtcbn0oKSk7XG5leHBvcnQgZGVmYXVsdCBfbXV0YXRpb247XG4iLCAiaW1wb3J0IF9tdXRhdGlvbiBmcm9tIFwiQG1yaGVucnkvY29yZS13ZWIvaGVscGVycy9fbXV0YXRpb25cIjtcbihmdW5jdGlvbih1bmRlZmluZWQpIHtcbmlmICghKFwiRWxlbWVudFwiaW4gc2VsZiYmXCJyZW1vdmVcImluIEVsZW1lbnQucHJvdG90eXBlXG4pKSB7XG4vLyBFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVcbkRvY3VtZW50LnByb3RvdHlwZS5yZW1vdmUgPSBFbGVtZW50LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoKSB7XG5cdGlmICh0aGlzLnBhcmVudE5vZGUpIHtcblx0XHR0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyk7XG5cdH1cbn07XG5cbi8vIE5vdCBhbGwgVUFzIHN1cHBvcnQgdGhlIFRleHQgY29uc3RydWN0b3IuICBQb2x5ZmlsbCBvbiB0aGUgVGV4dCBjb25zdHJ1Y3RvciBvbmx5IHdoZXJlIGl0IGV4aXN0c1xuLy8gVE9ETzogQWRkIGEgcG9seWZpbGwgZm9yIHRoZSBUZXh0IGNvbnN0cnVjdG9yLCBhbmQgbWFrZSBpdCBhIGRlcGVuZGVuY3kgb2YgdGhpcyBwb2x5ZmlsbC5cbmlmIChcIlRleHRcIiBpbiBzZWxmKSB7XG5cdFRleHQucHJvdG90eXBlLnJlbW92ZSA9IEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZTtcbn1cblxuKGZ1bmN0aW9uICgpIHtcblx0dmFyIG9yaWdpbmFsUmVtb3ZlID0gSFRNTFNlbGVjdEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZTtcblxuXHRIVE1MU2VsZWN0RWxlbWVudC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKGluZGV4KSB7XG5cdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBFbGVtZW50LnByb3RvdHlwZS5yZW1vdmUuY2FsbCh0aGlzKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9yaWdpbmFsUmVtb3ZlLmNhbGwodGhpcywgaW5kZXgpO1xuXHR9O1xufSkoKTtcbn19KS5jYWxsKCdvYmplY3QnID09PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdyB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIHNlbGYgJiYgc2VsZiB8fCAnb2JqZWN0JyA9PT0gdHlwZW9mIGdsb2JhbCAmJiBnbG9iYWwgfHwge30pO1xuIiwgImltcG9ydCBfbXV0YXRpb24gZnJvbSBcIkBtcmhlbnJ5L2NvcmUtd2ViL2hlbHBlcnMvX211dGF0aW9uXCI7XG4oZnVuY3Rpb24odW5kZWZpbmVkKSB7XG5pZiAoIShcInJlbW92ZVwiaW4gQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGVcbikpIHtcbi8vIENoYXJhY3RlckRhdGEucHJvdG90eXBlLnJlbW92ZVxuQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUucmVtb3ZlID0gRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlXG59fSkuY2FsbCgnb2JqZWN0JyA9PT0gdHlwZW9mIHdpbmRvdyAmJiB3aW5kb3cgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBzZWxmICYmIHNlbGYgfHwgJ29iamVjdCcgPT09IHR5cGVvZiBnbG9iYWwgJiYgZ2xvYmFsIHx8IHt9KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLWRlZmluZScpO1xuXG4vLyBgU3ltYm9sLml0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRhcmdldCwgU291cmNlLCBrZXkpIHtcbiAga2V5IGluIFRhcmdldCB8fCBkZWZpbmVQcm9wZXJ0eShUYXJnZXQsIGtleSwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFNvdXJjZVtrZXldOyB9LFxuICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IFNvdXJjZVtrZXldID0gaXQ7IH1cbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsICRkZWZhdWx0KSB7XG4gIHJldHVybiBhcmd1bWVudCA9PT0gdW5kZWZpbmVkID8gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyAnJyA6ICRkZWZhdWx0IDogdG9TdHJpbmcoYXJndW1lbnQpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG4vLyBgSW5zdGFsbEVycm9yQ2F1c2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWVycm9yLWNhdXNlLyNzZWMtZXJyb3JvYmplY3RzLWluc3RhbGwtZXJyb3ItY2F1c2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIG9wdGlvbnMpIHtcbiAgaWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmICdjYXVzZScgaW4gb3B0aW9ucykge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShPLCAnY2F1c2UnLCBvcHRpb25zLmNhdXNlKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciAkRXJyb3IgPSBFcnJvcjtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG5cbnZhciBURVNUID0gKGZ1bmN0aW9uIChhcmcpIHsgcmV0dXJuIFN0cmluZyhuZXcgJEVycm9yKGFyZykuc3RhY2spOyB9KSgnenhjYXNkJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSwgc29uYXJqcy9zbG93LXJlZ2V4IC0tIHNhZmVcbnZhciBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkgPSAvXFxuXFxzKmF0IFteOl0qOlteXFxuXSovO1xudmFyIElTX1Y4X09SX0NIQUtSQV9TVEFDSyA9IFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWS50ZXN0KFRFU1QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdGFjaywgZHJvcEVudHJpZXMpIHtcbiAgaWYgKElTX1Y4X09SX0NIQUtSQV9TVEFDSyAmJiB0eXBlb2Ygc3RhY2sgPT0gJ3N0cmluZycgJiYgISRFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSkge1xuICAgIHdoaWxlIChkcm9wRW50cmllcy0tKSBzdGFjayA9IHJlcGxhY2Uoc3RhY2ssIFY4X09SX0NIQUtSQV9TVEFDS19FTlRSWSwgJycpO1xuICB9IHJldHVybiBzdGFjaztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdhJyk7XG4gIGlmICghKCdzdGFjaycgaW4gZXJyb3IpKSByZXR1cm4gdHJ1ZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIDcpKTtcbiAgcmV0dXJuIGVycm9yLnN0YWNrICE9PSA3O1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjbGVhckVycm9yU3RhY2sgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXInKTtcbnZhciBFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZScpO1xuXG4vLyBub24tc3RhbmRhcmQgVjhcbnZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChlcnJvciwgQywgc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChFUlJPUl9TVEFDS19JTlNUQUxMQUJMRSkge1xuICAgIGlmIChjYXB0dXJlU3RhY2tUcmFjZSkgY2FwdHVyZVN0YWNrVHJhY2UoZXJyb3IsIEMpO1xuICAgIGVsc2UgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGVycm9yLCAnc3RhY2snLCBjbGVhckVycm9yU3RhY2soc3RhY2ssIGRyb3BFbnRyaWVzKSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xudmFyIHByb3h5QWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJveHktYWNjZXNzb3InKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgbm9ybWFsaXplU3RyaW5nQXJndW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudCcpO1xudmFyIGluc3RhbGxFcnJvckNhdXNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UnKTtcbnZhciBpbnN0YWxsRXJyb3JTdGFjayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoRlVMTF9OQU1FLCB3cmFwcGVyLCBGT1JDRUQsIElTX0FHR1JFR0FURV9FUlJPUikge1xuICB2YXIgU1RBQ0tfVFJBQ0VfTElNSVQgPSAnc3RhY2tUcmFjZUxpbWl0JztcbiAgdmFyIE9QVElPTlNfUE9TSVRJT04gPSBJU19BR0dSRUdBVEVfRVJST1IgPyAyIDogMTtcbiAgdmFyIHBhdGggPSBGVUxMX05BTUUuc3BsaXQoJy4nKTtcbiAgdmFyIEVSUk9SX05BTUUgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gIHZhciBPcmlnaW5hbEVycm9yID0gZ2V0QnVpbHRJbi5hcHBseShudWxsLCBwYXRoKTtcblxuICBpZiAoIU9yaWdpbmFsRXJyb3IpIHJldHVybjtcblxuICB2YXIgT3JpZ2luYWxFcnJvclByb3RvdHlwZSA9IE9yaWdpbmFsRXJyb3IucHJvdG90eXBlO1xuXG4gIC8vIFY4IDkuMy0gYnVnIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyMDA2XG4gIGlmICghSVNfUFVSRSAmJiBoYXNPd24oT3JpZ2luYWxFcnJvclByb3RvdHlwZSwgJ2NhdXNlJykpIGRlbGV0ZSBPcmlnaW5hbEVycm9yUHJvdG90eXBlLmNhdXNlO1xuXG4gIGlmICghRk9SQ0VEKSByZXR1cm4gT3JpZ2luYWxFcnJvcjtcblxuICB2YXIgQmFzZUVycm9yID0gZ2V0QnVpbHRJbignRXJyb3InKTtcblxuICB2YXIgV3JhcHBlZEVycm9yID0gd3JhcHBlcihmdW5jdGlvbiAoYSwgYikge1xuICAgIHZhciBtZXNzYWdlID0gbm9ybWFsaXplU3RyaW5nQXJndW1lbnQoSVNfQUdHUkVHQVRFX0VSUk9SID8gYiA6IGEsIHVuZGVmaW5lZCk7XG4gICAgdmFyIHJlc3VsdCA9IElTX0FHR1JFR0FURV9FUlJPUiA/IG5ldyBPcmlnaW5hbEVycm9yKGEpIDogbmV3IE9yaWdpbmFsRXJyb3IoKTtcbiAgICBpZiAobWVzc2FnZSAhPT0gdW5kZWZpbmVkKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0LCAnbWVzc2FnZScsIG1lc3NhZ2UpO1xuICAgIGluc3RhbGxFcnJvclN0YWNrKHJlc3VsdCwgV3JhcHBlZEVycm9yLCByZXN1bHQuc3RhY2ssIDIpO1xuICAgIGlmICh0aGlzICYmIGlzUHJvdG90eXBlT2YoT3JpZ2luYWxFcnJvclByb3RvdHlwZSwgdGhpcykpIGluaGVyaXRJZlJlcXVpcmVkKHJlc3VsdCwgdGhpcywgV3JhcHBlZEVycm9yKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IE9QVElPTlNfUE9TSVRJT04pIGluc3RhbGxFcnJvckNhdXNlKHJlc3VsdCwgYXJndW1lbnRzW09QVElPTlNfUE9TSVRJT05dKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcblxuICBXcmFwcGVkRXJyb3IucHJvdG90eXBlID0gT3JpZ2luYWxFcnJvclByb3RvdHlwZTtcblxuICBpZiAoRVJST1JfTkFNRSAhPT0gJ0Vycm9yJykge1xuICAgIGlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoV3JhcHBlZEVycm9yLCBCYXNlRXJyb3IpO1xuICAgIGVsc2UgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhXcmFwcGVkRXJyb3IsIEJhc2VFcnJvciwgeyBuYW1lOiB0cnVlIH0pO1xuICB9IGVsc2UgaWYgKERFU0NSSVBUT1JTICYmIFNUQUNLX1RSQUNFX0xJTUlUIGluIE9yaWdpbmFsRXJyb3IpIHtcbiAgICBwcm94eUFjY2Vzc29yKFdyYXBwZWRFcnJvciwgT3JpZ2luYWxFcnJvciwgU1RBQ0tfVFJBQ0VfTElNSVQpO1xuICAgIHByb3h5QWNjZXNzb3IoV3JhcHBlZEVycm9yLCBPcmlnaW5hbEVycm9yLCAncHJlcGFyZVN0YWNrVHJhY2UnKTtcbiAgfVxuXG4gIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoV3JhcHBlZEVycm9yLCBPcmlnaW5hbEVycm9yKTtcblxuICBpZiAoIUlTX1BVUkUpIHRyeSB7XG4gICAgLy8gU2FmYXJpIDEzLSBidWc6IFdlYkFzc2VtYmx5IGVycm9ycyBkb2VzIG5vdCBoYXZlIGEgcHJvcGVyIGAubmFtZWBcbiAgICBpZiAoT3JpZ2luYWxFcnJvclByb3RvdHlwZS5uYW1lICE9PSBFUlJPUl9OQU1FKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoT3JpZ2luYWxFcnJvclByb3RvdHlwZSwgJ25hbWUnLCBFUlJPUl9OQU1FKTtcbiAgICB9XG4gICAgT3JpZ2luYWxFcnJvclByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdyYXBwZWRFcnJvcjtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG4gIHJldHVybiBXcmFwcGVkRXJyb3I7XG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBmdW5jdGlvbnMgYC5sZW5ndGhgICovXG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93cmFwLWVycm9yLWNvbnN0cnVjdG9yLXdpdGgtY2F1c2UnKTtcblxudmFyIFdFQl9BU1NFTUJMWSA9ICdXZWJBc3NlbWJseSc7XG52YXIgV2ViQXNzZW1ibHkgPSBnbG9iYWxUaGlzW1dFQl9BU1NFTUJMWV07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1lcnJvci1jYXVzZSAtLSBmZWF0dXJlIGRldGVjdGlvblxudmFyIEZPUkNFRCA9IG5ldyBFcnJvcignZScsIHsgY2F1c2U6IDcgfSkuY2F1c2UgIT09IDc7XG5cbnZhciBleHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlciA9IGZ1bmN0aW9uIChFUlJPUl9OQU1FLCB3cmFwcGVyKSB7XG4gIHZhciBPID0ge307XG4gIE9bRVJST1JfTkFNRV0gPSB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZShFUlJPUl9OQU1FLCB3cmFwcGVyLCBGT1JDRUQpO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIE8pO1xufTtcblxudmFyIGV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIgPSBmdW5jdGlvbiAoRVJST1JfTkFNRSwgd3JhcHBlcikge1xuICBpZiAoV2ViQXNzZW1ibHkgJiYgV2ViQXNzZW1ibHlbRVJST1JfTkFNRV0pIHtcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bRVJST1JfTkFNRV0gPSB3cmFwRXJyb3JDb25zdHJ1Y3RvcldpdGhDYXVzZShXRUJfQVNTRU1CTFkgKyAnLicgKyBFUlJPUl9OQU1FLCB3cmFwcGVyLCBGT1JDRUQpO1xuICAgICQoeyB0YXJnZXQ6IFdFQl9BU1NFTUJMWSwgc3RhdDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCBPKTtcbiAgfVxufTtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1uYXRpdmVlcnJvclxuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ0Vycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdFdmFsRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRXZhbEVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdSYW5nZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFJhbmdlRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ1JlZmVyZW5jZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFJlZmVyZW5jZUVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdTeW50YXhFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTeW50YXhFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignVHlwZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFR5cGVFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignVVJJRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVVJJRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0V2ViQXNzZW1ibHlFcnJvckNhdXNlV3JhcHBlcignQ29tcGlsZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIENvbXBpbGVFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRXZWJBc3NlbWJseUVycm9yQ2F1c2VXcmFwcGVyKCdMaW5rRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gTGlua0Vycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIoJ1J1bnRpbWVFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBSdW50aW1lRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgbm9ybWFsaXplU3RyaW5nQXJndW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudCcpO1xuXG52YXIgbmF0aXZlRXJyb3JUb1N0cmluZyA9IEVycm9yLnByb3RvdHlwZS50b1N0cmluZztcblxudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIENocm9tZSAzMi0gaW5jb3JyZWN0bHkgY2FsbCBhY2Nlc3NvclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlLCBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIHZhciBvYmplY3QgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ25hbWUnLCB7IGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMgPT09IG9iamVjdDtcbiAgICB9IH0pKTtcbiAgICBpZiAobmF0aXZlRXJyb3JUb1N0cmluZy5jYWxsKG9iamVjdCkgIT09ICd0cnVlJykgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gRkYxMC0gZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIG5vbi1zdHJpbmdzXG4gIHJldHVybiBuYXRpdmVFcnJvclRvU3RyaW5nLmNhbGwoeyBtZXNzYWdlOiAxLCBuYW1lOiAyIH0pICE9PSAnMjogMSdcbiAgICAvLyBJRTggZG9lcyBub3QgcHJvcGVybHkgaGFuZGxlIGRlZmF1bHRzXG4gICAgfHwgbmF0aXZlRXJyb3JUb1N0cmluZy5jYWxsKHt9KSAhPT0gJ0Vycm9yJztcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IElOQ09SUkVDVF9UT19TVFJJTkcgPyBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgdmFyIE8gPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIG5hbWUgPSBub3JtYWxpemVTdHJpbmdBcmd1bWVudChPLm5hbWUsICdFcnJvcicpO1xuICB2YXIgbWVzc2FnZSA9IG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KE8ubWVzc2FnZSk7XG4gIHJldHVybiAhbmFtZSA/IG1lc3NhZ2UgOiAhbWVzc2FnZSA/IG5hbWUgOiBuYW1lICsgJzogJyArIG1lc3NhZ2U7XG59IDogbmF0aXZlRXJyb3JUb1N0cmluZztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBlcnJvclRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vycm9yLXRvLXN0cmluZycpO1xuXG52YXIgRXJyb3JQcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XG5cbi8vIGBFcnJvci5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBmaXhcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZXJyb3IucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoRXJyb3JQcm90b3R5cGUudG9TdHJpbmcgIT09IGVycm9yVG9TdHJpbmcpIHtcbiAgZGVmaW5lQnVpbHRJbihFcnJvclByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZXJyb3JUb1N0cmluZyk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIC8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuICAvLyBkZW9wdGltaXphdGlvbiBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjc3XG4gIHJldHVybiBWOF9WRVJTSU9OID49IDUxIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gYXJyYXkuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGZvbzogMSB9O1xuICAgIH07XG4gICAgcmV0dXJuIGFycmF5W01FVEhPRF9OQU1FXShCb29sZWFuKS5mb28gIT09IDE7XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbHRlcjtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnZmlsdGVyJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSwgYXJndW1lbnQpIHtcbiAgdmFyIG1ldGhvZCA9IFtdW01FVEhPRF9OQU1FXTtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgbWV0aG9kLmNhbGwobnVsbCwgYXJndW1lbnQgfHwgZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSwgMSk7XG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZm9yRWFjaDtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QnKTtcblxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdmb3JFYWNoJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5mb3JlYWNoXG5tb2R1bGUuZXhwb3J0cyA9ICFTVFJJQ1RfTUVUSE9EID8gZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbn0gOiBbXS5mb3JFYWNoO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2gnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtZm9yZWFjaCAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBbXS5mb3JFYWNoICE9PSBmb3JFYWNoIH0sIHtcbiAgZm9yRWFjaDogZm9yRWFjaFxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBraW5kLCB2YWx1ZSkge1xuICB2YXIgaW5uZXJSZXN1bHQsIGlubmVyRXJyb3I7XG4gIGFuT2JqZWN0KGl0ZXJhdG9yKTtcbiAgdHJ5IHtcbiAgICBpbm5lclJlc3VsdCA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgIGlmICghaW5uZXJSZXN1bHQpIHtcbiAgICAgIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaW5uZXJSZXN1bHQgPSBjYWxsKGlubmVyUmVzdWx0LCBpdGVyYXRvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW5uZXJFcnJvciA9IHRydWU7XG4gICAgaW5uZXJSZXN1bHQgPSBlcnJvcjtcbiAgfVxuICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gIGlmIChpbm5lckVycm9yKSB0aHJvdyBpbm5lclJlc3VsdDtcbiAgYW5PYmplY3QoaW5uZXJSZXN1bHQpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIEVOVFJJRVMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRU5UUklFUyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2tleV0gPSB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdCkpIHJldHVybiBnZXRNZXRob2QoaXQsIElURVJBVE9SKVxuICAgIHx8IGdldE1ldGhvZChpdCwgJ0BAaXRlcmF0b3InKVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCwgdXNpbmdJdGVyYXRvcikge1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGdldEl0ZXJhdG9yTWV0aG9kKGFyZ3VtZW50KSA6IHVzaW5nSXRlcmF0b3I7XG4gIGlmIChhQ2FsbGFibGUoaXRlcmF0b3JNZXRob2QpKSByZXR1cm4gYW5PYmplY3QoY2FsbChpdGVyYXRvck1ldGhvZCwgYXJndW1lbnQpKTtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3InKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbnZhciAkQXJyYXkgPSBBcnJheTtcblxuLy8gYEFycmF5LmZyb21gIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5mcm9tXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICB2YXIgSVNfQ09OU1RSVUNUT1IgPSBpc0NvbnN0cnVjdG9yKHRoaXMpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIG1hcGZuID0gYXJndW1lbnRzTGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICBpZiAobWFwcGluZykgbWFwZm4gPSBiaW5kKG1hcGZuLCBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2QoTyk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3IsIG5leHQsIHZhbHVlO1xuICAvLyBpZiB0aGUgdGFyZ2V0IGlzIG5vdCBpdGVyYWJsZSBvciBpdCdzIGFuIGFycmF5IHdpdGggdGhlIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2UgYSBzaW1wbGUgY2FzZVxuICBpZiAoaXRlcmF0b3JNZXRob2QgJiYgISh0aGlzID09PSAkQXJyYXkgJiYgaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJhdG9yTWV0aG9kKSkpIHtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKCkgOiBbXTtcbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKE8sIGl0ZXJhdG9yTWV0aG9kKTtcbiAgICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgICBmb3IgKDshKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyhpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcyhsZW5ndGgpIDogJEFycmF5KGxlbmd0aCk7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XTtcbiAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIGNhbGxlZCA9IDA7XG4gIHZhciBpdGVyYXRvcldpdGhSZXR1cm4gPSB7XG4gICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZG9uZTogISFjYWxsZWQrKyB9O1xuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICgpIHtcbiAgICAgIFNBRkVfQ0xPU0lORyA9IHRydWU7XG4gICAgfVxuICB9O1xuICBpdGVyYXRvcldpdGhSZXR1cm5bSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSwgbm8tdGhyb3ctbGl0ZXJhbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhdG9yV2l0aFJldHVybiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgU0tJUF9DTE9TSU5HKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFTS0lQX0NMT1NJTkcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChlcnJvcikgeyByZXR1cm4gZmFsc2U7IH0gLy8gd29ya2Fyb3VuZCBvZiBvbGQgV2ViS2l0ICsgYGV2YWxgIGJ1Z1xuICB2YXIgSVRFUkFUSU9OX1NVUFBPUlQgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgb2JqZWN0ID0ge307XG4gICAgb2JqZWN0W0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4geyBkb25lOiBJVEVSQVRJT05fU1VQUE9SVCA9IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9O1xuICAgIGV4ZWMob2JqZWN0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gSVRFUkFUSU9OX1NVUFBPUlQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tYXJyYXktZnJvbSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhYmxlKTtcbn0pO1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGZyb206IGZyb21cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG52YXIgVU5TQ09QQUJMRVMgPSB3ZWxsS25vd25TeW1ib2woJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbi8vIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEB1bnNjb3BhYmxlc1xuaWYgKEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXSA9PT0gdW5kZWZpbmVkKSB7XG4gIGRlZmluZVByb3BlcnR5KEFycmF5UHJvdG90eXBlLCBVTlNDT1BBQkxFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogY3JlYXRlKG51bGwpXG4gIH0pO1xufVxuXG4vLyBhZGQgYSBrZXkgdG8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b3R5cGVbVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmNsdWRlcztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbi8vIEZGOTkrIGJ1Z1xudmFyIEJST0tFTl9PTl9TUEFSU0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtaW5jbHVkZXMgLS0gZGV0ZWN0aW9uXG4gIHJldHVybiAhQXJyYXkoMSkuaW5jbHVkZXMoKTtcbn0pO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCUk9LRU5fT05fU1BBUlNFIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2luY2x1ZGVzJyk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWluZGV4b2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UnKTtcbnZhciAkaW5kZXhPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluZGV4T2Y7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBuYXRpdmVJbmRleE9mID0gdW5jdXJyeVRoaXMoW10uaW5kZXhPZik7XG5cbnZhciBORUdBVElWRV9aRVJPID0gISFuYXRpdmVJbmRleE9mICYmIDEgLyBuYXRpdmVJbmRleE9mKFsxXSwgMSwgLTApIDwgMDtcbnZhciBGT1JDRUQgPSBORUdBVElWRV9aRVJPIHx8ICFhcnJheU1ldGhvZElzU3RyaWN0KCdpbmRleE9mJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgdmFyIGZyb21JbmRleCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBORUdBVElWRV9aRVJPXG4gICAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgICA/IG5hdGl2ZUluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgZnJvbUluZGV4KSB8fCAwXG4gICAgICA6ICRpbmRleE9mKHRoaXMsIHNlYXJjaEVsZW1lbnQsIGZyb21JbmRleCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IEYoKSkgIT09IEYucHJvdG90eXBlO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgSUVfUFJPVE8gPSBzaGFyZWRLZXkoJ0lFX1BST1RPJyk7XG52YXIgJE9iamVjdCA9IE9iamVjdDtcbnZhciBPYmplY3RQcm90b3R5cGUgPSAkT2JqZWN0LnByb3RvdHlwZTtcblxuLy8gYE9iamVjdC5nZXRQcm90b3R5cGVPZmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRwcm90b3R5cGVvZlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA/ICRPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAoTykge1xuICB2YXIgb2JqZWN0ID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXNPd24ob2JqZWN0LCBJRV9QUk9UTykpIHJldHVybiBvYmplY3RbSUVfUFJPVE9dO1xuICB2YXIgY29uc3RydWN0b3IgPSBvYmplY3QuY29uc3RydWN0b3I7XG4gIGlmIChpc0NhbGxhYmxlKGNvbnN0cnVjdG9yKSAmJiBvYmplY3QgaW5zdGFuY2VvZiBjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mICRPYmplY3QgPyBPYmplY3RQcm90b3R5cGUgOiBudWxsO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1vYmplY3RcbnZhciBJdGVyYXRvclByb3RvdHlwZSwgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBhcnJheUl0ZXJhdG9yO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1hcnJheS1wcm90b3R5cGUta2V5cyAtLSBzYWZlICovXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbnZhciBORVdfSVRFUkFUT1JfUFJPVE9UWVBFID0gIWlzT2JqZWN0KEl0ZXJhdG9yUHJvdG90eXBlKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZXN0ID0ge307XG4gIC8vIEZGNDQtIGxlZ2FjeSBpdGVyYXRvcnMgY2FzZVxuICByZXR1cm4gSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdLmNhbGwodGVzdCkgIT09IHRlc3Q7XG59KTtcblxuaWYgKE5FV19JVEVSQVRPUl9QUk9UT1RZUEUpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5lbHNlIGlmIChJU19QVVJFKSBJdGVyYXRvclByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLUBAaXRlcmF0b3JcbmlmICghaXNDYWxsYWJsZShJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gIGRlZmluZUJ1aWx0SW4oSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCwgRU5VTUVSQUJMRV9ORVhUKSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoKyFFTlVNRVJBQkxFX05FWFQsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBGdW5jdGlvbk5hbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5QUk9QRVI7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuQ09ORklHVVJBQkxFO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgJiYgS0lORCBpbiBJdGVyYWJsZVByb3RvdHlwZSkgcmV0dXJuIEl0ZXJhYmxlUHJvdG90eXBlW0tJTkRdO1xuXG4gICAgc3dpdGNoIChLSU5EKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgICAgY2FzZSBFTlRSSUVTOiByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMsIEtJTkQpOyB9O1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzKTsgfTtcbiAgfTtcblxuICB2YXIgVE9fU1RSSU5HX1RBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IGZhbHNlO1xuICB2YXIgSXRlcmFibGVQcm90b3R5cGUgPSBJdGVyYWJsZS5wcm90b3R5cGU7XG4gIHZhciBuYXRpdmVJdGVyYXRvciA9IEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXVxuICAgIHx8IEl0ZXJhYmxlUHJvdG90eXBlWydAQGl0ZXJhdG9yJ11cbiAgICB8fCBERUZBVUxUICYmIEl0ZXJhYmxlUHJvdG90eXBlW0RFRkFVTFRdO1xuICB2YXIgZGVmYXVsdEl0ZXJhdG9yID0gIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgbmF0aXZlSXRlcmF0b3IgfHwgZ2V0SXRlcmF0aW9uTWV0aG9kKERFRkFVTFQpO1xuICB2YXIgYW55TmF0aXZlSXRlcmF0b3IgPSBOQU1FID09PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0NhbGxhYmxlKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gICAgICAgICAgZGVmaW5lQnVpbHRJbihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmIChJU19QVVJFKSBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpeCBBcnJheS5wcm90b3R5cGUueyB2YWx1ZXMsIEBAaXRlcmF0b3IgfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIERFRkFVTFQgPT09IFZBTFVFUyAmJiBuYXRpdmVJdGVyYXRvciAmJiBuYXRpdmVJdGVyYXRvci5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBpZiAoIUlTX1BVUkUgJiYgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShJdGVyYWJsZVByb3RvdHlwZSwgJ25hbWUnLCBWQUxVRVMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSB0cnVlO1xuICAgICAgZGVmYXVsdEl0ZXJhdG9yID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gY2FsbChuYXRpdmVJdGVyYXRvciwgdGhpcyk7IH07XG4gICAgfVxuICB9XG5cbiAgLy8gZXhwb3J0IGFkZGl0aW9uYWwgbWV0aG9kc1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IGdldEl0ZXJhdGlvbk1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gZGVmYXVsdEl0ZXJhdG9yIDogZ2V0SXRlcmF0aW9uTWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogZ2V0SXRlcmF0aW9uTWV0aG9kKEVOVFJJRVMpXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKEtFWSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfHwgIShLRVkgaW4gSXRlcmFibGVQcm90b3R5cGUpKSB7XG4gICAgICAgIGRlZmluZUJ1aWx0SW4oSXRlcmFibGVQcm90b3R5cGUsIEtFWSwgbWV0aG9kc1tLRVldKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgJCh7IHRhcmdldDogTkFNRSwgcHJvdG86IHRydWUsIGZvcmNlZDogQlVHR1lfU0FGQVJJX0lURVJBVE9SUyB8fCBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgfSwgbWV0aG9kcyk7XG4gIH1cblxuICAvLyBkZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghSVNfUFVSRSB8fCBGT1JDRUQpICYmIEl0ZXJhYmxlUHJvdG90eXBlW0lURVJBVE9SXSAhPT0gZGVmYXVsdEl0ZXJhdG9yKSB7XG4gICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgSVRFUkFUT1IsIGRlZmF1bHRJdGVyYXRvciwgeyBuYW1lOiBERUZBVUxUIH0pO1xuICB9XG4gIEl0ZXJhdG9yc1tOQU1FXSA9IGRlZmF1bHRJdGVyYXRvcjtcblxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYENyZWF0ZUl0ZXJSZXN1bHRPYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVpdGVycmVzdWx0b2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh2YWx1ZSwgZG9uZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6IGRvbmUgfTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmtleXNcbi8vIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWFycmF5aXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lSXRlcmF0b3IoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBBUlJBWV9JVEVSQVRPUixcbiAgICB0YXJnZXQ6IHRvSW5kZXhlZE9iamVjdChpdGVyYXRlZCksIC8vIHRhcmdldFxuICAgIGluZGV4OiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICAgIGtpbmQ6IGtpbmQgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICB9KTtcbi8vIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4Kys7XG4gIGlmICghdGFyZ2V0IHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpIHtcbiAgICBzdGF0ZS50YXJnZXQgPSBudWxsO1xuICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cbiAgc3dpdGNoIChzdGF0ZS5raW5kKSB7XG4gICAgY2FzZSAna2V5cyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGluZGV4LCBmYWxzZSk7XG4gICAgY2FzZSAndmFsdWVzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodGFyZ2V0W2luZGV4XSwgZmFsc2UpO1xuICB9IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtpbmRleCwgdGFyZ2V0W2luZGV4XV0sIGZhbHNlKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxudmFyIHZhbHVlcyA9IEl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG4vLyBWOCB+IENocm9tZSA0NS0gYnVnXG5pZiAoIUlTX1BVUkUgJiYgREVTQ1JJUFRPUlMgJiYgdmFsdWVzLm5hbWUgIT09ICd2YWx1ZXMnKSB0cnkge1xuICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZXMsICduYW1lJywgeyB2YWx1ZTogJ3ZhbHVlcycgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFycmF5TWV0aG9kSXNTdHJpY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWlzLXN0cmljdCcpO1xuXG52YXIgbmF0aXZlSm9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG52YXIgRVMzX1NUUklOR1MgPSBJbmRleGVkT2JqZWN0ICE9PSBPYmplY3Q7XG52YXIgRk9SQ0VEID0gRVMzX1NUUklOR1MgfHwgIWFycmF5TWV0aG9kSXNTdHJpY3QoJ2pvaW4nLCAnLCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmpvaW5gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuam9pblxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgam9pbjogZnVuY3Rpb24gam9pbihzZXBhcmF0b3IpIHtcbiAgICByZXR1cm4gbmF0aXZlSm9pbih0b0luZGV4ZWRPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJG1hcCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5tYXA7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ21hcCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5tYXBcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbnZhciBSRURVQ0VfRU1QVFkgPSAnUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSc7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyByZWR1Y2UsIHJlZHVjZVJpZ2h0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfUklHSFQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhcmd1bWVudHNMZW5ndGgsIG1lbW8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoYXQpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgYUNhbGxhYmxlKGNhbGxiYWNrZm4pO1xuICAgIGlmIChsZW5ndGggPT09IDAgJiYgYXJndW1lbnRzTGVuZ3RoIDwgMikgdGhyb3cgbmV3ICRUeXBlRXJyb3IoUkVEVUNFX0VNUFRZKTtcbiAgICB2YXIgaW5kZXggPSBJU19SSUdIVCA/IGxlbmd0aCAtIDEgOiAwO1xuICAgIHZhciBpID0gSVNfUklHSFQgPyAtMSA6IDE7XG4gICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA8IDIpIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaW5kZXggKz0gaTtcbiAgICAgIGlmIChJU19SSUdIVCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihSRURVQ0VfRU1QVFkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKDtJU19SSUdIVCA/IGluZGV4ID49IDAgOiBsZW5ndGggPiBpbmRleDsgaW5kZXggKz0gaSkgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBjYWxsYmFja2ZuKG1lbW8sIHNlbGZbaW5kZXhdLCBpbmRleCwgTyk7XG4gICAgfVxuICAgIHJldHVybiBtZW1vO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4gIGxlZnQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VyaWdodFxuICByaWdodDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGdsb2JhbCBCdW4sIERlbm8gLS0gZGV0ZWN0aW9uICovXG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC11c2VyLWFnZW50Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xuXG52YXIgdXNlckFnZW50U3RhcnRzV2l0aCA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIHVzZXJBZ2VudC5zbGljZSgwLCBzdHJpbmcubGVuZ3RoKSA9PT0gc3RyaW5nO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24gKCkge1xuICBpZiAodXNlckFnZW50U3RhcnRzV2l0aCgnQnVuLycpKSByZXR1cm4gJ0JVTic7XG4gIGlmICh1c2VyQWdlbnRTdGFydHNXaXRoKCdDbG91ZGZsYXJlLVdvcmtlcnMnKSkgcmV0dXJuICdDTE9VREZMQVJFJztcbiAgaWYgKHVzZXJBZ2VudFN0YXJ0c1dpdGgoJ0Rlbm8vJykpIHJldHVybiAnREVOTyc7XG4gIGlmICh1c2VyQWdlbnRTdGFydHNXaXRoKCdOb2RlLmpzLycpKSByZXR1cm4gJ05PREUnO1xuICBpZiAoZ2xvYmFsVGhpcy5CdW4gJiYgdHlwZW9mIEJ1bi52ZXJzaW9uID09ICdzdHJpbmcnKSByZXR1cm4gJ0JVTic7XG4gIGlmIChnbG9iYWxUaGlzLkRlbm8gJiYgdHlwZW9mIERlbm8udmVyc2lvbiA9PSAnb2JqZWN0JykgcmV0dXJuICdERU5PJztcbiAgaWYgKGNsYXNzb2YoZ2xvYmFsVGhpcy5wcm9jZXNzKSA9PT0gJ3Byb2Nlc3MnKSByZXR1cm4gJ05PREUnO1xuICBpZiAoZ2xvYmFsVGhpcy53aW5kb3cgJiYgZ2xvYmFsVGhpcy5kb2N1bWVudCkgcmV0dXJuICdCUk9XU0VSJztcbiAgcmV0dXJuICdSRVNUJztcbn0pKCk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIEVOVklST05NRU5UID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Vudmlyb25tZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRU5WSVJPTk1FTlQgPT09ICdOT0RFJztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXJlZHVjZScpLmxlZnQ7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG52YXIgQ0hST01FX1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbicpO1xudmFyIElTX05PREUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtaXMtbm9kZScpO1xuXG4vLyBDaHJvbWUgODAtODIgaGFzIGEgY3JpdGljYWwgYnVnXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDQ5OTgyXG52YXIgQ0hST01FX0JVRyA9ICFJU19OT0RFICYmIENIUk9NRV9WRVJTSU9OID4gNzkgJiYgQ0hST01FX1ZFUlNJT04gPCA4MztcbnZhciBGT1JDRUQgPSBDSFJPTUVfQlVHIHx8ICFhcnJheU1ldGhvZElzU3RyaWN0KCdyZWR1Y2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUucmVkdWNlXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgbGVuZ3RoLCBsZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciBuYXRpdmVTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NsaWNlJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc2xpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc2xpY2Vcbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZCwgbGVuZ3RoKTtcbiAgICAvLyBpbmxpbmUgYEFycmF5U3BlY2llc0NyZWF0ZWAgZm9yIHVzYWdlIG5hdGl2ZSBgQXJyYXkjc2xpY2VgIHdoZXJlIGl0J3MgcG9zc2libGVcbiAgICB2YXIgQ29uc3RydWN0b3IsIHJlc3VsdCwgbjtcbiAgICBpZiAoaXNBcnJheShPKSkge1xuICAgICAgQ29uc3RydWN0b3IgPSBPLmNvbnN0cnVjdG9yO1xuICAgICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICAgIGlmIChpc0NvbnN0cnVjdG9yKENvbnN0cnVjdG9yKSAmJiAoQ29uc3RydWN0b3IgPT09ICRBcnJheSB8fCBpc0FycmF5KENvbnN0cnVjdG9yLnByb3RvdHlwZSkpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcltTUEVDSUVTXTtcbiAgICAgICAgaWYgKENvbnN0cnVjdG9yID09PSBudWxsKSBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gJEFycmF5IHx8IENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZVNsaWNlKE8sIGssIGZpbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdCA9IG5ldyAoQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCA/ICRBcnJheSA6IENvbnN0cnVjdG9yKShtYXgoZmluIC0gaywgMCkpO1xuICAgIGZvciAobiA9IDA7IGsgPCBmaW47IGsrKywgbisrKSBpZiAoayBpbiBPKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIG4sIE9ba10pO1xuICAgIHJlc3VsdC5sZW5ndGggPSBuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIGlmICghZGVsZXRlIE9bUF0pIHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3QgZGVsZXRlIHByb3BlcnR5ICcgKyB0cnlUb1N0cmluZyhQKSArICcgb2YgJyArIHRyeVRvU3RyaW5nKE8pKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBzZXRBcnJheUxlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoJyk7XG52YXIgZGVsZXRlUHJvcGVydHlPclRocm93ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdycpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyJyk7XG5cbi8vIElFOC1cbnZhciBJTkNPUlJFQ1RfUkVTVUxUID0gW10udW5zaGlmdCgwKSAhPT0gMTtcblxuLy8gVjggfiBDaHJvbWUgPCA3MSBhbmQgU2FmYXJpIDw9IDE1LjQsIEZGIDwgMjMgdGhyb3dzIEludGVybmFsRXJyb3JcbnZhciBwcm9wZXJFcnJvck9uTm9uV3JpdGFibGVMZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCAnbGVuZ3RoJywgeyB3cml0YWJsZTogZmFsc2UgfSkudW5zaGlmdCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgfVxufTtcblxudmFyIEZPUkNFRCA9IElOQ09SUkVDVF9SRVNVTFQgfHwgIXByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCgpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnVuc2hpZnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudW5zaGlmdFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHVuc2hpZnQ6IGZ1bmN0aW9uIHVuc2hpZnQoaXRlbSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBhcmdDb3VudCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgaWYgKGFyZ0NvdW50KSB7XG4gICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobGVuICsgYXJnQ291bnQpO1xuICAgICAgdmFyIGsgPSBsZW47XG4gICAgICB3aGlsZSAoay0tKSB7XG4gICAgICAgIHZhciB0byA9IGsgKyBhcmdDb3VudDtcbiAgICAgICAgaWYgKGsgaW4gTykgT1t0b10gPSBPW2tdO1xuICAgICAgICBlbHNlIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhPLCB0byk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFyZ0NvdW50OyBqKyspIHtcbiAgICAgICAgT1tqXSA9IGFyZ3VtZW50c1tqXTtcbiAgICAgIH1cbiAgICB9IHJldHVybiBzZXRBcnJheUxlbmd0aChPLCBsZW4gKyBhcmdDb3VudCk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBQcm90b3R5cGUpIHtcbiAgaWYgKGlzUHJvdG90eXBlT2YoUHJvdG90eXBlLCBpdCkpIHJldHVybiBpdDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0luY29ycmVjdCBpbnZvY2F0aW9uJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBDT05TVFJVQ1RPUiA9ICdjb25zdHJ1Y3Rvcic7XG52YXIgSVRFUkFUT1IgPSAnSXRlcmF0b3InO1xudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE5hdGl2ZUl0ZXJhdG9yID0gZ2xvYmFsVGhpc1tJVEVSQVRPUl07XG5cbi8vIEZGNTYtIGhhdmUgbm9uLXN0YW5kYXJkIGdsb2JhbCBoZWxwZXIgYEl0ZXJhdG9yYFxudmFyIEZPUkNFRCA9IElTX1BVUkVcbiAgfHwgIWlzQ2FsbGFibGUoTmF0aXZlSXRlcmF0b3IpXG4gIHx8IE5hdGl2ZUl0ZXJhdG9yLnByb3RvdHlwZSAhPT0gSXRlcmF0b3JQcm90b3R5cGVcbiAgLy8gRkY0NC0gbm9uLXN0YW5kYXJkIGBJdGVyYXRvcmAgcGFzc2VzIHByZXZpb3VzIHRlc3RzXG4gIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7IE5hdGl2ZUl0ZXJhdG9yKHt9KTsgfSk7XG5cbnZhciBJdGVyYXRvckNvbnN0cnVjdG9yID0gZnVuY3Rpb24gSXRlcmF0b3IoKSB7XG4gIGFuSW5zdGFuY2UodGhpcywgSXRlcmF0b3JQcm90b3R5cGUpO1xuICBpZiAoZ2V0UHJvdG90eXBlT2YodGhpcykgPT09IEl0ZXJhdG9yUHJvdG90eXBlKSB0aHJvdyBuZXcgJFR5cGVFcnJvcignQWJzdHJhY3QgY2xhc3MgSXRlcmF0b3Igbm90IGRpcmVjdGx5IGNvbnN0cnVjdGFibGUnKTtcbn07XG5cbnZhciBkZWZpbmVJdGVyYXRvclByb3RvdHlwZUFjY2Vzc29yID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKEl0ZXJhdG9yUHJvdG90eXBlLCBrZXksIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAocmVwbGFjZW1lbnQpIHtcbiAgICAgICAgYW5PYmplY3QodGhpcyk7XG4gICAgICAgIGlmICh0aGlzID09PSBJdGVyYXRvclByb3RvdHlwZSkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJZb3UgY2FuJ3QgcmVkZWZpbmUgdGhpcyBwcm9wZXJ0eVwiKTtcbiAgICAgICAgaWYgKGhhc093bih0aGlzLCBrZXkpKSB0aGlzW2tleV0gPSByZXBsYWNlbWVudDtcbiAgICAgICAgZWxzZSBjcmVhdGVQcm9wZXJ0eSh0aGlzLCBrZXksIHJlcGxhY2VtZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBlbHNlIEl0ZXJhdG9yUHJvdG90eXBlW2tleV0gPSB2YWx1ZTtcbn07XG5cbmlmICghaGFzT3duKEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHKSkgZGVmaW5lSXRlcmF0b3JQcm90b3R5cGVBY2Nlc3NvcihUT19TVFJJTkdfVEFHLCBJVEVSQVRPUik7XG5cbmlmIChGT1JDRUQgfHwgIWhhc093bihJdGVyYXRvclByb3RvdHlwZSwgQ09OU1RSVUNUT1IpIHx8IEl0ZXJhdG9yUHJvdG90eXBlW0NPTlNUUlVDVE9SXSA9PT0gT2JqZWN0KSB7XG4gIGRlZmluZUl0ZXJhdG9yUHJvdG90eXBlQWNjZXNzb3IoQ09OU1RSVUNUT1IsIEl0ZXJhdG9yQ29uc3RydWN0b3IpO1xufVxuXG5JdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IEl0ZXJhdG9yUHJvdG90eXBlO1xuXG4vLyBgSXRlcmF0b3JgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWl0ZXJhdG9yXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBJdGVyYXRvcjogSXRlcmF0b3JDb25zdHJ1Y3RvclxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gYEdldEl0ZXJhdG9yRGlyZWN0KG9iailgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnMvI3NlYy1nZXRpdGVyYXRvcmRpcmVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB7XG4gICAgaXRlcmF0b3I6IG9iaixcbiAgICBuZXh0OiBvYmoubmV4dCxcbiAgICBkb25lOiBmYWxzZVxuICB9O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIG9wdGlvbnMpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc3JjW2tleV0sIG9wdGlvbnMpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0Jyk7XG52YXIgaXRlcmF0b3JDbG9zZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZScpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciBJVEVSQVRPUl9IRUxQRVIgPSAnSXRlcmF0b3JIZWxwZXInO1xudmFyIFdSQVBfRk9SX1ZBTElEX0lURVJBVE9SID0gJ1dyYXBGb3JWYWxpZEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG5cbnZhciBjcmVhdGVJdGVyYXRvclByb3h5UHJvdG90eXBlID0gZnVuY3Rpb24gKElTX0lURVJBVE9SKSB7XG4gIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoSVNfSVRFUkFUT1IgPyBXUkFQX0ZPUl9WQUxJRF9JVEVSQVRPUiA6IElURVJBVE9SX0hFTFBFUik7XG5cbiAgcmV0dXJuIGRlZmluZUJ1aWx0SW5zKGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSksIHtcbiAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgIC8vIGZvciBzaW1wbGlmaWNhdGlvbjpcbiAgICAgIC8vICAgZm9yIGAlV3JhcEZvclZhbGlkSXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG9yIHdpdGggYHN0YXRlLnJldHVybkhhbmRsZXJSZXN1bHRgIG91ciBgbmV4dEhhbmRsZXJgIHJldHVybnMgYEl0ZXJSZXN1bHRPYmplY3RgXG4gICAgICAvLyAgIGZvciBgJUl0ZXJhdG9ySGVscGVyUHJvdG90eXBlJS5uZXh0YCAtIGp1c3QgYSB2YWx1ZVxuICAgICAgaWYgKElTX0lURVJBVE9SKSByZXR1cm4gc3RhdGUubmV4dEhhbmRsZXIoKTtcbiAgICAgIGlmIChzdGF0ZS5kb25lKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHN0YXRlLm5leHRIYW5kbGVyKCk7XG4gICAgICAgIHJldHVybiBzdGF0ZS5yZXR1cm5IYW5kbGVyUmVzdWx0ID8gcmVzdWx0IDogY3JlYXRlSXRlclJlc3VsdE9iamVjdChyZXN1bHQsIHN0YXRlLmRvbmUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc3RhdGUuZG9uZSA9IHRydWU7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ3JldHVybic6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICB2YXIgaXRlcmF0b3IgPSBzdGF0ZS5pdGVyYXRvcjtcbiAgICAgIHN0YXRlLmRvbmUgPSB0cnVlO1xuICAgICAgaWYgKElTX0lURVJBVE9SKSB7XG4gICAgICAgIHZhciByZXR1cm5NZXRob2QgPSBnZXRNZXRob2QoaXRlcmF0b3IsICdyZXR1cm4nKTtcbiAgICAgICAgcmV0dXJuIHJldHVybk1ldGhvZCA/IGNhbGwocmV0dXJuTWV0aG9kLCBpdGVyYXRvcikgOiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuaW5uZXIpIHRyeSB7XG4gICAgICAgIGl0ZXJhdG9yQ2xvc2Uoc3RhdGUuaW5uZXIuaXRlcmF0b3IsICdub3JtYWwnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gICAgICB9XG4gICAgICBpZiAoaXRlcmF0b3IpIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICdub3JtYWwnKTtcbiAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbn07XG5cbnZhciBXcmFwRm9yVmFsaWRJdGVyYXRvclByb3RvdHlwZSA9IGNyZWF0ZUl0ZXJhdG9yUHJveHlQcm90b3R5cGUodHJ1ZSk7XG52YXIgSXRlcmF0b3JIZWxwZXJQcm90b3R5cGUgPSBjcmVhdGVJdGVyYXRvclByb3h5UHJvdG90eXBlKGZhbHNlKTtcblxuY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhdG9ySGVscGVyUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCAnSXRlcmF0b3IgSGVscGVyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5leHRIYW5kbGVyLCBJU19JVEVSQVRPUiwgUkVUVVJOX0hBTkRMRVJfUkVTVUxUKSB7XG4gIHZhciBJdGVyYXRvclByb3h5ID0gZnVuY3Rpb24gSXRlcmF0b3IocmVjb3JkLCBzdGF0ZSkge1xuICAgIGlmIChzdGF0ZSkge1xuICAgICAgc3RhdGUuaXRlcmF0b3IgPSByZWNvcmQuaXRlcmF0b3I7XG4gICAgICBzdGF0ZS5uZXh0ID0gcmVjb3JkLm5leHQ7XG4gICAgfSBlbHNlIHN0YXRlID0gcmVjb3JkO1xuICAgIHN0YXRlLnR5cGUgPSBJU19JVEVSQVRPUiA/IFdSQVBfRk9SX1ZBTElEX0lURVJBVE9SIDogSVRFUkFUT1JfSEVMUEVSO1xuICAgIHN0YXRlLnJldHVybkhhbmRsZXJSZXN1bHQgPSAhIVJFVFVSTl9IQU5ETEVSX1JFU1VMVDtcbiAgICBzdGF0ZS5uZXh0SGFuZGxlciA9IG5leHRIYW5kbGVyO1xuICAgIHN0YXRlLmNvdW50ZXIgPSAwO1xuICAgIHN0YXRlLmRvbmUgPSBmYWxzZTtcbiAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHN0YXRlKTtcbiAgfTtcblxuICBJdGVyYXRvclByb3h5LnByb3RvdHlwZSA9IElTX0lURVJBVE9SID8gV3JhcEZvclZhbGlkSXRlcmF0b3JQcm90b3R5cGUgOiBJdGVyYXRvckhlbHBlclByb3RvdHlwZTtcblxuICByZXR1cm4gSXRlcmF0b3JQcm94eTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRJdGVyYXRvckRpcmVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItZGlyZWN0Jyk7XG52YXIgY3JlYXRlSXRlcmF0b3JQcm94eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1jcmVhdGUtcHJveHknKTtcbnZhciBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJdGVyYXRvclByb3h5ID0gY3JlYXRlSXRlcmF0b3JQcm94eShmdW5jdGlvbiAoKSB7XG4gIHZhciBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3I7XG4gIHZhciBwcmVkaWNhdGUgPSB0aGlzLnByZWRpY2F0ZTtcbiAgdmFyIG5leHQgPSB0aGlzLm5leHQ7XG4gIHZhciByZXN1bHQsIGRvbmUsIHZhbHVlO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHJlc3VsdCA9IGFuT2JqZWN0KGNhbGwobmV4dCwgaXRlcmF0b3IpKTtcbiAgICBkb25lID0gdGhpcy5kb25lID0gISFyZXN1bHQuZG9uZTtcbiAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgIGlmIChjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nKGl0ZXJhdG9yLCBwcmVkaWNhdGUsIFt2YWx1ZSwgdGhpcy5jb3VudGVyKytdLCB0cnVlKSkgcmV0dXJuIHZhbHVlO1xuICB9XG59KTtcblxuLy8gYEl0ZXJhdG9yLnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pdGVyYXRvci5wcm90b3R5cGUuZmlsdGVyXG4kKHsgdGFyZ2V0OiAnSXRlcmF0b3InLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIH0sIHtcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIocHJlZGljYXRlKSB7XG4gICAgYW5PYmplY3QodGhpcyk7XG4gICAgYUNhbGxhYmxlKHByZWRpY2F0ZSk7XG4gICAgcmV0dXJuIG5ldyBJdGVyYXRvclByb3h5KGdldEl0ZXJhdG9yRGlyZWN0KHRoaXMpLCB7XG4gICAgICBwcmVkaWNhdGU6IHByZWRpY2F0ZVxuICAgIH0pO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgaXNBcnJheUl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbnZhciBSZXN1bHQgPSBmdW5jdGlvbiAoc3RvcHBlZCwgcmVzdWx0KSB7XG4gIHRoaXMuc3RvcHBlZCA9IHN0b3BwZWQ7XG4gIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xufTtcblxudmFyIFJlc3VsdFByb3RvdHlwZSA9IFJlc3VsdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCB1bmJvdW5kRnVuY3Rpb24sIG9wdGlvbnMpIHtcbiAgdmFyIHRoYXQgPSBvcHRpb25zICYmIG9wdGlvbnMudGhhdDtcbiAgdmFyIEFTX0VOVFJJRVMgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuQVNfRU5UUklFUyk7XG4gIHZhciBJU19SRUNPUkQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfUkVDT1JEKTtcbiAgdmFyIElTX0lURVJBVE9SID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklTX0lURVJBVE9SKTtcbiAgdmFyIElOVEVSUlVQVEVEID0gISEob3B0aW9ucyAmJiBvcHRpb25zLklOVEVSUlVQVEVEKTtcbiAgdmFyIGZuID0gYmluZCh1bmJvdW5kRnVuY3Rpb24sIHRoYXQpO1xuICB2YXIgaXRlcmF0b3IsIGl0ZXJGbiwgaW5kZXgsIGxlbmd0aCwgcmVzdWx0LCBuZXh0LCBzdGVwO1xuXG4gIHZhciBzdG9wID0gZnVuY3Rpb24gKGNvbmRpdGlvbikge1xuICAgIGlmIChpdGVyYXRvcikgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ25vcm1hbCcsIGNvbmRpdGlvbik7XG4gICAgcmV0dXJuIG5ldyBSZXN1bHQodHJ1ZSwgY29uZGl0aW9uKTtcbiAgfTtcblxuICB2YXIgY2FsbEZuID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKEFTX0VOVFJJRVMpIHtcbiAgICAgIGFuT2JqZWN0KHZhbHVlKTtcbiAgICAgIHJldHVybiBJTlRFUlJVUFRFRCA/IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSwgc3RvcCkgOiBmbih2YWx1ZVswXSwgdmFsdWVbMV0pO1xuICAgIH0gcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWUsIHN0b3ApIDogZm4odmFsdWUpO1xuICB9O1xuXG4gIGlmIChJU19SRUNPUkQpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlLml0ZXJhdG9yO1xuICB9IGVsc2UgaWYgKElTX0lURVJBVE9SKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyRm4gPSBnZXRJdGVyYXRvck1ldGhvZChpdGVyYWJsZSk7XG4gICAgaWYgKCFpdGVyRm4pIHRocm93IG5ldyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGl0ZXJhYmxlKSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG4gICAgLy8gb3B0aW1pc2F0aW9uIGZvciBhcnJheSBpdGVyYXRvcnNcbiAgICBpZiAoaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaW5kZXggPSAwLCBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShpdGVyYWJsZSk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHJlc3VsdCA9IGNhbGxGbihpdGVyYWJsZVtpbmRleF0pO1xuICAgICAgICBpZiAocmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICAgICAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG4gICAgfVxuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoaXRlcmFibGUsIGl0ZXJGbik7XG4gIH1cblxuICBuZXh0ID0gSVNfUkVDT1JEID8gaXRlcmFibGUubmV4dCA6IGl0ZXJhdG9yLm5leHQ7XG4gIHdoaWxlICghKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBjYWxsRm4oc3RlcC52YWx1ZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gJ29iamVjdCcgJiYgcmVzdWx0ICYmIGlzUHJvdG90eXBlT2YoUmVzdWx0UHJvdG90eXBlLCByZXN1bHQpKSByZXR1cm4gcmVzdWx0O1xuICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBnZXRJdGVyYXRvckRpcmVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItZGlyZWN0Jyk7XG5cbi8vIGBJdGVyYXRvci5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWl0ZXJhdG9yLnByb3RvdHlwZS5mb3JlYWNoXG4kKHsgdGFyZ2V0OiAnSXRlcmF0b3InLCBwcm90bzogdHJ1ZSwgcmVhbDogdHJ1ZSB9LCB7XG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goZm4pIHtcbiAgICBhbk9iamVjdCh0aGlzKTtcbiAgICBhQ2FsbGFibGUoZm4pO1xuICAgIHZhciByZWNvcmQgPSBnZXRJdGVyYXRvckRpcmVjdCh0aGlzKTtcbiAgICB2YXIgY291bnRlciA9IDA7XG4gICAgaXRlcmF0ZShyZWNvcmQsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgZm4odmFsdWUsIGNvdW50ZXIrKyk7XG4gICAgfSwgeyBJU19SRUNPUkQ6IHRydWUgfSk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldEl0ZXJhdG9yRGlyZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QnKTtcbnZhciBjcmVhdGVJdGVyYXRvclByb3h5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1wcm94eScpO1xudmFyIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcnKTtcblxudmFyIEl0ZXJhdG9yUHJveHkgPSBjcmVhdGVJdGVyYXRvclByb3h5KGZ1bmN0aW9uICgpIHtcbiAgdmFyIGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcjtcbiAgdmFyIHJlc3VsdCA9IGFuT2JqZWN0KGNhbGwodGhpcy5uZXh0LCBpdGVyYXRvcikpO1xuICB2YXIgZG9uZSA9IHRoaXMuZG9uZSA9ICEhcmVzdWx0LmRvbmU7XG4gIGlmICghZG9uZSkgcmV0dXJuIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcoaXRlcmF0b3IsIHRoaXMubWFwcGVyLCBbcmVzdWx0LnZhbHVlLCB0aGlzLmNvdW50ZXIrK10sIHRydWUpO1xufSk7XG5cbi8vIGBJdGVyYXRvci5wcm90b3R5cGUubWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWl0ZXJhdG9yLWhlbHBlcnNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWFwKG1hcHBlcikge1xuICBhbk9iamVjdCh0aGlzKTtcbiAgYUNhbGxhYmxlKG1hcHBlcik7XG4gIHJldHVybiBuZXcgSXRlcmF0b3JQcm94eShnZXRJdGVyYXRvckRpcmVjdCh0aGlzKSwge1xuICAgIG1hcHBlcjogbWFwcGVyXG4gIH0pO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBtYXAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItbWFwJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbi8vIGBJdGVyYXRvci5wcm90b3R5cGUubWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXRlcmF0b3IucHJvdG90eXBlLm1hcFxuJCh7IHRhcmdldDogJ0l0ZXJhdG9yJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB9LCB7XG4gIG1hcDogbWFwXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldEl0ZXJhdG9yRGlyZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1kaXJlY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBJdGVyYXRvci5wcm90b3R5cGUucmVkdWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXRlcmF0b3IucHJvdG90eXBlLnJlZHVjZVxuJCh7IHRhcmdldDogJ0l0ZXJhdG9yJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUgfSwge1xuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShyZWR1Y2VyIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgYW5PYmplY3QodGhpcyk7XG4gICAgYUNhbGxhYmxlKHJlZHVjZXIpO1xuICAgIHZhciByZWNvcmQgPSBnZXRJdGVyYXRvckRpcmVjdCh0aGlzKTtcbiAgICB2YXIgbm9Jbml0aWFsID0gYXJndW1lbnRzLmxlbmd0aCA8IDI7XG4gICAgdmFyIGFjY3VtdWxhdG9yID0gbm9Jbml0aWFsID8gdW5kZWZpbmVkIDogYXJndW1lbnRzWzFdO1xuICAgIHZhciBjb3VudGVyID0gMDtcbiAgICBpdGVyYXRlKHJlY29yZCwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAobm9Jbml0aWFsKSB7XG4gICAgICAgIG5vSW5pdGlhbCA9IGZhbHNlO1xuICAgICAgICBhY2N1bXVsYXRvciA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWNjdW11bGF0b3IgPSByZWR1Y2VyKGFjY3VtdWxhdG9yLCB2YWx1ZSwgY291bnRlcik7XG4gICAgICB9XG4gICAgICBjb3VudGVyKys7XG4gICAgfSwgeyBJU19SRUNPUkQ6IHRydWUgfSk7XG4gICAgaWYgKG5vSW5pdGlhbCkgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBpdGVyYXRvciB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIEZGMjYtIGJ1ZzogQXJyYXlCdWZmZXJzIGFyZSBub24tZXh0ZW5zaWJsZSwgYnV0IE9iamVjdC5pc0V4dGVuc2libGUgZG9lcyBub3QgcmVwb3J0IGl0XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgPT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoOCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUsIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgaWYgKE9iamVjdC5pc0V4dGVuc2libGUoYnVmZmVyKSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KGJ1ZmZlciwgJ2EnLCB7IHZhbHVlOiA4IH0pO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1ub24tZXh0ZW5zaWJsZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSAtLSBzYWZlXG52YXIgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgJGlzRXh0ZW5zaWJsZSgxKTsgfSk7XG5cbi8vIGBPYmplY3QuaXNFeHRlbnNpYmxlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmlzZXh0ZW5zaWJsZVxubW9kdWxlLmV4cG9ydHMgPSAoRkFJTFNfT05fUFJJTUlUSVZFUyB8fCBBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUpID8gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUgJiYgY2xhc3NvZihpdCkgPT09ICdBcnJheUJ1ZmZlcicpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKGl0KSA6IHRydWU7XG59IDogJGlzRXh0ZW5zaWJsZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LXByZXZlbnRleHRlbnNpb25zIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiBPYmplY3QuaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpLmY7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGlzRXh0ZW5zaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtZXh0ZW5zaWJsZScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciBGUkVFWklORyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mcmVlemluZycpO1xuXG52YXIgUkVRVUlSRUQgPSBmYWxzZTtcbnZhciBNRVRBREFUQSA9IHVpZCgnbWV0YScpO1xudmFyIGlkID0gMDtcblxudmFyIHNldE1ldGFkYXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIGRlZmluZVByb3BlcnR5KGl0LCBNRVRBREFUQSwgeyB2YWx1ZToge1xuICAgIG9iamVjdElEOiAnTycgKyBpZCsrLCAvLyBvYmplY3QgSURcbiAgICB3ZWFrRGF0YToge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG5cbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIGEgcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhc093bihpdCwgTUVUQURBVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGFkYXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBREFUQV0ub2JqZWN0SUQ7XG59O1xuXG52YXIgZ2V0V2Vha0RhdGEgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhc093bihpdCwgTUVUQURBVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGFkYXRhKGl0KTtcbiAgLy8gcmV0dXJuIHRoZSBzdG9yZSBvZiB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBREFUQV0ud2Vha0RhdGE7XG59O1xuXG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpJTkcgJiYgUkVRVUlSRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzT3duKGl0LCBNRVRBREFUQSkpIHNldE1ldGFkYXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcblxudmFyIGVuYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgbWV0YS5lbmFibGUgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4gIFJFUVVJUkVEID0gdHJ1ZTtcbiAgdmFyIGdldE93blByb3BlcnR5TmFtZXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmY7XG4gIHZhciBzcGxpY2UgPSB1bmN1cnJ5VGhpcyhbXS5zcGxpY2UpO1xuICB2YXIgdGVzdCA9IHt9O1xuICB0ZXN0W01FVEFEQVRBXSA9IDE7XG5cbiAgLy8gcHJldmVudCBleHBvc2luZyBvZiBtZXRhZGF0YSBrZXlcbiAgaWYgKGdldE93blByb3BlcnR5TmFtZXModGVzdCkubGVuZ3RoKSB7XG4gICAgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChyZXN1bHRbaV0gPT09IE1FVEFEQVRBKSB7XG4gICAgICAgICAgc3BsaWNlKHJlc3VsdCwgaSwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiBnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWxNb2R1bGUuZlxuICAgIH0pO1xuICB9XG59O1xuXG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBlbmFibGU6IGVuYWJsZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2Vha0RhdGE6IGdldFdlYWtEYXRhLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG5cbmhpZGRlbktleXNbTUVUQURBVEFdID0gdHJ1ZTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FLCB3cmFwcGVyLCBjb21tb24pIHtcbiAgdmFyIElTX01BUCA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignTWFwJykgIT09IC0xO1xuICB2YXIgSVNfV0VBSyA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignV2VhaycpICE9PSAtMTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIE5hdGl2ZUNvbnN0cnVjdG9yID0gZ2xvYmFsVGhpc1tDT05TVFJVQ1RPUl9OQU1FXTtcbiAgdmFyIE5hdGl2ZVByb3RvdHlwZSA9IE5hdGl2ZUNvbnN0cnVjdG9yICYmIE5hdGl2ZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgdmFyIENvbnN0cnVjdG9yID0gTmF0aXZlQ29uc3RydWN0b3I7XG4gIHZhciBleHBvcnRlZCA9IHt9O1xuXG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIHVuY3VycmllZE5hdGl2ZU1ldGhvZCA9IHVuY3VycnlUaGlzKE5hdGl2ZVByb3RvdHlwZVtLRVldKTtcbiAgICBkZWZpbmVCdWlsdEluKE5hdGl2ZVByb3RvdHlwZSwgS0VZLFxuICAgICAgS0VZID09PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgICB1bmN1cnJpZWROYXRpdmVNZXRob2QodGhpcywgdmFsdWUgPT09IDAgPyAwIDogdmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0gOiBLRVkgPT09ICdkZWxldGUnID8gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3Qoa2V5KSA/IGZhbHNlIDogdW5jdXJyaWVkTmF0aXZlTWV0aG9kKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXkpO1xuICAgICAgfSA6IEtFWSA9PT0gJ2dldCcgPyBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChrZXkpID8gdW5kZWZpbmVkIDogdW5jdXJyaWVkTmF0aXZlTWV0aG9kKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXkpO1xuICAgICAgfSA6IEtFWSA9PT0gJ2hhcycgPyBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChrZXkpID8gZmFsc2UgOiB1bmN1cnJpZWROYXRpdmVNZXRob2QodGhpcywga2V5ID09PSAwID8gMCA6IGtleSk7XG4gICAgICB9IDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgdW5jdXJyaWVkTmF0aXZlTWV0aG9kKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICB2YXIgUkVQTEFDRSA9IGlzRm9yY2VkKFxuICAgIENPTlNUUlVDVE9SX05BTUUsXG4gICAgIWlzQ2FsbGFibGUoTmF0aXZlQ29uc3RydWN0b3IpIHx8ICEoSVNfV0VBSyB8fCBOYXRpdmVQcm90b3R5cGUuZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCkuZW50cmllcygpLm5leHQoKTtcbiAgICB9KSlcbiAgKTtcblxuICBpZiAoUkVQTEFDRSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQ29uc3RydWN0b3IgPSBjb21tb24uZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQLCBBRERFUik7XG4gICAgSW50ZXJuYWxNZXRhZGF0YU1vZHVsZS5lbmFibGUoKTtcbiAgfSBlbHNlIGlmIChpc0ZvcmNlZChDT05TVFJVQ1RPUl9OQU1FLCB0cnVlKSkge1xuICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9PSBpbnN0YW5jZTtcbiAgICAvLyBWOCB+IENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgIHZhciBBQ0NFUFRfSVRFUkFCTEVTID0gY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkgeyBuZXcgTmF0aXZlQ29uc3RydWN0b3IoaXRlcmFibGUpOyB9KTtcbiAgICAvLyBmb3IgZWFybHkgaW1wbGVtZW50YXRpb25zIC0wIGFuZCArMCBub3QgdGhlIHNhbWVcbiAgICB2YXIgQlVHR1lfWkVSTyA9ICFJU19XRUFLICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFY4IH4gQ2hyb21pdW0gNDItIGZhaWxzIG9ubHkgd2l0aCA1KyBlbGVtZW50c1xuICAgICAgdmFyICRpbnN0YW5jZSA9IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuXG4gICAgaWYgKCFBQ0NFUFRfSVRFUkFCTEVTKSB7XG4gICAgICBDb25zdHJ1Y3RvciA9IHdyYXBwZXIoZnVuY3Rpb24gKGR1bW15LCBpdGVyYWJsZSkge1xuICAgICAgICBhbkluc3RhbmNlKGR1bW15LCBOYXRpdmVQcm90b3R5cGUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpLCBkdW1teSwgQ29uc3RydWN0b3IpO1xuICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgICAgICByZXR1cm4gdGhhdDtcbiAgICAgIH0pO1xuICAgICAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gTmF0aXZlUHJvdG90eXBlO1xuICAgICAgTmF0aXZlUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3I7XG4gICAgfVxuXG4gICAgaWYgKFRIUk9XU19PTl9QUklNSVRJVkVTIHx8IEJVR0dZX1pFUk8pIHtcbiAgICAgIGZpeE1ldGhvZCgnZGVsZXRlJyk7XG4gICAgICBmaXhNZXRob2QoJ2hhcycpO1xuICAgICAgSVNfTUFQICYmIGZpeE1ldGhvZCgnZ2V0Jyk7XG4gICAgfVxuXG4gICAgaWYgKEJVR0dZX1pFUk8gfHwgSEFTTlRfQ0hBSU5JTkcpIGZpeE1ldGhvZChBRERFUik7XG5cbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIE5hdGl2ZVByb3RvdHlwZS5jbGVhcikgZGVsZXRlIE5hdGl2ZVByb3RvdHlwZS5jbGVhcjtcbiAgfVxuXG4gIGV4cG9ydGVkW0NPTlNUUlVDVE9SX05BTUVdID0gQ29uc3RydWN0b3I7XG4gICQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBmb3JjZWQ6IENvbnN0cnVjdG9yICE9PSBOYXRpdmVDb25zdHJ1Y3RvciB9LCBleHBvcnRlZCk7XG5cbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUpO1xuXG4gIGlmICghSVNfV0VBSykgY29tbW9uLnNldFN0cm9uZyhDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQ29uc3RydWN0b3I7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FKSB7XG4gIHZhciBDb25zdHJ1Y3RvciA9IGdldEJ1aWx0SW4oQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmIENvbnN0cnVjdG9yICYmICFDb25zdHJ1Y3RvcltTUEVDSUVTXSkge1xuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIGRlZmluZUJ1aWx0SW5zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCcpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKS5mYXN0S2V5O1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3I7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBQcm90b3R5cGUpO1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGF0LCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGluZGV4OiBjcmVhdGUobnVsbCksXG4gICAgICAgIGZpcnN0OiBudWxsLFxuICAgICAgICBsYXN0OiBudWxsLFxuICAgICAgICBzaXplOiAwXG4gICAgICB9KTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMpIHRoYXQuc2l6ZSA9IDA7XG4gICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIHZhciBkZWZpbmUgPSBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICB2YXIgcHJldmlvdXMsIGluZGV4O1xuICAgICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTtcbiAgICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmxhc3QgPSBlbnRyeSA9IHtcbiAgICAgICAgICBpbmRleDogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksXG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHByZXZpb3VzOiBwcmV2aW91cyA9IHN0YXRlLmxhc3QsXG4gICAgICAgICAgbmV4dDogbnVsbCxcbiAgICAgICAgICByZW1vdmVkOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBpZiAoIXN0YXRlLmZpcnN0KSBzdGF0ZS5maXJzdCA9IGVudHJ5O1xuICAgICAgICBpZiAocHJldmlvdXMpIHByZXZpb3VzLm5leHQgPSBlbnRyeTtcbiAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplKys7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplKys7XG4gICAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgICBpZiAoaW5kZXggIT09ICdGJykgc3RhdGUuaW5kZXhbaW5kZXhdID0gZW50cnk7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH07XG5cbiAgICB2YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgLy8gZmFzdCBjYXNlXG4gICAgICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gICAgICB2YXIgZW50cnk7XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgcmV0dXJuIHN0YXRlLmluZGV4W2luZGV4XTtcbiAgICAgIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICAgICAgZm9yIChlbnRyeSA9IHN0YXRlLmZpcnN0OyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uZXh0KSB7XG4gICAgICAgIGlmIChlbnRyeS5rZXkgPT09IGtleSkgcmV0dXJuIGVudHJ5O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkZWZpbmVCdWlsdElucyhQcm90b3R5cGUsIHtcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmNsZWFyKClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5jbGVhclxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmNsZWFyXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgICAgdmFyIGVudHJ5ID0gc3RhdGUuZmlyc3Q7XG4gICAgICAgIHdoaWxlIChlbnRyeSkge1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wcmV2aW91cykgZW50cnkucHJldmlvdXMgPSBlbnRyeS5wcmV2aW91cy5uZXh0ID0gbnVsbDtcbiAgICAgICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUuZmlyc3QgPSBzdGF0ZS5sYXN0ID0gbnVsbDtcbiAgICAgICAgc3RhdGUuaW5kZXggPSBjcmVhdGUobnVsbCk7XG4gICAgICAgIGlmIChERVNDUklQVE9SUykgc3RhdGUuc2l6ZSA9IDA7XG4gICAgICAgIGVsc2UgdGhhdC5zaXplID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5kZWxldGUoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm5leHQ7XG4gICAgICAgICAgdmFyIHByZXYgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgICBkZWxldGUgc3RhdGUuaW5kZXhbZW50cnkuaW5kZXhdO1xuICAgICAgICAgIGVudHJ5LnJlbW92ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChwcmV2KSBwcmV2Lm5leHQgPSBuZXh0O1xuICAgICAgICAgIGlmIChuZXh0KSBuZXh0LnByZXZpb3VzID0gcHJldjtcbiAgICAgICAgICBpZiAoc3RhdGUuZmlyc3QgPT09IGVudHJ5KSBzdGF0ZS5maXJzdCA9IG5leHQ7XG4gICAgICAgICAgaWYgKHN0YXRlLmxhc3QgPT09IGVudHJ5KSBzdGF0ZS5sYXN0ID0gcHJldjtcbiAgICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUtLTtcbiAgICAgICAgICBlbHNlIHRoYXQuc2l6ZS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLmZpcnN0KSB7XG4gICAgICAgICAgYm91bmRGdW5jdGlvbihlbnRyeS52YWx1ZSwgZW50cnkua2V5LCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0fS5wcm90b3R5cGUuaGFzKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5oYXNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5oYXNcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCBJU19NQVAgPyB7XG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5nZXQoa2V5KWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZ2V0XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnZhbHVlO1xuICAgICAgfSxcbiAgICAgIC8vIGBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuc2V0XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gOiB7XG4gICAgICAvLyBgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5hZGRcbiAgICAgIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcykuc2l6ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH0sXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApIHtcbiAgICB2YXIgSVRFUkFUT1JfTkFNRSA9IENPTlNUUlVDVE9SX05BTUUgKyAnIEl0ZXJhdG9yJztcbiAgICB2YXIgZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuICAgIHZhciBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKElURVJBVE9SX05BTUUpO1xuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLnsga2V5cywgdmFsdWVzLCBlbnRyaWVzLCBAQGl0ZXJhdG9yIH0oKWAgbWV0aG9kc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5lbnRyaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmtleXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUudmFsdWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLUBAaXRlcmF0b3JcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZW50cmllc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5rZXlzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLnZhbHVlc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4gICAgZGVmaW5lSXRlcmF0b3IoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICAgIHR5cGU6IElURVJBVE9SX05BTUUsXG4gICAgICAgIHRhcmdldDogaXRlcmF0ZWQsXG4gICAgICAgIHN0YXRlOiBnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZShpdGVyYXRlZCksXG4gICAgICAgIGtpbmQ6IGtpbmQsXG4gICAgICAgIGxhc3Q6IG51bGxcbiAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSh0aGlzKTtcbiAgICAgIHZhciBraW5kID0gc3RhdGUua2luZDtcbiAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmxhc3Q7XG4gICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yZW1vdmVkKSBlbnRyeSA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghc3RhdGUudGFyZ2V0IHx8ICEoc3RhdGUubGFzdCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uZXh0IDogc3RhdGUuc3RhdGUuZmlyc3QpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHN0YXRlLnRhcmdldCA9IG51bGw7XG4gICAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZiAoa2luZCA9PT0gJ2tleXMnKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChlbnRyeS5rZXksIGZhbHNlKTtcbiAgICAgIGlmIChraW5kID09PSAndmFsdWVzJykgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoZW50cnkudmFsdWUsIGZhbHNlKTtcbiAgICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtlbnRyeS5rZXksIGVudHJ5LnZhbHVlXSwgZmFsc2UpO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlW0BAc3BlY2llc11gIGFjY2Vzc29yc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LW1hcC1AQHNwZWNpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1zZXQtQEBzcGVjaWVzXG4gICAgc2V0U3BlY2llcyhDT05TVFJVQ1RPUl9OQU1FKTtcbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyBgTWFwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAtb2JqZWN0c1xuY29sbGVjdGlvbignTWFwJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIE1hcCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uU3Ryb25nKTtcbiIsICIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHJlcGxhY2VkIHRvIG1vZHVsZSBiZWxvd1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5tYXAuY29uc3RydWN0b3InKTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzJykuZjtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnRpZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyAhPT0gZGVmaW5lUHJvcGVydGllcywgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZGVmaW5lUHJvcGVydGllczogZGVmaW5lUHJvcGVydGllc1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBPYmplY3QuZGVmaW5lUHJvcGVydHkgIT09IGRlZmluZVByb3BlcnR5LCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBkZWZpbmVQcm9wZXJ0eTogZGVmaW5lUHJvcGVydHlcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBGT1JDRUQgPSAhREVTQ1JJUFRPUlMgfHwgZmFpbHMoZnVuY3Rpb24gKCkgeyBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICAgIHJldHVybiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JbmRleGVkT2JqZWN0KGl0KSwga2V5KTtcbiAgfVxufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICAgIHZhciBrZXlzID0gb3duS2V5cyhPKTtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIga2V5LCBkZXNjcmlwdG9yO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGluZGV4KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSA9IGtleXNbaW5kZXgrK10pO1xuICAgICAgaWYgKGRlc2NyaXB0b3IgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKS5mO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyByZXR1cm4gIU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZBSUxTX09OX1BSSU1JVElWRVMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiBnZXRPd25Qcm9wZXJ0eU5hbWVzXG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUtleXMoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyh0b09iamVjdChpdCkpO1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBvbkZyZWV6ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpLm9uRnJlZXplO1xudmFyIEZSRUVaSU5HID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZyZWV6aW5nJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZWFsIC0tIHNhZmVcbnZhciAkc2VhbCA9IE9iamVjdC5zZWFsO1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7ICRzZWFsKDEpOyB9KTtcblxuLy8gYE9iamVjdC5zZWFsYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNlYWxcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IEZBSUxTX09OX1BSSU1JVElWRVMsIHNoYW06ICFGUkVFWklORyB9LCB7XG4gIHNlYWw6IGZ1bmN0aW9uIHNlYWwoaXQpIHtcbiAgICByZXR1cm4gJHNlYWwgJiYgaXNPYmplY3QoaXQpID8gJHNlYWwob25GcmVlemUoaXQpKSA6IGl0O1xuICB9XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gVE9fU1RSSU5HX1RBR19TVVBQT1JUID8ge30udG9TdHJpbmcgOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZycpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmdcbmlmICghVE9fU1RSSU5HX1RBR19TVVBQT1JUKSB7XG4gIGRlZmluZUJ1aWx0SW4oT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgdG9TdHJpbmcsIHsgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCdhJywgJ3knKSAtPiAvYS95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciAkUmVnRXhwID0gZ2xvYmFsVGhpcy5SZWdFeHA7XG5cbnZhciBVTlNVUFBPUlRFRF9ZID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAkUmVnRXhwKCdhJywgJ3knKTtcbiAgcmUubGFzdEluZGV4ID0gMjtcbiAgcmV0dXJuIHJlLmV4ZWMoJ2FiY2QnKSAhPT0gbnVsbDtcbn0pO1xuXG4vLyBVQyBCcm93c2VyIGJ1Z1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzEwMDhcbnZhciBNSVNTRURfU1RJQ0tZID0gVU5TVVBQT1JURURfWSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhJFJlZ0V4cCgnYScsICd5Jykuc3RpY2t5O1xufSk7XG5cbnZhciBCUk9LRU5fQ0FSRVQgPSBVTlNVUFBPUlRFRF9ZIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczNjg3XG4gIHZhciByZSA9ICRSZWdFeHAoJ15yJywgJ2d5Jyk7XG4gIHJlLmxhc3RJbmRleCA9IDI7XG4gIHJldHVybiByZS5leGVjKCdzdHInKSAhPT0gbnVsbDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQlJPS0VOX0NBUkVUOiBCUk9LRU5fQ0FSRVQsXG4gIE1JU1NFRF9TVElDS1k6IE1JU1NFRF9TVElDS1ksXG4gIFVOU1VQUE9SVEVEX1k6IFVOU1VQUE9SVEVEX1lcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJy4nLCAncycpIC0+IC8uL3MgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWxUaGlzLlJlZ0V4cDtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJy4nLCAncycpO1xuICByZXR1cm4gIShyZS5kb3RBbGwgJiYgcmUudGVzdCgnXFxuJykgJiYgcmUuZmxhZ3MgPT09ICdzJyk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnKD88YT5iKScsICdnJykgLT4gLyg/PGE+YikvZyBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgJFJlZ0V4cCA9IGdsb2JhbFRoaXMuUmVnRXhwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gJFJlZ0V4cCgnKD88YT5iKScsICdnJyk7XG4gIHJldHVybiByZS5leGVjKCdiJykuZ3JvdXBzLmEgIT09ICdiJyB8fFxuICAgICdiJy5yZXBsYWNlKHJlLCAnJDxhPmMnKSAhPT0gJ2JjJztcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIHJlZ2V4cC9uby1lbXB0eS1jYXB0dXJpbmctZ3JvdXAsIHJlZ2V4cC9uby1lbXB0eS1ncm91cCwgcmVnZXhwL25vLWxhenktZW5kcyAtLSB0ZXN0aW5nICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tdXNlbGVzcy1xdWFudGlmaWVyIC0tIHRlc3RpbmcgKi9cbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcbnZhciBzdGlja3lIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldEludGVybmFsU3RhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKS5nZXQ7XG52YXIgVU5TVVBQT1JURURfRE9UX0FMTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtZG90LWFsbCcpO1xudmFyIFVOU1VQUE9SVEVEX05DRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnJyk7XG5cbnZhciBuYXRpdmVSZXBsYWNlID0gc2hhcmVkKCduYXRpdmUtc3RyaW5nLXJlcGxhY2UnLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgaW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS87XG4gIHZhciByZTIgPSAvYiovZztcbiAgY2FsbChuYXRpdmVFeGVjLCByZTEsICdhJyk7XG4gIGNhbGwobmF0aXZlRXhlYywgcmUyLCAnYScpO1xuICByZXR1cm4gcmUxLmxhc3RJbmRleCAhPT0gMCB8fCByZTIubGFzdEluZGV4ICE9PSAwO1xufSkoKTtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBzdGlja3lIZWxwZXJzLkJST0tFTl9DQVJFVDtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQgfHwgVU5TVVBQT1JURURfWSB8fCBVTlNVUFBPUlRFRF9ET1RfQUxMIHx8IFVOU1VQUE9SVEVEX05DRztcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHJpbmcpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUocmUpO1xuICAgIHZhciBzdHIgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgIHZhciByYXcgPSBzdGF0ZS5yYXc7XG4gICAgdmFyIHJlc3VsdCwgcmVDb3B5LCBsYXN0SW5kZXgsIG1hdGNoLCBpLCBvYmplY3QsIGdyb3VwO1xuXG4gICAgaWYgKHJhdykge1xuICAgICAgcmF3Lmxhc3RJbmRleCA9IHJlLmxhc3RJbmRleDtcbiAgICAgIHJlc3VsdCA9IGNhbGwocGF0Y2hlZEV4ZWMsIHJhdywgc3RyKTtcbiAgICAgIHJlLmxhc3RJbmRleCA9IHJhdy5sYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHZhciBncm91cHMgPSBzdGF0ZS5ncm91cHM7XG4gICAgdmFyIHN0aWNreSA9IFVOU1VQUE9SVEVEX1kgJiYgcmUuc3RpY2t5O1xuICAgIHZhciBmbGFncyA9IGNhbGwocmVnZXhwRmxhZ3MsIHJlKTtcbiAgICB2YXIgc291cmNlID0gcmUuc291cmNlO1xuICAgIHZhciBjaGFyc0FkZGVkID0gMDtcbiAgICB2YXIgc3RyQ29weSA9IHN0cjtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGZsYWdzID0gcmVwbGFjZShmbGFncywgJ3knLCAnJyk7XG4gICAgICBpZiAoaW5kZXhPZihmbGFncywgJ2cnKSA9PT0gLTEpIHtcbiAgICAgICAgZmxhZ3MgKz0gJ2cnO1xuICAgICAgfVxuXG4gICAgICBzdHJDb3B5ID0gc3RyaW5nU2xpY2Uoc3RyLCByZS5sYXN0SW5kZXgpO1xuICAgICAgLy8gU3VwcG9ydCBhbmNob3JlZCBzdGlja3kgYmVoYXZpb3IuXG4gICAgICBpZiAocmUubGFzdEluZGV4ID4gMCAmJiAoIXJlLm11bHRpbGluZSB8fCByZS5tdWx0aWxpbmUgJiYgY2hhckF0KHN0ciwgcmUubGFzdEluZGV4IC0gMSkgIT09ICdcXG4nKSkge1xuICAgICAgICBzb3VyY2UgPSAnKD86ICcgKyBzb3VyY2UgKyAnKSc7XG4gICAgICAgIHN0ckNvcHkgPSAnICcgKyBzdHJDb3B5O1xuICAgICAgICBjaGFyc0FkZGVkKys7XG4gICAgICB9XG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgc3RyIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeKD86JyArIHNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgIH1cblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHNvdXJjZSArICckKD8hXFxcXHMpJywgZmxhZ3MpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG5cbiAgICBtYXRjaCA9IGNhbGwobmF0aXZlRXhlYywgc3RpY2t5ID8gcmVDb3B5IDogcmUsIHN0ckNvcHkpO1xuXG4gICAgaWYgKHN0aWNreSkge1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIG1hdGNoLmlucHV0ID0gc3RyaW5nU2xpY2UobWF0Y2guaW5wdXQsIGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaFswXSA9IHN0cmluZ1NsaWNlKG1hdGNoWzBdLCBjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2guaW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICAgIHJlLmxhc3RJbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICB9IGVsc2UgcmUubGFzdEluZGV4ID0gMDtcbiAgICB9IGVsc2UgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmUubGFzdEluZGV4ID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24ndCB3b3JrIGZvciAvKC4/KT8vXG4gICAgICBjYWxsKG5hdGl2ZVJlcGxhY2UsIG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2ggJiYgZ3JvdXBzKSB7XG4gICAgICBtYXRjaC5ncm91cHMgPSBvYmplY3QgPSBjcmVhdGUobnVsbCk7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2ldO1xuICAgICAgICBvYmplY3RbZ3JvdXBbMF1dID0gbWF0Y2hbZ3JvdXBbMV1dO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBleGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmV4ZWNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLmV4ZWNcbiQoeyB0YXJnZXQ6ICdSZWdFeHAnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAvLi8uZXhlYyAhPT0gZXhlYyB9LCB7XG4gIGV4ZWM6IGV4ZWNcbn0pO1xuIiwgIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgbW92ZWQgdG8gZW50cnkgcG9pbnRzXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjJyk7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG5cbnZhciBERUxFR0FURVNfVE9fRVhFQyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgdmFyIHJlID0gL1thY10vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIGV4ZWNDYWxsZWQgPSB0cnVlO1xuICAgIHJldHVybiAvLi8uZXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xuICByZXR1cm4gcmUudGVzdCgnYWJjJykgPT09IHRydWUgJiYgZXhlY0NhbGxlZDtcbn0oKTtcblxudmFyIG5hdGl2ZVRlc3QgPSAvLi8udGVzdDtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUudGVzdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudGVzdFxuJCh7IHRhcmdldDogJ1JlZ0V4cCcsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFERUxFR0FURVNfVE9fRVhFQyB9LCB7XG4gIHRlc3Q6IGZ1bmN0aW9uIChTKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcoUyk7XG4gICAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gICAgaWYgKCFpc0NhbGxhYmxlKGV4ZWMpKSByZXR1cm4gY2FsbChuYXRpdmVUZXN0LCBSLCBzdHJpbmcpO1xuICAgIHZhciByZXN1bHQgPSBjYWxsKGV4ZWMsIFIsIHN0cmluZyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICAgIGFuT2JqZWN0KHJlc3VsdCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcblxuLy8gYElzUmVnRXhwYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNyZWdleHBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNsYXNzb2YoaXQpID09PSAnUmVnRXhwJyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1yZWdleHAnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc1JlZ0V4cChpdCkpIHtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9uc1wiKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICB2YXIgcmVnZXhwID0gLy4vO1xuICB0cnkge1xuICAgICcvLi8nW01FVEhPRF9OQU1FXShyZWdleHApO1xuICB9IGNhdGNoIChlcnJvcjEpIHtcbiAgICB0cnkge1xuICAgICAgcmVnZXhwW01BVENIXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuICcvLi8nW01FVEhPRF9OQU1FXShyZWdleHApO1xuICAgIH0gY2F0Y2ggKGVycm9yMikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIGZhbHNlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKS5mO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIG5vdEFSZWdFeHAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm90LWEtcmVnZXhwJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBjb3JyZWN0SXNSZWdFeHBMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYycpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgc2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgbWluID0gTWF0aC5taW47XG5cbnZhciBDT1JSRUNUX0lTX1JFR0VYUF9MT0dJQyA9IGNvcnJlY3RJc1JlZ0V4cExvZ2ljKCdlbmRzV2l0aCcpO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvcHVsbC83MDJcbnZhciBNRE5fUE9MWUZJTExfQlVHID0gIUlTX1BVUkUgJiYgIUNPUlJFQ1RfSVNfUkVHRVhQX0xPR0lDICYmICEhZnVuY3Rpb24gKCkge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihTdHJpbmcucHJvdG90eXBlLCAnZW5kc1dpdGgnKTtcbiAgcmV0dXJuIGRlc2NyaXB0b3IgJiYgIWRlc2NyaXB0b3Iud3JpdGFibGU7XG59KCk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5lbmRzd2l0aFxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFNRE5fUE9MWUZJTExfQlVHICYmICFDT1JSRUNUX0lTX1JFR0VYUF9MT0dJQyB9LCB7XG4gIGVuZHNXaXRoOiBmdW5jdGlvbiBlbmRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBlbmRQb3NpdGlvbiA9IEBsZW5ndGggKi8pIHtcbiAgICB2YXIgdGhhdCA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpO1xuICAgIG5vdEFSZWdFeHAoc2VhcmNoU3RyaW5nKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdGhhdC5sZW5ndGg7XG4gICAgdmFyIGVuZCA9IGVuZFBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBsZW4gOiBtaW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSB0b1N0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiBzbGljZSh0aGF0LCBlbmQgLSBzZWFyY2gubGVuZ3RoLCBlbmQpID09PSBzZWFyY2g7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIG5vdEFSZWdFeHAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm90LWEtcmVnZXhwJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBjb3JyZWN0SXNSZWdFeHBMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYycpO1xuXG52YXIgc3RyaW5nSW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXNcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhY29ycmVjdElzUmVnRXhwTG9naWMoJ2luY2x1ZGVzJykgfSwge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgcmV0dXJuICEhfnN0cmluZ0luZGV4T2YoXG4gICAgICB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpKSxcbiAgICAgIHRvU3RyaW5nKG5vdEFSZWdFeHAoc2VhcmNoU3RyaW5nKSksXG4gICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZFxuICAgICk7XG4gIH1cbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoQ09OVkVSVF9UT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgcG9zKSB7XG4gICAgdmFyIFMgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIHBvc2l0aW9uID0gdG9JbnRlZ2VyT3JJbmZpbml0eShwb3MpO1xuICAgIHZhciBzaXplID0gUy5sZW5ndGg7XG4gICAgdmFyIGZpcnN0LCBzZWNvbmQ7XG4gICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBzaXplKSByZXR1cm4gQ09OVkVSVF9UT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBmaXJzdCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24pO1xuICAgIHJldHVybiBmaXJzdCA8IDB4RDgwMCB8fCBmaXJzdCA+IDB4REJGRiB8fCBwb3NpdGlvbiArIDEgPT09IHNpemVcbiAgICAgIHx8IChzZWNvbmQgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uICsgMSkpIDwgMHhEQzAwIHx8IHNlY29uZCA+IDB4REZGRlxuICAgICAgICA/IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBjaGFyQXQoUywgcG9zaXRpb24pXG4gICAgICAgICAgOiBmaXJzdFxuICAgICAgICA6IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBzdHJpbmdTbGljZShTLCBwb3NpdGlvbiwgcG9zaXRpb24gKyAyKVxuICAgICAgICAgIDogKGZpcnN0IC0gMHhEODAwIDw8IDEwKSArIChzZWNvbmQgLSAweERDMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5jb2RlcG9pbnRhdFxuICBjb2RlQXQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxuICBjaGFyQXQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG52YXIgY2hhckF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUnKS5jaGFyQXQ7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZScpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCcpO1xuXG52YXIgU1RSSU5HX0lURVJBVE9SID0gJ1N0cmluZyBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihTVFJJTkdfSVRFUkFUT1IpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUtQEBpdGVyYXRvclxuZGVmaW5lSXRlcmF0b3IoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFNUUklOR19JVEVSQVRPUixcbiAgICBzdHJpbmc6IHRvU3RyaW5nKGl0ZXJhdGVkKSxcbiAgICBpbmRleDogMFxuICB9KTtcbi8vIGAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lc3RyaW5naXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciBzdHJpbmcgPSBzdGF0ZS5zdHJpbmc7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4O1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBzdHJpbmcubGVuZ3RoKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpO1xuICBwb2ludCA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgc3RhdGUuaW5kZXggKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdChwb2ludCwgZmFsc2UpO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBtb3ZlZCB0byBlbnRyeSBwb2ludHNcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMsIEZPUkNFRCwgU0hBTSkge1xuICB2YXIgU1lNQk9MID0gd2VsbEtub3duU3ltYm9sKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9PSA3O1xuICB9KTtcblxuICB2YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBERUxFR0FURVNfVE9fU1lNQk9MICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcblxuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFdlIGNhbid0IHVzZSByZWFsIHJlZ2V4IGhlcmUgc2luY2UgaXQgY2F1c2VzIGRlb3B0aW1pemF0aW9uXG4gICAgICAvLyBhbmQgc2VyaW91cyBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiBpbiBWOFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMwNlxuICAgICAgcmUgPSB7fTtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICAgIHJlLmZsYWdzID0gJyc7XG4gICAgICByZVtTWU1CT0xdID0gLy4vW1NZTUJPTF07XG4gICAgfVxuXG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGV4ZWNDYWxsZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIHJlW1NZTUJPTF0oJycpO1xuICAgIHJldHVybiAhZXhlY0NhbGxlZDtcbiAgfSk7XG5cbiAgaWYgKFxuICAgICFERUxFR0FURVNfVE9fU1lNQk9MIHx8XG4gICAgIURFTEVHQVRFU19UT19FWEVDIHx8XG4gICAgRk9SQ0VEXG4gICkge1xuICAgIHZhciBuYXRpdmVSZWdFeHBNZXRob2QgPSAvLi9bU1lNQk9MXTtcbiAgICB2YXIgbWV0aG9kcyA9IGV4ZWMoU1lNQk9MLCAnJ1tLRVldLCBmdW5jdGlvbiAobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgIHZhciAkZXhlYyA9IHJlZ2V4cC5leGVjO1xuICAgICAgaWYgKCRleGVjID09PSByZWdleHBFeGVjIHx8ICRleGVjID09PSBSZWdFeHBQcm90b3R5cGUuZXhlYykge1xuICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAvLyBwb2x5ZmlsbGVkIGZ1bmN0aW9uKSwgbGVhc2luZyB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogY2FsbChuYXRpdmVSZWdFeHBNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBjYWxsKG5hdGl2ZU1ldGhvZCwgc3RyLCByZWdleHAsIGFyZzIpIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgIH0pO1xuXG4gICAgZGVmaW5lQnVpbHRJbihTdHJpbmcucHJvdG90eXBlLCBLRVksIG1ldGhvZHNbMF0pO1xuICAgIGRlZmluZUJ1aWx0SW4oUmVnRXhwUHJvdG90eXBlLCBTWU1CT0wsIG1ldGhvZHNbMV0pO1xuICB9XG5cbiAgaWYgKFNIQU0pIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShSZWdFeHBQcm90b3R5cGVbU1lNQk9MXSwgJ3NoYW0nLCB0cnVlKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGNoYXJBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY2hhckF0O1xuXG4vLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChTLCBpbmRleCwgdW5pY29kZSkge1xuICByZXR1cm4gaW5kZXggKyAodW5pY29kZSA/IGNoYXJBdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWRvcy9uby12dWxuZXJhYmxlIC0tIHNhZmVcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MUyA9IC9cXCQoWyQmJ2BdfFxcZHsxLDJ9fDxbXj5dKj4pL2c7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQgPSAvXFwkKFskJidgXXxcXGR7MSwyfSkvZztcblxuLy8gYEdldFN1YnN0aXR1dGlvbmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldHN1YnN0aXR1dGlvblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWF0Y2hlZCwgc3RyLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VtZW50KSB7XG4gIHZhciB0YWlsUG9zID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gIHZhciBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQ7XG4gIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTO1xuICB9XG4gIHJldHVybiByZXBsYWNlKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgdmFyIGNhcHR1cmU7XG4gICAgc3dpdGNoIChjaGFyQXQoY2gsIDApKSB7XG4gICAgICBjYXNlICckJzogcmV0dXJuICckJztcbiAgICAgIGNhc2UgJyYnOiByZXR1cm4gbWF0Y2hlZDtcbiAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyaW5nU2xpY2Uoc3RyLCAwLCBwb3NpdGlvbik7XG4gICAgICBjYXNlIFwiJ1wiOiByZXR1cm4gc3RyaW5nU2xpY2Uoc3RyLCB0YWlsUG9zKTtcbiAgICAgIGNhc2UgJzwnOlxuICAgICAgICBjYXB0dXJlID0gbmFtZWRDYXB0dXJlc1tzdHJpbmdTbGljZShjaCwgMSwgLTEpXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OiAvLyBcXGRcXGQ/XG4gICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICBpZiAobiA+IG0pIHtcbiAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgaWYgKGYgPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICBpZiAoZiA8PSBtKSByZXR1cm4gY2FwdHVyZXNbZiAtIDFdID09PSB1bmRlZmluZWQgPyBjaGFyQXQoY2gsIDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2hhckF0KGNoLCAxKTtcbiAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgIH1cbiAgICAgICAgY2FwdHVyZSA9IGNhcHR1cmVzW24gLSAxXTtcbiAgICB9XG4gICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgfSk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKGlzQ2FsbGFibGUoZXhlYykpIHtcbiAgICB2YXIgcmVzdWx0ID0gY2FsbChleGVjLCBSLCBTKTtcbiAgICBpZiAocmVzdWx0ICE9PSBudWxsKSBhbk9iamVjdChyZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGNsYXNzb2YoUikgPT09ICdSZWdFeHAnKSByZXR1cm4gY2FsbChyZWdleHBFeGVjLCBSLCBTKTtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciBnZXRNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCcpO1xudmFyIGdldFN1YnN0aXR1dGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtc3Vic3RpdHV0aW9uJyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgUkVQTEFDRSA9IHdlbGxLbm93blN5bWJvbCgncmVwbGFjZScpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xudmFyIGNvbmNhdCA9IHVuY3VycnlUaGlzKFtdLmNvbmNhdCk7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xudmFyIHN0cmluZ0luZGV4T2YgPSB1bmN1cnJ5VGhpcygnJy5pbmRleE9mKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBJRSA8PSAxMSByZXBsYWNlcyAkMCB3aXRoIHRoZSB3aG9sZSBtYXRjaCwgYXMgaWYgaXQgd2FzICQmXG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy82MDI0NjY2L2dldHRpbmctaWUtdG8tcmVwbGFjZS1hLXJlZ2V4LXdpdGgtdGhlLWxpdGVyYWwtc3RyaW5nLTBcbnZhciBSRVBMQUNFX0tFRVBTXyQwID0gKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9wcmVmZXItZXNjYXBlLXJlcGxhY2VtZW50LWRvbGxhci1jaGFyIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHJldHVybiAnYScucmVwbGFjZSgvLi8sICckMCcpID09PSAnJDAnO1xufSkoKTtcblxuLy8gU2FmYXJpIDw9IDEzLjAuMyg/KSBzdWJzdGl0dXRlcyBudGggY2FwdHVyZSB3aGVyZSBuPm0gd2l0aCBhbiBlbXB0eSBzdHJpbmdcbnZhciBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSA9IChmdW5jdGlvbiAoKSB7XG4gIGlmICgvLi9bUkVQTEFDRV0pIHtcbiAgICByZXR1cm4gLy4vW1JFUExBQ0VdKCdhJywgJyQwJykgPT09ICcnO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn0pKCk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9IC8uLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0Lmdyb3VwcyA9IHsgYTogJzcnIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby11c2VsZXNzLWRvbGxhci1yZXBsYWNlbWVudHMgLS0gZmFsc2UgcG9zaXRpdmVcbiAgcmV0dXJuICcnLnJlcGxhY2UocmUsICckPGE+JykgIT09ICc3Jztcbn0pO1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbmZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljKCdyZXBsYWNlJywgZnVuY3Rpb24gKF8sIG5hdGl2ZVJlcGxhY2UsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgVU5TQUZFX1NVQlNUSVRVVEUgPSBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSA/ICckJyA6ICckMCc7XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucmVwbGFjZVxuICAgIGZ1bmN0aW9uIHJlcGxhY2Uoc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgICAgdmFyIHJlcGxhY2VyID0gaXNOdWxsT3JVbmRlZmluZWQoc2VhcmNoVmFsdWUpID8gdW5kZWZpbmVkIDogZ2V0TWV0aG9kKHNlYXJjaFZhbHVlLCBSRVBMQUNFKTtcbiAgICAgIHJldHVybiByZXBsYWNlclxuICAgICAgICA/IGNhbGwocmVwbGFjZXIsIHNlYXJjaFZhbHVlLCBPLCByZXBsYWNlVmFsdWUpXG4gICAgICAgIDogY2FsbChuYXRpdmVSZXBsYWNlLCB0b1N0cmluZyhPKSwgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHN0cmluZywgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdCh0aGlzKTtcbiAgICAgIHZhciBTID0gdG9TdHJpbmcoc3RyaW5nKTtcblxuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgcmVwbGFjZVZhbHVlID09ICdzdHJpbmcnICYmXG4gICAgICAgIHN0cmluZ0luZGV4T2YocmVwbGFjZVZhbHVlLCBVTlNBRkVfU1VCU1RJVFVURSkgPT09IC0xICYmXG4gICAgICAgIHN0cmluZ0luZGV4T2YocmVwbGFjZVZhbHVlLCAnJDwnKSA9PT0gLTFcbiAgICAgICkge1xuICAgICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZVJlcGxhY2UsIHJ4LCBTLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IGlzQ2FsbGFibGUocmVwbGFjZVZhbHVlKTtcbiAgICAgIGlmICghZnVuY3Rpb25hbFJlcGxhY2UpIHJlcGxhY2VWYWx1ZSA9IHRvU3RyaW5nKHJlcGxhY2VWYWx1ZSk7XG5cbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICB2YXIgZnVsbFVuaWNvZGU7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgYnJlYWs7XG5cbiAgICAgICAgcHVzaChyZXN1bHRzLCByZXN1bHQpO1xuICAgICAgICBpZiAoIWdsb2JhbCkgYnJlYWs7XG5cbiAgICAgICAgdmFyIG1hdGNoU3RyID0gdG9TdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFjY3VtdWxhdGVkUmVzdWx0ID0gJyc7XG4gICAgICB2YXIgbmV4dFNvdXJjZVBvc2l0aW9uID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSByZXN1bHRzW2ldO1xuXG4gICAgICAgIHZhciBtYXRjaGVkID0gdG9TdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gbWF4KG1pbih0b0ludGVnZXJPckluZmluaXR5KHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICB2YXIgcmVwbGFjZW1lbnQ7XG4gICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgZXF1aXZhbGVudCB0b1xuICAgICAgICAvLyAgIGNhcHR1cmVzID0gcmVzdWx0LnNsaWNlKDEpLm1hcChtYXliZVRvU3RyaW5nKVxuICAgICAgICAvLyBidXQgZm9yIHNvbWUgcmVhc29uIGBuYXRpdmVTbGljZS5jYWxsKHJlc3VsdCwgMSwgcmVzdWx0Lmxlbmd0aClgIChjYWxsZWQgaW5cbiAgICAgICAgLy8gdGhlIHNsaWNlIHBvbHlmaWxsIHdoZW4gc2xpY2luZyBuYXRpdmUgYXJyYXlzKSBcImRvZXNuJ3Qgd29ya1wiIGluIHNhZmFyaSA5IGFuZFxuICAgICAgICAvLyBjYXVzZXMgYSBjcmFzaCAoaHR0cHM6Ly9wYXN0ZWJpbi5jb20vTjIxUXplUUEpIHdoZW4gdHJ5aW5nIHRvIGRlYnVnIGl0LlxuICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHJlc3VsdC5sZW5ndGg7IGorKykgcHVzaChjYXB0dXJlcywgbWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gY29uY2F0KFttYXRjaGVkXSwgY2FwdHVyZXMsIHBvc2l0aW9uLCBTKTtcbiAgICAgICAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSBwdXNoKHJlcGxhY2VyQXJncywgbmFtZWRDYXB0dXJlcyk7XG4gICAgICAgICAgcmVwbGFjZW1lbnQgPSB0b1N0cmluZyhhcHBseShyZXBsYWNlVmFsdWUsIHVuZGVmaW5lZCwgcmVwbGFjZXJBcmdzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVwbGFjZW1lbnQgPSBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgUywgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSBuZXh0U291cmNlUG9zaXRpb24pIHtcbiAgICAgICAgICBhY2N1bXVsYXRlZFJlc3VsdCArPSBzdHJpbmdTbGljZShTLCBuZXh0U291cmNlUG9zaXRpb24sIHBvc2l0aW9uKSArIHJlcGxhY2VtZW50O1xuICAgICAgICAgIG5leHRTb3VyY2VQb3NpdGlvbiA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkUmVzdWx0ICsgc3RyaW5nU2xpY2UoUywgbmV4dFNvdXJjZVBvc2l0aW9uKTtcbiAgICB9XG4gIF07XG59LCAhUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgfHwgIVJFUExBQ0VfS0VFUFNfJDAgfHwgUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUpO1xuIiwgIi8vIOWmguaenOS9v+eUqCBqc3gtZG9t77yM5YiZ5Y+W5raI5rOo6YeK5Lul5LiL6KGMIC8gVG8gVXNlIGpzeC1kb20sIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmVcbmV4cG9ydCAqIGZyb20gJ2pzeC1kb20nO1xuIiwgIi8qIGVzbGludC1kaXNhYmxlICovXG5jb25zdCBrZXlzID0gT2JqZWN0LmtleXM7XG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5mdW5jdGlvbiBpc0Jvb2xlYW4odmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSBcImJvb2xlYW5cIjtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudCh2YWwpIHtcbiAgcmV0dXJuIHZhbCAmJiB0eXBlb2YgdmFsLm5vZGVUeXBlID09PSBcIm51bWJlclwiO1xufVxuZnVuY3Rpb24gaXNTdHJpbmcodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiO1xufVxuZnVuY3Rpb24gaXNOdW1iZXIodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiO1xufVxuZnVuY3Rpb24gaXNPYmplY3QodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiID8gdmFsICE9PSBudWxsIDogaXNGdW5jdGlvbih2YWwpO1xufVxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09IFwiZnVuY3Rpb25cIjtcbn1cbmZ1bmN0aW9uIGlzQ29tcG9uZW50Q2xhc3MoQ29tcG9uZW50KSB7XG4gIHJldHVybiAhIShDb21wb25lbnQgJiYgQ29tcG9uZW50LmlzQ29tcG9uZW50KTtcbn1cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKG9iaikge1xuICByZXR1cm4gKFxuICAgIGlzT2JqZWN0KG9iaikgJiZcbiAgICB0eXBlb2Ygb2JqLmxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJlxuICAgIHR5cGVvZiBvYmoubm9kZVR5cGUgIT09IFwibnVtYmVyXCJcbiAgKTtcbn1cbmZ1bmN0aW9uIGZvckVhY2godmFsdWUsIGZuKSB7XG4gIGlmICghdmFsdWUpIHJldHVybjtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cyh2YWx1ZSkpIHtcbiAgICBmbih2YWx1ZVtrZXldLCBrZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlZigpIHtcbiAgcmV0dXJuIE9iamVjdC5zZWFsKHtcbiAgICBjdXJyZW50OiBudWxsLFxuICB9KTtcbn1cbmZ1bmN0aW9uIGlzUmVmKG1heWJlUmVmKSB7XG4gIHJldHVybiBpc09iamVjdChtYXliZVJlZikgJiYgXCJjdXJyZW50XCIgaW4gbWF5YmVSZWY7XG59XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgb25cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iL2I4N2FhYmRmZTFiNzQ2MWU3MzMxYWJiMzYwMWQ5ZTZiYjI3NTQ0YmMvTElDRU5TRVxuICovXG5cbi8qKlxuICogQ1NTIHByb3BlcnRpZXMgd2hpY2ggYWNjZXB0IG51bWJlcnMgYnV0IGFyZSBub3QgaW4gdW5pdHMgb2YgXCJweFwiLlxuICovXG5jb25zdCBpc1VuaXRsZXNzTnVtYmVyID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogMCxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IDAsXG4gIGJvcmRlckltYWdlU2xpY2U6IDAsXG4gIGJvcmRlckltYWdlV2lkdGg6IDAsXG4gIGJveEZsZXg6IDAsXG4gIGJveEZsZXhHcm91cDogMCxcbiAgYm94T3JkaW5hbEdyb3VwOiAwLFxuICBjb2x1bW5Db3VudDogMCxcbiAgY29sdW1uczogMCxcbiAgZmxleDogMCxcbiAgZmxleEdyb3c6IDAsXG4gIGZsZXhQb3NpdGl2ZTogMCxcbiAgZmxleFNocmluazogMCxcbiAgZmxleE5lZ2F0aXZlOiAwLFxuICBmbGV4T3JkZXI6IDAsXG4gIGdyaWRBcmVhOiAwLFxuICBncmlkUm93OiAwLFxuICBncmlkUm93RW5kOiAwLFxuICBncmlkUm93U3BhbjogMCxcbiAgZ3JpZFJvd1N0YXJ0OiAwLFxuICBncmlkQ29sdW1uOiAwLFxuICBncmlkQ29sdW1uRW5kOiAwLFxuICBncmlkQ29sdW1uU3BhbjogMCxcbiAgZ3JpZENvbHVtblN0YXJ0OiAwLFxuICBmb250V2VpZ2h0OiAwLFxuICBsaW5lQ2xhbXA6IDAsXG4gIGxpbmVIZWlnaHQ6IDAsXG4gIG9wYWNpdHk6IDAsXG4gIG9yZGVyOiAwLFxuICBvcnBoYW5zOiAwLFxuICB0YWJTaXplOiAwLFxuICB3aWRvd3M6IDAsXG4gIHpJbmRleDogMCxcbiAgem9vbTogMCxcbiAgLy8gU1ZHLXJlbGF0ZWQgcHJvcGVydGllc1xuICBmaWxsT3BhY2l0eTogMCxcbiAgZmxvb2RPcGFjaXR5OiAwLFxuICBzdG9wT3BhY2l0eTogMCxcbiAgc3Ryb2tlRGFzaGFycmF5OiAwLFxuICBzdHJva2VEYXNob2Zmc2V0OiAwLFxuICBzdHJva2VNaXRlcmxpbWl0OiAwLFxuICBzdHJva2VPcGFjaXR5OiAwLFxuICBzdHJva2VXaWR0aDogMCxcbn07XG5cbi8qKlxuICogQHBhcmFtIHByZWZpeCB2ZW5kb3Itc3BlY2lmaWMgcHJlZml4LCBlZzogV2Via2l0XG4gKiBAcGFyYW0ga2V5IHN0eWxlIG5hbWUsIGVnOiB0cmFuc2l0aW9uRHVyYXRpb25cbiAqIEByZXR1cm4gc3R5bGUgbmFtZSBwcmVmaXhlZCB3aXRoIGBwcmVmaXhgLCBwcm9wZXJseSBjYW1lbENhc2VkLCBlZzpcbiAqIFdlYmtpdFRyYW5zaXRpb25EdXJhdGlvblxuICovXG5mdW5jdGlvbiBwcmVmaXhLZXkocHJlZml4LCBrZXkpIHtcbiAgcmV0dXJuIHByZWZpeCArIGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zdWJzdHJpbmcoMSk7XG59XG5cbi8qKlxuICogU3VwcG9ydCBzdHlsZSBuYW1lcyB0aGF0IG1heSBjb21lIHBhc3NlZCBpbiBwcmVmaXhlZCBieSBhZGRpbmcgcGVybXV0YXRpb25zXG4gKiBvZiB2ZW5kb3IgcHJlZml4ZXMuXG4gKi9cbmNvbnN0IHByZWZpeGVzID0gW1wiV2Via2l0XCIsIFwibXNcIiwgXCJNb3pcIiwgXCJPXCJdO1xuLy8gVXNpbmcgT2JqZWN0LmtleXMgaGVyZSwgb3IgZWxzZSB0aGUgdmFuaWxsYSBmb3ItaW4gbG9vcCBtYWtlcyBJRTggZ28gaW50byBhblxuLy8gaW5maW5pdGUgbG9vcCwgYmVjYXVzZSBpdCBpdGVyYXRlcyBvdmVyIHRoZSBuZXdseSBhZGRlZCBwcm9wcyB0b28uXG5rZXlzKGlzVW5pdGxlc3NOdW1iZXIpLmZvckVhY2goKHByb3ApID0+IHtcbiAgcHJlZml4ZXMuZm9yRWFjaCgocHJlZml4KSA9PiB7XG4gICAgaXNVbml0bGVzc051bWJlcltwcmVmaXhLZXkocHJlZml4LCBwcm9wKV0gPSAwOyAvLyBpc1VuaXRsZXNzTnVtYmVyW3Byb3BdXG4gIH0pO1xufSk7XG5cbmNvbnN0IGpzeERvbVR5cGUgPSBTeW1ib2wuZm9yKFwianN4LWRvbTp0eXBlXCIpO1xudmFyIEpzeERvbVR5cGUgPSAvKiNfX1BVUkVfXyovIChmdW5jdGlvbiAoSnN4RG9tVHlwZSkge1xuICBKc3hEb21UeXBlW1wiU2hhZG93Um9vdFwiXSA9IFwiU2hhZG93Um9vdFwiO1xuICByZXR1cm4gSnN4RG9tVHlwZTtcbn0pKEpzeERvbVR5cGUgfHwge30pO1xuZnVuY3Rpb24gU2hhZG93Um9vdChfcmVmKSB7XG4gIGxldCB7IGNoaWxkcmVuLCByZWYsIC4uLmF0dHIgfSA9IF9yZWY7XG4gIHJldHVybiB7XG4gICAgW2pzeERvbVR5cGVdOiBKc3hEb21UeXBlLlNoYWRvd1Jvb3QsXG4gICAgcmVmLFxuICAgIGF0dHIsXG4gICAgY2hpbGRyZW4sXG4gIH07XG59XG5mdW5jdGlvbiBpc1NoYWRvd1Jvb3QoZWwpIHtcbiAgcmV0dXJuIGVsICE9IG51bGwgJiYgZWxbanN4RG9tVHlwZV0gPT09IEpzeERvbVR5cGUuU2hhZG93Um9vdDtcbn1cblxuY29uc3QgU1ZHTmFtZXNwYWNlID0gXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiO1xuY29uc3QgWExpbmtOYW1lc3BhY2UgPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIjtcbmNvbnN0IFhNTE5hbWVzcGFjZSA9IFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCI7XG5cbi8vIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvanN4LWluLWRlcHRoLmh0bWwjYm9vbGVhbnMtbnVsbC1hbmQtdW5kZWZpbmVkLWFyZS1pZ25vcmVkXG4vLyBFbXVsYXRlIEpTWCBFeHByZXNzaW9uIGxvZ2ljIHRvIGlnbm9yZSBjZXJ0YWluIHR5cGUgb2YgY2hpbGRyZW4gb3IgY2xhc3NOYW1lLlxuZnVuY3Rpb24gaXNWaXNpYmxlQ2hpbGQodmFsdWUpIHtcbiAgcmV0dXJuICFpc0Jvb2xlYW4odmFsdWUpICYmIHZhbHVlICE9IG51bGw7XG59XG5cbi8qKlxuICogQ29udmVydCBhIGB2YWx1ZWAgdG8gYSBjbGFzc05hbWUgc3RyaW5nLlxuICogYHZhbHVlYCBjYW4gYmUgYSBzdHJpbmcsIGFuIGFycmF5IG9yIGEgYERpY3Rpb25hcnk8Ym9vbGVhbj5gLlxuICovXG5mdW5jdGlvbiBjbGFzc05hbWUodmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcChjbGFzc05hbWUpLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICBpZiAoU3ltYm9sLml0ZXJhdG9yIGluIHZhbHVlKSB7XG4gICAgICByZXR1cm4gY2xhc3NOYW1lKEFycmF5LmZyb20odmFsdWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXModmFsdWUpXG4gICAgICAuZmlsdGVyKChrKSA9PiB2YWx1ZVtrXSlcbiAgICAgIC5qb2luKFwiIFwiKTtcbiAgfSBlbHNlIGlmIChpc1Zpc2libGVDaGlsZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gXCJcIiArIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG59XG5jb25zdCBzdmcgPSB7XG4gIGFuaW1hdGU6IDAsXG4gIGNpcmNsZTogMCxcbiAgY2xpcFBhdGg6IDAsXG4gIGRlZnM6IDAsXG4gIGRlc2M6IDAsXG4gIGVsbGlwc2U6IDAsXG4gIGZlQmxlbmQ6IDAsXG4gIGZlQ29sb3JNYXRyaXg6IDAsXG4gIGZlQ29tcG9uZW50VHJhbnNmZXI6IDAsXG4gIGZlQ29tcG9zaXRlOiAwLFxuICBmZUNvbnZvbHZlTWF0cml4OiAwLFxuICBmZURpZmZ1c2VMaWdodGluZzogMCxcbiAgZmVEaXNwbGFjZW1lbnRNYXA6IDAsXG4gIGZlRGlzdGFudExpZ2h0OiAwLFxuICBmZUZsb29kOiAwLFxuICBmZUZ1bmNBOiAwLFxuICBmZUZ1bmNCOiAwLFxuICBmZUZ1bmNHOiAwLFxuICBmZUZ1bmNSOiAwLFxuICBmZUdhdXNzaWFuQmx1cjogMCxcbiAgZmVJbWFnZTogMCxcbiAgZmVNZXJnZTogMCxcbiAgZmVNZXJnZU5vZGU6IDAsXG4gIGZlTW9ycGhvbG9neTogMCxcbiAgZmVPZmZzZXQ6IDAsXG4gIGZlUG9pbnRMaWdodDogMCxcbiAgZmVTcGVjdWxhckxpZ2h0aW5nOiAwLFxuICBmZVNwb3RMaWdodDogMCxcbiAgZmVUaWxlOiAwLFxuICBmZVR1cmJ1bGVuY2U6IDAsXG4gIGZpbHRlcjogMCxcbiAgZm9yZWlnbk9iamVjdDogMCxcbiAgZzogMCxcbiAgaW1hZ2U6IDAsXG4gIGxpbmU6IDAsXG4gIGxpbmVhckdyYWRpZW50OiAwLFxuICBtYXJrZXI6IDAsXG4gIG1hc2s6IDAsXG4gIG1ldGFkYXRhOiAwLFxuICBwYXRoOiAwLFxuICBwYXR0ZXJuOiAwLFxuICBwb2x5Z29uOiAwLFxuICBwb2x5bGluZTogMCxcbiAgcmFkaWFsR3JhZGllbnQ6IDAsXG4gIHJlY3Q6IDAsXG4gIHN0b3A6IDAsXG4gIHN2ZzogMCxcbiAgc3dpdGNoOiAwLFxuICBzeW1ib2w6IDAsXG4gIHRleHQ6IDAsXG4gIHRleHRQYXRoOiAwLFxuICB0c3BhbjogMCxcbiAgdXNlOiAwLFxuICB2aWV3OiAwLFxufTtcbmNvbnN0IG5vblByZXNlbnRhdGlvblNWR0F0dHJpYnV0ZXMgPVxuICAvXihhKGxsfHR8dSl8YmFzZVtGUF18YyhhbHxsaXBQYXRoVXxvbil8ZGl8ZWR8ZXh8ZmlsdGVyW1JVXXxnKGx5cGhSfHIpfGtlfGwoZW58aW0pfG1hKHJrZXJbSFVXXXxzKXxufHBhdHxwcnxwb2ludFteZV18cmVbXm5dfHNbcHV5XXxzdFteb3JdfHRhfHRleHRMfHZpfHhDfHl8eikvO1xuZnVuY3Rpb24gY3JlYXRlRmFjdG9yeSh0YWcpIHtcbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQuYmluZChudWxsLCB0YWcpO1xufVxuZnVuY3Rpb24gRnJhZ21lbnQoYXR0cikge1xuICBjb25zdCBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgYXBwZW5kQ2hpbGQoYXR0ci5jaGlsZHJlbiwgZnJhZ21lbnQpO1xuICByZXR1cm4gZnJhZ21lbnQ7XG59XG5jbGFzcyBDb21wb25lbnQge1xuICBzdGF0aWMgaXNDb21wb25lbnQgPSB0cnVlO1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbmZ1bmN0aW9uIGluaXRDb21wb25lbnRDbGFzcyhDbGFzcywgYXR0ciwgY2hpbGRyZW4pIHtcbiAgYXR0ciA9IHtcbiAgICAuLi5hdHRyLFxuICAgIGNoaWxkcmVuLFxuICB9O1xuICBjb25zdCBpbnN0YW5jZSA9IG5ldyBDbGFzcyhhdHRyKTtcbiAgY29uc3Qgbm9kZSA9IGluc3RhbmNlLnJlbmRlcigpO1xuICBpZiAoXCJyZWZcIiBpbiBhdHRyKSB7XG4gICAgYXR0YWNoUmVmKGF0dHIucmVmLCBpbnN0YW5jZSk7XG4gIH1cbiAgcmV0dXJuIG5vZGU7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmZ1bmN0aW9uIGpzeCh0YWcsIF9yZWYpIHtcbiAgbGV0IHsgY2hpbGRyZW4sIC4uLmF0dHIgfSA9IF9yZWY7XG4gIGlmICghYXR0ci5uYW1lc3BhY2VVUkkgJiYgc3ZnW3RhZ10gPT09IDApIHtcbiAgICBhdHRyID0ge1xuICAgICAgLi4uYXR0cixcbiAgICAgIG5hbWVzcGFjZVVSSTogU1ZHTmFtZXNwYWNlLFxuICAgIH07XG4gIH1cbiAgbGV0IG5vZGU7XG4gIGlmIChpc1N0cmluZyh0YWcpKSB7XG4gICAgbm9kZSA9IGF0dHIubmFtZXNwYWNlVVJJXG4gICAgICA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhhdHRyLm5hbWVzcGFjZVVSSSwgdGFnKVxuICAgICAgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG4gICAgYXR0cmlidXRlcyhhdHRyLCBub2RlKTtcbiAgICBhcHBlbmRDaGlsZChjaGlsZHJlbiwgbm9kZSk7XG5cbiAgICAvLyBTZWxlY3QgYG9wdGlvbmAgZWxlbWVudHMgaW4gYHNlbGVjdGBcbiAgICBpZiAobm9kZSBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MU2VsZWN0RWxlbWVudCAmJiBhdHRyLnZhbHVlICE9IG51bGwpIHtcbiAgICAgIGlmIChhdHRyLm11bHRpcGxlID09PSB0cnVlICYmIEFycmF5LmlzQXJyYXkoYXR0ci52YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gYXR0ci52YWx1ZS5tYXAoKHZhbHVlKSA9PiBTdHJpbmcodmFsdWUpKTtcbiAgICAgICAgbm9kZVxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKFwib3B0aW9uXCIpXG4gICAgICAgICAgLmZvckVhY2goXG4gICAgICAgICAgICAob3B0aW9uKSA9PiAob3B0aW9uLnNlbGVjdGVkID0gdmFsdWVzLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSkpLFxuICAgICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLnZhbHVlID0gYXR0ci52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXR0YWNoUmVmKGF0dHIucmVmLCBub2RlKTtcbiAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHRhZykpIHtcbiAgICAvLyBDdXN0b20gZWxlbWVudHMuXG4gICAgaWYgKGlzT2JqZWN0KHRhZy5kZWZhdWx0UHJvcHMpKSB7XG4gICAgICBhdHRyID0ge1xuICAgICAgICAuLi50YWcuZGVmYXVsdFByb3BzLFxuICAgICAgICAuLi5hdHRyLFxuICAgICAgfTtcbiAgICB9XG4gICAgbm9kZSA9IGlzQ29tcG9uZW50Q2xhc3ModGFnKVxuICAgICAgPyBpbml0Q29tcG9uZW50Q2xhc3ModGFnLCBhdHRyLCBjaGlsZHJlbilcbiAgICAgIDogdGFnKHtcbiAgICAgICAgICAuLi5hdHRyLFxuICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIEpTWCBlbGVtZW50IHR5cGU6ICR7dGFnfWApO1xuICB9XG4gIHJldHVybiBub2RlO1xufVxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0YWcsIGF0dHIpIHtcbiAgZm9yIChcbiAgICB2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICBjaGlsZHJlbiA9IG5ldyBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksXG4gICAgICBfa2V5MiA9IDI7XG4gICAgX2tleTIgPCBfbGVuO1xuICAgIF9rZXkyKytcbiAgKSB7XG4gICAgY2hpbGRyZW5bX2tleTIgLSAyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gIH1cbiAgaWYgKGlzU3RyaW5nKGF0dHIpIHx8IEFycmF5LmlzQXJyYXkoYXR0cikpIHtcbiAgICBjaGlsZHJlbi51bnNoaWZ0KGF0dHIpO1xuICAgIGF0dHIgPSB7fTtcbiAgfVxuICBhdHRyID0gYXR0ciB8fCB7fTtcbiAgaWYgKGF0dHIuY2hpbGRyZW4gIT0gbnVsbCAmJiAhY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgKHsgY2hpbGRyZW4sIC4uLmF0dHIgfSA9IGF0dHIpO1xuICB9XG4gIHJldHVybiBqc3goXG4gICAgdGFnLFxuICAgIHtcbiAgICAgIC4uLmF0dHIsXG4gICAgICBjaGlsZHJlbixcbiAgICB9LFxuICAgIGF0dHIua2V5LFxuICApO1xufVxuZnVuY3Rpb24gYXR0YWNoUmVmKHJlZiwgbm9kZSkge1xuICBpZiAoaXNSZWYocmVmKSkge1xuICAgIHJlZi5jdXJyZW50ID0gbm9kZTtcbiAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHJlZikpIHtcbiAgICByZWYobm9kZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGFwcGVuZENoaWxkKGNoaWxkLCBub2RlKSB7XG4gIGlmIChpc0FycmF5TGlrZShjaGlsZCkpIHtcbiAgICBhcHBlbmRDaGlsZHJlbihjaGlsZCwgbm9kZSk7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmcoY2hpbGQpIHx8IGlzTnVtYmVyKGNoaWxkKSkge1xuICAgIGFwcGVuZENoaWxkVG9Ob2RlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNoaWxkKSwgbm9kZSk7XG4gIH0gZWxzZSBpZiAoY2hpbGQgPT09IG51bGwpIHtcbiAgICBhcHBlbmRDaGlsZFRvTm9kZShkb2N1bWVudC5jcmVhdGVDb21tZW50KFwiXCIpLCBub2RlKTtcbiAgfSBlbHNlIGlmIChpc0VsZW1lbnQoY2hpbGQpKSB7XG4gICAgYXBwZW5kQ2hpbGRUb05vZGUoY2hpbGQsIG5vZGUpO1xuICB9IGVsc2UgaWYgKGlzU2hhZG93Um9vdChjaGlsZCkpIHtcbiAgICBjb25zdCBzaGFkb3dSb290ID0gbm9kZS5hdHRhY2hTaGFkb3coY2hpbGQuYXR0cik7XG4gICAgYXBwZW5kQ2hpbGQoY2hpbGQuY2hpbGRyZW4sIHNoYWRvd1Jvb3QpO1xuICAgIGF0dGFjaFJlZihjaGlsZC5yZWYsIHNoYWRvd1Jvb3QpO1xuICB9XG59XG5mdW5jdGlvbiBhcHBlbmRDaGlsZHJlbihjaGlsZHJlbiwgbm9kZSkge1xuICBmb3IgKGNvbnN0IGNoaWxkIG9mIFsuLi5jaGlsZHJlbl0pIHtcbiAgICBhcHBlbmRDaGlsZChjaGlsZCwgbm9kZSk7XG4gIH1cbiAgcmV0dXJuIG5vZGU7XG59XG5mdW5jdGlvbiBhcHBlbmRDaGlsZFRvTm9kZShjaGlsZCwgbm9kZSkge1xuICBpZiAobm9kZSBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50KSB7XG4gICAgbm9kZS5jb250ZW50LmFwcGVuZENoaWxkKGNoaWxkKTtcbiAgfSBlbHNlIHtcbiAgICBub2RlLmFwcGVuZENoaWxkKGNoaWxkKTtcbiAgfVxufVxuZnVuY3Rpb24gbm9ybWFsaXplQXR0cmlidXRlKHMsIHNlcGFyYXRvcikge1xuICByZXR1cm4gcy5yZXBsYWNlKC9bQS1aXS9nLCAobWF0Y2gpID0+IHNlcGFyYXRvciArIG1hdGNoLnRvTG93ZXJDYXNlKCkpO1xufVxuZnVuY3Rpb24gc3R5bGUobm9kZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09IGZhbHNlKTtcbiAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICB2YWx1ZS5mb3JFYWNoKCh2KSA9PiBzdHlsZShub2RlLCB2KSk7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCB2YWx1ZSk7XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgZm9yRWFjaCh2YWx1ZSwgKHZhbCwga2V5KSA9PiB7XG4gICAgICBpZiAoa2V5LmluZGV4T2YoXCItXCIpID09PSAwKSB7XG4gICAgICAgIC8vIENTUyBjdXN0b20gcHJvcGVydGllcyAodmFyaWFibGVzKSBzdGFydCB3aXRoIGAtYCAoZS5nLiBgLS1teS12YXJpYWJsZWApXG4gICAgICAgIC8vIGFuZCBtdXN0IGJlIGFzc2lnbmVkIHZpYSBgc2V0UHJvcGVydHlgLlxuICAgICAgICBub2RlLnN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFsKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIodmFsKSAmJiBpc1VuaXRsZXNzTnVtYmVyW2tleV0gIT09IDApIHtcbiAgICAgICAgbm9kZS5zdHlsZVtrZXldID0gdmFsICsgXCJweFwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5zdHlsZVtrZXldID0gdmFsO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5mdW5jdGlvbiBhdHRyaWJ1dGUoa2V5LCB2YWx1ZSwgbm9kZSkge1xuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2UgXCJ4bGlua0FjdHVhdGVcIjpcbiAgICBjYXNlIFwieGxpbmtBcmNyb2xlXCI6XG4gICAgY2FzZSBcInhsaW5rSHJlZlwiOlxuICAgIGNhc2UgXCJ4bGlua1JvbGVcIjpcbiAgICBjYXNlIFwieGxpbmtTaG93XCI6XG4gICAgY2FzZSBcInhsaW5rVGl0bGVcIjpcbiAgICBjYXNlIFwieGxpbmtUeXBlXCI6XG4gICAgICBhdHRyTlMobm9kZSwgWExpbmtOYW1lc3BhY2UsIG5vcm1hbGl6ZUF0dHJpYnV0ZShrZXksIFwiOlwiKSwgdmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJ4bWxuc1hsaW5rXCI6XG4gICAgICBhdHRyKG5vZGUsIG5vcm1hbGl6ZUF0dHJpYnV0ZShrZXksIFwiOlwiKSwgdmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJ4bWxCYXNlXCI6XG4gICAgY2FzZSBcInhtbExhbmdcIjpcbiAgICBjYXNlIFwieG1sU3BhY2VcIjpcbiAgICAgIGF0dHJOUyhub2RlLCBYTUxOYW1lc3BhY2UsIG5vcm1hbGl6ZUF0dHJpYnV0ZShrZXksIFwiOlwiKSwgdmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICB9XG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSBcImh0bWxGb3JcIjpcbiAgICAgIGF0dHIobm9kZSwgXCJmb3JcIiwgdmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJkYXRhc2V0XCI6XG4gICAgICBmb3JFYWNoKHZhbHVlLCAoZGF0YVZhbHVlLCBkYXRhS2V5KSA9PiB7XG4gICAgICAgIGlmIChkYXRhVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIG5vZGUuZGF0YXNldFtkYXRhS2V5XSA9IGRhdGFWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcImlubmVySFRNTFwiOlxuICAgIGNhc2UgXCJpbm5lclRleHRcIjpcbiAgICBjYXNlIFwidGV4dENvbnRlbnRcIjpcbiAgICAgIGlmIChpc1Zpc2libGVDaGlsZCh2YWx1ZSkpIHtcbiAgICAgICAgbm9kZVtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI6XG4gICAgICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIG5vZGUuaW5uZXJIVE1MID0gdmFsdWVbXCJfX2h0bWxcIl07XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgY2FzZSBcInZhbHVlXCI6XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCBub2RlIGluc3RhbmNlb2Ygd2luZG93LkhUTUxTZWxlY3RFbGVtZW50KSB7XG4gICAgICAgIC8vIHNraXAgbnVsbGlzaCB2YWx1ZXNcbiAgICAgICAgLy8gZm9yIGA8c2VsZWN0PmAgYXBwbHkgdmFsdWUgYWZ0ZXIgYXBwZW5kaW5nIGA8b3B0aW9uPmAgZWxlbWVudHNcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmIChub2RlIGluc3RhbmNlb2Ygd2luZG93LkhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcbiAgICAgICAgbm9kZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyB1c2UgYXR0cmlidXRlIGZvciBvdGhlciBlbGVtZW50c1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInNwZWxsQ2hlY2tcIjpcbiAgICAgIG5vZGUuc3BlbGxjaGVjayA9IHZhbHVlO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJjbGFzc1wiOlxuICAgIGNhc2UgXCJjbGFzc05hbWVcIjpcbiAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICB2YWx1ZShub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF0dHIobm9kZSwgXCJjbGFzc1wiLCBjbGFzc05hbWUodmFsdWUpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICBjYXNlIFwicmVmXCI6XG4gICAgY2FzZSBcIm5hbWVzcGFjZVVSSVwiOlxuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJzdHlsZVwiOlxuICAgICAgc3R5bGUobm9kZSwgdmFsdWUpO1xuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJvblwiOlxuICAgIGNhc2UgXCJvbkNhcHR1cmVcIjpcbiAgICAgIGZvckVhY2godmFsdWUsIChldmVudEhhbmRsZXIsIGV2ZW50TmFtZSkgPT4ge1xuICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBldmVudEhhbmRsZXIsIGtleSA9PT0gXCJvbkNhcHR1cmVcIik7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICAvLyBmYWxsdGhyb3VnaFxuICB9XG4gIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgIGlmIChrZXlbMF0gPT09IFwib1wiICYmIGtleVsxXSA9PT0gXCJuXCIpIHtcbiAgICAgIGxldCBhdHRyaWJ1dGUgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IHVzZUNhcHR1cmUgPSBhdHRyaWJ1dGUuZW5kc1dpdGgoXCJjYXB0dXJlXCIpO1xuICAgICAgaWYgKGF0dHJpYnV0ZSA9PT0gXCJvbmRvdWJsZWNsaWNrXCIpIHtcbiAgICAgICAgYXR0cmlidXRlID0gXCJvbmRibGNsaWNrXCI7XG4gICAgICB9IGVsc2UgaWYgKHVzZUNhcHR1cmUgJiYgYXR0cmlidXRlID09PSBcIm9uZG91YmxlY2xpY2tjYXB0dXJlXCIpIHtcbiAgICAgICAgYXR0cmlidXRlID0gXCJvbmRibGNsaWNrY2FwdHVyZVwiO1xuICAgICAgfVxuICAgICAgaWYgKCF1c2VDYXB0dXJlICYmIG5vZGVbYXR0cmlidXRlXSA9PT0gbnVsbCkge1xuICAgICAgICAvLyB1c2UgcHJvcGVydHkgd2hlbiBwb3NzaWJsZSBQUiAjMTdcbiAgICAgICAgbm9kZVthdHRyaWJ1dGVdID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHVzZUNhcHR1cmUpIHtcbiAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgIGF0dHJpYnV0ZS5zdWJzdHJpbmcoMiwgYXR0cmlidXRlLmxlbmd0aCAtIDcpLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgZXZlbnROYW1lO1xuICAgICAgICBpZiAoYXR0cmlidXRlIGluIHdpbmRvdykge1xuICAgICAgICAgIC8vIHN0YW5kYXJkIGV2ZW50XG4gICAgICAgICAgLy8gdGhlIEpTWCBhdHRyaWJ1dGUgY291bGQgaGF2ZSBiZWVuIFwib25Nb3VzZU92ZXJcIiBhbmQgdGhlXG4gICAgICAgICAgLy8gbWVtYmVyIG5hbWUgXCJvbm1vdXNlb3ZlclwiIGlzIG9uIHRoZSB3aW5kb3cncyBwcm90b3R5cGVcbiAgICAgICAgICAvLyBzbyBsZXQncyBhZGQgdGhlIGxpc3RlbmVyIFwibW91c2VvdmVyXCIsIHdoaWNoIGlzIGFsbCBsb3dlcmNhc2VkXG4gICAgICAgICAgY29uc3Qgc3RhbmRhcmRFdmVudE5hbWUgPSBhdHRyaWJ1dGUuc3Vic3RyaW5nKDIpO1xuICAgICAgICAgIGV2ZW50TmFtZSA9IHN0YW5kYXJkRXZlbnROYW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGN1c3RvbSBldmVudFxuICAgICAgICAgIC8vIHRoZSBKU1ggYXR0cmlidXRlIGNvdWxkIGhhdmUgYmVlbiBcIm9uTXlDdXN0b21FdmVudFwiXG4gICAgICAgICAgLy8gc28gbGV0J3MgdHJpbSBvZmYgdGhlIFwib25cIiBwcmVmaXggYW5kIGxvd2VyY2FzZSB0aGUgZmlyc3QgY2hhcmFjdGVyXG4gICAgICAgICAgLy8gYW5kIGFkZCB0aGUgbGlzdGVuZXIgXCJteUN1c3RvbUV2ZW50XCJcbiAgICAgICAgICAvLyBleGNlcHQgZm9yIHRoZSBmaXJzdCBjaGFyYWN0ZXIsIHdlIGtlZXAgdGhlIGV2ZW50IG5hbWUgY2FzZVxuICAgICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50TmFtZSA9IGF0dHJpYnV0ZVsyXSArIGtleS5zbGljZSgzKTtcbiAgICAgICAgICBldmVudE5hbWUgPSBjdXN0b21FdmVudE5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICBub2RlW2tleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgIGF0dHIobm9kZSwga2V5LCBcIlwiKTtcbiAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gZmFsc2UgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgU1ZHRWxlbWVudCAmJiAhbm9uUHJlc2VudGF0aW9uU1ZHQXR0cmlidXRlcy50ZXN0KGtleSkpIHtcbiAgICAgIGF0dHIobm9kZSwgbm9ybWFsaXplQXR0cmlidXRlKGtleSwgXCItXCIpLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF0dHIobm9kZSwga2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBhdHRyKG5vZGUsIGtleSwgdmFsdWUpIHtcbiAgbm9kZS5zZXRBdHRyaWJ1dGUoa2V5LCB2YWx1ZSk7XG59XG5mdW5jdGlvbiBhdHRyTlMobm9kZSwgbmFtZXNwYWNlLCBrZXksIHZhbHVlKSB7XG4gIG5vZGUuc2V0QXR0cmlidXRlTlMobmFtZXNwYWNlLCBrZXksIHZhbHVlKTtcbn1cbmZ1bmN0aW9uIGF0dHJpYnV0ZXMoYXR0ciwgbm9kZSkge1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKGF0dHIpKSB7XG4gICAgYXR0cmlidXRlKGtleSwgYXR0cltrZXldLCBub2RlKTtcbiAgfVxuICByZXR1cm4gbm9kZTtcbn1cblxuZnVuY3Rpb24gdXNlVGV4dChpbml0aWFsVmFsdWUpIHtcbiAgY29uc3QgdGV4dCA9IG5ldyBUZXh0KCk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0ZXh0LCBcInRvU3RyaW5nXCIsIHtcbiAgICB2YWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHRDb250ZW50O1xuICAgIH0sXG4gIH0pO1xuICBmdW5jdGlvbiBzZXRUZXh0KHZhbHVlKSB7XG4gICAgdGV4dC50ZXh0Q29udGVudCA9IHZhbHVlO1xuICB9XG4gIGlmIChpbml0aWFsVmFsdWUgIT0gbnVsbCkge1xuICAgIHNldFRleHQoaW5pdGlhbFZhbHVlKTtcbiAgfVxuICByZXR1cm4gW3RleHQsIHNldFRleHRdO1xufVxuZnVuY3Rpb24gdXNlQ2xhc3NMaXN0KGluaXRpYWxWYWx1ZSkge1xuICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBpZiAoaW5pdGlhbFZhbHVlICE9IG51bGwpIHtcbiAgICBkaXYuY2xhc3NOYW1lID0gY2xhc3NOYW1lKGluaXRpYWxWYWx1ZSk7XG4gIH1cbiAgbGV0IGxpc3QgPSBkaXYuY2xhc3NMaXN0O1xuICBmdW5jdGlvbiBDbGFzc0xpc3QodmFsdWUpIHtcbiAgICB2YWx1ZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBsaXN0LnZhbHVlKTtcbiAgICBsaXN0ID0gdmFsdWUuY2xhc3NMaXN0O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFxuICAgIENsYXNzTGlzdCxcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh7XG4gICAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3QubGVuZ3RoO1xuICAgICAgfSxcbiAgICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3QudmFsdWU7XG4gICAgICB9LFxuICAgICAgYWRkKCkge1xuICAgICAgICBsaXN0LmFkZCguLi5hcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIHJlbW92ZSgpIHtcbiAgICAgICAgbGlzdC5yZW1vdmUoLi4uYXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICB0b2dnbGUodG9rZW4sIGZvcmNlKSB7XG4gICAgICAgIGxpc3QudG9nZ2xlKHRva2VuLCBmb3JjZSk7XG4gICAgICB9LFxuICAgICAgY29udGFpbnModG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIGxpc3QuY29udGFpbnModG9rZW4pO1xuICAgICAgfSxcbiAgICB9KSxcbiAgKTtcbiAgcmV0dXJuIENsYXNzTGlzdDtcbn1cblxuZnVuY3Rpb24gdXNlTWVtbyhmYWN0b3J5KSB7XG4gIHJldHVybiBmYWN0b3J5KCk7XG59XG5mdW5jdGlvbiBmb3J3YXJkUmVmKHJlbmRlcikge1xuICByZXR1cm4gKF9yZWYpID0+IHtcbiAgICBsZXQgeyByZWYsIC4uLnByb3BzIH0gPSBfcmVmO1xuICAgIHJldHVybiByZW5kZXIocHJvcHMsIHJlZiA/PyBjcmVhdGVSZWYoKSk7XG4gIH07XG59XG5mdW5jdGlvbiB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgaW5pdCkge1xuICBhdHRhY2hSZWYocmVmLCBpbml0KCkpO1xufVxuXG5jb25zdCBjYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG5jb25zdCBjcmVhdGVTdHlsZWRDb21wb25lbnQgPSAobmFtZSkgPT5cbiAgZnVuY3Rpb24gKGxpc3QpIHtcbiAgICBmb3IgKFxuICAgICAgdmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLFxuICAgICAgICBpbnRlcnBvbGF0aW9ucyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksXG4gICAgICAgIF9rZXkgPSAxO1xuICAgICAgX2tleSA8IF9sZW47XG4gICAgICBfa2V5KytcbiAgICApIHtcbiAgICAgIGludGVycG9sYXRpb25zW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIChfcmVmKSA9PiB7XG4gICAgICBsZXQgeyBzdHlsZSwgLi4ucHJvcHMgfSA9IF9yZWY7XG4gICAgICBjb25zdCBsYXN0SW5kZXggPSBsaXN0Lmxlbmd0aCAtIDE7XG4gICAgICBjb25zdCBjc3MgPVxuICAgICAgICBsaXN0LnNsaWNlKDAsIGxhc3RJbmRleCkucmVkdWNlKChwLCBzLCBpKSA9PiB7XG4gICAgICAgICAgY29uc3QgaW50ZXJwb2xhdGlvbiA9IGludGVycG9sYXRpb25zW2ldO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPVxuICAgICAgICAgICAgdHlwZW9mIGludGVycG9sYXRpb24gPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICA/IGludGVycG9sYXRpb24ocHJvcHMpXG4gICAgICAgICAgICAgIDogaW50ZXJwb2xhdGlvbjtcbiAgICAgICAgICByZXR1cm4gcCArIHMgKyBjdXJyZW50O1xuICAgICAgICB9LCBcIlwiKSArIGxpc3RbbGFzdEluZGV4XTtcbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KG5hbWUsIHtcbiAgICAgICAgc3R5bGU6IFtjc3MsIHN0eWxlXSxcbiAgICAgICAgLi4ucHJvcHMsXG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xuY29uc3QgYmFzZVN0eWxlZCA9IChjdXN0b21Db21wb25lbnQpID0+IGNyZWF0ZVN0eWxlZENvbXBvbmVudChjdXN0b21Db21wb25lbnQpO1xuY29uc3Qgc3R5bGVkID0gLyogQF9fUFVSRV9fICovIG5ldyBQcm94eShiYXNlU3R5bGVkLCB7XG4gIGdldChfLCBuYW1lKSB7XG4gICAgcmV0dXJuIHNldElmQWJzZW50KGNhY2hlLCBuYW1lLCAoKSA9PiBjcmVhdGVTdHlsZWRDb21wb25lbnQobmFtZSkpO1xuICB9LFxufSk7XG5mdW5jdGlvbiBzZXRJZkFic2VudChtYXAsIGtleSwgZ2V0VmFsdWUpIHtcbiAgaWYgKG1hcC5oYXMoa2V5KSkge1xuICAgIHJldHVybiBtYXAuZ2V0KGtleSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdmFsdWUgPSBnZXRWYWx1ZShrZXkpO1xuICAgIG1hcC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5cbnZhciBpbmRleCA9IHtcbiAgQ29tcG9uZW50LFxuICBQdXJlQ29tcG9uZW50OiBDb21wb25lbnQsXG4gIGNyZWF0ZUVsZW1lbnQsXG4gIEZyYWdtZW50LFxuICBTaGFkb3dSb290LFxufTtcbmZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KGV2ZW50KSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIHJldHVybiBldmVudDtcbn1cbmZ1bmN0aW9uIHN0b3BQcm9wYWdhdGlvbihldmVudCkge1xuICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgcmV0dXJuIGV2ZW50O1xufVxuXG5leHBvcnQge1xuICBDb21wb25lbnQsXG4gIEZyYWdtZW50LFxuICBDb21wb25lbnQgYXMgUHVyZUNvbXBvbmVudCxcbiAgU1ZHTmFtZXNwYWNlLFxuICBTaGFkb3dSb290LFxuICBGcmFnbWVudCBhcyBTdHJpY3RNb2RlLFxuICBjbGFzc05hbWUsXG4gIGNyZWF0ZUVsZW1lbnQsXG4gIGNyZWF0ZUZhY3RvcnksXG4gIGNyZWF0ZVJlZixcbiAgaW5kZXggYXMgZGVmYXVsdCxcbiAgZm9yd2FyZFJlZixcbiAgY3JlYXRlRWxlbWVudCBhcyBoLFxuICBpc1JlZixcbiAganN4LFxuICBqc3ggYXMganN4cyxcbiAgaWRlbnRpdHkgYXMgbWVtbyxcbiAgcHJldmVudERlZmF1bHQsXG4gIHN0b3BQcm9wYWdhdGlvbixcbiAgc3R5bGVkLFxuICBpZGVudGl0eSBhcyB1c2VDYWxsYmFjayxcbiAgdXNlQ2xhc3NMaXN0LFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlLFxuICB1c2VNZW1vLFxuICBjcmVhdGVSZWYgYXMgdXNlUmVmLFxuICB1c2VUZXh0LFxufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSxvRkFBQUEsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRLFNBQVUsSUFBSTtBQUN4QixhQUFPLE1BQU0sR0FBRyxTQUFTLFFBQVE7QUFBQSxJQUNuQztBQUdBLElBQUFBLFFBQU87QUFBQSxJQUVMLE1BQU0sT0FBTyxjQUFjLFlBQVksVUFBVSxLQUNqRCxNQUFNLE9BQU8sVUFBVSxZQUFZLE1BQU07QUFBQSxJQUV6QyxNQUFNLE9BQU8sUUFBUSxZQUFZLElBQUksS0FDckMsTUFBTSxPQUFPLFVBQVUsWUFBWSxNQUFNLEtBQ3pDLE1BQU0sT0FBT0QsWUFBUSxZQUFZQSxRQUFJO0FBQUEsSUFFcEMsMkJBQVk7QUFBRSxhQUFPO0FBQUEsSUFBTSxFQUFHLEtBQUssU0FBUyxhQUFhLEVBQUU7QUFBQTtBQUFBOzs7QUNmOUQ7QUFBQSw4RUFBQUUsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsSUFBQUEsUUFBTyxVQUFVLFNBQVUsTUFBTTtBQUMvQixVQUFJO0FBQ0YsZUFBTyxDQUFDLENBQUMsS0FBSztBQUFBLE1BQ2hCLFNBQVMsT0FBTztBQUNkLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ1BBO0FBQUEsb0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUTtBQUdaLElBQUFBLFFBQU8sVUFBVSxDQUFDLE1BQU0sV0FBWTtBQUVsQyxhQUFPLE9BQU8sZUFBZSxDQUFDLEdBQUcsR0FBRyxFQUFFLEtBQUssV0FBWTtBQUFFLGVBQU87QUFBQSxNQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTTtBQUFBLElBQ2pGLENBQUM7QUFBQTtBQUFBOzs7QUNQRDtBQUFBLDZGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFFBQVE7QUFFWixJQUFBQSxRQUFPLFVBQVUsQ0FBQyxNQUFNLFdBQVk7QUFFbEMsVUFBSSxPQUFRLFdBQVk7QUFBQSxNQUFjLEVBQUcsS0FBSztBQUU5QyxhQUFPLE9BQU8sUUFBUSxjQUFjLEtBQUssZUFBZSxXQUFXO0FBQUEsSUFDckUsQ0FBQztBQUFBO0FBQUE7OztBQ1JEO0FBQUEsc0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUVsQixRQUFJLE9BQU8sU0FBUyxVQUFVO0FBRTlCLElBQUFBLFFBQU8sVUFBVSxjQUFjLEtBQUssS0FBSyxJQUFJLElBQUksV0FBWTtBQUMzRCxhQUFPLEtBQUssTUFBTSxNQUFNLFNBQVM7QUFBQSxJQUNuQztBQUFBO0FBQUE7OztBQ1BBO0FBQUEsc0dBQUFDLFVBQUE7QUFBQTtBQUNBLFFBQUksd0JBQXdCLENBQUMsRUFBRTtBQUUvQixRQUFJLDJCQUEyQixPQUFPO0FBR3RDLFFBQUksY0FBYyw0QkFBNEIsQ0FBQyxzQkFBc0IsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFJckYsSUFBQUEsU0FBUSxJQUFJLGNBQWMsU0FBUyxxQkFBcUIsR0FBRztBQUN6RCxVQUFJLGFBQWEseUJBQXlCLE1BQU0sQ0FBQztBQUNqRCxhQUFPLENBQUMsQ0FBQyxjQUFjLFdBQVc7QUFBQSxJQUNwQyxJQUFJO0FBQUE7QUFBQTs7O0FDYko7QUFBQSxtR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsSUFBQUEsUUFBTyxVQUFVLFNBQVUsUUFBUSxPQUFPO0FBQ3hDLGFBQU87QUFBQSxRQUNMLFlBQVksRUFBRSxTQUFTO0FBQUEsUUFDdkIsY0FBYyxFQUFFLFNBQVM7QUFBQSxRQUN6QixVQUFVLEVBQUUsU0FBUztBQUFBLFFBQ3JCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUNSQTtBQUFBLDhGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFFbEIsUUFBSSxvQkFBb0IsU0FBUztBQUNqQyxRQUFJLE9BQU8sa0JBQWtCO0FBRTdCLFFBQUksc0JBQXNCLGVBQWUsa0JBQWtCLEtBQUssS0FBSyxNQUFNLElBQUk7QUFFL0UsSUFBQUEsUUFBTyxVQUFVLGNBQWMsc0JBQXNCLFNBQVUsSUFBSTtBQUNqRSxhQUFPLFdBQVk7QUFDakIsZUFBTyxLQUFLLE1BQU0sSUFBSSxTQUFTO0FBQUEsTUFDakM7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDWkE7QUFBQSxvRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBRWxCLFFBQUksV0FBVyxZQUFZLENBQUMsRUFBRSxRQUFRO0FBQ3RDLFFBQUksY0FBYyxZQUFZLEdBQUcsS0FBSztBQUV0QyxJQUFBQSxRQUFPLFVBQVUsU0FBVSxJQUFJO0FBQzdCLGFBQU8sWUFBWSxTQUFTLEVBQUUsR0FBRyxHQUFHLEVBQUU7QUFBQSxJQUN4QztBQUFBO0FBQUE7OztBQ1JBO0FBQUEsdUZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLFFBQVE7QUFDWixRQUFJLFVBQVU7QUFFZCxRQUFJLFVBQVU7QUFDZCxRQUFJLFFBQVEsWUFBWSxHQUFHLEtBQUs7QUFHaEMsSUFBQUEsUUFBTyxVQUFVLE1BQU0sV0FBWTtBQUdqQyxhQUFPLENBQUMsUUFBUSxHQUFHLEVBQUUscUJBQXFCLENBQUM7QUFBQSxJQUM3QyxDQUFDLElBQUksU0FBVSxJQUFJO0FBQ2pCLGFBQU8sUUFBUSxFQUFFLE1BQU0sV0FBVyxNQUFNLElBQUksRUFBRSxJQUFJLFFBQVEsRUFBRTtBQUFBLElBQzlELElBQUk7QUFBQTtBQUFBOzs7QUNmSjtBQUFBLDZGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFHQSxJQUFBQSxRQUFPLFVBQVUsU0FBVSxJQUFJO0FBQzdCLGFBQU8sT0FBTyxRQUFRLE9BQU87QUFBQSxJQUMvQjtBQUFBO0FBQUE7OztBQ0xBO0FBQUEsaUdBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksb0JBQW9CO0FBRXhCLFFBQUksYUFBYTtBQUlqQixJQUFBQSxRQUFPLFVBQVUsU0FBVSxJQUFJO0FBQzdCLFVBQUksa0JBQWtCLEVBQUUsRUFBRyxPQUFNLElBQUksV0FBVywwQkFBMEIsRUFBRTtBQUM1RSxhQUFPO0FBQUEsSUFDVDtBQUFBO0FBQUE7OztBQ1ZBO0FBQUEsMEZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUkseUJBQXlCO0FBRTdCLElBQUFBLFFBQU8sVUFBVSxTQUFVLElBQUk7QUFDN0IsYUFBTyxjQUFjLHVCQUF1QixFQUFFLENBQUM7QUFBQSxJQUNqRDtBQUFBO0FBQUE7OztBQ1BBO0FBQUEsb0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQUksY0FBYyxPQUFPLFlBQVksWUFBWSxTQUFTO0FBSzFELElBQUFBLFFBQU8sVUFBVSxPQUFPLGVBQWUsZUFBZSxnQkFBZ0IsU0FBWSxTQUFVLFVBQVU7QUFDcEcsYUFBTyxPQUFPLFlBQVksY0FBYyxhQUFhO0FBQUEsSUFDdkQsSUFBSSxTQUFVLFVBQVU7QUFDdEIsYUFBTyxPQUFPLFlBQVk7QUFBQSxJQUM1QjtBQUFBO0FBQUE7OztBQ1hBO0FBQUEsa0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksYUFBYTtBQUVqQixJQUFBQSxRQUFPLFVBQVUsU0FBVSxJQUFJO0FBQzdCLGFBQU8sT0FBTyxNQUFNLFdBQVcsT0FBTyxPQUFPLFdBQVcsRUFBRTtBQUFBLElBQzVEO0FBQUE7QUFBQTs7O0FDTEE7QUFBQSxxRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSUMsY0FBYTtBQUNqQixRQUFJLGFBQWE7QUFFakIsUUFBSSxZQUFZLFNBQVUsVUFBVTtBQUNsQyxhQUFPLFdBQVcsUUFBUSxJQUFJLFdBQVc7QUFBQSxJQUMzQztBQUVBLElBQUFELFFBQU8sVUFBVSxTQUFVLFdBQVcsUUFBUTtBQUM1QyxhQUFPLFVBQVUsU0FBUyxJQUFJLFVBQVVDLFlBQVcsU0FBUyxDQUFDLElBQUlBLFlBQVcsU0FBUyxLQUFLQSxZQUFXLFNBQVMsRUFBRSxNQUFNO0FBQUEsSUFDeEg7QUFBQTtBQUFBOzs7QUNWQTtBQUFBLCtGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFFbEIsSUFBQUEsUUFBTyxVQUFVLFlBQVksQ0FBQyxFQUFFLGFBQWE7QUFBQTtBQUFBOzs7QUNIN0M7QUFBQSwrRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSUMsY0FBYTtBQUVqQixRQUFJQyxhQUFZRCxZQUFXO0FBQzNCLFFBQUksWUFBWUMsY0FBYUEsV0FBVTtBQUV2QyxJQUFBRixRQUFPLFVBQVUsWUFBWSxPQUFPLFNBQVMsSUFBSTtBQUFBO0FBQUE7OztBQ05qRDtBQUFBLCtGQUFBRyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxjQUFhO0FBQ2pCLFFBQUksWUFBWTtBQUVoQixRQUFJQyxXQUFVRCxZQUFXO0FBQ3pCLFFBQUlFLFFBQU9GLFlBQVc7QUFDdEIsUUFBSSxXQUFXQyxZQUFXQSxTQUFRLFlBQVlDLFNBQVFBLE1BQUs7QUFDM0QsUUFBSSxLQUFLLFlBQVksU0FBUztBQUM5QixRQUFJO0FBQUosUUFBVztBQUVYLFFBQUksSUFBSTtBQUNOLGNBQVEsR0FBRyxNQUFNLEdBQUc7QUFHcEIsZ0JBQVUsTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUM7QUFBQSxJQUNuRTtBQUlBLFFBQUksQ0FBQyxXQUFXLFdBQVc7QUFDekIsY0FBUSxVQUFVLE1BQU0sYUFBYTtBQUNyQyxVQUFJLENBQUMsU0FBUyxNQUFNLENBQUMsS0FBSyxJQUFJO0FBQzVCLGdCQUFRLFVBQVUsTUFBTSxlQUFlO0FBQ3ZDLFlBQUksTUFBTyxXQUFVLENBQUMsTUFBTSxDQUFDO0FBQUEsTUFDL0I7QUFBQSxJQUNGO0FBRUEsSUFBQUgsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDM0JqQjtBQUFBLHFHQUFBSSxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFJLGFBQWE7QUFDakIsUUFBSSxRQUFRO0FBQ1osUUFBSUMsY0FBYTtBQUVqQixRQUFJLFVBQVVBLFlBQVc7QUFHekIsSUFBQUQsUUFBTyxVQUFVLENBQUMsQ0FBQyxPQUFPLHlCQUF5QixDQUFDLE1BQU0sV0FBWTtBQUNwRSxVQUFJLFNBQVMsT0FBTyxrQkFBa0I7QUFLdEMsYUFBTyxDQUFDLFFBQVEsTUFBTSxLQUFLLEVBQUUsT0FBTyxNQUFNLGFBQWE7QUFBQSxNQUVyRCxDQUFDLE9BQU8sUUFBUSxjQUFjLGFBQWE7QUFBQSxJQUMvQyxDQUFDO0FBQUE7QUFBQTs7O0FDbEJEO0FBQUEsMEZBQUFFLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQUksZ0JBQWdCO0FBRXBCLElBQUFBLFFBQU8sVUFBVSxpQkFDZixDQUFDLE9BQU8sUUFDUixPQUFPLE9BQU8sWUFBWTtBQUFBO0FBQUE7OztBQ041QjtBQUFBLGtGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGFBQWE7QUFDakIsUUFBSSxhQUFhO0FBQ2pCLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksb0JBQW9CO0FBRXhCLFFBQUksVUFBVTtBQUVkLElBQUFBLFFBQU8sVUFBVSxvQkFBb0IsU0FBVSxJQUFJO0FBQ2pELGFBQU8sT0FBTyxNQUFNO0FBQUEsSUFDdEIsSUFBSSxTQUFVLElBQUk7QUFDaEIsVUFBSSxVQUFVLFdBQVcsUUFBUTtBQUNqQyxhQUFPLFdBQVcsT0FBTyxLQUFLLGNBQWMsUUFBUSxXQUFXLFFBQVEsRUFBRSxDQUFDO0FBQUEsSUFDNUU7QUFBQTtBQUFBOzs7QUNiQTtBQUFBLHNGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFVBQVU7QUFFZCxJQUFBQSxRQUFPLFVBQVUsU0FBVSxVQUFVO0FBQ25DLFVBQUk7QUFDRixlQUFPLFFBQVEsUUFBUTtBQUFBLE1BQ3pCLFNBQVMsT0FBTztBQUNkLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ1RBO0FBQUEsbUZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksYUFBYTtBQUNqQixRQUFJLGNBQWM7QUFFbEIsUUFBSSxhQUFhO0FBR2pCLElBQUFBLFFBQU8sVUFBVSxTQUFVLFVBQVU7QUFDbkMsVUFBSSxXQUFXLFFBQVEsRUFBRyxRQUFPO0FBQ2pDLFlBQU0sSUFBSSxXQUFXLFlBQVksUUFBUSxJQUFJLG9CQUFvQjtBQUFBLElBQ25FO0FBQUE7QUFBQTs7O0FDVkE7QUFBQSxtRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxZQUFZO0FBQ2hCLFFBQUksb0JBQW9CO0FBSXhCLElBQUFBLFFBQU8sVUFBVSxTQUFVLEdBQUcsR0FBRztBQUMvQixVQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsYUFBTyxrQkFBa0IsSUFBSSxJQUFJLFNBQVksVUFBVSxJQUFJO0FBQUEsSUFDN0Q7QUFBQTtBQUFBOzs7QUNUQTtBQUFBLDhGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLE9BQU87QUFDWCxRQUFJLGFBQWE7QUFDakIsUUFBSUMsWUFBVztBQUVmLFFBQUksYUFBYTtBQUlqQixJQUFBRCxRQUFPLFVBQVUsU0FBVSxPQUFPLE1BQU07QUFDdEMsVUFBSSxJQUFJO0FBQ1IsVUFBSSxTQUFTLFlBQVksV0FBVyxLQUFLLE1BQU0sUUFBUSxLQUFLLENBQUNDLFVBQVMsTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLEVBQUcsUUFBTztBQUNyRyxVQUFJLFdBQVcsS0FBSyxNQUFNLE9BQU8sS0FBSyxDQUFDQSxVQUFTLE1BQU0sS0FBSyxJQUFJLEtBQUssQ0FBQyxFQUFHLFFBQU87QUFDL0UsVUFBSSxTQUFTLFlBQVksV0FBVyxLQUFLLE1BQU0sUUFBUSxLQUFLLENBQUNBLFVBQVMsTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLEVBQUcsUUFBTztBQUNyRyxZQUFNLElBQUksV0FBVyx5Q0FBeUM7QUFBQSxJQUNoRTtBQUFBO0FBQUE7OztBQ2ZBO0FBQUEsZ0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLElBQUFBLFFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQ0RqQjtBQUFBLCtGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxjQUFhO0FBR2pCLFFBQUksaUJBQWlCLE9BQU87QUFFNUIsSUFBQUQsUUFBTyxVQUFVLFNBQVUsS0FBSyxPQUFPO0FBQ3JDLFVBQUk7QUFDRix1QkFBZUMsYUFBWSxLQUFLLEVBQUUsT0FBYyxjQUFjLE1BQU0sVUFBVSxLQUFLLENBQUM7QUFBQSxNQUN0RixTQUFTLE9BQU87QUFDZCxRQUFBQSxZQUFXLEdBQUcsSUFBSTtBQUFBLE1BQ3BCO0FBQUUsYUFBTztBQUFBLElBQ1g7QUFBQTtBQUFBOzs7QUNaQTtBQUFBLHFGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFVBQVU7QUFDZCxRQUFJQyxjQUFhO0FBQ2pCLFFBQUksdUJBQXVCO0FBRTNCLFFBQUksU0FBUztBQUNiLFFBQUksUUFBUUQsUUFBTyxVQUFVQyxZQUFXLE1BQU0sS0FBSyxxQkFBcUIsUUFBUSxDQUFDLENBQUM7QUFFbEYsS0FBQyxNQUFNLGFBQWEsTUFBTSxXQUFXLENBQUMsSUFBSSxLQUFLO0FBQUEsTUFDN0MsU0FBUztBQUFBLE1BQ1QsTUFBTSxVQUFVLFNBQVM7QUFBQSxNQUN6QixXQUFXO0FBQUEsTUFDWCxTQUFTO0FBQUEsTUFDVCxRQUFRO0FBQUEsSUFDVixDQUFDO0FBQUE7QUFBQTs7O0FDZEQ7QUFBQSwrRUFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRO0FBRVosSUFBQUEsUUFBTyxVQUFVLFNBQVUsS0FBSyxPQUFPO0FBQ3JDLGFBQU8sTUFBTSxHQUFHLE1BQU0sTUFBTSxHQUFHLElBQUksU0FBUyxDQUFDO0FBQUEsSUFDL0M7QUFBQTtBQUFBOzs7QUNMQTtBQUFBLGtGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLHlCQUF5QjtBQUU3QixRQUFJLFVBQVU7QUFJZCxJQUFBQSxRQUFPLFVBQVUsU0FBVSxVQUFVO0FBQ25DLGFBQU8sUUFBUSx1QkFBdUIsUUFBUSxDQUFDO0FBQUEsSUFDakQ7QUFBQTtBQUFBOzs7QUNUQTtBQUFBLHlGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxXQUFXO0FBRWYsUUFBSSxpQkFBaUIsWUFBWSxDQUFDLEVBQUUsY0FBYztBQUtsRCxJQUFBQSxRQUFPLFVBQVUsT0FBTyxVQUFVLFNBQVMsT0FBTyxJQUFJLEtBQUs7QUFDekQsYUFBTyxlQUFlLFNBQVMsRUFBRSxHQUFHLEdBQUc7QUFBQSxJQUN6QztBQUFBO0FBQUE7OztBQ1hBO0FBQUEsNEVBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUVsQixRQUFJLEtBQUs7QUFDVCxRQUFJLFVBQVUsS0FBSyxPQUFPO0FBQzFCLFFBQUksV0FBVyxZQUFZLEdBQUksUUFBUTtBQUV2QyxJQUFBQSxRQUFPLFVBQVUsU0FBVSxLQUFLO0FBQzlCLGFBQU8sYUFBYSxRQUFRLFNBQVksS0FBSyxPQUFPLE9BQU8sU0FBUyxFQUFFLEtBQUssU0FBUyxFQUFFO0FBQUEsSUFDeEY7QUFBQTtBQUFBOzs7QUNUQTtBQUFBLDBGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxjQUFhO0FBQ2pCLFFBQUksU0FBUztBQUNiLFFBQUksU0FBUztBQUNiLFFBQUksTUFBTTtBQUNWLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksb0JBQW9CO0FBRXhCLFFBQUlDLFVBQVNELFlBQVc7QUFDeEIsUUFBSSx3QkFBd0IsT0FBTyxLQUFLO0FBQ3hDLFFBQUksd0JBQXdCLG9CQUFvQkMsUUFBTyxLQUFLLEtBQUtBLFVBQVNBLFdBQVVBLFFBQU8saUJBQWlCO0FBRTVHLElBQUFGLFFBQU8sVUFBVSxTQUFVLE1BQU07QUFDL0IsVUFBSSxDQUFDLE9BQU8sdUJBQXVCLElBQUksR0FBRztBQUN4Qyw4QkFBc0IsSUFBSSxJQUFJLGlCQUFpQixPQUFPRSxTQUFRLElBQUksSUFDOURBLFFBQU8sSUFBSSxJQUNYLHNCQUFzQixZQUFZLElBQUk7QUFBQSxNQUM1QztBQUFFLGFBQU8sc0JBQXNCLElBQUk7QUFBQSxJQUNyQztBQUFBO0FBQUE7OztBQ2xCQTtBQUFBLHFGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLE9BQU87QUFDWCxRQUFJQyxZQUFXO0FBQ2YsUUFBSSxXQUFXO0FBQ2YsUUFBSSxZQUFZO0FBQ2hCLFFBQUksc0JBQXNCO0FBQzFCLFFBQUksa0JBQWtCO0FBRXRCLFFBQUksYUFBYTtBQUNqQixRQUFJLGVBQWUsZ0JBQWdCLGFBQWE7QUFJaEQsSUFBQUQsUUFBTyxVQUFVLFNBQVUsT0FBTyxNQUFNO0FBQ3RDLFVBQUksQ0FBQ0MsVUFBUyxLQUFLLEtBQUssU0FBUyxLQUFLLEVBQUcsUUFBTztBQUNoRCxVQUFJLGVBQWUsVUFBVSxPQUFPLFlBQVk7QUFDaEQsVUFBSTtBQUNKLFVBQUksY0FBYztBQUNoQixZQUFJLFNBQVMsT0FBVyxRQUFPO0FBQy9CLGlCQUFTLEtBQUssY0FBYyxPQUFPLElBQUk7QUFDdkMsWUFBSSxDQUFDQSxVQUFTLE1BQU0sS0FBSyxTQUFTLE1BQU0sRUFBRyxRQUFPO0FBQ2xELGNBQU0sSUFBSSxXQUFXLHlDQUF5QztBQUFBLE1BQ2hFO0FBQ0EsVUFBSSxTQUFTLE9BQVcsUUFBTztBQUMvQixhQUFPLG9CQUFvQixPQUFPLElBQUk7QUFBQSxJQUN4QztBQUFBO0FBQUE7OztBQ3pCQTtBQUFBLHdGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxXQUFXO0FBSWYsSUFBQUEsUUFBTyxVQUFVLFNBQVUsVUFBVTtBQUNuQyxVQUFJLE1BQU0sWUFBWSxVQUFVLFFBQVE7QUFDeEMsYUFBTyxTQUFTLEdBQUcsSUFBSSxNQUFNLE1BQU07QUFBQSxJQUNyQztBQUFBO0FBQUE7OztBQ1RBO0FBQUEsZ0dBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUlDLGNBQWE7QUFDakIsUUFBSUMsWUFBVztBQUVmLFFBQUlDLFlBQVdGLFlBQVc7QUFFMUIsUUFBSSxTQUFTQyxVQUFTQyxTQUFRLEtBQUtELFVBQVNDLFVBQVMsYUFBYTtBQUVsRSxJQUFBSCxRQUFPLFVBQVUsU0FBVSxJQUFJO0FBQzdCLGFBQU8sU0FBU0csVUFBUyxjQUFjLEVBQUUsSUFBSSxDQUFDO0FBQUEsSUFDaEQ7QUFBQTtBQUFBOzs7QUNWQTtBQUFBLHVGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxRQUFRO0FBQ1osUUFBSUMsaUJBQWdCO0FBR3BCLElBQUFELFFBQU8sVUFBVSxDQUFDLGVBQWUsQ0FBQyxNQUFNLFdBQVk7QUFFbEQsYUFBTyxPQUFPLGVBQWVDLGVBQWMsS0FBSyxHQUFHLEtBQUs7QUFBQSxRQUN0RCxLQUFLLFdBQVk7QUFBRSxpQkFBTztBQUFBLFFBQUc7QUFBQSxNQUMvQixDQUFDLEVBQUUsTUFBTTtBQUFBLElBQ1gsQ0FBQztBQUFBO0FBQUE7OztBQ1hEO0FBQUEsMkdBQUFDLFVBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLE9BQU87QUFDWCxRQUFJLDZCQUE2QjtBQUNqQyxRQUFJLDJCQUEyQjtBQUMvQixRQUFJLGtCQUFrQjtBQUN0QixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLFNBQVM7QUFDYixRQUFJLGlCQUFpQjtBQUdyQixRQUFJLDRCQUE0QixPQUFPO0FBSXZDLElBQUFBLFNBQVEsSUFBSSxjQUFjLDRCQUE0QixTQUFTLHlCQUF5QixHQUFHLEdBQUc7QUFDNUYsVUFBSSxnQkFBZ0IsQ0FBQztBQUNyQixVQUFJLGNBQWMsQ0FBQztBQUNuQixVQUFJLGVBQWdCLEtBQUk7QUFDdEIsZUFBTywwQkFBMEIsR0FBRyxDQUFDO0FBQUEsTUFDdkMsU0FBUyxPQUFPO0FBQUEsTUFBYztBQUM5QixVQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUcsUUFBTyx5QkFBeUIsQ0FBQyxLQUFLLDJCQUEyQixHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQUEsSUFDbkc7QUFBQTtBQUFBOzs7QUN0QkE7QUFBQSxnR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksUUFBUTtBQUlaLElBQUFBLFFBQU8sVUFBVSxlQUFlLE1BQU0sV0FBWTtBQUVoRCxhQUFPLE9BQU8sZUFBZSxXQUFZO0FBQUEsTUFBYyxHQUFHLGFBQWE7QUFBQSxRQUNyRSxPQUFPO0FBQUEsUUFDUCxVQUFVO0FBQUEsTUFDWixDQUFDLEVBQUUsY0FBYztBQUFBLElBQ25CLENBQUM7QUFBQTtBQUFBOzs7QUNaRDtBQUFBLGtGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxZQUFXO0FBRWYsUUFBSSxVQUFVO0FBQ2QsUUFBSSxhQUFhO0FBR2pCLElBQUFELFFBQU8sVUFBVSxTQUFVLFVBQVU7QUFDbkMsVUFBSUMsVUFBUyxRQUFRLEVBQUcsUUFBTztBQUMvQixZQUFNLElBQUksV0FBVyxRQUFRLFFBQVEsSUFBSSxtQkFBbUI7QUFBQSxJQUM5RDtBQUFBO0FBQUE7OztBQ1ZBO0FBQUEsK0ZBQUFDLFVBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLGlCQUFpQjtBQUNyQixRQUFJLDBCQUEwQjtBQUM5QixRQUFJLFdBQVc7QUFDZixRQUFJLGdCQUFnQjtBQUVwQixRQUFJLGFBQWE7QUFFakIsUUFBSSxrQkFBa0IsT0FBTztBQUU3QixRQUFJLDRCQUE0QixPQUFPO0FBQ3ZDLFFBQUksYUFBYTtBQUNqQixRQUFJLGVBQWU7QUFDbkIsUUFBSSxXQUFXO0FBSWYsSUFBQUEsU0FBUSxJQUFJLGNBQWMsMEJBQTBCLFNBQVMsZUFBZSxHQUFHLEdBQUcsWUFBWTtBQUM1RixlQUFTLENBQUM7QUFDVixVQUFJLGNBQWMsQ0FBQztBQUNuQixlQUFTLFVBQVU7QUFDbkIsVUFBSSxPQUFPLE1BQU0sY0FBYyxNQUFNLGVBQWUsV0FBVyxjQUFjLFlBQVksY0FBYyxDQUFDLFdBQVcsUUFBUSxHQUFHO0FBQzVILFlBQUksVUFBVSwwQkFBMEIsR0FBRyxDQUFDO0FBQzVDLFlBQUksV0FBVyxRQUFRLFFBQVEsR0FBRztBQUNoQyxZQUFFLENBQUMsSUFBSSxXQUFXO0FBQ2xCLHVCQUFhO0FBQUEsWUFDWCxjQUFjLGdCQUFnQixhQUFhLFdBQVcsWUFBWSxJQUFJLFFBQVEsWUFBWTtBQUFBLFlBQzFGLFlBQVksY0FBYyxhQUFhLFdBQVcsVUFBVSxJQUFJLFFBQVEsVUFBVTtBQUFBLFlBQ2xGLFVBQVU7QUFBQSxVQUNaO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBRSxhQUFPLGdCQUFnQixHQUFHLEdBQUcsVUFBVTtBQUFBLElBQzNDLElBQUksa0JBQWtCLFNBQVMsZUFBZSxHQUFHLEdBQUcsWUFBWTtBQUM5RCxlQUFTLENBQUM7QUFDVixVQUFJLGNBQWMsQ0FBQztBQUNuQixlQUFTLFVBQVU7QUFDbkIsVUFBSSxlQUFnQixLQUFJO0FBQ3RCLGVBQU8sZ0JBQWdCLEdBQUcsR0FBRyxVQUFVO0FBQUEsTUFDekMsU0FBUyxPQUFPO0FBQUEsTUFBYztBQUM5QixVQUFJLFNBQVMsY0FBYyxTQUFTLFdBQVksT0FBTSxJQUFJLFdBQVcseUJBQXlCO0FBQzlGLFVBQUksV0FBVyxXQUFZLEdBQUUsQ0FBQyxJQUFJLFdBQVc7QUFDN0MsYUFBTztBQUFBLElBQ1Q7QUFBQTtBQUFBOzs7QUMzQ0E7QUFBQSx1R0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksdUJBQXVCO0FBQzNCLFFBQUksMkJBQTJCO0FBRS9CLElBQUFBLFFBQU8sVUFBVSxjQUFjLFNBQVUsUUFBUSxLQUFLLE9BQU87QUFDM0QsYUFBTyxxQkFBcUIsRUFBRSxRQUFRLEtBQUsseUJBQXlCLEdBQUcsS0FBSyxDQUFDO0FBQUEsSUFDL0UsSUFBSSxTQUFVLFFBQVEsS0FBSyxPQUFPO0FBQ2hDLGFBQU8sR0FBRyxJQUFJO0FBQ2QsYUFBTztBQUFBLElBQ1Q7QUFBQTtBQUFBOzs7QUNWQTtBQUFBLHNGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxTQUFTO0FBRWIsUUFBSSxvQkFBb0IsU0FBUztBQUVqQyxRQUFJLGdCQUFnQixlQUFlLE9BQU87QUFFMUMsUUFBSSxTQUFTLE9BQU8sbUJBQW1CLE1BQU07QUFFN0MsUUFBSSxTQUFTLFVBQVcsU0FBUyxZQUFZO0FBQUEsSUFBYyxFQUFHLFNBQVM7QUFDdkUsUUFBSSxlQUFlLFdBQVcsQ0FBQyxlQUFnQixlQUFlLGNBQWMsbUJBQW1CLE1BQU0sRUFBRTtBQUV2RyxJQUFBQSxRQUFPLFVBQVU7QUFBQSxNQUNmO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDakJBO0FBQUEsdUZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLGFBQWE7QUFDakIsUUFBSSxRQUFRO0FBRVosUUFBSSxtQkFBbUIsWUFBWSxTQUFTLFFBQVE7QUFHcEQsUUFBSSxDQUFDLFdBQVcsTUFBTSxhQUFhLEdBQUc7QUFDcEMsWUFBTSxnQkFBZ0IsU0FBVSxJQUFJO0FBQ2xDLGVBQU8saUJBQWlCLEVBQUU7QUFBQSxNQUM1QjtBQUFBLElBQ0Y7QUFFQSxJQUFBQSxRQUFPLFVBQVUsTUFBTTtBQUFBO0FBQUE7OztBQ2R2QjtBQUFBLGlHQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxjQUFhO0FBQ2pCLFFBQUksYUFBYTtBQUVqQixRQUFJQyxXQUFVRCxZQUFXO0FBRXpCLElBQUFELFFBQU8sVUFBVSxXQUFXRSxRQUFPLEtBQUssY0FBYyxLQUFLLE9BQU9BLFFBQU8sQ0FBQztBQUFBO0FBQUE7OztBQ04xRTtBQUFBLG1GQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFNBQVM7QUFDYixRQUFJLE1BQU07QUFFVixRQUFJQyxRQUFPLE9BQU8sTUFBTTtBQUV4QixJQUFBRCxRQUFPLFVBQVUsU0FBVSxLQUFLO0FBQzlCLGFBQU9DLE1BQUssR0FBRyxNQUFNQSxNQUFLLEdBQUcsSUFBSSxJQUFJLEdBQUc7QUFBQSxJQUMxQztBQUFBO0FBQUE7OztBQ1JBO0FBQUEsb0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLElBQUFBLFFBQU8sVUFBVSxDQUFDO0FBQUE7QUFBQTs7O0FDRGxCO0FBQUEsdUZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUlDLGNBQWE7QUFDakIsUUFBSUMsWUFBVztBQUNmLFFBQUksOEJBQThCO0FBQ2xDLFFBQUksU0FBUztBQUNiLFFBQUksU0FBUztBQUNiLFFBQUksWUFBWTtBQUNoQixRQUFJLGFBQWE7QUFFakIsUUFBSSw2QkFBNkI7QUFDakMsUUFBSUMsYUFBWUYsWUFBVztBQUMzQixRQUFJRyxXQUFVSCxZQUFXO0FBQ3pCLFFBQUk7QUFBSixRQUFTSTtBQUFULFFBQWM7QUFFZCxRQUFJLFVBQVUsU0FBVSxJQUFJO0FBQzFCLGFBQU8sSUFBSSxFQUFFLElBQUlBLEtBQUksRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUM7QUFBQSxJQUN2QztBQUVBLFFBQUksWUFBWSxTQUFVLE1BQU07QUFDOUIsYUFBTyxTQUFVLElBQUk7QUFDbkIsWUFBSTtBQUNKLFlBQUksQ0FBQ0gsVUFBUyxFQUFFLE1BQU0sUUFBUUcsS0FBSSxFQUFFLEdBQUcsU0FBUyxNQUFNO0FBQ3BELGdCQUFNLElBQUlGLFdBQVUsNEJBQTRCLE9BQU8sV0FBVztBQUFBLFFBQ3BFO0FBQUUsZUFBTztBQUFBLE1BQ1g7QUFBQSxJQUNGO0FBRUEsUUFBSSxtQkFBbUIsT0FBTyxPQUFPO0FBQy9CLGNBQVEsT0FBTyxVQUFVLE9BQU8sUUFBUSxJQUFJQyxTQUFRO0FBRXhELFlBQU0sTUFBTSxNQUFNO0FBQ2xCLFlBQU0sTUFBTSxNQUFNO0FBQ2xCLFlBQU0sTUFBTSxNQUFNO0FBRWxCLFlBQU0sU0FBVSxJQUFJLFVBQVU7QUFDNUIsWUFBSSxNQUFNLElBQUksRUFBRSxFQUFHLE9BQU0sSUFBSUQsV0FBVSwwQkFBMEI7QUFDakUsaUJBQVMsU0FBUztBQUNsQixjQUFNLElBQUksSUFBSSxRQUFRO0FBQ3RCLGVBQU87QUFBQSxNQUNUO0FBQ0EsTUFBQUUsT0FBTSxTQUFVLElBQUk7QUFDbEIsZUFBTyxNQUFNLElBQUksRUFBRSxLQUFLLENBQUM7QUFBQSxNQUMzQjtBQUNBLFlBQU0sU0FBVSxJQUFJO0FBQ2xCLGVBQU8sTUFBTSxJQUFJLEVBQUU7QUFBQSxNQUNyQjtBQUFBLElBQ0YsT0FBTztBQUNELGNBQVEsVUFBVSxPQUFPO0FBQzdCLGlCQUFXLEtBQUssSUFBSTtBQUNwQixZQUFNLFNBQVUsSUFBSSxVQUFVO0FBQzVCLFlBQUksT0FBTyxJQUFJLEtBQUssRUFBRyxPQUFNLElBQUlGLFdBQVUsMEJBQTBCO0FBQ3JFLGlCQUFTLFNBQVM7QUFDbEIsb0NBQTRCLElBQUksT0FBTyxRQUFRO0FBQy9DLGVBQU87QUFBQSxNQUNUO0FBQ0EsTUFBQUUsT0FBTSxTQUFVLElBQUk7QUFDbEIsZUFBTyxPQUFPLElBQUksS0FBSyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUM7QUFBQSxNQUMxQztBQUNBLFlBQU0sU0FBVSxJQUFJO0FBQ2xCLGVBQU8sT0FBTyxJQUFJLEtBQUs7QUFBQSxNQUN6QjtBQUFBLElBQ0Y7QUFqQ007QUFtQkE7QUFnQk4sSUFBQUwsUUFBTyxVQUFVO0FBQUEsTUFDZjtBQUFBLE1BQ0EsS0FBS0s7QUFBQSxNQUNMO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDdEVBO0FBQUEsc0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLFFBQVE7QUFDWixRQUFJLGFBQWE7QUFDakIsUUFBSSxTQUFTO0FBQ2IsUUFBSSxjQUFjO0FBQ2xCLFFBQUksNkJBQTZCLHdCQUFzQztBQUN2RSxRQUFJLGdCQUFnQjtBQUNwQixRQUFJLHNCQUFzQjtBQUUxQixRQUFJLHVCQUF1QixvQkFBb0I7QUFDL0MsUUFBSSxtQkFBbUIsb0JBQW9CO0FBQzNDLFFBQUksVUFBVTtBQUVkLFFBQUksaUJBQWlCLE9BQU87QUFDNUIsUUFBSSxjQUFjLFlBQVksR0FBRyxLQUFLO0FBQ3RDLFFBQUksVUFBVSxZQUFZLEdBQUcsT0FBTztBQUNwQyxRQUFJLE9BQU8sWUFBWSxDQUFDLEVBQUUsSUFBSTtBQUU5QixRQUFJLHNCQUFzQixlQUFlLENBQUMsTUFBTSxXQUFZO0FBQzFELGFBQU8sZUFBZSxXQUFZO0FBQUEsTUFBYyxHQUFHLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFdBQVc7QUFBQSxJQUN4RixDQUFDO0FBRUQsUUFBSSxXQUFXLE9BQU8sTUFBTSxFQUFFLE1BQU0sUUFBUTtBQUU1QyxRQUFJLGNBQWNBLFFBQU8sVUFBVSxTQUFVLE9BQU8sTUFBTSxTQUFTO0FBQ2pFLFVBQUksWUFBWSxRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxXQUFXO0FBQ2xELGVBQU8sTUFBTSxRQUFRLFFBQVEsSUFBSSxHQUFHLHlCQUF5QixJQUFJLElBQUk7QUFBQSxNQUN2RTtBQUNBLFVBQUksV0FBVyxRQUFRLE9BQVEsUUFBTyxTQUFTO0FBQy9DLFVBQUksV0FBVyxRQUFRLE9BQVEsUUFBTyxTQUFTO0FBQy9DLFVBQUksQ0FBQyxPQUFPLE9BQU8sTUFBTSxLQUFNLDhCQUE4QixNQUFNLFNBQVMsTUFBTztBQUNqRixZQUFJLFlBQWEsZ0JBQWUsT0FBTyxRQUFRLEVBQUUsT0FBTyxNQUFNLGNBQWMsS0FBSyxDQUFDO0FBQUEsWUFDN0UsT0FBTSxPQUFPO0FBQUEsTUFDcEI7QUFDQSxVQUFJLHVCQUF1QixXQUFXLE9BQU8sU0FBUyxPQUFPLEtBQUssTUFBTSxXQUFXLFFBQVEsT0FBTztBQUNoRyx1QkFBZSxPQUFPLFVBQVUsRUFBRSxPQUFPLFFBQVEsTUFBTSxDQUFDO0FBQUEsTUFDMUQ7QUFDQSxVQUFJO0FBQ0YsWUFBSSxXQUFXLE9BQU8sU0FBUyxhQUFhLEtBQUssUUFBUSxhQUFhO0FBQ3BFLGNBQUksWUFBYSxnQkFBZSxPQUFPLGFBQWEsRUFBRSxVQUFVLE1BQU0sQ0FBQztBQUFBLFFBRXpFLFdBQVcsTUFBTSxVQUFXLE9BQU0sWUFBWTtBQUFBLE1BQ2hELFNBQVMsT0FBTztBQUFBLE1BQWM7QUFDOUIsVUFBSSxRQUFRLHFCQUFxQixLQUFLO0FBQ3RDLFVBQUksQ0FBQyxPQUFPLE9BQU8sUUFBUSxHQUFHO0FBQzVCLGNBQU0sU0FBUyxLQUFLLFVBQVUsT0FBTyxRQUFRLFdBQVcsT0FBTyxFQUFFO0FBQUEsTUFDbkU7QUFBRSxhQUFPO0FBQUEsSUFDWDtBQUlBLGFBQVMsVUFBVSxXQUFXLFlBQVksU0FBUyxXQUFXO0FBQzVELGFBQU8sV0FBVyxJQUFJLEtBQUssaUJBQWlCLElBQUksRUFBRSxVQUFVLGNBQWMsSUFBSTtBQUFBLElBQ2hGLEdBQUcsVUFBVTtBQUFBO0FBQUE7OztBQ3REYjtBQUFBLHdGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGFBQWE7QUFDakIsUUFBSSx1QkFBdUI7QUFDM0IsUUFBSSxjQUFjO0FBQ2xCLFFBQUksdUJBQXVCO0FBRTNCLElBQUFBLFFBQU8sVUFBVSxTQUFVLEdBQUcsS0FBSyxPQUFPLFNBQVM7QUFDakQsVUFBSSxDQUFDLFFBQVMsV0FBVSxDQUFDO0FBQ3pCLFVBQUksU0FBUyxRQUFRO0FBQ3JCLFVBQUksT0FBTyxRQUFRLFNBQVMsU0FBWSxRQUFRLE9BQU87QUFDdkQsVUFBSSxXQUFXLEtBQUssRUFBRyxhQUFZLE9BQU8sTUFBTSxPQUFPO0FBQ3ZELFVBQUksUUFBUSxRQUFRO0FBQ2xCLFlBQUksT0FBUSxHQUFFLEdBQUcsSUFBSTtBQUFBLFlBQ2hCLHNCQUFxQixLQUFLLEtBQUs7QUFBQSxNQUN0QyxPQUFPO0FBQ0wsWUFBSTtBQUNGLGNBQUksQ0FBQyxRQUFRLE9BQVEsUUFBTyxFQUFFLEdBQUc7QUFBQSxtQkFDeEIsRUFBRSxHQUFHLEVBQUcsVUFBUztBQUFBLFFBQzVCLFNBQVMsT0FBTztBQUFBLFFBQWM7QUFDOUIsWUFBSSxPQUFRLEdBQUUsR0FBRyxJQUFJO0FBQUEsWUFDaEIsc0JBQXFCLEVBQUUsR0FBRyxLQUFLO0FBQUEsVUFDbEM7QUFBQSxVQUNBLFlBQVk7QUFBQSxVQUNaLGNBQWMsQ0FBQyxRQUFRO0FBQUEsVUFDdkIsVUFBVSxDQUFDLFFBQVE7QUFBQSxRQUNyQixDQUFDO0FBQUEsTUFDSDtBQUFFLGFBQU87QUFBQSxJQUNYO0FBQUE7QUFBQTs7O0FDM0JBO0FBQUEsbUZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksT0FBTyxLQUFLO0FBQ2hCLFFBQUksUUFBUSxLQUFLO0FBS2pCLElBQUFBLFFBQU8sVUFBVSxLQUFLLFNBQVMsU0FBUyxNQUFNLEdBQUc7QUFDL0MsVUFBSSxJQUFJLENBQUM7QUFDVCxjQUFRLElBQUksSUFBSSxRQUFRLE1BQU0sQ0FBQztBQUFBLElBQ2pDO0FBQUE7QUFBQTs7O0FDVkE7QUFBQSwrRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxRQUFRO0FBSVosSUFBQUEsUUFBTyxVQUFVLFNBQVUsVUFBVTtBQUNuQyxVQUFJLFNBQVMsQ0FBQztBQUVkLGFBQU8sV0FBVyxVQUFVLFdBQVcsSUFBSSxJQUFJLE1BQU0sTUFBTTtBQUFBLElBQzdEO0FBQUE7QUFBQTs7O0FDVEE7QUFBQSwwRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxzQkFBc0I7QUFFMUIsUUFBSSxNQUFNLEtBQUs7QUFDZixRQUFJLE1BQU0sS0FBSztBQUtmLElBQUFBLFFBQU8sVUFBVSxTQUFVLE9BQU8sUUFBUTtBQUN4QyxVQUFJLFVBQVUsb0JBQW9CLEtBQUs7QUFDdkMsYUFBTyxVQUFVLElBQUksSUFBSSxVQUFVLFFBQVEsQ0FBQyxJQUFJLElBQUksU0FBUyxNQUFNO0FBQUEsSUFDckU7QUFBQTtBQUFBOzs7QUNaQTtBQUFBLGtGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLHNCQUFzQjtBQUUxQixRQUFJLE1BQU0sS0FBSztBQUlmLElBQUFBLFFBQU8sVUFBVSxTQUFVLFVBQVU7QUFDbkMsVUFBSSxNQUFNLG9CQUFvQixRQUFRO0FBQ3RDLGFBQU8sTUFBTSxJQUFJLElBQUksS0FBSyxnQkFBZ0IsSUFBSTtBQUFBLElBQ2hEO0FBQUE7QUFBQTs7O0FDVkE7QUFBQSw2RkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxXQUFXO0FBSWYsSUFBQUEsUUFBTyxVQUFVLFNBQVUsS0FBSztBQUM5QixhQUFPLFNBQVMsSUFBSSxNQUFNO0FBQUEsSUFDNUI7QUFBQTtBQUFBOzs7QUNQQTtBQUFBLHVGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGtCQUFrQjtBQUN0QixRQUFJLGtCQUFrQjtBQUN0QixRQUFJLG9CQUFvQjtBQUd4QixRQUFJLGVBQWUsU0FBVSxhQUFhO0FBQ3hDLGFBQU8sU0FBVSxPQUFPLElBQUksV0FBVztBQUNyQyxZQUFJLElBQUksZ0JBQWdCLEtBQUs7QUFDN0IsWUFBSSxTQUFTLGtCQUFrQixDQUFDO0FBQ2hDLFlBQUksV0FBVyxFQUFHLFFBQU8sQ0FBQyxlQUFlO0FBQ3pDLFlBQUksUUFBUSxnQkFBZ0IsV0FBVyxNQUFNO0FBQzdDLFlBQUk7QUFHSixZQUFJLGVBQWUsT0FBTyxHQUFJLFFBQU8sU0FBUyxPQUFPO0FBQ25ELGtCQUFRLEVBQUUsT0FBTztBQUVqQixjQUFJLFVBQVUsTUFBTyxRQUFPO0FBQUEsUUFFOUI7QUFBQSxZQUFPLFFBQU0sU0FBUyxPQUFPLFNBQVM7QUFDcEMsZUFBSyxlQUFlLFNBQVMsTUFBTSxFQUFFLEtBQUssTUFBTSxHQUFJLFFBQU8sZUFBZSxTQUFTO0FBQUEsUUFDckY7QUFBRSxlQUFPLENBQUMsZUFBZTtBQUFBLE1BQzNCO0FBQUEsSUFDRjtBQUVBLElBQUFBLFFBQU8sVUFBVTtBQUFBO0FBQUE7QUFBQSxNQUdmLFVBQVUsYUFBYSxJQUFJO0FBQUE7QUFBQTtBQUFBLE1BRzNCLFNBQVMsYUFBYSxLQUFLO0FBQUEsSUFDN0I7QUFBQTtBQUFBOzs7QUNqQ0E7QUFBQSw2RkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksU0FBUztBQUNiLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUksVUFBVSx5QkFBdUM7QUFDckQsUUFBSSxhQUFhO0FBRWpCLFFBQUksT0FBTyxZQUFZLENBQUMsRUFBRSxJQUFJO0FBRTlCLElBQUFBLFFBQU8sVUFBVSxTQUFVLFFBQVEsT0FBTztBQUN4QyxVQUFJLElBQUksZ0JBQWdCLE1BQU07QUFDOUIsVUFBSSxJQUFJO0FBQ1IsVUFBSSxTQUFTLENBQUM7QUFDZCxVQUFJO0FBQ0osV0FBSyxPQUFPLEVBQUcsRUFBQyxPQUFPLFlBQVksR0FBRyxLQUFLLE9BQU8sR0FBRyxHQUFHLEtBQUssS0FBSyxRQUFRLEdBQUc7QUFFN0UsYUFBTyxNQUFNLFNBQVMsRUFBRyxLQUFJLE9BQU8sR0FBRyxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUc7QUFDeEQsU0FBQyxRQUFRLFFBQVEsR0FBRyxLQUFLLEtBQUssUUFBUSxHQUFHO0FBQUEsTUFDM0M7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUFBO0FBQUE7OztBQ3BCQTtBQUFBLHNGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFFQSxJQUFBQSxRQUFPLFVBQVU7QUFBQSxNQUNmO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ1ZBO0FBQUEsc0dBQUFDLFVBQUE7QUFBQTtBQUNBLFFBQUkscUJBQXFCO0FBQ3pCLFFBQUksY0FBYztBQUVsQixRQUFJLGFBQWEsWUFBWSxPQUFPLFVBQVUsV0FBVztBQUt6RCxJQUFBQSxTQUFRLElBQUksT0FBTyx1QkFBdUIsU0FBUyxvQkFBb0IsR0FBRztBQUN4RSxhQUFPLG1CQUFtQixHQUFHLFVBQVU7QUFBQSxJQUN6QztBQUFBO0FBQUE7OztBQ1hBO0FBQUEsd0dBQUFDLFVBQUE7QUFBQTtBQUVBLElBQUFBLFNBQVEsSUFBSSxPQUFPO0FBQUE7QUFBQTs7O0FDRm5CO0FBQUEsaUZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksYUFBYTtBQUNqQixRQUFJLGNBQWM7QUFDbEIsUUFBSSw0QkFBNEI7QUFDaEMsUUFBSSw4QkFBOEI7QUFDbEMsUUFBSSxXQUFXO0FBRWYsUUFBSSxTQUFTLFlBQVksQ0FBQyxFQUFFLE1BQU07QUFHbEMsSUFBQUEsUUFBTyxVQUFVLFdBQVcsV0FBVyxTQUFTLEtBQUssU0FBU0MsU0FBUSxJQUFJO0FBQ3hFLFVBQUlDLFFBQU8sMEJBQTBCLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDbkQsVUFBSSx3QkFBd0IsNEJBQTRCO0FBQ3hELGFBQU8sd0JBQXdCLE9BQU9BLE9BQU0sc0JBQXNCLEVBQUUsQ0FBQyxJQUFJQTtBQUFBLElBQzNFO0FBQUE7QUFBQTs7O0FDZEE7QUFBQSxvR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxTQUFTO0FBQ2IsUUFBSUMsV0FBVTtBQUNkLFFBQUksaUNBQWlDO0FBQ3JDLFFBQUksdUJBQXVCO0FBRTNCLElBQUFELFFBQU8sVUFBVSxTQUFVLFFBQVEsUUFBUSxZQUFZO0FBQ3JELFVBQUlFLFFBQU9ELFNBQVEsTUFBTTtBQUN6QixVQUFJLGlCQUFpQixxQkFBcUI7QUFDMUMsVUFBSSwyQkFBMkIsK0JBQStCO0FBQzlELGVBQVMsSUFBSSxHQUFHLElBQUlDLE1BQUssUUFBUSxLQUFLO0FBQ3BDLFlBQUksTUFBTUEsTUFBSyxDQUFDO0FBQ2hCLFlBQUksQ0FBQyxPQUFPLFFBQVEsR0FBRyxLQUFLLEVBQUUsY0FBYyxPQUFPLFlBQVksR0FBRyxJQUFJO0FBQ3BFLHlCQUFlLFFBQVEsS0FBSyx5QkFBeUIsUUFBUSxHQUFHLENBQUM7QUFBQSxRQUNuRTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDaEJBO0FBQUEsa0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksUUFBUTtBQUNaLFFBQUksYUFBYTtBQUVqQixRQUFJLGNBQWM7QUFFbEIsUUFBSSxXQUFXLFNBQVUsU0FBUyxXQUFXO0FBQzNDLFVBQUksUUFBUSxLQUFLLFVBQVUsT0FBTyxDQUFDO0FBQ25DLGFBQU8sVUFBVSxXQUFXLE9BQ3hCLFVBQVUsU0FBUyxRQUNuQixXQUFXLFNBQVMsSUFBSSxNQUFNLFNBQVMsSUFDdkMsQ0FBQyxDQUFDO0FBQUEsSUFDUjtBQUVBLFFBQUksWUFBWSxTQUFTLFlBQVksU0FBVSxRQUFRO0FBQ3JELGFBQU8sT0FBTyxNQUFNLEVBQUUsUUFBUSxhQUFhLEdBQUcsRUFBRSxZQUFZO0FBQUEsSUFDOUQ7QUFFQSxRQUFJLE9BQU8sU0FBUyxPQUFPLENBQUM7QUFDNUIsUUFBSSxTQUFTLFNBQVMsU0FBUztBQUMvQixRQUFJLFdBQVcsU0FBUyxXQUFXO0FBRW5DLElBQUFBLFFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQ3RCakI7QUFBQSwrRUFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSUMsY0FBYTtBQUNqQixRQUFJLDJCQUEyQiw2Q0FBMkQ7QUFDMUYsUUFBSSw4QkFBOEI7QUFDbEMsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSSx1QkFBdUI7QUFDM0IsUUFBSSw0QkFBNEI7QUFDaEMsUUFBSSxXQUFXO0FBaUJmLElBQUFELFFBQU8sVUFBVSxTQUFVLFNBQVMsUUFBUTtBQUMxQyxVQUFJLFNBQVMsUUFBUTtBQUNyQixVQUFJLFNBQVMsUUFBUTtBQUNyQixVQUFJLFNBQVMsUUFBUTtBQUNyQixVQUFJLFFBQVEsUUFBUSxLQUFLLGdCQUFnQixnQkFBZ0I7QUFDekQsVUFBSSxRQUFRO0FBQ1YsaUJBQVNDO0FBQUEsTUFDWCxXQUFXLFFBQVE7QUFDakIsaUJBQVNBLFlBQVcsTUFBTSxLQUFLLHFCQUFxQixRQUFRLENBQUMsQ0FBQztBQUFBLE1BQ2hFLE9BQU87QUFDTCxpQkFBU0EsWUFBVyxNQUFNLEtBQUtBLFlBQVcsTUFBTSxFQUFFO0FBQUEsTUFDcEQ7QUFDQSxVQUFJLE9BQVEsTUFBSyxPQUFPLFFBQVE7QUFDOUIseUJBQWlCLE9BQU8sR0FBRztBQUMzQixZQUFJLFFBQVEsZ0JBQWdCO0FBQzFCLHVCQUFhLHlCQUF5QixRQUFRLEdBQUc7QUFDakQsMkJBQWlCLGNBQWMsV0FBVztBQUFBLFFBQzVDLE1BQU8sa0JBQWlCLE9BQU8sR0FBRztBQUNsQyxpQkFBUyxTQUFTLFNBQVMsTUFBTSxVQUFVLFNBQVMsTUFBTSxPQUFPLEtBQUssUUFBUSxNQUFNO0FBRXBGLFlBQUksQ0FBQyxVQUFVLG1CQUFtQixRQUFXO0FBQzNDLGNBQUksT0FBTyxrQkFBa0IsT0FBTyxlQUFnQjtBQUNwRCxvQ0FBMEIsZ0JBQWdCLGNBQWM7QUFBQSxRQUMxRDtBQUVBLFlBQUksUUFBUSxRQUFTLGtCQUFrQixlQUFlLE1BQU87QUFDM0Qsc0NBQTRCLGdCQUFnQixRQUFRLElBQUk7QUFBQSxRQUMxRDtBQUNBLHNCQUFjLFFBQVEsS0FBSyxnQkFBZ0IsT0FBTztBQUFBLE1BQ3BEO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ3REQTtBQUFBLDhGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGtCQUFrQjtBQUV0QixRQUFJLGdCQUFnQixnQkFBZ0IsYUFBYTtBQUNqRCxRQUFJLE9BQU8sQ0FBQztBQUVaLFNBQUssYUFBYSxJQUFJO0FBRXRCLElBQUFBLFFBQU8sVUFBVSxPQUFPLElBQUksTUFBTTtBQUFBO0FBQUE7OztBQ1JsQztBQUFBLGdGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLHdCQUF3QjtBQUM1QixRQUFJLGFBQWE7QUFDakIsUUFBSSxhQUFhO0FBQ2pCLFFBQUksa0JBQWtCO0FBRXRCLFFBQUksZ0JBQWdCLGdCQUFnQixhQUFhO0FBQ2pELFFBQUksVUFBVTtBQUdkLFFBQUksb0JBQW9CLFdBQVcsMkJBQVk7QUFBRSxhQUFPO0FBQUEsSUFBVyxFQUFFLENBQUMsTUFBTTtBQUc1RSxRQUFJLFNBQVMsU0FBVSxJQUFJLEtBQUs7QUFDOUIsVUFBSTtBQUNGLGVBQU8sR0FBRyxHQUFHO0FBQUEsTUFDZixTQUFTLE9BQU87QUFBQSxNQUFjO0FBQUEsSUFDaEM7QUFHQSxJQUFBQSxRQUFPLFVBQVUsd0JBQXdCLGFBQWEsU0FBVSxJQUFJO0FBQ2xFLFVBQUksR0FBRyxLQUFLO0FBQ1osYUFBTyxPQUFPLFNBQVksY0FBYyxPQUFPLE9BQU8sU0FFbEQsUUFBUSxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUUsR0FBRyxhQUFhLE1BQU0sV0FBVyxNQUVwRSxvQkFBb0IsV0FBVyxDQUFDLEtBRS9CLFNBQVMsV0FBVyxDQUFDLE9BQU8sWUFBWSxXQUFXLEVBQUUsTUFBTSxJQUFJLGNBQWM7QUFBQSxJQUNwRjtBQUFBO0FBQUE7OztBQzdCQTtBQUFBLGtGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFVBQVU7QUFFZCxRQUFJLFVBQVU7QUFFZCxJQUFBQSxRQUFPLFVBQVUsU0FBVSxVQUFVO0FBQ25DLFVBQUksUUFBUSxRQUFRLE1BQU0sU0FBVSxPQUFNLElBQUksVUFBVSwyQ0FBMkM7QUFDbkcsYUFBTyxRQUFRLFFBQVE7QUFBQSxJQUN6QjtBQUFBO0FBQUE7OztBQ1JBO0FBQUEsb0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUkscUJBQXFCO0FBQ3pCLFFBQUksY0FBYztBQUtsQixJQUFBQSxRQUFPLFVBQVUsT0FBTyxRQUFRLFNBQVNDLE1BQUssR0FBRztBQUMvQyxhQUFPLG1CQUFtQixHQUFHLFdBQVc7QUFBQSxJQUMxQztBQUFBO0FBQUE7OztBQ1RBO0FBQUEsaUdBQUFDLFVBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLDBCQUEwQjtBQUM5QixRQUFJLHVCQUF1QjtBQUMzQixRQUFJLFdBQVc7QUFDZixRQUFJLGtCQUFrQjtBQUN0QixRQUFJLGFBQWE7QUFLakIsSUFBQUEsU0FBUSxJQUFJLGVBQWUsQ0FBQywwQkFBMEIsT0FBTyxtQkFBbUIsU0FBUyxpQkFBaUIsR0FBRyxZQUFZO0FBQ3ZILGVBQVMsQ0FBQztBQUNWLFVBQUksUUFBUSxnQkFBZ0IsVUFBVTtBQUN0QyxVQUFJQyxRQUFPLFdBQVcsVUFBVTtBQUNoQyxVQUFJLFNBQVNBLE1BQUs7QUFDbEIsVUFBSSxRQUFRO0FBQ1osVUFBSTtBQUNKLGFBQU8sU0FBUyxNQUFPLHNCQUFxQixFQUFFLEdBQUcsTUFBTUEsTUFBSyxPQUFPLEdBQUcsTUFBTSxHQUFHLENBQUM7QUFDaEYsYUFBTztBQUFBLElBQ1Q7QUFBQTtBQUFBOzs7QUNwQkE7QUFBQSw2RUFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxhQUFhO0FBRWpCLElBQUFBLFFBQU8sVUFBVSxXQUFXLFlBQVksaUJBQWlCO0FBQUE7QUFBQTs7O0FDSHpEO0FBQUEsc0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQUksV0FBVztBQUNmLFFBQUkseUJBQXlCO0FBQzdCLFFBQUksY0FBYztBQUNsQixRQUFJLGFBQWE7QUFDakIsUUFBSSxPQUFPO0FBQ1gsUUFBSSx3QkFBd0I7QUFDNUIsUUFBSSxZQUFZO0FBRWhCLFFBQUksS0FBSztBQUNULFFBQUksS0FBSztBQUNULFFBQUksWUFBWTtBQUNoQixRQUFJLFNBQVM7QUFDYixRQUFJLFdBQVcsVUFBVSxVQUFVO0FBRW5DLFFBQUksbUJBQW1CLFdBQVk7QUFBQSxJQUFjO0FBRWpELFFBQUksWUFBWSxTQUFVLFNBQVM7QUFDakMsYUFBTyxLQUFLLFNBQVMsS0FBSyxVQUFVLEtBQUssTUFBTSxTQUFTO0FBQUEsSUFDMUQ7QUFHQSxRQUFJLDRCQUE0QixTQUFVQyxrQkFBaUI7QUFDekQsTUFBQUEsaUJBQWdCLE1BQU0sVUFBVSxFQUFFLENBQUM7QUFDbkMsTUFBQUEsaUJBQWdCLE1BQU07QUFDdEIsVUFBSSxPQUFPQSxpQkFBZ0IsYUFBYTtBQUV4QyxNQUFBQSxtQkFBa0I7QUFDbEIsYUFBTztBQUFBLElBQ1Q7QUFHQSxRQUFJLDJCQUEyQixXQUFZO0FBRXpDLFVBQUksU0FBUyxzQkFBc0IsUUFBUTtBQUMzQyxVQUFJLEtBQUssU0FBUyxTQUFTO0FBQzNCLFVBQUk7QUFDSixhQUFPLE1BQU0sVUFBVTtBQUN2QixXQUFLLFlBQVksTUFBTTtBQUV2QixhQUFPLE1BQU0sT0FBTyxFQUFFO0FBQ3RCLHVCQUFpQixPQUFPLGNBQWM7QUFDdEMscUJBQWUsS0FBSztBQUNwQixxQkFBZSxNQUFNLFVBQVUsbUJBQW1CLENBQUM7QUFDbkQscUJBQWUsTUFBTTtBQUNyQixhQUFPLGVBQWU7QUFBQSxJQUN4QjtBQU9BLFFBQUk7QUFDSixRQUFJLGtCQUFrQixXQUFZO0FBQ2hDLFVBQUk7QUFDRiwwQkFBa0IsSUFBSSxjQUFjLFVBQVU7QUFBQSxNQUNoRCxTQUFTLE9BQU87QUFBQSxNQUFlO0FBQy9CLHdCQUFrQixPQUFPLFlBQVksY0FDakMsU0FBUyxVQUFVLGtCQUNqQiwwQkFBMEIsZUFBZSxJQUN6Qyx5QkFBeUIsSUFDM0IsMEJBQTBCLGVBQWU7QUFDN0MsVUFBSSxTQUFTLFlBQVk7QUFDekIsYUFBTyxTQUFVLFFBQU8sZ0JBQWdCLFNBQVMsRUFBRSxZQUFZLE1BQU0sQ0FBQztBQUN0RSxhQUFPLGdCQUFnQjtBQUFBLElBQ3pCO0FBRUEsZUFBVyxRQUFRLElBQUk7QUFLdkIsSUFBQUQsUUFBTyxVQUFVLE9BQU8sVUFBVSxTQUFTLE9BQU8sR0FBRyxZQUFZO0FBQy9ELFVBQUk7QUFDSixVQUFJLE1BQU0sTUFBTTtBQUNkLHlCQUFpQixTQUFTLElBQUksU0FBUyxDQUFDO0FBQ3hDLGlCQUFTLElBQUksaUJBQWlCO0FBQzlCLHlCQUFpQixTQUFTLElBQUk7QUFFOUIsZUFBTyxRQUFRLElBQUk7QUFBQSxNQUNyQixNQUFPLFVBQVMsZ0JBQWdCO0FBQ2hDLGFBQU8sZUFBZSxTQUFZLFNBQVMsdUJBQXVCLEVBQUUsUUFBUSxVQUFVO0FBQUEsSUFDeEY7QUFBQTtBQUFBOzs7QUNwRkE7QUFBQSxvRkFBQUUsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBRWxCLElBQUFBLFFBQU8sVUFBVSxZQUFZLENBQUMsRUFBRSxLQUFLO0FBQUE7QUFBQTs7O0FDSHJDO0FBQUEsK0dBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQUksVUFBVTtBQUNkLFFBQUksa0JBQWtCO0FBQ3RCLFFBQUksdUJBQXVCLHdDQUFzRDtBQUNqRixRQUFJLGFBQWE7QUFFakIsUUFBSSxjQUFjLE9BQU8sVUFBVSxZQUFZLFVBQVUsT0FBTyxzQkFDNUQsT0FBTyxvQkFBb0IsTUFBTSxJQUFJLENBQUM7QUFFMUMsUUFBSSxpQkFBaUIsU0FBVSxJQUFJO0FBQ2pDLFVBQUk7QUFDRixlQUFPLHFCQUFxQixFQUFFO0FBQUEsTUFDaEMsU0FBUyxPQUFPO0FBQ2QsZUFBTyxXQUFXLFdBQVc7QUFBQSxNQUMvQjtBQUFBLElBQ0Y7QUFHQSxJQUFBQSxRQUFPLFFBQVEsSUFBSSxTQUFTLG9CQUFvQixJQUFJO0FBQ2xELGFBQU8sZUFBZSxRQUFRLEVBQUUsTUFBTSxXQUNsQyxlQUFlLEVBQUUsSUFDakIscUJBQXFCLGdCQUFnQixFQUFFLENBQUM7QUFBQSxJQUM5QztBQUFBO0FBQUE7OztBQ3ZCQTtBQUFBLGlHQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxpQkFBaUI7QUFFckIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsUUFBUSxNQUFNLFlBQVk7QUFDbkQsVUFBSSxXQUFXLElBQUssYUFBWSxXQUFXLEtBQUssTUFBTSxFQUFFLFFBQVEsS0FBSyxDQUFDO0FBQ3RFLFVBQUksV0FBVyxJQUFLLGFBQVksV0FBVyxLQUFLLE1BQU0sRUFBRSxRQUFRLEtBQUssQ0FBQztBQUN0RSxhQUFPLGVBQWUsRUFBRSxRQUFRLE1BQU0sVUFBVTtBQUFBLElBQ2xEO0FBQUE7QUFBQTs7O0FDUkE7QUFBQSxrR0FBQUMsVUFBQTtBQUFBO0FBQ0EsUUFBSSxrQkFBa0I7QUFFdEIsSUFBQUEsU0FBUSxJQUFJO0FBQUE7QUFBQTs7O0FDSFo7QUFBQSw2RUFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSUMsY0FBYTtBQUVqQixJQUFBRCxRQUFPLFVBQVVDO0FBQUE7QUFBQTs7O0FDSGpCO0FBQUEsaUdBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksT0FBTztBQUNYLFFBQUksU0FBUztBQUNiLFFBQUksK0JBQStCO0FBQ25DLFFBQUksaUJBQWlCLGlDQUErQztBQUVwRSxJQUFBQSxRQUFPLFVBQVUsU0FBVSxNQUFNO0FBQy9CLFVBQUlDLFVBQVMsS0FBSyxXQUFXLEtBQUssU0FBUyxDQUFDO0FBQzVDLFVBQUksQ0FBQyxPQUFPQSxTQUFRLElBQUksRUFBRyxnQkFBZUEsU0FBUSxNQUFNO0FBQUEsUUFDdEQsT0FBTyw2QkFBNkIsRUFBRSxJQUFJO0FBQUEsTUFDNUMsQ0FBQztBQUFBLElBQ0g7QUFBQTtBQUFBOzs7QUNYQTtBQUFBLG1HQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLE9BQU87QUFDWCxRQUFJLGFBQWE7QUFDakIsUUFBSSxrQkFBa0I7QUFDdEIsUUFBSSxnQkFBZ0I7QUFFcEIsSUFBQUEsUUFBTyxVQUFVLFdBQVk7QUFDM0IsVUFBSUMsVUFBUyxXQUFXLFFBQVE7QUFDaEMsVUFBSSxrQkFBa0JBLFdBQVVBLFFBQU87QUFDdkMsVUFBSSxVQUFVLG1CQUFtQixnQkFBZ0I7QUFDakQsVUFBSSxlQUFlLGdCQUFnQixhQUFhO0FBRWhELFVBQUksbUJBQW1CLENBQUMsZ0JBQWdCLFlBQVksR0FBRztBQUlyRCxzQkFBYyxpQkFBaUIsY0FBYyxTQUFVLE1BQU07QUFDM0QsaUJBQU8sS0FBSyxTQUFTLElBQUk7QUFBQSxRQUMzQixHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFBQSxNQUNqQjtBQUFBLElBQ0Y7QUFBQTtBQUFBOzs7QUNwQkE7QUFBQSwwRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxpQkFBaUIsaUNBQStDO0FBQ3BFLFFBQUksU0FBUztBQUNiLFFBQUksa0JBQWtCO0FBRXRCLFFBQUksZ0JBQWdCLGdCQUFnQixhQUFhO0FBRWpELElBQUFBLFFBQU8sVUFBVSxTQUFVLFFBQVEsS0FBSyxRQUFRO0FBQzlDLFVBQUksVUFBVSxDQUFDLE9BQVEsVUFBUyxPQUFPO0FBQ3ZDLFVBQUksVUFBVSxDQUFDLE9BQU8sUUFBUSxhQUFhLEdBQUc7QUFDNUMsdUJBQWUsUUFBUSxlQUFlLEVBQUUsY0FBYyxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQUEsTUFDMUU7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDWkE7QUFBQSxxR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxhQUFhO0FBQ2pCLFFBQUksY0FBYztBQUVsQixJQUFBQSxRQUFPLFVBQVUsU0FBVSxJQUFJO0FBSTdCLFVBQUksV0FBVyxFQUFFLE1BQU0sV0FBWSxRQUFPLFlBQVksRUFBRTtBQUFBLElBQzFEO0FBQUE7QUFBQTs7O0FDVEE7QUFBQSw4RkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksWUFBWTtBQUNoQixRQUFJLGNBQWM7QUFFbEIsUUFBSSxPQUFPLFlBQVksWUFBWSxJQUFJO0FBR3ZDLElBQUFBLFFBQU8sVUFBVSxTQUFVLElBQUksTUFBTTtBQUNuQyxnQkFBVSxFQUFFO0FBQ1osYUFBTyxTQUFTLFNBQVksS0FBSyxjQUFjLEtBQUssSUFBSSxJQUFJLElBQUksV0FBeUI7QUFDdkYsZUFBTyxHQUFHLE1BQU0sTUFBTSxTQUFTO0FBQUEsTUFDakM7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDYkE7QUFBQSxpRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxVQUFVO0FBS2QsSUFBQUEsUUFBTyxVQUFVLE1BQU0sV0FBVyxTQUFTLFFBQVEsVUFBVTtBQUMzRCxhQUFPLFFBQVEsUUFBUSxNQUFNO0FBQUEsSUFDL0I7QUFBQTtBQUFBOzs7QUNSQTtBQUFBLHVGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxRQUFRO0FBQ1osUUFBSSxhQUFhO0FBQ2pCLFFBQUksVUFBVTtBQUNkLFFBQUksYUFBYTtBQUNqQixRQUFJLGdCQUFnQjtBQUVwQixRQUFJLE9BQU8sV0FBWTtBQUFBLElBQWM7QUFDckMsUUFBSSxZQUFZLFdBQVcsV0FBVyxXQUFXO0FBQ2pELFFBQUksb0JBQW9CO0FBQ3hCLFFBQUksT0FBTyxZQUFZLGtCQUFrQixJQUFJO0FBQzdDLFFBQUksc0JBQXNCLENBQUMsa0JBQWtCLEtBQUssSUFBSTtBQUV0RCxRQUFJLHNCQUFzQixTQUFTLGNBQWMsVUFBVTtBQUN6RCxVQUFJLENBQUMsV0FBVyxRQUFRLEVBQUcsUUFBTztBQUNsQyxVQUFJO0FBQ0Ysa0JBQVUsTUFBTSxDQUFDLEdBQUcsUUFBUTtBQUM1QixlQUFPO0FBQUEsTUFDVCxTQUFTLE9BQU87QUFDZCxlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFFQSxRQUFJLHNCQUFzQixTQUFTLGNBQWMsVUFBVTtBQUN6RCxVQUFJLENBQUMsV0FBVyxRQUFRLEVBQUcsUUFBTztBQUNsQyxjQUFRLFFBQVEsUUFBUSxHQUFHO0FBQUEsUUFDekIsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUEwQixpQkFBTztBQUFBLE1BQ3hDO0FBQ0EsVUFBSTtBQUlGLGVBQU8sdUJBQXVCLENBQUMsQ0FBQyxLQUFLLG1CQUFtQixjQUFjLFFBQVEsQ0FBQztBQUFBLE1BQ2pGLFNBQVMsT0FBTztBQUNkLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRjtBQUVBLHdCQUFvQixPQUFPO0FBSTNCLElBQUFBLFFBQU8sVUFBVSxDQUFDLGFBQWEsTUFBTSxXQUFZO0FBQy9DLFVBQUk7QUFDSixhQUFPLG9CQUFvQixvQkFBb0IsSUFBSSxLQUM5QyxDQUFDLG9CQUFvQixNQUFNLEtBQzNCLENBQUMsb0JBQW9CLFdBQVk7QUFBRSxpQkFBUztBQUFBLE1BQU0sQ0FBQyxLQUNuRDtBQUFBLElBQ1AsQ0FBQyxJQUFJLHNCQUFzQjtBQUFBO0FBQUE7OztBQ25EM0I7QUFBQSxrR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxVQUFVO0FBQ2QsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSUMsWUFBVztBQUNmLFFBQUksa0JBQWtCO0FBRXRCLFFBQUksVUFBVSxnQkFBZ0IsU0FBUztBQUN2QyxRQUFJLFNBQVM7QUFJYixJQUFBRCxRQUFPLFVBQVUsU0FBVSxlQUFlO0FBQ3hDLFVBQUk7QUFDSixVQUFJLFFBQVEsYUFBYSxHQUFHO0FBQzFCLFlBQUksY0FBYztBQUVsQixZQUFJLGNBQWMsQ0FBQyxNQUFNLE1BQU0sVUFBVSxRQUFRLEVBQUUsU0FBUyxHQUFJLEtBQUk7QUFBQSxpQkFDM0RDLFVBQVMsQ0FBQyxHQUFHO0FBQ3BCLGNBQUksRUFBRSxPQUFPO0FBQ2IsY0FBSSxNQUFNLEtBQU0sS0FBSTtBQUFBLFFBQ3RCO0FBQUEsTUFDRjtBQUFFLGFBQU8sTUFBTSxTQUFZLFNBQVM7QUFBQSxJQUN0QztBQUFBO0FBQUE7OztBQ3RCQTtBQUFBLDZGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLDBCQUEwQjtBQUk5QixJQUFBQSxRQUFPLFVBQVUsU0FBVSxlQUFlLFFBQVE7QUFDaEQsYUFBTyxLQUFLLHdCQUF3QixhQUFhLEdBQUcsV0FBVyxJQUFJLElBQUksTUFBTTtBQUFBLElBQy9FO0FBQUE7QUFBQTs7O0FDUEE7QUFBQSx3RkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxPQUFPO0FBQ1gsUUFBSSxjQUFjO0FBQ2xCLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksV0FBVztBQUNmLFFBQUksb0JBQW9CO0FBQ3hCLFFBQUkscUJBQXFCO0FBRXpCLFFBQUksT0FBTyxZQUFZLENBQUMsRUFBRSxJQUFJO0FBRzlCLFFBQUksZUFBZSxTQUFVLE1BQU07QUFDakMsVUFBSSxTQUFTLFNBQVM7QUFDdEIsVUFBSSxZQUFZLFNBQVM7QUFDekIsVUFBSSxVQUFVLFNBQVM7QUFDdkIsVUFBSSxXQUFXLFNBQVM7QUFDeEIsVUFBSSxnQkFBZ0IsU0FBUztBQUM3QixVQUFJLG1CQUFtQixTQUFTO0FBQ2hDLFVBQUksV0FBVyxTQUFTLEtBQUs7QUFDN0IsYUFBTyxTQUFVLE9BQU8sWUFBWSxNQUFNLGdCQUFnQjtBQUN4RCxZQUFJLElBQUksU0FBUyxLQUFLO0FBQ3RCLFlBQUlDLFFBQU8sY0FBYyxDQUFDO0FBQzFCLFlBQUksU0FBUyxrQkFBa0JBLEtBQUk7QUFDbkMsWUFBSSxnQkFBZ0IsS0FBSyxZQUFZLElBQUk7QUFDekMsWUFBSSxRQUFRO0FBQ1osWUFBSSxTQUFTLGtCQUFrQjtBQUMvQixZQUFJLFNBQVMsU0FBUyxPQUFPLE9BQU8sTUFBTSxJQUFJLGFBQWEsbUJBQW1CLE9BQU8sT0FBTyxDQUFDLElBQUk7QUFDakcsWUFBSSxPQUFPO0FBQ1gsZUFBTSxTQUFTLE9BQU8sUUFBUyxLQUFJLFlBQVksU0FBU0EsT0FBTTtBQUM1RCxrQkFBUUEsTUFBSyxLQUFLO0FBQ2xCLG1CQUFTLGNBQWMsT0FBTyxPQUFPLENBQUM7QUFDdEMsY0FBSSxNQUFNO0FBQ1IsZ0JBQUksT0FBUSxRQUFPLEtBQUssSUFBSTtBQUFBLHFCQUNuQixPQUFRLFNBQVEsTUFBTTtBQUFBLGNBQzdCLEtBQUs7QUFBRyx1QkFBTztBQUFBO0FBQUEsY0FDZixLQUFLO0FBQUcsdUJBQU87QUFBQTtBQUFBLGNBQ2YsS0FBSztBQUFHLHVCQUFPO0FBQUE7QUFBQSxjQUNmLEtBQUs7QUFBRyxxQkFBSyxRQUFRLEtBQUs7QUFBQSxZQUM1QjtBQUFBLGdCQUFPLFNBQVEsTUFBTTtBQUFBLGNBQ25CLEtBQUs7QUFBRyx1QkFBTztBQUFBO0FBQUEsY0FDZixLQUFLO0FBQUcscUJBQUssUUFBUSxLQUFLO0FBQUEsWUFDNUI7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUNBLGVBQU8sZ0JBQWdCLEtBQUssV0FBVyxXQUFXLFdBQVc7QUFBQSxNQUMvRDtBQUFBLElBQ0Y7QUFFQSxJQUFBRCxRQUFPLFVBQVU7QUFBQTtBQUFBO0FBQUEsTUFHZixTQUFTLGFBQWEsQ0FBQztBQUFBO0FBQUE7QUFBQSxNQUd2QixLQUFLLGFBQWEsQ0FBQztBQUFBO0FBQUE7QUFBQSxNQUduQixRQUFRLGFBQWEsQ0FBQztBQUFBO0FBQUE7QUFBQSxNQUd0QixNQUFNLGFBQWEsQ0FBQztBQUFBO0FBQUE7QUFBQSxNQUdwQixPQUFPLGFBQWEsQ0FBQztBQUFBO0FBQUE7QUFBQSxNQUdyQixNQUFNLGFBQWEsQ0FBQztBQUFBO0FBQUE7QUFBQSxNQUdwQixXQUFXLGFBQWEsQ0FBQztBQUFBO0FBQUE7QUFBQSxNQUd6QixjQUFjLGFBQWEsQ0FBQztBQUFBLElBQzlCO0FBQUE7QUFBQTs7O0FDekVBO0FBQUE7QUFBQTtBQUNBLFFBQUksSUFBSTtBQUNSLFFBQUlFLGNBQWE7QUFDakIsUUFBSSxPQUFPO0FBQ1gsUUFBSSxjQUFjO0FBQ2xCLFFBQUksVUFBVTtBQUNkLFFBQUksY0FBYztBQUNsQixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLFFBQVE7QUFDWixRQUFJLFNBQVM7QUFDYixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLFdBQVc7QUFDZixRQUFJLGtCQUFrQjtBQUN0QixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLFlBQVk7QUFDaEIsUUFBSSwyQkFBMkI7QUFDL0IsUUFBSSxxQkFBcUI7QUFDekIsUUFBSSxhQUFhO0FBQ2pCLFFBQUksNEJBQTRCO0FBQ2hDLFFBQUksOEJBQThCO0FBQ2xDLFFBQUksOEJBQThCO0FBQ2xDLFFBQUksaUNBQWlDO0FBQ3JDLFFBQUksdUJBQXVCO0FBQzNCLFFBQUkseUJBQXlCO0FBQzdCLFFBQUksNkJBQTZCO0FBQ2pDLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksd0JBQXdCO0FBQzVCLFFBQUksU0FBUztBQUNiLFFBQUksWUFBWTtBQUNoQixRQUFJLGFBQWE7QUFDakIsUUFBSSxNQUFNO0FBQ1YsUUFBSSxrQkFBa0I7QUFDdEIsUUFBSSwrQkFBK0I7QUFDbkMsUUFBSSx3QkFBd0I7QUFDNUIsUUFBSSwwQkFBMEI7QUFDOUIsUUFBSSxpQkFBaUI7QUFDckIsUUFBSSxzQkFBc0I7QUFDMUIsUUFBSSxXQUFXLDBCQUF3QztBQUV2RCxRQUFJLFNBQVMsVUFBVSxRQUFRO0FBQy9CLFFBQUksU0FBUztBQUNiLFFBQUksWUFBWTtBQUVoQixRQUFJLG1CQUFtQixvQkFBb0I7QUFDM0MsUUFBSSxtQkFBbUIsb0JBQW9CLFVBQVUsTUFBTTtBQUUzRCxRQUFJLGtCQUFrQixPQUFPLFNBQVM7QUFDdEMsUUFBSSxVQUFVQSxZQUFXO0FBQ3pCLFFBQUksa0JBQWtCLFdBQVcsUUFBUSxTQUFTO0FBQ2xELFFBQUksYUFBYUEsWUFBVztBQUM1QixRQUFJQyxhQUFZRCxZQUFXO0FBQzNCLFFBQUksVUFBVUEsWUFBVztBQUN6QixRQUFJLGlDQUFpQywrQkFBK0I7QUFDcEUsUUFBSSx1QkFBdUIscUJBQXFCO0FBQ2hELFFBQUksNEJBQTRCLDRCQUE0QjtBQUM1RCxRQUFJLDZCQUE2QiwyQkFBMkI7QUFDNUQsUUFBSSxPQUFPLFlBQVksQ0FBQyxFQUFFLElBQUk7QUFFOUIsUUFBSSxhQUFhLE9BQU8sU0FBUztBQUNqQyxRQUFJLHlCQUF5QixPQUFPLFlBQVk7QUFDaEQsUUFBSSx3QkFBd0IsT0FBTyxLQUFLO0FBR3hDLFFBQUksYUFBYSxDQUFDLFdBQVcsQ0FBQyxRQUFRLFNBQVMsS0FBSyxDQUFDLFFBQVEsU0FBUyxFQUFFO0FBR3hFLFFBQUkseUJBQXlCLFNBQVUsR0FBRyxHQUFHLFlBQVk7QUFDdkQsVUFBSSw0QkFBNEIsK0JBQStCLGlCQUFpQixDQUFDO0FBQ2pGLFVBQUksMEJBQTJCLFFBQU8sZ0JBQWdCLENBQUM7QUFDdkQsMkJBQXFCLEdBQUcsR0FBRyxVQUFVO0FBQ3JDLFVBQUksNkJBQTZCLE1BQU0saUJBQWlCO0FBQ3RELDZCQUFxQixpQkFBaUIsR0FBRyx5QkFBeUI7QUFBQSxNQUNwRTtBQUFBLElBQ0Y7QUFFQSxRQUFJLHNCQUFzQixlQUFlLE1BQU0sV0FBWTtBQUN6RCxhQUFPLG1CQUFtQixxQkFBcUIsQ0FBQyxHQUFHLEtBQUs7QUFBQSxRQUN0RCxLQUFLLFdBQVk7QUFBRSxpQkFBTyxxQkFBcUIsTUFBTSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRTtBQUFBLFFBQUc7QUFBQSxNQUM3RSxDQUFDLENBQUMsRUFBRSxNQUFNO0FBQUEsSUFDWixDQUFDLElBQUkseUJBQXlCO0FBRTlCLFFBQUksT0FBTyxTQUFVLEtBQUssYUFBYTtBQUNyQyxVQUFJLFNBQVMsV0FBVyxHQUFHLElBQUksbUJBQW1CLGVBQWU7QUFDakUsdUJBQWlCLFFBQVE7QUFBQSxRQUN2QixNQUFNO0FBQUEsUUFDTjtBQUFBLFFBQ0E7QUFBQSxNQUNGLENBQUM7QUFDRCxVQUFJLENBQUMsWUFBYSxRQUFPLGNBQWM7QUFDdkMsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFJLGtCQUFrQixTQUFTLGVBQWUsR0FBRyxHQUFHLFlBQVk7QUFDOUQsVUFBSSxNQUFNLGdCQUFpQixpQkFBZ0Isd0JBQXdCLEdBQUcsVUFBVTtBQUNoRixlQUFTLENBQUM7QUFDVixVQUFJLE1BQU0sY0FBYyxDQUFDO0FBQ3pCLGVBQVMsVUFBVTtBQUNuQixVQUFJLE9BQU8sWUFBWSxHQUFHLEdBQUc7QUFDM0IsWUFBSSxDQUFDLFdBQVcsWUFBWTtBQUMxQixjQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRyxzQkFBcUIsR0FBRyxRQUFRLHlCQUF5QixHQUFHLG1CQUFtQixJQUFJLENBQUMsQ0FBQztBQUM3RyxZQUFFLE1BQU0sRUFBRSxHQUFHLElBQUk7QUFBQSxRQUNuQixPQUFPO0FBQ0wsY0FBSSxPQUFPLEdBQUcsTUFBTSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRyxHQUFFLE1BQU0sRUFBRSxHQUFHLElBQUk7QUFDMUQsdUJBQWEsbUJBQW1CLFlBQVksRUFBRSxZQUFZLHlCQUF5QixHQUFHLEtBQUssRUFBRSxDQUFDO0FBQUEsUUFDaEc7QUFBRSxlQUFPLG9CQUFvQixHQUFHLEtBQUssVUFBVTtBQUFBLE1BQ2pEO0FBQUUsYUFBTyxxQkFBcUIsR0FBRyxLQUFLLFVBQVU7QUFBQSxJQUNsRDtBQUVBLFFBQUksb0JBQW9CLFNBQVMsaUJBQWlCLEdBQUcsWUFBWTtBQUMvRCxlQUFTLENBQUM7QUFDVixVQUFJLGFBQWEsZ0JBQWdCLFVBQVU7QUFDM0MsVUFBSUUsUUFBTyxXQUFXLFVBQVUsRUFBRSxPQUFPLHVCQUF1QixVQUFVLENBQUM7QUFDM0UsZUFBU0EsT0FBTSxTQUFVLEtBQUs7QUFDNUIsWUFBSSxDQUFDLGVBQWUsS0FBSyx1QkFBdUIsWUFBWSxHQUFHLEVBQUcsaUJBQWdCLEdBQUcsS0FBSyxXQUFXLEdBQUcsQ0FBQztBQUFBLE1BQzNHLENBQUM7QUFDRCxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksVUFBVSxTQUFTLE9BQU8sR0FBRyxZQUFZO0FBQzNDLGFBQU8sZUFBZSxTQUFZLG1CQUFtQixDQUFDLElBQUksa0JBQWtCLG1CQUFtQixDQUFDLEdBQUcsVUFBVTtBQUFBLElBQy9HO0FBRUEsUUFBSSx3QkFBd0IsU0FBUyxxQkFBcUIsR0FBRztBQUMzRCxVQUFJLElBQUksY0FBYyxDQUFDO0FBQ3ZCLFVBQUksYUFBYSxLQUFLLDRCQUE0QixNQUFNLENBQUM7QUFDekQsVUFBSSxTQUFTLG1CQUFtQixPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyx3QkFBd0IsQ0FBQyxFQUFHLFFBQU87QUFDcEcsYUFBTyxjQUFjLENBQUMsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sWUFBWSxDQUFDLEtBQUssT0FBTyxNQUFNLE1BQU0sS0FBSyxLQUFLLE1BQU0sRUFBRSxDQUFDLElBQ3JHLGFBQWE7QUFBQSxJQUNuQjtBQUVBLFFBQUksNEJBQTRCLFNBQVMseUJBQXlCLEdBQUcsR0FBRztBQUN0RSxVQUFJLEtBQUssZ0JBQWdCLENBQUM7QUFDMUIsVUFBSSxNQUFNLGNBQWMsQ0FBQztBQUN6QixVQUFJLE9BQU8sbUJBQW1CLE9BQU8sWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLHdCQUF3QixHQUFHLEVBQUc7QUFDL0YsVUFBSSxhQUFhLCtCQUErQixJQUFJLEdBQUc7QUFDdkQsVUFBSSxjQUFjLE9BQU8sWUFBWSxHQUFHLEtBQUssRUFBRSxPQUFPLElBQUksTUFBTSxLQUFLLEdBQUcsTUFBTSxFQUFFLEdBQUcsSUFBSTtBQUNyRixtQkFBVyxhQUFhO0FBQUEsTUFDMUI7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksdUJBQXVCLFNBQVMsb0JBQW9CLEdBQUc7QUFDekQsVUFBSSxRQUFRLDBCQUEwQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hELFVBQUksU0FBUyxDQUFDO0FBQ2QsZUFBUyxPQUFPLFNBQVUsS0FBSztBQUM3QixZQUFJLENBQUMsT0FBTyxZQUFZLEdBQUcsS0FBSyxDQUFDLE9BQU8sWUFBWSxHQUFHLEVBQUcsTUFBSyxRQUFRLEdBQUc7QUFBQSxNQUM1RSxDQUFDO0FBQ0QsYUFBTztBQUFBLElBQ1Q7QUFFQSxRQUFJLHlCQUF5QixTQUFVLEdBQUc7QUFDeEMsVUFBSSxzQkFBc0IsTUFBTTtBQUNoQyxVQUFJLFFBQVEsMEJBQTBCLHNCQUFzQix5QkFBeUIsZ0JBQWdCLENBQUMsQ0FBQztBQUN2RyxVQUFJLFNBQVMsQ0FBQztBQUNkLGVBQVMsT0FBTyxTQUFVLEtBQUs7QUFDN0IsWUFBSSxPQUFPLFlBQVksR0FBRyxNQUFNLENBQUMsdUJBQXVCLE9BQU8saUJBQWlCLEdBQUcsSUFBSTtBQUNyRixlQUFLLFFBQVEsV0FBVyxHQUFHLENBQUM7QUFBQSxRQUM5QjtBQUFBLE1BQ0YsQ0FBQztBQUNELGFBQU87QUFBQSxJQUNUO0FBSUEsUUFBSSxDQUFDLGVBQWU7QUFDbEIsZ0JBQVUsU0FBU0MsVUFBUztBQUMxQixZQUFJLGNBQWMsaUJBQWlCLElBQUksRUFBRyxPQUFNLElBQUlGLFdBQVUsNkJBQTZCO0FBQzNGLFlBQUksY0FBYyxDQUFDLFVBQVUsVUFBVSxVQUFVLENBQUMsTUFBTSxTQUFZLFNBQVksVUFBVSxVQUFVLENBQUMsQ0FBQztBQUN0RyxZQUFJLE1BQU0sSUFBSSxXQUFXO0FBQ3pCLFlBQUksU0FBUyxTQUFVLE9BQU87QUFDNUIsY0FBSSxRQUFRLFNBQVMsU0FBWUQsY0FBYTtBQUM5QyxjQUFJLFVBQVUsZ0JBQWlCLE1BQUssUUFBUSx3QkFBd0IsS0FBSztBQUN6RSxjQUFJLE9BQU8sT0FBTyxNQUFNLEtBQUssT0FBTyxNQUFNLE1BQU0sR0FBRyxHQUFHLEVBQUcsT0FBTSxNQUFNLEVBQUUsR0FBRyxJQUFJO0FBQzlFLGNBQUksYUFBYSx5QkFBeUIsR0FBRyxLQUFLO0FBQ2xELGNBQUk7QUFDRixnQ0FBb0IsT0FBTyxLQUFLLFVBQVU7QUFBQSxVQUM1QyxTQUFTLE9BQU87QUFDZCxnQkFBSSxFQUFFLGlCQUFpQixZQUFhLE9BQU07QUFDMUMsbUNBQXVCLE9BQU8sS0FBSyxVQUFVO0FBQUEsVUFDL0M7QUFBQSxRQUNGO0FBQ0EsWUFBSSxlQUFlLFdBQVkscUJBQW9CLGlCQUFpQixLQUFLLEVBQUUsY0FBYyxNQUFNLEtBQUssT0FBTyxDQUFDO0FBQzVHLGVBQU8sS0FBSyxLQUFLLFdBQVc7QUFBQSxNQUM5QjtBQUVBLHdCQUFrQixRQUFRLFNBQVM7QUFFbkMsb0JBQWMsaUJBQWlCLFlBQVksU0FBUyxXQUFXO0FBQzdELGVBQU8saUJBQWlCLElBQUksRUFBRTtBQUFBLE1BQ2hDLENBQUM7QUFFRCxvQkFBYyxTQUFTLGlCQUFpQixTQUFVLGFBQWE7QUFDN0QsZUFBTyxLQUFLLElBQUksV0FBVyxHQUFHLFdBQVc7QUFBQSxNQUMzQyxDQUFDO0FBRUQsaUNBQTJCLElBQUk7QUFDL0IsMkJBQXFCLElBQUk7QUFDekIsNkJBQXVCLElBQUk7QUFDM0IscUNBQStCLElBQUk7QUFDbkMsZ0NBQTBCLElBQUksNEJBQTRCLElBQUk7QUFDOUQsa0NBQTRCLElBQUk7QUFFaEMsbUNBQTZCLElBQUksU0FBVSxNQUFNO0FBQy9DLGVBQU8sS0FBSyxnQkFBZ0IsSUFBSSxHQUFHLElBQUk7QUFBQSxNQUN6QztBQUVBLFVBQUksYUFBYTtBQUVmLDhCQUFzQixpQkFBaUIsZUFBZTtBQUFBLFVBQ3BELGNBQWM7QUFBQSxVQUNkLEtBQUssU0FBUyxjQUFjO0FBQzFCLG1CQUFPLGlCQUFpQixJQUFJLEVBQUU7QUFBQSxVQUNoQztBQUFBLFFBQ0YsQ0FBQztBQUNELFlBQUksQ0FBQyxTQUFTO0FBQ1osd0JBQWMsaUJBQWlCLHdCQUF3Qix1QkFBdUIsRUFBRSxRQUFRLEtBQUssQ0FBQztBQUFBLFFBQ2hHO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxNQUFFLEVBQUUsUUFBUSxNQUFNLGFBQWEsTUFBTSxNQUFNLE1BQU0sUUFBUSxDQUFDLGVBQWUsTUFBTSxDQUFDLGNBQWMsR0FBRztBQUFBLE1BQy9GLFFBQVE7QUFBQSxJQUNWLENBQUM7QUFFRCxhQUFTLFdBQVcscUJBQXFCLEdBQUcsU0FBVSxNQUFNO0FBQzFELDRCQUFzQixJQUFJO0FBQUEsSUFDNUIsQ0FBQztBQUVELE1BQUUsRUFBRSxRQUFRLFFBQVEsTUFBTSxNQUFNLFFBQVEsQ0FBQyxjQUFjLEdBQUc7QUFBQSxNQUN4RCxXQUFXLFdBQVk7QUFBRSxxQkFBYTtBQUFBLE1BQU07QUFBQSxNQUM1QyxXQUFXLFdBQVk7QUFBRSxxQkFBYTtBQUFBLE1BQU87QUFBQSxJQUMvQyxDQUFDO0FBRUQsTUFBRSxFQUFFLFFBQVEsVUFBVSxNQUFNLE1BQU0sUUFBUSxDQUFDLGVBQWUsTUFBTSxDQUFDLFlBQVksR0FBRztBQUFBO0FBQUE7QUFBQSxNQUc5RSxRQUFRO0FBQUE7QUFBQTtBQUFBLE1BR1IsZ0JBQWdCO0FBQUE7QUFBQTtBQUFBLE1BR2hCLGtCQUFrQjtBQUFBO0FBQUE7QUFBQSxNQUdsQiwwQkFBMEI7QUFBQSxJQUM1QixDQUFDO0FBRUQsTUFBRSxFQUFFLFFBQVEsVUFBVSxNQUFNLE1BQU0sUUFBUSxDQUFDLGNBQWMsR0FBRztBQUFBO0FBQUE7QUFBQSxNQUcxRCxxQkFBcUI7QUFBQSxJQUN2QixDQUFDO0FBSUQsNEJBQXdCO0FBSXhCLG1CQUFlLFNBQVMsTUFBTTtBQUU5QixlQUFXLE1BQU0sSUFBSTtBQUFBO0FBQUE7OztBQ3RRckI7QUFBQSxrR0FBQUksVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxnQkFBZ0I7QUFHcEIsSUFBQUEsUUFBTyxVQUFVLGlCQUFpQixDQUFDLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDLE9BQU87QUFBQTtBQUFBOzs7QUNKOUQ7QUFBQTtBQUFBO0FBQ0EsUUFBSSxJQUFJO0FBQ1IsUUFBSSxhQUFhO0FBQ2pCLFFBQUksU0FBUztBQUNiLFFBQUksV0FBVztBQUNmLFFBQUksU0FBUztBQUNiLFFBQUkseUJBQXlCO0FBRTdCLFFBQUkseUJBQXlCLE9BQU8sMkJBQTJCO0FBQy9ELFFBQUkseUJBQXlCLE9BQU8sMkJBQTJCO0FBSS9ELE1BQUUsRUFBRSxRQUFRLFVBQVUsTUFBTSxNQUFNLFFBQVEsQ0FBQyx1QkFBdUIsR0FBRztBQUFBLE1BQ25FLE9BQU8sU0FBVSxLQUFLO0FBQ3BCLFlBQUksU0FBUyxTQUFTLEdBQUc7QUFDekIsWUFBSSxPQUFPLHdCQUF3QixNQUFNLEVBQUcsUUFBTyx1QkFBdUIsTUFBTTtBQUNoRixZQUFJLFNBQVMsV0FBVyxRQUFRLEVBQUUsTUFBTTtBQUN4QywrQkFBdUIsTUFBTSxJQUFJO0FBQ2pDLCtCQUF1QixNQUFNLElBQUk7QUFDakMsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGLENBQUM7QUFBQTtBQUFBOzs7QUN0QkQ7QUFBQTtBQUFBO0FBQ0EsUUFBSSxJQUFJO0FBQ1IsUUFBSSxTQUFTO0FBQ2IsUUFBSSxXQUFXO0FBQ2YsUUFBSSxjQUFjO0FBQ2xCLFFBQUksU0FBUztBQUNiLFFBQUkseUJBQXlCO0FBRTdCLFFBQUkseUJBQXlCLE9BQU8sMkJBQTJCO0FBSS9ELE1BQUUsRUFBRSxRQUFRLFVBQVUsTUFBTSxNQUFNLFFBQVEsQ0FBQyx1QkFBdUIsR0FBRztBQUFBLE1BQ25FLFFBQVEsU0FBUyxPQUFPLEtBQUs7QUFDM0IsWUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFHLE9BQU0sSUFBSSxVQUFVLFlBQVksR0FBRyxJQUFJLGtCQUFrQjtBQUM3RSxZQUFJLE9BQU8sd0JBQXdCLEdBQUcsRUFBRyxRQUFPLHVCQUF1QixHQUFHO0FBQUEsTUFDNUU7QUFBQSxJQUNGLENBQUM7QUFBQTtBQUFBOzs7QUNqQkQ7QUFBQSx1RkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBRWxCLFFBQUksb0JBQW9CLFNBQVM7QUFDakMsUUFBSSxRQUFRLGtCQUFrQjtBQUM5QixRQUFJLE9BQU8sa0JBQWtCO0FBRzdCLElBQUFBLFFBQU8sVUFBVSxPQUFPLFdBQVcsWUFBWSxRQUFRLFVBQVUsY0FBYyxLQUFLLEtBQUssS0FBSyxJQUFJLFdBQVk7QUFDNUcsYUFBTyxLQUFLLE1BQU0sT0FBTyxTQUFTO0FBQUEsSUFDcEM7QUFBQTtBQUFBOzs7QUNWQTtBQUFBLG1HQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGNBQWM7QUFDbEIsUUFBSSxVQUFVO0FBQ2QsUUFBSSxhQUFhO0FBQ2pCLFFBQUksVUFBVTtBQUNkLFFBQUksV0FBVztBQUVmLFFBQUksT0FBTyxZQUFZLENBQUMsRUFBRSxJQUFJO0FBRTlCLElBQUFBLFFBQU8sVUFBVSxTQUFVLFVBQVU7QUFDbkMsVUFBSSxXQUFXLFFBQVEsRUFBRyxRQUFPO0FBQ2pDLFVBQUksQ0FBQyxRQUFRLFFBQVEsRUFBRztBQUN4QixVQUFJLFlBQVksU0FBUztBQUN6QixVQUFJQyxRQUFPLENBQUM7QUFDWixlQUFTLElBQUksR0FBRyxJQUFJLFdBQVcsS0FBSztBQUNsQyxZQUFJLFVBQVUsU0FBUyxDQUFDO0FBQ3hCLFlBQUksT0FBTyxXQUFXLFNBQVUsTUFBS0EsT0FBTSxPQUFPO0FBQUEsaUJBQ3pDLE9BQU8sV0FBVyxZQUFZLFFBQVEsT0FBTyxNQUFNLFlBQVksUUFBUSxPQUFPLE1BQU0sU0FBVSxNQUFLQSxPQUFNLFNBQVMsT0FBTyxDQUFDO0FBQUEsTUFDckk7QUFDQSxVQUFJLGFBQWFBLE1BQUs7QUFDdEIsVUFBSSxPQUFPO0FBQ1gsYUFBTyxTQUFVLEtBQUssT0FBTztBQUMzQixZQUFJLE1BQU07QUFDUixpQkFBTztBQUNQLGlCQUFPO0FBQUEsUUFDVDtBQUNBLFlBQUksUUFBUSxJQUFJLEVBQUcsUUFBTztBQUMxQixpQkFBUyxJQUFJLEdBQUcsSUFBSSxZQUFZLElBQUssS0FBSUEsTUFBSyxDQUFDLE1BQU0sSUFBSyxRQUFPO0FBQUEsTUFDbkU7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDN0JBO0FBQUE7QUFBQTtBQUNBLFFBQUksSUFBSTtBQUNSLFFBQUksYUFBYTtBQUNqQixRQUFJLFFBQVE7QUFDWixRQUFJLE9BQU87QUFDWCxRQUFJLGNBQWM7QUFDbEIsUUFBSSxRQUFRO0FBQ1osUUFBSSxhQUFhO0FBQ2pCLFFBQUksV0FBVztBQUNmLFFBQUksYUFBYTtBQUNqQixRQUFJLHNCQUFzQjtBQUMxQixRQUFJLGdCQUFnQjtBQUVwQixRQUFJLFVBQVU7QUFDZCxRQUFJLGFBQWEsV0FBVyxRQUFRLFdBQVc7QUFDL0MsUUFBSSxPQUFPLFlBQVksSUFBSSxJQUFJO0FBQy9CLFFBQUksU0FBUyxZQUFZLEdBQUcsTUFBTTtBQUNsQyxRQUFJLGFBQWEsWUFBWSxHQUFHLFVBQVU7QUFDMUMsUUFBSSxVQUFVLFlBQVksR0FBRyxPQUFPO0FBQ3BDLFFBQUksaUJBQWlCLFlBQVksR0FBSSxRQUFRO0FBRTdDLFFBQUksU0FBUztBQUNiLFFBQUksTUFBTTtBQUNWLFFBQUksS0FBSztBQUVULFFBQUksMkJBQTJCLENBQUMsaUJBQWlCLE1BQU0sV0FBWTtBQUNqRSxVQUFJLFNBQVMsV0FBVyxRQUFRLEVBQUUscUJBQXFCO0FBRXZELGFBQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLFlBRTNCLFdBQVcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLFFBRTlCLFdBQVcsT0FBTyxNQUFNLENBQUMsTUFBTTtBQUFBLElBQ3RDLENBQUM7QUFHRCxRQUFJLHFCQUFxQixNQUFNLFdBQVk7QUFDekMsYUFBTyxXQUFXLGNBQWMsTUFBTSxzQkFDakMsV0FBVyxRQUFRLE1BQU07QUFBQSxJQUNoQyxDQUFDO0FBRUQsUUFBSSwwQkFBMEIsU0FBVSxJQUFJLFVBQVU7QUFDcEQsVUFBSSxPQUFPLFdBQVcsU0FBUztBQUMvQixVQUFJLFlBQVksb0JBQW9CLFFBQVE7QUFDNUMsVUFBSSxDQUFDLFdBQVcsU0FBUyxNQUFNLE9BQU8sVUFBYSxTQUFTLEVBQUUsR0FBSTtBQUNsRSxXQUFLLENBQUMsSUFBSSxTQUFVLEtBQUssT0FBTztBQUU5QixZQUFJLFdBQVcsU0FBUyxFQUFHLFNBQVEsS0FBSyxXQUFXLE1BQU0sUUFBUSxHQUFHLEdBQUcsS0FBSztBQUM1RSxZQUFJLENBQUMsU0FBUyxLQUFLLEVBQUcsUUFBTztBQUFBLE1BQy9CO0FBQ0EsYUFBTyxNQUFNLFlBQVksTUFBTSxJQUFJO0FBQUEsSUFDckM7QUFFQSxRQUFJLGVBQWUsU0FBVSxPQUFPLFFBQVEsUUFBUTtBQUNsRCxVQUFJLE9BQU8sT0FBTyxRQUFRLFNBQVMsQ0FBQztBQUNwQyxVQUFJLE9BQU8sT0FBTyxRQUFRLFNBQVMsQ0FBQztBQUNwQyxVQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxLQUFPLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFJO0FBQ2xGLGVBQU8sUUFBUSxlQUFlLFdBQVcsT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUFBLE1BQ3hEO0FBQUUsYUFBTztBQUFBLElBQ1g7QUFFQSxRQUFJLFlBQVk7QUFHZCxRQUFFLEVBQUUsUUFBUSxRQUFRLE1BQU0sTUFBTSxPQUFPLEdBQUcsUUFBUSw0QkFBNEIsbUJBQW1CLEdBQUc7QUFBQTtBQUFBLFFBRWxHLFdBQVcsU0FBUyxVQUFVLElBQUksVUFBVSxPQUFPO0FBQ2pELGNBQUksT0FBTyxXQUFXLFNBQVM7QUFDL0IsY0FBSSxTQUFTLE1BQU0sMkJBQTJCLDBCQUEwQixZQUFZLE1BQU0sSUFBSTtBQUM5RixpQkFBTyxzQkFBc0IsT0FBTyxVQUFVLFdBQVcsUUFBUSxRQUFRLFFBQVEsWUFBWSxJQUFJO0FBQUEsUUFDbkc7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBQUE7QUFBQTs7O0FDeEVBO0FBQUE7QUFBQTtBQUNBLFFBQUksSUFBSTtBQUNSLFFBQUksZ0JBQWdCO0FBQ3BCLFFBQUksUUFBUTtBQUNaLFFBQUksOEJBQThCO0FBQ2xDLFFBQUksV0FBVztBQUlmLFFBQUksU0FBUyxDQUFDLGlCQUFpQixNQUFNLFdBQVk7QUFBRSxrQ0FBNEIsRUFBRSxDQUFDO0FBQUEsSUFBRyxDQUFDO0FBSXRGLE1BQUUsRUFBRSxRQUFRLFVBQVUsTUFBTSxNQUFNLFFBQVEsT0FBTyxHQUFHO0FBQUEsTUFDbEQsdUJBQXVCLFNBQVMsc0JBQXNCLElBQUk7QUFDeEQsWUFBSSx5QkFBeUIsNEJBQTRCO0FBQ3pELGVBQU8seUJBQXlCLHVCQUF1QixTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFBQSxNQUMxRTtBQUFBLElBQ0YsQ0FBQztBQUFBO0FBQUE7OztBQ2xCRDtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTs7O0FDTkE7QUFBQTtBQUFBO0FBR0EsUUFBSSxJQUFJO0FBQ1IsUUFBSSxjQUFjO0FBQ2xCLFFBQUlDLGNBQWE7QUFDakIsUUFBSSxjQUFjO0FBQ2xCLFFBQUksU0FBUztBQUNiLFFBQUksYUFBYTtBQUNqQixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLFdBQVc7QUFDZixRQUFJLHdCQUF3QjtBQUM1QixRQUFJLDRCQUE0QjtBQUVoQyxRQUFJLGVBQWVBLFlBQVc7QUFDOUIsUUFBSSxrQkFBa0IsZ0JBQWdCLGFBQWE7QUFFbkQsUUFBSSxlQUFlLFdBQVcsWUFBWSxNQUFNLEVBQUUsaUJBQWlCO0FBQUEsSUFFakUsYUFBYSxFQUFFLGdCQUFnQixTQUM5QjtBQUNHLG9DQUE4QixDQUFDO0FBRS9CLHNCQUFnQixTQUFTQyxVQUFTO0FBQ3BDLFlBQUksY0FBYyxVQUFVLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxTQUFZLFNBQVksU0FBUyxVQUFVLENBQUMsQ0FBQztBQUN4RyxZQUFJLFNBQVMsY0FBYyxpQkFBaUIsSUFBSSxJQUU1QyxJQUFJLGFBQWEsV0FBVyxJQUU1QixnQkFBZ0IsU0FBWSxhQUFhLElBQUksYUFBYSxXQUFXO0FBQ3pFLFlBQUksZ0JBQWdCLEdBQUksNkJBQTRCLE1BQU0sSUFBSTtBQUM5RCxlQUFPO0FBQUEsTUFDVDtBQUVBLGdDQUEwQixlQUFlLFlBQVk7QUFDckQsb0JBQWMsWUFBWTtBQUMxQixzQkFBZ0IsY0FBYztBQUUxQixzQkFBZ0IsT0FBTyxhQUFhLHVCQUF1QixDQUFDLE1BQU07QUFDbEUsd0JBQWtCLFlBQVksZ0JBQWdCLE9BQU87QUFDckQsZ0NBQTBCLFlBQVksZ0JBQWdCLFFBQVE7QUFDOUQsZUFBUztBQUNULGdCQUFVLFlBQVksR0FBRyxPQUFPO0FBQ2hDLG9CQUFjLFlBQVksR0FBRyxLQUFLO0FBRXRDLDRCQUFzQixpQkFBaUIsZUFBZTtBQUFBLFFBQ3BELGNBQWM7QUFBQSxRQUNkLEtBQUssU0FBUyxjQUFjO0FBQzFCLGNBQUksU0FBUyxnQkFBZ0IsSUFBSTtBQUNqQyxjQUFJLE9BQU8sNkJBQTZCLE1BQU0sRUFBRyxRQUFPO0FBQ3hELGNBQUksU0FBUyx3QkFBd0IsTUFBTTtBQUMzQyxjQUFJLE9BQU8sZ0JBQWdCLFlBQVksUUFBUSxHQUFHLEVBQUUsSUFBSSxRQUFRLFFBQVEsUUFBUSxJQUFJO0FBQ3BGLGlCQUFPLFNBQVMsS0FBSyxTQUFZO0FBQUEsUUFDbkM7QUFBQSxNQUNGLENBQUM7QUFFRCxRQUFFLEVBQUUsUUFBUSxNQUFNLGFBQWEsTUFBTSxRQUFRLEtBQUssR0FBRztBQUFBLFFBQ25ELFFBQVE7QUFBQSxNQUNWLENBQUM7QUFBQSxJQUNIO0FBdENNO0FBRUE7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBOzs7QUMzQ047QUFBQTtBQUFBO0FBQ0EsUUFBSSx3QkFBd0I7QUFDNUIsUUFBSSwwQkFBMEI7QUFJOUIsMEJBQXNCLGFBQWE7QUFJbkMsNEJBQXdCO0FBQUE7QUFBQTs7O0FDVnhCO0FBQUEseUZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLFVBQVU7QUFFZCxRQUFJLGFBQWE7QUFFakIsUUFBSSwyQkFBMkIsT0FBTztBQUd0QyxRQUFJLG9DQUFvQyxlQUFlLENBQUMsV0FBWTtBQUVsRSxVQUFJLFNBQVMsT0FBVyxRQUFPO0FBQy9CLFVBQUk7QUFFRixlQUFPLGVBQWUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxVQUFVLE1BQU0sQ0FBQyxFQUFFLFNBQVM7QUFBQSxNQUNwRSxTQUFTLE9BQU87QUFDZCxlQUFPLGlCQUFpQjtBQUFBLE1BQzFCO0FBQUEsSUFDRixFQUFFO0FBRUYsSUFBQUEsUUFBTyxVQUFVLG9DQUFvQyxTQUFVLEdBQUcsUUFBUTtBQUN4RSxVQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMseUJBQXlCLEdBQUcsUUFBUSxFQUFFLFVBQVU7QUFDakUsY0FBTSxJQUFJLFdBQVcsOEJBQThCO0FBQUEsTUFDckQ7QUFBRSxhQUFPLEVBQUUsU0FBUztBQUFBLElBQ3RCLElBQUksU0FBVSxHQUFHLFFBQVE7QUFDdkIsYUFBTyxFQUFFLFNBQVM7QUFBQSxJQUNwQjtBQUFBO0FBQUE7OztBQzFCQTtBQUFBLHFHQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLGFBQWE7QUFDakIsUUFBSSxtQkFBbUI7QUFFdkIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsSUFBSTtBQUM3QixVQUFJLEtBQUssaUJBQWtCLE9BQU0sV0FBVyxnQ0FBZ0M7QUFDNUUsYUFBTztBQUFBLElBQ1Q7QUFBQTtBQUFBOzs7QUNQQTtBQUFBO0FBQUE7QUFDQSxRQUFJLElBQUk7QUFDUixRQUFJLFdBQVc7QUFDZixRQUFJLG9CQUFvQjtBQUN4QixRQUFJLGlCQUFpQjtBQUNyQixRQUFJLDJCQUEyQjtBQUMvQixRQUFJLFFBQVE7QUFFWixRQUFJLHNCQUFzQixNQUFNLFdBQVk7QUFDMUMsYUFBTyxDQUFDLEVBQUUsS0FBSyxLQUFLLEVBQUUsUUFBUSxXQUFZLEdBQUcsQ0FBQyxNQUFNO0FBQUEsSUFDdEQsQ0FBQztBQUlELFFBQUksaUNBQWlDLFdBQVk7QUFDL0MsVUFBSTtBQUVGLGVBQU8sZUFBZSxDQUFDLEdBQUcsVUFBVSxFQUFFLFVBQVUsTUFBTSxDQUFDLEVBQUUsS0FBSztBQUFBLE1BQ2hFLFNBQVMsT0FBTztBQUNkLGVBQU8saUJBQWlCO0FBQUEsTUFDMUI7QUFBQSxJQUNGO0FBRUEsUUFBSSxTQUFTLHVCQUF1QixDQUFDLCtCQUErQjtBQUlwRSxNQUFFLEVBQUUsUUFBUSxTQUFTLE9BQU8sTUFBTSxPQUFPLEdBQUcsUUFBUSxPQUFPLEdBQUc7QUFBQTtBQUFBLE1BRTVELE1BQU0sU0FBUyxLQUFLLE1BQU07QUFDeEIsWUFBSSxJQUFJLFNBQVMsSUFBSTtBQUNyQixZQUFJLE1BQU0sa0JBQWtCLENBQUM7QUFDN0IsWUFBSSxXQUFXLFVBQVU7QUFDekIsaUNBQXlCLE1BQU0sUUFBUTtBQUN2QyxpQkFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLEtBQUs7QUFDakMsWUFBRSxHQUFHLElBQUksVUFBVSxDQUFDO0FBQ3BCO0FBQUEsUUFDRjtBQUNBLHVCQUFlLEdBQUcsR0FBRztBQUNyQixlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0YsQ0FBQztBQUFBO0FBQUE7OztBQ3pDRDtBQUFBLDBGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFdBQVc7QUFDZixRQUFJLHNCQUFzQjtBQUUxQixRQUFJLGFBQWE7QUFJakIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsTUFBTTtBQUMvQixlQUFTLElBQUk7QUFDYixVQUFJLFNBQVMsWUFBWSxTQUFTLFVBQVcsUUFBTztBQUFBLGVBQzNDLFNBQVMsU0FBVSxPQUFNLElBQUksV0FBVyxnQkFBZ0I7QUFDakUsYUFBTyxvQkFBb0IsTUFBTSxJQUFJO0FBQUEsSUFDdkM7QUFBQTtBQUFBOzs7QUNiQTtBQUFBO0FBQUE7QUFDQSxRQUFJLFNBQVM7QUFDYixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLGtCQUFrQjtBQUN0QixRQUFJLGtCQUFrQjtBQUV0QixRQUFJLGVBQWUsZ0JBQWdCLGFBQWE7QUFDaEQsUUFBSSxnQkFBZ0IsS0FBSztBQUl6QixRQUFJLENBQUMsT0FBTyxlQUFlLFlBQVksR0FBRztBQUN4QyxvQkFBYyxlQUFlLGNBQWMsZUFBZTtBQUFBLElBQzVEO0FBQUE7QUFBQTs7O0FDYkE7QUFBQSx1R0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxjQUFjO0FBQ2xCLFFBQUksWUFBWTtBQUVoQixJQUFBQSxRQUFPLFVBQVUsU0FBVSxRQUFRLEtBQUssUUFBUTtBQUM5QyxVQUFJO0FBRUYsZUFBTyxZQUFZLFVBQVUsT0FBTyx5QkFBeUIsUUFBUSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFBQSxNQUNwRixTQUFTLE9BQU87QUFBQSxNQUFjO0FBQUEsSUFDaEM7QUFBQTtBQUFBOzs7QUNUQTtBQUFBLDhGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJQyxZQUFXO0FBRWYsSUFBQUQsUUFBTyxVQUFVLFNBQVUsVUFBVTtBQUNuQyxhQUFPQyxVQUFTLFFBQVEsS0FBSyxhQUFhO0FBQUEsSUFDNUM7QUFBQTtBQUFBOzs7QUNMQTtBQUFBLDZGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLHNCQUFzQjtBQUUxQixRQUFJLFVBQVU7QUFDZCxRQUFJLGFBQWE7QUFFakIsSUFBQUEsUUFBTyxVQUFVLFNBQVUsVUFBVTtBQUNuQyxVQUFJLG9CQUFvQixRQUFRLEVBQUcsUUFBTztBQUMxQyxZQUFNLElBQUksV0FBVyxlQUFlLFFBQVEsUUFBUSxJQUFJLGlCQUFpQjtBQUFBLElBQzNFO0FBQUE7QUFBQTs7O0FDVEE7QUFBQSxnR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsUUFBSSxzQkFBc0I7QUFDMUIsUUFBSUMsWUFBVztBQUNmLFFBQUkseUJBQXlCO0FBQzdCLFFBQUkscUJBQXFCO0FBTXpCLElBQUFELFFBQU8sVUFBVSxPQUFPLG1CQUFtQixlQUFlLENBQUMsSUFBSSxXQUFZO0FBQ3pFLFVBQUksaUJBQWlCO0FBQ3JCLFVBQUksT0FBTyxDQUFDO0FBQ1osVUFBSTtBQUNKLFVBQUk7QUFDRixpQkFBUyxvQkFBb0IsT0FBTyxXQUFXLGFBQWEsS0FBSztBQUNqRSxlQUFPLE1BQU0sQ0FBQyxDQUFDO0FBQ2YseUJBQWlCLGdCQUFnQjtBQUFBLE1BQ25DLFNBQVMsT0FBTztBQUFBLE1BQWM7QUFDOUIsYUFBTyxTQUFTLGVBQWUsR0FBRyxPQUFPO0FBQ3ZDLCtCQUF1QixDQUFDO0FBQ3hCLDJCQUFtQixLQUFLO0FBQ3hCLFlBQUksQ0FBQ0MsVUFBUyxDQUFDLEVBQUcsUUFBTztBQUN6QixZQUFJLGVBQWdCLFFBQU8sR0FBRyxLQUFLO0FBQUEsWUFDOUIsR0FBRSxZQUFZO0FBQ25CLGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRixFQUFFLElBQUk7QUFBQTtBQUFBOzs7QUM1Qk47QUFBQSw0RkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBQ0EsUUFBSSxhQUFhO0FBQ2pCLFFBQUlDLFlBQVc7QUFDZixRQUFJLGlCQUFpQjtBQUdyQixJQUFBRCxRQUFPLFVBQVUsU0FBVSxPQUFPLE9BQU8sU0FBUztBQUNoRCxVQUFJLFdBQVc7QUFDZjtBQUFBO0FBQUEsUUFFRTtBQUFBLFFBRUEsV0FBVyxZQUFZLE1BQU0sV0FBVyxLQUN4QyxjQUFjLFdBQ2RDLFVBQVMscUJBQXFCLFVBQVUsU0FBUyxLQUNqRCx1QkFBdUIsUUFBUTtBQUFBLE9BQy9CLGdCQUFlLE9BQU8sa0JBQWtCO0FBQzFDLGFBQU87QUFBQSxJQUNUO0FBQUE7QUFBQTs7O0FDbEJBO0FBQUEsMEZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUlsQixJQUFBQSxRQUFPLFVBQVUsWUFBWSxHQUFJLE9BQU87QUFBQTtBQUFBOzs7QUNMeEM7QUFBQSxvRkFBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDRmpCO0FBQUEsb0ZBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUNBLFFBQUksY0FBYztBQUNsQixRQUFJLHlCQUF5QjtBQUM3QixRQUFJLFdBQVc7QUFDZixRQUFJLGNBQWM7QUFFbEIsUUFBSSxVQUFVLFlBQVksR0FBRyxPQUFPO0FBQ3BDLFFBQUksUUFBUSxPQUFPLE9BQU8sY0FBYyxJQUFJO0FBQzVDLFFBQUksUUFBUSxPQUFPLFVBQVUsY0FBYyxRQUFRLGNBQWMsS0FBSztBQUd0RSxRQUFJLGVBQWUsU0FBVSxNQUFNO0FBQ2pDLGFBQU8sU0FBVSxPQUFPO0FBQ3RCLFlBQUksU0FBUyxTQUFTLHVCQUF1QixLQUFLLENBQUM7QUFDbkQsWUFBSSxPQUFPLEVBQUcsVUFBUyxRQUFRLFFBQVEsT0FBTyxFQUFFO0FBQ2hELFlBQUksT0FBTyxFQUFHLFVBQVMsUUFBUSxRQUFRLE9BQU8sSUFBSTtBQUNsRCxlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFFQSxJQUFBQSxRQUFPLFVBQVU7QUFBQTtBQUFBO0FBQUEsTUFHZixPQUFPLGFBQWEsQ0FBQztBQUFBO0FBQUE7QUFBQSxNQUdyQixLQUFLLGFBQWEsQ0FBQztBQUFBO0FBQUE7QUFBQSxNQUduQixNQUFNLGFBQWEsQ0FBQztBQUFBLElBQ3RCO0FBQUE7QUFBQTs7O0FDOUJBO0FBQUE7QUFBQTtBQUNBLFFBQUksSUFBSTtBQUNSLFFBQUksVUFBVTtBQUNkLFFBQUksY0FBYztBQUNsQixRQUFJQyxjQUFhO0FBQ2pCLFFBQUksT0FBTztBQUNYLFFBQUksY0FBYztBQUNsQixRQUFJLFdBQVc7QUFDZixRQUFJLFNBQVM7QUFDYixRQUFJLG9CQUFvQjtBQUN4QixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLFdBQVc7QUFDZixRQUFJLGNBQWM7QUFDbEIsUUFBSSxRQUFRO0FBQ1osUUFBSSxzQkFBc0Isd0NBQXNEO0FBQ2hGLFFBQUksMkJBQTJCLDZDQUEyRDtBQUMxRixRQUFJLGlCQUFpQixpQ0FBK0M7QUFDcEUsUUFBSSxrQkFBa0I7QUFDdEIsUUFBSSxPQUFPLHNCQUFvQztBQUUvQyxRQUFJLFNBQVM7QUFDYixRQUFJLGVBQWVBLFlBQVcsTUFBTTtBQUNwQyxRQUFJLHNCQUFzQixLQUFLLE1BQU07QUFDckMsUUFBSSxrQkFBa0IsYUFBYTtBQUNuQyxRQUFJQyxhQUFZRCxZQUFXO0FBQzNCLFFBQUksY0FBYyxZQUFZLEdBQUcsS0FBSztBQUN0QyxRQUFJLGFBQWEsWUFBWSxHQUFHLFVBQVU7QUFJMUMsUUFBSSxZQUFZLFNBQVUsT0FBTztBQUMvQixVQUFJLFlBQVksWUFBWSxPQUFPLFFBQVE7QUFDM0MsYUFBTyxPQUFPLGFBQWEsV0FBVyxZQUFZLFNBQVMsU0FBUztBQUFBLElBQ3RFO0FBSUEsUUFBSSxXQUFXLFNBQVUsVUFBVTtBQUNqQyxVQUFJLEtBQUssWUFBWSxVQUFVLFFBQVE7QUFDdkMsVUFBSSxPQUFPLE9BQU8sT0FBTyxTQUFTLFFBQVEsUUFBUSxPQUFPO0FBQ3pELFVBQUksU0FBUyxFQUFFLEVBQUcsT0FBTSxJQUFJQyxXQUFVLDJDQUEyQztBQUNqRixVQUFJLE9BQU8sTUFBTSxZQUFZLEdBQUcsU0FBUyxHQUFHO0FBQzFDLGFBQUssS0FBSyxFQUFFO0FBQ1osZ0JBQVEsV0FBVyxJQUFJLENBQUM7QUFDeEIsWUFBSSxVQUFVLE1BQU0sVUFBVSxJQUFJO0FBQ2hDLGtCQUFRLFdBQVcsSUFBSSxDQUFDO0FBQ3hCLGNBQUksVUFBVSxNQUFNLFVBQVUsSUFBSyxRQUFPO0FBQUEsUUFDNUMsV0FBVyxVQUFVLElBQUk7QUFDdkIsa0JBQVEsV0FBVyxJQUFJLENBQUMsR0FBRztBQUFBO0FBQUEsWUFFekIsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUNILHNCQUFRO0FBQ1Isd0JBQVU7QUFDVjtBQUFBO0FBQUEsWUFFRixLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQ0gsc0JBQVE7QUFDUix3QkFBVTtBQUNWO0FBQUEsWUFDRjtBQUNFLHFCQUFPLENBQUM7QUFBQSxVQUNaO0FBQ0EsbUJBQVMsWUFBWSxJQUFJLENBQUM7QUFDMUIsbUJBQVMsT0FBTztBQUNoQixlQUFLLFFBQVEsR0FBRyxRQUFRLFFBQVEsU0FBUztBQUN2QyxtQkFBTyxXQUFXLFFBQVEsS0FBSztBQUcvQixnQkFBSSxPQUFPLE1BQU0sT0FBTyxRQUFTLFFBQU87QUFBQSxVQUMxQztBQUFFLGlCQUFPLFNBQVMsUUFBUSxLQUFLO0FBQUEsUUFDakM7QUFBQSxNQUNGO0FBQUUsYUFBTyxDQUFDO0FBQUEsSUFDWjtBQUVBLFFBQUksU0FBUyxTQUFTLFFBQVEsQ0FBQyxhQUFhLE1BQU0sS0FBSyxDQUFDLGFBQWEsS0FBSyxLQUFLLGFBQWEsTUFBTSxDQUFDO0FBRW5HLFFBQUksZ0JBQWdCLFNBQVUsT0FBTztBQUVuQyxhQUFPLGNBQWMsaUJBQWlCLEtBQUssS0FBSyxNQUFNLFdBQVk7QUFBRSx3QkFBZ0IsS0FBSztBQUFBLE1BQUcsQ0FBQztBQUFBLElBQy9GO0FBSUEsUUFBSSxnQkFBZ0IsU0FBU0MsUUFBTyxPQUFPO0FBQ3pDLFVBQUksSUFBSSxVQUFVLFNBQVMsSUFBSSxJQUFJLGFBQWEsVUFBVSxLQUFLLENBQUM7QUFDaEUsYUFBTyxjQUFjLElBQUksSUFBSSxrQkFBa0IsT0FBTyxDQUFDLEdBQUcsTUFBTSxhQUFhLElBQUk7QUFBQSxJQUNuRjtBQUVBLGtCQUFjLFlBQVk7QUFDMUIsUUFBSSxVQUFVLENBQUMsUUFBUyxpQkFBZ0IsY0FBYztBQUV0RCxNQUFFLEVBQUUsUUFBUSxNQUFNLGFBQWEsTUFBTSxNQUFNLE1BQU0sUUFBUSxPQUFPLEdBQUc7QUFBQSxNQUNqRSxRQUFRO0FBQUEsSUFDVixDQUFDO0FBR0QsUUFBSSw0QkFBNEIsU0FBVSxRQUFRLFFBQVE7QUFDeEQsZUFBU0MsUUFBTyxjQUFjLG9CQUFvQixNQUFNO0FBQUE7QUFBQSxRQUV0RCxvTEFLQSxNQUFNLEdBQUc7QUFBQSxTQUFHLElBQUksR0FBRyxLQUFLQSxNQUFLLFNBQVMsR0FBRyxLQUFLO0FBQzlDLFlBQUksT0FBTyxRQUFRLE1BQU1BLE1BQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLFFBQVEsR0FBRyxHQUFHO0FBQ3pELHlCQUFlLFFBQVEsS0FBSyx5QkFBeUIsUUFBUSxHQUFHLENBQUM7QUFBQSxRQUNuRTtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBRUEsUUFBSSxXQUFXLG9CQUFxQiwyQkFBMEIsS0FBSyxNQUFNLEdBQUcsbUJBQW1CO0FBQy9GLFFBQUksVUFBVSxRQUFTLDJCQUEwQixLQUFLLE1BQU0sR0FBRyxZQUFZO0FBQUE7QUFBQTs7O0FDbEgzRTtBQUFBLHFGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLFdBQVc7QUFJZixJQUFBQSxRQUFPLFVBQVUsV0FBWTtBQUMzQixVQUFJLE9BQU8sU0FBUyxJQUFJO0FBQ3hCLFVBQUksU0FBUztBQUNiLFVBQUksS0FBSyxXQUFZLFdBQVU7QUFDL0IsVUFBSSxLQUFLLE9BQVEsV0FBVTtBQUMzQixVQUFJLEtBQUssV0FBWSxXQUFVO0FBQy9CLFVBQUksS0FBSyxVQUFXLFdBQVU7QUFDOUIsVUFBSSxLQUFLLE9BQVEsV0FBVTtBQUMzQixVQUFJLEtBQUssUUFBUyxXQUFVO0FBQzVCLFVBQUksS0FBSyxZQUFhLFdBQVU7QUFDaEMsVUFBSSxLQUFLLE9BQVEsV0FBVTtBQUMzQixhQUFPO0FBQUEsSUFDVDtBQUFBO0FBQUE7OztBQ2pCQTtBQUFBLHlGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFDQSxRQUFJLE9BQU87QUFDWCxRQUFJLFNBQVM7QUFDYixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLGNBQWM7QUFFbEIsUUFBSSxrQkFBa0IsT0FBTztBQUU3QixJQUFBQSxRQUFPLFVBQVUsU0FBVSxHQUFHO0FBQzVCLFVBQUksUUFBUSxFQUFFO0FBQ2QsYUFBTyxVQUFVLFVBQWEsRUFBRSxXQUFXLG9CQUFvQixDQUFDLE9BQU8sR0FBRyxPQUFPLEtBQUssY0FBYyxpQkFBaUIsQ0FBQyxJQUNsSCxLQUFLLGFBQWEsQ0FBQyxJQUFJO0FBQUEsSUFDN0I7QUFBQTtBQUFBOzs7QUNaQTtBQUFBO0FBQUE7QUFDQSxRQUFJLHVCQUF1Qix3QkFBc0M7QUFDakUsUUFBSSxnQkFBZ0I7QUFDcEIsUUFBSSxXQUFXO0FBQ2YsUUFBSSxZQUFZO0FBQ2hCLFFBQUksUUFBUTtBQUNaLFFBQUksaUJBQWlCO0FBRXJCLFFBQUksWUFBWTtBQUNoQixRQUFJLGtCQUFrQixPQUFPO0FBQzdCLFFBQUksaUJBQWlCLGdCQUFnQixTQUFTO0FBRTlDLFFBQUksY0FBYyxNQUFNLFdBQVk7QUFBRSxhQUFPLGVBQWUsS0FBSyxFQUFFLFFBQVEsS0FBSyxPQUFPLElBQUksQ0FBQyxNQUFNO0FBQUEsSUFBUSxDQUFDO0FBRTNHLFFBQUksaUJBQWlCLHdCQUF3QixlQUFlLFNBQVM7QUFJckUsUUFBSSxlQUFlLGdCQUFnQjtBQUNqQyxvQkFBYyxpQkFBaUIsV0FBVyxTQUFTLFdBQVc7QUFDNUQsWUFBSSxJQUFJLFNBQVMsSUFBSTtBQUNyQixZQUFJLFVBQVUsVUFBVSxFQUFFLE1BQU07QUFDaEMsWUFBSSxRQUFRLFVBQVUsZUFBZSxDQUFDLENBQUM7QUFDdkMsZUFBTyxNQUFNLFVBQVUsTUFBTTtBQUFBLE1BQy9CLEdBQUcsRUFBRSxRQUFRLEtBQUssQ0FBQztBQUFBLElBQ3JCO0FBQUE7QUFBQTs7O0FDekJBO0FBQUE7QUFBQSxLQUFDLFdBQVU7QUFBQyxlQUFTLElBQUc7QUFBQyxpQkFBUyxJQUFHO0FBQUMsaUJBQU87QUFBQSxRQUFJO0FBQUMsaUJBQVMsRUFBRSxHQUFFO0FBQUMsaUJBQU8sSUFBRSxhQUFXLE9BQU8sS0FBRyxlQUFhLE9BQU8sSUFBRTtBQUFBLFFBQUU7QUFBQyxpQkFBUyxFQUFFLEdBQUU7QUFBQyxjQUFHLFNBQU8sS0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU0sSUFBSSxVQUFVLHFEQUFtRCxDQUFDO0FBQUEsUUFBRTtBQUFDLFlBQUksSUFBRSxNQUFLLElBQUUsUUFBTyxJQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVEsRUFBRSxFQUFDLFdBQVUsS0FBSSxhQUFZLElBQUcsSUFBRSxFQUFFLFdBQVMsSUFBRSxTQUFTLEdBQUU7QUFBQyxZQUFFLENBQUM7QUFBRSxpQkFBTSxFQUFDLFdBQVUsRUFBQztBQUFBLFFBQUMsSUFBRSxTQUFTLEdBQUU7QUFBQyxtQkFBUyxJQUFHO0FBQUEsVUFBQztBQUFDLFlBQUUsQ0FBQztBQUFFLGNBQUcsU0FBTyxFQUFFLE9BQU0sSUFBSSxZQUFZLHdFQUF3RTtBQUFFLFlBQUUsWUFBVTtBQUFFLGlCQUFPLElBQUk7QUFBQSxRQUFDLElBQy9mLElBQUUsRUFBRSxtQkFBaUIsQ0FBQyxFQUFFLGNBQVksTUFBTSxZQUFVLFNBQVMsR0FBRTtBQUFDLGNBQUUsRUFBRTtBQUFVLGlCQUFPLEVBQUUsQ0FBQyxJQUFFLElBQUU7QUFBQSxRQUFJLElBQUU7QUFBRyxZQUFJLElBQUUsU0FBUyxHQUFFLEdBQUU7QUFBQyxtQkFBUyxJQUFHO0FBQUEsVUFBQztBQUFDLGNBQUcsWUFBVSxRQUFNLGdCQUFnQixJQUFFLEtBQUssY0FBWSxRQUFRLE9BQU0sSUFBSSxVQUFVLGtDQUFrQztBQUFFLGNBQUcsQ0FBQyxFQUFFLENBQUMsS0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU0sSUFBSSxVQUFVLDREQUE0RDtBQUFFLGNBQUUsV0FBVTtBQUFDLGdCQUFFO0FBQUssZ0JBQUUsU0FBUyxHQUFFO0FBQUMsb0JBQU0sSUFBSSxVQUFVLHFCQUFtQixJQUFFLG9DQUFvQztBQUFBLFlBQUU7QUFBQSxVQUFDO0FBQUUscUJBQVcsV0FBVTtBQUFDLGdCQUFFO0FBQUEsVUFBSSxHQUFFLENBQUM7QUFBRSxjQUFJLElBQ3hmO0FBQUUsY0FBRSxFQUFDLEtBQUksTUFBSyxLQUFJLE1BQUssT0FBTSxNQUFLLFdBQVUsS0FBSTtBQUFFLG1CQUFRQyxNQUFLLEdBQUU7QUFBQyxnQkFBRyxFQUFFQSxNQUFLLEdBQUcsT0FBTSxJQUFJLFVBQVUsMkNBQXlDQSxLQUFFLEdBQUc7QUFBRSxjQUFFQSxFQUFDLElBQUUsRUFBRUEsRUFBQztBQUFBLFVBQUM7QUFBQyx5QkFBYSxPQUFPLE1BQUksRUFBRSxRQUFNLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFBRyxjQUFFLEVBQUUsQ0FBQztBQUFFLGNBQUksSUFBRSxPQUFHLElBQUU7QUFBRyxjQUFHLGVBQWEsT0FBTyxHQUFFO0FBQUMsZ0JBQUksSUFBRSxXQUFVO0FBQUMsa0JBQUksSUFBRSxRQUFNLEtBQUssZ0JBQWMsR0FBRSxJQUFFLE1BQU0sVUFBVSxNQUFNLEtBQUssU0FBUztBQUFFLGdCQUFFLElBQUUsY0FBWSxPQUFPO0FBQUUscUJBQU8sS0FBRyxFQUFFLFlBQVUsRUFBRSxVQUFVLEtBQUssTUFBSyxHQUFFLENBQUMsSUFBRSxDQUFDLEtBQUcsRUFBRSxRQUFNLEVBQUUsTUFBTSxHQUFFLE1BQUssQ0FBQyxJQUFFLEtBQUcsRUFBRSxRQUFRLENBQUMsR0FBRSxLQUFLLEVBQUUsS0FBSyxNQUFNLEdBQUUsQ0FBQyxRQUFJLEVBQUU7QUFBQSxnQkFBTTtBQUFBLGdCQUNoZjtBQUFBLGNBQUM7QUFBQSxZQUFDO0FBQUUsZ0JBQUU7QUFBQSxVQUFFLE1BQU0sY0FBYSxTQUFPLElBQUUsQ0FBQyxHQUFFLElBQUUsUUFBSSxJQUFFLEtBQUcsU0FBTyxJQUFFLEVBQUUsQ0FBQyxJQUFFLENBQUM7QUFBRSxjQUFJLElBQUUsRUFBRSxNQUFJLFNBQVMsR0FBRTtBQUFDLGNBQUUsS0FBSztBQUFFLG1CQUFPLEVBQUUsSUFBSSxNQUFLLEdBQUUsQ0FBQztBQUFBLFVBQUMsSUFBRSxTQUFTLEdBQUU7QUFBQyxjQUFFLEtBQUs7QUFBRSxtQkFBTyxLQUFLLENBQUM7QUFBQSxVQUFDLEdBQUUsSUFBRSxFQUFFLE1BQUksU0FBUyxHQUFFLEdBQUU7QUFBQyxjQUFFLEtBQUs7QUFBRSxjQUFFLElBQUksTUFBSyxHQUFFLEdBQUUsQ0FBQztBQUFBLFVBQUMsSUFBRSxTQUFTLEdBQUUsR0FBRTtBQUFDLGNBQUUsS0FBSztBQUFFLGlCQUFLLENBQUMsSUFBRTtBQUFBLFVBQUMsR0FBRSxJQUFFLENBQUM7QUFBRSxZQUFFLG9CQUFvQixDQUFDLEVBQUUsUUFBUSxTQUFTLEdBQUU7QUFBQyxnQkFBRyxHQUFHLEtBQUcsTUFBSSxLQUFLLElBQUc7QUFBQyxrQkFBSSxJQUFFLEVBQUUseUJBQXlCLEdBQUUsQ0FBQztBQUFFLGdCQUFFLGVBQWUsR0FBRSxHQUFFLEVBQUMsWUFBVyxDQUFDLENBQUMsRUFBRSxZQUFXLEtBQUksRUFBRSxLQUFLLEdBQUUsQ0FBQyxHQUFFLEtBQUksRUFBRSxLQUFLLEdBQUUsQ0FBQyxFQUFDLENBQUM7QUFBRSxnQkFBRSxDQUFDLElBQUU7QUFBQSxZQUFFO0FBQUEsVUFBQyxDQUFDO0FBQUUsVUFBQUEsS0FBRTtBQUFHLGNBQUcsS0FBRyxHQUFFO0FBQUMsZ0JBQUksSUFBRSxFQUFFLG1CQUFpQixDQUFDLEVBQUUsY0FDMWUsTUFBTSxZQUFVLFNBQVMsR0FBRSxHQUFFO0FBQUMsZ0JBQUUsQ0FBQztBQUFFLGdCQUFFLFlBQVU7QUFBRSxxQkFBTztBQUFBLFlBQUMsSUFBRTtBQUFHLGlCQUFHLEVBQUUsR0FBRSxDQUFDLE1BQUlBLEtBQUU7QUFBQSxVQUFHO0FBQUMsY0FBRyxFQUFFLE9BQUssQ0FBQ0EsR0FBRSxVQUFRLEtBQUssRUFBRSxHQUFFLENBQUMsS0FBRyxFQUFFLGVBQWUsR0FBRSxHQUFFLEVBQUMsS0FBSSxFQUFFLEtBQUssR0FBRSxDQUFDLEVBQUMsQ0FBQztBQUFFLFlBQUUsS0FBSyxDQUFDO0FBQUUsWUFBRSxLQUFLLENBQUM7QUFBRSxpQkFBTztBQUFBLFFBQUM7QUFBRSxVQUFFLFlBQVUsU0FBUyxHQUFFLEdBQUU7QUFBQyxpQkFBTSxFQUFDLE9BQU0sSUFBSSxFQUFFLEdBQUUsQ0FBQyxHQUFFLFFBQU8sRUFBQztBQUFBLFFBQUM7QUFBRSxlQUFPO0FBQUEsTUFBQztBQUFDO0FBQUMsVUFBSSxJQUFFLGdCQUFjLE9BQU8sV0FBUyx1QkFBcUIsQ0FBQyxFQUFFLFNBQVMsS0FBSyxPQUFPLEtBQUcsZ0JBQWMsT0FBTyxhQUFXLGtCQUFnQixVQUFVLFVBQVEsU0FBTztBQUFLLFFBQUUsVUFBUSxFQUFFLFFBQU0sRUFBRSxHQUFFLEVBQUUsTUFBTSxZQUFVLEVBQUUsTUFBTTtBQUFBLElBQVcsR0FBRztBQUFBO0FBQUE7OztBQ0ovZDtBQUFBO0FBQUEsS0FBQyxTQUFTQyxZQUFXO0FBQ3JCLFVBQUksRUFBRSxhQUFZLFNBQVMsWUFDeEI7QUFFSCxpQkFBUyxVQUFVLFVBQVUsTUFBTSxVQUFVO0FBQUEsTUFDN0M7QUFBQSxJQUFDLEdBQUcsS0FBSyxhQUFhLE9BQU8sVUFBVSxVQUFVLGFBQWEsT0FBTyxRQUFRLFFBQVEsYUFBYSxPQUFPLFVBQVUsVUFBVSxDQUFDLENBQUM7QUFBQTtBQUFBOzs7QUNML0gsSUFNSSxVQWlMRztBQXZMUDtBQUFBO0FBTUEsSUFBSSxXQUFZLFdBQVk7QUFDM0IsVUFBSSxRQUFRLFdBQVk7QUFDdkIsYUFBSyxTQUFTO0FBQ2QsZUFBTztBQUFBLE1BQ1I7QUFDQSxVQUFJLFdBQVcsU0FBVSxJQUFJO0FBQzVCLFlBQUksT0FBTyxPQUFPLFdBQVksT0FBTSxJQUFJLFVBQVUsS0FBSyxvQkFBb0I7QUFDM0UsZUFBTztBQUFBLE1BQ1I7QUFFQSxVQUFJQyxZQUFXLFNBQVUsTUFBTSxTQUFTO0FBQ3ZDLFlBQUksRUFBRSxnQkFBZ0JBLFlBQVc7QUFDaEMsaUJBQU8sSUFBSUEsVUFBUyxNQUFNLE9BQU87QUFBQSxRQUNsQztBQUNBLGVBQU8saUJBQWlCLE1BQU07QUFBQSxVQUM3QixVQUFVO0FBQUEsWUFDVCxVQUFVO0FBQUEsWUFDVixPQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsYUFBYTtBQUFBLFlBQ1osVUFBVTtBQUFBLFlBQ1YsT0FBTztBQUFBLFVBQ1I7QUFBQSxVQUNBLGVBQWU7QUFBQSxZQUNkLFVBQVU7QUFBQSxZQUNWLE9BQU87QUFBQSxVQUNSO0FBQUEsUUFDRCxDQUFDO0FBQ0QsWUFBSSxDQUFDLFFBQVM7QUFDZCxpQkFBUyxRQUFRLEVBQUU7QUFDbkIsZ0JBQVEsR0FBRyxRQUFRLEtBQUssT0FBTyxLQUFLLElBQUksQ0FBQztBQUN6QyxnQkFBUSxHQUFHLFdBQVcsS0FBSyxVQUFVLEtBQUssSUFBSSxDQUFDO0FBQy9DLGdCQUFRLEdBQUcsVUFBVSxLQUFLLFNBQVMsS0FBSyxJQUFJLENBQUM7QUFBQSxNQUM5QztBQUVBLGFBQU8saUJBQWlCQSxVQUFTLFdBQVcsT0FBTyxPQUFPO0FBQUEsUUFDekQsYUFBYTtBQUFBLFVBQ1osT0FBT0E7QUFBQSxVQUNQLGNBQWM7QUFBQSxVQUNkLFlBQVk7QUFBQSxVQUNaLFVBQVU7QUFBQSxRQUNYO0FBQUEsUUFDQSxPQUFPO0FBQUEsVUFDTixPQUFPLFdBQVk7QUFDbEIsZ0JBQUk7QUFDSixnQkFBSSxDQUFDLEtBQUssU0FBVTtBQUNwQixnQkFBSSxLQUFLLFVBQVU7QUFDbEIsa0JBQUksS0FBSyxTQUFTLE1BQU07QUFDeEIsa0JBQUksTUFBTSxPQUFXLFFBQU87QUFBQSxZQUM3QjtBQUNBLGdCQUFJLEtBQUssZ0JBQWdCLEtBQUssU0FBUyxPQUFRLFFBQU8sS0FBSztBQUMzRCxpQkFBSyxRQUFRO0FBQUEsVUFDZDtBQUFBLFVBQ0EsY0FBYztBQUFBLFVBQ2QsWUFBWTtBQUFBLFVBQ1osVUFBVTtBQUFBLFFBQ1g7QUFBQSxRQUNBLE1BQU07QUFBQSxVQUNMLE9BQU8sV0FBWTtBQUNsQixtQkFBTyxLQUFLLGNBQWMsS0FBSyxNQUFNLENBQUM7QUFBQSxVQUN2QztBQUFBLFVBQ0EsY0FBYztBQUFBLFVBQ2QsWUFBWTtBQUFBLFVBQ1osVUFBVTtBQUFBLFFBQ1g7QUFBQSxRQUNBLGVBQWU7QUFBQSxVQUNkLE9BQU8sU0FBVSxHQUFHO0FBQ25CLGdCQUFJLE1BQU0sT0FBVyxRQUFPO0FBQUEsY0FDM0IsTUFBTTtBQUFBLGNBQ04sT0FBTztBQUFBLFlBQ1I7QUFDQSxtQkFBTztBQUFBLGNBQ04sTUFBTTtBQUFBLGNBQ04sT0FBTyxLQUFLLFNBQVMsQ0FBQztBQUFBLFlBQ3ZCO0FBQUEsVUFDRDtBQUFBLFVBQ0EsY0FBYztBQUFBLFVBQ2QsWUFBWTtBQUFBLFVBQ1osVUFBVTtBQUFBLFFBQ1g7QUFBQSxRQUNBLFVBQVU7QUFBQSxVQUNULE9BQU8sU0FBVSxHQUFHO0FBQ25CLG1CQUFPLEtBQUssU0FBUyxDQUFDO0FBQUEsVUFDdkI7QUFBQSxVQUNBLGNBQWM7QUFBQSxVQUNkLFlBQVk7QUFBQSxVQUNaLFVBQVU7QUFBQSxRQUNYO0FBQUEsUUFDQSxTQUFTO0FBQUEsVUFDUixPQUFPLFdBQVk7QUFDbEIsaUJBQUssV0FBVztBQUNoQixtQkFBTyxLQUFLO0FBQ1osZ0JBQUksQ0FBQyxLQUFLLFlBQWE7QUFDdkIsaUJBQUssWUFBWSxJQUFJLFFBQVEsS0FBSyxPQUFPLEtBQUssSUFBSSxDQUFDO0FBQ25ELGlCQUFLLFlBQVksSUFBSSxXQUFXLEtBQUssVUFBVSxLQUFLLElBQUksQ0FBQztBQUN6RCxpQkFBSyxZQUFZLElBQUksVUFBVSxLQUFLLFNBQVMsS0FBSyxJQUFJLENBQUM7QUFDdkQsaUJBQUssY0FBYztBQUFBLFVBQ3BCO0FBQUEsVUFDQSxjQUFjO0FBQUEsVUFDZCxZQUFZO0FBQUEsVUFDWixVQUFVO0FBQUEsUUFDWDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1QsT0FBTyxXQUFZO0FBQ2xCLG1CQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsY0FBYztBQUFBLFVBQ2QsWUFBWTtBQUFBLFVBQ1osVUFBVTtBQUFBLFFBQ1g7QUFBQSxNQUNELEdBQUc7QUFBQSxRQUNGLFFBQVE7QUFBQSxVQUNQLE9BQU8sU0FBVSxPQUFPO0FBQ3ZCLGdCQUFJLFNBQVMsS0FBSyxjQUFlO0FBQ2pDLGNBQUUsS0FBSztBQUNQLGdCQUFJLENBQUMsS0FBSyxVQUFVO0FBQ25CLHFCQUFPLGVBQWUsTUFBTSxZQUFZO0FBQUEsZ0JBQ3ZDLE9BQU8sQ0FBQyxLQUFLO0FBQUEsZ0JBQ2IsY0FBYztBQUFBLGdCQUNkLFlBQVk7QUFBQSxnQkFDWixVQUFVO0FBQUEsY0FDWCxDQUFDO0FBQ0Q7QUFBQSxZQUNEO0FBQ0EsaUJBQUssU0FBUyxRQUFRLFNBQVUsTUFBTSxHQUFHO0FBQ3hDLGtCQUFJLFFBQVEsTUFBTyxNQUFLLFNBQVMsQ0FBQyxJQUFJLEVBQUU7QUFBQSxZQUN6QyxHQUFHLElBQUk7QUFDUCxpQkFBSyxTQUFTLEtBQUssS0FBSztBQUFBLFVBQ3pCO0FBQUEsVUFDQSxjQUFjO0FBQUEsVUFDZCxZQUFZO0FBQUEsVUFDWixVQUFVO0FBQUEsUUFDWDtBQUFBLFFBQ0EsV0FBVztBQUFBLFVBQ1YsT0FBTyxTQUFVLE9BQU87QUFDdkIsZ0JBQUk7QUFDSixnQkFBSSxTQUFTLEtBQUssY0FBZTtBQUNqQyxjQUFFLEtBQUs7QUFDUCxnQkFBSSxDQUFDLEtBQUssU0FBVTtBQUNwQixnQkFBSSxLQUFLLFNBQVMsUUFBUSxLQUFLO0FBQy9CLGdCQUFJLE1BQU0sR0FBSSxNQUFLLFNBQVMsT0FBTyxHQUFHLENBQUM7QUFDdkMsaUJBQUssU0FBUyxRQUFRLFNBQVUsTUFBTUMsSUFBRztBQUN4QyxrQkFBSSxPQUFPLE1BQU8sTUFBSyxTQUFTQSxFQUFDLElBQUksRUFBRTtBQUFBLFlBQ3hDLEdBQUcsSUFBSTtBQUFBLFVBQ1I7QUFBQSxVQUNBLGNBQWM7QUFBQSxVQUNkLFlBQVk7QUFBQSxVQUNaLFVBQVU7QUFBQSxRQUNYO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDVCxPQUFPLFdBQVk7QUFDbEIsZ0JBQUksS0FBSyxTQUFVLE9BQU0sS0FBSyxLQUFLLFFBQVE7QUFDM0MsaUJBQUssZ0JBQWdCO0FBQUEsVUFDdEI7QUFBQSxVQUNBLGNBQWM7QUFBQSxVQUNkLFlBQVk7QUFBQSxVQUNaLFVBQVU7QUFBQSxRQUNYO0FBQUEsTUFDRCxDQUFDLENBQUM7QUFFRixhQUFPLGVBQWVELFVBQVMsV0FBVyxPQUFPLFVBQVU7QUFBQSxRQUMxRCxPQUFPLFdBQVk7QUFDbEIsaUJBQU87QUFBQSxRQUNSO0FBQUEsUUFDQSxjQUFjO0FBQUEsUUFDZCxZQUFZO0FBQUEsUUFDWixVQUFVO0FBQUEsTUFDWCxDQUFDO0FBQ0QsYUFBTyxlQUFlQSxVQUFTLFdBQVcsT0FBTyxhQUFhO0FBQUEsUUFDN0QsT0FBTztBQUFBLFFBQ1AsY0FBYztBQUFBLFFBQ2QsWUFBWTtBQUFBLFFBQ1osVUFBVTtBQUFBLE1BQ1gsQ0FBQztBQUVELGFBQU9BO0FBQUEsSUFDUixFQUFFO0FBQ0YsSUFBTyxtQkFBUTtBQUFBO0FBQUE7OztBQ3ZMZixJQU9JLGVBc0RHO0FBN0RQO0FBQUE7QUFBQTtBQU9BLElBQUksZ0JBQWlCLFdBQVc7QUFFL0IsVUFBSUUsaUJBQWdCLFNBQVMsS0FBSyxNQUFNO0FBQ3ZDLFlBQUksRUFBRSxnQkFBZ0JBLGdCQUFnQixRQUFPLElBQUlBLGVBQWMsS0FBSyxJQUFJO0FBQ3hFLHlCQUFTLEtBQUssTUFBTSxHQUFHO0FBQ3ZCLFlBQUksQ0FBQyxLQUFNLFFBQU87QUFBQSxpQkFDVCxPQUFPLFVBQVUsU0FBUyxLQUFLLE1BQU0sV0FBVyxFQUFHLFFBQU87QUFBQSxpQkFDMUQsT0FBTyxVQUFVLFNBQVMsS0FBSyxNQUFNLEtBQUssRUFBRyxRQUFPO0FBQUEsWUFDeEQsUUFBTztBQUNaLGVBQU8sZUFBZSxNQUFNLFlBQVk7QUFBQSxVQUN2QyxPQUFPO0FBQUEsVUFDUCxjQUFjO0FBQUEsVUFDZCxZQUFZO0FBQUEsVUFDWixVQUFVO0FBQUEsUUFDWCxDQUFDO0FBQUEsTUFDRjtBQUNBLFVBQUksT0FBTyxlQUFnQixRQUFPLGVBQWVBLGdCQUFlLGlCQUFTLFNBQVM7QUFFbEYsTUFBQUEsZUFBYyxZQUFZLE9BQU8sT0FBTyxpQkFBUyxXQUFXO0FBQUEsUUFDM0QsYUFBYTtBQUFBLFVBQ1osT0FBT0E7QUFBQSxVQUNQLGNBQWM7QUFBQSxVQUNkLFlBQVk7QUFBQSxVQUNaLFVBQVU7QUFBQSxRQUNYO0FBQUEsUUFDQSxVQUFVO0FBQUEsVUFDVCxPQUFPLFNBQVMsR0FBRztBQUNsQixnQkFBSSxLQUFLLGFBQWEsUUFBUyxRQUFPLEtBQUssU0FBUyxDQUFDO0FBQ3JELGdCQUFJLEtBQUssYUFBYSxZQUFhLFFBQU8sQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUM7QUFDOUQsbUJBQU87QUFBQSxVQUNSO0FBQUEsVUFDQSxjQUFjO0FBQUEsVUFDZCxZQUFZO0FBQUEsVUFDWixVQUFVO0FBQUEsUUFDWDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1QsT0FBTyxXQUFXO0FBQ2pCLG1CQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsY0FBYztBQUFBLFVBQ2QsWUFBWTtBQUFBLFVBQ1osVUFBVTtBQUFBLFFBQ1g7QUFBQSxNQUNELENBQUM7QUFFRCxhQUFPLGVBQWVBLGVBQWMsV0FBVyxPQUFPLGFBQWE7QUFBQSxRQUNsRSxPQUFPO0FBQUEsUUFDUCxVQUFVO0FBQUEsUUFDVixZQUFZO0FBQUEsUUFDWixjQUFjO0FBQUEsTUFDZixDQUFDO0FBRUQsYUFBT0E7QUFBQSxJQUNSLEVBQUU7QUFDRixJQUFPLHdCQUFRO0FBQUE7QUFBQTs7O0FDN0RmO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQSxLQUFDLFNBQVNDLFlBQVc7QUFDckIsVUFBSSxFQUFFLFlBQVcsUUFBTSxjQUFhLEtBQUssVUFBUSxXQUFVO0FBQUMsWUFBSSxJQUFFLFNBQVMsdUJBQXVCO0FBQ2xHLGVBQU8sRUFBRSxZQUFZLFNBQVMsY0FBYyxLQUFLLENBQUMsR0FBRSxDQUFDLENBQUMsRUFBRSxXQUFXLEtBQUssT0FBTyxRQUFRO0FBQUEsTUFBQyxFQUFFLElBQ3ZGO0FBR0gsaUJBQVMsVUFBVSxPQUFPLFFBQVEsSUFBSSxXQUFZO0FBQ2pELGlCQUFPLElBQUksc0JBQWMsSUFBSTtBQUFBLFFBQzlCO0FBQUEsTUFDQTtBQUFBLElBQUMsR0FBRyxLQUFLLGFBQWEsT0FBTyxVQUFVLFVBQVUsYUFBYSxPQUFPLFFBQVEsUUFBUSxhQUFhLE9BQU8sVUFBVSxVQUFVLENBQUMsQ0FBQztBQUFBO0FBQUE7OztBQ1gvSDtBQUFBO0FBQUEsS0FBQyxTQUFTQyxZQUFXO0FBQ3JCLFVBQUksQ0FBRyxXQUFVO0FBQUMsWUFBRyxFQUFFLFdBQVUsTUFBTSxRQUFNO0FBQzdDLFlBQUc7QUFBQyxpQkFBTyxJQUFJLE1BQU0sT0FBTyxHQUFFO0FBQUEsUUFBRSxTQUFPLEdBQUU7QUFBQyxpQkFBTTtBQUFBLFFBQUU7QUFBQSxNQUFDLEVBQUcsR0FDbkQ7QUFFSCxTQUFDLFdBQVk7QUFJWixjQUFJLE9BQU8sYUFBYSxlQUFlLE9BQU8sV0FBVyxZQUFhO0FBRXRFLGNBQUksZ0JBQWlCLE9BQU8sU0FBUyxPQUFPLE1BQU0sYUFBYztBQUNoRSxtQkFBU0MsT0FBTSxNQUFNLGVBQWU7QUFDbkMsZ0JBQUksQ0FBQyxNQUFNO0FBQ1Ysb0JBQU0sSUFBSSxNQUFNLHNCQUFzQjtBQUFBLFlBQ3ZDO0FBRUEsZ0JBQUk7QUFFSixnQkFBSSxpQkFBaUIsVUFBVTtBQUM5QixzQkFBUSxTQUFTLFlBQVksT0FBTztBQUNwQyxrQkFBSSxVQUFVLGlCQUFpQixjQUFjLFlBQVlELGFBQVksY0FBYyxVQUFVO0FBQzdGLGtCQUFJLGFBQWEsaUJBQWlCLGNBQWMsZUFBZUEsYUFBWSxjQUFjLGFBQWE7QUFFdEcsb0JBQU0sVUFBVSxNQUFNLFNBQVMsVUFBVTtBQUV6QyxxQkFBTztBQUFBLFlBQ1I7QUFFQSxvQkFBUSxTQUFTLGtCQUFrQjtBQUVuQyxrQkFBTSxPQUFPO0FBQ2Isa0JBQU0sVUFBVSxpQkFBaUIsY0FBYyxZQUFZQSxhQUFZLGNBQWMsVUFBVTtBQUMvRixrQkFBTSxhQUFhLGlCQUFpQixjQUFjLGVBQWVBLGFBQVksY0FBYyxhQUFhO0FBRXhHLG1CQUFPO0FBQUEsVUFDUjtBQUNBLFVBQUFDLE9BQU0sT0FBTztBQUNiLFVBQUFBLE9BQU0sa0JBQWtCO0FBQ3hCLFVBQUFBLE9BQU0sWUFBWTtBQUNsQixVQUFBQSxPQUFNLGlCQUFpQjtBQUN2QixpQkFBTyxRQUFRLE9BQU8sVUFBVSxRQUFRQTtBQUN4QyxjQUFJLGVBQWU7QUFDbEIsbUJBQU8sZUFBZSxPQUFPLE9BQU8sYUFBYTtBQUFBLGNBQ2hELGNBQWM7QUFBQSxjQUNkLFlBQVk7QUFBQSxjQUNaLFVBQVU7QUFBQSxjQUNWLE9BQU87QUFBQSxZQUNSLENBQUM7QUFBQSxVQUNGO0FBRUEsY0FBSSxFQUFFLGlCQUFpQixXQUFXO0FBQ2pDLG1CQUFPLG1CQUFtQixPQUFPLFVBQVUsbUJBQW1CLFNBQVMsVUFBVSxtQkFBbUIsUUFBUSxVQUFVLG1CQUFtQixTQUFTLG1CQUFtQjtBQUNwSyxrQkFDQSxVQUFVLE1BQ1YsT0FBTyxVQUFVLENBQUMsR0FDbEIsV0FBVyxVQUFVLENBQUM7QUFFdEIsa0JBQUksQ0FBQyxRQUFRLFNBQVM7QUFDckIsd0JBQVEsVUFBVSxDQUFDO0FBQUEsY0FDcEI7QUFFQSxrQkFBSSxDQUFDLFFBQVEsUUFBUSxJQUFJLEdBQUc7QUFDM0Isd0JBQVEsUUFBUSxJQUFJLElBQUksU0FBVSxPQUFPO0FBQ3hDLHNCQUNBLE9BQU8sUUFBUSxRQUFRLE1BQU0sSUFBSSxFQUFFLE1BQ25DLFNBQVMsS0FBSyxNQUFNLEdBQ3BCLFFBQVEsSUFDUixTQUFTLE9BQU8sUUFDaEI7QUFFQSx3QkFBTSxpQkFBaUIsU0FBU0Msa0JBQWlCO0FBQ2hELHdCQUFJLE1BQU0sZUFBZSxPQUFPO0FBQy9CLDRCQUFNLGNBQWM7QUFBQSxvQkFDckI7QUFBQSxrQkFDRDtBQUVBLHdCQUFNLGtCQUFrQixTQUFTQyxtQkFBa0I7QUFDbEQsMEJBQU0sZUFBZTtBQUFBLGtCQUN0QjtBQUVBLHdCQUFNLDJCQUEyQixTQUFTLDJCQUEyQjtBQUNwRSwwQkFBTSxlQUFlO0FBQ3JCLDBCQUFNLGtCQUFrQjtBQUFBLGtCQUN6QjtBQUVBLHdCQUFNLGdCQUFnQjtBQUN0Qix3QkFBTSxnQkFBZ0IsTUFBTSxlQUFlO0FBQzNDLHdCQUFNLFNBQVMsTUFBTSxVQUFVLE1BQU0sY0FBYztBQUNuRCx3QkFBTSxhQUFZLG9CQUFJLEtBQUssR0FBRSxRQUFRO0FBRXJDLHNCQUFJLE1BQU0sU0FBUztBQUNsQiwwQkFBTSxRQUFRLE1BQU0sVUFBVSxTQUFTLGdCQUFnQjtBQUN2RCwwQkFBTSxRQUFRLE1BQU0sVUFBVSxTQUFTLGdCQUFnQjtBQUFBLGtCQUN4RDtBQUVBLHlCQUFPLEVBQUUsUUFBUSxVQUFVLENBQUMsTUFBTSxpQkFBaUI7QUFDbEQsd0JBQUksU0FBUyxRQUFRO0FBQ3BCLHFDQUFlLE9BQU8sS0FBSztBQUUzQiwwQkFBSSxLQUFLLFNBQVMsWUFBWSxLQUFLLE9BQU8saUJBQWlCLFlBQVk7QUFDdEUscUNBQWEsS0FBSyxTQUFTLEtBQUs7QUFBQSxzQkFDakM7QUFBQSxvQkFDRDtBQUFBLGtCQUNEO0FBQUEsZ0JBQ0Q7QUFFQSx3QkFBUSxRQUFRLElBQUksRUFBRSxPQUFPLENBQUM7QUFFOUIsb0JBQUksUUFBUSxhQUFhO0FBQ3hCLDBCQUFRLFlBQVksT0FBTyxNQUFNLFFBQVEsUUFBUSxJQUFJLENBQUM7QUFBQSxnQkFDdkQ7QUFBQSxjQUNEO0FBRUEsc0JBQVEsUUFBUSxJQUFJLEVBQUUsS0FBSyxLQUFLLFFBQVE7QUFBQSxZQUN6QztBQUVBLG1CQUFPLHNCQUFzQixPQUFPLFVBQVUsc0JBQXNCLFNBQVMsVUFBVSxzQkFBc0IsUUFBUSxVQUFVLHNCQUFzQixTQUFTLHNCQUFzQjtBQUNuTCxrQkFDQSxVQUFVLE1BQ1YsT0FBTyxVQUFVLENBQUMsR0FDbEIsV0FBVyxVQUFVLENBQUMsR0FDdEI7QUFFQSxrQkFBSSxRQUFRLFdBQVcsUUFBUSxRQUFRLElBQUksS0FBSyxRQUFRLFFBQVEsSUFBSSxFQUFFLE1BQU07QUFDM0Usd0JBQVEsUUFBUSxRQUFRLElBQUksRUFBRSxLQUFLLFFBQVEsUUFBUTtBQUVuRCxvQkFBSSxVQUFVLElBQUk7QUFDakIsMEJBQVEsUUFBUSxJQUFJLEVBQUUsS0FBSyxPQUFPLE9BQU8sQ0FBQztBQUUxQyxzQkFBSSxDQUFDLFFBQVEsUUFBUSxJQUFJLEVBQUUsS0FBSyxRQUFRO0FBQ3ZDLHdCQUFJLFFBQVEsYUFBYTtBQUN4Qiw4QkFBUSxZQUFZLE9BQU8sTUFBTSxRQUFRLFFBQVEsSUFBSSxDQUFDO0FBQUEsb0JBQ3ZEO0FBQ0EsMkJBQU8sUUFBUSxRQUFRLElBQUk7QUFBQSxrQkFDNUI7QUFBQSxnQkFDRDtBQUFBLGNBQ0Q7QUFBQSxZQUNEO0FBRUEsbUJBQU8sZ0JBQWdCLE9BQU8sVUFBVSxnQkFBZ0IsU0FBUyxVQUFVLGdCQUFnQixRQUFRLFVBQVUsZ0JBQWdCLFNBQVMsY0FBYyxPQUFPO0FBQzFKLGtCQUFJLENBQUMsVUFBVSxRQUFRO0FBQ3RCLHNCQUFNLElBQUksTUFBTSxzQkFBc0I7QUFBQSxjQUN2QztBQUVBLGtCQUFJLENBQUMsU0FBUyxPQUFPLE1BQU0sU0FBUyxVQUFVO0FBQzdDLHNCQUFNLElBQUksTUFBTSx3QkFBd0I7QUFBQSxjQUN6QztBQUVBLGtCQUFJLFVBQVUsTUFBTSxPQUFPLE1BQU07QUFFakMsa0JBQUk7QUFDSCxvQkFBSSxDQUFDLE1BQU0sU0FBUztBQUNuQix3QkFBTSxlQUFlO0FBRXJCLHNCQUFJLG9CQUFvQixTQUFVQyxRQUFPO0FBQ3hDLG9CQUFBQSxPQUFNLGVBQWU7QUFFckIscUJBQUMsV0FBVyxRQUFRLFlBQVksT0FBTyxNQUFNLGlCQUFpQjtBQUFBLGtCQUMvRDtBQUVBLHVCQUFLLFlBQVksT0FBTyxNQUFNLGlCQUFpQjtBQUFBLGdCQUNoRDtBQUVBLHFCQUFLLFVBQVUsT0FBTyxNQUFNLEtBQUs7QUFBQSxjQUNsQyxTQUFTLE9BQU87QUFDZixzQkFBTSxTQUFTO0FBRWYsbUJBQUc7QUFDRix3QkFBTSxnQkFBZ0I7QUFFdEIsc0JBQUksYUFBYSxXQUFXLE9BQU8sUUFBUSxRQUFRLElBQUksTUFBTSxZQUFZO0FBQ3hFLDRCQUFRLFFBQVEsSUFBSSxFQUFFLEtBQUssU0FBUyxLQUFLO0FBQUEsa0JBQzFDO0FBRUEsc0JBQUksT0FBTyxRQUFRLE9BQU8sSUFBSSxNQUFNLFlBQVk7QUFDL0MsNEJBQVEsT0FBTyxJQUFJLEVBQUUsS0FBSyxTQUFTLEtBQUs7QUFBQSxrQkFDekM7QUFFQSw0QkFBVSxRQUFRLGFBQWEsSUFBSSxRQUFRLGVBQWUsUUFBUTtBQUFBLGdCQUNuRSxTQUFTLFdBQVcsQ0FBQyxNQUFNO0FBQUEsY0FDNUI7QUFFQSxxQkFBTztBQUFBLFlBQ1I7QUFHQSxxQkFBUyxZQUFZLHNCQUFzQixXQUFXO0FBQ3JELGtCQUFJLFNBQVMsZUFBZSxZQUFZO0FBQ3ZDLHlCQUFTLGNBQWMsSUFBSUgsT0FBTSxvQkFBb0I7QUFBQSxrQkFDcEQsU0FBUztBQUFBLGdCQUNWLENBQUMsQ0FBQztBQUFBLGNBQ0g7QUFBQSxZQUNELENBQUM7QUFBQSxVQUNGO0FBQUEsUUFDRCxHQUFFO0FBQUEsTUFDRjtBQUFBLElBQUMsR0FBRyxLQUFLLGFBQWEsT0FBTyxVQUFVLFVBQVUsYUFBYSxPQUFPLFFBQVEsUUFBUSxhQUFhLE9BQU8sVUFBVSxVQUFVLENBQUMsQ0FBQztBQUFBO0FBQUE7OztBQ3BNL0g7QUFBQTtBQUFBLEtBQUMsU0FBU0ksWUFBVztBQUNyQixVQUFJLEVBQUUsaUJBQWdCLFNBQU8sY0FBWSxPQUFPLEtBQUssZUFBYSxLQUFHLEtBQUssWUFBWSxTQUFTLEVBQUUsUUFBUSx3QkFBd0IsS0FDOUg7QUFFSCxhQUFLLGNBQWMsU0FBU0MsYUFBWSxNQUFNLGVBQWU7QUFDNUQsY0FBSSxDQUFDLE1BQU07QUFDVixrQkFBTSxNQUFNLCtFQUErRTtBQUFBLFVBQzVGO0FBRUEsY0FBSTtBQUNKLDBCQUFnQixpQkFBaUIsRUFBQyxTQUFTLE9BQU8sWUFBWSxPQUFPLFFBQVEsS0FBSTtBQUVqRixjQUFJO0FBQ0gsb0JBQVEsU0FBUyxZQUFZLGFBQWE7QUFDMUMsa0JBQU0sZ0JBQWdCLE1BQU0sY0FBYyxTQUFTLGNBQWMsWUFBWSxjQUFjLE1BQU07QUFBQSxVQUNsRyxTQUFTLE9BQU87QUFFZixvQkFBUSxTQUFTLFlBQVksT0FBTztBQUNwQyxrQkFBTSxVQUFVLE1BQU0sY0FBYyxTQUFTLGNBQWMsVUFBVTtBQUNyRSxrQkFBTSxTQUFTLGNBQWM7QUFBQSxVQUM5QjtBQUNBLGlCQUFPO0FBQUEsUUFDUjtBQUVBLG9CQUFZLFlBQVksTUFBTTtBQUFBLE1BQzlCO0FBQUEsSUFBQyxHQUFHLEtBQUssYUFBYSxPQUFPLFVBQVUsVUFBVSxhQUFhLE9BQU8sUUFBUSxRQUFRLGFBQWEsT0FBTyxVQUFVLFVBQVUsQ0FBQyxDQUFDO0FBQUE7QUFBQTs7O0FDekIvSDtBQUFBO0FBQUEsS0FBQyxTQUFTQyxZQUFXO0FBQ3JCLFVBQUksRUFBRSxzQkFBcUIsUUFBTSxXQUFVO0FBQUMsWUFBRztBQUFDLGlCQUFPLElBQUksb0JBQWlCO0FBQUEsUUFBRSxTQUFPLEdBQUU7QUFBQyxpQkFBTTtBQUFBLFFBQUU7QUFBQSxNQUFDLEVBQUUsSUFDaEc7QUFFSCxTQUFDLFNBQVVDLFNBQVE7QUFDbEIsVUFBQUEsUUFBTyxtQkFBbUIsU0FBU0Msb0JBQW1CO0FBQ3JELG1CQUFPLFNBQVMsdUJBQXVCO0FBQUEsVUFDeEM7QUFFQSxjQUFJLFdBQVcsU0FBUyx1QkFBdUI7QUFDL0MsVUFBQUQsUUFBTyxpQkFBaUIsWUFBWSxPQUFPLE9BQU8sU0FBUyxZQUFZLFNBQVM7QUFBQSxRQUNqRixHQUFFLElBQUk7QUFBQSxNQUNOO0FBQUEsSUFBQyxHQUFHLEtBQUssYUFBYSxPQUFPLFVBQVUsVUFBVSxhQUFhLE9BQU8sUUFBUSxRQUFRLGFBQWEsT0FBTyxVQUFVLFVBQVUsQ0FBQyxDQUFDO0FBQUE7QUFBQTs7O0FDWi9IO0FBQUE7QUFBQSxLQUFDLFNBQVNFLFlBQVc7QUFDckIsVUFBSSxFQUFFLGNBQWEsUUFBTSxhQUFZLFNBQVMsa0JBQzNDO0FBRUgsZ0JBQVEsVUFBVSxVQUFVLFFBQVEsVUFBVSx5QkFBeUIsUUFBUSxVQUFVLG9CQUFvQixRQUFRLFVBQVUscUJBQXFCLFFBQVEsVUFBVSxzQkFBc0IsU0FBUyxRQUFRLFVBQVU7QUFFdE4sY0FBSSxVQUFVO0FBQ2QsY0FBSSxZQUFZLFFBQVEsWUFBWSxRQUFRLGVBQWUsaUJBQWlCLFFBQVE7QUFDcEYsY0FBSSxRQUFRO0FBRVosaUJBQU8sU0FBUyxLQUFLLEtBQUssU0FBUyxLQUFLLE1BQU0sU0FBUztBQUN0RCxjQUFFO0FBQUEsVUFDSDtBQUVBLGlCQUFPLENBQUMsQ0FBQyxTQUFTLEtBQUs7QUFBQSxRQUN4QjtBQUFBLE1BQ0E7QUFBQSxJQUFDLEdBQUcsS0FBSyxhQUFhLE9BQU8sVUFBVSxVQUFVLGFBQWEsT0FBTyxRQUFRLFFBQVEsYUFBYSxPQUFPLFVBQVUsVUFBVSxDQUFDLENBQUM7QUFBQTtBQUFBOzs7QUNoQi9IO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFXQSxLQUFDLFdBQVk7QUFDWDtBQUVBLFVBQUksZ0JBQWdCLE9BQU8sd0JBQXdCO0FBQ25ELFVBQUksb0JBQW9CLEVBQ3RCLFNBQVMsdUJBQXVCLEVBQUUsVUFBVSxhQUFhO0FBRTNELFVBQUksZUFBZTtBQU1uQixVQUFJLFVBQVUsS0FBSyxVQUFVLFNBQVMsR0FBRztBQUN2QyxTQUFDLFdBQVk7QUFDWCx5QkFBZTtBQUVmLGNBQUksZ0JBQWdCLEtBQUssVUFBVTtBQUNuQyxlQUFLLFVBQVUsWUFBWSxTQUFTQyxXQUFVLE1BQU07QUFDbEQsZ0JBQUksU0FBUyxjQUFjLEtBQUssTUFBTSxJQUFJO0FBQzFDLGdCQUFJLGdCQUFnQixrQkFBa0I7QUFDcEMscUJBQU8sWUFBWSxpQkFBaUI7QUFBQSxZQUN0QztBQUNBLG1CQUFPO0FBQUEsVUFDVDtBQUlBLDJCQUFpQixVQUFVLG1CQUN6QixZQUFZLFVBQVU7QUFDeEIsMkJBQWlCLFVBQVUsZ0JBQ3pCLFlBQVksVUFBVTtBQUV4QixpQkFBTyxpQkFBaUIsaUJBQWlCLFdBQVc7QUFBQSxZQUNsRCxZQUFZO0FBQUEsY0FDVixLQUFLLFdBQVk7QUFDZix1QkFBTyxLQUFLO0FBQUEsY0FDZDtBQUFBLGNBQ0EsY0FBYztBQUFBLFlBQ2hCO0FBQUEsWUFFQSxhQUFhO0FBQUEsY0FDWCxLQUFLLFdBQVk7QUFDZix1QkFBTztBQUFBLGNBQ1Q7QUFBQSxjQUNBLGNBQWM7QUFBQSxZQUNoQjtBQUFBLFlBRUEsWUFBWTtBQUFBLGNBQ1YsS0FBSyxXQUFZO0FBQ2YsdUJBQU87QUFBQSxjQUNUO0FBQUEsY0FDQSxjQUFjO0FBQUEsWUFDaEI7QUFBQSxVQUNGLENBQUM7QUFFRCxjQUFJLG1CQUFtQixLQUFLLFVBQVU7QUFDdEMsbUJBQVMsYUFBYSxTQUFTLFNBQVM7QUFDdEMsZ0JBQUksbUJBQW1CLGtCQUFrQjtBQUN2QyxrQkFBSTtBQUNKLHFCQUFRLFFBQVEsUUFBUSxZQUFhO0FBQ25DLGlDQUFpQixLQUFLLE1BQU0sT0FBTyxPQUFPO0FBQUEsY0FDNUM7QUFBQSxZQUNGLE9BQU87QUFDTCwrQkFBaUIsS0FBSyxNQUFNLFNBQVMsT0FBTztBQUFBLFlBQzlDO0FBQ0EsbUJBQU87QUFBQSxVQUNUO0FBQ0EsZUFBSyxVQUFVLGVBQWU7QUFFOUIsY0FBSSxrQkFBa0IsS0FBSyxVQUFVO0FBQ3JDLGVBQUssVUFBVSxjQUFjLFNBQVNDLGFBQVksT0FBTztBQUN2RCxnQkFBSSxpQkFBaUIsa0JBQWtCO0FBQ3JDLDJCQUFhLEtBQUssTUFBTSxPQUFPLElBQUk7QUFBQSxZQUNyQyxPQUFPO0FBQ0wsOEJBQWdCLEtBQUssTUFBTSxLQUFLO0FBQUEsWUFDbEM7QUFDQSxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxjQUFJLGtCQUFrQixLQUFLLFVBQVU7QUFDckMsY0FBSSxtQkFBbUIsS0FBSyxVQUFVO0FBQ3RDLGVBQUssVUFBVSxlQUFlLFNBQVMsYUFBYSxVQUFVLFVBQVU7QUFDdEUsZ0JBQUksb0JBQW9CLGtCQUFrQjtBQUN4QywyQkFBYSxLQUFLLE1BQU0sVUFBVSxRQUFRO0FBQzFDLDhCQUFnQixLQUFLLE1BQU0sUUFBUTtBQUFBLFlBQ3JDLE9BQU87QUFDTCwrQkFBaUIsS0FBSyxNQUFNLFVBQVUsUUFBUTtBQUFBLFlBQ2hEO0FBQ0EsbUJBQU87QUFBQSxVQUNUO0FBRUEsbUJBQVMsVUFBVSx5QkFBeUIsU0FBUyx5QkFBeUI7QUFDNUUsZ0JBQUksT0FBTyxLQUFLLGNBQWMsSUFBSTtBQUNsQyxpQkFBSyxZQUFZLGlCQUFpQjtBQUNsQyxtQkFBTztBQUFBLFVBQ1Q7QUFFQSxjQUFJLGlCQUFpQixTQUFTLFVBQVU7QUFDeEMsbUJBQVMsVUFBVSxhQUFhLFNBQVNDLFlBQVcsU0FBUyxNQUFNO0FBQ2pFLG1CQUFPLFFBQVE7QUFDZixnQkFBSSxVQUFVLGVBQWUsS0FBSyxNQUFNLFNBQVMsSUFBSTtBQUNyRCxnQkFBSSxtQkFBbUIsa0JBQWtCO0FBQ3ZDLHNCQUFRLFlBQVksaUJBQWlCO0FBQUEsWUFDdkM7QUFDQSxtQkFBTztBQUFBLFVBQ1Q7QUFBQSxRQUNGLEdBQUc7QUFBQSxNQUNMO0FBTUEsVUFBSSxvQkFBb0IsS0FBSyxVQUFVO0FBQ3ZDLFVBQUksd0JBQXdCLFNBQVMsVUFBVTtBQUMvQyxVQUFJLHFCQUFxQixTQUFTLFVBQVU7QUFDNUMsVUFBSSxzQkFBc0IsS0FBSyxVQUFVO0FBQ3pDLFVBQUksc0JBQXNCLEtBQUssVUFBVTtBQUN6QyxVQUFJLHVCQUF1QixLQUFLLFVBQVU7QUFDMUMsVUFBSSwwQkFBMEIsVUFBVSxVQUFVO0FBQ2xELFVBQUksK0JBQStCLE9BQU87QUFBQSxRQUN4QyxPQUFPLFlBQVk7QUFBQSxRQUNuQjtBQUFBLE1BQ0YsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLSCxLQUFLLFdBQVk7QUFDZixpQkFBTyxLQUFLO0FBQUEsUUFDZDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLQSxLQUFLLFNBQVUsTUFBTTtBQUNuQixlQUFLLFlBQVk7QUFBQSxRQUNuQjtBQUFBLE1BQ0Y7QUFDQSxVQUFJLHFCQUFxQixPQUFPO0FBQUEsUUFDOUIsT0FBTyxLQUFLO0FBQUEsUUFDWjtBQUFBLE1BQ0YsS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFLSCxLQUFLLFdBQVk7QUFDZixpQkFBTyxLQUFLO0FBQUEsUUFDZDtBQUFBLE1BQ0Y7QUFFQSxVQUFJLDBCQUEwQixRQUFRLFVBQVU7QUFDaEQsVUFBSSxzQkFBc0IsU0FBUyxVQUFVO0FBQzdDLFVBQUksdUJBQXVCLGlCQUFpQixVQUFVO0FBRXRELFVBQUksaUJBQ0Y7QUFFRixlQUFTLElBQUksTUFBTSxVQUFVO0FBRTNCLFlBQUksQ0FBQyxLQUFLLFdBQVcsUUFBUTtBQUMzQixpQkFBTyxDQUFDO0FBQUEsUUFDVjtBQUNBLGdCQUFRLEtBQUssVUFBVTtBQUFBLFVBQ3JCLEtBQUssS0FBSztBQUNSLG1CQUFPLG9CQUFvQixLQUFLLE1BQU0sUUFBUTtBQUFBLFVBQ2hELEtBQUssS0FBSztBQUNSLG1CQUFPLHFCQUFxQixLQUFLLE1BQU0sUUFBUTtBQUFBLFVBQ2pEO0FBQ0UsbUJBQU8sd0JBQXdCLEtBQUssTUFBTSxRQUFRO0FBQUEsUUFDdEQ7QUFBQSxNQUNGO0FBS0EsVUFBSSxlQUFnQixXQUFZO0FBQzlCLFlBQUksQ0FBQyxlQUFlO0FBQ2xCLGNBQUksSUFBSSxTQUFTLGNBQWMsVUFBVTtBQUN6QyxjQUFJLEtBQUssU0FBUyxjQUFjLFVBQVU7QUFDMUMsYUFBRyxRQUFRLFlBQVksU0FBUyxjQUFjLEtBQUssQ0FBQztBQUNwRCxZQUFFLFFBQVEsWUFBWSxFQUFFO0FBQ3hCLGNBQUksUUFBUSxFQUFFLFVBQVUsSUFBSTtBQUM1QixpQkFDRSxNQUFNLFFBQVEsV0FBVyxXQUFXLEtBQ3BDLE1BQU0sUUFBUSxXQUFXLFFBQVEsV0FBVyxXQUFXLEtBQ3ZEO0FBQUEsUUFFSjtBQUFBLE1BQ0YsRUFBRztBQUVILFVBQUksZUFBZTtBQUNuQixVQUFJLGdDQUFnQyxXQUFZO0FBQUEsTUFBQztBQUVqRCxVQUFJLGVBQWU7QUFDakIsWUFBSSxhQUFhLFNBQVMsZUFBZSxtQkFBbUIsVUFBVTtBQUN0RSxZQUFJLGNBQWM7QUFFbEIsWUFBSSxnQkFBZ0IsU0FBUyxjQUFjLE9BQU87QUFDbEQsc0JBQWMsY0FBYyxlQUFlO0FBRTNDLFlBQUksT0FBTyxTQUFTO0FBQ3BCLGFBQUssYUFBYSxlQUFlLEtBQUssaUJBQWlCO0FBS3ZELHNDQUE4QixZQUFZLE9BQU87QUFBQSxVQUMvQyxZQUFZO0FBQUEsUUFDZDtBQUlBLFlBQUksZ0JBQWdCLENBQUMsU0FDbEIsY0FBYyxLQUFLLEVBQ25CLGVBQWUsV0FBVztBQU03QixzQ0FBOEIsV0FBVyxTQUFVLFVBQVU7QUFFM0QsY0FDRSxTQUFTLFdBQ1QsU0FBUyxpQkFBaUIsU0FBUyxnQkFBZ0IsY0FDbkQ7QUFDQTtBQUFBLFVBQ0Y7QUFDQSxtQkFBUyxVQUFVLFdBQVcsdUJBQXVCO0FBQ3JELGNBQUk7QUFDSixpQkFBUSxRQUFRLFNBQVMsWUFBYTtBQUNwQyxnQ0FBb0IsS0FBSyxTQUFTLFNBQVMsS0FBSztBQUFBLFVBQ2xEO0FBSUEsY0FBSSxlQUFlO0FBQ2pCLHFCQUFTLFlBQVksOEJBQThCO0FBQUEsVUFDckQsT0FBTztBQUNMLHFCQUFTLFlBQVksU0FBVSxNQUFNO0FBQ25DLHFCQUFPLDhCQUE4QixXQUFXLE1BQU0sSUFBSTtBQUFBLFlBQzVEO0FBR0EsZ0JBQUksYUFBYTtBQUNmLGtCQUFJO0FBQ0YsZ0NBQWdCLFFBQVE7QUFDeEIsZ0NBQWdCLFFBQVE7QUFBQSxjQUMxQixTQUFTLEtBQUs7QUFDWiw4QkFBYztBQUFBLGNBQ2hCO0FBQUEsWUFDRjtBQUFBLFVBQ0Y7QUFFQSx3Q0FBOEIsVUFBVSxTQUFTLE9BQU87QUFBQSxRQUMxRDtBQUdBLFlBQUksc0JBQXNCO0FBQUEsVUFDeEIsVUFBVSxDQUFDLFFBQVE7QUFBQSxVQUNuQixTQUFTLENBQUMsT0FBTztBQUFBLFVBQ2pCLE9BQU8sQ0FBQyxZQUFZLE9BQU87QUFBQSxVQUMzQixNQUFNLENBQUMsU0FBUyxPQUFPO0FBQUEsVUFDdkIsTUFBTSxDQUFDLE1BQU0sU0FBUyxPQUFPO0FBQUEsVUFDN0IsTUFBTSxDQUFDLE1BQU0sU0FBUyxPQUFPO0FBQUEsUUFDL0I7QUFFQSxZQUFJLGFBQWEsU0FBVSxNQUFNO0FBRS9CLGtCQUFRLGdDQUFnQyxLQUFLLElBQUksS0FBSztBQUFBLFlBQ3BEO0FBQUEsWUFDQTtBQUFBLFVBQ0YsR0FBRyxDQUFDLEVBQUUsWUFBWTtBQUFBLFFBQ3BCO0FBRUEsWUFBSSxrQkFBa0IsU0FBU0MsaUJBQWdCLEtBQUs7QUFDbEQsaUJBQU8sZUFBZSxLQUFLLGFBQWE7QUFBQSxZQUN0QyxLQUFLLFdBQVk7QUFDZixxQkFBTyxhQUFhLElBQUk7QUFBQSxZQUMxQjtBQUFBLFlBQ0EsS0FBSyxTQUFVLE1BQU07QUFFbkIsa0JBQUksT0FBTyxvQkFBb0IsV0FBVyxJQUFJLENBQUM7QUFDL0Msa0JBQUksTUFBTTtBQUNSLHlCQUFTLElBQUksR0FBRyxJQUFJLEtBQUssUUFBUSxLQUFLO0FBQ3BDLHlCQUFPLE1BQU0sS0FBSyxDQUFDLElBQUksTUFBTSxPQUFPLE9BQU8sS0FBSyxDQUFDLElBQUk7QUFBQSxnQkFDdkQ7QUFBQSxjQUNGO0FBQ0EseUJBQVcsS0FBSyxZQUFZO0FBQzVCLDRDQUE4QixVQUFVLFVBQVU7QUFDbEQscUJBQU8sS0FBSyxRQUFRLFlBQVk7QUFDOUIsb0NBQW9CLEtBQUssS0FBSyxTQUFTLEtBQUssUUFBUSxVQUFVO0FBQUEsY0FDaEU7QUFDQSxrQkFBSSxPQUFPLFdBQVc7QUFFdEIsa0JBQUksTUFBTTtBQUNSLHlCQUFTLElBQUksR0FBRyxJQUFJLEtBQUssUUFBUSxLQUFLO0FBQ3BDLHlCQUFPLEtBQUs7QUFBQSxnQkFDZDtBQUFBLGNBQ0Y7QUFDQSxxQkFBTyxLQUFLLFlBQVk7QUFDdEIsb0NBQW9CLEtBQUssS0FBSyxTQUFTLEtBQUssVUFBVTtBQUFBLGNBQ3hEO0FBQUEsWUFDRjtBQUFBLFlBQ0EsY0FBYztBQUFBLFVBQ2hCLENBQUM7QUFBQSxRQUNIO0FBRUEsWUFBSSxrQkFBa0IsU0FBU0MsaUJBQWdCLEtBQUs7QUFDbEQsaUJBQU8sZUFBZSxLQUFLLGFBQWE7QUFBQSxZQUN0QyxLQUFLLFdBQVk7QUFDZixxQkFBTyxJQUFJLFlBQVksSUFBSSxLQUFLLFNBQVMsS0FBSyxZQUFZO0FBQUEsWUFDNUQ7QUFBQSxZQUNBLEtBQUssU0FBVSxXQUFXO0FBQ3hCLGtCQUFJLEtBQUssWUFBWTtBQUNuQiwyQkFBVyxLQUFLLFlBQVk7QUFDNUIsb0JBQUksVUFBVSxLQUFLLGNBQWMsdUJBQXVCO0FBQ3hELHVCQUFPLFdBQVcsS0FBSyxZQUFZO0FBQ2pDLHNDQUFvQixLQUFLLFNBQVMsV0FBVyxLQUFLLFVBQVU7QUFBQSxnQkFDOUQ7QUFDQSxxQ0FBcUIsS0FBSyxLQUFLLFlBQVksU0FBUyxJQUFJO0FBQUEsY0FDMUQsT0FBTztBQUNMLHNCQUFNLElBQUk7QUFBQSxrQkFDUjtBQUFBLGdCQUNGO0FBQUEsY0FDRjtBQUFBLFlBQ0Y7QUFBQSxZQUNBLGNBQWM7QUFBQSxVQUNoQixDQUFDO0FBQUEsUUFDSDtBQUVBLHdCQUFnQiw4QkFBOEIsU0FBUztBQUN2RCx3QkFBZ0IsOEJBQThCLFNBQVM7QUFNdkQsc0NBQThCLFlBQVksU0FBUyxVQUFVLEtBQUs7QUFDaEUsY0FBSSxZQUFZLElBQUksS0FBSyxZQUFZO0FBQ3JDLG1CQUNNLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxHQUNqQyxJQUFJLE1BQU0sSUFBSSxVQUFVLENBQUMsSUFDekIsS0FDQTtBQUNBLDBDQUE4QixTQUFTLENBQUM7QUFBQSxVQUMxQztBQUFBLFFBQ0Y7QUFHQSxpQkFBUyxpQkFBaUIsb0JBQW9CLFdBQVk7QUFDeEQsd0NBQThCLFVBQVUsUUFBUTtBQUFBLFFBQ2xELENBQUM7QUFHRCxpQkFBUyxVQUFVLGdCQUFnQixTQUFTQyxpQkFBZ0I7QUFDMUQsY0FBSSxLQUFLLHNCQUFzQixNQUFNLE1BQU0sU0FBUztBQUNwRCxjQUFJLEdBQUcsY0FBYyxZQUFZO0FBQy9CLDBDQUE4QixTQUFTLEVBQUU7QUFBQSxVQUMzQztBQUNBLGlCQUFPO0FBQUEsUUFDVDtBQUVBLGtCQUFVLFVBQVUsa0JBQWtCLFdBQVk7QUFDaEQsY0FBSSxLQUFLLHdCQUF3QixNQUFNLE1BQU0sU0FBUztBQUN0RCx3Q0FBOEIsVUFBVSxFQUFFO0FBQzFDLGlCQUFPO0FBQUEsUUFDVDtBQUVBLGVBQU8sZUFBZSxZQUFZLFdBQVcsYUFBYTtBQUFBLFVBQ3hELEtBQUssV0FBWTtBQUNmLG1CQUFPLGFBQWEsSUFBSTtBQUFBLFVBQzFCO0FBQUEsVUFDQSxLQUFLLFNBQVUsTUFBTTtBQUNuQix5Q0FBNkIsSUFBSSxLQUFLLE1BQU0sSUFBSTtBQUNoRCwwQ0FBOEIsVUFBVSxJQUFJO0FBQUEsVUFDOUM7QUFBQSxVQUNBLGNBQWM7QUFBQSxVQUNkLFlBQVk7QUFBQSxRQUNkLENBQUM7QUFHRCxZQUFJLG1CQUFtQjtBQUN2QixZQUFJLG1CQUFtQjtBQUV2QixZQUFJLGdCQUFnQixTQUFVLEdBQUc7QUFDL0Isa0JBQVEsR0FBRztBQUFBLFlBQ1QsS0FBSztBQUNILHFCQUFPO0FBQUEsWUFDVCxLQUFLO0FBQ0gscUJBQU87QUFBQSxZQUNULEtBQUs7QUFDSCxxQkFBTztBQUFBLFlBQ1QsS0FBSztBQUNILHFCQUFPO0FBQUEsWUFDVCxLQUFLO0FBQ0gscUJBQU87QUFBQSxVQUNYO0FBQUEsUUFDRjtBQUVBLFlBQUksYUFBYSxTQUFVLEdBQUc7QUFDNUIsaUJBQU8sRUFBRSxRQUFRLGtCQUFrQixhQUFhO0FBQUEsUUFDbEQ7QUFFQSxZQUFJLGFBQWEsU0FBVSxHQUFHO0FBQzVCLGlCQUFPLEVBQUUsUUFBUSxrQkFBa0IsYUFBYTtBQUFBLFFBQ2xEO0FBRUEsWUFBSSxVQUFVLFNBQVUsS0FBSztBQUMzQixjQUFJLE1BQU0sQ0FBQztBQUNYLG1CQUFTLElBQUksR0FBRyxJQUFJLElBQUksUUFBUSxLQUFLO0FBQ25DLGdCQUFJLElBQUksQ0FBQyxDQUFDLElBQUk7QUFBQSxVQUNoQjtBQUNBLGlCQUFPO0FBQUEsUUFDVDtBQUdBLFlBQUksZUFBZSxRQUFRO0FBQUEsVUFDekI7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNGLENBQUM7QUFFRCxZQUFJLG1CQUFtQixRQUFRO0FBQUEsVUFDN0I7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDRixDQUFDO0FBT0QsWUFBSSxlQUFlLFNBQVUsTUFBTSxZQUFZLFVBQVU7QUFDdkQsa0JBQVEsS0FBSyxVQUFVO0FBQUEsWUFDckIsS0FBSyxLQUFLLGNBQWM7QUFDdEIsa0JBQUksVUFBVSxLQUFLO0FBQ25CLGtCQUFJLElBQUksTUFBTTtBQUNkLGtCQUFJLFFBQVEsS0FBSztBQUNqQix1QkFBUyxJQUFJLEdBQUdDLE9BQU9BLFFBQU8sTUFBTSxDQUFDLEdBQUksS0FBSztBQUM1QyxxQkFBSyxNQUFNQSxNQUFLLE9BQU8sT0FBTyxXQUFXQSxNQUFLLEtBQUssSUFBSTtBQUFBLGNBQ3pEO0FBQ0EsbUJBQUs7QUFDTCxrQkFBSSxhQUFhLE9BQU8sR0FBRztBQUN6Qix1QkFBTztBQUFBLGNBQ1Q7QUFDQSxxQkFBTyxJQUFJLGFBQWEsTUFBTSxRQUFRLElBQUksT0FBTyxVQUFVO0FBQUEsWUFDN0Q7QUFBQSxZQUNBLEtBQUssS0FBSyxXQUFXO0FBQ25CLGtCQUFJO0FBQUE7QUFBQSxnQkFBNEIsS0FBTTtBQUFBO0FBQ3RDLGtCQUFJLGNBQWMsaUJBQWlCLFdBQVcsU0FBUyxHQUFHO0FBQ3hELHVCQUFPO0FBQUEsY0FDVDtBQUNBLHFCQUFPLFdBQVcsSUFBSTtBQUFBLFlBQ3hCO0FBQUEsWUFDQSxLQUFLLEtBQUssY0FBYztBQUN0QixxQkFBTztBQUFBLGNBQWlDLEtBQU0sT0FBTztBQUFBLFlBQ3ZEO0FBQUEsWUFDQSxTQUFTO0FBQ1AscUJBQU8sUUFBUSxNQUFNLElBQUk7QUFDekIsb0JBQU0sSUFBSSxNQUFNLGlCQUFpQjtBQUFBLFlBQ25DO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFNQSxZQUFJLGVBQWUsU0FBVSxNQUFNLFVBQVU7QUFDM0MsY0FBSSxLQUFLLGNBQWMsWUFBWTtBQUNqQztBQUFBLFlBQTJDLEtBQU07QUFBQSxVQUNuRDtBQUNBLGNBQUksSUFBSTtBQUNSLGNBQUksS0FBSyxXQUFXLFNBQVMsSUFBSSxJQUFJLG1CQUFtQixJQUFJLEtBQUssSUFBSTtBQUNyRSxtQkFBUyxJQUFJLEdBQUcsSUFBSSxHQUFHLFFBQVEsT0FBTyxJQUFJLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxLQUFLO0FBQ25FLGlCQUFLLGFBQWEsT0FBTyxNQUFNLFFBQVE7QUFBQSxVQUN6QztBQUNBLGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFHQSxVQUFJLGlCQUFpQixjQUFjO0FBQ2pDLHNDQUE4QixhQUFhLFNBQVMsV0FDbEQsVUFDQSxNQUNBO0FBQ0EsY0FBSSxRQUFRLGtCQUFrQixLQUFLLFVBQVUsS0FBSztBQUdsRCxjQUFJLEtBQUssVUFBVTtBQUNqQixpQkFBSyxTQUFTLEtBQUs7QUFBQSxVQUNyQjtBQUNBLGNBQUksTUFBTTtBQUdSLGdDQUFvQjtBQUFBLGNBQ2xCLE1BQU07QUFBQSxjQUNOLGtCQUFrQixLQUFLLFNBQVMsU0FBUyxJQUFJO0FBQUEsWUFDL0M7QUFFQSx5QkFBYSxNQUFNLFNBQVMsU0FBUyxPQUFPO0FBQUEsVUFDOUM7QUFDQSxpQkFBTztBQUFBLFFBQ1Q7QUFLQSxZQUFJLGVBQWUsU0FBU0MsY0FBYSxPQUFPLFFBQVE7QUFFdEQsY0FBSSxDQUFDLE9BQU8sa0JBQWtCO0FBQzVCO0FBQUEsVUFDRjtBQUVBLGNBQUksS0FBSyxJQUFJLFFBQVEsWUFBWTtBQUNqQyxjQUFJLEdBQUcsV0FBVyxHQUFHO0FBQ25CO0FBQUEsVUFDRjtBQUNBLGNBQUksS0FBSyxJQUFJLE9BQU8sWUFBWTtBQUNoQyxtQkFBUyxJQUFJLEdBQUcsSUFBSSxHQUFHLFFBQVEsR0FBRyxHQUFHLElBQUksR0FBRyxLQUFLO0FBQy9DLGdCQUFJLEdBQUcsQ0FBQztBQUNSLGdCQUFJLEdBQUcsQ0FBQztBQUNSLGdCQUNFLGlDQUNBLDhCQUE4QixVQUM5QjtBQUNBLDRDQUE4QixTQUFTLENBQUM7QUFBQSxZQUMxQztBQUNBLGlDQUFxQixLQUFLLEVBQUUsWUFBWSxVQUFVLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUFBLFVBQ3BFO0FBQUEsUUFDRjtBQUdBLFlBQUksbUJBQW1CLFNBQVNDLGtCQUFpQixVQUFVO0FBQ3pELGNBQUksVUFBVSxJQUFJLFVBQVUsY0FBYztBQUMxQyxtQkFBUyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksUUFBUSxRQUFRLEtBQUs7QUFDOUMsZ0JBQUksUUFBUSxDQUFDO0FBQ2IsaUJBQUssc0JBQXNCLEtBQUssVUFBVSxRQUFRO0FBQ2xELGVBQUcsY0FBYyxFQUFFO0FBQ25CLGdCQUFJLFFBQVEsRUFBRTtBQUNkLHFCQUFTLEtBQUssR0FBRyxHQUFHLEtBQUssTUFBTSxRQUFRLE1BQU07QUFDM0Msa0JBQUksTUFBTSxFQUFFO0FBQ1osaUJBQUcsYUFBYSxFQUFFLE1BQU0sRUFBRSxLQUFLO0FBQUEsWUFDakM7QUFDQSxpQ0FBcUIsS0FBSyxFQUFFLFlBQVksSUFBSSxDQUFDO0FBQUEsVUFDL0M7QUFBQSxRQUNGO0FBSUEsWUFBSSxZQUFhLEtBQUssVUFBVSxZQUFZLFNBQVNSLFdBQVUsTUFBTTtBQUNuRSxjQUFJO0FBR0osY0FDRSxDQUFDLGdCQUNELHFCQUNBLGdCQUFnQixrQkFDaEI7QUFDQSxnQkFBSSxDQUFDLE1BQU07QUFDVCxxQkFBTyxLQUFLLGNBQWMsdUJBQXVCO0FBQUEsWUFDbkQsT0FBTztBQUNMLG9CQUFNLFdBQVcsS0FBSyxLQUFLLGVBQWUsTUFBTSxJQUFJO0FBQUEsWUFDdEQ7QUFBQSxVQUNGLFdBQ0UsS0FBSyxhQUFhLEtBQUssZ0JBQ3ZCLEtBQUssY0FBYyxnQkFDbkIsS0FBSyxnQkFBZ0IsU0FBUyxnQkFBZ0IsY0FDOUM7QUFDQSxrQkFBTSw4QkFBOEIsV0FBVyxNQUFNLElBQUk7QUFBQSxVQUMzRCxPQUFPO0FBQ0wsa0JBQU0sa0JBQWtCLEtBQUssTUFBTSxJQUFJO0FBQUEsVUFDekM7QUFFQSxjQUFJLE1BQU07QUFDUix5QkFBYSxLQUFLLElBQUk7QUFBQSxVQUN4QjtBQUNBLGlCQUFPO0FBQUEsUUFDVDtBQU9BLFlBQUksYUFBYyxTQUFTLFVBQVUsYUFBYSxTQUFTRSxZQUN6RCxTQUNBLE1BQ0E7QUFDQSxpQkFBTyxRQUFRO0FBQ2YsY0FBSSxRQUFRLGNBQWMsY0FBYztBQUN0QyxtQkFBTyw4QkFBOEIsV0FBVyxTQUFTLElBQUk7QUFBQSxVQUMvRCxPQUFPO0FBQ0wsZ0JBQUksTUFBTSxtQkFBbUIsS0FBSyxNQUFNLFNBQVMsSUFBSTtBQUNyRCxnQkFBSSxNQUFNO0FBQ1IsMkJBQWEsS0FBSyxPQUFPO0FBQ3pCLCtCQUFpQixHQUFHO0FBQUEsWUFDdEI7QUFDQSxtQkFBTztBQUFBLFVBQ1Q7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUVBLFVBQUksZUFBZTtBQUNqQixlQUFPLHNCQUFzQjtBQUFBLE1BQy9CO0FBQUEsSUFDRixHQUFHO0FBQUE7QUFBQTs7O0FDam9CSDtBQUFBO0FBQUEsS0FBQyxTQUFTTyxZQUFXO0FBQ3JCLFVBQUksRUFBRSxzQkFBcUIsT0FDeEI7QUFBQSxRQUVIO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWdCQSxZQUFJLENBQUMsT0FBTyxrQkFBa0I7QUFDMUIsaUJBQU8sbUJBQW9CLFNBQVVBLFlBQVc7QUFDNUM7QUFLQSxxQkFBU0Msa0JBQWlCLFVBQVU7QUFLaEMsbUJBQUssV0FBVyxDQUFDO0FBRWpCLG1CQUFLLFlBQVk7QUFBQSxZQUNyQjtBQU9BLHFCQUFTLHFCQUFxQixVQUFVO0FBQ3BDLGVBQUMsU0FBUyxRQUFRO0FBQ2Qsb0JBQUksWUFBWSxTQUFTLFlBQVk7QUFFckMsb0JBQUksVUFBVSxRQUFRO0FBRWxCLDJCQUFTLFVBQVUsV0FBVyxRQUFRO0FBQUEsZ0JBQzFDO0FBRUEseUJBQVMsV0FBVyxXQUFXLE9BQU9BLGtCQUFpQixPQUFPO0FBQUEsY0FDbEUsR0FBRztBQUFBLFlBQ1A7QUFPQSxZQUFBQSxrQkFBaUIsVUFBVTtBQU8zQixZQUFBQSxrQkFBaUIsWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxjQVN6QixTQUFTLFNBQVUsU0FBUyxRQUFRO0FBS2hDLG9CQUFJLFdBQVc7QUFBQSxrQkFDWCxNQUFNLENBQUMsRUFBRSxPQUFPLGNBQWMsT0FBTyxtQkFBbUIsT0FBTztBQUFBO0FBQUE7QUFBQSxrQkFJL0QsTUFBTSxDQUFDLENBQUMsT0FBTztBQUFBLGtCQUNmLGFBQWEsQ0FBQyxDQUFDLE9BQU87QUFBQSxrQkFDdEIsVUFBVSxDQUFDLEVBQUUsT0FBTyxpQkFBaUIsT0FBTztBQUFBLGdCQUNoRDtBQUVBLG9CQUFJLFVBQVUsS0FBSztBQUduQix5QkFBUyxJQUFJLEdBQUcsSUFBSSxRQUFRLFFBQVEsS0FBSztBQUNyQyxzQkFBSSxRQUFRLENBQUMsRUFBRSxRQUFRLFFBQVMsU0FBUSxPQUFPLEdBQUcsQ0FBQztBQUFBLGdCQUN2RDtBQUVBLG9CQUFJLE9BQU8saUJBQWlCO0FBS3hCLDJCQUFTLFVBQVUsT0FBTyxPQUFPLGlCQUFpQixTQUFVLEdBQUcsR0FBRztBQUM5RCxzQkFBRSxDQUFDLElBQUk7QUFDUCwyQkFBTztBQUFBLGtCQUNYLEdBQUcsQ0FBQyxDQUFDO0FBQUEsZ0JBQ1Q7QUFFQSx3QkFBUSxLQUFLO0FBQUEsa0JBQ1QsS0FBSztBQUFBLGtCQUNMLElBQUksdUJBQXVCLFNBQVMsUUFBUTtBQUFBLGdCQUNoRCxDQUFDO0FBR0Qsb0JBQUksQ0FBQyxLQUFLLFVBQVU7QUFDaEIsdUNBQXFCLElBQUk7QUFBQSxnQkFDN0I7QUFBQSxjQUNKO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBT0EsYUFBYSxXQUFZO0FBQ3JCLG9CQUFJLFlBQVksQ0FBQztBQUNqQixvQkFBSSxVQUFVLEtBQUs7QUFFbkIseUJBQVMsSUFBSSxHQUFHLElBQUksUUFBUSxRQUFRLEtBQUs7QUFDckMsMEJBQVEsQ0FBQyxFQUFFLEdBQUcsU0FBUztBQUFBLGdCQUMzQjtBQUVBLHVCQUFPO0FBQUEsY0FDWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FNQSxZQUFZLFdBQVk7QUFDcEIscUJBQUssV0FBVyxDQUFDO0FBQ2pCLDZCQUFhLEtBQUssUUFBUTtBQUUxQixxQkFBSyxXQUFXO0FBQUEsY0FDcEI7QUFBQSxZQUNKO0FBT0EscUJBQVMsZUFBZSxNQUFNO0FBQzFCLGtCQUFJLFdBQVc7QUFBQTtBQUFBLGdCQUNYLE1BQU07QUFBQSxnQkFDTixRQUFRO0FBQUEsZ0JBQ1IsWUFBWSxDQUFDO0FBQUEsZ0JBQ2IsY0FBYyxDQUFDO0FBQUEsZ0JBQ2YsaUJBQWlCO0FBQUEsZ0JBQ2pCLGFBQWE7QUFBQSxnQkFDYixlQUFlO0FBQUEsZ0JBQ2Ysb0JBQW9CO0FBQUEsZ0JBQ3BCLFVBQVU7QUFBQSxjQUNkO0FBQ0EsdUJBQVMsUUFBUSxNQUFNO0FBQ25CLG9CQUFJLElBQUksVUFBVSxJQUFJLEtBQUssS0FBSyxJQUFJLE1BQU1ELFdBQVcsVUFBUyxJQUFJLElBQUksS0FBSyxJQUFJO0FBQUEsY0FDbkY7QUFDQSxxQkFBTztBQUFBLFlBQ1g7QUFRQSxxQkFBUyx1QkFBdUIsU0FBUyxRQUFRO0FBRTdDLGtCQUFJLFlBQVksTUFBTSxTQUFTLE1BQU07QUFPckMscUJBQU8sU0FBVSxXQUFXO0FBQ3hCLG9CQUFJLE9BQU8sVUFBVSxRQUFRO0FBRTdCLG9CQUFJLE9BQU8sWUFBWSxRQUFRLGFBQWEsS0FBSyxRQUFRLGNBQWMsVUFBVSxVQUFVO0FBQ3ZGLDRCQUFVLEtBQUssSUFBSSxlQUFlO0FBQUEsb0JBQzlCLE1BQU07QUFBQSxvQkFDTixRQUFRO0FBQUEsb0JBQ1IsVUFBVSxVQUFVO0FBQUEsa0JBQ3hCLENBQUMsQ0FBQztBQUFBLGdCQUNOO0FBR0Esb0JBQUksT0FBTyxRQUFRLFVBQVUsTUFBTTtBQUMvQix5Q0FBdUIsV0FBVyxTQUFTLFVBQVUsTUFBTSxPQUFPLE9BQU87QUFBQSxnQkFDN0U7QUFHQSxvQkFBSSxPQUFPLFFBQVEsT0FBTyxhQUFhO0FBQ25DLDBCQUFRLGNBQWMsV0FBVyxTQUFTLFdBQVcsTUFBTTtBQUFBLGdCQUMvRDtBQUdBLG9CQUFJLFNBQVMsVUFBVSxXQUFXLE1BQU07QUFFcEMsOEJBQVksTUFBTSxTQUFTLE1BQU07QUFBQSxnQkFDckM7QUFBQSxjQUNKO0FBQUEsWUFDSjtBQU1BLGdCQUFJLGtCQUFrQixTQUFTLGNBQWMsR0FBRztBQUNoRCw0QkFBZ0IsTUFBTSxNQUFNO0FBQzVCLDhCQUFrQixnQkFBZ0IsV0FBVyxNQUFNLFNBQVM7QUFTNUQscUJBQVMsbUJBQW1CLElBQUlFLE9BQU07QUFJbEMscUJBQU9BLE1BQUs7QUFBQSxZQUNoQjtBQVNBLHFCQUFTLDBCQUEwQixJQUFJQSxPQUFNO0FBRXpDLHFCQUFPQSxNQUFLLFNBQVMsVUFBVUEsTUFBSyxRQUFRLEdBQUcsTUFBTTtBQUFBLFlBQ3pEO0FBRUEsZ0JBQUksb0JBQW9CLGtCQUFrQixxQkFBcUI7QUFXL0QscUJBQVMsdUJBQXVCLFdBQVcsU0FBUyxXQUFXLFFBQVE7QUFDbkUsa0JBQUksVUFBVSxDQUFDO0FBQ2Ysa0JBQUlDLGNBQWEsUUFBUTtBQUN6QixrQkFBSUQ7QUFDSixrQkFBSTtBQUNKLGtCQUFJLElBQUlDLFlBQVc7QUFDbkIscUJBQU8sS0FBSztBQUNSLGdCQUFBRCxRQUFPQyxZQUFXLENBQUM7QUFDbkIsdUJBQU9ELE1BQUs7QUFDWixvQkFBSSxDQUFDLFVBQVUsSUFBSSxRQUFRLElBQUksR0FBRztBQUM5QixzQkFBSSxrQkFBa0IsU0FBU0EsS0FBSSxNQUFNLFVBQVUsSUFBSSxHQUFHO0FBRXRELDhCQUFVLEtBQUssZUFBZTtBQUFBLHNCQUMxQixNQUFNO0FBQUEsc0JBQ04sUUFBUTtBQUFBLHNCQUNSLGVBQWU7QUFBQSxzQkFDZixVQUFVLFVBQVUsSUFBSTtBQUFBLHNCQUN4QixvQkFBb0JBLE1BQUs7QUFBQTtBQUFBLG9CQUM3QixDQUFDLENBQUM7QUFBQSxrQkFDTjtBQUNBLDBCQUFRLElBQUksSUFBSTtBQUFBLGdCQUNwQjtBQUFBLGNBQ0o7QUFDQSxtQkFBSyxRQUFRLFdBQVc7QUFDcEIsb0JBQUksQ0FBRSxRQUFRLElBQUksR0FBSTtBQUNsQiw0QkFBVSxLQUFLLGVBQWU7QUFBQSxvQkFDMUIsUUFBUTtBQUFBLG9CQUNSLE1BQU07QUFBQSxvQkFDTixlQUFlO0FBQUEsb0JBQ2YsVUFBVSxVQUFVLElBQUk7QUFBQSxrQkFDNUIsQ0FBQyxDQUFDO0FBQUEsZ0JBQ047QUFBQSxjQUNKO0FBQUEsWUFDSjtBQWNBLHFCQUFTLGNBQWMsV0FBVyxTQUFTLFdBQVcsUUFBUTtBQUUxRCxrQkFBSTtBQU9KLHVCQUFTLGlCQUFpQixXQUFXLE1BQU0sT0FBTyxVQUFVLGVBQWU7QUFFdkUsb0JBQUksV0FBVyxVQUFVLFNBQVM7QUFHbEMsb0JBQUlFLFdBQVUsQ0FBQyxHQUFHLFdBQVcsaUJBQWlCO0FBQzlDLG9CQUFJO0FBQ0osb0JBQUk7QUFDSixvQkFBSTtBQUNKLHVCQUFRLFdBQVcsVUFBVSxJQUFJLEdBQUk7QUFDakMseUJBQU8sTUFBTSxTQUFTLENBQUM7QUFDdkIsOEJBQVksU0FBUyxTQUFTLENBQUM7QUFJL0Isc0JBQUksT0FBTyxRQUFRQSxZQUFXLEtBQUssSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLEtBQUssVUFBVTtBQUN6RSw4QkFBVSxLQUFLLGVBQWU7QUFBQSxzQkFDMUIsTUFBTTtBQUFBLHNCQUNOLFFBQVE7QUFBQSxzQkFDUixZQUFZLENBQUMsSUFBSTtBQUFBLHNCQUNqQixjQUFjLENBQUMsSUFBSTtBQUFBO0FBQUEsc0JBRW5CLGFBQWEsS0FBSztBQUFBLHNCQUNsQixpQkFBaUIsS0FBSztBQUFBLG9CQUMxQixDQUFDLENBQUM7QUFDRixvQkFBQUE7QUFBQSxrQkFDSjtBQUdBLHNCQUFJLE9BQU8sUUFBUSxVQUFVLEtBQU0sd0JBQXVCLFdBQVcsTUFBTSxVQUFVLE1BQU0sT0FBTyxPQUFPO0FBQ3pHLHNCQUFJLE9BQU8sWUFBWSxLQUFLLGFBQWEsS0FBSyxLQUFLLGNBQWMsVUFBVSxVQUFVO0FBQ2pGLDhCQUFVLEtBQUssZUFBZTtBQUFBLHNCQUMxQixNQUFNO0FBQUEsc0JBQ04sUUFBUTtBQUFBLHNCQUNSLFVBQVUsVUFBVTtBQUFBLG9CQUN4QixDQUFDLENBQUM7QUFBQSxrQkFDTjtBQUVBLHNCQUFJLE9BQU8sWUFBYSxlQUFjLE1BQU0sU0FBUztBQUFBLGdCQUN6RDtBQUFBLGNBQ0o7QUFPQSx1QkFBUyxjQUFjLE1BQU0sS0FBSztBQUM5QixvQkFBSSxRQUFRLEtBQUs7QUFDakIsb0JBQUksV0FBVyxJQUFJO0FBQ25CLG9CQUFJLE9BQU8sTUFBTTtBQUVqQixvQkFBSSxPQUFPLFdBQVcsU0FBUyxTQUFTO0FBS3hDLG9CQUFJQztBQUVKLG9CQUFJO0FBQ0osb0JBQUk7QUFDSixvQkFBSTtBQUVKLG9CQUFJO0FBRUosb0JBQUk7QUFDSixvQkFBSTtBQUVKLG9CQUFJLGdCQUFnQjtBQUdwQixvQkFBSSxJQUFJLEdBQUcsSUFBSTtBQUVmLHVCQUFPLElBQUksUUFBUSxJQUFJLE1BQU07QUFFekIseUJBQU8sTUFBTSxDQUFDO0FBQ2QsOEJBQVksU0FBUyxDQUFDO0FBQ3RCLHlCQUFPLGFBQWEsVUFBVTtBQUU5QixzQkFBSSxTQUFTLE1BQU07QUFFZix3QkFBSSxPQUFPLFFBQVEsVUFBVSxLQUFvRCx3QkFBdUIsV0FBVyxNQUFNLFVBQVUsTUFBTSxPQUFPLE9BQU87QUFFdkosd0JBQUksT0FBTyxZQUFZLFVBQVUsYUFBYUwsY0FBYSxLQUFLLGNBQWMsVUFBVSxVQUFVO0FBQzlGLGdDQUFVLEtBQUssZUFBZTtBQUFBLHdCQUMxQixNQUFNO0FBQUEsd0JBQ04sUUFBUTtBQUFBLHdCQUNSLFVBQVUsVUFBVTtBQUFBLHNCQUN4QixDQUFDLENBQUM7QUFBQSxvQkFDTjtBQUdBLHdCQUFJLFVBQVcsa0JBQWlCLFdBQVcsTUFBTSxPQUFPLFVBQVUsYUFBYTtBQUcvRSx3QkFBSSxPQUFPLGdCQUFnQixLQUFLLFdBQVcsVUFBVSxVQUFVLFFBQVEsVUFBVSxLQUFLLFFBQVMsZUFBYyxNQUFNLFNBQVM7QUFFNUg7QUFDQTtBQUFBLGtCQUNKLE9BQU87QUFDSCw0QkFBUTtBQUNSLHdCQUFJLENBQUNLLE1BQUs7QUFDTixzQkFBQUEsT0FBTSxDQUFDO0FBQ1Asa0NBQVksQ0FBQztBQUFBLG9CQUNqQjtBQUNBLHdCQUFJLE1BQU07QUFFTiwwQkFBSSxDQUFFQSxLQUFJLEtBQUssYUFBYSxJQUFJLENBQUMsR0FBSTtBQUVqQyx3QkFBQUEsS0FBSSxFQUFFLElBQUk7QUFFViw2QkFBSyxNQUFNLGtCQUFrQixVQUFVLE1BQU0sQ0FBQyxPQUFPLElBQUk7QUFDckQsOEJBQUksT0FBTyxNQUFNO0FBQ2Isc0NBQVUsS0FBSyxlQUFlO0FBQUEsOEJBQzFCLE1BQU07QUFBQSw4QkFDTixRQUFRO0FBQUEsOEJBQ1IsWUFBWSxDQUFDLElBQUk7QUFBQTtBQUFBLDhCQUNqQixhQUFhLEtBQUs7QUFBQSw4QkFDbEIsaUJBQWlCLEtBQUs7QUFBQSw0QkFDMUIsQ0FBQyxDQUFDO0FBQ0Y7QUFBQSwwQkFDSjtBQUFBLHdCQUNKLE9BQU87QUFDSCxvQ0FBVSxLQUFLO0FBQUE7QUFBQSw0QkFDWDtBQUFBLDRCQUNBLEdBQUc7QUFBQSwwQkFDUCxDQUFDO0FBQUEsd0JBQ0w7QUFBQSxzQkFDSjtBQUNBO0FBQUEsb0JBQ0o7QUFFQSx3QkFBSTtBQUFBLG9CQUVBLFNBQVMsTUFBTSxDQUFDLEdBQ2xCO0FBQ0UsMEJBQUksQ0FBRUEsS0FBSSxLQUFLLGFBQWEsSUFBSSxDQUFDLEdBQUk7QUFDakMsd0JBQUFBLEtBQUksRUFBRSxJQUFJO0FBQ1YsNkJBQUssTUFBTSxRQUFRLE9BQU8sTUFBTSxDQUFDLE9BQU8sSUFBSTtBQUN4Qyw4QkFBSSxPQUFPLE1BQU07QUFDYixzQ0FBVSxLQUFLLGVBQWU7QUFBQSw4QkFDMUIsTUFBTTtBQUFBLDhCQUNOLFFBQVEsSUFBSTtBQUFBLDhCQUNaLGNBQWMsQ0FBQyxJQUFJO0FBQUEsOEJBQ25CLGFBQWEsU0FBUyxJQUFJLENBQUM7QUFBQTtBQUFBLDhCQUMzQixpQkFBaUIsU0FBUyxJQUFJLENBQUM7QUFBQSw0QkFDbkMsQ0FBQyxDQUFDO0FBQ0Y7QUFBQSwwQkFDSjtBQUFBLHdCQUNKLE9BQU87QUFDSCxvQ0FBVSxLQUFLO0FBQUEsNEJBQ1gsR0FBRztBQUFBLDRCQUNIO0FBQUEsMEJBQ0osQ0FBQztBQUFBLHdCQUNMO0FBQUEsc0JBQ0o7QUFDQTtBQUFBLG9CQUNKO0FBQUEsa0JBQ0o7QUFBQSxnQkFDSjtBQUdBLG9CQUFJLFVBQVcsa0JBQWlCLFdBQVcsTUFBTSxPQUFPLFVBQVUsYUFBYTtBQUFBLGNBQ25GO0FBQ0EsNEJBQWMsU0FBUyxTQUFTO0FBQ2hDLHFCQUFPO0FBQUEsWUFDWDtBQVVBLHFCQUFTLE1BQU0sU0FBUyxRQUFRO0FBQzVCLGtCQUFJLFVBQVU7QUFDZCxxQkFBUSxTQUFTLEtBQUtDLFVBQVM7QUFDM0Isb0JBQUksWUFBWTtBQUFBO0FBQUEsa0JBRVosTUFBTUE7QUFBQSxnQkFDVjtBQUlBLG9CQUFJLE9BQU8sYUFBYUEsU0FBUSxhQUFhLEtBQUtBLFNBQVEsYUFBYSxJQUFJO0FBQ3ZFLDRCQUFVLFdBQVdBLFNBQVE7QUFBQSxnQkFDakMsT0FFSztBQUdELHNCQUFJLE9BQU8sUUFBUSxXQUFXQSxTQUFRLGFBQWEsR0FBRztBQUtsRCw4QkFBVSxPQUFPLE9BQU9BLFNBQVEsWUFBWSxTQUFVQyxPQUFNTCxPQUFNO0FBQzlELDBCQUFJLENBQUMsT0FBTyxXQUFXLE9BQU8sUUFBUUEsTUFBSyxJQUFJLEdBQUc7QUFDOUMsd0JBQUFLLE1BQUtMLE1BQUssSUFBSSxJQUFJLGtCQUFrQkksVUFBU0osS0FBSTtBQUFBLHNCQUNyRDtBQUNBLDZCQUFPSztBQUFBLG9CQUNYLEdBQUcsQ0FBQyxDQUFDO0FBQUEsa0JBQ1Q7QUFHQSxzQkFBSSxZQUFhLE9BQU8sUUFBUSxPQUFPLFlBQWMsT0FBTyxRQUFRLE9BQU8sY0FBZTtBQUV0Riw4QkFBVSxPQUFPLElBQUlELFNBQVEsWUFBWSxJQUFJO0FBQUEsa0JBQ2pEO0FBRUEsNEJBQVUsT0FBTztBQUFBLGdCQUNyQjtBQUNBLHVCQUFPO0FBQUEsY0FDWCxFQUFHLE9BQU87QUFBQSxZQUNkO0FBVUEscUJBQVMsa0JBQWtCLEtBQUssT0FBTyxLQUFLO0FBQ3hDLHFCQUFPLFFBQVEsS0FBSyxPQUFPLEtBQUssMEJBQTBCLE1BQU0sQ0FBQztBQUFBLFlBQ3JFO0FBR0EsZ0JBQUksVUFBVTtBQUVkLGdCQUFJLFVBQVU7QUFRZCxxQkFBUyxhQUFhLE1BQU07QUFDeEIsa0JBQUk7QUFDQSx1QkFBTyxLQUFLLE9BQU8sS0FBSyxPQUFPLElBQUksS0FBSyxPQUFPLEtBQUs7QUFBQSxjQUN4RCxTQUFTLEtBQUs7QUFDVixvQkFBSTtBQUNBLHlCQUFPLEtBQUs7QUFBQSxnQkFDaEIsU0FBUyxRQUFRO0FBQ2IseUJBQU87QUFBQSxnQkFDWDtBQUFBLGNBQ0o7QUFBQSxZQUNKO0FBT0EscUJBQVMsSUFBSSxLQUFLLFVBQVU7QUFDeEIsa0JBQUksVUFBVSxDQUFDO0FBQ2YsdUJBQVMsUUFBUSxHQUFHLFFBQVEsSUFBSSxRQUFRLFNBQVM7QUFDN0Msd0JBQVEsS0FBSyxJQUFJLFNBQVMsSUFBSSxLQUFLLEdBQUcsT0FBTyxHQUFHO0FBQUEsY0FDcEQ7QUFDQSxxQkFBTztBQUFBLFlBQ1g7QUFRQSxxQkFBUyxPQUFPLEtBQUssVUFBVUMsT0FBTTtBQUNqQyx1QkFBUyxRQUFRLEdBQUcsUUFBUSxJQUFJLFFBQVEsU0FBUztBQUM3QyxnQkFBQUEsUUFBTyxTQUFTQSxPQUFNLElBQUksS0FBSyxHQUFHLE9BQU8sR0FBRztBQUFBLGNBQ2hEO0FBQ0EscUJBQU9BO0FBQUEsWUFDWDtBQVNBLHFCQUFTLFFBQVEsS0FBSyxNQUFNLEtBQUssTUFBTTtBQUNuQyxxQkFBc0IsTUFBTSxJQUFJLFFBQVEsT0FBTztBQUMzQyxxQkFBSyxPQUFPLElBQUksR0FBRyxFQUFFLElBQUksSUFBSSxJQUFJLEdBQUcsT0FBTyxLQUFNLFFBQU87QUFBQSxjQUM1RDtBQUNBLHFCQUFPO0FBQUEsWUFDWDtBQU9BLHFCQUFTLElBQUksS0FBSyxNQUFNO0FBQ3BCLHFCQUFPLElBQUksSUFBSSxNQUFNUDtBQUFBLFlBQ3pCO0FBR0EscUJBQVMsMEJBQTBCLEdBQUc7QUFDbEMscUJBQU87QUFBQSxZQUNYO0FBRUEsbUJBQU9DO0FBQUEsVUFDWCxFQUFHLE1BQU07QUFBQSxRQUNiO0FBQUEsTUFDQTtBQUFBLElBQUMsR0FBRyxLQUFLLGFBQWEsT0FBTyxVQUFVLFVBQVUsYUFBYSxPQUFPLFFBQVEsUUFBUSxhQUFhLE9BQU8sVUFBVSxVQUFVLENBQUMsQ0FBQztBQUFBO0FBQUE7OztBQ2xuQi9IO0FBQUE7QUFBQSxLQUFDLFNBQVNPLFlBQVc7QUFDckIsVUFBSSxDQUFFLFNBQVMsVUFDWjtBQUVILFNBQUMsV0FBVztBQUVYLG1CQUFTLFNBQVMsTUFBTTtBQUN2QixnQkFBSSxFQUFFLEtBQUssWUFBWTtBQUN0QixvQkFBTSxJQUFJLFVBQVUsd0JBQXdCO0FBQUEsWUFDN0M7QUFFQSxlQUFHO0FBQ0Ysa0JBQUksU0FBUyxNQUFNO0FBQ2xCLHVCQUFPO0FBQUEsY0FDUjtBQUFBLFlBRUQsU0FBUyxPQUFPLFFBQVEsS0FBSztBQUU3QixtQkFBTztBQUFBLFVBQ1I7QUFHQSxjQUFJLGlCQUFpQixRQUFRLGNBQWMsWUFBWSxXQUFXO0FBQ2pFLGdCQUFJO0FBQ0gscUJBQU8sWUFBWSxVQUFVO0FBQUEsWUFDOUIsU0FBUyxHQUFHO0FBQUEsWUFBQztBQUFBLFVBQ2Q7QUFFQSxjQUFJLFVBQVUsTUFBTTtBQUNuQixpQkFBSyxVQUFVLFdBQVc7QUFBQSxVQUMzQixPQUFPO0FBQ04scUJBQVMsV0FBVyxRQUFRLFVBQVUsV0FBVztBQUFBLFVBQ2xEO0FBQUEsUUFFRCxHQUFFO0FBQUEsTUFDRjtBQUFBLElBQUMsR0FBRyxLQUFLLGFBQWEsT0FBTyxVQUFVLFVBQVUsYUFBYSxPQUFPLFFBQVEsUUFBUSxhQUFhLE9BQU8sVUFBVSxVQUFVLENBQUMsQ0FBQztBQUFBO0FBQUE7OztBQ25DL0g7QUFBQSxtR0FBQUMsVUFBQTtBQUNDLEtBQUMsV0FBVTtBQUFFLFVBQUk7QUFBRSxlQUFPLFVBQVUsSUFBSSxPQUFPLFVBQVUsS0FBSyxDQUFDO0FBQUcsZUFBTyxVQUFVLEVBQUUsNkJBQTZCLElBQUksT0FBTyxVQUFVLEVBQUUsNkJBQTZCLEtBQUs7QUFBQSxNQUFVLFNBQVEsS0FBSztBQUFBLE1BQUM7QUFBQSxJQUFFLEdBQUc7QUFDek0sS0FBQyxXQUFVO0FBU1g7QUFBYSxVQUFJO0FBQUUsZUFBUyxHQUFHLEdBQUU7QUFBQyxZQUFJLElBQUU7QUFBRSxlQUFPLFdBQVU7QUFBQyxpQkFBTyxJQUFFLEVBQUUsU0FBTyxFQUFDLE1BQUssT0FBRyxPQUFNLEVBQUUsR0FBRyxFQUFDLElBQUUsRUFBQyxNQUFLLEtBQUU7QUFBQSxRQUFDO0FBQUEsTUFBQztBQUFDLGVBQVMsRUFBRSxHQUFFO0FBQUMsWUFBSSxJQUFFLGVBQWEsT0FBTyxVQUFRLE9BQU8sWUFBVSxFQUFFLE9BQU8sUUFBUTtBQUFFLGVBQU8sSUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFFLEVBQUMsTUFBSyxHQUFHLENBQUMsRUFBQztBQUFBLE1BQUM7QUFBQyxlQUFTLEVBQUUsR0FBRTtBQUFDLFlBQUcsRUFBRSxhQUFhLFFBQU87QUFBQyxjQUFFLEVBQUUsQ0FBQztBQUFFLG1CQUFRLEdBQUUsSUFBRSxDQUFDLEdBQUUsRUFBRSxJQUFFLEVBQUUsS0FBSyxHQUFHLE9BQU0sR0FBRSxLQUFLLEVBQUUsS0FBSztBQUFFLGNBQUU7QUFBQSxRQUFDO0FBQUMsZUFBTztBQUFBLE1BQUM7QUFDbFYsZUFBUyxHQUFHLEdBQUU7QUFBQyxZQUFFLENBQUMsWUFBVSxPQUFPLGNBQVksWUFBVyxHQUFFLFlBQVUsT0FBTyxVQUFRLFFBQU8sWUFBVSxPQUFPLFFBQU0sTUFBSyxZQUFVLE9BQU8sVUFBUSxNQUFNO0FBQUUsaUJBQVEsSUFBRSxHQUFFLElBQUUsRUFBRSxRQUFPLEVBQUUsR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFLENBQUM7QUFBRSxjQUFHLEtBQUcsRUFBRSxRQUFNLEtBQUssUUFBTztBQUFBLFFBQUM7QUFBQyxjQUFNLE1BQU0sMkJBQTJCO0FBQUEsTUFBRTtBQUFDLFVBQUksS0FBRyxHQUFHLElBQUk7QUFBRSxlQUFTLEtBQUk7QUFBQSxNQUFDO0FBQUMsU0FBRyxVQUFVLFNBQU8sV0FBVTtBQUFDLGVBQU0sQ0FBQztBQUFBLE1BQUM7QUFBRSxlQUFTLEVBQUUsR0FBRTtBQUFDLFVBQUUsWUFBVSxFQUFFLFVBQVEsSUFBSTtBQUFJLGVBQU8sRUFBRTtBQUFBLE1BQU87QUFBQyxlQUFTLEVBQUUsR0FBRTtBQUFDLGVBQU8sS0FBRyxFQUFFO0FBQUEsTUFBTztBQUFDO0FBQUMsVUFBSSxJQUFFLE9BQU8sWUFBVSxDQUFDO0FBQUUsUUFBRSxLQUFHLEVBQUUsQ0FBQyxRQUFRLFVBQVUsZ0JBQWMsQ0FBQyxLQUFLLFVBQVU7QUFBYSxVQUFJLEtBQUcsT0FBTyx5QkFBeUIsS0FBSyxXQUFVLFlBQVk7QUFBRSxRQUFFLElBQUUsQ0FBQyxFQUFFLE1BQUksR0FBRyxnQkFBYyxHQUFHO0FBQUssUUFBRSxJQUFFLEVBQUUsU0FBTyxDQUFDLEVBQUU7QUFBRyxRQUFFLElBQUUsRUFBRSxXQUFTO0FBQUcsUUFBRSxJQUFFLEVBQUU7QUFBa0IsUUFBRSxJQUFFLGdCQUFjLEVBQUU7QUFBRSxVQUFJO0FBQUcsVUFBSSxLQUFHLEVBQUU7QUFBNEIsV0FBRyxLQUFHLENBQUMsVUFBUyxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsSUFBRSxLQUFHO0FBQU8sUUFBRSxLQUFHO0FBQUcsUUFBRSxJQUFFLFVBQVUsVUFBVSxNQUFNLFNBQVM7QUFDMzFCLGVBQVMsS0FBSTtBQUFDLGVBQU8sU0FBUyxVQUFVLHNCQUFvQix3QkFBc0I7QUFBQSxNQUFtQjtBQUFDLGVBQVMsRUFBRSxHQUFFO0FBQUMsZ0JBQU8sSUFBRSxFQUFFLENBQUMsTUFBSSxXQUFTLEVBQUU7QUFBQSxNQUFVO0FBQUMsZUFBUyxFQUFFLEdBQUU7QUFBQyxlQUFPLGFBQWE7QUFBQSxNQUFVO0FBQUMsZUFBUyxHQUFHLEdBQUU7QUFBQyxnQkFBTyxLQUFHLElBQUUsRUFBRSxDQUFDLE1BQUksRUFBRSxTQUFPLEdBQUcsQ0FBQztBQUFBLE1BQUM7QUFBQyxVQUFJLElBQUUsUUFBUSxXQUFVLEtBQUcsRUFBRSxXQUFTLEVBQUUsbUJBQWlCLEVBQUUsc0JBQW9CLEVBQUUscUJBQW1CLEVBQUUsb0JBQWtCLEVBQUUsdUJBQXNCLEtBQUcsU0FBUyxlQUFlLEVBQUUsR0FBRSxLQUFHLEdBQUUsS0FBRyxDQUFDO0FBQ2hiLE1BQUMsSUFBSSxpQkFBaUIsV0FBVTtBQUFDLGVBQUssR0FBRyxTQUFRLEtBQUc7QUFBQyxhQUFHLE1BQU0sRUFBRTtBQUFBLFFBQUMsU0FBTyxHQUFFO0FBQUMsZ0JBQU0sR0FBRyxjQUFZLE1BQUs7QUFBQSxRQUFFO0FBQUEsTUFBQyxDQUFDLEVBQUcsUUFBUSxJQUFHLEVBQUMsZUFBYyxLQUFFLENBQUM7QUFBRSxlQUFTLEdBQUcsR0FBRTtBQUFDLFdBQUcsS0FBSyxDQUFDO0FBQUUsV0FBRyxjQUFZO0FBQUEsTUFBSTtBQUFDLFVBQUksS0FBRyxTQUFTLFdBQVMsU0FBUyxHQUFFLEdBQUU7QUFBQyxlQUFPLEVBQUUsd0JBQXdCLENBQUM7QUFBQSxNQUFDLElBQUUsU0FBUyxHQUFFLEdBQUU7QUFBQyxlQUFPLE1BQUksS0FBRyxFQUFFLG1CQUFpQixFQUFFLGdCQUFnQix3QkFBd0IsQ0FBQztBQUFBLE1BQUM7QUFBRSxlQUFTLEdBQUcsR0FBRSxHQUFFO0FBQUMsZUFBSyxLQUFHO0FBQUMsY0FBRyxLQUFHLEVBQUUsUUFBTTtBQUFHLGNBQUUsRUFBRTtBQUFBLFFBQWtCO0FBQUMsZUFBTTtBQUFBLE1BQUU7QUFDNWEsZUFBUyxFQUFFLEdBQUU7QUFBQyxpQkFBUSxJQUFFLEVBQUUsU0FBTyxHQUFFLEtBQUcsR0FBRSxLQUFJO0FBQUMsY0FBSSxJQUFFLEVBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRSxhQUFhLElBQUksS0FBRyxFQUFFLGFBQWEsTUFBTTtBQUFFLGVBQUcsYUFBVyxLQUFHLE1BQU0sQ0FBQyxNQUFJLEVBQUUsQ0FBQyxJQUFFO0FBQUEsUUFBRTtBQUFDLFVBQUUsT0FBSyxTQUFTLEdBQUU7QUFBQyxpQkFBTyxFQUFFLENBQUM7QUFBQSxRQUFDO0FBQUUsVUFBRSxZQUFVLFNBQVMsR0FBRTtBQUFDLGNBQUcsYUFBVyxLQUFHLE1BQU0sQ0FBQyxLQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQU8sRUFBRSxDQUFDO0FBQUUsbUJBQVEsSUFBRSxFQUFFLENBQUMsR0FBRSxJQUFFLEVBQUUsS0FBSyxHQUFFLENBQUMsRUFBRSxNQUFLLElBQUUsRUFBRSxLQUFLLEVBQUUsS0FBRyxJQUFFLEVBQUUsUUFBTyxFQUFFLGFBQWEsSUFBSSxLQUFHLEVBQUUsYUFBYSxNQUFNLE1BQUksRUFBRSxRQUFPO0FBQUUsaUJBQU87QUFBQSxRQUFJO0FBQUUsZUFBTztBQUFBLE1BQUM7QUFBQyxlQUFTLEdBQUcsR0FBRTtBQUFDLFlBQUksSUFBRSxDQUFDO0FBQUUsYUFBSSxJQUFFLEVBQUUsMkJBQTBCLEdBQUUsSUFBRSxFQUFFLDJCQUEyQixHQUFFLEtBQUssQ0FBQztBQUFFLGVBQU87QUFBQSxNQUFDO0FBQ3ZlLGVBQVMsR0FBRyxHQUFFO0FBQUMsWUFBSSxJQUFFLENBQUM7QUFBRSxhQUFJLElBQUUsRUFBRSxvQkFBbUIsR0FBRSxJQUFFLEVBQUUsb0JBQW9CLEdBQUUsS0FBSyxDQUFDO0FBQUUsZUFBTztBQUFBLE1BQUM7QUFBQyxlQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUU7QUFBQyxVQUFFLGVBQWE7QUFBRyxZQUFHLEVBQUUsTUFBTSxHQUFFLENBQUMsSUFBRSxFQUFFO0FBQUEsWUFBVyxLQUFHO0FBQUMsaUJBQU8sZUFBZSxHQUFFLEdBQUUsQ0FBQztBQUFBLFFBQUMsU0FBTyxHQUFFO0FBQUEsUUFBQztBQUFBLE1BQUM7QUFBQyxlQUFTLEVBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLFlBQUUsV0FBUyxJQUFFLEtBQUc7QUFBRSxpQkFBUSxLQUFLLEVBQUUsTUFBRyxLQUFHLEVBQUUsUUFBUSxDQUFDLEtBQUcsR0FBRyxHQUFFLElBQUUsR0FBRSxFQUFFLENBQUMsQ0FBQztBQUFBLE1BQUM7QUFBQyxlQUFTLEdBQUcsR0FBRSxHQUFFO0FBQUMsaUJBQVEsS0FBSyxFQUFFLE1BQUssS0FBRyxHQUFHLEdBQUUsR0FBRSxFQUFFLENBQUMsQ0FBQztBQUFBLE1BQUM7QUFBQyxlQUFTLEVBQUUsR0FBRTtBQUFDLFlBQUksSUFBRSxDQUFDO0FBQUUsZUFBTyxvQkFBb0IsQ0FBQyxFQUFFLFFBQVEsU0FBUyxHQUFFO0FBQUMsWUFBRSxDQUFDLElBQUUsT0FBTyx5QkFBeUIsR0FBRSxDQUFDO0FBQUEsUUFBQyxDQUFDO0FBQUUsZUFBTztBQUFBLE1BQUM7QUFDeGQsZUFBUyxHQUFHLEdBQUUsR0FBRTtBQUFDLGlCQUFRLElBQUUsT0FBTyxvQkFBb0IsQ0FBQyxHQUFFLElBQUUsR0FBRSxHQUFFLElBQUUsRUFBRSxRQUFPLElBQUksS0FBRSxFQUFFLENBQUMsR0FBRSxFQUFFLENBQUMsSUFBRSxFQUFFLENBQUM7QUFBQSxNQUFDO0FBQUMsZUFBUyxHQUFHLEdBQUU7QUFBQyxlQUFPLGFBQWEsT0FBSyxJQUFFLFNBQVMsZUFBZSxLQUFHLENBQUM7QUFBQSxNQUFDO0FBQUMsZUFBUyxFQUFFLEdBQUU7QUFBQyxpQkFBUSxJQUFFLENBQUMsR0FBRSxJQUFFLEdBQUUsSUFBRSxVQUFVLFFBQU8sRUFBRSxFQUFFLEdBQUUsQ0FBQyxJQUFFLFVBQVUsQ0FBQztBQUFFLFlBQUcsTUFBSSxFQUFFLE9BQU8sUUFBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQUUsWUFBRSxTQUFTLHVCQUF1QjtBQUFFLFlBQUUsRUFBRSxDQUFDO0FBQUUsaUJBQVEsSUFBRSxFQUFFLEtBQUssR0FBRSxDQUFDLEVBQUUsTUFBSyxJQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUUsWUFBWSxHQUFHLEVBQUUsS0FBSyxDQUFDO0FBQUUsZUFBTztBQUFBLE1BQUM7QUFDblksZUFBUyxHQUFHLEdBQUU7QUFBQyxZQUFJO0FBQUUsYUFBSSxJQUFFLFdBQVMsSUFBRSxJQUFFLEdBQUUsSUFBRSxHQUFFLElBQUksS0FBRSxFQUFFLE9BQU8sU0FBUyxHQUFFLEdBQUU7QUFBQyxnQkFBTSxRQUFRLENBQUMsSUFBRSxFQUFFLEtBQUssTUFBTSxHQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUUsRUFBRSxLQUFLLENBQUM7QUFBRSxpQkFBTztBQUFBLFFBQUMsR0FBRSxDQUFDLENBQUM7QUFBRSxlQUFPO0FBQUEsTUFBQztBQUFDLGVBQVMsR0FBRyxHQUFFO0FBQUMsWUFBSSxJQUFFLENBQUMsR0FBRSxJQUFFLG9CQUFJO0FBQUksWUFBRSxFQUFFLENBQUM7QUFBRSxpQkFBUSxJQUFFLEVBQUUsS0FBSyxHQUFFLENBQUMsRUFBRSxNQUFLLElBQUUsRUFBRSxLQUFLLEVBQUUsS0FBRSxFQUFFLE9BQU0sRUFBRSxJQUFJLENBQUMsTUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFFLEVBQUUsSUFBSSxDQUFDO0FBQUcsZUFBTztBQUFBLE1BQUM7QUFBQztBQUFDLFVBQUksSUFBRSxDQUFDLEdBQUU7QUFBRyxlQUFTLEdBQUcsR0FBRTtBQUFDLGVBQUssS0FBRyxNQUFHLEdBQUcsQ0FBQztBQUFHLFVBQUUsS0FBSyxDQUFDO0FBQUEsTUFBQztBQUFDLGVBQVMsSUFBRztBQUFDLGFBQUc7QUFBRyxpQkFBUSxJQUFFLENBQUMsQ0FBQyxFQUFFLFFBQU8sRUFBRSxTQUFRLEdBQUUsTUFBTSxFQUFFO0FBQUUsZUFBTztBQUFBLE1BQUM7QUFBQyxRQUFFLE9BQUs7QUFBRSxlQUFTLEtBQUk7QUFBQyxhQUFLLElBQUU7QUFBRyxhQUFLLGFBQVcsQ0FBQztBQUFFLGFBQUssZUFBYSxDQUFDO0FBQUUsYUFBSyxJQUFFLG9CQUFJO0FBQUEsTUFBRztBQUFDLGVBQVMsR0FBRyxHQUFFO0FBQUMsVUFBRSxNQUFJLEVBQUUsSUFBRSxNQUFHLEdBQUcsV0FBVTtBQUFDLFlBQUUsTUFBTTtBQUFBLFFBQUMsQ0FBQztBQUFBLE1BQUU7QUFBQyxTQUFHLFVBQVUsUUFBTSxXQUFVO0FBQUMsWUFBRyxLQUFLLEdBQUU7QUFBQyxlQUFLLElBQUU7QUFBRyxjQUFJLElBQUUsS0FBSyxZQUFZO0FBQUUsWUFBRSxVQUFRLEtBQUssRUFBRSxRQUFRLFNBQVMsR0FBRTtBQUFDLGNBQUUsQ0FBQztBQUFBLFVBQUMsQ0FBQztBQUFBLFFBQUM7QUFBQSxNQUFDO0FBQUUsU0FBRyxVQUFVLGNBQVksV0FBVTtBQUFDLFlBQUcsS0FBSyxXQUFXLFVBQVEsS0FBSyxhQUFhLFFBQU87QUFBQyxjQUFJLElBQUUsQ0FBQyxFQUFDLFlBQVcsS0FBSyxZQUFXLGNBQWEsS0FBSyxhQUFZLENBQUM7QUFBRSxlQUFLLGFBQVcsQ0FBQztBQUFFLGVBQUssZUFBYSxDQUFDO0FBQUUsaUJBQU87QUFBQSxRQUFDO0FBQUMsZUFBTSxDQUFDO0FBQUEsTUFBQztBQUNqM0IsZUFBUyxHQUFHLEdBQUUsR0FBRTtBQUFDLFlBQUksSUFBRSxFQUFFLENBQUM7QUFBRSxVQUFFLE1BQUksRUFBRSxJQUFFLElBQUk7QUFBSSxVQUFFLEVBQUUsRUFBRSxJQUFJLENBQUM7QUFBRSxZQUFJLElBQUUsRUFBRTtBQUFFLGVBQU0sRUFBQyxHQUFFLEdBQUUsSUFBRyxHQUFFLElBQUcsR0FBRSxhQUFZLFdBQVU7QUFBQyxpQkFBTyxFQUFFLFlBQVk7QUFBQSxRQUFDLEVBQUM7QUFBQSxNQUFDO0FBQUMsZUFBUyxHQUFHLEdBQUU7QUFBQyxZQUFJLElBQUUsS0FBRyxFQUFFO0FBQUcsY0FBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRSxFQUFFLEVBQUUsU0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUU7QUFBQSxNQUFNO0FBQ3ROLGVBQVMsR0FBRyxHQUFFLEdBQUU7QUFBQyxZQUFJLElBQUUsRUFBRSxZQUFZO0FBQUUsZUFBTyxFQUFFLElBQUksU0FBUyxHQUFFO0FBQUMsY0FBSSxJQUFFLE1BQUksRUFBRSxPQUFPLFlBQVk7QUFBRSxjQUFHLEtBQUcsRUFBRSxZQUFXO0FBQUMsZ0JBQUcsSUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sU0FBUyxHQUFFO0FBQUMscUJBQU8sTUFBSSxFQUFFLFlBQVk7QUFBQSxZQUFDLENBQUMsR0FBRSxFQUFFLE9BQU8sUUFBTyxJQUFFLE9BQU8sT0FBTyxDQUFDLEdBQUUsT0FBTyxlQUFlLEdBQUUsY0FBYSxFQUFDLE9BQU0sR0FBRSxjQUFhLEtBQUUsQ0FBQyxHQUFFO0FBQUEsVUFBQyxXQUFTLEVBQUUsUUFBTztBQUFBLFFBQUMsQ0FBQyxFQUFFLE9BQU8sU0FBUyxHQUFFO0FBQUMsaUJBQU87QUFBQSxRQUFDLENBQUM7QUFBQSxNQUFDO0FBQUM7QUFBQyxVQUFJLEtBQUcsZUFBYyxLQUFHO0FBQWUsZUFBUyxHQUFHLEdBQUU7QUFBQyxnQkFBTyxHQUFFO0FBQUEsVUFBQyxLQUFLO0FBQUksbUJBQU07QUFBQSxVQUFRLEtBQUs7QUFBSSxtQkFBTTtBQUFBLFVBQU8sS0FBSztBQUFJLG1CQUFNO0FBQUEsVUFBTyxLQUFLO0FBQUksbUJBQU07QUFBQSxVQUFTLEtBQUs7QUFBUyxtQkFBTTtBQUFBLFFBQVE7QUFBQSxNQUFDO0FBQUMsZUFBUyxHQUFHLEdBQUU7QUFBQyxpQkFBUSxJQUFFLENBQUMsR0FBRSxJQUFFLEdBQUUsSUFBRSxFQUFFLFFBQU8sSUFBSSxHQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUU7QUFBRyxlQUFPO0FBQUEsTUFBQztBQUFDLFVBQUksS0FBRyxHQUFHLHNGQUFzRixNQUFNLEdBQUcsQ0FBQyxHQUFFLEtBQUcsR0FBRyw4REFBOEQsTUFBTSxHQUFHLENBQUM7QUFDcnhCLGVBQVMsR0FBRyxHQUFFLEdBQUU7QUFBQyx1QkFBYSxFQUFFLGNBQVksSUFBRSxFQUFFO0FBQVMsaUJBQVEsSUFBRSxJQUFHLElBQUUsSUFBRSxFQUFFLENBQUMsSUFBRSxFQUFFLFlBQVcsSUFBRSxHQUFFLElBQUUsRUFBRSxRQUFPLElBQUUsUUFBTyxJQUFFLE1BQUksSUFBRSxFQUFFLENBQUMsSUFBRyxLQUFJO0FBQUMsYUFBRTtBQUFDLGdCQUFJQyxLQUFFO0FBQUUsZ0JBQUksSUFBRSxHQUFFLElBQUU7QUFBRSxvQkFBT0EsR0FBRSxVQUFTO0FBQUEsY0FBQyxLQUFLLEtBQUs7QUFBYSxvQkFBRUEsR0FBRTtBQUFVLHlCQUFRLElBQUUsTUFBSSxHQUFFLElBQUVBLEdBQUUsWUFBVyxJQUFFLEdBQUUsR0FBRSxJQUFFLEVBQUUsQ0FBQyxHQUFFLElBQUksTUFBRyxNQUFJLEVBQUUsT0FBSyxPQUFLLEVBQUUsTUFBTSxRQUFRLElBQUcsRUFBRSxJQUFFO0FBQUkscUJBQUc7QUFBSSxnQkFBQUEsS0FBRSxHQUFHLENBQUMsSUFBRSxJQUFFLElBQUUsR0FBR0EsSUFBRSxDQUFDLElBQUUsT0FBSyxJQUFFO0FBQUksc0JBQU07QUFBQSxjQUFFLEtBQUssS0FBSztBQUFVLGdCQUFBQSxLQUFFQSxHQUFFO0FBQUssZ0JBQUFBLEtBQUUsS0FBRyxHQUFHLEVBQUUsU0FBUyxJQUFFQSxLQUFFQSxHQUFFLFFBQVEsSUFBRyxFQUFFO0FBQUUsc0JBQU07QUFBQSxjQUFFLEtBQUssS0FBSztBQUFhLGdCQUFBQSxLQUFFLFNBQVVBLEdBQUUsT0FBSztBQUFTLHNCQUFNO0FBQUEsY0FBRTtBQUFRLHNCQUFNLE9BQU8sUUFBUSxNQUFNQSxFQUFDLEdBQzlnQixNQUFNLGlCQUFpQjtBQUFBLFlBQUU7QUFBQSxVQUFDO0FBQUMsZUFBR0E7QUFBQSxRQUFDO0FBQUMsZUFBTztBQUFBLE1BQUM7QUFBQztBQUFDLFVBQUksSUFBRSxFQUFFLEdBQUUsS0FBRyxFQUFDLGVBQWMsU0FBUyxHQUFFO0FBQUMsZUFBTyxLQUFLLDZCQUE2QixDQUFDO0FBQUEsTUFBQyxHQUFFLGtCQUFpQixTQUFTLEdBQUU7QUFBQyxlQUFPLEtBQUssZ0NBQWdDLENBQUM7QUFBQSxNQUFDLEVBQUMsR0FBRSxLQUFHLENBQUM7QUFBRSxlQUFTLEdBQUcsR0FBRTtBQUFDLFdBQUcsQ0FBQyxJQUFFLFNBQVMsR0FBRTtBQUFDLGlCQUFPLEVBQUUsb0JBQWtCLENBQUM7QUFBQSxRQUFDO0FBQUEsTUFBQztBQUFDLGVBQVMsRUFBRSxHQUFFLEdBQUU7QUFBQyxVQUFFLEdBQUUsR0FBRSxpQkFBaUI7QUFBRSxpQkFBUSxLQUFLLEVBQUUsSUFBRyxDQUFDO0FBQUEsTUFBQztBQUFDLGVBQVMsRUFBRSxHQUFFLEdBQUU7QUFBQyxZQUFFLFdBQVMsSUFBRSxDQUFDLElBQUU7QUFBRSxpQkFBUSxJQUFFLEdBQUUsSUFBRSxFQUFFLFFBQU8sS0FBSTtBQUFDLGNBQUksSUFBRSxFQUFFLENBQUMsR0FBRSxJQUFFLE9BQU8seUJBQXlCLEdBQUUsQ0FBQztBQUFFLGdCQUFJLE9BQU8sZUFBZSxHQUFFLG9CQUFrQixHQUFFLENBQUMsR0FBRSxFQUFFLFFBQU0sR0FBRyxDQUFDLE1BQUksR0FBRyxDQUFDLElBQUUsRUFBRSxTQUFPLEdBQUcsQ0FBQztBQUFBLFFBQUU7QUFBQSxNQUFDO0FBQzFoQixVQUFJLElBQUUsU0FBUyxpQkFBaUIsVUFBUyxXQUFXLFVBQVMsTUFBSyxLQUFFLEdBQUUsSUFBRSxTQUFTLGlCQUFpQixVQUFTLFdBQVcsY0FBYSxNQUFLLEtBQUUsR0FBRSxLQUFHLFNBQVMsZUFBZSxtQkFBbUIsT0FBTztBQUFFLGVBQVMsR0FBRyxHQUFFO0FBQUMsaUJBQVEsR0FBRSxJQUFFLEVBQUUsNEJBQTJCLEdBQUUsMkJBQTJCLENBQUM7QUFBQSxNQUFDO0FBQUMsVUFBSSxLQUFHLENBQUMscUJBQW9CLG9CQUFtQixZQUFXLG1CQUFtQixHQUFFLEtBQUcsQ0FBQyxpQkFBZ0Isb0JBQW1CLFVBQVMsV0FBVSxpQkFBaUI7QUFDcmIsZUFBUyxLQUFJO0FBQUMsWUFBSSxJQUFFLENBQUMsaUJBQWdCLG9CQUFtQixxQkFBcUI7QUFBRSxlQUFPLGVBQWEsRUFBRSxPQUFPLFlBQVksV0FBVSxDQUFDLEdBQUUsV0FBUyxPQUFPLG1DQUFpQyxFQUFFLE9BQU8sV0FBVSxDQUFDLE1BQUksRUFBRSxLQUFLLFdBQVUsQ0FBQyxHQUFFLEVBQUUsT0FBTyxXQUFVLENBQUMsR0FBRSxFQUFFLGVBQWUsV0FBVSxDQUFDO0FBQUcsWUFBRSxFQUFFLEtBQUssV0FBVSxtR0FBbUcsTUFBTSxHQUFHLENBQUMsSUFBRSxFQUFFLEtBQUssV0FBVSxFQUFDLFlBQVcsRUFBQyxLQUFJLFdBQVU7QUFBQyxZQUFFLGNBQVk7QUFBSyxpQkFBTyxFQUFFLFdBQVc7QUFBQSxRQUFDLEVBQUMsR0FBRSxZQUFXLEVBQUMsS0FBSSxXQUFVO0FBQUMsWUFBRSxjQUM5Z0I7QUFBSyxpQkFBTyxFQUFFLFdBQVc7QUFBQSxRQUFDLEVBQUMsR0FBRSxXQUFVLEVBQUMsS0FBSSxXQUFVO0FBQUMsWUFBRSxjQUFZO0FBQUssaUJBQU8sRUFBRSxVQUFVO0FBQUEsUUFBQyxFQUFDLEdBQUUsaUJBQWdCLEVBQUMsS0FBSSxXQUFVO0FBQUMsWUFBRSxjQUFZO0FBQUssaUJBQU8sRUFBRSxnQkFBZ0I7QUFBQSxRQUFDLEVBQUMsR0FBRSxhQUFZLEVBQUMsS0FBSSxXQUFVO0FBQUMsWUFBRSxjQUFZO0FBQUssaUJBQU8sRUFBRSxZQUFZO0FBQUEsUUFBQyxFQUFDLEdBQUUsWUFBVyxFQUFDLEtBQUksV0FBVTtBQUFDLGNBQUksSUFBRSxDQUFDO0FBQUUsWUFBRSxjQUFZO0FBQUssbUJBQVEsSUFBRSxFQUFFLFdBQVcsR0FBRSxJQUFHLEdBQUUsS0FBSyxDQUFDLEdBQUUsSUFBRSxFQUFFLFlBQVk7QUFBRSxpQkFBTztBQUFBLFFBQUMsRUFBQyxHQUFFLGVBQWMsRUFBQyxLQUFJLFdBQVU7QUFBQyxZQUFFLGNBQVk7QUFBSyxpQkFBTyxFQUFFLFdBQVc7QUFBQSxRQUFDLEVBQUMsR0FBRSxhQUFZLEVBQUMsS0FBSSxXQUFVO0FBQUMsa0JBQU8sS0FBSyxVQUFTO0FBQUEsWUFBQyxLQUFLLEtBQUs7QUFBQSxZQUFhLEtBQUssS0FBSztBQUF1Qix1QkFBUSxJQUM5aUIsU0FBUyxpQkFBaUIsTUFBSyxXQUFXLFdBQVUsTUFBSyxLQUFFLEdBQUUsSUFBRSxJQUFHLEdBQUUsSUFBRSxFQUFFLFNBQVMsSUFBRyxNQUFHLEVBQUU7QUFBVSxxQkFBTztBQUFBLFlBQUU7QUFBUSxxQkFBTyxLQUFLO0FBQUEsVUFBUztBQUFBLFFBQUMsR0FBRSxLQUFJLFNBQVMsR0FBRTtBQUFDLGNBQUcsZ0JBQWMsT0FBTyxLQUFHLFNBQU8sRUFBRSxLQUFFO0FBQUcsa0JBQU8sS0FBSyxVQUFTO0FBQUEsWUFBQyxLQUFLLEtBQUs7QUFBQSxZQUFhLEtBQUssS0FBSztBQUF1QixpQkFBRyxJQUFJO0FBQUUsZUFBQyxJQUFFLEVBQUUsVUFBUSxLQUFLLGFBQVcsS0FBSyxpQkFBZSxLQUFLLDRCQUE0QixTQUFTLGVBQWUsQ0FBQyxHQUFFLE1BQU07QUFBRTtBQUFBLFlBQU07QUFBUSxtQkFBSyxZQUFVO0FBQUEsVUFBQztBQUFBLFFBQUMsRUFBQyxFQUFDLENBQUM7QUFBRSxVQUFFLEtBQUssV0FBVSx1RUFBdUUsTUFBTSxHQUFHLENBQUM7QUFDdmhCLFVBQUUsWUFBWSxXQUFVLENBQUMsaUJBQWdCLFVBQVUsQ0FBQztBQUFFLFlBQUUsRUFBQyxtQkFBa0IsRUFBQyxLQUFJLFdBQVU7QUFBQyxZQUFFLGNBQVk7QUFBSyxpQkFBTyxFQUFFLFdBQVc7QUFBQSxRQUFDLEVBQUMsR0FBRSxrQkFBaUIsRUFBQyxLQUFJLFdBQVU7QUFBQyxZQUFFLGNBQVk7QUFBSyxpQkFBTyxFQUFFLFVBQVU7QUFBQSxRQUFDLEVBQUMsR0FBRSxVQUFTLEVBQUMsS0FBSSxXQUFVO0FBQUMsY0FBSSxJQUFFLENBQUM7QUFBRSxZQUFFLGNBQVk7QUFBSyxtQkFBUSxJQUFFLEVBQUUsV0FBVyxHQUFFLElBQUcsR0FBRSxLQUFLLENBQUMsR0FBRSxJQUFFLEVBQUUsWUFBWTtBQUFFLGlCQUFPLEVBQUUsQ0FBQztBQUFBLFFBQUMsRUFBQyxHQUFFLG1CQUFrQixFQUFDLEtBQUksV0FBVTtBQUFDLGlCQUFPLEtBQUssV0FBUyxLQUFLLFNBQVMsU0FBTztBQUFBLFFBQUMsRUFBQyxFQUFDO0FBQUUsYUFBRyxFQUFFLFFBQVEsV0FBVSxFQUFFLEdBQUUsRUFBRSxRQUFRLFdBQVU7QUFBQSxVQUFDO0FBQUEsVUFBeUI7QUFBQSxVQUN0ZTtBQUFBLFVBQVk7QUFBQSxRQUFXLENBQUMsR0FBRSxFQUFFLFlBQVksV0FBVSxDQUFDLFlBQVcsYUFBWSxXQUFXLENBQUMsTUFBSSxFQUFFLFFBQVEsV0FBVSxDQUFDLEdBQUUsRUFBRSxRQUFRLFdBQVUsRUFBQyx3QkFBdUIsRUFBQyxLQUFJLFdBQVU7QUFBQyxZQUFFLGNBQVk7QUFBSyxpQkFBTyxFQUFFLGdCQUFnQjtBQUFBLFFBQUMsRUFBQyxHQUFFLG9CQUFtQixFQUFDLEtBQUksV0FBVTtBQUFDLFlBQUUsY0FBWTtBQUFLLGlCQUFPLEVBQUUsWUFBWTtBQUFBLFFBQUMsRUFBQyxHQUFFLFdBQVUsRUFBQyxLQUFJLFdBQVU7QUFBQyxpQkFBTyxHQUFHLE1BQUssRUFBRTtBQUFBLFFBQUMsR0FBRSxLQUFJLFNBQVMsR0FBRTtBQUFDLGNBQUksSUFBRSxlQUFhLEtBQUssWUFBVSxLQUFLLFVBQVE7QUFBSyxhQUFHLENBQUM7QUFBRSxjQUFJLElBQUUsS0FBSyxhQUFXO0FBQU0sY0FBRSxLQUFLLGdCQUFjLEtBQUssaUJBQWUsR0FBRyxlQUM1ZSxHQUFHLGdCQUFnQixLQUFLLGNBQWEsQ0FBQyxJQUFFLEdBQUcsY0FBYyxDQUFDO0FBQUUsWUFBRSxZQUFVO0FBQUUsZUFBSSxJQUFFLGVBQWEsS0FBSyxZQUFVLEVBQUUsVUFBUSxHQUFFLElBQUUsRUFBRSw0QkFBMkIsR0FBRSw0QkFBNEIsR0FBRSxNQUFNO0FBQUEsUUFBQyxFQUFDLEdBQUUsV0FBVSxFQUFDLEtBQUksV0FBVTtBQUFDLGlCQUFPLEtBQUssYUFBYSxPQUFPLEtBQUc7QUFBQSxRQUFFLEdBQUUsS0FBSSxTQUFTLEdBQUU7QUFBQyxlQUFLLGFBQWEsU0FBUSxDQUFDO0FBQUEsUUFBQyxFQUFDLEVBQUMsQ0FBQztBQUFHLFVBQUUsUUFBUSxXQUFVLG9GQUFvRixNQUFNLEdBQUcsQ0FBQztBQUFFLFVBQUUsUUFBUSxXQUFVLEVBQUU7QUFBRSxVQUFFLFlBQVksV0FBVSxDQUFDLFNBQVEsTUFBTSxDQUFDO0FBQUUsZUFBTyx1QkFDamYsRUFBRSxPQUFPLG9CQUFvQixXQUFVLENBQUMsV0FBVyxDQUFDO0FBQUUsWUFBRSxFQUFFLGlCQUFpQixXQUFVLEVBQUUsSUFBRSxFQUFFLGlCQUFpQixXQUFVLENBQUM7QUFBRSxVQUFFLGlCQUFpQixXQUFVLEVBQUU7QUFBRSxhQUFHLEVBQUUsU0FBUyxXQUFVLEVBQUUsR0FBRSxFQUFFLFNBQVMsV0FBVSxDQUFDLGVBQWUsQ0FBQyxLQUFHLEVBQUUsU0FBUyxXQUFVLENBQUM7QUFBRSxVQUFFLFNBQVMsV0FBVSxDQUFDLGNBQWEsa0JBQWlCLG9CQUFtQixHQUFHLENBQUMsQ0FBQztBQUFFLFVBQUUsU0FBUyxXQUFVLEVBQUU7QUFBQSxNQUFDO0FBQUM7QUFBQyxVQUFJLEtBQUcsRUFBRSxFQUFDLElBQUksYUFBWTtBQUFDLGVBQU8sS0FBSztBQUFBLE1BQWtCLEdBQUUsSUFBSSxhQUFZO0FBQUMsZUFBTyxLQUFLO0FBQUEsTUFBa0IsR0FBRSxJQUFJLFlBQVc7QUFBQyxlQUFPLEtBQUs7QUFBQSxNQUFpQixHQUFFLElBQUksb0JBQW1CO0FBQUMsZUFBTyxLQUFLO0FBQUEsTUFBeUIsR0FBRSxJQUFJLFdBQVU7QUFBQyxlQUFPLEtBQUs7QUFBQSxNQUFnQixHQUFFLElBQUksb0JBQW1CO0FBQUMsZUFBTyxLQUFLO0FBQUEsTUFBeUIsR0FBRSxJQUFJLG1CQUFrQjtBQUFDLGVBQU8sS0FBSztBQUFBLE1BQXdCLEdBQUUsSUFBSSxhQUFZO0FBQUMsZUFBTyxLQUFLO0FBQUEsTUFBa0IsRUFBQyxDQUFDLEdBQUUsS0FBRyxFQUFFLEVBQUMsSUFBSSxjQUFhO0FBQUMsZUFBTyxLQUFLO0FBQUEsTUFBbUIsR0FBRSxJQUFJLFlBQVksR0FBRTtBQUFDLGFBQUssc0JBQ3QyQjtBQUFBLE1BQUMsR0FBRSxJQUFJLFlBQVc7QUFBQyxlQUFPLEtBQUs7QUFBQSxNQUFpQixHQUFFLElBQUksVUFBVSxHQUFFO0FBQUMsYUFBSyxvQkFBa0I7QUFBQSxNQUFDLEVBQUMsQ0FBQyxHQUFFLEtBQUcsRUFBRSxFQUFDLElBQUksZ0JBQWU7QUFBQyxlQUFPLEtBQUs7QUFBQSxNQUFxQixHQUFFLElBQUksYUFBWTtBQUFDLGVBQU8sS0FBSztBQUFBLE1BQWtCLEdBQUUsSUFBSSxjQUFhO0FBQUMsZUFBTyxLQUFLO0FBQUEsTUFBbUIsR0FBRSxJQUFJLGtCQUFpQjtBQUFDLGVBQU8sS0FBSztBQUFBLE1BQXVCLEdBQUUsSUFBSSxxQkFBb0I7QUFBQyxlQUFPLEtBQUs7QUFBQSxNQUEwQixHQUFFLElBQUkseUJBQXdCO0FBQUMsZUFBTyxLQUFLO0FBQUEsTUFBOEIsR0FBRSxJQUFJLFlBQVc7QUFBQyxlQUFPLEtBQUs7QUFBQSxNQUFpQixHQUFFLElBQUksVUFBVSxHQUFFO0FBQUMsYUFBSyxvQkFDMWdCO0FBQUEsTUFBQyxFQUFDLENBQUM7QUFBRSxlQUFTLEdBQUcsR0FBRTtBQUFDLGlCQUFRLEtBQUssR0FBRTtBQUFDLGNBQUksSUFBRSxFQUFFLENBQUM7QUFBRSxnQkFBSSxFQUFFLGFBQVc7QUFBQSxRQUFHO0FBQUEsTUFBQztBQUFDLFNBQUcsRUFBRTtBQUFFLFNBQUcsRUFBRTtBQUFFLFNBQUcsRUFBRTtBQUFFLFVBQUksS0FBRyxFQUFFLEtBQUcsU0FBSyxFQUFFLEdBQUUsS0FBRyxLQUFHLFdBQVU7QUFBQSxNQUFDLElBQUUsU0FBUyxHQUFFO0FBQUMsWUFBSSxJQUFFLEVBQUUsQ0FBQztBQUFFLFVBQUUsTUFBSSxFQUFFLElBQUUsTUFBRyxHQUFHLEdBQUUsRUFBRTtBQUFBLE1BQUUsR0FBRSxLQUFHLEtBQUcsV0FBVTtBQUFBLE1BQUMsSUFBRSxTQUFTLEdBQUU7QUFBQyxZQUFJLElBQUUsRUFBRSxDQUFDO0FBQUUsVUFBRSxNQUFJLEVBQUUsSUFBRSxNQUFHLEdBQUcsR0FBRSxFQUFFLEdBQUUsT0FBTyxrQkFBZ0IsT0FBTyxlQUFlLDZCQUEyQixDQUFDLEVBQUUsS0FBRyxHQUFHLEdBQUUsRUFBRTtBQUFBLE1BQUU7QUFBRSxVQUFJLElBQUUsb0JBQWtCLEtBQUssSUFBSSxHQUFFLEtBQUcsV0FBVTtBQUFDLFlBQUksSUFBRSxPQUFPLHlCQUF5QixNQUFNLFdBQVUsVUFBVTtBQUFFLGVBQU8sSUFBRSxTQUFTLEdBQUU7QUFBQyxpQkFBTyxFQUFFLElBQUksS0FBSyxDQUFDO0FBQUEsUUFBQyxJQUFFO0FBQUEsTUFBSSxFQUFFLEdBQUUsS0FBRyxXQUFVO0FBQUMsaUJBQVMsSUFBRztBQUFBLFFBQUM7QUFBQyxZQUFJLElBQUUsT0FBRyxJQUFFLEVBQUMsSUFBSSxVQUFTO0FBQUMsY0FBRTtBQUFHLGlCQUFNO0FBQUEsUUFBRSxFQUFDO0FBQUUsZUFBTyxpQkFBaUIsUUFBTyxHQUFFLENBQUM7QUFBRSxlQUFPLG9CQUFvQixRQUFPLEdBQUUsQ0FBQztBQUFFLGVBQU87QUFBQSxNQUFDLEVBQUU7QUFBRSxlQUFTLEdBQUcsR0FBRTtBQUFDLFlBQUcsU0FBTyxLQUFHLGFBQVcsT0FBTyxLQUFHLGVBQWEsT0FBTyxHQUFFO0FBQUMsY0FBSSxJQUFFLENBQUMsQ0FBQztBQUFFLGNBQUksSUFBRTtBQUFBLFFBQUUsT0FBSztBQUFDLGNBQUUsQ0FBQyxDQUFDLEVBQUU7QUFBUSxjQUFFLENBQUMsQ0FBQyxFQUFFO0FBQUssY0FBSSxJQUFFLEVBQUU7QUFBQSxRQUFDO0FBQUMsZUFBTSxFQUFDLEdBQUUsR0FBRSxTQUFRLEdBQUUsTUFBSyxHQUFFLEdBQUUsS0FBRyxJQUFFLEVBQUM7QUFBQSxNQUFDO0FBQ3J6QixVQUFJLEtBQUc7QUFBQSxRQUFDLE1BQUs7QUFBQSxRQUFHLE9BQU07QUFBQSxRQUFHLFNBQVE7QUFBQSxRQUFHLFVBQVM7QUFBQSxRQUFHLE9BQU07QUFBQSxRQUFHLFVBQVM7QUFBQSxRQUFHLFdBQVU7QUFBQSxRQUFHLFlBQVc7QUFBQSxRQUFHLFlBQVc7QUFBQSxRQUFHLFdBQVU7QUFBQSxRQUFHLFVBQVM7QUFBQSxRQUFHLFdBQVU7QUFBQSxRQUFHLFNBQVE7QUFBQSxRQUFHLE9BQU07QUFBQSxRQUFHLGFBQVk7QUFBQSxRQUFHLE9BQU07QUFBQSxRQUFHLFNBQVE7QUFBQSxRQUFHLE9BQU07QUFBQSxRQUFHLGtCQUFpQjtBQUFBLFFBQUcsbUJBQWtCO0FBQUEsUUFBRyxnQkFBZTtBQUFBLFFBQUcsWUFBVztBQUFBLFFBQUcsVUFBUztBQUFBLFFBQUcsV0FBVTtBQUFBLFFBQUcsYUFBWTtBQUFBLFFBQUcsYUFBWTtBQUFBLFFBQUcsY0FBYTtBQUFBLFFBQUcsYUFBWTtBQUFBLFFBQUcsYUFBWTtBQUFBLFFBQUcsV0FBVTtBQUFBLFFBQUcsZUFBYztBQUFBLFFBQUcsWUFBVztBQUFBLFFBQUcsY0FBYTtBQUFBLFFBQUcsbUJBQWtCO0FBQUEsUUFBRyxvQkFBbUI7QUFBQSxRQUFHLFdBQVU7QUFBQSxRQUNuZixNQUFLO0FBQUEsUUFBRyxXQUFVO0FBQUEsUUFBRyxXQUFVO0FBQUEsUUFBRyxVQUFTO0FBQUEsUUFBRyxNQUFLO0FBQUEsUUFBRyxTQUFRO0FBQUEsUUFBRyxhQUFZO0FBQUEsUUFBRyxZQUFXO0FBQUEsUUFBRyxhQUFZO0FBQUEsUUFBRyxVQUFTO0FBQUEsTUFBRSxHQUFFLEtBQUcsRUFBQyxpQkFBZ0IsTUFBRyx5QkFBd0IsTUFBRywwQkFBeUIsTUFBRyx1QkFBc0IsTUFBRyxpQkFBZ0IsTUFBRyw2QkFBNEIsTUFBRyxnQkFBZSxNQUFHLDRCQUEyQixNQUFHLG9CQUFtQixLQUFFO0FBQUUsZUFBUyxHQUFHLEdBQUU7QUFBQyxlQUFPLGFBQWEsT0FBSyxFQUFFLG9CQUFvQixJQUFFO0FBQUEsTUFBQztBQUMzWixlQUFTLEVBQUUsR0FBRSxHQUFFO0FBQUMsWUFBSSxJQUFFLENBQUMsR0FBRSxJQUFFO0FBQUUsYUFBSSxJQUFFLEdBQUcsQ0FBQyxHQUFFLElBQUcsR0FBRSxLQUFLLENBQUMsR0FBRSxJQUFFLEVBQUUsdUJBQXFCLEVBQUUsdUJBQXFCLEVBQUUsYUFBVyxLQUFLLDBCQUF3QixFQUFFLFNBQU8sS0FBRyxNQUFJLEtBQUcsRUFBRSxPQUFLLEVBQUU7QUFBbUIsVUFBRSxFQUFFLFNBQU8sQ0FBQyxNQUFJLFlBQVUsRUFBRSxLQUFLLE1BQU07QUFBRSxlQUFPO0FBQUEsTUFBQztBQUFDLGVBQVMsR0FBRyxHQUFFO0FBQUMsVUFBRSxtQkFBaUIsRUFBRSxpQkFBZSxFQUFFLEVBQUUsUUFBTyxJQUFFO0FBQUcsZUFBTyxFQUFFO0FBQUEsTUFBYztBQUFDLGVBQVMsR0FBRyxHQUFFLEdBQUU7QUFBQyxZQUFHLENBQUMsRUFBRSxRQUFPO0FBQUUsWUFBRSxFQUFFLEdBQUUsSUFBRTtBQUFFLGlCQUFRLElBQUUsR0FBRSxHQUFFLElBQUUsUUFBTyxHQUFFLElBQUUsUUFBTyxJQUFFLEVBQUUsUUFBTyxJQUFJLEtBQUcsSUFBRSxFQUFFLENBQUMsR0FBRSxJQUFFLEdBQUcsQ0FBQyxHQUFFLE1BQUksTUFBSSxJQUFFLEVBQUUsUUFBUSxDQUFDLEdBQUUsSUFBRSxJQUFHLENBQUMsRUFBRSxDQUFDLEtBQUcsS0FBRyxFQUFFLFFBQU87QUFBQSxNQUFDO0FBQ3plLFVBQUksS0FBRyxFQUFDLElBQUksV0FBVTtBQUFDLG1CQUFTLEtBQUssZUFBYSxLQUFHLEtBQUssYUFBVyxjQUFZLEtBQUssUUFBTSxlQUFhLEtBQUssUUFBTSxHQUFHLElBQUksSUFBRSxVQUFLLEtBQUssY0FBWSxLQUFLLGFBQVcsR0FBRyxLQUFLLElBQUk7QUFBSSxlQUFPLEtBQUssY0FBWTtBQUFBLE1BQUUsR0FBRSxjQUFhLFdBQVU7QUFBQyxhQUFLLG1CQUFpQixLQUFLLGlCQUFlLEVBQUUsS0FBSyxVQUFTLEtBQUssUUFBUTtBQUFHLGVBQU8sS0FBSztBQUFBLE1BQWMsR0FBRSxJQUFJLFNBQVE7QUFBQyxlQUFPLEdBQUcsS0FBSyxpQkFBZSxLQUFLLHlCQUF3QixLQUFLLGFBQWEsQ0FBQztBQUFBLE1BQUMsR0FBRSxJQUFJLGdCQUFlO0FBQUMsWUFBRyxDQUFDLEtBQUssZ0JBQWdCLFFBQU87QUFBSyxhQUFLLGdDQUN4ZSxLQUFLLDhCQUE0QixFQUFFLEtBQUssaUJBQWdCLElBQUU7QUFBRyxlQUFPLEdBQUcsS0FBSyxpQkFBZSxLQUFLLHlCQUF3QixLQUFLLDJCQUEyQjtBQUFBLE1BQUMsR0FBRSxpQkFBZ0IsV0FBVTtBQUFDLGNBQU0sVUFBVSxnQkFBZ0IsS0FBSyxJQUFJO0FBQUUsYUFBSyxJQUFFO0FBQUEsTUFBRSxHQUFFLDBCQUF5QixXQUFVO0FBQUMsY0FBTSxVQUFVLHlCQUF5QixLQUFLLElBQUk7QUFBRSxhQUFLLElBQUUsS0FBSyxnQ0FBOEI7QUFBQSxNQUFFLEVBQUMsR0FBRSxLQUFHLEVBQUUsS0FBRyxPQUFPLHlCQUF5QixNQUFNLFdBQVUsWUFBWTtBQUN4YixhQUFLLE9BQU8sZUFBZSxJQUFHLGNBQWEsRUFBQyxLQUFJLFdBQVU7QUFBQyxlQUFPLEtBQUssa0JBQWdCLEtBQUssU0FBTyxNQUFNLFlBQVUsS0FBSztBQUFBLE1BQXlCLEdBQUUsWUFBVyxNQUFHLGNBQWEsS0FBRSxDQUFDLEdBQUUsT0FBTyxlQUFlLElBQUcsNkJBQTRCLEVBQUU7QUFBRyxlQUFTLEdBQUcsR0FBRTtBQUFDLGlCQUFTLEVBQUUsR0FBRSxHQUFFO0FBQUMsY0FBRSxJQUFJLEVBQUUsR0FBRSxDQUFDO0FBQUUsWUFBRSxhQUFXLEtBQUcsQ0FBQyxDQUFDLEVBQUU7QUFBUyxpQkFBTztBQUFBLFFBQUM7QUFBQyxVQUFFLFlBQVU7QUFBRSxVQUFFLFlBQVUsRUFBRTtBQUFVLGVBQU87QUFBQSxNQUFDO0FBQUMsVUFBSSxLQUFHLEVBQUMsT0FBTSxNQUFHLE1BQUssS0FBRTtBQUFFLGVBQVMsR0FBRyxHQUFFO0FBQUMsZUFBTyxFQUFFLGFBQVcsRUFBRSxVQUFRLEVBQUUsb0JBQWtCLEVBQUU7QUFBQSxNQUFhO0FBQ3hkLGVBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRTtBQUFDLFlBQUcsSUFBRSxFQUFFLGNBQVksRUFBRSxXQUFXLEVBQUUsSUFBSSxLQUFHLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsVUFBUSxJQUFFLEdBQUUsSUFBRyxJQUFFLEVBQUUsQ0FBQyxPQUFLLENBQUMsR0FBRyxDQUFDLEtBQUcsRUFBRSxXQUFTLEVBQUUsbUJBQWlCLEVBQUUsS0FBSyxHQUFFLENBQUMsR0FBRSxDQUFDLEVBQUUsZ0NBQStCLElBQUk7QUFBQSxNQUFDO0FBQUMsVUFBSSxLQUFJLElBQUksTUFBTSxHQUFHLEVBQUcsZUFBZSxlQUFlO0FBQzdQLGVBQVMsR0FBRyxHQUFFO0FBQUMsWUFBRSxLQUFHLE9BQU8sT0FBTyxDQUFDLElBQUU7QUFBRSxZQUFJLElBQUUsRUFBRSxhQUFhLEdBQUUsSUFBRSxFQUFFLElBQUksU0FBUyxHQUFFO0FBQUMsaUJBQU8sR0FBRyxHQUFFLENBQUM7QUFBQSxRQUFDLENBQUMsR0FBRSxJQUFFLEVBQUUsU0FBUSxJQUFFLE9BQU8seUJBQXlCLEdBQUUsZUFBZTtBQUFFLGVBQU8sZUFBZSxHQUFFLGlCQUFnQixFQUFDLGNBQWEsTUFBRyxZQUFXLE1BQUcsS0FBSSxXQUFVO0FBQUMsaUJBQU87QUFBQSxRQUFDLEVBQUMsQ0FBQztBQUFFLFlBQUksSUFBRSxNQUFNLGlCQUFnQixJQUFFLE9BQU8seUJBQXlCLEdBQUUsWUFBWTtBQUFFLGVBQU8sZUFBZSxHQUFFLGNBQWEsRUFBQyxjQUFhLE1BQUcsWUFBVyxNQUFHLEtBQUksV0FBVTtBQUFDLGlCQUFPO0FBQUEsUUFBQyxFQUFDLENBQUM7QUFBRSxZQUFHO0FBQUMsbUJBQVFBLEtBQUUsRUFBRSxTQUFPLEdBQUUsS0FBR0EsSUFBRUEsTUFBSTtBQUFDLGdCQUFJLElBQUUsRUFBRUEsRUFBQztBQUFFLGdCQUFFLE1BQUksRUFBRUEsRUFBQyxJQUFFLE1BQU0sWUFDbGYsTUFBTTtBQUFnQixlQUFHLEdBQUUsR0FBRSxTQUFTO0FBQUUsZ0JBQUcsRUFBRSxFQUFFO0FBQUEsVUFBTTtBQUFDLGVBQUlBLEtBQUUsR0FBRUEsS0FBRSxFQUFFLFFBQU9BLE1BQUk7QUFBQyxnQkFBRSxFQUFFQSxFQUFDO0FBQUUsZ0JBQUksSUFBRSxNQUFJLEVBQUVBLEVBQUM7QUFBRSxnQkFBRyxLQUFHO0FBQUUsa0JBQUcsSUFBRSxJQUFFLE1BQU0sWUFBVSxNQUFNLGdCQUFlLEdBQUcsR0FBRSxHQUFFLFFBQVEsR0FBRSxFQUFFLEVBQUU7QUFBQTtBQUFBLFVBQUs7QUFBQSxRQUFDLFVBQUM7QUFBUSxpQkFBSyxJQUFFLE9BQU8sZUFBZSxHQUFFLGlCQUFnQixDQUFDLElBQUUsT0FBTyxFQUFFLGVBQWMsSUFBRSxPQUFPLGVBQWUsR0FBRSxjQUFhLENBQUMsSUFBRSxPQUFPLEVBQUU7QUFBQSxRQUFXO0FBQUEsTUFBQztBQUFDLGVBQVMsR0FBRyxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUMsaUJBQVEsSUFBRSxHQUFFLElBQUUsRUFBRSxRQUFPLEtBQUk7QUFBQyxjQUFJLElBQUUsRUFBRSxDQUFDLEdBQUUsSUFBRSxFQUFFLE1BQUtBLEtBQUUsRUFBRTtBQUFRLGNBQUcsTUFBSSxFQUFFLFFBQU0sTUFBSSxLQUFHLE1BQUlBLEdBQUUsUUFBTztBQUFBLFFBQUM7QUFBQyxlQUFNO0FBQUEsTUFBRTtBQUNuYyxlQUFTLEdBQUcsR0FBRTtBQUFDLFVBQUU7QUFBRSxlQUFNLENBQUMsRUFBRSxLQUFHLGdCQUFnQixRQUFNLENBQUMsR0FBRyxVQUFTLElBQUksS0FBRyxFQUFFLFlBQVUsR0FBRyxHQUFFLElBQUksR0FBRSxHQUFHLENBQUMsS0FBRyxLQUFLLDZCQUE2QixDQUFDO0FBQUEsTUFBQztBQUMzSSxlQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUU7QUFBQyxZQUFJLElBQUUsTUFBSyxJQUFFLEdBQUcsQ0FBQyxHQUFFLElBQUUsRUFBRSxTQUFRLElBQUUsRUFBRSxNQUFLQSxLQUFFLEVBQUU7QUFBRSxZQUFFLEVBQUU7QUFBRSxZQUFHLEdBQUU7QUFBQyxjQUFJLElBQUUsT0FBTztBQUFFLGNBQUcsZUFBYSxLQUFHLGFBQVc7QUFBRSxnQkFBRyxhQUFXLEtBQUcsRUFBRSxlQUFhLGVBQWEsT0FBTyxFQUFFLGFBQVk7QUFBQyxrQkFBRyxHQUFHLENBQUMsRUFBRSxRQUFPLEtBQUssZ0NBQWdDLEdBQUUsR0FBRSxDQUFDO0FBQUUsa0JBQUksSUFBRUEsTUFBRztBQUFLLGtCQUFHQSxLQUFFLEVBQUUsQ0FBQyxHQUFFO0FBQUMsb0JBQUcsS0FBRyxHQUFHQSxJQUFFLEdBQUUsR0FBRSxDQUFDLEVBQUU7QUFBQSxjQUFNLE1BQU0sR0FBRSxDQUFDLElBQUUsQ0FBQztBQUFFLGNBQUFBLEtBQUUsU0FBUyxHQUFFO0FBQUMscUJBQUcsRUFBRSw0QkFBNEIsR0FBRSxHQUFFLENBQUM7QUFBRSxrQkFBRSxZQUFVLEdBQUcsQ0FBQztBQUFFLG9CQUFHLE1BQUksR0FBRTtBQUFDLHNCQUFJLElBQUUsT0FBTyx5QkFBeUIsR0FBRSxlQUFlO0FBQUUseUJBQU8sZUFBZSxHQUFFLGlCQUFnQjtBQUFBLG9CQUFDLEtBQUksV0FBVTtBQUFDLDZCQUFPO0FBQUEsb0JBQUM7QUFBQSxvQkFDcmdCLGNBQWE7QUFBQSxrQkFBRSxDQUFDO0FBQUUsc0JBQUksSUFBRSxPQUFPLHlCQUF5QixHQUFFLFlBQVk7QUFBRSx5QkFBTyxlQUFlLEdBQUUsY0FBYSxFQUFDLGNBQWEsTUFBRyxZQUFXLE1BQUcsS0FBSSxXQUFVO0FBQUMsMkJBQU8sSUFBRSxNQUFNLGtCQUFnQixNQUFNO0FBQUEsa0JBQWMsRUFBQyxDQUFDO0FBQUEsZ0JBQUM7QUFBQyxrQkFBRSwwQkFBd0IsRUFBRTtBQUFjLG9CQUFHLENBQUMsRUFBRSxDQUFDLEtBQUcsV0FBUyxFQUFFLGFBQVcsTUFBSSxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUM7QUFBRSxzQkFBRyxFQUFFLFlBQVUsS0FBRyxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUM7QUFBRSx3QkFBRyxHQUFHLENBQUMsS0FBRyxFQUFFLFdBQVMsRUFBRSxjQUFjLEdBQUUsZUFBYSxNQUFNLGtCQUFnQixFQUFFLHlCQUF5QjtBQUFBLDZCQUFVLEVBQUUsZUFBYSxNQUFNLG1CQUM5ZSxFQUFFLFdBQVMsRUFBRSxXQUFTLEtBQUcsYUFBYSxRQUFPO0FBQUMsMEJBQUksSUFBRSxlQUFhLElBQUUsRUFBRSxLQUFLLEdBQUUsQ0FBQyxJQUFFLEVBQUUsZUFBYSxFQUFFLFlBQVksQ0FBQztBQUFFLDRCQUFJLE1BQUksS0FBRyxPQUFPLGVBQWUsR0FBRSxpQkFBZ0IsQ0FBQyxHQUFFLElBQUUsUUFBTSxPQUFPLEVBQUUsZUFBYyxLQUFHLE9BQU8sZUFBZSxHQUFFLGNBQWEsQ0FBQyxHQUFFLElBQUUsUUFBTSxPQUFPLEVBQUU7QUFBWSw2QkFBTztBQUFBLG9CQUFDO0FBQUE7QUFBQTtBQUFBLGNBQUM7QUFBRSxnQkFBRSxDQUFDLEVBQUUsS0FBSyxFQUFDLE1BQUssR0FBRSxNQUFLLEdBQUUsU0FBUSxHQUFFLElBQUdBLEdBQUMsQ0FBQztBQUFFLG1CQUFLLGFBQVcsS0FBSyxjQUFZLENBQUM7QUFBRSxtQkFBSyxXQUFXLENBQUMsSUFBRSxLQUFLLFdBQVcsQ0FBQyxLQUFHLEVBQUMsU0FBUSxDQUFDLEdBQUUsUUFBTyxDQUFDLEVBQUM7QUFBRSxtQkFBSyxXQUFXLENBQUMsRUFBRSxJQUFFLFlBQVUsUUFBUSxFQUFFLEtBQUtBLEVBQUM7QUFBRSxpQkFBRyxDQUFDLEtBQUcsS0FBSztBQUFBLGdCQUFnQztBQUFBLGdCQUNoZ0JBO0FBQUEsZ0JBQUU7QUFBQSxjQUFDO0FBQUEsWUFBQztBQUFBO0FBQUEsUUFBQztBQUFBLE1BQUM7QUFBQyxlQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUU7QUFBQyxZQUFHLEdBQUU7QUFBQyxjQUFJLElBQUUsR0FBRyxDQUFDO0FBQUUsY0FBRSxFQUFFO0FBQVEsY0FBSSxJQUFFLEVBQUU7QUFBRSxjQUFFLEVBQUU7QUFBRSxjQUFHLEdBQUcsQ0FBQyxFQUFFLFFBQU8sS0FBSyxtQ0FBbUMsR0FBRSxHQUFFLENBQUM7QUFBRSxjQUFJLElBQUUsS0FBRztBQUFLLGNBQUU7QUFBTyxjQUFJLElBQUU7QUFBSyxjQUFHO0FBQUMsZ0JBQUUsRUFBRSxDQUFDO0FBQUEsVUFBQyxTQUFPQSxJQUFFO0FBQUEsVUFBQztBQUFDLGdCQUFJLElBQUUsR0FBRyxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsS0FBRyxNQUFJLElBQUUsRUFBRSxPQUFPLEdBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFHLEVBQUUsV0FBUyxFQUFFLENBQUMsSUFBRTtBQUFVLGVBQUssbUNBQW1DLEdBQUUsS0FBRyxHQUFFLENBQUM7QUFBRSxlQUFHLEtBQUssY0FBWSxLQUFLLFdBQVcsQ0FBQyxNQUFJLElBQUUsS0FBSyxXQUFXLENBQUMsRUFBRSxJQUFFLFlBQVUsUUFBUSxHQUFFLElBQUUsRUFBRSxRQUFRLENBQUMsR0FBRSxLQUFHLEtBQUcsRUFBRSxPQUFPLEdBQUUsQ0FBQztBQUFBLFFBQUU7QUFBQSxNQUFDO0FBQ2piLGVBQVMsS0FBSTtBQUFDLGlCQUFRLEtBQUssR0FBRyxRQUFPLGdDQUFnQyxHQUFFLFNBQVMsR0FBRTtBQUFDLFlBQUUsYUFBVyxHQUFHLENBQUMsR0FBRSxHQUFHLENBQUM7QUFBQSxRQUFFLEdBQUUsSUFBRTtBQUFBLE1BQUM7QUFBQyxVQUFJLEtBQUcsRUFBRSxFQUFFO0FBQUUsZUFBUyxHQUFHLEdBQUUsR0FBRTtBQUFDLFlBQUUsV0FBUyxJQUFFLEVBQUUsU0FBTztBQUFFLFVBQUUsV0FBUztBQUFFLFVBQUUsa0JBQWdCLEVBQUU7QUFBYyxZQUFHLEVBQUUsR0FBRTtBQUFDLGNBQUUsT0FBTyxlQUFlLENBQUM7QUFBRSxjQUFHLENBQUMsRUFBRSxlQUFlLHNCQUFzQixHQUFFO0FBQUMsZ0JBQUksSUFBRSxPQUFPLE9BQU8sQ0FBQztBQUFFLGNBQUUsc0JBQW9CO0FBQUUsY0FBRSxHQUFFLEVBQUU7QUFBRSxjQUFFLHVCQUFxQjtBQUFBLFVBQUM7QUFBQyxZQUFFLFlBQVUsRUFBRTtBQUFBLFFBQW9CLE1BQU0sR0FBRSxHQUFFLEVBQUU7QUFBQSxNQUFDO0FBQUMsVUFBSSxLQUFHLEdBQUcsS0FBSyxHQUFFLEtBQUcsR0FBRyxXQUFXLEdBQUUsS0FBRyxHQUFHLFVBQVU7QUFDNWQsZUFBUyxLQUFJO0FBQUMsWUFBRyxDQUFDLE1BQUksT0FBTyx5QkFBeUIsTUFBTSxXQUFVLFdBQVcsR0FBRTtBQUFDLGNBQUksSUFBRSxXQUFVO0FBQUMsZ0JBQUksSUFBRSxJQUFJLFdBQVcsU0FBUSxFQUFDLFNBQVEsTUFBRyxZQUFXLE1BQUcsVUFBUyxLQUFFLENBQUM7QUFBRSxpQkFBSyxzQkFBc0IsQ0FBQztBQUFBLFVBQUM7QUFBRSxrQkFBUSxVQUFVLFFBQU0sUUFBUSxVQUFVLFFBQU0sSUFBRSxZQUFZLFVBQVUsVUFBUSxZQUFZLFVBQVUsUUFBTTtBQUFBLFFBQUU7QUFBQSxNQUFDO0FBQ3hULFVBQUksS0FBRyxPQUFPLG9CQUFvQixRQUFRLFNBQVMsRUFBRSxPQUFPLFNBQVMsR0FBRTtBQUFDLGVBQU0sU0FBTyxFQUFFLFVBQVUsR0FBRSxDQUFDO0FBQUEsTUFBQyxDQUFDLEdBQUUsS0FBRyxPQUFPLG9CQUFvQixZQUFZLFNBQVMsRUFBRSxPQUFPLFNBQVMsR0FBRTtBQUFDLGVBQU0sU0FBTyxFQUFFLFVBQVUsR0FBRSxDQUFDO0FBQUEsTUFBQyxDQUFDO0FBQUUsZUFBUyxHQUFHLEdBQUU7QUFBQyxlQUFNLEVBQUMsS0FBSSxTQUFTLEdBQUU7QUFBQyxjQUFJLElBQUUsRUFBRSxJQUFJLEdBQUUsSUFBRSxFQUFFLFVBQVUsQ0FBQztBQUFFLFlBQUUsTUFBSSxFQUFFLElBQUUsQ0FBQztBQUFHLFlBQUUsRUFBRSxDQUFDLEtBQUcsS0FBSyxvQkFBb0IsR0FBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQUUsZUFBSyx5QkFBeUIsR0FBRSxDQUFDO0FBQUUsWUFBRSxFQUFFLENBQUMsSUFBRTtBQUFBLFFBQUMsR0FBRSxLQUFJLFdBQVU7QUFBQyxjQUFJLElBQUUsRUFBRSxJQUFJO0FBQUUsaUJBQU8sS0FBRyxFQUFFLEtBQUcsRUFBRSxFQUFFLENBQUM7QUFBQSxRQUFDLEdBQUUsY0FBYSxLQUFFO0FBQUEsTUFBQztBQUFDO0FBQUMsZUFBUyxFQUFFLEdBQUUsR0FBRTtBQUFDLGVBQU0sRUFBQyxPQUFNLEdBQUUsR0FBRSxDQUFDLEdBQUUsR0FBRSxFQUFDO0FBQUEsTUFBQztBQUN6ZSxlQUFTLEdBQUcsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLFlBQUksSUFBRSxHQUFFLElBQUUsR0FBRSxJQUFFLEdBQUVBLEtBQUUsR0FBRSxJQUFFLEtBQUssSUFBSSxJQUFFLEdBQUUsSUFBRSxDQUFDO0FBQUUsWUFBRyxLQUFHLEtBQUcsS0FBRyxFQUFFLElBQUU7QUFBQyxlQUFJLElBQUUsR0FBRSxJQUFFLEdBQUUsSUFBSSxLQUFHLEVBQUUsQ0FBQyxNQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU07QUFBRSxjQUFFO0FBQUEsUUFBQztBQUFDLFlBQUcsS0FBRyxFQUFFLFVBQVEsS0FBRyxFQUFFLFFBQU87QUFBQyxVQUFBQSxLQUFFLEVBQUU7QUFBTyxtQkFBUSxJQUFFLEVBQUUsUUFBTyxJQUFFLEdBQUUsSUFBRSxJQUFFLEtBQUcsR0FBRyxFQUFFLEVBQUVBLEVBQUMsR0FBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUc7QUFBSSxVQUFBQSxLQUFFO0FBQUEsUUFBQztBQUFDLGFBQUc7QUFBRSxhQUFHO0FBQUUsYUFBR0E7QUFBRSxhQUFHQTtBQUFFLFlBQUcsS0FBRyxJQUFFLEtBQUcsS0FBRyxJQUFFLEVBQUUsUUFBTSxDQUFDO0FBQUUsWUFBRyxLQUFHLEdBQUU7QUFBQyxlQUFJLElBQUUsRUFBRSxHQUFFLENBQUMsR0FBRSxJQUFFLElBQUcsR0FBRSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUM7QUFBRSxpQkFBTSxDQUFDLENBQUM7QUFBQSxRQUFDO0FBQUMsWUFBRyxLQUFHLEVBQUUsUUFBTSxDQUFDLEVBQUUsR0FBRSxJQUFFLENBQUMsQ0FBQztBQUFFLFlBQUU7QUFBRSxZQUFFO0FBQUUsWUFBRSxJQUFFLElBQUU7QUFBRSxRQUFBQSxLQUFFLElBQUUsSUFBRTtBQUFFLFlBQUUsTUFBTSxDQUFDO0FBQUUsYUFBSSxJQUFFLEdBQUUsSUFBRSxHQUFFLElBQUksR0FBRSxDQUFDLElBQUUsTUFBTUEsRUFBQyxHQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRTtBQUFFLGFBQUksSUFBRSxHQUFFLElBQUVBLElBQUUsSUFBSSxHQUFFLENBQUMsRUFBRSxDQUFDLElBQUU7QUFBRSxhQUFJLElBQUUsR0FBRSxJQUFFLEdBQUUsSUFBSSxNQUFJLElBQUUsR0FBRSxJQUFFQSxJQUFFLElBQUksS0FBRyxFQUFFLElBQUUsSUFBRSxDQUFDLE1BQUksRUFBRSxJQUFFLElBQUUsQ0FBQyxFQUFFLEdBQUUsQ0FBQyxFQUFFLENBQUMsSUFDMWYsRUFBRSxJQUFFLENBQUMsRUFBRSxJQUFFLENBQUM7QUFBQSxhQUFNO0FBQUMsY0FBSSxJQUFFLEVBQUUsSUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFFLEdBQUUsSUFBRSxFQUFFLENBQUMsRUFBRSxJQUFFLENBQUMsSUFBRTtBQUFFLFlBQUUsQ0FBQyxFQUFFLENBQUMsSUFBRSxJQUFFLElBQUUsSUFBRTtBQUFBLFFBQUM7QUFBQyxZQUFFLEVBQUUsU0FBTztBQUFFLFlBQUUsRUFBRSxDQUFDLEVBQUUsU0FBTztBQUFFLFlBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUFFLGFBQUksSUFBRSxDQUFDLEdBQUUsSUFBRSxLQUFHLElBQUUsSUFBRyxNQUFHLEtBQUcsRUFBRSxLQUFLLENBQUMsR0FBRSxPQUFLLEtBQUcsS0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFFLFFBQU1BLEtBQUUsRUFBRSxJQUFFLENBQUMsRUFBRSxJQUFFLENBQUMsR0FBRSxJQUFFLEVBQUUsSUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRSxDQUFDLEVBQUUsSUFBRSxDQUFDLEdBQUUsSUFBRSxJQUFFLElBQUUsSUFBRUEsS0FBRSxJQUFFQSxLQUFFLElBQUVBLEtBQUUsSUFBRUEsSUFBRSxLQUFHQSxNQUFHQSxNQUFHLElBQUUsRUFBRSxLQUFLLENBQUMsS0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFFLElBQUVBLEtBQUcsS0FBSSxPQUFLLEtBQUcsS0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFFLEtBQUksSUFBRSxNQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUUsS0FBSSxJQUFFO0FBQUksVUFBRSxRQUFRO0FBQUUsWUFBRTtBQUFPLFlBQUUsQ0FBQztBQUFFLGFBQUksSUFBRSxHQUFFLElBQUUsRUFBRSxRQUFPLElBQUksU0FBTyxFQUFFLENBQUMsR0FBRTtBQUFBLFVBQUMsS0FBSztBQUFFLGtCQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUUsSUFBRTtBQUFRO0FBQUk7QUFBSTtBQUFBLFVBQU0sS0FBSztBQUFFLGtCQUFJLElBQUUsRUFBRSxHQUFFLENBQUM7QUFBRyxjQUFFO0FBQUk7QUFBSSxjQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUFFO0FBQUk7QUFBQSxVQUFNLEtBQUs7QUFBRSxrQkFBSSxJQUFFLEVBQUUsR0FBRSxDQUFDO0FBQ25mLGNBQUU7QUFBSTtBQUFJO0FBQUEsVUFBTSxLQUFLO0FBQUUsa0JBQUksSUFBRSxFQUFFLEdBQUUsQ0FBQyxJQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUU7QUFBQSxRQUFHO0FBQUMsYUFBRyxFQUFFLEtBQUssQ0FBQztBQUFFLGVB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzdJdEcsSUFBQUMsY0FBQSxDQUFBO0FBQUFDLFNBQUFELGFBQUE7RUFBQUUsV0FBQSxTQUFBQSxZQUFBO0FBQUEsV0FBQUE7RUFBQTtFQUFBQyxVQUFBLFNBQUFBLFdBQUE7QUFBQSxXQUFBQTtFQUFBO0VBQUFDLGVBQUEsU0FBQUEsZ0JBQUE7QUFBQSxXQUFBRjtFQUFBO0VBQUFHLGNBQUEsU0FBQUEsZUFBQTtBQUFBLFdBQUFBO0VBQUE7RUFBQUMsWUFBQSxTQUFBQSxjQUFBO0FBQUEsV0FBQUE7RUFBQTtFQUFBQyxZQUFBLFNBQUFBLGFBQUE7QUFBQSxXQUFBSjtFQUFBO0VBQUFLLFdBQUEsU0FBQUEsWUFBQTtBQUFBLFdBQUFBO0VBQUE7RUFBQUMsZUFBQSxTQUFBQSxnQkFBQTtBQUFBLFdBQUFBO0VBQUE7RUFBQUMsZUFBQSxTQUFBQSxnQkFBQTtBQUFBLFdBQUFBO0VBQUE7RUFBQUMsV0FBQSxTQUFBQSxZQUFBO0FBQUEsV0FBQUE7RUFBQTtFQUFBQyxZQUFBLFNBQUFBLGFBQUE7QUFBQSxXQUFBQTtFQUFBO0VBQUFDLEdBQUEsU0FBQUEsSUFBQTtBQUFBLFdBQUFKO0VBQUE7RUFBQUssT0FBQSxTQUFBQSxRQUFBO0FBQUEsV0FBQUE7RUFBQTtFQUFBQyxLQUFBLFNBQUFBLE1BQUE7QUFBQSxXQUFBQTtFQUFBO0VBQUFDLE1BQUEsU0FBQUEsT0FBQTtBQUFBLFdBQUFEO0VBQUE7RUFBQUUsTUFBQSxTQUFBQSxPQUFBO0FBQUEsV0FBQUM7RUFBQTtFQUFBQyxnQkFBQSxTQUFBQSxpQkFBQTtBQUFBLFdBQUFBO0VBQUE7RUFBQUMsaUJBQUEsU0FBQUEsa0JBQUE7QUFBQSxXQUFBQTtFQUFBO0VBQUFDLFFBQUEsU0FBQUEsU0FBQTtBQUFBLFdBQUFBO0VBQUE7RUFBQUMsYUFBQSxTQUFBQSxjQUFBO0FBQUEsV0FBQUo7RUFBQTtFQUFBSyxjQUFBLFNBQUFBLGVBQUE7QUFBQSxXQUFBQTtF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LEtBQUt4QixLQUFLO0FBQ2xCLFdBQU9BO0VBQ1Q7QUFDRjtBQVNBLFNBQVNkLGdCQUFlb1QsT0FBTztBQUM3QkEsUUFBTXBULGVBQWU7QUFDckIsU0FBT29UO0FBQ1Q7QUFDQSxTQUFTblQsaUJBQWdCbVQsT0FBTztBQUM5QkEsUUFBTW5ULGdCQUFnQjtBQUN0QixTQUFPbVQ7QUFDVDsiLAogICJuYW1lcyI6IFsiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAibmF2aWdhdG9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAicHJvY2VzcyIsICJEZW5vIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaXNPYmplY3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiU3ltYm9sIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiaXNPYmplY3QiLCAiZG9jdW1lbnQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiY3JlYXRlRWxlbWVudCIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJXZWFrTWFwIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtleXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJpc09iamVjdCIsICJUeXBlRXJyb3IiLCAiV2Vha01hcCIsICJnZXQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm93bktleXMiLCAia2V5cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJvd25LZXlzIiwgImtleXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrZXlzIiwgImV4cG9ydHMiLCAia2V5cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJhY3RpdmVYRG9jdW1lbnQiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlN5bWJvbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJTeW1ib2wiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaXNPYmplY3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAic2VsZiIsICJnbG9iYWxUaGlzIiwgIlR5cGVFcnJvciIsICJrZXlzIiwgIlN5bWJvbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrZXlzIiwgImdsb2JhbFRoaXMiLCAiU3ltYm9sIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiVHlwZUVycm9yIiwgIk51bWJlciIsICJrZXlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImgiLCAidW5kZWZpbmVkIiwgIkl0ZXJhdG9yIiwgImkiLCAiQXJyYXlJdGVyYXRvciIsICJ1bmRlZmluZWQiLCAidW5kZWZpbmVkIiwgIkV2ZW50IiwgInByZXZlbnREZWZhdWx0IiwgInN0b3BQcm9wYWdhdGlvbiIsICJldmVudCIsICJ1bmRlZmluZWQiLCAiQ3VzdG9tRXZlbnQiLCAidW5kZWZpbmVkIiwgImdsb2JhbCIsICJEb2N1bWVudEZyYWdtZW50IiwgInVuZGVmaW5lZCIsICJjbG9uZU5vZGUiLCAiYXBwZW5kQ2hpbGQiLCAiaW1wb3J0Tm9kZSIsICJkZWZpbmVJbm5lckhUTUwiLCAiZGVmaW5lT3V0ZXJIVE1MIiwgImNyZWF0ZUVsZW1lbnQiLCAiYXR0ciIsICJmaXhDbG9uZWREb20iLCAiZml4Q2xvbmVkU2NyaXB0cyIsICJ1bmRlZmluZWQiLCAiTXV0YXRpb25PYnNlcnZlciIsICJhdHRyIiwgImF0dHJpYnV0ZXMiLCAiY291bnRlciIsICJtYXAiLCAiJHRhcmdldCIsICJtZW1vIiwgInVuZGVmaW5lZCIsICJleHBvcnRzIiwgImgiLCAiX0RPTVRva2VuTGlzdCIsICJpbml0X0RPTVRva2VuTGlzdCIsICJ1bmRlZmluZWQiLCAiZ2xvYmFsIiwgInVuZGVmaW5lZCIsICJ1bmRlZmluZWQiLCAiZ2xvYmFsIiwgInVuZGVmaW5lZCIsICJ0IiwgImdsb2JhbCIsICJ1bmRlZmluZWQiLCAidW5kZWZpbmVkIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiRXJyb3IiLCAiUmVmZXJlbmNlRXJyb3IiLCAiU3ludGF4RXJyb3IiLCAiVHlwZUVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImZvckVhY2giLCAiZm9yRWFjaCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJpc09iamVjdCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrZXlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIm1lbW8iLCAic2VsZiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImlzT2JqZWN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiSXRlcmF0b3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSXRlcmF0b3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZm9yRWFjaCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJpc09iamVjdCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJpc09iamVjdCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImlzT2JqZWN0IiwgImdldCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJmb3JFYWNoIiwgImdldCIsICJNYXAiLCAib3duS2V5cyIsICJrZXlzIiwgImtleXMiLCAiaXNPYmplY3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsVGhpcyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnbG9iYWxUaGlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImdsb2JhbFRoaXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaXNPYmplY3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2xvYmFsIiwgIkpTWF9leHBvcnRzIiwgIl9fZXhwb3J0IiwgIkNvbXBvbmVudCIsICJGcmFnbWVudCIsICJQdXJlQ29tcG9uZW50IiwgIlNWR05hbWVzcGFjZSIsICJTaGFkb3dSb290IiwgIlN0cmljdE1vZGUiLCAiY2xhc3NOYW1lIiwgImNyZWF0ZUVsZW1lbnQiLCAiY3JlYXRlRmFjdG9yeSIsICJjcmVhdGVSZWYiLCAiZm9yd2FyZFJlZiIsICJoIiwgImlzUmVmIiwgImpzeCIsICJqc3hzIiwgIm1lbW8iLCAiaWRlbnRpdHkiLCAicHJldmVudERlZmF1bHQiLCAic3RvcFByb3BhZ2F0aW9uIiwgInN0eWxlZCIsICJ1c2VDYWxsYmFjayIsICJ1c2VDbGFzc0xpc3QiLCAidXNlSW1wZXJhdGl2ZUhhbmRsZSIsICJ1c2VNZW1vIiwgInVzZVJlZiIsICJ1c2VUZXh0IiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIl9fdG9Db21tb25KUyIsICJrZXlzIiwgIk9iamVjdCIsICJ2YWx1ZSIsICJpc0Jvb2xlYW4iLCAidmFsIiwgImlzRWxlbWVudCIsICJub2RlVHlwZSIsICJpc1N0cmluZyIsICJpc051bWJlciIsICJpc09iamVjdCIsICJfdHlwZW9mIiwgImlzRnVuY3Rpb24iLCAiaXNDb21wb25lbnRDbGFzcyIsICJDb21wb25lbnQyIiwgImlzQ29tcG9uZW50IiwgImlzQXJyYXlMaWtlIiwgIm9iaiIsICJsZW5ndGgiLCAiZm9yRWFjaCIsICJmbiIsICJfaXRlcmF0b3IyIiwgIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwgIl9zdGVwMiIsICJzIiwgIm4iLCAiZG9uZSIsICJrZXkiLCAiZXJyIiwgImUiLCAiZiIsICJzZWFsIiwgImN1cnJlbnQiLCAibWF5YmVSZWYiLCAiaXNVbml0bGVzc051bWJlciIsICJhbmltYXRpb25JdGVyYXRpb25Db3VudCIsICJib3JkZXJJbWFnZU91dHNldCIsICJib3JkZXJJbWFnZVNsaWNlIiwgImJvcmRlckltYWdlV2lkdGgiLCAiYm94RmxleCIsICJib3hGbGV4R3JvdXAiLCAiYm94T3JkaW5hbEdyb3VwIiwgImNvbHVtbkNvdW50IiwgImNvbHVtbnMiLCAiZmxleCIsICJmbGV4R3JvdyIsICJmbGV4UG9zaXRpdmUiLCAiZmxleFNocmluayIsICJmbGV4TmVnYXRpdmUiLCAiZmxleE9yZGVyIiwgImdyaWRBcmVhIiwgImdyaWRSb3ciLCAiZ3JpZFJvd0VuZCIsICJncmlkUm93U3BhbiIsICJncmlkUm93U3RhcnQiLCAiZ3JpZENvbHVtbiIsICJncmlkQ29sdW1uRW5kIiwgImdyaWRDb2x1bW5TcGFuIiwgImdyaWRDb2x1bW5TdGFydCIsICJmb250V2VpZ2h0IiwgImxpbmVDbGFtcCIsICJsaW5lSGVpZ2h0IiwgIm9wYWNpdHkiLCAib3JkZXIiLCAib3JwaGFucyIsICJ0YWJTaXplIiwgIndpZG93cyIsICJ6SW5kZXgiLCAiem9vbSIsICJmaWxsT3BhY2l0eSIsICJmbG9vZE9wYWNpdHkiLCAic3RvcE9wYWNpdHkiLCAic3Ryb2tlRGFzaGFycmF5IiwgInN0cm9rZURhc2hvZmZzZXQiLCAic3Ryb2tlTWl0ZXJsaW1pdCIsICJzdHJva2VPcGFjaXR5IiwgInN0cm9rZVdpZHRoIiwgInByZWZpeEtleSIsICJwcmVmaXgiLCAiY2hhckF0IiwgInRvVXBwZXJDYXNlIiwgInN1YnN0cmluZyIsICJwcmVmaXhlcyIsICJwcm9wIiwgImpzeERvbVR5cGUiLCAiU3ltYm9sIiwgImZvciIsICJKc3hEb21UeXBlIiwgIkpzeERvbVR5cGUyIiwgIl9yZWYiLCAiY2hpbGRyZW4iLCAicmVmIiwgImF0dHIyIiwgIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsICJfZXhjbHVkZWQiLCAiX2RlZmluZVByb3BlcnR5IiwgImlzU2hhZG93Um9vdCIsICJlbCIsICJYTGlua05hbWVzcGFjZSIsICJYTUxOYW1lc3BhY2UiLCAiaXNWaXNpYmxlQ2hpbGQiLCAiQXJyYXkiLCAiaXNBcnJheSIsICJtYXAiLCAiZmlsdGVyIiwgIkJvb2xlYW4iLCAiam9pbiIsICJpdGVyYXRvciIsICJmcm9tIiwgImsiLCAic3ZnIiwgImFuaW1hdGUiLCAiY2lyY2xlIiwgImNsaXBQYXRoIiwgImRlZnMiLCAiZGVzYyIsICJlbGxpcHNlIiwgImZlQmxlbmQiLCAiZmVDb2xvck1hdHJpeCIsICJmZUNvbXBvbmVudFRyYW5zZmVyIiwgImZlQ29tcG9zaXRlIiwgImZlQ29udm9sdmVNYXRyaXgiLCAiZmVEaWZmdXNlTGlnaHRpbmciLCAiZmVEaXNwbGFjZW1lbnRNYXAiLCAiZmVEaXN0YW50TGlnaHQiLCAiZmVGbG9vZCIsICJmZUZ1bmNBIiwgImZlRnVuY0IiLCAiZmVGdW5jRyIsICJmZUZ1bmNSIiwgImZlR2F1c3NpYW5CbHVyIiwgImZlSW1hZ2UiLCAiZmVNZXJnZSIsICJmZU1lcmdlTm9kZSIsICJmZU1vcnBob2xvZ3kiLCAiZmVPZmZzZXQiLCAiZmVQb2ludExpZ2h0IiwgImZlU3BlY3VsYXJMaWdodGluZyIsICJmZVNwb3RMaWdodCIsICJmZVRpbGUiLCAiZmVUdXJidWxlbmNlIiwgImZvcmVpZ25PYmplY3QiLCAiZyIsICJpbWFnZSIsICJsaW5lIiwgImxpbmVhckdyYWRpZW50IiwgIm1hcmtlciIsICJtYXNrIiwgIm1ldGFkYXRhIiwgInBhdGgiLCAicGF0dGVybiIsICJwb2x5Z29uIiwgInBvbHlsaW5lIiwgInJhZGlhbEdyYWRpZW50IiwgInJlY3QiLCAic3RvcCIsICJzd2l0Y2giLCAic3ltYm9sIiwgInRleHQiLCAidGV4dFBhdGgiLCAidHNwYW4iLCAidXNlIiwgInZpZXciLCAibm9uUHJlc2VudGF0aW9uU1ZHQXR0cmlidXRlcyIsICJ0YWciLCAiYmluZCIsICJmcmFnbWVudCIsICJkb2N1bWVudCIsICJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwgImFwcGVuZENoaWxkIiwgIl9DbGFzcyIsICJfQ29tcG9uZW50IiwgInByb3BzIiwgIl9jbGFzc0NhbGxDaGVjayIsICJfY3JlYXRlQ2xhc3MiLCAicmVuZGVyIiwgImluaXRDb21wb25lbnRDbGFzcyIsICJDbGFzcyIsICJfb2JqZWN0U3ByZWFkIiwgImluc3RhbmNlIiwgIm5vZGUiLCAiYXR0YWNoUmVmIiwgIl9leGNsdWRlZDIiLCAibmFtZXNwYWNlVVJJIiwgImNyZWF0ZUVsZW1lbnROUyIsICJhdHRyaWJ1dGVzIiwgIndpbmRvdyIsICJIVE1MU2VsZWN0RWxlbWVudCIsICJtdWx0aXBsZSIsICJ2YWx1ZXMiLCAiU3RyaW5nIiwgInF1ZXJ5U2VsZWN0b3JBbGwiLCAib3B0aW9uIiwgInNlbGVjdGVkIiwgImluY2x1ZGVzIiwgImRlZmF1bHRQcm9wcyIsICJUeXBlRXJyb3IiLCAiY29uY2F0IiwgIl9sZW4iLCAiYXJndW1lbnRzIiwgIl9rZXkyIiwgInVuc2hpZnQiLCAiX2F0dHIiLCAiX2V4Y2x1ZGVkMyIsICJjaGlsZCIsICJhcHBlbmRDaGlsZHJlbiIsICJhcHBlbmRDaGlsZFRvTm9kZSIsICJjcmVhdGVUZXh0Tm9kZSIsICJjcmVhdGVDb21tZW50IiwgInNoYWRvd1Jvb3QiLCAiYXR0YWNoU2hhZG93IiwgImF0dHIiLCAiX2kiLCAiX2FyciIsICJfdG9Db25zdW1hYmxlQXJyYXkiLCAiSFRNTFRlbXBsYXRlRWxlbWVudCIsICJjb250ZW50IiwgIm5vcm1hbGl6ZUF0dHJpYnV0ZSIsICJzZXBhcmF0b3IiLCAicmVwbGFjZSIsICJtYXRjaCIsICJ0b0xvd2VyQ2FzZSIsICJzdHlsZSIsICJ2IiwgInNldEF0dHJpYnV0ZSIsICJpbmRleE9mIiwgInNldFByb3BlcnR5IiwgImF0dHJpYnV0ZSIsICJhdHRyTlMiLCAiZGF0YVZhbHVlIiwgImRhdGFLZXkiLCAiZGF0YXNldCIsICJpbm5lckhUTUwiLCAiSFRNTFRleHRBcmVhRWxlbWVudCIsICJzcGVsbGNoZWNrIiwgImV2ZW50SGFuZGxlciIsICJldmVudE5hbWUiLCAiYWRkRXZlbnRMaXN0ZW5lciIsICJhdHRyaWJ1dGUyIiwgInVzZUNhcHR1cmUiLCAiZW5kc1dpdGgiLCAic3RhbmRhcmRFdmVudE5hbWUiLCAiY3VzdG9tRXZlbnROYW1lIiwgInNsaWNlIiwgIlNWR0VsZW1lbnQiLCAidGVzdCIsICJuYW1lc3BhY2UiLCAic2V0QXR0cmlidXRlTlMiLCAiX2l0ZXJhdG9yMyIsICJfc3RlcDMiLCAiaW5pdGlhbFZhbHVlIiwgIlRleHQiLCAiZGVmaW5lUHJvcGVydHkiLCAidGV4dENvbnRlbnQiLCAic2V0VGV4dCIsICJkaXYiLCAibGlzdCIsICJjbGFzc0xpc3QiLCAiQ2xhc3NMaXN0IiwgImRlZmluZVByb3BlcnRpZXMiLCAiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsICJzaXplIiwgImFkZCIsICJfbGlzdCIsICJhcHBseSIsICJyZW1vdmUiLCAiX2xpc3QyIiwgInRvZ2dsZSIsICJ0b2tlbiIsICJmb3JjZSIsICJjb250YWlucyIsICJmYWN0b3J5IiwgIl9leGNsdWRlZDQiLCAiaW5pdCIsICJjYWNoZSIsICJNYXAiLCAiY3JlYXRlU3R5bGVkQ29tcG9uZW50IiwgIm5hbWUiLCAiaW50ZXJwb2xhdGlvbnMiLCAiX2tleSIsICJzdHlsZTIiLCAiX2V4Y2x1ZGVkNSIsICJsYXN0SW5kZXgiLCAiY3NzIiwgInJlZHVjZSIsICJwIiwgImkiLCAiaW50ZXJwb2xhdGlvbiIsICJiYXNlU3R5bGVkIiwgImN1c3RvbUNvbXBvbmVudCIsICJQcm94eSIsICJnZXQiLCAiXyIsICJzZXRJZkFic2VudCIsICJnZXRWYWx1ZSIsICJoYXMiLCAic2V0IiwgImV2ZW50Il0KfQo=