Files
speckle-server/scratch/edge-debug-selection/Default/Cache/Cache_Data/f_0000ec
T

230 lines
30 KiB
Plaintext

// This currentContext variable will only be used if the makeSlotClass
// function is called, which happens only if this is the first copy of the
// @wry/context package to be imported.
var currentContext = null;
// This unique internal object is used to denote the absence of a value
// for a given Slot, and is never exposed to outside code.
var MISSING_VALUE = {};
var idCounter = 1;
// Although we can't do anything about the cost of duplicated code from
// accidentally bundling multiple copies of the @wry/context package, we can
// avoid creating the Slot class more than once using makeSlotClass.
var makeSlotClass = function () { return /** @class */ (function () {
function Slot() {
// If you have a Slot object, you can find out its slot.id, but you cannot
// guess the slot.id of a Slot you don't have access to, thanks to the
// randomized suffix.
this.id = [
"slot",
idCounter++,
Date.now(),
Math.random().toString(36).slice(2),
].join(":");
}
Slot.prototype.hasValue = function () {
for (var context_1 = currentContext; context_1; context_1 = context_1.parent) {
// We use the Slot object iself as a key to its value, which means the
// value cannot be obtained without a reference to the Slot object.
if (this.id in context_1.slots) {
var value = context_1.slots[this.id];
if (value === MISSING_VALUE)
break;
if (context_1 !== currentContext) {
// Cache the value in currentContext.slots so the next lookup will
// be faster. This caching is safe because the tree of contexts and
// the values of the slots are logically immutable.
currentContext.slots[this.id] = value;
}
return true;
}
}
if (currentContext) {
// If a value was not found for this Slot, it's never going to be found
// no matter how many times we look it up, so we might as well cache
// the absence of the value, too.
currentContext.slots[this.id] = MISSING_VALUE;
}
return false;
};
Slot.prototype.getValue = function () {
if (this.hasValue()) {
return currentContext.slots[this.id];
}
};
Slot.prototype.withValue = function (value, callback,
// Given the prevalence of arrow functions, specifying arguments is likely
// to be much more common than specifying `this`, hence this ordering:
args, thisArg) {
var _a;
var slots = (_a = {
__proto__: null
},
_a[this.id] = value,
_a);
var parent = currentContext;
currentContext = { parent: parent, slots: slots };
try {
// Function.prototype.apply allows the arguments array argument to be
// omitted or undefined, so args! is fine here.
return callback.apply(thisArg, args);
}
finally {
currentContext = parent;
}
};
// Capture the current context and wrap a callback function so that it
// reestablishes the captured context when called.
Slot.bind = function (callback) {
var context = currentContext;
return function () {
var saved = currentContext;
try {
currentContext = context;
return callback.apply(this, arguments);
}
finally {
currentContext = saved;
}
};
};
// Immediately run a callback function without any captured context.
Slot.noContext = function (callback,
// Given the prevalence of arrow functions, specifying arguments is likely
// to be much more common than specifying `this`, hence this ordering:
args, thisArg) {
if (currentContext) {
var saved = currentContext;
try {
currentContext = null;
// Function.prototype.apply allows the arguments array argument to be
// omitted or undefined, so args! is fine here.
return callback.apply(thisArg, args);
}
finally {
currentContext = saved;
}
}
else {
return callback.apply(thisArg, args);
}
};
return Slot;
}()); };
function maybe(fn) {
try {
return fn();
}
catch (ignored) { }
}
// We store a single global implementation of the Slot class as a permanent
// non-enumerable property of the globalThis object. This obfuscation does
// nothing to prevent access to the Slot class, but at least it ensures the
// implementation (i.e. currentContext) cannot be tampered with, and all copies
// of the @wry/context package (hopefully just one) will share the same Slot
// implementation. Since the first copy of the @wry/context package to be
// imported wins, this technique imposes a steep cost for any future breaking
// changes to the Slot class.
var globalKey = "@wry/context:Slot";
var host =
// Prefer globalThis when available.
// https://github.com/benjamn/wryware/issues/347
maybe(function () { return globalThis; }) ||
// Fall back to global, which works in Node.js and may be converted by some
// bundlers to the appropriate identifier (window, self, ...) depending on the
// bundling target. https://github.com/endojs/endo/issues/576#issuecomment-1178515224
maybe(function () { return global; }) ||
// Otherwise, use a dummy host that's local to this module. We used to fall
// back to using the Array constructor as a namespace, but that was flagged in
// https://github.com/benjamn/wryware/issues/347, and can be avoided.
Object.create(null);
// Whichever globalHost we're using, make TypeScript happy about the additional
// globalKey property.
var globalHost = host;
var Slot = globalHost[globalKey] ||
// Earlier versions of this package stored the globalKey property on the Array
// constructor, so we check there as well, to prevent Slot class duplication.
Array[globalKey] ||
(function (Slot) {
try {
Object.defineProperty(globalHost, globalKey, {
value: Slot,
enumerable: false,
writable: false,
// When it was possible for globalHost to be the Array constructor (a
// legacy Slot dedup strategy), it was important for the property to be
// configurable:true so it could be deleted. That does not seem to be as
// important when globalHost is the global object, but I don't want to
// cause similar problems again, and configurable:true seems safest.
// https://github.com/endojs/endo/issues/576#issuecomment-1178274008
configurable: true
});
}
finally {
return Slot;
}
})(makeSlotClass());
var bind = Slot.bind, noContext = Slot.noContext;
function setTimeoutWithContext(callback, delay) {
return setTimeout(bind(callback), delay);
}
// Turn any generator function into an async function (using yield instead
// of await), with context automatically preserved across yields.
function asyncFromGen(genFn) {
return function () {
var gen = genFn.apply(this, arguments);
var boundNext = bind(gen.next);
var boundThrow = bind(gen.throw);
return new Promise(function (resolve, reject) {
function invoke(method, argument) {
try {
var result = method.call(gen, argument);
}
catch (error) {
return reject(error);
}
var next = result.done ? resolve : invokeNext;
if (isPromiseLike(result.value)) {
result.value.then(next, result.done ? reject : invokeThrow);
}
else {
next(result.value);
}
}
var invokeNext = function (value) { return invoke(boundNext, value); };
var invokeThrow = function (error) { return invoke(boundThrow, error); };
invokeNext();
});
};
}
function isPromiseLike(value) {
return value && typeof value.then === "function";
}
// If you use the fibers npm package to implement coroutines in Node.js,
// you should call this function at least once to ensure context management
// remains coherent across any yields.
var wrappedFibers = [];
function wrapYieldingFiberMethods(Fiber) {
// There can be only one implementation of Fiber per process, so this array
// should never grow longer than one element.
if (wrappedFibers.indexOf(Fiber) < 0) {
var wrap = function (obj, method) {
var fn = obj[method];
obj[method] = function () {
return noContext(fn, arguments, this);
};
};
// These methods can yield, according to
// https://github.com/laverdet/node-fibers/blob/ddebed9b8ae3883e57f822e2108e6943e5c8d2a8/fibers.js#L97-L100
wrap(Fiber, "yield");
wrap(Fiber.prototype, "run");
wrap(Fiber.prototype, "throwInto");
wrappedFibers.push(Fiber);
}
return Fiber;
}
export { Slot, asyncFromGen, bind, noContext, setTimeoutWithContext as setTimeout, wrapYieldingFiberMethods };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5lc20uanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9zbG90LnRzIiwiLi4vc3JjL2NvbnRleHQudHMiXSwic291cmNlc0NvbnRlbnQiOlsidHlwZSBDb250ZXh0ID0ge1xuICBwYXJlbnQ6IENvbnRleHQgfCBudWxsO1xuICBzbG90czogeyBbc2xvdElkOiBzdHJpbmddOiBhbnkgfTtcbn1cblxuLy8gVGhpcyBjdXJyZW50Q29udGV4dCB2YXJpYWJsZSB3aWxsIG9ubHkgYmUgdXNlZCBpZiB0aGUgbWFrZVNsb3RDbGFzc1xuLy8gZnVuY3Rpb24gaXMgY2FsbGVkLCB3aGljaCBoYXBwZW5zIG9ubHkgaWYgdGhpcyBpcyB0aGUgZmlyc3QgY29weSBvZiB0aGVcbi8vIEB3cnkvY29udGV4dCBwYWNrYWdlIHRvIGJlIGltcG9ydGVkLlxubGV0IGN1cnJlbnRDb250ZXh0OiBDb250ZXh0IHwgbnVsbCA9IG51bGw7XG5cbi8vIFRoaXMgdW5pcXVlIGludGVybmFsIG9iamVjdCBpcyB1c2VkIHRvIGRlbm90ZSB0aGUgYWJzZW5jZSBvZiBhIHZhbHVlXG4vLyBmb3IgYSBnaXZlbiBTbG90LCBhbmQgaXMgbmV2ZXIgZXhwb3NlZCB0byBvdXRzaWRlIGNvZGUuXG5jb25zdCBNSVNTSU5HX1ZBTFVFOiBhbnkgPSB7fTtcblxubGV0IGlkQ291bnRlciA9IDE7XG5cbi8vIEFsdGhvdWdoIHdlIGNhbid0IGRvIGFueXRoaW5nIGFib3V0IHRoZSBjb3N0IG9mIGR1cGxpY2F0ZWQgY29kZSBmcm9tXG4vLyBhY2NpZGVudGFsbHkgYnVuZGxpbmcgbXVsdGlwbGUgY29waWVzIG9mIHRoZSBAd3J5L2NvbnRleHQgcGFja2FnZSwgd2UgY2FuXG4vLyBhdm9pZCBjcmVhdGluZyB0aGUgU2xvdCBjbGFzcyBtb3JlIHRoYW4gb25jZSB1c2luZyBtYWtlU2xvdENsYXNzLlxuY29uc3QgbWFrZVNsb3RDbGFzcyA9ICgpID0+IGNsYXNzIFNsb3Q8VFZhbHVlPiB7XG4gIC8vIElmIHlvdSBoYXZlIGEgU2xvdCBvYmplY3QsIHlvdSBjYW4gZmluZCBvdXQgaXRzIHNsb3QuaWQsIGJ1dCB5b3UgY2Fubm90XG4gIC8vIGd1ZXNzIHRoZSBzbG90LmlkIG9mIGEgU2xvdCB5b3UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8sIHRoYW5rcyB0byB0aGVcbiAgLy8gcmFuZG9taXplZCBzdWZmaXguXG4gIHB1YmxpYyByZWFkb25seSBpZCA9IFtcbiAgICBcInNsb3RcIixcbiAgICBpZENvdW50ZXIrKyxcbiAgICBEYXRlLm5vdygpLFxuICAgIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpLFxuICBdLmpvaW4oXCI6XCIpO1xuXG4gIHB1YmxpYyBoYXNWYWx1ZSgpIHtcbiAgICBmb3IgKGxldCBjb250ZXh0ID0gY3VycmVudENvbnRleHQ7IGNvbnRleHQ7IGNvbnRleHQgPSBjb250ZXh0LnBhcmVudCkge1xuICAgICAgLy8gV2UgdXNlIHRoZSBTbG90IG9iamVjdCBpc2VsZiBhcyBhIGtleSB0byBpdHMgdmFsdWUsIHdoaWNoIG1lYW5zIHRoZVxuICAgICAgLy8gdmFsdWUgY2Fubm90IGJlIG9idGFpbmVkIHdpdGhvdXQgYSByZWZlcmVuY2UgdG8gdGhlIFNsb3Qgb2JqZWN0LlxuICAgICAgaWYgKHRoaXMuaWQgaW4gY29udGV4dC5zbG90cykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbnRleHQuc2xvdHNbdGhpcy5pZF07XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gTUlTU0lOR19WQUxVRSkgYnJlYWs7XG4gICAgICAgIGlmIChjb250ZXh0ICE9PSBjdXJyZW50Q29udGV4dCkge1xuICAgICAgICAgIC8vIENhY2hlIHRoZSB2YWx1ZSBpbiBjdXJyZW50Q29udGV4dC5zbG90cyBzbyB0aGUgbmV4dCBsb29rdXAgd2lsbFxuICAgICAgICAgIC8vIGJlIGZhc3Rlci4gVGhpcyBjYWNoaW5nIGlzIHNhZmUgYmVjYXVzZSB0aGUgdHJlZSBvZiBjb250ZXh0cyBhbmRcbiAgICAgICAgICAvLyB0aGUgdmFsdWVzIG9mIHRoZSBzbG90cyBhcmUgbG9naWNhbGx5IGltbXV0YWJsZS5cbiAgICAgICAgICBjdXJyZW50Q29udGV4dCEuc2xvdHNbdGhpcy5pZF0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGN1cnJlbnRDb250ZXh0KSB7XG4gICAgICAvLyBJZiBhIHZhbHVlIHdhcyBub3QgZm91bmQgZm9yIHRoaXMgU2xvdCwgaXQncyBuZXZlciBnb2luZyB0byBiZSBmb3VuZFxuICAgICAgLy8gbm8gbWF0dGVyIGhvdyBtYW55IHRpbWVzIHdlIGxvb2sgaXQgdXAsIHNvIHdlIG1pZ2h0IGFzIHdlbGwgY2FjaGVcbiAgICAgIC8vIHRoZSBhYnNlbmNlIG9mIHRoZSB2YWx1ZSwgdG9vLlxuICAgICAgY3VycmVudENvbnRleHQuc2xvdHNbdGhpcy5pZF0gPSBNSVNTSU5HX1ZBTFVFO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0VmFsdWUoKTogVFZhbHVlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5oYXNWYWx1ZSgpKSB7XG4gICAgICByZXR1cm4gY3VycmVudENvbnRleHQhLnNsb3RzW3RoaXMuaWRdIGFzIFRWYWx1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgd2l0aFZhbHVlPFRSZXN1bHQsIFRBcmdzIGV4dGVuZHMgYW55W10sIFRUaGlzID0gYW55PihcbiAgICB2YWx1ZTogVFZhbHVlLFxuICAgIGNhbGxiYWNrOiAodGhpczogVFRoaXMsIC4uLmFyZ3M6IFRBcmdzKSA9PiBUUmVzdWx0LFxuICAgIC8vIEdpdmVuIHRoZSBwcmV2YWxlbmNlIG9mIGFycm93IGZ1bmN0aW9ucywgc3BlY2lmeWluZyBhcmd1bWVudHMgaXMgbGlrZWx5XG4gICAgLy8gdG8gYmUgbXVjaCBtb3JlIGNvbW1vbiB0aGFuIHNwZWNpZnlpbmcgYHRoaXNgLCBoZW5jZSB0aGlzIG9yZGVyaW5nOlxuICAgIGFyZ3M/OiBUQXJncyxcbiAgICB0aGlzQXJnPzogVFRoaXMsXG4gICk6IFRSZXN1bHQge1xuICAgIGNvbnN0IHNsb3RzID0ge1xuICAgICAgX19wcm90b19fOiBudWxsLFxuICAgICAgW3RoaXMuaWRdOiB2YWx1ZSxcbiAgICB9O1xuICAgIGNvbnN0IHBhcmVudCA9IGN1cnJlbnRDb250ZXh0O1xuICAgIGN1cnJlbnRDb250ZXh0ID0geyBwYXJlbnQsIHNsb3RzIH07XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSBhbGxvd3MgdGhlIGFyZ3VtZW50cyBhcnJheSBhcmd1bWVudCB0byBiZVxuICAgICAgLy8gb21pdHRlZCBvciB1bmRlZmluZWQsIHNvIGFyZ3MhIGlzIGZpbmUgaGVyZS5cbiAgICAgIHJldHVybiBjYWxsYmFjay5hcHBseSh0aGlzQXJnISwgYXJncyEpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjdXJyZW50Q29udGV4dCA9IHBhcmVudDtcbiAgICB9XG4gIH1cblxuICAvLyBDYXB0dXJlIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kIHdyYXAgYSBjYWxsYmFjayBmdW5jdGlvbiBzbyB0aGF0IGl0XG4gIC8vIHJlZXN0YWJsaXNoZXMgdGhlIGNhcHR1cmVkIGNvbnRleHQgd2hlbiBjYWxsZWQuXG4gIHN0YXRpYyBiaW5kPFRBcmdzIGV4dGVuZHMgYW55W10sIFRSZXN1bHQsIFRUaGlzID0gYW55PihcbiAgICBjYWxsYmFjazogKHRoaXM6IFRUaGlzLCAuLi5hcmdzOiBUQXJncykgPT4gVFJlc3VsdCxcbiAgKSB7XG4gICAgY29uc3QgY29udGV4dCA9IGN1cnJlbnRDb250ZXh0O1xuICAgIHJldHVybiBmdW5jdGlvbiAodGhpczogVFRoaXMpIHtcbiAgICAgIGNvbnN0IHNhdmVkID0gY3VycmVudENvbnRleHQ7XG4gICAgICB0cnkge1xuICAgICAgICBjdXJyZW50Q29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIHJldHVybiBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMgYXMgYW55KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGN1cnJlbnRDb250ZXh0ID0gc2F2ZWQ7XG4gICAgICB9XG4gICAgfSBhcyB0eXBlb2YgY2FsbGJhY2s7XG4gIH1cblxuICAvLyBJbW1lZGlhdGVseSBydW4gYSBjYWxsYmFjayBmdW5jdGlvbiB3aXRob3V0IGFueSBjYXB0dXJlZCBjb250ZXh0LlxuICBzdGF0aWMgbm9Db250ZXh0PFRSZXN1bHQsIFRBcmdzIGV4dGVuZHMgYW55W10sIFRUaGlzID0gYW55PihcbiAgICBjYWxsYmFjazogKHRoaXM6IFRUaGlzLCAuLi5hcmdzOiBUQXJncykgPT4gVFJlc3VsdCxcbiAgICAvLyBHaXZlbiB0aGUgcHJldmFsZW5jZSBvZiBhcnJvdyBmdW5jdGlvbnMsIHNwZWNpZnlpbmcgYXJndW1lbnRzIGlzIGxpa2VseVxuICAgIC8vIHRvIGJlIG11Y2ggbW9yZSBjb21tb24gdGhhbiBzcGVjaWZ5aW5nIGB0aGlzYCwgaGVuY2UgdGhpcyBvcmRlcmluZzpcbiAgICBhcmdzPzogVEFyZ3MsXG4gICAgdGhpc0FyZz86IFRUaGlzLFxuICApIHtcbiAgICBpZiAoY3VycmVudENvbnRleHQpIHtcbiAgICAgIGNvbnN0IHNhdmVkID0gY3VycmVudENvbnRleHQ7XG4gICAgICB0cnkge1xuICAgICAgICBjdXJyZW50Q29udGV4dCA9IG51bGw7XG4gICAgICAgIC8vIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSBhbGxvd3MgdGhlIGFyZ3VtZW50cyBhcnJheSBhcmd1bWVudCB0byBiZVxuICAgICAgICAvLyBvbWl0dGVkIG9yIHVuZGVmaW5lZCwgc28gYXJncyEgaXMgZmluZSBoZXJlLlxuICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpc0FyZyEsIGFyZ3MhKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGN1cnJlbnRDb250ZXh0ID0gc2F2ZWQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjYWxsYmFjay5hcHBseSh0aGlzQXJnISwgYXJncyEpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gbWF5YmU8VD4oZm46ICgpID0+IFQpOiBUIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZm4oKTtcbiAgfSBjYXRjaCAoaWdub3JlZCkge31cbn1cblxuLy8gV2Ugc3RvcmUgYSBzaW5nbGUgZ2xvYmFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTbG90IGNsYXNzIGFzIGEgcGVybWFuZW50XG4vLyBub24tZW51bWVyYWJsZSBwcm9wZXJ0eSBvZiB0aGUgZ2xvYmFsVGhpcyBvYmplY3QuIFRoaXMgb2JmdXNjYXRpb24gZG9lc1xuLy8gbm90aGluZyB0byBwcmV2ZW50IGFjY2VzcyB0byB0aGUgU2xvdCBjbGFzcywgYnV0IGF0IGxlYXN0IGl0IGVuc3VyZXMgdGhlXG4vLyBpbXBsZW1lbnRhdGlvbiAoaS5lLiBjdXJyZW50Q29udGV4dCkgY2Fubm90IGJlIHRhbXBlcmVkIHdpdGgsIGFuZCBhbGwgY29waWVzXG4vLyBvZiB0aGUgQHdyeS9jb250ZXh0IHBhY2thZ2UgKGhvcGVmdWxseSBqdXN0IG9uZSkgd2lsbCBzaGFyZSB0aGUgc2FtZSBTbG90XG4vLyBpbXBsZW1lbnRhdGlvbi4gU2luY2UgdGhlIGZpcnN0IGNvcHkgb2YgdGhlIEB3cnkvY29udGV4dCBwYWNrYWdlIHRvIGJlXG4vLyBpbXBvcnRlZCB3aW5zLCB0aGlzIHRlY2huaXF1ZSBpbXBvc2VzIGEgc3RlZXAgY29zdCBmb3IgYW55IGZ1dHVyZSBicmVha2luZ1xuLy8gY2hhbmdlcyB0byB0aGUgU2xvdCBjbGFzcy5cbmNvbnN0IGdsb2JhbEtleSA9IFwiQHdyeS9jb250ZXh0OlNsb3RcIjtcblxuY29uc3QgaG9zdCA9XG4gIC8vIFByZWZlciBnbG9iYWxUaGlzIHdoZW4gYXZhaWxhYmxlLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmVuamFtbi93cnl3YXJlL2lzc3Vlcy8zNDdcbiAgbWF5YmUoKCkgPT4gZ2xvYmFsVGhpcykgfHxcbiAgLy8gRmFsbCBiYWNrIHRvIGdsb2JhbCwgd2hpY2ggd29ya3MgaW4gTm9kZS5qcyBhbmQgbWF5IGJlIGNvbnZlcnRlZCBieSBzb21lXG4gIC8vIGJ1bmRsZXJzIHRvIHRoZSBhcHByb3ByaWF0ZSBpZGVudGlmaWVyICh3aW5kb3csIHNlbGYsIC4uLikgZGVwZW5kaW5nIG9uIHRoZVxuICAvLyBidW5kbGluZyB0YXJnZXQuIGh0dHBzOi8vZ2l0aHViLmNvbS9lbmRvanMvZW5kby9pc3N1ZXMvNTc2I2lzc3VlY29tbWVudC0xMTc4NTE1MjI0XG4gIG1heWJlKCgpID0+IGdsb2JhbCkgfHxcbiAgLy8gT3RoZXJ3aXNlLCB1c2UgYSBkdW1teSBob3N0IHRoYXQncyBsb2NhbCB0byB0aGlzIG1vZHVsZS4gV2UgdXNlZCB0byBmYWxsXG4gIC8vIGJhY2sgdG8gdXNpbmcgdGhlIEFycmF5IGNvbnN0cnVjdG9yIGFzIGEgbmFtZXNwYWNlLCBidXQgdGhhdCB3YXMgZmxhZ2dlZCBpblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmVuamFtbi93cnl3YXJlL2lzc3Vlcy8zNDcsIGFuZCBjYW4gYmUgYXZvaWRlZC5cbiAgT2JqZWN0LmNyZWF0ZShudWxsKSBhcyB0eXBlb2YgQXJyYXk7XG5cbi8vIFdoaWNoZXZlciBnbG9iYWxIb3N0IHdlJ3JlIHVzaW5nLCBtYWtlIFR5cGVTY3JpcHQgaGFwcHkgYWJvdXQgdGhlIGFkZGl0aW9uYWxcbi8vIGdsb2JhbEtleSBwcm9wZXJ0eS5cbmNvbnN0IGdsb2JhbEhvc3Q6IHR5cGVvZiBob3N0ICYge1xuICBbZ2xvYmFsS2V5XT86IHR5cGVvZiBTbG90O1xufSA9IGhvc3Q7XG5cbmV4cG9ydCBjb25zdCBTbG90OiBSZXR1cm5UeXBlPHR5cGVvZiBtYWtlU2xvdENsYXNzPiA9XG4gIGdsb2JhbEhvc3RbZ2xvYmFsS2V5XSB8fFxuICAvLyBFYXJsaWVyIHZlcnNpb25zIG9mIHRoaXMgcGFja2FnZSBzdG9yZWQgdGhlIGdsb2JhbEtleSBwcm9wZXJ0eSBvbiB0aGUgQXJyYXlcbiAgLy8gY29uc3RydWN0b3IsIHNvIHdlIGNoZWNrIHRoZXJlIGFzIHdlbGwsIHRvIHByZXZlbnQgU2xvdCBjbGFzcyBkdXBsaWNhdGlvbi5cbiAgKEFycmF5IGFzIHR5cGVvZiBnbG9iYWxIb3N0KVtnbG9iYWxLZXldIHx8XG4gIChmdW5jdGlvbiAoU2xvdCkge1xuICAgIHRyeSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsSG9zdCwgZ2xvYmFsS2V5LCB7XG4gICAgICAgIHZhbHVlOiBTbG90LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICAvLyBXaGVuIGl0IHdhcyBwb3NzaWJsZSBmb3IgZ2xvYmFsSG9zdCB0byBiZSB0aGUgQXJyYXkgY29uc3RydWN0b3IgKGFcbiAgICAgICAgLy8gbGVnYWN5IFNsb3QgZGVkdXAgc3RyYXRlZ3kpLCBpdCB3YXMgaW1wb3J0YW50IGZvciB0aGUgcHJvcGVydHkgdG8gYmVcbiAgICAgICAgLy8gY29uZmlndXJhYmxlOnRydWUgc28gaXQgY291bGQgYmUgZGVsZXRlZC4gVGhhdCBkb2VzIG5vdCBzZWVtIHRvIGJlIGFzXG4gICAgICAgIC8vIGltcG9ydGFudCB3aGVuIGdsb2JhbEhvc3QgaXMgdGhlIGdsb2JhbCBvYmplY3QsIGJ1dCBJIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gY2F1c2Ugc2ltaWxhciBwcm9ibGVtcyBhZ2FpbiwgYW5kIGNvbmZpZ3VyYWJsZTp0cnVlIHNlZW1zIHNhZmVzdC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2VuZG9qcy9lbmRvL2lzc3Vlcy81NzYjaXNzdWVjb21tZW50LTExNzgyNzQwMDhcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcmV0dXJuIFNsb3Q7XG4gICAgfVxuICB9KShtYWtlU2xvdENsYXNzKCkpO1xuIiwiaW1wb3J0IHsgU2xvdCB9IGZyb20gXCIuL3Nsb3RcIjtcbmV4cG9ydCB7IFNsb3QgfVxuZXhwb3J0IGNvbnN0IHsgYmluZCwgbm9Db250ZXh0IH0gPSBTbG90O1xuXG4vLyBSZWx5aW5nIG9uIHRoZSBAdHlwZXMvbm9kZSBkZWNsYXJhdGlvbiBvZiBnbG9iYWwuc2V0VGltZW91dCBjYW4gbWFrZVxuLy8gdGhpbmdzIHRyaWNreSBmb3IgZG93c3RyZWFtIHByb2plY3RzIChzZWUgUFIgIzcpLlxuZGVjbGFyZSBmdW5jdGlvbiBzZXRUaW1lb3V0KFxuICBjYWxsYmFjazogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksXG4gIG1zPzogbnVtYmVyLFxuICAuLi5hcmdzOiBhbnlbXVxuKTogYW55O1xuXG4vLyBMaWtlIGdsb2JhbC5zZXRUaW1lb3V0LCBleGNlcHQgdGhlIGNhbGxiYWNrIHJ1bnMgd2l0aCBjYXB0dXJlZCBjb250ZXh0LlxuZXhwb3J0IHsgc2V0VGltZW91dFdpdGhDb250ZXh0IGFzIHNldFRpbWVvdXQgfTtcbmZ1bmN0aW9uIHNldFRpbWVvdXRXaXRoQ29udGV4dChjYWxsYmFjazogKCkgPT4gYW55LCBkZWxheTogbnVtYmVyKSB7XG4gIHJldHVybiBzZXRUaW1lb3V0KGJpbmQoY2FsbGJhY2spLCBkZWxheSk7XG59XG5cbi8vIFR1cm4gYW55IGdlbmVyYXRvciBmdW5jdGlvbiBpbnRvIGFuIGFzeW5jIGZ1bmN0aW9uICh1c2luZyB5aWVsZCBpbnN0ZWFkXG4vLyBvZiBhd2FpdCksIHdpdGggY29udGV4dCBhdXRvbWF0aWNhbGx5IHByZXNlcnZlZCBhY3Jvc3MgeWllbGRzLlxuZXhwb3J0IGZ1bmN0aW9uIGFzeW5jRnJvbUdlbjxcbiAgVEFyZ3MgZXh0ZW5kcyBhbnlbXSxcbiAgVFlpZWxkID0gYW55LFxuICBUUmV0dXJuID0gYW55LFxuICBUTmV4dCA9IGFueSxcbj4oXG4gIGdlbkZuOiAoLi4uYXJnczogVEFyZ3MpID0+IEdlbmVyYXRvcjxUWWllbGQsIFRSZXR1cm4sIFROZXh0PlxuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhpczogYW55KSB7XG4gICAgY29uc3QgZ2VuID0gZ2VuRm4uYXBwbHkodGhpcywgYXJndW1lbnRzIGFzIGFueSk7XG5cbiAgICB0eXBlIE1ldGhvZCA9IChcbiAgICAgIHRoaXM6IEdlbmVyYXRvcjxUWWllbGQsIFRSZXR1cm4sIFROZXh0PixcbiAgICAgIGFyZzogYW55LFxuICAgICkgPT4gSXRlcmF0b3JSZXN1bHQ8VFlpZWxkLCBUUmV0dXJuPjtcblxuICAgIGNvbnN0IGJvdW5kTmV4dDogTWV0aG9kID0gYmluZChnZW4ubmV4dCk7XG4gICAgY29uc3QgYm91bmRUaHJvdzogTWV0aG9kID0gYmluZChnZW4udGhyb3chKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kOiBNZXRob2QsIGFyZ3VtZW50OiBhbnkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YXIgcmVzdWx0OiBhbnkgPSBtZXRob2QuY2FsbChnZW4sIGFyZ3VtZW50KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXh0ID0gcmVzdWx0LmRvbmUgPyByZXNvbHZlIDogaW52b2tlTmV4dDtcbiAgICAgICAgaWYgKGlzUHJvbWlzZUxpa2UocmVzdWx0LnZhbHVlKSkge1xuICAgICAgICAgIHJlc3VsdC52YWx1ZS50aGVuKG5leHQsIHJlc3VsdC5kb25lID8gcmVqZWN0IDogaW52b2tlVGhyb3cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHQocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgaW52b2tlTmV4dCA9ICh2YWx1ZT86IGFueSkgPT4gaW52b2tlKGJvdW5kTmV4dCwgdmFsdWUpO1xuICAgICAgY29uc3QgaW52b2tlVGhyb3cgPSAoZXJyb3I6IGFueSkgPT4gaW52b2tlKGJvdW5kVGhyb3csIGVycm9yKTtcbiAgICAgIGludm9rZU5leHQoKTtcbiAgICB9KTtcbiAgfSBhcyAoLi4uYXJnczogVEFyZ3MpID0+IFByb21pc2U8YW55Pjtcbn1cblxuZnVuY3Rpb24gaXNQcm9taXNlTGlrZSh2YWx1ZTogYW55KTogdmFsdWUgaXMgUHJvbWlzZUxpa2U8YW55PiB7XG4gIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG4vLyBJZiB5b3UgdXNlIHRoZSBmaWJlcnMgbnBtIHBhY2thZ2UgdG8gaW1wbGVtZW50IGNvcm91dGluZXMgaW4gTm9kZS5qcyxcbi8vIHlvdSBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGF0IGxlYXN0IG9uY2UgdG8gZW5zdXJlIGNvbnRleHQgbWFuYWdlbWVudFxuLy8gcmVtYWlucyBjb2hlcmVudCBhY3Jvc3MgYW55IHlpZWxkcy5cbmNvbnN0IHdyYXBwZWRGaWJlcnM6IEZ1bmN0aW9uW10gPSBbXTtcbmV4cG9ydCBmdW5jdGlvbiB3cmFwWWllbGRpbmdGaWJlck1ldGhvZHM8RiBleHRlbmRzIEZ1bmN0aW9uPihGaWJlcjogRik6IEYge1xuICAvLyBUaGVyZSBjYW4gYmUgb25seSBvbmUgaW1wbGVtZW50YXRpb24gb2YgRmliZXIgcGVyIHByb2Nlc3MsIHNvIHRoaXMgYXJyYXlcbiAgLy8gc2hvdWxkIG5ldmVyIGdyb3cgbG9uZ2VyIHRoYW4gb25lIGVsZW1lbnQuXG4gIGlmICh3cmFwcGVkRmliZXJzLmluZGV4T2YoRmliZXIpIDwgMCkge1xuICAgIGNvbnN0IHdyYXAgPSAob2JqOiBhbnksIG1ldGhvZDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBmbiA9IG9ialttZXRob2RdO1xuICAgICAgb2JqW21ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBub0NvbnRleHQoZm4sIGFyZ3VtZW50cyBhcyBhbnksIHRoaXMpO1xuICAgICAgfTtcbiAgICB9XG4gICAgLy8gVGhlc2UgbWV0aG9kcyBjYW4geWllbGQsIGFjY29yZGluZyB0b1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9sYXZlcmRldC9ub2RlLWZpYmVycy9ibG9iL2RkZWJlZDliOGFlMzg4M2U1N2Y4MjJlMjEwOGU2OTQzZTVjOGQyYTgvZmliZXJzLmpzI0w5Ny1MMTAwXG4gICAgd3JhcChGaWJlciwgXCJ5aWVsZFwiKTtcbiAgICB3cmFwKEZpYmVyLnByb3RvdHlwZSwgXCJydW5cIik7XG4gICAgd3JhcChGaWJlci5wcm90b3R5cGUsIFwidGhyb3dJbnRvXCIpO1xuICAgIHdyYXBwZWRGaWJlcnMucHVzaChGaWJlcik7XG4gIH1cbiAgcmV0dXJuIEZpYmVyO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBO0FBQ0E7QUFDQTtBQUNBLElBQUksY0FBYyxHQUFtQixJQUFJLENBQUM7QUFFMUM7QUFDQTtBQUNBLElBQU0sYUFBYSxHQUFRLEVBQUUsQ0FBQztBQUU5QixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFFbEI7QUFDQTtBQUNBO0FBQ0EsSUFBTSxhQUFhLEdBQUcsWUFBTSxFQUFBLHNCQUFBLFlBQUE7QUFBQSxJQUFBLFNBQUEsSUFBQSxHQUFBOzs7O0FBSVYsUUFBQSxJQUFBLENBQUEsRUFBRSxHQUFHO1lBQ25CLE1BQU07QUFDTixZQUFBLFNBQVMsRUFBRTtZQUNYLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDVixZQUFBLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNwQyxTQUFBLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBK0ZiO0FBN0ZRLElBQUEsSUFBQSxDQUFBLFNBQUEsQ0FBQSxRQUFRLEdBQWYsWUFBQTtBQUNFLFFBQUEsS0FBSyxJQUFJLFNBQU8sR0FBRyxjQUFjLEVBQUUsU0FBTyxFQUFFLFNBQU8sR0FBRyxTQUFPLENBQUMsTUFBTSxFQUFFOzs7QUFHcEUsWUFBQSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksU0FBTyxDQUFDLEtBQUssRUFBRTtnQkFDNUIsSUFBTSxLQUFLLEdBQUcsU0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3JDLElBQUksS0FBSyxLQUFLLGFBQWE7b0JBQUUsTUFBTTtnQkFDbkMsSUFBSSxTQUFPLEtBQUssY0FBYyxFQUFFOzs7O29CQUk5QixjQUFlLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDeEMsaUJBQUE7QUFDRCxnQkFBQSxPQUFPLElBQUksQ0FBQztBQUNiLGFBQUE7QUFDRixTQUFBO0FBQ0QsUUFBQSxJQUFJLGNBQWMsRUFBRTs7OztZQUlsQixjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUM7QUFDL0MsU0FBQTtBQUNELFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDZCxDQUFBO0FBRU0sSUFBQSxJQUFBLENBQUEsU0FBQSxDQUFBLFFBQVEsR0FBZixZQUFBO0FBQ0UsUUFBQSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNuQixPQUFPLGNBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBVyxDQUFDO0FBQ2pELFNBQUE7S0FDRixDQUFBO0FBRU0sSUFBQSxJQUFBLENBQUEsU0FBQSxDQUFBLFNBQVMsR0FBaEIsVUFDRSxLQUFhLEVBQ2IsUUFBa0Q7OztBQUdsRCxJQUFBLElBQVksRUFDWixPQUFlLEVBQUE7O0FBRWYsUUFBQSxJQUFNLEtBQUssSUFBQSxFQUFBLEdBQUE7QUFDVCxnQkFBQSxTQUFTLEVBQUUsSUFBSTs7QUFDZixZQUFBLEVBQUEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFBLEdBQUcsS0FBSztlQUNqQixDQUFDO1FBQ0YsSUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDO1FBQzlCLGNBQWMsR0FBRyxFQUFFLE1BQU0sRUFBQSxNQUFBLEVBQUUsS0FBSyxFQUFBLEtBQUEsRUFBRSxDQUFDO1FBQ25DLElBQUk7OztZQUdGLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFRLEVBQUUsSUFBSyxDQUFDLENBQUM7QUFDeEMsU0FBQTtBQUFTLGdCQUFBO1lBQ1IsY0FBYyxHQUFHLE1BQU0sQ0FBQztBQUN6QixTQUFBO0tBQ0YsQ0FBQTs7O0lBSU0sSUFBSSxDQUFBLElBQUEsR0FBWCxVQUNFLFFBQWtELEVBQUE7UUFFbEQsSUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDO1FBQy9CLE9BQU8sWUFBQTtZQUNMLElBQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQztZQUM3QixJQUFJO2dCQUNGLGNBQWMsR0FBRyxPQUFPLENBQUM7Z0JBQ3pCLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBZ0IsQ0FBQyxDQUFDO0FBQy9DLGFBQUE7QUFBUyxvQkFBQTtnQkFDUixjQUFjLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLGFBQUE7QUFDSCxTQUFvQixDQUFDO0tBQ3RCLENBQUE7O0lBR00sSUFBUyxDQUFBLFNBQUEsR0FBaEIsVUFDRSxRQUFrRDs7O0FBR2xELElBQUEsSUFBWSxFQUNaLE9BQWUsRUFBQTtBQUVmLFFBQUEsSUFBSSxjQUFjLEVBQUU7WUFDbEIsSUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDO1lBQzdCLElBQUk7Z0JBQ0YsY0FBYyxHQUFHLElBQUksQ0FBQzs7O2dCQUd0QixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBUSxFQUFFLElBQUssQ0FBQyxDQUFDO0FBQ3hDLGFBQUE7QUFBUyxvQkFBQTtnQkFDUixjQUFjLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLGFBQUE7QUFDRixTQUFBO0FBQU0sYUFBQTtZQUNMLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFRLEVBQUUsSUFBSyxDQUFDLENBQUM7QUFDeEMsU0FBQTtLQUNGLENBQUE7SUFDSCxPQUFDLElBQUEsQ0FBQTtBQUFELENBeEc0QixFQUFBLEVBQUEsRUF3RzNCLENBQUM7QUFFRixTQUFTLEtBQUssQ0FBSSxFQUFXLEVBQUE7SUFDM0IsSUFBSTtRQUNGLE9BQU8sRUFBRSxFQUFFLENBQUM7QUFDYixLQUFBO0lBQUMsT0FBTyxPQUFPLEVBQUUsR0FBRTtBQUN0QixDQUFDO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDO0FBRXRDLElBQU0sSUFBSTtBQUNSO0FBQ0E7QUFDQSxLQUFLLENBQUMsWUFBTSxFQUFBLE9BQUEsVUFBVSxDQUFBLEVBQUEsQ0FBQzs7OztBQUl2QixJQUFBLEtBQUssQ0FBQyxZQUFNLEVBQUEsT0FBQSxNQUFNLENBQUEsRUFBQSxDQUFDOzs7O0FBSW5CLElBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQWlCLENBQUM7QUFFdEM7QUFDQTtBQUNBLElBQU0sVUFBVSxHQUVaLElBQUksQ0FBQztBQUVJLElBQUEsSUFBSSxHQUNmLFVBQVUsQ0FBQyxTQUFTLENBQUM7OztJQUdwQixLQUEyQixDQUFDLFNBQVMsQ0FBQztBQUN2QyxJQUFBLENBQUMsVUFBVSxJQUFJLEVBQUE7UUFDYixJQUFJO0FBQ0YsWUFBQSxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUU7QUFDM0MsZ0JBQUEsS0FBSyxFQUFFLElBQUk7QUFDWCxnQkFBQSxVQUFVLEVBQUUsS0FBSztBQUNqQixnQkFBQSxRQUFRLEVBQUUsS0FBSzs7Ozs7OztBQU9mLGdCQUFBLFlBQVksRUFBRSxJQUFJO0FBQ25CLGFBQUEsQ0FBQyxDQUFDO0FBQ0osU0FBQTtBQUFTLGdCQUFBO0FBQ1IsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNiLFNBQUE7QUFDSCxLQUFDLEVBQUUsYUFBYSxFQUFFOztBQ3BMTCxJQUFBLElBQUksR0FBZ0IsSUFBSSxDQUFwQixJQUFBLENBQUEsQ0FBRSxTQUFTLEdBQUssSUFBSSxDQUFBLFVBQUM7QUFZeEMsU0FBUyxxQkFBcUIsQ0FBQyxRQUFtQixFQUFFLEtBQWEsRUFBQTtJQUMvRCxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUVEO0FBQ0E7QUFDTSxTQUFVLFlBQVksQ0FNMUIsS0FBNEQsRUFBQTtJQUU1RCxPQUFPLFlBQUE7UUFDTCxJQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFnQixDQUFDLENBQUM7UUFPaEQsSUFBTSxTQUFTLEdBQVcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFNLFVBQVUsR0FBVyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQU0sQ0FBQyxDQUFDO0FBRTVDLFFBQUEsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUE7QUFDakMsWUFBQSxTQUFTLE1BQU0sQ0FBQyxNQUFjLEVBQUUsUUFBYSxFQUFBO2dCQUMzQyxJQUFJO29CQUNGLElBQUksTUFBTSxHQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzlDLGlCQUFBO0FBQUMsZ0JBQUEsT0FBTyxLQUFLLEVBQUU7QUFDZCxvQkFBQSxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QixpQkFBQTtBQUNELGdCQUFBLElBQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsT0FBTyxHQUFHLFVBQVUsQ0FBQztBQUNoRCxnQkFBQSxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDL0Isb0JBQUEsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDO0FBQzdELGlCQUFBO0FBQU0scUJBQUE7QUFDTCxvQkFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BCLGlCQUFBO2FBQ0Y7QUFDRCxZQUFBLElBQU0sVUFBVSxHQUFHLFVBQUMsS0FBVyxJQUFLLE9BQUEsTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQSxFQUFBLENBQUM7QUFDN0QsWUFBQSxJQUFNLFdBQVcsR0FBRyxVQUFDLEtBQVUsSUFBSyxPQUFBLE1BQU0sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUEsRUFBQSxDQUFDO0FBQzlELFlBQUEsVUFBVSxFQUFFLENBQUM7QUFDZixTQUFDLENBQUMsQ0FBQztBQUNMLEtBQXFDLENBQUM7QUFDeEMsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLEtBQVUsRUFBQTtJQUMvQixPQUFPLEtBQUssSUFBSSxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDO0FBQ25ELENBQUM7QUFFRDtBQUNBO0FBQ0E7QUFDQSxJQUFNLGFBQWEsR0FBZSxFQUFFLENBQUM7QUFDL0IsU0FBVSx3QkFBd0IsQ0FBcUIsS0FBUSxFQUFBOzs7SUFHbkUsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNwQyxRQUFBLElBQU0sSUFBSSxHQUFHLFVBQUMsR0FBUSxFQUFFLE1BQWMsRUFBQTtBQUNwQyxZQUFBLElBQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2QixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsWUFBQTtnQkFDWixPQUFPLFNBQVMsQ0FBQyxFQUFFLEVBQUUsU0FBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMvQyxhQUFDLENBQUM7QUFDSixTQUFDLENBQUE7OztBQUdELFFBQUEsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNyQixRQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdCLFFBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDbkMsUUFBQSxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNCLEtBQUE7QUFDRCxJQUFBLE9BQU8sS0FBSyxDQUFDO0FBQ2Y7Ozs7IiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMV19