Socket
Socket
Sign inDemoInstall

config-kit

Package Overview
Dependencies
29
Maintainers
2
Versions
20
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.4.3 to 1.5.0

5

CHANGELOG.md

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

# v1.5.0 (Feb 3, 2021)
* feat: Added support for `Node.onSet()` callback.
* chore: Updated dependencies.
# v1.4.3 (Jan 5, 2021)

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

22

dist/node.js

@@ -30,4 +30,5 @@ "use strict";

constructor(value, parent) {
const cls = Object.getPrototypeOf(this).constructor;
const internal = {
cls: Object.getPrototypeOf(this).constructor,
cls,
hash: null,

@@ -118,3 +119,3 @@ hashes: null,

if (!((_node$key = node[key]) !== null && _node$key !== void 0 && _node$key[Node.Meta])) {
node[key] = new node[Node.Meta].cls(node[key], node);
node[key] = new cls(node[key], node);
}

@@ -323,3 +324,3 @@

} else {
value = new node[Node.Meta].cls(value, node);
value = new cls(value, node);
}

@@ -350,2 +351,13 @@

target[prop] = value;
if (typeof cls.onSet === 'function') {
cls.onSet({
internal,
node,
prop,
target,
value
});
}
internal.hashes[prop] = hash;

@@ -368,3 +380,3 @@ internal.hash = (0, _util.hashValue)(internal.hashes);

value: internal
});
}); // if value is an object, we copy the value into this node instance

