quintsmart_obsidian-course-.../main.js
2025-05-03 11:41:37 +02:00

3058 lines
503 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
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 __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// node_modules/jszip/dist/jszip.min.js
var require_jszip_min = __commonJS({
"node_modules/jszip/dist/jszip.min.js"(exports, module2) {
!function(e) {
if ("object" == typeof exports && "undefined" != typeof module2)
module2.exports = e();
else if ("function" == typeof define && define.amd)
define([], e);
else {
("undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this).JSZip = e();
}
}(function() {
return function s(a, o, h) {
function u(r, e2) {
if (!o[r]) {
if (!a[r]) {
var t = "function" == typeof require && require;
if (!e2 && t)
return t(r, true);
if (l)
return l(r, true);
var n = new Error("Cannot find module '" + r + "'");
throw n.code = "MODULE_NOT_FOUND", n;
}
var i = o[r] = { exports: {} };
a[r][0].call(i.exports, function(e3) {
var t2 = a[r][1][e3];
return u(t2 || e3);
}, i, i.exports, s, a, o, h);
}
return o[r].exports;
}
for (var l = "function" == typeof require && require, e = 0; e < h.length; e++)
u(h[e]);
return u;
}({ 1: [function(e, t, r) {
"use strict";
var d = e("./utils"), c = e("./support"), p = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
r.encode = function(e2) {
for (var t2, r2, n, i, s, a, o, h = [], u = 0, l = e2.length, f = l, c2 = "string" !== d.getTypeOf(e2); u < e2.length; )
f = l - u, n = c2 ? (t2 = e2[u++], r2 = u < l ? e2[u++] : 0, u < l ? e2[u++] : 0) : (t2 = e2.charCodeAt(u++), r2 = u < l ? e2.charCodeAt(u++) : 0, u < l ? e2.charCodeAt(u++) : 0), i = t2 >> 2, s = (3 & t2) << 4 | r2 >> 4, a = 1 < f ? (15 & r2) << 2 | n >> 6 : 64, o = 2 < f ? 63 & n : 64, h.push(p.charAt(i) + p.charAt(s) + p.charAt(a) + p.charAt(o));
return h.join("");
}, r.decode = function(e2) {
var t2, r2, n, i, s, a, o = 0, h = 0, u = "data:";
if (e2.substr(0, u.length) === u)
throw new Error("Invalid base64 input, it looks like a data url.");
var l, f = 3 * (e2 = e2.replace(/[^A-Za-z0-9+/=]/g, "")).length / 4;
if (e2.charAt(e2.length - 1) === p.charAt(64) && f--, e2.charAt(e2.length - 2) === p.charAt(64) && f--, f % 1 != 0)
throw new Error("Invalid base64 input, bad content length.");
for (l = c.uint8array ? new Uint8Array(0 | f) : new Array(0 | f); o < e2.length; )
t2 = p.indexOf(e2.charAt(o++)) << 2 | (i = p.indexOf(e2.charAt(o++))) >> 4, r2 = (15 & i) << 4 | (s = p.indexOf(e2.charAt(o++))) >> 2, n = (3 & s) << 6 | (a = p.indexOf(e2.charAt(o++))), l[h++] = t2, 64 !== s && (l[h++] = r2), 64 !== a && (l[h++] = n);
return l;
};
}, { "./support": 30, "./utils": 32 }], 2: [function(e, t, r) {
"use strict";
var n = e("./external"), i = e("./stream/DataWorker"), s = e("./stream/Crc32Probe"), a = e("./stream/DataLengthProbe");
function o(e2, t2, r2, n2, i2) {
this.compressedSize = e2, this.uncompressedSize = t2, this.crc32 = r2, this.compression = n2, this.compressedContent = i2;
}
o.prototype = { getContentWorker: function() {
var e2 = new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a("data_length")), t2 = this;
return e2.on("end", function() {
if (this.streamInfo.data_length !== t2.uncompressedSize)
throw new Error("Bug : uncompressed data size mismatch");
}), e2;
}, getCompressedWorker: function() {
return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize", this.compressedSize).withStreamInfo("uncompressedSize", this.uncompressedSize).withStreamInfo("crc32", this.crc32).withStreamInfo("compression", this.compression);
} }, o.createWorkerFrom = function(e2, t2, r2) {
return e2.pipe(new s()).pipe(new a("uncompressedSize")).pipe(t2.compressWorker(r2)).pipe(new a("compressedSize")).withStreamInfo("compression", t2);
}, t.exports = o;
}, { "./external": 6, "./stream/Crc32Probe": 25, "./stream/DataLengthProbe": 26, "./stream/DataWorker": 27 }], 3: [function(e, t, r) {
"use strict";
var n = e("./stream/GenericWorker");
r.STORE = { magic: "\0\0", compressWorker: function() {
return new n("STORE compression");
}, uncompressWorker: function() {
return new n("STORE decompression");
} }, r.DEFLATE = e("./flate");
}, { "./flate": 7, "./stream/GenericWorker": 28 }], 4: [function(e, t, r) {
"use strict";
var n = e("./utils");
var o = function() {
for (var e2, t2 = [], r2 = 0; r2 < 256; r2++) {
e2 = r2;
for (var n2 = 0; n2 < 8; n2++)
e2 = 1 & e2 ? 3988292384 ^ e2 >>> 1 : e2 >>> 1;
t2[r2] = e2;
}
return t2;
}();
t.exports = function(e2, t2) {
return void 0 !== e2 && e2.length ? "string" !== n.getTypeOf(e2) ? function(e3, t3, r2, n2) {
var i = o, s = n2 + r2;
e3 ^= -1;
for (var a = n2; a < s; a++)
e3 = e3 >>> 8 ^ i[255 & (e3 ^ t3[a])];
return -1 ^ e3;
}(0 | t2, e2, e2.length, 0) : function(e3, t3, r2, n2) {
var i = o, s = n2 + r2;
e3 ^= -1;
for (var a = n2; a < s; a++)
e3 = e3 >>> 8 ^ i[255 & (e3 ^ t3.charCodeAt(a))];
return -1 ^ e3;
}(0 | t2, e2, e2.length, 0) : 0;
};
}, { "./utils": 32 }], 5: [function(e, t, r) {
"use strict";
r.base64 = false, r.binary = false, r.dir = false, r.createFolders = true, r.date = null, r.compression = null, r.compressionOptions = null, r.comment = null, r.unixPermissions = null, r.dosPermissions = null;
}, {}], 6: [function(e, t, r) {
"use strict";
var n = null;
n = "undefined" != typeof Promise ? Promise : e("lie"), t.exports = { Promise: n };
}, { lie: 37 }], 7: [function(e, t, r) {
"use strict";
var n = "undefined" != typeof Uint8Array && "undefined" != typeof Uint16Array && "undefined" != typeof Uint32Array, i = e("pako"), s = e("./utils"), a = e("./stream/GenericWorker"), o = n ? "uint8array" : "array";
function h(e2, t2) {
a.call(this, "FlateWorker/" + e2), this._pako = null, this._pakoAction = e2, this._pakoOptions = t2, this.meta = {};
}
r.magic = "\b\0", s.inherits(h, a), h.prototype.processChunk = function(e2) {
this.meta = e2.meta, null === this._pako && this._createPako(), this._pako.push(s.transformTo(o, e2.data), false);
}, h.prototype.flush = function() {
a.prototype.flush.call(this), null === this._pako && this._createPako(), this._pako.push([], true);
}, h.prototype.cleanUp = function() {
a.prototype.cleanUp.call(this), this._pako = null;
}, h.prototype._createPako = function() {
this._pako = new i[this._pakoAction]({ raw: true, level: this._pakoOptions.level || -1 });
var t2 = this;
this._pako.onData = function(e2) {
t2.push({ data: e2, meta: t2.meta });
};
}, r.compressWorker = function(e2) {
return new h("Deflate", e2);
}, r.uncompressWorker = function() {
return new h("Inflate", {});
};
}, { "./stream/GenericWorker": 28, "./utils": 32, pako: 38 }], 8: [function(e, t, r) {
"use strict";
function A(e2, t2) {
var r2, n2 = "";
for (r2 = 0; r2 < t2; r2++)
n2 += String.fromCharCode(255 & e2), e2 >>>= 8;
return n2;
}
function n(e2, t2, r2, n2, i2, s2) {
var a, o, h = e2.file, u = e2.compression, l = s2 !== O.utf8encode, f = I.transformTo("string", s2(h.name)), c = I.transformTo("string", O.utf8encode(h.name)), d = h.comment, p = I.transformTo("string", s2(d)), m = I.transformTo("string", O.utf8encode(d)), _ = c.length !== h.name.length, g = m.length !== d.length, b = "", v = "", y = "", w = h.dir, k = h.date, x = { crc32: 0, compressedSize: 0, uncompressedSize: 0 };
t2 && !r2 || (x.crc32 = e2.crc32, x.compressedSize = e2.compressedSize, x.uncompressedSize = e2.uncompressedSize);
var S = 0;
t2 && (S |= 8), l || !_ && !g || (S |= 2048);
var z = 0, C = 0;
w && (z |= 16), "UNIX" === i2 ? (C = 798, z |= function(e3, t3) {
var r3 = e3;
return e3 || (r3 = t3 ? 16893 : 33204), (65535 & r3) << 16;
}(h.unixPermissions, w)) : (C = 20, z |= function(e3) {
return 63 & (e3 || 0);
}(h.dosPermissions)), a = k.getUTCHours(), a <<= 6, a |= k.getUTCMinutes(), a <<= 5, a |= k.getUTCSeconds() / 2, o = k.getUTCFullYear() - 1980, o <<= 4, o |= k.getUTCMonth() + 1, o <<= 5, o |= k.getUTCDate(), _ && (v = A(1, 1) + A(B(f), 4) + c, b += "up" + A(v.length, 2) + v), g && (y = A(1, 1) + A(B(p), 4) + m, b += "uc" + A(y.length, 2) + y);
var E = "";
return E += "\n\0", E += A(S, 2), E += u.magic, E += A(a, 2), E += A(o, 2), E += A(x.crc32, 4), E += A(x.compressedSize, 4), E += A(x.uncompressedSize, 4), E += A(f.length, 2), E += A(b.length, 2), { fileRecord: R.LOCAL_FILE_HEADER + E + f + b, dirRecord: R.CENTRAL_FILE_HEADER + A(C, 2) + E + A(p.length, 2) + "\0\0\0\0" + A(z, 4) + A(n2, 4) + f + b + p };
}
var I = e("../utils"), i = e("../stream/GenericWorker"), O = e("../utf8"), B = e("../crc32"), R = e("../signature");
function s(e2, t2, r2, n2) {
i.call(this, "ZipFileWorker"), this.bytesWritten = 0, this.zipComment = t2, this.zipPlatform = r2, this.encodeFileName = n2, this.streamFiles = e2, this.accumulate = false, this.contentBuffer = [], this.dirRecords = [], this.currentSourceOffset = 0, this.entriesCount = 0, this.currentFile = null, this._sources = [];
}
I.inherits(s, i), s.prototype.push = function(e2) {
var t2 = e2.meta.percent || 0, r2 = this.entriesCount, n2 = this._sources.length;
this.accumulate ? this.contentBuffer.push(e2) : (this.bytesWritten += e2.data.length, i.prototype.push.call(this, { data: e2.data, meta: { currentFile: this.currentFile, percent: r2 ? (t2 + 100 * (r2 - n2 - 1)) / r2 : 100 } }));
}, s.prototype.openedSource = function(e2) {
this.currentSourceOffset = this.bytesWritten, this.currentFile = e2.file.name;
var t2 = this.streamFiles && !e2.file.dir;
if (t2) {
var r2 = n(e2, t2, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);
this.push({ data: r2.fileRecord, meta: { percent: 0 } });
} else
this.accumulate = true;
}, s.prototype.closedSource = function(e2) {
this.accumulate = false;
var t2 = this.streamFiles && !e2.file.dir, r2 = n(e2, t2, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);
if (this.dirRecords.push(r2.dirRecord), t2)
this.push({ data: function(e3) {
return R.DATA_DESCRIPTOR + A(e3.crc32, 4) + A(e3.compressedSize, 4) + A(e3.uncompressedSize, 4);
}(e2), meta: { percent: 100 } });
else
for (this.push({ data: r2.fileRecord, meta: { percent: 0 } }); this.contentBuffer.length; )
this.push(this.contentBuffer.shift());
this.currentFile = null;
}, s.prototype.flush = function() {
for (var e2 = this.bytesWritten, t2 = 0; t2 < this.dirRecords.length; t2++)
this.push({ data: this.dirRecords[t2], meta: { percent: 100 } });
var r2 = this.bytesWritten - e2, n2 = function(e3, t3, r3, n3, i2) {
var s2 = I.transformTo("string", i2(n3));
return R.CENTRAL_DIRECTORY_END + "\0\0\0\0" + A(e3, 2) + A(e3, 2) + A(t3, 4) + A(r3, 4) + A(s2.length, 2) + s2;
}(this.dirRecords.length, r2, e2, this.zipComment, this.encodeFileName);
this.push({ data: n2, meta: { percent: 100 } });
}, s.prototype.prepareNextSource = function() {
this.previous = this._sources.shift(), this.openedSource(this.previous.streamInfo), this.isPaused ? this.previous.pause() : this.previous.resume();
}, s.prototype.registerPrevious = function(e2) {
this._sources.push(e2);
var t2 = this;
return e2.on("data", function(e3) {
t2.processChunk(e3);
}), e2.on("end", function() {
t2.closedSource(t2.previous.streamInfo), t2._sources.length ? t2.prepareNextSource() : t2.end();
}), e2.on("error", function(e3) {
t2.error(e3);
}), this;
}, s.prototype.resume = function() {
return !!i.prototype.resume.call(this) && (!this.previous && this._sources.length ? (this.prepareNextSource(), true) : this.previous || this._sources.length || this.generatedError ? void 0 : (this.end(), true));
}, s.prototype.error = function(e2) {
var t2 = this._sources;
if (!i.prototype.error.call(this, e2))
return false;
for (var r2 = 0; r2 < t2.length; r2++)
try {
t2[r2].error(e2);
} catch (e3) {
}
return true;
}, s.prototype.lock = function() {
i.prototype.lock.call(this);
for (var e2 = this._sources, t2 = 0; t2 < e2.length; t2++)
e2[t2].lock();
}, t.exports = s;
}, { "../crc32": 4, "../signature": 23, "../stream/GenericWorker": 28, "../utf8": 31, "../utils": 32 }], 9: [function(e, t, r) {
"use strict";
var u = e("../compressions"), n = e("./ZipFileWorker");
r.generateWorker = function(e2, a, t2) {
var o = new n(a.streamFiles, t2, a.platform, a.encodeFileName), h = 0;
try {
e2.forEach(function(e3, t3) {
h++;
var r2 = function(e4, t4) {
var r3 = e4 || t4, n3 = u[r3];
if (!n3)
throw new Error(r3 + " is not a valid compression method !");
return n3;
}(t3.options.compression, a.compression), n2 = t3.options.compressionOptions || a.compressionOptions || {}, i = t3.dir, s = t3.date;
t3._compressWorker(r2, n2).withStreamInfo("file", { name: e3, dir: i, date: s, comment: t3.comment || "", unixPermissions: t3.unixPermissions, dosPermissions: t3.dosPermissions }).pipe(o);
}), o.entriesCount = h;
} catch (e3) {
o.error(e3);
}
return o;
};
}, { "../compressions": 3, "./ZipFileWorker": 8 }], 10: [function(e, t, r) {
"use strict";
function n() {
if (!(this instanceof n))
return new n();
if (arguments.length)
throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");
this.files = /* @__PURE__ */ Object.create(null), this.comment = null, this.root = "", this.clone = function() {
var e2 = new n();
for (var t2 in this)
"function" != typeof this[t2] && (e2[t2] = this[t2]);
return e2;
};
}
(n.prototype = e("./object")).loadAsync = e("./load"), n.support = e("./support"), n.defaults = e("./defaults"), n.version = "3.10.1", n.loadAsync = function(e2, t2) {
return new n().loadAsync(e2, t2);
}, n.external = e("./external"), t.exports = n;
}, { "./defaults": 5, "./external": 6, "./load": 11, "./object": 15, "./support": 30 }], 11: [function(e, t, r) {
"use strict";
var u = e("./utils"), i = e("./external"), n = e("./utf8"), s = e("./zipEntries"), a = e("./stream/Crc32Probe"), l = e("./nodejsUtils");
function f(n2) {
return new i.Promise(function(e2, t2) {
var r2 = n2.decompressed.getContentWorker().pipe(new a());
r2.on("error", function(e3) {
t2(e3);
}).on("end", function() {
r2.streamInfo.crc32 !== n2.decompressed.crc32 ? t2(new Error("Corrupted zip : CRC32 mismatch")) : e2();
}).resume();
});
}
t.exports = function(e2, o) {
var h = this;
return o = u.extend(o || {}, { base64: false, checkCRC32: false, optimizedBinaryString: false, createFolders: false, decodeFileName: n.utf8decode }), l.isNode && l.isStream(e2) ? i.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")) : u.prepareContent("the loaded zip file", e2, true, o.optimizedBinaryString, o.base64).then(function(e3) {
var t2 = new s(o);
return t2.load(e3), t2;
}).then(function(e3) {
var t2 = [i.Promise.resolve(e3)], r2 = e3.files;
if (o.checkCRC32)
for (var n2 = 0; n2 < r2.length; n2++)
t2.push(f(r2[n2]));
return i.Promise.all(t2);
}).then(function(e3) {
for (var t2 = e3.shift(), r2 = t2.files, n2 = 0; n2 < r2.length; n2++) {
var i2 = r2[n2], s2 = i2.fileNameStr, a2 = u.resolve(i2.fileNameStr);
h.file(a2, i2.decompressed, { binary: true, optimizedBinaryString: true, date: i2.date, dir: i2.dir, comment: i2.fileCommentStr.length ? i2.fileCommentStr : null, unixPermissions: i2.unixPermissions, dosPermissions: i2.dosPermissions, createFolders: o.createFolders }), i2.dir || (h.file(a2).unsafeOriginalName = s2);
}
return t2.zipComment.length && (h.comment = t2.zipComment), h;
});
};
}, { "./external": 6, "./nodejsUtils": 14, "./stream/Crc32Probe": 25, "./utf8": 31, "./utils": 32, "./zipEntries": 33 }], 12: [function(e, t, r) {
"use strict";
var n = e("../utils"), i = e("../stream/GenericWorker");
function s(e2, t2) {
i.call(this, "Nodejs stream input adapter for " + e2), this._upstreamEnded = false, this._bindStream(t2);
}
n.inherits(s, i), s.prototype._bindStream = function(e2) {
var t2 = this;
(this._stream = e2).pause(), e2.on("data", function(e3) {
t2.push({ data: e3, meta: { percent: 0 } });
}).on("error", function(e3) {
t2.isPaused ? this.generatedError = e3 : t2.error(e3);
}).on("end", function() {
t2.isPaused ? t2._upstreamEnded = true : t2.end();
});
}, s.prototype.pause = function() {
return !!i.prototype.pause.call(this) && (this._stream.pause(), true);
}, s.prototype.resume = function() {
return !!i.prototype.resume.call(this) && (this._upstreamEnded ? this.end() : this._stream.resume(), true);
}, t.exports = s;
}, { "../stream/GenericWorker": 28, "../utils": 32 }], 13: [function(e, t, r) {
"use strict";
var i = e("readable-stream").Readable;
function n(e2, t2, r2) {
i.call(this, t2), this._helper = e2;
var n2 = this;
e2.on("data", function(e3, t3) {
n2.push(e3) || n2._helper.pause(), r2 && r2(t3);
}).on("error", function(e3) {
n2.emit("error", e3);
}).on("end", function() {
n2.push(null);
});
}
e("../utils").inherits(n, i), n.prototype._read = function() {
this._helper.resume();
}, t.exports = n;
}, { "../utils": 32, "readable-stream": 16 }], 14: [function(e, t, r) {
"use strict";
t.exports = { isNode: "undefined" != typeof Buffer, newBufferFrom: function(e2, t2) {
if (Buffer.from && Buffer.from !== Uint8Array.from)
return Buffer.from(e2, t2);
if ("number" == typeof e2)
throw new Error('The "data" argument must not be a number');
return new Buffer(e2, t2);
}, allocBuffer: function(e2) {
if (Buffer.alloc)
return Buffer.alloc(e2);
var t2 = new Buffer(e2);
return t2.fill(0), t2;
}, isBuffer: function(e2) {
return Buffer.isBuffer(e2);
}, isStream: function(e2) {
return e2 && "function" == typeof e2.on && "function" == typeof e2.pause && "function" == typeof e2.resume;
} };
}, {}], 15: [function(e, t, r) {
"use strict";
function s(e2, t2, r2) {
var n2, i2 = u.getTypeOf(t2), s2 = u.extend(r2 || {}, f);
s2.date = s2.date || new Date(), null !== s2.compression && (s2.compression = s2.compression.toUpperCase()), "string" == typeof s2.unixPermissions && (s2.unixPermissions = parseInt(s2.unixPermissions, 8)), s2.unixPermissions && 16384 & s2.unixPermissions && (s2.dir = true), s2.dosPermissions && 16 & s2.dosPermissions && (s2.dir = true), s2.dir && (e2 = g(e2)), s2.createFolders && (n2 = _(e2)) && b.call(this, n2, true);
var a2 = "string" === i2 && false === s2.binary && false === s2.base64;
r2 && void 0 !== r2.binary || (s2.binary = !a2), (t2 instanceof c && 0 === t2.uncompressedSize || s2.dir || !t2 || 0 === t2.length) && (s2.base64 = false, s2.binary = true, t2 = "", s2.compression = "STORE", i2 = "string");
var o2 = null;
o2 = t2 instanceof c || t2 instanceof l ? t2 : p.isNode && p.isStream(t2) ? new m(e2, t2) : u.prepareContent(e2, t2, s2.binary, s2.optimizedBinaryString, s2.base64);
var h2 = new d(e2, o2, s2);
this.files[e2] = h2;
}
var i = e("./utf8"), u = e("./utils"), l = e("./stream/GenericWorker"), a = e("./stream/StreamHelper"), f = e("./defaults"), c = e("./compressedObject"), d = e("./zipObject"), o = e("./generate"), p = e("./nodejsUtils"), m = e("./nodejs/NodejsStreamInputAdapter"), _ = function(e2) {
"/" === e2.slice(-1) && (e2 = e2.substring(0, e2.length - 1));
var t2 = e2.lastIndexOf("/");
return 0 < t2 ? e2.substring(0, t2) : "";
}, g = function(e2) {
return "/" !== e2.slice(-1) && (e2 += "/"), e2;
}, b = function(e2, t2) {
return t2 = void 0 !== t2 ? t2 : f.createFolders, e2 = g(e2), this.files[e2] || s.call(this, e2, null, { dir: true, createFolders: t2 }), this.files[e2];
};
function h(e2) {
return "[object RegExp]" === Object.prototype.toString.call(e2);
}
var n = { load: function() {
throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.");
}, forEach: function(e2) {
var t2, r2, n2;
for (t2 in this.files)
n2 = this.files[t2], (r2 = t2.slice(this.root.length, t2.length)) && t2.slice(0, this.root.length) === this.root && e2(r2, n2);
}, filter: function(r2) {
var n2 = [];
return this.forEach(function(e2, t2) {
r2(e2, t2) && n2.push(t2);
}), n2;
}, file: function(e2, t2, r2) {
if (1 !== arguments.length)
return e2 = this.root + e2, s.call(this, e2, t2, r2), this;
if (h(e2)) {
var n2 = e2;
return this.filter(function(e3, t3) {
return !t3.dir && n2.test(e3);
});
}
var i2 = this.files[this.root + e2];
return i2 && !i2.dir ? i2 : null;
}, folder: function(r2) {
if (!r2)
return this;
if (h(r2))
return this.filter(function(e3, t3) {
return t3.dir && r2.test(e3);
});
var e2 = this.root + r2, t2 = b.call(this, e2), n2 = this.clone();
return n2.root = t2.name, n2;
}, remove: function(r2) {
r2 = this.root + r2;
var e2 = this.files[r2];
if (e2 || ("/" !== r2.slice(-1) && (r2 += "/"), e2 = this.files[r2]), e2 && !e2.dir)
delete this.files[r2];
else
for (var t2 = this.filter(function(e3, t3) {
return t3.name.slice(0, r2.length) === r2;
}), n2 = 0; n2 < t2.length; n2++)
delete this.files[t2[n2].name];
return this;
}, generate: function() {
throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.");
}, generateInternalStream: function(e2) {
var t2, r2 = {};
try {
if ((r2 = u.extend(e2 || {}, { streamFiles: false, compression: "STORE", compressionOptions: null, type: "", platform: "DOS", comment: null, mimeType: "application/zip", encodeFileName: i.utf8encode })).type = r2.type.toLowerCase(), r2.compression = r2.compression.toUpperCase(), "binarystring" === r2.type && (r2.type = "string"), !r2.type)
throw new Error("No output type specified.");
u.checkSupport(r2.type), "darwin" !== r2.platform && "freebsd" !== r2.platform && "linux" !== r2.platform && "sunos" !== r2.platform || (r2.platform = "UNIX"), "win32" === r2.platform && (r2.platform = "DOS");
var n2 = r2.comment || this.comment || "";
t2 = o.generateWorker(this, r2, n2);
} catch (e3) {
(t2 = new l("error")).error(e3);
}
return new a(t2, r2.type || "string", r2.mimeType);
}, generateAsync: function(e2, t2) {
return this.generateInternalStream(e2).accumulate(t2);
}, generateNodeStream: function(e2, t2) {
return (e2 = e2 || {}).type || (e2.type = "nodebuffer"), this.generateInternalStream(e2).toNodejsStream(t2);
} };
t.exports = n;
}, { "./compressedObject": 2, "./defaults": 5, "./generate": 9, "./nodejs/NodejsStreamInputAdapter": 12, "./nodejsUtils": 14, "./stream/GenericWorker": 28, "./stream/StreamHelper": 29, "./utf8": 31, "./utils": 32, "./zipObject": 35 }], 16: [function(e, t, r) {
"use strict";
t.exports = e("stream");
}, { stream: void 0 }], 17: [function(e, t, r) {
"use strict";
var n = e("./DataReader");
function i(e2) {
n.call(this, e2);
for (var t2 = 0; t2 < this.data.length; t2++)
e2[t2] = 255 & e2[t2];
}
e("../utils").inherits(i, n), i.prototype.byteAt = function(e2) {
return this.data[this.zero + e2];
}, i.prototype.lastIndexOfSignature = function(e2) {
for (var t2 = e2.charCodeAt(0), r2 = e2.charCodeAt(1), n2 = e2.charCodeAt(2), i2 = e2.charCodeAt(3), s = this.length - 4; 0 <= s; --s)
if (this.data[s] === t2 && this.data[s + 1] === r2 && this.data[s + 2] === n2 && this.data[s + 3] === i2)
return s - this.zero;
return -1;
}, i.prototype.readAndCheckSignature = function(e2) {
var t2 = e2.charCodeAt(0), r2 = e2.charCodeAt(1), n2 = e2.charCodeAt(2), i2 = e2.charCodeAt(3), s = this.readData(4);
return t2 === s[0] && r2 === s[1] && n2 === s[2] && i2 === s[3];
}, i.prototype.readData = function(e2) {
if (this.checkOffset(e2), 0 === e2)
return [];
var t2 = this.data.slice(this.zero + this.index, this.zero + this.index + e2);
return this.index += e2, t2;
}, t.exports = i;
}, { "../utils": 32, "./DataReader": 18 }], 18: [function(e, t, r) {
"use strict";
var n = e("../utils");
function i(e2) {
this.data = e2, this.length = e2.length, this.index = 0, this.zero = 0;
}
i.prototype = { checkOffset: function(e2) {
this.checkIndex(this.index + e2);
}, checkIndex: function(e2) {
if (this.length < this.zero + e2 || e2 < 0)
throw new Error("End of data reached (data length = " + this.length + ", asked index = " + e2 + "). Corrupted zip ?");
}, setIndex: function(e2) {
this.checkIndex(e2), this.index = e2;
}, skip: function(e2) {
this.setIndex(this.index + e2);
}, byteAt: function() {
}, readInt: function(e2) {
var t2, r2 = 0;
for (this.checkOffset(e2), t2 = this.index + e2 - 1; t2 >= this.index; t2--)
r2 = (r2 << 8) + this.byteAt(t2);
return this.index += e2, r2;
}, readString: function(e2) {
return n.transformTo("string", this.readData(e2));
}, readData: function() {
}, lastIndexOfSignature: function() {
}, readAndCheckSignature: function() {
}, readDate: function() {
var e2 = this.readInt(4);
return new Date(Date.UTC(1980 + (e2 >> 25 & 127), (e2 >> 21 & 15) - 1, e2 >> 16 & 31, e2 >> 11 & 31, e2 >> 5 & 63, (31 & e2) << 1));
} }, t.exports = i;
}, { "../utils": 32 }], 19: [function(e, t, r) {
"use strict";
var n = e("./Uint8ArrayReader");
function i(e2) {
n.call(this, e2);
}
e("../utils").inherits(i, n), i.prototype.readData = function(e2) {
this.checkOffset(e2);
var t2 = this.data.slice(this.zero + this.index, this.zero + this.index + e2);
return this.index += e2, t2;
}, t.exports = i;
}, { "../utils": 32, "./Uint8ArrayReader": 21 }], 20: [function(e, t, r) {
"use strict";
var n = e("./DataReader");
function i(e2) {
n.call(this, e2);
}
e("../utils").inherits(i, n), i.prototype.byteAt = function(e2) {
return this.data.charCodeAt(this.zero + e2);
}, i.prototype.lastIndexOfSignature = function(e2) {
return this.data.lastIndexOf(e2) - this.zero;
}, i.prototype.readAndCheckSignature = function(e2) {
return e2 === this.readData(4);
}, i.prototype.readData = function(e2) {
this.checkOffset(e2);
var t2 = this.data.slice(this.zero + this.index, this.zero + this.index + e2);
return this.index += e2, t2;
}, t.exports = i;
}, { "../utils": 32, "./DataReader": 18 }], 21: [function(e, t, r) {
"use strict";
var n = e("./ArrayReader");
function i(e2) {
n.call(this, e2);
}
e("../utils").inherits(i, n), i.prototype.readData = function(e2) {
if (this.checkOffset(e2), 0 === e2)
return new Uint8Array(0);
var t2 = this.data.subarray(this.zero + this.index, this.zero + this.index + e2);
return this.index += e2, t2;
}, t.exports = i;
}, { "../utils": 32, "./ArrayReader": 17 }], 22: [function(e, t, r) {
"use strict";
var n = e("../utils"), i = e("../support"), s = e("./ArrayReader"), a = e("./StringReader"), o = e("./NodeBufferReader"), h = e("./Uint8ArrayReader");
t.exports = function(e2) {
var t2 = n.getTypeOf(e2);
return n.checkSupport(t2), "string" !== t2 || i.uint8array ? "nodebuffer" === t2 ? new o(e2) : i.uint8array ? new h(n.transformTo("uint8array", e2)) : new s(n.transformTo("array", e2)) : new a(e2);
};
}, { "../support": 30, "../utils": 32, "./ArrayReader": 17, "./NodeBufferReader": 19, "./StringReader": 20, "./Uint8ArrayReader": 21 }], 23: [function(e, t, r) {
"use strict";
r.LOCAL_FILE_HEADER = "PK", r.CENTRAL_FILE_HEADER = "PK", r.CENTRAL_DIRECTORY_END = "PK", r.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK\x07", r.ZIP64_CENTRAL_DIRECTORY_END = "PK", r.DATA_DESCRIPTOR = "PK\x07\b";
}, {}], 24: [function(e, t, r) {
"use strict";
var n = e("./GenericWorker"), i = e("../utils");
function s(e2) {
n.call(this, "ConvertWorker to " + e2), this.destType = e2;
}
i.inherits(s, n), s.prototype.processChunk = function(e2) {
this.push({ data: i.transformTo(this.destType, e2.data), meta: e2.meta });
}, t.exports = s;
}, { "../utils": 32, "./GenericWorker": 28 }], 25: [function(e, t, r) {
"use strict";
var n = e("./GenericWorker"), i = e("../crc32");
function s() {
n.call(this, "Crc32Probe"), this.withStreamInfo("crc32", 0);
}
e("../utils").inherits(s, n), s.prototype.processChunk = function(e2) {
this.streamInfo.crc32 = i(e2.data, this.streamInfo.crc32 || 0), this.push(e2);
}, t.exports = s;
}, { "../crc32": 4, "../utils": 32, "./GenericWorker": 28 }], 26: [function(e, t, r) {
"use strict";
var n = e("../utils"), i = e("./GenericWorker");
function s(e2) {
i.call(this, "DataLengthProbe for " + e2), this.propName = e2, this.withStreamInfo(e2, 0);
}
n.inherits(s, i), s.prototype.processChunk = function(e2) {
if (e2) {
var t2 = this.streamInfo[this.propName] || 0;
this.streamInfo[this.propName] = t2 + e2.data.length;
}
i.prototype.processChunk.call(this, e2);
}, t.exports = s;
}, { "../utils": 32, "./GenericWorker": 28 }], 27: [function(e, t, r) {
"use strict";
var n = e("../utils"), i = e("./GenericWorker");
function s(e2) {
i.call(this, "DataWorker");
var t2 = this;
this.dataIsReady = false, this.index = 0, this.max = 0, this.data = null, this.type = "", this._tickScheduled = false, e2.then(function(e3) {
t2.dataIsReady = true, t2.data = e3, t2.max = e3 && e3.length || 0, t2.type = n.getTypeOf(e3), t2.isPaused || t2._tickAndRepeat();
}, function(e3) {
t2.error(e3);
});
}
n.inherits(s, i), s.prototype.cleanUp = function() {
i.prototype.cleanUp.call(this), this.data = null;
}, s.prototype.resume = function() {
return !!i.prototype.resume.call(this) && (!this._tickScheduled && this.dataIsReady && (this._tickScheduled = true, n.delay(this._tickAndRepeat, [], this)), true);
}, s.prototype._tickAndRepeat = function() {
this._tickScheduled = false, this.isPaused || this.isFinished || (this._tick(), this.isFinished || (n.delay(this._tickAndRepeat, [], this), this._tickScheduled = true));
}, s.prototype._tick = function() {
if (this.isPaused || this.isFinished)
return false;
var e2 = null, t2 = Math.min(this.max, this.index + 16384);
if (this.index >= this.max)
return this.end();
switch (this.type) {
case "string":
e2 = this.data.substring(this.index, t2);
break;
case "uint8array":
e2 = this.data.subarray(this.index, t2);
break;
case "array":
case "nodebuffer":
e2 = this.data.slice(this.index, t2);
}
return this.index = t2, this.push({ data: e2, meta: { percent: this.max ? this.index / this.max * 100 : 0 } });
}, t.exports = s;
}, { "../utils": 32, "./GenericWorker": 28 }], 28: [function(e, t, r) {
"use strict";
function n(e2) {
this.name = e2 || "default", this.streamInfo = {}, this.generatedError = null, this.extraStreamInfo = {}, this.isPaused = true, this.isFinished = false, this.isLocked = false, this._listeners = { data: [], end: [], error: [] }, this.previous = null;
}
n.prototype = { push: function(e2) {
this.emit("data", e2);
}, end: function() {
if (this.isFinished)
return false;
this.flush();
try {
this.emit("end"), this.cleanUp(), this.isFinished = true;
} catch (e2) {
this.emit("error", e2);
}
return true;
}, error: function(e2) {
return !this.isFinished && (this.isPaused ? this.generatedError = e2 : (this.isFinished = true, this.emit("error", e2), this.previous && this.previous.error(e2), this.cleanUp()), true);
}, on: function(e2, t2) {
return this._listeners[e2].push(t2), this;
}, cleanUp: function() {
this.streamInfo = this.generatedError = this.extraStreamInfo = null, this._listeners = [];
}, emit: function(e2, t2) {
if (this._listeners[e2])
for (var r2 = 0; r2 < this._listeners[e2].length; r2++)
this._listeners[e2][r2].call(this, t2);
}, pipe: function(e2) {
return e2.registerPrevious(this);
}, registerPrevious: function(e2) {
if (this.isLocked)
throw new Error("The stream '" + this + "' has already been used.");
this.streamInfo = e2.streamInfo, this.mergeStreamInfo(), this.previous = e2;
var t2 = this;
return e2.on("data", function(e3) {
t2.processChunk(e3);
}), e2.on("end", function() {
t2.end();
}), e2.on("error", function(e3) {
t2.error(e3);
}), this;
}, pause: function() {
return !this.isPaused && !this.isFinished && (this.isPaused = true, this.previous && this.previous.pause(), true);
}, resume: function() {
if (!this.isPaused || this.isFinished)
return false;
var e2 = this.isPaused = false;
return this.generatedError && (this.error(this.generatedError), e2 = true), this.previous && this.previous.resume(), !e2;
}, flush: function() {
}, processChunk: function(e2) {
this.push(e2);
}, withStreamInfo: function(e2, t2) {
return this.extraStreamInfo[e2] = t2, this.mergeStreamInfo(), this;
}, mergeStreamInfo: function() {
for (var e2 in this.extraStreamInfo)
Object.prototype.hasOwnProperty.call(this.extraStreamInfo, e2) && (this.streamInfo[e2] = this.extraStreamInfo[e2]);
}, lock: function() {
if (this.isLocked)
throw new Error("The stream '" + this + "' has already been used.");
this.isLocked = true, this.previous && this.previous.lock();
}, toString: function() {
var e2 = "Worker " + this.name;
return this.previous ? this.previous + " -> " + e2 : e2;
} }, t.exports = n;
}, {}], 29: [function(e, t, r) {
"use strict";
var h = e("../utils"), i = e("./ConvertWorker"), s = e("./GenericWorker"), u = e("../base64"), n = e("../support"), a = e("../external"), o = null;
if (n.nodestream)
try {
o = e("../nodejs/NodejsStreamOutputAdapter");
} catch (e2) {
}
function l(e2, o2) {
return new a.Promise(function(t2, r2) {
var n2 = [], i2 = e2._internalType, s2 = e2._outputType, a2 = e2._mimeType;
e2.on("data", function(e3, t3) {
n2.push(e3), o2 && o2(t3);
}).on("error", function(e3) {
n2 = [], r2(e3);
}).on("end", function() {
try {
var e3 = function(e4, t3, r3) {
switch (e4) {
case "blob":
return h.newBlob(h.transformTo("arraybuffer", t3), r3);
case "base64":
return u.encode(t3);
default:
return h.transformTo(e4, t3);
}
}(s2, function(e4, t3) {
var r3, n3 = 0, i3 = null, s3 = 0;
for (r3 = 0; r3 < t3.length; r3++)
s3 += t3[r3].length;
switch (e4) {
case "string":
return t3.join("");
case "array":
return Array.prototype.concat.apply([], t3);
case "uint8array":
for (i3 = new Uint8Array(s3), r3 = 0; r3 < t3.length; r3++)
i3.set(t3[r3], n3), n3 += t3[r3].length;
return i3;
case "nodebuffer":
return Buffer.concat(t3);
default:
throw new Error("concat : unsupported type '" + e4 + "'");
}
}(i2, n2), a2);
t2(e3);
} catch (e4) {
r2(e4);
}
n2 = [];
}).resume();
});
}
function f(e2, t2, r2) {
var n2 = t2;
switch (t2) {
case "blob":
case "arraybuffer":
n2 = "uint8array";
break;
case "base64":
n2 = "string";
}
try {
this._internalType = n2, this._outputType = t2, this._mimeType = r2, h.checkSupport(n2), this._worker = e2.pipe(new i(n2)), e2.lock();
} catch (e3) {
this._worker = new s("error"), this._worker.error(e3);
}
}
f.prototype = { accumulate: function(e2) {
return l(this, e2);
}, on: function(e2, t2) {
var r2 = this;
return "data" === e2 ? this._worker.on(e2, function(e3) {
t2.call(r2, e3.data, e3.meta);
}) : this._worker.on(e2, function() {
h.delay(t2, arguments, r2);
}), this;
}, resume: function() {
return h.delay(this._worker.resume, [], this._worker), this;
}, pause: function() {
return this._worker.pause(), this;
}, toNodejsStream: function(e2) {
if (h.checkSupport("nodestream"), "nodebuffer" !== this._outputType)
throw new Error(this._outputType + " is not supported by this method");
return new o(this, { objectMode: "nodebuffer" !== this._outputType }, e2);
} }, t.exports = f;
}, { "../base64": 1, "../external": 6, "../nodejs/NodejsStreamOutputAdapter": 13, "../support": 30, "../utils": 32, "./ConvertWorker": 24, "./GenericWorker": 28 }], 30: [function(e, t, r) {
"use strict";
if (r.base64 = true, r.array = true, r.string = true, r.arraybuffer = "undefined" != typeof ArrayBuffer && "undefined" != typeof Uint8Array, r.nodebuffer = "undefined" != typeof Buffer, r.uint8array = "undefined" != typeof Uint8Array, "undefined" == typeof ArrayBuffer)
r.blob = false;
else {
var n = new ArrayBuffer(0);
try {
r.blob = 0 === new Blob([n], { type: "application/zip" }).size;
} catch (e2) {
try {
var i = new (self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder)();
i.append(n), r.blob = 0 === i.getBlob("application/zip").size;
} catch (e3) {
r.blob = false;
}
}
}
try {
r.nodestream = !!e("readable-stream").Readable;
} catch (e2) {
r.nodestream = false;
}
}, { "readable-stream": 16 }], 31: [function(e, t, s) {
"use strict";
for (var o = e("./utils"), h = e("./support"), r = e("./nodejsUtils"), n = e("./stream/GenericWorker"), u = new Array(256), i = 0; i < 256; i++)
u[i] = 252 <= i ? 6 : 248 <= i ? 5 : 240 <= i ? 4 : 224 <= i ? 3 : 192 <= i ? 2 : 1;
u[254] = u[254] = 1;
function a() {
n.call(this, "utf-8 decode"), this.leftOver = null;
}
function l() {
n.call(this, "utf-8 encode");
}
s.utf8encode = function(e2) {
return h.nodebuffer ? r.newBufferFrom(e2, "utf-8") : function(e3) {
var t2, r2, n2, i2, s2, a2 = e3.length, o2 = 0;
for (i2 = 0; i2 < a2; i2++)
55296 == (64512 & (r2 = e3.charCodeAt(i2))) && i2 + 1 < a2 && 56320 == (64512 & (n2 = e3.charCodeAt(i2 + 1))) && (r2 = 65536 + (r2 - 55296 << 10) + (n2 - 56320), i2++), o2 += r2 < 128 ? 1 : r2 < 2048 ? 2 : r2 < 65536 ? 3 : 4;
for (t2 = h.uint8array ? new Uint8Array(o2) : new Array(o2), i2 = s2 = 0; s2 < o2; i2++)
55296 == (64512 & (r2 = e3.charCodeAt(i2))) && i2 + 1 < a2 && 56320 == (64512 & (n2 = e3.charCodeAt(i2 + 1))) && (r2 = 65536 + (r2 - 55296 << 10) + (n2 - 56320), i2++), r2 < 128 ? t2[s2++] = r2 : (r2 < 2048 ? t2[s2++] = 192 | r2 >>> 6 : (r2 < 65536 ? t2[s2++] = 224 | r2 >>> 12 : (t2[s2++] = 240 | r2 >>> 18, t2[s2++] = 128 | r2 >>> 12 & 63), t2[s2++] = 128 | r2 >>> 6 & 63), t2[s2++] = 128 | 63 & r2);
return t2;
}(e2);
}, s.utf8decode = function(e2) {
return h.nodebuffer ? o.transformTo("nodebuffer", e2).toString("utf-8") : function(e3) {
var t2, r2, n2, i2, s2 = e3.length, a2 = new Array(2 * s2);
for (t2 = r2 = 0; t2 < s2; )
if ((n2 = e3[t2++]) < 128)
a2[r2++] = n2;
else if (4 < (i2 = u[n2]))
a2[r2++] = 65533, t2 += i2 - 1;
else {
for (n2 &= 2 === i2 ? 31 : 3 === i2 ? 15 : 7; 1 < i2 && t2 < s2; )
n2 = n2 << 6 | 63 & e3[t2++], i2--;
1 < i2 ? a2[r2++] = 65533 : n2 < 65536 ? a2[r2++] = n2 : (n2 -= 65536, a2[r2++] = 55296 | n2 >> 10 & 1023, a2[r2++] = 56320 | 1023 & n2);
}
return a2.length !== r2 && (a2.subarray ? a2 = a2.subarray(0, r2) : a2.length = r2), o.applyFromCharCode(a2);
}(e2 = o.transformTo(h.uint8array ? "uint8array" : "array", e2));
}, o.inherits(a, n), a.prototype.processChunk = function(e2) {
var t2 = o.transformTo(h.uint8array ? "uint8array" : "array", e2.data);
if (this.leftOver && this.leftOver.length) {
if (h.uint8array) {
var r2 = t2;
(t2 = new Uint8Array(r2.length + this.leftOver.length)).set(this.leftOver, 0), t2.set(r2, this.leftOver.length);
} else
t2 = this.leftOver.concat(t2);
this.leftOver = null;
}
var n2 = function(e3, t3) {
var r3;
for ((t3 = t3 || e3.length) > e3.length && (t3 = e3.length), r3 = t3 - 1; 0 <= r3 && 128 == (192 & e3[r3]); )
r3--;
return r3 < 0 ? t3 : 0 === r3 ? t3 : r3 + u[e3[r3]] > t3 ? r3 : t3;
}(t2), i2 = t2;
n2 !== t2.length && (h.uint8array ? (i2 = t2.subarray(0, n2), this.leftOver = t2.subarray(n2, t2.length)) : (i2 = t2.slice(0, n2), this.leftOver = t2.slice(n2, t2.length))), this.push({ data: s.utf8decode(i2), meta: e2.meta });
}, a.prototype.flush = function() {
this.leftOver && this.leftOver.length && (this.push({ data: s.utf8decode(this.leftOver), meta: {} }), this.leftOver = null);
}, s.Utf8DecodeWorker = a, o.inherits(l, n), l.prototype.processChunk = function(e2) {
this.push({ data: s.utf8encode(e2.data), meta: e2.meta });
}, s.Utf8EncodeWorker = l;
}, { "./nodejsUtils": 14, "./stream/GenericWorker": 28, "./support": 30, "./utils": 32 }], 32: [function(e, t, a) {
"use strict";
var o = e("./support"), h = e("./base64"), r = e("./nodejsUtils"), u = e("./external");
function n(e2) {
return e2;
}
function l(e2, t2) {
for (var r2 = 0; r2 < e2.length; ++r2)
t2[r2] = 255 & e2.charCodeAt(r2);
return t2;
}
e("setimmediate"), a.newBlob = function(t2, r2) {
a.checkSupport("blob");
try {
return new Blob([t2], { type: r2 });
} catch (e2) {
try {
var n2 = new (self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder)();
return n2.append(t2), n2.getBlob(r2);
} catch (e3) {
throw new Error("Bug : can't construct the Blob.");
}
}
};
var i = { stringifyByChunk: function(e2, t2, r2) {
var n2 = [], i2 = 0, s2 = e2.length;
if (s2 <= r2)
return String.fromCharCode.apply(null, e2);
for (; i2 < s2; )
"array" === t2 || "nodebuffer" === t2 ? n2.push(String.fromCharCode.apply(null, e2.slice(i2, Math.min(i2 + r2, s2)))) : n2.push(String.fromCharCode.apply(null, e2.subarray(i2, Math.min(i2 + r2, s2)))), i2 += r2;
return n2.join("");
}, stringifyByChar: function(e2) {
for (var t2 = "", r2 = 0; r2 < e2.length; r2++)
t2 += String.fromCharCode(e2[r2]);
return t2;
}, applyCanBeUsed: { uint8array: function() {
try {
return o.uint8array && 1 === String.fromCharCode.apply(null, new Uint8Array(1)).length;
} catch (e2) {
return false;
}
}(), nodebuffer: function() {
try {
return o.nodebuffer && 1 === String.fromCharCode.apply(null, r.allocBuffer(1)).length;
} catch (e2) {
return false;
}
}() } };
function s(e2) {
var t2 = 65536, r2 = a.getTypeOf(e2), n2 = true;
if ("uint8array" === r2 ? n2 = i.applyCanBeUsed.uint8array : "nodebuffer" === r2 && (n2 = i.applyCanBeUsed.nodebuffer), n2)
for (; 1 < t2; )
try {
return i.stringifyByChunk(e2, r2, t2);
} catch (e3) {
t2 = Math.floor(t2 / 2);
}
return i.stringifyByChar(e2);
}
function f(e2, t2) {
for (var r2 = 0; r2 < e2.length; r2++)
t2[r2] = e2[r2];
return t2;
}
a.applyFromCharCode = s;
var c = {};
c.string = { string: n, array: function(e2) {
return l(e2, new Array(e2.length));
}, arraybuffer: function(e2) {
return c.string.uint8array(e2).buffer;
}, uint8array: function(e2) {
return l(e2, new Uint8Array(e2.length));
}, nodebuffer: function(e2) {
return l(e2, r.allocBuffer(e2.length));
} }, c.array = { string: s, array: n, arraybuffer: function(e2) {
return new Uint8Array(e2).buffer;
}, uint8array: function(e2) {
return new Uint8Array(e2);
}, nodebuffer: function(e2) {
return r.newBufferFrom(e2);
} }, c.arraybuffer = { string: function(e2) {
return s(new Uint8Array(e2));
}, array: function(e2) {
return f(new Uint8Array(e2), new Array(e2.byteLength));
}, arraybuffer: n, uint8array: function(e2) {
return new Uint8Array(e2);
}, nodebuffer: function(e2) {
return r.newBufferFrom(new Uint8Array(e2));
} }, c.uint8array = { string: s, array: function(e2) {
return f(e2, new Array(e2.length));
}, arraybuffer: function(e2) {
return e2.buffer;
}, uint8array: n, nodebuffer: function(e2) {
return r.newBufferFrom(e2);
} }, c.nodebuffer = { string: s, array: function(e2) {
return f(e2, new Array(e2.length));
}, arraybuffer: function(e2) {
return c.nodebuffer.uint8array(e2).buffer;
}, uint8array: function(e2) {
return f(e2, new Uint8Array(e2.length));
}, nodebuffer: n }, a.transformTo = function(e2, t2) {
if (t2 = t2 || "", !e2)
return t2;
a.checkSupport(e2);
var r2 = a.getTypeOf(t2);
return c[r2][e2](t2);
}, a.resolve = function(e2) {
for (var t2 = e2.split("/"), r2 = [], n2 = 0; n2 < t2.length; n2++) {
var i2 = t2[n2];
"." === i2 || "" === i2 && 0 !== n2 && n2 !== t2.length - 1 || (".." === i2 ? r2.pop() : r2.push(i2));
}
return r2.join("/");
}, a.getTypeOf = function(e2) {
return "string" == typeof e2 ? "string" : "[object Array]" === Object.prototype.toString.call(e2) ? "array" : o.nodebuffer && r.isBuffer(e2) ? "nodebuffer" : o.uint8array && e2 instanceof Uint8Array ? "uint8array" : o.arraybuffer && e2 instanceof ArrayBuffer ? "arraybuffer" : void 0;
}, a.checkSupport = function(e2) {
if (!o[e2.toLowerCase()])
throw new Error(e2 + " is not supported by this platform");
}, a.MAX_VALUE_16BITS = 65535, a.MAX_VALUE_32BITS = -1, a.pretty = function(e2) {
var t2, r2, n2 = "";
for (r2 = 0; r2 < (e2 || "").length; r2++)
n2 += "\\x" + ((t2 = e2.charCodeAt(r2)) < 16 ? "0" : "") + t2.toString(16).toUpperCase();
return n2;
}, a.delay = function(e2, t2, r2) {
setImmediate(function() {
e2.apply(r2 || null, t2 || []);
});
}, a.inherits = function(e2, t2) {
function r2() {
}
r2.prototype = t2.prototype, e2.prototype = new r2();
}, a.extend = function() {
var e2, t2, r2 = {};
for (e2 = 0; e2 < arguments.length; e2++)
for (t2 in arguments[e2])
Object.prototype.hasOwnProperty.call(arguments[e2], t2) && void 0 === r2[t2] && (r2[t2] = arguments[e2][t2]);
return r2;
}, a.prepareContent = function(r2, e2, n2, i2, s2) {
return u.Promise.resolve(e2).then(function(n3) {
return o.blob && (n3 instanceof Blob || -1 !== ["[object File]", "[object Blob]"].indexOf(Object.prototype.toString.call(n3))) && "undefined" != typeof FileReader ? new u.Promise(function(t2, r3) {
var e3 = new FileReader();
e3.onload = function(e4) {
t2(e4.target.result);
}, e3.onerror = function(e4) {
r3(e4.target.error);
}, e3.readAsArrayBuffer(n3);
}) : n3;
}).then(function(e3) {
var t2 = a.getTypeOf(e3);
return t2 ? ("arraybuffer" === t2 ? e3 = a.transformTo("uint8array", e3) : "string" === t2 && (s2 ? e3 = h.decode(e3) : n2 && true !== i2 && (e3 = function(e4) {
return l(e4, o.uint8array ? new Uint8Array(e4.length) : new Array(e4.length));
}(e3))), e3) : u.Promise.reject(new Error("Can't read the data of '" + r2 + "'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?"));
});
};
}, { "./base64": 1, "./external": 6, "./nodejsUtils": 14, "./support": 30, setimmediate: 54 }], 33: [function(e, t, r) {
"use strict";
var n = e("./reader/readerFor"), i = e("./utils"), s = e("./signature"), a = e("./zipEntry"), o = e("./support");
function h(e2) {
this.files = [], this.loadOptions = e2;
}
h.prototype = { checkSignature: function(e2) {
if (!this.reader.readAndCheckSignature(e2)) {
this.reader.index -= 4;
var t2 = this.reader.readString(4);
throw new Error("Corrupted zip or bug: unexpected signature (" + i.pretty(t2) + ", expected " + i.pretty(e2) + ")");
}
}, isSignature: function(e2, t2) {
var r2 = this.reader.index;
this.reader.setIndex(e2);
var n2 = this.reader.readString(4) === t2;
return this.reader.setIndex(r2), n2;
}, readBlockEndOfCentral: function() {
this.diskNumber = this.reader.readInt(2), this.diskWithCentralDirStart = this.reader.readInt(2), this.centralDirRecordsOnThisDisk = this.reader.readInt(2), this.centralDirRecords = this.reader.readInt(2), this.centralDirSize = this.reader.readInt(4), this.centralDirOffset = this.reader.readInt(4), this.zipCommentLength = this.reader.readInt(2);
var e2 = this.reader.readData(this.zipCommentLength), t2 = o.uint8array ? "uint8array" : "array", r2 = i.transformTo(t2, e2);
this.zipComment = this.loadOptions.decodeFileName(r2);
}, readBlockZip64EndOfCentral: function() {
this.zip64EndOfCentralSize = this.reader.readInt(8), this.reader.skip(4), this.diskNumber = this.reader.readInt(4), this.diskWithCentralDirStart = this.reader.readInt(4), this.centralDirRecordsOnThisDisk = this.reader.readInt(8), this.centralDirRecords = this.reader.readInt(8), this.centralDirSize = this.reader.readInt(8), this.centralDirOffset = this.reader.readInt(8), this.zip64ExtensibleData = {};
for (var e2, t2, r2, n2 = this.zip64EndOfCentralSize - 44; 0 < n2; )
e2 = this.reader.readInt(2), t2 = this.reader.readInt(4), r2 = this.reader.readData(t2), this.zip64ExtensibleData[e2] = { id: e2, length: t2, value: r2 };
}, readBlockZip64EndOfCentralLocator: function() {
if (this.diskWithZip64CentralDirStart = this.reader.readInt(4), this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8), this.disksCount = this.reader.readInt(4), 1 < this.disksCount)
throw new Error("Multi-volumes zip are not supported");
}, readLocalFiles: function() {
var e2, t2;
for (e2 = 0; e2 < this.files.length; e2++)
t2 = this.files[e2], this.reader.setIndex(t2.localHeaderOffset), this.checkSignature(s.LOCAL_FILE_HEADER), t2.readLocalPart(this.reader), t2.handleUTF8(), t2.processAttributes();
}, readCentralDir: function() {
var e2;
for (this.reader.setIndex(this.centralDirOffset); this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER); )
(e2 = new a({ zip64: this.zip64 }, this.loadOptions)).readCentralPart(this.reader), this.files.push(e2);
if (this.centralDirRecords !== this.files.length && 0 !== this.centralDirRecords && 0 === this.files.length)
throw new Error("Corrupted zip or bug: expected " + this.centralDirRecords + " records in central dir, got " + this.files.length);
}, readEndOfCentral: function() {
var e2 = this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END);
if (e2 < 0)
throw !this.isSignature(0, s.LOCAL_FILE_HEADER) ? new Error("Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html") : new Error("Corrupted zip: can't find end of central directory");
this.reader.setIndex(e2);
var t2 = e2;
if (this.checkSignature(s.CENTRAL_DIRECTORY_END), this.readBlockEndOfCentral(), this.diskNumber === i.MAX_VALUE_16BITS || this.diskWithCentralDirStart === i.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === i.MAX_VALUE_16BITS || this.centralDirRecords === i.MAX_VALUE_16BITS || this.centralDirSize === i.MAX_VALUE_32BITS || this.centralDirOffset === i.MAX_VALUE_32BITS) {
if (this.zip64 = true, (e2 = this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR)) < 0)
throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");
if (this.reader.setIndex(e2), this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR), this.readBlockZip64EndOfCentralLocator(), !this.isSignature(this.relativeOffsetEndOfZip64CentralDir, s.ZIP64_CENTRAL_DIRECTORY_END) && (this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END), this.relativeOffsetEndOfZip64CentralDir < 0))
throw new Error("Corrupted zip: can't find the ZIP64 end of central directory");
this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir), this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END), this.readBlockZip64EndOfCentral();
}
var r2 = this.centralDirOffset + this.centralDirSize;
this.zip64 && (r2 += 20, r2 += 12 + this.zip64EndOfCentralSize);
var n2 = t2 - r2;
if (0 < n2)
this.isSignature(t2, s.CENTRAL_FILE_HEADER) || (this.reader.zero = n2);
else if (n2 < 0)
throw new Error("Corrupted zip: missing " + Math.abs(n2) + " bytes.");
}, prepareReader: function(e2) {
this.reader = n(e2);
}, load: function(e2) {
this.prepareReader(e2), this.readEndOfCentral(), this.readCentralDir(), this.readLocalFiles();
} }, t.exports = h;
}, { "./reader/readerFor": 22, "./signature": 23, "./support": 30, "./utils": 32, "./zipEntry": 34 }], 34: [function(e, t, r) {
"use strict";
var n = e("./reader/readerFor"), s = e("./utils"), i = e("./compressedObject"), a = e("./crc32"), o = e("./utf8"), h = e("./compressions"), u = e("./support");
function l(e2, t2) {
this.options = e2, this.loadOptions = t2;
}
l.prototype = { isEncrypted: function() {
return 1 == (1 & this.bitFlag);
}, useUTF8: function() {
return 2048 == (2048 & this.bitFlag);
}, readLocalPart: function(e2) {
var t2, r2;
if (e2.skip(22), this.fileNameLength = e2.readInt(2), r2 = e2.readInt(2), this.fileName = e2.readData(this.fileNameLength), e2.skip(r2), -1 === this.compressedSize || -1 === this.uncompressedSize)
throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)");
if (null === (t2 = function(e3) {
for (var t3 in h)
if (Object.prototype.hasOwnProperty.call(h, t3) && h[t3].magic === e3)
return h[t3];
return null;
}(this.compressionMethod)))
throw new Error("Corrupted zip : compression " + s.pretty(this.compressionMethod) + " unknown (inner file : " + s.transformTo("string", this.fileName) + ")");
this.decompressed = new i(this.compressedSize, this.uncompressedSize, this.crc32, t2, e2.readData(this.compressedSize));
}, readCentralPart: function(e2) {
this.versionMadeBy = e2.readInt(2), e2.skip(2), this.bitFlag = e2.readInt(2), this.compressionMethod = e2.readString(2), this.date = e2.readDate(), this.crc32 = e2.readInt(4), this.compressedSize = e2.readInt(4), this.uncompressedSize = e2.readInt(4);
var t2 = e2.readInt(2);
if (this.extraFieldsLength = e2.readInt(2), this.fileCommentLength = e2.readInt(2), this.diskNumberStart = e2.readInt(2), this.internalFileAttributes = e2.readInt(2), this.externalFileAttributes = e2.readInt(4), this.localHeaderOffset = e2.readInt(4), this.isEncrypted())
throw new Error("Encrypted zip are not supported");
e2.skip(t2), this.readExtraFields(e2), this.parseZIP64ExtraField(e2), this.fileComment = e2.readData(this.fileCommentLength);
}, processAttributes: function() {
this.unixPermissions = null, this.dosPermissions = null;
var e2 = this.versionMadeBy >> 8;
this.dir = !!(16 & this.externalFileAttributes), 0 == e2 && (this.dosPermissions = 63 & this.externalFileAttributes), 3 == e2 && (this.unixPermissions = this.externalFileAttributes >> 16 & 65535), this.dir || "/" !== this.fileNameStr.slice(-1) || (this.dir = true);
}, parseZIP64ExtraField: function() {
if (this.extraFields[1]) {
var e2 = n(this.extraFields[1].value);
this.uncompressedSize === s.MAX_VALUE_32BITS && (this.uncompressedSize = e2.readInt(8)), this.compressedSize === s.MAX_VALUE_32BITS && (this.compressedSize = e2.readInt(8)), this.localHeaderOffset === s.MAX_VALUE_32BITS && (this.localHeaderOffset = e2.readInt(8)), this.diskNumberStart === s.MAX_VALUE_32BITS && (this.diskNumberStart = e2.readInt(4));
}
}, readExtraFields: function(e2) {
var t2, r2, n2, i2 = e2.index + this.extraFieldsLength;
for (this.extraFields || (this.extraFields = {}); e2.index + 4 < i2; )
t2 = e2.readInt(2), r2 = e2.readInt(2), n2 = e2.readData(r2), this.extraFields[t2] = { id: t2, length: r2, value: n2 };
e2.setIndex(i2);
}, handleUTF8: function() {
var e2 = u.uint8array ? "uint8array" : "array";
if (this.useUTF8())
this.fileNameStr = o.utf8decode(this.fileName), this.fileCommentStr = o.utf8decode(this.fileComment);
else {
var t2 = this.findExtraFieldUnicodePath();
if (null !== t2)
this.fileNameStr = t2;
else {
var r2 = s.transformTo(e2, this.fileName);
this.fileNameStr = this.loadOptions.decodeFileName(r2);
}
var n2 = this.findExtraFieldUnicodeComment();
if (null !== n2)
this.fileCommentStr = n2;
else {
var i2 = s.transformTo(e2, this.fileComment);
this.fileCommentStr = this.loadOptions.decodeFileName(i2);
}
}
}, findExtraFieldUnicodePath: function() {
var e2 = this.extraFields[28789];
if (e2) {
var t2 = n(e2.value);
return 1 !== t2.readInt(1) ? null : a(this.fileName) !== t2.readInt(4) ? null : o.utf8decode(t2.readData(e2.length - 5));
}
return null;
}, findExtraFieldUnicodeComment: function() {
var e2 = this.extraFields[25461];
if (e2) {
var t2 = n(e2.value);
return 1 !== t2.readInt(1) ? null : a(this.fileComment) !== t2.readInt(4) ? null : o.utf8decode(t2.readData(e2.length - 5));
}
return null;
} }, t.exports = l;
}, { "./compressedObject": 2, "./compressions": 3, "./crc32": 4, "./reader/readerFor": 22, "./support": 30, "./utf8": 31, "./utils": 32 }], 35: [function(e, t, r) {
"use strict";
function n(e2, t2, r2) {
this.name = e2, this.dir = r2.dir, this.date = r2.date, this.comment = r2.comment, this.unixPermissions = r2.unixPermissions, this.dosPermissions = r2.dosPermissions, this._data = t2, this._dataBinary = r2.binary, this.options = { compression: r2.compression, compressionOptions: r2.compressionOptions };
}
var s = e("./stream/StreamHelper"), i = e("./stream/DataWorker"), a = e("./utf8"), o = e("./compressedObject"), h = e("./stream/GenericWorker");
n.prototype = { internalStream: function(e2) {
var t2 = null, r2 = "string";
try {
if (!e2)
throw new Error("No output type specified.");
var n2 = "string" === (r2 = e2.toLowerCase()) || "text" === r2;
"binarystring" !== r2 && "text" !== r2 || (r2 = "string"), t2 = this._decompressWorker();
var i2 = !this._dataBinary;
i2 && !n2 && (t2 = t2.pipe(new a.Utf8EncodeWorker())), !i2 && n2 && (t2 = t2.pipe(new a.Utf8DecodeWorker()));
} catch (e3) {
(t2 = new h("error")).error(e3);
}
return new s(t2, r2, "");
}, async: function(e2, t2) {
return this.internalStream(e2).accumulate(t2);
}, nodeStream: function(e2, t2) {
return this.internalStream(e2 || "nodebuffer").toNodejsStream(t2);
}, _compressWorker: function(e2, t2) {
if (this._data instanceof o && this._data.compression.magic === e2.magic)
return this._data.getCompressedWorker();
var r2 = this._decompressWorker();
return this._dataBinary || (r2 = r2.pipe(new a.Utf8EncodeWorker())), o.createWorkerFrom(r2, e2, t2);
}, _decompressWorker: function() {
return this._data instanceof o ? this._data.getContentWorker() : this._data instanceof h ? this._data : new i(this._data);
} };
for (var u = ["asText", "asBinary", "asNodeBuffer", "asUint8Array", "asArrayBuffer"], l = function() {
throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.");
}, f = 0; f < u.length; f++)
n.prototype[u[f]] = l;
t.exports = n;
}, { "./compressedObject": 2, "./stream/DataWorker": 27, "./stream/GenericWorker": 28, "./stream/StreamHelper": 29, "./utf8": 31 }], 36: [function(e, l, t) {
(function(t2) {
"use strict";
var r, n, e2 = t2.MutationObserver || t2.WebKitMutationObserver;
if (e2) {
var i = 0, s = new e2(u), a = t2.document.createTextNode("");
s.observe(a, { characterData: true }), r = function() {
a.data = i = ++i % 2;
};
} else if (t2.setImmediate || void 0 === t2.MessageChannel)
r = "document" in t2 && "onreadystatechange" in t2.document.createElement("script") ? function() {
var e3 = t2.document.createElement("script");
e3.onreadystatechange = function() {
u(), e3.onreadystatechange = null, e3.parentNode.removeChild(e3), e3 = null;
}, t2.document.documentElement.appendChild(e3);
} : function() {
setTimeout(u, 0);
};
else {
var o = new t2.MessageChannel();
o.port1.onmessage = u, r = function() {
o.port2.postMessage(0);
};
}
var h = [];
function u() {
var e3, t3;
n = true;
for (var r2 = h.length; r2; ) {
for (t3 = h, h = [], e3 = -1; ++e3 < r2; )
t3[e3]();
r2 = h.length;
}
n = false;
}
l.exports = function(e3) {
1 !== h.push(e3) || n || r();
};
}).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {});
}, {}], 37: [function(e, t, r) {
"use strict";
var i = e("immediate");
function u() {
}
var l = {}, s = ["REJECTED"], a = ["FULFILLED"], n = ["PENDING"];
function o(e2) {
if ("function" != typeof e2)
throw new TypeError("resolver must be a function");
this.state = n, this.queue = [], this.outcome = void 0, e2 !== u && d(this, e2);
}
function h(e2, t2, r2) {
this.promise = e2, "function" == typeof t2 && (this.onFulfilled = t2, this.callFulfilled = this.otherCallFulfilled), "function" == typeof r2 && (this.onRejected = r2, this.callRejected = this.otherCallRejected);
}
function f(t2, r2, n2) {
i(function() {
var e2;
try {
e2 = r2(n2);
} catch (e3) {
return l.reject(t2, e3);
}
e2 === t2 ? l.reject(t2, new TypeError("Cannot resolve promise with itself")) : l.resolve(t2, e2);
});
}
function c(e2) {
var t2 = e2 && e2.then;
if (e2 && ("object" == typeof e2 || "function" == typeof e2) && "function" == typeof t2)
return function() {
t2.apply(e2, arguments);
};
}
function d(t2, e2) {
var r2 = false;
function n2(e3) {
r2 || (r2 = true, l.reject(t2, e3));
}
function i2(e3) {
r2 || (r2 = true, l.resolve(t2, e3));
}
var s2 = p(function() {
e2(i2, n2);
});
"error" === s2.status && n2(s2.value);
}
function p(e2, t2) {
var r2 = {};
try {
r2.value = e2(t2), r2.status = "success";
} catch (e3) {
r2.status = "error", r2.value = e3;
}
return r2;
}
(t.exports = o).prototype.finally = function(t2) {
if ("function" != typeof t2)
return this;
var r2 = this.constructor;
return this.then(function(e2) {
return r2.resolve(t2()).then(function() {
return e2;
});
}, function(e2) {
return r2.resolve(t2()).then(function() {
throw e2;
});
});
}, o.prototype.catch = function(e2) {
return this.then(null, e2);
}, o.prototype.then = function(e2, t2) {
if ("function" != typeof e2 && this.state === a || "function" != typeof t2 && this.state === s)
return this;
var r2 = new this.constructor(u);
this.state !== n ? f(r2, this.state === a ? e2 : t2, this.outcome) : this.queue.push(new h(r2, e2, t2));
return r2;
}, h.prototype.callFulfilled = function(e2) {
l.resolve(this.promise, e2);
}, h.prototype.otherCallFulfilled = function(e2) {
f(this.promise, this.onFulfilled, e2);
}, h.prototype.callRejected = function(e2) {
l.reject(this.promise, e2);
}, h.prototype.otherCallRejected = function(e2) {
f(this.promise, this.onRejected, e2);
}, l.resolve = function(e2, t2) {
var r2 = p(c, t2);
if ("error" === r2.status)
return l.reject(e2, r2.value);
var n2 = r2.value;
if (n2)
d(e2, n2);
else {
e2.state = a, e2.outcome = t2;
for (var i2 = -1, s2 = e2.queue.length; ++i2 < s2; )
e2.queue[i2].callFulfilled(t2);
}
return e2;
}, l.reject = function(e2, t2) {
e2.state = s, e2.outcome = t2;
for (var r2 = -1, n2 = e2.queue.length; ++r2 < n2; )
e2.queue[r2].callRejected(t2);
return e2;
}, o.resolve = function(e2) {
if (e2 instanceof this)
return e2;
return l.resolve(new this(u), e2);
}, o.reject = function(e2) {
var t2 = new this(u);
return l.reject(t2, e2);
}, o.all = function(e2) {
var r2 = this;
if ("[object Array]" !== Object.prototype.toString.call(e2))
return this.reject(new TypeError("must be an array"));
var n2 = e2.length, i2 = false;
if (!n2)
return this.resolve([]);
var s2 = new Array(n2), a2 = 0, t2 = -1, o2 = new this(u);
for (; ++t2 < n2; )
h2(e2[t2], t2);
return o2;
function h2(e3, t3) {
r2.resolve(e3).then(function(e4) {
s2[t3] = e4, ++a2 !== n2 || i2 || (i2 = true, l.resolve(o2, s2));
}, function(e4) {
i2 || (i2 = true, l.reject(o2, e4));
});
}
}, o.race = function(e2) {
var t2 = this;
if ("[object Array]" !== Object.prototype.toString.call(e2))
return this.reject(new TypeError("must be an array"));
var r2 = e2.length, n2 = false;
if (!r2)
return this.resolve([]);
var i2 = -1, s2 = new this(u);
for (; ++i2 < r2; )
a2 = e2[i2], t2.resolve(a2).then(function(e3) {
n2 || (n2 = true, l.resolve(s2, e3));
}, function(e3) {
n2 || (n2 = true, l.reject(s2, e3));
});
var a2;
return s2;
};
}, { immediate: 36 }], 38: [function(e, t, r) {
"use strict";
var n = {};
(0, e("./lib/utils/common").assign)(n, e("./lib/deflate"), e("./lib/inflate"), e("./lib/zlib/constants")), t.exports = n;
}, { "./lib/deflate": 39, "./lib/inflate": 40, "./lib/utils/common": 41, "./lib/zlib/constants": 44 }], 39: [function(e, t, r) {
"use strict";
var a = e("./zlib/deflate"), o = e("./utils/common"), h = e("./utils/strings"), i = e("./zlib/messages"), s = e("./zlib/zstream"), u = Object.prototype.toString, l = 0, f = -1, c = 0, d = 8;
function p(e2) {
if (!(this instanceof p))
return new p(e2);
this.options = o.assign({ level: f, method: d, chunkSize: 16384, windowBits: 15, memLevel: 8, strategy: c, to: "" }, e2 || {});
var t2 = this.options;
t2.raw && 0 < t2.windowBits ? t2.windowBits = -t2.windowBits : t2.gzip && 0 < t2.windowBits && t2.windowBits < 16 && (t2.windowBits += 16), this.err = 0, this.msg = "", this.ended = false, this.chunks = [], this.strm = new s(), this.strm.avail_out = 0;
var r2 = a.deflateInit2(this.strm, t2.level, t2.method, t2.windowBits, t2.memLevel, t2.strategy);
if (r2 !== l)
throw new Error(i[r2]);
if (t2.header && a.deflateSetHeader(this.strm, t2.header), t2.dictionary) {
var n2;
if (n2 = "string" == typeof t2.dictionary ? h.string2buf(t2.dictionary) : "[object ArrayBuffer]" === u.call(t2.dictionary) ? new Uint8Array(t2.dictionary) : t2.dictionary, (r2 = a.deflateSetDictionary(this.strm, n2)) !== l)
throw new Error(i[r2]);
this._dict_set = true;
}
}
function n(e2, t2) {
var r2 = new p(t2);
if (r2.push(e2, true), r2.err)
throw r2.msg || i[r2.err];
return r2.result;
}
p.prototype.push = function(e2, t2) {
var r2, n2, i2 = this.strm, s2 = this.options.chunkSize;
if (this.ended)
return false;
n2 = t2 === ~~t2 ? t2 : true === t2 ? 4 : 0, "string" == typeof e2 ? i2.input = h.string2buf(e2) : "[object ArrayBuffer]" === u.call(e2) ? i2.input = new Uint8Array(e2) : i2.input = e2, i2.next_in = 0, i2.avail_in = i2.input.length;
do {
if (0 === i2.avail_out && (i2.output = new o.Buf8(s2), i2.next_out = 0, i2.avail_out = s2), 1 !== (r2 = a.deflate(i2, n2)) && r2 !== l)
return this.onEnd(r2), !(this.ended = true);
0 !== i2.avail_out && (0 !== i2.avail_in || 4 !== n2 && 2 !== n2) || ("string" === this.options.to ? this.onData(h.buf2binstring(o.shrinkBuf(i2.output, i2.next_out))) : this.onData(o.shrinkBuf(i2.output, i2.next_out)));
} while ((0 < i2.avail_in || 0 === i2.avail_out) && 1 !== r2);
return 4 === n2 ? (r2 = a.deflateEnd(this.strm), this.onEnd(r2), this.ended = true, r2 === l) : 2 !== n2 || (this.onEnd(l), !(i2.avail_out = 0));
}, p.prototype.onData = function(e2) {
this.chunks.push(e2);
}, p.prototype.onEnd = function(e2) {
e2 === l && ("string" === this.options.to ? this.result = this.chunks.join("") : this.result = o.flattenChunks(this.chunks)), this.chunks = [], this.err = e2, this.msg = this.strm.msg;
}, r.Deflate = p, r.deflate = n, r.deflateRaw = function(e2, t2) {
return (t2 = t2 || {}).raw = true, n(e2, t2);
}, r.gzip = function(e2, t2) {
return (t2 = t2 || {}).gzip = true, n(e2, t2);
};
}, { "./utils/common": 41, "./utils/strings": 42, "./zlib/deflate": 46, "./zlib/messages": 51, "./zlib/zstream": 53 }], 40: [function(e, t, r) {
"use strict";
var c = e("./zlib/inflate"), d = e("./utils/common"), p = e("./utils/strings"), m = e("./zlib/constants"), n = e("./zlib/messages"), i = e("./zlib/zstream"), s = e("./zlib/gzheader"), _ = Object.prototype.toString;
function a(e2) {
if (!(this instanceof a))
return new a(e2);
this.options = d.assign({ chunkSize: 16384, windowBits: 0, to: "" }, e2 || {});
var t2 = this.options;
t2.raw && 0 <= t2.windowBits && t2.windowBits < 16 && (t2.windowBits = -t2.windowBits, 0 === t2.windowBits && (t2.windowBits = -15)), !(0 <= t2.windowBits && t2.windowBits < 16) || e2 && e2.windowBits || (t2.windowBits += 32), 15 < t2.windowBits && t2.windowBits < 48 && 0 == (15 & t2.windowBits) && (t2.windowBits |= 15), this.err = 0, this.msg = "", this.ended = false, this.chunks = [], this.strm = new i(), this.strm.avail_out = 0;
var r2 = c.inflateInit2(this.strm, t2.windowBits);
if (r2 !== m.Z_OK)
throw new Error(n[r2]);
this.header = new s(), c.inflateGetHeader(this.strm, this.header);
}
function o(e2, t2) {
var r2 = new a(t2);
if (r2.push(e2, true), r2.err)
throw r2.msg || n[r2.err];
return r2.result;
}
a.prototype.push = function(e2, t2) {
var r2, n2, i2, s2, a2, o2, h = this.strm, u = this.options.chunkSize, l = this.options.dictionary, f = false;
if (this.ended)
return false;
n2 = t2 === ~~t2 ? t2 : true === t2 ? m.Z_FINISH : m.Z_NO_FLUSH, "string" == typeof e2 ? h.input = p.binstring2buf(e2) : "[object ArrayBuffer]" === _.call(e2) ? h.input = new Uint8Array(e2) : h.input = e2, h.next_in = 0, h.avail_in = h.input.length;
do {
if (0 === h.avail_out && (h.output = new d.Buf8(u), h.next_out = 0, h.avail_out = u), (r2 = c.inflate(h, m.Z_NO_FLUSH)) === m.Z_NEED_DICT && l && (o2 = "string" == typeof l ? p.string2buf(l) : "[object ArrayBuffer]" === _.call(l) ? new Uint8Array(l) : l, r2 = c.inflateSetDictionary(this.strm, o2)), r2 === m.Z_BUF_ERROR && true === f && (r2 = m.Z_OK, f = false), r2 !== m.Z_STREAM_END && r2 !== m.Z_OK)
return this.onEnd(r2), !(this.ended = true);
h.next_out && (0 !== h.avail_out && r2 !== m.Z_STREAM_END && (0 !== h.avail_in || n2 !== m.Z_FINISH && n2 !== m.Z_SYNC_FLUSH) || ("string" === this.options.to ? (i2 = p.utf8border(h.output, h.next_out), s2 = h.next_out - i2, a2 = p.buf2string(h.output, i2), h.next_out = s2, h.avail_out = u - s2, s2 && d.arraySet(h.output, h.output, i2, s2, 0), this.onData(a2)) : this.onData(d.shrinkBuf(h.output, h.next_out)))), 0 === h.avail_in && 0 === h.avail_out && (f = true);
} while ((0 < h.avail_in || 0 === h.avail_out) && r2 !== m.Z_STREAM_END);
return r2 === m.Z_STREAM_END && (n2 = m.Z_FINISH), n2 === m.Z_FINISH ? (r2 = c.inflateEnd(this.strm), this.onEnd(r2), this.ended = true, r2 === m.Z_OK) : n2 !== m.Z_SYNC_FLUSH || (this.onEnd(m.Z_OK), !(h.avail_out = 0));
}, a.prototype.onData = function(e2) {
this.chunks.push(e2);
}, a.prototype.onEnd = function(e2) {
e2 === m.Z_OK && ("string" === this.options.to ? this.result = this.chunks.join("") : this.result = d.flattenChunks(this.chunks)), this.chunks = [], this.err = e2, this.msg = this.strm.msg;
}, r.Inflate = a, r.inflate = o, r.inflateRaw = function(e2, t2) {
return (t2 = t2 || {}).raw = true, o(e2, t2);
}, r.ungzip = o;
}, { "./utils/common": 41, "./utils/strings": 42, "./zlib/constants": 44, "./zlib/gzheader": 47, "./zlib/inflate": 49, "./zlib/messages": 51, "./zlib/zstream": 53 }], 41: [function(e, t, r) {
"use strict";
var n = "undefined" != typeof Uint8Array && "undefined" != typeof Uint16Array && "undefined" != typeof Int32Array;
r.assign = function(e2) {
for (var t2 = Array.prototype.slice.call(arguments, 1); t2.length; ) {
var r2 = t2.shift();
if (r2) {
if ("object" != typeof r2)
throw new TypeError(r2 + "must be non-object");
for (var n2 in r2)
r2.hasOwnProperty(n2) && (e2[n2] = r2[n2]);
}
}
return e2;
}, r.shrinkBuf = function(e2, t2) {
return e2.length === t2 ? e2 : e2.subarray ? e2.subarray(0, t2) : (e2.length = t2, e2);
};
var i = { arraySet: function(e2, t2, r2, n2, i2) {
if (t2.subarray && e2.subarray)
e2.set(t2.subarray(r2, r2 + n2), i2);
else
for (var s2 = 0; s2 < n2; s2++)
e2[i2 + s2] = t2[r2 + s2];
}, flattenChunks: function(e2) {
var t2, r2, n2, i2, s2, a;
for (t2 = n2 = 0, r2 = e2.length; t2 < r2; t2++)
n2 += e2[t2].length;
for (a = new Uint8Array(n2), t2 = i2 = 0, r2 = e2.length; t2 < r2; t2++)
s2 = e2[t2], a.set(s2, i2), i2 += s2.length;
return a;
} }, s = { arraySet: function(e2, t2, r2, n2, i2) {
for (var s2 = 0; s2 < n2; s2++)
e2[i2 + s2] = t2[r2 + s2];
}, flattenChunks: function(e2) {
return [].concat.apply([], e2);
} };
r.setTyped = function(e2) {
e2 ? (r.Buf8 = Uint8Array, r.Buf16 = Uint16Array, r.Buf32 = Int32Array, r.assign(r, i)) : (r.Buf8 = Array, r.Buf16 = Array, r.Buf32 = Array, r.assign(r, s));
}, r.setTyped(n);
}, {}], 42: [function(e, t, r) {
"use strict";
var h = e("./common"), i = true, s = true;
try {
String.fromCharCode.apply(null, [0]);
} catch (e2) {
i = false;
}
try {
String.fromCharCode.apply(null, new Uint8Array(1));
} catch (e2) {
s = false;
}
for (var u = new h.Buf8(256), n = 0; n < 256; n++)
u[n] = 252 <= n ? 6 : 248 <= n ? 5 : 240 <= n ? 4 : 224 <= n ? 3 : 192 <= n ? 2 : 1;
function l(e2, t2) {
if (t2 < 65537 && (e2.subarray && s || !e2.subarray && i))
return String.fromCharCode.apply(null, h.shrinkBuf(e2, t2));
for (var r2 = "", n2 = 0; n2 < t2; n2++)
r2 += String.fromCharCode(e2[n2]);
return r2;
}
u[254] = u[254] = 1, r.string2buf = function(e2) {
var t2, r2, n2, i2, s2, a = e2.length, o = 0;
for (i2 = 0; i2 < a; i2++)
55296 == (64512 & (r2 = e2.charCodeAt(i2))) && i2 + 1 < a && 56320 == (64512 & (n2 = e2.charCodeAt(i2 + 1))) && (r2 = 65536 + (r2 - 55296 << 10) + (n2 - 56320), i2++), o += r2 < 128 ? 1 : r2 < 2048 ? 2 : r2 < 65536 ? 3 : 4;
for (t2 = new h.Buf8(o), i2 = s2 = 0; s2 < o; i2++)
55296 == (64512 & (r2 = e2.charCodeAt(i2))) && i2 + 1 < a && 56320 == (64512 & (n2 = e2.charCodeAt(i2 + 1))) && (r2 = 65536 + (r2 - 55296 << 10) + (n2 - 56320), i2++), r2 < 128 ? t2[s2++] = r2 : (r2 < 2048 ? t2[s2++] = 192 | r2 >>> 6 : (r2 < 65536 ? t2[s2++] = 224 | r2 >>> 12 : (t2[s2++] = 240 | r2 >>> 18, t2[s2++] = 128 | r2 >>> 12 & 63), t2[s2++] = 128 | r2 >>> 6 & 63), t2[s2++] = 128 | 63 & r2);
return t2;
}, r.buf2binstring = function(e2) {
return l(e2, e2.length);
}, r.binstring2buf = function(e2) {
for (var t2 = new h.Buf8(e2.length), r2 = 0, n2 = t2.length; r2 < n2; r2++)
t2[r2] = e2.charCodeAt(r2);
return t2;
}, r.buf2string = function(e2, t2) {
var r2, n2, i2, s2, a = t2 || e2.length, o = new Array(2 * a);
for (r2 = n2 = 0; r2 < a; )
if ((i2 = e2[r2++]) < 128)
o[n2++] = i2;
else if (4 < (s2 = u[i2]))
o[n2++] = 65533, r2 += s2 - 1;
else {
for (i2 &= 2 === s2 ? 31 : 3 === s2 ? 15 : 7; 1 < s2 && r2 < a; )
i2 = i2 << 6 | 63 & e2[r2++], s2--;
1 < s2 ? o[n2++] = 65533 : i2 < 65536 ? o[n2++] = i2 : (i2 -= 65536, o[n2++] = 55296 | i2 >> 10 & 1023, o[n2++] = 56320 | 1023 & i2);
}
return l(o, n2);
}, r.utf8border = function(e2, t2) {
var r2;
for ((t2 = t2 || e2.length) > e2.length && (t2 = e2.length), r2 = t2 - 1; 0 <= r2 && 128 == (192 & e2[r2]); )
r2--;
return r2 < 0 ? t2 : 0 === r2 ? t2 : r2 + u[e2[r2]] > t2 ? r2 : t2;
};
}, { "./common": 41 }], 43: [function(e, t, r) {
"use strict";
t.exports = function(e2, t2, r2, n) {
for (var i = 65535 & e2 | 0, s = e2 >>> 16 & 65535 | 0, a = 0; 0 !== r2; ) {
for (r2 -= a = 2e3 < r2 ? 2e3 : r2; s = s + (i = i + t2[n++] | 0) | 0, --a; )
;
i %= 65521, s %= 65521;
}
return i | s << 16 | 0;
};
}, {}], 44: [function(e, t, r) {
"use strict";
t.exports = { Z_NO_FLUSH: 0, Z_PARTIAL_FLUSH: 1, Z_SYNC_FLUSH: 2, Z_FULL_FLUSH: 3, Z_FINISH: 4, Z_BLOCK: 5, Z_TREES: 6, Z_OK: 0, Z_STREAM_END: 1, Z_NEED_DICT: 2, Z_ERRNO: -1, Z_STREAM_ERROR: -2, Z_DATA_ERROR: -3, Z_BUF_ERROR: -5, Z_NO_COMPRESSION: 0, Z_BEST_SPEED: 1, Z_BEST_COMPRESSION: 9, Z_DEFAULT_COMPRESSION: -1, Z_FILTERED: 1, Z_HUFFMAN_ONLY: 2, Z_RLE: 3, Z_FIXED: 4, Z_DEFAULT_STRATEGY: 0, Z_BINARY: 0, Z_TEXT: 1, Z_UNKNOWN: 2, Z_DEFLATED: 8 };
}, {}], 45: [function(e, t, r) {
"use strict";
var o = function() {
for (var e2, t2 = [], r2 = 0; r2 < 256; r2++) {
e2 = r2;
for (var n = 0; n < 8; n++)
e2 = 1 & e2 ? 3988292384 ^ e2 >>> 1 : e2 >>> 1;
t2[r2] = e2;
}
return t2;
}();
t.exports = function(e2, t2, r2, n) {
var i = o, s = n + r2;
e2 ^= -1;
for (var a = n; a < s; a++)
e2 = e2 >>> 8 ^ i[255 & (e2 ^ t2[a])];
return -1 ^ e2;
};
}, {}], 46: [function(e, t, r) {
"use strict";
var h, c = e("../utils/common"), u = e("./trees"), d = e("./adler32"), p = e("./crc32"), n = e("./messages"), l = 0, f = 4, m = 0, _ = -2, g = -1, b = 4, i = 2, v = 8, y = 9, s = 286, a = 30, o = 19, w = 2 * s + 1, k = 15, x = 3, S = 258, z = S + x + 1, C = 42, E = 113, A = 1, I = 2, O = 3, B = 4;
function R(e2, t2) {
return e2.msg = n[t2], t2;
}
function T(e2) {
return (e2 << 1) - (4 < e2 ? 9 : 0);
}
function D(e2) {
for (var t2 = e2.length; 0 <= --t2; )
e2[t2] = 0;
}
function F(e2) {
var t2 = e2.state, r2 = t2.pending;
r2 > e2.avail_out && (r2 = e2.avail_out), 0 !== r2 && (c.arraySet(e2.output, t2.pending_buf, t2.pending_out, r2, e2.next_out), e2.next_out += r2, t2.pending_out += r2, e2.total_out += r2, e2.avail_out -= r2, t2.pending -= r2, 0 === t2.pending && (t2.pending_out = 0));
}
function N(e2, t2) {
u._tr_flush_block(e2, 0 <= e2.block_start ? e2.block_start : -1, e2.strstart - e2.block_start, t2), e2.block_start = e2.strstart, F(e2.strm);
}
function U(e2, t2) {
e2.pending_buf[e2.pending++] = t2;
}
function P(e2, t2) {
e2.pending_buf[e2.pending++] = t2 >>> 8 & 255, e2.pending_buf[e2.pending++] = 255 & t2;
}
function L(e2, t2) {
var r2, n2, i2 = e2.max_chain_length, s2 = e2.strstart, a2 = e2.prev_length, o2 = e2.nice_match, h2 = e2.strstart > e2.w_size - z ? e2.strstart - (e2.w_size - z) : 0, u2 = e2.window, l2 = e2.w_mask, f2 = e2.prev, c2 = e2.strstart + S, d2 = u2[s2 + a2 - 1], p2 = u2[s2 + a2];
e2.prev_length >= e2.good_match && (i2 >>= 2), o2 > e2.lookahead && (o2 = e2.lookahead);
do {
if (u2[(r2 = t2) + a2] === p2 && u2[r2 + a2 - 1] === d2 && u2[r2] === u2[s2] && u2[++r2] === u2[s2 + 1]) {
s2 += 2, r2++;
do {
} while (u2[++s2] === u2[++r2] && u2[++s2] === u2[++r2] && u2[++s2] === u2[++r2] && u2[++s2] === u2[++r2] && u2[++s2] === u2[++r2] && u2[++s2] === u2[++r2] && u2[++s2] === u2[++r2] && u2[++s2] === u2[++r2] && s2 < c2);
if (n2 = S - (c2 - s2), s2 = c2 - S, a2 < n2) {
if (e2.match_start = t2, o2 <= (a2 = n2))
break;
d2 = u2[s2 + a2 - 1], p2 = u2[s2 + a2];
}
}
} while ((t2 = f2[t2 & l2]) > h2 && 0 != --i2);
return a2 <= e2.lookahead ? a2 : e2.lookahead;
}
function j(e2) {
var t2, r2, n2, i2, s2, a2, o2, h2, u2, l2, f2 = e2.w_size;
do {
if (i2 = e2.window_size - e2.lookahead - e2.strstart, e2.strstart >= f2 + (f2 - z)) {
for (c.arraySet(e2.window, e2.window, f2, f2, 0), e2.match_start -= f2, e2.strstart -= f2, e2.block_start -= f2, t2 = r2 = e2.hash_size; n2 = e2.head[--t2], e2.head[t2] = f2 <= n2 ? n2 - f2 : 0, --r2; )
;
for (t2 = r2 = f2; n2 = e2.prev[--t2], e2.prev[t2] = f2 <= n2 ? n2 - f2 : 0, --r2; )
;
i2 += f2;
}
if (0 === e2.strm.avail_in)
break;
if (a2 = e2.strm, o2 = e2.window, h2 = e2.strstart + e2.lookahead, u2 = i2, l2 = void 0, l2 = a2.avail_in, u2 < l2 && (l2 = u2), r2 = 0 === l2 ? 0 : (a2.avail_in -= l2, c.arraySet(o2, a2.input, a2.next_in, l2, h2), 1 === a2.state.wrap ? a2.adler = d(a2.adler, o2, l2, h2) : 2 === a2.state.wrap && (a2.adler = p(a2.adler, o2, l2, h2)), a2.next_in += l2, a2.total_in += l2, l2), e2.lookahead += r2, e2.lookahead + e2.insert >= x)
for (s2 = e2.strstart - e2.insert, e2.ins_h = e2.window[s2], e2.ins_h = (e2.ins_h << e2.hash_shift ^ e2.window[s2 + 1]) & e2.hash_mask; e2.insert && (e2.ins_h = (e2.ins_h << e2.hash_shift ^ e2.window[s2 + x - 1]) & e2.hash_mask, e2.prev[s2 & e2.w_mask] = e2.head[e2.ins_h], e2.head[e2.ins_h] = s2, s2++, e2.insert--, !(e2.lookahead + e2.insert < x)); )
;
} while (e2.lookahead < z && 0 !== e2.strm.avail_in);
}
function Z(e2, t2) {
for (var r2, n2; ; ) {
if (e2.lookahead < z) {
if (j(e2), e2.lookahead < z && t2 === l)
return A;
if (0 === e2.lookahead)
break;
}
if (r2 = 0, e2.lookahead >= x && (e2.ins_h = (e2.ins_h << e2.hash_shift ^ e2.window[e2.strstart + x - 1]) & e2.hash_mask, r2 = e2.prev[e2.strstart & e2.w_mask] = e2.head[e2.ins_h], e2.head[e2.ins_h] = e2.strstart), 0 !== r2 && e2.strstart - r2 <= e2.w_size - z && (e2.match_length = L(e2, r2)), e2.match_length >= x)
if (n2 = u._tr_tally(e2, e2.strstart - e2.match_start, e2.match_length - x), e2.lookahead -= e2.match_length, e2.match_length <= e2.max_lazy_match && e2.lookahead >= x) {
for (e2.match_length--; e2.strstart++, e2.ins_h = (e2.ins_h << e2.hash_shift ^ e2.window[e2.strstart + x - 1]) & e2.hash_mask, r2 = e2.prev[e2.strstart & e2.w_mask] = e2.head[e2.ins_h], e2.head[e2.ins_h] = e2.strstart, 0 != --e2.match_length; )
;
e2.strstart++;
} else
e2.strstart += e2.match_length, e2.match_length = 0, e2.ins_h = e2.window[e2.strstart], e2.ins_h = (e2.ins_h << e2.hash_shift ^ e2.window[e2.strstart + 1]) & e2.hash_mask;
else
n2 = u._tr_tally(e2, 0, e2.window[e2.strstart]), e2.lookahead--, e2.strstart++;
if (n2 && (N(e2, false), 0 === e2.strm.avail_out))
return A;
}
return e2.insert = e2.strstart < x - 1 ? e2.strstart : x - 1, t2 === f ? (N(e2, true), 0 === e2.strm.avail_out ? O : B) : e2.last_lit && (N(e2, false), 0 === e2.strm.avail_out) ? A : I;
}
function W(e2, t2) {
for (var r2, n2, i2; ; ) {
if (e2.lookahead < z) {
if (j(e2), e2.lookahead < z && t2 === l)
return A;
if (0 === e2.lookahead)
break;
}
if (r2 = 0, e2.lookahead >= x && (e2.ins_h = (e2.ins_h << e2.hash_shift ^ e2.window[e2.strstart + x - 1]) & e2.hash_mask, r2 = e2.prev[e2.strstart & e2.w_mask] = e2.head[e2.ins_h], e2.head[e2.ins_h] = e2.strstart), e2.prev_length = e2.match_length, e2.prev_match = e2.match_start, e2.match_length = x - 1, 0 !== r2 && e2.prev_length < e2.max_lazy_match && e2.strstart - r2 <= e2.w_size - z && (e2.match_length = L(e2, r2), e2.match_length <= 5 && (1 === e2.strategy || e2.match_length === x && 4096 < e2.strstart - e2.match_start) && (e2.match_length = x - 1)), e2.prev_length >= x && e2.match_length <= e2.prev_length) {
for (i2 = e2.strstart + e2.lookahead - x, n2 = u._tr_tally(e2, e2.strstart - 1 - e2.prev_match, e2.prev_length - x), e2.lookahead -= e2.prev_length - 1, e2.prev_length -= 2; ++e2.strstart <= i2 && (e2.ins_h = (e2.ins_h << e2.hash_shift ^ e2.window[e2.strstart + x - 1]) & e2.hash_mask, r2 = e2.prev[e2.strstart & e2.w_mask] = e2.head[e2.ins_h], e2.head[e2.ins_h] = e2.strstart), 0 != --e2.prev_length; )
;
if (e2.match_available = 0, e2.match_length = x - 1, e2.strstart++, n2 && (N(e2, false), 0 === e2.strm.avail_out))
return A;
} else if (e2.match_available) {
if ((n2 = u._tr_tally(e2, 0, e2.window[e2.strstart - 1])) && N(e2, false), e2.strstart++, e2.lookahead--, 0 === e2.strm.avail_out)
return A;
} else
e2.match_available = 1, e2.strstart++, e2.lookahead--;
}
return e2.match_available && (n2 = u._tr_tally(e2, 0, e2.window[e2.strstart - 1]), e2.match_available = 0), e2.insert = e2.strstart < x - 1 ? e2.strstart : x - 1, t2 === f ? (N(e2, true), 0 === e2.strm.avail_out ? O : B) : e2.last_lit && (N(e2, false), 0 === e2.strm.avail_out) ? A : I;
}
function M(e2, t2, r2, n2, i2) {
this.good_length = e2, this.max_lazy = t2, this.nice_length = r2, this.max_chain = n2, this.func = i2;
}
function H() {
this.strm = null, this.status = 0, this.pending_buf = null, this.pending_buf_size = 0, this.pending_out = 0, this.pending = 0, this.wrap = 0, this.gzhead = null, this.gzindex = 0, this.method = v, this.last_flush = -1, this.w_size = 0, this.w_bits = 0, this.w_mask = 0, this.window = null, this.window_size = 0, this.prev = null, this.head = null, this.ins_h = 0, this.hash_size = 0, this.hash_bits = 0, this.hash_mask = 0, this.hash_shift = 0, this.block_start = 0, this.match_length = 0, this.prev_match = 0, this.match_available = 0, this.strstart = 0, this.match_start = 0, this.lookahead = 0, this.prev_length = 0, this.max_chain_length = 0, this.max_lazy_match = 0, this.level = 0, this.strategy = 0, this.good_match = 0, this.nice_match = 0, this.dyn_ltree = new c.Buf16(2 * w), this.dyn_dtree = new c.Buf16(2 * (2 * a + 1)), this.bl_tree = new c.Buf16(2 * (2 * o + 1)), D(this.dyn_ltree), D(this.dyn_dtree), D(this.bl_tree), this.l_desc = null, this.d_desc = null, this.bl_desc = null, this.bl_count = new c.Buf16(k + 1), this.heap = new c.Buf16(2 * s + 1), D(this.heap), this.heap_len = 0, this.heap_max = 0, this.depth = new c.Buf16(2 * s + 1), D(this.depth), this.l_buf = 0, this.lit_bufsize = 0, this.last_lit = 0, this.d_buf = 0, this.opt_len = 0, this.static_len = 0, this.matches = 0, this.insert = 0, this.bi_buf = 0, this.bi_valid = 0;
}
function G(e2) {
var t2;
return e2 && e2.state ? (e2.total_in = e2.total_out = 0, e2.data_type = i, (t2 = e2.state).pending = 0, t2.pending_out = 0, t2.wrap < 0 && (t2.wrap = -t2.wrap), t2.status = t2.wrap ? C : E, e2.adler = 2 === t2.wrap ? 0 : 1, t2.last_flush = l, u._tr_init(t2), m) : R(e2, _);
}
function K(e2) {
var t2 = G(e2);
return t2 === m && function(e3) {
e3.window_size = 2 * e3.w_size, D(e3.head), e3.max_lazy_match = h[e3.level].max_lazy, e3.good_match = h[e3.level].good_length, e3.nice_match = h[e3.level].nice_length, e3.max_chain_length = h[e3.level].max_chain, e3.strstart = 0, e3.block_start = 0, e3.lookahead = 0, e3.insert = 0, e3.match_length = e3.prev_length = x - 1, e3.match_available = 0, e3.ins_h = 0;
}(e2.state), t2;
}
function Y(e2, t2, r2, n2, i2, s2) {
if (!e2)
return _;
var a2 = 1;
if (t2 === g && (t2 = 6), n2 < 0 ? (a2 = 0, n2 = -n2) : 15 < n2 && (a2 = 2, n2 -= 16), i2 < 1 || y < i2 || r2 !== v || n2 < 8 || 15 < n2 || t2 < 0 || 9 < t2 || s2 < 0 || b < s2)
return R(e2, _);
8 === n2 && (n2 = 9);
var o2 = new H();
return (e2.state = o2).strm = e2, o2.wrap = a2, o2.gzhead = null, o2.w_bits = n2, o2.w_size = 1 << o2.w_bits, o2.w_mask = o2.w_size - 1, o2.hash_bits = i2 + 7, o2.hash_size = 1 << o2.hash_bits, o2.hash_mask = o2.hash_size - 1, o2.hash_shift = ~~((o2.hash_bits + x - 1) / x), o2.window = new c.Buf8(2 * o2.w_size), o2.head = new c.Buf16(o2.hash_size), o2.prev = new c.Buf16(o2.w_size), o2.lit_bufsize = 1 << i2 + 6, o2.pending_buf_size = 4 * o2.lit_bufsize, o2.pending_buf = new c.Buf8(o2.pending_buf_size), o2.d_buf = 1 * o2.lit_bufsize, o2.l_buf = 3 * o2.lit_bufsize, o2.level = t2, o2.strategy = s2, o2.method = r2, K(e2);
}
h = [new M(0, 0, 0, 0, function(e2, t2) {
var r2 = 65535;
for (r2 > e2.pending_buf_size - 5 && (r2 = e2.pending_buf_size - 5); ; ) {
if (e2.lookahead <= 1) {
if (j(e2), 0 === e2.lookahead && t2 === l)
return A;
if (0 === e2.lookahead)
break;
}
e2.strstart += e2.lookahead, e2.lookahead = 0;
var n2 = e2.block_start + r2;
if ((0 === e2.strstart || e2.strstart >= n2) && (e2.lookahead = e2.strstart - n2, e2.strstart = n2, N(e2, false), 0 === e2.strm.avail_out))
return A;
if (e2.strstart - e2.block_start >= e2.w_size - z && (N(e2, false), 0 === e2.strm.avail_out))
return A;
}
return e2.insert = 0, t2 === f ? (N(e2, true), 0 === e2.strm.avail_out ? O : B) : (e2.strstart > e2.block_start && (N(e2, false), e2.strm.avail_out), A);
}), new M(4, 4, 8, 4, Z), new M(4, 5, 16, 8, Z), new M(4, 6, 32, 32, Z), new M(4, 4, 16, 16, W), new M(8, 16, 32, 32, W), new M(8, 16, 128, 128, W), new M(8, 32, 128, 256, W), new M(32, 128, 258, 1024, W), new M(32, 258, 258, 4096, W)], r.deflateInit = function(e2, t2) {
return Y(e2, t2, v, 15, 8, 0);
}, r.deflateInit2 = Y, r.deflateReset = K, r.deflateResetKeep = G, r.deflateSetHeader = function(e2, t2) {
return e2 && e2.state ? 2 !== e2.state.wrap ? _ : (e2.state.gzhead = t2, m) : _;
}, r.deflate = function(e2, t2) {
var r2, n2, i2, s2;
if (!e2 || !e2.state || 5 < t2 || t2 < 0)
return e2 ? R(e2, _) : _;
if (n2 = e2.state, !e2.output || !e2.input && 0 !== e2.avail_in || 666 === n2.status && t2 !== f)
return R(e2, 0 === e2.avail_out ? -5 : _);
if (n2.strm = e2, r2 = n2.last_flush, n2.last_flush = t2, n2.status === C)
if (2 === n2.wrap)
e2.adler = 0, U(n2, 31), U(n2, 139), U(n2, 8), n2.gzhead ? (U(n2, (n2.gzhead.text ? 1 : 0) + (n2.gzhead.hcrc ? 2 : 0) + (n2.gzhead.extra ? 4 : 0) + (n2.gzhead.name ? 8 : 0) + (n2.gzhead.comment ? 16 : 0)), U(n2, 255 & n2.gzhead.time), U(n2, n2.gzhead.time >> 8 & 255), U(n2, n2.gzhead.time >> 16 & 255), U(n2, n2.gzhead.time >> 24 & 255), U(n2, 9 === n2.level ? 2 : 2 <= n2.strategy || n2.level < 2 ? 4 : 0), U(n2, 255 & n2.gzhead.os), n2.gzhead.extra && n2.gzhead.extra.length && (U(n2, 255 & n2.gzhead.extra.length), U(n2, n2.gzhead.extra.length >> 8 & 255)), n2.gzhead.hcrc && (e2.adler = p(e2.adler, n2.pending_buf, n2.pending, 0)), n2.gzindex = 0, n2.status = 69) : (U(n2, 0), U(n2, 0), U(n2, 0), U(n2, 0), U(n2, 0), U(n2, 9 === n2.level ? 2 : 2 <= n2.strategy || n2.level < 2 ? 4 : 0), U(n2, 3), n2.status = E);
else {
var a2 = v + (n2.w_bits - 8 << 4) << 8;
a2 |= (2 <= n2.strategy || n2.level < 2 ? 0 : n2.level < 6 ? 1 : 6 === n2.level ? 2 : 3) << 6, 0 !== n2.strstart && (a2 |= 32), a2 += 31 - a2 % 31, n2.status = E, P(n2, a2), 0 !== n2.strstart && (P(n2, e2.adler >>> 16), P(n2, 65535 & e2.adler)), e2.adler = 1;
}
if (69 === n2.status)
if (n2.gzhead.extra) {
for (i2 = n2.pending; n2.gzindex < (65535 & n2.gzhead.extra.length) && (n2.pending !== n2.pending_buf_size || (n2.gzhead.hcrc && n2.pending > i2 && (e2.adler = p(e2.adler, n2.pending_buf, n2.pending - i2, i2)), F(e2), i2 = n2.pending, n2.pending !== n2.pending_buf_size)); )
U(n2, 255 & n2.gzhead.extra[n2.gzindex]), n2.gzindex++;
n2.gzhead.hcrc && n2.pending > i2 && (e2.adler = p(e2.adler, n2.pending_buf, n2.pending - i2, i2)), n2.gzindex === n2.gzhead.extra.length && (n2.gzindex = 0, n2.status = 73);
} else
n2.status = 73;
if (73 === n2.status)
if (n2.gzhead.name) {
i2 = n2.pending;
do {
if (n2.pending === n2.pending_buf_size && (n2.gzhead.hcrc && n2.pending > i2 && (e2.adler = p(e2.adler, n2.pending_buf, n2.pending - i2, i2)), F(e2), i2 = n2.pending, n2.pending === n2.pending_buf_size)) {
s2 = 1;
break;
}
s2 = n2.gzindex < n2.gzhead.name.length ? 255 & n2.gzhead.name.charCodeAt(n2.gzindex++) : 0, U(n2, s2);
} while (0 !== s2);
n2.gzhead.hcrc && n2.pending > i2 && (e2.adler = p(e2.adler, n2.pending_buf, n2.pending - i2, i2)), 0 === s2 && (n2.gzindex = 0, n2.status = 91);
} else
n2.status = 91;
if (91 === n2.status)
if (n2.gzhead.comment) {
i2 = n2.pending;
do {
if (n2.pending === n2.pending_buf_size && (n2.gzhead.hcrc && n2.pending > i2 && (e2.adler = p(e2.adler, n2.pending_buf, n2.pending - i2, i2)), F(e2), i2 = n2.pending, n2.pending === n2.pending_buf_size)) {
s2 = 1;
break;
}
s2 = n2.gzindex < n2.gzhead.comment.length ? 255 & n2.gzhead.comment.charCodeAt(n2.gzindex++) : 0, U(n2, s2);
} while (0 !== s2);
n2.gzhead.hcrc && n2.pending > i2 && (e2.adler = p(e2.adler, n2.pending_buf, n2.pending - i2, i2)), 0 === s2 && (n2.status = 103);
} else
n2.status = 103;
if (103 === n2.status && (n2.gzhead.hcrc ? (n2.pending + 2 > n2.pending_buf_size && F(e2), n2.pending + 2 <= n2.pending_buf_size && (U(n2, 255 & e2.adler), U(n2, e2.adler >> 8 & 255), e2.adler = 0, n2.status = E)) : n2.status = E), 0 !== n2.pending) {
if (F(e2), 0 === e2.avail_out)
return n2.last_flush = -1, m;
} else if (0 === e2.avail_in && T(t2) <= T(r2) && t2 !== f)
return R(e2, -5);
if (666 === n2.status && 0 !== e2.avail_in)
return R(e2, -5);
if (0 !== e2.avail_in || 0 !== n2.lookahead || t2 !== l && 666 !== n2.status) {
var o2 = 2 === n2.strategy ? function(e3, t3) {
for (var r3; ; ) {
if (0 === e3.lookahead && (j(e3), 0 === e3.lookahead)) {
if (t3 === l)
return A;
break;
}
if (e3.match_length = 0, r3 = u._tr_tally(e3, 0, e3.window[e3.strstart]), e3.lookahead--, e3.strstart++, r3 && (N(e3, false), 0 === e3.strm.avail_out))
return A;
}
return e3.insert = 0, t3 === f ? (N(e3, true), 0 === e3.strm.avail_out ? O : B) : e3.last_lit && (N(e3, false), 0 === e3.strm.avail_out) ? A : I;
}(n2, t2) : 3 === n2.strategy ? function(e3, t3) {
for (var r3, n3, i3, s3, a3 = e3.window; ; ) {
if (e3.lookahead <= S) {
if (j(e3), e3.lookahead <= S && t3 === l)
return A;
if (0 === e3.lookahead)
break;
}
if (e3.match_length = 0, e3.lookahead >= x && 0 < e3.strstart && (n3 = a3[i3 = e3.strstart - 1]) === a3[++i3] && n3 === a3[++i3] && n3 === a3[++i3]) {
s3 = e3.strstart + S;
do {
} while (n3 === a3[++i3] && n3 === a3[++i3] && n3 === a3[++i3] && n3 === a3[++i3] && n3 === a3[++i3] && n3 === a3[++i3] && n3 === a3[++i3] && n3 === a3[++i3] && i3 < s3);
e3.match_length = S - (s3 - i3), e3.match_length > e3.lookahead && (e3.match_length = e3.lookahead);
}
if (e3.match_length >= x ? (r3 = u._tr_tally(e3, 1, e3.match_length - x), e3.lookahead -= e3.match_length, e3.strstart += e3.match_length, e3.match_length = 0) : (r3 = u._tr_tally(e3, 0, e3.window[e3.strstart]), e3.lookahead--, e3.strstart++), r3 && (N(e3, false), 0 === e3.strm.avail_out))
return A;
}
return e3.insert = 0, t3 === f ? (N(e3, true), 0 === e3.strm.avail_out ? O : B) : e3.last_lit && (N(e3, false), 0 === e3.strm.avail_out) ? A : I;
}(n2, t2) : h[n2.level].func(n2, t2);
if (o2 !== O && o2 !== B || (n2.status = 666), o2 === A || o2 === O)
return 0 === e2.avail_out && (n2.last_flush = -1), m;
if (o2 === I && (1 === t2 ? u._tr_align(n2) : 5 !== t2 && (u._tr_stored_block(n2, 0, 0, false), 3 === t2 && (D(n2.head), 0 === n2.lookahead && (n2.strstart = 0, n2.block_start = 0, n2.insert = 0))), F(e2), 0 === e2.avail_out))
return n2.last_flush = -1, m;
}
return t2 !== f ? m : n2.wrap <= 0 ? 1 : (2 === n2.wrap ? (U(n2, 255 & e2.adler), U(n2, e2.adler >> 8 & 255), U(n2, e2.adler >> 16 & 255), U(n2, e2.adler >> 24 & 255), U(n2, 255 & e2.total_in), U(n2, e2.total_in >> 8 & 255), U(n2, e2.total_in >> 16 & 255), U(n2, e2.total_in >> 24 & 255)) : (P(n2, e2.adler >>> 16), P(n2, 65535 & e2.adler)), F(e2), 0 < n2.wrap && (n2.wrap = -n2.wrap), 0 !== n2.pending ? m : 1);
}, r.deflateEnd = function(e2) {
var t2;
return e2 && e2.state ? (t2 = e2.state.status) !== C && 69 !== t2 && 73 !== t2 && 91 !== t2 && 103 !== t2 && t2 !== E && 666 !== t2 ? R(e2, _) : (e2.state = null, t2 === E ? R(e2, -3) : m) : _;
}, r.deflateSetDictionary = function(e2, t2) {
var r2, n2, i2, s2, a2, o2, h2, u2, l2 = t2.length;
if (!e2 || !e2.state)
return _;
if (2 === (s2 = (r2 = e2.state).wrap) || 1 === s2 && r2.status !== C || r2.lookahead)
return _;
for (1 === s2 && (e2.adler = d(e2.adler, t2, l2, 0)), r2.wrap = 0, l2 >= r2.w_size && (0 === s2 && (D(r2.head), r2.strstart = 0, r2.block_start = 0, r2.insert = 0), u2 = new c.Buf8(r2.w_size), c.arraySet(u2, t2, l2 - r2.w_size, r2.w_size, 0), t2 = u2, l2 = r2.w_size), a2 = e2.avail_in, o2 = e2.next_in, h2 = e2.input, e2.avail_in = l2, e2.next_in = 0, e2.input = t2, j(r2); r2.lookahead >= x; ) {
for (n2 = r2.strstart, i2 = r2.lookahead - (x - 1); r2.ins_h = (r2.ins_h << r2.hash_shift ^ r2.window[n2 + x - 1]) & r2.hash_mask, r2.prev[n2 & r2.w_mask] = r2.head[r2.ins_h], r2.head[r2.ins_h] = n2, n2++, --i2; )
;
r2.strstart = n2, r2.lookahead = x - 1, j(r2);
}
return r2.strstart += r2.lookahead, r2.block_start = r2.strstart, r2.insert = r2.lookahead, r2.lookahead = 0, r2.match_length = r2.prev_length = x - 1, r2.match_available = 0, e2.next_in = o2, e2.input = h2, e2.avail_in = a2, r2.wrap = s2, m;
}, r.deflateInfo = "pako deflate (from Nodeca project)";
}, { "../utils/common": 41, "./adler32": 43, "./crc32": 45, "./messages": 51, "./trees": 52 }], 47: [function(e, t, r) {
"use strict";
t.exports = function() {
this.text = 0, this.time = 0, this.xflags = 0, this.os = 0, this.extra = null, this.extra_len = 0, this.name = "", this.comment = "", this.hcrc = 0, this.done = false;
};
}, {}], 48: [function(e, t, r) {
"use strict";
t.exports = function(e2, t2) {
var r2, n, i, s, a, o, h, u, l, f, c, d, p, m, _, g, b, v, y, w, k, x, S, z, C;
r2 = e2.state, n = e2.next_in, z = e2.input, i = n + (e2.avail_in - 5), s = e2.next_out, C = e2.output, a = s - (t2 - e2.avail_out), o = s + (e2.avail_out - 257), h = r2.dmax, u = r2.wsize, l = r2.whave, f = r2.wnext, c = r2.window, d = r2.hold, p = r2.bits, m = r2.lencode, _ = r2.distcode, g = (1 << r2.lenbits) - 1, b = (1 << r2.distbits) - 1;
e:
do {
p < 15 && (d += z[n++] << p, p += 8, d += z[n++] << p, p += 8), v = m[d & g];
t:
for (; ; ) {
if (d >>>= y = v >>> 24, p -= y, 0 === (y = v >>> 16 & 255))
C[s++] = 65535 & v;
else {
if (!(16 & y)) {
if (0 == (64 & y)) {
v = m[(65535 & v) + (d & (1 << y) - 1)];
continue t;
}
if (32 & y) {
r2.mode = 12;
break e;
}
e2.msg = "invalid literal/length code", r2.mode = 30;
break e;
}
w = 65535 & v, (y &= 15) && (p < y && (d += z[n++] << p, p += 8), w += d & (1 << y) - 1, d >>>= y, p -= y), p < 15 && (d += z[n++] << p, p += 8, d += z[n++] << p, p += 8), v = _[d & b];
r:
for (; ; ) {
if (d >>>= y = v >>> 24, p -= y, !(16 & (y = v >>> 16 & 255))) {
if (0 == (64 & y)) {
v = _[(65535 & v) + (d & (1 << y) - 1)];
continue r;
}
e2.msg = "invalid distance code", r2.mode = 30;
break e;
}
if (k = 65535 & v, p < (y &= 15) && (d += z[n++] << p, (p += 8) < y && (d += z[n++] << p, p += 8)), h < (k += d & (1 << y) - 1)) {
e2.msg = "invalid distance too far back", r2.mode = 30;
break e;
}
if (d >>>= y, p -= y, (y = s - a) < k) {
if (l < (y = k - y) && r2.sane) {
e2.msg = "invalid distance too far back", r2.mode = 30;
break e;
}
if (S = c, (x = 0) === f) {
if (x += u - y, y < w) {
for (w -= y; C[s++] = c[x++], --y; )
;
x = s - k, S = C;
}
} else if (f < y) {
if (x += u + f - y, (y -= f) < w) {
for (w -= y; C[s++] = c[x++], --y; )
;
if (x = 0, f < w) {
for (w -= y = f; C[s++] = c[x++], --y; )
;
x = s - k, S = C;
}
}
} else if (x += f - y, y < w) {
for (w -= y; C[s++] = c[x++], --y; )
;
x = s - k, S = C;
}
for (; 2 < w; )
C[s++] = S[x++], C[s++] = S[x++], C[s++] = S[x++], w -= 3;
w && (C[s++] = S[x++], 1 < w && (C[s++] = S[x++]));
} else {
for (x = s - k; C[s++] = C[x++], C[s++] = C[x++], C[s++] = C[x++], 2 < (w -= 3); )
;
w && (C[s++] = C[x++], 1 < w && (C[s++] = C[x++]));
}
break;
}
}
break;
}
} while (n < i && s < o);
n -= w = p >> 3, d &= (1 << (p -= w << 3)) - 1, e2.next_in = n, e2.next_out = s, e2.avail_in = n < i ? i - n + 5 : 5 - (n - i), e2.avail_out = s < o ? o - s + 257 : 257 - (s - o), r2.hold = d, r2.bits = p;
};
}, {}], 49: [function(e, t, r) {
"use strict";
var I = e("../utils/common"), O = e("./adler32"), B = e("./crc32"), R = e("./inffast"), T = e("./inftrees"), D = 1, F = 2, N = 0, U = -2, P = 1, n = 852, i = 592;
function L(e2) {
return (e2 >>> 24 & 255) + (e2 >>> 8 & 65280) + ((65280 & e2) << 8) + ((255 & e2) << 24);
}
function s() {
this.mode = 0, this.last = false, this.wrap = 0, this.havedict = false, this.flags = 0, this.dmax = 0, this.check = 0, this.total = 0, this.head = null, this.wbits = 0, this.wsize = 0, this.whave = 0, this.wnext = 0, this.window = null, this.hold = 0, this.bits = 0, this.length = 0, this.offset = 0, this.extra = 0, this.lencode = null, this.distcode = null, this.lenbits = 0, this.distbits = 0, this.ncode = 0, this.nlen = 0, this.ndist = 0, this.have = 0, this.next = null, this.lens = new I.Buf16(320), this.work = new I.Buf16(288), this.lendyn = null, this.distdyn = null, this.sane = 0, this.back = 0, this.was = 0;
}
function a(e2) {
var t2;
return e2 && e2.state ? (t2 = e2.state, e2.total_in = e2.total_out = t2.total = 0, e2.msg = "", t2.wrap && (e2.adler = 1 & t2.wrap), t2.mode = P, t2.last = 0, t2.havedict = 0, t2.dmax = 32768, t2.head = null, t2.hold = 0, t2.bits = 0, t2.lencode = t2.lendyn = new I.Buf32(n), t2.distcode = t2.distdyn = new I.Buf32(i), t2.sane = 1, t2.back = -1, N) : U;
}
function o(e2) {
var t2;
return e2 && e2.state ? ((t2 = e2.state).wsize = 0, t2.whave = 0, t2.wnext = 0, a(e2)) : U;
}
function h(e2, t2) {
var r2, n2;
return e2 && e2.state ? (n2 = e2.state, t2 < 0 ? (r2 = 0, t2 = -t2) : (r2 = 1 + (t2 >> 4), t2 < 48 && (t2 &= 15)), t2 && (t2 < 8 || 15 < t2) ? U : (null !== n2.window && n2.wbits !== t2 && (n2.window = null), n2.wrap = r2, n2.wbits = t2, o(e2))) : U;
}
function u(e2, t2) {
var r2, n2;
return e2 ? (n2 = new s(), (e2.state = n2).window = null, (r2 = h(e2, t2)) !== N && (e2.state = null), r2) : U;
}
var l, f, c = true;
function j(e2) {
if (c) {
var t2;
for (l = new I.Buf32(512), f = new I.Buf32(32), t2 = 0; t2 < 144; )
e2.lens[t2++] = 8;
for (; t2 < 256; )
e2.lens[t2++] = 9;
for (; t2 < 280; )
e2.lens[t2++] = 7;
for (; t2 < 288; )
e2.lens[t2++] = 8;
for (T(D, e2.lens, 0, 288, l, 0, e2.work, { bits: 9 }), t2 = 0; t2 < 32; )
e2.lens[t2++] = 5;
T(F, e2.lens, 0, 32, f, 0, e2.work, { bits: 5 }), c = false;
}
e2.lencode = l, e2.lenbits = 9, e2.distcode = f, e2.distbits = 5;
}
function Z(e2, t2, r2, n2) {
var i2, s2 = e2.state;
return null === s2.window && (s2.wsize = 1 << s2.wbits, s2.wnext = 0, s2.whave = 0, s2.window = new I.Buf8(s2.wsize)), n2 >= s2.wsize ? (I.arraySet(s2.window, t2, r2 - s2.wsize, s2.wsize, 0), s2.wnext = 0, s2.whave = s2.wsize) : (n2 < (i2 = s2.wsize - s2.wnext) && (i2 = n2), I.arraySet(s2.window, t2, r2 - n2, i2, s2.wnext), (n2 -= i2) ? (I.arraySet(s2.window, t2, r2 - n2, n2, 0), s2.wnext = n2, s2.whave = s2.wsize) : (s2.wnext += i2, s2.wnext === s2.wsize && (s2.wnext = 0), s2.whave < s2.wsize && (s2.whave += i2))), 0;
}
r.inflateReset = o, r.inflateReset2 = h, r.inflateResetKeep = a, r.inflateInit = function(e2) {
return u(e2, 15);
}, r.inflateInit2 = u, r.inflate = function(e2, t2) {
var r2, n2, i2, s2, a2, o2, h2, u2, l2, f2, c2, d, p, m, _, g, b, v, y, w, k, x, S, z, C = 0, E = new I.Buf8(4), A = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];
if (!e2 || !e2.state || !e2.output || !e2.input && 0 !== e2.avail_in)
return U;
12 === (r2 = e2.state).mode && (r2.mode = 13), a2 = e2.next_out, i2 = e2.output, h2 = e2.avail_out, s2 = e2.next_in, n2 = e2.input, o2 = e2.avail_in, u2 = r2.hold, l2 = r2.bits, f2 = o2, c2 = h2, x = N;
e:
for (; ; )
switch (r2.mode) {
case P:
if (0 === r2.wrap) {
r2.mode = 13;
break;
}
for (; l2 < 16; ) {
if (0 === o2)
break e;
o2--, u2 += n2[s2++] << l2, l2 += 8;
}
if (2 & r2.wrap && 35615 === u2) {
E[r2.check = 0] = 255 & u2, E[1] = u2 >>> 8 & 255, r2.check = B(r2.check, E, 2, 0), l2 = u2 = 0, r2.mode = 2;
break;
}
if (r2.flags = 0, r2.head && (r2.head.done = false), !(1 & r2.wrap) || (((255 & u2) << 8) + (u2 >> 8)) % 31) {
e2.msg = "incorrect header check", r2.mode = 30;
break;
}
if (8 != (15 & u2)) {
e2.msg = "unknown compression method", r2.mode = 30;
break;
}
if (l2 -= 4, k = 8 + (15 & (u2 >>>= 4)), 0 === r2.wbits)
r2.wbits = k;
else if (k > r2.wbits) {
e2.msg = "invalid window size", r2.mode = 30;
break;
}
r2.dmax = 1 << k, e2.adler = r2.check = 1, r2.mode = 512 & u2 ? 10 : 12, l2 = u2 = 0;
break;
case 2:
for (; l2 < 16; ) {
if (0 === o2)
break e;
o2--, u2 += n2[s2++] << l2, l2 += 8;
}
if (r2.flags = u2, 8 != (255 & r2.flags)) {
e2.msg = "unknown compression method", r2.mode = 30;
break;
}
if (57344 & r2.flags) {
e2.msg = "unknown header flags set", r2.mode = 30;
break;
}
r2.head && (r2.head.text = u2 >> 8 & 1), 512 & r2.flags && (E[0] = 255 & u2, E[1] = u2 >>> 8 & 255, r2.check = B(r2.check, E, 2, 0)), l2 = u2 = 0, r2.mode = 3;
case 3:
for (; l2 < 32; ) {
if (0 === o2)
break e;
o2--, u2 += n2[s2++] << l2, l2 += 8;
}
r2.head && (r2.head.time = u2), 512 & r2.flags && (E[0] = 255 & u2, E[1] = u2 >>> 8 & 255, E[2] = u2 >>> 16 & 255, E[3] = u2 >>> 24 & 255, r2.check = B(r2.check, E, 4, 0)), l2 = u2 = 0, r2.mode = 4;
case 4:
for (; l2 < 16; ) {
if (0 === o2)
break e;
o2--, u2 += n2[s2++] << l2, l2 += 8;
}
r2.head && (r2.head.xflags = 255 & u2, r2.head.os = u2 >> 8), 512 & r2.flags && (E[0] = 255 & u2, E[1] = u2 >>> 8 & 255, r2.check = B(r2.check, E, 2, 0)), l2 = u2 = 0, r2.mode = 5;
case 5:
if (1024 & r2.flags) {
for (; l2 < 16; ) {
if (0 === o2)
break e;
o2--, u2 += n2[s2++] << l2, l2 += 8;
}
r2.length = u2, r2.head && (r2.head.extra_len = u2), 512 & r2.flags && (E[0] = 255 & u2, E[1] = u2 >>> 8 & 255, r2.check = B(r2.check, E, 2, 0)), l2 = u2 = 0;
} else
r2.head && (r2.head.extra = null);
r2.mode = 6;
case 6:
if (1024 & r2.flags && (o2 < (d = r2.length) && (d = o2), d && (r2.head && (k = r2.head.extra_len - r2.length, r2.head.extra || (r2.head.extra = new Array(r2.head.extra_len)), I.arraySet(r2.head.extra, n2, s2, d, k)), 512 & r2.flags && (r2.check = B(r2.check, n2, d, s2)), o2 -= d, s2 += d, r2.length -= d), r2.length))
break e;
r2.length = 0, r2.mode = 7;
case 7:
if (2048 & r2.flags) {
if (0 === o2)
break e;
for (d = 0; k = n2[s2 + d++], r2.head && k && r2.length < 65536 && (r2.head.name += String.fromCharCode(k)), k && d < o2; )
;
if (512 & r2.flags && (r2.check = B(r2.check, n2, d, s2)), o2 -= d, s2 += d, k)
break e;
} else
r2.head && (r2.head.name = null);
r2.length = 0, r2.mode = 8;
case 8:
if (4096 & r2.flags) {
if (0 === o2)
break e;
for (d = 0; k = n2[s2 + d++], r2.head && k && r2.length < 65536 && (r2.head.comment += String.fromCharCode(k)), k && d < o2; )
;
if (512 & r2.flags && (r2.check = B(r2.check, n2, d, s2)), o2 -= d, s2 += d, k)
break e;
} else
r2.head && (r2.head.comment = null);
r2.mode = 9;
case 9:
if (512 & r2.flags) {
for (; l2 < 16; ) {
if (0 === o2)
break e;
o2--, u2 += n2[s2++] << l2, l2 += 8;
}
if (u2 !== (65535 & r2.check)) {
e2.msg = "header crc mismatch", r2.mode = 30;
break;
}
l2 = u2 = 0;
}
r2.head && (r2.head.hcrc = r2.flags >> 9 & 1, r2.head.done = true), e2.adler = r2.check = 0, r2.mode = 12;
break;
case 10:
for (; l2 < 32; ) {
if (0 === o2)
break e;
o2--, u2 += n2[s2++] << l2, l2 += 8;
}
e2.adler = r2.check = L(u2), l2 = u2 = 0, r2.mode = 11;
case 11:
if (0 === r2.havedict)
return e2.next_out = a2, e2.avail_out = h2, e2.next_in = s2, e2.avail_in = o2, r2.hold = u2, r2.bits = l2, 2;
e2.adler = r2.check = 1, r2.mode = 12;
case 12:
if (5 === t2 || 6 === t2)
break e;
case 13:
if (r2.last) {
u2 >>>= 7 & l2, l2 -= 7 & l2, r2.mode = 27;
break;
}
for (; l2 < 3; ) {
if (0 === o2)
break e;
o2--, u2 += n2[s2++] << l2, l2 += 8;
}
switch (r2.last = 1 & u2, l2 -= 1, 3 & (u2 >>>= 1)) {
case 0:
r2.mode = 14;
break;
case 1:
if (j(r2), r2.mode = 20, 6 !== t2)
break;
u2 >>>= 2, l2 -= 2;
break e;
case 2:
r2.mode = 17;
break;
case 3:
e2.msg = "invalid block type", r2.mode = 30;
}
u2 >>>= 2, l2 -= 2;
break;
case 14:
for (u2 >>>= 7 & l2, l2 -= 7 & l2; l2 < 32; ) {
if (0 === o2)
break e;
o2--, u2 += n2[s2++] << l2, l2 += 8;
}
if ((65535 & u2) != (u2 >>> 16 ^ 65535)) {
e2.msg = "invalid stored block lengths", r2.mode = 30;
break;
}
if (r2.length = 65535 & u2, l2 = u2 = 0, r2.mode = 15, 6 === t2)
break e;
case 15:
r2.mode = 16;
case 16:
if (d = r2.length) {
if (o2 < d && (d = o2), h2 < d && (d = h2), 0 === d)
break e;
I.arraySet(i2, n2, s2, d, a2), o2 -= d, s2 += d, h2 -= d, a2 += d, r2.length -= d;
break;
}
r2.mode = 12;
break;
case 17:
for (; l2 < 14; ) {
if (0 === o2)
break e;
o2--, u2 += n2[s2++] << l2, l2 += 8;
}
if (r2.nlen = 257 + (31 & u2), u2 >>>= 5, l2 -= 5, r2.ndist = 1 + (31 & u2), u2 >>>= 5, l2 -= 5, r2.ncode = 4 + (15 & u2), u2 >>>= 4, l2 -= 4, 286 < r2.nlen || 30 < r2.ndist) {
e2.msg = "too many length or distance symbols", r2.mode = 30;
break;
}
r2.have = 0, r2.mode = 18;
case 18:
for (; r2.have < r2.ncode; ) {
for (; l2 < 3; ) {
if (0 === o2)
break e;
o2--, u2 += n2[s2++] << l2, l2 += 8;
}
r2.lens[A[r2.have++]] = 7 & u2, u2 >>>= 3, l2 -= 3;
}
for (; r2.have < 19; )
r2.lens[A[r2.have++]] = 0;
if (r2.lencode = r2.lendyn, r2.lenbits = 7, S = { bits: r2.lenbits }, x = T(0, r2.lens, 0, 19, r2.lencode, 0, r2.work, S), r2.lenbits = S.bits, x) {
e2.msg = "invalid code lengths set", r2.mode = 30;
break;
}
r2.have = 0, r2.mode = 19;
case 19:
for (; r2.have < r2.nlen + r2.ndist; ) {
for (; g = (C = r2.lencode[u2 & (1 << r2.lenbits) - 1]) >>> 16 & 255, b = 65535 & C, !((_ = C >>> 24) <= l2); ) {
if (0 === o2)
break e;
o2--, u2 += n2[s2++] << l2, l2 += 8;
}
if (b < 16)
u2 >>>= _, l2 -= _, r2.lens[r2.have++] = b;
else {
if (16 === b) {
for (z = _ + 2; l2 < z; ) {
if (0 === o2)
break e;
o2--, u2 += n2[s2++] << l2, l2 += 8;
}
if (u2 >>>= _, l2 -= _, 0 === r2.have) {
e2.msg = "invalid bit length repeat", r2.mode = 30;
break;
}
k = r2.lens[r2.have - 1], d = 3 + (3 & u2), u2 >>>= 2, l2 -= 2;
} else if (17 === b) {
for (z = _ + 3; l2 < z; ) {
if (0 === o2)
break e;
o2--, u2 += n2[s2++] << l2, l2 += 8;
}
l2 -= _, k = 0, d = 3 + (7 & (u2 >>>= _)), u2 >>>= 3, l2 -= 3;
} else {
for (z = _ + 7; l2 < z; ) {
if (0 === o2)
break e;
o2--, u2 += n2[s2++] << l2, l2 += 8;
}
l2 -= _, k = 0, d = 11 + (127 & (u2 >>>= _)), u2 >>>= 7, l2 -= 7;
}
if (r2.have + d > r2.nlen + r2.ndist) {
e2.msg = "invalid bit length repeat", r2.mode = 30;
break;
}
for (; d--; )
r2.lens[r2.have++] = k;
}
}
if (30 === r2.mode)
break;
if (0 === r2.lens[256]) {
e2.msg = "invalid code -- missing end-of-block", r2.mode = 30;
break;
}
if (r2.lenbits = 9, S = { bits: r2.lenbits }, x = T(D, r2.lens, 0, r2.nlen, r2.lencode, 0, r2.work, S), r2.lenbits = S.bits, x) {
e2.msg = "invalid literal/lengths set", r2.mode = 30;
break;
}
if (r2.distbits = 6, r2.distcode = r2.distdyn, S = { bits: r2.distbits }, x = T(F, r2.lens, r2.nlen, r2.ndist, r2.distcode, 0, r2.work, S), r2.distbits = S.bits, x) {
e2.msg = "invalid distances set", r2.mode = 30;
break;
}
if (r2.mode = 20, 6 === t2)
break e;
case 20:
r2.mode = 21;
case 21:
if (6 <= o2 && 258 <= h2) {
e2.next_out = a2, e2.avail_out = h2, e2.next_in = s2, e2.avail_in = o2, r2.hold = u2, r2.bits = l2, R(e2, c2), a2 = e2.next_out, i2 = e2.output, h2 = e2.avail_out, s2 = e2.next_in, n2 = e2.input, o2 = e2.avail_in, u2 = r2.hold, l2 = r2.bits, 12 === r2.mode && (r2.back = -1);
break;
}
for (r2.back = 0; g = (C = r2.lencode[u2 & (1 << r2.lenbits) - 1]) >>> 16 & 255, b = 65535 & C, !((_ = C >>> 24) <= l2); ) {
if (0 === o2)
break e;
o2--, u2 += n2[s2++] << l2, l2 += 8;
}
if (g && 0 == (240 & g)) {
for (v = _, y = g, w = b; g = (C = r2.lencode[w + ((u2 & (1 << v + y) - 1) >> v)]) >>> 16 & 255, b = 65535 & C, !(v + (_ = C >>> 24) <= l2); ) {
if (0 === o2)
break e;
o2--, u2 += n2[s2++] << l2, l2 += 8;
}
u2 >>>= v, l2 -= v, r2.back += v;
}
if (u2 >>>= _, l2 -= _, r2.back += _, r2.length = b, 0 === g) {
r2.mode = 26;
break;
}
if (32 & g) {
r2.back = -1, r2.mode = 12;
break;
}
if (64 & g) {
e2.msg = "invalid literal/length code", r2.mode = 30;
break;
}
r2.extra = 15 & g, r2.mode = 22;
case 22:
if (r2.extra) {
for (z = r2.extra; l2 < z; ) {
if (0 === o2)
break e;
o2--, u2 += n2[s2++] << l2, l2 += 8;
}
r2.length += u2 & (1 << r2.extra) - 1, u2 >>>= r2.extra, l2 -= r2.extra, r2.back += r2.extra;
}
r2.was = r2.length, r2.mode = 23;
case 23:
for (; g = (C = r2.distcode[u2 & (1 << r2.distbits) - 1]) >>> 16 & 255, b = 65535 & C, !((_ = C >>> 24) <= l2); ) {
if (0 === o2)
break e;
o2--, u2 += n2[s2++] << l2, l2 += 8;
}
if (0 == (240 & g)) {
for (v = _, y = g, w = b; g = (C = r2.distcode[w + ((u2 & (1 << v + y) - 1) >> v)]) >>> 16 & 255, b = 65535 & C, !(v + (_ = C >>> 24) <= l2); ) {
if (0 === o2)
break e;
o2--, u2 += n2[s2++] << l2, l2 += 8;
}
u2 >>>= v, l2 -= v, r2.back += v;
}
if (u2 >>>= _, l2 -= _, r2.back += _, 64 & g) {
e2.msg = "invalid distance code", r2.mode = 30;
break;
}
r2.offset = b, r2.extra = 15 & g, r2.mode = 24;
case 24:
if (r2.extra) {
for (z = r2.extra; l2 < z; ) {
if (0 === o2)
break e;
o2--, u2 += n2[s2++] << l2, l2 += 8;
}
r2.offset += u2 & (1 << r2.extra) - 1, u2 >>>= r2.extra, l2 -= r2.extra, r2.back += r2.extra;
}
if (r2.offset > r2.dmax) {
e2.msg = "invalid distance too far back", r2.mode = 30;
break;
}
r2.mode = 25;
case 25:
if (0 === h2)
break e;
if (d = c2 - h2, r2.offset > d) {
if ((d = r2.offset - d) > r2.whave && r2.sane) {
e2.msg = "invalid distance too far back", r2.mode = 30;
break;
}
p = d > r2.wnext ? (d -= r2.wnext, r2.wsize - d) : r2.wnext - d, d > r2.length && (d = r2.length), m = r2.window;
} else
m = i2, p = a2 - r2.offset, d = r2.length;
for (h2 < d && (d = h2), h2 -= d, r2.length -= d; i2[a2++] = m[p++], --d; )
;
0 === r2.length && (r2.mode = 21);
break;
case 26:
if (0 === h2)
break e;
i2[a2++] = r2.length, h2--, r2.mode = 21;
break;
case 27:
if (r2.wrap) {
for (; l2 < 32; ) {
if (0 === o2)
break e;
o2--, u2 |= n2[s2++] << l2, l2 += 8;
}
if (c2 -= h2, e2.total_out += c2, r2.total += c2, c2 && (e2.adler = r2.check = r2.flags ? B(r2.check, i2, c2, a2 - c2) : O(r2.check, i2, c2, a2 - c2)), c2 = h2, (r2.flags ? u2 : L(u2)) !== r2.check) {
e2.msg = "incorrect data check", r2.mode = 30;
break;
}
l2 = u2 = 0;
}
r2.mode = 28;
case 28:
if (r2.wrap && r2.flags) {
for (; l2 < 32; ) {
if (0 === o2)
break e;
o2--, u2 += n2[s2++] << l2, l2 += 8;
}
if (u2 !== (4294967295 & r2.total)) {
e2.msg = "incorrect length check", r2.mode = 30;
break;
}
l2 = u2 = 0;
}
r2.mode = 29;
case 29:
x = 1;
break e;
case 30:
x = -3;
break e;
case 31:
return -4;
case 32:
default:
return U;
}
return e2.next_out = a2, e2.avail_out = h2, e2.next_in = s2, e2.avail_in = o2, r2.hold = u2, r2.bits = l2, (r2.wsize || c2 !== e2.avail_out && r2.mode < 30 && (r2.mode < 27 || 4 !== t2)) && Z(e2, e2.output, e2.next_out, c2 - e2.avail_out) ? (r2.mode = 31, -4) : (f2 -= e2.avail_in, c2 -= e2.avail_out, e2.total_in += f2, e2.total_out += c2, r2.total += c2, r2.wrap && c2 && (e2.adler = r2.check = r2.flags ? B(r2.check, i2, c2, e2.next_out - c2) : O(r2.check, i2, c2, e2.next_out - c2)), e2.data_type = r2.bits + (r2.last ? 64 : 0) + (12 === r2.mode ? 128 : 0) + (20 === r2.mode || 15 === r2.mode ? 256 : 0), (0 == f2 && 0 === c2 || 4 === t2) && x === N && (x = -5), x);
}, r.inflateEnd = function(e2) {
if (!e2 || !e2.state)
return U;
var t2 = e2.state;
return t2.window && (t2.window = null), e2.state = null, N;
}, r.inflateGetHeader = function(e2, t2) {
var r2;
return e2 && e2.state ? 0 == (2 & (r2 = e2.state).wrap) ? U : ((r2.head = t2).done = false, N) : U;
}, r.inflateSetDictionary = function(e2, t2) {
var r2, n2 = t2.length;
return e2 && e2.state ? 0 !== (r2 = e2.state).wrap && 11 !== r2.mode ? U : 11 === r2.mode && O(1, t2, n2, 0) !== r2.check ? -3 : Z(e2, t2, n2, n2) ? (r2.mode = 31, -4) : (r2.havedict = 1, N) : U;
}, r.inflateInfo = "pako inflate (from Nodeca project)";
}, { "../utils/common": 41, "./adler32": 43, "./crc32": 45, "./inffast": 48, "./inftrees": 50 }], 50: [function(e, t, r) {
"use strict";
var D = e("../utils/common"), F = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0], N = [16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78], U = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0], P = [16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 64, 64];
t.exports = function(e2, t2, r2, n, i, s, a, o) {
var h, u, l, f, c, d, p, m, _, g = o.bits, b = 0, v = 0, y = 0, w = 0, k = 0, x = 0, S = 0, z = 0, C = 0, E = 0, A = null, I = 0, O = new D.Buf16(16), B = new D.Buf16(16), R = null, T = 0;
for (b = 0; b <= 15; b++)
O[b] = 0;
for (v = 0; v < n; v++)
O[t2[r2 + v]]++;
for (k = g, w = 15; 1 <= w && 0 === O[w]; w--)
;
if (w < k && (k = w), 0 === w)
return i[s++] = 20971520, i[s++] = 20971520, o.bits = 1, 0;
for (y = 1; y < w && 0 === O[y]; y++)
;
for (k < y && (k = y), b = z = 1; b <= 15; b++)
if (z <<= 1, (z -= O[b]) < 0)
return -1;
if (0 < z && (0 === e2 || 1 !== w))
return -1;
for (B[1] = 0, b = 1; b < 15; b++)
B[b + 1] = B[b] + O[b];
for (v = 0; v < n; v++)
0 !== t2[r2 + v] && (a[B[t2[r2 + v]]++] = v);
if (d = 0 === e2 ? (A = R = a, 19) : 1 === e2 ? (A = F, I -= 257, R = N, T -= 257, 256) : (A = U, R = P, -1), b = y, c = s, S = v = E = 0, l = -1, f = (C = 1 << (x = k)) - 1, 1 === e2 && 852 < C || 2 === e2 && 592 < C)
return 1;
for (; ; ) {
for (p = b - S, _ = a[v] < d ? (m = 0, a[v]) : a[v] > d ? (m = R[T + a[v]], A[I + a[v]]) : (m = 96, 0), h = 1 << b - S, y = u = 1 << x; i[c + (E >> S) + (u -= h)] = p << 24 | m << 16 | _ | 0, 0 !== u; )
;
for (h = 1 << b - 1; E & h; )
h >>= 1;
if (0 !== h ? (E &= h - 1, E += h) : E = 0, v++, 0 == --O[b]) {
if (b === w)
break;
b = t2[r2 + a[v]];
}
if (k < b && (E & f) !== l) {
for (0 === S && (S = k), c += y, z = 1 << (x = b - S); x + S < w && !((z -= O[x + S]) <= 0); )
x++, z <<= 1;
if (C += 1 << x, 1 === e2 && 852 < C || 2 === e2 && 592 < C)
return 1;
i[l = E & f] = k << 24 | x << 16 | c - s | 0;
}
}
return 0 !== E && (i[c + E] = b - S << 24 | 64 << 16 | 0), o.bits = k, 0;
};
}, { "../utils/common": 41 }], 51: [function(e, t, r) {
"use strict";
t.exports = { 2: "need dictionary", 1: "stream end", 0: "", "-1": "file error", "-2": "stream error", "-3": "data error", "-4": "insufficient memory", "-5": "buffer error", "-6": "incompatible version" };
}, {}], 52: [function(e, t, r) {
"use strict";
var i = e("../utils/common"), o = 0, h = 1;
function n(e2) {
for (var t2 = e2.length; 0 <= --t2; )
e2[t2] = 0;
}
var s = 0, a = 29, u = 256, l = u + 1 + a, f = 30, c = 19, _ = 2 * l + 1, g = 15, d = 16, p = 7, m = 256, b = 16, v = 17, y = 18, w = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0], k = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13], x = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7], S = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15], z = new Array(2 * (l + 2));
n(z);
var C = new Array(2 * f);
n(C);
var E = new Array(512);
n(E);
var A = new Array(256);
n(A);
var I = new Array(a);
n(I);
var O, B, R, T = new Array(f);
function D(e2, t2, r2, n2, i2) {
this.static_tree = e2, this.extra_bits = t2, this.extra_base = r2, this.elems = n2, this.max_length = i2, this.has_stree = e2 && e2.length;
}
function F(e2, t2) {
this.dyn_tree = e2, this.max_code = 0, this.stat_desc = t2;
}
function N(e2) {
return e2 < 256 ? E[e2] : E[256 + (e2 >>> 7)];
}
function U(e2, t2) {
e2.pending_buf[e2.pending++] = 255 & t2, e2.pending_buf[e2.pending++] = t2 >>> 8 & 255;
}
function P(e2, t2, r2) {
e2.bi_valid > d - r2 ? (e2.bi_buf |= t2 << e2.bi_valid & 65535, U(e2, e2.bi_buf), e2.bi_buf = t2 >> d - e2.bi_valid, e2.bi_valid += r2 - d) : (e2.bi_buf |= t2 << e2.bi_valid & 65535, e2.bi_valid += r2);
}
function L(e2, t2, r2) {
P(e2, r2[2 * t2], r2[2 * t2 + 1]);
}
function j(e2, t2) {
for (var r2 = 0; r2 |= 1 & e2, e2 >>>= 1, r2 <<= 1, 0 < --t2; )
;
return r2 >>> 1;
}
function Z(e2, t2, r2) {
var n2, i2, s2 = new Array(g + 1), a2 = 0;
for (n2 = 1; n2 <= g; n2++)
s2[n2] = a2 = a2 + r2[n2 - 1] << 1;
for (i2 = 0; i2 <= t2; i2++) {
var o2 = e2[2 * i2 + 1];
0 !== o2 && (e2[2 * i2] = j(s2[o2]++, o2));
}
}
function W(e2) {
var t2;
for (t2 = 0; t2 < l; t2++)
e2.dyn_ltree[2 * t2] = 0;
for (t2 = 0; t2 < f; t2++)
e2.dyn_dtree[2 * t2] = 0;
for (t2 = 0; t2 < c; t2++)
e2.bl_tree[2 * t2] = 0;
e2.dyn_ltree[2 * m] = 1, e2.opt_len = e2.static_len = 0, e2.last_lit = e2.matches = 0;
}
function M(e2) {
8 < e2.bi_valid ? U(e2, e2.bi_buf) : 0 < e2.bi_valid && (e2.pending_buf[e2.pending++] = e2.bi_buf), e2.bi_buf = 0, e2.bi_valid = 0;
}
function H(e2, t2, r2, n2) {
var i2 = 2 * t2, s2 = 2 * r2;
return e2[i2] < e2[s2] || e2[i2] === e2[s2] && n2[t2] <= n2[r2];
}
function G(e2, t2, r2) {
for (var n2 = e2.heap[r2], i2 = r2 << 1; i2 <= e2.heap_len && (i2 < e2.heap_len && H(t2, e2.heap[i2 + 1], e2.heap[i2], e2.depth) && i2++, !H(t2, n2, e2.heap[i2], e2.depth)); )
e2.heap[r2] = e2.heap[i2], r2 = i2, i2 <<= 1;
e2.heap[r2] = n2;
}
function K(e2, t2, r2) {
var n2, i2, s2, a2, o2 = 0;
if (0 !== e2.last_lit)
for (; n2 = e2.pending_buf[e2.d_buf + 2 * o2] << 8 | e2.pending_buf[e2.d_buf + 2 * o2 + 1], i2 = e2.pending_buf[e2.l_buf + o2], o2++, 0 === n2 ? L(e2, i2, t2) : (L(e2, (s2 = A[i2]) + u + 1, t2), 0 !== (a2 = w[s2]) && P(e2, i2 -= I[s2], a2), L(e2, s2 = N(--n2), r2), 0 !== (a2 = k[s2]) && P(e2, n2 -= T[s2], a2)), o2 < e2.last_lit; )
;
L(e2, m, t2);
}
function Y(e2, t2) {
var r2, n2, i2, s2 = t2.dyn_tree, a2 = t2.stat_desc.static_tree, o2 = t2.stat_desc.has_stree, h2 = t2.stat_desc.elems, u2 = -1;
for (e2.heap_len = 0, e2.heap_max = _, r2 = 0; r2 < h2; r2++)
0 !== s2[2 * r2] ? (e2.heap[++e2.heap_len] = u2 = r2, e2.depth[r2] = 0) : s2[2 * r2 + 1] = 0;
for (; e2.heap_len < 2; )
s2[2 * (i2 = e2.heap[++e2.heap_len] = u2 < 2 ? ++u2 : 0)] = 1, e2.depth[i2] = 0, e2.opt_len--, o2 && (e2.static_len -= a2[2 * i2 + 1]);
for (t2.max_code = u2, r2 = e2.heap_len >> 1; 1 <= r2; r2--)
G(e2, s2, r2);
for (i2 = h2; r2 = e2.heap[1], e2.heap[1] = e2.heap[e2.heap_len--], G(e2, s2, 1), n2 = e2.heap[1], e2.heap[--e2.heap_max] = r2, e2.heap[--e2.heap_max] = n2, s2[2 * i2] = s2[2 * r2] + s2[2 * n2], e2.depth[i2] = (e2.depth[r2] >= e2.depth[n2] ? e2.depth[r2] : e2.depth[n2]) + 1, s2[2 * r2 + 1] = s2[2 * n2 + 1] = i2, e2.heap[1] = i2++, G(e2, s2, 1), 2 <= e2.heap_len; )
;
e2.heap[--e2.heap_max] = e2.heap[1], function(e3, t3) {
var r3, n3, i3, s3, a3, o3, h3 = t3.dyn_tree, u3 = t3.max_code, l2 = t3.stat_desc.static_tree, f2 = t3.stat_desc.has_stree, c2 = t3.stat_desc.extra_bits, d2 = t3.stat_desc.extra_base, p2 = t3.stat_desc.max_length, m2 = 0;
for (s3 = 0; s3 <= g; s3++)
e3.bl_count[s3] = 0;
for (h3[2 * e3.heap[e3.heap_max] + 1] = 0, r3 = e3.heap_max + 1; r3 < _; r3++)
p2 < (s3 = h3[2 * h3[2 * (n3 = e3.heap[r3]) + 1] + 1] + 1) && (s3 = p2, m2++), h3[2 * n3 + 1] = s3, u3 < n3 || (e3.bl_count[s3]++, a3 = 0, d2 <= n3 && (a3 = c2[n3 - d2]), o3 = h3[2 * n3], e3.opt_len += o3 * (s3 + a3), f2 && (e3.static_len += o3 * (l2[2 * n3 + 1] + a3)));
if (0 !== m2) {
do {
for (s3 = p2 - 1; 0 === e3.bl_count[s3]; )
s3--;
e3.bl_count[s3]--, e3.bl_count[s3 + 1] += 2, e3.bl_count[p2]--, m2 -= 2;
} while (0 < m2);
for (s3 = p2; 0 !== s3; s3--)
for (n3 = e3.bl_count[s3]; 0 !== n3; )
u3 < (i3 = e3.heap[--r3]) || (h3[2 * i3 + 1] !== s3 && (e3.opt_len += (s3 - h3[2 * i3 + 1]) * h3[2 * i3], h3[2 * i3 + 1] = s3), n3--);
}
}(e2, t2), Z(s2, u2, e2.bl_count);
}
function X(e2, t2, r2) {
var n2, i2, s2 = -1, a2 = t2[1], o2 = 0, h2 = 7, u2 = 4;
for (0 === a2 && (h2 = 138, u2 = 3), t2[2 * (r2 + 1) + 1] = 65535, n2 = 0; n2 <= r2; n2++)
i2 = a2, a2 = t2[2 * (n2 + 1) + 1], ++o2 < h2 && i2 === a2 || (o2 < u2 ? e2.bl_tree[2 * i2] += o2 : 0 !== i2 ? (i2 !== s2 && e2.bl_tree[2 * i2]++, e2.bl_tree[2 * b]++) : o2 <= 10 ? e2.bl_tree[2 * v]++ : e2.bl_tree[2 * y]++, s2 = i2, u2 = (o2 = 0) === a2 ? (h2 = 138, 3) : i2 === a2 ? (h2 = 6, 3) : (h2 = 7, 4));
}
function V(e2, t2, r2) {
var n2, i2, s2 = -1, a2 = t2[1], o2 = 0, h2 = 7, u2 = 4;
for (0 === a2 && (h2 = 138, u2 = 3), n2 = 0; n2 <= r2; n2++)
if (i2 = a2, a2 = t2[2 * (n2 + 1) + 1], !(++o2 < h2 && i2 === a2)) {
if (o2 < u2)
for (; L(e2, i2, e2.bl_tree), 0 != --o2; )
;
else
0 !== i2 ? (i2 !== s2 && (L(e2, i2, e2.bl_tree), o2--), L(e2, b, e2.bl_tree), P(e2, o2 - 3, 2)) : o2 <= 10 ? (L(e2, v, e2.bl_tree), P(e2, o2 - 3, 3)) : (L(e2, y, e2.bl_tree), P(e2, o2 - 11, 7));
s2 = i2, u2 = (o2 = 0) === a2 ? (h2 = 138, 3) : i2 === a2 ? (h2 = 6, 3) : (h2 = 7, 4);
}
}
n(T);
var q = false;
function J(e2, t2, r2, n2) {
P(e2, (s << 1) + (n2 ? 1 : 0), 3), function(e3, t3, r3, n3) {
M(e3), n3 && (U(e3, r3), U(e3, ~r3)), i.arraySet(e3.pending_buf, e3.window, t3, r3, e3.pending), e3.pending += r3;
}(e2, t2, r2, true);
}
r._tr_init = function(e2) {
q || (function() {
var e3, t2, r2, n2, i2, s2 = new Array(g + 1);
for (n2 = r2 = 0; n2 < a - 1; n2++)
for (I[n2] = r2, e3 = 0; e3 < 1 << w[n2]; e3++)
A[r2++] = n2;
for (A[r2 - 1] = n2, n2 = i2 = 0; n2 < 16; n2++)
for (T[n2] = i2, e3 = 0; e3 < 1 << k[n2]; e3++)
E[i2++] = n2;
for (i2 >>= 7; n2 < f; n2++)
for (T[n2] = i2 << 7, e3 = 0; e3 < 1 << k[n2] - 7; e3++)
E[256 + i2++] = n2;
for (t2 = 0; t2 <= g; t2++)
s2[t2] = 0;
for (e3 = 0; e3 <= 143; )
z[2 * e3 + 1] = 8, e3++, s2[8]++;
for (; e3 <= 255; )
z[2 * e3 + 1] = 9, e3++, s2[9]++;
for (; e3 <= 279; )
z[2 * e3 + 1] = 7, e3++, s2[7]++;
for (; e3 <= 287; )
z[2 * e3 + 1] = 8, e3++, s2[8]++;
for (Z(z, l + 1, s2), e3 = 0; e3 < f; e3++)
C[2 * e3 + 1] = 5, C[2 * e3] = j(e3, 5);
O = new D(z, w, u + 1, l, g), B = new D(C, k, 0, f, g), R = new D(new Array(0), x, 0, c, p);
}(), q = true), e2.l_desc = new F(e2.dyn_ltree, O), e2.d_desc = new F(e2.dyn_dtree, B), e2.bl_desc = new F(e2.bl_tree, R), e2.bi_buf = 0, e2.bi_valid = 0, W(e2);
}, r._tr_stored_block = J, r._tr_flush_block = function(e2, t2, r2, n2) {
var i2, s2, a2 = 0;
0 < e2.level ? (2 === e2.strm.data_type && (e2.strm.data_type = function(e3) {
var t3, r3 = 4093624447;
for (t3 = 0; t3 <= 31; t3++, r3 >>>= 1)
if (1 & r3 && 0 !== e3.dyn_ltree[2 * t3])
return o;
if (0 !== e3.dyn_ltree[18] || 0 !== e3.dyn_ltree[20] || 0 !== e3.dyn_ltree[26])
return h;
for (t3 = 32; t3 < u; t3++)
if (0 !== e3.dyn_ltree[2 * t3])
return h;
return o;
}(e2)), Y(e2, e2.l_desc), Y(e2, e2.d_desc), a2 = function(e3) {
var t3;
for (X(e3, e3.dyn_ltree, e3.l_desc.max_code), X(e3, e3.dyn_dtree, e3.d_desc.max_code), Y(e3, e3.bl_desc), t3 = c - 1; 3 <= t3 && 0 === e3.bl_tree[2 * S[t3] + 1]; t3--)
;
return e3.opt_len += 3 * (t3 + 1) + 5 + 5 + 4, t3;
}(e2), i2 = e2.opt_len + 3 + 7 >>> 3, (s2 = e2.static_len + 3 + 7 >>> 3) <= i2 && (i2 = s2)) : i2 = s2 = r2 + 5, r2 + 4 <= i2 && -1 !== t2 ? J(e2, t2, r2, n2) : 4 === e2.strategy || s2 === i2 ? (P(e2, 2 + (n2 ? 1 : 0), 3), K(e2, z, C)) : (P(e2, 4 + (n2 ? 1 : 0), 3), function(e3, t3, r3, n3) {
var i3;
for (P(e3, t3 - 257, 5), P(e3, r3 - 1, 5), P(e3, n3 - 4, 4), i3 = 0; i3 < n3; i3++)
P(e3, e3.bl_tree[2 * S[i3] + 1], 3);
V(e3, e3.dyn_ltree, t3 - 1), V(e3, e3.dyn_dtree, r3 - 1);
}(e2, e2.l_desc.max_code + 1, e2.d_desc.max_code + 1, a2 + 1), K(e2, e2.dyn_ltree, e2.dyn_dtree)), W(e2), n2 && M(e2);
}, r._tr_tally = function(e2, t2, r2) {
return e2.pending_buf[e2.d_buf + 2 * e2.last_lit] = t2 >>> 8 & 255, e2.pending_buf[e2.d_buf + 2 * e2.last_lit + 1] = 255 & t2, e2.pending_buf[e2.l_buf + e2.last_lit] = 255 & r2, e2.last_lit++, 0 === t2 ? e2.dyn_ltree[2 * r2]++ : (e2.matches++, t2--, e2.dyn_ltree[2 * (A[r2] + u + 1)]++, e2.dyn_dtree[2 * N(t2)]++), e2.last_lit === e2.lit_bufsize - 1;
}, r._tr_align = function(e2) {
P(e2, 2, 3), L(e2, m, z), function(e3) {
16 === e3.bi_valid ? (U(e3, e3.bi_buf), e3.bi_buf = 0, e3.bi_valid = 0) : 8 <= e3.bi_valid && (e3.pending_buf[e3.pending++] = 255 & e3.bi_buf, e3.bi_buf >>= 8, e3.bi_valid -= 8);
}(e2);
};
}, { "../utils/common": 41 }], 53: [function(e, t, r) {
"use strict";
t.exports = function() {
this.input = null, this.next_in = 0, this.avail_in = 0, this.total_in = 0, this.output = null, this.next_out = 0, this.avail_out = 0, this.total_out = 0, this.msg = "", this.state = null, this.data_type = 2, this.adler = 0;
};
}, {}], 54: [function(e, t, r) {
(function(e2) {
!function(r2, n) {
"use strict";
if (!r2.setImmediate) {
var i, s, t2, a, o = 1, h = {}, u = false, l = r2.document, e3 = Object.getPrototypeOf && Object.getPrototypeOf(r2);
e3 = e3 && e3.setTimeout ? e3 : r2, i = "[object process]" === {}.toString.call(r2.process) ? function(e4) {
process.nextTick(function() {
c(e4);
});
} : function() {
if (r2.postMessage && !r2.importScripts) {
var e4 = true, t3 = r2.onmessage;
return r2.onmessage = function() {
e4 = false;
}, r2.postMessage("", "*"), r2.onmessage = t3, e4;
}
}() ? (a = "setImmediate$" + Math.random() + "$", r2.addEventListener ? r2.addEventListener("message", d, false) : r2.attachEvent("onmessage", d), function(e4) {
r2.postMessage(a + e4, "*");
}) : r2.MessageChannel ? ((t2 = new MessageChannel()).port1.onmessage = function(e4) {
c(e4.data);
}, function(e4) {
t2.port2.postMessage(e4);
}) : l && "onreadystatechange" in l.createElement("script") ? (s = l.documentElement, function(e4) {
var t3 = l.createElement("script");
t3.onreadystatechange = function() {
c(e4), t3.onreadystatechange = null, s.removeChild(t3), t3 = null;
}, s.appendChild(t3);
}) : function(e4) {
setTimeout(c, 0, e4);
}, e3.setImmediate = function(e4) {
"function" != typeof e4 && (e4 = new Function("" + e4));
for (var t3 = new Array(arguments.length - 1), r3 = 0; r3 < t3.length; r3++)
t3[r3] = arguments[r3 + 1];
var n2 = { callback: e4, args: t3 };
return h[o] = n2, i(o), o++;
}, e3.clearImmediate = f;
}
function f(e4) {
delete h[e4];
}
function c(e4) {
if (u)
setTimeout(c, 0, e4);
else {
var t3 = h[e4];
if (t3) {
u = true;
try {
!function(e5) {
var t4 = e5.callback, r3 = e5.args;
switch (r3.length) {
case 0:
t4();
break;
case 1:
t4(r3[0]);
break;
case 2:
t4(r3[0], r3[1]);
break;
case 3:
t4(r3[0], r3[1], r3[2]);
break;
default:
t4.apply(n, r3);
}
}(t3);
} finally {
f(e4), u = false;
}
}
}
}
function d(e4) {
e4.source === r2 && "string" == typeof e4.data && 0 === e4.data.indexOf(a) && c(+e4.data.slice(a.length));
}
}("undefined" == typeof self ? void 0 === e2 ? this : e2 : self);
}).call(this, "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {});
}, {}] }, {}, [10])(10);
});
}
});
// main.ts
var main_exports = {};
__export(main_exports, {
default: () => CourseMaterialPlugin
});
module.exports = __toCommonJS(main_exports);
var import_obsidian = require("obsidian");
var import_jszip = __toESM(require_jszip_min());
var DEFAULT_SETTINGS = {
targetFolder: "Course Modules"
// Default folder name
};
var UrlInputModal = class extends import_obsidian.Modal {
constructor(app, onSubmit) {
super(app);
this.result = "";
this.onSubmit = onSubmit;
}
onOpen() {
const { contentEl } = this;
contentEl.empty();
contentEl.createEl("h2", { text: "Enter Course Module URL" });
new import_obsidian.Setting(contentEl).setName("URL").addText((text) => text.onChange((value) => {
this.result = value.trim();
}).inputEl.focus());
new import_obsidian.Setting(contentEl).addButton((btn) => btn.setButtonText("Download and Unzip").setCta().onClick(() => {
if (this.result) {
this.close();
this.onSubmit(this.result);
} else {
new import_obsidian.Notice("Please enter a URL.");
}
}));
contentEl.addEventListener("keypress", (event) => {
if (event.key === "Enter") {
event.preventDefault();
if (this.result) {
this.close();
this.onSubmit(this.result);
} else {
new import_obsidian.Notice("Please enter a URL.");
}
}
});
}
onClose() {
let { contentEl } = this;
contentEl.empty();
}
};
var FolderSuggestModal = class extends import_obsidian.FuzzySuggestModal {
// To store the list passed from settings tab
// --- MODIFIED CONSTRUCTOR ---
constructor(app, plugin, settingDisplayElement, folders) {
super(app);
this.plugin = plugin;
this.settingDisplayElement = settingDisplayElement;
this.preFetchedFolders = folders;
this.setPlaceholder("Search for a folder...");
console.log("FolderSuggestModal: Initialized with pre-fetched list containing", folders.length, "folders.");
}
// --- MODIFIED getItems ---
// Get all folders including root
getItems() {
if (this.preFetchedFolders) {
console.log("FolderSuggestModal: Using pre-fetched folder list.");
return this.preFetchedFolders;
}
console.warn("FolderSuggestModal: Pre-fetched list not available, fetching manually.");
const folders = this.app.vault.getAllLoadedFiles().filter((file) => file instanceof import_obsidian.TFolder);
const root = this.app.vault.getRoot();
if (!folders.some((f) => f.path === "/")) {
folders.unshift(root);
}
return folders;
}
// Text representation of each folder for searching and display
getItemText(folder) {
return folder.path === "/" ? "/ (Vault Root)" : folder.path;
}
// Action when a folder is chosen
onChooseItem(folder, evt) {
const selectedPath = folder.path;
this.plugin.settings.targetFolder = selectedPath;
this.plugin.saveSettings();
new import_obsidian.Notice(`Target folder set to: ${selectedPath}`);
this.settingDisplayElement.value = selectedPath;
}
// Optional: Render suggestions with highlighting (more advanced)
renderSuggestion(item, el) {
super.renderSuggestion(item, el);
if (item.item.path === "/") {
const existingText = el.querySelector(".suggestion-content");
if (existingText)
existingText.textContent = "/ (Vault Root)";
else
el.setText("/ (Vault Root)");
}
}
};
var CourseMaterialSettingTab = class extends import_obsidian.PluginSettingTab {
constructor(app, plugin) {
super(app, plugin);
this.plugin = plugin;
}
display() {
const { containerEl } = this;
containerEl.empty();
containerEl.createEl("h2", { text: "Course Material Downloader Settings" });
const setting = new import_obsidian.Setting(containerEl).setName("Target Folder").setDesc("The folder where downloaded modules will be unzipped.");
setting.addText((text) => {
text.setValue(this.plugin.settings.targetFolder).setDisabled(true);
text.inputEl.style.width = "100%";
text.inputEl.style.marginRight = "10px";
const displayElement = text.inputEl;
setting.addButton((button) => {
button.setButtonText("Change Folder").setCta(false).onClick(() => {
console.log("Settings Tab: 'Change Folder' clicked. Fetching folder list...");
const currentFolders = this.app.vault.getAllLoadedFiles().filter((file) => file instanceof import_obsidian.TFolder);
const root = this.app.vault.getRoot();
if (!currentFolders.some((f) => f.path === "/")) {
currentFolders.unshift(root);
}
console.log("Settings Tab: Passing", currentFolders.length, "folders to modal.");
new FolderSuggestModal(this.app, this.plugin, displayElement, currentFolders).open();
});
});
});
containerEl.createEl("p", { text: "Note: If the desired folder doesn't exist, it will be created during the download process (if possible)." });
}
};
var CourseMaterialPlugin = class extends import_obsidian.Plugin {
async onload() {
console.log("Loading Course Material Downloader Plugin");
await this.loadSettings();
this.addCommand({
id: "download-course-module",
name: "Download and Unzip Course Module",
callback: () => {
this.showUrlInputModal();
}
});
this.addSettingTab(new CourseMaterialSettingTab(this.app, this));
}
onunload() {
console.log("Unloading Course Material Downloader Plugin");
}
async loadSettings() {
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
}
async saveSettings() {
await this.saveData(this.settings);
}
// --- Helper to ensure folder exists (Handles existing files gracefully) ---
async ensureFolderExists(path) {
if (path === "/" || path === "") {
return this.app.vault.getRoot();
}
let normalizedPath = path.replace(/^\/|\/$/g, "");
if (normalizedPath === "")
return this.app.vault.getRoot();
try {
const existingItem = this.app.vault.getAbstractFileByPath(normalizedPath);
if (existingItem instanceof import_obsidian.TFolder) {
return existingItem;
} else if (existingItem instanceof import_obsidian.TFile) {
console.error(`Cannot create folder '${normalizedPath}', a file with this name already exists.`);
new import_obsidian.Notice(`Cannot create folder '${normalizedPath}', a file exists there.`);
return null;
} else {
console.log(`Attempting to create folder: ${normalizedPath}`);
try {
const newFolder = await this.app.vault.createFolder(normalizedPath);
new import_obsidian.Notice(`Created folder: ${normalizedPath}`);
return newFolder;
} catch (creationError) {
console.error(`Error creating folder '${normalizedPath}':`, creationError);
const checkAgain = this.app.vault.getAbstractFileByPath(normalizedPath);
if (checkAgain instanceof import_obsidian.TFolder) {
console.log(`Folder '${normalizedPath}' found after initial creation attempt failed.`);
return checkAgain;
}
new import_obsidian.Notice(`Error creating folder '${normalizedPath}'. Check console.`);
return null;
}
}
} catch (error) {
console.error(`Unexpected error ensuring folder exists '${normalizedPath}':`, error);
new import_obsidian.Notice(`Unexpected error checking folder '${normalizedPath}'. Check console.`);
return null;
}
}
// --- Method to open the URL Input Modal ---
showUrlInputModal() {
new UrlInputModal(this.app, (url) => {
this.downloadAndUnzip(url);
}).open();
}
// --- Main Download/Unzip Logic (Handles skipping existing files & macOS metadata) ---
async downloadAndUnzip(url) {
var _a, _b;
if (!url.startsWith("http://") && !url.startsWith("https://")) {
new import_obsidian.Notice("Invalid URL received. Must start with http:// or https://");
return;
}
url = url.replace("www.dropbox.com", "dl.dropboxusercontent.com");
if (url.includes("dropbox.com") && !url.includes("dl=1")) {
url = url.includes("?") ? `${url}&dl=1` : `${url}?dl=1`;
}
const targetFolderPath = this.settings.targetFolder;
const targetFolder = await this.ensureFolderExists(targetFolderPath);
if (!targetFolder) {
new import_obsidian.Notice(`Target folder "${targetFolderPath}" could not be found or created. Aborting.`);
return;
}
const cleanTargetFolderPath = targetFolder.path === "/" ? "" : targetFolder.path;
let zipData;
try {
new import_obsidian.Notice("Downloading module...");
console.log(`Requesting URL: ${url}`);
const response = await (0, import_obsidian.requestUrl)({ url });
zipData = response.arrayBuffer;
new import_obsidian.Notice("Download complete. Unzipping...");
console.log(`Downloaded ${zipData.byteLength} bytes.`);
} catch (error) {
console.error("Download Error:", error);
new import_obsidian.Notice(`Failed to download file: ${error.message}. Check console (Ctrl+Shift+I or Cmd+Opt+I).`);
return;
}
try {
const zip = await import_jszip.default.loadAsync(zipData);
let fileCount = 0;
let folderPathsCreated = /* @__PURE__ */ new Set();
for (const relativePath in zip.files) {
const fileName = relativePath.split("/").pop();
if (relativePath.startsWith("__MACOSX/") || fileName === ".DS_Store" || !relativePath) {
if (relativePath.startsWith("__MACOSX/"))
console.log(`Ignoring macOS metadata folder: ${relativePath}`);
if (fileName === ".DS_Store")
console.log(`Ignoring .DS_Store file: ${relativePath}`);
continue;
}
const zipEntry = zip.files[relativePath];
const fullDestPath = cleanTargetFolderPath ? `${cleanTargetFolderPath}/${relativePath}` : relativePath;
const normalizedDestPath = fullDestPath.replace(/\\/g, "/").replace(/\/+/g, "/");
if (zipEntry.dir) {
const dirPath = normalizedDestPath.endsWith("/") ? normalizedDestPath.slice(0, -1) : normalizedDestPath;
if (dirPath && !folderPathsCreated.has(dirPath)) {
const folderExists = await this.ensureFolderExists(dirPath);
if (!folderExists) {
console.warn(`Could not ensure directory exists: ${dirPath}. Skipping contents.`);
} else {
folderPathsCreated.add(dirPath);
}
}
} else {
const fileData = await zipEntry.async("arraybuffer");
const lastSlashIndex = normalizedDestPath.lastIndexOf("/");
const parentPath = lastSlashIndex > 0 ? normalizedDestPath.substring(0, lastSlashIndex) : lastSlashIndex === 0 ? "/" : "";
if (parentPath && parentPath !== cleanTargetFolderPath && !folderPathsCreated.has(parentPath)) {
const parentFolderExists = await this.ensureFolderExists(parentPath);
if (!parentFolderExists) {
console.warn(`Could not ensure parent directory exists: ${parentPath}. Skipping file: ${normalizedDestPath}`);
continue;
} else {
folderPathsCreated.add(parentPath);
}
}
const pathToCheck = normalizedDestPath.startsWith("/") ? normalizedDestPath.substring(1) : normalizedDestPath;
if (pathToCheck === "" && normalizedDestPath === "/") {
console.warn("Attempting to check root path '/' for a file. Skipping.");
continue;
}
const existingItem = pathToCheck ? this.app.vault.getAbstractFileByPath(pathToCheck) : null;
if (existingItem instanceof import_obsidian.TFile) {
console.log(`Skipping extraction for existing file: ${normalizedDestPath}`);
continue;
} else if (existingItem instanceof import_obsidian.TFolder) {
console.error(`Skipping file write: A folder exists at path ${normalizedDestPath}`);
new import_obsidian.Notice(`Skipping file write: Folder exists at ${normalizedDestPath}`);
continue;
} else {
try {
console.log(`Creating new file: ${normalizedDestPath}`);
await this.app.vault.createBinary(normalizedDestPath, fileData, { mtime: Date.now() });
fileCount++;
} catch (writeError) {
if ((_a = writeError.message) == null ? void 0 : _a.toLowerCase().includes("file already exists")) {
console.warn(`Caught 'File already exists' on createBinary for ${normalizedDestPath}. Skipping.`);
} else {
console.error(`Error creating file '${normalizedDestPath}':`, writeError);
new import_obsidian.Notice(`Error creating file '${normalizedDestPath}'. Check console.`);
}
}
}
}
}
new import_obsidian.Notice(`Successfully extracted ${fileCount} new file(s) to '${targetFolder.path}'.`);
console.log(`Extraction complete to folder: ${targetFolder.path}`);
} catch (error) {
console.error("Unzip/Write Error:", error);
if ((_b = error.message) == null ? void 0 : _b.toLowerCase().includes("file already exists")) {
console.warn("Caught 'File already exists' error during unzip/write phase, possibly handled. Check logic if files were missed.");
new import_obsidian.Notice("An unexpected 'File already exists' error occurred during processing. Some files might not have been processed correctly. Check console.");
} else {
new import_obsidian.Notice(`Failed to unzip or write files: ${error.message}. Check console.`);
}
}
}
};
/*! Bundled license information:
jszip/dist/jszip.min.js:
(*!
JSZip v3.10.1 - A JavaScript class for generating and reading zip files
<http://stuartk.com/jszip>
(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>
Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.
JSZip uses the library pako released under the MIT license :
https://github.com/nodeca/pako/blob/main/LICENSE
*)
*/
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibm9kZV9tb2R1bGVzL2pzemlwL2Rpc3QvanN6aXAubWluLmpzIiwgIm1haW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIVxuXG5KU1ppcCB2My4xMC4xIC0gQSBKYXZhU2NyaXB0IGNsYXNzIGZvciBnZW5lcmF0aW5nIGFuZCByZWFkaW5nIHppcCBmaWxlc1xuPGh0dHA6Ly9zdHVhcnRrLmNvbS9qc3ppcD5cblxuKGMpIDIwMDktMjAxNiBTdHVhcnQgS25pZ2h0bGV5IDxzdHVhcnQgW2F0XSBzdHVhcnRrLmNvbT5cbkR1YWwgbGljZW5jZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIG9yIEdQTHYzLiBTZWUgaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9TdHVrL2pzemlwL21haW4vTElDRU5TRS5tYXJrZG93bi5cblxuSlNaaXAgdXNlcyB0aGUgbGlicmFyeSBwYWtvIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSA6XG5odHRwczovL2dpdGh1Yi5jb20vbm9kZWNhL3Bha28vYmxvYi9tYWluL0xJQ0VOU0VcbiovXG5cbiFmdW5jdGlvbihlKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1lKCk7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtdLGUpO2Vsc2V7KFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcykuSlNaaXA9ZSgpfX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gcyhhLG8saCl7ZnVuY3Rpb24gdShyLGUpe2lmKCFvW3JdKXtpZighYVtyXSl7dmFyIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZSYmdClyZXR1cm4gdChyLCEwKTtpZihsKXJldHVybiBsKHIsITApO3ZhciBuPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrcitcIidcIik7dGhyb3cgbi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLG59dmFyIGk9b1tyXT17ZXhwb3J0czp7fX07YVtyXVswXS5jYWxsKGkuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgdD1hW3JdWzFdW2VdO3JldHVybiB1KHR8fGUpfSxpLGkuZXhwb3J0cyxzLGEsbyxoKX1yZXR1cm4gb1tyXS5leHBvcnRzfWZvcih2YXIgbD1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGU9MDtlPGgubGVuZ3RoO2UrKyl1KGhbZV0pO3JldHVybiB1fSh7MTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBkPWUoXCIuL3V0aWxzXCIpLGM9ZShcIi4vc3VwcG9ydFwiKSxwPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIjtyLmVuY29kZT1mdW5jdGlvbihlKXtmb3IodmFyIHQscixuLGkscyxhLG8saD1bXSx1PTAsbD1lLmxlbmd0aCxmPWwsYz1cInN0cmluZ1wiIT09ZC5nZXRUeXBlT2YoZSk7dTxlLmxlbmd0aDspZj1sLXUsbj1jPyh0PWVbdSsrXSxyPXU8bD9lW3UrK106MCx1PGw/ZVt1KytdOjApOih0PWUuY2hhckNvZGVBdCh1KyspLHI9dTxsP2UuY2hhckNvZGVBdCh1KyspOjAsdTxsP2UuY2hhckNvZGVBdCh1KyspOjApLGk9dD4+MixzPSgzJnQpPDw0fHI+PjQsYT0xPGY/KDE1JnIpPDwyfG4+PjY6NjQsbz0yPGY/NjMmbjo2NCxoLnB1c2gocC5jaGFyQXQoaSkrcC5jaGFyQXQocykrcC5jaGFyQXQoYSkrcC5jaGFyQXQobykpO3JldHVybiBoLmpvaW4oXCJcIil9LHIuZGVjb2RlPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbixpLHMsYSxvPTAsaD0wLHU9XCJkYXRhOlwiO2lmKGUuc3Vic3RyKDAsdS5sZW5ndGgpPT09dSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBpbnB1dCwgaXQgbG9va3MgbGlrZSBhIGRhdGEgdXJsLlwiKTt2YXIgbCxmPTMqKGU9ZS5yZXBsYWNlKC9bXkEtWmEtejAtOSsvPV0vZyxcIlwiKSkubGVuZ3RoLzQ7aWYoZS5jaGFyQXQoZS5sZW5ndGgtMSk9PT1wLmNoYXJBdCg2NCkmJmYtLSxlLmNoYXJBdChlLmxlbmd0aC0yKT09PXAuY2hhckF0KDY0KSYmZi0tLGYlMSE9MCl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBpbnB1dCwgYmFkIGNvbnRlbnQgbGVuZ3RoLlwiKTtmb3IobD1jLnVpbnQ4YXJyYXk/bmV3IFVpbnQ4QXJyYXkoMHxmKTpuZXcgQXJyYXkoMHxmKTtvPGUubGVuZ3RoOyl0PXAuaW5kZXhPZihlLmNoYXJBdChvKyspKTw8MnwoaT1wLmluZGV4T2YoZS5jaGFyQXQobysrKSkpPj40LHI9KDE1JmkpPDw0fChzPXAuaW5kZXhPZihlLmNoYXJBdChvKyspKSk+PjIsbj0oMyZzKTw8NnwoYT1wLmluZGV4T2YoZS5jaGFyQXQobysrKSkpLGxbaCsrXT10LDY0IT09cyYmKGxbaCsrXT1yKSw2NCE9PWEmJihsW2grK109bik7cmV0dXJuIGx9fSx7XCIuL3N1cHBvcnRcIjozMCxcIi4vdXRpbHNcIjozMn1dLDI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi9leHRlcm5hbFwiKSxpPWUoXCIuL3N0cmVhbS9EYXRhV29ya2VyXCIpLHM9ZShcIi4vc3RyZWFtL0NyYzMyUHJvYmVcIiksYT1lKFwiLi9zdHJlYW0vRGF0YUxlbmd0aFByb2JlXCIpO2Z1bmN0aW9uIG8oZSx0LHIsbixpKXt0aGlzLmNvbXByZXNzZWRTaXplPWUsdGhpcy51bmNvbXByZXNzZWRTaXplPXQsdGhpcy5jcmMzMj1yLHRoaXMuY29tcHJlc3Npb249bix0aGlzLmNvbXByZXNzZWRDb250ZW50PWl9by5wcm90b3R5cGU9e2dldENvbnRlbnRXb3JrZXI6ZnVuY3Rpb24oKXt2YXIgZT1uZXcgaShuLlByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXByZXNzZWRDb250ZW50KSkucGlwZSh0aGlzLmNvbXByZXNzaW9uLnVuY29tcHJlc3NXb3JrZXIoKSkucGlwZShuZXcgYShcImRhdGFfbGVuZ3RoXCIpKSx0PXRoaXM7cmV0dXJuIGUub24oXCJlbmRcIixmdW5jdGlvbigpe2lmKHRoaXMuc3RyZWFtSW5mby5kYXRhX2xlbmd0aCE9PXQudW5jb21wcmVzc2VkU2l6ZSl0aHJvdyBuZXcgRXJyb3IoXCJCdWcgOiB1bmNvbXByZXNzZWQgZGF0YSBzaXplIG1pc21hdGNoXCIpfSksZX0sZ2V0Q29tcHJlc3NlZFdvcmtlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgaShuLlByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXByZXNzZWRDb250ZW50KSkud2l0aFN0cmVhbUluZm8oXCJjb21wcmVzc2VkU2l6ZVwiLHRoaXMuY29tcHJlc3NlZFNpemUpLndpdGhTdHJlYW1JbmZvKFwidW5jb21wcmVzc2VkU2l6ZVwiLHRoaXMudW5jb21wcmVzc2VkU2l6ZSkud2l0aFN0cmVhbUluZm8oXCJjcmMzMlwiLHRoaXMuY3JjMzIpLndpdGhTdHJlYW1JbmZvKFwiY29tcHJlc3Npb25cIix0aGlzLmNvbXByZXNzaW9uKX19LG8uY3JlYXRlV29ya2VyRnJvbT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGUucGlwZShuZXcgcykucGlwZShuZXcgYShcInVuY29tcHJlc3NlZFNpemVcIikpLnBpcGUodC5jb21wcmVzc1dvcmtlcihyKSkucGlwZShuZXcgYShcImNvbXByZXNzZWRTaXplXCIpKS53aXRoU3RyZWFtSW5mbyhcImNvbXByZXNzaW9uXCIsdCl9LHQuZXhwb3J0cz1vfSx7XCIuL2V4dGVybmFsXCI6NixcIi4vc3RyZWFtL0NyYzMyUHJvYmVcIjoyNSxcIi4vc3RyZWFtL0RhdGFMZW5ndGhQcm9iZVwiOjI2LFwiLi9zdHJlYW0vRGF0YVdvcmtlclwiOjI3fV0sMzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuL3N0cmVhbS9HZW5lcmljV29ya2VyXCIpO3IuU1RPUkU9e21hZ2ljOlwiXFwwXFwwXCIsY29tcHJlc3NXb3JrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4oXCJTVE9SRSBjb21wcmVzc2lvblwiKX0sdW5jb21wcmVzc1dvcmtlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgbihcIlNUT1JFIGRlY29tcHJlc3Npb25cIil9fSxyLkRFRkxBVEU9ZShcIi4vZmxhdGVcIil9LHtcIi4vZmxhdGVcIjo3LFwiLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiOjI4fV0sNDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuL3V0aWxzXCIpO3ZhciBvPWZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9W10scj0wO3I8MjU2O3IrKyl7ZT1yO2Zvcih2YXIgbj0wO248ODtuKyspZT0xJmU/Mzk4ODI5MjM4NF5lPj4+MTplPj4+MTt0W3JdPWV9cmV0dXJuIHR9KCk7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMCE9PWUmJmUubGVuZ3RoP1wic3RyaW5nXCIhPT1uLmdldFR5cGVPZihlKT9mdW5jdGlvbihlLHQscixuKXt2YXIgaT1vLHM9bityO2VePS0xO2Zvcih2YXIgYT1uO2E8czthKyspZT1lPj4+OF5pWzI1NSYoZV50W2FdKV07cmV0dXJuLTFeZX0oMHx0LGUsZS5sZW5ndGgsMCk6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9byxzPW4rcjtlXj0tMTtmb3IodmFyIGE9bjthPHM7YSsrKWU9ZT4+PjheaVsyNTUmKGVedC5jaGFyQ29kZUF0KGEpKV07cmV0dXJuLTFeZX0oMHx0LGUsZS5sZW5ndGgsMCk6MH19LHtcIi4vdXRpbHNcIjozMn1dLDU6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtyLmJhc2U2ND0hMSxyLmJpbmFyeT0hMSxyLmRpcj0hMSxyLmNyZWF0ZUZvbGRlcnM9ITAsci5kYXRlPW51bGwsci5jb21wcmVzc2lvbj1udWxsLHIuY29tcHJlc3Npb25PcHRpb25zPW51bGwsci5jb21tZW50PW51bGwsci51bml4UGVybWlzc2lvbnM9bnVsbCxyLmRvc1Blcm1pc3Npb25zPW51bGx9LHt9XSw2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49bnVsbDtuPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBQcm9taXNlP1Byb21pc2U6ZShcImxpZVwiKSx0LmV4cG9ydHM9e1Byb21pc2U6bn19LHtsaWU6Mzd9XSw3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50MTZBcnJheSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQzMkFycmF5LGk9ZShcInBha29cIikscz1lKFwiLi91dGlsc1wiKSxhPWUoXCIuL3N0cmVhbS9HZW5lcmljV29ya2VyXCIpLG89bj9cInVpbnQ4YXJyYXlcIjpcImFycmF5XCI7ZnVuY3Rpb24gaChlLHQpe2EuY2FsbCh0aGlzLFwiRmxhdGVXb3JrZXIvXCIrZSksdGhpcy5fcGFrbz1udWxsLHRoaXMuX3Bha29BY3Rpb249ZSx0aGlzLl9wYWtvT3B0aW9ucz10LHRoaXMubWV0YT17fX1yLm1hZ2ljPVwiXFxiXFwwXCIscy5pbmhlcml0cyhoLGEpLGgucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbihlKXt0aGlzLm1ldGE9ZS5tZXRhLG51bGw9PT10aGlzLl9wYWtvJiZ0aGlzLl9jcmVhdGVQYWtvKCksdGhpcy5fcGFrby5wdXNoKHMudHJhbnNmb3JtVG8obyxlLmRhdGEpLCExKX0saC5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXthLnByb3RvdHlwZS5mbHVzaC5jYWxsKHRoaXMpLG51bGw9PT10aGlzLl9wYWtvJiZ0aGlzLl9jcmVhdGVQYWtvKCksdGhpcy5fcGFrby5wdXNoKFtdLCEwKX0saC5wcm90b3R5cGUuY2xlYW5VcD1mdW5jdGlvbigpe2EucHJvdG90eXBlLmNsZWFuVXAuY2FsbCh0aGlzKSx0aGlzLl9wYWtvPW51bGx9LGgucHJvdG90eXBlLl9jcmVhdGVQYWtvPWZ1bmN0aW9uKCl7dGhpcy5fcGFrbz1uZXcgaVt0aGlzLl9wYWtvQWN0aW9uXSh7cmF3OiEwLGxldmVsOnRoaXMuX3Bha29PcHRpb25zLmxldmVsfHwtMX0pO3ZhciB0PXRoaXM7dGhpcy5fcGFrby5vbkRhdGE9ZnVuY3Rpb24oZSl7dC5wdXNoKHtkYXRhOmUsbWV0YTp0Lm1ldGF9KX19LHIuY29tcHJlc3NXb3JrZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBoKFwiRGVmbGF0ZVwiLGUpfSxyLnVuY29tcHJlc3NXb3JrZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGgoXCJJbmZsYXRlXCIse30pfX0se1wiLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiOjI4LFwiLi91dGlsc1wiOjMyLHBha286Mzh9XSw4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gQShlLHQpe3ZhciByLG49XCJcIjtmb3Iocj0wO3I8dDtyKyspbis9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmZSksZT4+Pj04O3JldHVybiBufWZ1bmN0aW9uIG4oZSx0LHIsbixpLHMpe3ZhciBhLG8saD1lLmZpbGUsdT1lLmNvbXByZXNzaW9uLGw9cyE9PU8udXRmOGVuY29kZSxmPUkudHJhbnNmb3JtVG8oXCJzdHJpbmdcIixzKGgubmFtZSkpLGM9SS50cmFuc2Zvcm1UbyhcInN0cmluZ1wiLE8udXRmOGVuY29kZShoLm5hbWUpKSxkPWguY29tbWVudCxwPUkudHJhbnNmb3JtVG8oXCJzdHJpbmdcIixzKGQpKSxtPUkudHJhbnNmb3JtVG8oXCJzdHJpbmdcIixPLnV0ZjhlbmNvZGUoZCkpLF89Yy5sZW5ndGghPT1oLm5hbWUubGVuZ3RoLGc9bS5sZW5ndGghPT1kLmxlbmd0aCxiPVwiXCIsdj1cIlwiLHk9XCJcIix3PWguZGlyLGs9aC5kYXRlLHg9e2NyYzMyOjAsY29tcHJlc3NlZFNpemU6MCx1bmNvbXByZXNzZWRTaXplOjB9O3QmJiFyfHwoeC5jcmMzMj1lLmNyYzMyLHguY29tcHJlc3NlZFNpemU9ZS5jb21wcmVzc2VkU2l6ZSx4LnVuY29tcHJlc3NlZFNpemU9ZS51bmNvbXByZXNzZWRTaXplKTt2YXIgUz0wO3QmJihTfD04KSxsfHwhXyYmIWd8fChTfD0yMDQ4KTt2YXIgej0wLEM9MDt3JiYoenw9MTYpLFwiVU5JWFwiPT09aT8oQz03OTgsenw9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lO3JldHVybiBlfHwocj10PzE2ODkzOjMzMjA0KSwoNjU1MzUmcik8PDE2fShoLnVuaXhQZXJtaXNzaW9ucyx3KSk6KEM9MjAsenw9ZnVuY3Rpb24oZSl7cmV0dXJuIDYzJihlfHwwKX0oaC5kb3NQZXJtaXNzaW9ucykpLGE9ay5nZXRVVENIb3VycygpLGE8PD02LGF8PWsuZ2V0VVRDTWludXRlcygpLGE8PD01LGF8PWsuZ2V0VVRDU2Vjb25kcygpLzIsbz1rLmdldFVUQ0Z1bGxZZWFyKCktMTk4MCxvPDw9NCxvfD1rLmdldFVUQ01vbnRoKCkrMSxvPDw9NSxvfD1rLmdldFVUQ0RhdGUoKSxfJiYodj1BKDEsMSkrQShCKGYpLDQpK2MsYis9XCJ1cFwiK0Eodi5sZW5ndGgsMikrdiksZyYmKHk9QSgxLDEpK0EoQihwKSw0KSttLGIrPVwidWNcIitBKHkubGVuZ3RoLDIpK3kpO3ZhciBFPVwiXCI7cmV0dXJuIEUrPVwiXFxuXFwwXCIsRSs9QShTLDIpLEUrPXUubWFnaWMsRSs9QShhLDIpLEUrPUEobywyKSxFKz1BKHguY3JjMzIsNCksRSs9QSh4LmNvbXByZXNzZWRTaXplLDQpLEUrPUEoeC51bmNvbXByZXNzZWRTaXplLDQpLEUrPUEoZi5sZW5ndGgsMiksRSs9QShiLmxlbmd0aCwyKSx7ZmlsZVJlY29yZDpSLkxPQ0FMX0ZJTEVfSEVBREVSK0UrZitiLGRpclJlY29yZDpSLkNFTlRSQUxfRklMRV9IRUFERVIrQShDLDIpK0UrQShwLmxlbmd0aCwyKStcIlxcMFxcMFxcMFxcMFwiK0Eoeiw0KStBKG4sNCkrZitiK3B9fXZhciBJPWUoXCIuLi91dGlsc1wiKSxpPWUoXCIuLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiKSxPPWUoXCIuLi91dGY4XCIpLEI9ZShcIi4uL2NyYzMyXCIpLFI9ZShcIi4uL3NpZ25hdHVyZVwiKTtmdW5jdGlvbiBzKGUsdCxyLG4pe2kuY2FsbCh0aGlzLFwiWmlwRmlsZVdvcmtlclwiKSx0aGlzLmJ5dGVzV3JpdHRlbj0wLHRoaXMuemlwQ29tbWVudD10LHRoaXMuemlwUGxhdGZvcm09cix0aGlzLmVuY29kZUZpbGVOYW1lPW4sdGhpcy5zdHJlYW1GaWxlcz1lLHRoaXMuYWNjdW11bGF0ZT0hMSx0aGlzLmNvbnRlbnRCdWZmZXI9W10sdGhpcy5kaXJSZWNvcmRzPVtdLHRoaXMuY3VycmVudFNvdXJjZU9mZnNldD0wLHRoaXMuZW50cmllc0NvdW50PTAsdGhpcy5jdXJyZW50RmlsZT1udWxsLHRoaXMuX3NvdXJjZXM9W119SS5pbmhlcml0cyhzLGkpLHMucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tZXRhLnBlcmNlbnR8fDAscj10aGlzLmVudHJpZXNDb3VudCxuPXRoaXMuX3NvdXJjZXMubGVuZ3RoO3RoaXMuYWNjdW11bGF0ZT90aGlzLmNvbnRlbnRCdWZmZXIucHVzaChlKToodGhpcy5ieXRlc1dyaXR0ZW4rPWUuZGF0YS5sZW5ndGgsaS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMse2RhdGE6ZS5kYXRhLG1ldGE6e2N1cnJlbnRGaWxlOnRoaXMuY3VycmVudEZpbGUscGVyY2VudDpyPyh0KzEwMCooci1uLTEpKS9yOjEwMH19KSl9LHMucHJvdG90eXBlLm9wZW5lZFNvdXJjZT1mdW5jdGlvbihlKXt0aGlzLmN1cnJlbnRTb3VyY2VPZmZzZXQ9dGhpcy5ieXRlc1dyaXR0ZW4sdGhpcy5jdXJyZW50RmlsZT1lLmZpbGUubmFtZTt2YXIgdD10aGlzLnN0cmVhbUZpbGVzJiYhZS5maWxlLmRpcjtpZih0KXt2YXIgcj1uKGUsdCwhMSx0aGlzLmN1cnJlbnRTb3VyY2VPZmZzZXQsdGhpcy56aXBQbGF0Zm9ybSx0aGlzLmVuY29kZUZpbGVOYW1lKTt0aGlzLnB1c2goe2RhdGE6ci5maWxlUmVjb3JkLG1ldGE6e3BlcmNlbnQ6MH19KX1lbHNlIHRoaXMuYWNjdW11bGF0ZT0hMH0scy5wcm90b3R5cGUuY2xvc2VkU291cmNlPWZ1bmN0aW9uKGUpe3RoaXMuYWNjdW11bGF0ZT0hMTt2YXIgdD10aGlzLnN0cmVhbUZpbGVzJiYhZS5maWxlLmRpcixyPW4oZSx0LCEwLHRoaXMuY3VycmVudFNvdXJjZU9mZnNldCx0aGlzLnppcFBsYXRmb3JtLHRoaXMuZW5jb2RlRmlsZU5hbWUpO2lmKHRoaXMuZGlyUmVjb3Jkcy5wdXNoKHIuZGlyUmVjb3JkKSx0KXRoaXMucHVzaCh7ZGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gUi5EQVRBX0RFU0NSSVBUT1IrQShlLmNyYzMyLDQpK0EoZS5jb21wcmVzc2VkU2l6ZSw0KStBKGUudW5jb21wcmVzc2VkU2l6ZSw0KX0oZSksbWV0YTp7cGVyY2VudDoxMDB9fSk7ZWxzZSBmb3IodGhpcy5wdXNoKHtkYXRhOnIuZmlsZVJlY29yZCxtZXRhOntwZXJjZW50OjB9fSk7dGhpcy5jb250ZW50QnVmZmVyLmxlbmd0aDspdGhpcy5wdXNoKHRoaXMuY29udGVudEJ1ZmZlci5zaGlmdCgpKTt0aGlzLmN1cnJlbnRGaWxlPW51bGx9LHMucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuYnl0ZXNXcml0dGVuLHQ9MDt0PHRoaXMuZGlyUmVjb3Jkcy5sZW5ndGg7dCsrKXRoaXMucHVzaCh7ZGF0YTp0aGlzLmRpclJlY29yZHNbdF0sbWV0YTp7cGVyY2VudDoxMDB9fSk7dmFyIHI9dGhpcy5ieXRlc1dyaXR0ZW4tZSxuPWZ1bmN0aW9uKGUsdCxyLG4saSl7dmFyIHM9SS50cmFuc2Zvcm1UbyhcInN0cmluZ1wiLGkobikpO3JldHVybiBSLkNFTlRSQUxfRElSRUNUT1JZX0VORCtcIlxcMFxcMFxcMFxcMFwiK0EoZSwyKStBKGUsMikrQSh0LDQpK0Eociw0KStBKHMubGVuZ3RoLDIpK3N9KHRoaXMuZGlyUmVjb3Jkcy5sZW5ndGgscixlLHRoaXMuemlwQ29tbWVudCx0aGlzLmVuY29kZUZpbGVOYW1lKTt0aGlzLnB1c2goe2RhdGE6bixtZXRhOntwZXJjZW50OjEwMH19KX0scy5wcm90b3R5cGUucHJlcGFyZU5leHRTb3VyY2U9ZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXRoaXMuX3NvdXJjZXMuc2hpZnQoKSx0aGlzLm9wZW5lZFNvdXJjZSh0aGlzLnByZXZpb3VzLnN0cmVhbUluZm8pLHRoaXMuaXNQYXVzZWQ/dGhpcy5wcmV2aW91cy5wYXVzZSgpOnRoaXMucHJldmlvdXMucmVzdW1lKCl9LHMucHJvdG90eXBlLnJlZ2lzdGVyUHJldmlvdXM9ZnVuY3Rpb24oZSl7dGhpcy5fc291cmNlcy5wdXNoKGUpO3ZhciB0PXRoaXM7cmV0dXJuIGUub24oXCJkYXRhXCIsZnVuY3Rpb24oZSl7dC5wcm9jZXNzQ2h1bmsoZSl9KSxlLm9uKFwiZW5kXCIsZnVuY3Rpb24oKXt0LmNsb3NlZFNvdXJjZSh0LnByZXZpb3VzLnN0cmVhbUluZm8pLHQuX3NvdXJjZXMubGVuZ3RoP3QucHJlcGFyZU5leHRTb3VyY2UoKTp0LmVuZCgpfSksZS5vbihcImVycm9yXCIsZnVuY3Rpb24oZSl7dC5lcnJvcihlKX0pLHRoaXN9LHMucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3JldHVybiEhaS5wcm90b3R5cGUucmVzdW1lLmNhbGwodGhpcykmJighdGhpcy5wcmV2aW91cyYmdGhpcy5fc291cmNlcy5sZW5ndGg/KHRoaXMucHJlcGFyZU5leHRTb3VyY2UoKSwhMCk6dGhpcy5wcmV2aW91c3x8dGhpcy5fc291cmNlcy5sZW5ndGh8fHRoaXMuZ2VuZXJhdGVkRXJyb3I/dm9pZCAwOih0aGlzLmVuZCgpLCEwKSl9LHMucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3NvdXJjZXM7aWYoIWkucHJvdG90eXBlLmVycm9yLmNhbGwodGhpcyxlKSlyZXR1cm4hMTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0cnl7dFtyXS5lcnJvcihlKX1jYXRjaChlKXt9cmV0dXJuITB9LHMucHJvdG90eXBlLmxvY2s9ZnVuY3Rpb24oKXtpLnByb3RvdHlwZS5sb2NrLmNhbGwodGhpcyk7Zm9yKHZhciBlPXRoaXMuX3NvdXJjZXMsdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0ubG9jaygpfSx0LmV4cG9ydHM9c30se1wiLi4vY3JjMzJcIjo0LFwiLi4vc2lnbmF0dXJlXCI6MjMsXCIuLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiOjI4LFwiLi4vdXRmOFwiOjMxLFwiLi4vdXRpbHNcIjozMn1dLDk6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgdT1lKFwiLi4vY29tcHJlc3Npb25zXCIpLG49ZShcIi4vWmlwRmlsZVdvcmtlclwiKTtyLmdlbmVyYXRlV29ya2VyPWZ1bmN0aW9uKGUsYSx0KXt2YXIgbz1uZXcgbihhLnN0cmVhbUZpbGVzLHQsYS5wbGF0Zm9ybSxhLmVuY29kZUZpbGVOYW1lKSxoPTA7dHJ5e2UuZm9yRWFjaChmdW5jdGlvbihlLHQpe2grKzt2YXIgcj1mdW5jdGlvbihlLHQpe3ZhciByPWV8fHQsbj11W3JdO2lmKCFuKXRocm93IG5ldyBFcnJvcihyK1wiIGlzIG5vdCBhIHZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCAhXCIpO3JldHVybiBufSh0Lm9wdGlvbnMuY29tcHJlc3Npb24sYS5jb21wcmVzc2lvbiksbj10Lm9wdGlvbnMuY29tcHJlc3Npb25PcHRpb25zfHxhLmNvbXByZXNzaW9uT3B0aW9uc3x8e30saT10LmRpcixzPXQuZGF0ZTt0Ll9jb21wcmVzc1dvcmtlcihyLG4pLndpdGhTdHJlYW1JbmZvKFwiZmlsZVwiLHtuYW1lOmUsZGlyOmksZGF0ZTpzLGNvbW1lbnQ6dC5jb21tZW50fHxcIlwiLHVuaXhQZXJtaXNzaW9uczp0LnVuaXhQZXJtaXNzaW9ucyxkb3NQZXJtaXNzaW9uczp0LmRvc1Blcm1pc3Npb25zfSkucGlwZShvKX0pLG8uZW50cmllc0NvdW50PWh9Y2F0Y2goZSl7by5lcnJvcihlKX1yZXR1cm4gb319LHtcIi4uL2NvbXByZXNzaW9uc1wiOjMsXCIuL1ppcEZpbGVXb3JrZXJcIjo4fV0sMTA6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpcmV0dXJuIG5ldyBuO2lmKGFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiVGhlIGNvbnN0cnVjdG9yIHdpdGggcGFyYW1ldGVycyBoYXMgYmVlbiByZW1vdmVkIGluIEpTWmlwIDMuMCwgcGxlYXNlIGNoZWNrIHRoZSB1cGdyYWRlIGd1aWRlLlwiKTt0aGlzLmZpbGVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5jb21tZW50PW51bGwsdGhpcy5yb290PVwiXCIsdGhpcy5jbG9uZT1mdW5jdGlvbigpe3ZhciBlPW5ldyBuO2Zvcih2YXIgdCBpbiB0aGlzKVwiZnVuY3Rpb25cIiE9dHlwZW9mIHRoaXNbdF0mJihlW3RdPXRoaXNbdF0pO3JldHVybiBlfX0obi5wcm90b3R5cGU9ZShcIi4vb2JqZWN0XCIpKS5sb2FkQXN5bmM9ZShcIi4vbG9hZFwiKSxuLnN1cHBvcnQ9ZShcIi4vc3VwcG9ydFwiKSxuLmRlZmF1bHRzPWUoXCIuL2RlZmF1bHRzXCIpLG4udmVyc2lvbj1cIjMuMTAuMVwiLG4ubG9hZEFzeW5jPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG5ldyBuKS5sb2FkQXN5bmMoZSx0KX0sbi5leHRlcm5hbD1lKFwiLi9leHRlcm5hbFwiKSx0LmV4cG9ydHM9bn0se1wiLi9kZWZhdWx0c1wiOjUsXCIuL2V4dGVybmFsXCI6NixcIi4vbG9hZFwiOjExLFwiLi9vYmplY3RcIjoxNSxcIi4vc3VwcG9ydFwiOjMwfV0sMTE6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgdT1lKFwiLi91dGlsc1wiKSxpPWUoXCIuL2V4dGVybmFsXCIpLG49ZShcIi4vdXRmOFwiKSxzPWUoXCIuL3ppcEVudHJpZXNcIiksYT1lKFwiLi9zdHJlYW0vQ3JjMzJQcm9iZVwiKSxsPWUoXCIuL25vZGVqc1V0aWxzXCIpO2Z1bmN0aW9uIGYobil7cmV0dXJuIG5ldyBpLlByb21pc2UoZnVuY3Rpb24oZSx0KXt2YXIgcj1uLmRlY29tcHJlc3NlZC5nZXRDb250ZW50V29ya2VyKCkucGlwZShuZXcgYSk7ci5vbihcImVycm9yXCIsZnVuY3Rpb24oZSl7dChlKX0pLm9uKFwiZW5kXCIsZnVuY3Rpb24oKXtyLnN0cmVhbUluZm8uY3JjMzIhPT1uLmRlY29tcHJlc3NlZC5jcmMzMj90KG5ldyBFcnJvcihcIkNvcnJ1cHRlZCB6aXAgOiBDUkMzMiBtaXNtYXRjaFwiKSk6ZSgpfSkucmVzdW1lKCl9KX10LmV4cG9ydHM9ZnVuY3Rpb24oZSxvKXt2YXIgaD10aGlzO3JldHVybiBvPXUuZXh0ZW5kKG98fHt9LHtiYXNlNjQ6ITEsY2hlY2tDUkMzMjohMSxvcHRpbWl6ZWRCaW5hcnlTdHJpbmc6ITEsY3JlYXRlRm9sZGVyczohMSxkZWNvZGVGaWxlTmFtZTpuLnV0ZjhkZWNvZGV9KSxsLmlzTm9kZSYmbC5pc1N0cmVhbShlKT9pLlByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkpTWmlwIGNhbid0IGFjY2VwdCBhIHN0cmVhbSB3aGVuIGxvYWRpbmcgYSB6aXAgZmlsZS5cIikpOnUucHJlcGFyZUNvbnRlbnQoXCJ0aGUgbG9hZGVkIHppcCBmaWxlXCIsZSwhMCxvLm9wdGltaXplZEJpbmFyeVN0cmluZyxvLmJhc2U2NCkudGhlbihmdW5jdGlvbihlKXt2YXIgdD1uZXcgcyhvKTtyZXR1cm4gdC5sb2FkKGUpLHR9KS50aGVuKGZ1bmN0aW9uKGUpe3ZhciB0PVtpLlByb21pc2UucmVzb2x2ZShlKV0scj1lLmZpbGVzO2lmKG8uY2hlY2tDUkMzMilmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl0LnB1c2goZihyW25dKSk7cmV0dXJuIGkuUHJvbWlzZS5hbGwodCl9KS50aGVuKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnNoaWZ0KCkscj10LmZpbGVzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXSxzPWkuZmlsZU5hbWVTdHIsYT11LnJlc29sdmUoaS5maWxlTmFtZVN0cik7aC5maWxlKGEsaS5kZWNvbXByZXNzZWQse2JpbmFyeTohMCxvcHRpbWl6ZWRCaW5hcnlTdHJpbmc6ITAsZGF0ZTppLmRhdGUsZGlyOmkuZGlyLGNvbW1lbnQ6aS5maWxlQ29tbWVudFN0ci5sZW5ndGg/aS5maWxlQ29tbWVudFN0cjpudWxsLHVuaXhQZXJtaXNzaW9uczppLnVuaXhQZXJtaXNzaW9ucyxkb3NQZXJtaXNzaW9uczppLmRvc1Blcm1pc3Npb25zLGNyZWF0ZUZvbGRlcnM6by5jcmVhdGVGb2xkZXJzfSksaS5kaXJ8fChoLmZpbGUoYSkudW5zYWZlT3JpZ2luYWxOYW1lPXMpfXJldHVybiB0LnppcENvbW1lbnQubGVuZ3RoJiYoaC5jb21tZW50PXQuemlwQ29tbWVudCksaH0pfX0se1wiLi9leHRlcm5hbFwiOjYsXCIuL25vZGVqc1V0aWxzXCI6MTQsXCIuL3N0cmVhbS9DcmMzMlByb2JlXCI6MjUsXCIuL3V0ZjhcIjozMSxcIi4vdXRpbHNcIjozMixcIi4vemlwRW50cmllc1wiOjMzfV0sMTI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vdXRpbHNcIiksaT1lKFwiLi4vc3RyZWFtL0dlbmVyaWNXb3JrZXJcIik7ZnVuY3Rpb24gcyhlLHQpe2kuY2FsbCh0aGlzLFwiTm9kZWpzIHN0cmVhbSBpbnB1dCBhZGFwdGVyIGZvciBcIitlKSx0aGlzLl91cHN0cmVhbUVuZGVkPSExLHRoaXMuX2JpbmRTdHJlYW0odCl9bi5pbmhlcml0cyhzLGkpLHMucHJvdG90eXBlLl9iaW5kU3RyZWFtPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7KHRoaXMuX3N0cmVhbT1lKS5wYXVzZSgpLGUub24oXCJkYXRhXCIsZnVuY3Rpb24oZSl7dC5wdXNoKHtkYXRhOmUsbWV0YTp7cGVyY2VudDowfX0pfSkub24oXCJlcnJvclwiLGZ1bmN0aW9uKGUpe3QuaXNQYXVzZWQ/dGhpcy5nZW5lcmF0ZWRFcnJvcj1lOnQuZXJyb3IoZSl9KS5vbihcImVuZFwiLGZ1bmN0aW9uKCl7dC5pc1BhdXNlZD90Ll91cHN0cmVhbUVuZGVkPSEwOnQuZW5kKCl9KX0scy5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4hIWkucHJvdG90eXBlLnBhdXNlLmNhbGwodGhpcykmJih0aGlzLl9zdHJlYW0ucGF1c2UoKSwhMCl9LHMucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3JldHVybiEhaS5wcm90b3R5cGUucmVzdW1lLmNhbGwodGhpcykmJih0aGlzLl91cHN0cmVhbUVuZGVkP3RoaXMuZW5kKCk6dGhpcy5fc3RyZWFtLnJlc3VtZSgpLCEwKX0sdC5leHBvcnRzPXN9LHtcIi4uL3N0cmVhbS9HZW5lcmljV29ya2VyXCI6MjgsXCIuLi91dGlsc1wiOjMyfV0sMTM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgaT1lKFwicmVhZGFibGUtc3RyZWFtXCIpLlJlYWRhYmxlO2Z1bmN0aW9uIG4oZSx0LHIpe2kuY2FsbCh0aGlzLHQpLHRoaXMuX2hlbHBlcj1lO3ZhciBuPXRoaXM7ZS5vbihcImRhdGFcIixmdW5jdGlvbihlLHQpe24ucHVzaChlKXx8bi5faGVscGVyLnBhdXNlKCksciYmcih0KX0pLm9uKFwiZXJyb3JcIixmdW5jdGlvbihlKXtuLmVtaXQoXCJlcnJvclwiLGUpfSkub24oXCJlbmRcIixmdW5jdGlvbigpe24ucHVzaChudWxsKX0pfWUoXCIuLi91dGlsc1wiKS5pbmhlcml0cyhuLGkpLG4ucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKCl7dGhpcy5faGVscGVyLnJlc3VtZSgpfSx0LmV4cG9ydHM9bn0se1wiLi4vdXRpbHNcIjozMixcInJlYWRhYmxlLXN0cmVhbVwiOjE2fV0sMTQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9e2lzTm9kZTpcInVuZGVmaW5lZFwiIT10eXBlb2YgQnVmZmVyLG5ld0J1ZmZlckZyb206ZnVuY3Rpb24oZSx0KXtpZihCdWZmZXIuZnJvbSYmQnVmZmVyLmZyb20hPT1VaW50OEFycmF5LmZyb20pcmV0dXJuIEJ1ZmZlci5mcm9tKGUsdCk7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCdUaGUgXCJkYXRhXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtyZXR1cm4gbmV3IEJ1ZmZlcihlLHQpfSxhbGxvY0J1ZmZlcjpmdW5jdGlvbihlKXtpZihCdWZmZXIuYWxsb2MpcmV0dXJuIEJ1ZmZlci5hbGxvYyhlKTt2YXIgdD1uZXcgQnVmZmVyKGUpO3JldHVybiB0LmZpbGwoMCksdH0saXNCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihlKX0saXNTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUub24mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUucGF1c2UmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUucmVzdW1lfX19LHt9XSwxNTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHMoZSx0LHIpe3ZhciBuLGk9dS5nZXRUeXBlT2YodCkscz11LmV4dGVuZChyfHx7fSxmKTtzLmRhdGU9cy5kYXRlfHxuZXcgRGF0ZSxudWxsIT09cy5jb21wcmVzc2lvbiYmKHMuY29tcHJlc3Npb249cy5jb21wcmVzc2lvbi50b1VwcGVyQ2FzZSgpKSxcInN0cmluZ1wiPT10eXBlb2Ygcy51bml4UGVybWlzc2lvbnMmJihzLnVuaXhQZXJtaXNzaW9ucz1wYXJzZUludChzLnVuaXhQZXJtaXNzaW9ucyw4KSkscy51bml4UGVybWlzc2lvbnMmJjE2Mzg0JnMudW5peFBlcm1pc3Npb25zJiYocy5kaXI9ITApLHMuZG9zUGVybWlzc2lvbnMmJjE2JnMuZG9zUGVybWlzc2lvbnMmJihzLmRpcj0hMCkscy5kaXImJihlPWcoZSkpLHMuY3JlYXRlRm9sZGVycyYmKG49XyhlKSkmJmIuY2FsbCh0aGlzLG4sITApO3ZhciBhPVwic3RyaW5nXCI9PT1pJiYhMT09PXMuYmluYXJ5JiYhMT09PXMuYmFzZTY0O3ImJnZvaWQgMCE9PXIuYmluYXJ5fHwocy5iaW5hcnk9IWEpLCh0IGluc3RhbmNlb2YgYyYmMD09PXQudW5jb21wcmVzc2VkU2l6ZXx8cy5kaXJ8fCF0fHwwPT09dC5sZW5ndGgpJiYocy5iYXNlNjQ9ITEscy5iaW5hcnk9ITAsdD1cIlwiLHMuY29tcHJlc3Npb249XCJTVE9SRVwiLGk9XCJzdHJpbmdcIik7dmFyIG89bnVsbDtvPXQgaW5zdGFuY2VvZiBjfHx0IGluc3RhbmNlb2YgbD90OnAuaXNOb2RlJiZwLmlzU3RyZWFtKHQpP25ldyBtKGUsdCk6dS5wcmVwYXJlQ29udGVudChlLHQscy5iaW5hcnkscy5vcHRpbWl6ZWRCaW5hcnlTdHJpbmcscy5iYXNlNjQpO3ZhciBoPW5ldyBkKGUsbyxzKTt0aGlzLmZpbGVzW2VdPWh9dmFyIGk9ZShcIi4vdXRmOFwiKSx1PWUoXCIuL3V0aWxzXCIpLGw9ZShcIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXJcIiksYT1lKFwiLi9zdHJlYW0vU3RyZWFtSGVscGVyXCIpLGY9ZShcIi4vZGVmYXVsdHNcIiksYz1lKFwiLi9jb21wcmVzc2VkT2JqZWN0XCIpLGQ9ZShcIi4vemlwT2JqZWN0XCIpLG89ZShcIi4vZ2VuZXJhdGVcIikscD1lKFwiLi9ub2RlanNVdGlsc1wiKSxtPWUoXCIuL25vZGVqcy9Ob2RlanNTdHJlYW1JbnB1dEFkYXB0ZXJcIiksXz1mdW5jdGlvbihlKXtcIi9cIj09PWUuc2xpY2UoLTEpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTEpKTt2YXIgdD1lLmxhc3RJbmRleE9mKFwiL1wiKTtyZXR1cm4gMDx0P2Uuc3Vic3RyaW5nKDAsdCk6XCJcIn0sZz1mdW5jdGlvbihlKXtyZXR1cm5cIi9cIiE9PWUuc2xpY2UoLTEpJiYoZSs9XCIvXCIpLGV9LGI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD12b2lkIDAhPT10P3Q6Zi5jcmVhdGVGb2xkZXJzLGU9ZyhlKSx0aGlzLmZpbGVzW2VdfHxzLmNhbGwodGhpcyxlLG51bGwse2RpcjohMCxjcmVhdGVGb2xkZXJzOnR9KSx0aGlzLmZpbGVzW2VdfTtmdW5jdGlvbiBoKGUpe3JldHVyblwiW29iamVjdCBSZWdFeHBdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9dmFyIG49e2xvYWQ6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW1vdmVkIGluIEpTWmlwIDMuMCwgcGxlYXNlIGNoZWNrIHRoZSB1cGdyYWRlIGd1aWRlLlwiKX0sZm9yRWFjaDpmdW5jdGlvbihlKXt2YXIgdCxyLG47Zm9yKHQgaW4gdGhpcy5maWxlcyluPXRoaXMuZmlsZXNbdF0sKHI9dC5zbGljZSh0aGlzLnJvb3QubGVuZ3RoLHQubGVuZ3RoKSkmJnQuc2xpY2UoMCx0aGlzLnJvb3QubGVuZ3RoKT09PXRoaXMucm9vdCYmZShyLG4pfSxmaWx0ZXI6ZnVuY3Rpb24ocil7dmFyIG49W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihlLHQpe3IoZSx0KSYmbi5wdXNoKHQpfSksbn0sZmlsZTpmdW5jdGlvbihlLHQscil7aWYoMSE9PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGU9dGhpcy5yb290K2Uscy5jYWxsKHRoaXMsZSx0LHIpLHRoaXM7aWYoaChlKSl7dmFyIG49ZTtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4hdC5kaXImJm4udGVzdChlKX0pfXZhciBpPXRoaXMuZmlsZXNbdGhpcy5yb290K2VdO3JldHVybiBpJiYhaS5kaXI/aTpudWxsfSxmb2xkZXI6ZnVuY3Rpb24ocil7aWYoIXIpcmV0dXJuIHRoaXM7aWYoaChyKSlyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5kaXImJnIudGVzdChlKX0pO3ZhciBlPXRoaXMucm9vdCtyLHQ9Yi5jYWxsKHRoaXMsZSksbj10aGlzLmNsb25lKCk7cmV0dXJuIG4ucm9vdD10Lm5hbWUsbn0scmVtb3ZlOmZ1bmN0aW9uKHIpe3I9dGhpcy5yb290K3I7dmFyIGU9dGhpcy5maWxlc1tyXTtpZihlfHwoXCIvXCIhPT1yLnNsaWNlKC0xKSYmKHIrPVwiL1wiKSxlPXRoaXMuZmlsZXNbcl0pLGUmJiFlLmRpcilkZWxldGUgdGhpcy5maWxlc1tyXTtlbHNlIGZvcih2YXIgdD10aGlzLmZpbHRlcihmdW5jdGlvbihlLHQpe3JldHVybiB0Lm5hbWUuc2xpY2UoMCxyLmxlbmd0aCk9PT1yfSksbj0wO248dC5sZW5ndGg7bisrKWRlbGV0ZSB0aGlzLmZpbGVzW3Rbbl0ubmFtZV07cmV0dXJuIHRoaXN9LGdlbmVyYXRlOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVtb3ZlZCBpbiBKU1ppcCAzLjAsIHBsZWFzZSBjaGVjayB0aGUgdXBncmFkZSBndWlkZS5cIil9LGdlbmVyYXRlSW50ZXJuYWxTdHJlYW06ZnVuY3Rpb24oZSl7dmFyIHQscj17fTt0cnl7aWYoKHI9dS5leHRlbmQoZXx8e30se3N0cmVhbUZpbGVzOiExLGNvbXByZXNzaW9uOlwiU1RPUkVcIixjb21wcmVzc2lvbk9wdGlvbnM6bnVsbCx0eXBlOlwiXCIscGxhdGZvcm06XCJET1NcIixjb21tZW50Om51bGwsbWltZVR5cGU6XCJhcHBsaWNhdGlvbi96aXBcIixlbmNvZGVGaWxlTmFtZTppLnV0ZjhlbmNvZGV9KSkudHlwZT1yLnR5cGUudG9Mb3dlckNhc2UoKSxyLmNvbXByZXNzaW9uPXIuY29tcHJlc3Npb24udG9VcHBlckNhc2UoKSxcImJpbmFyeXN0cmluZ1wiPT09ci50eXBlJiYoci50eXBlPVwic3RyaW5nXCIpLCFyLnR5cGUpdGhyb3cgbmV3IEVycm9yKFwiTm8gb3V0cHV0IHR5cGUgc3BlY2lmaWVkLlwiKTt1LmNoZWNrU3VwcG9ydChyLnR5cGUpLFwiZGFyd2luXCIhPT1yLnBsYXRmb3JtJiZcImZyZWVic2RcIiE9PXIucGxhdGZvcm0mJlwibGludXhcIiE9PXIucGxhdGZvcm0mJlwic3Vub3NcIiE9PXIucGxhdGZvcm18fChyLnBsYXRmb3JtPVwiVU5JWFwiKSxcIndpbjMyXCI9PT1yLnBsYXRmb3JtJiYoci5wbGF0Zm9ybT1cIkRPU1wiKTt2YXIgbj1yLmNvbW1lbnR8fHRoaXMuY29tbWVudHx8XCJcIjt0PW8uZ2VuZXJhdGVXb3JrZXIodGhpcyxyLG4pfWNhdGNoKGUpeyh0PW5ldyBsKFwiZXJyb3JcIikpLmVycm9yKGUpfXJldHVybiBuZXcgYSh0LHIudHlwZXx8XCJzdHJpbmdcIixyLm1pbWVUeXBlKX0sZ2VuZXJhdGVBc3luYzpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmdlbmVyYXRlSW50ZXJuYWxTdHJlYW0oZSkuYWNjdW11bGF0ZSh0KX0sZ2VuZXJhdGVOb2RlU3RyZWFtOmZ1bmN0aW9uKGUsdCl7cmV0dXJuKGU9ZXx8e30pLnR5cGV8fChlLnR5cGU9XCJub2RlYnVmZmVyXCIpLHRoaXMuZ2VuZXJhdGVJbnRlcm5hbFN0cmVhbShlKS50b05vZGVqc1N0cmVhbSh0KX19O3QuZXhwb3J0cz1ufSx7XCIuL2NvbXByZXNzZWRPYmplY3RcIjoyLFwiLi9kZWZhdWx0c1wiOjUsXCIuL2dlbmVyYXRlXCI6OSxcIi4vbm9kZWpzL05vZGVqc1N0cmVhbUlucHV0QWRhcHRlclwiOjEyLFwiLi9ub2RlanNVdGlsc1wiOjE0LFwiLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiOjI4LFwiLi9zdHJlYW0vU3RyZWFtSGVscGVyXCI6MjksXCIuL3V0ZjhcIjozMSxcIi4vdXRpbHNcIjozMixcIi4vemlwT2JqZWN0XCI6MzV9XSwxNjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz1lKFwic3RyZWFtXCIpfSx7c3RyZWFtOnZvaWQgMH1dLDE3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4vRGF0YVJlYWRlclwiKTtmdW5jdGlvbiBpKGUpe24uY2FsbCh0aGlzLGUpO2Zvcih2YXIgdD0wO3Q8dGhpcy5kYXRhLmxlbmd0aDt0KyspZVt0XT0yNTUmZVt0XX1lKFwiLi4vdXRpbHNcIikuaW5oZXJpdHMoaSxuKSxpLnByb3RvdHlwZS5ieXRlQXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGF0YVt0aGlzLnplcm8rZV19LGkucHJvdG90eXBlLmxhc3RJbmRleE9mU2lnbmF0dXJlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmNoYXJDb2RlQXQoMCkscj1lLmNoYXJDb2RlQXQoMSksbj1lLmNoYXJDb2RlQXQoMiksaT1lLmNoYXJDb2RlQXQoMykscz10aGlzLmxlbmd0aC00OzA8PXM7LS1zKWlmKHRoaXMuZGF0YVtzXT09PXQmJnRoaXMuZGF0YVtzKzFdPT09ciYmdGhpcy5kYXRhW3MrMl09PT1uJiZ0aGlzLmRhdGFbcyszXT09PWkpcmV0dXJuIHMtdGhpcy56ZXJvO3JldHVybi0xfSxpLnByb3RvdHlwZS5yZWFkQW5kQ2hlY2tTaWduYXR1cmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jaGFyQ29kZUF0KDApLHI9ZS5jaGFyQ29kZUF0KDEpLG49ZS5jaGFyQ29kZUF0KDIpLGk9ZS5jaGFyQ29kZUF0KDMpLHM9dGhpcy5yZWFkRGF0YSg0KTtyZXR1cm4gdD09PXNbMF0mJnI9PT1zWzFdJiZuPT09c1syXSYmaT09PXNbM119LGkucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKGUpe2lmKHRoaXMuY2hlY2tPZmZzZXQoZSksMD09PWUpcmV0dXJuW107dmFyIHQ9dGhpcy5kYXRhLnNsaWNlKHRoaXMuemVybyt0aGlzLmluZGV4LHRoaXMuemVybyt0aGlzLmluZGV4K2UpO3JldHVybiB0aGlzLmluZGV4Kz1lLHR9LHQuZXhwb3J0cz1pfSx7XCIuLi91dGlsc1wiOjMyLFwiLi9EYXRhUmVhZGVyXCI6MTh9XSwxODpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi91dGlsc1wiKTtmdW5jdGlvbiBpKGUpe3RoaXMuZGF0YT1lLHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuaW5kZXg9MCx0aGlzLnplcm89MH1pLnByb3RvdHlwZT17Y2hlY2tPZmZzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5jaGVja0luZGV4KHRoaXMuaW5kZXgrZSl9LGNoZWNrSW5kZXg6ZnVuY3Rpb24oZSl7aWYodGhpcy5sZW5ndGg8dGhpcy56ZXJvK2V8fGU8MCl0aHJvdyBuZXcgRXJyb3IoXCJFbmQgb2YgZGF0YSByZWFjaGVkIChkYXRhIGxlbmd0aCA9IFwiK3RoaXMubGVuZ3RoK1wiLCBhc2tlZCBpbmRleCA9IFwiK2UrXCIpLiBDb3JydXB0ZWQgemlwID9cIil9LHNldEluZGV4OmZ1bmN0aW9uKGUpe3RoaXMuY2hlY2tJbmRleChlKSx0aGlzLmluZGV4PWV9LHNraXA6ZnVuY3Rpb24oZSl7dGhpcy5zZXRJbmRleCh0aGlzLmluZGV4K2UpfSxieXRlQXQ6ZnVuY3Rpb24oKXt9LHJlYWRJbnQ6ZnVuY3Rpb24oZSl7dmFyIHQscj0wO2Zvcih0aGlzLmNoZWNrT2Zmc2V0KGUpLHQ9dGhpcy5pbmRleCtlLTE7dD49dGhpcy5pbmRleDt0LS0pcj0ocjw8OCkrdGhpcy5ieXRlQXQodCk7cmV0dXJuIHRoaXMuaW5kZXgrPWUscn0scmVhZFN0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4gbi50cmFuc2Zvcm1UbyhcInN0cmluZ1wiLHRoaXMucmVhZERhdGEoZSkpfSxyZWFkRGF0YTpmdW5jdGlvbigpe30sbGFzdEluZGV4T2ZTaWduYXR1cmU6ZnVuY3Rpb24oKXt9LHJlYWRBbmRDaGVja1NpZ25hdHVyZTpmdW5jdGlvbigpe30scmVhZERhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlYWRJbnQoNCk7cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKDE5ODArKGU+PjI1JjEyNyksKGU+PjIxJjE1KS0xLGU+PjE2JjMxLGU+PjExJjMxLGU+PjUmNjMsKDMxJmUpPDwxKSl9fSx0LmV4cG9ydHM9aX0se1wiLi4vdXRpbHNcIjozMn1dLDE5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4vVWludDhBcnJheVJlYWRlclwiKTtmdW5jdGlvbiBpKGUpe24uY2FsbCh0aGlzLGUpfWUoXCIuLi91dGlsc1wiKS5pbmhlcml0cyhpLG4pLGkucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKGUpe3RoaXMuY2hlY2tPZmZzZXQoZSk7dmFyIHQ9dGhpcy5kYXRhLnNsaWNlKHRoaXMuemVybyt0aGlzLmluZGV4LHRoaXMuemVybyt0aGlzLmluZGV4K2UpO3JldHVybiB0aGlzLmluZGV4Kz1lLHR9LHQuZXhwb3J0cz1pfSx7XCIuLi91dGlsc1wiOjMyLFwiLi9VaW50OEFycmF5UmVhZGVyXCI6MjF9XSwyMDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuL0RhdGFSZWFkZXJcIik7ZnVuY3Rpb24gaShlKXtuLmNhbGwodGhpcyxlKX1lKFwiLi4vdXRpbHNcIikuaW5oZXJpdHMoaSxuKSxpLnByb3RvdHlwZS5ieXRlQXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGF0YS5jaGFyQ29kZUF0KHRoaXMuemVybytlKX0saS5wcm90b3R5cGUubGFzdEluZGV4T2ZTaWduYXR1cmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGF0YS5sYXN0SW5kZXhPZihlKS10aGlzLnplcm99LGkucHJvdG90eXBlLnJlYWRBbmRDaGVja1NpZ25hdHVyZT1mdW5jdGlvbihlKXtyZXR1cm4gZT09PXRoaXMucmVhZERhdGEoNCl9LGkucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKGUpe3RoaXMuY2hlY2tPZmZzZXQoZSk7dmFyIHQ9dGhpcy5kYXRhLnNsaWNlKHRoaXMuemVybyt0aGlzLmluZGV4LHRoaXMuemVybyt0aGlzLmluZGV4K2UpO3JldHVybiB0aGlzLmluZGV4Kz1lLHR9LHQuZXhwb3J0cz1pfSx7XCIuLi91dGlsc1wiOjMyLFwiLi9EYXRhUmVhZGVyXCI6MTh9XSwyMTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuL0FycmF5UmVhZGVyXCIpO2Z1bmN0aW9uIGkoZSl7bi5jYWxsKHRoaXMsZSl9ZShcIi4uL3V0aWxzXCIpLmluaGVyaXRzKGksbiksaS5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24oZSl7aWYodGhpcy5jaGVja09mZnNldChlKSwwPT09ZSlyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIHQ9dGhpcy5kYXRhLnN1YmFycmF5KHRoaXMuemVybyt0aGlzLmluZGV4LHRoaXMuemVybyt0aGlzLmluZGV4K2UpO3JldHVybiB0aGlzLmluZGV4Kz1lLHR9LHQuZXhwb3J0cz1pfSx7XCIuLi91dGlsc1wiOjMyLFwiLi9BcnJheVJlYWRlclwiOjE3fV0sMjI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vdXRpbHNcIiksaT1lKFwiLi4vc3VwcG9ydFwiKSxzPWUoXCIuL0FycmF5UmVhZGVyXCIpLGE9ZShcIi4vU3RyaW5nUmVhZGVyXCIpLG89ZShcIi4vTm9kZUJ1ZmZlclJlYWRlclwiKSxoPWUoXCIuL1VpbnQ4QXJyYXlSZWFkZXJcIik7dC5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PW4uZ2V0VHlwZU9mKGUpO3JldHVybiBuLmNoZWNrU3VwcG9ydCh0KSxcInN0cmluZ1wiIT09dHx8aS51aW50OGFycmF5P1wibm9kZWJ1ZmZlclwiPT09dD9uZXcgbyhlKTppLnVpbnQ4YXJyYXk/bmV3IGgobi50cmFuc2Zvcm1UbyhcInVpbnQ4YXJyYXlcIixlKSk6bmV3IHMobi50cmFuc2Zvcm1UbyhcImFycmF5XCIsZSkpOm5ldyBhKGUpfX0se1wiLi4vc3VwcG9ydFwiOjMwLFwiLi4vdXRpbHNcIjozMixcIi4vQXJyYXlSZWFkZXJcIjoxNyxcIi4vTm9kZUJ1ZmZlclJlYWRlclwiOjE5LFwiLi9TdHJpbmdSZWFkZXJcIjoyMCxcIi4vVWludDhBcnJheVJlYWRlclwiOjIxfV0sMjM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtyLkxPQ0FMX0ZJTEVfSEVBREVSPVwiUEtcdTAwMDNcdTAwMDRcIixyLkNFTlRSQUxfRklMRV9IRUFERVI9XCJQS1x1MDAwMVx1MDAwMlwiLHIuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPVwiUEtcdTAwMDVcdTAwMDZcIixyLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1I9XCJQS1x1MDAwNlx1MDAwN1wiLHIuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPVwiUEtcdTAwMDZcdTAwMDZcIixyLkRBVEFfREVTQ1JJUFRPUj1cIlBLXHUwMDA3XFxiXCJ9LHt9XSwyNDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuL0dlbmVyaWNXb3JrZXJcIiksaT1lKFwiLi4vdXRpbHNcIik7ZnVuY3Rpb24gcyhlKXtuLmNhbGwodGhpcyxcIkNvbnZlcnRXb3JrZXIgdG8gXCIrZSksdGhpcy5kZXN0VHlwZT1lfWkuaW5oZXJpdHMocyxuKSxzLnByb3RvdHlwZS5wcm9jZXNzQ2h1bms9ZnVuY3Rpb24oZSl7dGhpcy5wdXNoKHtkYXRhOmkudHJhbnNmb3JtVG8odGhpcy5kZXN0VHlwZSxlLmRhdGEpLG1ldGE6ZS5tZXRhfSl9LHQuZXhwb3J0cz1zfSx7XCIuLi91dGlsc1wiOjMyLFwiLi9HZW5lcmljV29ya2VyXCI6Mjh9XSwyNTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuL0dlbmVyaWNXb3JrZXJcIiksaT1lKFwiLi4vY3JjMzJcIik7ZnVuY3Rpb24gcygpe24uY2FsbCh0aGlzLFwiQ3JjMzJQcm9iZVwiKSx0aGlzLndpdGhTdHJlYW1JbmZvKFwiY3JjMzJcIiwwKX1lKFwiLi4vdXRpbHNcIikuaW5oZXJpdHMocyxuKSxzLnByb3RvdHlwZS5wcm9jZXNzQ2h1bms9ZnVuY3Rpb24oZSl7dGhpcy5zdHJlYW1JbmZvLmNyYzMyPWkoZS5kYXRhLHRoaXMuc3RyZWFtSW5mby5jcmMzMnx8MCksdGhpcy5wdXNoKGUpfSx0LmV4cG9ydHM9c30se1wiLi4vY3JjMzJcIjo0LFwiLi4vdXRpbHNcIjozMixcIi4vR2VuZXJpY1dvcmtlclwiOjI4fV0sMjY6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vdXRpbHNcIiksaT1lKFwiLi9HZW5lcmljV29ya2VyXCIpO2Z1bmN0aW9uIHMoZSl7aS5jYWxsKHRoaXMsXCJEYXRhTGVuZ3RoUHJvYmUgZm9yIFwiK2UpLHRoaXMucHJvcE5hbWU9ZSx0aGlzLndpdGhTdHJlYW1JbmZvKGUsMCl9bi5pbmhlcml0cyhzLGkpLHMucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbihlKXtpZihlKXt2YXIgdD10aGlzLnN0cmVhbUluZm9bdGhpcy5wcm9wTmFtZV18fDA7dGhpcy5zdHJlYW1JbmZvW3RoaXMucHJvcE5hbWVdPXQrZS5kYXRhLmxlbmd0aH1pLnByb3RvdHlwZS5wcm9jZXNzQ2h1bmsuY2FsbCh0aGlzLGUpfSx0LmV4cG9ydHM9c30se1wiLi4vdXRpbHNcIjozMixcIi4vR2VuZXJpY1dvcmtlclwiOjI4fV0sMjc6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vdXRpbHNcIiksaT1lKFwiLi9HZW5lcmljV29ya2VyXCIpO2Z1bmN0aW9uIHMoZSl7aS5jYWxsKHRoaXMsXCJEYXRhV29ya2VyXCIpO3ZhciB0PXRoaXM7dGhpcy5kYXRhSXNSZWFkeT0hMSx0aGlzLmluZGV4PTAsdGhpcy5tYXg9MCx0aGlzLmRhdGE9bnVsbCx0aGlzLnR5cGU9XCJcIix0aGlzLl90aWNrU2NoZWR1bGVkPSExLGUudGhlbihmdW5jdGlvbihlKXt0LmRhdGFJc1JlYWR5PSEwLHQuZGF0YT1lLHQubWF4PWUmJmUubGVuZ3RofHwwLHQudHlwZT1uLmdldFR5cGVPZihlKSx0LmlzUGF1c2VkfHx0Ll90aWNrQW5kUmVwZWF0KCl9LGZ1bmN0aW9uKGUpe3QuZXJyb3IoZSl9KX1uLmluaGVyaXRzKHMsaSkscy5wcm90b3R5cGUuY2xlYW5VcD1mdW5jdGlvbigpe2kucHJvdG90eXBlLmNsZWFuVXAuY2FsbCh0aGlzKSx0aGlzLmRhdGE9bnVsbH0scy5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7cmV0dXJuISFpLnByb3RvdHlwZS5yZXN1bWUuY2FsbCh0aGlzKSYmKCF0aGlzLl90aWNrU2NoZWR1bGVkJiZ0aGlzLmRhdGFJc1JlYWR5JiYodGhpcy5fdGlja1NjaGVkdWxlZD0hMCxuLmRlbGF5KHRoaXMuX3RpY2tBbmRSZXBlYXQsW10sdGhpcykpLCEwKX0scy5wcm90b3R5cGUuX3RpY2tBbmRSZXBlYXQ9ZnVuY3Rpb24oKXt0aGlzLl90aWNrU2NoZWR1bGVkPSExLHRoaXMuaXNQYXVzZWR8fHRoaXMuaXNGaW5pc2hlZHx8KHRoaXMuX3RpY2soKSx0aGlzLmlzRmluaXNoZWR8fChuLmRlbGF5KHRoaXMuX3RpY2tBbmRSZXBlYXQsW10sdGhpcyksdGhpcy5fdGlja1NjaGVkdWxlZD0hMCkpfSxzLnByb3RvdHlwZS5fdGljaz1mdW5jdGlvbigpe2lmKHRoaXMuaXNQYXVzZWR8fHRoaXMuaXNGaW5pc2hlZClyZXR1cm4hMTt2YXIgZT1udWxsLHQ9TWF0aC5taW4odGhpcy5tYXgsdGhpcy5pbmRleCsxNjM4NCk7aWYodGhpcy5pbmRleD49dGhpcy5tYXgpcmV0dXJuIHRoaXMuZW5kKCk7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZVwic3RyaW5nXCI6ZT10aGlzLmRhdGEuc3Vic3RyaW5nKHRoaXMuaW5kZXgsdCk7YnJlYWs7Y2FzZVwidWludDhhcnJheVwiOmU9dGhpcy5kYXRhLnN1YmFycmF5KHRoaXMuaW5kZXgsdCk7YnJlYWs7Y2FzZVwiYXJyYXlcIjpjYXNlXCJub2RlYnVmZmVyXCI6ZT10aGlzLmRhdGEuc2xpY2UodGhpcy5pbmRleCx0KX1yZXR1cm4gdGhpcy5pbmRleD10LHRoaXMucHVzaCh7ZGF0YTplLG1ldGE6e3BlcmNlbnQ6dGhpcy5tYXg/dGhpcy5pbmRleC90aGlzLm1heCoxMDA6MH19KX0sdC5leHBvcnRzPXN9LHtcIi4uL3V0aWxzXCI6MzIsXCIuL0dlbmVyaWNXb3JrZXJcIjoyOH1dLDI4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbihlKXt0aGlzLm5hbWU9ZXx8XCJkZWZhdWx0XCIsdGhpcy5zdHJlYW1JbmZvPXt9LHRoaXMuZ2VuZXJhdGVkRXJyb3I9bnVsbCx0aGlzLmV4dHJhU3RyZWFtSW5mbz17fSx0aGlzLmlzUGF1c2VkPSEwLHRoaXMuaXNGaW5pc2hlZD0hMSx0aGlzLmlzTG9ja2VkPSExLHRoaXMuX2xpc3RlbmVycz17ZGF0YTpbXSxlbmQ6W10sZXJyb3I6W119LHRoaXMucHJldmlvdXM9bnVsbH1uLnByb3RvdHlwZT17cHVzaDpmdW5jdGlvbihlKXt0aGlzLmVtaXQoXCJkYXRhXCIsZSl9LGVuZDpmdW5jdGlvbigpe2lmKHRoaXMuaXNGaW5pc2hlZClyZXR1cm4hMTt0aGlzLmZsdXNoKCk7dHJ5e3RoaXMuZW1pdChcImVuZFwiKSx0aGlzLmNsZWFuVXAoKSx0aGlzLmlzRmluaXNoZWQ9ITB9Y2F0Y2goZSl7dGhpcy5lbWl0KFwiZXJyb3JcIixlKX1yZXR1cm4hMH0sZXJyb3I6ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuaXNGaW5pc2hlZCYmKHRoaXMuaXNQYXVzZWQ/dGhpcy5nZW5lcmF0ZWRFcnJvcj1lOih0aGlzLmlzRmluaXNoZWQ9ITAsdGhpcy5lbWl0KFwiZXJyb3JcIixlKSx0aGlzLnByZXZpb3VzJiZ0aGlzLnByZXZpb3VzLmVycm9yKGUpLHRoaXMuY2xlYW5VcCgpKSwhMCl9LG9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2xpc3RlbmVyc1tlXS5wdXNoKHQpLHRoaXN9LGNsZWFuVXA6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbUluZm89dGhpcy5nZW5lcmF0ZWRFcnJvcj10aGlzLmV4dHJhU3RyZWFtSW5mbz1udWxsLHRoaXMuX2xpc3RlbmVycz1bXX0sZW1pdDpmdW5jdGlvbihlLHQpe2lmKHRoaXMuX2xpc3RlbmVyc1tlXSlmb3IodmFyIHI9MDtyPHRoaXMuX2xpc3RlbmVyc1tlXS5sZW5ndGg7cisrKXRoaXMuX2xpc3RlbmVyc1tlXVtyXS5jYWxsKHRoaXMsdCl9LHBpcGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVnaXN0ZXJQcmV2aW91cyh0aGlzKX0scmVnaXN0ZXJQcmV2aW91czpmdW5jdGlvbihlKXtpZih0aGlzLmlzTG9ja2VkKXRocm93IG5ldyBFcnJvcihcIlRoZSBzdHJlYW0gJ1wiK3RoaXMrXCInIGhhcyBhbHJlYWR5IGJlZW4gdXNlZC5cIik7dGhpcy5zdHJlYW1JbmZvPWUuc3RyZWFtSW5mbyx0aGlzLm1lcmdlU3RyZWFtSW5mbygpLHRoaXMucHJldmlvdXM9ZTt2YXIgdD10aGlzO3JldHVybiBlLm9uKFwiZGF0YVwiLGZ1bmN0aW9uKGUpe3QucHJvY2Vzc0NodW5rKGUpfSksZS5vbihcImVuZFwiLGZ1bmN0aW9uKCl7dC5lbmQoKX0pLGUub24oXCJlcnJvclwiLGZ1bmN0aW9uKGUpe3QuZXJyb3IoZSl9KSx0aGlzfSxwYXVzZTpmdW5jdGlvbigpe3JldHVybiF0aGlzLmlzUGF1c2VkJiYhdGhpcy5pc0ZpbmlzaGVkJiYodGhpcy5pc1BhdXNlZD0hMCx0aGlzLnByZXZpb3VzJiZ0aGlzLnByZXZpb3VzLnBhdXNlKCksITApfSxyZXN1bWU6ZnVuY3Rpb24oKXtpZighdGhpcy5pc1BhdXNlZHx8dGhpcy5pc0ZpbmlzaGVkKXJldHVybiExO3ZhciBlPXRoaXMuaXNQYXVzZWQ9ITE7cmV0dXJuIHRoaXMuZ2VuZXJhdGVkRXJyb3ImJih0aGlzLmVycm9yKHRoaXMuZ2VuZXJhdGVkRXJyb3IpLGU9ITApLHRoaXMucHJldmlvdXMmJnRoaXMucHJldmlvdXMucmVzdW1lKCksIWV9LGZsdXNoOmZ1bmN0aW9uKCl7fSxwcm9jZXNzQ2h1bms6ZnVuY3Rpb24oZSl7dGhpcy5wdXNoKGUpfSx3aXRoU3RyZWFtSW5mbzpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmV4dHJhU3RyZWFtSW5mb1tlXT10LHRoaXMubWVyZ2VTdHJlYW1JbmZvKCksdGhpc30sbWVyZ2VTdHJlYW1JbmZvOmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMuZXh0cmFTdHJlYW1JbmZvKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmV4dHJhU3RyZWFtSW5mbyxlKSYmKHRoaXMuc3RyZWFtSW5mb1tlXT10aGlzLmV4dHJhU3RyZWFtSW5mb1tlXSl9LGxvY2s6ZnVuY3Rpb24oKXtpZih0aGlzLmlzTG9ja2VkKXRocm93IG5ldyBFcnJvcihcIlRoZSBzdHJlYW0gJ1wiK3RoaXMrXCInIGhhcyBhbHJlYWR5IGJlZW4gdXNlZC5cIik7dGhpcy5pc0xvY2tlZD0hMCx0aGlzLnByZXZpb3VzJiZ0aGlzLnByZXZpb3VzLmxvY2soKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2YXIgZT1cIldvcmtlciBcIit0aGlzLm5hbWU7cmV0dXJuIHRoaXMucHJldmlvdXM/dGhpcy5wcmV2aW91cytcIiAtPiBcIitlOmV9fSx0LmV4cG9ydHM9bn0se31dLDI5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGg9ZShcIi4uL3V0aWxzXCIpLGk9ZShcIi4vQ29udmVydFdvcmtlclwiKSxzPWUoXCIuL0dlbmVyaWNXb3JrZXJcIiksdT1lKFwiLi4vYmFzZTY0XCIpLG49ZShcIi4uL3N1cHBvcnRcIiksYT1lKFwiLi4vZXh0ZXJuYWxcIiksbz1udWxsO2lmKG4ubm9kZXN0cmVhbSl0cnl7bz1lKFwiLi4vbm9kZWpzL05vZGVqc1N0cmVhbU91dHB1dEFkYXB0ZXJcIil9Y2F0Y2goZSl7fWZ1bmN0aW9uIGwoZSxvKXtyZXR1cm4gbmV3IGEuUHJvbWlzZShmdW5jdGlvbih0LHIpe3ZhciBuPVtdLGk9ZS5faW50ZXJuYWxUeXBlLHM9ZS5fb3V0cHV0VHlwZSxhPWUuX21pbWVUeXBlO2Uub24oXCJkYXRhXCIsZnVuY3Rpb24oZSx0KXtuLnB1c2goZSksbyYmbyh0KX0pLm9uKFwiZXJyb3JcIixmdW5jdGlvbihlKXtuPVtdLHIoZSl9KS5vbihcImVuZFwiLGZ1bmN0aW9uKCl7dHJ5e3ZhciBlPWZ1bmN0aW9uKGUsdCxyKXtzd2l0Y2goZSl7Y2FzZVwiYmxvYlwiOnJldHVybiBoLm5ld0Jsb2IoaC50cmFuc2Zvcm1UbyhcImFycmF5YnVmZmVyXCIsdCkscik7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIHUuZW5jb2RlKHQpO2RlZmF1bHQ6cmV0dXJuIGgudHJhbnNmb3JtVG8oZSx0KX19KHMsZnVuY3Rpb24oZSx0KXt2YXIgcixuPTAsaT1udWxsLHM9MDtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXMrPXRbcl0ubGVuZ3RoO3N3aXRjaChlKXtjYXNlXCJzdHJpbmdcIjpyZXR1cm4gdC5qb2luKFwiXCIpO2Nhc2VcImFycmF5XCI6cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sdCk7Y2FzZVwidWludDhhcnJheVwiOmZvcihpPW5ldyBVaW50OEFycmF5KHMpLHI9MDtyPHQubGVuZ3RoO3IrKylpLnNldCh0W3JdLG4pLG4rPXRbcl0ubGVuZ3RoO3JldHVybiBpO2Nhc2VcIm5vZGVidWZmZXJcIjpyZXR1cm4gQnVmZmVyLmNvbmNhdCh0KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcImNvbmNhdCA6IHVuc3VwcG9ydGVkIHR5cGUgJ1wiK2UrXCInXCIpfX0oaSxuKSxhKTt0KGUpfWNhdGNoKGUpe3IoZSl9bj1bXX0pLnJlc3VtZSgpfSl9ZnVuY3Rpb24gZihlLHQscil7dmFyIG49dDtzd2l0Y2godCl7Y2FzZVwiYmxvYlwiOmNhc2VcImFycmF5YnVmZmVyXCI6bj1cInVpbnQ4YXJyYXlcIjticmVhaztjYXNlXCJiYXNlNjRcIjpuPVwic3RyaW5nXCJ9dHJ5e3RoaXMuX2ludGVybmFsVHlwZT1uLHRoaXMuX291dHB1dFR5cGU9dCx0aGlzLl9taW1lVHlwZT1yLGguY2hlY2tTdXBwb3J0KG4pLHRoaXMuX3dvcmtlcj1lLnBpcGUobmV3IGkobikpLGUubG9jaygpfWNhdGNoKGUpe3RoaXMuX3dvcmtlcj1uZXcgcyhcImVycm9yXCIpLHRoaXMuX3dvcmtlci5lcnJvcihlKX19Zi5wcm90b3R5cGU9e2FjY3VtdWxhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGwodGhpcyxlKX0sb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO3JldHVyblwiZGF0YVwiPT09ZT90aGlzLl93b3JrZXIub24oZSxmdW5jdGlvbihlKXt0LmNhbGwocixlLmRhdGEsZS5tZXRhKX0pOnRoaXMuX3dvcmtlci5vbihlLGZ1bmN0aW9uKCl7aC5kZWxheSh0LGFyZ3VtZW50cyxyKX0pLHRoaXN9LHJlc3VtZTpmdW5jdGlvbigpe3JldHVybiBoLmRlbGF5KHRoaXMuX3dvcmtlci5yZXN1bWUsW10sdGhpcy5fd29ya2VyKSx0aGlzfSxwYXVzZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93b3JrZXIucGF1c2UoKSx0aGlzfSx0b05vZGVqc1N0cmVhbTpmdW5jdGlvbihlKXtpZihoLmNoZWNrU3VwcG9ydChcIm5vZGVzdHJlYW1cIiksXCJub2RlYnVmZmVyXCIhPT10aGlzLl9vdXRwdXRUeXBlKXRocm93IG5ldyBFcnJvcih0aGlzLl9vdXRwdXRUeXBlK1wiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBtZXRob2RcIik7cmV0dXJuIG5ldyBvKHRoaXMse29iamVjdE1vZGU6XCJub2RlYnVmZmVyXCIhPT10aGlzLl9vdXRwdXRUeXBlfSxlKX19LHQuZXhwb3J0cz1mfSx7XCIuLi9iYXNlNjRcIjoxLFwiLi4vZXh0ZXJuYWxcIjo2LFwiLi4vbm9kZWpzL05vZGVqc1N0cmVhbU91dHB1dEFkYXB0ZXJcIjoxMyxcIi4uL3N1cHBvcnRcIjozMCxcIi4uL3V0aWxzXCI6MzIsXCIuL0NvbnZlcnRXb3JrZXJcIjoyNCxcIi4vR2VuZXJpY1dvcmtlclwiOjI4fV0sMzA6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtpZihyLmJhc2U2ND0hMCxyLmFycmF5PSEwLHIuc3RyaW5nPSEwLHIuYXJyYXlidWZmZXI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhBcnJheSxyLm5vZGVidWZmZXI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEJ1ZmZlcixyLnVpbnQ4YXJyYXk9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXksXCJ1bmRlZmluZWRcIj09dHlwZW9mIEFycmF5QnVmZmVyKXIuYmxvYj0hMTtlbHNle3ZhciBuPW5ldyBBcnJheUJ1ZmZlcigwKTt0cnl7ci5ibG9iPTA9PT1uZXcgQmxvYihbbl0se3R5cGU6XCJhcHBsaWNhdGlvbi96aXBcIn0pLnNpemV9Y2F0Y2goZSl7dHJ5e3ZhciBpPW5ldyhzZWxmLkJsb2JCdWlsZGVyfHxzZWxmLldlYktpdEJsb2JCdWlsZGVyfHxzZWxmLk1vekJsb2JCdWlsZGVyfHxzZWxmLk1TQmxvYkJ1aWxkZXIpO2kuYXBwZW5kKG4pLHIuYmxvYj0wPT09aS5nZXRCbG9iKFwiYXBwbGljYXRpb24vemlwXCIpLnNpemV9Y2F0Y2goZSl7ci5ibG9iPSExfX19dHJ5e3Iubm9kZXN0cmVhbT0hIWUoXCJyZWFkYWJsZS1zdHJlYW1cIikuUmVhZGFibGV9Y2F0Y2goZSl7ci5ub2Rlc3RyZWFtPSExfX0se1wicmVhZGFibGUtc3RyZWFtXCI6MTZ9XSwzMTpbZnVuY3Rpb24oZSx0LHMpe1widXNlIHN0cmljdFwiO2Zvcih2YXIgbz1lKFwiLi91dGlsc1wiKSxoPWUoXCIuL3N1cHBvcnRcIikscj1lKFwiLi9ub2RlanNVdGlsc1wiKSxuPWUoXCIuL3N0cmVhbS9HZW5lcmljV29ya2VyXCIpLHU9bmV3IEFycmF5KDI1NiksaT0wO2k8MjU2O2krKyl1W2ldPTI1Mjw9aT82OjI0ODw9aT81OjI0MDw9aT80OjIyNDw9aT8zOjE5Mjw9aT8yOjE7dVsyNTRdPXVbMjU0XT0xO2Z1bmN0aW9uIGEoKXtuLmNhbGwodGhpcyxcInV0Zi04IGRlY29kZVwiKSx0aGlzLmxlZnRPdmVyPW51bGx9ZnVuY3Rpb24gbCgpe24uY2FsbCh0aGlzLFwidXRmLTggZW5jb2RlXCIpfXMudXRmOGVuY29kZT1mdW5jdGlvbihlKXtyZXR1cm4gaC5ub2RlYnVmZmVyP3IubmV3QnVmZmVyRnJvbShlLFwidXRmLThcIik6ZnVuY3Rpb24oZSl7dmFyIHQscixuLGkscyxhPWUubGVuZ3RoLG89MDtmb3IoaT0wO2k8YTtpKyspNTUyOTY9PSg2NDUxMiYocj1lLmNoYXJDb2RlQXQoaSkpKSYmaSsxPGEmJjU2MzIwPT0oNjQ1MTImKG49ZS5jaGFyQ29kZUF0KGkrMSkpKSYmKHI9NjU1MzYrKHItNTUyOTY8PDEwKSsobi01NjMyMCksaSsrKSxvKz1yPDEyOD8xOnI8MjA0OD8yOnI8NjU1MzY/Mzo0O2Zvcih0PWgudWludDhhcnJheT9uZXcgVWludDhBcnJheShvKTpuZXcgQXJyYXkobyksaT1zPTA7czxvO2krKyk1NTI5Nj09KDY0NTEyJihyPWUuY2hhckNvZGVBdChpKSkpJiZpKzE8YSYmNTYzMjA9PSg2NDUxMiYobj1lLmNoYXJDb2RlQXQoaSsxKSkpJiYocj02NTUzNisoci01NTI5Njw8MTApKyhuLTU2MzIwKSxpKyspLHI8MTI4P3RbcysrXT1yOihyPDIwNDg/dFtzKytdPTE5MnxyPj4+Njoocjw2NTUzNj90W3MrK109MjI0fHI+Pj4xMjoodFtzKytdPTI0MHxyPj4+MTgsdFtzKytdPTEyOHxyPj4+MTImNjMpLHRbcysrXT0xMjh8cj4+PjYmNjMpLHRbcysrXT0xMjh8NjMmcik7cmV0dXJuIHR9KGUpfSxzLnV0ZjhkZWNvZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGgubm9kZWJ1ZmZlcj9vLnRyYW5zZm9ybVRvKFwibm9kZWJ1ZmZlclwiLGUpLnRvU3RyaW5nKFwidXRmLThcIik6ZnVuY3Rpb24oZSl7dmFyIHQscixuLGkscz1lLmxlbmd0aCxhPW5ldyBBcnJheSgyKnMpO2Zvcih0PXI9MDt0PHM7KWlmKChuPWVbdCsrXSk8MTI4KWFbcisrXT1uO2Vsc2UgaWYoNDwoaT11W25dKSlhW3IrK109NjU1MzMsdCs9aS0xO2Vsc2V7Zm9yKG4mPTI9PT1pPzMxOjM9PT1pPzE1Ojc7MTxpJiZ0PHM7KW49bjw8Nnw2MyZlW3QrK10saS0tOzE8aT9hW3IrK109NjU1MzM6bjw2NTUzNj9hW3IrK109bjoobi09NjU1MzYsYVtyKytdPTU1Mjk2fG4+PjEwJjEwMjMsYVtyKytdPTU2MzIwfDEwMjMmbil9cmV0dXJuIGEubGVuZ3RoIT09ciYmKGEuc3ViYXJyYXk/YT1hLnN1YmFycmF5KDAscik6YS5sZW5ndGg9ciksby5hcHBseUZyb21DaGFyQ29kZShhKX0oZT1vLnRyYW5zZm9ybVRvKGgudWludDhhcnJheT9cInVpbnQ4YXJyYXlcIjpcImFycmF5XCIsZSkpfSxvLmluaGVyaXRzKGEsbiksYS5wcm90b3R5cGUucHJvY2Vzc0NodW5rPWZ1bmN0aW9uKGUpe3ZhciB0PW8udHJhbnNmb3JtVG8oaC51aW50OGFycmF5P1widWludDhhcnJheVwiOlwiYXJyYXlcIixlLmRhdGEpO2lmKHRoaXMubGVmdE92ZXImJnRoaXMubGVmdE92ZXIubGVuZ3RoKXtpZihoLnVpbnQ4YXJyYXkpe3ZhciByPXQ7KHQ9bmV3IFVpbnQ4QXJyYXkoci5sZW5ndGgrdGhpcy5sZWZ0T3Zlci5sZW5ndGgpKS5zZXQodGhpcy5sZWZ0T3ZlciwwKSx0LnNldChyLHRoaXMubGVmdE92ZXIubGVuZ3RoKX1lbHNlIHQ9dGhpcy5sZWZ0T3Zlci5jb25jYXQodCk7dGhpcy5sZWZ0T3Zlcj1udWxsfXZhciBuPWZ1bmN0aW9uKGUsdCl7dmFyIHI7Zm9yKCh0PXR8fGUubGVuZ3RoKT5lLmxlbmd0aCYmKHQ9ZS5sZW5ndGgpLHI9dC0xOzA8PXImJjEyOD09KDE5MiZlW3JdKTspci0tO3JldHVybiByPDA/dDowPT09cj90OnIrdVtlW3JdXT50P3I6dH0odCksaT10O24hPT10Lmxlbmd0aCYmKGgudWludDhhcnJheT8oaT10LnN1YmFycmF5KDAsbiksdGhpcy5sZWZ0T3Zlcj10LnN1YmFycmF5KG4sdC5sZW5ndGgpKTooaT10LnNsaWNlKDAsbiksdGhpcy5sZWZ0T3Zlcj10LnNsaWNlKG4sdC5sZW5ndGgpKSksdGhpcy5wdXNoKHtkYXRhOnMudXRmOGRlY29kZShpKSxtZXRhOmUubWV0YX0pfSxhLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe3RoaXMubGVmdE92ZXImJnRoaXMubGVmdE92ZXIubGVuZ3RoJiYodGhpcy5wdXNoKHtkYXRhOnMudXRmOGRlY29kZSh0aGlzLmxlZnRPdmVyKSxtZXRhOnt9fSksdGhpcy5sZWZ0T3Zlcj1udWxsKX0scy5VdGY4RGVjb2RlV29ya2VyPWEsby5pbmhlcml0cyhsLG4pLGwucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbihlKXt0aGlzLnB1c2goe2RhdGE6cy51dGY4ZW5jb2RlKGUuZGF0YSksbWV0YTplLm1ldGF9KX0scy5VdGY4RW5jb2RlV29ya2VyPWx9LHtcIi4vbm9kZWpzVXRpbHNcIjoxNCxcIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXJcIjoyOCxcIi4vc3VwcG9ydFwiOjMwLFwiLi91dGlsc1wiOjMyfV0sMzI6W2Z1bmN0aW9uKGUsdCxhKXtcInVzZSBzdHJpY3RcIjt2YXIgbz1lKFwiLi9zdXBwb3J0XCIpLGg9ZShcIi4vYmFzZTY0XCIpLHI9ZShcIi4vbm9kZWpzVXRpbHNcIiksdT1lKFwiLi9leHRlcm5hbFwiKTtmdW5jdGlvbiBuKGUpe3JldHVybiBlfWZ1bmN0aW9uIGwoZSx0KXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoOysrcil0W3JdPTI1NSZlLmNoYXJDb2RlQXQocik7cmV0dXJuIHR9ZShcInNldGltbWVkaWF0ZVwiKSxhLm5ld0Jsb2I9ZnVuY3Rpb24odCxyKXthLmNoZWNrU3VwcG9ydChcImJsb2JcIik7dHJ5e3JldHVybiBuZXcgQmxvYihbdF0se3R5cGU6cn0pfWNhdGNoKGUpe3RyeXt2YXIgbj1uZXcoc2VsZi5CbG9iQnVpbGRlcnx8c2VsZi5XZWJLaXRCbG9iQnVpbGRlcnx8c2VsZi5Nb3pCbG9iQnVpbGRlcnx8c2VsZi5NU0Jsb2JCdWlsZGVyKTtyZXR1cm4gbi5hcHBlbmQodCksbi5nZXRCbG9iKHIpfWNhdGNoKGUpe3Rocm93IG5ldyBFcnJvcihcIkJ1ZyA6IGNhbid0IGNvbnN0cnVjdCB0aGUgQmxvYi5cIil9fX07dmFyIGk9e3N0cmluZ2lmeUJ5Q2h1bms6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPVtdLGk9MCxzPWUubGVuZ3RoO2lmKHM8PXIpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlKTtmb3IoO2k8czspXCJhcnJheVwiPT09dHx8XCJub2RlYnVmZmVyXCI9PT10P24ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZS5zbGljZShpLE1hdGgubWluKGkrcixzKSkpKTpuLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGUuc3ViYXJyYXkoaSxNYXRoLm1pbihpK3IscykpKSksaSs9cjtyZXR1cm4gbi5qb2luKFwiXCIpfSxzdHJpbmdpZnlCeUNoYXI6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVwiXCIscj0wO3I8ZS5sZW5ndGg7cisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtyXSk7cmV0dXJuIHR9LGFwcGx5Q2FuQmVVc2VkOnt1aW50OGFycmF5OmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBvLnVpbnQ4YXJyYXkmJjE9PT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMSkpLmxlbmd0aH1jYXRjaChlKXtyZXR1cm4hMX19KCksbm9kZWJ1ZmZlcjpmdW5jdGlvbigpe3RyeXtyZXR1cm4gby5ub2RlYnVmZmVyJiYxPT09U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHIuYWxsb2NCdWZmZXIoMSkpLmxlbmd0aH1jYXRjaChlKXtyZXR1cm4hMX19KCl9fTtmdW5jdGlvbiBzKGUpe3ZhciB0PTY1NTM2LHI9YS5nZXRUeXBlT2YoZSksbj0hMDtpZihcInVpbnQ4YXJyYXlcIj09PXI/bj1pLmFwcGx5Q2FuQmVVc2VkLnVpbnQ4YXJyYXk6XCJub2RlYnVmZmVyXCI9PT1yJiYobj1pLmFwcGx5Q2FuQmVVc2VkLm5vZGVidWZmZXIpLG4pZm9yKDsxPHQ7KXRyeXtyZXR1cm4gaS5zdHJpbmdpZnlCeUNodW5rKGUscix0KX1jYXRjaChlKXt0PU1hdGguZmxvb3IodC8yKX1yZXR1cm4gaS5zdHJpbmdpZnlCeUNoYXIoZSl9ZnVuY3Rpb24gZihlLHQpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRbcl09ZVtyXTtyZXR1cm4gdH1hLmFwcGx5RnJvbUNoYXJDb2RlPXM7dmFyIGM9e307Yy5zdHJpbmc9e3N0cmluZzpuLGFycmF5OmZ1bmN0aW9uKGUpe3JldHVybiBsKGUsbmV3IEFycmF5KGUubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBjLnN0cmluZy51aW50OGFycmF5KGUpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gbChlLG5ldyBVaW50OEFycmF5KGUubGVuZ3RoKSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSxyLmFsbG9jQnVmZmVyKGUubGVuZ3RoKSl9fSxjLmFycmF5PXtzdHJpbmc6cyxhcnJheTpuLGFycmF5YnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVWludDhBcnJheShlKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGUpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiByLm5ld0J1ZmZlckZyb20oZSl9fSxjLmFycmF5YnVmZmVyPXtzdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIHMobmV3IFVpbnQ4QXJyYXkoZSkpfSxhcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gZihuZXcgVWludDhBcnJheShlKSxuZXcgQXJyYXkoZS5ieXRlTGVuZ3RoKSl9LGFycmF5YnVmZmVyOm4sdWludDhhcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHIubmV3QnVmZmVyRnJvbShuZXcgVWludDhBcnJheShlKSl9fSxjLnVpbnQ4YXJyYXk9e3N0cmluZzpzLGFycmF5OmZ1bmN0aW9uKGUpe3JldHVybiBmKGUsbmV3IEFycmF5KGUubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlLmJ1ZmZlcn0sdWludDhhcnJheTpuLG5vZGVidWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHIubmV3QnVmZmVyRnJvbShlKX19LGMubm9kZWJ1ZmZlcj17c3RyaW5nOnMsYXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSxuZXcgQXJyYXkoZS5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGMubm9kZWJ1ZmZlci51aW50OGFycmF5KGUpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gZihlLG5ldyBVaW50OEFycmF5KGUubGVuZ3RoKSl9LG5vZGVidWZmZXI6bn0sYS50cmFuc2Zvcm1Ubz1mdW5jdGlvbihlLHQpe2lmKHQ9dHx8XCJcIiwhZSlyZXR1cm4gdDthLmNoZWNrU3VwcG9ydChlKTt2YXIgcj1hLmdldFR5cGVPZih0KTtyZXR1cm4gY1tyXVtlXSh0KX0sYS5yZXNvbHZlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnNwbGl0KFwiL1wiKSxyPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXTtcIi5cIj09PWl8fFwiXCI9PT1pJiYwIT09biYmbiE9PXQubGVuZ3RoLTF8fChcIi4uXCI9PT1pP3IucG9wKCk6ci5wdXNoKGkpKX1yZXR1cm4gci5qb2luKFwiL1wiKX0sYS5nZXRUeXBlT2Y9ZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGU/XCJzdHJpbmdcIjpcIltvYmplY3QgQXJyYXldXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk/XCJhcnJheVwiOm8ubm9kZWJ1ZmZlciYmci5pc0J1ZmZlcihlKT9cIm5vZGVidWZmZXJcIjpvLnVpbnQ4YXJyYXkmJmUgaW5zdGFuY2VvZiBVaW50OEFycmF5P1widWludDhhcnJheVwiOm8uYXJyYXlidWZmZXImJmUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9cImFycmF5YnVmZmVyXCI6dm9pZCAwfSxhLmNoZWNrU3VwcG9ydD1mdW5jdGlvbihlKXtpZighb1tlLnRvTG93ZXJDYXNlKCldKXRocm93IG5ldyBFcnJvcihlK1wiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBwbGF0Zm9ybVwiKX0sYS5NQVhfVkFMVUVfMTZCSVRTPTY1NTM1LGEuTUFYX1ZBTFVFXzMyQklUUz0tMSxhLnByZXR0eT1mdW5jdGlvbihlKXt2YXIgdCxyLG49XCJcIjtmb3Iocj0wO3I8KGV8fFwiXCIpLmxlbmd0aDtyKyspbis9XCJcXFxceFwiKygodD1lLmNoYXJDb2RlQXQocikpPDE2P1wiMFwiOlwiXCIpK3QudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIG59LGEuZGVsYXk9ZnVuY3Rpb24oZSx0LHIpe3NldEltbWVkaWF0ZShmdW5jdGlvbigpe2UuYXBwbHkocnx8bnVsbCx0fHxbXSl9KX0sYS5pbmhlcml0cz1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIoKXt9ci5wcm90b3R5cGU9dC5wcm90b3R5cGUsZS5wcm90b3R5cGU9bmV3IHJ9LGEuZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGUsdCxyPXt9O2ZvcihlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKylmb3IodCBpbiBhcmd1bWVudHNbZV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFyZ3VtZW50c1tlXSx0KSYmdm9pZCAwPT09clt0XSYmKHJbdF09YXJndW1lbnRzW2VdW3RdKTtyZXR1cm4gcn0sYS5wcmVwYXJlQ29udGVudD1mdW5jdGlvbihyLGUsbixpLHMpe3JldHVybiB1LlByb21pc2UucmVzb2x2ZShlKS50aGVuKGZ1bmN0aW9uKG4pe3JldHVybiBvLmJsb2ImJihuIGluc3RhbmNlb2YgQmxvYnx8LTEhPT1bXCJbb2JqZWN0IEZpbGVdXCIsXCJbb2JqZWN0IEJsb2JdXCJdLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pKSkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBGaWxlUmVhZGVyP25ldyB1LlByb21pc2UoZnVuY3Rpb24odCxyKXt2YXIgZT1uZXcgRmlsZVJlYWRlcjtlLm9ubG9hZD1mdW5jdGlvbihlKXt0KGUudGFyZ2V0LnJlc3VsdCl9LGUub25lcnJvcj1mdW5jdGlvbihlKXtyKGUudGFyZ2V0LmVycm9yKX0sZS5yZWFkQXNBcnJheUJ1ZmZlcihuKX0pOm59KS50aGVuKGZ1bmN0aW9uKGUpe3ZhciB0PWEuZ2V0VHlwZU9mKGUpO3JldHVybiB0PyhcImFycmF5YnVmZmVyXCI9PT10P2U9YS50cmFuc2Zvcm1UbyhcInVpbnQ4YXJyYXlcIixlKTpcInN0cmluZ1wiPT09dCYmKHM/ZT1oLmRlY29kZShlKTpuJiYhMCE9PWkmJihlPWZ1bmN0aW9uKGUpe3JldHVybiBsKGUsby51aW50OGFycmF5P25ldyBVaW50OEFycmF5KGUubGVuZ3RoKTpuZXcgQXJyYXkoZS5sZW5ndGgpKX0oZSkpKSxlKTp1LlByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkNhbid0IHJlYWQgdGhlIGRhdGEgb2YgJ1wiK3IrXCInLiBJcyBpdCBpbiBhIHN1cHBvcnRlZCBKYXZhU2NyaXB0IHR5cGUgKFN0cmluZywgQmxvYiwgQXJyYXlCdWZmZXIsIGV0YykgP1wiKSl9KX19LHtcIi4vYmFzZTY0XCI6MSxcIi4vZXh0ZXJuYWxcIjo2LFwiLi9ub2RlanNVdGlsc1wiOjE0LFwiLi9zdXBwb3J0XCI6MzAsc2V0aW1tZWRpYXRlOjU0fV0sMzM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi9yZWFkZXIvcmVhZGVyRm9yXCIpLGk9ZShcIi4vdXRpbHNcIikscz1lKFwiLi9zaWduYXR1cmVcIiksYT1lKFwiLi96aXBFbnRyeVwiKSxvPWUoXCIuL3N1cHBvcnRcIik7ZnVuY3Rpb24gaChlKXt0aGlzLmZpbGVzPVtdLHRoaXMubG9hZE9wdGlvbnM9ZX1oLnByb3RvdHlwZT17Y2hlY2tTaWduYXR1cmU6ZnVuY3Rpb24oZSl7aWYoIXRoaXMucmVhZGVyLnJlYWRBbmRDaGVja1NpZ25hdHVyZShlKSl7dGhpcy5yZWFkZXIuaW5kZXgtPTQ7dmFyIHQ9dGhpcy5yZWFkZXIucmVhZFN0cmluZyg0KTt0aHJvdyBuZXcgRXJyb3IoXCJDb3JydXB0ZWQgemlwIG9yIGJ1ZzogdW5leHBlY3RlZCBzaWduYXR1cmUgKFwiK2kucHJldHR5KHQpK1wiLCBleHBlY3RlZCBcIitpLnByZXR0eShlKStcIilcIil9fSxpc1NpZ25hdHVyZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMucmVhZGVyLmluZGV4O3RoaXMucmVhZGVyLnNldEluZGV4KGUpO3ZhciBuPXRoaXMucmVhZGVyLnJlYWRTdHJpbmcoNCk9PT10O3JldHVybiB0aGlzLnJlYWRlci5zZXRJbmRleChyKSxufSxyZWFkQmxvY2tFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt0aGlzLmRpc2tOdW1iZXI9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuY2VudHJhbERpck9mZnNldD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuemlwQ29tbWVudExlbmd0aD10aGlzLnJlYWRlci5yZWFkSW50KDIpO3ZhciBlPXRoaXMucmVhZGVyLnJlYWREYXRhKHRoaXMuemlwQ29tbWVudExlbmd0aCksdD1vLnVpbnQ4YXJyYXk/XCJ1aW50OGFycmF5XCI6XCJhcnJheVwiLHI9aS50cmFuc2Zvcm1Ubyh0LGUpO3RoaXMuemlwQ29tbWVudD10aGlzLmxvYWRPcHRpb25zLmRlY29kZUZpbGVOYW1lKHIpfSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3RoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5yZWFkZXIuc2tpcCg0KSx0aGlzLmRpc2tOdW1iZXI9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpck9mZnNldD10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YT17fTtmb3IodmFyIGUsdCxyLG49dGhpcy56aXA2NEVuZE9mQ2VudHJhbFNpemUtNDQ7MDxuOyllPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHI9dGhpcy5yZWFkZXIucmVhZERhdGEodCksdGhpcy56aXA2NEV4dGVuc2libGVEYXRhW2VdPXtpZDplLGxlbmd0aDp0LHZhbHVlOnJ9fSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3I6ZnVuY3Rpb24oKXtpZih0aGlzLmRpc2tXaXRoWmlwNjRDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXI9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmRpc2tzQ291bnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSwxPHRoaXMuZGlza3NDb3VudCl0aHJvdyBuZXcgRXJyb3IoXCJNdWx0aS12b2x1bWVzIHppcCBhcmUgbm90IHN1cHBvcnRlZFwiKX0scmVhZExvY2FsRmlsZXM6ZnVuY3Rpb24oKXt2YXIgZSx0O2ZvcihlPTA7ZTx0aGlzLmZpbGVzLmxlbmd0aDtlKyspdD10aGlzLmZpbGVzW2VdLHRoaXMucmVhZGVyLnNldEluZGV4KHQubG9jYWxIZWFkZXJPZmZzZXQpLHRoaXMuY2hlY2tTaWduYXR1cmUocy5MT0NBTF9GSUxFX0hFQURFUiksdC5yZWFkTG9jYWxQYXJ0KHRoaXMucmVhZGVyKSx0LmhhbmRsZVVURjgoKSx0LnByb2Nlc3NBdHRyaWJ1dGVzKCl9LHJlYWRDZW50cmFsRGlyOmZ1bmN0aW9uKCl7dmFyIGU7Zm9yKHRoaXMucmVhZGVyLnNldEluZGV4KHRoaXMuY2VudHJhbERpck9mZnNldCk7dGhpcy5yZWFkZXIucmVhZEFuZENoZWNrU2lnbmF0dXJlKHMuQ0VOVFJBTF9GSUxFX0hFQURFUik7KShlPW5ldyBhKHt6aXA2NDp0aGlzLnppcDY0fSx0aGlzLmxvYWRPcHRpb25zKSkucmVhZENlbnRyYWxQYXJ0KHRoaXMucmVhZGVyKSx0aGlzLmZpbGVzLnB1c2goZSk7aWYodGhpcy5jZW50cmFsRGlyUmVjb3JkcyE9PXRoaXMuZmlsZXMubGVuZ3RoJiYwIT09dGhpcy5jZW50cmFsRGlyUmVjb3JkcyYmMD09PXRoaXMuZmlsZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIkNvcnJ1cHRlZCB6aXAgb3IgYnVnOiBleHBlY3RlZCBcIit0aGlzLmNlbnRyYWxEaXJSZWNvcmRzK1wiIHJlY29yZHMgaW4gY2VudHJhbCBkaXIsIGdvdCBcIit0aGlzLmZpbGVzLmxlbmd0aCl9LHJlYWRFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZShzLkNFTlRSQUxfRElSRUNUT1JZX0VORCk7aWYoZTwwKXRocm93IXRoaXMuaXNTaWduYXR1cmUoMCxzLkxPQ0FMX0ZJTEVfSEVBREVSKT9uZXcgRXJyb3IoXCJDYW4ndCBmaW5kIGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSA6IGlzIHRoaXMgYSB6aXAgZmlsZSA/IElmIGl0IGlzLCBzZWUgaHR0cHM6Ly9zdHVrLmdpdGh1Yi5pby9qc3ppcC9kb2N1bWVudGF0aW9uL2hvd3RvL3JlYWRfemlwLmh0bWxcIik6bmV3IEVycm9yKFwiQ29ycnVwdGVkIHppcDogY2FuJ3QgZmluZCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnlcIik7dGhpcy5yZWFkZXIuc2V0SW5kZXgoZSk7dmFyIHQ9ZTtpZih0aGlzLmNoZWNrU2lnbmF0dXJlKHMuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSx0aGlzLnJlYWRCbG9ja0VuZE9mQ2VudHJhbCgpLHRoaXMuZGlza051bWJlcj09PWkuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD09PWkuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9PT1pLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclJlY29yZHM9PT1pLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclNpemU9PT1pLk1BWF9WQUxVRV8zMkJJVFN8fHRoaXMuY2VudHJhbERpck9mZnNldD09PWkuTUFYX1ZBTFVFXzMyQklUUyl7aWYodGhpcy56aXA2ND0hMCwoZT10aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZShzLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IpKTwwKXRocm93IG5ldyBFcnJvcihcIkNvcnJ1cHRlZCB6aXA6IGNhbid0IGZpbmQgdGhlIFpJUDY0IGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSBsb2NhdG9yXCIpO2lmKHRoaXMucmVhZGVyLnNldEluZGV4KGUpLHRoaXMuY2hlY2tTaWduYXR1cmUocy5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKSx0aGlzLnJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsTG9jYXRvcigpLCF0aGlzLmlzU2lnbmF0dXJlKHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpcixzLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORCkmJih0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXI9dGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUocy5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpcjwwKSl0aHJvdyBuZXcgRXJyb3IoXCJDb3JydXB0ZWQgemlwOiBjYW4ndCBmaW5kIHRoZSBaSVA2NCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnlcIik7dGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlwNjRDZW50cmFsRGlyKSx0aGlzLmNoZWNrU2lnbmF0dXJlKHMuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSx0aGlzLnJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsKCl9dmFyIHI9dGhpcy5jZW50cmFsRGlyT2Zmc2V0K3RoaXMuY2VudHJhbERpclNpemU7dGhpcy56aXA2NCYmKHIrPTIwLHIrPTEyK3RoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplKTt2YXIgbj10LXI7aWYoMDxuKXRoaXMuaXNTaWduYXR1cmUodCxzLkNFTlRSQUxfRklMRV9IRUFERVIpfHwodGhpcy5yZWFkZXIuemVybz1uKTtlbHNlIGlmKG48MCl0aHJvdyBuZXcgRXJyb3IoXCJDb3JydXB0ZWQgemlwOiBtaXNzaW5nIFwiK01hdGguYWJzKG4pK1wiIGJ5dGVzLlwiKX0scHJlcGFyZVJlYWRlcjpmdW5jdGlvbihlKXt0aGlzLnJlYWRlcj1uKGUpfSxsb2FkOmZ1bmN0aW9uKGUpe3RoaXMucHJlcGFyZVJlYWRlcihlKSx0aGlzLnJlYWRFbmRPZkNlbnRyYWwoKSx0aGlzLnJlYWRDZW50cmFsRGlyKCksdGhpcy5yZWFkTG9jYWxGaWxlcygpfX0sdC5leHBvcnRzPWh9LHtcIi4vcmVhZGVyL3JlYWRlckZvclwiOjIyLFwiLi9zaWduYXR1cmVcIjoyMyxcIi4vc3VwcG9ydFwiOjMwLFwiLi91dGlsc1wiOjMyLFwiLi96aXBFbnRyeVwiOjM0fV0sMzQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi9yZWFkZXIvcmVhZGVyRm9yXCIpLHM9ZShcIi4vdXRpbHNcIiksaT1lKFwiLi9jb21wcmVzc2VkT2JqZWN0XCIpLGE9ZShcIi4vY3JjMzJcIiksbz1lKFwiLi91dGY4XCIpLGg9ZShcIi4vY29tcHJlc3Npb25zXCIpLHU9ZShcIi4vc3VwcG9ydFwiKTtmdW5jdGlvbiBsKGUsdCl7dGhpcy5vcHRpb25zPWUsdGhpcy5sb2FkT3B0aW9ucz10fWwucHJvdG90eXBlPXtpc0VuY3J5cHRlZDpmdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLmJpdEZsYWcpfSx1c2VVVEY4OmZ1bmN0aW9uKCl7cmV0dXJuIDIwNDg9PSgyMDQ4JnRoaXMuYml0RmxhZyl9LHJlYWRMb2NhbFBhcnQ6ZnVuY3Rpb24oZSl7dmFyIHQscjtpZihlLnNraXAoMjIpLHRoaXMuZmlsZU5hbWVMZW5ndGg9ZS5yZWFkSW50KDIpLHI9ZS5yZWFkSW50KDIpLHRoaXMuZmlsZU5hbWU9ZS5yZWFkRGF0YSh0aGlzLmZpbGVOYW1lTGVuZ3RoKSxlLnNraXAociksLTE9PT10aGlzLmNvbXByZXNzZWRTaXplfHwtMT09PXRoaXMudW5jb21wcmVzc2VkU2l6ZSl0aHJvdyBuZXcgRXJyb3IoXCJCdWcgb3IgY29ycnVwdGVkIHppcCA6IGRpZG4ndCBnZXQgZW5vdWdoIGluZm9ybWF0aW9uIGZyb20gdGhlIGNlbnRyYWwgZGlyZWN0b3J5IChjb21wcmVzc2VkU2l6ZSA9PT0gLTEgfHwgdW5jb21wcmVzc2VkU2l6ZSA9PT0gLTEpXCIpO2lmKG51bGw9PT0odD1mdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gaClpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaCx0KSYmaFt0XS5tYWdpYz09PWUpcmV0dXJuIGhbdF07cmV0dXJuIG51bGx9KHRoaXMuY29tcHJlc3Npb25NZXRob2QpKSl0aHJvdyBuZXcgRXJyb3IoXCJDb3JydXB0ZWQgemlwIDogY29tcHJlc3Npb24gXCIrcy5wcmV0dHkodGhpcy5jb21wcmVzc2lvbk1ldGhvZCkrXCIgdW5rbm93biAoaW5uZXIgZmlsZSA6IFwiK3MudHJhbnNmb3JtVG8oXCJzdHJpbmdcIix0aGlzLmZpbGVOYW1lKStcIilcIik7dGhpcy5kZWNvbXByZXNzZWQ9bmV3IGkodGhpcy5jb21wcmVzc2VkU2l6ZSx0aGlzLnVuY29tcHJlc3NlZFNpemUsdGhpcy5jcmMzMix0LGUucmVhZERhdGEodGhpcy5jb21wcmVzc2VkU2l6ZSkpfSxyZWFkQ2VudHJhbFBhcnQ6ZnVuY3Rpb24oZSl7dGhpcy52ZXJzaW9uTWFkZUJ5PWUucmVhZEludCgyKSxlLnNraXAoMiksdGhpcy5iaXRGbGFnPWUucmVhZEludCgyKSx0aGlzLmNvbXByZXNzaW9uTWV0aG9kPWUucmVhZFN0cmluZygyKSx0aGlzLmRhdGU9ZS5yZWFkRGF0ZSgpLHRoaXMuY3JjMzI9ZS5yZWFkSW50KDQpLHRoaXMuY29tcHJlc3NlZFNpemU9ZS5yZWFkSW50KDQpLHRoaXMudW5jb21wcmVzc2VkU2l6ZT1lLnJlYWRJbnQoNCk7dmFyIHQ9ZS5yZWFkSW50KDIpO2lmKHRoaXMuZXh0cmFGaWVsZHNMZW5ndGg9ZS5yZWFkSW50KDIpLHRoaXMuZmlsZUNvbW1lbnRMZW5ndGg9ZS5yZWFkSW50KDIpLHRoaXMuZGlza051bWJlclN0YXJ0PWUucmVhZEludCgyKSx0aGlzLmludGVybmFsRmlsZUF0dHJpYnV0ZXM9ZS5yZWFkSW50KDIpLHRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcz1lLnJlYWRJbnQoNCksdGhpcy5sb2NhbEhlYWRlck9mZnNldD1lLnJlYWRJbnQoNCksdGhpcy5pc0VuY3J5cHRlZCgpKXRocm93IG5ldyBFcnJvcihcIkVuY3J5cHRlZCB6aXAgYXJlIG5vdCBzdXBwb3J0ZWRcIik7ZS5za2lwKHQpLHRoaXMucmVhZEV4dHJhRmllbGRzKGUpLHRoaXMucGFyc2VaSVA2NEV4dHJhRmllbGQoZSksdGhpcy5maWxlQ29tbWVudD1lLnJlYWREYXRhKHRoaXMuZmlsZUNvbW1lbnRMZW5ndGgpfSxwcm9jZXNzQXR0cmlidXRlczpmdW5jdGlvbigpe3RoaXMudW5peFBlcm1pc3Npb25zPW51bGwsdGhpcy5kb3NQZXJtaXNzaW9ucz1udWxsO3ZhciBlPXRoaXMudmVyc2lvbk1hZGVCeT4+ODt0aGlzLmRpcj0hISgxNiZ0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMpLDA9PWUmJih0aGlzLmRvc1Blcm1pc3Npb25zPTYzJnRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyksMz09ZSYmKHRoaXMudW5peFBlcm1pc3Npb25zPXRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcz4+MTYmNjU1MzUpLHRoaXMuZGlyfHxcIi9cIiE9PXRoaXMuZmlsZU5hbWVTdHIuc2xpY2UoLTEpfHwodGhpcy5kaXI9ITApfSxwYXJzZVpJUDY0RXh0cmFGaWVsZDpmdW5jdGlvbigpe2lmKHRoaXMuZXh0cmFGaWVsZHNbMV0pe3ZhciBlPW4odGhpcy5leHRyYUZpZWxkc1sxXS52YWx1ZSk7dGhpcy51bmNvbXByZXNzZWRTaXplPT09cy5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy51bmNvbXByZXNzZWRTaXplPWUucmVhZEludCg4KSksdGhpcy5jb21wcmVzc2VkU2l6ZT09PXMuTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMuY29tcHJlc3NlZFNpemU9ZS5yZWFkSW50KDgpKSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PT09cy5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5sb2NhbEhlYWRlck9mZnNldD1lLnJlYWRJbnQoOCkpLHRoaXMuZGlza051bWJlclN0YXJ0PT09cy5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5kaXNrTnVtYmVyU3RhcnQ9ZS5yZWFkSW50KDQpKX19LHJlYWRFeHRyYUZpZWxkczpmdW5jdGlvbihlKXt2YXIgdCxyLG4saT1lLmluZGV4K3RoaXMuZXh0cmFGaWVsZHNMZW5ndGg7Zm9yKHRoaXMuZXh0cmFGaWVsZHN8fCh0aGlzLmV4dHJhRmllbGRzPXt9KTtlLmluZGV4KzQ8aTspdD1lLnJlYWRJbnQoMikscj1lLnJlYWRJbnQoMiksbj1lLnJlYWREYXRhKHIpLHRoaXMuZXh0cmFGaWVsZHNbdF09e2lkOnQsbGVuZ3RoOnIsdmFsdWU6bn07ZS5zZXRJbmRleChpKX0saGFuZGxlVVRGODpmdW5jdGlvbigpe3ZhciBlPXUudWludDhhcnJheT9cInVpbnQ4YXJyYXlcIjpcImFycmF5XCI7aWYodGhpcy51c2VVVEY4KCkpdGhpcy5maWxlTmFtZVN0cj1vLnV0ZjhkZWNvZGUodGhpcy5maWxlTmFtZSksdGhpcy5maWxlQ29tbWVudFN0cj1vLnV0ZjhkZWNvZGUodGhpcy5maWxlQ29tbWVudCk7ZWxzZXt2YXIgdD10aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZVBhdGgoKTtpZihudWxsIT09dCl0aGlzLmZpbGVOYW1lU3RyPXQ7ZWxzZXt2YXIgcj1zLnRyYW5zZm9ybVRvKGUsdGhpcy5maWxlTmFtZSk7dGhpcy5maWxlTmFtZVN0cj10aGlzLmxvYWRPcHRpb25zLmRlY29kZUZpbGVOYW1lKHIpfXZhciBuPXRoaXMuZmluZEV4dHJhRmllbGRVbmljb2RlQ29tbWVudCgpO2lmKG51bGwhPT1uKXRoaXMuZmlsZUNvbW1lbnRTdHI9bjtlbHNle3ZhciBpPXMudHJhbnNmb3JtVG8oZSx0aGlzLmZpbGVDb21tZW50KTt0aGlzLmZpbGVDb21tZW50U3RyPXRoaXMubG9hZE9wdGlvbnMuZGVjb2RlRmlsZU5hbWUoaSl9fX0sZmluZEV4dHJhRmllbGRVbmljb2RlUGF0aDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZXh0cmFGaWVsZHNbMjg3ODldO2lmKGUpe3ZhciB0PW4oZS52YWx1ZSk7cmV0dXJuIDEhPT10LnJlYWRJbnQoMSk/bnVsbDphKHRoaXMuZmlsZU5hbWUpIT09dC5yZWFkSW50KDQpP251bGw6by51dGY4ZGVjb2RlKHQucmVhZERhdGEoZS5sZW5ndGgtNSkpfXJldHVybiBudWxsfSxmaW5kRXh0cmFGaWVsZFVuaWNvZGVDb21tZW50OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5leHRyYUZpZWxkc1syNTQ2MV07aWYoZSl7dmFyIHQ9bihlLnZhbHVlKTtyZXR1cm4gMSE9PXQucmVhZEludCgxKT9udWxsOmEodGhpcy5maWxlQ29tbWVudCkhPT10LnJlYWRJbnQoNCk/bnVsbDpvLnV0ZjhkZWNvZGUodC5yZWFkRGF0YShlLmxlbmd0aC01KSl9cmV0dXJuIG51bGx9fSx0LmV4cG9ydHM9bH0se1wiLi9jb21wcmVzc2VkT2JqZWN0XCI6MixcIi4vY29tcHJlc3Npb25zXCI6MyxcIi4vY3JjMzJcIjo0LFwiLi9yZWFkZXIvcmVhZGVyRm9yXCI6MjIsXCIuL3N1cHBvcnRcIjozMCxcIi4vdXRmOFwiOjMxLFwiLi91dGlsc1wiOjMyfV0sMzU6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKGUsdCxyKXt0aGlzLm5hbWU9ZSx0aGlzLmRpcj1yLmRpcix0aGlzLmRhdGU9ci5kYXRlLHRoaXMuY29tbWVudD1yLmNvbW1lbnQsdGhpcy51bml4UGVybWlzc2lvbnM9ci51bml4UGVybWlzc2lvbnMsdGhpcy5kb3NQZXJtaXNzaW9ucz1yLmRvc1Blcm1pc3Npb25zLHRoaXMuX2RhdGE9dCx0aGlzLl9kYXRhQmluYXJ5PXIuYmluYXJ5LHRoaXMub3B0aW9ucz17Y29tcHJlc3Npb246ci5jb21wcmVzc2lvbixjb21wcmVzc2lvbk9wdGlvbnM6ci5jb21wcmVzc2lvbk9wdGlvbnN9fXZhciBzPWUoXCIuL3N0cmVhbS9TdHJlYW1IZWxwZXJcIiksaT1lKFwiLi9zdHJlYW0vRGF0YVdvcmtlclwiKSxhPWUoXCIuL3V0ZjhcIiksbz1lKFwiLi9jb21wcmVzc2VkT2JqZWN0XCIpLGg9ZShcIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXJcIik7bi5wcm90b3R5cGU9e2ludGVybmFsU3RyZWFtOmZ1bmN0aW9uKGUpe3ZhciB0PW51bGwscj1cInN0cmluZ1wiO3RyeXtpZighZSl0aHJvdyBuZXcgRXJyb3IoXCJObyBvdXRwdXQgdHlwZSBzcGVjaWZpZWQuXCIpO3ZhciBuPVwic3RyaW5nXCI9PT0ocj1lLnRvTG93ZXJDYXNlKCkpfHxcInRleHRcIj09PXI7XCJiaW5hcnlzdHJpbmdcIiE9PXImJlwidGV4dFwiIT09cnx8KHI9XCJzdHJpbmdcIiksdD10aGlzLl9kZWNvbXByZXNzV29ya2VyKCk7dmFyIGk9IXRoaXMuX2RhdGFCaW5hcnk7aSYmIW4mJih0PXQucGlwZShuZXcgYS5VdGY4RW5jb2RlV29ya2VyKSksIWkmJm4mJih0PXQucGlwZShuZXcgYS5VdGY4RGVjb2RlV29ya2VyKSl9Y2F0Y2goZSl7KHQ9bmV3IGgoXCJlcnJvclwiKSkuZXJyb3IoZSl9cmV0dXJuIG5ldyBzKHQscixcIlwiKX0sYXN5bmM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5pbnRlcm5hbFN0cmVhbShlKS5hY2N1bXVsYXRlKHQpfSxub2RlU3RyZWFtOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuaW50ZXJuYWxTdHJlYW0oZXx8XCJub2RlYnVmZmVyXCIpLnRvTm9kZWpzU3RyZWFtKHQpfSxfY29tcHJlc3NXb3JrZXI6ZnVuY3Rpb24oZSx0KXtpZih0aGlzLl9kYXRhIGluc3RhbmNlb2YgbyYmdGhpcy5fZGF0YS5jb21wcmVzc2lvbi5tYWdpYz09PWUubWFnaWMpcmV0dXJuIHRoaXMuX2RhdGEuZ2V0Q29tcHJlc3NlZFdvcmtlcigpO3ZhciByPXRoaXMuX2RlY29tcHJlc3NXb3JrZXIoKTtyZXR1cm4gdGhpcy5fZGF0YUJpbmFyeXx8KHI9ci5waXBlKG5ldyBhLlV0ZjhFbmNvZGVXb3JrZXIpKSxvLmNyZWF0ZVdvcmtlckZyb20ocixlLHQpfSxfZGVjb21wcmVzc1dvcmtlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kYXRhIGluc3RhbmNlb2Ygbz90aGlzLl9kYXRhLmdldENvbnRlbnRXb3JrZXIoKTp0aGlzLl9kYXRhIGluc3RhbmNlb2YgaD90aGlzLl9kYXRhOm5ldyBpKHRoaXMuX2RhdGEpfX07Zm9yKHZhciB1PVtcImFzVGV4dFwiLFwiYXNCaW5hcnlcIixcImFzTm9kZUJ1ZmZlclwiLFwiYXNVaW50OEFycmF5XCIsXCJhc0FycmF5QnVmZmVyXCJdLGw9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW1vdmVkIGluIEpTWmlwIDMuMCwgcGxlYXNlIGNoZWNrIHRoZSB1cGdyYWRlIGd1aWRlLlwiKX0sZj0wO2Y8dS5sZW5ndGg7ZisrKW4ucHJvdG90eXBlW3VbZl1dPWw7dC5leHBvcnRzPW59LHtcIi4vY29tcHJlc3NlZE9iamVjdFwiOjIsXCIuL3N0cmVhbS9EYXRhV29ya2VyXCI6MjcsXCIuL3N0cmVhbS9HZW5lcmljV29ya2VyXCI6MjgsXCIuL3N0cmVhbS9TdHJlYW1IZWxwZXJcIjoyOSxcIi4vdXRmOFwiOjMxfV0sMzY6W2Z1bmN0aW9uKGUsbCx0KXsoZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHIsbixlPXQuTXV0YXRpb25PYnNlcnZlcnx8dC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO2lmKGUpe3ZhciBpPTAscz1uZXcgZSh1KSxhPXQuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7cy5vYnNlcnZlKGEse2NoYXJhY3RlckRhdGE6ITB9KSxyPWZ1bmN0aW9uKCl7YS5kYXRhPWk9KytpJTJ9fWVsc2UgaWYodC5zZXRJbW1lZGlhdGV8fHZvaWQgMD09PXQuTWVzc2FnZUNoYW5uZWwpcj1cImRvY3VtZW50XCJpbiB0JiZcIm9ucmVhZHlzdGF0ZWNoYW5nZVwiaW4gdC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpP2Z1bmN0aW9uKCl7dmFyIGU9dC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO2Uub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7dSgpLGUub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpLGU9bnVsbH0sdC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoZSl9OmZ1bmN0aW9uKCl7c2V0VGltZW91dCh1LDApfTtlbHNle3ZhciBvPW5ldyB0Lk1lc3NhZ2VDaGFubmVsO28ucG9ydDEub25tZXNzYWdlPXUscj1mdW5jdGlvbigpe28ucG9ydDIucG9zdE1lc3NhZ2UoMCl9fXZhciBoPVtdO2Z1bmN0aW9uIHUoKXt2YXIgZSx0O249ITA7Zm9yKHZhciByPWgubGVuZ3RoO3I7KXtmb3IodD1oLGg9W10sZT0tMTsrK2U8cjspdFtlXSgpO3I9aC5sZW5ndGh9bj0hMX1sLmV4cG9ydHM9ZnVuY3Rpb24oZSl7MSE9PWgucHVzaChlKXx8bnx8cigpfX0pLmNhbGwodGhpcyxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDM3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9ZShcImltbWVkaWF0ZVwiKTtmdW5jdGlvbiB1KCl7fXZhciBsPXt9LHM9W1wiUkVKRUNURURcIl0sYT1bXCJGVUxGSUxMRURcIl0sbj1bXCJQRU5ESU5HXCJdO2Z1bmN0aW9uIG8oZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwicmVzb2x2ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO3RoaXMuc3RhdGU9bix0aGlzLnF1ZXVlPVtdLHRoaXMub3V0Y29tZT12b2lkIDAsZSE9PXUmJmQodGhpcyxlKX1mdW5jdGlvbiBoKGUsdCxyKXt0aGlzLnByb21pc2U9ZSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYodGhpcy5vbkZ1bGZpbGxlZD10LHRoaXMuY2FsbEZ1bGZpbGxlZD10aGlzLm90aGVyQ2FsbEZ1bGZpbGxlZCksXCJmdW5jdGlvblwiPT10eXBlb2YgciYmKHRoaXMub25SZWplY3RlZD1yLHRoaXMuY2FsbFJlamVjdGVkPXRoaXMub3RoZXJDYWxsUmVqZWN0ZWQpfWZ1bmN0aW9uIGYodCxyLG4pe2koZnVuY3Rpb24oKXt2YXIgZTt0cnl7ZT1yKG4pfWNhdGNoKGUpe3JldHVybiBsLnJlamVjdCh0LGUpfWU9PT10P2wucmVqZWN0KHQsbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZXNvbHZlIHByb21pc2Ugd2l0aCBpdHNlbGZcIikpOmwucmVzb2x2ZSh0LGUpfSl9ZnVuY3Rpb24gYyhlKXt2YXIgdD1lJiZlLnRoZW47aWYoZSYmKFwib2JqZWN0XCI9PXR5cGVvZiBlfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlKSYmXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gZnVuY3Rpb24oKXt0LmFwcGx5KGUsYXJndW1lbnRzKX19ZnVuY3Rpb24gZCh0LGUpe3ZhciByPSExO2Z1bmN0aW9uIG4oZSl7cnx8KHI9ITAsbC5yZWplY3QodCxlKSl9ZnVuY3Rpb24gaShlKXtyfHwocj0hMCxsLnJlc29sdmUodCxlKSl9dmFyIHM9cChmdW5jdGlvbigpe2UoaSxuKX0pO1wiZXJyb3JcIj09PXMuc3RhdHVzJiZuKHMudmFsdWUpfWZ1bmN0aW9uIHAoZSx0KXt2YXIgcj17fTt0cnl7ci52YWx1ZT1lKHQpLHIuc3RhdHVzPVwic3VjY2Vzc1wifWNhdGNoKGUpe3Iuc3RhdHVzPVwiZXJyb3JcIixyLnZhbHVlPWV9cmV0dXJuIHJ9KHQuZXhwb3J0cz1vKS5wcm90b3R5cGUuZmluYWxseT1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXJldHVybiB0aGlzO3ZhciByPXRoaXMuY29uc3RydWN0b3I7cmV0dXJuIHRoaXMudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gci5yZXNvbHZlKHQoKSkudGhlbihmdW5jdGlvbigpe3JldHVybiBlfSl9LGZ1bmN0aW9uKGUpe3JldHVybiByLnJlc29sdmUodCgpKS50aGVuKGZ1bmN0aW9uKCl7dGhyb3cgZX0pfSl9LG8ucHJvdG90eXBlLmNhdGNoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRoZW4obnVsbCxlKX0sby5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJnRoaXMuc3RhdGU9PT1hfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZ0aGlzLnN0YXRlPT09cylyZXR1cm4gdGhpczt2YXIgcj1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih1KTt0aGlzLnN0YXRlIT09bj9mKHIsdGhpcy5zdGF0ZT09PWE/ZTp0LHRoaXMub3V0Y29tZSk6dGhpcy5xdWV1ZS5wdXNoKG5ldyBoKHIsZSx0KSk7cmV0dXJuIHJ9LGgucHJvdG90eXBlLmNhbGxGdWxmaWxsZWQ9ZnVuY3Rpb24oZSl7bC5yZXNvbHZlKHRoaXMucHJvbWlzZSxlKX0saC5wcm90b3R5cGUub3RoZXJDYWxsRnVsZmlsbGVkPWZ1bmN0aW9uKGUpe2YodGhpcy5wcm9taXNlLHRoaXMub25GdWxmaWxsZWQsZSl9LGgucHJvdG90eXBlLmNhbGxSZWplY3RlZD1mdW5jdGlvbihlKXtsLnJlamVjdCh0aGlzLnByb21pc2UsZSl9LGgucHJvdG90eXBlLm90aGVyQ2FsbFJlamVjdGVkPWZ1bmN0aW9uKGUpe2YodGhpcy5wcm9taXNlLHRoaXMub25SZWplY3RlZCxlKX0sbC5yZXNvbHZlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9cChjLHQpO2lmKFwiZXJyb3JcIj09PXIuc3RhdHVzKXJldHVybiBsLnJlamVjdChlLHIudmFsdWUpO3ZhciBuPXIudmFsdWU7aWYobilkKGUsbik7ZWxzZXtlLnN0YXRlPWEsZS5vdXRjb21lPXQ7Zm9yKHZhciBpPS0xLHM9ZS5xdWV1ZS5sZW5ndGg7KytpPHM7KWUucXVldWVbaV0uY2FsbEZ1bGZpbGxlZCh0KX1yZXR1cm4gZX0sbC5yZWplY3Q9ZnVuY3Rpb24oZSx0KXtlLnN0YXRlPXMsZS5vdXRjb21lPXQ7Zm9yKHZhciByPS0xLG49ZS5xdWV1ZS5sZW5ndGg7KytyPG47KWUucXVldWVbcl0uY2FsbFJlamVjdGVkKHQpO3JldHVybiBlfSxvLnJlc29sdmU9ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIHRoaXMpcmV0dXJuIGU7cmV0dXJuIGwucmVzb2x2ZShuZXcgdGhpcyh1KSxlKX0sby5yZWplY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHRoaXModSk7cmV0dXJuIGwucmVqZWN0KHQsZSl9LG8uYWxsPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7aWYoXCJbb2JqZWN0IEFycmF5XVwiIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiB0aGlzLnJlamVjdChuZXcgVHlwZUVycm9yKFwibXVzdCBiZSBhbiBhcnJheVwiKSk7dmFyIG49ZS5sZW5ndGgsaT0hMTtpZighbilyZXR1cm4gdGhpcy5yZXNvbHZlKFtdKTt2YXIgcz1uZXcgQXJyYXkobiksYT0wLHQ9LTEsbz1uZXcgdGhpcyh1KTtmb3IoOysrdDxuOyloKGVbdF0sdCk7cmV0dXJuIG87ZnVuY3Rpb24gaChlLHQpe3IucmVzb2x2ZShlKS50aGVuKGZ1bmN0aW9uKGUpe3NbdF09ZSwrK2EhPT1ufHxpfHwoaT0hMCxsLnJlc29sdmUobyxzKSl9LGZ1bmN0aW9uKGUpe2l8fChpPSEwLGwucmVqZWN0KG8sZSkpfSl9fSxvLnJhY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZihcIltvYmplY3QgQXJyYXldXCIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIHRoaXMucmVqZWN0KG5ldyBUeXBlRXJyb3IoXCJtdXN0IGJlIGFuIGFycmF5XCIpKTt2YXIgcj1lLmxlbmd0aCxuPSExO2lmKCFyKXJldHVybiB0aGlzLnJlc29sdmUoW10pO3ZhciBpPS0xLHM9bmV3IHRoaXModSk7Zm9yKDsrK2k8cjspYT1lW2ldLHQucmVzb2x2ZShhKS50aGVuKGZ1bmN0aW9uKGUpe258fChuPSEwLGwucmVzb2x2ZShzLGUpKX0sZnVuY3Rpb24oZSl7bnx8KG49ITAsbC5yZWplY3QocyxlKSl9KTt2YXIgYTtyZXR1cm4gc319LHtpbW1lZGlhdGU6MzZ9XSwzODpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9OygwLGUoXCIuL2xpYi91dGlscy9jb21tb25cIikuYXNzaWduKShuLGUoXCIuL2xpYi9kZWZsYXRlXCIpLGUoXCIuL2xpYi9pbmZsYXRlXCIpLGUoXCIuL2xpYi96bGliL2NvbnN0YW50c1wiKSksdC5leHBvcnRzPW59LHtcIi4vbGliL2RlZmxhdGVcIjozOSxcIi4vbGliL2luZmxhdGVcIjo0MCxcIi4vbGliL3V0aWxzL2NvbW1vblwiOjQxLFwiLi9saWIvemxpYi9jb25zdGFudHNcIjo0NH1dLDM5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGE9ZShcIi4vemxpYi9kZWZsYXRlXCIpLG89ZShcIi4vdXRpbHMvY29tbW9uXCIpLGg9ZShcIi4vdXRpbHMvc3RyaW5nc1wiKSxpPWUoXCIuL3psaWIvbWVzc2FnZXNcIikscz1lKFwiLi96bGliL3pzdHJlYW1cIiksdT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGw9MCxmPS0xLGM9MCxkPTg7ZnVuY3Rpb24gcChlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBwKSlyZXR1cm4gbmV3IHAoZSk7dGhpcy5vcHRpb25zPW8uYXNzaWduKHtsZXZlbDpmLG1ldGhvZDpkLGNodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjE1LG1lbUxldmVsOjgsc3RyYXRlZ3k6Yyx0bzpcIlwifSxlfHx7fSk7dmFyIHQ9dGhpcy5vcHRpb25zO3QucmF3JiYwPHQud2luZG93Qml0cz90LndpbmRvd0JpdHM9LXQud2luZG93Qml0czp0Lmd6aXAmJjA8dC53aW5kb3dCaXRzJiZ0LndpbmRvd0JpdHM8MTYmJih0LndpbmRvd0JpdHMrPTE2KSx0aGlzLmVycj0wLHRoaXMubXNnPVwiXCIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IHMsdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciByPWEuZGVmbGF0ZUluaXQyKHRoaXMuc3RybSx0LmxldmVsLHQubWV0aG9kLHQud2luZG93Qml0cyx0Lm1lbUxldmVsLHQuc3RyYXRlZ3kpO2lmKHIhPT1sKXRocm93IG5ldyBFcnJvcihpW3JdKTtpZih0LmhlYWRlciYmYS5kZWZsYXRlU2V0SGVhZGVyKHRoaXMuc3RybSx0LmhlYWRlciksdC5kaWN0aW9uYXJ5KXt2YXIgbjtpZihuPVwic3RyaW5nXCI9PXR5cGVvZiB0LmRpY3Rpb25hcnk/aC5zdHJpbmcyYnVmKHQuZGljdGlvbmFyeSk6XCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiPT09dS5jYWxsKHQuZGljdGlvbmFyeSk/bmV3IFVpbnQ4QXJyYXkodC5kaWN0aW9uYXJ5KTp0LmRpY3Rpb25hcnksKHI9YS5kZWZsYXRlU2V0RGljdGlvbmFyeSh0aGlzLnN0cm0sbikpIT09bCl0aHJvdyBuZXcgRXJyb3IoaVtyXSk7dGhpcy5fZGljdF9zZXQ9ITB9fWZ1bmN0aW9uIG4oZSx0KXt2YXIgcj1uZXcgcCh0KTtpZihyLnB1c2goZSwhMCksci5lcnIpdGhyb3cgci5tc2d8fGlbci5lcnJdO3JldHVybiByLnJlc3VsdH1wLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpPXRoaXMuc3RybSxzPXRoaXMub3B0aW9ucy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtuPXQ9PT1+fnQ/dDohMD09PXQ/NDowLFwic3RyaW5nXCI9PXR5cGVvZiBlP2kuaW5wdXQ9aC5zdHJpbmcyYnVmKGUpOlwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIj09PXUuY2FsbChlKT9pLmlucHV0PW5ldyBVaW50OEFycmF5KGUpOmkuaW5wdXQ9ZSxpLm5leHRfaW49MCxpLmF2YWlsX2luPWkuaW5wdXQubGVuZ3RoO2Rve2lmKDA9PT1pLmF2YWlsX291dCYmKGkub3V0cHV0PW5ldyBvLkJ1ZjgocyksaS5uZXh0X291dD0wLGkuYXZhaWxfb3V0PXMpLDEhPT0ocj1hLmRlZmxhdGUoaSxuKSkmJnIhPT1sKXJldHVybiB0aGlzLm9uRW5kKHIpLCEodGhpcy5lbmRlZD0hMCk7MCE9PWkuYXZhaWxfb3V0JiYoMCE9PWkuYXZhaWxfaW58fDQhPT1uJiYyIT09bil8fChcInN0cmluZ1wiPT09dGhpcy5vcHRpb25zLnRvP3RoaXMub25EYXRhKGguYnVmMmJpbnN0cmluZyhvLnNocmlua0J1ZihpLm91dHB1dCxpLm5leHRfb3V0KSkpOnRoaXMub25EYXRhKG8uc2hyaW5rQnVmKGkub3V0cHV0LGkubmV4dF9vdXQpKSl9d2hpbGUoKDA8aS5hdmFpbF9pbnx8MD09PWkuYXZhaWxfb3V0KSYmMSE9PXIpO3JldHVybiA0PT09bj8ocj1hLmRlZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKHIpLHRoaXMuZW5kZWQ9ITAscj09PWwpOjIhPT1ufHwodGhpcy5vbkVuZChsKSwhKGkuYXZhaWxfb3V0PTApKX0scC5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKGUpe3RoaXMuY2h1bmtzLnB1c2goZSl9LHAucHJvdG90eXBlLm9uRW5kPWZ1bmN0aW9uKGUpe2U9PT1sJiYoXCJzdHJpbmdcIj09PXRoaXMub3B0aW9ucy50bz90aGlzLnJlc3VsdD10aGlzLmNodW5rcy5qb2luKFwiXCIpOnRoaXMucmVzdWx0PW8uZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPWUsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sci5EZWZsYXRlPXAsci5kZWZsYXRlPW4sci5kZWZsYXRlUmF3PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQ9dHx8e30pLnJhdz0hMCxuKGUsdCl9LHIuZ3ppcD1mdW5jdGlvbihlLHQpe3JldHVybih0PXR8fHt9KS5nemlwPSEwLG4oZSx0KX19LHtcIi4vdXRpbHMvY29tbW9uXCI6NDEsXCIuL3V0aWxzL3N0cmluZ3NcIjo0MixcIi4vemxpYi9kZWZsYXRlXCI6NDYsXCIuL3psaWIvbWVzc2FnZXNcIjo1MSxcIi4vemxpYi96c3RyZWFtXCI6NTN9XSw0MDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBjPWUoXCIuL3psaWIvaW5mbGF0ZVwiKSxkPWUoXCIuL3V0aWxzL2NvbW1vblwiKSxwPWUoXCIuL3V0aWxzL3N0cmluZ3NcIiksbT1lKFwiLi96bGliL2NvbnN0YW50c1wiKSxuPWUoXCIuL3psaWIvbWVzc2FnZXNcIiksaT1lKFwiLi96bGliL3pzdHJlYW1cIikscz1lKFwiLi96bGliL2d6aGVhZGVyXCIpLF89T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBhKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGEpKXJldHVybiBuZXcgYShlKTt0aGlzLm9wdGlvbnM9ZC5hc3NpZ24oe2NodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjAsdG86XCJcIn0sZXx8e30pO3ZhciB0PXRoaXMub3B0aW9uczt0LnJhdyYmMDw9dC53aW5kb3dCaXRzJiZ0LndpbmRvd0JpdHM8MTYmJih0LndpbmRvd0JpdHM9LXQud2luZG93Qml0cywwPT09dC53aW5kb3dCaXRzJiYodC53aW5kb3dCaXRzPS0xNSkpLCEoMDw9dC53aW5kb3dCaXRzJiZ0LndpbmRvd0JpdHM8MTYpfHxlJiZlLndpbmRvd0JpdHN8fCh0LndpbmRvd0JpdHMrPTMyKSwxNTx0LndpbmRvd0JpdHMmJnQud2luZG93Qml0czw0OCYmMD09KDE1JnQud2luZG93Qml0cykmJih0LndpbmRvd0JpdHN8PTE1KSx0aGlzLmVycj0wLHRoaXMubXNnPVwiXCIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IGksdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciByPWMuaW5mbGF0ZUluaXQyKHRoaXMuc3RybSx0LndpbmRvd0JpdHMpO2lmKHIhPT1tLlpfT0spdGhyb3cgbmV3IEVycm9yKG5bcl0pO3RoaXMuaGVhZGVyPW5ldyBzLGMuaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sdGhpcy5oZWFkZXIpfWZ1bmN0aW9uIG8oZSx0KXt2YXIgcj1uZXcgYSh0KTtpZihyLnB1c2goZSwhMCksci5lcnIpdGhyb3cgci5tc2d8fG5bci5lcnJdO3JldHVybiByLnJlc3VsdH1hLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpLHMsYSxvLGg9dGhpcy5zdHJtLHU9dGhpcy5vcHRpb25zLmNodW5rU2l6ZSxsPXRoaXMub3B0aW9ucy5kaWN0aW9uYXJ5LGY9ITE7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtuPXQ9PT1+fnQ/dDohMD09PXQ/bS5aX0ZJTklTSDptLlpfTk9fRkxVU0gsXCJzdHJpbmdcIj09dHlwZW9mIGU/aC5pbnB1dD1wLmJpbnN0cmluZzJidWYoZSk6XCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiPT09Xy5jYWxsKGUpP2guaW5wdXQ9bmV3IFVpbnQ4QXJyYXkoZSk6aC5pbnB1dD1lLGgubmV4dF9pbj0wLGguYXZhaWxfaW49aC5pbnB1dC5sZW5ndGg7ZG97aWYoMD09PWguYXZhaWxfb3V0JiYoaC5vdXRwdXQ9bmV3IGQuQnVmOCh1KSxoLm5leHRfb3V0PTAsaC5hdmFpbF9vdXQ9dSksKHI9Yy5pbmZsYXRlKGgsbS5aX05PX0ZMVVNIKSk9PT1tLlpfTkVFRF9ESUNUJiZsJiYobz1cInN0cmluZ1wiPT10eXBlb2YgbD9wLnN0cmluZzJidWYobCk6XCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiPT09Xy5jYWxsKGwpP25ldyBVaW50OEFycmF5KGwpOmwscj1jLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSxvKSkscj09PW0uWl9CVUZfRVJST1ImJiEwPT09ZiYmKHI9bS5aX09LLGY9ITEpLHIhPT1tLlpfU1RSRUFNX0VORCYmciE9PW0uWl9PSylyZXR1cm4gdGhpcy5vbkVuZChyKSwhKHRoaXMuZW5kZWQ9ITApO2gubmV4dF9vdXQmJigwIT09aC5hdmFpbF9vdXQmJnIhPT1tLlpfU1RSRUFNX0VORCYmKDAhPT1oLmF2YWlsX2lufHxuIT09bS5aX0ZJTklTSCYmbiE9PW0uWl9TWU5DX0ZMVVNIKXx8KFwic3RyaW5nXCI9PT10aGlzLm9wdGlvbnMudG8/KGk9cC51dGY4Ym9yZGVyKGgub3V0cHV0LGgubmV4dF9vdXQpLHM9aC5uZXh0X291dC1pLGE9cC5idWYyc3RyaW5nKGgub3V0cHV0LGkpLGgubmV4dF9vdXQ9cyxoLmF2YWlsX291dD11LXMscyYmZC5hcnJheVNldChoLm91dHB1dCxoLm91dHB1dCxpLHMsMCksdGhpcy5vbkRhdGEoYSkpOnRoaXMub25EYXRhKGQuc2hyaW5rQnVmKGgub3V0cHV0LGgubmV4dF9vdXQpKSkpLDA9PT1oLmF2YWlsX2luJiYwPT09aC5hdmFpbF9vdXQmJihmPSEwKX13aGlsZSgoMDxoLmF2YWlsX2lufHwwPT09aC5hdmFpbF9vdXQpJiZyIT09bS5aX1NUUkVBTV9FTkQpO3JldHVybiByPT09bS5aX1NUUkVBTV9FTkQmJihuPW0uWl9GSU5JU0gpLG49PT1tLlpfRklOSVNIPyhyPWMuaW5mbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQociksdGhpcy5lbmRlZD0hMCxyPT09bS5aX09LKTpuIT09bS5aX1NZTkNfRkxVU0h8fCh0aGlzLm9uRW5kKG0uWl9PSyksIShoLmF2YWlsX291dD0wKSl9LGEucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihlKXt0aGlzLmNodW5rcy5wdXNoKGUpfSxhLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihlKXtlPT09bS5aX09LJiYoXCJzdHJpbmdcIj09PXRoaXMub3B0aW9ucy50bz90aGlzLnJlc3VsdD10aGlzLmNodW5rcy5qb2luKFwiXCIpOnRoaXMucmVzdWx0PWQuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPWUsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sci5JbmZsYXRlPWEsci5pbmZsYXRlPW8sci5pbmZsYXRlUmF3PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQ9dHx8e30pLnJhdz0hMCxvKGUsdCl9LHIudW5nemlwPW99LHtcIi4vdXRpbHMvY29tbW9uXCI6NDEsXCIuL3V0aWxzL3N0cmluZ3NcIjo0MixcIi4vemxpYi9jb25zdGFudHNcIjo0NCxcIi4vemxpYi9nemhlYWRlclwiOjQ3LFwiLi96bGliL2luZmxhdGVcIjo0OSxcIi4vemxpYi9tZXNzYWdlc1wiOjUxLFwiLi96bGliL3pzdHJlYW1cIjo1M31dLDQxOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50MTZBcnJheSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEludDMyQXJyYXk7ci5hc3NpZ249ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTt0Lmxlbmd0aDspe3ZhciByPXQuc2hpZnQoKTtpZihyKXtpZihcIm9iamVjdFwiIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKHIrXCJtdXN0IGJlIG5vbi1vYmplY3RcIik7Zm9yKHZhciBuIGluIHIpci5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09cltuXSl9fXJldHVybiBlfSxyLnNocmlua0J1Zj1mdW5jdGlvbihlLHQpe3JldHVybiBlLmxlbmd0aD09PXQ/ZTplLnN1YmFycmF5P2Uuc3ViYXJyYXkoMCx0KTooZS5sZW5ndGg9dCxlKX07dmFyIGk9e2FycmF5U2V0OmZ1bmN0aW9uKGUsdCxyLG4saSl7aWYodC5zdWJhcnJheSYmZS5zdWJhcnJheSllLnNldCh0LnN1YmFycmF5KHIscituKSxpKTtlbHNlIGZvcih2YXIgcz0wO3M8bjtzKyspZVtpK3NdPXRbcitzXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihlKXt2YXIgdCxyLG4saSxzLGE7Zm9yKHQ9bj0wLHI9ZS5sZW5ndGg7dDxyO3QrKyluKz1lW3RdLmxlbmd0aDtmb3IoYT1uZXcgVWludDhBcnJheShuKSx0PWk9MCxyPWUubGVuZ3RoO3Q8cjt0Kyspcz1lW3RdLGEuc2V0KHMsaSksaSs9cy5sZW5ndGg7cmV0dXJuIGF9fSxzPXthcnJheVNldDpmdW5jdGlvbihlLHQscixuLGkpe2Zvcih2YXIgcz0wO3M8bjtzKyspZVtpK3NdPXRbcitzXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihlKXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sZSl9fTtyLnNldFR5cGVkPWZ1bmN0aW9uKGUpe2U/KHIuQnVmOD1VaW50OEFycmF5LHIuQnVmMTY9VWludDE2QXJyYXksci5CdWYzMj1JbnQzMkFycmF5LHIuYXNzaWduKHIsaSkpOihyLkJ1Zjg9QXJyYXksci5CdWYxNj1BcnJheSxyLkJ1ZjMyPUFycmF5LHIuYXNzaWduKHIscykpfSxyLnNldFR5cGVkKG4pfSx7fV0sNDI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgaD1lKFwiLi9jb21tb25cIiksaT0hMCxzPSEwO3RyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsWzBdKX1jYXRjaChlKXtpPSExfXRyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMSkpfWNhdGNoKGUpe3M9ITF9Zm9yKHZhciB1PW5ldyBoLkJ1ZjgoMjU2KSxuPTA7bjwyNTY7bisrKXVbbl09MjUyPD1uPzY6MjQ4PD1uPzU6MjQwPD1uPzQ6MjI0PD1uPzM6MTkyPD1uPzI6MTtmdW5jdGlvbiBsKGUsdCl7aWYodDw2NTUzNyYmKGUuc3ViYXJyYXkmJnN8fCFlLnN1YmFycmF5JiZpKSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGguc2hyaW5rQnVmKGUsdCkpO2Zvcih2YXIgcj1cIlwiLG49MDtuPHQ7bisrKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIHJ9dVsyNTRdPXVbMjU0XT0xLHIuc3RyaW5nMmJ1Zj1mdW5jdGlvbihlKXt2YXIgdCxyLG4saSxzLGE9ZS5sZW5ndGgsbz0wO2ZvcihpPTA7aTxhO2krKyk1NTI5Nj09KDY0NTEyJihyPWUuY2hhckNvZGVBdChpKSkpJiZpKzE8YSYmNTYzMjA9PSg2NDUxMiYobj1lLmNoYXJDb2RlQXQoaSsxKSkpJiYocj02NTUzNisoci01NTI5Njw8MTApKyhuLTU2MzIwKSxpKyspLG8rPXI8MTI4PzE6cjwyMDQ4PzI6cjw2NTUzNj8zOjQ7Zm9yKHQ9bmV3IGguQnVmOChvKSxpPXM9MDtzPG87aSsrKTU1Mjk2PT0oNjQ1MTImKHI9ZS5jaGFyQ29kZUF0KGkpKSkmJmkrMTxhJiY1NjMyMD09KDY0NTEyJihuPWUuY2hhckNvZGVBdChpKzEpKSkmJihyPTY1NTM2KyhyLTU1Mjk2PDwxMCkrKG4tNTYzMjApLGkrKykscjwxMjg/dFtzKytdPXI6KHI8MjA0OD90W3MrK109MTkyfHI+Pj42OihyPDY1NTM2P3RbcysrXT0yMjR8cj4+PjEyOih0W3MrK109MjQwfHI+Pj4xOCx0W3MrK109MTI4fHI+Pj4xMiY2MyksdFtzKytdPTEyOHxyPj4+NiY2MyksdFtzKytdPTEyOHw2MyZyKTtyZXR1cm4gdH0sci5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBsKGUsZS5sZW5ndGgpfSxyLmJpbnN0cmluZzJidWY9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyBoLkJ1ZjgoZS5sZW5ndGgpLHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspdFtyXT1lLmNoYXJDb2RlQXQocik7cmV0dXJuIHR9LHIuYnVmMnN0cmluZz1mdW5jdGlvbihlLHQpe3ZhciByLG4saSxzLGE9dHx8ZS5sZW5ndGgsbz1uZXcgQXJyYXkoMiphKTtmb3Iocj1uPTA7cjxhOylpZigoaT1lW3IrK10pPDEyOClvW24rK109aTtlbHNlIGlmKDQ8KHM9dVtpXSkpb1tuKytdPTY1NTMzLHIrPXMtMTtlbHNle2ZvcihpJj0yPT09cz8zMTozPT09cz8xNTo3OzE8cyYmcjxhOylpPWk8PDZ8NjMmZVtyKytdLHMtLTsxPHM/b1tuKytdPTY1NTMzOmk8NjU1MzY/b1tuKytdPWk6KGktPTY1NTM2LG9bbisrXT01NTI5NnxpPj4xMCYxMDIzLG9bbisrXT01NjMyMHwxMDIzJmkpfXJldHVybiBsKG8sbil9LHIudXRmOGJvcmRlcj1mdW5jdGlvbihlLHQpe3ZhciByO2ZvcigodD10fHxlLmxlbmd0aCk+ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSxyPXQtMTswPD1yJiYxMjg9PSgxOTImZVtyXSk7KXItLTtyZXR1cm4gcjwwP3Q6MD09PXI/dDpyK3VbZVtyXV0+dD9yOnR9fSx7XCIuL2NvbW1vblwiOjQxfV0sNDM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbil7Zm9yKHZhciBpPTY1NTM1JmV8MCxzPWU+Pj4xNiY2NTUzNXwwLGE9MDswIT09cjspe2ZvcihyLT1hPTJlMzxyPzJlMzpyO3M9cysoaT1pK3RbbisrXXwwKXwwLC0tYTspO2klPTY1NTIxLHMlPTY1NTIxfXJldHVybiBpfHM8PDE2fDB9fSx7fV0sNDQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9e1pfTk9fRkxVU0g6MCxaX1BBUlRJQUxfRkxVU0g6MSxaX1NZTkNfRkxVU0g6MixaX0ZVTExfRkxVU0g6MyxaX0ZJTklTSDo0LFpfQkxPQ0s6NSxaX1RSRUVTOjYsWl9PSzowLFpfU1RSRUFNX0VORDoxLFpfTkVFRF9ESUNUOjIsWl9FUlJOTzotMSxaX1NUUkVBTV9FUlJPUjotMixaX0RBVEFfRVJST1I6LTMsWl9CVUZfRVJST1I6LTUsWl9OT19DT01QUkVTU0lPTjowLFpfQkVTVF9TUEVFRDoxLFpfQkVTVF9DT01QUkVTU0lPTjo5LFpfREVGQVVMVF9DT01QUkVTU0lPTjotMSxaX0ZJTFRFUkVEOjEsWl9IVUZGTUFOX09OTFk6MixaX1JMRTozLFpfRklYRUQ6NCxaX0RFRkFVTFRfU1RSQVRFR1k6MCxaX0JJTkFSWTowLFpfVEVYVDoxLFpfVU5LTk9XTjoyLFpfREVGTEFURUQ6OH19LHt9XSw0NTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBvPWZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9W10scj0wO3I8MjU2O3IrKyl7ZT1yO2Zvcih2YXIgbj0wO248ODtuKyspZT0xJmU/Mzk4ODI5MjM4NF5lPj4+MTplPj4+MTt0W3JdPWV9cmV0dXJuIHR9KCk7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPW8scz1uK3I7ZV49LTE7Zm9yKHZhciBhPW47YTxzO2ErKyllPWU+Pj44XmlbMjU1JihlXnRbYV0pXTtyZXR1cm4tMV5lfX0se31dLDQ2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGgsYz1lKFwiLi4vdXRpbHMvY29tbW9uXCIpLHU9ZShcIi4vdHJlZXNcIiksZD1lKFwiLi9hZGxlcjMyXCIpLHA9ZShcIi4vY3JjMzJcIiksbj1lKFwiLi9tZXNzYWdlc1wiKSxsPTAsZj00LG09MCxfPS0yLGc9LTEsYj00LGk9Mix2PTgseT05LHM9Mjg2LGE9MzAsbz0xOSx3PTIqcysxLGs9MTUseD0zLFM9MjU4LHo9Uyt4KzEsQz00MixFPTExMyxBPTEsST0yLE89MyxCPTQ7ZnVuY3Rpb24gUihlLHQpe3JldHVybiBlLm1zZz1uW3RdLHR9ZnVuY3Rpb24gVChlKXtyZXR1cm4oZTw8MSktKDQ8ZT85OjApfWZ1bmN0aW9uIEQoZSl7Zm9yKHZhciB0PWUubGVuZ3RoOzA8PS0tdDspZVt0XT0wfWZ1bmN0aW9uIEYoZSl7dmFyIHQ9ZS5zdGF0ZSxyPXQucGVuZGluZztyPmUuYXZhaWxfb3V0JiYocj1lLmF2YWlsX291dCksMCE9PXImJihjLmFycmF5U2V0KGUub3V0cHV0LHQucGVuZGluZ19idWYsdC5wZW5kaW5nX291dCxyLGUubmV4dF9vdXQpLGUubmV4dF9vdXQrPXIsdC5wZW5kaW5nX291dCs9cixlLnRvdGFsX291dCs9cixlLmF2YWlsX291dC09cix0LnBlbmRpbmctPXIsMD09PXQucGVuZGluZyYmKHQucGVuZGluZ19vdXQ9MCkpfWZ1bmN0aW9uIE4oZSx0KXt1Ll90cl9mbHVzaF9ibG9jayhlLDA8PWUuYmxvY2tfc3RhcnQ/ZS5ibG9ja19zdGFydDotMSxlLnN0cnN0YXJ0LWUuYmxvY2tfc3RhcnQsdCksZS5ibG9ja19zdGFydD1lLnN0cnN0YXJ0LEYoZS5zdHJtKX1mdW5jdGlvbiBVKGUsdCl7ZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109dH1mdW5jdGlvbiBQKGUsdCl7ZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109dD4+PjgmMjU1LGUucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPTI1NSZ0fWZ1bmN0aW9uIEwoZSx0KXt2YXIgcixuLGk9ZS5tYXhfY2hhaW5fbGVuZ3RoLHM9ZS5zdHJzdGFydCxhPWUucHJldl9sZW5ndGgsbz1lLm5pY2VfbWF0Y2gsaD1lLnN0cnN0YXJ0PmUud19zaXplLXo/ZS5zdHJzdGFydC0oZS53X3NpemUteik6MCx1PWUud2luZG93LGw9ZS53X21hc2ssZj1lLnByZXYsYz1lLnN0cnN0YXJ0K1MsZD11W3MrYS0xXSxwPXVbcythXTtlLnByZXZfbGVuZ3RoPj1lLmdvb2RfbWF0Y2gmJihpPj49Miksbz5lLmxvb2thaGVhZCYmKG89ZS5sb29rYWhlYWQpO2Rve2lmKHVbKHI9dCkrYV09PT1wJiZ1W3IrYS0xXT09PWQmJnVbcl09PT11W3NdJiZ1Wysrcl09PT11W3MrMV0pe3MrPTIscisrO2Rve313aGlsZSh1Wysrc109PT11Wysrcl0mJnVbKytzXT09PXVbKytyXSYmdVsrK3NdPT09dVsrK3JdJiZ1Wysrc109PT11Wysrcl0mJnVbKytzXT09PXVbKytyXSYmdVsrK3NdPT09dVsrK3JdJiZ1Wysrc109PT11Wysrcl0mJnVbKytzXT09PXVbKytyXSYmczxjKTtpZihuPVMtKGMtcykscz1jLVMsYTxuKXtpZihlLm1hdGNoX3N0YXJ0PXQsbzw9KGE9bikpYnJlYWs7ZD11W3MrYS0xXSxwPXVbcythXX19fXdoaWxlKCh0PWZbdCZsXSk+aCYmMCE9LS1pKTtyZXR1cm4gYTw9ZS5sb29rYWhlYWQ/YTplLmxvb2thaGVhZH1mdW5jdGlvbiBqKGUpe3ZhciB0LHIsbixpLHMsYSxvLGgsdSxsLGY9ZS53X3NpemU7ZG97aWYoaT1lLndpbmRvd19zaXplLWUubG9va2FoZWFkLWUuc3Ryc3RhcnQsZS5zdHJzdGFydD49ZisoZi16KSl7Zm9yKGMuYXJyYXlTZXQoZS53aW5kb3csZS53aW5kb3csZixmLDApLGUubWF0Y2hfc3RhcnQtPWYsZS5zdHJzdGFydC09ZixlLmJsb2NrX3N0YXJ0LT1mLHQ9cj1lLmhhc2hfc2l6ZTtuPWUuaGVhZFstLXRdLGUuaGVhZFt0XT1mPD1uP24tZjowLC0tcjspO2Zvcih0PXI9ZjtuPWUucHJldlstLXRdLGUucHJldlt0XT1mPD1uP24tZjowLC0tcjspO2krPWZ9aWYoMD09PWUuc3RybS5hdmFpbF9pbilicmVhaztpZihhPWUuc3RybSxvPWUud2luZG93LGg9ZS5zdHJzdGFydCtlLmxvb2thaGVhZCx1PWksbD12b2lkIDAsbD1hLmF2YWlsX2luLHU8bCYmKGw9dSkscj0wPT09bD8wOihhLmF2YWlsX2luLT1sLGMuYXJyYXlTZXQobyxhLmlucHV0LGEubmV4dF9pbixsLGgpLDE9PT1hLnN0YXRlLndyYXA/YS5hZGxlcj1kKGEuYWRsZXIsbyxsLGgpOjI9PT1hLnN0YXRlLndyYXAmJihhLmFkbGVyPXAoYS5hZGxlcixvLGwsaCkpLGEubmV4dF9pbis9bCxhLnRvdGFsX2luKz1sLGwpLGUubG9va2FoZWFkKz1yLGUubG9va2FoZWFkK2UuaW5zZXJ0Pj14KWZvcihzPWUuc3Ryc3RhcnQtZS5pbnNlcnQsZS5pbnNfaD1lLndpbmRvd1tzXSxlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbcysxXSkmZS5oYXNoX21hc2s7ZS5pbnNlcnQmJihlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbcyt4LTFdKSZlLmhhc2hfbWFzayxlLnByZXZbcyZlLndfbWFza109ZS5oZWFkW2UuaW5zX2hdLGUuaGVhZFtlLmluc19oXT1zLHMrKyxlLmluc2VydC0tLCEoZS5sb29rYWhlYWQrZS5pbnNlcnQ8eCkpOyk7fXdoaWxlKGUubG9va2FoZWFkPHomJjAhPT1lLnN0cm0uYXZhaWxfaW4pfWZ1bmN0aW9uIFooZSx0KXtmb3IodmFyIHIsbjs7KXtpZihlLmxvb2thaGVhZDx6KXtpZihqKGUpLGUubG9va2FoZWFkPHomJnQ9PT1sKXJldHVybiBBO2lmKDA9PT1lLmxvb2thaGVhZClicmVha31pZihyPTAsZS5sb29rYWhlYWQ+PXgmJihlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbZS5zdHJzdGFydCt4LTFdKSZlLmhhc2hfbWFzayxyPWUucHJldltlLnN0cnN0YXJ0JmUud19tYXNrXT1lLmhlYWRbZS5pbnNfaF0sZS5oZWFkW2UuaW5zX2hdPWUuc3Ryc3RhcnQpLDAhPT1yJiZlLnN0cnN0YXJ0LXI8PWUud19zaXplLXomJihlLm1hdGNoX2xlbmd0aD1MKGUscikpLGUubWF0Y2hfbGVuZ3RoPj14KWlmKG49dS5fdHJfdGFsbHkoZSxlLnN0cnN0YXJ0LWUubWF0Y2hfc3RhcnQsZS5tYXRjaF9sZW5ndGgteCksZS5sb29rYWhlYWQtPWUubWF0Y2hfbGVuZ3RoLGUubWF0Y2hfbGVuZ3RoPD1lLm1heF9sYXp5X21hdGNoJiZlLmxvb2thaGVhZD49eCl7Zm9yKGUubWF0Y2hfbGVuZ3RoLS07ZS5zdHJzdGFydCsrLGUuaW5zX2g9KGUuaW5zX2g8PGUuaGFzaF9zaGlmdF5lLndpbmRvd1tlLnN0cnN0YXJ0K3gtMV0pJmUuaGFzaF9tYXNrLHI9ZS5wcmV2W2Uuc3Ryc3RhcnQmZS53X21hc2tdPWUuaGVhZFtlLmluc19oXSxlLmhlYWRbZS5pbnNfaF09ZS5zdHJzdGFydCwwIT0tLWUubWF0Y2hfbGVuZ3RoOyk7ZS5zdHJzdGFydCsrfWVsc2UgZS5zdHJzdGFydCs9ZS5tYXRjaF9sZW5ndGgsZS5tYXRjaF9sZW5ndGg9MCxlLmluc19oPWUud2luZG93W2Uuc3Ryc3RhcnRdLGUuaW5zX2g9KGUuaW5zX2g8PGUuaGFzaF9zaGlmdF5lLndpbmRvd1tlLnN0cnN0YXJ0KzFdKSZlLmhhc2hfbWFzaztlbHNlIG49dS5fdHJfdGFsbHkoZSwwLGUud2luZG93W2Uuc3Ryc3RhcnRdKSxlLmxvb2thaGVhZC0tLGUuc3Ryc3RhcnQrKztpZihuJiYoTihlLCExKSwwPT09ZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIEF9cmV0dXJuIGUuaW5zZXJ0PWUuc3Ryc3RhcnQ8eC0xP2Uuc3Ryc3RhcnQ6eC0xLHQ9PT1mPyhOKGUsITApLDA9PT1lLnN0cm0uYXZhaWxfb3V0P086Qik6ZS5sYXN0X2xpdCYmKE4oZSwhMSksMD09PWUuc3RybS5hdmFpbF9vdXQpP0E6SX1mdW5jdGlvbiBXKGUsdCl7Zm9yKHZhciByLG4saTs7KXtpZihlLmxvb2thaGVhZDx6KXtpZihqKGUpLGUubG9va2FoZWFkPHomJnQ9PT1sKXJldHVybiBBO2lmKDA9PT1lLmxvb2thaGVhZClicmVha31pZihyPTAsZS5sb29rYWhlYWQ+PXgmJihlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbZS5zdHJzdGFydCt4LTFdKSZlLmhhc2hfbWFzayxyPWUucHJldltlLnN0cnN0YXJ0JmUud19tYXNrXT1lLmhlYWRbZS5pbnNfaF0sZS5oZWFkW2UuaW5zX2hdPWUuc3Ryc3RhcnQpLGUucHJldl9sZW5ndGg9ZS5tYXRjaF9sZW5ndGgsZS5wcmV2X21hdGNoPWUubWF0Y2hfc3RhcnQsZS5tYXRjaF9sZW5ndGg9eC0xLDAhPT1yJiZlLnByZXZfbGVuZ3RoPGUubWF4X2xhenlfbWF0Y2gmJmUuc3Ryc3RhcnQtcjw9ZS53X3NpemUteiYmKGUubWF0Y2hfbGVuZ3RoPUwoZSxyKSxlLm1hdGNoX2xlbmd0aDw9NSYmKDE9PT1lLnN0cmF0ZWd5fHxlLm1hdGNoX2xlbmd0aD09PXgmJjQwOTY8ZS5zdHJzdGFydC1lLm1hdGNoX3N0YXJ0KSYmKGUubWF0Y2hfbGVuZ3RoPXgtMSkpLGUucHJldl9sZW5ndGg+PXgmJmUubWF0Y2hfbGVuZ3RoPD1lLnByZXZfbGVuZ3RoKXtmb3IoaT1lLnN0cnN0YXJ0K2UubG9va2FoZWFkLXgsbj11Ll90cl90YWxseShlLGUuc3Ryc3RhcnQtMS1lLnByZXZfbWF0Y2gsZS5wcmV2X2xlbmd0aC14KSxlLmxvb2thaGVhZC09ZS5wcmV2X2xlbmd0aC0xLGUucHJldl9sZW5ndGgtPTI7KytlLnN0cnN0YXJ0PD1pJiYoZS5pbnNfaD0oZS5pbnNfaDw8ZS5oYXNoX3NoaWZ0XmUud2luZG93W2Uuc3Ryc3RhcnQreC0xXSkmZS5oYXNoX21hc2sscj1lLnByZXZbZS5zdHJzdGFydCZlLndfbWFza109ZS5oZWFkW2UuaW5zX2hdLGUuaGVhZFtlLmluc19oXT1lLnN0cnN0YXJ0KSwwIT0tLWUucHJldl9sZW5ndGg7KTtpZihlLm1hdGNoX2F2YWlsYWJsZT0wLGUubWF0Y2hfbGVuZ3RoPXgtMSxlLnN0cnN0YXJ0KyssbiYmKE4oZSwhMSksMD09PWUuc3RybS5hdmFpbF9vdXQpKXJldHVybiBBfWVsc2UgaWYoZS5tYXRjaF9hdmFpbGFibGUpe2lmKChuPXUuX3RyX3RhbGx5KGUsMCxlLndpbmRvd1tlLnN0cnN0YXJ0LTFdKSkmJk4oZSwhMSksZS5zdHJzdGFydCsrLGUubG9va2FoZWFkLS0sMD09PWUuc3RybS5hdmFpbF9vdXQpcmV0dXJuIEF9ZWxzZSBlLm1hdGNoX2F2YWlsYWJsZT0xLGUuc3Ryc3RhcnQrKyxlLmxvb2thaGVhZC0tfXJldHVybiBlLm1hdGNoX2F2YWlsYWJsZSYmKG49dS5fdHJfdGFsbHkoZSwwLGUud2luZG93W2Uuc3Ryc3RhcnQtMV0pLGUubWF0Y2hfYXZhaWxhYmxlPTApLGUuaW5zZXJ0PWUuc3Ryc3RhcnQ8eC0xP2Uuc3Ryc3RhcnQ6eC0xLHQ9PT1mPyhOKGUsITApLDA9PT1lLnN0cm0uYXZhaWxfb3V0P086Qik6ZS5sYXN0X2xpdCYmKE4oZSwhMSksMD09PWUuc3RybS5hdmFpbF9vdXQpP0E6SX1mdW5jdGlvbiBNKGUsdCxyLG4saSl7dGhpcy5nb29kX2xlbmd0aD1lLHRoaXMubWF4X2xhenk9dCx0aGlzLm5pY2VfbGVuZ3RoPXIsdGhpcy5tYXhfY2hhaW49bix0aGlzLmZ1bmM9aX1mdW5jdGlvbiBIKCl7dGhpcy5zdHJtPW51bGwsdGhpcy5zdGF0dXM9MCx0aGlzLnBlbmRpbmdfYnVmPW51bGwsdGhpcy5wZW5kaW5nX2J1Zl9zaXplPTAsdGhpcy5wZW5kaW5nX291dD0wLHRoaXMucGVuZGluZz0wLHRoaXMud3JhcD0wLHRoaXMuZ3poZWFkPW51bGwsdGhpcy5nemluZGV4PTAsdGhpcy5tZXRob2Q9dix0aGlzLmxhc3RfZmx1c2g9LTEsdGhpcy53X3NpemU9MCx0aGlzLndfYml0cz0wLHRoaXMud19tYXNrPTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLndpbmRvd19zaXplPTAsdGhpcy5wcmV2PW51bGwsdGhpcy5oZWFkPW51bGwsdGhpcy5pbnNfaD0wLHRoaXMuaGFzaF9zaXplPTAsdGhpcy5oYXNoX2JpdHM9MCx0aGlzLmhhc2hfbWFzaz0wLHRoaXMuaGFzaF9zaGlmdD0wLHRoaXMuYmxvY2tfc3RhcnQ9MCx0aGlzLm1hdGNoX2xlbmd0aD0wLHRoaXMucHJldl9tYXRjaD0wLHRoaXMubWF0Y2hfYXZhaWxhYmxlPTAsdGhpcy5zdHJzdGFydD0wLHRoaXMubWF0Y2hfc3RhcnQ9MCx0aGlzLmxvb2thaGVhZD0wLHRoaXMucHJldl9sZW5ndGg9MCx0aGlzLm1heF9jaGFpbl9sZW5ndGg9MCx0aGlzLm1heF9sYXp5X21hdGNoPTAsdGhpcy5sZXZlbD0wLHRoaXMuc3RyYXRlZ3k9MCx0aGlzLmdvb2RfbWF0Y2g9MCx0aGlzLm5pY2VfbWF0Y2g9MCx0aGlzLmR5bl9sdHJlZT1uZXcgYy5CdWYxNigyKncpLHRoaXMuZHluX2R0cmVlPW5ldyBjLkJ1ZjE2KDIqKDIqYSsxKSksdGhpcy5ibF90cmVlPW5ldyBjLkJ1ZjE2KDIqKDIqbysxKSksRCh0aGlzLmR5bl9sdHJlZSksRCh0aGlzLmR5bl9kdHJlZSksRCh0aGlzLmJsX3RyZWUpLHRoaXMubF9kZXNjPW51bGwsdGhpcy5kX2Rlc2M9bnVsbCx0aGlzLmJsX2Rlc2M9bnVsbCx0aGlzLmJsX2NvdW50PW5ldyBjLkJ1ZjE2KGsrMSksdGhpcy5oZWFwPW5ldyBjLkJ1ZjE2KDIqcysxKSxEKHRoaXMuaGVhcCksdGhpcy5oZWFwX2xlbj0wLHRoaXMuaGVhcF9tYXg9MCx0aGlzLmRlcHRoPW5ldyBjLkJ1ZjE2KDIqcysxKSxEKHRoaXMuZGVwdGgpLHRoaXMubF9idWY9MCx0aGlzLmxpdF9idWZzaXplPTAsdGhpcy5sYXN0X2xpdD0wLHRoaXMuZF9idWY9MCx0aGlzLm9wdF9sZW49MCx0aGlzLnN0YXRpY19sZW49MCx0aGlzLm1hdGNoZXM9MCx0aGlzLmluc2VydD0wLHRoaXMuYmlfYnVmPTAsdGhpcy5iaV92YWxpZD0wfWZ1bmN0aW9uIEcoZSl7dmFyIHQ7cmV0dXJuIGUmJmUuc3RhdGU/KGUudG90YWxfaW49ZS50b3RhbF9vdXQ9MCxlLmRhdGFfdHlwZT1pLCh0PWUuc3RhdGUpLnBlbmRpbmc9MCx0LnBlbmRpbmdfb3V0PTAsdC53cmFwPDAmJih0LndyYXA9LXQud3JhcCksdC5zdGF0dXM9dC53cmFwP0M6RSxlLmFkbGVyPTI9PT10LndyYXA/MDoxLHQubGFzdF9mbHVzaD1sLHUuX3RyX2luaXQodCksbSk6UihlLF8pfWZ1bmN0aW9uIEsoZSl7dmFyIHQ9RyhlKTtyZXR1cm4gdD09PW0mJmZ1bmN0aW9uKGUpe2Uud2luZG93X3NpemU9MiplLndfc2l6ZSxEKGUuaGVhZCksZS5tYXhfbGF6eV9tYXRjaD1oW2UubGV2ZWxdLm1heF9sYXp5LGUuZ29vZF9tYXRjaD1oW2UubGV2ZWxdLmdvb2RfbGVuZ3RoLGUubmljZV9tYXRjaD1oW2UubGV2ZWxdLm5pY2VfbGVuZ3RoLGUubWF4X2NoYWluX2xlbmd0aD1oW2UubGV2ZWxdLm1heF9jaGFpbixlLnN0cnN0YXJ0PTAsZS5ibG9ja19zdGFydD0wLGUubG9va2FoZWFkPTAsZS5pbnNlcnQ9MCxlLm1hdGNoX2xlbmd0aD1lLnByZXZfbGVuZ3RoPXgtMSxlLm1hdGNoX2F2YWlsYWJsZT0wLGUuaW5zX2g9MH0oZS5zdGF0ZSksdH1mdW5jdGlvbiBZKGUsdCxyLG4saSxzKXtpZighZSlyZXR1cm4gXzt2YXIgYT0xO2lmKHQ9PT1nJiYodD02KSxuPDA/KGE9MCxuPS1uKToxNTxuJiYoYT0yLG4tPTE2KSxpPDF8fHk8aXx8ciE9PXZ8fG48OHx8MTU8bnx8dDwwfHw5PHR8fHM8MHx8YjxzKXJldHVybiBSKGUsXyk7OD09PW4mJihuPTkpO3ZhciBvPW5ldyBIO3JldHVybihlLnN0YXRlPW8pLnN0cm09ZSxvLndyYXA9YSxvLmd6aGVhZD1udWxsLG8ud19iaXRzPW4sby53X3NpemU9MTw8by53X2JpdHMsby53X21hc2s9by53X3NpemUtMSxvLmhhc2hfYml0cz1pKzcsby5oYXNoX3NpemU9MTw8by5oYXNoX2JpdHMsby5oYXNoX21hc2s9by5oYXNoX3NpemUtMSxvLmhhc2hfc2hpZnQ9fn4oKG8uaGFzaF9iaXRzK3gtMSkveCksby53aW5kb3c9bmV3IGMuQnVmOCgyKm8ud19zaXplKSxvLmhlYWQ9bmV3IGMuQnVmMTYoby5oYXNoX3NpemUpLG8ucHJldj1uZXcgYy5CdWYxNihvLndfc2l6ZSksby5saXRfYnVmc2l6ZT0xPDxpKzYsby5wZW5kaW5nX2J1Zl9zaXplPTQqby5saXRfYnVmc2l6ZSxvLnBlbmRpbmdfYnVmPW5ldyBjLkJ1Zjgoby5wZW5kaW5nX2J1Zl9zaXplKSxvLmRfYnVmPTEqby5saXRfYnVmc2l6ZSxvLmxfYnVmPTMqby5saXRfYnVmc2l6ZSxvLmxldmVsPXQsby5zdHJhdGVneT1zLG8ubWV0aG9kPXIsSyhlKX1oPVtuZXcgTSgwLDAsMCwwLGZ1bmN0aW9uKGUsdCl7dmFyIHI9NjU1MzU7Zm9yKHI+ZS5wZW5kaW5nX2J1Zl9zaXplLTUmJihyPWUucGVuZGluZ19idWZfc2l6ZS01KTs7KXtpZihlLmxvb2thaGVhZDw9MSl7aWYoaihlKSwwPT09ZS5sb29rYWhlYWQmJnQ9PT1sKXJldHVybiBBO2lmKDA9PT1lLmxvb2thaGVhZClicmVha31lLnN0cnN0YXJ0Kz1lLmxvb2thaGVhZCxlLmxvb2thaGVhZD0wO3ZhciBuPWUuYmxvY2tfc3RhcnQrcjtpZigoMD09PWUuc3Ryc3RhcnR8fGUuc3Ryc3RhcnQ+PW4pJiYoZS5sb29rYWhlYWQ9ZS5zdHJzdGFydC1uLGUuc3Ryc3RhcnQ9bixOKGUsITEpLDA9PT1lLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gQTtpZihlLnN0cnN0YXJ0LWUuYmxvY2tfc3RhcnQ+PWUud19zaXplLXomJihOKGUsITEpLDA9PT1lLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gQX1yZXR1cm4gZS5pbnNlcnQ9MCx0PT09Zj8oTihlLCEwKSwwPT09ZS5zdHJtLmF2YWlsX291dD9POkIpOihlLnN0cnN0YXJ0PmUuYmxvY2tfc3RhcnQmJihOKGUsITEpLGUuc3RybS5hdmFpbF9vdXQpLEEpfSksbmV3IE0oNCw0LDgsNCxaKSxuZXcgTSg0LDUsMTYsOCxaKSxuZXcgTSg0LDYsMzIsMzIsWiksbmV3IE0oNCw0LDE2LDE2LFcpLG5ldyBNKDgsMTYsMzIsMzIsVyksbmV3IE0oOCwxNiwxMjgsMTI4LFcpLG5ldyBNKDgsMzIsMTI4LDI1NixXKSxuZXcgTSgzMiwxMjgsMjU4LDEwMjQsVyksbmV3IE0oMzIsMjU4LDI1OCw0MDk2LFcpXSxyLmRlZmxhdGVJbml0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFkoZSx0LHYsMTUsOCwwKX0sci5kZWZsYXRlSW5pdDI9WSxyLmRlZmxhdGVSZXNldD1LLHIuZGVmbGF0ZVJlc2V0S2VlcD1HLHIuZGVmbGF0ZVNldEhlYWRlcj1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLnN0YXRlPzIhPT1lLnN0YXRlLndyYXA/XzooZS5zdGF0ZS5nemhlYWQ9dCxtKTpffSxyLmRlZmxhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGkscztpZighZXx8IWUuc3RhdGV8fDU8dHx8dDwwKXJldHVybiBlP1IoZSxfKTpfO2lmKG49ZS5zdGF0ZSwhZS5vdXRwdXR8fCFlLmlucHV0JiYwIT09ZS5hdmFpbF9pbnx8NjY2PT09bi5zdGF0dXMmJnQhPT1mKXJldHVybiBSKGUsMD09PWUuYXZhaWxfb3V0Py01Ol8pO2lmKG4uc3RybT1lLHI9bi5sYXN0X2ZsdXNoLG4ubGFzdF9mbHVzaD10LG4uc3RhdHVzPT09QylpZigyPT09bi53cmFwKWUuYWRsZXI9MCxVKG4sMzEpLFUobiwxMzkpLFUobiw4KSxuLmd6aGVhZD8oVShuLChuLmd6aGVhZC50ZXh0PzE6MCkrKG4uZ3poZWFkLmhjcmM/MjowKSsobi5nemhlYWQuZXh0cmE/NDowKSsobi5nemhlYWQubmFtZT84OjApKyhuLmd6aGVhZC5jb21tZW50PzE2OjApKSxVKG4sMjU1Jm4uZ3poZWFkLnRpbWUpLFUobixuLmd6aGVhZC50aW1lPj44JjI1NSksVShuLG4uZ3poZWFkLnRpbWU+PjE2JjI1NSksVShuLG4uZ3poZWFkLnRpbWU+PjI0JjI1NSksVShuLDk9PT1uLmxldmVsPzI6Mjw9bi5zdHJhdGVneXx8bi5sZXZlbDwyPzQ6MCksVShuLDI1NSZuLmd6aGVhZC5vcyksbi5nemhlYWQuZXh0cmEmJm4uZ3poZWFkLmV4dHJhLmxlbmd0aCYmKFUobiwyNTUmbi5nemhlYWQuZXh0cmEubGVuZ3RoKSxVKG4sbi5nemhlYWQuZXh0cmEubGVuZ3RoPj44JjI1NSkpLG4uZ3poZWFkLmhjcmMmJihlLmFkbGVyPXAoZS5hZGxlcixuLnBlbmRpbmdfYnVmLG4ucGVuZGluZywwKSksbi5nemluZGV4PTAsbi5zdGF0dXM9NjkpOihVKG4sMCksVShuLDApLFUobiwwKSxVKG4sMCksVShuLDApLFUobiw5PT09bi5sZXZlbD8yOjI8PW4uc3RyYXRlZ3l8fG4ubGV2ZWw8Mj80OjApLFUobiwzKSxuLnN0YXR1cz1FKTtlbHNle3ZhciBhPXYrKG4ud19iaXRzLTg8PDQpPDw4O2F8PSgyPD1uLnN0cmF0ZWd5fHxuLmxldmVsPDI/MDpuLmxldmVsPDY/MTo2PT09bi5sZXZlbD8yOjMpPDw2LDAhPT1uLnN0cnN0YXJ0JiYoYXw9MzIpLGErPTMxLWElMzEsbi5zdGF0dXM9RSxQKG4sYSksMCE9PW4uc3Ryc3RhcnQmJihQKG4sZS5hZGxlcj4+PjE2KSxQKG4sNjU1MzUmZS5hZGxlcikpLGUuYWRsZXI9MX1pZig2OT09PW4uc3RhdHVzKWlmKG4uZ3poZWFkLmV4dHJhKXtmb3IoaT1uLnBlbmRpbmc7bi5nemluZGV4PCg2NTUzNSZuLmd6aGVhZC5leHRyYS5sZW5ndGgpJiYobi5wZW5kaW5nIT09bi5wZW5kaW5nX2J1Zl9zaXplfHwobi5nemhlYWQuaGNyYyYmbi5wZW5kaW5nPmkmJihlLmFkbGVyPXAoZS5hZGxlcixuLnBlbmRpbmdfYnVmLG4ucGVuZGluZy1pLGkpKSxGKGUpLGk9bi5wZW5kaW5nLG4ucGVuZGluZyE9PW4ucGVuZGluZ19idWZfc2l6ZSkpOylVKG4sMjU1Jm4uZ3poZWFkLmV4dHJhW24uZ3ppbmRleF0pLG4uZ3ppbmRleCsrO24uZ3poZWFkLmhjcmMmJm4ucGVuZGluZz5pJiYoZS5hZGxlcj1wKGUuYWRsZXIsbi5wZW5kaW5nX2J1ZixuLnBlbmRpbmctaSxpKSksbi5nemluZGV4PT09bi5nemhlYWQuZXh0cmEubGVuZ3RoJiYobi5nemluZGV4PTAsbi5zdGF0dXM9NzMpfWVsc2Ugbi5zdGF0dXM9NzM7aWYoNzM9PT1uLnN0YXR1cylpZihuLmd6aGVhZC5uYW1lKXtpPW4ucGVuZGluZztkb3tpZihuLnBlbmRpbmc9PT1uLnBlbmRpbmdfYnVmX3NpemUmJihuLmd6aGVhZC5oY3JjJiZuLnBlbmRpbmc+aSYmKGUuYWRsZXI9cChlLmFkbGVyLG4ucGVuZGluZ19idWYsbi5wZW5kaW5nLWksaSkpLEYoZSksaT1uLnBlbmRpbmcsbi5wZW5kaW5nPT09bi5wZW5kaW5nX2J1Zl9zaXplKSl7cz0xO2JyZWFrfXM9bi5nemluZGV4PG4uZ3poZWFkLm5hbWUubGVuZ3RoPzI1NSZuLmd6aGVhZC5uYW1lLmNoYXJDb2RlQXQobi5nemluZGV4KyspOjAsVShuLHMpfXdoaWxlKDAhPT1zKTtuLmd6aGVhZC5oY3JjJiZuLnBlbmRpbmc+aSYmKGUuYWRsZXI9cChlLmFkbGVyLG4ucGVuZGluZ19idWYsbi5wZW5kaW5nLWksaSkpLDA9PT1zJiYobi5nemluZGV4PTAsbi5zdGF0dXM9OTEpfWVsc2Ugbi5zdGF0dXM9OTE7aWYoOTE9PT1uLnN0YXR1cylpZihuLmd6aGVhZC5jb21tZW50KXtpPW4ucGVuZGluZztkb3tpZihuLnBlbmRpbmc9PT1uLnBlbmRpbmdfYnVmX3NpemUmJihuLmd6aGVhZC5oY3JjJiZuLnBlbmRpbmc+aSYmKGUuYWRsZXI9cChlLmFkbGVyLG4ucGVuZGluZ19idWYsbi5wZW5kaW5nLWksaSkpLEYoZSksaT1uLnBlbmRpbmcsbi5wZW5kaW5nPT09bi5wZW5kaW5nX2J1Zl9zaXplKSl7cz0xO2JyZWFrfXM9bi5nemluZGV4PG4uZ3poZWFkLmNvbW1lbnQubGVuZ3RoPzI1NSZuLmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQobi5nemluZGV4KyspOjAsVShuLHMpfXdoaWxlKDAhPT1zKTtuLmd6aGVhZC5oY3JjJiZuLnBlbmRpbmc+aSYmKGUuYWRsZXI9cChlLmFkbGVyLG4ucGVuZGluZ19idWYsbi5wZW5kaW5nLWksaSkpLDA9PT1zJiYobi5zdGF0dXM9MTAzKX1lbHNlIG4uc3RhdHVzPTEwMztpZigxMDM9PT1uLnN0YXR1cyYmKG4uZ3poZWFkLmhjcmM/KG4ucGVuZGluZysyPm4ucGVuZGluZ19idWZfc2l6ZSYmRihlKSxuLnBlbmRpbmcrMjw9bi5wZW5kaW5nX2J1Zl9zaXplJiYoVShuLDI1NSZlLmFkbGVyKSxVKG4sZS5hZGxlcj4+OCYyNTUpLGUuYWRsZXI9MCxuLnN0YXR1cz1FKSk6bi5zdGF0dXM9RSksMCE9PW4ucGVuZGluZyl7aWYoRihlKSwwPT09ZS5hdmFpbF9vdXQpcmV0dXJuIG4ubGFzdF9mbHVzaD0tMSxtfWVsc2UgaWYoMD09PWUuYXZhaWxfaW4mJlQodCk8PVQocikmJnQhPT1mKXJldHVybiBSKGUsLTUpO2lmKDY2Nj09PW4uc3RhdHVzJiYwIT09ZS5hdmFpbF9pbilyZXR1cm4gUihlLC01KTtpZigwIT09ZS5hdmFpbF9pbnx8MCE9PW4ubG9va2FoZWFkfHx0IT09bCYmNjY2IT09bi5zdGF0dXMpe3ZhciBvPTI9PT1uLnN0cmF0ZWd5P2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciByOzspe2lmKDA9PT1lLmxvb2thaGVhZCYmKGooZSksMD09PWUubG9va2FoZWFkKSl7aWYodD09PWwpcmV0dXJuIEE7YnJlYWt9aWYoZS5tYXRjaF9sZW5ndGg9MCxyPXUuX3RyX3RhbGx5KGUsMCxlLndpbmRvd1tlLnN0cnN0YXJ0XSksZS5sb29rYWhlYWQtLSxlLnN0cnN0YXJ0KyssciYmKE4oZSwhMSksMD09PWUuc3RybS5hdmFpbF9vdXQpKXJldHVybiBBfXJldHVybiBlLmluc2VydD0wLHQ9PT1mPyhOKGUsITApLDA9PT1lLnN0cm0uYXZhaWxfb3V0P086Qik6ZS5sYXN0X2xpdCYmKE4oZSwhMSksMD09PWUuc3RybS5hdmFpbF9vdXQpP0E6SX0obix0KTozPT09bi5zdHJhdGVneT9mdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGkscyxhPWUud2luZG93Ozspe2lmKGUubG9va2FoZWFkPD1TKXtpZihqKGUpLGUubG9va2FoZWFkPD1TJiZ0PT09bClyZXR1cm4gQTtpZigwPT09ZS5sb29rYWhlYWQpYnJlYWt9aWYoZS5tYXRjaF9sZW5ndGg9MCxlLmxvb2thaGVhZD49eCYmMDxlLnN0cnN0YXJ0JiYobj1hW2k9ZS5zdHJzdGFydC0xXSk9PT1hWysraV0mJm49PT1hWysraV0mJm49PT1hWysraV0pe3M9ZS5zdHJzdGFydCtTO2Rve313aGlsZShuPT09YVsrK2ldJiZuPT09YVsrK2ldJiZuPT09YVsrK2ldJiZuPT09YVsrK2ldJiZuPT09YVsrK2ldJiZuPT09YVsrK2ldJiZuPT09YVsrK2ldJiZuPT09YVsrK2ldJiZpPHMpO2UubWF0Y2hfbGVuZ3RoPVMtKHMtaSksZS5tYXRjaF9sZW5ndGg+ZS5sb29rYWhlYWQmJihlLm1hdGNoX2xlbmd0aD1lLmxvb2thaGVhZCl9aWYoZS5tYXRjaF9sZW5ndGg+PXg/KHI9dS5fdHJfdGFsbHkoZSwxLGUubWF0Y2hfbGVuZ3RoLXgpLGUubG9va2FoZWFkLT1lLm1hdGNoX2xlbmd0aCxlLnN0cnN0YXJ0Kz1lLm1hdGNoX2xlbmd0aCxlLm1hdGNoX2xlbmd0aD0wKToocj11Ll90cl90YWxseShlLDAsZS53aW5kb3dbZS5zdHJzdGFydF0pLGUubG9va2FoZWFkLS0sZS5zdHJzdGFydCsrKSxyJiYoTihlLCExKSwwPT09ZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIEF9cmV0dXJuIGUuaW5zZXJ0PTAsdD09PWY/KE4oZSwhMCksMD09PWUuc3RybS5hdmFpbF9vdXQ/TzpCKTplLmxhc3RfbGl0JiYoTihlLCExKSwwPT09ZS5zdHJtLmF2YWlsX291dCk/QTpJfShuLHQpOmhbbi5sZXZlbF0uZnVuYyhuLHQpO2lmKG8hPT1PJiZvIT09Qnx8KG4uc3RhdHVzPTY2Niksbz09PUF8fG89PT1PKXJldHVybiAwPT09ZS5hdmFpbF9vdXQmJihuLmxhc3RfZmx1c2g9LTEpLG07aWYobz09PUkmJigxPT09dD91Ll90cl9hbGlnbihuKTo1IT09dCYmKHUuX3RyX3N0b3JlZF9ibG9jayhuLDAsMCwhMSksMz09PXQmJihEKG4uaGVhZCksMD09PW4ubG9va2FoZWFkJiYobi5zdHJzdGFydD0wLG4uYmxvY2tfc3RhcnQ9MCxuLmluc2VydD0wKSkpLEYoZSksMD09PWUuYXZhaWxfb3V0KSlyZXR1cm4gbi5sYXN0X2ZsdXNoPS0xLG19cmV0dXJuIHQhPT1mP206bi53cmFwPD0wPzE6KDI9PT1uLndyYXA/KFUobiwyNTUmZS5hZGxlciksVShuLGUuYWRsZXI+PjgmMjU1KSxVKG4sZS5hZGxlcj4+MTYmMjU1KSxVKG4sZS5hZGxlcj4+MjQmMjU1KSxVKG4sMjU1JmUudG90YWxfaW4pLFUobixlLnRvdGFsX2luPj44JjI1NSksVShuLGUudG90YWxfaW4+PjE2JjI1NSksVShuLGUudG90YWxfaW4+PjI0JjI1NSkpOihQKG4sZS5hZGxlcj4+PjE2KSxQKG4sNjU1MzUmZS5hZGxlcikpLEYoZSksMDxuLndyYXAmJihuLndyYXA9LW4ud3JhcCksMCE9PW4ucGVuZGluZz9tOjEpfSxyLmRlZmxhdGVFbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGUmJmUuc3RhdGU/KHQ9ZS5zdGF0ZS5zdGF0dXMpIT09QyYmNjkhPT10JiY3MyE9PXQmJjkxIT09dCYmMTAzIT09dCYmdCE9PUUmJjY2NiE9PXQ/UihlLF8pOihlLnN0YXRlPW51bGwsdD09PUU/UihlLC0zKTptKTpffSxyLmRlZmxhdGVTZXREaWN0aW9uYXJ5PWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpLHMsYSxvLGgsdSxsPXQubGVuZ3RoO2lmKCFlfHwhZS5zdGF0ZSlyZXR1cm4gXztpZigyPT09KHM9KHI9ZS5zdGF0ZSkud3JhcCl8fDE9PT1zJiZyLnN0YXR1cyE9PUN8fHIubG9va2FoZWFkKXJldHVybiBfO2ZvcigxPT09cyYmKGUuYWRsZXI9ZChlLmFkbGVyLHQsbCwwKSksci53cmFwPTAsbD49ci53X3NpemUmJigwPT09cyYmKEQoci5oZWFkKSxyLnN0cnN0YXJ0PTAsci5ibG9ja19zdGFydD0wLHIuaW5zZXJ0PTApLHU9bmV3IGMuQnVmOChyLndfc2l6ZSksYy5hcnJheVNldCh1LHQsbC1yLndfc2l6ZSxyLndfc2l6ZSwwKSx0PXUsbD1yLndfc2l6ZSksYT1lLmF2YWlsX2luLG89ZS5uZXh0X2luLGg9ZS5pbnB1dCxlLmF2YWlsX2luPWwsZS5uZXh0X2luPTAsZS5pbnB1dD10LGoocik7ci5sb29rYWhlYWQ+PXg7KXtmb3Iobj1yLnN0cnN0YXJ0LGk9ci5sb29rYWhlYWQtKHgtMSk7ci5pbnNfaD0oci5pbnNfaDw8ci5oYXNoX3NoaWZ0XnIud2luZG93W24reC0xXSkmci5oYXNoX21hc2ssci5wcmV2W24mci53X21hc2tdPXIuaGVhZFtyLmluc19oXSxyLmhlYWRbci5pbnNfaF09bixuKyssLS1pOyk7ci5zdHJzdGFydD1uLHIubG9va2FoZWFkPXgtMSxqKHIpfXJldHVybiByLnN0cnN0YXJ0Kz1yLmxvb2thaGVhZCxyLmJsb2NrX3N0YXJ0PXIuc3Ryc3RhcnQsci5pbnNlcnQ9ci5sb29rYWhlYWQsci5sb29rYWhlYWQ9MCxyLm1hdGNoX2xlbmd0aD1yLnByZXZfbGVuZ3RoPXgtMSxyLm1hdGNoX2F2YWlsYWJsZT0wLGUubmV4dF9pbj1vLGUuaW5wdXQ9aCxlLmF2YWlsX2luPWEsci53cmFwPXMsbX0sci5kZWZsYXRlSW5mbz1cInBha28gZGVmbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdClcIn0se1wiLi4vdXRpbHMvY29tbW9uXCI6NDEsXCIuL2FkbGVyMzJcIjo0MyxcIi4vY3JjMzJcIjo0NSxcIi4vbWVzc2FnZXNcIjo1MSxcIi4vdHJlZXNcIjo1Mn1dLDQ3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy50ZXh0PTAsdGhpcy50aW1lPTAsdGhpcy54ZmxhZ3M9MCx0aGlzLm9zPTAsdGhpcy5leHRyYT1udWxsLHRoaXMuZXh0cmFfbGVuPTAsdGhpcy5uYW1lPVwiXCIsdGhpcy5jb21tZW50PVwiXCIsdGhpcy5oY3JjPTAsdGhpcy5kb25lPSExfX0se31dLDQ4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpLHMsYSxvLGgsdSxsLGYsYyxkLHAsbSxfLGcsYix2LHksdyxrLHgsUyx6LEM7cj1lLnN0YXRlLG49ZS5uZXh0X2luLHo9ZS5pbnB1dCxpPW4rKGUuYXZhaWxfaW4tNSkscz1lLm5leHRfb3V0LEM9ZS5vdXRwdXQsYT1zLSh0LWUuYXZhaWxfb3V0KSxvPXMrKGUuYXZhaWxfb3V0LTI1NyksaD1yLmRtYXgsdT1yLndzaXplLGw9ci53aGF2ZSxmPXIud25leHQsYz1yLndpbmRvdyxkPXIuaG9sZCxwPXIuYml0cyxtPXIubGVuY29kZSxfPXIuZGlzdGNvZGUsZz0oMTw8ci5sZW5iaXRzKS0xLGI9KDE8PHIuZGlzdGJpdHMpLTE7ZTpkb3twPDE1JiYoZCs9eltuKytdPDxwLHArPTgsZCs9eltuKytdPDxwLHArPTgpLHY9bVtkJmddO3Q6Zm9yKDs7KXtpZihkPj4+PXk9dj4+PjI0LHAtPXksMD09PSh5PXY+Pj4xNiYyNTUpKUNbcysrXT02NTUzNSZ2O2Vsc2V7aWYoISgxNiZ5KSl7aWYoMD09KDY0JnkpKXt2PW1bKDY1NTM1JnYpKyhkJigxPDx5KS0xKV07Y29udGludWUgdH1pZigzMiZ5KXtyLm1vZGU9MTI7YnJlYWsgZX1lLm1zZz1cImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZVwiLHIubW9kZT0zMDticmVhayBlfXc9NjU1MzUmdiwoeSY9MTUpJiYocDx5JiYoZCs9eltuKytdPDxwLHArPTgpLHcrPWQmKDE8PHkpLTEsZD4+Pj15LHAtPXkpLHA8MTUmJihkKz16W24rK108PHAscCs9OCxkKz16W24rK108PHAscCs9OCksdj1fW2QmYl07cjpmb3IoOzspe2lmKGQ+Pj49eT12Pj4+MjQscC09eSwhKDE2Jih5PXY+Pj4xNiYyNTUpKSl7aWYoMD09KDY0JnkpKXt2PV9bKDY1NTM1JnYpKyhkJigxPDx5KS0xKV07Y29udGludWUgcn1lLm1zZz1cImludmFsaWQgZGlzdGFuY2UgY29kZVwiLHIubW9kZT0zMDticmVhayBlfWlmKGs9NjU1MzUmdixwPCh5Jj0xNSkmJihkKz16W24rK108PHAsKHArPTgpPHkmJihkKz16W24rK108PHAscCs9OCkpLGg8KGsrPWQmKDE8PHkpLTEpKXtlLm1zZz1cImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrXCIsci5tb2RlPTMwO2JyZWFrIGV9aWYoZD4+Pj15LHAtPXksKHk9cy1hKTxrKXtpZihsPCh5PWsteSkmJnIuc2FuZSl7ZS5tc2c9XCJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFja1wiLHIubW9kZT0zMDticmVhayBlfWlmKFM9YywoeD0wKT09PWYpe2lmKHgrPXUteSx5PHcpe2Zvcih3LT15O0NbcysrXT1jW3grK10sLS15Oyk7eD1zLWssUz1DfX1lbHNlIGlmKGY8eSl7aWYoeCs9dStmLXksKHktPWYpPHcpe2Zvcih3LT15O0NbcysrXT1jW3grK10sLS15Oyk7aWYoeD0wLGY8dyl7Zm9yKHctPXk9ZjtDW3MrK109Y1t4KytdLC0teTspO3g9cy1rLFM9Q319fWVsc2UgaWYoeCs9Zi15LHk8dyl7Zm9yKHctPXk7Q1tzKytdPWNbeCsrXSwtLXk7KTt4PXMtayxTPUN9Zm9yKDsyPHc7KUNbcysrXT1TW3grK10sQ1tzKytdPVNbeCsrXSxDW3MrK109U1t4KytdLHctPTM7dyYmKENbcysrXT1TW3grK10sMTx3JiYoQ1tzKytdPVNbeCsrXSkpfWVsc2V7Zm9yKHg9cy1rO0NbcysrXT1DW3grK10sQ1tzKytdPUNbeCsrXSxDW3MrK109Q1t4KytdLDI8KHctPTMpOyk7dyYmKENbcysrXT1DW3grK10sMTx3JiYoQ1tzKytdPUNbeCsrXSkpfWJyZWFrfX1icmVha319d2hpbGUobjxpJiZzPG8pO24tPXc9cD4+MyxkJj0oMTw8KHAtPXc8PDMpKS0xLGUubmV4dF9pbj1uLGUubmV4dF9vdXQ9cyxlLmF2YWlsX2luPW48aT9pLW4rNTo1LShuLWkpLGUuYXZhaWxfb3V0PXM8bz9vLXMrMjU3OjI1Ny0ocy1vKSxyLmhvbGQ9ZCxyLmJpdHM9cH19LHt9XSw0OTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBJPWUoXCIuLi91dGlscy9jb21tb25cIiksTz1lKFwiLi9hZGxlcjMyXCIpLEI9ZShcIi4vY3JjMzJcIiksUj1lKFwiLi9pbmZmYXN0XCIpLFQ9ZShcIi4vaW5mdHJlZXNcIiksRD0xLEY9MixOPTAsVT0tMixQPTEsbj04NTIsaT01OTI7ZnVuY3Rpb24gTChlKXtyZXR1cm4oZT4+PjI0JjI1NSkrKGU+Pj44JjY1MjgwKSsoKDY1MjgwJmUpPDw4KSsoKDI1NSZlKTw8MjQpfWZ1bmN0aW9uIHMoKXt0aGlzLm1vZGU9MCx0aGlzLmxhc3Q9ITEsdGhpcy53cmFwPTAsdGhpcy5oYXZlZGljdD0hMSx0aGlzLmZsYWdzPTAsdGhpcy5kbWF4PTAsdGhpcy5jaGVjaz0wLHRoaXMudG90YWw9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLndiaXRzPTAsdGhpcy53c2l6ZT0wLHRoaXMud2hhdmU9MCx0aGlzLnduZXh0PTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLmhvbGQ9MCx0aGlzLmJpdHM9MCx0aGlzLmxlbmd0aD0wLHRoaXMub2Zmc2V0PTAsdGhpcy5leHRyYT0wLHRoaXMubGVuY29kZT1udWxsLHRoaXMuZGlzdGNvZGU9bnVsbCx0aGlzLmxlbmJpdHM9MCx0aGlzLmRpc3RiaXRzPTAsdGhpcy5uY29kZT0wLHRoaXMubmxlbj0wLHRoaXMubmRpc3Q9MCx0aGlzLmhhdmU9MCx0aGlzLm5leHQ9bnVsbCx0aGlzLmxlbnM9bmV3IEkuQnVmMTYoMzIwKSx0aGlzLndvcms9bmV3IEkuQnVmMTYoMjg4KSx0aGlzLmxlbmR5bj1udWxsLHRoaXMuZGlzdGR5bj1udWxsLHRoaXMuc2FuZT0wLHRoaXMuYmFjaz0wLHRoaXMud2FzPTB9ZnVuY3Rpb24gYShlKXt2YXIgdDtyZXR1cm4gZSYmZS5zdGF0ZT8odD1lLnN0YXRlLGUudG90YWxfaW49ZS50b3RhbF9vdXQ9dC50b3RhbD0wLGUubXNnPVwiXCIsdC53cmFwJiYoZS5hZGxlcj0xJnQud3JhcCksdC5tb2RlPVAsdC5sYXN0PTAsdC5oYXZlZGljdD0wLHQuZG1heD0zMjc2OCx0LmhlYWQ9bnVsbCx0LmhvbGQ9MCx0LmJpdHM9MCx0LmxlbmNvZGU9dC5sZW5keW49bmV3IEkuQnVmMzIobiksdC5kaXN0Y29kZT10LmRpc3RkeW49bmV3IEkuQnVmMzIoaSksdC5zYW5lPTEsdC5iYWNrPS0xLE4pOlV9ZnVuY3Rpb24gbyhlKXt2YXIgdDtyZXR1cm4gZSYmZS5zdGF0ZT8oKHQ9ZS5zdGF0ZSkud3NpemU9MCx0LndoYXZlPTAsdC53bmV4dD0wLGEoZSkpOlV9ZnVuY3Rpb24gaChlLHQpe3ZhciByLG47cmV0dXJuIGUmJmUuc3RhdGU/KG49ZS5zdGF0ZSx0PDA/KHI9MCx0PS10KToocj0xKyh0Pj40KSx0PDQ4JiYodCY9MTUpKSx0JiYodDw4fHwxNTx0KT9VOihudWxsIT09bi53aW5kb3cmJm4ud2JpdHMhPT10JiYobi53aW5kb3c9bnVsbCksbi53cmFwPXIsbi53Yml0cz10LG8oZSkpKTpVfWZ1bmN0aW9uIHUoZSx0KXt2YXIgcixuO3JldHVybiBlPyhuPW5ldyBzLChlLnN0YXRlPW4pLndpbmRvdz1udWxsLChyPWgoZSx0KSkhPT1OJiYoZS5zdGF0ZT1udWxsKSxyKTpVfXZhciBsLGYsYz0hMDtmdW5jdGlvbiBqKGUpe2lmKGMpe3ZhciB0O2ZvcihsPW5ldyBJLkJ1ZjMyKDUxMiksZj1uZXcgSS5CdWYzMigzMiksdD0wO3Q8MTQ0OyllLmxlbnNbdCsrXT04O2Zvcig7dDwyNTY7KWUubGVuc1t0KytdPTk7Zm9yKDt0PDI4MDspZS5sZW5zW3QrK109Nztmb3IoO3Q8Mjg4OyllLmxlbnNbdCsrXT04O2ZvcihUKEQsZS5sZW5zLDAsMjg4LGwsMCxlLndvcmsse2JpdHM6OX0pLHQ9MDt0PDMyOyllLmxlbnNbdCsrXT01O1QoRixlLmxlbnMsMCwzMixmLDAsZS53b3JrLHtiaXRzOjV9KSxjPSExfWUubGVuY29kZT1sLGUubGVuYml0cz05LGUuZGlzdGNvZGU9ZixlLmRpc3RiaXRzPTV9ZnVuY3Rpb24gWihlLHQscixuKXt2YXIgaSxzPWUuc3RhdGU7cmV0dXJuIG51bGw9PT1zLndpbmRvdyYmKHMud3NpemU9MTw8cy53Yml0cyxzLnduZXh0PTAscy53aGF2ZT0wLHMud2luZG93PW5ldyBJLkJ1Zjgocy53c2l6ZSkpLG4+PXMud3NpemU/KEkuYXJyYXlTZXQocy53aW5kb3csdCxyLXMud3NpemUscy53c2l6ZSwwKSxzLnduZXh0PTAscy53aGF2ZT1zLndzaXplKToobjwoaT1zLndzaXplLXMud25leHQpJiYoaT1uKSxJLmFycmF5U2V0KHMud2luZG93LHQsci1uLGkscy53bmV4dCksKG4tPWkpPyhJLmFycmF5U2V0KHMud2luZG93LHQsci1uLG4sMCkscy53bmV4dD1uLHMud2hhdmU9cy53c2l6ZSk6KHMud25leHQrPWkscy53bmV4dD09PXMud3NpemUmJihzLnduZXh0PTApLHMud2hhdmU8cy53c2l6ZSYmKHMud2hhdmUrPWkpKSksMH1yLmluZmxhdGVSZXNldD1vLHIuaW5mbGF0ZVJlc2V0Mj1oLHIuaW5mbGF0ZVJlc2V0S2VlcD1hLHIuaW5mbGF0ZUluaXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxNSl9LHIuaW5mbGF0ZUluaXQyPXUsci5pbmZsYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpLHMsYSxvLGgsdSxsLGYsYyxkLHAsbSxfLGcsYix2LHksdyxrLHgsUyx6LEM9MCxFPW5ldyBJLkJ1ZjgoNCksQT1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV07aWYoIWV8fCFlLnN0YXRlfHwhZS5vdXRwdXR8fCFlLmlucHV0JiYwIT09ZS5hdmFpbF9pbilyZXR1cm4gVTsxMj09PShyPWUuc3RhdGUpLm1vZGUmJihyLm1vZGU9MTMpLGE9ZS5uZXh0X291dCxpPWUub3V0cHV0LGg9ZS5hdmFpbF9vdXQscz1lLm5leHRfaW4sbj1lLmlucHV0LG89ZS5hdmFpbF9pbix1PXIuaG9sZCxsPXIuYml0cyxmPW8sYz1oLHg9TjtlOmZvcig7Oylzd2l0Y2goci5tb2RlKXtjYXNlIFA6aWYoMD09PXIud3JhcCl7ci5tb2RlPTEzO2JyZWFrfWZvcig7bDwxNjspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fWlmKDImci53cmFwJiYzNTYxNT09PXUpe0Vbci5jaGVjaz0wXT0yNTUmdSxFWzFdPXU+Pj44JjI1NSxyLmNoZWNrPUIoci5jaGVjayxFLDIsMCksbD11PTAsci5tb2RlPTI7YnJlYWt9aWYoci5mbGFncz0wLHIuaGVhZCYmKHIuaGVhZC5kb25lPSExKSwhKDEmci53cmFwKXx8KCgoMjU1JnUpPDw4KSsodT4+OCkpJTMxKXtlLm1zZz1cImluY29ycmVjdCBoZWFkZXIgY2hlY2tcIixyLm1vZGU9MzA7YnJlYWt9aWYoOCE9KDE1JnUpKXtlLm1zZz1cInVua25vd24gY29tcHJlc3Npb24gbWV0aG9kXCIsci5tb2RlPTMwO2JyZWFrfWlmKGwtPTQsaz04KygxNSYodT4+Pj00KSksMD09PXIud2JpdHMpci53Yml0cz1rO2Vsc2UgaWYoaz5yLndiaXRzKXtlLm1zZz1cImludmFsaWQgd2luZG93IHNpemVcIixyLm1vZGU9MzA7YnJlYWt9ci5kbWF4PTE8PGssZS5hZGxlcj1yLmNoZWNrPTEsci5tb2RlPTUxMiZ1PzEwOjEyLGw9dT0wO2JyZWFrO2Nhc2UgMjpmb3IoO2w8MTY7KXtpZigwPT09bylicmVhayBlO28tLSx1Kz1uW3MrK108PGwsbCs9OH1pZihyLmZsYWdzPXUsOCE9KDI1NSZyLmZsYWdzKSl7ZS5tc2c9XCJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZFwiLHIubW9kZT0zMDticmVha31pZig1NzM0NCZyLmZsYWdzKXtlLm1zZz1cInVua25vd24gaGVhZGVyIGZsYWdzIHNldFwiLHIubW9kZT0zMDticmVha31yLmhlYWQmJihyLmhlYWQudGV4dD11Pj44JjEpLDUxMiZyLmZsYWdzJiYoRVswXT0yNTUmdSxFWzFdPXU+Pj44JjI1NSxyLmNoZWNrPUIoci5jaGVjayxFLDIsMCkpLGw9dT0wLHIubW9kZT0zO2Nhc2UgMzpmb3IoO2w8MzI7KXtpZigwPT09bylicmVhayBlO28tLSx1Kz1uW3MrK108PGwsbCs9OH1yLmhlYWQmJihyLmhlYWQudGltZT11KSw1MTImci5mbGFncyYmKEVbMF09MjU1JnUsRVsxXT11Pj4+OCYyNTUsRVsyXT11Pj4+MTYmMjU1LEVbM109dT4+PjI0JjI1NSxyLmNoZWNrPUIoci5jaGVjayxFLDQsMCkpLGw9dT0wLHIubW9kZT00O2Nhc2UgNDpmb3IoO2w8MTY7KXtpZigwPT09bylicmVhayBlO28tLSx1Kz1uW3MrK108PGwsbCs9OH1yLmhlYWQmJihyLmhlYWQueGZsYWdzPTI1NSZ1LHIuaGVhZC5vcz11Pj44KSw1MTImci5mbGFncyYmKEVbMF09MjU1JnUsRVsxXT11Pj4+OCYyNTUsci5jaGVjaz1CKHIuY2hlY2ssRSwyLDApKSxsPXU9MCxyLm1vZGU9NTtjYXNlIDU6aWYoMTAyNCZyLmZsYWdzKXtmb3IoO2w8MTY7KXtpZigwPT09bylicmVhayBlO28tLSx1Kz1uW3MrK108PGwsbCs9OH1yLmxlbmd0aD11LHIuaGVhZCYmKHIuaGVhZC5leHRyYV9sZW49dSksNTEyJnIuZmxhZ3MmJihFWzBdPTI1NSZ1LEVbMV09dT4+PjgmMjU1LHIuY2hlY2s9QihyLmNoZWNrLEUsMiwwKSksbD11PTB9ZWxzZSByLmhlYWQmJihyLmhlYWQuZXh0cmE9bnVsbCk7ci5tb2RlPTY7Y2FzZSA2OmlmKDEwMjQmci5mbGFncyYmKG88KGQ9ci5sZW5ndGgpJiYoZD1vKSxkJiYoci5oZWFkJiYoaz1yLmhlYWQuZXh0cmFfbGVuLXIubGVuZ3RoLHIuaGVhZC5leHRyYXx8KHIuaGVhZC5leHRyYT1uZXcgQXJyYXkoci5oZWFkLmV4dHJhX2xlbikpLEkuYXJyYXlTZXQoci5oZWFkLmV4dHJhLG4scyxkLGspKSw1MTImci5mbGFncyYmKHIuY2hlY2s9QihyLmNoZWNrLG4sZCxzKSksby09ZCxzKz1kLHIubGVuZ3RoLT1kKSxyLmxlbmd0aCkpYnJlYWsgZTtyLmxlbmd0aD0wLHIubW9kZT03O2Nhc2UgNzppZigyMDQ4JnIuZmxhZ3Mpe2lmKDA9PT1vKWJyZWFrIGU7Zm9yKGQ9MDtrPW5bcytkKytdLHIuaGVhZCYmayYmci5sZW5ndGg8NjU1MzYmJihyLmhlYWQubmFtZSs9U3RyaW5nLmZyb21DaGFyQ29kZShrKSksayYmZDxvOyk7aWYoNTEyJnIuZmxhZ3MmJihyLmNoZWNrPUIoci5jaGVjayxuLGQscykpLG8tPWQscys9ZCxrKWJyZWFrIGV9ZWxzZSByLmhlYWQmJihyLmhlYWQubmFtZT1udWxsKTtyLmxlbmd0aD0wLHIubW9kZT04O2Nhc2UgODppZig0MDk2JnIuZmxhZ3Mpe2lmKDA9PT1vKWJyZWFrIGU7Zm9yKGQ9MDtrPW5bcytkKytdLHIuaGVhZCYmayYmci5sZW5ndGg8NjU1MzYmJihyLmhlYWQuY29tbWVudCs9U3RyaW5nLmZyb21DaGFyQ29kZShrKSksayYmZDxvOyk7aWYoNTEyJnIuZmxhZ3MmJihyLmNoZWNrPUIoci5jaGVjayxuLGQscykpLG8tPWQscys9ZCxrKWJyZWFrIGV9ZWxzZSByLmhlYWQmJihyLmhlYWQuY29tbWVudD1udWxsKTtyLm1vZGU9OTtjYXNlIDk6aWYoNTEyJnIuZmxhZ3Mpe2Zvcig7bDwxNjspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fWlmKHUhPT0oNjU1MzUmci5jaGVjaykpe2UubXNnPVwiaGVhZGVyIGNyYyBtaXNtYXRjaFwiLHIubW9kZT0zMDticmVha31sPXU9MH1yLmhlYWQmJihyLmhlYWQuaGNyYz1yLmZsYWdzPj45JjEsci5oZWFkLmRvbmU9ITApLGUuYWRsZXI9ci5jaGVjaz0wLHIubW9kZT0xMjticmVhaztjYXNlIDEwOmZvcig7bDwzMjspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fWUuYWRsZXI9ci5jaGVjaz1MKHUpLGw9dT0wLHIubW9kZT0xMTtjYXNlIDExOmlmKDA9PT1yLmhhdmVkaWN0KXJldHVybiBlLm5leHRfb3V0PWEsZS5hdmFpbF9vdXQ9aCxlLm5leHRfaW49cyxlLmF2YWlsX2luPW8sci5ob2xkPXUsci5iaXRzPWwsMjtlLmFkbGVyPXIuY2hlY2s9MSxyLm1vZGU9MTI7Y2FzZSAxMjppZig1PT09dHx8Nj09PXQpYnJlYWsgZTtjYXNlIDEzOmlmKHIubGFzdCl7dT4+Pj03JmwsbC09NyZsLHIubW9kZT0yNzticmVha31mb3IoO2w8Mzspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fXN3aXRjaChyLmxhc3Q9MSZ1LGwtPTEsMyYodT4+Pj0xKSl7Y2FzZSAwOnIubW9kZT0xNDticmVhaztjYXNlIDE6aWYoaihyKSxyLm1vZGU9MjAsNiE9PXQpYnJlYWs7dT4+Pj0yLGwtPTI7YnJlYWsgZTtjYXNlIDI6ci5tb2RlPTE3O2JyZWFrO2Nhc2UgMzplLm1zZz1cImludmFsaWQgYmxvY2sgdHlwZVwiLHIubW9kZT0zMH11Pj4+PTIsbC09MjticmVhaztjYXNlIDE0OmZvcih1Pj4+PTcmbCxsLT03Jmw7bDwzMjspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fWlmKCg2NTUzNSZ1KSE9KHU+Pj4xNl42NTUzNSkpe2UubXNnPVwiaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3Roc1wiLHIubW9kZT0zMDticmVha31pZihyLmxlbmd0aD02NTUzNSZ1LGw9dT0wLHIubW9kZT0xNSw2PT09dClicmVhayBlO2Nhc2UgMTU6ci5tb2RlPTE2O2Nhc2UgMTY6aWYoZD1yLmxlbmd0aCl7aWYobzxkJiYoZD1vKSxoPGQmJihkPWgpLDA9PT1kKWJyZWFrIGU7SS5hcnJheVNldChpLG4scyxkLGEpLG8tPWQscys9ZCxoLT1kLGErPWQsci5sZW5ndGgtPWQ7YnJlYWt9ci5tb2RlPTEyO2JyZWFrO2Nhc2UgMTc6Zm9yKDtsPDE0Oyl7aWYoMD09PW8pYnJlYWsgZTtvLS0sdSs9bltzKytdPDxsLGwrPTh9aWYoci5ubGVuPTI1NysoMzEmdSksdT4+Pj01LGwtPTUsci5uZGlzdD0xKygzMSZ1KSx1Pj4+PTUsbC09NSxyLm5jb2RlPTQrKDE1JnUpLHU+Pj49NCxsLT00LDI4NjxyLm5sZW58fDMwPHIubmRpc3Qpe2UubXNnPVwidG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHNcIixyLm1vZGU9MzA7YnJlYWt9ci5oYXZlPTAsci5tb2RlPTE4O2Nhc2UgMTg6Zm9yKDtyLmhhdmU8ci5uY29kZTspe2Zvcig7bDwzOyl7aWYoMD09PW8pYnJlYWsgZTtvLS0sdSs9bltzKytdPDxsLGwrPTh9ci5sZW5zW0Fbci5oYXZlKytdXT03JnUsdT4+Pj0zLGwtPTN9Zm9yKDtyLmhhdmU8MTk7KXIubGVuc1tBW3IuaGF2ZSsrXV09MDtpZihyLmxlbmNvZGU9ci5sZW5keW4sci5sZW5iaXRzPTcsUz17Yml0czpyLmxlbmJpdHN9LHg9VCgwLHIubGVucywwLDE5LHIubGVuY29kZSwwLHIud29yayxTKSxyLmxlbmJpdHM9Uy5iaXRzLHgpe2UubXNnPVwiaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0XCIsci5tb2RlPTMwO2JyZWFrfXIuaGF2ZT0wLHIubW9kZT0xOTtjYXNlIDE5OmZvcig7ci5oYXZlPHIubmxlbityLm5kaXN0Oyl7Zm9yKDtnPShDPXIubGVuY29kZVt1JigxPDxyLmxlbmJpdHMpLTFdKT4+PjE2JjI1NSxiPTY1NTM1JkMsISgoXz1DPj4+MjQpPD1sKTspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fWlmKGI8MTYpdT4+Pj1fLGwtPV8sci5sZW5zW3IuaGF2ZSsrXT1iO2Vsc2V7aWYoMTY9PT1iKXtmb3Ioej1fKzI7bDx6Oyl7aWYoMD09PW8pYnJlYWsgZTtvLS0sdSs9bltzKytdPDxsLGwrPTh9aWYodT4+Pj1fLGwtPV8sMD09PXIuaGF2ZSl7ZS5tc2c9XCJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0XCIsci5tb2RlPTMwO2JyZWFrfWs9ci5sZW5zW3IuaGF2ZS0xXSxkPTMrKDMmdSksdT4+Pj0yLGwtPTJ9ZWxzZSBpZigxNz09PWIpe2Zvcih6PV8rMztsPHo7KXtpZigwPT09bylicmVhayBlO28tLSx1Kz1uW3MrK108PGwsbCs9OH1sLT1fLGs9MCxkPTMrKDcmKHU+Pj49XykpLHU+Pj49MyxsLT0zfWVsc2V7Zm9yKHo9Xys3O2w8ejspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fWwtPV8saz0wLGQ9MTErKDEyNyYodT4+Pj1fKSksdT4+Pj03LGwtPTd9aWYoci5oYXZlK2Q+ci5ubGVuK3IubmRpc3Qpe2UubXNnPVwiaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdFwiLHIubW9kZT0zMDticmVha31mb3IoO2QtLTspci5sZW5zW3IuaGF2ZSsrXT1rfX1pZigzMD09PXIubW9kZSlicmVhaztpZigwPT09ci5sZW5zWzI1Nl0pe2UubXNnPVwiaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrXCIsci5tb2RlPTMwO2JyZWFrfWlmKHIubGVuYml0cz05LFM9e2JpdHM6ci5sZW5iaXRzfSx4PVQoRCxyLmxlbnMsMCxyLm5sZW4sci5sZW5jb2RlLDAsci53b3JrLFMpLHIubGVuYml0cz1TLmJpdHMseCl7ZS5tc2c9XCJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXRcIixyLm1vZGU9MzA7YnJlYWt9aWYoci5kaXN0Yml0cz02LHIuZGlzdGNvZGU9ci5kaXN0ZHluLFM9e2JpdHM6ci5kaXN0Yml0c30seD1UKEYsci5sZW5zLHIubmxlbixyLm5kaXN0LHIuZGlzdGNvZGUsMCxyLndvcmssUyksci5kaXN0Yml0cz1TLmJpdHMseCl7ZS5tc2c9XCJpbnZhbGlkIGRpc3RhbmNlcyBzZXRcIixyLm1vZGU9MzA7YnJlYWt9aWYoci5tb2RlPTIwLDY9PT10KWJyZWFrIGU7Y2FzZSAyMDpyLm1vZGU9MjE7Y2FzZSAyMTppZig2PD1vJiYyNTg8PWgpe2UubmV4dF9vdXQ9YSxlLmF2YWlsX291dD1oLGUubmV4dF9pbj1zLGUuYXZhaWxfaW49byxyLmhvbGQ9dSxyLmJpdHM9bCxSKGUsYyksYT1lLm5leHRfb3V0LGk9ZS5vdXRwdXQsaD1lLmF2YWlsX291dCxzPWUubmV4dF9pbixuPWUuaW5wdXQsbz1lLmF2YWlsX2luLHU9ci5ob2xkLGw9ci5iaXRzLDEyPT09ci5tb2RlJiYoci5iYWNrPS0xKTticmVha31mb3Ioci5iYWNrPTA7Zz0oQz1yLmxlbmNvZGVbdSYoMTw8ci5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsYj02NTUzNSZDLCEoKF89Qz4+PjI0KTw9bCk7KXtpZigwPT09bylicmVhayBlO28tLSx1Kz1uW3MrK108PGwsbCs9OH1pZihnJiYwPT0oMjQwJmcpKXtmb3Iodj1fLHk9Zyx3PWI7Zz0oQz1yLmxlbmNvZGVbdysoKHUmKDE8PHYreSktMSk+PnYpXSk+Pj4xNiYyNTUsYj02NTUzNSZDLCEodisoXz1DPj4+MjQpPD1sKTspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fXU+Pj49dixsLT12LHIuYmFjays9dn1pZih1Pj4+PV8sbC09XyxyLmJhY2srPV8sci5sZW5ndGg9YiwwPT09Zyl7ci5tb2RlPTI2O2JyZWFrfWlmKDMyJmcpe3IuYmFjaz0tMSxyLm1vZGU9MTI7YnJlYWt9aWYoNjQmZyl7ZS5tc2c9XCJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGVcIixyLm1vZGU9MzA7YnJlYWt9ci5leHRyYT0xNSZnLHIubW9kZT0yMjtjYXNlIDIyOmlmKHIuZXh0cmEpe2Zvcih6PXIuZXh0cmE7bDx6Oyl7aWYoMD09PW8pYnJlYWsgZTtvLS0sdSs9bltzKytdPDxsLGwrPTh9ci5sZW5ndGgrPXUmKDE8PHIuZXh0cmEpLTEsdT4+Pj1yLmV4dHJhLGwtPXIuZXh0cmEsci5iYWNrKz1yLmV4dHJhfXIud2FzPXIubGVuZ3RoLHIubW9kZT0yMztjYXNlIDIzOmZvcig7Zz0oQz1yLmRpc3Rjb2RlW3UmKDE8PHIuZGlzdGJpdHMpLTFdKT4+PjE2JjI1NSxiPTY1NTM1JkMsISgoXz1DPj4+MjQpPD1sKTspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fWlmKDA9PSgyNDAmZykpe2Zvcih2PV8seT1nLHc9YjtnPShDPXIuZGlzdGNvZGVbdysoKHUmKDE8PHYreSktMSk+PnYpXSk+Pj4xNiYyNTUsYj02NTUzNSZDLCEodisoXz1DPj4+MjQpPD1sKTspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fXU+Pj49dixsLT12LHIuYmFjays9dn1pZih1Pj4+PV8sbC09XyxyLmJhY2srPV8sNjQmZyl7ZS5tc2c9XCJpbnZhbGlkIGRpc3RhbmNlIGNvZGVcIixyLm1vZGU9MzA7YnJlYWt9ci5vZmZzZXQ9YixyLmV4dHJhPTE1Jmcsci5tb2RlPTI0O2Nhc2UgMjQ6aWYoci5leHRyYSl7Zm9yKHo9ci5leHRyYTtsPHo7KXtpZigwPT09bylicmVhayBlO28tLSx1Kz1uW3MrK108PGwsbCs9OH1yLm9mZnNldCs9dSYoMTw8ci5leHRyYSktMSx1Pj4+PXIuZXh0cmEsbC09ci5leHRyYSxyLmJhY2srPXIuZXh0cmF9aWYoci5vZmZzZXQ+ci5kbWF4KXtlLm1zZz1cImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrXCIsci5tb2RlPTMwO2JyZWFrfXIubW9kZT0yNTtjYXNlIDI1OmlmKDA9PT1oKWJyZWFrIGU7aWYoZD1jLWgsci5vZmZzZXQ+ZCl7aWYoKGQ9ci5vZmZzZXQtZCk+ci53aGF2ZSYmci5zYW5lKXtlLm1zZz1cImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrXCIsci5tb2RlPTMwO2JyZWFrfXA9ZD5yLnduZXh0PyhkLT1yLnduZXh0LHIud3NpemUtZCk6ci53bmV4dC1kLGQ+ci5sZW5ndGgmJihkPXIubGVuZ3RoKSxtPXIud2luZG93fWVsc2UgbT1pLHA9YS1yLm9mZnNldCxkPXIubGVuZ3RoO2ZvcihoPGQmJihkPWgpLGgtPWQsci5sZW5ndGgtPWQ7aVthKytdPW1bcCsrXSwtLWQ7KTswPT09ci5sZW5ndGgmJihyLm1vZGU9MjEpO2JyZWFrO2Nhc2UgMjY6aWYoMD09PWgpYnJlYWsgZTtpW2ErK109ci5sZW5ndGgsaC0tLHIubW9kZT0yMTticmVhaztjYXNlIDI3OmlmKHIud3JhcCl7Zm9yKDtsPDMyOyl7aWYoMD09PW8pYnJlYWsgZTtvLS0sdXw9bltzKytdPDxsLGwrPTh9aWYoYy09aCxlLnRvdGFsX291dCs9YyxyLnRvdGFsKz1jLGMmJihlLmFkbGVyPXIuY2hlY2s9ci5mbGFncz9CKHIuY2hlY2ssaSxjLGEtYyk6TyhyLmNoZWNrLGksYyxhLWMpKSxjPWgsKHIuZmxhZ3M/dTpMKHUpKSE9PXIuY2hlY2spe2UubXNnPVwiaW5jb3JyZWN0IGRhdGEgY2hlY2tcIixyLm1vZGU9MzA7YnJlYWt9bD11PTB9ci5tb2RlPTI4O2Nhc2UgMjg6aWYoci53cmFwJiZyLmZsYWdzKXtmb3IoO2w8MzI7KXtpZigwPT09bylicmVhayBlO28tLSx1Kz1uW3MrK108PGwsbCs9OH1pZih1IT09KDQyOTQ5NjcyOTUmci50b3RhbCkpe2UubXNnPVwiaW5jb3JyZWN0IGxlbmd0aCBjaGVja1wiLHIubW9kZT0zMDticmVha31sPXU9MH1yLm1vZGU9Mjk7Y2FzZSAyOTp4PTE7YnJlYWsgZTtjYXNlIDMwOng9LTM7YnJlYWsgZTtjYXNlIDMxOnJldHVybi00O2Nhc2UgMzI6ZGVmYXVsdDpyZXR1cm4gVX1yZXR1cm4gZS5uZXh0X291dD1hLGUuYXZhaWxfb3V0PWgsZS5uZXh0X2luPXMsZS5hdmFpbF9pbj1vLHIuaG9sZD11LHIuYml0cz1sLChyLndzaXplfHxjIT09ZS5hdmFpbF9vdXQmJnIubW9kZTwzMCYmKHIubW9kZTwyN3x8NCE9PXQpKSYmWihlLGUub3V0cHV0LGUubmV4dF9vdXQsYy1lLmF2YWlsX291dCk/KHIubW9kZT0zMSwtNCk6KGYtPWUuYXZhaWxfaW4sYy09ZS5hdmFpbF9vdXQsZS50b3RhbF9pbis9ZixlLnRvdGFsX291dCs9YyxyLnRvdGFsKz1jLHIud3JhcCYmYyYmKGUuYWRsZXI9ci5jaGVjaz1yLmZsYWdzP0Ioci5jaGVjayxpLGMsZS5uZXh0X291dC1jKTpPKHIuY2hlY2ssaSxjLGUubmV4dF9vdXQtYykpLGUuZGF0YV90eXBlPXIuYml0cysoci5sYXN0PzY0OjApKygxMj09PXIubW9kZT8xMjg6MCkrKDIwPT09ci5tb2RlfHwxNT09PXIubW9kZT8yNTY6MCksKDA9PWYmJjA9PT1jfHw0PT09dCkmJng9PT1OJiYoeD0tNSkseCl9LHIuaW5mbGF0ZUVuZD1mdW5jdGlvbihlKXtpZighZXx8IWUuc3RhdGUpcmV0dXJuIFU7dmFyIHQ9ZS5zdGF0ZTtyZXR1cm4gdC53aW5kb3cmJih0LndpbmRvdz1udWxsKSxlLnN0YXRlPW51bGwsTn0sci5pbmZsYXRlR2V0SGVhZGVyPWZ1bmN0aW9uKGUsdCl7dmFyIHI7cmV0dXJuIGUmJmUuc3RhdGU/MD09KDImKHI9ZS5zdGF0ZSkud3JhcCk/VTooKHIuaGVhZD10KS5kb25lPSExLE4pOlV9LHIuaW5mbGF0ZVNldERpY3Rpb25hcnk9ZnVuY3Rpb24oZSx0KXt2YXIgcixuPXQubGVuZ3RoO3JldHVybiBlJiZlLnN0YXRlPzAhPT0ocj1lLnN0YXRlKS53cmFwJiYxMSE9PXIubW9kZT9VOjExPT09ci5tb2RlJiZPKDEsdCxuLDApIT09ci5jaGVjaz8tMzpaKGUsdCxuLG4pPyhyLm1vZGU9MzEsLTQpOihyLmhhdmVkaWN0PTEsTik6VX0sci5pbmZsYXRlSW5mbz1cInBha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdClcIn0se1wiLi4vdXRpbHMvY29tbW9uXCI6NDEsXCIuL2FkbGVyMzJcIjo0MyxcIi4vY3JjMzJcIjo0NSxcIi4vaW5mZmFzdFwiOjQ4LFwiLi9pbmZ0cmVlc1wiOjUwfV0sNTA6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgRD1lKFwiLi4vdXRpbHMvY29tbW9uXCIpLEY9WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNTgsMCwwXSxOPVsxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwxNiw3Miw3OF0sVT1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3LDAsMF0sUD1bMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscixuLGkscyxhLG8pe3ZhciBoLHUsbCxmLGMsZCxwLG0sXyxnPW8uYml0cyxiPTAsdj0wLHk9MCx3PTAsaz0wLHg9MCxTPTAsej0wLEM9MCxFPTAsQT1udWxsLEk9MCxPPW5ldyBELkJ1ZjE2KDE2KSxCPW5ldyBELkJ1ZjE2KDE2KSxSPW51bGwsVD0wO2ZvcihiPTA7Yjw9MTU7YisrKU9bYl09MDtmb3Iodj0wO3Y8bjt2KyspT1t0W3Irdl1dKys7Zm9yKGs9Zyx3PTE1OzE8PXcmJjA9PT1PW3ddO3ctLSk7aWYodzxrJiYoaz13KSwwPT09dylyZXR1cm4gaVtzKytdPTIwOTcxNTIwLGlbcysrXT0yMDk3MTUyMCxvLmJpdHM9MSwwO2Zvcih5PTE7eTx3JiYwPT09T1t5XTt5KyspO2ZvcihrPHkmJihrPXkpLGI9ej0xO2I8PTE1O2IrKylpZih6PDw9MSwoei09T1tiXSk8MClyZXR1cm4tMTtpZigwPHomJigwPT09ZXx8MSE9PXcpKXJldHVybi0xO2ZvcihCWzFdPTAsYj0xO2I8MTU7YisrKUJbYisxXT1CW2JdK09bYl07Zm9yKHY9MDt2PG47disrKTAhPT10W3Irdl0mJihhW0JbdFtyK3ZdXSsrXT12KTtpZihkPTA9PT1lPyhBPVI9YSwxOSk6MT09PWU/KEE9RixJLT0yNTcsUj1OLFQtPTI1NywyNTYpOihBPVUsUj1QLC0xKSxiPXksYz1zLFM9dj1FPTAsbD0tMSxmPShDPTE8PCh4PWspKS0xLDE9PT1lJiY4NTI8Q3x8Mj09PWUmJjU5MjxDKXJldHVybiAxO2Zvcig7Oyl7Zm9yKHA9Yi1TLF89YVt2XTxkPyhtPTAsYVt2XSk6YVt2XT5kPyhtPVJbVCthW3ZdXSxBW0krYVt2XV0pOihtPTk2LDApLGg9MTw8Yi1TLHk9dT0xPDx4O2lbYysoRT4+UykrKHUtPWgpXT1wPDwyNHxtPDwxNnxffDAsMCE9PXU7KTtmb3IoaD0xPDxiLTE7RSZoOyloPj49MTtpZigwIT09aD8oRSY9aC0xLEUrPWgpOkU9MCx2KyssMD09LS1PW2JdKXtpZihiPT09dylicmVhaztiPXRbcithW3ZdXX1pZihrPGImJihFJmYpIT09bCl7Zm9yKDA9PT1TJiYoUz1rKSxjKz15LHo9MTw8KHg9Yi1TKTt4K1M8dyYmISgoei09T1t4K1NdKTw9MCk7KXgrKyx6PDw9MTtpZihDKz0xPDx4LDE9PT1lJiY4NTI8Q3x8Mj09PWUmJjU5MjxDKXJldHVybiAxO2lbbD1FJmZdPWs8PDI0fHg8PDE2fGMtc3wwfX1yZXR1cm4gMCE9PUUmJihpW2MrRV09Yi1TPDwyNHw2NDw8MTZ8MCksby5iaXRzPWssMH19LHtcIi4uL3V0aWxzL2NvbW1vblwiOjQxfV0sNTE6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9ezI6XCJuZWVkIGRpY3Rpb25hcnlcIiwxOlwic3RyZWFtIGVuZFwiLDA6XCJcIixcIi0xXCI6XCJmaWxlIGVycm9yXCIsXCItMlwiOlwic3RyZWFtIGVycm9yXCIsXCItM1wiOlwiZGF0YSBlcnJvclwiLFwiLTRcIjpcImluc3VmZmljaWVudCBtZW1vcnlcIixcIi01XCI6XCJidWZmZXIgZXJyb3JcIixcIi02XCI6XCJpbmNvbXBhdGlibGUgdmVyc2lvblwifX0se31dLDUyOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9ZShcIi4uL3V0aWxzL2NvbW1vblwiKSxvPTAsaD0xO2Z1bmN0aW9uIG4oZSl7Zm9yKHZhciB0PWUubGVuZ3RoOzA8PS0tdDspZVt0XT0wfXZhciBzPTAsYT0yOSx1PTI1NixsPXUrMSthLGY9MzAsYz0xOSxfPTIqbCsxLGc9MTUsZD0xNixwPTcsbT0yNTYsYj0xNix2PTE3LHk9MTgsdz1bMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXSxrPVswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzXSx4PVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMyw3XSxTPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSx6PW5ldyBBcnJheSgyKihsKzIpKTtuKHopO3ZhciBDPW5ldyBBcnJheSgyKmYpO24oQyk7dmFyIEU9bmV3IEFycmF5KDUxMik7bihFKTt2YXIgQT1uZXcgQXJyYXkoMjU2KTtuKEEpO3ZhciBJPW5ldyBBcnJheShhKTtuKEkpO3ZhciBPLEIsUixUPW5ldyBBcnJheShmKTtmdW5jdGlvbiBEKGUsdCxyLG4saSl7dGhpcy5zdGF0aWNfdHJlZT1lLHRoaXMuZXh0cmFfYml0cz10LHRoaXMuZXh0cmFfYmFzZT1yLHRoaXMuZWxlbXM9bix0aGlzLm1heF9sZW5ndGg9aSx0aGlzLmhhc19zdHJlZT1lJiZlLmxlbmd0aH1mdW5jdGlvbiBGKGUsdCl7dGhpcy5keW5fdHJlZT1lLHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz10fWZ1bmN0aW9uIE4oZSl7cmV0dXJuIGU8MjU2P0VbZV06RVsyNTYrKGU+Pj43KV19ZnVuY3Rpb24gVShlLHQpe2UucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPTI1NSZ0LGUucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPXQ+Pj44JjI1NX1mdW5jdGlvbiBQKGUsdCxyKXtlLmJpX3ZhbGlkPmQtcj8oZS5iaV9idWZ8PXQ8PGUuYmlfdmFsaWQmNjU1MzUsVShlLGUuYmlfYnVmKSxlLmJpX2J1Zj10Pj5kLWUuYmlfdmFsaWQsZS5iaV92YWxpZCs9ci1kKTooZS5iaV9idWZ8PXQ8PGUuYmlfdmFsaWQmNjU1MzUsZS5iaV92YWxpZCs9cil9ZnVuY3Rpb24gTChlLHQscil7UChlLHJbMip0XSxyWzIqdCsxXSl9ZnVuY3Rpb24gaihlLHQpe2Zvcih2YXIgcj0wO3J8PTEmZSxlPj4+PTEscjw8PTEsMDwtLXQ7KTtyZXR1cm4gcj4+PjF9ZnVuY3Rpb24gWihlLHQscil7dmFyIG4saSxzPW5ldyBBcnJheShnKzEpLGE9MDtmb3Iobj0xO248PWc7bisrKXNbbl09YT1hK3Jbbi0xXTw8MTtmb3IoaT0wO2k8PXQ7aSsrKXt2YXIgbz1lWzIqaSsxXTswIT09byYmKGVbMippXT1qKHNbb10rKyxvKSl9fWZ1bmN0aW9uIFcoZSl7dmFyIHQ7Zm9yKHQ9MDt0PGw7dCsrKWUuZHluX2x0cmVlWzIqdF09MDtmb3IodD0wO3Q8Zjt0KyspZS5keW5fZHRyZWVbMip0XT0wO2Zvcih0PTA7dDxjO3QrKyllLmJsX3RyZWVbMip0XT0wO2UuZHluX2x0cmVlWzIqbV09MSxlLm9wdF9sZW49ZS5zdGF0aWNfbGVuPTAsZS5sYXN0X2xpdD1lLm1hdGNoZXM9MH1mdW5jdGlvbiBNKGUpezg8ZS5iaV92YWxpZD9VKGUsZS5iaV9idWYpOjA8ZS5iaV92YWxpZCYmKGUucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPWUuYmlfYnVmKSxlLmJpX2J1Zj0wLGUuYmlfdmFsaWQ9MH1mdW5jdGlvbiBIKGUsdCxyLG4pe3ZhciBpPTIqdCxzPTIqcjtyZXR1cm4gZVtpXTxlW3NdfHxlW2ldPT09ZVtzXSYmblt0XTw9bltyXX1mdW5jdGlvbiBHKGUsdCxyKXtmb3IodmFyIG49ZS5oZWFwW3JdLGk9cjw8MTtpPD1lLmhlYXBfbGVuJiYoaTxlLmhlYXBfbGVuJiZIKHQsZS5oZWFwW2krMV0sZS5oZWFwW2ldLGUuZGVwdGgpJiZpKyssIUgodCxuLGUuaGVhcFtpXSxlLmRlcHRoKSk7KWUuaGVhcFtyXT1lLmhlYXBbaV0scj1pLGk8PD0xO2UuaGVhcFtyXT1ufWZ1bmN0aW9uIEsoZSx0LHIpe3ZhciBuLGkscyxhLG89MDtpZigwIT09ZS5sYXN0X2xpdClmb3IoO249ZS5wZW5kaW5nX2J1ZltlLmRfYnVmKzIqb108PDh8ZS5wZW5kaW5nX2J1ZltlLmRfYnVmKzIqbysxXSxpPWUucGVuZGluZ19idWZbZS5sX2J1ZitvXSxvKyssMD09PW4/TChlLGksdCk6KEwoZSwocz1BW2ldKSt1KzEsdCksMCE9PShhPXdbc10pJiZQKGUsaS09SVtzXSxhKSxMKGUscz1OKC0tbiksciksMCE9PShhPWtbc10pJiZQKGUsbi09VFtzXSxhKSksbzxlLmxhc3RfbGl0Oyk7TChlLG0sdCl9ZnVuY3Rpb24gWShlLHQpe3ZhciByLG4saSxzPXQuZHluX3RyZWUsYT10LnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxvPXQuc3RhdF9kZXNjLmhhc19zdHJlZSxoPXQuc3RhdF9kZXNjLmVsZW1zLHU9LTE7Zm9yKGUuaGVhcF9sZW49MCxlLmhlYXBfbWF4PV8scj0wO3I8aDtyKyspMCE9PXNbMipyXT8oZS5oZWFwWysrZS5oZWFwX2xlbl09dT1yLGUuZGVwdGhbcl09MCk6c1syKnIrMV09MDtmb3IoO2UuaGVhcF9sZW48Mjspc1syKihpPWUuaGVhcFsrK2UuaGVhcF9sZW5dPXU8Mj8rK3U6MCldPTEsZS5kZXB0aFtpXT0wLGUub3B0X2xlbi0tLG8mJihlLnN0YXRpY19sZW4tPWFbMippKzFdKTtmb3IodC5tYXhfY29kZT11LHI9ZS5oZWFwX2xlbj4+MTsxPD1yO3ItLSlHKGUscyxyKTtmb3IoaT1oO3I9ZS5oZWFwWzFdLGUuaGVhcFsxXT1lLmhlYXBbZS5oZWFwX2xlbi0tXSxHKGUscywxKSxuPWUuaGVhcFsxXSxlLmhlYXBbLS1lLmhlYXBfbWF4XT1yLGUuaGVhcFstLWUuaGVhcF9tYXhdPW4sc1syKmldPXNbMipyXStzWzIqbl0sZS5kZXB0aFtpXT0oZS5kZXB0aFtyXT49ZS5kZXB0aFtuXT9lLmRlcHRoW3JdOmUuZGVwdGhbbl0pKzEsc1syKnIrMV09c1syKm4rMV09aSxlLmhlYXBbMV09aSsrLEcoZSxzLDEpLDI8PWUuaGVhcF9sZW47KTtlLmhlYXBbLS1lLmhlYXBfbWF4XT1lLmhlYXBbMV0sZnVuY3Rpb24oZSx0KXt2YXIgcixuLGkscyxhLG8saD10LmR5bl90cmVlLHU9dC5tYXhfY29kZSxsPXQuc3RhdF9kZXNjLnN0YXRpY190cmVlLGY9dC5zdGF0X2Rlc2MuaGFzX3N0cmVlLGM9dC5zdGF0X2Rlc2MuZXh0cmFfYml0cyxkPXQuc3RhdF9kZXNjLmV4dHJhX2Jhc2UscD10LnN0YXRfZGVzYy5tYXhfbGVuZ3RoLG09MDtmb3Iocz0wO3M8PWc7cysrKWUuYmxfY291bnRbc109MDtmb3IoaFsyKmUuaGVhcFtlLmhlYXBfbWF4XSsxXT0wLHI9ZS5oZWFwX21heCsxO3I8XztyKyspcDwocz1oWzIqaFsyKihuPWUuaGVhcFtyXSkrMV0rMV0rMSkmJihzPXAsbSsrKSxoWzIqbisxXT1zLHU8bnx8KGUuYmxfY291bnRbc10rKyxhPTAsZDw9biYmKGE9Y1tuLWRdKSxvPWhbMipuXSxlLm9wdF9sZW4rPW8qKHMrYSksZiYmKGUuc3RhdGljX2xlbis9byoobFsyKm4rMV0rYSkpKTtpZigwIT09bSl7ZG97Zm9yKHM9cC0xOzA9PT1lLmJsX2NvdW50W3NdOylzLS07ZS5ibF9jb3VudFtzXS0tLGUuYmxfY291bnRbcysxXSs9MixlLmJsX2NvdW50W3BdLS0sbS09Mn13aGlsZSgwPG0pO2ZvcihzPXA7MCE9PXM7cy0tKWZvcihuPWUuYmxfY291bnRbc107MCE9PW47KXU8KGk9ZS5oZWFwWy0tcl0pfHwoaFsyKmkrMV0hPT1zJiYoZS5vcHRfbGVuKz0ocy1oWzIqaSsxXSkqaFsyKmldLGhbMippKzFdPXMpLG4tLSl9fShlLHQpLFoocyx1LGUuYmxfY291bnQpfWZ1bmN0aW9uIFgoZSx0LHIpe3ZhciBuLGkscz0tMSxhPXRbMV0sbz0wLGg9Nyx1PTQ7Zm9yKDA9PT1hJiYoaD0xMzgsdT0zKSx0WzIqKHIrMSkrMV09NjU1MzUsbj0wO248PXI7bisrKWk9YSxhPXRbMioobisxKSsxXSwrK288aCYmaT09PWF8fChvPHU/ZS5ibF90cmVlWzIqaV0rPW86MCE9PWk/KGkhPT1zJiZlLmJsX3RyZWVbMippXSsrLGUuYmxfdHJlZVsyKmJdKyspOm88PTEwP2UuYmxfdHJlZVsyKnZdKys6ZS5ibF90cmVlWzIqeV0rKyxzPWksdT0obz0wKT09PWE/KGg9MTM4LDMpOmk9PT1hPyhoPTYsMyk6KGg9Nyw0KSl9ZnVuY3Rpb24gVihlLHQscil7dmFyIG4saSxzPS0xLGE9dFsxXSxvPTAsaD03LHU9NDtmb3IoMD09PWEmJihoPTEzOCx1PTMpLG49MDtuPD1yO24rKylpZihpPWEsYT10WzIqKG4rMSkrMV0sISgrK288aCYmaT09PWEpKXtpZihvPHUpZm9yKDtMKGUsaSxlLmJsX3RyZWUpLDAhPS0tbzspO2Vsc2UgMCE9PWk/KGkhPT1zJiYoTChlLGksZS5ibF90cmVlKSxvLS0pLEwoZSxiLGUuYmxfdHJlZSksUChlLG8tMywyKSk6bzw9MTA/KEwoZSx2LGUuYmxfdHJlZSksUChlLG8tMywzKSk6KEwoZSx5LGUuYmxfdHJlZSksUChlLG8tMTEsNykpO3M9aSx1PShvPTApPT09YT8oaD0xMzgsMyk6aT09PWE/KGg9NiwzKTooaD03LDQpfX1uKFQpO3ZhciBxPSExO2Z1bmN0aW9uIEooZSx0LHIsbil7UChlLChzPDwxKSsobj8xOjApLDMpLGZ1bmN0aW9uKGUsdCxyLG4pe00oZSksbiYmKFUoZSxyKSxVKGUsfnIpKSxpLmFycmF5U2V0KGUucGVuZGluZ19idWYsZS53aW5kb3csdCxyLGUucGVuZGluZyksZS5wZW5kaW5nKz1yfShlLHQsciwhMCl9ci5fdHJfaW5pdD1mdW5jdGlvbihlKXtxfHwoZnVuY3Rpb24oKXt2YXIgZSx0LHIsbixpLHM9bmV3IEFycmF5KGcrMSk7Zm9yKG49cj0wO248YS0xO24rKylmb3IoSVtuXT1yLGU9MDtlPDE8PHdbbl07ZSsrKUFbcisrXT1uO2ZvcihBW3ItMV09bixuPWk9MDtuPDE2O24rKylmb3IoVFtuXT1pLGU9MDtlPDE8PGtbbl07ZSsrKUVbaSsrXT1uO2ZvcihpPj49NztuPGY7bisrKWZvcihUW25dPWk8PDcsZT0wO2U8MTw8a1tuXS03O2UrKylFWzI1NitpKytdPW47Zm9yKHQ9MDt0PD1nO3QrKylzW3RdPTA7Zm9yKGU9MDtlPD0xNDM7KXpbMiplKzFdPTgsZSsrLHNbOF0rKztmb3IoO2U8PTI1NTspelsyKmUrMV09OSxlKyssc1s5XSsrO2Zvcig7ZTw9Mjc5Oyl6WzIqZSsxXT03LGUrKyxzWzddKys7Zm9yKDtlPD0yODc7KXpbMiplKzFdPTgsZSsrLHNbOF0rKztmb3IoWih6LGwrMSxzKSxlPTA7ZTxmO2UrKylDWzIqZSsxXT01LENbMiplXT1qKGUsNSk7Tz1uZXcgRCh6LHcsdSsxLGwsZyksQj1uZXcgRChDLGssMCxmLGcpLFI9bmV3IEQobmV3IEFycmF5KDApLHgsMCxjLHApfSgpLHE9ITApLGUubF9kZXNjPW5ldyBGKGUuZHluX2x0cmVlLE8pLGUuZF9kZXNjPW5ldyBGKGUuZHluX2R0cmVlLEIpLGUuYmxfZGVzYz1uZXcgRihlLmJsX3RyZWUsUiksZS5iaV9idWY9MCxlLmJpX3ZhbGlkPTAsVyhlKX0sci5fdHJfc3RvcmVkX2Jsb2NrPUosci5fdHJfZmx1c2hfYmxvY2s9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGkscyxhPTA7MDxlLmxldmVsPygyPT09ZS5zdHJtLmRhdGFfdHlwZSYmKGUuc3RybS5kYXRhX3R5cGU9ZnVuY3Rpb24oZSl7dmFyIHQscj00MDkzNjI0NDQ3O2Zvcih0PTA7dDw9MzE7dCsrLHI+Pj49MSlpZigxJnImJjAhPT1lLmR5bl9sdHJlZVsyKnRdKXJldHVybiBvO2lmKDAhPT1lLmR5bl9sdHJlZVsxOF18fDAhPT1lLmR5bl9sdHJlZVsyMF18fDAhPT1lLmR5bl9sdHJlZVsyNl0pcmV0dXJuIGg7Zm9yKHQ9MzI7dDx1O3QrKylpZigwIT09ZS5keW5fbHRyZWVbMip0XSlyZXR1cm4gaDtyZXR1cm4gb30oZSkpLFkoZSxlLmxfZGVzYyksWShlLGUuZF9kZXNjKSxhPWZ1bmN0aW9uKGUpe3ZhciB0O2ZvcihYKGUsZS5keW5fbHRyZWUsZS5sX2Rlc2MubWF4X2NvZGUpLFgoZSxlLmR5bl9kdHJlZSxlLmRfZGVzYy5tYXhfY29kZSksWShlLGUuYmxfZGVzYyksdD1jLTE7Mzw9dCYmMD09PWUuYmxfdHJlZVsyKlNbdF0rMV07dC0tKTtyZXR1cm4gZS5vcHRfbGVuKz0zKih0KzEpKzUrNSs0LHR9KGUpLGk9ZS5vcHRfbGVuKzMrNz4+PjMsKHM9ZS5zdGF0aWNfbGVuKzMrNz4+PjMpPD1pJiYoaT1zKSk6aT1zPXIrNSxyKzQ8PWkmJi0xIT09dD9KKGUsdCxyLG4pOjQ9PT1lLnN0cmF0ZWd5fHxzPT09aT8oUChlLDIrKG4/MTowKSwzKSxLKGUseixDKSk6KFAoZSw0KyhuPzE6MCksMyksZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk7Zm9yKFAoZSx0LTI1Nyw1KSxQKGUsci0xLDUpLFAoZSxuLTQsNCksaT0wO2k8bjtpKyspUChlLGUuYmxfdHJlZVsyKlNbaV0rMV0sMyk7VihlLGUuZHluX2x0cmVlLHQtMSksVihlLGUuZHluX2R0cmVlLHItMSl9KGUsZS5sX2Rlc2MubWF4X2NvZGUrMSxlLmRfZGVzYy5tYXhfY29kZSsxLGErMSksSyhlLGUuZHluX2x0cmVlLGUuZHluX2R0cmVlKSksVyhlKSxuJiZNKGUpfSxyLl90cl90YWxseT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGUucGVuZGluZ19idWZbZS5kX2J1ZisyKmUubGFzdF9saXRdPXQ+Pj44JjI1NSxlLnBlbmRpbmdfYnVmW2UuZF9idWYrMiplLmxhc3RfbGl0KzFdPTI1NSZ0LGUucGVuZGluZ19idWZbZS5sX2J1ZitlLmxhc3RfbGl0XT0yNTUmcixlLmxhc3RfbGl0KyssMD09PXQ/ZS5keW5fbHRyZWVbMipyXSsrOihlLm1hdGNoZXMrKyx0LS0sZS5keW5fbHRyZWVbMiooQVtyXSt1KzEpXSsrLGUuZHluX2R0cmVlWzIqTih0KV0rKyksZS5sYXN0X2xpdD09PWUubGl0X2J1ZnNpemUtMX0sci5fdHJfYWxpZ249ZnVuY3Rpb24oZSl7UChlLDIsMyksTChlLG0seiksZnVuY3Rpb24oZSl7MTY9PT1lLmJpX3ZhbGlkPyhVKGUsZS5iaV9idWYpLGUuYmlfYnVmPTAsZS5iaV92YWxpZD0wKTo4PD1lLmJpX3ZhbGlkJiYoZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109MjU1JmUuYmlfYnVmLGUuYmlfYnVmPj49OCxlLmJpX3ZhbGlkLT04KX0oZSl9fSx7XCIuLi91dGlscy9jb21tb25cIjo0MX1dLDUzOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy5pbnB1dD1udWxsLHRoaXMubmV4dF9pbj0wLHRoaXMuYXZhaWxfaW49MCx0aGlzLnRvdGFsX2luPTAsdGhpcy5vdXRwdXQ9bnVsbCx0aGlzLm5leHRfb3V0PTAsdGhpcy5hdmFpbF9vdXQ9MCx0aGlzLnRvdGFsX291dD0wLHRoaXMubXNnPVwiXCIsdGhpcy5zdGF0ZT1udWxsLHRoaXMuZGF0YV90eXBlPTIsdGhpcy5hZGxlcj0wfX0se31dLDU0OltmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKGUpeyFmdW5jdGlvbihyLG4pe1widXNlIHN0cmljdFwiO2lmKCFyLnNldEltbWVkaWF0ZSl7dmFyIGkscyx0LGEsbz0xLGg9e30sdT0hMSxsPXIuZG9jdW1lbnQsZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YmJk9iamVjdC5nZXRQcm90b3R5cGVPZihyKTtlPWUmJmUuc2V0VGltZW91dD9lOnIsaT1cIltvYmplY3QgcHJvY2Vzc11cIj09PXt9LnRvU3RyaW5nLmNhbGwoci5wcm9jZXNzKT9mdW5jdGlvbihlKXtwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7YyhlKX0pfTpmdW5jdGlvbigpe2lmKHIucG9zdE1lc3NhZ2UmJiFyLmltcG9ydFNjcmlwdHMpe3ZhciBlPSEwLHQ9ci5vbm1lc3NhZ2U7cmV0dXJuIHIub25tZXNzYWdlPWZ1bmN0aW9uKCl7ZT0hMX0sci5wb3N0TWVzc2FnZShcIlwiLFwiKlwiKSxyLm9ubWVzc2FnZT10LGV9fSgpPyhhPVwic2V0SW1tZWRpYXRlJFwiK01hdGgucmFuZG9tKCkrXCIkXCIsci5hZGRFdmVudExpc3RlbmVyP3IuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIixkLCExKTpyLmF0dGFjaEV2ZW50KFwib25tZXNzYWdlXCIsZCksZnVuY3Rpb24oZSl7ci5wb3N0TWVzc2FnZShhK2UsXCIqXCIpfSk6ci5NZXNzYWdlQ2hhbm5lbD8oKHQ9bmV3IE1lc3NhZ2VDaGFubmVsKS5wb3J0MS5vbm1lc3NhZ2U9ZnVuY3Rpb24oZSl7YyhlLmRhdGEpfSxmdW5jdGlvbihlKXt0LnBvcnQyLnBvc3RNZXNzYWdlKGUpfSk6bCYmXCJvbnJlYWR5c3RhdGVjaGFuZ2VcImluIGwuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKT8ocz1sLmRvY3VtZW50RWxlbWVudCxmdW5jdGlvbihlKXt2YXIgdD1sLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7dC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtjKGUpLHQub25yZWFkeXN0YXRlY2hhbmdlPW51bGwscy5yZW1vdmVDaGlsZCh0KSx0PW51bGx9LHMuYXBwZW5kQ2hpbGQodCl9KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGMsMCxlKX0sZS5zZXRJbW1lZGlhdGU9ZnVuY3Rpb24oZSl7XCJmdW5jdGlvblwiIT10eXBlb2YgZSYmKGU9bmV3IEZ1bmN0aW9uKFwiXCIrZSkpO2Zvcih2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT1hcmd1bWVudHNbcisxXTt2YXIgbj17Y2FsbGJhY2s6ZSxhcmdzOnR9O3JldHVybiBoW29dPW4saShvKSxvKyt9LGUuY2xlYXJJbW1lZGlhdGU9Zn1mdW5jdGlvbiBmKGUpe2RlbGV0ZSBoW2VdfWZ1bmN0aW9uIGMoZSl7aWYodSlzZXRUaW1lb3V0KGMsMCxlKTtlbHNle3ZhciB0PWhbZV07aWYodCl7dT0hMDt0cnl7IWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2FsbGJhY2sscj1lLmFyZ3M7c3dpdGNoKHIubGVuZ3RoKXtjYXNlIDA6dCgpO2JyZWFrO2Nhc2UgMTp0KHJbMF0pO2JyZWFrO2Nhc2UgMjp0KHJbMF0sclsxXSk7YnJlYWs7Y2FzZSAzOnQoclswXSxyWzFdLHJbMl0pO2JyZWFrO2RlZmF1bHQ6dC5hcHBseShuLHIpfX0odCl9ZmluYWxseXtmKGUpLHU9ITF9fX19ZnVuY3Rpb24gZChlKXtlLnNvdXJjZT09PXImJlwic3RyaW5nXCI9PXR5cGVvZiBlLmRhdGEmJjA9PT1lLmRhdGEuaW5kZXhPZihhKSYmYygrZS5kYXRhLnNsaWNlKGEubGVuZ3RoKSl9fShcInVuZGVmaW5lZFwiPT10eXBlb2Ygc2VsZj92b2lkIDA9PT1lP3RoaXM6ZTpzZWxmKX0pLmNhbGwodGhpcyxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dfSx7fSxbMTBdKSgxMCl9KTsiLCAiaW1wb3J0IHtcblx0QXBwLFxuXHROb3RpY2UsXG5cdFBsdWdpbixcblx0UGx1Z2luU2V0dGluZ1RhYixcblx0U2V0dGluZyxcblx0cmVxdWVzdFVybCxcblx0VEZvbGRlcixcblx0VEFic3RyYWN0RmlsZSxcblx0TW9kYWwsXG5cdFRGaWxlLFxuXHRGdXp6eVN1Z2dlc3RNb2RhbCwgLy8gTmVlZGVkIGZvciB0aGUgc2VhcmNoYWJsZSBmb2xkZXIgbGlzdFxuXHRGdXp6eU1hdGNoICAgICAgLy8gTmVlZGVkIGZvciBoaWdobGlnaHRpbmcgc2VhcmNoIHJlc3VsdHNcbn0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IEpTWmlwIGZyb20gJ2pzemlwJztcblxuLy8gU2V0dGluZ3MgSW50ZXJmYWNlXG5pbnRlcmZhY2UgQ291cnNlTWF0ZXJpYWxQbHVnaW5TZXR0aW5ncyB7XG5cdHRhcmdldEZvbGRlcjogc3RyaW5nO1xufVxuXG4vLyBEZWZhdWx0IFNldHRpbmdzXG5jb25zdCBERUZBVUxUX1NFVFRJTkdTOiBDb3Vyc2VNYXRlcmlhbFBsdWdpblNldHRpbmdzID0ge1xuXHR0YXJnZXRGb2xkZXI6ICdDb3Vyc2UgTW9kdWxlcycgLy8gRGVmYXVsdCBmb2xkZXIgbmFtZVxufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAgVVJMIElucHV0IE1vZGFsIENsYXNzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5jbGFzcyBVcmxJbnB1dE1vZGFsIGV4dGVuZHMgTW9kYWwge1xuXHRyZXN1bHQ6IHN0cmluZyA9ICcnO1xuXHRvblN1Ym1pdDogKHJlc3VsdDogc3RyaW5nKSA9PiB2b2lkO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBvblN1Ym1pdDogKHJlc3VsdDogc3RyaW5nKSA9PiB2b2lkKSB7XG5cdFx0c3VwZXIoYXBwKTtcblx0XHR0aGlzLm9uU3VibWl0ID0gb25TdWJtaXQ7XG5cdH1cblxuXHRvbk9wZW4oKSB7XG5cdFx0Y29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XG5cdFx0Y29udGVudEVsLmVtcHR5KCk7XG5cdFx0Y29udGVudEVsLmNyZWF0ZUVsKCdoMicsIHsgdGV4dDogJ0VudGVyIENvdXJzZSBNb2R1bGUgVVJMJyB9KTtcblxuXHRcdC8vIElucHV0IGZpZWxkIGZvciB0aGUgVVJMXG5cdFx0bmV3IFNldHRpbmcoY29udGVudEVsKVxuXHRcdFx0LnNldE5hbWUoJ1VSTCcpXG5cdFx0XHQuYWRkVGV4dCgodGV4dCkgPT5cblx0XHRcdFx0dGV4dC5vbkNoYW5nZSgodmFsdWUpID0+IHtcblx0XHRcdFx0XHR0aGlzLnJlc3VsdCA9IHZhbHVlLnRyaW0oKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmlucHV0RWwuZm9jdXMoKSk7IC8vIEZvY3VzIHRoZSBpbnB1dCBmaWVsZCBhdXRvbWF0aWNhbGx5XG5cblx0XHQvLyBTdWJtaXQgYnV0dG9uXG5cdFx0bmV3IFNldHRpbmcoY29udGVudEVsKVxuXHRcdFx0LmFkZEJ1dHRvbigoYnRuKSA9PlxuXHRcdFx0XHRidG5cblx0XHRcdFx0XHQuc2V0QnV0dG9uVGV4dCgnRG93bmxvYWQgYW5kIFVuemlwJylcblx0XHRcdFx0XHQuc2V0Q3RhKCkgLy8gTWFrZXMgdGhlIGJ1dHRvbiBtb3JlIHByb21pbmVudFxuXHRcdFx0XHRcdC5vbkNsaWNrKCgpID0+IHtcblx0XHRcdFx0XHRcdGlmICh0aGlzLnJlc3VsdCkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdHRoaXMub25TdWJtaXQodGhpcy5yZXN1bHQpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0bmV3IE5vdGljZShcIlBsZWFzZSBlbnRlciBhIFVSTC5cIik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSkpO1xuXG5cdFx0Ly8gT3B0aW9uYWw6IEFsbG93IHN1Ym1pdHRpbmcgd2l0aCBFbnRlciBrZXkgaW4gdGhlIHRleHQgaW5wdXRcblx0XHRjb250ZW50RWwuYWRkRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCAoZXZlbnQpID0+IHtcblx0XHRcdGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gUHJldmVudCBkZWZhdWx0IEVudGVyIGJlaGF2aW9yXG5cdFx0XHRcdGlmICh0aGlzLnJlc3VsdCkge1xuXHRcdFx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHRcdFx0XHR0aGlzLm9uU3VibWl0KHRoaXMucmVzdWx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRuZXcgTm90aWNlKFwiUGxlYXNlIGVudGVyIGEgVVJMLlwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0b25DbG9zZSgpIHtcblx0XHRsZXQgeyBjb250ZW50RWwgfSA9IHRoaXM7XG5cdFx0Y29udGVudEVsLmVtcHR5KCk7XG5cdH1cbn1cblxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAgRm9sZGVyIFN1Z2dlc3QgTW9kYWwgQ2xhc3MgKE1PRElGSUVEIHRvIGFjY2VwdCBwcmUtZmV0Y2hlZCBsaXN0KVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuY2xhc3MgRm9sZGVyU3VnZ2VzdE1vZGFsIGV4dGVuZHMgRnV6enlTdWdnZXN0TW9kYWw8VEZvbGRlcj4ge1xuXHRwbHVnaW46IENvdXJzZU1hdGVyaWFsUGx1Z2luO1xuXHRzZXR0aW5nRGlzcGxheUVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQ7XG5cdHByZUZldGNoZWRGb2xkZXJzOiBURm9sZGVyW10gfCBudWxsOyAvLyBUbyBzdG9yZSB0aGUgbGlzdCBwYXNzZWQgZnJvbSBzZXR0aW5ncyB0YWJcblxuXHQvLyAtLS0gTU9ESUZJRUQgQ09OU1RSVUNUT1IgLS0tXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IENvdXJzZU1hdGVyaWFsUGx1Z2luLCBzZXR0aW5nRGlzcGxheUVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQsIGZvbGRlcnM6IFRGb2xkZXJbXSkge1xuXHRcdHN1cGVyKGFwcCk7XG5cdFx0dGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cdFx0dGhpcy5zZXR0aW5nRGlzcGxheUVsZW1lbnQgPSBzZXR0aW5nRGlzcGxheUVsZW1lbnQ7XG5cdFx0dGhpcy5wcmVGZXRjaGVkRm9sZGVycyA9IGZvbGRlcnM7IC8vIFN0b3JlIHRoZSBwYXNzZWQgbGlzdFxuXHRcdHRoaXMuc2V0UGxhY2Vob2xkZXIoXCJTZWFyY2ggZm9yIGEgZm9sZGVyLi4uXCIpO1xuXHRcdGNvbnNvbGUubG9nKFwiRm9sZGVyU3VnZ2VzdE1vZGFsOiBJbml0aWFsaXplZCB3aXRoIHByZS1mZXRjaGVkIGxpc3QgY29udGFpbmluZ1wiLCBmb2xkZXJzLmxlbmd0aCwgXCJmb2xkZXJzLlwiKTtcblx0fVxuXG5cdC8vIC0tLSBNT0RJRklFRCBnZXRJdGVtcyAtLS1cblx0Ly8gR2V0IGFsbCBmb2xkZXJzIGluY2x1ZGluZyByb290XG5cdGdldEl0ZW1zKCk6IFRGb2xkZXJbXSB7XG5cdFx0Ly8gUHJpb3JpdGl6ZSB0aGUgcHJlLWZldGNoZWQgbGlzdCBpZiBhdmFpbGFibGVcblx0XHRpZiAodGhpcy5wcmVGZXRjaGVkRm9sZGVycykge1xuXHRcdFx0Y29uc29sZS5sb2coXCJGb2xkZXJTdWdnZXN0TW9kYWw6IFVzaW5nIHByZS1mZXRjaGVkIGZvbGRlciBsaXN0LlwiKTtcblx0XHRcdHJldHVybiB0aGlzLnByZUZldGNoZWRGb2xkZXJzO1xuXHRcdH1cblxuXHRcdC8vIEZhbGxiYWNrOiBGZXRjaCBpZiBsaXN0IHdhc24ndCBwcm92aWRlZCAoc2hvdWxkbid0IGhhcHBlbiB3aXRoIG5ldyBzZXR0aW5ncyB0YWIgbG9naWMpXG5cdFx0Y29uc29sZS53YXJuKFwiRm9sZGVyU3VnZ2VzdE1vZGFsOiBQcmUtZmV0Y2hlZCBsaXN0IG5vdCBhdmFpbGFibGUsIGZldGNoaW5nIG1hbnVhbGx5LlwiKTtcblx0XHRjb25zdCBmb2xkZXJzID0gdGhpcy5hcHAudmF1bHQuZ2V0QWxsTG9hZGVkRmlsZXMoKVxuXHRcdFx0XHRcdFx0XHQuZmlsdGVyKGZpbGUgPT4gZmlsZSBpbnN0YW5jZW9mIFRGb2xkZXIpIGFzIFRGb2xkZXJbXTtcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuYXBwLnZhdWx0LmdldFJvb3QoKTtcbiAgICAgICAgaWYgKCFmb2xkZXJzLnNvbWUoZiA9PiBmLnBhdGggPT09ICcvJykpIHtcbiAgICAgICAgICAgICBmb2xkZXJzLnVuc2hpZnQocm9vdCk7XG4gICAgICAgIH1cblx0XHRyZXR1cm4gZm9sZGVycztcblx0fVxuXG5cdC8vIFRleHQgcmVwcmVzZW50YXRpb24gb2YgZWFjaCBmb2xkZXIgZm9yIHNlYXJjaGluZyBhbmQgZGlzcGxheVxuXHRnZXRJdGVtVGV4dChmb2xkZXI6IFRGb2xkZXIpOiBzdHJpbmcge1xuXHRcdHJldHVybiBmb2xkZXIucGF0aCA9PT0gJy8nID8gJy8gKFZhdWx0IFJvb3QpJyA6IGZvbGRlci5wYXRoOyAvLyBEaXNwbGF5IHRoZSBmdWxsIHBhdGgsIHNwZWNpYWwgbGFiZWwgZm9yIHJvb3Rcblx0fVxuXG5cdC8vIEFjdGlvbiB3aGVuIGEgZm9sZGVyIGlzIGNob3NlblxuXHRvbkNob29zZUl0ZW0oZm9sZGVyOiBURm9sZGVyLCBldnQ6IE1vdXNlRXZlbnQgfCBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3Qgc2VsZWN0ZWRQYXRoID0gZm9sZGVyLnBhdGg7IC8vIFBhdGggaXMgJy8nIGZvciByb290XG5cdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MudGFyZ2V0Rm9sZGVyID0gc2VsZWN0ZWRQYXRoO1xuXHRcdHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdG5ldyBOb3RpY2UoYFRhcmdldCBmb2xkZXIgc2V0IHRvOiAke3NlbGVjdGVkUGF0aH1gKTtcblx0XHQvLyBVcGRhdGUgdGhlIHRleHQgZGlzcGxheSBpbiB0aGUgc2V0dGluZ3MgdGFiIGltbWVkaWF0ZWx5XG5cdFx0dGhpcy5zZXR0aW5nRGlzcGxheUVsZW1lbnQudmFsdWUgPSBzZWxlY3RlZFBhdGg7XG5cdH1cblxuXHQvLyBPcHRpb25hbDogUmVuZGVyIHN1Z2dlc3Rpb25zIHdpdGggaGlnaGxpZ2h0aW5nIChtb3JlIGFkdmFuY2VkKVxuICAgIHJlbmRlclN1Z2dlc3Rpb24oaXRlbTogRnV6enlNYXRjaDxURm9sZGVyPiwgZWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIC8vIFVzZSB0aGUgZGVmYXVsdCBmdXp6eSBtYXRjaCByZW5kZXJpbmcgcHJvdmlkZWQgYnkgdGhlIHBhcmVudCBjbGFzc1xuICAgICAgICBzdXBlci5yZW5kZXJTdWdnZXN0aW9uKGl0ZW0sIGVsKTtcbiAgICAgICAgLy8gQWRkIHNwZWNpYWwgdGV4dCBmb3Igcm9vdCBmb2xkZXJcbiAgICAgICAgaWYgKGl0ZW0uaXRlbS5wYXRoID09PSAnLycpIHtcbiAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1RleHQgPSBlbC5xdWVyeVNlbGVjdG9yKCcuc3VnZ2VzdGlvbi1jb250ZW50Jyk7XG4gICAgICAgICAgICAgaWYgKGV4aXN0aW5nVGV4dCkgZXhpc3RpbmdUZXh0LnRleHRDb250ZW50ID0gJy8gKFZhdWx0IFJvb3QpJztcbiAgICAgICAgICAgICBlbHNlIGVsLnNldFRleHQoJy8gKFZhdWx0IFJvb3QpJyk7IC8vIEZhbGxiYWNrIGlmIHN0cnVjdHVyZSBjaGFuZ2VzXG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gIFNldHRpbmdzIFRhYiBDbGFzcyAoTU9ESUZJRUQgLSBGZXRjaCBsaXN0IG9uIGJ1dHRvbiBjbGljaylcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmNsYXNzIENvdXJzZU1hdGVyaWFsU2V0dGluZ1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuXHRwbHVnaW46IENvdXJzZU1hdGVyaWFsUGx1Z2luO1xuXG5cdGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IENvdXJzZU1hdGVyaWFsUGx1Z2luKSB7XG5cdFx0c3VwZXIoYXBwLCBwbHVnaW4pO1xuXHRcdHRoaXMucGx1Z2luID0gcGx1Z2luO1xuXHR9XG5cblx0ZGlzcGxheSgpOiB2b2lkIHtcblx0XHRjb25zdCB7IGNvbnRhaW5lckVsIH0gPSB0aGlzO1xuXG5cdFx0Y29udGFpbmVyRWwuZW1wdHkoKTsgLy8gQ2xlYXIgcHJldmlvdXMgc2V0dGluZ3Mgc2hvd25cblx0XHRjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6ICdDb3Vyc2UgTWF0ZXJpYWwgRG93bmxvYWRlciBTZXR0aW5ncycgfSk7XG5cblx0XHQvLyAtLS0gTU9ESUZJRUQgU2V0dGluZyBmb3IgVGFyZ2V0IEZvbGRlciAtLS1cblx0XHRjb25zdCBzZXR0aW5nID0gbmV3IFNldHRpbmcoY29udGFpbmVyRWwpIC8vIFN0b3JlIHRoZSBzZXR0aW5nIHJlZmVyZW5jZVxuXHRcdFx0LnNldE5hbWUoJ1RhcmdldCBGb2xkZXInKVxuXHRcdFx0LnNldERlc2MoJ1RoZSBmb2xkZXIgd2hlcmUgZG93bmxvYWRlZCBtb2R1bGVzIHdpbGwgYmUgdW56aXBwZWQuJyk7XG5cblx0XHQvLyBBZGQgYSBub24tZWRpdGFibGUgdGV4dCBlbGVtZW50IHRvIGRpc3BsYXkgdGhlIGN1cnJlbnQgc2V0dGluZ1xuXHRcdHNldHRpbmcuYWRkVGV4dCh0ZXh0ID0+IHtcblx0XHRcdHRleHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudGFyZ2V0Rm9sZGVyKS5zZXREaXNhYmxlZCh0cnVlKTtcblx0XHRcdHRleHQuaW5wdXRFbC5zdHlsZS53aWR0aCA9ICcxMDAlJzsgLy8gTWFrZSB0aGUgaW5wdXQgZmllbGQgdGFrZSBmdWxsIGF2YWlsYWJsZSB3aWR0aFxuXHRcdFx0dGV4dC5pbnB1dEVsLnN0eWxlLm1hcmdpblJpZ2h0ID0gJzEwcHgnOyAvLyBBZGQgc29tZSBzcGFjZSBiZWZvcmUgdGhlIGJ1dHRvblxuXHRcdFx0Y29uc3QgZGlzcGxheUVsZW1lbnQgPSB0ZXh0LmlucHV0RWw7IC8vIFN0b3JlIHRoZSBpbnB1dCBlbGVtZW50IHJlZmVyZW5jZVxuXG5cdFx0XHQvLyBBZGQgdGhlIGJ1dHRvbiB0byB0aGUgc2FtZSBzZXR0aW5nIGNvbnRyb2wgY29udGFpbmVyXG5cdFx0XHRzZXR0aW5nLmFkZEJ1dHRvbihidXR0b24gPT4geyAvLyBBZGQgYnV0dG9uIGRpcmVjdGx5IHRvIHRoZSAnc2V0dGluZycgb2JqZWN0XG5cdFx0XHRcdGJ1dHRvbi5zZXRCdXR0b25UZXh0KCdDaGFuZ2UgRm9sZGVyJylcblx0XHRcdFx0XHQuc2V0Q3RhKGZhbHNlKSAvLyBMZXNzIHByb21pbmVudCB0aGFuIG1haW4gYWN0aW9uIGJ1dHRvbnNcblx0XHRcdFx0XHQub25DbGljaygoKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyAtLS0gRkVUQ0ggRk9MREVSIExJU1QgSEVSRSAtLS1cblx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKFwiU2V0dGluZ3MgVGFiOiAnQ2hhbmdlIEZvbGRlcicgY2xpY2tlZC4gRmV0Y2hpbmcgZm9sZGVyIGxpc3QuLi5cIik7XG5cdFx0XHRcdFx0XHRjb25zdCBjdXJyZW50Rm9sZGVycyA9ICh0aGlzLmFwcC52YXVsdC5nZXRBbGxMb2FkZWRGaWxlcygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGZpbGUgPT4gZmlsZSBpbnN0YW5jZW9mIFRGb2xkZXIpIGFzIFRGb2xkZXJbXSk7XG5cdFx0XHRcdFx0XHQvLyBFbnN1cmUgcm9vdCBpcyBpbmNsdWRlZCBpZiBuZWVkZWQgKGdldEFsbExvYWRlZEZpbGVzIHVzdWFsbHkgaW5jbHVkZXMgaXQpXG5cdFx0XHRcdFx0XHRjb25zdCByb290ID0gdGhpcy5hcHAudmF1bHQuZ2V0Um9vdCgpO1xuXHRcdFx0XHRcdFx0aWYgKCFjdXJyZW50Rm9sZGVycy5zb21lKGYgPT4gZi5wYXRoID09PSAnLycpKSB7XG5cdFx0XHRcdFx0XHRcdGN1cnJlbnRGb2xkZXJzLnVuc2hpZnQocm9vdCk7XG5cdFx0XHRcdFx0XHR9XG4gICAgICAgICAgICBcdFx0XHRjb25zb2xlLmxvZyhcIlNldHRpbmdzIFRhYjogUGFzc2luZ1wiLCBjdXJyZW50Rm9sZGVycy5sZW5ndGgsIFwiZm9sZGVycyB0byBtb2RhbC5cIik7XG5cblx0XHRcdFx0XHRcdC8vIC0tLSBQQVNTIExJU1QgVE8gTU9EQUwgLS0tXG5cdFx0XHRcdFx0XHQvLyBPcGVuIHRoZSBzdWdnZXN0ZXIgbW9kYWwgd2hlbiBidXR0b24gaXMgY2xpY2tlZCwgcGFzc2luZyB0aGUgZmV0Y2hlZCBsaXN0XG5cdFx0XHRcdFx0XHRuZXcgRm9sZGVyU3VnZ2VzdE1vZGFsKHRoaXMuYXBwLCB0aGlzLnBsdWdpbiwgZGlzcGxheUVsZW1lbnQsIGN1cnJlbnRGb2xkZXJzKS5vcGVuKCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXG5cdFx0Ly8gTm90ZSBhYm91dCBmb2xkZXIgY3JlYXRpb24gKHN0aWxsIHJlbGV2YW50KVxuXHRcdGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdwJywgeyB0ZXh0OiAnTm90ZTogSWYgdGhlIGRlc2lyZWQgZm9sZGVyIGRvZXNuXFwndCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkIGR1cmluZyB0aGUgZG93bmxvYWQgcHJvY2VzcyAoaWYgcG9zc2libGUpLicgfSk7XG5cdH1cbn1cblxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAgTWFpbiBQbHVnaW4gQ2xhc3Ncbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvdXJzZU1hdGVyaWFsUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcblx0c2V0dGluZ3M6IENvdXJzZU1hdGVyaWFsUGx1Z2luU2V0dGluZ3M7XG5cblx0YXN5bmMgb25sb2FkKCkge1xuXHRcdGNvbnNvbGUubG9nKCdMb2FkaW5nIENvdXJzZSBNYXRlcmlhbCBEb3dubG9hZGVyIFBsdWdpbicpO1xuXHRcdGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XG5cblx0XHR0aGlzLmFkZENvbW1hbmQoe1xuXHRcdFx0aWQ6ICdkb3dubG9hZC1jb3Vyc2UtbW9kdWxlJyxcblx0XHRcdG5hbWU6ICdEb3dubG9hZCBhbmQgVW56aXAgQ291cnNlIE1vZHVsZScsXG5cdFx0XHRjYWxsYmFjazogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnNob3dVcmxJbnB1dE1vZGFsKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHR0aGlzLmFkZFNldHRpbmdUYWIobmV3IENvdXJzZU1hdGVyaWFsU2V0dGluZ1RhYih0aGlzLmFwcCwgdGhpcykpO1xuXHR9XG5cblx0b251bmxvYWQoKSB7XG5cdFx0Y29uc29sZS5sb2coJ1VubG9hZGluZyBDb3Vyc2UgTWF0ZXJpYWwgRG93bmxvYWRlciBQbHVnaW4nKTtcblx0fVxuXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9TRVRUSU5HUywgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcblx0fVxuXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xuXHR9XG5cblx0Ly8gLS0tIEhlbHBlciB0byBlbnN1cmUgZm9sZGVyIGV4aXN0cyAoSGFuZGxlcyBleGlzdGluZyBmaWxlcyBncmFjZWZ1bGx5KSAtLS1cblx0YXN5bmMgZW5zdXJlRm9sZGVyRXhpc3RzKHBhdGg6IHN0cmluZyk6IFByb21pc2U8VEZvbGRlciB8IG51bGw+IHtcblx0XHQvLyBIYW5kbGUgcm9vdCBjYXNlIGV4cGxpY2l0bHlcblx0XHRpZiAocGF0aCA9PT0gJy8nIHx8IHBhdGggPT09ICcnKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hcHAudmF1bHQuZ2V0Um9vdCgpO1xuXHRcdH1cblxuXHRcdC8vIE5vcm1hbGl6ZSBwYXRoIHNsaWdodGx5IChyZW1vdmUgbGVhZGluZy90cmFpbGluZyBzbGFzaGVzIGZvciBjb25zaXN0ZW5jeSlcblx0XHRsZXQgbm9ybWFsaXplZFBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC98XFwvJC9nLCAnJyk7XG5cdFx0aWYgKG5vcm1hbGl6ZWRQYXRoID09PSAnJykgcmV0dXJuIHRoaXMuYXBwLnZhdWx0LmdldFJvb3QoKTtcblxuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGV4aXN0aW5nSXRlbSA9IHRoaXMuYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChub3JtYWxpemVkUGF0aCk7XG5cblx0XHRcdGlmIChleGlzdGluZ0l0ZW0gaW5zdGFuY2VvZiBURm9sZGVyKSB7XG5cdFx0XHRcdC8vIEZvbGRlciBhbHJlYWR5IGV4aXN0cywgYWxsIGdvb2QuXG5cdFx0XHRcdHJldHVybiBleGlzdGluZ0l0ZW07XG5cdFx0XHR9IGVsc2UgaWYgKGV4aXN0aW5nSXRlbSBpbnN0YW5jZW9mIFRGaWxlKSB7XG5cdFx0XHRcdC8vIEEgZmlsZSBleGlzdHMgd2l0aCB0aGlzIG5hbWUsIGNhbm5vdCBjcmVhdGUgZm9sZGVyIGhlcmUuXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoYENhbm5vdCBjcmVhdGUgZm9sZGVyICcke25vcm1hbGl6ZWRQYXRofScsIGEgZmlsZSB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cy5gKTtcblx0XHRcdFx0bmV3IE5vdGljZShgQ2Fubm90IGNyZWF0ZSBmb2xkZXIgJyR7bm9ybWFsaXplZFBhdGh9JywgYSBmaWxlIGV4aXN0cyB0aGVyZS5gKTtcblx0XHRcdFx0cmV0dXJuIG51bGw7IC8vIEluZGljYXRlIGZhaWx1cmVcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEZvbGRlciBkb2Vzbid0IGV4aXN0LCB0cnkgdG8gY3JlYXRlIGl0XG5cdFx0XHRcdGNvbnNvbGUubG9nKGBBdHRlbXB0aW5nIHRvIGNyZWF0ZSBmb2xkZXI6ICR7bm9ybWFsaXplZFBhdGh9YCk7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29uc3QgbmV3Rm9sZGVyID0gYXdhaXQgdGhpcy5hcHAudmF1bHQuY3JlYXRlRm9sZGVyKG5vcm1hbGl6ZWRQYXRoKTtcblx0XHRcdFx0XHRuZXcgTm90aWNlKGBDcmVhdGVkIGZvbGRlcjogJHtub3JtYWxpemVkUGF0aH1gKTtcblx0XHRcdFx0XHRyZXR1cm4gbmV3Rm9sZGVyOyAvLyBSZXR1cm4gdGhlIG5ld2x5IGNyZWF0ZWQgZm9sZGVyIG9iamVjdFxuXHRcdFx0XHR9IGNhdGNoIChjcmVhdGlvbkVycm9yKSB7XG5cdFx0XHRcdFx0Ly8gSGFuZGxlIHBvdGVudGlhbCBlcnJvcnMgZHVyaW5nIGNyZWF0aW9uIGl0c2VsZlxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoYEVycm9yIGNyZWF0aW5nIGZvbGRlciAnJHtub3JtYWxpemVkUGF0aH0nOmAsIGNyZWF0aW9uRXJyb3IpO1xuXHRcdFx0XHRcdGNvbnN0IGNoZWNrQWdhaW4gPSB0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgobm9ybWFsaXplZFBhdGgpO1xuXHRcdFx0XHRcdGlmIChjaGVja0FnYWluIGluc3RhbmNlb2YgVEZvbGRlcikge1xuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYEZvbGRlciAnJHtub3JtYWxpemVkUGF0aH0nIGZvdW5kIGFmdGVyIGluaXRpYWwgY3JlYXRpb24gYXR0ZW1wdCBmYWlsZWQuYCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gY2hlY2tBZ2FpbjsgLy8gSXQgZXhpc3RzIG5vdywgcmV0dXJuIGl0XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG5ldyBOb3RpY2UoYEVycm9yIGNyZWF0aW5nIGZvbGRlciAnJHtub3JtYWxpemVkUGF0aH0nLiBDaGVjayBjb25zb2xlLmApO1xuXHRcdFx0XHRcdHJldHVybiBudWxsOyAvLyBJbmRpY2F0ZSBmYWlsdXJlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Ly8gQ2F0Y2ggZXJyb3JzIGR1cmluZyB0aGUgaW5pdGlhbCBnZXRBYnN0cmFjdEZpbGVCeVBhdGggb3Igb3RoZXIgdW5leHBlY3RlZCBpc3N1ZXNcblx0XHRcdGNvbnNvbGUuZXJyb3IoYFVuZXhwZWN0ZWQgZXJyb3IgZW5zdXJpbmcgZm9sZGVyIGV4aXN0cyAnJHtub3JtYWxpemVkUGF0aH0nOmAsIGVycm9yKTtcblx0XHRcdG5ldyBOb3RpY2UoYFVuZXhwZWN0ZWQgZXJyb3IgY2hlY2tpbmcgZm9sZGVyICcke25vcm1hbGl6ZWRQYXRofScuIENoZWNrIGNvbnNvbGUuYCk7XG5cdFx0XHRyZXR1cm4gbnVsbDsgLy8gSW5kaWNhdGUgZmFpbHVyZVxuXHRcdH1cblx0fVxuXG5cblx0Ly8gLS0tIE1ldGhvZCB0byBvcGVuIHRoZSBVUkwgSW5wdXQgTW9kYWwgLS0tXG5cdHNob3dVcmxJbnB1dE1vZGFsKCkge1xuXHRcdG5ldyBVcmxJbnB1dE1vZGFsKHRoaXMuYXBwLCAodXJsKSA9PiB7XG5cdFx0XHR0aGlzLmRvd25sb2FkQW5kVW56aXAodXJsKTtcblx0XHR9KS5vcGVuKCk7XG5cdH1cblxuXG5cdC8vIC0tLSBNYWluIERvd25sb2FkL1VuemlwIExvZ2ljIChIYW5kbGVzIHNraXBwaW5nIGV4aXN0aW5nIGZpbGVzICYgbWFjT1MgbWV0YWRhdGEpIC0tLVxuXHRhc3luYyBkb3dubG9hZEFuZFVuemlwKHVybDogc3RyaW5nKSB7XG5cdFx0Ly8gLS0tIDEuIFVSTCBWYWxpZGF0aW9uICYgRHJvcGJveCBGaXggLS0tXG5cdFx0aWYgKCF1cmwuc3RhcnRzV2l0aCgnaHR0cDovLycpICYmICF1cmwuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xuXHRcdFx0bmV3IE5vdGljZSgnSW52YWxpZCBVUkwgcmVjZWl2ZWQuIE11c3Qgc3RhcnQgd2l0aCBodHRwOi8vIG9yIGh0dHBzOi8vJyk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHVybCA9IHVybC5yZXBsYWNlKCd3d3cuZHJvcGJveC5jb20nLCAnZGwuZHJvcGJveHVzZXJjb250ZW50LmNvbScpO1xuXHRcdGlmICh1cmwuaW5jbHVkZXMoJ2Ryb3Bib3guY29tJykgJiYgIXVybC5pbmNsdWRlcygnZGw9MScpKSB7XG5cdFx0XHR1cmwgPSB1cmwuaW5jbHVkZXMoJz8nKSA/IGAke3VybH0mZGw9MWAgOiBgJHt1cmx9P2RsPTFgO1xuXHRcdH1cblxuXHRcdC8vIC0tLSAyLiBHZXQgVGFyZ2V0IEZvbGRlciBhbmQgRW5zdXJlIEl0IEV4aXN0cyAtLS1cblx0XHRjb25zdCB0YXJnZXRGb2xkZXJQYXRoID0gdGhpcy5zZXR0aW5ncy50YXJnZXRGb2xkZXI7XG5cdFx0Ly8gVXNlIGVuc3VyZUZvbGRlckV4aXN0cyB0byBoYW5kbGUgcm9vdCAoJy8nKSBjb3JyZWN0bHkgbm93XG5cdFx0Y29uc3QgdGFyZ2V0Rm9sZGVyID0gYXdhaXQgdGhpcy5lbnN1cmVGb2xkZXJFeGlzdHModGFyZ2V0Rm9sZGVyUGF0aCk7XG5cdFx0aWYgKCF0YXJnZXRGb2xkZXIpIHtcblx0XHRcdG5ldyBOb3RpY2UoYFRhcmdldCBmb2xkZXIgXCIke3RhcmdldEZvbGRlclBhdGh9XCIgY291bGQgbm90IGJlIGZvdW5kIG9yIGNyZWF0ZWQuIEFib3J0aW5nLmApO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBVc2UgdGhlIHBhdGggZnJvbSB0aGUgVEZvbGRlciBvYmplY3QsIGVzcGVjaWFsbHkgaW1wb3J0YW50IGZvciByb290XG5cdFx0Y29uc3QgY2xlYW5UYXJnZXRGb2xkZXJQYXRoID0gdGFyZ2V0Rm9sZGVyLnBhdGggPT09ICcvJyA/ICcnIDogdGFyZ2V0Rm9sZGVyLnBhdGg7XG5cblxuXHRcdC8vIC0tLSAzLiBEb3dubG9hZCAtLS1cblx0XHRsZXQgemlwRGF0YTogQXJyYXlCdWZmZXI7XG5cdFx0dHJ5IHtcblx0XHRcdG5ldyBOb3RpY2UoJ0Rvd25sb2FkaW5nIG1vZHVsZS4uLicpO1xuXHRcdFx0Y29uc29sZS5sb2coYFJlcXVlc3RpbmcgVVJMOiAke3VybH1gKTtcblx0XHRcdGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFVybCh7IHVybDogdXJsIH0pO1xuXHRcdFx0emlwRGF0YSA9IHJlc3BvbnNlLmFycmF5QnVmZmVyO1xuXHRcdFx0bmV3IE5vdGljZSgnRG93bmxvYWQgY29tcGxldGUuIFVuemlwcGluZy4uLicpO1xuXHRcdFx0Y29uc29sZS5sb2coYERvd25sb2FkZWQgJHt6aXBEYXRhLmJ5dGVMZW5ndGh9IGJ5dGVzLmApO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKCdEb3dubG9hZCBFcnJvcjonLCBlcnJvcik7XG5cdFx0XHRuZXcgTm90aWNlKGBGYWlsZWQgdG8gZG93bmxvYWQgZmlsZTogJHtlcnJvci5tZXNzYWdlfS4gQ2hlY2sgY29uc29sZSAoQ3RybCtTaGlmdCtJIG9yIENtZCtPcHQrSSkuYCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gLS0tIDQuIFVuemlwIGFuZCBXcml0ZSBGaWxlcyAtLS1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgemlwID0gYXdhaXQgSlNaaXAubG9hZEFzeW5jKHppcERhdGEpO1xuXHRcdFx0bGV0IGZpbGVDb3VudCA9IDA7XG5cdFx0XHRsZXQgZm9sZGVyUGF0aHNDcmVhdGVkID0gbmV3IFNldDxzdHJpbmc+KCk7IC8vIFRyYWNrIGNyZWF0ZWQgZm9sZGVyc1xuXG5cdFx0XHRmb3IgKGNvbnN0IHJlbGF0aXZlUGF0aCBpbiB6aXAuZmlsZXMpIHtcblx0XHRcdFx0Ly8gU2tpcCBtYWNPUyBtZXRhZGF0YSAoX19NQUNPU1gsIC5EU19TdG9yZSkgYW5kIGVtcHR5IHBhdGhzXG5cdFx0XHRcdGNvbnN0IGZpbGVOYW1lID0gcmVsYXRpdmVQYXRoLnNwbGl0KCcvJykucG9wKCk7IC8vIEdldCB0aGUgYWN0dWFsIGZpbGVuYW1lIHBhcnRcblx0XHRcdFx0aWYgKHJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCdfX01BQ09TWC8nKSB8fCBmaWxlTmFtZSA9PT0gJy5EU19TdG9yZScgfHwgIXJlbGF0aXZlUGF0aCkge1xuXHRcdFx0XHRcdGlmKHJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCdfX01BQ09TWC8nKSkgY29uc29sZS5sb2coYElnbm9yaW5nIG1hY09TIG1ldGFkYXRhIGZvbGRlcjogJHtyZWxhdGl2ZVBhdGh9YCk7XG5cdFx0XHRcdFx0aWYoZmlsZU5hbWUgPT09ICcuRFNfU3RvcmUnKSBjb25zb2xlLmxvZyhgSWdub3JpbmcgLkRTX1N0b3JlIGZpbGU6ICR7cmVsYXRpdmVQYXRofWApO1xuXHRcdFx0XHRcdGNvbnRpbnVlOyAvLyBTa2lwIHRoaXMgZW50cnlcblx0XHRcdFx0fVxuXG5cblx0XHRcdFx0Y29uc3QgemlwRW50cnkgPSB6aXAuZmlsZXNbcmVsYXRpdmVQYXRoXTtcblx0XHRcdFx0Ly8gQ29uc3RydWN0IGZ1bGwgZGVzdGluYXRpb24gcGF0aCwgaGFuZGxpbmcgcm9vdCBmb2xkZXIgY2FzZVxuICAgICAgICAgICAgICAgIGNvbnN0IGZ1bGxEZXN0UGF0aCA9IGNsZWFuVGFyZ2V0Rm9sZGVyUGF0aCA/IGAke2NsZWFuVGFyZ2V0Rm9sZGVyUGF0aH0vJHtyZWxhdGl2ZVBhdGh9YCA6IHJlbGF0aXZlUGF0aDtcblx0XHRcdFx0Y29uc3Qgbm9ybWFsaXplZERlc3RQYXRoID0gZnVsbERlc3RQYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKS5yZXBsYWNlKC9cXC8rL2csICcvJyk7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIGRpcmVjdG9yaWVzIGZyb20gemlwXG5cdFx0XHRcdGlmICh6aXBFbnRyeS5kaXIpIHtcblx0XHRcdFx0XHQvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2ggZm9yIGVuc3VyZUZvbGRlckV4aXN0cyBpZiBwcmVzZW50XG5cdFx0XHRcdFx0Y29uc3QgZGlyUGF0aCA9IG5vcm1hbGl6ZWREZXN0UGF0aC5lbmRzV2l0aCgnLycpID8gbm9ybWFsaXplZERlc3RQYXRoLnNsaWNlKDAsIC0xKSA6IG5vcm1hbGl6ZWREZXN0UGF0aDtcblx0XHRcdFx0XHRpZiAoZGlyUGF0aCAmJiAhZm9sZGVyUGF0aHNDcmVhdGVkLmhhcyhkaXJQYXRoKSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZm9sZGVyRXhpc3RzID0gYXdhaXQgdGhpcy5lbnN1cmVGb2xkZXJFeGlzdHMoZGlyUGF0aCk7XG5cdFx0XHRcdFx0XHRpZiAoIWZvbGRlckV4aXN0cykge1xuXHRcdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oYENvdWxkIG5vdCBlbnN1cmUgZGlyZWN0b3J5IGV4aXN0czogJHtkaXJQYXRofS4gU2tpcHBpbmcgY29udGVudHMuYCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRmb2xkZXJQYXRoc0NyZWF0ZWQuYWRkKGRpclBhdGgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBIYW5kbGUgZmlsZXMgZnJvbSB6aXBcblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3QgZmlsZURhdGEgPSBhd2FpdCB6aXBFbnRyeS5hc3luYygnYXJyYXlidWZmZXInKTtcblx0XHRcdFx0XHQvLyBFeHRyYWN0IHBhcmVudCBwYXRoIGNvcnJlY3RseSwgaGFuZGxpbmcgcm9vdCBjYXNlXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RTbGFzaEluZGV4ID0gbm9ybWFsaXplZERlc3RQYXRoLmxhc3RJbmRleE9mKCcvJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSBsYXN0U2xhc2hJbmRleCA+IDAgPyBub3JtYWxpemVkRGVzdFBhdGguc3Vic3RyaW5nKDAsIGxhc3RTbGFzaEluZGV4KSA6IChsYXN0U2xhc2hJbmRleCA9PT0gMCA/ICcvJyA6ICcnKTtcblxuXG5cdFx0XHRcdFx0Ly8gRW5zdXJlIHBhcmVudCBkaXJlY3RvcnkgZXhpc3RzIGZpcnN0XG5cdFx0XHRcdFx0aWYgKHBhcmVudFBhdGggJiYgcGFyZW50UGF0aCAhPT0gY2xlYW5UYXJnZXRGb2xkZXJQYXRoICYmICFmb2xkZXJQYXRoc0NyZWF0ZWQuaGFzKHBhcmVudFBhdGgpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBwYXJlbnRGb2xkZXJFeGlzdHMgPSBhd2FpdCB0aGlzLmVuc3VyZUZvbGRlckV4aXN0cyhwYXJlbnRQYXRoKTtcblx0XHRcdFx0XHRcdGlmICghcGFyZW50Rm9sZGVyRXhpc3RzKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUud2FybihgQ291bGQgbm90IGVuc3VyZSBwYXJlbnQgZGlyZWN0b3J5IGV4aXN0czogJHtwYXJlbnRQYXRofS4gU2tpcHBpbmcgZmlsZTogJHtub3JtYWxpemVkRGVzdFBhdGh9YCk7XG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlOyAvLyBTa2lwIHRoaXMgZmlsZSBpZiBwYXJlbnQgZm9sZGVyIGZhaWxlZFxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Zm9sZGVyUGF0aHNDcmVhdGVkLmFkZChwYXJlbnRQYXRoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBDaGVjayBpZiBpdGVtIGV4aXN0cyBhdCB0aGUgZGVzdGluYXRpb24gcGF0aFxuXHRcdFx0XHRcdC8vIFVzZSB0aGUgbm9ybWFsaXplZCBwYXRoIGZvciBjaGVja2luZ1xuXHRcdFx0XHRcdC8vIEhhbmRsZSByb290IHBhdGggY29ycmVjdGx5IGZvciBnZXRBYnN0cmFjdEZpbGVCeVBhdGggKGRvZXNuJ3Qgd2FudCBsZWFkaW5nICcvJylcblx0XHRcdFx0XHRjb25zdCBwYXRoVG9DaGVjayA9IG5vcm1hbGl6ZWREZXN0UGF0aC5zdGFydHNXaXRoKCcvJykgPyBub3JtYWxpemVkRGVzdFBhdGguc3Vic3RyaW5nKDEpIDogbm9ybWFsaXplZERlc3RQYXRoO1xuXHRcdFx0XHRcdC8vIEVuc3VyZSBwYXRoVG9DaGVjayBpcyBub3QgZW1wdHkgaWYgbm9ybWFsaXplZERlc3RQYXRoIHdhcyBqdXN0ICcvJ1xuXHRcdFx0XHRcdGlmIChwYXRoVG9DaGVjayA9PT0gJycgJiYgbm9ybWFsaXplZERlc3RQYXRoID09PSAnLycpIHtcblx0XHRcdFx0XHRcdC8vIFRoaXMgY2FzZSBzaG91bGRuJ3QgaGFwcGVuIGZvciBmaWxlcywgYnV0IGRlZmVuc2l2ZWx5IGhhbmRsZVxuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKFwiQXR0ZW1wdGluZyB0byBjaGVjayByb290IHBhdGggJy8nIGZvciBhIGZpbGUuIFNraXBwaW5nLlwiKTtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBDaGVjayBpZiBwYXRoVG9DaGVjayBpcyBub3QgZW1wdHkgYmVmb3JlIGNhbGxpbmcgZ2V0QWJzdHJhY3RGaWxlQnlQYXRoXG5cdFx0XHRcdFx0Y29uc3QgZXhpc3RpbmdJdGVtID0gcGF0aFRvQ2hlY2sgPyB0aGlzLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgocGF0aFRvQ2hlY2spIDogbnVsbDtcblxuXG5cdFx0XHRcdFx0aWYgKGV4aXN0aW5nSXRlbSBpbnN0YW5jZW9mIFRGaWxlKSB7XG5cdFx0XHRcdFx0XHQvLyBGaWxlIGFscmVhZHkgZXhpc3RzLiBTa2lwIGV4dHJhY3RpbmcgdGhpcyBmaWxlLlxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coYFNraXBwaW5nIGV4dHJhY3Rpb24gZm9yIGV4aXN0aW5nIGZpbGU6ICR7bm9ybWFsaXplZERlc3RQYXRofWApO1xuXHRcdFx0XHRcdFx0Y29udGludWU7IC8vIFNraXAgdG8gdGhlIG5leHQgaXRlbSBpbiB0aGUgemlwIGxvb3BcblxuXHRcdFx0XHRcdH0gZWxzZSBpZiAoZXhpc3RpbmdJdGVtIGluc3RhbmNlb2YgVEZvbGRlcikge1xuXHRcdFx0XHRcdFx0Ly8gQ2Fubm90IHJlcGxhY2UgYSBmb2xkZXIgd2l0aCBhIGZpbGUuXG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGBTa2lwcGluZyBmaWxlIHdyaXRlOiBBIGZvbGRlciBleGlzdHMgYXQgcGF0aCAke25vcm1hbGl6ZWREZXN0UGF0aH1gKTtcblx0XHRcdFx0XHRcdG5ldyBOb3RpY2UoYFNraXBwaW5nIGZpbGUgd3JpdGU6IEZvbGRlciBleGlzdHMgYXQgJHtub3JtYWxpemVkRGVzdFBhdGh9YCk7XG5cdFx0XHRcdFx0XHRjb250aW51ZTsgLy8gU2tpcCB0byB0aGUgbmV4dCBpdGVtIGluIHRoZSB6aXAgbG9vcFxuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIEZpbGUgZG9lcyBub3QgZXhpc3QuIENyZWF0ZSBpdC5cblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGBDcmVhdGluZyBuZXcgZmlsZTogJHtub3JtYWxpemVkRGVzdFBhdGh9YCk7XG5cdFx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuYXBwLnZhdWx0LmNyZWF0ZUJpbmFyeShub3JtYWxpemVkRGVzdFBhdGgsIGZpbGVEYXRhLCB7IG10aW1lOiBEYXRlLm5vdygpIH0pO1xuXHRcdFx0XHRcdFx0XHRmaWxlQ291bnQrKzsgLy8gSW5jcmVtZW50IGNvdW50IE9OTFkgd2hlbiBhIG5ldyBmaWxlIGlzIGNyZWF0ZWRcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKHdyaXRlRXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIHNwZWNpZmljIGVycm9yIGlzIFwiRmlsZSBhbHJlYWR5IGV4aXN0c1wiIHdoaWNoIG1pZ2h0IGhhcHBlblxuXHRcdFx0XHRcdFx0XHQvLyBkZXNwaXRlIG91ciBjaGVja3MgZHVlIHRvIHRpbWluZyBvciBjYXNlIHNlbnNpdGl2aXR5IGRpZmZlcmVuY2VzLlxuXHRcdFx0XHRcdFx0XHRpZiAod3JpdGVFcnJvci5tZXNzYWdlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiZmlsZSBhbHJlYWR5IGV4aXN0c1wiKSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUud2FybihgQ2F1Z2h0ICdGaWxlIGFscmVhZHkgZXhpc3RzJyBvbiBjcmVhdGVCaW5hcnkgZm9yICR7bm9ybWFsaXplZERlc3RQYXRofS4gU2tpcHBpbmcuYCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIG90aGVyIHVuZXhwZWN0ZWQgd3JpdGUgZXJyb3JzXG5cdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihgRXJyb3IgY3JlYXRpbmcgZmlsZSAnJHtub3JtYWxpemVkRGVzdFBhdGh9JzpgLCB3cml0ZUVycm9yKTtcblx0XHRcdFx0XHRcdFx0XHRuZXcgTm90aWNlKGBFcnJvciBjcmVhdGluZyBmaWxlICcke25vcm1hbGl6ZWREZXN0UGF0aH0nLiBDaGVjayBjb25zb2xlLmApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IC8vIEVuZCBvZiBmb3IgbG9vcFxuXG5cdFx0XHRuZXcgTm90aWNlKGBTdWNjZXNzZnVsbHkgZXh0cmFjdGVkICR7ZmlsZUNvdW50fSBuZXcgZmlsZShzKSB0byAnJHt0YXJnZXRGb2xkZXIucGF0aH0nLmApO1xuXHRcdFx0Y29uc29sZS5sb2coYEV4dHJhY3Rpb24gY29tcGxldGUgdG8gZm9sZGVyOiAke3RhcmdldEZvbGRlci5wYXRofWApO1xuXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ1VuemlwL1dyaXRlIEVycm9yOicsIGVycm9yKTtcblx0XHRcdC8vIEdlbmVyYWwgY2F0Y2ggYmxvY2sgZm9yIGVycm9ycyBkdXJpbmcgSlNaaXAgcHJvY2Vzc2luZyBvciB1bmV4cGVjdGVkIGlzc3Vlc1xuXHRcdFx0aWYgKGVycm9yLm1lc3NhZ2U/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJmaWxlIGFscmVhZHkgZXhpc3RzXCIpKSB7XG5cdFx0XHRcdGNvbnNvbGUud2FybihcIkNhdWdodCAnRmlsZSBhbHJlYWR5IGV4aXN0cycgZXJyb3IgZHVyaW5nIHVuemlwL3dyaXRlIHBoYXNlLCBwb3NzaWJseSBoYW5kbGVkLiBDaGVjayBsb2dpYyBpZiBmaWxlcyB3ZXJlIG1pc3NlZC5cIik7XG5cdFx0XHRcdG5ldyBOb3RpY2UoXCJBbiB1bmV4cGVjdGVkICdGaWxlIGFscmVhZHkgZXhpc3RzJyBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcHJvY2Vzc2luZy4gU29tZSBmaWxlcyBtaWdodCBub3QgaGF2ZSBiZWVuIHByb2Nlc3NlZCBjb3JyZWN0bHkuIENoZWNrIGNvbnNvbGUuXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3IE5vdGljZShgRmFpbGVkIHRvIHVuemlwIG9yIHdyaXRlIGZpbGVzOiAke2Vycm9yLm1lc3NhZ2V9LiBDaGVjayBjb25zb2xlLmApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEsa0RBQUFBLFNBQUE7QUFZQSxLQUFDLFNBQVMsR0FBRTtBQUFDLFVBQUcsWUFBVSxPQUFPLFdBQVMsZUFBYSxPQUFPQTtBQUFPLFFBQUFBLFFBQU8sVUFBUSxFQUFFO0FBQUEsZUFBVSxjQUFZLE9BQU8sVUFBUSxPQUFPO0FBQUksZUFBTyxDQUFDLEdBQUUsQ0FBQztBQUFBLFdBQU07QUFBQyxTQUFDLGVBQWEsT0FBTyxTQUFPLFNBQU8sZUFBYSxPQUFPLFNBQU8sU0FBTyxlQUFhLE9BQU8sT0FBSyxPQUFLLE1BQU0sUUFB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LEtBQUssTUFBSyxZQUFZO0FBQUUsY0FBSUMsS0FBRTtBQUFLLGVBQUssY0FBWSxPQUFHLEtBQUssUUFBTSxHQUFFLEtBQUssTUFBSSxHQUFFLEtBQUssT0FBSyxNQUFLLEtBQUssT0FBSyxJQUFHLEtBQUssaUJBQWUsT0FBR0QsR0FBRSxLQUFLLFNBQVNBLElBQUU7QUFBQyxZQUFBQyxHQUFFLGNBQVksTUFBR0EsR0FBRSxPQUFLRCxJQUFFQyxHQUFFLE1BQUlELE1BQUdBLEdBQUUsVUFBUSxHQUFFQyxHQUFFLE9BQUssRUFBRSxVQUFVRCxFQUFDLEdBQUVDLEdBQUUsWUFBVUEsR0FBRSxlQUFlO0FBQUEsVUFBQyxHQUFFLFNBQVNELElBQUU7QUFBQyxZQUFBQyxHQUFFLE1BQU1ELEVBQUM7QUFBQSxVQUFDLENBQUM7QUFBQSxRQUFDO0FBQUMsVUFBRSxTQUFTLEdBQUUsQ0FBQyxHQUFFLEVBQUUsVUFBVSxVQUFRLFdBQVU7QUFBQyxZQUFFLFVBQVUsUUFBUSxLQUFLLElBQUksR0FBRSxLQUFLLE9BQUs7QUFBQSxRQUFJLEdBQUUsRUFBRSxVQUFVLFNBQU8sV0FBVTtBQUFDLGlCQUFNLENBQUMsQ0FBQyxFQUFFLFVBQVUsT0FBTyxLQUFLLElBQUksTUFBSSxDQUFDLEtBQUssa0JBQWdCLEtBQUssZ0JBQWMsS0FBSyxpQkFBZSxNQUFHLEVBQUUsTUFBTSxLQUFLLGdCQUFlLENBQUMsR0FBRSxJQUFJLElBQUc7QUFBQSxRQUFHLEdBQUUsRUFBRSxVQUFVLGlCQUFlLFdBQVU7QUFBQyxlQUFLLGlCQUFlLE9BQUcsS0FBSyxZQUFVLEtBQUssZUFBYSxLQUFLLE1BQU0sR0FBRSxLQUFLLGVBQWEsRUFBRSxNQUFNLEtBQUssZ0JBQWUsQ0FBQyxHQUFFLElBQUksR0FBRSxLQUFLLGlCQUFlO0FBQUEsUUFBSSxHQUFFLEVBQUUsVUFBVSxRQUFNLFdBQVU7QUFBQyxjQUFHLEtBQUssWUFBVSxLQUFLO0FBQVcsbUJBQU07QUFBRyxjQUFJQSxLQUFFLE1BQUtDLEtBQUUsS0FBSyxJQUFJLEtBQUssS0FBSSxLQUFL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LFNBQU8sTUFBSUEsR0FBRSxZQUFVLFFBQU1JLEdBQUUsVUFBUUgsT0FBSTtBQUFFLG1CQUFPLEVBQUVELElBQUUsTUFBSUEsR0FBRSxZQUFVLEtBQUcsQ0FBQztBQUFFLGNBQUdJLEdBQUUsT0FBS0osSUFBRUUsS0FBRUUsR0FBRSxZQUFXQSxHQUFFLGFBQVdILElBQUVHLEdBQUUsV0FBUztBQUFFLGdCQUFHLE1BQUlBLEdBQUU7QUFBSyxjQUFBSixHQUFFLFFBQU0sR0FBRSxFQUFFSSxJQUFFLEVBQUUsR0FBRSxFQUFFQSxJQUFFLEdBQUcsR0FBRSxFQUFFQSxJQUFFLENBQUMsR0FBRUEsR0FBRSxVQUFRLEVBQUVBLEtBQUdBLEdBQUUsT0FBTyxPQUFLLElBQUUsTUFBSUEsR0FBRSxPQUFPLE9BQUssSUFBRSxNQUFJQSxHQUFFLE9BQU8sUUFBTSxJQUFFLE1BQUlBLEdBQUUsT0FBTyxPQUFLLElBQUUsTUFBSUEsR0FBRSxPQUFPLFVBQVEsS0FBRyxFQUFFLEdBQUUsRUFBRUEsSUFBRSxNQUFJQSxHQUFFLE9BQU8sSUFBSSxHQUFFLEVBQUVBLElBQUVBLEdBQUUsT0FBTyxRQUFNLElBQUUsR0FBRyxHQUFFLEVBQUVBLElBQUVBLEdBQUUsT0FBTyxRQUFNLEtBQUcsR0FBRyxHQUFFLEVBQUVBLElBQUVBLEdBQUUsT0FBTyxRQUFNLEtBQUcsR0FBRyxHQUFFLEVBQUVBLElBQUUsTUFBSUEsR0FBRSxRQUFNLElBQUUsS0FBR0EsR0FBRSxZQUFVQSxHQUFFLFFBQU0sSUFBRSxJQUFFLENBQUMsR0FBRSxFQUFFQSxJQUFFLE1BQUlBLEdBQUUsT0FBTyxFQUFFLEdBQUVBLEdBQUUsT0FBTyxTQUFPQSxHQUFFLE9BQU8sTUFBTSxXQUFTLEVBQUVBLElBQUUsTUFBSUEsR0FBRSxPQUFPLE1BQU0sTUFBTSxHQUFFLEVBQUVBLElBQUVBLEdBQUUsT0FBTyxNQUFNLFVBQVEsSUFBRSxHQUFHLElBQUdBLEdBQUUsT0FBTyxTQUFPSixHQUFFLFFBQU0sRUFBRUEsR0FBRSxPQUFNSSxHQUFFLGFBQVlBLEdBQUUsU0FBUSxDQUFDLElBQUdBLEdBQUUsVUFBUSxHQUFFQSxHQUFFLFNBQU8sT0FBSyxFQUFFQSxJQUFFLENBQUMsR0FBRSxFQUFFQSxJQUFFLENBQUMsR0FBRSxFQUFFQSxJQUFFLENBQUMsR0FBRSxFQUFFQSxJQUFFLENBQUMsR0FBRSxFQUFFQSxJQUFFLENBQUMsR0FBRSxFQUFFQSxJQUFFLE1BQUlBLEdBQUUsUUFBTSxJQUFFLEtBQUdBLEdBQUUsWUFBVUEsR0FBRSxRQUFNLElBQUUsSUFBRSxDQUFDLEdBQUUsRUFBRUEsSUFBRSxDQUFDLEdBQUVBLEdBQUUsU0FBTztBQUFBLGlCQUFPO0FBQUMsa0JBQUlHLEtBQUUsS0FBR0gsR0FBRSxTQUFPLEtBQUcsTUFBSTtBQUFFLGNBQUFHLE9BQUksS0FBR0gsR0FBRSxZQUFVQSxHQUFFLFFBQU0sSUFBRSxJQUFFQSxHQUFFLFFBQU0sSUFBRSxJQUFFLE1BQUlBLEdBQUUsUUFBTSxJQUFFLE1BQUksR0FBRSxNQUFJQSxHQUFFLGFBQVdHLE1BQUcsS0FBSUEsTUFBRyxLQUFHQSxLQUFFLElBQUdILEdBQUUsU0FBTyxHQUFFLEVBQUVBLElBQUVHLEVBQUMsR0FBRSxNQUFJSCxHQUFFLGFBQVcsRUFBRUEsSUFBRUosR0FBRSxVQUFRLEVBQUUsR0FBRSxFQUFFSSxJQUFFLFFBQU1KLEdBQUUsS0FBSyxJQUFHQSxHQUFFLFFBQU07QUFBQSxZQUFDO0FBQUMsY0FBRyxPQUFLSSxHQUFFO0FBQU8sZ0JBQUdBLEdBQUUsT0FBTyxPQUFNO0FBQUMsbUJBQUlDLEtBQUVELEdBQUUsU0FBUUEsR0FBRSxXQUFTLFFBQU1BLEdBQUUsT0FBTyxNQUFNLFlBQVVBLEdBQUUsWUFBVUEsR0FBRSxxQkFBbUJBLEdBQUUsT0FBTyxRQUFNQSxHQUFFLFVBQVFDLE9BQUlMLEdBQUUsUUFBTSxFQUFFQSxHQUFFLE9BQU1JLEdBQUUsYUFBWUEsR0FBRSxVQUFRQyxJQUFFQSxFQUFDLElBQUcsRUFBRUwsRUFBQyxHQUFFSyxLQUFFRCxHQUFFLFNBQVFBLEdBQUUsWUFBVUEsR0FBRTtBQUFvQixrQkFBRUEsSUFBRSxNQUFJQSxHQUFFLE9BQU8sTUFBTUEsR0FBRSxPQUFPLENBQUMsR0FBRUEsR0FBRTtBQUFVLGNBQUFBLEdBQUUsT0FBTyxRQUFNQSxHQUFFLFVBQVFDLE9BQUlMLEdBQUUsUUFBTSxFQUFFQSxHQUFFLE9BQU1JLEdBQUUsYUFBWUEsR0FBRSxVQUFRQyxJQUFFQSxFQUFDLElBQUdELEdBQUUsWUFBVUEsR0FBRSxPQUFPLE1BQU0sV0FBU0EsR0FBRSxVQUFRLEdBQUVBLEdBQUUsU0FBTztBQUFBLFlBQUc7QUFBTSxjQUFBQSxHQUFFLFNBQU87QUFBRyxjQUFHLE9BQUtBLEdBQUU7QUFBTyxnQkFBR0EsR0FBRSxPQUFPLE1BQUs7QUFBQyxjQUFBQyxLQUFFRCxHQUFFO0FBQVEsaUJBQUU7QUFBQyxvQkFBR0EsR0FBRSxZQUFVQSxHQUFFLHFCQUFtQkEsR0FBRSxPQUFPLFFBQU1BLEdBQUUsVUFBUUMsT0FBSUwsR0FBRSxRQUFNLEVBQUVBLEdBQUUsT0FBTUksR0FBRSxhQUFZQSxHQUFFLFVBQVFDLElBQUVBLEVBQUMsSUFBRyxFQUFFTCxFQUFDLEdBQUVLLEtBQUVELEdBQUUsU0FBUUEsR0FBRSxZQUFVQSxHQUFFLG1CQUFrQjtBQUFDLGtCQUFBRSxLQUFFO0FBQUU7QUFBQSxnQkFBSztBQUFDLGdCQUFBQSxLQUFFRixHQUFFLFVBQVFBLEdBQUUsT0FBTyxLQUFLLFNBQU8sTUFBSUEsR0FBRSxPQUFPLEtBQUssV0FBV0EsR0FBRSxTQUFTLElBQUUsR0FBRSxFQUFFQSxJQUFFRSxFQUFDO0FBQUEsY0FBQyxTQUFPLE1BQUlBO0FBQUcsY0FBQUYsR0FBRSxPQUFPLFFBQU1BLEdBQUUsVUFBUUMsT0FBSUwsR0FBRSxRQUFNLEVBQUVBLEdBQUUsT0FBTUksR0FBRSxhQUFZQSxHQUFFLFVBQVFDLElBQUVBLEVBQUMsSUFBRyxNQUFJQyxPQUFJRixHQUFFLFVBQVEsR0FBRUEsR0FBRSxTQUFPO0FBQUEsWUFBRztBQUFNLGNBQUFBLEdBQUUsU0FBTztBQUFHLGNBQUcsT0FBS0EsR0FBRTtBQUFPLGdCQUFHQSxHQUFFLE9BQU8sU0FBUTtBQUFDLGNBQUFDLEtBQUVELEdBQUU7QUFBUSxpQkFBRTtBQUFDLG9CQUFHQSxHQUFFLFlBQVVBLEdBQUUscUJBQW1CQSxHQUFFLE9BQU8sUUFBTUEsR0FBRSxVQUFRQyxPQUFJTCxHQUFFLFFBQU0sRUFBRUEsR0FBRSxPQUFNSSxHQUFFLGFBQVlBLEdBQUUsVUFBUUMsSUFBRUEsRUFBQyxJQUFHLEVBQUVMLEVBQUMsR0FBRUssS0FBRUQsR0FBRSxTQUFRQSxHQUFFLFlBQVVBLEdBQUUsbUJBQWtCO0FBQUMsa0JBQUFFLEtBQUU7QUFBRTtBQUFBLGdCQUFLO0FBQUMsZ0JBQUFBLEtBQUVGLEdBQUUsVUFBUUEsR0FBRSxPQUFPLFFBQVEsU0FBTyxNQUFJQSxHQUFFLE9BQU8sUUFBUSxXQUFXQSxHQUFFLFNBQVMsSUFBRSxHQUFFLEVBQUVBLElBQUVFLEVBQUM7QUFBQSxjQUFDLFNBQU8sTUFBSUE7QUFBRyxjQUFBRixHQUFFLE9BQU8sUUFBTUEsR0FBRSxVQUFRQyxPQUFJTCxHQUFFLFFBQU0sRUFBRUEsR0FBRSxPQUFNSSxHQUFFLGFBQVlBLEdBQUUsVUFBUUMsSUFBRUEsRUFBQyxJQUFHLE1BQUlDLE9BQUlGLEdBQUUsU0FBTztBQUFBLFlBQUk7QUFBTSxjQUFBQSxHQUFFLFNBQU87QUFBSSxjQUFHLFFBQU1BLEdBQUUsV0FBU0EsR0FBRSxPQUFPLFFBQU1BLEdBQUUsVUFBUSxJQUFFQSxHQUFFLG9CQUFrQixFQUFFSixFQUFDLEdBQUVJLEdBQUUsVUFBUSxLQUFHQSxHQUFFLHFCQUFtQixFQUFFQSxJQUFFLE1BQUlKLEdBQUUsS0FBSyxHQUFFLEVBQUVJLElBQUVKLEdBQUUsU0FBTyxJQUFFLEdBQUcsR0FBRUEsR0FBRSxRQUFNLEdBQUVJLEdBQUUsU0FBTyxNQUFJQSxHQUFFLFNBQU8sSUFBRyxNQUFJQSxHQUFFLFNBQVE7QUFBQyxnQkFBRyxFQUFFSixFQUFDLEdBQUUsTUFBSUEsR0FBRTtBQUFVLHFCQUFPSSxHQUFFLGFBQVcsSUFBRztBQUFBLFVBQUMsV0FBUyxNQUFJSixHQUFFLFlBQVUsRUFBRUMsRUFBQyxLQUFHLEVBQUVDLEVBQUMsS0FBR0QsT0FBSTtBQUFFLG1CQUFPLEVBQUVELElBQUUsRUFBRTtBQUFFLGNBQUcsUUFBTUksR0FBRSxVQUFRLE1BQUlKLEdBQUU7QUFBUyxtQkFBTyxFQUFFQSxJQUFFLEVBQUU7QUFBRSxjQUFHLE1BQUlBLEdBQUUsWUFBVSxNQUFJSSxHQUFFLGFBQVdILE9BQUksS0FBRyxRQUFNRyxHQUFFLFFBQU87QUFBQyxnQkFBSUksS0FBRSxNQUFJSixHQUFFLFdBQVMsU0FBU0osSUFBRUMsSUFBRTtBQUFDLHVCQUFRQyxRQUFJO0FBQUMsb0JBQUcsTUFBSUYsR0FBRSxjQUFZLEVBQUVBLEVBQUMsR0FBRSxNQUFJQSxHQUFFLFlBQVc7QUFBQyxzQkFBR0MsT0FBSTtBQUFFLDJCQUFPO0FBQUU7QUFBQSxnQkFBSztBQUFDLG9CQUFHRCxHQUFFLGVBQWEsR0FBRUUsS0FBRSxFQUFFLFVBQVVGLElBQUUsR0FBRUEsR0FBRSxPQUFPQSxHQUFFLFFBQVEsQ0FBQyxHQUFFQSxHQUFFLGFBQVlBLEdBQUUsWUFBV0UsT0FBSSxFQUFFRixJQUFFLEtBQUUsR0FBRSxNQUFJQSxHQUFFLEtBQUs7QUFBVyx5QkFBTztBQUFBLGNBQUM7QUFBQyxxQkFBT0EsR0FBRSxTQUFPLEdBQUVDLE9BQUksS0FBRyxFQUFFRCxJQUFFLElBQUUsR0FBRSxNQUFJQSxHQUFFLEtBQUssWUFBVSxJQUFFLEtBQUdBLEdBQUUsYUFBVyxFQUFFQSxJQUFFLEtBQUUsR0FBRSxNQUFJQSxHQUFFLEtBQUssYUFBVyxJQUFFO0FBQUEsWUFBQyxFQUFFSSxJQUFFSCxFQUFDLElBQUUsTUFBSUcsR0FBRSxXQUFTLFNBQVNKLElBQUVDLElBQUU7QUFBQyx1QkFBUUMsSUFBRUUsSUFBRUMsSUFBRUMsSUFBRUMsS0FBRVAsR0FBRSxZQUFTO0FBQUMsb0JBQUdBLEdBQUUsYUFBVyxHQUFFO0FBQUMsc0JBQUcsRUFBRUEsRUFBQyxHQUFFQSxHQUFFLGFBQVcsS0FBR0MsT0FBSTtBQUFFLDJCQUFPO0FBQUUsc0JBQUcsTUFBSUQsR0FBRTtBQUFVO0FBQUEsZ0JBQUs7QUFBQyxvQkFBR0EsR0FBRSxlQUFhLEdBQUVBLEdBQUUsYUFBVyxLQUFHLElBQUVBLEdBQUUsYUFBV0ksS0FBRUcsR0FBRUYsS0FBRUwsR0FBRSxXQUFTLENBQUMsT0FBS08sR0FBRSxFQUFFRixFQUFDLEtBQUdELE9BQUlHLEdBQUUsRUFBRUYsRUFBQyxLQUFHRCxPQUFJRyxHQUFFLEVBQUVGLEVBQUMsR0FBRTtBQUFDLGtCQUFBQyxLQUFFTixHQUFFLFdBQVM7QUFBRSxxQkFBRTtBQUFBLGtCQUFDLFNBQU9JLE9BQUlHLEdBQUUsRUFBRUYsRUFBQyxLQUFHRCxPQUFJRyxHQUFFLEVBQUVGLEVBQUMsS0FBR0QsT0FBSUcsR0FBRSxFQUFFRixFQUFDLEtBQUdELE9BQUlHLEdBQUUsRUFBRUYsRUFBQyxLQUFHRCxPQUFJRyxHQUFFLEVBQUVGLEVBQUMsS0FBR0QsT0FBSUcsR0FBRSxFQUFFRixFQUFDLEtBQUdELE9BQUlHLEdBQUUsRUFBRUYsRUFBQyxLQUFHRCxPQUFJRyxHQUFFLEVBQUVGLEVBQUMsS0FBR0EsS0FBRUM7QUFBRyxrQkFBQU4sR0FBRSxlQUFhLEtBQUdNLEtBQUVELEtBQUdMLEdBQUUsZUFBYUEsR0FBRSxjQUFZQSxHQUFFLGVBQWFBLEdBQUU7QUFBQSxnQkFBVTtBQUFDLG9CQUFHQSxHQUFFLGdCQUFjLEtBQUdFLEtBQUUsRUFBRSxVQUFVRixJQUFFLEdBQUVBLEdBQUUsZUFBYSxDQUFDLEdBQUVBLEdBQUUsYUFBV0EsR0FBRSxjQUFhQSxHQUFFLFlBQVVBLEdBQUUsY0FBYUEsR0FBRSxlQUFhLE1BQUlFLEtBQUUsRUFBRSxVQUFVRixJQUFFLEdBQUVBLEdBQUUsT0FBT0EsR0FBRSxRQUFRLENBQUMsR0FBRUEsR0FBRSxhQUFZQSxHQUFFLGFBQVlFLE9BQUksRUFBRUYsSUFBRSxLQUFFLEdBQUUsTUFBSUEsR0FBRSxLQUFLO0FBQVcseUJBQU87QUFBQSxjQUFDO0FBQUMscUJBQU9BLEdBQUUsU0FBTyxHQUFFQyxPQUFJLEtBQUcsRUFBRUQsSUFBRSxJQUFFLEdBQUUsTUFBSUEsR0FBRSxLQUFLLFlBQVUsSUFBRSxLQUFHQSxHQUFFLGFBQVcsRUFBRUEsSUFBRSxLQUFFLEdBQUUsTUFBSUEsR0FBRSxLQUFLLGFBQVcsSUFBRTtBQUFBLFlBQUMsRUFBRUksSUFBRUgsRUFBQyxJQUFFLEVBQUVHLEdBQUUsS0FBSyxFQUFFLEtBQUtBLElBQUVILEVBQUM7QUFBRSxnQkFBR08sT0FBSSxLQUFHQSxPQUFJLE1BQUlKLEdBQUUsU0FBTyxNQUFLSSxPQUFJLEtBQUdBLE9BQUk7QUFBRSxxQkFBTyxNQUFJUixHQUFFLGNBQVlJLEdBQUUsYUFBVyxLQUFJO0FBQUUsZ0JBQUdJLE9BQUksTUFBSSxNQUFJUCxLQUFFLEVBQUUsVUFBVUcsRUFBQyxJQUFFLE1BQUlILE9BQUksRUFBRSxpQkFBaUJHLElBQUUsR0FBRSxHQUFFLEtBQUUsR0FBRSxNQUFJSCxPQUFJLEVBQUVHLEdBQUUsSUFBSSxHQUFFLE1BQUlBLEdBQUUsY0FBWUEsR0FBRSxXQUFTLEdBQUVBLEdBQUUsY0FBWSxHQUFFQSxHQUFFLFNBQU8sTUFBSyxFQUFFSixFQUFDLEdBQUUsTUFBSUEsR0FBRTtBQUFXLHFCQUFPSSxHQUFFLGFBQVcsSUFBRztBQUFBLFVBQUM7QUFBQyxpQkFBT0gsT0FBSSxJQUFFLElBQUVHLEdBQUUsUUFBTSxJQUFFLEtBQUcsTUFBSUEsR0FBRSxRQUFNLEVBQUVBLElBQUUsTUFBSUosR0FBRSxLQUFLLEdBQUUsRUFBRUksSUFBRUosR0FBRSxTQUFPLElBQUUsR0FBRyxHQUFFLEVBQUVJLElBQUVKLEdBQUUsU0FBTyxLQUFHLEdBQUcsR0FBRSxFQUFFSSxJQUFFSixHQUFFLFNBQU8sS0FBRyxHQUFHLEdBQUUsRUFBRUksSUFBRSxNQUFJSixHQUFFLFFBQVEsR0FBRSxFQUFFSSxJQUFFSixHQUFFLFlBQVUsSUFBRSxHQUFHLEdBQUUsRUFBRUksSUFBRUosR0FBRSxZQUFVLEtBQUcsR0FBRyxHQUFFLEVBQUVJLElBQUVKLEdBQUUsWUFBVSxLQUFHLEdBQUcsTUFBSSxFQUFFSSxJQUFFSixHQUFFLFVBQVEsRUFBRSxHQUFFLEVBQUVJLElBQUUsUUFBTUosR0FBRSxLQUFLLElBQUcsRUFBRUEsRUFBQyxHQUFFLElBQUVJLEdBQUUsU0FBT0EsR0FBRSxPQUFLLENBQUNBLEdBQUUsT0FBTSxNQUFJQSxHQUFFLFVBQVEsSUFBRTtBQUFBLFFBQUUsR0FBRSxFQUFFLGFBQVcsU0FBU0osSUFBRTtBQUFDLGNBQUlDO0FBQUUsaUJBQU9ELE1BQUdBLEdBQUUsU0FBT0MsS0FBRUQsR0FBRSxNQUFNLFlBQVUsS0FBRyxPQUFLQyxNQUFHLE9BQUtBLE1BQUcsT0FBS0EsTUFBRyxRQUFNQSxNQUFHQSxPQUFJLEtBQUcsUUFBTUEsS0FBRSxFQUFFRCxJQUFFLENBQUMsS0FBR0EsR0FBRSxRQUFNLE1BQUtDLE9BQUksSUFBRSxFQUFFRCxJQUFFLEVBQUUsSUFBRSxLQUFHO0FBQUEsUUFBQyxHQUFFLEVBQUUsdUJBQXFCLFNBQVNBLElBQUVDLElBQUU7QUFBQyxjQUFJQyxJQUFFRSxJQUFFQyxJQUFFQyxJQUFFQyxJQUFFQyxJQUFFQyxJQUFFQyxJQUFFQyxLQUFFVixHQUFFO0FBQU8sY0FBRyxDQUFDRCxNQUFHLENBQUNBLEdBQUU7QUFBTSxtQkFBTztBQUFFLGNBQUcsT0FBS00sTUFBR0osS0FBRUYsR0FBRSxPQUFPLFNBQU8sTUFBSU0sTUFBR0osR0FBRSxXQUFTLEtBQUdBLEdBQUU7QUFBVSxtQkFBTztBQUFFLGVBQUksTUFBSUksT0FBSU4sR0FBRSxRQUFNLEVBQUVBLEdBQUUsT0FBTUMsSUFBRVUsSUFBRSxDQUFDLElBQUdULEdBQUUsT0FBSyxHQUFFUyxNQUFHVCxHQUFFLFdBQVMsTUFBSUksT0FBSSxFQUFFSixHQUFFLElBQUksR0FBRUEsR0FBRSxXQUFTLEdBQUVBLEdBQUUsY0FBWSxHQUFFQSxHQUFFLFNBQU8sSUFBR1EsS0FBRSxJQUFJLEVBQUUsS0FBS1IsR0FBRSxNQUFNLEdBQUUsRUFBRSxTQUFTUSxJQUFFVCxJQUFFVSxLQUFFVCxHQUFFLFFBQU9BLEdBQUUsUUFBTyxDQUFDLEdBQUVELEtBQUVTLElBQUVDLEtBQUVULEdBQUUsU0FBUUssS0FBRVAsR0FBRSxVQUFTUSxLQUFFUixHQUFFLFNBQVFTLEtBQUVULEdBQUUsT0FBTUEsR0FBRSxXQUFTVyxJQUFFWCxHQUFFLFVBQVEsR0FBRUEsR0FBRSxRQUFNQyxJQUFFLEVBQUVDLEVBQUMsR0FBRUEsR0FBRSxhQUFXLEtBQUc7QUFBQyxpQkFBSUUsS0FBRUYsR0FBRSxVQUFTRyxLQUFFSCxHQUFFLGFBQVcsSUFBRSxJQUFHQSxHQUFFLFNBQU9BLEdBQUUsU0FBT0EsR0FBRSxhQUFXQSxHQUFFLE9BQU9FLEtBQUUsSUFBRSxDQUFDLEtBQUdGLEdBQUUsV0FBVUEsR0FBRSxLQUFLRSxLQUFFRixHQUFFLE1BQU0sSUFBRUEsR0FBRSxLQUFLQSxHQUFFLEtBQUssR0FBRUEsR0FBRSxLQUFLQSxHQUFFLEtBQUssSUFBRUUsSUFBRUEsTUFBSSxFQUFFQztBQUFHO0FBQUMsWUFBQUgsR0FBRSxXQUFTRSxJQUFFRixHQUFFLFlBQVUsSUFBRSxHQUFFLEVBQUVBLEVBQUM7QUFBQSxVQUFDO0FBQUMsaUJBQU9BLEdBQUUsWUFBVUEsR0FBRSxXQUFVQSxHQUFFLGNBQVlBLEdBQUUsVUFBU0EsR0FBRSxTQUFPQSxHQUFFLFdBQVVBLEdBQUUsWUFBVSxHQUFFQSxHQUFFLGVBQWFBLEdBQUUsY0FBWSxJQUFFLEdBQUVBLEdBQUUsa0JBQWdCLEdBQUVGLEdBQUUsVUFBUVEsSUFBRVIsR0FBRSxRQUFNUyxJQUFFVCxHQUFFLFdBQVNPLElBQUVMLEdBQUUsT0FBS0ksSUFBRTtBQUFBLFFBQUMsR0FBRSxFQUFFLGNBQVk7QUFBQSxNQUFvQyxHQUFFLEVBQUMsbUJBQWtCLElBQUcsYUFBWSxJQUFHLFdBQVUsSUFBRyxjQUFhLElBQUcsV0FBVSxHQUFFLENBQUMsR0FBRSxJQUFHLENBQUMsU0FBUyxHQUFFLEdBQUUsR0FBRTtBQUFDO0FBQWEsVUFBRSxVQUFRLFdBQVU7QUFBQyxlQUFLLE9BQUssR0FBRSxLQUFLLE9BQUssR0FBRSxLQUFLLFNBQU8sR0FBRSxLQUFLLEtBQUcsR0FBRSxLQUFLLFFBQU0sTUFBSyxLQUFLLFlBQVUsR0FBRSxLQUFLLE9BQUssSUFBRyxLQUFLLFVBQVEsSUFBRyxLQUFLLE9BQUssR0FBRSxLQUFLLE9BQUs7QUFBQSxRQUFFO0FBQUEsTUFBQyxHQUFFLENBQUMsQ0FBQyxHQUFFLElBQUcsQ0FBQyxTQUFTLEdBQUUsR0FBRSxHQUFFO0FBQUM7QUFBYSxVQUFFLFVBQVEsU0FBU04sSUFBRUMsSUFBRTtBQUFDLGNBQUlDLElBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUUsVUFBQUEsS0FBRUYsR0FBRSxPQUFNLElBQUVBLEdBQUUsU0FBUSxJQUFFQSxHQUFFLE9BQU0sSUFBRSxLQUFHQSxHQUFFLFdBQVMsSUFBRyxJQUFFQSxHQUFFLFVBQVMsSUFBRUEsR0FBRSxRQUFPLElBQUUsS0FBR0MsS0FBRUQsR0FBRSxZQUFXLElBQUUsS0FBR0EsR0FBRSxZQUFVLE1BQUssSUFBRUUsR0FBRSxNQUFLLElBQUVBLEdBQUUsT0FBTSxJQUFFQSxHQUFFLE9BQU0sSUFBRUEsR0FBRSxPQUFNLElBQUVBLEdBQUUsUUFBTyxJQUFFQSxHQUFFLE1BQUssSUFBRUEsR0FBRSxNQUFLLElBQUVBLEdBQUUsU0FBUSxJQUFFQSxHQUFFLFVBQVMsS0FBRyxLQUFHQSxHQUFFLFdBQVMsR0FBRSxLQUFHLEtBQUdBLEdBQUUsWUFBVTtBQUFFO0FBQUUsZUFBRTtBQUFDLGtCQUFFLE9BQUssS0FBRyxFQUFFLEdBQUcsS0FBRyxHQUFFLEtBQUcsR0FBRSxLQUFHLEVBQUUsR0FBRyxLQUFHLEdBQUUsS0FBRyxJQUFHLElBQUUsRUFBRSxJQUFFLENBQUM7QUFBRTtBQUFFLDJCQUFPO0FBQUMsc0JBQUcsT0FBSyxJQUFFLE1BQUksSUFBRyxLQUFHLEdBQUUsT0FBSyxJQUFFLE1BQUksS0FBRztBQUFLLHNCQUFFLEdBQUcsSUFBRSxRQUFNO0FBQUEsdUJBQU07QUFBQyx3QkFBRyxFQUFFLEtBQUcsSUFBRztBQUFDLDBCQUFHLE1BQUksS0FBRyxJQUFHO0FBQUMsNEJBQUUsR0FBRyxRQUFNLE1BQUksS0FBRyxLQUFHLEtBQUcsRUFBRTtBQUFFLGlDQUFTO0FBQUEsc0JBQUM7QUFBQywwQkFBRyxLQUFHLEdBQUU7QUFBQyx3QkFBQUEsR0FBRSxPQUFLO0FBQUcsOEJBQU07QUFBQSxzQkFBQztBQUFDLHNCQUFBRixHQUFFLE1BQUksK0JBQThCRSxHQUFFLE9BQUs7QUFBRyw0QkFBTTtBQUFBLG9CQUFDO0FBQUMsd0JBQUUsUUFBTSxJQUFHLEtBQUcsUUFBTSxJQUFFLE1BQUksS0FBRyxFQUFFLEdBQUcsS0FBRyxHQUFFLEtBQUcsSUFBRyxLQUFHLEtBQUcsS0FBRyxLQUFHLEdBQUUsT0FBSyxHQUFFLEtBQUcsSUFBRyxJQUFFLE9BQUssS0FBRyxFQUFFLEdBQUcsS0FBRyxHQUFFLEtBQUcsR0FBRSxLQUFHLEVBQUUsR0FBRyxLQUFHLEdBQUUsS0FBRyxJQUFHLElBQUUsRUFBRSxJQUFFLENBQUM7QUFBRTtBQUFFLGlDQUFPO0FBQUMsNEJBQUcsT0FBSyxJQUFFLE1BQUksSUFBRyxLQUFHLEdBQUUsRUFBRSxNQUFJLElBQUUsTUFBSSxLQUFHLE9BQU07QUFBQyw4QkFBRyxNQUFJLEtBQUcsSUFBRztBQUFDLGdDQUFFLEdBQUcsUUFBTSxNQUFJLEtBQUcsS0FBRyxLQUFHLEVBQUU7QUFBRSxxQ0FBUztBQUFBLDBCQUFDO0FBQUMsMEJBQUFGLEdBQUUsTUFBSSx5QkFBd0JFLEdBQUUsT0FBSztBQUFHLGdDQUFNO0FBQUEsd0JBQUM7QUFBQyw0QkFBRyxJQUFFLFFBQU0sR0FBRSxLQUFHLEtBQUcsUUFBTSxLQUFHLEVBQUUsR0FBRyxLQUFHLElBQUcsS0FBRyxLQUFHLE1BQUksS0FBRyxFQUFFLEdBQUcsS0FBRyxHQUFFLEtBQUcsS0FBSSxLQUFHLEtBQUcs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QVMsRUFBRUYsSUFBRTtBQUFDLGtCQUFPQSxPQUFJLEtBQUcsUUFBTUEsT0FBSSxJQUFFLFdBQVMsUUFBTUEsT0FBSSxPQUFLLE1BQUlBLE9BQUk7QUFBQSxRQUFHO0FBQUMsaUJBQVMsSUFBRztBQUFDLGVBQUssT0FBSyxHQUFFLEtBQUssT0FBSyxPQUFHLEtBQUssT0FBSyxHQUFFLEtBQUssV0FBUyxPQUFHLEtBQUssUUFBTSxHQUFFLEtBQUssT0FBSyxHQUFFLEtBQUssUUFBTSxHQUFFLEtBQUssUUFBTSxHQUFFLEtBQUssT0FBSyxNQUFLLEtBQUssUUFBTSxHQUFFLEtBQUssUUFBTSxHQUFFLEtBQUssUUFBTSxHQUFFLEtBQUssUUFBTSxHQUFFLEtBQUssU0FBTyxNQUFLLEtBQUssT0FBSyxHQUFFLEtBQUssT0FBSyxHQUFFLEtBQUssU0FBTyxHQUFFLEtBQUssU0FBTyxHQUFFLEtBQUssUUFBTSxHQUFFLEtBQUssVUFBUSxNQUFLLEtBQUssV0FBUyxNQUFLLEtBQUssVUFBUSxHQUFFLEtBQUssV0FBUyxHQUFFLEtBQUssUUFBTSxHQUFFLEtBQUssT0FBSyxHQUFFLEtBQUssUUFBTSxHQUFFLEtBQUssT0FBSyxHQUFFLEtBQUssT0FBSyxNQUFLLEtBQUssT0FBSyxJQUFJLEVBQUUsTUFBTSxHQUFHLEdBQUUsS0FBSyxPQUFLLElBQUksRUFBRSxNQUFNLEdBQUcsR0FBRSxLQUFLLFNBQU8sTUFBSyxLQUFLLFVBQVEsTUFBSyxLQUFLLE9BQUssR0FBRSxLQUFLLE9BQUssR0FBRSxLQUFLLE1BQUk7QUFBQSxRQUFDO0FBQUMsaUJBQVMsRUFBRUEsSUFBRTtBQUFDLGNBQUlDO0FBQUUsaUJBQU9ELE1BQUdBLEdBQUUsU0FBT0MsS0FBRUQsR0FBRSxPQUFNQSxHQUFFLFdBQVNBLEdBQUUsWUFBVUMsR0FBRSxRQUFNLEdBQUVELEdBQUUsTUFBSSxJQUFHQyxHQUFFLFNBQU9ELEdBQUUsUUFBTSxJQUFFQyxHQUFFLE9BQU1BLEdBQUUsT0FBSyxHQUFFQSxHQUFFLE9BQUssR0FBRUEsR0FBRSxXQUFTLEdBQUVBLEdBQUUsT0FBSyxPQUFNQSxHQUFFLE9BQUssTUFBS0EsR0FBRSxPQUFLLEdBQUVBLEdBQUUsT0FBSyxHQUFFQSxHQUFFLFVBQVFBLEdBQUUsU0FBTyxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUVBLEdBQUUsV0FBU0EsR0FBRSxVQUFRLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRUEsR0FBRSxPQUFLLEdBQUVBLEdBQUUsT0FBSyxJQUFHLEtBQUc7QUFBQSxRQUFDO0FBQUMsaUJBQVMsRUFBRUQsSUFBRTtBQUFDLGNBQUlDO0FBQUUsaUJBQU9ELE1BQUdBLEdBQUUsVUFBUUMsS0FBRUQsR0FBRSxPQUFPLFFBQU0sR0FBRUMsR0FBRSxRQUFNLEdBQUVBLEdBQUUsUUFBTSxHQUFFLEVBQUVELEVBQUMsS0FBRztBQUFBLFFBQUM7QUFBQyxpQkFBUyxFQUFFQSxJQUFFQyxJQUFFO0FBQUMsY0FBSUMsSUFBRUU7QUFBRSxpQkFBT0osTUFBR0EsR0FBRSxTQUFPSSxLQUFFSixHQUFFLE9BQU1DLEtBQUUsS0FBR0MsS0FBRSxHQUFFRCxLQUFFLENBQUNBLE9BQUlDLEtBQUUsS0FBR0QsTUFBRyxJQUFHQSxLQUFFLE9BQUtBLE1BQUcsTUFBS0EsT0FBSUEsS0FBRSxLQUFHLEtBQUdBLE1BQUcsS0FBRyxTQUFPRyxHQUFFLFVBQVFBLEdBQUUsVUFBUUgsT0FBSUcsR0FBRSxTQUFPLE9BQU1BLEdBQUUsT0FBS0YsSUFBRUUsR0FBRSxRQUFNSCxJQUFFLEVBQUVELEVBQUMsTUFBSTtBQUFBLFFBQUM7QUFBQyxpQkFBUyxFQUFFQSxJQUFFQyxJQUFFO0FBQUMsY0FBSUMsSUFBRUU7QUFBRSxpQkFBT0osTUFBR0ksS0FBRSxJQUFJLE1BQUdKLEdBQUUsUUFBTUksSUFBRyxTQUFPLE9BQU1GLEtBQUUsRUFBRUYsSUFBRUMsRUFBQyxPQUFLLE1BQUlELEdBQUUsUUFBTSxPQUFNRSxNQUFHO0FBQUEsUUFBQztBQUFDLFlBQUksR0FBRSxHQUFFLElBQUU7QUFBRyxpQkFBUyxFQUFFRixJQUFFO0FBQUMsY0FBRyxHQUFF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SUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsRUFBRTtBQUFFLFVBQUUsVUFBUSxTQUFTRixJQUFFQyxJQUFFQyxJQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFDLGNBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsSUFBRSxFQUFFLE1BQUssSUFBRSxHQUFFLElBQUUsR0FBRSxJQUFFLEdBQUUsSUFBRSxHQUFFLElBQUUsR0FBRSxJQUFFLEdBQUUsSUFBRSxHQUFFLElBQUUsR0FBRSxJQUFFLEdBQUUsSUFBRSxHQUFFLElBQUUsTUFBSyxJQUFFLEdBQUUsSUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUUsSUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUUsSUFBRSxNQUFLLElBQUU7QUFBRSxlQUFJLElBQUUsR0FBRSxLQUFHLElBQUc7QUFBSSxjQUFFLENBQUMsSUFBRTtBQUFFLGVBQUksSUFBRSxHQUFFLElBQUUsR0FBRTtBQUFJLGNBQUVELEdBQUVDLEtBQUUsQ0FBQyxDQUFDO0FBQUksZUFBSSxJQUFFLEdBQUUsSUFBRSxJQUFHLEtBQUcsS0FBRyxNQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQUk7QUFBQyxjQUFHLElBQUUsTUFBSSxJQUFFLElBQUcsTUFBSTtBQUFFLG1CQUFPLEVBQUUsR0FBRyxJQUFFLFVBQVMsRUFBRSxHQUFHLElBQUUsVUFBUyxFQUFFLE9BQUssR0FBRTtBQUFFLGVBQUksSUFBRSxHQUFFLElBQUUsS0FBRyxNQUFJLEVBQUUsQ0FBQyxHQUFFO0FBQUk7QUFBQyxlQUFJLElBQUUsTUFBSSxJQUFFLElBQUcsSUFBRSxJQUFFLEdBQUUsS0FBRyxJQUFHO0FBQUksZ0JBQUcsTUFBSSxJQUFHLEtBQUcsRUFBRSxDQUFDLEtBQUc7QUFBRSxxQkFBTTtBQUFHLGNBQUcsSUFBRSxNQUFJLE1BQUlGLE1BQUcsTUFBSTtBQUFHLG1CQUFNO0FBQUcsZUFBSSxFQUFFLENBQUMsSUFBRSxHQUFFLElBQUUsR0FBRSxJQUFFLElBQUc7QUFBSSxjQUFFLElBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQyxJQUFFLEVBQUUsQ0FBQztBQUFFLGVBQUksSUFBRSxHQUFFLElBQUUsR0FBRTtBQUFJLGtCQUFJQyxHQUFFQyxLQUFFLENBQUMsTUFBSSxFQUFFLEVBQUVELEdBQUVDLEtBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBRTtBQUFHLGNBQUcsSUFBRSxNQUFJRixNQUFHLElBQUUsSUFBRSxHQUFFLE1BQUksTUFBSUEsTUFBRyxJQUFFLEdBQUUsS0FBRyxLQUFJLElBQUUsR0FBRSxLQUFHLEtBQUksUUFBTSxJQUFFLEdBQUUsSUFBRSxHQUFFLEtBQUksSUFBRSxHQUFFLElBQUUsR0FBRSxJQUFFLElBQUUsSUFBRSxHQUFFLElBQUUsSUFBRyxLQUFHLElBQUUsTUFBSSxJQUFFLE1BQUksR0FBRSxNQUFJQSxNQUFHLE1BQUksS0FBRyxNQUFJQSxNQUFHLE1BQUk7QUFBRSxtQkFBTztBQUFFLHFCQUFPO0FBQUMsaUJBQUksSUFBRSxJQUFFLEdBQUUsSUFBRSxFQUFFLENBQUMsSUFBRSxLQUFHLElBQUUsR0FBRSxFQUFFLENBQUMsS0FBRyxFQUFFLENBQUMsSUFBRSxLQUFHLElBQUUsRUFBRSxJQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUUsRUFBRSxJQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQUksSUFBRSxJQUFHLElBQUcsSUFBRSxLQUFHLElBQUUsR0FBRSxJQUFFLElBQUUsS0FBRyxHQUFFLEVBQUUsS0FBRyxLQUFHLE1BQUksS0FBRyxFQUFFLElBQUUsS0FBRyxLQUFHLEtBQUcsS0FBRyxJQUFFLEdBQUUsTUFBSTtBQUFHO0FBQUMsaUJBQUksSUFBRSxLQUFHLElBQUUsR0FBRSxJQUFFO0FBQUcsb0JBQUk7QUFBRSxnQkFBRyxNQUFJLEtBQUcsS0FBRyxJQUFFLEdBQUUsS0FBRyxLQUFHLElBQUUsR0FBRSxLQUFJLEtBQUcsRUFBRSxFQUFFLENBQUMsR0FBRTtBQUFDLGtCQUFHLE1BQUk7QUFBRTtBQUFNLGtCQUFFQyxHQUFFQyxLQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQUEsWUFBQztBQUFDLGdCQUFHLElBQUUsTUFBSSxJQUFFLE9BQUssR0FBRTtBQUFDLG1CQUFJLE1BQUksTUFBSSxJQUFFLElBQUcsS0FBRyxHQUFFLElBQUUsTUFBSSxJQUFFLElBQUUsSUFBRyxJQUFFLElBQUUsS0FBRyxHQUFHLEtBQUcsRUFBRSxJQUFFLENBQUMsTUFBSTtBQUFJLHFCQUFJLE1BQUk7QUFBRSxrQkFBRyxLQUFHLEtBQUcsR0FBRSxNQUFJRixNQUFHLE1BQUksS0FBRyxNQUFJQSxNQUFHLE1BQUk7QUFBRSx1QkFBTztBQUFFLGdCQUFFLElBQUUsSUFBRSxDQUFDLElBQUUsS0FBRyxLQUFHLEtBQUcsS0FBRyxJQUFFLElBQUU7QUFBQSxZQUFDO0FBQUEsVUFBQztBQUFDLGlCQUFPLE1BQUksTUFBSSxFQUFFLElBQUUsQ0FBQyxJQUFFLElBQUUsS0FBRyxLQUFHLE1BQUksS0FBRyxJQUFHLEVBQUUsT0FBSyxHQUFFO0FBQUEsUUFBQztBQUFBLE1BQUMsR0FBRSxFQUFDLG1CQUFrQixHQUFFLENBQUMsR0FBRSxJQUFHLENBQUMsU0FBUyxHQUFFLEdBQUUsR0FBRTtBQUFDO0FBQWEsVUFBRSxVQUFRLEVBQUMsR0FBRSxtQkFBa0IsR0FBRSxjQUFhLEdBQUUsSUFBRyxNQUFLLGNBQWEsTUFBSyxnQkFBZSxNQUFLLGNBQWEsTUFBSyx1QkFBc0IsTUFBSyxnQkFBZSxNQUFLLHVCQUFzQjtBQUFBLE1BQUMsR0FBRSxDQUFDLENBQUMsR0FBRSxJQUFHLENBQUMsU0FBUyxHQUFFLEdBQUUsR0FBRTtBQUFDO0FBQWEsWUFBSSxJQUFFLEVBQUUsaUJBQWlCLEdBQUUsSUFBRSxHQUFFLElBQUU7QUFBRSxpQkFBUyxFQUFFQSxJQUFFO0FBQUMsbUJBQVFDLEtBQUVELEdBQUUsUUFBTyxLQUFHLEVBQUVDO0FBQUcsWUFBQUQsR0FBRUMsRUFBQyxJQUFFO0FBQUEsUUFBQztBQUFDLFlBQUksSUFBRSxHQUFFLElBQUUsSUFBRyxJQUFFLEtBQUksSUFBRSxJQUFFLElBQUUsR0FBRSxJQUFFLElBQUcsSUFBRSxJQUFHLElBQUUsSUFBRSxJQUFFLEdBQUUsSUFBRSxJQUFHLElBQUUsSUFBRyxJQUFFLEdBQUUsSUFBRSxLQUFJLElBQUUsSUFBRyxJQUFFLElBQUcsSUFBRSxJQUFHLElBQUUsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxJQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxJQUFHLElBQUcsSUFBRyxJQUFHLElBQUcsSUFBRyxJQUFHLEVBQUUsR0FBRSxJQUFFLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLElBQUUsQ0FBQyxJQUFHLElBQUcsSUFBRyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsSUFBRyxHQUFFLElBQUcsR0FBRSxJQUFHLEdBQUUsSUFBRyxHQUFFLElBQUcsR0FBRSxFQUFFLEdBQUUsSUFBRSxJQUFJLE1BQU0sS0FBRyxJQUFFLEVBQUU7QUFBRSxVQUFFLENBQUM7QUFBRSxZQUFJLElBQUUsSUFBSSxNQUFNLElBQUUsQ0FBQztBQUFFLFVBQUUsQ0FBQztBQUFFLFlBQUksSUFBRSxJQUFJLE1BQU0sR0FBRztBQUFFLFVBQUUsQ0FBQztBQUFFLFlBQUksSUFBRSxJQUFJLE1B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QUFBRyxlQUFJSixHQUFFLFdBQVNTLElBQUVSLEtBQUVGLEdBQUUsWUFBVSxHQUFFLEtBQUdFLElBQUVBO0FBQUksY0FBRUYsSUFBRU0sSUFBRUosRUFBQztBQUFFLGVBQUlHLEtBQUVJLElBQUVQLEtBQUVGLEdBQUUsS0FBSyxDQUFDLEdBQUVBLEdBQUUsS0FBSyxDQUFDLElBQUVBLEdBQUUsS0FBS0EsR0FBRSxVQUFVLEdBQUUsRUFBRUEsSUFBRU0sSUFBRSxDQUFDLEdBQUVGLEtBQUVKLEdBQUUsS0FBSyxDQUFDLEdBQUVBLEdBQUUsS0FBSyxFQUFFQSxHQUFFLFFBQVEsSUFBRUUsSUFBRUYsR0FBRSxLQUFLLEVBQUVBLEdBQUUsUUFBUSxJQUFFSSxJQUFFRSxHQUFFLElBQUVELEVBQUMsSUFBRUMsR0FBRSxJQUFFSixFQUFDLElBQUVJLEdBQUUsSUFBRUYsRUFBQyxHQUFFSixHQUFFLE1BQU1LLEVBQUMsS0FBR0wsR0FBRSxNQUFNRSxFQUFDLEtBQUdGLEdBQUUsTUFBTUksRUFBQyxJQUFFSixHQUFFLE1BQU1FLEVBQUMsSUFBRUYsR0FBRSxNQUFNSSxFQUFDLEtBQUcsR0FBRUUsR0FBRSxJQUFFSixLQUFFLENBQUMsSUFBRUksR0FBRSxJQUFFRixLQUFFLENBQUMsSUFBRUMsSUFBRUwsR0FBRSxLQUFLLENBQUMsSUFBRUssTUFBSSxFQUFFTCxJQUFFTSxJQUFFLENBQUMsR0FBRSxLQUFHTixHQUFFO0FBQVU7QUFBQyxVQUFBQSxHQUFFLEtBQUssRUFBRUEsR0FBRSxRQUFRLElBQUVBLEdBQUUsS0FBSyxDQUFDLEdBQUUsU0FBU0EsSUFBRUMsSUFBRTtBQUFDLGdCQUFJQyxJQUFFRSxJQUFFQyxJQUFFQyxJQUFFQyxJQUFFQyxJQUFFQyxLQUFFUixHQUFFLFVBQVNTLEtBQUVULEdBQUUsVUFBU1UsS0FBRVYsR0FBRSxVQUFVLGFBQVlXLEtBQUVYLEdBQUUsVUFBVSxXQUFVRSxLQUFFRixHQUFFLFVBQVUsWUFBV1ksS0FBRVosR0FBRSxVQUFVLFlBQVdhLEtBQUViLEdBQUUsVUFBVSxZQUFXYyxLQUFFO0FBQUUsaUJBQUlULEtBQUUsR0FBRUEsTUFBRyxHQUFFQTtBQUFJLGNBQUFOLEdBQUUsU0FBU00sRUFBQyxJQUFFO0FBQUUsaUJBQUlHLEdBQUUsSUFBRVQsR0FBRSxLQUFLQSxHQUFFLFFBQVEsSUFBRSxDQUFDLElBQUUsR0FBRUUsS0FBRUYsR0FBRSxXQUFTLEdBQUVFLEtBQUUsR0FBRUE7QUFBSSxjQUFBWSxNQUFHUixLQUFFRyxHQUFFLElBQUVBLEdBQUUsS0FBR0wsS0FBRUosR0FBRSxLQUFLRSxFQUFDLEtBQUcsQ0FBQyxJQUFFLENBQUMsSUFBRSxPQUFLSSxLQUFFUSxJQUFFQyxPQUFLTixHQUFFLElBQUVMLEtBQUUsQ0FBQyxJQUFFRSxJQUFFSSxLQUFFTixPQUFJSixHQUFFLFNBQVNNLEVBQUMsS0FBSUMsS0FBRSxHQUFFTSxNQUFHVCxPQUFJRyxLQUFFSixHQUFFQyxLQUFFUyxFQUFDLElBQUdMLEtBQUVDLEdBQUUsSUFBRUwsRUFBQyxHQUFFSixHQUFFLFdBQVNRLE1BQUdGLEtBQUVDLEtBQUdLLE9BQUlaLEdBQUUsY0FBWVEsTUFBR0csR0FBRSxJQUFFUCxLQUFFLENBQUMsSUFBRUc7QUFBSyxnQkFBRyxNQUFJUSxJQUFFO0FBQUMsaUJBQUU7QUFBQyxxQkFBSVQsS0FBRVEsS0FBRSxHQUFFLE1BQUlkLEdBQUUsU0FBU00sRUFBQztBQUFHLGtCQUFBQTtBQUFJLGdCQUFBTixHQUFFLFNBQVNNLEVBQUMsS0FBSU4sR0FBRSxTQUFTTSxLQUFFLENBQUMsS0FBRyxHQUFFTixHQUFFLFNBQVNjLEVBQUMsS0FBSUMsTUFBRztBQUFBLGNBQUMsU0FBTyxJQUFFQTtBQUFHLG1CQUFJVCxLQUFFUSxJQUFFLE1BQUlSLElBQUVBO0FBQUkscUJBQUlGLEtBQUVKLEdBQUUsU0FBU00sRUFBQyxHQUFFLE1BQUlGO0FBQUcsa0JBQUFNLE1BQUdMLEtBQUVMLEdBQUUsS0FBSyxFQUFFRSxFQUFDLE9BQUtPLEdBQUUsSUFBRUosS0FBRSxDQUFDLE1BQUlDLE9BQUlOLEdBQUUsWUFBVU0sS0FBRUcsR0FBRSxJQUFFSixLQUFFLENBQUMsS0FBR0ksR0FBRSxJQUFFSixFQUFDLEdBQUVJLEdBQUUsSUFBRUosS0FBRSxDQUFDLElBQUVDLEtBQUdGO0FBQUEsWUFBSTtBQUFBLFVBQUMsRUFBRUosSUFBRUMsRUFBQyxHQUFFLEVBQUVLLElBQUVJLElBQUVWLEdBQUUsUUFBUTtBQUFBLFFBQUM7QUFBQyxpQkFBUyxFQUFFQSxJQUFFQyxJQUFFQyxJQUFFO0FBQUMsY0FBSUUsSUFBRUMsSUFBRUMsS0FBRSxJQUFHQyxLQUFFTixHQUFFLENBQUMsR0FBRU8sS0FBRSxHQUFFQyxLQUFFLEdBQUVDLEtBQUU7QUFBRSxlQUFJLE1BQUlILE9BQUlFLEtBQUUsS0FBSUMsS0FBRSxJQUFHVCxHQUFFLEtBQUdDLEtBQUUsS0FBRyxDQUFDLElBQUUsT0FBTUUsS0FBRSxHQUFFQSxNQUFHRixJQUFFRTtBQUFJLFlBQUFDLEtBQUVFLElBQUVBLEtBQUVOLEdBQUUsS0FBR0csS0FBRSxLQUFHLENBQUMsR0FBRSxFQUFFSSxLQUFFQyxNQUFHSixPQUFJRSxPQUFJQyxLQUFFRSxLQUFFVixHQUFFLFFBQVEsSUFBRUssRUFBQyxLQUFHRyxLQUFFLE1BQUlILE1BQUdBLE9BQUlDLE1BQUdOLEdBQUUsUUFBUSxJQUFFSyxFQUFDLEtBQUlMLEdBQUUsUUFBUSxJQUFFLENBQUMsT0FBS1EsTUFBRyxLQUFHUixHQUFFLFFBQVEsSUFBRSxDQUFDLE1BQUlBLEdBQUUsUUFBUSxJQUFFLENBQUMsS0FBSU0sS0FBRUQsSUFBRUssTUFBR0YsS0FBRSxPQUFLRCxNQUFHRSxLQUFFLEtBQUksS0FBR0osT0FBSUUsTUFBR0UsS0FBRSxHQUFFLE1BQUlBLEtBQUUsR0FBRTtBQUFBLFFBQUc7QUFBQyxpQkFBUyxFQUFFVCxJQUFFQyxJQUFFQyxJQUFFO0FBQUMsY0FBSUUsSUFBRUMsSUFBRUMsS0FBRSxJQUFHQyxLQUFFTixHQUFFLENBQUMsR0FBRU8sS0FBRSxHQUFFQyxLQUFFLEdBQUVDLEtBQUU7QUFBRSxlQUFJLE1BQUlILE9BQUlFLEtBQUUs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LCtCQUErQjtBQUFBLGNBQ2pHLE9BQU87QUFFTix3QkFBUSxNQUFNLHdCQUF3Qix3QkFBd0IsVUFBVTtBQUN4RSxvQkFBSSx1QkFBTyx3QkFBd0IscUNBQXFDO0FBQUEsY0FDekU7QUFBQSxZQUNEO0FBQUEsVUFDRDtBQUFBLFFBQ0Q7QUFBQSxNQUNEO0FBRUEsVUFBSSx1QkFBTywwQkFBMEIsNkJBQTZCLGFBQWEsUUFBUTtBQUN2RixjQUFRLElBQUksa0NBQWtDLGFBQWEsTUFBTTtBQUFBLElBRWxFLFNBQVMsT0FBUDtBQUNELGNBQVEsTUFBTSxzQkFBc0IsS0FBSztBQUV6QyxXQUFJLFdBQU0sWUFBTixtQkFBZSxjQUFjLFNBQVMsd0JBQXdCO0FBQ2pFLGdCQUFRLEtBQUssa0hBQWtIO0FBQy9ILFlBQUksdUJBQU8sMElBQTBJO0FBQUEsTUFDdEosT0FBTztBQUNOLFlBQUksdUJBQU8sbUNBQW1DLE1BQU0seUJBQXlCO0FBQUEsTUFDOUU7QUFBQSxJQUNEO0FBQUEsRUFDRDtBQUNEOyIsCiAgIm5hbWVzIjogWyJtb2R1bGUiLCAiZSIsICJ0IiwgInIiLCAiYyIsICJuIiwgImkiLCAicyIsICJhIiwgIm8iLCAiaCIsICJ1IiwgImwiLCAiZiIsICJkIiwgInAiLCAibSIsICJKU1ppcCJdCn0K