Socket
Socket
Sign inDemoInstall

config-kit

Package Overview
Dependencies
Maintainers
2
Versions
20
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

config-kit - npm Package Compare versions

Comparing version 1.3.0 to 1.3.1

5

CHANGELOG.md

@@ -0,1 +1,6 @@

# v1.3.1 (Nov 14, 2020)
* fix(Node): Initialize node to empty object, then manually merge source object using setter to
avoid mutating original object and properly calculate the hashes.
# v1.3.0 (Nov 9, 2020)

@@ -2,0 +7,0 @@

30

dist/node.js

@@ -99,8 +99,4 @@ "use strict";

* If any properties are not already Nodes, then create them.
*
* @param {Boolean} [isCtor=false] - Indicates the rehash is being called by the
* constructor in which case we do not want to notify parents since the parent is
* likely what created this instance in the first place.
*/
rehash(isCtor) {
rehash() {
const isArray = Array.isArray(node);

@@ -133,3 +129,3 @@ const keys = Reflect.ownKeys(node);

if (!isCtor && hash !== this.hash) {
if (hash !== this.hash) {
for (const parent of this.parents) {

@@ -239,3 +235,4 @@ parent[Node.Meta].rehash();

};
const node = new Proxy(value, {
const isArray = Array.isArray(value);
const node = new Proxy(isArray ? [] : {}, {
deleteProperty(target, prop) {

@@ -372,2 +369,15 @@ let result = true;

if (value && typeof value === 'object') {
internal.hashes = isArray ? [] : {};
internal.hash = (0, _util.hashValue)(internal.hashes);
for (const key of Reflect.ownKeys(value)) {
if (key === Node.Meta || isArray && key === 'length') {
continue;
}
node[key] = value[key];
}
}
if (parent !== undefined) {

@@ -385,6 +395,2 @@ if (!(parent === null || parent === void 0 ? void 0 : parent[Node.Meta])) {

if (value && typeof value === 'object') {
internal.rehash(true);
}
return node;

@@ -533,2 +539,2 @@ }

}
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGUuanMiXSwibmFtZXMiOlsiTm9kZSIsImNvbnN0cnVjdG9yIiwidmFsdWUiLCJwYXJlbnQiLCJpbnRlcm5hbCIsImNscyIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwiaGFzaCIsImhhc2hlcyIsImxpc3RlbmVycyIsInBhcmVudHMiLCJTZXQiLCJwcmV2aW91cyIsInBhdXNlZCIsInBlbmRpbmciLCJzY2hlbWEiLCJub3RpZnkiLCJ0YXJnZXQiLCJsaXN0ZW5lciIsImZpbHRlciIsImZvdW5kIiwiZmlsdGVyT2JqZWN0Iiwibm9kZSIsImhhc1ByZXYiLCJoYXMiLCJjaGFuZ2VkIiwiZ2V0IiwiV2Vha01hcCIsInNldCIsIk1ldGEiLCJwYXVzZSIsInJlaGFzaCIsImlzQ3RvciIsImlzQXJyYXkiLCJBcnJheSIsImtleXMiLCJSZWZsZWN0Iiwib3duS2V5cyIsImtleSIsInJlc3VtZSIsIk1hdGgiLCJtYXgiLCJ1bndhdGNoIiwiVHlwZUVycm9yIiwiZGVsZXRlIiwic2l6ZSIsIndhdGNoIiwiTWFwIiwiUHJveHkiLCJkZWxldGVQcm9wZXJ0eSIsInByb3AiLCJyZXN1bHQiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhZGRpdGl2ZSIsImFyZ3MiLCJhcHBseSIsImxlbmd0aCIsInN0YXJ0IiwiZGVsZXRlQ291bnQiLCJpdGVtcyIsInVuZGVmaW5lZCIsImFyciIsInNwbGljZSIsIml0ZW0iLCJFcnJvciIsImRlc2MiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJEYXRlIiwicHJvY2VzcyIsImVudiIsIkpTT04iLCJhZGQiLCJkZWZpbmVQcm9wZXJ0eSIsIm1lcmdlIiwibWl4Iiwic3JjIiwiZGVzdCIsInNyY1ZhbHVlIiwiU3ltYm9sIiwiaSIsImxlbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOzs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDZSxNQUFNQSxJQUFOLENBQVc7QUFDekI7QUFDRDtBQUNBO0FBQ0E7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U0FBUzNELFlBQVQsQ0FBc0JDLElBQXRCLEVBQTRCSCxNQUE1QixFQUFvQztBQUNuQyxNQUFJQyxLQUFLLEdBQUcsSUFBWjtBQUNBLE1BQUliLElBQUksR0FBRyxJQUFYO0FBQ0EsTUFBSU4sS0FBSyxHQUFHcUIsSUFBWixDQUhtQyxDQUtuQzs7QUFDQSxPQUFLLElBQUkyRCxDQUFDLEdBQUcsQ0FBUixFQUFXQyxHQUFHLEdBQUcvRCxNQUFNLENBQUN1QyxNQUE3QixFQUFxQ3pELEtBQUssSUFBSSxPQUFPQSxLQUFQLEtBQWlCLFFBQTFCLElBQXNDZ0YsQ0FBQyxHQUFHQyxHQUEvRSxFQUFvRkQsQ0FBQyxFQUFyRixFQUF5RjtBQUN4RixVQUFNM0MsR0FBRyxHQUFHbkIsTUFBTSxDQUFDOEQsQ0FBRCxDQUFsQjs7QUFDQSxRQUFJLENBQUM1RSxNQUFNLENBQUMrQyxTQUFQLENBQWlCQyxjQUFqQixDQUFnQ0MsSUFBaEMsQ0FBcUNyRCxLQUFyQyxFQUE0Q3FDLEdBQTVDLENBQUwsRUFBdUQ7QUFDdERsQixNQUFBQSxLQUFLLEdBQUcsS0FBUjtBQUNBbkIsTUFBQUEsS0FBSyxHQUFHNkQsU0FBUjtBQUNBO0FBQ0E7O0FBQ0R2RCxJQUFBQSxJQUFJLEdBQUdOLEtBQUssQ0FBQ0YsSUFBSSxDQUFDOEIsSUFBTixDQUFMLENBQWlCckIsTUFBakIsQ0FBd0I4QixHQUF4QixDQUFQOztBQUNBLFFBQUkvQixJQUFJLEtBQUt1RCxTQUFiLEVBQXdCO0FBQ3ZCdkQsTUFBQUEsSUFBSSxHQUFHLElBQVA7QUFDQTs7QUFDRE4sSUFBQUEsS0FBSyxHQUFHQSxLQUFLLENBQUNxQyxHQUFELENBQWI7QUFDQTs7QUFFRCxTQUFPO0FBQUVsQixJQUFBQSxLQUFGO0FBQVNiLElBQUFBLElBQVQ7QUFBZU4sSUFBQUE7QUFBZixHQUFQO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBoYXNoVmFsdWUgfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIEEgbm9kZSBpcyB2YWx1ZSBpbiBhbiBvYmplY3QuIEl0IHdyYXBzIGEgdGhlIHZhbHVlIGluIGEgcHJveHkgc28gdGhhdCB3ZSBjYW4gbGlzdGVuIGZvciB3aGVuIHRoZVxuICogbm9kZSBpcyBjaGFuZ2VkLiBXZSBjYW4gYWxzbyBzdG9yZSBhcmJpdHJhcnkgZGF0YSBpbiB0aGUgbm9kZSdzIG1ldGFkYXRhLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb2RlIHtcblx0LyoqXG5cdCAqIFRoZSBrZXkgZm9yIHRoZSBpbnRlcm5hbCBtZXRhZGF0YS5cblx0ICogQHR5cGUge1N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBNZXRhID0gU3ltYm9sKCdtZXRhJyk7XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBub2RlIHByb3h5IGFuZCBtZXRhZGF0YS5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZSAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoaXMgbm9kZS5cblx0ICogQHBhcmFtIHtOb2RlfSBbcGFyZW50XSAtIFRoZSBub2RlIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IG5vZGUuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcih2YWx1ZSwgcGFyZW50KSB7XG5cdFx0Y29uc3QgaW50ZXJuYWwgPSB7XG5cdFx0XHRjbHM6ICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3Rvcixcblx0XHRcdGhhc2g6ICAgICAgbnVsbCxcblx0XHRcdGhhc2hlczogICAgbnVsbCxcblx0XHRcdGxpc3RlbmVyczogbnVsbCxcblx0XHRcdHBhcmVudHM6ICAgbmV3IFNldCgpLFxuXHRcdFx0cHJldmlvdXM6ICBudWxsLFxuXHRcdFx0cGF1c2VkOiAgICAwLFxuXHRcdFx0cGVuZGluZzogICAwLFxuXHRcdFx0c2NoZW1hOiAgICBudWxsLFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIERpc3BhdGNoZXMgY2hhbmdlIG5vdGlmaWNhdGlvbnMgdG8gdGhlIGxpc3RlbmVycy5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0ge05vZGV9IHRhcmdldCAtIFRoZSBub2RlIHRoYXQgY2hhbmdlZC5cblx0XHRcdCAqL1xuXHRcdFx0bm90aWZ5KHRhcmdldCkge1xuXHRcdFx0XHQvLyBpZiB3ZSdyZSBwYXVzZWQsIGFkZCB0aGlzIG9iamVjdCB0byB0aGUgbGlzdCBvZiBvYmplY3RzIHRoYXQgbWF5IGhhdmUgY2hhbmdlZFxuXHRcdFx0XHRpZiAodGhpcy5wYXVzZWQpIHtcblx0XHRcdFx0XHR0aGlzLnBlbmRpbmcrKztcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBub3RpZnkgYWxsIG9mIHRoaXMgb2JqZWN0J3MgbGlzdGVuZXJzXG5cdFx0XHRcdGlmICh0aGlzLmxpc3RlbmVycykge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgWyBsaXN0ZW5lciwgZmlsdGVyIF0gb2YgdGhpcy5saXN0ZW5lcnMpIHtcblx0XHRcdFx0XHRcdGlmIChmaWx0ZXIpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgeyBmb3VuZCwgaGFzaCwgdmFsdWUgfSA9IGZpbHRlck9iamVjdChub2RlLCBmaWx0ZXIpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBoYXNQcmV2ID0gdGhpcy5wcmV2aW91cz8uaGFzKGxpc3RlbmVyKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY2hhbmdlZCA9IChmb3VuZCAmJiAhaGFzUHJldikgfHwgKGhhc1ByZXYgJiYgaGFzaCAhPT0gdGhpcy5wcmV2aW91cy5nZXQobGlzdGVuZXIpKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIXRoaXMucHJldmlvdXMpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnByZXZpb3VzID0gbmV3IFdlYWtNYXAoKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR0aGlzLnByZXZpb3VzLnNldChsaXN0ZW5lciwgaGFzaCk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKGNoYW5nZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRsaXN0ZW5lcih2YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGxpc3RlbmVyKHRhcmdldCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbm90aWZ5IGFsbCBvZiB0aGlzIG9iamVjdCdzIHBhcmVudHNcblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnQgb2YgdGhpcy5wYXJlbnRzKSB7XG5cdFx0XHRcdFx0cGFyZW50W05vZGUuTWV0YV0ubm90aWZ5KHRhcmdldCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogSW5jcmVtZW50cyB0aGUgcGF1c2UgY291bnRlciB1bnRpbCB0aGUgY291bnRlciByZXNldHMgdG8gemVybyBhbmQgcmVzdW1lc1xuXHRcdFx0ICogbm90aWZpY2F0aW9ucy5cblx0XHRcdCAqL1xuXHRcdFx0cGF1c2UoKSB7XG5cdFx0XHRcdHRoaXMucGF1c2VkKys7XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFJlY29tcHV0ZXMgdGhlIGhhc2ggbG9va3VwIGZvciBhbGwgcHJvcGVydGllcywgdGhlbiByZWNvbXB1dGVzIHRoaXMgb2JqZWN0J3MgaGFzaC5cblx0XHRcdCAqIElmIGFueSBwcm9wZXJ0aWVzIGFyZSBub3QgYWxyZWFkeSBOb2RlcywgdGhlbiBjcmVhdGUgdGhlbS5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0ge0Jvb2xlYW59IFtpc0N0b3I9ZmFsc2VdIC0gSW5kaWNhdGVzIHRoZSByZWhhc2ggaXMgYmVpbmcgY2FsbGVkIGJ5IHRoZVxuXHRcdFx0ICogY29uc3RydWN0b3IgaW4gd2hpY2ggY2FzZSB3ZSBkbyBub3Qgd2FudCB0byBub3RpZnkgcGFyZW50cyBzaW5jZSB0aGUgcGFyZW50IGlzXG5cdFx0XHQgKiBsaWtlbHkgd2hhdCBjcmVhdGVkIHRoaXMgaW5zdGFuY2UgaW4gdGhlIGZpcnN0IHBsYWNlLlxuXHRcdFx0ICovXG5cdFx0XHRyZWhhc2goaXNDdG9yKSB7XG5cdFx0XHRcdGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KG5vZGUpO1xuXHRcdFx0XHRjb25zdCBrZXlzID0gUmVmbGVjdC5vd25LZXlzKG5vZGUpO1xuXHRcdFx0XHRjb25zdCB7IGhhc2ggfSA9IHRoaXM7XG5cblx0XHRcdFx0dGhpcy5oYXNoZXMgPSBpc0FycmF5ID8gW10gOiB7fTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0XHRcdFx0aWYgKGtleSA9PT0gTm9kZS5NZXRhIHx8IChpc0FycmF5ICYmIGtleSA9PT0gJ2xlbmd0aCcpKSB7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAobm9kZVtrZXldICYmIHR5cGVvZiBub2RlW2tleV0gPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdFx0XHRpZiAoIW5vZGVba2V5XT8uW05vZGUuTWV0YV0pIHtcblx0XHRcdFx0XHRcdFx0bm9kZVtrZXldID0gbmV3IG5vZGVbTm9kZS5NZXRhXS5jbHMobm9kZVtrZXldLCBub2RlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuaGFzaGVzW2tleV0gPSBub2RlW2tleV1bTm9kZS5NZXRhXS5oYXNoO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLmhhc2hlc1trZXldID0gaGFzaFZhbHVlKG5vZGVba2V5XSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5oYXNoID0gaGFzaFZhbHVlKHRoaXMuaGFzaGVzKTtcblxuXHRcdFx0XHRpZiAoIWlzQ3RvciAmJiBoYXNoICE9PSB0aGlzLmhhc2gpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudCBvZiB0aGlzLnBhcmVudHMpIHtcblx0XHRcdFx0XHRcdHBhcmVudFtOb2RlLk1ldGFdLnJlaGFzaCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBVbnBhdXNlcyBub3RpZmljYXRpb25zIGFuZCBzZW5kcyBvdXQgYW55IHBlbmRpbmcgbm90aWZpY2F0aW9ucy5cblx0XHRcdCAqL1xuXHRcdFx0cmVzdW1lKCkge1xuXHRcdFx0XHR0aGlzLnBhdXNlZCA9IE1hdGgubWF4KDAsIHRoaXMucGF1c2VkIC0gMSk7XG5cdFx0XHRcdGlmICh0aGlzLnBhdXNlZCA9PT0gMCAmJiB0aGlzLnBlbmRpbmcgPiAwKSB7XG5cdFx0XHRcdFx0dGhpcy5wZW5kaW5nID0gMDtcblx0XHRcdFx0XHR0aGlzLm5vdGlmeShub2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBSZW1vdmVzIGEgbGlzdGVuZXIuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW2xpc3RlbmVyXSAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gc29tZXRoaW5nIGNoYW5nZXMuXG5cdFx0XHQgKi9cblx0XHRcdHVud2F0Y2gobGlzdGVuZXIpIHtcblx0XHRcdFx0aWYgKGxpc3RlbmVyICYmIHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24nKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghdGhpcy5saXN0ZW5lcnMpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAobGlzdGVuZXIpIHtcblx0XHRcdFx0XHR0aGlzLmxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpO1xuXHRcdFx0XHRcdGlmICh0aGlzLnByZXZpb3VzKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnByZXZpb3VzLmRlbGV0ZShsaXN0ZW5lcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHJlbW92ZSBhbGwgbGlzdGVuZXJzXG5cdFx0XHRcdFx0Zm9yIChjb25zdCBbIGxpc3RlbmVyIF0gb2YgdGhpcy5saXN0ZW5lcnMpIHtcblx0XHRcdFx0XHRcdHRoaXMubGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lcik7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5wcmV2aW91cykge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnByZXZpb3VzLmRlbGV0ZShsaXN0ZW5lcik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCF0aGlzLmxpc3RlbmVycy5zaXplKSB7XG5cdFx0XHRcdFx0dGhpcy5saXN0ZW5lcnMgPSBudWxsO1xuXHRcdFx0XHRcdHRoaXMucHJldmlvdXMgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIEFkZHMgYSBsaXN0ZW5lciB0byBiZSBjYWxsZWQgd2hlbiB0aGUgc3BlY2lmaWVkIG9iamVjdCBvciBhbnkgb2YgaXRzXG5cdFx0XHQgKiBwcm9wZXJ0aWVzL2VsZW1lbnRzIGFyZSBjaGFuZ2VkLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7U3RyaW5nfEFycmF5LjxTdHJpbmc+fSBbZmlsdGVyXSAtIEEgcHJvcGVydHkgbmFtZSBvciBhcnJheSBvZiBuZXN0ZWRcblx0XHRcdCAqIHByb3BlcnRpZXMgdG8gd2F0Y2guXG5cdFx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gc29tZXRoaW5nIGNoYW5nZXMuXG5cdFx0XHQgKi9cblx0XHRcdHdhdGNoKGZpbHRlciwgbGlzdGVuZXIpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRsaXN0ZW5lciA9IGZpbHRlcjtcblx0XHRcdFx0XHRmaWx0ZXIgPSBudWxsO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGZpbHRlcikge1xuXHRcdFx0XHRcdGlmICh0eXBlb2YgZmlsdGVyID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0ZmlsdGVyID0gWyBmaWx0ZXIgXTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KGZpbHRlcikpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGZpbHRlciB0byBiZSBhIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24nKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghdGhpcy5saXN0ZW5lcnMpIHtcblx0XHRcdFx0XHR0aGlzLmxpc3RlbmVycyA9IG5ldyBNYXAoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmxpc3RlbmVycy5zZXQobGlzdGVuZXIsIGZpbHRlcik7XG5cblx0XHRcdFx0aWYgKGZpbHRlcikge1xuXHRcdFx0XHRcdGNvbnN0IHsgZm91bmQsIGhhc2ggfSA9IGZpbHRlck9iamVjdChub2RlLCBmaWx0ZXIpO1xuXHRcdFx0XHRcdGlmIChmb3VuZCkge1xuXHRcdFx0XHRcdFx0aWYgKCF0aGlzLnByZXZpb3VzKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMucHJldmlvdXMgPSBuZXcgV2Vha01hcCgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dGhpcy5wcmV2aW91cy5zZXQobGlzdGVuZXIsIGhhc2gpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjb25zdCBub2RlID0gbmV3IFByb3h5KHZhbHVlLCB7XG5cdFx0XHRkZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3ApIHtcblx0XHRcdFx0bGV0IHJlc3VsdCA9IHRydWU7XG5cblx0XHRcdFx0aWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0YXJnZXQsIHByb3ApKSB7XG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXHRcdFx0XHRcdHRhcmdldFtwcm9wXT8uW05vZGUuTWV0YV0/LnBhcmVudHMuZGVsZXRlKG5vZGUpO1xuXHRcdFx0XHRcdHJlc3VsdCA9IGRlbGV0ZSB0YXJnZXRbcHJvcF07XG5cblx0XHRcdFx0XHRkZWxldGUgaW50ZXJuYWwuaGFzaGVzW3Byb3BdO1xuXHRcdFx0XHRcdGludGVybmFsLmhhc2ggPSBoYXNoVmFsdWUoaW50ZXJuYWwuaGFzaGVzKTtcblxuXHRcdFx0XHRcdGlmIChyZXN1bHQpIHtcblx0XHRcdFx0XHRcdGludGVybmFsLm5vdGlmeShub2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fSxcblxuXHRcdFx0Z2V0KHRhcmdldCwgcHJvcCkge1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7XG5cdFx0XHRcdFx0Y29uc3QgYWRkaXRpdmUgPSBwcm9wID09PSAncHVzaCcgfHwgcHJvcCA9PT0gJ3Vuc2hpZnQnO1xuXG5cdFx0XHRcdFx0aWYgKGFkZGl0aXZlIHx8IHByb3AgPT09ICdwb3AnIHx8IHByb3AgPT09ICdzaGlmdCcpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbiAoLi4uYXJncykge1xuXHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5wYXVzZSgpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCByZXN1bHQgPSBBcnJheS5wcm90b3R5cGVbcHJvcF0uYXBwbHkodGFyZ2V0LCBhcmdzKTtcblxuXHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5yZWhhc2goKTtcblx0XHRcdFx0XHRcdFx0aW50ZXJuYWwucmVzdW1lKCk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCFhZGRpdGl2ZSB8fCBhcmdzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdGludGVybmFsLm5vdGlmeShub2RlKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChwcm9wID09PSAnc3BsaWNlJykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uIChzdGFydCwgZGVsZXRlQ291bnQsIC4uLml0ZW1zKSB7XG5cdFx0XHRcdFx0XHRcdGludGVybmFsLnBhdXNlKCk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKHN0YXJ0ICE9PSB1bmRlZmluZWQgJiYgZGVsZXRlQ291bnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZUNvdW50ID0gdGhpcy5sZW5ndGggLSBzdGFydDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHsgaGFzaCB9ID0gaW50ZXJuYWw7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFyciA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbCh0YXJnZXQsIHN0YXJ0LCBkZWxldGVDb3VudCwgLi4uaXRlbXMpO1xuXHRcdFx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXHRcdFx0XHRcdFx0XHRcdGl0ZW0/LltOb2RlLk1ldGFdPy5wYXJlbnRzLmRlbGV0ZShub2RlKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGludGVybmFsLnJlaGFzaCgpO1xuXHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5yZXN1bWUoKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoaW50ZXJuYWwuaGFzaCAhPT0gaGFzaCkge1xuXHRcdFx0XHRcdFx0XHRcdGludGVybmFsLm5vdGlmeShub2RlKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHJldHVybiBhcnI7XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0YXJnZXRbcHJvcF07XG5cdFx0XHR9LFxuXG5cdFx0XHRzZXQodGFyZ2V0LCBwcm9wLCB2YWx1ZSkge1xuXHRcdFx0XHRpZiAodGFyZ2V0ID09PSB2YWx1ZSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignQ2Fubm90IHNldCBvYmplY3QgcHJvcGVydHkgdG8gaXRzZWxmJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZXQgaGFzaCA9IG51bGw7XG5cdFx0XHRcdGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcCk7XG5cblx0XHRcdFx0aWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpICYmIHZhbHVlICE9PSBwcm9jZXNzLmVudiAmJiB2YWx1ZSAhPT0gSlNPTiAmJiB2YWx1ZSAhPT0gTWF0aCkge1xuXHRcdFx0XHRcdGlmICh2YWx1ZVtOb2RlLk1ldGFdKSB7XG5cdFx0XHRcdFx0XHR2YWx1ZVtOb2RlLk1ldGFdLnBhcmVudHMuYWRkKG5vZGUpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR2YWx1ZSA9IG5ldyBub2RlW05vZGUuTWV0YV0uY2xzKHZhbHVlLCBub2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KHsgaGFzaCB9ID0gdmFsdWVbTm9kZS5NZXRhXSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aGFzaCA9IGhhc2hWYWx1ZSh2YWx1ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZXQgY2hhbmdlZCA9IHRydWU7XG5cblx0XHRcdFx0aWYgKGRlc2MpIHtcblx0XHRcdFx0XHRpZiAoaW50ZXJuYWwuaGFzaGVzW3Byb3BdID09PSBoYXNoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpbnRlcm5hbC5wYXJlbnRzLmRlbGV0ZShub2RlKTtcblxuXHRcdFx0XHRcdC8vIGlmIHRoZSBkZXN0aW5hdGlvbiBwcm9wZXJ0eSBoYXMgYSBzZXR0ZXIsIHRoZW4gd2UgY2FuJ3QgYXNzdW1lIHdlIG5lZWQgdG9cblx0XHRcdFx0XHQvLyBmaXJlIGEgZGVsZXRlXG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBkZXNjLnNldCAhPT0gJ2Z1bmN0aW9uJyAmJiAoIUFycmF5LmlzQXJyYXkodGFyZ2V0KSB8fCBwcm9wICE9PSAnbGVuZ3RoJykpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSB0YXJnZXRbcHJvcF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGFyZ2V0W3Byb3BdID0gdmFsdWU7XG5cblx0XHRcdFx0aW50ZXJuYWwuaGFzaGVzW3Byb3BdID0gaGFzaDtcblx0XHRcdFx0aW50ZXJuYWwuaGFzaCA9IGhhc2hWYWx1ZShpbnRlcm5hbC5oYXNoZXMpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgcGFyZW50IG9mIGludGVybmFsLnBhcmVudHMpIHtcblx0XHRcdFx0XHRwYXJlbnRbTm9kZS5NZXRhXS5yZWhhc2goKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjaGFuZ2VkKSB7XG5cdFx0XHRcdFx0aW50ZXJuYWwubm90aWZ5KG5vZGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZSwgTm9kZS5NZXRhLCB7IHZhbHVlOiBpbnRlcm5hbCB9KTtcblxuXHRcdGlmIChwYXJlbnQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKCFwYXJlbnQ/LltOb2RlLk1ldGFdKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHBhcmVudCB0byBiZSBhIE5vZGUnKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHZhbHVlID09PSBwYXJlbnQgfHwgdmFsdWUgPT09IHBhcmVudFtOb2RlLk1ldGFdLnZhbHVlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignUGFyZW50IG11c3QgYmUgbm90IGJlIHRoZSBzYW1lIGFzIHRoZSBub2RlJyk7XG5cdFx0XHR9XG5cblx0XHRcdGludGVybmFsLnBhcmVudHMuYWRkKHBhcmVudCk7XG5cdFx0fVxuXG5cdFx0aWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGludGVybmFsLnJlaGFzaCh0cnVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbm9kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWN1cnNpdmVseSBtZXJnZSB0aGUgdmFsdWUgaW50byB0aGlzIG9iamVjdC5cblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIG5vZGUgdG8gcGF1c2UuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBtZXJnZS5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHN0YXRpYyBtZXJnZShub2RlLCB2YWx1ZSkge1xuXHRcdGlmICghbm9kZT8uW05vZGUuTWV0YV0pIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIG1lcmdlIGRlc3RpbmF0aW9uIHRvIGJlIGEgTm9kZSBpbnN0YW5jZScpO1xuXHRcdH1cblxuXHRcdGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbWVyZ2Ugc291cmNlIHRvIGJlIGFuIG9iamVjdCcpO1xuXHRcdH1cblxuXHRcdG5vZGVbTm9kZS5NZXRhXS5wYXVzZSgpO1xuXG5cdFx0KGZ1bmN0aW9uIG1peChzcmMsIGRlc3QpIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhzcmMpKSB7XG5cdFx0XHRcdGlmIChrZXkgPT09IE5vZGUuTWV0YSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3Qgc3JjVmFsdWUgPSBzcmNba2V5XTtcblxuXHRcdFx0XHRpZiAoc3JjVmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHNyY1ZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShzcmNWYWx1ZSkpIHtcblx0XHRcdFx0XHRpZiAoIWRlc3Rba2V5XT8uW05vZGUuTWV0YV0pIHtcblx0XHRcdFx0XHRcdGRlc3Rba2V5XSA9IHt9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRtaXgoc3JjVmFsdWUsIGRlc3Rba2V5XSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkZXN0W2tleV0pICYmIEFycmF5LmlzQXJyYXkoc3JjVmFsdWUpKSB7XG5cdFx0XHRcdFx0Ly8gb3ZlcndyaXRlIGRlc3RpbmF0aW9uIHdpdGggbmV3IHZhbHVlc1xuXHRcdFx0XHRcdGRlc3Rba2V5XS5zcGxpY2UoMCwgZGVzdFtrZXldLmxlbmd0aCwgLi4uc3JjVmFsdWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRlc3Rba2V5XSA9IHNyY1ZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSh2YWx1ZSwgbm9kZSkpO1xuXG5cdFx0bm9kZVtOb2RlLk1ldGFdLnJlc3VtZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFBhdXNlcyBhbGwgY2hhbmdlIG5vdGlmaWNhdGlvbnMgdW50aWwgcmVzdW1lZC5cblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIG5vZGUgdG8gcGF1c2UuXG5cdCAqIEByZXR1cm5zIHtCb29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBpdCB3YXMgYWxyZWFkeSBwYXVzZWQuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRzdGF0aWMgcGF1c2Uobm9kZSkge1xuXHRcdHJldHVybiBub2RlW05vZGUuTWV0YV0ucGF1c2UoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVbnBhdXNlcyBub3RpZmljYXRpb25zIGFuZCBzZW5kcyBvdXQgYW55IHBlbmRpbmcgbm90aWZpY2F0aW9ucy5cblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIG5vZGUgdG8gcmVzdW1lLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0c3RhdGljIHJlc3VtZShub2RlKSB7XG5cdFx0bm9kZVtOb2RlLk1ldGFdLnJlc3VtZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYSBsaXN0ZW5lci5cblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIG5vZGUgdG8gdW53YXRjaC5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW2xpc3RlbmVyXSAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gc29tZXRoaW5nIGNoYW5nZXMuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRzdGF0aWMgdW53YXRjaChub2RlLCBsaXN0ZW5lcikge1xuXHRcdG5vZGVbTm9kZS5NZXRhXS51bndhdGNoKGxpc3RlbmVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgbGlzdGVuZXIgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHNwZWNpZmllZCBvYmplY3Qgb3IgYW55IG9mIGl0cyBwcm9wZXJ0aWVzL2VsZW1lbnRzIGFyZVxuXHQgKiBjaGFuZ2VkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgbm9kZSB0byB3YXRjaC5cblx0ICogQHBhcmFtIHtTdHJpbmd8QXJyYXkuPFN0cmluZz59IFtmaWx0ZXJdIC0gQSBwcm9wZXJ0eSBuYW1lIG9yIGFycmF5IG9mIG5lc3RlZCBwcm9wZXJ0aWVzIHRvXG5cdCAqIHdhdGNoLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gc29tZXRoaW5nIGNoYW5nZXMuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRzdGF0aWMgd2F0Y2gobm9kZSwgZmlsdGVyLCBsaXN0ZW5lcikge1xuXHRcdG5vZGVbTm9kZS5NZXRhXS53YXRjaChmaWx0ZXIsIGxpc3RlbmVyKTtcblx0fVxufVxuXG4vKipcbiAqIEZpbHRlcnMgdGhlIHNwZWNpZmllZCBub2RlLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIGZpbHRlci5cbiAqIEBwYXJhbSB7QXJyYXkuPFN0cmluZz59IGZpbHRlciAtIFRoZSBmaWx0ZXIgdG8gYXBwbHkgdG8gdGhlIG5vZGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBmaWx0ZXJPYmplY3Qobm9kZSwgZmlsdGVyKSB7XG5cdGxldCBmb3VuZCA9IHRydWU7XG5cdGxldCBoYXNoID0gbnVsbDtcblx0bGV0IHZhbHVlID0gbm9kZTtcblxuXHQvLyBmaW5kIHRoZSB2YWx1ZSB3ZSdyZSBpbnRlcmVzdGVkIGluXG5cdGZvciAobGV0IGkgPSAwLCBsZW4gPSBmaWx0ZXIubGVuZ3RoOyB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIGkgPCBsZW47IGkrKykge1xuXHRcdGNvbnN0IGtleSA9IGZpbHRlcltpXTtcblx0XHRpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkge1xuXHRcdFx0Zm91bmQgPSBmYWxzZTtcblx0XHRcdHZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGhhc2ggPSB2YWx1ZVtOb2RlLk1ldGFdLmhhc2hlc1trZXldO1xuXHRcdGlmIChoYXNoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGhhc2ggPSBudWxsO1xuXHRcdH1cblx0XHR2YWx1ZSA9IHZhbHVlW2tleV07XG5cdH1cblxuXHRyZXR1cm4geyBmb3VuZCwgaGFzaCwgdmFsdWUgfTtcbn1cbiJdLCJmaWxlIjoibm9kZS5qcyJ9
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGUuanMiXSwibmFtZXMiOlsiTm9kZSIsImNvbnN0cnVjdG9yIiwidmFsdWUiLCJwYXJlbnQiLCJpbnRlcm5hbCIsImNscyIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwiaGFzaCIsImhhc2hlcyIsImxpc3RlbmVycyIsInBhcmVudHMiLCJTZXQiLCJwcmV2aW91cyIsInBhdXNlZCIsInBlbmRpbmciLCJzY2hlbWEiLCJub3RpZnkiLCJ0YXJnZXQiLCJsaXN0ZW5lciIsImZpbHRlciIsImZvdW5kIiwiZmlsdGVyT2JqZWN0Iiwibm9kZSIsImhhc1ByZXYiLCJoYXMiLCJjaGFuZ2VkIiwiZ2V0IiwiV2Vha01hcCIsInNldCIsIk1ldGEiLCJwYXVzZSIsInJlaGFzaCIsImlzQXJyYXkiLCJBcnJheSIsImtleXMiLCJSZWZsZWN0Iiwib3duS2V5cyIsImtleSIsInJlc3VtZSIsIk1hdGgiLCJtYXgiLCJ1bndhdGNoIiwiVHlwZUVycm9yIiwiZGVsZXRlIiwic2l6ZSIsIndhdGNoIiwiTWFwIiwiUHJveHkiLCJkZWxldGVQcm9wZXJ0eSIsInByb3AiLCJyZXN1bHQiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhZGRpdGl2ZSIsImFyZ3MiLCJhcHBseSIsImxlbmd0aCIsInN0YXJ0IiwiZGVsZXRlQ291bnQiLCJpdGVtcyIsInVuZGVmaW5lZCIsImFyciIsInNwbGljZSIsIml0ZW0iLCJFcnJvciIsImRlc2MiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJEYXRlIiwicHJvY2VzcyIsImVudiIsIkpTT04iLCJhZGQiLCJkZWZpbmVQcm9wZXJ0eSIsIm1lcmdlIiwibWl4Iiwic3JjIiwiZGVzdCIsInNyY1ZhbHVlIiwiU3ltYm9sIiwiaSIsImxlbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOzs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDZSxNQUFNQSxJQUFOLENBQVc7QUFDekI7QUFDRDtBQUNBO0FBQ0E7O0FBR0M7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQ0MsRUFBQUEsV0FBVyxDQUFDQyxLQUFELEVBQVFDLE1BQVIsRUFBZ0I7QUFDMUIsVUFBTUMsUUFBUSxHQUFHO0FBQ2hCQyxNQUFBQSxHQUFHLEVBQVFDLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQixJQUF0QixFQUE0Qk4sV0FEdkI7QUFFaEJPLE1BQUFBLElBQUksRUFBTyxJQUZLO0FBR2hCQyxNQUFBQSxNQUFNLEVBQUssSUFISztBQUloQkMsTUFBQUEsU0FBUyxFQUFFLElBSks7QUFLaEJDLE1BQUFBLE9BQU8sRUFBSSxJQUFJQyxHQUFKLEVBTEs7QUFNaEJDLE1BQUFBLFFBQVEsRUFBRyxJQU5LO0FBT2hCQyxNQUFBQSxNQUFNLEVBQUssQ0FQSztBQVFoQkMsTUFBQUEsT0FBTyxFQUFJLENBUks7QUFTaEJDLE1BQUFBLE1BQU0sRUFBSyxJQVRLOztBQVdoQjtBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0dDLE1BQUFBLE1BQU0sQ0FBQ0MsTUFBRCxFQUFTO0FBQ2Q7QUFDQSxZQUFJLEtBQUtKLE1BQVQsRUFBaUI7QUFDaEIsZUFBS0MsT0FBTDtBQUNBO0FBQ0EsU0FMYSxDQU9kOzs7QUFDQSxZQUFJLEtBQUtMLFNBQVQsRUFBb0I7QUFDbkIsZUFBSyxNQUFNLENBQUVTLFFBQUYsRUFBWUMsTUFBWixDQUFYLElBQW1DLEtBQUtWLFNBQXhDLEVBQW1EO0FBQ2xELGdCQUFJVSxNQUFKLEVBQVk7QUFBQTs7QUFDWCxvQkFBTTtBQUFFQyxnQkFBQUEsS0FBRjtBQUFTYixnQkFBQUEsSUFBVDtBQUFlTixnQkFBQUE7QUFBZixrQkFBeUJvQixZQUFZLENBQUNDLElBQUQsRUFBT0gsTUFBUCxDQUEzQztBQUNBLG9CQUFNSSxPQUFPLHFCQUFHLEtBQUtYLFFBQVIsbURBQUcsZUFBZVksR0FBZixDQUFtQk4sUUFBbkIsQ0FBaEI7QUFDQSxvQkFBTU8sT0FBTyxHQUFJTCxLQUFLLElBQUksQ0FBQ0csT0FBWCxJQUF3QkEsT0FBTyxJQUFJaEIsSUFBSSxLQUFLLEtBQUtLLFFBQUwsQ0FBY2MsR0FBZCxDQUFrQlIsUUFBbEIsQ0FBNUQ7O0FBRUEsa0JBQUksQ0FBQyxLQUFLTixRQUFWLEVBQW9CO0FBQ25CLHFCQUFLQSxRQUFMLEdBQWdCLElBQUllLE9BQUosRUFBaEI7QUFDQTs7QUFDRCxtQkFBS2YsUUFBTCxDQUFjZ0IsR0FBZCxDQUFrQlYsUUFBbEIsRUFBNEJYLElBQTVCOztBQUVBLGtCQUFJa0IsT0FBSixFQUFhO0FBQ1pQLGdCQUFBQSxRQUFRLENBQUNqQixLQUFELENBQVI7QUFDQTtBQUNELGFBYkQsTUFhTztBQUNOaUIsY0FBQUEsUUFBUSxDQUFDRCxNQUFELENBQVI7QUFDQTtBQUNEO0FBQ0QsU0EzQmEsQ0E2QmQ7OztBQUNBLGFBQUssTUFBTWYsTUFBWCxJQUFxQixLQUFLUSxPQUExQixFQUFtQztBQUNsQ1IsVUFBQUEsTUFBTSxDQUFDSCxJQUFJLENBQUM4QixJQUFOLENBQU4sQ0FBa0JiLE1BQWxCLENBQXlCQyxNQUF6QjtBQUNBO0FBQ0QsT0FqRGU7O0FBbURoQjtBQUNIO0FBQ0E7QUFDQTtBQUNHYSxNQUFBQSxLQUFLLEdBQUc7QUFDUCxhQUFLakIsTUFBTDtBQUNBLE9BekRlOztBQTJEaEI7QUFDSDtBQUNBO0FBQ0E7QUFDR2tCLE1BQUFBLE1BQU0sR0FBRztBQUNSLGNBQU1DLE9BQU8sR0FBR0MsS0FBSyxDQUFDRCxPQUFOLENBQWNWLElBQWQsQ0FBaEI7QUFDQSxjQUFNWSxJQUFJLEdBQUdDLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQmQsSUFBaEIsQ0FBYjtBQUNBLGNBQU07QUFBRWYsVUFBQUE7QUFBRixZQUFXLElBQWpCO0FBRUEsYUFBS0MsTUFBTCxHQUFjd0IsT0FBTyxHQUFHLEVBQUgsR0FBUSxFQUE3Qjs7QUFFQSxhQUFLLE1BQU1LLEdBQVgsSUFBa0JILElBQWxCLEVBQXdCO0FBQ3ZCLGNBQUlHLEdBQUcsS0FBS3RDLElBQUksQ0FBQzhCLElBQWIsSUFBc0JHLE9BQU8sSUFBSUssR0FBRyxLQUFLLFFBQTdDLEVBQXdEO0FBQ3ZEO0FBQ0E7O0FBRUQsY0FBSWYsSUFBSSxDQUFDZSxHQUFELENBQUosSUFBYSxPQUFPZixJQUFJLENBQUNlLEdBQUQsQ0FBWCxLQUFxQixRQUF0QyxFQUFnRDtBQUFBOztBQUMvQyxnQkFBSSxlQUFDZixJQUFJLENBQUNlLEdBQUQsQ0FBTCw4Q0FBQyxVQUFZdEMsSUFBSSxDQUFDOEIsSUFBakIsQ0FBRCxDQUFKLEVBQTZCO0FBQzVCUCxjQUFBQSxJQUFJLENBQUNlLEdBQUQsQ0FBSixHQUFZLElBQUlmLElBQUksQ0FBQ3ZCLElBQUksQ0FBQzhCLElBQU4sQ0FBSixDQUFnQnpCLEdBQXBCLENBQXdCa0IsSUFBSSxDQUFDZSxHQUFELENBQTVCLEVBQW1DZixJQUFuQyxDQUFaO0FBQ0E7O0FBQ0QsaUJBQUtkLE1BQUwsQ0FBWTZCLEdBQVosSUFBbUJmLElBQUksQ0FBQ2UsR0FBRCxDQUFKLENBQVV0QyxJQUFJLENBQUM4QixJQUFmLEVBQXFCdEIsSUFBeEM7QUFDQSxXQUxELE1BS087QUFDTixpQkFBS0MsTUFBTCxDQUFZNkIsR0FBWixJQUFtQixxQkFBVWYsSUFBSSxDQUFDZSxHQUFELENBQWQsQ0FBbkI7QUFDQTtBQUNEOztBQUVELGFBQUs5QixJQUFMLEdBQVkscUJBQVUsS0FBS0MsTUFBZixDQUFaOztBQUVBLFlBQUlELElBQUksS0FBSyxLQUFLQSxJQUFsQixFQUF3QjtBQUN2QixlQUFLLE1BQU1MLE1BQVgsSUFBcUIsS0FBS1EsT0FBMUIsRUFBbUM7QUFDbENSLFlBQUFBLE1BQU0sQ0FBQ0gsSUFBSSxDQUFDOEIsSUFBTixDQUFOLENBQWtCRSxNQUFsQjtBQUNBO0FBQ0Q7QUFDRCxPQTVGZTs7QUE4RmhCO0FBQ0g7QUFDQTtBQUNHTyxNQUFBQSxNQUFNLEdBQUc7QUFDUixhQUFLekIsTUFBTCxHQUFjMEIsSUFBSSxDQUFDQyxHQUFMLENBQVMsQ0FBVCxFQUFZLEtBQUszQixNQUFMLEdBQWMsQ0FBMUIsQ0FBZDs7QUFDQSxZQUFJLEtBQUtBLE1BQUwsS0FBZ0IsQ0FBaEIsSUFBcUIsS0FBS0MsT0FBTCxHQUFlLENBQXhDLEVBQTJDO0FBQzFDLGVBQUtBLE9BQUwsR0FBZSxDQUFmO0FBQ0EsZUFBS0UsTUFBTCxDQUFZTSxJQUFaO0FBQ0E7QUFDRCxPQXZHZTs7QUF5R2hCO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDR21CLE1BQUFBLE9BQU8sQ0FBQ3ZCLFFBQUQsRUFBVztBQUNqQixZQUFJQSxRQUFRLElBQUksT0FBT0EsUUFBUCxLQUFvQixVQUFwQyxFQUFnRDtBQUMvQyxnQkFBTSxJQUFJd0IsU0FBSixDQUFjLG9DQUFkLENBQU47QUFDQTs7QUFFRCxZQUFJLENBQUMsS0FBS2pDLFNBQVYsRUFBcUI7QUFDcEI7QUFDQTs7QUFFRCxZQUFJUyxRQUFKLEVBQWM7QUFDYixlQUFLVCxTQUFMLENBQWVrQyxNQUFmLENBQXNCekIsUUFBdEI7O0FBQ0EsY0FBSSxLQUFLTixRQUFULEVBQW1CO0FBQ2xCLGlCQUFLQSxRQUFMLENBQWMrQixNQUFkLENBQXFCekIsUUFBckI7QUFDQTtBQUNELFNBTEQsTUFLTztBQUNOO0FBQ0EsZUFBSyxNQUFNLENBQUVBLFFBQUYsQ0FBWCxJQUEyQixLQUFLVCxTQUFoQyxFQUEyQztBQUMxQyxpQkFBS0EsU0FBTCxDQUFla0MsTUFBZixDQUFzQnpCLFFBQXRCOztBQUNBLGdCQUFJLEtBQUtOLFFBQVQsRUFBbUI7QUFDbEIsbUJBQUtBLFFBQUwsQ0FBYytCLE1BQWQsQ0FBcUJ6QixRQUFyQjtBQUNBO0FBQ0Q7QUFDRDs7QUFFRCxZQUFJLENBQUMsS0FBS1QsU0FBTCxDQUFlbUMsSUFBcEIsRUFBMEI7QUFDekIsZUFBS25DLFNBQUwsR0FBaUIsSUFBakI7QUFDQSxlQUFLRyxRQUFMLEdBQWdCLElBQWhCO0FBQ0E7QUFDRCxPQTFJZTs7QUE0SWhCO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDR2lDLE1BQUFBLEtBQUssQ0FBQzFCLE1BQUQsRUFBU0QsUUFBVCxFQUFtQjtBQUN2QixZQUFJLE9BQU9DLE1BQVAsS0FBa0IsVUFBdEIsRUFBa0M7QUFDakNELFVBQUFBLFFBQVEsR0FBR0MsTUFBWDtBQUNBQSxVQUFBQSxNQUFNLEdBQUcsSUFBVDtBQUNBOztBQUVELFlBQUlBLE1BQUosRUFBWTtBQUNYLGNBQUksT0FBT0EsTUFBUCxLQUFrQixRQUF0QixFQUFnQztBQUMvQkEsWUFBQUEsTUFBTSxHQUFHLENBQUVBLE1BQUYsQ0FBVDtBQUNBLFdBRkQsTUFFTyxJQUFJLENBQUNjLEtBQUssQ0FBQ0QsT0FBTixDQUFjYixNQUFkLENBQUwsRUFBNEI7QUFDbEMsa0JBQU0sSUFBSXVCLFNBQUosQ0FBYyxvREFBZCxDQUFOO0FBQ0E7QUFDRDs7QUFFRCxZQUFJLE9BQU94QixRQUFQLEtBQW9CLFVBQXhCLEVBQW9DO0FBQ25DLGdCQUFNLElBQUl3QixTQUFKLENBQWMsb0NBQWQsQ0FBTjtBQUNBOztBQUVELFlBQUksQ0FBQyxLQUFLakMsU0FBVixFQUFxQjtBQUNwQixlQUFLQSxTQUFMLEdBQWlCLElBQUlxQyxHQUFKLEVBQWpCO0FBQ0E7O0FBQ0QsYUFBS3JDLFNBQUwsQ0FBZW1CLEdBQWYsQ0FBbUJWLFFBQW5CLEVBQTZCQyxNQUE3Qjs7QUFFQSxZQUFJQSxNQUFKLEVBQVk7QUFDWCxnQkFBTTtBQUFFQyxZQUFBQSxLQUFGO0FBQVNiLFlBQUFBO0FBQVQsY0FBa0JjLFlBQVksQ0FBQ0MsSUFBRCxFQUFPSCxNQUFQLENBQXBDOztBQUNBLGNBQUlDLEtBQUosRUFBVztBQUNWLGdCQUFJLENBQUMsS0FBS1IsUUFBVixFQUFvQjtBQUNuQixtQkFBS0EsUUFBTCxHQUFnQixJQUFJZSxPQUFKLEVBQWhCO0FBQ0E7O0FBQ0QsaUJBQUtmLFFBQUwsQ0FBY2dCLEdBQWQsQ0FBa0JWLFFBQWxCLEVBQTRCWCxJQUE1QjtBQUNBO0FBQ0Q7QUFDRDs7QUFwTGUsS0FBakI7QUF1TEEsVUFBTXlCLE9BQU8sR0FBR0MsS0FBSyxDQUFDRCxPQUFOLENBQWMvQixLQUFkLENBQWhCO0FBRUEsVUFBTXFCLElBQUksR0FBRyxJQUFJeUIsS0FBSixDQUFVZixPQUFPLEdBQUcsRUFBSCxHQUFRLEVBQXpCLEVBQTZCO0FBQ3pDZ0IsTUFBQUEsY0FBYyxDQUFDL0IsTUFBRCxFQUFTZ0MsSUFBVCxFQUFlO0FBQzVCLFlBQUlDLE1BQU0sR0FBRyxJQUFiOztBQUVBLFlBQUk3QyxNQUFNLENBQUM4QyxTQUFQLENBQWlCQyxjQUFqQixDQUFnQ0MsSUFBaEMsQ0FBcUNwQyxNQUFyQyxFQUE2Q2dDLElBQTdDLENBQUosRUFBd0Q7QUFBQTs7QUFDdkQ7QUFDQSwwQkFBQWhDLE1BQU0sQ0FBQ2dDLElBQUQsQ0FBTix1RkFBZWxELElBQUksQ0FBQzhCLElBQXBCLGlGQUEyQm5CLE9BQTNCLENBQW1DaUMsTUFBbkMsQ0FBMENyQixJQUExQztBQUNBNEIsVUFBQUEsTUFBTSxHQUFHLE9BQU9qQyxNQUFNLENBQUNnQyxJQUFELENBQXRCO0FBRUEsaUJBQU85QyxRQUFRLENBQUNLLE1BQVQsQ0FBZ0J5QyxJQUFoQixDQUFQO0FBQ0E5QyxVQUFBQSxRQUFRLENBQUNJLElBQVQsR0FBZ0IscUJBQVVKLFFBQVEsQ0FBQ0ssTUFBbkIsQ0FBaEI7O0FBRUEsY0FBSTBDLE1BQUosRUFBWTtBQUNYL0MsWUFBQUEsUUFBUSxDQUFDYSxNQUFULENBQWdCTSxJQUFoQjtBQUNBO0FBQ0Q7O0FBRUQsZUFBTzRCLE1BQVA7QUFDQSxPQWxCd0M7O0FBb0J6Q3hCLE1BQUFBLEdBQUcsQ0FBQ1QsTUFBRCxFQUFTZ0MsSUFBVCxFQUFlO0FBQ2pCLFlBQUloQixLQUFLLENBQUNELE9BQU4sQ0FBY2YsTUFBZCxDQUFKLEVBQTJCO0FBQzFCLGdCQUFNcUMsUUFBUSxHQUFHTCxJQUFJLEtBQUssTUFBVCxJQUFtQkEsSUFBSSxLQUFLLFNBQTdDOztBQUVBLGNBQUlLLFFBQVEsSUFBSUwsSUFBSSxLQUFLLEtBQXJCLElBQThCQSxJQUFJLEtBQUssT0FBM0MsRUFBb0Q7QUFDbkQsbUJBQU8sVUFBVSxHQUFHTSxJQUFiLEVBQW1CO0FBQ3pCcEQsY0FBQUEsUUFBUSxDQUFDMkIsS0FBVDtBQUNBLG9CQUFNb0IsTUFBTSxHQUFHakIsS0FBSyxDQUFDa0IsU0FBTixDQUFnQkYsSUFBaEIsRUFBc0JPLEtBQXRCLENBQTRCdkMsTUFBNUIsRUFBb0NzQyxJQUFwQyxDQUFmO0FBRUFwRCxjQUFBQSxRQUFRLENBQUM0QixNQUFUO0FBQ0E1QixjQUFBQSxRQUFRLENBQUNtQyxNQUFUOztBQUVBLGtCQUFJLENBQUNnQixRQUFELElBQWFDLElBQUksQ0FBQ0UsTUFBdEIsRUFBOEI7QUFDN0J0RCxnQkFBQUEsUUFBUSxDQUFDYSxNQUFULENBQWdCTSxJQUFoQjtBQUNBOztBQUVELHFCQUFPNEIsTUFBUDtBQUNBLGFBWkQ7QUFhQTs7QUFFRCxjQUFJRCxJQUFJLEtBQUssUUFBYixFQUF1QjtBQUN0QixtQkFBTyxVQUFVUyxLQUFWLEVBQWlCQyxXQUFqQixFQUE4QixHQUFHQyxLQUFqQyxFQUF3QztBQUM5Q3pELGNBQUFBLFFBQVEsQ0FBQzJCLEtBQVQ7O0FBRUEsa0JBQUk0QixLQUFLLEtBQUtHLFNBQVYsSUFBdUJGLFdBQVcsS0FBS0UsU0FBM0MsRUFBc0Q7QUFDckRGLGdCQUFBQSxXQUFXLEdBQUcsS0FBS0YsTUFBTCxHQUFjQyxLQUE1QjtBQUNBOztBQUVELG9CQUFNO0FBQUVuRCxnQkFBQUE7QUFBRixrQkFBV0osUUFBakI7QUFDQSxvQkFBTTJELEdBQUcsR0FBRzdCLEtBQUssQ0FBQ2tCLFNBQU4sQ0FBZ0JZLE1BQWhCLENBQXVCVixJQUF2QixDQUE0QnBDLE1BQTVCLEVBQW9DeUMsS0FBcEMsRUFBMkNDLFdBQTNDLEVBQXdELEdBQUdDLEtBQTNELENBQVo7O0FBQ0EsbUJBQUssTUFBTUksSUFBWCxJQUFtQkYsR0FBbkIsRUFBd0I7QUFBQTs7QUFDdkI7QUFDQUUsZ0JBQUFBLElBQUksU0FBSixJQUFBQSxJQUFJLFdBQUosK0JBQUFBLElBQUksQ0FBR2pFLElBQUksQ0FBQzhCLElBQVIsQ0FBSixvRUFBbUJuQixPQUFuQixDQUEyQmlDLE1BQTNCLENBQWtDckIsSUFBbEM7QUFDQTs7QUFFRG5CLGNBQUFBLFFBQVEsQ0FBQzRCLE1BQVQ7QUFDQTVCLGNBQUFBLFFBQVEsQ0FBQ21DLE1BQVQ7O0FBRUEsa0JBQUluQyxRQUFRLENBQUNJLElBQVQsS0FBa0JBLElBQXRCLEVBQTRCO0FBQzNCSixnQkFBQUEsUUFBUSxDQUFDYSxNQUFULENBQWdCTSxJQUFoQjtBQUNBOztBQUVELHFCQUFPd0MsR0FBUDtBQUNBLGFBdEJEO0FBdUJBO0FBQ0Q7O0FBRUQsZUFBTzdDLE1BQU0sQ0FBQ2dDLElBQUQsQ0FBYjtBQUNBLE9BcEV3Qzs7QUFzRXpDckIsTUFBQUEsR0FBRyxDQUFDWCxNQUFELEVBQVNnQyxJQUFULEVBQWVoRCxLQUFmLEVBQXNCO0FBQ3hCLFlBQUlnQixNQUFNLEtBQUtoQixLQUFmLEVBQXNCO0FBQ3JCLGdCQUFNLElBQUlnRSxLQUFKLENBQVUsc0NBQVYsQ0FBTjtBQUNBOztBQUVELFlBQUkxRCxJQUFJLEdBQUcsSUFBWDtBQUNBLGNBQU0yRCxJQUFJLEdBQUc3RCxNQUFNLENBQUM4RCx3QkFBUCxDQUFnQ2xELE1BQWhDLEVBQXdDZ0MsSUFBeEMsQ0FBYjs7QUFFQSxZQUFJaEQsS0FBSyxJQUFJLE9BQU9BLEtBQVAsS0FBaUIsUUFBMUIsSUFBc0MsRUFBRUEsS0FBSyxZQUFZbUUsSUFBbkIsQ0FBdEMsSUFBa0VuRSxLQUFLLEtBQUtvRSxPQUFPLENBQUNDLEdBQXBGLElBQTJGckUsS0FBSyxLQUFLc0UsSUFBckcsSUFBNkd0RSxLQUFLLEtBQUtzQyxJQUEzSCxFQUFpSTtBQUNoSSxjQUFJdEMsS0FBSyxDQUFDRixJQUFJLENBQUM4QixJQUFOLENBQVQsRUFBc0I7QUFDckI1QixZQUFBQSxLQUFLLENBQUNGLElBQUksQ0FBQzhCLElBQU4sQ0FBTCxDQUFpQm5CLE9BQWpCLENBQXlCOEQsR0FBekIsQ0FBNkJsRCxJQUE3QjtBQUNBLFdBRkQsTUFFTztBQUNOckIsWUFBQUEsS0FBSyxHQUFHLElBQUlxQixJQUFJLENBQUN2QixJQUFJLENBQUM4QixJQUFOLENBQUosQ0FBZ0J6QixHQUFwQixDQUF3QkgsS0FBeEIsRUFBK0JxQixJQUEvQixDQUFSO0FBQ0E7O0FBQ0QsV0FBQztBQUFFZixZQUFBQTtBQUFGLGNBQVdOLEtBQUssQ0FBQ0YsSUFBSSxDQUFDOEIsSUFBTixDQUFqQjtBQUNBLFNBUEQsTUFPTztBQUNOdEIsVUFBQUEsSUFBSSxHQUFHLHFCQUFVTixLQUFWLENBQVA7QUFDQTs7QUFFRCxZQUFJd0IsT0FBTyxHQUFHLElBQWQ7O0FBRUEsWUFBSXlDLElBQUosRUFBVTtBQUNULGNBQUkvRCxRQUFRLENBQUNLLE1BQVQsQ0FBZ0J5QyxJQUFoQixNQUEwQjFDLElBQTlCLEVBQW9DO0FBQ25DLG1CQUFPLElBQVA7QUFDQTs7QUFFREosVUFBQUEsUUFBUSxDQUFDTyxPQUFULENBQWlCaUMsTUFBakIsQ0FBd0JyQixJQUF4QixFQUxTLENBT1Q7QUFDQTs7QUFDQSxjQUFJLE9BQU80QyxJQUFJLENBQUN0QyxHQUFaLEtBQW9CLFVBQXBCLEtBQW1DLENBQUNLLEtBQUssQ0FBQ0QsT0FBTixDQUFjZixNQUFkLENBQUQsSUFBMEJnQyxJQUFJLEtBQUssUUFBdEUsQ0FBSixFQUFxRjtBQUNwRixtQkFBT2hDLE1BQU0sQ0FBQ2dDLElBQUQsQ0FBYjtBQUNBO0FBQ0Q7O0FBRURoQyxRQUFBQSxNQUFNLENBQUNnQyxJQUFELENBQU4sR0FBZWhELEtBQWY7QUFFQUUsUUFBQUEsUUFBUSxDQUFDSyxNQUFULENBQWdCeUMsSUFBaEIsSUFBd0IxQyxJQUF4QjtBQUNBSixRQUFBQSxRQUFRLENBQUNJLElBQVQsR0FBZ0IscUJBQVVKLFFBQVEsQ0FBQ0ssTUFBbkIsQ0FBaEI7O0FBRUEsYUFBSyxNQUFNTixNQUFYLElBQXFCQyxRQUFRLENBQUNPLE9BQTlCLEVBQXVDO0FBQ3RDUixVQUFBQSxNQUFNLENBQUNILElBQUksQ0FBQzhCLElBQU4sQ0FBTixDQUFrQkUsTUFBbEI7QUFDQTs7QUFFRCxZQUFJTixPQUFKLEVBQWE7QUFDWnRCLFVBQUFBLFFBQVEsQ0FBQ2EsTUFBVCxDQUFnQk0sSUFBaEI7QUFDQTs7QUFFRCxlQUFPLElBQVA7QUFDQTs7QUF2SHdDLEtBQTdCLENBQWI7QUEwSEFqQixJQUFBQSxNQUFNLENBQUNvRSxjQUFQLENBQXNCbkQsSUFBdEIsRUFBNEJ2QixJQUFJLENBQUM4QixJQUFqQyxFQUF1QztBQUFFNUIsTUFBQUEsS0FBSyxFQUFFRTtBQUFULEtBQXZDOztBQUVBLFFBQUlGLEtBQUssSUFBSSxPQUFPQSxLQUFQLEtBQWlCLFFBQTlCLEVBQXdDO0FBQ3ZDRSxNQUFBQSxRQUFRLENBQUNLLE1BQVQsR0FBa0J3QixPQUFPLEdBQUcsRUFBSCxHQUFRLEVBQWpDO0FBQ0E3QixNQUFBQSxRQUFRLENBQUNJLElBQVQsR0FBZ0IscUJBQVVKLFFBQVEsQ0FBQ0ssTUFBbkIsQ0FBaEI7O0FBQ0EsV0FBSyxNQUFNNkIsR0FBWCxJQUFrQkYsT0FBTyxDQUFDQyxPQUFSLENBQWdCbkMsS0FBaEIsQ0FBbEIsRUFBMEM7QUFDekMsWUFBSW9DLEdBQUcsS0FBS3RDLElBQUksQ0FBQzhCLElBQWIsSUFBc0JHLE9BQU8sSUFBSUssR0FBRyxLQUFLLFFBQTdDLEVBQXdEO0FBQ3ZEO0FBQ0E7O0FBQ0RmLFFBQUFBLElBQUksQ0FBQ2UsR0FBRCxDQUFKLEdBQVlwQyxLQUFLLENBQUNvQyxHQUFELENBQWpCO0FBQ0E7QUFDRDs7QUFFRCxRQUFJbkMsTUFBTSxLQUFLMkQsU0FBZixFQUEwQjtBQUN6QixVQUFJLEVBQUMzRCxNQUFELGFBQUNBLE1BQUQsdUJBQUNBLE1BQU0sQ0FBR0gsSUFBSSxDQUFDOEIsSUFBUixDQUFQLENBQUosRUFBMEI7QUFDekIsY0FBTSxJQUFJYSxTQUFKLENBQWMsOEJBQWQsQ0FBTjtBQUNBOztBQUVELFVBQUl6QyxLQUFLLEtBQUtDLE1BQVYsSUFBb0JELEtBQUssS0FBS0MsTUFBTSxDQUFDSCxJQUFJLENBQUM4QixJQUFOLENBQU4sQ0FBa0I1QixLQUFwRCxFQUEyRDtBQUMxRCxjQUFNLElBQUlnRSxLQUFKLENBQVUsNENBQVYsQ0FBTjtBQUNBOztBQUVEOUQsTUFBQUEsUUFBUSxDQUFDTyxPQUFULENBQWlCOEQsR0FBakIsQ0FBcUJ0RSxNQUFyQjtBQUNBOztBQUVELFdBQU9vQixJQUFQO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0MsU0FBT29ELEtBQVAsQ0FBYXBELElBQWIsRUFBbUJyQixLQUFuQixFQUEwQjtBQUN6QixRQUFJLEVBQUNxQixJQUFELGFBQUNBLElBQUQsdUJBQUNBLElBQUksQ0FBR3ZCLElBQUksQ0FBQzhCLElBQVIsQ0FBTCxDQUFKLEVBQXdCO0FBQ3ZCLFlBQU0sSUFBSWEsU0FBSixDQUFjLGtEQUFkLENBQU47QUFDQTs7QUFFRCxRQUFJLENBQUN6QyxLQUFELElBQVUsT0FBT0EsS0FBUCxLQUFpQixRQUEzQixJQUF1Q2dDLEtBQUssQ0FBQ0QsT0FBTixDQUFjL0IsS0FBZCxDQUEzQyxFQUFpRTtBQUNoRSxZQUFNLElBQUl5QyxTQUFKLENBQWMsdUNBQWQsQ0FBTjtBQUNBOztBQUVEcEIsSUFBQUEsSUFBSSxDQUFDdkIsSUFBSSxDQUFDOEIsSUFBTixDQUFKLENBQWdCQyxLQUFoQjs7QUFFQyxjQUFTNkMsR0FBVCxDQUFhQyxHQUFiLEVBQWtCQyxJQUFsQixFQUF3QjtBQUN4QixXQUFLLE1BQU14QyxHQUFYLElBQWtCRixPQUFPLENBQUNDLE9BQVIsQ0FBZ0J3QyxHQUFoQixDQUFsQixFQUF3QztBQUN2QyxZQUFJdkMsR0FBRyxLQUFLdEMsSUFBSSxDQUFDOEIsSUFBakIsRUFBdUI7QUFDdEI7QUFDQTs7QUFFRCxjQUFNaUQsUUFBUSxHQUFHRixHQUFHLENBQUN2QyxHQUFELENBQXBCOztBQUVBLFlBQUl5QyxRQUFRLEtBQUssSUFBYixJQUFxQixPQUFPQSxRQUFQLEtBQW9CLFFBQXpDLElBQXFELENBQUM3QyxLQUFLLENBQUNELE9BQU4sQ0FBYzhDLFFBQWQsQ0FBMUQsRUFBbUY7QUFBQTs7QUFDbEYsY0FBSSxlQUFDRCxJQUFJLENBQUN4QyxHQUFELENBQUwsOENBQUMsVUFBWXRDLElBQUksQ0FBQzhCLElBQWpCLENBQUQsQ0FBSixFQUE2QjtBQUM1QmdELFlBQUFBLElBQUksQ0FBQ3hDLEdBQUQsQ0FBSixHQUFZLEVBQVo7QUFDQTs7QUFDRHNDLFVBQUFBLEdBQUcsQ0FBQ0csUUFBRCxFQUFXRCxJQUFJLENBQUN4QyxHQUFELENBQWYsQ0FBSDtBQUNBLFNBTEQsTUFLTyxJQUFJSixLQUFLLENBQUNELE9BQU4sQ0FBYzZDLElBQUksQ0FBQ3hDLEdBQUQsQ0FBbEIsS0FBNEJKLEtBQUssQ0FBQ0QsT0FBTixDQUFjOEMsUUFBZCxDQUFoQyxFQUF5RDtBQUMvRDtBQUNBRCxVQUFBQSxJQUFJLENBQUN4QyxHQUFELENBQUosQ0FBVTBCLE1BQVYsQ0FBaUIsQ0FBakIsRUFBb0JjLElBQUksQ0FBQ3hDLEdBQUQsQ0FBSixDQUFVb0IsTUFBOUIsRUFBc0MsR0FBR3FCLFFBQXpDO0FBQ0EsU0FITSxNQUdBO0FBQ05ELFVBQUFBLElBQUksQ0FBQ3hDLEdBQUQsQ0FBSixHQUFZeUMsUUFBWjtBQUNBO0FBQ0Q7QUFDRCxLQXBCQSxFQW9CQzdFLEtBcEJELEVBb0JRcUIsSUFwQlIsQ0FBRDs7QUFzQkFBLElBQUFBLElBQUksQ0FBQ3ZCLElBQUksQ0FBQzhCLElBQU4sQ0FBSixDQUFnQlMsTUFBaEI7QUFDQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQyxTQUFPUixLQUFQLENBQWFSLElBQWIsRUFBbUI7QUFDbEIsV0FBT0EsSUFBSSxDQUFDdkIsSUFBSSxDQUFDOEIsSUFBTixDQUFKLENBQWdCQyxLQUFoQixFQUFQO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNDLFNBQU9RLE1BQVAsQ0FBY2hCLElBQWQsRUFBb0I7QUFDbkJBLElBQUFBLElBQUksQ0FBQ3ZCLElBQUksQ0FBQzhCLElBQU4sQ0FBSixDQUFnQlMsTUFBaEI7QUFDQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQyxTQUFPRyxPQUFQLENBQWVuQixJQUFmLEVBQXFCSixRQUFyQixFQUErQjtBQUM5QkksSUFBQUEsSUFBSSxDQUFDdkIsSUFBSSxDQUFDOEIsSUFBTixDQUFKLENBQWdCWSxPQUFoQixDQUF3QnZCLFFBQXhCO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0MsU0FBTzJCLEtBQVAsQ0FBYXZCLElBQWIsRUFBbUJILE1BQW5CLEVBQTJCRCxRQUEzQixFQUFxQztBQUNwQ0ksSUFBQUEsSUFBSSxDQUFDdkIsSUFBSSxDQUFDOEIsSUFBTixDQUFKLENBQWdCZ0IsS0FBaEIsQ0FBc0IxQixNQUF0QixFQUE4QkQsUUFBOUI7QUFDQTs7QUFyYndCO0FBd2IxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Z0JBOWJxQm5CLEksVUFLTmdGLE1BQU0sQ0FBQyxNQUFELEM7O0FBMGJyQixTQUFTMUQsWUFBVCxDQUFzQkMsSUFBdEIsRUFBNEJILE1BQTVCLEVBQW9DO0FBQ25DLE1BQUlDLEtBQUssR0FBRyxJQUFaO0FBQ0EsTUFBSWIsSUFBSSxHQUFHLElBQVg7QUFDQSxNQUFJTixLQUFLLEdBQUdxQixJQUFaLENBSG1DLENBS25DOztBQUNBLE9BQUssSUFBSTBELENBQUMsR0FBRyxDQUFSLEVBQVdDLEdBQUcsR0FBRzlELE1BQU0sQ0FBQ3NDLE1BQTdCLEVBQXFDeEQsS0FBSyxJQUFJLE9BQU9BLEtBQVAsS0FBaUIsUUFBMUIsSUFBc0MrRSxDQUFDLEdBQUdDLEdBQS9FLEVBQW9GRCxDQUFDLEVBQXJGLEVBQXlGO0FBQ3hGLFVBQU0zQyxHQUFHLEdBQUdsQixNQUFNLENBQUM2RCxDQUFELENBQWxCOztBQUNBLFFBQUksQ0FBQzNFLE1BQU0sQ0FBQzhDLFNBQVAsQ0FBaUJDLGNBQWpCLENBQWdDQyxJQUFoQyxDQUFxQ3BELEtBQXJDLEVBQTRDb0MsR0FBNUMsQ0FBTCxFQUF1RDtBQUN0RGpCLE1BQUFBLEtBQUssR0FBRyxLQUFSO0FBQ0FuQixNQUFBQSxLQUFLLEdBQUc0RCxTQUFSO0FBQ0E7QUFDQTs7QUFDRHRELElBQUFBLElBQUksR0FBR04sS0FBSyxDQUFDRixJQUFJLENBQUM4QixJQUFOLENBQUwsQ0FBaUJyQixNQUFqQixDQUF3QjZCLEdBQXhCLENBQVA7O0FBQ0EsUUFBSTlCLElBQUksS0FBS3NELFNBQWIsRUFBd0I7QUFDdkJ0RCxNQUFBQSxJQUFJLEdBQUcsSUFBUDtBQUNBOztBQUNETixJQUFBQSxLQUFLLEdBQUdBLEtBQUssQ0FBQ29DLEdBQUQsQ0FBYjtBQUNBOztBQUVELFNBQU87QUFBRWpCLElBQUFBLEtBQUY7QUFBU2IsSUFBQUEsSUFBVDtBQUFlTixJQUFBQTtBQUFmLEdBQVA7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGhhc2hWYWx1ZSB9IGZyb20gJy4vdXRpbCc7XG5cbi8qKlxuICogQSBub2RlIGlzIHZhbHVlIGluIGFuIG9iamVjdC4gSXQgd3JhcHMgYSB0aGUgdmFsdWUgaW4gYSBwcm94eSBzbyB0aGF0IHdlIGNhbiBsaXN0ZW4gZm9yIHdoZW4gdGhlXG4gKiBub2RlIGlzIGNoYW5nZWQuIFdlIGNhbiBhbHNvIHN0b3JlIGFyYml0cmFyeSBkYXRhIGluIHRoZSBub2RlJ3MgbWV0YWRhdGEuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vZGUge1xuXHQvKipcblx0ICogVGhlIGtleSBmb3IgdGhlIGludGVybmFsIG1ldGFkYXRhLlxuXHQgKiBAdHlwZSB7U3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIE1ldGEgPSBTeW1ib2woJ21ldGEnKTtcblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdGhlIG5vZGUgcHJveHkgYW5kIG1ldGFkYXRhLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlIC0gVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhpcyBub2RlLlxuXHQgKiBAcGFyYW0ge05vZGV9IFtwYXJlbnRdIC0gVGhlIG5vZGUgcmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgbm9kZS5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdGNvbnN0cnVjdG9yKHZhbHVlLCBwYXJlbnQpIHtcblx0XHRjb25zdCBpbnRlcm5hbCA9IHtcblx0XHRcdGNsczogICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yLFxuXHRcdFx0aGFzaDogICAgICBudWxsLFxuXHRcdFx0aGFzaGVzOiAgICBudWxsLFxuXHRcdFx0bGlzdGVuZXJzOiBudWxsLFxuXHRcdFx0cGFyZW50czogICBuZXcgU2V0KCksXG5cdFx0XHRwcmV2aW91czogIG51bGwsXG5cdFx0XHRwYXVzZWQ6ICAgIDAsXG5cdFx0XHRwZW5kaW5nOiAgIDAsXG5cdFx0XHRzY2hlbWE6ICAgIG51bGwsXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogRGlzcGF0Y2hlcyBjaGFuZ2Ugbm90aWZpY2F0aW9ucyB0byB0aGUgbGlzdGVuZXJzLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7Tm9kZX0gdGFyZ2V0IC0gVGhlIG5vZGUgdGhhdCBjaGFuZ2VkLlxuXHRcdFx0ICovXG5cdFx0XHRub3RpZnkodGFyZ2V0KSB7XG5cdFx0XHRcdC8vIGlmIHdlJ3JlIHBhdXNlZCwgYWRkIHRoaXMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIG9iamVjdHMgdGhhdCBtYXkgaGF2ZSBjaGFuZ2VkXG5cdFx0XHRcdGlmICh0aGlzLnBhdXNlZCkge1xuXHRcdFx0XHRcdHRoaXMucGVuZGluZysrO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIG5vdGlmeSBhbGwgb2YgdGhpcyBvYmplY3QncyBsaXN0ZW5lcnNcblx0XHRcdFx0aWYgKHRoaXMubGlzdGVuZXJzKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBbIGxpc3RlbmVyLCBmaWx0ZXIgXSBvZiB0aGlzLmxpc3RlbmVycykge1xuXHRcdFx0XHRcdFx0aWYgKGZpbHRlcikge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB7IGZvdW5kLCBoYXNoLCB2YWx1ZSB9ID0gZmlsdGVyT2JqZWN0KG5vZGUsIGZpbHRlcik7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGhhc1ByZXYgPSB0aGlzLnByZXZpb3VzPy5oYXMobGlzdGVuZXIpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjaGFuZ2VkID0gKGZvdW5kICYmICFoYXNQcmV2KSB8fCAoaGFzUHJldiAmJiBoYXNoICE9PSB0aGlzLnByZXZpb3VzLmdldChsaXN0ZW5lcikpO1xuXG5cdFx0XHRcdFx0XHRcdGlmICghdGhpcy5wcmV2aW91cykge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMucHJldmlvdXMgPSBuZXcgV2Vha01hcCgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMucHJldmlvdXMuc2V0KGxpc3RlbmVyLCBoYXNoKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoY2hhbmdlZCkge1xuXHRcdFx0XHRcdFx0XHRcdGxpc3RlbmVyKHZhbHVlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0bGlzdGVuZXIodGFyZ2V0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBub3RpZnkgYWxsIG9mIHRoaXMgb2JqZWN0J3MgcGFyZW50c1xuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudCBvZiB0aGlzLnBhcmVudHMpIHtcblx0XHRcdFx0XHRwYXJlbnRbTm9kZS5NZXRhXS5ub3RpZnkodGFyZ2V0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBJbmNyZW1lbnRzIHRoZSBwYXVzZSBjb3VudGVyIHVudGlsIHRoZSBjb3VudGVyIHJlc2V0cyB0byB6ZXJvIGFuZCByZXN1bWVzXG5cdFx0XHQgKiBub3RpZmljYXRpb25zLlxuXHRcdFx0ICovXG5cdFx0XHRwYXVzZSgpIHtcblx0XHRcdFx0dGhpcy5wYXVzZWQrKztcblx0XHRcdH0sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogUmVjb21wdXRlcyB0aGUgaGFzaCBsb29rdXAgZm9yIGFsbCBwcm9wZXJ0aWVzLCB0aGVuIHJlY29tcHV0ZXMgdGhpcyBvYmplY3QncyBoYXNoLlxuXHRcdFx0ICogSWYgYW55IHByb3BlcnRpZXMgYXJlIG5vdCBhbHJlYWR5IE5vZGVzLCB0aGVuIGNyZWF0ZSB0aGVtLlxuXHRcdFx0ICovXG5cdFx0XHRyZWhhc2goKSB7XG5cdFx0XHRcdGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KG5vZGUpO1xuXHRcdFx0XHRjb25zdCBrZXlzID0gUmVmbGVjdC5vd25LZXlzKG5vZGUpO1xuXHRcdFx0XHRjb25zdCB7IGhhc2ggfSA9IHRoaXM7XG5cblx0XHRcdFx0dGhpcy5oYXNoZXMgPSBpc0FycmF5ID8gW10gOiB7fTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG5cdFx0XHRcdFx0aWYgKGtleSA9PT0gTm9kZS5NZXRhIHx8IChpc0FycmF5ICYmIGtleSA9PT0gJ2xlbmd0aCcpKSB7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAobm9kZVtrZXldICYmIHR5cGVvZiBub2RlW2tleV0gPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdFx0XHRpZiAoIW5vZGVba2V5XT8uW05vZGUuTWV0YV0pIHtcblx0XHRcdFx0XHRcdFx0bm9kZVtrZXldID0gbmV3IG5vZGVbTm9kZS5NZXRhXS5jbHMobm9kZVtrZXldLCBub2RlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuaGFzaGVzW2tleV0gPSBub2RlW2tleV1bTm9kZS5NZXRhXS5oYXNoO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLmhhc2hlc1trZXldID0gaGFzaFZhbHVlKG5vZGVba2V5XSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5oYXNoID0gaGFzaFZhbHVlKHRoaXMuaGFzaGVzKTtcblxuXHRcdFx0XHRpZiAoaGFzaCAhPT0gdGhpcy5oYXNoKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnQgb2YgdGhpcy5wYXJlbnRzKSB7XG5cdFx0XHRcdFx0XHRwYXJlbnRbTm9kZS5NZXRhXS5yZWhhc2goKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogVW5wYXVzZXMgbm90aWZpY2F0aW9ucyBhbmQgc2VuZHMgb3V0IGFueSBwZW5kaW5nIG5vdGlmaWNhdGlvbnMuXG5cdFx0XHQgKi9cblx0XHRcdHJlc3VtZSgpIHtcblx0XHRcdFx0dGhpcy5wYXVzZWQgPSBNYXRoLm1heCgwLCB0aGlzLnBhdXNlZCAtIDEpO1xuXHRcdFx0XHRpZiAodGhpcy5wYXVzZWQgPT09IDAgJiYgdGhpcy5wZW5kaW5nID4gMCkge1xuXHRcdFx0XHRcdHRoaXMucGVuZGluZyA9IDA7XG5cdFx0XHRcdFx0dGhpcy5ub3RpZnkobm9kZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogUmVtb3ZlcyBhIGxpc3RlbmVyLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtsaXN0ZW5lcl0gLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHNvbWV0aGluZyBjaGFuZ2VzLlxuXHRcdFx0ICovXG5cdFx0XHR1bndhdGNoKGxpc3RlbmVyKSB7XG5cdFx0XHRcdGlmIChsaXN0ZW5lciAmJiB0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIXRoaXMubGlzdGVuZXJzKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGxpc3RlbmVyKSB7XG5cdFx0XHRcdFx0dGhpcy5saXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKTtcblx0XHRcdFx0XHRpZiAodGhpcy5wcmV2aW91cykge1xuXHRcdFx0XHRcdFx0dGhpcy5wcmV2aW91cy5kZWxldGUobGlzdGVuZXIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyByZW1vdmUgYWxsIGxpc3RlbmVyc1xuXHRcdFx0XHRcdGZvciAoY29uc3QgWyBsaXN0ZW5lciBdIG9mIHRoaXMubGlzdGVuZXJzKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpO1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMucHJldmlvdXMpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5wcmV2aW91cy5kZWxldGUobGlzdGVuZXIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghdGhpcy5saXN0ZW5lcnMuc2l6ZSkge1xuXHRcdFx0XHRcdHRoaXMubGlzdGVuZXJzID0gbnVsbDtcblx0XHRcdFx0XHR0aGlzLnByZXZpb3VzID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBBZGRzIGEgbGlzdGVuZXIgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHNwZWNpZmllZCBvYmplY3Qgb3IgYW55IG9mIGl0c1xuXHRcdFx0ICogcHJvcGVydGllcy9lbGVtZW50cyBhcmUgY2hhbmdlZC5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0ge1N0cmluZ3xBcnJheS48U3RyaW5nPn0gW2ZpbHRlcl0gLSBBIHByb3BlcnR5IG5hbWUgb3IgYXJyYXkgb2YgbmVzdGVkXG5cdFx0XHQgKiBwcm9wZXJ0aWVzIHRvIHdhdGNoLlxuXHRcdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHNvbWV0aGluZyBjaGFuZ2VzLlxuXHRcdFx0ICovXG5cdFx0XHR3YXRjaChmaWx0ZXIsIGxpc3RlbmVyKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0bGlzdGVuZXIgPSBmaWx0ZXI7XG5cdFx0XHRcdFx0ZmlsdGVyID0gbnVsbDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChmaWx0ZXIpIHtcblx0XHRcdFx0XHRpZiAodHlwZW9mIGZpbHRlciA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHRcdGZpbHRlciA9IFsgZmlsdGVyIF07XG5cdFx0XHRcdFx0fSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShmaWx0ZXIpKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBmaWx0ZXIgdG8gYmUgYSBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncycpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIXRoaXMubGlzdGVuZXJzKSB7XG5cdFx0XHRcdFx0dGhpcy5saXN0ZW5lcnMgPSBuZXcgTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5saXN0ZW5lcnMuc2V0KGxpc3RlbmVyLCBmaWx0ZXIpO1xuXG5cdFx0XHRcdGlmIChmaWx0ZXIpIHtcblx0XHRcdFx0XHRjb25zdCB7IGZvdW5kLCBoYXNoIH0gPSBmaWx0ZXJPYmplY3Qobm9kZSwgZmlsdGVyKTtcblx0XHRcdFx0XHRpZiAoZm91bmQpIHtcblx0XHRcdFx0XHRcdGlmICghdGhpcy5wcmV2aW91cykge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnByZXZpb3VzID0gbmV3IFdlYWtNYXAoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMucHJldmlvdXMuc2V0KGxpc3RlbmVyLCBoYXNoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Y29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkodmFsdWUpO1xuXG5cdFx0Y29uc3Qgbm9kZSA9IG5ldyBQcm94eShpc0FycmF5ID8gW10gOiB7fSwge1xuXHRcdFx0ZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wKSB7XG5cdFx0XHRcdGxldCByZXN1bHQgPSB0cnVlO1xuXG5cdFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBwcm9wKSkge1xuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0XHRcdFx0XHR0YXJnZXRbcHJvcF0/LltOb2RlLk1ldGFdPy5wYXJlbnRzLmRlbGV0ZShub2RlKTtcblx0XHRcdFx0XHRyZXN1bHQgPSBkZWxldGUgdGFyZ2V0W3Byb3BdO1xuXG5cdFx0XHRcdFx0ZGVsZXRlIGludGVybmFsLmhhc2hlc1twcm9wXTtcblx0XHRcdFx0XHRpbnRlcm5hbC5oYXNoID0gaGFzaFZhbHVlKGludGVybmFsLmhhc2hlcyk7XG5cblx0XHRcdFx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRpbnRlcm5hbC5ub3RpZnkobm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH0sXG5cblx0XHRcdGdldCh0YXJnZXQsIHByb3ApIHtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSkge1xuXHRcdFx0XHRcdGNvbnN0IGFkZGl0aXZlID0gcHJvcCA9PT0gJ3B1c2gnIHx8IHByb3AgPT09ICd1bnNoaWZ0JztcblxuXHRcdFx0XHRcdGlmIChhZGRpdGl2ZSB8fCBwcm9wID09PSAncG9wJyB8fCBwcm9wID09PSAnc2hpZnQnKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcblx0XHRcdFx0XHRcdFx0aW50ZXJuYWwucGF1c2UoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlW3Byb3BdLmFwcGx5KHRhcmdldCwgYXJncyk7XG5cblx0XHRcdFx0XHRcdFx0aW50ZXJuYWwucmVoYXNoKCk7XG5cdFx0XHRcdFx0XHRcdGludGVybmFsLnJlc3VtZSgpO1xuXG5cdFx0XHRcdFx0XHRcdGlmICghYWRkaXRpdmUgfHwgYXJncy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5ub3RpZnkobm9kZSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAocHJvcCA9PT0gJ3NwbGljZScpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbiAoc3RhcnQsIGRlbGV0ZUNvdW50LCAuLi5pdGVtcykge1xuXHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5wYXVzZSgpO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChzdGFydCAhPT0gdW5kZWZpbmVkICYmIGRlbGV0ZUNvdW50ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGVDb3VudCA9IHRoaXMubGVuZ3RoIC0gc3RhcnQ7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRjb25zdCB7IGhhc2ggfSA9IGludGVybmFsO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhcnIgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwodGFyZ2V0LCBzdGFydCwgZGVsZXRlQ291bnQsIC4uLml0ZW1zKTtcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIGFycikge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0XHRcdFx0XHRcdFx0XHRpdGVtPy5bTm9kZS5NZXRhXT8ucGFyZW50cy5kZWxldGUobm9kZSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5yZWhhc2goKTtcblx0XHRcdFx0XHRcdFx0aW50ZXJuYWwucmVzdW1lKCk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKGludGVybmFsLmhhc2ggIT09IGhhc2gpIHtcblx0XHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5ub3RpZnkobm9kZSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYXJyO1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdGFyZ2V0W3Byb3BdO1xuXHRcdFx0fSxcblxuXHRcdFx0c2V0KHRhcmdldCwgcHJvcCwgdmFsdWUpIHtcblx0XHRcdFx0aWYgKHRhcmdldCA9PT0gdmFsdWUpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzZXQgb2JqZWN0IHByb3BlcnR5IHRvIGl0c2VsZicpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IGhhc2ggPSBudWxsO1xuXHRcdFx0XHRjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3ApO1xuXG5cdFx0XHRcdGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSAmJiB2YWx1ZSAhPT0gcHJvY2Vzcy5lbnYgJiYgdmFsdWUgIT09IEpTT04gJiYgdmFsdWUgIT09IE1hdGgpIHtcblx0XHRcdFx0XHRpZiAodmFsdWVbTm9kZS5NZXRhXSkge1xuXHRcdFx0XHRcdFx0dmFsdWVbTm9kZS5NZXRhXS5wYXJlbnRzLmFkZChub2RlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dmFsdWUgPSBuZXcgbm9kZVtOb2RlLk1ldGFdLmNscyh2YWx1ZSwgbm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCh7IGhhc2ggfSA9IHZhbHVlW05vZGUuTWV0YV0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGhhc2ggPSBoYXNoVmFsdWUodmFsdWUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IGNoYW5nZWQgPSB0cnVlO1xuXG5cdFx0XHRcdGlmIChkZXNjKSB7XG5cdFx0XHRcdFx0aWYgKGludGVybmFsLmhhc2hlc1twcm9wXSA9PT0gaGFzaCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aW50ZXJuYWwucGFyZW50cy5kZWxldGUobm9kZSk7XG5cblx0XHRcdFx0XHQvLyBpZiB0aGUgZGVzdGluYXRpb24gcHJvcGVydHkgaGFzIGEgc2V0dGVyLCB0aGVuIHdlIGNhbid0IGFzc3VtZSB3ZSBuZWVkIHRvXG5cdFx0XHRcdFx0Ly8gZmlyZSBhIGRlbGV0ZVxuXHRcdFx0XHRcdGlmICh0eXBlb2YgZGVzYy5zZXQgIT09ICdmdW5jdGlvbicgJiYgKCFBcnJheS5pc0FycmF5KHRhcmdldCkgfHwgcHJvcCAhPT0gJ2xlbmd0aCcpKSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgdGFyZ2V0W3Byb3BdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRhcmdldFtwcm9wXSA9IHZhbHVlO1xuXG5cdFx0XHRcdGludGVybmFsLmhhc2hlc1twcm9wXSA9IGhhc2g7XG5cdFx0XHRcdGludGVybmFsLmhhc2ggPSBoYXNoVmFsdWUoaW50ZXJuYWwuaGFzaGVzKTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudCBvZiBpbnRlcm5hbC5wYXJlbnRzKSB7XG5cdFx0XHRcdFx0cGFyZW50W05vZGUuTWV0YV0ucmVoYXNoKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY2hhbmdlZCkge1xuXHRcdFx0XHRcdGludGVybmFsLm5vdGlmeShub2RlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5vZGUsIE5vZGUuTWV0YSwgeyB2YWx1ZTogaW50ZXJuYWwgfSk7XG5cblx0XHRpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuXHRcdFx0aW50ZXJuYWwuaGFzaGVzID0gaXNBcnJheSA/IFtdIDoge307XG5cdFx0XHRpbnRlcm5hbC5oYXNoID0gaGFzaFZhbHVlKGludGVybmFsLmhhc2hlcyk7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXModmFsdWUpKSB7XG5cdFx0XHRcdGlmIChrZXkgPT09IE5vZGUuTWV0YSB8fCAoaXNBcnJheSAmJiBrZXkgPT09ICdsZW5ndGgnKSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG5vZGVba2V5XSA9IHZhbHVlW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHBhcmVudCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoIXBhcmVudD8uW05vZGUuTWV0YV0pIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgcGFyZW50IHRvIGJlIGEgTm9kZScpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodmFsdWUgPT09IHBhcmVudCB8fCB2YWx1ZSA9PT0gcGFyZW50W05vZGUuTWV0YV0udmFsdWUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdQYXJlbnQgbXVzdCBiZSBub3QgYmUgdGhlIHNhbWUgYXMgdGhlIG5vZGUnKTtcblx0XHRcdH1cblxuXHRcdFx0aW50ZXJuYWwucGFyZW50cy5hZGQocGFyZW50KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbm9kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWN1cnNpdmVseSBtZXJnZSB0aGUgdmFsdWUgaW50byB0aGlzIG9iamVjdC5cblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIG5vZGUgdG8gcGF1c2UuXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBtZXJnZS5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHN0YXRpYyBtZXJnZShub2RlLCB2YWx1ZSkge1xuXHRcdGlmICghbm9kZT8uW05vZGUuTWV0YV0pIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIG1lcmdlIGRlc3RpbmF0aW9uIHRvIGJlIGEgTm9kZSBpbnN0YW5jZScpO1xuXHRcdH1cblxuXHRcdGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbWVyZ2Ugc291cmNlIHRvIGJlIGFuIG9iamVjdCcpO1xuXHRcdH1cblxuXHRcdG5vZGVbTm9kZS5NZXRhXS5wYXVzZSgpO1xuXG5cdFx0KGZ1bmN0aW9uIG1peChzcmMsIGRlc3QpIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhzcmMpKSB7XG5cdFx0XHRcdGlmIChrZXkgPT09IE5vZGUuTWV0YSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3Qgc3JjVmFsdWUgPSBzcmNba2V5XTtcblxuXHRcdFx0XHRpZiAoc3JjVmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHNyY1ZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShzcmNWYWx1ZSkpIHtcblx0XHRcdFx0XHRpZiAoIWRlc3Rba2V5XT8uW05vZGUuTWV0YV0pIHtcblx0XHRcdFx0XHRcdGRlc3Rba2V5XSA9IHt9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRtaXgoc3JjVmFsdWUsIGRlc3Rba2V5XSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkZXN0W2tleV0pICYmIEFycmF5LmlzQXJyYXkoc3JjVmFsdWUpKSB7XG5cdFx0XHRcdFx0Ly8gb3ZlcndyaXRlIGRlc3RpbmF0aW9uIHdpdGggbmV3IHZhbHVlc1xuXHRcdFx0XHRcdGRlc3Rba2V5XS5zcGxpY2UoMCwgZGVzdFtrZXldLmxlbmd0aCwgLi4uc3JjVmFsdWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRlc3Rba2V5XSA9IHNyY1ZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSh2YWx1ZSwgbm9kZSkpO1xuXG5cdFx0bm9kZVtOb2RlLk1ldGFdLnJlc3VtZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFBhdXNlcyBhbGwgY2hhbmdlIG5vdGlmaWNhdGlvbnMgdW50aWwgcmVzdW1lZC5cblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIG5vZGUgdG8gcGF1c2UuXG5cdCAqIEByZXR1cm5zIHtCb29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBpdCB3YXMgYWxyZWFkeSBwYXVzZWQuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRzdGF0aWMgcGF1c2Uobm9kZSkge1xuXHRcdHJldHVybiBub2RlW05vZGUuTWV0YV0ucGF1c2UoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVbnBhdXNlcyBub3RpZmljYXRpb25zIGFuZCBzZW5kcyBvdXQgYW55IHBlbmRpbmcgbm90aWZpY2F0aW9ucy5cblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIG5vZGUgdG8gcmVzdW1lLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0c3RhdGljIHJlc3VtZShub2RlKSB7XG5cdFx0bm9kZVtOb2RlLk1ldGFdLnJlc3VtZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgYSBsaXN0ZW5lci5cblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIG5vZGUgdG8gdW53YXRjaC5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW2xpc3RlbmVyXSAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gc29tZXRoaW5nIGNoYW5nZXMuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRzdGF0aWMgdW53YXRjaChub2RlLCBsaXN0ZW5lcikge1xuXHRcdG5vZGVbTm9kZS5NZXRhXS51bndhdGNoKGxpc3RlbmVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgbGlzdGVuZXIgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHNwZWNpZmllZCBvYmplY3Qgb3IgYW55IG9mIGl0cyBwcm9wZXJ0aWVzL2VsZW1lbnRzIGFyZVxuXHQgKiBjaGFuZ2VkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgbm9kZSB0byB3YXRjaC5cblx0ICogQHBhcmFtIHtTdHJpbmd8QXJyYXkuPFN0cmluZz59IFtmaWx0ZXJdIC0gQSBwcm9wZXJ0eSBuYW1lIG9yIGFycmF5IG9mIG5lc3RlZCBwcm9wZXJ0aWVzIHRvXG5cdCAqIHdhdGNoLlxuXHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gc29tZXRoaW5nIGNoYW5nZXMuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRzdGF0aWMgd2F0Y2gobm9kZSwgZmlsdGVyLCBsaXN0ZW5lcikge1xuXHRcdG5vZGVbTm9kZS5NZXRhXS53YXRjaChmaWx0ZXIsIGxpc3RlbmVyKTtcblx0fVxufVxuXG4vKipcbiAqIEZpbHRlcnMgdGhlIHNwZWNpZmllZCBub2RlLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIGZpbHRlci5cbiAqIEBwYXJhbSB7QXJyYXkuPFN0cmluZz59IGZpbHRlciAtIFRoZSBmaWx0ZXIgdG8gYXBwbHkgdG8gdGhlIG5vZGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBmaWx0ZXJPYmplY3Qobm9kZSwgZmlsdGVyKSB7XG5cdGxldCBmb3VuZCA9IHRydWU7XG5cdGxldCBoYXNoID0gbnVsbDtcblx0bGV0IHZhbHVlID0gbm9kZTtcblxuXHQvLyBmaW5kIHRoZSB2YWx1ZSB3ZSdyZSBpbnRlcmVzdGVkIGluXG5cdGZvciAobGV0IGkgPSAwLCBsZW4gPSBmaWx0ZXIubGVuZ3RoOyB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIGkgPCBsZW47IGkrKykge1xuXHRcdGNvbnN0IGtleSA9IGZpbHRlcltpXTtcblx0XHRpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkge1xuXHRcdFx0Zm91bmQgPSBmYWxzZTtcblx0XHRcdHZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGhhc2ggPSB2YWx1ZVtOb2RlLk1ldGFdLmhhc2hlc1trZXldO1xuXHRcdGlmIChoYXNoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGhhc2ggPSBudWxsO1xuXHRcdH1cblx0XHR2YWx1ZSA9IHZhbHVlW2tleV07XG5cdH1cblxuXHRyZXR1cm4geyBmb3VuZCwgaGFzaCwgdmFsdWUgfTtcbn1cbiJdLCJmaWxlIjoibm9kZS5qcyJ9

2

package.json
{
"name": "config-kit",
"version": "1.3.0",
"version": "1.3.1",
"description": "A universal, layered configuration system.",

@@ -5,0 +5,0 @@ "main": "./dist/index.js",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc