UNPKG

@coolwallet/kas

Version:
170 lines (169 loc) 55.3 kB
"use strict"; function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } var _types = require("../../config/types"); var _address = require("../address"); function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } describe('Test KAS SDK', function () { it('Test getAddressByPublicKey with version 0', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() { var publicKey, xOnlyPubKey, expectedAddress; return _regeneratorRuntime().wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: publicKey = '03da8eaa97bf4457368188c78e92661fdf2d96ce166b225d0dc6c1c3e322ef62ef'; xOnlyPubKey = (0, _address.toXOnly)(publicKey); expectedAddress = 'kaspa:qrdga25hhaz9wd5p3rrcaynxrl0jm9kwze4jyhgdcmqu8cezaa3w7xh9a3xd9'; expect((0, _address.getAddressByPublicKeyOrScriptHash)(xOnlyPubKey, _types.AddressVersion.PUBKEY)).toBe(expectedAddress); case 4: case "end": return _context.stop(); } }, _callee); }))); it('Test getAddressByPublicKey with version 1', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() { var publicKey, expectedAddress; return _regeneratorRuntime().wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: publicKey = '03da8eaa97bf4457368188c78e92661fdf2d96ce166b225d0dc6c1c3e322ef62ef'; expectedAddress = 'kaspa:qypa4r42j7l5g4eksxyv0r5jvc0a7tvkectxkgjaphrvrslrythk9mc0huhkd8a'; expect((0, _address.getAddressByPublicKeyOrScriptHash)(publicKey, _types.AddressVersion.PUBKEY_ECDSA)).toBe(expectedAddress); case 3: case "end": return _context2.stop(); } }, _callee2); }))); it('Test getAddressByPublicKey with version 8', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() { var scriptHash, expectedAddress; return _regeneratorRuntime().wrap(function _callee3$(_context3) { while (1) switch (_context3.prev = _context3.next) { case 0: scriptHash = 'b815f3841cfb87b8fd834b2c1cba9a8790fb5f568cc7b3a377acd71350d08691'; expectedAddress = 'kaspa:pzuptuuyrnac0w8asd9jc896n2rep76l26xv0varw7kdwy6s6zrfzvsukssy2'; expect((0, _address.getAddressByPublicKeyOrScriptHash)(scriptHash, _types.AddressVersion.SCRIPT_HASH)).toBe(expectedAddress); case 3: case "end": return _context3.stop(); } }, _callee3); }))); it('Test addressToOutScript with P2PK_SCHNORR script address', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() { var address, _addressToOutScript, scriptType, outScript, outPubkeyOrHash; return _regeneratorRuntime().wrap(function _callee4$(_context4) { while (1) switch (_context4.prev = _context4.next) { case 0: address = 'kaspa:qrdga25hhaz9wd5p3rrcaynxrl0jm9kwze4jyhgdcmqu8cezaa3w7xh9a3xd9'; _addressToOutScript = (0, _address.addressToOutScript)(address), scriptType = _addressToOutScript.scriptType, outScript = _addressToOutScript.outScript, outPubkeyOrHash = _addressToOutScript.outPubkeyOrHash; expect(scriptType).toBe(_types.ScriptType.P2PK_SCHNORR); expect(outScript.toString('hex')).toMatchInlineSnapshot("\"20da8eaa97bf4457368188c78e92661fdf2d96ce166b225d0dc6c1c3e322ef62efac\""); expect(outPubkeyOrHash.toString('hex')).toMatchInlineSnapshot("\"da8eaa97bf4457368188c78e92661fdf2d96ce166b225d0dc6c1c3e322ef62ef\""); case 5: case "end": return _context4.stop(); } }, _callee4); }))); it('Test addressToOutScript with P2PK_ECDSA script address', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5() { var address, _addressToOutScript2, scriptType, outScript, outPubkeyOrHash; return _regeneratorRuntime().wrap(function _callee5$(_context5) { while (1) switch (_context5.prev = _context5.next) { case 0: address = 'kaspa:qypmrwy3gm82j08chmr0502d08pxtp4vpxs736ln02jeq33f7c7g2lgk5a8egc4'; _addressToOutScript2 = (0, _address.addressToOutScript)(address), scriptType = _addressToOutScript2.scriptType, outScript = _addressToOutScript2.outScript, outPubkeyOrHash = _addressToOutScript2.outPubkeyOrHash; expect(scriptType).toBe(_types.ScriptType.P2PK_ECDSA); expect(outScript.toString('hex')).toMatchInlineSnapshot("\"2103b1b89146cea93cf8bec6fa3d4d79c26586ac09a1e8ebf37aa5904629f63c857dab\""); expect(outPubkeyOrHash.toString('hex')).toMatchInlineSnapshot("\"03b1b89146cea93cf8bec6fa3d4d79c26586ac09a1e8ebf37aa5904629f63c857d\""); case 5: case "end": return _context5.stop(); } }, _callee5); }))); it('Test addressToOutScript with script P2SH address', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6() { var address, _addressToOutScript3, scriptType, outScript, outPubkeyOrHash; return _regeneratorRuntime().wrap(function _callee6$(_context6) { while (1) switch (_context6.prev = _context6.next) { case 0: address = 'kaspa:pzuptuuyrnac0w8asd9jc896n2rep76l26xv0varw7kdwy6s6zrfzvsukssy2'; _addressToOutScript3 = (0, _address.addressToOutScript)(address), scriptType = _addressToOutScript3.scriptType, outScript = _addressToOutScript3.outScript, outPubkeyOrHash = _addressToOutScript3.outPubkeyOrHash; expect(scriptType).toBe(_types.ScriptType.P2SH); expect(outScript.toString('hex')).toMatchInlineSnapshot("\"aa20b815f3841cfb87b8fd834b2c1cba9a8790fb5f568cc7b3a377acd71350d0869187\""); expect(outPubkeyOrHash.toString('hex')).toMatchInlineSnapshot("\"b815f3841cfb87b8fd834b2c1cba9a8790fb5f568cc7b3a377acd71350d08691\""); case 5: case "end": return _context6.stop(); } }, _callee6); }))); it('Test addressToOutScript with unsupported version address', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7() { var address; return _regeneratorRuntime().wrap(function _callee7$(_context7) { while (1) switch (_context7.prev = _context7.next) { case 0: address = 'kaspa:q2cm3y2xe65ne797cmar6ntecfjcdtqf585whum65kgyv20k8jzhmtq5q5qe6c9'; expect(function () { return (0, _address.addressToOutScript)(address); }).toThrowErrorMatchingInlineSnapshot("\"error function: decodeAddress, message: Unsupported version: 2 with address:kaspa:q2cm3y2xe65ne797cmar6ntecfjcdtqf585whum65kgyv20k8jzhmtq5q5qe6c9\""); case 2: case "end": return _context7.stop(); } }, _callee7); }))); it('Test pubkeyOrScriptHashToPayment with script P2PK_SCHNORR', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8() { var publicKey, _getPubkeyOrScriptHas, pubkeyOrScriptHash, addressVersion, _pubkeyOrScriptHashTo, address, outScript; return _regeneratorRuntime().wrap(function _callee8$(_context8) { while (1) switch (_context8.prev = _context8.next) { case 0: publicKey = '03da8eaa97bf4457368188c78e92661fdf2d96ce166b225d0dc6c1c3e322ef62ef'; _getPubkeyOrScriptHas = (0, _address.getPubkeyOrScriptHash)(_types.ScriptType.P2PK_SCHNORR, publicKey), pubkeyOrScriptHash = _getPubkeyOrScriptHas.pubkeyOrScriptHash, addressVersion = _getPubkeyOrScriptHas.addressVersion; _pubkeyOrScriptHashTo = (0, _address.pubkeyOrScriptHashToPayment)(pubkeyOrScriptHash, addressVersion), address = _pubkeyOrScriptHashTo.address, outScript = _pubkeyOrScriptHashTo.outScript; expect(address).toMatchInlineSnapshot("\"kaspa:qrdga25hhaz9wd5p3rrcaynxrl0jm9kwze4jyhgdcmqu8cezaa3w7xh9a3xd9\""); expect(outScript.toString('hex')).toMatchInlineSnapshot("\"20da8eaa97bf4457368188c78e92661fdf2d96ce166b225d0dc6c1c3e322ef62efac\""); case 5: case "end": return _context8.stop(); } }, _callee8); }))); it('Test pubkeyOrScriptHashToPayment with script P2PK_ECDSA', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9() { var publicKey, _getPubkeyOrScriptHas2, pubkeyOrScriptHash, addressVersion, _pubkeyOrScriptHashTo2, address, outScript; return _regeneratorRuntime().wrap(function _callee9$(_context9) { while (1) switch (_context9.prev = _context9.next) { case 0: publicKey = '03da8eaa97bf4457368188c78e92661fdf2d96ce166b225d0dc6c1c3e322ef62ef'; _getPubkeyOrScriptHas2 = (0, _address.getPubkeyOrScriptHash)(_types.ScriptType.P2PK_ECDSA, publicKey), pubkeyOrScriptHash = _getPubkeyOrScriptHas2.pubkeyOrScriptHash, addressVersion = _getPubkeyOrScriptHas2.addressVersion; _pubkeyOrScriptHashTo2 = (0, _address.pubkeyOrScriptHashToPayment)(pubkeyOrScriptHash, addressVersion), address = _pubkeyOrScriptHashTo2.address, outScript = _pubkeyOrScriptHashTo2.outScript; expect(address).toMatchInlineSnapshot("\"kaspa:qypa4r42j7l5g4eksxyv0r5jvc0a7tvkectxkgjaphrvrslrythk9mc0huhkd8a\""); expect(outScript.toString('hex')).toMatchInlineSnapshot("\"2103da8eaa97bf4457368188c78e92661fdf2d96ce166b225d0dc6c1c3e322ef62efab\""); case 5: case "end": return _context9.stop(); } }, _callee9); }))); it('Test pubkeyOrScriptHashToPayment with script P2SH', /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee10() { var publicKey; return _regeneratorRuntime().wrap(function _callee10$(_context10) { while (1) switch (_context10.prev = _context10.next) { case 0: publicKey = '03da8eaa97bf4457368188c78e92661fdf2d96ce166b225d0dc6c1c3e322ef62ef'; expect(function () { return (0, _address.getPubkeyOrScriptHash)(_types.ScriptType.P2SH, publicKey); }).toThrowErrorMatchingInlineSnapshot("\"error function: getPubkeyOrScriptHash, message: Unsupported scriptType: 2, publicKey: 03da8eaa97bf4457368188c78e92661fdf2d96ce166b225d0dc6c1c3e322ef62ef\""); case 2: case "end": return _context10.stop(); } }, _callee10); }))); it('Test decodeAddress throws error if address with unknown version', function () { var address = 'kaspa:q2cm3y2xe65ne797cmar6ntecfjcdtqf585whum65kgyv20k8jzhmtq5q5qe6c9'; expect(function () { return (0, _address.decodeAddress)(address); }).toThrowErrorMatchingInlineSnapshot("\"error function: decodeAddress, message: Unsupported version: 2 with address:kaspa:q2cm3y2xe65ne797cmar6ntecfjcdtqf585whum65kgyv20k8jzhmtq5q5qe6c9\""); }); }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZXMiLCJyZXF1aXJlIiwiX2FkZHJlc3MiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwiZSIsInQiLCJyIiwiT2JqZWN0IiwicHJvdG90eXBlIiwibiIsImhhc093blByb3BlcnR5IiwibyIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJpIiwiU3ltYm9sIiwiYSIsIml0ZXJhdG9yIiwiYyIsImFzeW5jSXRlcmF0b3IiLCJ1IiwidG9TdHJpbmdUYWciLCJkZWZpbmUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJ3cmFwIiwiR2VuZXJhdG9yIiwiY3JlYXRlIiwiQ29udGV4dCIsIm1ha2VJbnZva2VNZXRob2QiLCJ0cnlDYXRjaCIsInR5cGUiLCJhcmciLCJjYWxsIiwiaCIsImwiLCJmIiwicyIsInkiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwicCIsImQiLCJnZXRQcm90b3R5cGVPZiIsInYiLCJ2YWx1ZXMiLCJnIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiZm9yRWFjaCIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiaW52b2tlIiwiX3R5cGVvZiIsInJlc29sdmUiLCJfX2F3YWl0IiwidGhlbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiRXJyb3IiLCJkb25lIiwibWV0aG9kIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJUeXBlRXJyb3IiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsImlzTmFOIiwibGVuZ3RoIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiY29uc3RydWN0b3IiLCJuYW1lIiwibWFyayIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiYXdyYXAiLCJhc3luYyIsIlByb21pc2UiLCJrZXlzIiwicmV2ZXJzZSIsInBvcCIsInByZXYiLCJjaGFyQXQiLCJzbGljZSIsInN0b3AiLCJydmFsIiwiaGFuZGxlIiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJkZWxlZ2F0ZVlpZWxkIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiZ2VuIiwicmVqZWN0IiwiX25leHQiLCJfdGhyb3ciLCJrZXkiLCJpbmZvIiwiZXJyb3IiLCJfYXN5bmNUb0dlbmVyYXRvciIsImZuIiwic2VsZiIsImFyZ3MiLCJhcmd1bWVudHMiLCJhcHBseSIsImVyciIsInVuZGVmaW5lZCIsImRlc2NyaWJlIiwiaXQiLCJfY2FsbGVlIiwicHVibGljS2V5IiwieE9ubHlQdWJLZXkiLCJleHBlY3RlZEFkZHJlc3MiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwidG9YT25seSIsImV4cGVjdCIsImdldEFkZHJlc3NCeVB1YmxpY0tleU9yU2NyaXB0SGFzaCIsIkFkZHJlc3NWZXJzaW9uIiwiUFVCS0VZIiwidG9CZSIsIl9jYWxsZWUyIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiUFVCS0VZX0VDRFNBIiwiX2NhbGxlZTMiLCJzY3JpcHRIYXNoIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiU0NSSVBUX0hBU0giLCJfY2FsbGVlNCIsImFkZHJlc3MiLCJfYWRkcmVzc1RvT3V0U2NyaXB0Iiwic2NyaXB0VHlwZSIsIm91dFNjcmlwdCIsIm91dFB1YmtleU9ySGFzaCIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsImFkZHJlc3NUb091dFNjcmlwdCIsIlNjcmlwdFR5cGUiLCJQMlBLX1NDSE5PUlIiLCJ0b1N0cmluZyIsInRvTWF0Y2hJbmxpbmVTbmFwc2hvdCIsIl9jYWxsZWU1IiwiX2FkZHJlc3NUb091dFNjcmlwdDIiLCJfY2FsbGVlNSQiLCJfY29udGV4dDUiLCJQMlBLX0VDRFNBIiwiX2NhbGxlZTYiLCJfYWRkcmVzc1RvT3V0U2NyaXB0MyIsIl9jYWxsZWU2JCIsIl9jb250ZXh0NiIsIlAyU0giLCJfY2FsbGVlNyIsIl9jYWxsZWU3JCIsIl9jb250ZXh0NyIsInRvVGhyb3dFcnJvck1hdGNoaW5nSW5saW5lU25hcHNob3QiLCJfY2FsbGVlOCIsIl9nZXRQdWJrZXlPclNjcmlwdEhhcyIsInB1YmtleU9yU2NyaXB0SGFzaCIsImFkZHJlc3NWZXJzaW9uIiwiX3B1YmtleU9yU2NyaXB0SGFzaFRvIiwiX2NhbGxlZTgkIiwiX2NvbnRleHQ4IiwiZ2V0UHVia2V5T3JTY3JpcHRIYXNoIiwicHVia2V5T3JTY3JpcHRIYXNoVG9QYXltZW50IiwiX2NhbGxlZTkiLCJfZ2V0UHVia2V5T3JTY3JpcHRIYXMyIiwiX3B1YmtleU9yU2NyaXB0SGFzaFRvMiIsIl9jYWxsZWU5JCIsIl9jb250ZXh0OSIsIl9jYWxsZWUxMCIsIl9jYWxsZWUxMCQiLCJfY29udGV4dDEwIiwiZGVjb2RlQWRkcmVzcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9fX3Rlc3RfXy9hZGRyZXNzLnRlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWRkcmVzc1ZlcnNpb24sIFNjcmlwdFR5cGUgfSBmcm9tICcuLi8uLi9jb25maWcvdHlwZXMnO1xuaW1wb3J0IHtcbiAgYWRkcmVzc1RvT3V0U2NyaXB0LFxuICBkZWNvZGVBZGRyZXNzLFxuICBnZXRBZGRyZXNzQnlQdWJsaWNLZXlPclNjcmlwdEhhc2gsXG4gIGdldFB1YmtleU9yU2NyaXB0SGFzaCxcbiAgcHVia2V5T3JTY3JpcHRIYXNoVG9QYXltZW50LFxuICB0b1hPbmx5LFxufSBmcm9tICcuLi9hZGRyZXNzJztcblxuZGVzY3JpYmUoJ1Rlc3QgS0FTIFNESycsICgpID0+IHtcbiAgaXQoJ1Rlc3QgZ2V0QWRkcmVzc0J5UHVibGljS2V5IHdpdGggdmVyc2lvbiAwJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHB1YmxpY0tleSA9ICcwM2RhOGVhYTk3YmY0NDU3MzY4MTg4Yzc4ZTkyNjYxZmRmMmQ5NmNlMTY2YjIyNWQwZGM2YzFjM2UzMjJlZjYyZWYnO1xuICAgIGNvbnN0IHhPbmx5UHViS2V5ID0gdG9YT25seShwdWJsaWNLZXkpO1xuICAgIGNvbnN0IGV4cGVjdGVkQWRkcmVzcyA9ICdrYXNwYTpxcmRnYTI1aGhhejl3ZDVwM3JyY2F5bnhybDBqbTlrd3plNGp5aGdkY21xdThjZXphYTN3N3hoOWEzeGQ5JztcbiAgICBleHBlY3QoZ2V0QWRkcmVzc0J5UHVibGljS2V5T3JTY3JpcHRIYXNoKHhPbmx5UHViS2V5LCBBZGRyZXNzVmVyc2lvbi5QVUJLRVkpKS50b0JlKGV4cGVjdGVkQWRkcmVzcyk7XG4gIH0pO1xuXG4gIGl0KCdUZXN0IGdldEFkZHJlc3NCeVB1YmxpY0tleSB3aXRoIHZlcnNpb24gMScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwdWJsaWNLZXkgPSAnMDNkYThlYWE5N2JmNDQ1NzM2ODE4OGM3OGU5MjY2MWZkZjJkOTZjZTE2NmIyMjVkMGRjNmMxYzNlMzIyZWY2MmVmJztcbiAgICBjb25zdCBleHBlY3RlZEFkZHJlc3MgPSAna2FzcGE6cXlwYTRyNDJqN2w1ZzRla3N4eXYwcjVqdmMwYTd0dmtlY3R4a2dqYXBocnZyc2xyeXRoazltYzBodWhrZDhhJztcbiAgICBleHBlY3QoZ2V0QWRkcmVzc0J5UHVibGljS2V5T3JTY3JpcHRIYXNoKHB1YmxpY0tleSwgQWRkcmVzc1ZlcnNpb24uUFVCS0VZX0VDRFNBKSkudG9CZShleHBlY3RlZEFkZHJlc3MpO1xuICB9KTtcblxuICBpdCgnVGVzdCBnZXRBZGRyZXNzQnlQdWJsaWNLZXkgd2l0aCB2ZXJzaW9uIDgnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2NyaXB0SGFzaCA9ICdiODE1ZjM4NDFjZmI4N2I4ZmQ4MzRiMmMxY2JhOWE4NzkwZmI1ZjU2OGNjN2IzYTM3N2FjZDcxMzUwZDA4NjkxJztcbiAgICBjb25zdCBleHBlY3RlZEFkZHJlc3MgPSAna2FzcGE6cHp1cHR1dXlybmFjMHc4YXNkOWpjODk2bjJyZXA3NmwyNnh2MHZhcnc3a2R3eTZzNnpyZnp2c3Vrc3N5Mic7XG4gICAgZXhwZWN0KGdldEFkZHJlc3NCeVB1YmxpY0tleU9yU2NyaXB0SGFzaChzY3JpcHRIYXNoLCBBZGRyZXNzVmVyc2lvbi5TQ1JJUFRfSEFTSCkpLnRvQmUoZXhwZWN0ZWRBZGRyZXNzKTtcbiAgfSk7XG5cbiAgaXQoJ1Rlc3QgYWRkcmVzc1RvT3V0U2NyaXB0IHdpdGggUDJQS19TQ0hOT1JSIHNjcmlwdCBhZGRyZXNzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGFkZHJlc3MgPSAna2FzcGE6cXJkZ2EyNWhoYXo5d2Q1cDNycmNheW54cmwwam05a3d6ZTRqeWhnZGNtcXU4Y2V6YWEzdzd4aDlhM3hkOSc7XG4gICAgY29uc3QgeyBzY3JpcHRUeXBlLCBvdXRTY3JpcHQsIG91dFB1YmtleU9ySGFzaCB9ID0gYWRkcmVzc1RvT3V0U2NyaXB0KGFkZHJlc3MpO1xuICAgIGV4cGVjdChzY3JpcHRUeXBlKS50b0JlKFNjcmlwdFR5cGUuUDJQS19TQ0hOT1JSKTtcbiAgICBleHBlY3Qob3V0U2NyaXB0LnRvU3RyaW5nKCdoZXgnKSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiMjBkYThlYWE5N2JmNDQ1NzM2ODE4OGM3OGU5MjY2MWZkZjJkOTZjZTE2NmIyMjVkMGRjNmMxYzNlMzIyZWY2MmVmYWNcImBcbiAgICApO1xuICAgIGV4cGVjdChvdXRQdWJrZXlPckhhc2gudG9TdHJpbmcoJ2hleCcpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJkYThlYWE5N2JmNDQ1NzM2ODE4OGM3OGU5MjY2MWZkZjJkOTZjZTE2NmIyMjVkMGRjNmMxYzNlMzIyZWY2MmVmXCJgXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ1Rlc3QgYWRkcmVzc1RvT3V0U2NyaXB0IHdpdGggUDJQS19FQ0RTQSBzY3JpcHQgYWRkcmVzcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhZGRyZXNzID0gJ2thc3BhOnF5cG1yd3kzZ204MmowOGNobXIwNTAyZDA4cHh0cDR2cHhzNzM2bG4wMmplcTMzZjdjN2cybGdrNWE4ZWdjNCc7XG4gICAgY29uc3QgeyBzY3JpcHRUeXBlLCBvdXRTY3JpcHQsIG91dFB1YmtleU9ySGFzaCB9ID0gYWRkcmVzc1RvT3V0U2NyaXB0KGFkZHJlc3MpO1xuICAgIGV4cGVjdChzY3JpcHRUeXBlKS50b0JlKFNjcmlwdFR5cGUuUDJQS19FQ0RTQSk7XG4gICAgZXhwZWN0KG91dFNjcmlwdC50b1N0cmluZygnaGV4JykpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcIjIxMDNiMWI4OTE0NmNlYTkzY2Y4YmVjNmZhM2Q0ZDc5YzI2NTg2YWMwOWExZThlYmYzN2FhNTkwNDYyOWY2M2M4NTdkYWJcImBcbiAgICApO1xuICAgIGV4cGVjdChvdXRQdWJrZXlPckhhc2gudG9TdHJpbmcoJ2hleCcpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCIwM2IxYjg5MTQ2Y2VhOTNjZjhiZWM2ZmEzZDRkNzljMjY1ODZhYzA5YTFlOGViZjM3YWE1OTA0NjI5ZjYzYzg1N2RcImBcbiAgICApO1xuICB9KTtcblxuICBpdCgnVGVzdCBhZGRyZXNzVG9PdXRTY3JpcHQgd2l0aCBzY3JpcHQgUDJTSCBhZGRyZXNzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGFkZHJlc3MgPSAna2FzcGE6cHp1cHR1dXlybmFjMHc4YXNkOWpjODk2bjJyZXA3NmwyNnh2MHZhcnc3a2R3eTZzNnpyZnp2c3Vrc3N5Mic7XG4gICAgY29uc3QgeyBzY3JpcHRUeXBlLCBvdXRTY3JpcHQsIG91dFB1YmtleU9ySGFzaCB9ID0gYWRkcmVzc1RvT3V0U2NyaXB0KGFkZHJlc3MpO1xuICAgIGV4cGVjdChzY3JpcHRUeXBlKS50b0JlKFNjcmlwdFR5cGUuUDJTSCk7XG4gICAgZXhwZWN0KG91dFNjcmlwdC50b1N0cmluZygnaGV4JykpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcImFhMjBiODE1ZjM4NDFjZmI4N2I4ZmQ4MzRiMmMxY2JhOWE4NzkwZmI1ZjU2OGNjN2IzYTM3N2FjZDcxMzUwZDA4NjkxODdcImBcbiAgICApO1xuICAgIGV4cGVjdChvdXRQdWJrZXlPckhhc2gudG9TdHJpbmcoJ2hleCcpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCJiODE1ZjM4NDFjZmI4N2I4ZmQ4MzRiMmMxY2JhOWE4NzkwZmI1ZjU2OGNjN2IzYTM3N2FjZDcxMzUwZDA4NjkxXCJgXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ1Rlc3QgYWRkcmVzc1RvT3V0U2NyaXB0IHdpdGggdW5zdXBwb3J0ZWQgdmVyc2lvbiBhZGRyZXNzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGFkZHJlc3MgPSAna2FzcGE6cTJjbTN5MnhlNjVuZTc5N2NtYXI2bnRlY2ZqY2R0cWY1ODV3aHVtNjVrZ3l2MjBrOGp6aG10cTVxNXFlNmM5JztcbiAgICBleHBlY3QoKCkgPT4gYWRkcmVzc1RvT3V0U2NyaXB0KGFkZHJlc3MpKS50b1Rocm93RXJyb3JNYXRjaGluZ0lubGluZVNuYXBzaG90KFxuICAgICAgYFwiZXJyb3IgZnVuY3Rpb246IGRlY29kZUFkZHJlc3MsIG1lc3NhZ2U6IFVuc3VwcG9ydGVkIHZlcnNpb246IDIgd2l0aCBhZGRyZXNzOmthc3BhOnEyY20zeTJ4ZTY1bmU3OTdjbWFyNm50ZWNmamNkdHFmNTg1d2h1bTY1a2d5djIwazhqemhtdHE1cTVxZTZjOVwiYFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdUZXN0IHB1YmtleU9yU2NyaXB0SGFzaFRvUGF5bWVudCB3aXRoIHNjcmlwdCBQMlBLX1NDSE5PUlInLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcHVibGljS2V5ID0gJzAzZGE4ZWFhOTdiZjQ0NTczNjgxODhjNzhlOTI2NjFmZGYyZDk2Y2UxNjZiMjI1ZDBkYzZjMWMzZTMyMmVmNjJlZic7XG4gICAgY29uc3QgeyBwdWJrZXlPclNjcmlwdEhhc2gsIGFkZHJlc3NWZXJzaW9uIH0gPSBnZXRQdWJrZXlPclNjcmlwdEhhc2goU2NyaXB0VHlwZS5QMlBLX1NDSE5PUlIsIHB1YmxpY0tleSk7XG4gICAgY29uc3QgeyBhZGRyZXNzLCBvdXRTY3JpcHQgfSA9IHB1YmtleU9yU2NyaXB0SGFzaFRvUGF5bWVudChwdWJrZXlPclNjcmlwdEhhc2gsIGFkZHJlc3NWZXJzaW9uKTtcbiAgICBleHBlY3QoYWRkcmVzcykudG9NYXRjaElubGluZVNuYXBzaG90KGBcImthc3BhOnFyZGdhMjVoaGF6OXdkNXAzcnJjYXlueHJsMGptOWt3emU0anloZ2RjbXF1OGNlemFhM3c3eGg5YTN4ZDlcImApO1xuICAgIGV4cGVjdChvdXRTY3JpcHQudG9TdHJpbmcoJ2hleCcpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICBgXCIyMGRhOGVhYTk3YmY0NDU3MzY4MTg4Yzc4ZTkyNjYxZmRmMmQ5NmNlMTY2YjIyNWQwZGM2YzFjM2UzMjJlZjYyZWZhY1wiYFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdUZXN0IHB1YmtleU9yU2NyaXB0SGFzaFRvUGF5bWVudCB3aXRoIHNjcmlwdCBQMlBLX0VDRFNBJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHB1YmxpY0tleSA9ICcwM2RhOGVhYTk3YmY0NDU3MzY4MTg4Yzc4ZTkyNjYxZmRmMmQ5NmNlMTY2YjIyNWQwZGM2YzFjM2UzMjJlZjYyZWYnO1xuICAgIGNvbnN0IHsgcHVia2V5T3JTY3JpcHRIYXNoLCBhZGRyZXNzVmVyc2lvbiB9ID0gZ2V0UHVia2V5T3JTY3JpcHRIYXNoKFNjcmlwdFR5cGUuUDJQS19FQ0RTQSwgcHVibGljS2V5KTtcbiAgICBjb25zdCB7IGFkZHJlc3MsIG91dFNjcmlwdCB9ID0gcHVia2V5T3JTY3JpcHRIYXNoVG9QYXltZW50KHB1YmtleU9yU2NyaXB0SGFzaCwgYWRkcmVzc1ZlcnNpb24pO1xuICAgIGV4cGVjdChhZGRyZXNzKS50b01hdGNoSW5saW5lU25hcHNob3QoYFwia2FzcGE6cXlwYTRyNDJqN2w1ZzRla3N4eXYwcjVqdmMwYTd0dmtlY3R4a2dqYXBocnZyc2xyeXRoazltYzBodWhrZDhhXCJgKTtcbiAgICBleHBlY3Qob3V0U2NyaXB0LnRvU3RyaW5nKCdoZXgnKSkudG9NYXRjaElubGluZVNuYXBzaG90KFxuICAgICAgYFwiMjEwM2RhOGVhYTk3YmY0NDU3MzY4MTg4Yzc4ZTkyNjYxZmRmMmQ5NmNlMTY2YjIyNWQwZGM2YzFjM2UzMjJlZjYyZWZhYlwiYFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdUZXN0IHB1YmtleU9yU2NyaXB0SGFzaFRvUGF5bWVudCB3aXRoIHNjcmlwdCBQMlNIJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHB1YmxpY0tleSA9ICcwM2RhOGVhYTk3YmY0NDU3MzY4MTg4Yzc4ZTkyNjYxZmRmMmQ5NmNlMTY2YjIyNWQwZGM2YzFjM2UzMjJlZjYyZWYnO1xuICAgIGV4cGVjdCgoKSA9PiBnZXRQdWJrZXlPclNjcmlwdEhhc2goU2NyaXB0VHlwZS5QMlNILCBwdWJsaWNLZXkpKS50b1Rocm93RXJyb3JNYXRjaGluZ0lubGluZVNuYXBzaG90KFxuICAgICAgYFwiZXJyb3IgZnVuY3Rpb246IGdldFB1YmtleU9yU2NyaXB0SGFzaCwgbWVzc2FnZTogVW5zdXBwb3J0ZWQgc2NyaXB0VHlwZTogMiwgcHVibGljS2V5OiAwM2RhOGVhYTk3YmY0NDU3MzY4MTg4Yzc4ZTkyNjYxZmRmMmQ5NmNlMTY2YjIyNWQwZGM2YzFjM2UzMjJlZjYyZWZcImBcbiAgICApO1xuICB9KTtcblxuICBpdCgnVGVzdCBkZWNvZGVBZGRyZXNzIHRocm93cyBlcnJvciBpZiBhZGRyZXNzIHdpdGggdW5rbm93biB2ZXJzaW9uJywgKCkgPT4ge1xuICAgIGNvbnN0IGFkZHJlc3MgPSAna2FzcGE6cTJjbTN5MnhlNjVuZTc5N2NtYXI2bnRlY2ZqY2R0cWY1ODV3aHVtNjVrZ3l2MjBrOGp6aG10cTVxNXFlNmM5JztcbiAgICBleHBlY3QoKCkgPT4gZGVjb2RlQWRkcmVzcyhhZGRyZXNzKSkudG9UaHJvd0Vycm9yTWF0Y2hpbmdJbmxpbmVTbmFwc2hvdChcbiAgICAgIGBcImVycm9yIGZ1bmN0aW9uOiBkZWNvZGVBZGRyZXNzLCBtZXNzYWdlOiBVbnN1cHBvcnRlZCB2ZXJzaW9uOiAyIHdpdGggYWRkcmVzczprYXNwYTpxMmNtM3kyeGU2NW5lNzk3Y21hcjZudGVjZmpjZHRxZjU4NXdodW02NWtneXYyMGs4anpobXRxNXE1cWU2YzlcImBcbiAgICApO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFPb0IsU0FBQUUsb0JBQUEsa0JBUHBCLHFKQUFBQSxtQkFBQSxZQUFBQSxvQkFBQSxXQUFBQyxDQUFBLFNBQUFDLENBQUEsRUFBQUQsQ0FBQSxPQUFBRSxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsU0FBQSxFQUFBQyxDQUFBLEdBQUFILENBQUEsQ0FBQUksY0FBQSxFQUFBQyxDQUFBLEdBQUFKLE1BQUEsQ0FBQUssY0FBQSxjQUFBUCxDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxJQUFBRCxDQUFBLENBQUFELENBQUEsSUFBQUUsQ0FBQSxDQUFBTyxLQUFBLEtBQUFDLENBQUEsd0JBQUFDLE1BQUEsR0FBQUEsTUFBQSxPQUFBQyxDQUFBLEdBQUFGLENBQUEsQ0FBQUcsUUFBQSxrQkFBQUMsQ0FBQSxHQUFBSixDQUFBLENBQUFLLGFBQUEsdUJBQUFDLENBQUEsR0FBQU4sQ0FBQSxDQUFBTyxXQUFBLDhCQUFBQyxPQUFBakIsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsV0FBQUMsTUFBQSxDQUFBSyxjQUFBLENBQUFQLENBQUEsRUFBQUQsQ0FBQSxJQUFBUyxLQUFBLEVBQUFQLENBQUEsRUFBQWlCLFVBQUEsTUFBQUMsWUFBQSxNQUFBQyxRQUFBLFNBQUFwQixDQUFBLENBQUFELENBQUEsV0FBQWtCLE1BQUEsbUJBQUFqQixDQUFBLElBQUFpQixNQUFBLFlBQUFB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