@@ -539,2 +551,2 @@ if (value && typeof value === 'object') {

}
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGUuanMiXSwibmFtZXMiOlsiTm9kZSIsImNvbnN0cnVjdG9yIiwidmFsdWUiLCJwYXJlbnQiLCJpbnRlcm5hbCIsImNscyIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwiaGFzaCIsImhhc2hlcyIsImxpc3RlbmVycyIsInBhcmVudHMiLCJTZXQiLCJwcmV2aW91cyIsInBhdXNlZCIsInBlbmRpbmciLCJzY2hlbWEiLCJub3RpZnkiLCJ0YXJnZXQiLCJsaXN0ZW5lciIsImZpbHRlciIsImZvdW5kIiwiZmlsdGVyT2JqZWN0Iiwibm9kZSIsImhhc1ByZXYiLCJoYXMiLCJjaGFuZ2VkIiwiZ2V0IiwiV2Vha01hcCIsInNldCIsIk1ldGEiLCJwYXVzZSIsInJlaGFzaCIsImlzQXJyYXkiLCJBcnJheSIsImtleXMiLCJSZWZsZWN0Iiwib3duS2V5cyIsImtleSIsInJlc3VtZSIsIk1hdGgiLCJtYXgiLCJ1bndhdGNoIiwiVHlwZUVycm9yIiwiZGVsZXRlIiwic2l6ZSIsIndhdGNoIiwiTWFwIiwiUHJveHkiLCJkZWxldGVQcm9wZXJ0eSIsInByb3AiLCJyZXN1bHQiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhZGRpdGl2ZSIsImFyZ3MiLCJhcHBseSIsImxlbmd0aCIsInN0YXJ0IiwiZGVsZXRlQ291bnQiLCJpdGVtcyIsInVuZGVmaW5lZCIsImFyciIsInNwbGljZSIsIml0ZW0iLCJFcnJvciIsImRlc2MiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJEYXRlIiwicHJvY2VzcyIsImVudiIsIkpTT04iLCJhZGQiLCJkZWZpbmVQcm9wZXJ0eSIsIm1lcmdlIiwibWl4Iiwic3JjIiwiZGVzdCIsInNyY1ZhbHVlIiwiU3ltYm9sIiwiaSIsImxlbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOzs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDZSxNQUFNQSxJQUFOLENBQVc7QUFDekI7QUFDRDtBQUNBO0FBQ0E7O0FBR0M7QUFD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ckIsTUFBakIsQ0FBd0I2QixHQUF4QixDQUFQOztBQUNBLFFBQUk5QixJQUFJLEtBQUtzRCxTQUFiLEVBQXdCO0FBQ3ZCdEQsTUFBQUEsSUFBSSxHQUFHLElBQVA7QUFDQTs7QUFDRE4sSUFBQUEsS0FBSyxHQUFHQSxLQUFLLENBQUNvQyxHQUFELENBQWI7QUFDQTs7QUFFRCxTQUFPO0FBQUVqQixJQUFBQSxLQUFGO0FBQVNiLElBQUFBLElBQVQ7QUFBZU4sSUFBQUE7QUFBZixHQUFQO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBoYXNoVmFsdWUgfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIEEgbm9kZSBpcyB2YWx1ZSBpbiBhbiBvYmplY3QuIEl0IHdyYXBzIGEgdGhlIHZhbHVlIGluIGEgcHJveHkgc28gdGhhdCB3ZSBjYW4gbGlzdGVuIGZvciB3aGVuIHRoZVxuICogbm9kZSBpcyBjaGFuZ2VkLiBXZSBjYW4gYWxzbyBzdG9yZSBhcmJpdHJhcnkgZGF0YSBpbiB0aGUgbm9kZSdzIG1ldGFkYXRhLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb2RlIHtcblx0LyoqXG5cdCAqIFRoZSBrZXkgZm9yIHRoZSBpbnRlcm5hbCBtZXRhZGF0YS5cblx0ICogQHR5cGUge1N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBNZXRhID0gU3ltYm9sKCdtZXRhJyk7XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBub2RlIHByb3h5IGFuZCBtZXRhZGF0YS5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZSAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoaXMgbm9kZS5cblx0ICogQHBhcmFtIHtOb2RlfSBbcGFyZW50XSAtIFRoZSBub2RlIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IG5vZGUuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcih2YWx1ZSwgcGFyZW50KSB7XG5cdFx0Y29uc3QgaW50ZXJuYWwgPSB7XG5cdFx0XHRjbHM6ICAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3Rvcixcblx0XHRcdGhhc2g6ICAgICAgbnVsbCxcblx0XHRcdGhhc2hlczogICAgbnVsbCxcblx0XHRcdGxpc3RlbmVyczogbnVsbCxcblx0XHRcdHBhcmVudHM6ICAgbmV3IFNldCgpLFxuXHRcdFx0cHJldmlvdXM6ICBudWxsLFxuXHRcdFx0cGF1c2VkOiAgICAwLFxuXHRcdFx0cGVuZGluZzogICAwLFxuXHRcdFx0c2NoZW1hOiAgICBudWxsLFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIERpc3BhdGNoZXMgY2hhbmdlIG5vdGlmaWNhdGlvbnMgdG8gdGhlIGxpc3RlbmVycy5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0ge05vZGV9IHRhcmdldCAtIFRoZSBub2RlIHRoYXQgY2hhbmdlZC5cblx0XHRcdCAqL1xuXHRcdFx0bm90aWZ5KHRhcmdldCkge1xuXHRcdFx0XHQvLyBpZiB3ZSdyZSBwYXVzZWQsIGFkZCB0aGlzIG9iamVjdCB0byB0aGUgbGlzdCBvZiBvYmplY3RzIHRoYXQgbWF5IGhhdmUgY2hhbmdlZFxuXHRcdFx0XHRpZiAodGhpcy5wYXVzZWQpIHtcblx0XHRcdFx0XHR0aGlzLnBlbmRpbmcrKztcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBub3RpZnkgYWxsIG9mIHRoaXMgb2JqZWN0J3MgbGlzdGVuZXJzXG5cdFx0XHRcdGlmICh0aGlzLmxpc3RlbmVycykge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgWyBsaXN0ZW5lciwgZmlsdGVyIF0gb2YgdGhpcy5saXN0ZW5lcnMpIHtcblx0XHRcdFx0XHRcdGlmIChmaWx0ZXIpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgeyBmb3VuZCwgaGFzaCwgdmFsdWUgfSA9IGZpbHRlck9iamVjdChub2RlLCBmaWx0ZXIpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBoYXNQcmV2ID0gdGhpcy5wcmV2aW91cz8uaGFzKGxpc3RlbmVyKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY2hhbmdlZCA9IChmb3VuZCAmJiAhaGFzUHJldikgfHwgKGhhc1ByZXYgJiYgaGFzaCAhPT0gdGhpcy5wcmV2aW91cy5nZXQobGlzdGVuZXIpKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIXRoaXMucHJldmlvdXMpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnByZXZpb3VzID0gbmV3IFdlYWtNYXAoKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR0aGlzLnByZXZpb3VzLnNldChsaXN0ZW5lciwgaGFzaCk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKGNoYW5nZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRsaXN0ZW5lcih2YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGxpc3RlbmVyKHRhcmdldCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbm90aWZ5IGFsbCBvZiB0aGlzIG9iamVjdCdzIHBhcmVudHNcblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnQgb2YgdGhpcy5wYXJlbnRzKSB7XG5cdFx0XHRcdFx0cGFyZW50W05vZGUuTWV0YV0ubm90aWZ5KHRhcmdldCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogSW5jcmVtZW50cyB0aGUgcGF1c2UgY291bnRlciB1bnRpbCB0aGUgY291bnRlciByZXNldHMgdG8gemVybyBhbmQgcmVzdW1lc1xuXHRcdFx0ICogbm90aWZpY2F0aW9ucy5cblx0XHRcdCAqL1xuXHRcdFx0cGF1c2UoKSB7XG5cdFx0XHRcdHRoaXMucGF1c2VkKys7XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFJlY29tcHV0ZXMgdGhlIGhhc2ggbG9va3VwIGZvciBhbGwgcHJvcGVydGllcywgdGhlbiByZWNvbXB1dGVzIHRoaXMgb2JqZWN0J3MgaGFzaC5cblx0XHRcdCAqIElmIGFueSBwcm9wZXJ0aWVzIGFyZSBub3QgYWxyZWFkeSBOb2RlcywgdGhlbiBjcmVhdGUgdGhlbS5cblx0XHRcdCAqL1xuXHRcdFx0cmVoYXNoKCkge1xuXHRcdFx0XHRjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShub2RlKTtcblx0XHRcdFx0Y29uc3Qga2V5cyA9IFJlZmxlY3Qub3duS2V5cyhub2RlKTtcblx0XHRcdFx0Y29uc3QgeyBoYXNoIH0gPSB0aGlzO1xuXG5cdFx0XHRcdHRoaXMuaGFzaGVzID0gaXNBcnJheSA/IFtdIDoge307XG5cblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdFx0XHRcdGlmIChrZXkgPT09IE5vZGUuTWV0YSB8fCAoaXNBcnJheSAmJiBrZXkgPT09ICdsZW5ndGgnKSkge1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKG5vZGVba2V5XSAmJiB0eXBlb2Ygbm9kZVtrZXldID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRcdFx0aWYgKCFub2RlW2tleV0/LltOb2RlLk1ldGFdKSB7XG5cdFx0XHRcdFx0XHRcdG5vZGVba2V5XSA9IG5ldyBub2RlW05vZGUuTWV0YV0uY2xzKG5vZGVba2V5XSwgbm9kZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLmhhc2hlc1trZXldID0gbm9kZVtrZXldW05vZGUuTWV0YV0uaGFzaDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5oYXNoZXNba2V5XSA9IGhhc2hWYWx1ZShub2RlW2tleV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuaGFzaCA9IGhhc2hWYWx1ZSh0aGlzLmhhc2hlcyk7XG5cblx0XHRcdFx0aWYgKGhhc2ggIT09IHRoaXMuaGFzaCkge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgcGFyZW50IG9mIHRoaXMucGFyZW50cykge1xuXHRcdFx0XHRcdFx0cGFyZW50W05vZGUuTWV0YV0ucmVoYXNoKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFVucGF1c2VzIG5vdGlmaWNhdGlvbnMgYW5kIHNlbmRzIG91dCBhbnkgcGVuZGluZyBub3RpZmljYXRpb25zLlxuXHRcdFx0ICovXG5cdFx0XHRyZXN1bWUoKSB7XG5cdFx0XHRcdHRoaXMucGF1c2VkID0gTWF0aC5tYXgoMCwgdGhpcy5wYXVzZWQgLSAxKTtcblx0XHRcdFx0aWYgKHRoaXMucGF1c2VkID09PSAwICYmIHRoaXMucGVuZGluZyA+IDApIHtcblx0XHRcdFx0XHR0aGlzLnBlbmRpbmcgPSAwO1xuXHRcdFx0XHRcdHRoaXMubm90aWZ5KG5vZGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFJlbW92ZXMgYSBsaXN0ZW5lci5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbbGlzdGVuZXJdIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBzb21ldGhpbmcgY2hhbmdlcy5cblx0XHRcdCAqL1xuXHRcdFx0dW53YXRjaChsaXN0ZW5lcikge1xuXHRcdFx0XHRpZiAobGlzdGVuZXIgJiYgdHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbicpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCF0aGlzLmxpc3RlbmVycykge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChsaXN0ZW5lcikge1xuXHRcdFx0XHRcdHRoaXMubGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lcik7XG5cdFx0XHRcdFx0aWYgKHRoaXMucHJldmlvdXMpIHtcblx0XHRcdFx0XHRcdHRoaXMucHJldmlvdXMuZGVsZXRlKGxpc3RlbmVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gcmVtb3ZlIGFsbCBsaXN0ZW5lcnNcblx0XHRcdFx0XHRmb3IgKGNvbnN0IFsgbGlzdGVuZXIgXSBvZiB0aGlzLmxpc3RlbmVycykge1xuXHRcdFx0XHRcdFx0dGhpcy5saXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKTtcblx0XHRcdFx0XHRcdGlmICh0aGlzLnByZXZpb3VzKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMucHJldmlvdXMuZGVsZXRlKGxpc3RlbmVyKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIXRoaXMubGlzdGVuZXJzLnNpemUpIHtcblx0XHRcdFx0XHR0aGlzLmxpc3RlbmVycyA9IG51bGw7XG5cdFx0XHRcdFx0dGhpcy5wcmV2aW91cyA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogQWRkcyBhIGxpc3RlbmVyIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBzcGVjaWZpZWQgb2JqZWN0IG9yIGFueSBvZiBpdHNcblx0XHRcdCAqIHByb3BlcnRpZXMvZWxlbWVudHMgYXJlIGNoYW5nZWQuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHBhcmFtIHtTdHJpbmd8QXJyYXkuPFN0cmluZz59IFtmaWx0ZXJdIC0gQSBwcm9wZXJ0eSBuYW1lIG9yIGFycmF5IG9mIG5lc3RlZFxuXHRcdFx0ICogcHJvcGVydGllcyB0byB3YXRjaC5cblx0XHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBzb21ldGhpbmcgY2hhbmdlcy5cblx0XHRcdCAqL1xuXHRcdFx0d2F0Y2goZmlsdGVyLCBsaXN0ZW5lcikge1xuXHRcdFx0XHRpZiAodHlwZW9mIGZpbHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdGxpc3RlbmVyID0gZmlsdGVyO1xuXHRcdFx0XHRcdGZpbHRlciA9IG51bGw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZmlsdGVyKSB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0XHRmaWx0ZXIgPSBbIGZpbHRlciBdO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoZmlsdGVyKSkge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgZmlsdGVyIHRvIGJlIGEgc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbicpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCF0aGlzLmxpc3RlbmVycykge1xuXHRcdFx0XHRcdHRoaXMubGlzdGVuZXJzID0gbmV3IE1hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMubGlzdGVuZXJzLnNldChsaXN0ZW5lciwgZmlsdGVyKTtcblxuXHRcdFx0XHRpZiAoZmlsdGVyKSB7XG5cdFx0XHRcdFx0Y29uc3QgeyBmb3VuZCwgaGFzaCB9ID0gZmlsdGVyT2JqZWN0KG5vZGUsIGZpbHRlcik7XG5cdFx0XHRcdFx0aWYgKGZvdW5kKSB7XG5cdFx0XHRcdFx0XHRpZiAoIXRoaXMucHJldmlvdXMpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5wcmV2aW91cyA9IG5ldyBXZWFrTWFwKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0aGlzLnByZXZpb3VzLnNldChsaXN0ZW5lciwgaGFzaCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHZhbHVlKTtcblxuXHRcdGNvbnN0IG5vZGUgPSBuZXcgUHJveHkoaXNBcnJheSA/IFtdIDoge30sIHtcblx0XHRcdGRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcCkge1xuXHRcdFx0XHRsZXQgcmVzdWx0ID0gdHJ1ZTtcblxuXHRcdFx0XHRpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwgcHJvcCkpIHtcblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdFx0XHRcdFx0dGFyZ2V0W3Byb3BdPy5bTm9kZS5NZXRhXT8ucGFyZW50cy5kZWxldGUobm9kZSk7XG5cdFx0XHRcdFx0cmVzdWx0ID0gZGVsZXRlIHRhcmdldFtwcm9wXTtcblxuXHRcdFx0XHRcdGRlbGV0ZSBpbnRlcm5hbC5oYXNoZXNbcHJvcF07XG5cdFx0XHRcdFx0aW50ZXJuYWwuaGFzaCA9IGhhc2hWYWx1ZShpbnRlcm5hbC5oYXNoZXMpO1xuXG5cdFx0XHRcdFx0aWYgKHJlc3VsdCkge1xuXHRcdFx0XHRcdFx0aW50ZXJuYWwubm90aWZ5KG5vZGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9LFxuXG5cdFx0XHRnZXQodGFyZ2V0LCBwcm9wKSB7XG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KHRhcmdldCkpIHtcblx0XHRcdFx0XHRjb25zdCBhZGRpdGl2ZSA9IHByb3AgPT09ICdwdXNoJyB8fCBwcm9wID09PSAndW5zaGlmdCc7XG5cblx0XHRcdFx0XHRpZiAoYWRkaXRpdmUgfHwgcHJvcCA9PT0gJ3BvcCcgfHwgcHJvcCA9PT0gJ3NoaWZ0Jykge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG5cdFx0XHRcdFx0XHRcdGludGVybmFsLnBhdXNlKCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IEFycmF5LnByb3RvdHlwZVtwcm9wXS5hcHBseSh0YXJnZXQsIGFyZ3MpO1xuXG5cdFx0XHRcdFx0XHRcdGludGVybmFsLnJlaGFzaCgpO1xuXHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5yZXN1bWUoKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIWFkZGl0aXZlIHx8IGFyZ3MubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0aW50ZXJuYWwubm90aWZ5KG5vZGUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHByb3AgPT09ICdzcGxpY2UnKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24gKHN0YXJ0LCBkZWxldGVDb3VudCwgLi4uaXRlbXMpIHtcblx0XHRcdFx0XHRcdFx0aW50ZXJuYWwucGF1c2UoKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoc3RhcnQgIT09IHVuZGVmaW5lZCAmJiBkZWxldGVDb3VudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlQ291bnQgPSB0aGlzLmxlbmd0aCAtIHN0YXJ0O1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Y29uc3QgeyBoYXNoIH0gPSBpbnRlcm5hbDtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYXJyID0gQXJyYXkucHJvdG90eXBlLnNwbGljZS5jYWxsKHRhcmdldCwgc3RhcnQsIGRlbGV0ZUNvdW50LCAuLi5pdGVtcyk7XG5cdFx0XHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBhcnIpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdFx0XHRcdFx0XHRcdFx0aXRlbT8uW05vZGUuTWV0YV0/LnBhcmVudHMuZGVsZXRlKG5vZGUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aW50ZXJuYWwucmVoYXNoKCk7XG5cdFx0XHRcdFx0XHRcdGludGVybmFsLnJlc3VtZSgpO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChpbnRlcm5hbC5oYXNoICE9PSBoYXNoKSB7XG5cdFx0XHRcdFx0XHRcdFx0aW50ZXJuYWwubm90aWZ5KG5vZGUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFycjtcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRhcmdldFtwcm9wXTtcblx0XHRcdH0sXG5cblx0XHRcdHNldCh0YXJnZXQsIHByb3AsIHZhbHVlKSB7XG5cdFx0XHRcdGlmICh0YXJnZXQgPT09IHZhbHVlKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc2V0IG9iamVjdCBwcm9wZXJ0eSB0byBpdHNlbGYnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCBoYXNoID0gbnVsbDtcblx0XHRcdFx0Y29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wKTtcblxuXHRcdFx0XHRpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgJiYgdmFsdWUgIT09IHByb2Nlc3MuZW52ICYmIHZhbHVlICE9PSBKU09OICYmIHZhbHVlICE9PSBNYXRoKSB7XG5cdFx0XHRcdFx0aWYgKHZhbHVlW05vZGUuTWV0YV0pIHtcblx0XHRcdFx0XHRcdHZhbHVlW05vZGUuTWV0YV0ucGFyZW50cy5hZGQobm9kZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHZhbHVlID0gbmV3IG5vZGVbTm9kZS5NZXRhXS5jbHModmFsdWUsIG5vZGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQoeyBoYXNoIH0gPSB2YWx1ZVtOb2RlLk1ldGFdKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRoYXNoID0gaGFzaFZhbHVlKHZhbHVlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCBjaGFuZ2VkID0gdHJ1ZTtcblxuXHRcdFx0XHRpZiAoZGVzYykge1xuXHRcdFx0XHRcdGlmIChpbnRlcm5hbC5oYXNoZXNbcHJvcF0gPT09IGhhc2gpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGludGVybmFsLnBhcmVudHMuZGVsZXRlKG5vZGUpO1xuXG5cdFx0XHRcdFx0Ly8gaWYgdGhlIGRlc3RpbmF0aW9uIHByb3BlcnR5IGhhcyBhIHNldHRlciwgdGhlbiB3ZSBjYW4ndCBhc3N1bWUgd2UgbmVlZCB0b1xuXHRcdFx0XHRcdC8vIGZpcmUgYSBkZWxldGVcblx0XHRcdFx0XHRpZiAodHlwZW9mIGRlc2Muc2V0ICE9PSAnZnVuY3Rpb24nICYmICghQXJyYXkuaXNBcnJheSh0YXJnZXQpIHx8IHByb3AgIT09ICdsZW5ndGgnKSkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIHRhcmdldFtwcm9wXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0YXJnZXRbcHJvcF0gPSB2YWx1ZTtcblxuXHRcdFx0XHRpbnRlcm5hbC5oYXNoZXNbcHJvcF0gPSBoYXNoO1xuXHRcdFx0XHRpbnRlcm5hbC5oYXNoID0gaGFzaFZhbHVlKGludGVybmFsLmhhc2hlcyk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnQgb2YgaW50ZXJuYWwucGFyZW50cykge1xuXHRcdFx0XHRcdHBhcmVudFtOb2RlLk1ldGFdLnJlaGFzaCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGNoYW5nZWQpIHtcblx0XHRcdFx0XHRpbnRlcm5hbC5ub3RpZnkobm9kZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShub2RlLCBOb2RlLk1ldGEsIHsgdmFsdWU6IGludGVybmFsIH0pO1xuXG5cdFx0aWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGludGVybmFsLmhhc2hlcyA9IGlzQXJyYXkgPyBbXSA6IHt9O1xuXHRcdFx0aW50ZXJuYWwuaGFzaCA9IGhhc2hWYWx1ZShpbnRlcm5hbC5oYXNoZXMpO1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgb2YgUmVmbGVjdC5vd25LZXlzKHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoa2V5ID09PSBOb2RlLk1ldGEgfHwgKGlzQXJyYXkgJiYga2V5ID09PSAnbGVuZ3RoJykpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRub2RlW2tleV0gPSB2YWx1ZVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChwYXJlbnQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKCFwYXJlbnQ/LltOb2RlLk1ldGFdKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHBhcmVudCB0byBiZSBhIE5vZGUnKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHZhbHVlID09PSBwYXJlbnQgfHwgdmFsdWUgPT09IHBhcmVudFtOb2RlLk1ldGFdLnZhbHVlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignUGFyZW50IG11c3QgYmUgbm90IGJlIHRoZSBzYW1lIGFzIHRoZSBub2RlJyk7XG5cdFx0XHR9XG5cblx0XHRcdGludGVybmFsLnBhcmVudHMuYWRkKHBhcmVudCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5vZGU7XG5cdH1cblxuXHQvKipcblx0ICogUmVjdXJzaXZlbHkgbWVyZ2UgdGhlIHZhbHVlIGludG8gdGhpcyBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIHBhdXNlLlxuXHQgKiBAcGFyYW0ge09iamVjdH0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gbWVyZ2UuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRzdGF0aWMgbWVyZ2Uobm9kZSwgdmFsdWUpIHtcblx0XHRpZiAoIW5vZGU/LltOb2RlLk1ldGFdKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBtZXJnZSBkZXN0aW5hdGlvbiB0byBiZSBhIE5vZGUgaW5zdGFuY2UnKTtcblx0XHR9XG5cblx0XHRpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIG1lcmdlIHNvdXJjZSB0byBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cblx0XHRub2RlW05vZGUuTWV0YV0ucGF1c2UoKTtcblxuXHRcdChmdW5jdGlvbiBtaXgoc3JjLCBkZXN0KSB7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMoc3JjKSkge1xuXHRcdFx0XHRpZiAoa2V5ID09PSBOb2RlLk1ldGEpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHNyY1ZhbHVlID0gc3JjW2tleV07XG5cblx0XHRcdFx0aWYgKHNyY1ZhbHVlICE9PSBudWxsICYmIHR5cGVvZiBzcmNWYWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoc3JjVmFsdWUpKSB7XG5cdFx0XHRcdFx0aWYgKCFkZXN0W2tleV0/LltOb2RlLk1ldGFdKSB7XG5cdFx0XHRcdFx0XHRkZXN0W2tleV0gPSB7fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bWl4KHNyY1ZhbHVlLCBkZXN0W2tleV0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGVzdFtrZXldKSAmJiBBcnJheS5pc0FycmF5KHNyY1ZhbHVlKSkge1xuXHRcdFx0XHRcdC8vIG92ZXJ3cml0ZSBkZXN0aW5hdGlvbiB3aXRoIG5ldyB2YWx1ZXNcblx0XHRcdFx0XHRkZXN0W2tleV0uc3BsaWNlKDAsIGRlc3Rba2V5XS5sZW5ndGgsIC4uLnNyY1ZhbHVlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkZXN0W2tleV0gPSBzcmNWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0odmFsdWUsIG5vZGUpKTtcblxuXHRcdG5vZGVbTm9kZS5NZXRhXS5yZXN1bWUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXVzZXMgYWxsIGNoYW5nZSBub3RpZmljYXRpb25zIHVudGlsIHJlc3VtZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIHBhdXNlLlxuXHQgKiBAcmV0dXJucyB7Qm9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgaXQgd2FzIGFscmVhZHkgcGF1c2VkLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0c3RhdGljIHBhdXNlKG5vZGUpIHtcblx0XHRyZXR1cm4gbm9kZVtOb2RlLk1ldGFdLnBhdXNlKCk7XG5cdH1cblxuXHQvKipcblx0ICogVW5wYXVzZXMgbm90aWZpY2F0aW9ucyBhbmQgc2VuZHMgb3V0IGFueSBwZW5kaW5nIG5vdGlmaWNhdGlvbnMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIHJlc3VtZS5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHN0YXRpYyByZXN1bWUobm9kZSkge1xuXHRcdG5vZGVbTm9kZS5NZXRhXS5yZXN1bWUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGEgbGlzdGVuZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIHVud2F0Y2guXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtsaXN0ZW5lcl0gLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHNvbWV0aGluZyBjaGFuZ2VzLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0c3RhdGljIHVud2F0Y2gobm9kZSwgbGlzdGVuZXIpIHtcblx0XHRub2RlW05vZGUuTWV0YV0udW53YXRjaChsaXN0ZW5lcik7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIGxpc3RlbmVyIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBzcGVjaWZpZWQgb2JqZWN0IG9yIGFueSBvZiBpdHMgcHJvcGVydGllcy9lbGVtZW50cyBhcmVcblx0ICogY2hhbmdlZC5cblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIG5vZGUgdG8gd2F0Y2guXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEFycmF5LjxTdHJpbmc+fSBbZmlsdGVyXSAtIEEgcHJvcGVydHkgbmFtZSBvciBhcnJheSBvZiBuZXN0ZWQgcHJvcGVydGllcyB0b1xuXHQgKiB3YXRjaC5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHNvbWV0aGluZyBjaGFuZ2VzLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0c3RhdGljIHdhdGNoKG5vZGUsIGZpbHRlciwgbGlzdGVuZXIpIHtcblx0XHRub2RlW05vZGUuTWV0YV0ud2F0Y2goZmlsdGVyLCBsaXN0ZW5lcik7XG5cdH1cbn1cblxuLyoqXG4gKiBGaWx0ZXJzIHRoZSBzcGVjaWZpZWQgbm9kZS5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgbm9kZSB0byBmaWx0ZXIuXG4gKiBAcGFyYW0ge0FycmF5LjxTdHJpbmc+fSBmaWx0ZXIgLSBUaGUgZmlsdGVyIHRvIGFwcGx5IHRvIHRoZSBub2RlLlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gZmlsdGVyT2JqZWN0KG5vZGUsIGZpbHRlcikge1xuXHRsZXQgZm91bmQgPSB0cnVlO1xuXHRsZXQgaGFzaCA9IG51bGw7XG5cdGxldCB2YWx1ZSA9IG5vZGU7XG5cblx0Ly8gZmluZCB0aGUgdmFsdWUgd2UncmUgaW50ZXJlc3RlZCBpblxuXHRmb3IgKGxldCBpID0gMCwgbGVuID0gZmlsdGVyLmxlbmd0aDsgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBpIDwgbGVuOyBpKyspIHtcblx0XHRjb25zdCBrZXkgPSBmaWx0ZXJbaV07XG5cdFx0aWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpIHtcblx0XHRcdGZvdW5kID0gZmFsc2U7XG5cdFx0XHR2YWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRoYXNoID0gdmFsdWVbTm9kZS5NZXRhXS5oYXNoZXNba2V5XTtcblx0XHRpZiAoaGFzaCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRoYXNoID0gbnVsbDtcblx0XHR9XG5cdFx0dmFsdWUgPSB2YWx1ZVtrZXldO1xuXHR9XG5cblx0cmV0dXJuIHsgZm91bmQsIGhhc2gsIHZhbHVlIH07XG59XG4iXSwiZmlsZSI6Im5vZGUuanMifQ==
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGUuanMiXSwibmFtZXMiOlsiTm9kZSIsImNvbnN0cnVjdG9yIiwidmFsdWUiLCJwYXJlbnQiLCJjbHMiLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsImludGVybmFsIiwiaGFzaCIsImhhc2hlcyIsImxpc3RlbmVycyIsInBhcmVudHMiLCJTZXQiLCJwcmV2aW91cyIsInBhdXNlZCIsInBlbmRpbmciLCJzY2hlbWEiLCJub3RpZnkiLCJ0YXJnZXQiLCJsaXN0ZW5lciIsImZpbHRlciIsImZvdW5kIiwiZmlsdGVyT2JqZWN0Iiwibm9kZSIsImhhc1ByZXYiLCJoYXMiLCJjaGFuZ2VkIiwiZ2V0IiwiV2Vha01hcCIsInNldCIsIk1ldGEiLCJwYXVzZSIsInJlaGFzaCIsImlzQXJyYXkiLCJBcnJheSIsImtleXMiLCJSZWZsZWN0Iiwib3duS2V5cyIsImtleSIsInJlc3VtZSIsIk1hdGgiLCJtYXgiLCJ1bndhdGNoIiwiVHlwZUVycm9yIiwiZGVsZXRlIiwic2l6ZSIsIndhdGNoIiwiTWFwIiwiUHJveHkiLCJkZWxldGVQcm9wZXJ0eSIsInByb3AiLCJyZXN1bHQiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhZGRpdGl2ZSIsImFyZ3MiLCJhcHBseSIsImxlbmd0aCIsInN0YXJ0IiwiZGVsZXRlQ291bnQiLCJpdGVtcyIsInVuZGVmaW5lZCIsImFyciIsInNwbGljZSIsIml0ZW0iLCJFcnJvciIsImRlc2MiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJEYXRlIiwicHJvY2VzcyIsImVudiIsIkpTT04iLCJhZGQiLCJvblNldCIsImRlZmluZVByb3BlcnR5IiwibWVyZ2UiLCJtaXgiLCJzcmMiLCJkZXN0Iiwic3JjVmFsdWUiLCJTeW1ib2wiLCJpIiwibGVuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7Ozs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNlLE1BQU1BLElBQU4sQ0FBVztBQUN6QjtBQUNEO0FBQ0E7QUFDQTs7QUFHQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNDQyxFQUFBQSxXQUFXLENBQUNDLEtBQUQsRUFBUUMsTUFBUixFQUFnQjtBQUMxQixVQUFNQyxHQUFHLEdBQUdDLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQixJQUF0QixFQUE0QkwsV0FBeEM7QUFDQSxVQUFNTSxRQUFRLEdBQUc7QUFDaEJILE1BQUFBLEdBRGdCO0FBRWhCSSxNQUFBQSxJQUFJLEVBQU8sSUFGSztBQUdoQkMsTUFBQUEsTUFBTSxFQUFLLElBSEs7QUFJaEJDLE1BQUFBLFNBQVMsRUFBRSxJQUpLO0FBS2hCQyxNQUFBQSxPQUFPLEVBQUksSUFBSUMsR0FBSixFQUxLO0FBTWhCQyxNQUFBQSxRQUFRLEVBQUcsSUFOSztBQU9oQkMsTUFBQUEsTUFBTSxFQUFLLENBUEs7QUFRaEJDLE1BQUFBLE9BQU8sRUFBSSxDQVJLO0FBU2hCQyxNQUFBQSxNQUFNLEVBQUssSUFUSzs7QUFXaEI7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNHQyxNQUFBQSxNQUFNLENBQUNDLE1BQUQsRUFBUztBQUNkO0FBQ0EsWUFBSSxLQUFLSixNQUFULEVBQWlCO0FBQ2hCLGVBQUtDLE9BQUw7QUFDQTtBQUNBLFNBTGEsQ0FPZDs7O0FBQ0EsWUFBSSxLQUFLTCxTQUFULEVBQW9CO0FBQ25CLGVBQUssTUFBTSxDQUFFUyxRQUFGLEVBQVlDLE1BQVosQ0FBWCxJQUFtQyxLQUFLVixTQUF4QyxFQUFtRDtBQUNsRCxnQkFBSVUsTUFBSixFQUFZO0FBQUE7O0FBQ1gsb0JBQU07QUFBRUMsZ0JBQUFBLEtBQUY7QUFBU2IsZ0JBQUFBLElBQVQ7QUFBZU4sZ0JBQUFBO0FBQWYsa0JBQXlCb0IsWUFBWSxDQUFDQyxJQUFELEVBQU9ILE1BQVAsQ0FBM0M7QUFDQSxvQkFBTUksT0FBTyxxQkFBRyxLQUFLWCxRQUFSLG1EQUFHLGVBQWVZLEdBQWYsQ0FBbUJOLFFBQW5CLENBQWhCO0FBQ0Esb0JBQU1PLE9BQU8sR0FBSUwsS0FBSyxJQUFJLENBQUNHLE9BQVgsSUFBd0JBLE9BQU8sSUFBSWhCLElBQUksS0FBSyxLQUFLSyxRQUFMLENBQWNjLEdBQWQsQ0FBa0JSLFFBQWxCLENBQTVEOztBQUVBLGtCQUFJLENBQUMsS0FBS04sUUFBVixFQUFvQjtBQUNuQixxQkFBS0EsUUFBTCxHQUFnQixJQUFJZSxPQUFKLEVBQWhCO0FBQ0E7O0FBQ0QsbUJBQUtmLFFBQUwsQ0FBY2dCLEdBQWQsQ0FBa0JWLFFBQWxCLEVBQTRCWCxJQUE1Qjs7QUFFQSxrQkFBSWtCLE9BQUosRUFBYTtBQUNaUCxnQkFBQUEsUUFBUSxDQUFDakIsS0FBRCxDQUFSO0FBQ0E7QUFDRCxhQWJELE1BYU87QUFDTmlCLGNBQUFBLFFBQVEsQ0FBQ0QsTUFBRCxDQUFSO0FBQ0E7QUFDRDtBQUNELFNBM0JhLENBNkJkOzs7QUFDQSxhQUFLLE1BQU1mLE1BQVgsSUFBcUIsS0FBS1EsT0FBMUIsRUFBbUM7QUFDbENSLFVBQUFBLE1BQU0sQ0FBQ0gsSUFBSSxDQUFDOEIsSUFBTixDQUFOLENBQWtCYixNQUFsQixDQUF5QkMsTUFBekI7QUFDQTtBQUNELE9BakRlOztBQW1EaEI7QUFDSDtBQUNBO0FBQ0E7QUFDR2EsTUFBQUEsS0FBSyxHQUFHO0FBQ1AsYUFBS2pCLE1BQUw7QUFDQSxPQXpEZTs7QUEyRGhCO0FBQ0g7QUFDQTtBQUNBO0FBQ0drQixNQUFBQSxNQUFNLEdBQUc7QUFDUixjQUFNQyxPQUFPLEdBQUdDLEtBQUssQ0FBQ0QsT0FBTixDQUFjVixJQUFkLENBQWhCO0FBQ0EsY0FBTVksSUFBSSxHQUFHQyxPQUFPLENBQUNDLE9BQVIsQ0FBZ0JkLElBQWhCLENBQWI7QUFDQSxjQUFNO0FBQUVmLFVBQUFBO0FBQUYsWUFBVyxJQUFqQjtBQUVBLGFBQUtDLE1BQUwsR0FBY3dCLE9BQU8sR0FBRyxFQUFILEdBQVEsRUFBN0I7O0FBRUEsYUFBSyxNQUFNSyxHQUFYLElBQWtCSCxJQUFsQixFQUF3QjtBQUN2QixjQUFJRyxHQUFHLEtBQUt0QyxJQUFJLENBQUM4QixJQUFiLElBQXNCRyxPQUFPLElBQUlLLEdBQUcsS0FBSyxRQUE3QyxFQUF3RDtBQUN2RDtBQUNBOztBQUVELGNBQUlmLElBQUksQ0FBQ2UsR0FBRCxDQUFKLElBQWEsT0FBT2YsSUFBSSxDQUFDZSxHQUFELENBQVgsS0FBcUIsUUFBdEMsRUFBZ0Q7QUFBQTs7QUFDL0MsZ0JBQUksZUFBQ2YsSUFBSSxDQUFDZSxHQUFELENBQUwsc0NBQUMsVUFBWXRDLElBQUksQ0FBQzhCLElBQWpCLENBQUQsQ0FBSixFQUE2QjtBQUM1QlAsY0FBQUEsSUFBSSxDQUFDZSxHQUFELENBQUosR0FBWSxJQUFJbEMsR0FBSixDQUFRbUIsSUFBSSxDQUFDZSxHQUFELENBQVosRUFBbUJmLElBQW5CLENBQVo7QUFDQTs7QUFDRCxpQkFBS2QsTUFBTCxDQUFZNkIsR0FBWixJQUFtQmYsSUFBSSxDQUFDZSxHQUFELENBQUosQ0FBVXRDLElBQUksQ0FBQzhCLElBQWYsRUFBcUJ0QixJQUF4QztBQUNBLFdBTEQsTUFLTztBQUNOLGlCQUFLQyxNQUFMLENBQVk2QixHQUFaLElBQW1CLHFCQUFVZixJQUFJLENBQUNlLEdBQUQsQ0FBZCxDQUFuQjtBQUNBO0FBQ0Q7O0FBRUQsYUFBSzlCLElBQUwsR0FBWSxxQkFBVSxLQUFLQyxNQUFmLENBQVo7O0FBRUEsWUFBSUQsSUFBSSxLQUFLLEtBQUtBLElBQWxCLEVBQXdCO0FBQ3ZCLGVBQUssTUFBTUwsTUFBWCxJQUFxQixLQUFLUSxPQUExQixFQUFtQztBQUNsQ1IsWUFBQUEsTUFBTSxDQUFDSCxJQUFJLENBQUM4QixJQUFOLENBQU4sQ0FBa0JFLE1BQWxCO0FBQ0E7QUFDRDtBQUNELE9BNUZlOztBQThGaEI7QUFDSDtBQUNBO0FBQ0dPLE1BQUFBLE1BQU0sR0FBRztBQUNSLGFBQUt6QixNQUFMLEdBQWMwQixJQUFJLENBQUNDLEdBQUwsQ0FBUyxDQUFULEVBQVksS0FBSzNCLE1BQUwsR0FBYyxDQUExQixDQUFkOztBQUNBLFlBQUksS0FBS0EsTUFBTCxLQUFnQixDQUFoQixJQUFxQixLQUFLQyxPQUFMLEdBQWUsQ0FBeEMsRUFBMkM7QUFDMUMsZUFBS0EsT0FBTCxHQUFlLENBQWY7QUFDQSxlQUFLRSxNQUFMLENBQVlNLElBQVo7QUFDQTtBQUNELE9BdkdlOztBQXlHaEI7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNHbUIsTUFBQUEsT0FBTyxDQUFDdkIsUUFBRCxFQUFXO0FBQ2pCLFlBQUlBLFFBQVEsSUFBSSxPQUFPQSxRQUFQLEtBQW9CLFVBQXBDLEVBQWdEO0FBQy9DLGdCQUFNLElBQUl3QixTQUFKLENBQWMsb0NBQWQsQ0FBTjtBQUNBOztBQUVELFlBQUksQ0FBQyxLQUFLakMsU0FBVixFQUFxQjtBQUNwQjtBQUNBOztBQUVELFlBQUlTLFFBQUosRUFBYztBQUNiLGVBQUtULFNBQUwsQ0FBZWtDLE1BQWYsQ0FBc0J6QixRQUF0Qjs7QUFDQSxjQUFJLEtBQUtOLFFBQVQsRUFBbUI7QUFDbEIsaUJBQUtBLFFBQUwsQ0FBYytCLE1BQWQsQ0FBcUJ6QixRQUFyQjtBQUNBO0FBQ0QsU0FMRCxNQUtPO0FBQ047QUFDQSxlQUFLLE1BQU0sQ0FBRUEsUUFBRixDQUFYLElBQTJCLEtBQUtULFNBQWhDLEVBQTJDO0FBQzFDLGlCQUFLQSxTQUFMLENBQWVrQyxNQUFmLENBQXNCekIsUUFBdEI7O0FBQ0EsZ0JBQUksS0FBS04sUUFBVCxFQUFtQjtBQUNsQixtQkFBS0EsUUFBTCxDQUFjK0IsTUFBZCxDQUFxQnpCLFFBQXJCO0FBQ0E7QUFDRDtBQUNEOztBQUVELFlBQUksQ0FBQyxLQUFLVCxTQUFMLENBQWVtQyxJQUFwQixFQUEwQjtBQUN6QixlQUFLbkMsU0FBTCxHQUFpQixJQUFqQjtBQUNBLGVBQUtHLFFBQUwsR0FBZ0IsSUFBaEI7QUFDQTtBQUNELE9BMUllOztBQTRJaEI7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNHaUMsTUFBQUEsS0FBSyxDQUFDMUIsTUFBRCxFQUFTRCxRQUFULEVBQW1CO0FBQ3ZCLFlBQUksT0FBT0MsTUFBUCxLQUFrQixVQUF0QixFQUFrQztBQUNqQ0QsVUFBQUEsUUFBUSxHQUFHQyxNQUFYO0FBQ0FBLFVBQUFBLE1BQU0sR0FBRyxJQUFUO0FBQ0E7O0FBRUQsWUFBSUEsTUFBSixFQUFZO0FBQ1gsY0FBSSxPQUFPQSxNQUFQLEtBQWtCLFFBQXRCLEVBQWdDO0FBQy9CQSxZQUFBQSxNQUFNLEdBQUcsQ0FBRUEsTUFBRixDQUFUO0FBQ0EsV0FGRCxNQUVPLElBQUksQ0FBQ2MsS0FBSyxDQUFDRCxPQUFOLENBQWNiLE1BQWQsQ0FBTCxFQUE0QjtBQUNsQyxrQkFBTSxJQUFJdUIsU0FBSixDQUFjLG9EQUFkLENBQU47QUFDQTtBQUNEOztBQUVELFlBQUksT0FBT3hCLFFBQVAsS0FBb0IsVUFBeEIsRUFBb0M7QUFDbkMsZ0JBQU0sSUFBSXdCLFNBQUosQ0FBYyxvQ0FBZCxDQUFOO0FBQ0E7O0FBRUQsWUFBSSxDQUFDLEtBQUtqQyxTQUFWLEVBQXFCO0FBQ3BCLGVBQUtBLFNBQUwsR0FBaUIsSUFBSXFDLEdBQUosRUFBakI7QUFDQTs7QUFDRCxhQUFLckMsU0FBTCxDQUFlbUIsR0FBZixDQUFtQlYsUUFBbkIsRUFBNkJDLE1BQTdCOztBQUVBLFlBQUlBLE1BQUosRUFBWTtBQUNYLGdCQUFNO0FBQUVDLFlBQUFBLEtBQUY7QUFBU2IsWUFBQUE7QUFBVCxjQUFrQmMsWUFBWSxDQUFDQyxJQUFELEVBQU9ILE1BQVAsQ0FBcEM7O0FBQ0EsY0FBSUMsS0FBSixFQUFXO0FBQ1YsZ0JBQUksQ0FBQyxLQUFLUixRQUFWLEVBQW9CO0FBQ25CLG1CQUFLQSxRQUFMLEdBQWdCLElBQUllLE9BQUosRUFBaEI7QUFDQTs7QUFDRCxpQkFBS2YsUUFBTCxDQUFjZ0IsR0FBZCxDQUFrQlYsUUFBbEIsRUFBNEJYLElBQTVCO0FBQ0E7QUFDRDtBQUNEOztBQXBMZSxLQUFqQjtBQXVMQSxVQUFNeUIsT0FBTyxHQUFHQyxLQUFLLENBQUNELE9BQU4sQ0FBYy9CLEtBQWQsQ0FBaEI7QUFFQSxVQUFNcUIsSUFBSSxHQUFHLElBQUl5QixLQUFKLENBQVVmLE9BQU8sR0FBRyxFQUFILEdBQVEsRUFBekIsRUFBNkI7QUFDekNnQixNQUFBQSxjQUFjLENBQUMvQixNQUFELEVBQVNnQyxJQUFULEVBQWU7QUFDNUIsWUFBSUMsTUFBTSxHQUFHLElBQWI7O0FBRUEsWUFBSTlDLE1BQU0sQ0FBQytDLFNBQVAsQ0FBaUJDLGNBQWpCLENBQWdDQyxJQUFoQyxDQUFxQ3BDLE1BQXJDLEVBQTZDZ0MsSUFBN0MsQ0FBSixFQUF3RDtBQUFBOztBQUN2RDtBQUNBLDBCQUFBaEMsTUFBTSxDQUFDZ0MsSUFBRCxDQUFOLHVGQUFlbEQsSUFBSSxDQUFDOEIsSUFBcEIsaUZBQTJCbkIsT0FBM0IsQ0FBbUNpQyxNQUFuQyxDQUEwQ3JCLElBQTFDO0FBQ0E0QixVQUFBQSxNQUFNLEdBQUcsT0FBT2pDLE1BQU0sQ0FBQ2dDLElBQUQsQ0FBdEI7QUFFQSxpQkFBTzNDLFFBQVEsQ0FBQ0UsTUFBVCxDQUFnQnlDLElBQWhCLENBQVA7QUFDQTNDLFVBQUFBLFFBQVEsQ0FBQ0MsSUFBVCxHQUFnQixxQkFBVUQsUUFBUSxDQUFDRSxNQUFuQixDQUFoQjs7QUFFQSxjQUFJMEMsTUFBSixFQUFZO0FBQ1g1QyxZQUFBQSxRQUFRLENBQUNVLE1BQVQsQ0FBZ0JNLElBQWhCO0FBQ0E7QUFDRDs7QUFFRCxlQUFPNEIsTUFBUDtBQUNBLE9BbEJ3Qzs7QUFvQnpDeEIsTUFBQUEsR0FBRyxDQUFDVCxNQUFELEVBQVNnQyxJQUFULEVBQWU7QUFDakIsWUFBSWhCLEtBQUssQ0FBQ0QsT0FBTixDQUFjZixNQUFkLENBQUosRUFBMkI7QUFDMUIsZ0JBQU1xQyxRQUFRLEdBQUdMLElBQUksS0FBSyxNQUFULElBQW1CQSxJQUFJLEtBQUssU0FBN0M7O0FBRUEsY0FBSUssUUFBUSxJQUFJTCxJQUFJLEtBQUssS0FBckIsSUFBOEJBLElBQUksS0FBSyxPQUEzQyxFQUFvRDtBQUNuRCxtQkFBTyxVQUFVLEdBQUdNLElBQWIsRUFBbUI7QUFDekJqRCxjQUFBQSxRQUFRLENBQUN3QixLQUFUO0FBQ0Esb0JBQU1vQixNQUFNLEdBQUdqQixLQUFLLENBQUNrQixTQUFOLENBQWdCRixJQUFoQixFQUFzQk8sS0FBdEIsQ0FBNEJ2QyxNQUE1QixFQUFvQ3NDLElBQXBDLENBQWY7QUFFQWpELGNBQUFBLFFBQVEsQ0FBQ3lCLE1BQVQ7QUFDQXpCLGNBQUFBLFFBQVEsQ0FBQ2dDLE1BQVQ7O0FBRUEsa0JBQUksQ0FBQ2dCLFFBQUQsSUFBYUMsSUFBSSxDQUFDRSxNQUF0QixFQUE4QjtBQUM3Qm5ELGdCQUFBQSxRQUFRLENBQUNVLE1BQVQsQ0FBZ0JNLElBQWhCO0FBQ0E7O0FBRUQscUJBQU80QixNQUFQO0FBQ0EsYUFaRDtBQWFBOztBQUVELGNBQUlELElBQUksS0FBSyxRQUFiLEVBQXVCO0FBQ3RCLG1CQUFPLFVBQVVTLEtBQVYsRUFBaUJDLFdBQWpCLEVBQThCLEdBQUdDLEtBQWpDLEVBQXdDO0FBQzlDdEQsY0FBQUEsUUFBUSxDQUFDd0IsS0FBVDs7QUFFQSxrQkFBSTRCLEtBQUssS0FBS0csU0FBVixJQUF1QkYsV0FBVyxLQUFLRSxTQUEzQyxFQUFzRDtBQUNyREYsZ0JBQUFBLFdBQVcsR0FBRyxLQUFLRixNQUFMLEdBQWNDLEtBQTVCO0FBQ0E7O0FBRUQsb0JBQU07QUFBRW5ELGdCQUFBQTtBQUFGLGtCQUFXRCxRQUFqQjtBQUNBLG9CQUFNd0QsR0FBRyxHQUFHN0IsS0FBSyxDQUFDa0IsU0FBTixDQUFnQlksTUFBaEIsQ0FBdUJWLElBQXZCLENBQTRCcEMsTUFBNUIsRUFBb0N5QyxLQUFwQyxFQUEyQ0MsV0FBM0MsRUFBd0QsR0FBR0MsS0FBM0QsQ0FBWjs7QUFDQSxtQkFBSyxNQUFNSSxJQUFYLElBQW1CRixHQUFuQixFQUF3QjtBQUFBOztBQUN2QjtBQUNBRSxnQkFBQUEsSUFBSSxTQUFKLElBQUFBLElBQUksV0FBSiwrQkFBQUEsSUFBSSxDQUFHakUsSUFBSSxDQUFDOEIsSUFBUixDQUFKLG9FQUFtQm5CLE9BQW5CLENBQTJCaUMsTUFBM0IsQ0FBa0NyQixJQUFsQztBQUNBOztBQUVEaEIsY0FBQUEsUUFBUSxDQUFDeUIsTUFBVDtBQUNBekIsY0FBQUEsUUFBUSxDQUFDZ0MsTUFBVDs7QUFFQSxrQkFBSWhDLFFBQVEsQ0FBQ0MsSUFBVCxLQUFrQkEsSUFBdEIsRUFBNEI7QUFDM0JELGdCQUFBQSxRQUFRLENBQUNVLE1BQVQsQ0FBZ0JNLElBQWhCO0FBQ0E7O0FBRUQscUJBQU93QyxHQUFQO0FBQ0EsYUF0QkQ7QUF1QkE7QUFDRDs7QUFFRCxlQUFPN0MsTUFBTSxDQUFDZ0MsSUFBRCxDQUFiO0FBQ0EsT0FwRXdDOztBQXNFekNyQixNQUFBQSxHQUFHLENBQUNYLE1BQUQsRUFBU2dDLElBQVQsRUFBZWhELEtBQWYsRUFBc0I7QUFDeEIsWUFBSWdCLE1BQU0sS0FBS2hCLEtBQWYsRUFBc0I7QUFDckIsZ0JBQU0sSUFBSWdFLEtBQUosQ0FBVSxzQ0FBVixDQUFOO0FBQ0E7O0FBRUQsWUFBSTFELElBQUksR0FBRyxJQUFYO0FBQ0EsY0FBTTJELElBQUksR0FBRzlELE1BQU0sQ0FBQytELHdCQUFQLENBQWdDbEQsTUFBaEMsRUFBd0NnQyxJQUF4QyxDQUFiOztBQUVBLFlBQUloRCxLQUFLLElBQUksT0FBT0EsS0FBUCxLQUFpQixRQUExQixJQUFzQyxFQUFFQSxLQUFLLFlBQVltRSxJQUFuQixDQUF0QyxJQUFrRW5FLEtBQUssS0FBS29FLE9BQU8sQ0FBQ0MsR0FBcEYsSUFBMkZyRSxLQUFLLEtBQUtzRSxJQUFyRyxJQUE2R3RFLEtBQUssS0FBS3NDLElBQTNILEVBQWlJO0FBQ2hJLGNBQUl0QyxLQUFLLENBQUNGLElBQUksQ0FBQzhCLElBQU4sQ0FBVCxFQUFzQjtBQUNyQjVCLFlBQUFBLEtBQUssQ0FBQ0YsSUFBSSxDQUFDOEIsSUFBTixDQUFMLENBQWlCbkIsT0FBakIsQ0FBeUI4RCxHQUF6QixDQUE2QmxELElBQTdCO0FBQ0EsV0FGRCxNQUVPO0FBQ05yQixZQUFBQSxLQUFLLEdBQUcsSUFBSUUsR0FBSixDQUFRRixLQUFSLEVBQWVxQixJQUFmLENBQVI7QUFDQTs7QUFDRCxXQUFDO0FBQUVmLFlBQUFBO0FBQUYsY0FBV04sS0FBSyxDQUFDRixJQUFJLENBQUM4QixJQUFOLENBQWpCO0FBQ0EsU0FQRCxNQU9PO0FBQ050QixVQUFBQSxJQUFJLEdBQUcscUJBQVVOLEtBQVYsQ0FBUDtBQUNBOztBQUVELFlBQUl3QixPQUFPLEdBQUcsSUFBZDs7QUFFQSxZQUFJeUMsSUFBSixFQUFVO0FBQ1QsY0FBSTVELFFBQVEsQ0FBQ0UsTUFBVCxDQUFnQnlDLElBQWhCLE1BQTBCMUMsSUFBOUIsRUFBb0M7QUFDbkMsbUJBQU8sSUFBUDtBQUNBOztBQUVERCxVQUFBQSxRQUFRLENBQUNJLE9BQVQsQ0FBaUJpQyxNQUFqQixDQUF3QnJCLElBQXhCLEVBTFMsQ0FPVDtBQUNBOztBQUNBLGNBQUksT0FBTzRDLElBQUksQ0FBQ3RDLEdBQVosS0FBb0IsVUFBcEIsS0FBbUMsQ0FBQ0ssS0FBSyxDQUFDRCxPQUFOLENBQWNmLE1BQWQsQ0FBRCxJQUEwQmdDLElBQUksS0FBSyxRQUF0RSxDQUFKLEVBQXFGO0FBQ3BGLG1CQUFPaEMsTUFBTSxDQUFDZ0MsSUFBRCxDQUFiO0FBQ0E7QUFDRDs7QUFFRGhDLFFBQUFBLE1BQU0sQ0FBQ2dDLElBQUQsQ0FBTixHQUFlaEQsS0FBZjs7QUFFQSxZQUFJLE9BQU9FLEdBQUcsQ0FBQ3NFLEtBQVgsS0FBcUIsVUFBekIsRUFBcUM7QUFDcEN0RSxVQUFBQSxHQUFHLENBQUNzRSxLQUFKLENBQVU7QUFBRW5FLFlBQUFBLFFBQUY7QUFBWWdCLFlBQUFBLElBQVo7QUFBa0IyQixZQUFBQSxJQUFsQjtBQUF3QmhDLFlBQUFBLE1BQXhCO0FBQWdDaEIsWUFBQUE7QUFBaEMsV0FBVjtBQUNBOztBQUVESyxRQUFBQSxRQUFRLENBQUNFLE1BQVQsQ0FBZ0J5QyxJQUFoQixJQUF3QjFDLElBQXhCO0FBQ0FELFFBQUFBLFFBQVEsQ0FBQ0MsSUFBVCxHQUFnQixxQkFBVUQsUUFBUSxDQUFDRSxNQUFuQixDQUFoQjs7QUFFQSxhQUFLLE1BQU1OLE1BQVgsSUFBcUJJLFFBQVEsQ0FBQ0ksT0FBOUIsRUFBdUM7QUFDdENSLFVBQUFBLE1BQU0sQ0FBQ0gsSUFBSSxDQUFDOEIsSUFBTixDQUFOLENBQWtCRSxNQUFsQjtBQUNBOztBQUVELFlBQUlOLE9BQUosRUFBYTtBQUNabkIsVUFBQUEsUUFBUSxDQUFDVSxNQUFULENBQWdCTSxJQUFoQjtBQUNBOztBQUVELGVBQU8sSUFBUDtBQUNBOztBQTNId0MsS0FBN0IsQ0FBYjtBQThIQWxCLElBQUFBLE1BQU0sQ0FBQ3NFLGNBQVAsQ0FBc0JwRCxJQUF0QixFQUE0QnZCLElBQUksQ0FBQzhCLElBQWpDLEVBQXVDO0FBQUU1QixNQUFBQSxLQUFLLEVBQUVLO0FBQVQsS0FBdkMsRUF6VDBCLENBMlQxQjs7QUFDQSxRQUFJTCxLQUFLLElBQUksT0FBT0EsS0FBUCxLQUFpQixRQUE5QixFQUF3QztBQUN2Q0ssTUFBQUEsUUFBUSxDQUFDRSxNQUFULEdBQWtCd0IsT0FBTyxHQUFHLEVBQUgsR0FBUSxFQUFqQztBQUNBMUIsTUFBQUEsUUFBUSxDQUFDQyxJQUFULEdBQWdCLHFCQUFVRCxRQUFRLENBQUNFLE1BQW5CLENBQWhCOztBQUNBLFdBQUssTUFBTTZCLEdBQVgsSUFBa0JGLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQm5DLEtBQWhCLENBQWxCLEVBQTBDO0FBQ3pDLFlBQUlvQyxHQUFHLEtBQUt0QyxJQUFJLENBQUM4QixJQUFiLElBQXNCRyxPQUFPLElBQUlLLEdBQUcsS0FBSyxRQUE3QyxFQUF3RDtBQUN2RDtBQUNBOztBQUNEZixRQUFBQSxJQUFJLENBQUNlLEdBQUQsQ0FBSixHQUFZcEMsS0FBSyxDQUFDb0MsR0FBRCxDQUFqQjtBQUNBO0FBQ0Q7O0FBRUQsUUFBSW5DLE1BQU0sS0FBSzJELFNBQWYsRUFBMEI7QUFDekIsVUFBSSxFQUFDM0QsTUFBRCxhQUFDQSxNQUFELGVBQUNBLE1BQU0sQ0FBR0gsSUFBSSxDQUFDOEIsSUFBUixDQUFQLENBQUosRUFBMEI7QUFDekIsY0FBTSxJQUFJYSxTQUFKLENBQWMsOEJBQWQsQ0FBTjtBQUNBOztBQUVELFVBQUl6QyxLQUFLLEtBQUtDLE1BQVYsSUFBb0JELEtBQUssS0FBS0MsTUFBTSxDQUFDSCxJQUFJLENBQUM4QixJQUFOLENBQU4sQ0FBa0I1QixLQUFwRCxFQUEyRDtBQUMxRCxjQUFNLElBQUlnRSxLQUFKLENBQVUsNENBQVYsQ0FBTjtBQUNBOztBQUVEM0QsTUFBQUEsUUFBUSxDQUFDSSxPQUFULENBQWlCOEQsR0FBakIsQ0FBcUJ0RSxNQUFyQjtBQUNBOztBQUVELFdBQU9vQixJQUFQO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0MsU0FBT3FELEtBQVAsQ0FBYXJELElBQWIsRUFBbUJyQixLQUFuQixFQUEwQjtBQUN6QixRQUFJLEVBQUNxQixJQUFELGFBQUNBLElBQUQsZUFBQ0EsSUFBSSxDQUFHdkIsSUFBSSxDQUFDOEIsSUFBUixDQUFMLENBQUosRUFBd0I7QUFDdkIsWUFBTSxJQUFJYSxTQUFKLENBQWMsa0RBQWQsQ0FBTjtBQUNBOztBQUVELFFBQUksQ0FBQ3pDLEtBQUQsSUFBVSxPQUFPQSxLQUFQLEtBQWlCLFFBQTNCLElBQXVDZ0MsS0FBSyxDQUFDRCxPQUFOLENBQWMvQixLQUFkLENBQTNDLEVBQWlFO0FBQ2hFLFlBQU0sSUFBSXlDLFNBQUosQ0FBYyx1Q0FBZCxDQUFOO0FBQ0E7O0FBRURwQixJQUFBQSxJQUFJLENBQUN2QixJQUFJLENBQUM4QixJQUFOLENBQUosQ0FBZ0JDLEtBQWhCOztBQUVDLGNBQVM4QyxHQUFULENBQWFDLEdBQWIsRUFBa0JDLElBQWxCLEVBQXdCO0FBQ3hCLFdBQUssTUFBTXpDLEdBQVgsSUFBa0JGLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQnlDLEdBQWhCLENBQWxCLEVBQXdDO0FBQ3ZDLFlBQUl4QyxHQUFHLEtBQUt0QyxJQUFJLENBQUM4QixJQUFqQixFQUF1QjtBQUN0QjtBQUNBOztBQUVELGNBQU1rRCxRQUFRLEdBQUdGLEdBQUcsQ0FBQ3hDLEdBQUQsQ0FBcEI7O0FBRUEsWUFBSTBDLFFBQVEsS0FBSyxJQUFiLElBQXFCLE9BQU9BLFFBQVAsS0FBb0IsUUFBekMsSUFBcUQsQ0FBQzlDLEtBQUssQ0FBQ0QsT0FBTixDQUFjK0MsUUFBZCxDQUExRCxFQUFtRjtBQUFBOztBQUNsRixjQUFJLGVBQUNELElBQUksQ0FBQ3pDLEdBQUQsQ0FBTCxzQ0FBQyxVQUFZdEMsSUFBSSxDQUFDOEIsSUFBakIsQ0FBRCxDQUFKLEVBQTZCO0FBQzVCaUQsWUFBQUEsSUFBSSxDQUFDekMsR0FBRCxDQUFKLEdBQVksRUFBWjtBQUNBOztBQUNEdUMsVUFBQUEsR0FBRyxDQUFDRyxRQUFELEVBQVdELElBQUksQ0FBQ3pDLEdBQUQsQ0FBZixDQUFIO0FBQ0EsU0FMRCxNQUtPLElBQUlKLEtBQUssQ0FBQ0QsT0FBTixDQUFjOEMsSUFBSSxDQUFDekMsR0FBRCxDQUFsQixLQUE0QkosS0FBSyxDQUFDRCxPQUFOLENBQWMrQyxRQUFkLENBQWhDLEVBQXlEO0FBQy9EO0FBQ0FELFVBQUFBLElBQUksQ0FBQ3pDLEdBQUQsQ0FBSixDQUFVMEIsTUFBVixDQUFpQixDQUFqQixFQUFvQmUsSUFBSSxDQUFDekMsR0FBRCxDQUFKLENBQVVvQixNQUE5QixFQUFzQyxHQUFHc0IsUUFBekM7QUFDQSxTQUhNLE1BR0E7QUFDTkQsVUFBQUEsSUFBSSxDQUFDekMsR0FBRCxDQUFKLEdBQVkwQyxRQUFaO0FBQ0E7QUFDRDtBQUNELEtBcEJBLEVBb0JDOUUsS0FwQkQsRUFvQlFxQixJQXBCUixDQUFEOztBQXNCQUEsSUFBQUEsSUFBSSxDQUFDdkIsSUFBSSxDQUFDOEIsSUFBTixDQUFKLENBQWdCUyxNQUFoQjtBQUNBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNDLFNBQU9SLEtBQVAsQ0FBYVIsSUFBYixFQUFtQjtBQUNsQixXQUFPQSxJQUFJLENBQUN2QixJQUFJLENBQUM4QixJQUFOLENBQUosQ0FBZ0JDLEtBQWhCLEVBQVA7QUFDQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ0MsU0FBT1EsTUFBUCxDQUFjaEIsSUFBZCxFQUFvQjtBQUNuQkEsSUFBQUEsSUFBSSxDQUFDdkIsSUFBSSxDQUFDOEIsSUFBTixDQUFKLENBQWdCUyxNQUFoQjtBQUNBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNDLFNBQU9HLE9BQVAsQ0FBZW5CLElBQWYsRUFBcUJKLFFBQXJCLEVBQStCO0FBQzlCSSxJQUFBQSxJQUFJLENBQUN2QixJQUFJLENBQUM4QixJQUFOLENBQUosQ0FBZ0JZLE9BQWhCLENBQXdCdkIsUUFBeEI7QUFDQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQyxTQUFPMkIsS0FBUCxDQUFhdkIsSUFBYixFQUFtQkgsTUFBbkIsRUFBMkJELFFBQTNCLEVBQXFDO0FBQ3BDSSxJQUFBQSxJQUFJLENBQUN2QixJQUFJLENBQUM4QixJQUFOLENBQUosQ0FBZ0JnQixLQUFoQixDQUFzQjFCLE1BQXRCLEVBQThCRCxRQUE5QjtBQUNBOztBQTNid0I7QUE4YjFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztnQkFwY3FCbkIsSSxVQUtOaUYsTUFBTSxDQUFDLE1BQUQsQzs7QUFnY3JCLFNBQVMzRCxZQUFULENBQXNCQyxJQUF0QixFQUE0QkgsTUFBNUIsRUFBb0M7QUFDbkMsTUFBSUMsS0FBSyxHQUFHLElBQVo7QUFDQSxNQUFJYixJQUFJLEdBQUcsSUFBWDtBQUNBLE1BQUlOLEtBQUssR0FBR3FCLElBQVosQ0FIbUMsQ0FLbkM7O0FBQ0EsT0FBSyxJQUFJMkQsQ0FBQyxHQUFHLENBQVIsRUFBV0MsR0FBRyxHQUFHL0QsTUFBTSxDQUFDc0MsTUFBN0IsRUFBcUN4RCxLQUFLLElBQUksT0FBT0EsS0FBUCxLQUFpQixRQUExQixJQUFzQ2dGLENBQUMsR0FBR0MsR0FBL0UsRUFBb0ZELENBQUMsRUFBckYsRUFBeUY7QUFDeEYsVUFBTTVDLEdBQUcsR0FBR2xCLE1BQU0sQ0FBQzhELENBQUQsQ0FBbEI7O0FBQ0EsUUFBSSxDQUFDN0UsTUFBTSxDQUFDK0MsU0FBUCxDQUFpQkMsY0FBakIsQ0FBZ0NDLElBQWhDLENBQXFDcEQsS0FBckMsRUFBNENvQyxHQUE1QyxDQUFMLEVBQXVEO0FBQ3REakIsTUFBQUEsS0FBSyxHQUFHLEtBQVI7QUFDQW5CLE1BQUFBLEtBQUssR0FBRzRELFNBQVI7QUFDQTtBQUNBOztBQUNEdEQsSUFBQUEsSUFBSSxHQUFHTixLQUFLLENBQUNGLElBQUksQ0FBQzhCLElBQU4sQ0FBTCxDQUFpQnJCLE1BQWpCLENBQXdCNkIsR0FBeEIsQ0FBUDs7QUFDQSxRQUFJOUIsSUFBSSxLQUFLc0QsU0FBYixFQUF3QjtBQUN2QnRELE1BQUFBLElBQUksR0FBRyxJQUFQO0FBQ0E7O0FBQ0ROLElBQUFBLEtBQUssR0FBR0EsS0FBSyxDQUFDb0MsR0FBRCxDQUFiO0FBQ0E7O0FBRUQsU0FBTztBQUFFakIsSUFBQUEsS0FBRjtBQUFTYixJQUFBQSxJQUFUO0FBQWVOLElBQUFBO0FBQWYsR0FBUDtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaGFzaFZhbHVlIH0gZnJvbSAnLi91dGlsJztcblxuLyoqXG4gKiBBIG5vZGUgaXMgdmFsdWUgaW4gYW4gb2JqZWN0LiBJdCB3cmFwcyBhIHRoZSB2YWx1ZSBpbiBhIHByb3h5IHNvIHRoYXQgd2UgY2FuIGxpc3RlbiBmb3Igd2hlbiB0aGVcbiAqIG5vZGUgaXMgY2hhbmdlZC4gV2UgY2FuIGFsc28gc3RvcmUgYXJiaXRyYXJ5IGRhdGEgaW4gdGhlIG5vZGUncyBtZXRhZGF0YS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTm9kZSB7XG5cdC8qKlxuXHQgKiBUaGUga2V5IGZvciB0aGUgaW50ZXJuYWwgbWV0YWRhdGEuXG5cdCAqIEB0eXBlIHtTeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgTWV0YSA9IFN5bWJvbCgnbWV0YScpO1xuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplcyB0aGUgbm9kZSBwcm94eSBhbmQgbWV0YWRhdGEuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWUgLSBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGlzIG5vZGUuXG5cdCAqIEBwYXJhbSB7Tm9kZX0gW3BhcmVudF0gLSBUaGUgbm9kZSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBub2RlLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0Y29uc3RydWN0b3IodmFsdWUsIHBhcmVudCkge1xuXHRcdGNvbnN0IGNscyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3Rvcjtcblx0XHRjb25zdCBpbnRlcm5hbCA9IHtcblx0XHRcdGNscyxcblx0XHRcdGhhc2g6ICAgICAgbnVsbCxcblx0XHRcdGhhc2hlczogICAgbnVsbCxcblx0XHRcdGxpc3RlbmVyczogbnVsbCxcblx0XHRcdHBhcmVudHM6ICAgbmV3IFNldCgpLFxuXHRcdFx0cHJldmlvdXM6ICBudWxsLFxuXHRcdFx0cGF1c2VkOiAgICAwLFxuXHRcdFx0cGVuZGluZzogICAwLFxuXHRcdFx0c2NoZW1hOiAgICBudWxsLFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIERpc3BhdGNoZXMgY2hhbmdlIG5vdGlmaWNhdGlvbnMgdG8gdGhlIGxpc3RlbmVycy5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0ge05vZGV9IHRhcmdldCAtIFRoZSBub2RlIHRoYXQgY2hhbmdlZC5cblx0XHRcdCAqL1xuXHRcdFx0bm90aWZ5KHRhcmdldCkge1xuXHRcdFx0XHQvLyBpZiB3ZSdyZSBwYXVzZWQsIGFkZCB0aGlzIG9iamVjdCB0byB0aGUgbGlzdCBvZiBvYmplY3RzIHRoYXQgbWF5IGhhdmUgY2hhbmdlZFxuXHRcdFx0XHRpZiAodGhpcy5wYXVzZWQpIHtcblx0XHRcdFx0XHR0aGlzLnBlbmRpbmcrKztcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBub3RpZnkgYWxsIG9mIHRoaXMgb2JqZWN0J3MgbGlzdGVuZXJzXG5cdFx0XHRcdGlmICh0aGlzLmxpc3RlbmVycykge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgWyBsaXN0ZW5lciwgZmlsdGVyIF0gb2YgdGhpcy5saXN0ZW5lcnMpIHtcblx0XHRcdFx0XHRcdGlmIChmaWx0ZXIpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgeyBmb3VuZCwgaGFzaCwgdmFsdWUgfSA9IGZpbHRlck9iamVjdChub2RlLCBmaWx0ZXIpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBoYXNQcmV2ID0gdGhpcy5wcmV2aW91cz8uaGFzKGxpc3RlbmVyKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgY2hhbmdlZCA9IChmb3VuZCAmJiAhaGFzUHJldikgfHwgKGhhc1ByZXYgJiYgaGFzaCAhPT0gdGhpcy5wcmV2aW91cy5nZXQobGlzdGVuZXIpKTtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIXRoaXMucHJldmlvdXMpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnByZXZpb3VzID0gbmV3IFdlYWtNYXAoKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR0aGlzLnByZXZpb3VzLnNldChsaXN0ZW5lciwgaGFzaCk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKGNoYW5nZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRsaXN0ZW5lcih2YWx1ZSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGxpc3RlbmVyKHRhcmdldCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbm90aWZ5IGFsbCBvZiB0aGlzIG9iamVjdCdzIHBhcmVudHNcblx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnQgb2YgdGhpcy5wYXJlbnRzKSB7XG5cdFx0XHRcdFx0cGFyZW50W05vZGUuTWV0YV0ubm90aWZ5KHRhcmdldCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogSW5jcmVtZW50cyB0aGUgcGF1c2UgY291bnRlciB1bnRpbCB0aGUgY291bnRlciByZXNldHMgdG8gemVybyBhbmQgcmVzdW1lc1xuXHRcdFx0ICogbm90aWZpY2F0aW9ucy5cblx0XHRcdCAqL1xuXHRcdFx0cGF1c2UoKSB7XG5cdFx0XHRcdHRoaXMucGF1c2VkKys7XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFJlY29tcHV0ZXMgdGhlIGhhc2ggbG9va3VwIGZvciBhbGwgcHJvcGVydGllcywgdGhlbiByZWNvbXB1dGVzIHRoaXMgb2JqZWN0J3MgaGFzaC5cblx0XHRcdCAqIElmIGFueSBwcm9wZXJ0aWVzIGFyZSBub3QgYWxyZWFkeSBOb2RlcywgdGhlbiBjcmVhdGUgdGhlbS5cblx0XHRcdCAqL1xuXHRcdFx0cmVoYXNoKCkge1xuXHRcdFx0XHRjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShub2RlKTtcblx0XHRcdFx0Y29uc3Qga2V5cyA9IFJlZmxlY3Qub3duS2V5cyhub2RlKTtcblx0XHRcdFx0Y29uc3QgeyBoYXNoIH0gPSB0aGlzO1xuXG5cdFx0XHRcdHRoaXMuaGFzaGVzID0gaXNBcnJheSA/IFtdIDoge307XG5cblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuXHRcdFx0XHRcdGlmIChrZXkgPT09IE5vZGUuTWV0YSB8fCAoaXNBcnJheSAmJiBrZXkgPT09ICdsZW5ndGgnKSkge1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKG5vZGVba2V5XSAmJiB0eXBlb2Ygbm9kZVtrZXldID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRcdFx0aWYgKCFub2RlW2tleV0/LltOb2RlLk1ldGFdKSB7XG5cdFx0XHRcdFx0XHRcdG5vZGVba2V5XSA9IG5ldyBjbHMobm9kZVtrZXldLCBub2RlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMuaGFzaGVzW2tleV0gPSBub2RlW2tleV1bTm9kZS5NZXRhXS5oYXNoO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLmhhc2hlc1trZXldID0gaGFzaFZhbHVlKG5vZGVba2V5XSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5oYXNoID0gaGFzaFZhbHVlKHRoaXMuaGFzaGVzKTtcblxuXHRcdFx0XHRpZiAoaGFzaCAhPT0gdGhpcy5oYXNoKSB7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBwYXJlbnQgb2YgdGhpcy5wYXJlbnRzKSB7XG5cdFx0XHRcdFx0XHRwYXJlbnRbTm9kZS5NZXRhXS5yZWhhc2goKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogVW5wYXVzZXMgbm90aWZpY2F0aW9ucyBhbmQgc2VuZHMgb3V0IGFueSBwZW5kaW5nIG5vdGlmaWNhdGlvbnMuXG5cdFx0XHQgKi9cblx0XHRcdHJlc3VtZSgpIHtcblx0XHRcdFx0dGhpcy5wYXVzZWQgPSBNYXRoLm1heCgwLCB0aGlzLnBhdXNlZCAtIDEpO1xuXHRcdFx0XHRpZiAodGhpcy5wYXVzZWQgPT09IDAgJiYgdGhpcy5wZW5kaW5nID4gMCkge1xuXHRcdFx0XHRcdHRoaXMucGVuZGluZyA9IDA7XG5cdFx0XHRcdFx0dGhpcy5ub3RpZnkobm9kZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogUmVtb3ZlcyBhIGxpc3RlbmVyLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtsaXN0ZW5lcl0gLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHNvbWV0aGluZyBjaGFuZ2VzLlxuXHRcdFx0ICovXG5cdFx0XHR1bndhdGNoKGxpc3RlbmVyKSB7XG5cdFx0XHRcdGlmIChsaXN0ZW5lciAmJiB0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIXRoaXMubGlzdGVuZXJzKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGxpc3RlbmVyKSB7XG5cdFx0XHRcdFx0dGhpcy5saXN0ZW5lcnMuZGVsZXRlKGxpc3RlbmVyKTtcblx0XHRcdFx0XHRpZiAodGhpcy5wcmV2aW91cykge1xuXHRcdFx0XHRcdFx0dGhpcy5wcmV2aW91cy5kZWxldGUobGlzdGVuZXIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyByZW1vdmUgYWxsIGxpc3RlbmVyc1xuXHRcdFx0XHRcdGZvciAoY29uc3QgWyBsaXN0ZW5lciBdIG9mIHRoaXMubGlzdGVuZXJzKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpO1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMucHJldmlvdXMpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5wcmV2aW91cy5kZWxldGUobGlzdGVuZXIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghdGhpcy5saXN0ZW5lcnMuc2l6ZSkge1xuXHRcdFx0XHRcdHRoaXMubGlzdGVuZXJzID0gbnVsbDtcblx0XHRcdFx0XHR0aGlzLnByZXZpb3VzID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBBZGRzIGEgbGlzdGVuZXIgdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHNwZWNpZmllZCBvYmplY3Qgb3IgYW55IG9mIGl0c1xuXHRcdFx0ICogcHJvcGVydGllcy9lbGVtZW50cyBhcmUgY2hhbmdlZC5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0ge1N0cmluZ3xBcnJheS48U3RyaW5nPn0gW2ZpbHRlcl0gLSBBIHByb3BlcnR5IG5hbWUgb3IgYXJyYXkgb2YgbmVzdGVkXG5cdFx0XHQgKiBwcm9wZXJ0aWVzIHRvIHdhdGNoLlxuXHRcdFx0ICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHNvbWV0aGluZyBjaGFuZ2VzLlxuXHRcdFx0ICovXG5cdFx0XHR3YXRjaChmaWx0ZXIsIGxpc3RlbmVyKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRcdFx0bGlzdGVuZXIgPSBmaWx0ZXI7XG5cdFx0XHRcdFx0ZmlsdGVyID0gbnVsbDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChmaWx0ZXIpIHtcblx0XHRcdFx0XHRpZiAodHlwZW9mIGZpbHRlciA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHRcdGZpbHRlciA9IFsgZmlsdGVyIF07XG5cdFx0XHRcdFx0fSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShmaWx0ZXIpKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBmaWx0ZXIgdG8gYmUgYSBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncycpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIXRoaXMubGlzdGVuZXJzKSB7XG5cdFx0XHRcdFx0dGhpcy5saXN0ZW5lcnMgPSBuZXcgTWFwKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5saXN0ZW5lcnMuc2V0KGxpc3RlbmVyLCBmaWx0ZXIpO1xuXG5cdFx0XHRcdGlmIChmaWx0ZXIpIHtcblx0XHRcdFx0XHRjb25zdCB7IGZvdW5kLCBoYXNoIH0gPSBmaWx0ZXJPYmplY3Qobm9kZSwgZmlsdGVyKTtcblx0XHRcdFx0XHRpZiAoZm91bmQpIHtcblx0XHRcdFx0XHRcdGlmICghdGhpcy5wcmV2aW91cykge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnByZXZpb3VzID0gbmV3IFdlYWtNYXAoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHRoaXMucHJldmlvdXMuc2V0KGxpc3RlbmVyLCBoYXNoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Y29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkodmFsdWUpO1xuXG5cdFx0Y29uc3Qgbm9kZSA9IG5ldyBQcm94eShpc0FycmF5ID8gW10gOiB7fSwge1xuXHRcdFx0ZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wKSB7XG5cdFx0XHRcdGxldCByZXN1bHQgPSB0cnVlO1xuXG5cdFx0XHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBwcm9wKSkge1xuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0XHRcdFx0XHR0YXJnZXRbcHJvcF0/LltOb2RlLk1ldGFdPy5wYXJlbnRzLmRlbGV0ZShub2RlKTtcblx0XHRcdFx0XHRyZXN1bHQgPSBkZWxldGUgdGFyZ2V0W3Byb3BdO1xuXG5cdFx0XHRcdFx0ZGVsZXRlIGludGVybmFsLmhhc2hlc1twcm9wXTtcblx0XHRcdFx0XHRpbnRlcm5hbC5oYXNoID0gaGFzaFZhbHVlKGludGVybmFsLmhhc2hlcyk7XG5cblx0XHRcdFx0XHRpZiAocmVzdWx0KSB7XG5cdFx0XHRcdFx0XHRpbnRlcm5hbC5ub3RpZnkobm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH0sXG5cblx0XHRcdGdldCh0YXJnZXQsIHByb3ApIHtcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSkge1xuXHRcdFx0XHRcdGNvbnN0IGFkZGl0aXZlID0gcHJvcCA9PT0gJ3B1c2gnIHx8IHByb3AgPT09ICd1bnNoaWZ0JztcblxuXHRcdFx0XHRcdGlmIChhZGRpdGl2ZSB8fCBwcm9wID09PSAncG9wJyB8fCBwcm9wID09PSAnc2hpZnQnKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcblx0XHRcdFx0XHRcdFx0aW50ZXJuYWwucGF1c2UoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gQXJyYXkucHJvdG90eXBlW3Byb3BdLmFwcGx5KHRhcmdldCwgYXJncyk7XG5cblx0XHRcdFx0XHRcdFx0aW50ZXJuYWwucmVoYXNoKCk7XG5cdFx0XHRcdFx0XHRcdGludGVybmFsLnJlc3VtZSgpO1xuXG5cdFx0XHRcdFx0XHRcdGlmICghYWRkaXRpdmUgfHwgYXJncy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5ub3RpZnkobm9kZSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAocHJvcCA9PT0gJ3NwbGljZScpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbiAoc3RhcnQsIGRlbGV0ZUNvdW50LCAuLi5pdGVtcykge1xuXHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5wYXVzZSgpO1xuXG5cdFx0XHRcdFx0XHRcdGlmIChzdGFydCAhPT0gdW5kZWZpbmVkICYmIGRlbGV0ZUNvdW50ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGVDb3VudCA9IHRoaXMubGVuZ3RoIC0gc3RhcnQ7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRjb25zdCB7IGhhc2ggfSA9IGludGVybmFsO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhcnIgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmNhbGwodGFyZ2V0LCBzdGFydCwgZGVsZXRlQ291bnQsIC4uLml0ZW1zKTtcblx0XHRcdFx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIGFycikge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0XHRcdFx0XHRcdFx0XHRpdGVtPy5bTm9kZS5NZXRhXT8ucGFyZW50cy5kZWxldGUobm9kZSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5yZWhhc2goKTtcblx0XHRcdFx0XHRcdFx0aW50ZXJuYWwucmVzdW1lKCk7XG5cblx0XHRcdFx0XHRcdFx0aWYgKGludGVybmFsLmhhc2ggIT09IGhhc2gpIHtcblx0XHRcdFx0XHRcdFx0XHRpbnRlcm5hbC5ub3RpZnkobm9kZSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYXJyO1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdGFyZ2V0W3Byb3BdO1xuXHRcdFx0fSxcblxuXHRcdFx0c2V0KHRhcmdldCwgcHJvcCwgdmFsdWUpIHtcblx0XHRcdFx0aWYgKHRhcmdldCA9PT0gdmFsdWUpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzZXQgb2JqZWN0IHByb3BlcnR5IHRvIGl0c2VsZicpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IGhhc2ggPSBudWxsO1xuXHRcdFx0XHRjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3ApO1xuXG5cdFx0XHRcdGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSAmJiB2YWx1ZSAhPT0gcHJvY2Vzcy5lbnYgJiYgdmFsdWUgIT09IEpTT04gJiYgdmFsdWUgIT09IE1hdGgpIHtcblx0XHRcdFx0XHRpZiAodmFsdWVbTm9kZS5NZXRhXSkge1xuXHRcdFx0XHRcdFx0dmFsdWVbTm9kZS5NZXRhXS5wYXJlbnRzLmFkZChub2RlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dmFsdWUgPSBuZXcgY2xzKHZhbHVlLCBub2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0KHsgaGFzaCB9ID0gdmFsdWVbTm9kZS5NZXRhXSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aGFzaCA9IGhhc2hWYWx1ZSh2YWx1ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZXQgY2hhbmdlZCA9IHRydWU7XG5cblx0XHRcdFx0aWYgKGRlc2MpIHtcblx0XHRcdFx0XHRpZiAoaW50ZXJuYWwuaGFzaGVzW3Byb3BdID09PSBoYXNoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpbnRlcm5hbC5wYXJlbnRzLmRlbGV0ZShub2RlKTtcblxuXHRcdFx0XHRcdC8vIGlmIHRoZSBkZXN0aW5hdGlvbiBwcm9wZXJ0eSBoYXMgYSBzZXR0ZXIsIHRoZW4gd2UgY2FuJ3QgYXNzdW1lIHdlIG5lZWQgdG9cblx0XHRcdFx0XHQvLyBmaXJlIGEgZGVsZXRlXG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBkZXNjLnNldCAhPT0gJ2Z1bmN0aW9uJyAmJiAoIUFycmF5LmlzQXJyYXkodGFyZ2V0KSB8fCBwcm9wICE9PSAnbGVuZ3RoJykpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSB0YXJnZXRbcHJvcF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGFyZ2V0W3Byb3BdID0gdmFsdWU7XG5cblx0XHRcdFx0aWYgKHR5cGVvZiBjbHMub25TZXQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRjbHMub25TZXQoeyBpbnRlcm5hbCwgbm9kZSwgcHJvcCwgdGFyZ2V0LCB2YWx1ZSB9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGludGVybmFsLmhhc2hlc1twcm9wXSA9IGhhc2g7XG5cdFx0XHRcdGludGVybmFsLmhhc2ggPSBoYXNoVmFsdWUoaW50ZXJuYWwuaGFzaGVzKTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IHBhcmVudCBvZiBpbnRlcm5hbC5wYXJlbnRzKSB7XG5cdFx0XHRcdFx0cGFyZW50W05vZGUuTWV0YV0ucmVoYXNoKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoY2hhbmdlZCkge1xuXHRcdFx0XHRcdGludGVybmFsLm5vdGlmeShub2RlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5vZGUsIE5vZGUuTWV0YSwgeyB2YWx1ZTogaW50ZXJuYWwgfSk7XG5cblx0XHQvLyBpZiB2YWx1ZSBpcyBhbiBvYmplY3QsIHdlIGNvcHkgdGhlIHZhbHVlIGludG8gdGhpcyBub2RlIGluc3RhbmNlXG5cdFx0aWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdGludGVybmFsLmhhc2hlcyA9IGlzQXJyYXkgPyBbXSA6IHt9O1xuXHRcdFx0aW50ZXJuYWwuaGFzaCA9IGhhc2hWYWx1ZShpbnRlcm5hbC5oYXNoZXMpO1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgb2YgUmVmbGVjdC5vd25LZXlzKHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoa2V5ID09PSBOb2RlLk1ldGEgfHwgKGlzQXJyYXkgJiYga2V5ID09PSAnbGVuZ3RoJykpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRub2RlW2tleV0gPSB2YWx1ZVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChwYXJlbnQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKCFwYXJlbnQ/LltOb2RlLk1ldGFdKSB7XG5cdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHBhcmVudCB0byBiZSBhIE5vZGUnKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHZhbHVlID09PSBwYXJlbnQgfHwgdmFsdWUgPT09IHBhcmVudFtOb2RlLk1ldGFdLnZhbHVlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignUGFyZW50IG11c3QgYmUgbm90IGJlIHRoZSBzYW1lIGFzIHRoZSBub2RlJyk7XG5cdFx0XHR9XG5cblx0XHRcdGludGVybmFsLnBhcmVudHMuYWRkKHBhcmVudCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5vZGU7XG5cdH1cblxuXHQvKipcblx0ICogUmVjdXJzaXZlbHkgbWVyZ2UgdGhlIHZhbHVlIGludG8gdGhpcyBvYmplY3QuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIHBhdXNlLlxuXHQgKiBAcGFyYW0ge09iamVjdH0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gbWVyZ2UuXG5cdCAqIEBhY2Nlc3MgcHVibGljXG5cdCAqL1xuXHRzdGF0aWMgbWVyZ2Uobm9kZSwgdmFsdWUpIHtcblx0XHRpZiAoIW5vZGU/LltOb2RlLk1ldGFdKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBtZXJnZSBkZXN0aW5hdGlvbiB0byBiZSBhIE5vZGUgaW5zdGFuY2UnKTtcblx0XHR9XG5cblx0XHRpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIG1lcmdlIHNvdXJjZSB0byBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cblx0XHRub2RlW05vZGUuTWV0YV0ucGF1c2UoKTtcblxuXHRcdChmdW5jdGlvbiBtaXgoc3JjLCBkZXN0KSB7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMoc3JjKSkge1xuXHRcdFx0XHRpZiAoa2V5ID09PSBOb2RlLk1ldGEpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHNyY1ZhbHVlID0gc3JjW2tleV07XG5cblx0XHRcdFx0aWYgKHNyY1ZhbHVlICE9PSBudWxsICYmIHR5cGVvZiBzcmNWYWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoc3JjVmFsdWUpKSB7XG5cdFx0XHRcdFx0aWYgKCFkZXN0W2tleV0/LltOb2RlLk1ldGFdKSB7XG5cdFx0XHRcdFx0XHRkZXN0W2tleV0gPSB7fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bWl4KHNyY1ZhbHVlLCBkZXN0W2tleV0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGVzdFtrZXldKSAmJiBBcnJheS5pc0FycmF5KHNyY1ZhbHVlKSkge1xuXHRcdFx0XHRcdC8vIG92ZXJ3cml0ZSBkZXN0aW5hdGlvbiB3aXRoIG5ldyB2YWx1ZXNcblx0XHRcdFx0XHRkZXN0W2tleV0uc3BsaWNlKDAsIGRlc3Rba2V5XS5sZW5ndGgsIC4uLnNyY1ZhbHVlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkZXN0W2tleV0gPSBzcmNWYWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0odmFsdWUsIG5vZGUpKTtcblxuXHRcdG5vZGVbTm9kZS5NZXRhXS5yZXN1bWUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXVzZXMgYWxsIGNoYW5nZSBub3RpZmljYXRpb25zIHVudGlsIHJlc3VtZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIHBhdXNlLlxuXHQgKiBAcmV0dXJucyB7Qm9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgaXQgd2FzIGFscmVhZHkgcGF1c2VkLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0c3RhdGljIHBhdXNlKG5vZGUpIHtcblx0XHRyZXR1cm4gbm9kZVtOb2RlLk1ldGFdLnBhdXNlKCk7XG5cdH1cblxuXHQvKipcblx0ICogVW5wYXVzZXMgbm90aWZpY2F0aW9ucyBhbmQgc2VuZHMgb3V0IGFueSBwZW5kaW5nIG5vdGlmaWNhdGlvbnMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIHJlc3VtZS5cblx0ICogQGFjY2VzcyBwdWJsaWNcblx0ICovXG5cdHN0YXRpYyByZXN1bWUobm9kZSkge1xuXHRcdG5vZGVbTm9kZS5NZXRhXS5yZXN1bWUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIGEgbGlzdGVuZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBub2RlIHRvIHVud2F0Y2guXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtsaXN0ZW5lcl0gLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHNvbWV0aGluZyBjaGFuZ2VzLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0c3RhdGljIHVud2F0Y2gobm9kZSwgbGlzdGVuZXIpIHtcblx0XHRub2RlW05vZGUuTWV0YV0udW53YXRjaChsaXN0ZW5lcik7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIGxpc3RlbmVyIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBzcGVjaWZpZWQgb2JqZWN0IG9yIGFueSBvZiBpdHMgcHJvcGVydGllcy9lbGVtZW50cyBhcmVcblx0ICogY2hhbmdlZC5cblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIG5vZGUgdG8gd2F0Y2guXG5cdCAqIEBwYXJhbSB7U3RyaW5nfEFycmF5LjxTdHJpbmc+fSBbZmlsdGVyXSAtIEEgcHJvcGVydHkgbmFtZSBvciBhcnJheSBvZiBuZXN0ZWQgcHJvcGVydGllcyB0b1xuXHQgKiB3YXRjaC5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXIgLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHNvbWV0aGluZyBjaGFuZ2VzLlxuXHQgKiBAYWNjZXNzIHB1YmxpY1xuXHQgKi9cblx0c3RhdGljIHdhdGNoKG5vZGUsIGZpbHRlciwgbGlzdGVuZXIpIHtcblx0XHRub2RlW05vZGUuTWV0YV0ud2F0Y2goZmlsdGVyLCBsaXN0ZW5lcik7XG5cdH1cbn1cblxuLyoqXG4gKiBGaWx0ZXJzIHRoZSBzcGVjaWZpZWQgbm9kZS5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgbm9kZSB0byBmaWx0ZXIuXG4gKiBAcGFyYW0ge0FycmF5LjxTdHJpbmc+fSBmaWx0ZXIgLSBUaGUgZmlsdGVyIHRvIGFwcGx5IHRvIHRoZSBub2RlLlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gZmlsdGVyT2JqZWN0KG5vZGUsIGZpbHRlcikge1xuXHRsZXQgZm91bmQgPSB0cnVlO1xuXHRsZXQgaGFzaCA9IG51bGw7XG5cdGxldCB2YWx1ZSA9IG5vZGU7XG5cblx0Ly8gZmluZCB0aGUgdmFsdWUgd2UncmUgaW50ZXJlc3RlZCBpblxuXHRmb3IgKGxldCBpID0gMCwgbGVuID0gZmlsdGVyLmxlbmd0aDsgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBpIDwgbGVuOyBpKyspIHtcblx0XHRjb25zdCBrZXkgPSBmaWx0ZXJbaV07XG5cdFx0aWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpIHtcblx0XHRcdGZvdW5kID0gZmFsc2U7XG5cdFx0XHR2YWx1ZSA9IHVuZGVmaW5lZDtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRoYXNoID0gdmFsdWVbTm9kZS5NZXRhXS5oYXNoZXNba2V5XTtcblx0XHRpZiAoaGFzaCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRoYXNoID0gbnVsbDtcblx0XHR9XG5cdFx0dmFsdWUgPSB2YWx1ZVtrZXldO1xuXHR9XG5cblx0cmV0dXJuIHsgZm91bmQsIGhhc2gsIHZhbHVlIH07XG59XG4iXSwiZmlsZSI6Im5vZGUuanMifQ==
{
"name": "config-kit",
"version": "1.4.3",
"version": "1.5.0",
"description": "A universal, layered configuration system.",

@@ -25,3 +25,3 @@ "main": "./dist/index.js",

"dependencies": {
"fs-extra": "^9.0.1",
"fs-extra": "^9.1.0",
"import-fresh": "^3.3.0",

@@ -33,3 +33,3 @@ "joi": "^17.3.0",

"devDependencies": {
"appcd-gulp": "^3.1.1",
"appcd-gulp": "^3.1.3",
"tmp": "^0.2.1"

@@ -36,0 +36,0 @@ },

SocketSocket SOC 2 Logo

Product

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

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc