footprintjs 9.48.2 → 9.48.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/lib/capture/ownData.d.ts +12 -1
- package/dist/esm/lib/capture/ownData.js +23 -2
- package/dist/esm/lib/memory/TransactionBuffer.js +5 -4
- package/dist/esm/lib/memory/merge.d.ts +1 -1
- package/dist/esm/lib/memory/merge.js +4 -12
- package/dist/esm/lib/memory/pathOps.d.ts +15 -12
- package/dist/esm/lib/memory/pathOps.js +30 -27
- package/dist/esm/lib/memory/utils.js +2 -10
- package/dist/lib/capture/ownData.js +25 -3
- package/dist/lib/memory/TransactionBuffer.js +5 -4
- package/dist/lib/memory/merge.js +4 -12
- package/dist/lib/memory/pathOps.js +30 -27
- package/dist/lib/memory/utils.js +8 -16
- package/dist/types/lib/capture/ownData.d.ts +12 -1
- package/dist/types/lib/memory/merge.d.ts +1 -1
- package/dist/types/lib/memory/pathOps.d.ts +15 -12
- package/package.json +1 -1
|
@@ -6,17 +6,16 @@
|
|
|
6
6
|
* segments (__proto__, constructor, prototype). Each operation's traversal
|
|
7
7
|
* contract is explicit below; merely using this module is not a sandbox.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* containers. It can follow an inherited object under an ordinary key.
|
|
9
|
+
* Selector operations read only own fields. Writers preflight the whole path
|
|
10
|
+
* before creating or copying any container, then place through putOwn.
|
|
12
11
|
* - nativeGet — DENIED check + hasOwnProperty at every step.
|
|
13
12
|
* - nativeHas — own-property existence only, including own denied names
|
|
14
13
|
* and own undefined values; it does not use the DENIED rule.
|
|
15
|
-
* - mergeContextWins —
|
|
16
|
-
*
|
|
14
|
+
* - mergeContextWins — own-enumerable source keys, DENIED check, own-only
|
|
15
|
+
* destination precedence. Inherited fields are never destination data.
|
|
17
16
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
17
|
+
* Diagnostic writers retain their distinct creation/merge laws in utils.ts,
|
|
18
|
+
* using the same isDeniedSegment predicate and shared own-slot writer.
|
|
20
19
|
*
|
|
21
20
|
* Paths may be dot-notation strings or pre-split (string|number)[] arrays.
|
|
22
21
|
*/
|
|
@@ -55,23 +54,27 @@ function nativeGet(obj, path, defaultValue) {
|
|
|
55
54
|
return curr === undefined ? defaultValue : curr;
|
|
56
55
|
}
|
|
57
56
|
exports.nativeGet = nativeGet;
|
|
58
|
-
/**
|
|
57
|
+
/**
|
|
58
|
+
* Set an own path in a writer-owned container, creating missing intermediates.
|
|
59
|
+
* A denied selector is a no-op BEFORE any prefix is created. Inherited values
|
|
60
|
+
* and accessors do not participate; existing own accessors keep normal behavior.
|
|
61
|
+
*/
|
|
59
62
|
function nativeSet(obj, path, value) {
|
|
60
63
|
const segs = toSegments(path);
|
|
64
|
+
if (segs.some(isDeniedSegment))
|
|
65
|
+
return obj;
|
|
61
66
|
let curr = obj;
|
|
62
67
|
for (let i = 0; i < segs.length - 1; i++) {
|
|
63
68
|
const k = segs[i];
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
if (curr[k] == null || typeof curr[k] !== 'object') {
|
|
67
|
-
curr
|
|
69
|
+
// Do not read an inherited accessor. For an OWN accessor, retain the
|
|
70
|
+
// original null/type/traversal read sequence (including getter calls).
|
|
71
|
+
if (!Object.prototype.hasOwnProperty.call(curr, k) || curr[k] == null || typeof curr[k] !== 'object') {
|
|
72
|
+
(0, ownData_js_1.putOwn)(curr, k, typeof segs[i + 1] === 'number' ? [] : {});
|
|
68
73
|
}
|
|
69
74
|
curr = curr[k];
|
|
70
75
|
}
|
|
71
76
|
const last = segs[segs.length - 1];
|
|
72
|
-
|
|
73
|
-
return obj;
|
|
74
|
-
curr[last] = value;
|
|
77
|
+
(0, ownData_js_1.putOwn)(curr, last, value);
|
|
75
78
|
return obj;
|
|
76
79
|
}
|
|
77
80
|
exports.nativeSet = nativeSet;
|
|
@@ -183,10 +186,10 @@ exports.shallowCopy = shallowCopy;
|
|
|
183
186
|
*
|
|
184
187
|
* `root` must already be owned. Walking down, every container the writer did
|
|
185
188
|
* not create (`owned` does not hold it) is replaced, in its parent, by its
|
|
186
|
-
* {@link shallowCopy}, which the writer then owns.
|
|
187
|
-
*
|
|
188
|
-
*
|
|
189
|
-
*
|
|
189
|
+
* {@link shallowCopy}, which the writer then owns. A denied segment anywhere
|
|
190
|
+
* refuses the entire walk before copying. Otherwise the walk stops at a
|
|
191
|
+
* missing / inherited / primitive intermediate (`nativeSet` makes a fresh
|
|
192
|
+
* own container from that point on). The leaf itself is never copied — the
|
|
190
193
|
* write replaces it.
|
|
191
194
|
*
|
|
192
195
|
* Cost: one shallow copy per container on the path that this writer has not
|
|
@@ -196,12 +199,12 @@ exports.shallowCopy = shallowCopy;
|
|
|
196
199
|
*/
|
|
197
200
|
function ownSpine(root, path, owned) {
|
|
198
201
|
const segs = toSegments(path);
|
|
202
|
+
if (segs.some(isDeniedSegment))
|
|
203
|
+
return;
|
|
199
204
|
let curr = root;
|
|
200
205
|
for (let i = 0; i < segs.length - 1; i++) {
|
|
201
206
|
const k = segs[i];
|
|
202
|
-
|
|
203
|
-
return;
|
|
204
|
-
const next = curr[k];
|
|
207
|
+
const next = ownChild(curr, k);
|
|
205
208
|
if (!isContainer(next))
|
|
206
209
|
return;
|
|
207
210
|
if (owned.has(next)) {
|
|
@@ -210,7 +213,7 @@ function ownSpine(root, path, owned) {
|
|
|
210
213
|
}
|
|
211
214
|
const copy = shallowCopy(next);
|
|
212
215
|
owned.add(copy);
|
|
213
|
-
curr
|
|
216
|
+
(0, ownData_js_1.putOwn)(curr, k, copy);
|
|
214
217
|
curr = copy;
|
|
215
218
|
}
|
|
216
219
|
}
|
|
@@ -283,7 +286,7 @@ function mergeContextWins(dst, src) {
|
|
|
283
286
|
for (const key of Object.keys(src)) {
|
|
284
287
|
if (DENIED.has(key))
|
|
285
288
|
continue;
|
|
286
|
-
const dstVal = out
|
|
289
|
+
const dstVal = ownChild(out, key);
|
|
287
290
|
if (dstVal !== undefined) {
|
|
288
291
|
// dst wins; recurse only if both sides are plain objects
|
|
289
292
|
if (dstVal !== null &&
|
|
@@ -292,15 +295,15 @@ function mergeContextWins(dst, src) {
|
|
|
292
295
|
src[key] !== null &&
|
|
293
296
|
typeof src[key] === 'object' &&
|
|
294
297
|
!Array.isArray(src[key])) {
|
|
295
|
-
out
|
|
298
|
+
(0, ownData_js_1.putOwn)(out, key, mergeContextWins(dstVal, src[key]));
|
|
296
299
|
}
|
|
297
300
|
// else keep dstVal unchanged
|
|
298
301
|
}
|
|
299
302
|
else {
|
|
300
|
-
out
|
|
303
|
+
(0, ownData_js_1.putOwn)(out, key, src[key]);
|
|
301
304
|
}
|
|
302
305
|
}
|
|
303
306
|
return out;
|
|
304
307
|
}
|
|
305
308
|
exports.mergeContextWins = mergeContextWins;
|
|
306
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aE9wcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L3BhdGhPcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRzs7O0FBRUgsc0RBQStDO0FBRS9DLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBRWxFLCtFQUErRTtBQUMvRSxTQUFnQixlQUFlLENBQUMsT0FBd0I7SUFDdEQsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFGRCwwQ0FFQztBQUVELFNBQVMsVUFBVSxDQUFDLElBQWtDO0lBQ3BELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsU0FBUyxDQUFDLEdBQVEsRUFBRSxJQUFrQyxFQUFFLFlBQWtCO0lBQ3hGLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixJQUFJLElBQUksR0FBRyxHQUFHLENBQUM7SUFDZixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxJQUFJLElBQUk7WUFBRSxPQUFPLFlBQVksQ0FBQztRQUN0QyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQUUsT0FBTyxZQUFZLENBQUM7UUFDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDO1lB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Q0FBQztnQkFDdEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUk7Z0JBQ2pCLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVE7Z0JBQzVCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDeEIsQ0FBQztnQkFDRCxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2hELENBQUM7WUFDRCw2QkFBNkI7UUFDL0IsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBMUJELDRDQTBCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcGF0aE9wcy50cyDigJQgTmF0aXZlIG5lc3RlZC1wYXRoIGhlbHBlcnMgKHJlcGxhY2VzIGxvZGFzaC5nZXQvc2V0L2hhcy9tZXJnZXdpdGgpXG4gKlxuICogVGhlIERFTklFRCBzZXQgaXMgdGhlIHNoYXJlZCBydWxlIGZvciB0aHJlZSBwcm90b3R5cGUtcG9sbHV0aW9uIHNlbGVjdG9yXG4gKiBzZWdtZW50cyAoX19wcm90b19fLCBjb25zdHJ1Y3RvciwgcHJvdG90eXBlKS4gRWFjaCBvcGVyYXRpb24ncyB0cmF2ZXJzYWxcbiAqIGNvbnRyYWN0IGlzIGV4cGxpY2l0IGJlbG93OyBtZXJlbHkgdXNpbmcgdGhpcyBtb2R1bGUgaXMgbm90IGEgc2FuZGJveC5cbiAqXG4gKiBJbnRlbnRpb25hbCBhc3ltbWV0cnk6XG4gKiAgIC0gbmF0aXZlU2V0IOKAlCBERU5JRUQgY2hlY2sgYXQgZWFjaCBzZWdtZW50OyB1c2VkIG9uIHdyaXRlci1vd25lZFxuICogICAgIGNvbnRhaW5lcnMuIEl0IGNhbiBmb2xsb3cgYW4gaW5oZXJpdGVkIG9iamVjdCB1bmRlciBhbiBvcmRpbmFyeSBrZXkuXG4gKiAgIC0gbmF0aXZlR2V0IOKAlCBERU5JRUQgY2hlY2sgKyBoYXNPd25Qcm9wZXJ0eSBhdCBldmVyeSBzdGVwLlxuICogICAtIG5hdGl2ZUhhcyDigJQgb3duLXByb3BlcnR5IGV4aXN0ZW5jZSBvbmx5LCBpbmNsdWRpbmcgb3duIGRlbmllZCBuYW1lc1xuICogICAgIGFuZCBvd24gdW5kZWZpbmVkIHZhbHVlczsgaXQgZG9lcyBub3QgdXNlIHRoZSBERU5JRUQgcnVsZS5cbiAqICAgLSBtZXJnZUNvbnRleHRXaW5zIOKAlCBERU5JRUQgY2hlY2sgb25seTsgT2JqZWN0LmtleXMoKSBpcyBvd24tZW51bWVyYWJsZS1vbmx5XG4gKiAgICAgYnkgc3BlYyBzbyBwcm90b3R5cGUga2V5cyBuZXZlciBhcHBlYXIgaW4gdGhlIGl0ZXJhdGlvbi5cbiAqXG4gKiBOZXN0ZWQgZGlhZ25vc3RpYyB3cml0ZXJzIGhhdmUgdGhlaXIgb3duIHdob2xlLXNlbGVjdG9yIHByZWZsaWdodCBhbmRcbiAqIG93bi1wcm9wZXJ0eSB3cml0ZXMgaW4gdXRpbHMudHMsIHVzaW5nIHRoZSBzYW1lIGlzRGVuaWVkU2VnbWVudCBwcmVkaWNhdGUuXG4gKlxuICogUGF0aHMgbWF5IGJlIGRvdC1ub3RhdGlvbiBzdHJpbmdzIG9yIHByZS1zcGxpdCAoc3RyaW5nfG51bWJlcilbXSBhcnJheXMuXG4gKi9cblxuaW1wb3J0IHsgcHV0T3duIH0gZnJvbSAnLi4vY2FwdHVyZS9vd25EYXRhLmpzJztcblxuY29uc3QgREVOSUVEID0gbmV3IFNldChbJ19fcHJvdG9fXycsICdjb25zdHJ1Y3RvcicsICdwcm90b3R5cGUnXSk7XG5cbi8qKiBJcyBgc2VnbWVudGAgb25lIG9mIHRoZSB0aHJlZSBkZW5pZWQgcHJvdG90eXBlLXBvbGx1dGlvbiBzZWxlY3RvciBuYW1lcz8gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RlbmllZFNlZ21lbnQoc2VnbWVudDogc3RyaW5nIHwgbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBERU5JRUQuaGFzKFN0cmluZyhzZWdtZW50KSk7XG59XG5cbmZ1bmN0aW9uIHRvU2VnbWVudHMocGF0aDogc3RyaW5nIHwgKHN0cmluZyB8IG51bWJlcilbXSk6IChzdHJpbmcgfCBudW1iZXIpW10ge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGggOiBwYXRoLnNwbGl0KCcuJyk7XG59XG5cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBhdCBgcGF0aGAgaW4gYG9iamAsIHJldHVybmluZyBgZGVmYXVsdFZhbHVlYCBpZiBhYnNlbnQuXG4gKlxuICogU2VjdXJpdHk6IGVhY2ggcGF0aCBzZWdtZW50IGlzIGNoZWNrZWQgYWdhaW5zdCB0aGUgREVOSUVEIGxpc3QgYW5kIHJlcXVpcmVzXG4gKiBhbiBvd24gcHJvcGVydHkgYXQgZXZlcnkgc3RlcCwgcHJldmVudGluZyBwcm90b3R5cGUtY2hhaW4gcmVhZHMuXG4gKiBlLmcuIG5hdGl2ZUdldCh7fSwgJ19fcHJvdG9fXycpIGFuZCBuYXRpdmVHZXQoe30sICdjb25zdHJ1Y3RvcicpIGJvdGggcmV0dXJuXG4gKiBgZGVmYXVsdFZhbHVlYCBpbnN0ZWFkIG9mIGxlYWtpbmcgT2JqZWN0LnByb3RvdHlwZSAvIHRoZSBPYmplY3QgY29uc3RydWN0b3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYXRpdmVHZXQob2JqOiBhbnksIHBhdGg6IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10sIGRlZmF1bHRWYWx1ZT86IGFueSk6IGFueSB7XG4gIGNvbnN0IHNlZ3MgPSB0b1NlZ21lbnRzKHBhdGgpO1xuICBsZXQgY3VyciA9IG9iajtcbiAgZm9yIChjb25zdCBzZWcgb2Ygc2Vncykge1xuICAgIGlmIChjdXJyID09IG51bGwpIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgaWYgKERFTklFRC5oYXMoU3RyaW5nKHNlZykpKSByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGN1cnIsIHNlZykpIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgY3VyciA9IGN1cnJbc2VnXTtcbiAgfVxuICByZXR1cm4gY3VyciA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogY3Vycjtcbn1cblxuLyoqIE11dGF0ZSBgb2JqYCwgc2V0dGluZyBgdmFsdWVgIGF0IGBwYXRoYCAoY3JlYXRlcyBpbnRlcm1lZGlhdGUgb2JqZWN0cykuIFJldHVybnMgYG9iamAuICovXG5leHBvcnQgZnVuY3Rpb24gbmF0aXZlU2V0KG9iajogYW55LCBwYXRoOiBzdHJpbmcgfCAoc3RyaW5nIHwgbnVtYmVyKVtdLCB2YWx1ZTogYW55KTogYW55IHtcbiAgY29uc3Qgc2VncyA9IHRvU2VnbWVudHMocGF0aCk7XG4gIGxldCBjdXJyID0gb2JqO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZ3MubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgY29uc3QgayA9IHNlZ3NbaV07XG4gICAgaWYgKERFTklFRC5oYXMoU3RyaW5nKGspKSkgcmV0dXJuIG9iajtcbiAgICBpZiAoY3VycltrXSA9PSBudWxsIHx8IHR5cGVvZiBjdXJyW2tdICE9PSAnb2JqZWN0Jykge1xuICAgICAgY3VycltrXSA9IHR5cGVvZiBzZWdzW2kgKyAxXSA9PT0gJ251bWJlcicgPyBbXSA6IHt9O1xuICAgIH1cbiAgICBjdXJyID0gY3VycltrXTtcbiAgfVxuICBjb25zdCBsYXN0ID0gc2Vnc1tzZWdzLmxlbmd0aCAtIDFdO1xuICBpZiAoREVOSUVELmhhcyhTdHJpbmcobGFzdCkpKSByZXR1cm4gb2JqO1xuICBjdXJyW2xhc3RdID0gdmFsdWU7XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBvd24gcHJvcGVydHkgYXQgYHBhdGhgIGluIGBvYmpgICh0aGUgcmVwbGF5IHByaW1pdGl2ZSBmb3IgdGhlXG4gKiBgZGVsZXRlYCBjb21taXQgdmVyYiwgIzEzYy1CKS4gTm8tb3Agd2hlbiBhbnkgaW50ZXJtZWRpYXRlIHNlZ21lbnQgaXNcbiAqIG1pc3Npbmcg4oCUIGRlbGV0aW5nIGFuIGFic2VudCBrZXkgaGFzIG5vdGhpbmcgdG8gcmVtb3ZlLlxuICpcbiAqIFNlY3VyaXR5OiBzYW1lIERFTklFRCArIGhhc093blByb3BlcnR5IGRpc2NpcGxpbmUgYXMgbmF0aXZlR2V0IOKAlCBldmVyeVxuICogc2VnbWVudCBpcyBjaGVja2VkLCBzbyBgbmF0aXZlRGVsZXRlKG9iaiwgJ19fcHJvdG9fX1x1MDAxZngnKWAgYW5kXG4gKiBwcm90b3R5cGUtY2hhaW4gd2Fsa3MgYXJlIGluZXJ0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbmF0aXZlRGVsZXRlKG9iajogYW55LCBwYXRoOiBzdHJpbmcgfCAoc3RyaW5nIHwgbnVtYmVyKVtdKTogdm9pZCB7XG4gIGNvbnN0IHNlZ3MgPSB0b1NlZ21lbnRzKHBhdGgpO1xuICBsZXQgY3VyciA9IG9iajtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWdzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIGNvbnN0IHNlZyA9IHNlZ3NbaV07XG4gICAgaWYgKERFTklFRC5oYXMoU3RyaW5nKHNlZykpKSByZXR1cm47XG4gICAgaWYgKGN1cnIgPT0gbnVsbCB8fCB0eXBlb2YgY3VyciAhPT0gJ29iamVjdCcgfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjdXJyLCBzZWcpKSByZXR1cm47XG4gICAgY3VyciA9IGN1cnJbc2VnXTtcbiAgfVxuICBjb25zdCBsYXN0ID0gc2Vnc1tzZWdzLmxlbmd0aCAtIDFdO1xuICBpZiAoREVOSUVELmhhcyhTdHJpbmcobGFzdCkpKSByZXR1cm47XG4gIGlmIChjdXJyICE9IG51bGwgJiYgdHlwZW9mIGN1cnIgPT09ICdvYmplY3QnKSB7XG4gICAgZGVsZXRlIGN1cnJbbGFzdF07XG4gIH1cbn1cblxuLy8g4pSA4pSAIENvcHktb24td3JpdGUgcHJpbWl0aXZlcyAoZG9jcy9kZXNpZ24vMjAyNi0xMC1jb3B5LW9uLXdyaXRlLWNvbW1pdC5tZCkg4pSA4pSAXG4vL1xuLy8gVEhFIExBVzogYSBjb21taXR0ZWQgZ2VuZXJhdGlvbiBpcyBuZXZlciBlZGl0ZWQuIEEgd3JpdGVyIGNvcGllcyB0aGUgcm9vdFxuLy8gYW5kIGV2ZXJ5IGNvbnRhaW5lciBvbiBlYWNoIHBhdGggaXQgd3JpdGVzLCBlZGl0cyBvbmx5IGNvbnRhaW5lcnMgaXRcbi8vIGNyZWF0ZWQgZHVyaW5nIHRoZSBjdXJyZW50IG9wZXJhdGlvbiAoaXRzIGBvd25lZGAgc2V0KSwgYW5kIHNoYXJlcyBldmVyeVxuLy8gb3RoZXIgc3VidHJlZSB3aXRoIHRoZSBnZW5lcmF0aW9uIGJlZm9yZSBpdC4gVGhlIHNhbWUgbGF3XG4vLyBgcmVhY3RpdmUvc3RydWN0dXJhbFdyaXRlLnRzIMK3IHNldEluUGF0aGAgYXBwbGllcyB0byBhIHNpbmdsZSB2YWx1ZS5cblxuLyoqIEEgY29udGFpbmVyIGEgd3JpdGVyIG1heSBvd246IGFueXRoaW5nIGB0eXBlb2YgJ29iamVjdCdgIGFuZCBub3QgbnVsbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnRhaW5lcih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG9iamVjdCB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIGBwYXJlbnRba2V5XWAgd2hlbiBgcGFyZW50YCBpcyBhIGNvbnRhaW5lciB0aGF0IE9XTlMgYGtleWAg4oCUIHRoZSBzbG90XG4gKiB7QGxpbmsgbmF0aXZlR2V0fSB3b3VsZCByZWFkLCByZWZ1c2luZyB0aGUgc2FtZSBwcm90b3R5cGUtcG9sbHV0aW9uXG4gKiBzZWdtZW50cyDigJQgZWxzZSBgdW5kZWZpbmVkYC4gT25lIHN0ZXAgb2YgYSBwYXRoIHdhbGsuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvd25DaGlsZChwYXJlbnQ6IHVua25vd24sIGtleTogc3RyaW5nIHwgbnVtYmVyKTogdW5rbm93biB7XG4gIHJldHVybiBpc0NvbnRhaW5lcihwYXJlbnQpICYmICFERU5JRUQuaGFzKFN0cmluZyhrZXkpKSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGFyZW50LCBrZXkpXG4gICAgPyAocGFyZW50IGFzIFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIHVua25vd24+KVtrZXldXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbi8qKiBUcnVlIGZvciBhbiBvd24ga2V5IG9mIGFuIGFycmF5IHRoYXQgaXMgYW4gYXJyYXkgSU5ERVggKGAnMCdgLCBgJzEyJ2ApLCBub3QgYSBuYW1lIChgYXJyLm5vdGVgKS4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlJbmRleEtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBuID0gTnVtYmVyKGtleSk7XG4gIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKG4pICYmIG4gPj0gMCAmJiBuIDwgNDI5NDk2NzI5NSAmJiBTdHJpbmcobikgPT09IGtleTtcbn1cblxuLyoqXG4gKiBUaGUgbmFtZWQgKG5vbi1pbmRleCkgb3duIGtleXMgb2YgYW4gYXJyYXksIGluIG9yZGVyLiBPd24ta2V5IG9yZGVyIHB1dHNcbiAqIGV2ZXJ5IGluZGV4IGZpcnN0LCBhc2NlbmRpbmcsIGFuZCBuYW1lcyBhZnRlciB0aGVtIOKAlCBzbyB0aGUgbmFtZXMgYXJlIHRoZVxuICogdGFpbCBvZiBgT2JqZWN0LmtleXNgLCBhbmQgYW4gYXJyYXkgd2l0aG91dCBhbnkgaXMgdG9sZCBieSBpdHMgbGFzdCBrZXkuXG4gKi9cbmZ1bmN0aW9uIG5hbWVkQXJyYXlLZXlzKGFycmF5OiB1bmtub3duW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnJheSk7XG4gIGxldCBmaXJzdCA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoZmlyc3QgPiAwICYmICFpc0FycmF5SW5kZXhLZXkoa2V5c1tmaXJzdCAtIDFdKSkgZmlyc3QtLTtcbiAgcmV0dXJuIGtleXMuc2xpY2UoZmlyc3QpO1xufVxuXG4vKipcbiAqIEEgU0hBTExPVyBjb3B5IG9mIG9uZSBjb250YWluZXIgdGhhdCBrZWVwcyBldmVyeSBzbG90IHRoZSB3aG9sZS1zdGF0ZVxuICogYHN0cnVjdHVyZWRDbG9uZWAgdGhpcyByZXBsYWNlZCBrZXB0IOKAlCBzbyBhIHBhdGggY29weSBhbmQgYSBkZWVwIGNsb25lIGdpdmVcbiAqIHRoZSBzYW1lIHZhbHVlIGF0IGV2ZXJ5IHBhdGg6XG4gKiAgIC0gYSBwbGFpbiBvYmplY3QgKG9yIGEgbnVsbC1wcm90b3R5cGUgb25lKTogaXRzIG93biBlbnVtZXJhYmxlIGtleXMsIGluXG4gKiAgICAgb3JkZXIsIGJ5IHNwcmVhZCDigJQgYW4gb3duIGBfX3Byb3RvX19gIGtleSBzdGF5cyBhIGtleTsgdGhlIHJlc3VsdCBoYXNcbiAqICAgICBgT2JqZWN0LnByb3RvdHlwZWAsIGFzIGEgY2xvbmUncyBkb2VzO1xuICogICAtIGFuIGFycmF5OiBpdHMgaW5kaWNlcywgaG9sZXMgYW5kIGxlbmd0aCAoYHNsaWNlYCkgQU5EIGFueSBuYW1lZFxuICogICAgIHByb3BlcnR5IGEgbmVzdGVkIHdyaXRlIGh1bmcgb2ZmIGl0IChgc2xpY2VgIGFsb25lIHdvdWxkIGRyb3AgdGhvc2UpO1xuICogICAtIGFueXRoaW5nIGVsc2Ug4oCUIGEgYERhdGVgLCBgTWFwYCwgYFNldGAsIHR5cGVkIGFycmF5LCBhIGNsYXNzIGluc3RhbmNlIOKAlFxuICogICAgIGlzIGRlZXAtY2xvbmVkLCB3aGljaCBpcyB3aGF0IHRoZSB3aG9sZS1zdGF0ZSBjbG9uZSBkaWQgdG8gaXQ7IGFuZCB0aGVcbiAqICAgICBvd24gZW51bWVyYWJsZSBwcm9wZXJ0aWVzIHRoZSBjbG9uZSBjYW5ub3QgY2FycnkgKGFuIGV4cGFuZG8gYSBuZXN0ZWRcbiAqICAgICB3cml0ZSBodW5nIG9uIGEgYERhdGVgKSBhcmUgY2FycmllZCBvdmVyIGJ5IHJlZmVyZW5jZSwgc28gYSBsYXRlciB3cml0ZVxuICogICAgIHRocm91Z2ggaXQgY2hhbmdlcyBleGFjdGx5IGl0cyBvd24gcGF0aC4gUmFyZSBvbiBhIHdyaXRlIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93Q29weTxUIGV4dGVuZHMgb2JqZWN0Pihjb250YWluZXI6IFQpOiBUIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoY29udGFpbmVyKSkge1xuICAgIGNvbnN0IGNvcHkgPSBjb250YWluZXIuc2xpY2UoKSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIG5hbWVkQXJyYXlLZXlzKGNvbnRhaW5lcikpXG4gICAgICBwdXRPd24oY29weSwga2V5LCAoY29udGFpbmVyIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0pO1xuICAgIHJldHVybiBjb3B5IGFzIHVua25vd24gYXMgVDtcbiAgfVxuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjb250YWluZXIpO1xuICBpZiAocHJvdG8gPT09IE9iamVjdC5wcm90b3R5cGUgfHwgcHJvdG8gPT09IG51bGwpIHJldHVybiB7IC4uLmNvbnRhaW5lciB9O1xuICBjb25zdCBjb3B5ID0gc3RydWN0dXJlZENsb25lKGNvbnRhaW5lcikgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbnRhaW5lcikpIHtcbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjb3B5LCBrZXkpKVxuICAgICAgcHV0T3duKGNvcHksIGtleSwgKGNvbnRhaW5lciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSk7XG4gIH1cbiAgcmV0dXJuIGNvcHkgYXMgVDtcbn1cblxuLyoqXG4gKiBNYWtlIHRoZSBjb250YWluZXJzIG9uIHRoZSB3YXkgdG8gYHBhdGhgJ3MgTEVBRiBvbmVzIHRoZSB3cml0ZXIgb3ducywgc29cbiAqIHRoZSB3cml0ZSB0aGF0IGZvbGxvd3MgKGBuYXRpdmVTZXRgIC8gYG5hdGl2ZURlbGV0ZWAgLyBhIHZlcmIgYXJtKSBlZGl0c1xuICogbm90aGluZyBpdCBkaWQgbm90IGNyZWF0ZS5cbiAqXG4gKiBgcm9vdGAgbXVzdCBhbHJlYWR5IGJlIG93bmVkLiBXYWxraW5nIGRvd24sIGV2ZXJ5IGNvbnRhaW5lciB0aGUgd3JpdGVyIGRpZFxuICogbm90IGNyZWF0ZSAoYG93bmVkYCBkb2VzIG5vdCBob2xkIGl0KSBpcyByZXBsYWNlZCwgaW4gaXRzIHBhcmVudCwgYnkgaXRzXG4gKiB7QGxpbmsgc2hhbGxvd0NvcHl9LCB3aGljaCB0aGUgd3JpdGVyIHRoZW4gb3ducy4gVGhlIHdhbGsgc3RvcHMgd2hlcmVcbiAqIGBuYXRpdmVTZXRgIHdvdWxkIHN0b3Agb3IgY3JlYXRlOiBhIERFTklFRCBzZWdtZW50ICh0aGUgd3JpdGUgaXMgcmVmdXNlZFxuICogdGhlcmUgYW55d2F5KSwgb3IgYSBtaXNzaW5nIC8gcHJpbWl0aXZlIGludGVybWVkaWF0ZSAoYG5hdGl2ZVNldGAgbWFrZXMgYVxuICogZnJlc2ggY29udGFpbmVyIGZyb20gdGhhdCBwb2ludCBvbikuIFRoZSBsZWFmIGl0c2VsZiBpcyBuZXZlciBjb3BpZWQg4oCUIHRoZVxuICogd3JpdGUgcmVwbGFjZXMgaXQuXG4gKlxuICogQ29zdDogb25lIHNoYWxsb3cgY29weSBwZXIgY29udGFpbmVyIG9uIHRoZSBwYXRoIHRoYXQgdGhpcyB3cml0ZXIgaGFzIG5vdFxuICogYWxyZWFkeSBjb3BpZWQg4oCUIE8oZGVwdGggw5cgd2lkdGgpLCBpbmRlcGVuZGVudCBvZiBldmVyeXRoaW5nIHRoZSB3cml0ZVxuICogZG9lcyBub3QgcGFzcyB0aHJvdWdoLiBBIHBhdGggb2Ygb25lIHNlZ21lbnQgKGEgcm9vdCBrZXksIHRoZSBjb21tb24gY2FzZSlcbiAqIGNvcGllcyBub3RoaW5nIGhlcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvd25TcGluZShyb290OiBhbnksIHBhdGg6IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10sIG93bmVkOiBXZWFrU2V0PG9iamVjdD4pOiB2b2lkIHtcbiAgY29uc3Qgc2VncyA9IHRvU2VnbWVudHMocGF0aCk7XG4gIGxldCBjdXJyID0gcm9vdDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWdzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIGNvbnN0IGsgPSBzZWdzW2ldO1xuICAgIGlmIChERU5JRUQuaGFzKFN0cmluZyhrKSkpIHJldHVybjtcbiAgICBjb25zdCBuZXh0ID0gY3VycltrXTtcbiAgICBpZiAoIWlzQ29udGFpbmVyKG5leHQpKSByZXR1cm47XG4gICAgaWYgKG93bmVkLmhhcyhuZXh0KSkge1xuICAgICAgY3VyciA9IG5leHQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgY29weSA9IHNoYWxsb3dDb3B5KG5leHQpO1xuICAgIG93bmVkLmFkZChjb3B5KTtcbiAgICBjdXJyW2tdID0gY29weTtcbiAgICBjdXJyID0gY29weTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSByb290IG9mIGEgbmV3IGdlbmVyYXRpb246IGEgc2hhbGxvdyBjb3B5IG9mIGBiYXNlYCB3aGVuIGl0IGlzIGFcbiAqIGNvbnRhaW5lciAob3duZWQgYnkgdGhlIHdyaXRlciksIGVsc2UgdGhlIGhpc3RvcmljYWwgZGVlcCBjbG9uZSBvZiBhXG4gKiBub24tY29udGFpbmVyIGJhc2UgKGB1bmRlZmluZWRgLCBhIHByaW1pdGl2ZSkgc28gdGhlIGNhbGxlcnMnIGJlaGF2aW91ciBvblxuICogc3VjaCBhIGJhc2UgaXMgdW5jaGFuZ2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb3duZWRSb290T2YoYmFzZTogYW55LCBvd25lZD86IFdlYWtTZXQ8b2JqZWN0Pik6IGFueSB7XG4gIGlmICghaXNDb250YWluZXIoYmFzZSkpIHJldHVybiBzdHJ1Y3R1cmVkQ2xvbmUoYmFzZSk7XG4gIGNvbnN0IHJvb3QgPSBzaGFsbG93Q29weShiYXNlKTtcbiAgb3duZWQ/LmFkZChyb290KTtcbiAgcmV0dXJuIHJvb3Q7XG59XG5cbi8qKiBNYXJrIGEgdmFsdWUgdGhlIHdyaXRlciBqdXN0IGNyZWF0ZWQgKGEgZnJlc2ggY2xvbmUsIGEgbWVyZ2UgcmVzdWx0KSBhcyBvd25lZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvd24odmFsdWU6IHVua25vd24sIG93bmVkOiBXZWFrU2V0PG9iamVjdD4gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgaWYgKG93bmVkICE9PSB1bmRlZmluZWQgJiYgaXNDb250YWluZXIodmFsdWUpKSBvd25lZC5hZGQodmFsdWUpO1xufVxuXG4vKipcbiAqIE1hcmsgRVZFUlkgY29udGFpbmVyIG9mIGEgdHJlZSB0aGUgd3JpdGVyIGp1c3QgY3JlYXRlZCB3aG9sZSAoYVxuICogYHN0cnVjdHVyZWRDbG9uZWAgcmVzdWx0KSBhcyBvd25lZCwgc28gYSBsYXRlciB3cml0ZSB0aHJvdWdoIGFueSBvZiB0aGVtXG4gKiBlZGl0cyBpdCBpbiBwbGFjZSBpbnN0ZWFkIG9mIGNvcHlpbmcgaXQgYWdhaW4uIFdhbGtzIG93biBlbnVtZXJhYmxlIGtleXMg4oCUXG4gKiB0aGUgc2xvdHMgYSBwYXRoIGNhbiBhZGRyZXNzOyBhIGBNYXBgJ3Mgb3IgYFNldGAncyBlbnRyaWVzIGFyZSBub3QuIE8odGhlXG4gKiB0cmVlJ3MgY29udGFpbmVycyk7IGEgY29udGFpbmVyIGFscmVhZHkgb3duZWQgaXMgbm90IHdhbGtlZCB0d2ljZSAoYSBjeWNsZVxuICogaW5zaWRlIHRoZSBjbG9uZSBlbmRzIHRoZXJlKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkb3B0KHRyZWU6IHVua25vd24sIG93bmVkOiBXZWFrU2V0PG9iamVjdD4pOiB2b2lkIHtcbiAgY29uc3Qgc3RhY2s6IHVua25vd25bXSA9IFt0cmVlXTtcbiAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCB2YWx1ZSA9IHN0YWNrLnBvcCgpO1xuICAgIGlmICghaXNDb250YWluZXIodmFsdWUpIHx8IG93bmVkLmhhcyh2YWx1ZSkpIGNvbnRpbnVlO1xuICAgIG93bmVkLmFkZCh2YWx1ZSk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFsdWUpKSBzdGFjay5wdXNoKCh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSk7XG4gIH1cbn1cblxuLyoqIFJldHVybnMgdHJ1ZSBpZiBgb2JqYCBoYXMgYW4gb3duIHByb3BlcnR5IGF0IGV2ZXJ5IHNlZ21lbnQgb2YgYHBhdGhgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5hdGl2ZUhhcyhvYmo6IGFueSwgcGF0aDogc3RyaW5nIHwgKHN0cmluZyB8IG51bWJlcilbXSk6IGJvb2xlYW4ge1xuICBjb25zdCBzZWdzID0gdG9TZWdtZW50cyhwYXRoKTtcbiAgbGV0IGN1cnIgPSBvYmo7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2Vncy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChjdXJyID09IG51bGwgfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjdXJyLCBzZWdzW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpIDwgc2Vncy5sZW5ndGggLSAxKSBjdXJyID0gY3VycltzZWdzW2ldXTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBEZWVwIG1lcmdlIHdoZXJlIGRlc3RpbmF0aW9uIHdpbnMgZm9yIGFueSBkZWZpbmVkIHZhbHVlLlxuICogRmlsbHMgbWlzc2luZyBrZXlzIGZyb20gYHNyY2AsIGJ1dCBuZXZlciBvdmVyd3JpdGVzIGRlZmluZWQga2V5cyBpbiBgZHN0YC5cbiAqIEFycmF5cyBhcmUgbm90IHJlY3Vyc2VkIOKAlCBkc3QgYXJyYXkgYWx3YXlzIHdpbnMgd2hlbiBwcmVzZW50LlxuICpcbiAqIFJlcGxhY2VzOiBgbWVyZ2VXaXRoKGRzdCwgc3JjLCAob2JqVmFsdWUpID0+IG9ialZhbHVlICE9PSB1bmRlZmluZWQgPyBvYmpWYWx1ZSA6IHVuZGVmaW5lZClgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNvbnRleHRXaW5zKGRzdDogYW55LCBzcmM6IGFueSk6IGFueSB7XG4gIGlmICghc3JjIHx8IHR5cGVvZiBzcmMgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoc3JjKSkge1xuICAgIHJldHVybiBkc3QgIT09IHVuZGVmaW5lZCA/IGRzdCA6IHNyYztcbiAgfVxuICBjb25zdCBvdXQ6IGFueSA9IGRzdCAhPSBudWxsICYmIHR5cGVvZiBkc3QgPT09ICdvYmplY3QnID8geyAuLi5kc3QgfSA6IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzcmMpKSB7XG4gICAgaWYgKERFTklFRC5oYXMoa2V5KSkgY29udGludWU7XG4gICAgY29uc3QgZHN0VmFsID0gb3V0W2tleV07XG4gICAgaWYgKGRzdFZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBkc3Qgd2luczsgcmVjdXJzZSBvbmx5IGlmIGJvdGggc2lkZXMgYXJlIHBsYWluIG9iamVjdHNcbiAgICAgIGlmIChcbiAgICAgICAgZHN0VmFsICE9PSBudWxsICYmXG4gICAgICAgIHR5cGVvZiBkc3RWYWwgPT09ICdvYmplY3QnICYmXG4gICAgICAgICFBcnJheS5pc0FycmF5KGRzdFZhbCkgJiZcbiAgICAgICAgc3JjW2tleV0gIT09IG51bGwgJiZcbiAgICAgICAgdHlwZW9mIHNyY1trZXldID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAhQXJyYXkuaXNBcnJheShzcmNba2V5XSlcbiAgICAgICkge1xuICAgICAgICBvdXRba2V5XSA9IG1lcmdlQ29udGV4dFdpbnMoZHN0VmFsLCBzcmNba2V5XSk7XG4gICAgICB9XG4gICAgICAvLyBlbHNlIGtlZXAgZHN0VmFsIHVuY2hhbmdlZFxuICAgIH0gZWxzZSB7XG4gICAgICBvdXRba2V5XSA9IHNyY1trZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIl19
|
|
309
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aE9wcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L3BhdGhPcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHOzs7QUFFSCxzREFBK0M7QUFFL0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFFbEUsK0VBQStFO0FBQy9FLFNBQWdCLGVBQWUsQ0FBQyxPQUF3QjtJQUN0RCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUZELDBDQUVDO0FBRUQsU0FBUyxVQUFVLENBQUMsSUFBa0M7SUFDcEQsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixTQUFTLENBQUMsR0FBUSxFQUFFLElBQWtDLEVBQUUsWUFBa0I7SUFDeEYsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUNmLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxJQUFJLElBQUksSUFBSTtZQUFFLE9BQU8sWUFBWSxDQUFDO1FBQ3RDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFBRSxPQUFPLFlBQVksQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7WUFB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Q2YsT0FBTyxNQUFNLEtBQUssUUFBUTtnQkFDMUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDdEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUk7Z0JBQ2pCLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVE7Z0JBQzVCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDeEIsQ0FBQztnQkFDRCxJQUFBLG1CQUFNLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2RCxDQUFDO1lBQ0QsNkJBQTZCO1FBQy9CLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBQSxtQkFBTSxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUExQkQsNENBMEJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBwYXRoT3BzLnRzIOKAlCBOYXRpdmUgbmVzdGVkLXBhdGggaGVscGVycyAocmVwbGFjZXMgbG9kYXNoLmdldC9zZXQvaGFzL21lcmdld2l0aClcbiAqXG4gKiBUaGUgREVOSUVEIHNldCBpcyB0aGUgc2hhcmVkIHJ1bGUgZm9yIHRocmVlIHByb3RvdHlwZS1wb2xsdXRpb24gc2VsZWN0b3JcbiAqIHNlZ21lbnRzIChfX3Byb3RvX18sIGNvbnN0cnVjdG9yLCBwcm90b3R5cGUpLiBFYWNoIG9wZXJhdGlvbidzIHRyYXZlcnNhbFxuICogY29udHJhY3QgaXMgZXhwbGljaXQgYmVsb3c7IG1lcmVseSB1c2luZyB0aGlzIG1vZHVsZSBpcyBub3QgYSBzYW5kYm94LlxuICpcbiAqIFNlbGVjdG9yIG9wZXJhdGlvbnMgcmVhZCBvbmx5IG93biBmaWVsZHMuIFdyaXRlcnMgcHJlZmxpZ2h0IHRoZSB3aG9sZSBwYXRoXG4gKiBiZWZvcmUgY3JlYXRpbmcgb3IgY29weWluZyBhbnkgY29udGFpbmVyLCB0aGVuIHBsYWNlIHRocm91Z2ggcHV0T3duLlxuICogICAtIG5hdGl2ZUdldCDigJQgREVOSUVEIGNoZWNrICsgaGFzT3duUHJvcGVydHkgYXQgZXZlcnkgc3RlcC5cbiAqICAgLSBuYXRpdmVIYXMg4oCUIG93bi1wcm9wZXJ0eSBleGlzdGVuY2Ugb25seSwgaW5jbHVkaW5nIG93biBkZW5pZWQgbmFtZXNcbiAqICAgICBhbmQgb3duIHVuZGVmaW5lZCB2YWx1ZXM7IGl0IGRvZXMgbm90IHVzZSB0aGUgREVOSUVEIHJ1bGUuXG4gKiAgIC0gbWVyZ2VDb250ZXh0V2lucyDigJQgb3duLWVudW1lcmFibGUgc291cmNlIGtleXMsIERFTklFRCBjaGVjaywgb3duLW9ubHlcbiAqICAgICBkZXN0aW5hdGlvbiBwcmVjZWRlbmNlLiBJbmhlcml0ZWQgZmllbGRzIGFyZSBuZXZlciBkZXN0aW5hdGlvbiBkYXRhLlxuICpcbiAqIERpYWdub3N0aWMgd3JpdGVycyByZXRhaW4gdGhlaXIgZGlzdGluY3QgY3JlYXRpb24vbWVyZ2UgbGF3cyBpbiB1dGlscy50cyxcbiAqIHVzaW5nIHRoZSBzYW1lIGlzRGVuaWVkU2VnbWVudCBwcmVkaWNhdGUgYW5kIHNoYXJlZCBvd24tc2xvdCB3cml0ZXIuXG4gKlxuICogUGF0aHMgbWF5IGJlIGRvdC1ub3RhdGlvbiBzdHJpbmdzIG9yIHByZS1zcGxpdCAoc3RyaW5nfG51bWJlcilbXSBhcnJheXMuXG4gKi9cblxuaW1wb3J0IHsgcHV0T3duIH0gZnJvbSAnLi4vY2FwdHVyZS9vd25EYXRhLmpzJztcblxuY29uc3QgREVOSUVEID0gbmV3IFNldChbJ19fcHJvdG9fXycsICdjb25zdHJ1Y3RvcicsICdwcm90b3R5cGUnXSk7XG5cbi8qKiBJcyBgc2VnbWVudGAgb25lIG9mIHRoZSB0aHJlZSBkZW5pZWQgcHJvdG90eXBlLXBvbGx1dGlvbiBzZWxlY3RvciBuYW1lcz8gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RlbmllZFNlZ21lbnQoc2VnbWVudDogc3RyaW5nIHwgbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBERU5JRUQuaGFzKFN0cmluZyhzZWdtZW50KSk7XG59XG5cbmZ1bmN0aW9uIHRvU2VnbWVudHMocGF0aDogc3RyaW5nIHwgKHN0cmluZyB8IG51bWJlcilbXSk6IChzdHJpbmcgfCBudW1iZXIpW10ge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShwYXRoKSA/IHBhdGggOiBwYXRoLnNwbGl0KCcuJyk7XG59XG5cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBhdCBgcGF0aGAgaW4gYG9iamAsIHJldHVybmluZyBgZGVmYXVsdFZhbHVlYCBpZiBhYnNlbnQuXG4gKlxuICogU2VjdXJpdHk6IGVhY2ggcGF0aCBzZWdtZW50IGlzIGNoZWNrZWQgYWdhaW5zdCB0aGUgREVOSUVEIGxpc3QgYW5kIHJlcXVpcmVzXG4gKiBhbiBvd24gcHJvcGVydHkgYXQgZXZlcnkgc3RlcCwgcHJldmVudGluZyBwcm90b3R5cGUtY2hhaW4gcmVhZHMuXG4gKiBlLmcuIG5hdGl2ZUdldCh7fSwgJ19fcHJvdG9fXycpIGFuZCBuYXRpdmVHZXQoe30sICdjb25zdHJ1Y3RvcicpIGJvdGggcmV0dXJuXG4gKiBgZGVmYXVsdFZhbHVlYCBpbnN0ZWFkIG9mIGxlYWtpbmcgT2JqZWN0LnByb3RvdHlwZSAvIHRoZSBPYmplY3QgY29uc3RydWN0b3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYXRpdmVHZXQob2JqOiBhbnksIHBhdGg6IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10sIGRlZmF1bHRWYWx1ZT86IGFueSk6IGFueSB7XG4gIGNvbnN0IHNlZ3MgPSB0b1NlZ21lbnRzKHBhdGgpO1xuICBsZXQgY3VyciA9IG9iajtcbiAgZm9yIChjb25zdCBzZWcgb2Ygc2Vncykge1xuICAgIGlmIChjdXJyID09IG51bGwpIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgaWYgKERFTklFRC5oYXMoU3RyaW5nKHNlZykpKSByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGN1cnIsIHNlZykpIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgY3VyciA9IGN1cnJbc2VnXTtcbiAgfVxuICByZXR1cm4gY3VyciA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogY3Vycjtcbn1cblxuLyoqXG4gKiBTZXQgYW4gb3duIHBhdGggaW4gYSB3cml0ZXItb3duZWQgY29udGFpbmVyLCBjcmVhdGluZyBtaXNzaW5nIGludGVybWVkaWF0ZXMuXG4gKiBBIGRlbmllZCBzZWxlY3RvciBpcyBhIG5vLW9wIEJFRk9SRSBhbnkgcHJlZml4IGlzIGNyZWF0ZWQuIEluaGVyaXRlZCB2YWx1ZXNcbiAqIGFuZCBhY2Nlc3NvcnMgZG8gbm90IHBhcnRpY2lwYXRlOyBleGlzdGluZyBvd24gYWNjZXNzb3JzIGtlZXAgbm9ybWFsIGJlaGF2aW9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbmF0aXZlU2V0KG9iajogYW55LCBwYXRoOiBzdHJpbmcgfCAoc3RyaW5nIHwgbnVtYmVyKVtdLCB2YWx1ZTogYW55KTogYW55IHtcbiAgY29uc3Qgc2VncyA9IHRvU2VnbWVudHMocGF0aCk7XG4gIGlmIChzZWdzLnNvbWUoaXNEZW5pZWRTZWdtZW50KSkgcmV0dXJuIG9iajtcbiAgbGV0IGN1cnIgPSBvYmo7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2Vncy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICBjb25zdCBrID0gc2Vnc1tpXTtcbiAgICAvLyBEbyBub3QgcmVhZCBhbiBpbmhlcml0ZWQgYWNjZXNzb3IuIEZvciBhbiBPV04gYWNjZXNzb3IsIHJldGFpbiB0aGVcbiAgICAvLyBvcmlnaW5hbCBudWxsL3R5cGUvdHJhdmVyc2FsIHJlYWQgc2VxdWVuY2UgKGluY2x1ZGluZyBnZXR0ZXIgY2FsbHMpLlxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGN1cnIsIGspIHx8IGN1cnJba10gPT0gbnVsbCB8fCB0eXBlb2YgY3VycltrXSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHB1dE93bihjdXJyLCBrLCB0eXBlb2Ygc2Vnc1tpICsgMV0gPT09ICdudW1iZXInID8gW10gOiB7fSk7XG4gICAgfVxuICAgIGN1cnIgPSBjdXJyW2tdO1xuICB9XG4gIGNvbnN0IGxhc3QgPSBzZWdzW3NlZ3MubGVuZ3RoIC0gMV07XG4gIHB1dE93bihjdXJyLCBsYXN0LCB2YWx1ZSk7XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogUmVtb3ZlIHRoZSBvd24gcHJvcGVydHkgYXQgYHBhdGhgIGluIGBvYmpgICh0aGUgcmVwbGF5IHByaW1pdGl2ZSBmb3IgdGhlXG4gKiBgZGVsZXRlYCBjb21taXQgdmVyYiwgIzEzYy1CKS4gTm8tb3Agd2hlbiBhbnkgaW50ZXJtZWRpYXRlIHNlZ21lbnQgaXNcbiAqIG1pc3Npbmcg4oCUIGRlbGV0aW5nIGFuIGFic2VudCBrZXkgaGFzIG5vdGhpbmcgdG8gcmVtb3ZlLlxuICpcbiAqIFNlY3VyaXR5OiBzYW1lIERFTklFRCArIGhhc093blByb3BlcnR5IGRpc2NpcGxpbmUgYXMgbmF0aXZlR2V0IOKAlCBldmVyeVxuICogc2VnbWVudCBpcyBjaGVja2VkLCBzbyBgbmF0aXZlRGVsZXRlKG9iaiwgJ19fcHJvdG9fX1x1MDAxZngnKWAgYW5kXG4gKiBwcm90b3R5cGUtY2hhaW4gd2Fsa3MgYXJlIGluZXJ0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbmF0aXZlRGVsZXRlKG9iajogYW55LCBwYXRoOiBzdHJpbmcgfCAoc3RyaW5nIHwgbnVtYmVyKVtdKTogdm9pZCB7XG4gIGNvbnN0IHNlZ3MgPSB0b1NlZ21lbnRzKHBhdGgpO1xuICBsZXQgY3VyciA9IG9iajtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWdzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgIGNvbnN0IHNlZyA9IHNlZ3NbaV07XG4gICAgaWYgKERFTklFRC5oYXMoU3RyaW5nKHNlZykpKSByZXR1cm47XG4gICAgaWYgKGN1cnIgPT0gbnVsbCB8fCB0eXBlb2YgY3VyciAhPT0gJ29iamVjdCcgfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjdXJyLCBzZWcpKSByZXR1cm47XG4gICAgY3VyciA9IGN1cnJbc2VnXTtcbiAgfVxuICBjb25zdCBsYXN0ID0gc2Vnc1tzZWdzLmxlbmd0aCAtIDFdO1xuICBpZiAoREVOSUVELmhhcyhTdHJpbmcobGFzdCkpKSByZXR1cm47XG4gIGlmIChjdXJyICE9IG51bGwgJiYgdHlwZW9mIGN1cnIgPT09ICdvYmplY3QnKSB7XG4gICAgZGVsZXRlIGN1cnJbbGFzdF07XG4gIH1cbn1cblxuLy8g4pSA4pSAIENvcHktb24td3JpdGUgcHJpbWl0aXZlcyAoZG9jcy9kZXNpZ24vMjAyNi0xMC1jb3B5LW9uLXdyaXRlLWNvbW1pdC5tZCkg4pSA4pSAXG4vL1xuLy8gVEhFIExBVzogYSBjb21taXR0ZWQgZ2VuZXJhdGlvbiBpcyBuZXZlciBlZGl0ZWQuIEEgd3JpdGVyIGNvcGllcyB0aGUgcm9vdFxuLy8gYW5kIGV2ZXJ5IGNvbnRhaW5lciBvbiBlYWNoIHBhdGggaXQgd3JpdGVzLCBlZGl0cyBvbmx5IGNvbnRhaW5lcnMgaXRcbi8vIGNyZWF0ZWQgZHVyaW5nIHRoZSBjdXJyZW50IG9wZXJhdGlvbiAoaXRzIGBvd25lZGAgc2V0KSwgYW5kIHNoYXJlcyBldmVyeVxuLy8gb3RoZXIgc3VidHJlZSB3aXRoIHRoZSBnZW5lcmF0aW9uIGJlZm9yZSBpdC4gVGhlIHNhbWUgbGF3XG4vLyBgcmVhY3RpdmUvc3RydWN0dXJhbFdyaXRlLnRzIMK3IHNldEluUGF0aGAgYXBwbGllcyB0byBhIHNpbmdsZSB2YWx1ZS5cblxuLyoqIEEgY29udGFpbmVyIGEgd3JpdGVyIG1heSBvd246IGFueXRoaW5nIGB0eXBlb2YgJ29iamVjdCdgIGFuZCBub3QgbnVsbC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnRhaW5lcih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG9iamVjdCB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIGBwYXJlbnRba2V5XWAgd2hlbiBgcGFyZW50YCBpcyBhIGNvbnRhaW5lciB0aGF0IE9XTlMgYGtleWAg4oCUIHRoZSBzbG90XG4gKiB7QGxpbmsgbmF0aXZlR2V0fSB3b3VsZCByZWFkLCByZWZ1c2luZyB0aGUgc2FtZSBwcm90b3R5cGUtcG9sbHV0aW9uXG4gKiBzZWdtZW50cyDigJQgZWxzZSBgdW5kZWZpbmVkYC4gT25lIHN0ZXAgb2YgYSBwYXRoIHdhbGsuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvd25DaGlsZChwYXJlbnQ6IHVua25vd24sIGtleTogc3RyaW5nIHwgbnVtYmVyKTogdW5rbm93biB7XG4gIHJldHVybiBpc0NvbnRhaW5lcihwYXJlbnQpICYmICFERU5JRUQuaGFzKFN0cmluZyhrZXkpKSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGFyZW50LCBrZXkpXG4gICAgPyAocGFyZW50IGFzIFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIHVua25vd24+KVtrZXldXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbi8qKiBUcnVlIGZvciBhbiBvd24ga2V5IG9mIGFuIGFycmF5IHRoYXQgaXMgYW4gYXJyYXkgSU5ERVggKGAnMCdgLCBgJzEyJ2ApLCBub3QgYSBuYW1lIChgYXJyLm5vdGVgKS4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlJbmRleEtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBuID0gTnVtYmVyKGtleSk7XG4gIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKG4pICYmIG4gPj0gMCAmJiBuIDwgNDI5NDk2NzI5NSAmJiBTdHJpbmcobikgPT09IGtleTtcbn1cblxuLyoqXG4gKiBUaGUgbmFtZWQgKG5vbi1pbmRleCkgb3duIGtleXMgb2YgYW4gYXJyYXksIGluIG9yZGVyLiBPd24ta2V5IG9yZGVyIHB1dHNcbiAqIGV2ZXJ5IGluZGV4IGZpcnN0LCBhc2NlbmRpbmcsIGFuZCBuYW1lcyBhZnRlciB0aGVtIOKAlCBzbyB0aGUgbmFtZXMgYXJlIHRoZVxuICogdGFpbCBvZiBgT2JqZWN0LmtleXNgLCBhbmQgYW4gYXJyYXkgd2l0aG91dCBhbnkgaXMgdG9sZCBieSBpdHMgbGFzdCBrZXkuXG4gKi9cbmZ1bmN0aW9uIG5hbWVkQXJyYXlLZXlzKGFycmF5OiB1bmtub3duW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnJheSk7XG4gIGxldCBmaXJzdCA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoZmlyc3QgPiAwICYmICFpc0FycmF5SW5kZXhLZXkoa2V5c1tmaXJzdCAtIDFdKSkgZmlyc3QtLTtcbiAgcmV0dXJuIGtleXMuc2xpY2UoZmlyc3QpO1xufVxuXG4vKipcbiAqIEEgU0hBTExPVyBjb3B5IG9mIG9uZSBjb250YWluZXIgdGhhdCBrZWVwcyBldmVyeSBzbG90IHRoZSB3aG9sZS1zdGF0ZVxuICogYHN0cnVjdHVyZWRDbG9uZWAgdGhpcyByZXBsYWNlZCBrZXB0IOKAlCBzbyBhIHBhdGggY29weSBhbmQgYSBkZWVwIGNsb25lIGdpdmVcbiAqIHRoZSBzYW1lIHZhbHVlIGF0IGV2ZXJ5IHBhdGg6XG4gKiAgIC0gYSBwbGFpbiBvYmplY3QgKG9yIGEgbnVsbC1wcm90b3R5cGUgb25lKTogaXRzIG93biBlbnVtZXJhYmxlIGtleXMsIGluXG4gKiAgICAgb3JkZXIsIGJ5IHNwcmVhZCDigJQgYW4gb3duIGBfX3Byb3RvX19gIGtleSBzdGF5cyBhIGtleTsgdGhlIHJlc3VsdCBoYXNcbiAqICAgICBgT2JqZWN0LnByb3RvdHlwZWAsIGFzIGEgY2xvbmUncyBkb2VzO1xuICogICAtIGFuIGFycmF5OiBpdHMgaW5kaWNlcywgaG9sZXMgYW5kIGxlbmd0aCAoYHNsaWNlYCkgQU5EIGFueSBuYW1lZFxuICogICAgIHByb3BlcnR5IGEgbmVzdGVkIHdyaXRlIGh1bmcgb2ZmIGl0IChgc2xpY2VgIGFsb25lIHdvdWxkIGRyb3AgdGhvc2UpO1xuICogICAtIGFueXRoaW5nIGVsc2Ug4oCUIGEgYERhdGVgLCBgTWFwYCwgYFNldGAsIHR5cGVkIGFycmF5LCBhIGNsYXNzIGluc3RhbmNlIOKAlFxuICogICAgIGlzIGRlZXAtY2xvbmVkLCB3aGljaCBpcyB3aGF0IHRoZSB3aG9sZS1zdGF0ZSBjbG9uZSBkaWQgdG8gaXQ7IGFuZCB0aGVcbiAqICAgICBvd24gZW51bWVyYWJsZSBwcm9wZXJ0aWVzIHRoZSBjbG9uZSBjYW5ub3QgY2FycnkgKGFuIGV4cGFuZG8gYSBuZXN0ZWRcbiAqICAgICB3cml0ZSBodW5nIG9uIGEgYERhdGVgKSBhcmUgY2FycmllZCBvdmVyIGJ5IHJlZmVyZW5jZSwgc28gYSBsYXRlciB3cml0ZVxuICogICAgIHRocm91Z2ggaXQgY2hhbmdlcyBleGFjdGx5IGl0cyBvd24gcGF0aC4gUmFyZSBvbiBhIHdyaXRlIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93Q29weTxUIGV4dGVuZHMgb2JqZWN0Pihjb250YWluZXI6IFQpOiBUIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoY29udGFpbmVyKSkge1xuICAgIGNvbnN0IGNvcHkgPSBjb250YWluZXIuc2xpY2UoKSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIG5hbWVkQXJyYXlLZXlzKGNvbnRhaW5lcikpXG4gICAgICBwdXRPd24oY29weSwga2V5LCAoY29udGFpbmVyIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0pO1xuICAgIHJldHVybiBjb3B5IGFzIHVua25vd24gYXMgVDtcbiAgfVxuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjb250YWluZXIpO1xuICBpZiAocHJvdG8gPT09IE9iamVjdC5wcm90b3R5cGUgfHwgcHJvdG8gPT09IG51bGwpIHJldHVybiB7IC4uLmNvbnRhaW5lciB9O1xuICBjb25zdCBjb3B5ID0gc3RydWN0dXJlZENsb25lKGNvbnRhaW5lcikgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbnRhaW5lcikpIHtcbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjb3B5LCBrZXkpKVxuICAgICAgcHV0T3duKGNvcHksIGtleSwgKGNvbnRhaW5lciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSk7XG4gIH1cbiAgcmV0dXJuIGNvcHkgYXMgVDtcbn1cblxuLyoqXG4gKiBNYWtlIHRoZSBjb250YWluZXJzIG9uIHRoZSB3YXkgdG8gYHBhdGhgJ3MgTEVBRiBvbmVzIHRoZSB3cml0ZXIgb3ducywgc29cbiAqIHRoZSB3cml0ZSB0aGF0IGZvbGxvd3MgKGBuYXRpdmVTZXRgIC8gYG5hdGl2ZURlbGV0ZWAgLyBhIHZlcmIgYXJtKSBlZGl0c1xuICogbm90aGluZyBpdCBkaWQgbm90IGNyZWF0ZS5cbiAqXG4gKiBgcm9vdGAgbXVzdCBhbHJlYWR5IGJlIG93bmVkLiBXYWxraW5nIGRvd24sIGV2ZXJ5IGNvbnRhaW5lciB0aGUgd3JpdGVyIGRpZFxuICogbm90IGNyZWF0ZSAoYG93bmVkYCBkb2VzIG5vdCBob2xkIGl0KSBpcyByZXBsYWNlZCwgaW4gaXRzIHBhcmVudCwgYnkgaXRzXG4gKiB7QGxpbmsgc2hhbGxvd0NvcHl9LCB3aGljaCB0aGUgd3JpdGVyIHRoZW4gb3ducy4gQSBkZW5pZWQgc2VnbWVudCBhbnl3aGVyZVxuICogcmVmdXNlcyB0aGUgZW50aXJlIHdhbGsgYmVmb3JlIGNvcHlpbmcuIE90aGVyd2lzZSB0aGUgd2FsayBzdG9wcyBhdCBhXG4gKiBtaXNzaW5nIC8gaW5oZXJpdGVkIC8gcHJpbWl0aXZlIGludGVybWVkaWF0ZSAoYG5hdGl2ZVNldGAgbWFrZXMgYSBmcmVzaFxuICogb3duIGNvbnRhaW5lciBmcm9tIHRoYXQgcG9pbnQgb24pLiBUaGUgbGVhZiBpdHNlbGYgaXMgbmV2ZXIgY29waWVkIOKAlCB0aGVcbiAqIHdyaXRlIHJlcGxhY2VzIGl0LlxuICpcbiAqIENvc3Q6IG9uZSBzaGFsbG93IGNvcHkgcGVyIGNvbnRhaW5lciBvbiB0aGUgcGF0aCB0aGF0IHRoaXMgd3JpdGVyIGhhcyBub3RcbiAqIGFscmVhZHkgY29waWVkIOKAlCBPKGRlcHRoIMOXIHdpZHRoKSwgaW5kZXBlbmRlbnQgb2YgZXZlcnl0aGluZyB0aGUgd3JpdGVcbiAqIGRvZXMgbm90IHBhc3MgdGhyb3VnaC4gQSBwYXRoIG9mIG9uZSBzZWdtZW50IChhIHJvb3Qga2V5LCB0aGUgY29tbW9uIGNhc2UpXG4gKiBjb3BpZXMgbm90aGluZyBoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb3duU3BpbmUocm9vdDogYW55LCBwYXRoOiBzdHJpbmcgfCAoc3RyaW5nIHwgbnVtYmVyKVtdLCBvd25lZDogV2Vha1NldDxvYmplY3Q+KTogdm9pZCB7XG4gIGNvbnN0IHNlZ3MgPSB0b1NlZ21lbnRzKHBhdGgpO1xuICBpZiAoc2Vncy5zb21lKGlzRGVuaWVkU2VnbWVudCkpIHJldHVybjtcbiAgbGV0IGN1cnIgPSByb290O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZ3MubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgY29uc3QgayA9IHNlZ3NbaV07XG4gICAgY29uc3QgbmV4dCA9IG93bkNoaWxkKGN1cnIsIGspO1xuICAgIGlmICghaXNDb250YWluZXIobmV4dCkpIHJldHVybjtcbiAgICBpZiAob3duZWQuaGFzKG5leHQpKSB7XG4gICAgICBjdXJyID0gbmV4dDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBjb3B5ID0gc2hhbGxvd0NvcHkobmV4dCk7XG4gICAgb3duZWQuYWRkKGNvcHkpO1xuICAgIHB1dE93bihjdXJyLCBrLCBjb3B5KTtcbiAgICBjdXJyID0gY29weTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSByb290IG9mIGEgbmV3IGdlbmVyYXRpb246IGEgc2hhbGxvdyBjb3B5IG9mIGBiYXNlYCB3aGVuIGl0IGlzIGFcbiAqIGNvbnRhaW5lciAob3duZWQgYnkgdGhlIHdyaXRlciksIGVsc2UgdGhlIGhpc3RvcmljYWwgZGVlcCBjbG9uZSBvZiBhXG4gKiBub24tY29udGFpbmVyIGJhc2UgKGB1bmRlZmluZWRgLCBhIHByaW1pdGl2ZSkgc28gdGhlIGNhbGxlcnMnIGJlaGF2aW91ciBvblxuICogc3VjaCBhIGJhc2UgaXMgdW5jaGFuZ2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb3duZWRSb290T2YoYmFzZTogYW55LCBvd25lZD86IFdlYWtTZXQ8b2JqZWN0Pik6IGFueSB7XG4gIGlmICghaXNDb250YWluZXIoYmFzZSkpIHJldHVybiBzdHJ1Y3R1cmVkQ2xvbmUoYmFzZSk7XG4gIGNvbnN0IHJvb3QgPSBzaGFsbG93Q29weShiYXNlKTtcbiAgb3duZWQ/LmFkZChyb290KTtcbiAgcmV0dXJuIHJvb3Q7XG59XG5cbi8qKiBNYXJrIGEgdmFsdWUgdGhlIHdyaXRlciBqdXN0IGNyZWF0ZWQgKGEgZnJlc2ggY2xvbmUsIGEgbWVyZ2UgcmVzdWx0KSBhcyBvd25lZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvd24odmFsdWU6IHVua25vd24sIG93bmVkOiBXZWFrU2V0PG9iamVjdD4gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgaWYgKG93bmVkICE9PSB1bmRlZmluZWQgJiYgaXNDb250YWluZXIodmFsdWUpKSBvd25lZC5hZGQodmFsdWUpO1xufVxuXG4vKipcbiAqIE1hcmsgRVZFUlkgY29udGFpbmVyIG9mIGEgdHJlZSB0aGUgd3JpdGVyIGp1c3QgY3JlYXRlZCB3aG9sZSAoYVxuICogYHN0cnVjdHVyZWRDbG9uZWAgcmVzdWx0KSBhcyBvd25lZCwgc28gYSBsYXRlciB3cml0ZSB0aHJvdWdoIGFueSBvZiB0aGVtXG4gKiBlZGl0cyBpdCBpbiBwbGFjZSBpbnN0ZWFkIG9mIGNvcHlpbmcgaXQgYWdhaW4uIFdhbGtzIG93biBlbnVtZXJhYmxlIGtleXMg4oCUXG4gKiB0aGUgc2xvdHMgYSBwYXRoIGNhbiBhZGRyZXNzOyBhIGBNYXBgJ3Mgb3IgYFNldGAncyBlbnRyaWVzIGFyZSBub3QuIE8odGhlXG4gKiB0cmVlJ3MgY29udGFpbmVycyk7IGEgY29udGFpbmVyIGFscmVhZHkgb3duZWQgaXMgbm90IHdhbGtlZCB0d2ljZSAoYSBjeWNsZVxuICogaW5zaWRlIHRoZSBjbG9uZSBlbmRzIHRoZXJlKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkb3B0KHRyZWU6IHVua25vd24sIG93bmVkOiBXZWFrU2V0PG9iamVjdD4pOiB2b2lkIHtcbiAgY29uc3Qgc3RhY2s6IHVua25vd25bXSA9IFt0cmVlXTtcbiAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCB2YWx1ZSA9IHN0YWNrLnBvcCgpO1xuICAgIGlmICghaXNDb250YWluZXIodmFsdWUpIHx8IG93bmVkLmhhcyh2YWx1ZSkpIGNvbnRpbnVlO1xuICAgIG93bmVkLmFkZCh2YWx1ZSk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFsdWUpKSBzdGFjay5wdXNoKCh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSk7XG4gIH1cbn1cblxuLyoqIFJldHVybnMgdHJ1ZSBpZiBgb2JqYCBoYXMgYW4gb3duIHByb3BlcnR5IGF0IGV2ZXJ5IHNlZ21lbnQgb2YgYHBhdGhgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5hdGl2ZUhhcyhvYmo6IGFueSwgcGF0aDogc3RyaW5nIHwgKHN0cmluZyB8IG51bWJlcilbXSk6IGJvb2xlYW4ge1xuICBjb25zdCBzZWdzID0gdG9TZWdtZW50cyhwYXRoKTtcbiAgbGV0IGN1cnIgPSBvYmo7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2Vncy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChjdXJyID09IG51bGwgfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjdXJyLCBzZWdzW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpIDwgc2Vncy5sZW5ndGggLSAxKSBjdXJyID0gY3VycltzZWdzW2ldXTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBEZWVwIG1lcmdlIHdoZXJlIGRlc3RpbmF0aW9uIHdpbnMgZm9yIGFueSBkZWZpbmVkIHZhbHVlLlxuICogRmlsbHMgbWlzc2luZyBrZXlzIGZyb20gYHNyY2AsIGJ1dCBuZXZlciBvdmVyd3JpdGVzIGRlZmluZWQga2V5cyBpbiBgZHN0YC5cbiAqIEFycmF5cyBhcmUgbm90IHJlY3Vyc2VkIOKAlCBkc3QgYXJyYXkgYWx3YXlzIHdpbnMgd2hlbiBwcmVzZW50LlxuICpcbiAqIFJlcGxhY2VzOiBgbWVyZ2VXaXRoKGRzdCwgc3JjLCAob2JqVmFsdWUpID0+IG9ialZhbHVlICE9PSB1bmRlZmluZWQgPyBvYmpWYWx1ZSA6IHVuZGVmaW5lZClgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNvbnRleHRXaW5zKGRzdDogYW55LCBzcmM6IGFueSk6IGFueSB7XG4gIGlmICghc3JjIHx8IHR5cGVvZiBzcmMgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoc3JjKSkge1xuICAgIHJldHVybiBkc3QgIT09IHVuZGVmaW5lZCA/IGRzdCA6IHNyYztcbiAgfVxuICBjb25zdCBvdXQ6IGFueSA9IGRzdCAhPSBudWxsICYmIHR5cGVvZiBkc3QgPT09ICdvYmplY3QnID8geyAuLi5kc3QgfSA6IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzcmMpKSB7XG4gICAgaWYgKERFTklFRC5oYXMoa2V5KSkgY29udGludWU7XG4gICAgY29uc3QgZHN0VmFsID0gb3duQ2hpbGQob3V0LCBrZXkpO1xuICAgIGlmIChkc3RWYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gZHN0IHdpbnM7IHJlY3Vyc2Ugb25seSBpZiBib3RoIHNpZGVzIGFyZSBwbGFpbiBvYmplY3RzXG4gICAgICBpZiAoXG4gICAgICAgIGRzdFZhbCAhPT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2YgZHN0VmFsID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAhQXJyYXkuaXNBcnJheShkc3RWYWwpICYmXG4gICAgICAgIHNyY1trZXldICE9PSBudWxsICYmXG4gICAgICAgIHR5cGVvZiBzcmNba2V5XSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgIUFycmF5LmlzQXJyYXkoc3JjW2tleV0pXG4gICAgICApIHtcbiAgICAgICAgcHV0T3duKG91dCwga2V5LCBtZXJnZUNvbnRleHRXaW5zKGRzdFZhbCwgc3JjW2tleV0pKTtcbiAgICAgIH1cbiAgICAgIC8vIGVsc2Uga2VlcCBkc3RWYWwgdW5jaGFuZ2VkXG4gICAgfSBlbHNlIHtcbiAgICAgIHB1dE93bihvdXQsIGtleSwgc3JjW2tleV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIl19
|
package/dist/lib/memory/utils.js
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
*/
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
19
|
exports.getNestedValue = exports.updateValue = exports.updateNestedValue = exports.setNestedValue = exports.isDeniedWritePath = exports.getRunAndGlobalPaths = exports.supersededByNextSet = exports.nextGeneration = exports.dryFold = exports.applySmartMergeInto = exports.applySmartMerge = exports.pathSegments = exports.normalisePath = exports.DELIM = exports.deepSmartMerge = exports.deepEqual = void 0;
|
|
20
|
+
const ownData_js_1 = require("../capture/ownData.js");
|
|
20
21
|
const pathOps_js_1 = require("./pathOps.js");
|
|
21
22
|
var equality_js_1 = require("./equality.js");
|
|
22
23
|
Object.defineProperty(exports, "deepEqual", { enumerable: true, get: function () { return equality_js_1.deepEqual; } });
|
|
@@ -75,15 +76,6 @@ function isDeniedWritePath(address = [], path = [], field) {
|
|
|
75
76
|
return prefix.some(pathOps_js_1.isDeniedSegment) || path.some(pathOps_js_1.isDeniedSegment) || (0, pathOps_js_1.isDeniedSegment)(field);
|
|
76
77
|
}
|
|
77
78
|
exports.isDeniedWritePath = isDeniedWritePath;
|
|
78
|
-
/** Keep existing own-property behavior; a missing slot must not call an inherited setter. */
|
|
79
|
-
function setOwnValue(object, key, value) {
|
|
80
|
-
if (Object.prototype.hasOwnProperty.call(object, key)) {
|
|
81
|
-
object[key] = value;
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
Object.defineProperty(object, key, { value, enumerable: true, writable: true, configurable: true });
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
79
|
/**
|
|
88
80
|
* The container at `address` + `path` inside `obj`, each missing one created
|
|
89
81
|
* on the way: the one AT the address from `defaultValues` when given, every
|
|
@@ -95,7 +87,7 @@ function containerAt(obj, address = [], path = [], defaultValues) {
|
|
|
95
87
|
for (let i = 0; i < segments.length; i++) {
|
|
96
88
|
const key = segments[i];
|
|
97
89
|
if (!Object.prototype.hasOwnProperty.call(current, key)) {
|
|
98
|
-
setOwnValue(current, key, i === address.length - 1 && defaultValues ? defaultValues : {});
|
|
90
|
+
(0, ownData_js_1.setOwnValue)(current, key, i === address.length - 1 && defaultValues ? defaultValues : {});
|
|
99
91
|
}
|
|
100
92
|
current = current[key];
|
|
101
93
|
}
|
|
@@ -108,7 +100,7 @@ function containerAt(obj, address = [], path = [], defaultValues) {
|
|
|
108
100
|
function setNestedValue(obj, address, path, field, value, defaultValues) {
|
|
109
101
|
if (isDeniedWritePath(address, path, field))
|
|
110
102
|
return obj;
|
|
111
|
-
setOwnValue(containerAt(obj, address, path, defaultValues), field, value);
|
|
103
|
+
(0, ownData_js_1.setOwnValue)(containerAt(obj, address, path, defaultValues), field, value);
|
|
112
104
|
return obj;
|
|
113
105
|
}
|
|
114
106
|
exports.setNestedValue = setNestedValue;
|
|
@@ -146,19 +138,19 @@ function updateValue(object, key, value) {
|
|
|
146
138
|
return;
|
|
147
139
|
if (Array.isArray(value)) {
|
|
148
140
|
if (value.length === 0) {
|
|
149
|
-
setOwnValue(object, key, value); // clear: [] replaces whatever was there
|
|
141
|
+
(0, ownData_js_1.setOwnValue)(object, key, value); // clear: [] replaces whatever was there
|
|
150
142
|
}
|
|
151
143
|
else {
|
|
152
144
|
const cur = Object.prototype.hasOwnProperty.call(object, key) ? object[key] : undefined;
|
|
153
|
-
setOwnValue(object, key, cur === undefined ? value : [...cur, ...value]);
|
|
145
|
+
(0, ownData_js_1.setOwnValue)(object, key, cur === undefined ? value : [...cur, ...value]);
|
|
154
146
|
}
|
|
155
147
|
}
|
|
156
148
|
else if (value && typeof value === 'object' && Object.keys(value).length) {
|
|
157
149
|
const cur = Object.prototype.hasOwnProperty.call(object, key) ? object[key] : undefined;
|
|
158
|
-
setOwnValue(object, key, cur === undefined ? value : { ...cur, ...value });
|
|
150
|
+
(0, ownData_js_1.setOwnValue)(object, key, cur === undefined ? value : { ...cur, ...value });
|
|
159
151
|
}
|
|
160
152
|
else {
|
|
161
|
-
setOwnValue(object, key, value);
|
|
153
|
+
(0, ownData_js_1.setOwnValue)(object, key, value);
|
|
162
154
|
}
|
|
163
155
|
}
|
|
164
156
|
exports.updateValue = updateValue;
|
|
@@ -175,4 +167,4 @@ function getNestedValue(root, path, field) {
|
|
|
175
167
|
return undefined;
|
|
176
168
|
}
|
|
177
169
|
exports.getNestedValue = getNestedValue;
|
|
178
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL21lbW9yeS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHOzs7QUFFSCw2Q0FBa0U7QUFJbEUsNkNBQTBDO0FBQWpDLHdHQUFBLFNBQVMsT0FBQTtBQUNsQix1Q0FBNEM7QUFBbkMsMEdBQUEsY0FBYyxPQUFBO0FBQ3ZCLHVDQUFnRTtBQUF2RCxpR0FBQSxLQUFLLE9BQUE7QUFBRSx5R0FBQSxhQUFhLE9BQUE7QUFBRSx3R0FBQSxZQUFZLE9BQUE7QUFDM0MsdUNBQWdIO0FBQXZHLDJHQUFBLGVBQWUsT0FBQTtBQUFFLCtHQUFBLG1CQUFtQixPQUFBO0FBQUUsbUdBQUEsT0FBTyxPQUFBO0FBQUUsMEdBQUEsY0FBYyxPQUFBO0FBQUUsK0dBQUEsbUJBQW1CLE9BQUE7QUFJM0Y7Ozs7O0dBS0c7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxVQUE2QixFQUFFLEVBQUUsT0FBNEIsRUFBRTtJQUNsRyxPQUFPO1FBQ0wsT0FBTyxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQzdFLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0tBQ3RCLENBQUM7QUFDSixDQUFDO0FBTEQsb0RBS0M7QUFFRCxvSEFBb0g7QUFDcEgsU0FBUyxTQUFTLENBQUMsT0FBMEI7SUFDM0MsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUFFLE9BQU8sT0FBTyxDQUFDO0lBQzNDLE1BQU0sSUFBSSxTQUFTLENBQ2pCLHdEQUF3RCxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sT0FBTyxFQUFFLENBQ3JHLENBQUM7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QUksS0FBSyxTQUFTO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDM0QsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbkcsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFQRCx3Q0FPQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogdXRpbHMudHMg4oCUIG5lc3RlZC1vYmplY3QgaGVscGVycyBmb3IgdGhlIGhlYXAsIGFuZCB0aGUgbWVtb3J5IGxlYXZlcycgb25lXG4gKiByZS1leHBvcnQgc3VyZmFjZS5cbiAqXG4gKiBUaGUgaGVscGVycyBoZXJlIChgc2V0TmVzdGVkVmFsdWVgLCBgdXBkYXRlTmVzdGVkVmFsdWVgLCBgdXBkYXRlVmFsdWVgLFxuICogYGdldE5lc3RlZFZhbHVlYCkgd2FsayBhIG5lc3RlZCBvYmplY3QgYnkgcGF0aCB3aXRoXG4gKiBwcm90b3R5cGUtcG9sbHV0aW9uIHByb3RlY3Rpb24uIEV2ZXJ5dGhpbmcgZWxzZSB0aGlzIGZpbGUgdXNlZCB0byBob2xkIGhhcyBhblxuICogb3duZXIgb2YgaXRzIG93biBhbmQgaXMgcmUtZXhwb3J0ZWQsIHNvIG5vIGltcG9ydGVyIG1vdmVkOiB0aGUgcGF0aCBjb2RlY1xuICogKGBwYXRocy50c2ApLCBzdHJ1Y3R1cmFsIGVxdWFsaXR5IChgZXF1YWxpdHkudHNgKSBhbmQgdGhlIHVuaW9uIG1lcmdlXG4gKiAoYG1lcmdlLnRzYCkgYXQgTDAsIGFuZCB0aGUgdmVyYiBsYXcgKGB2ZXJicy50c2ApIGF0IEwxIOKAlCBgYXBwbHlTbWFydE1lcmdlYCxcbiAqIGBuZXh0R2VuZXJhdGlvbmAsIGBhcHBseVNtYXJ0TWVyZ2VJbnRvYCwgYGRyeUZvbGRgLCBgc3VwZXJzZWRlZEJ5TmV4dFNldGAuXG4gKiBUaGUgbG9nJ3Mgc2NydWIsIGByZWRhY3RQYXRjaGAsIG1vdmVkIG91dCBpbiA5LjMzLjA7IGl0IGlzIHRoZSByZWNvcmQncyBvd24sIGBzY3J1Yi50c2AgKEM0KS5cbiAqIFRoZSB3cml0ZXJzIHRha2UgYW4gQUREUkVTUywgYSBwYXRoIHByZWZpeCB0aGVpciBjYWxsZXIgY29tcHV0ZWQsIGFuZCBuZXZlclxuICogbmFtZSBvbmUgKEMyOiB0aGUgZW5naW5lIGRlY2lkZXMgd2hlcmUgYSBzdGFnZSB3cml0ZXMsIGBydW5BZGRyZXNzLnRzIMK3IHJ1bkFkZHJlc3NgKS5cbiAqIFplcm8gZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLlxuICovXG5cbmltcG9ydCB7IGlzRGVuaWVkU2VnbWVudCwgbmF0aXZlR2V0IGFzIF9nZXQgfSBmcm9tICcuL3BhdGhPcHMuanMnO1xuaW1wb3J0IHsgREVMSU0gfSBmcm9tICcuL3BhdGhzLmpzJztcbmltcG9ydCB0eXBlIHsgTWVtb3J5UGF0Y2ggfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IHsgZGVlcEVxdWFsIH0gZnJvbSAnLi9lcXVhbGl0eS5qcyc7XG5leHBvcnQgeyBkZWVwU21hcnRNZXJnZSB9IGZyb20gJy4vbWVyZ2UuanMnO1xuZXhwb3J0IHsgREVMSU0sIG5vcm1hbGlzZVBhdGgsIHBhdGhTZWdtZW50cyB9IGZyb20gJy4vcGF0aHMuanMnO1xuZXhwb3J0IHsgYXBwbHlTbWFydE1lcmdlLCBhcHBseVNtYXJ0TWVyZ2VJbnRvLCBkcnlGb2xkLCBuZXh0R2VuZXJhdGlvbiwgc3VwZXJzZWRlZEJ5TmV4dFNldCB9IGZyb20gJy4vdmVyYnMuanMnO1xuXG50eXBlIE5lc3RlZE9iamVjdCA9IHsgW2tleTogc3RyaW5nXTogYW55IH07XG5cbi8qKlxuICogVGhlIHR3byBwbGFjZXMgYSB2YWx1ZSBhdCBgcGF0aGAgY2FuIHNpdDogdW5kZXIgYGFkZHJlc3NgIChgcnVuUGF0aGAsIGFic2VudFxuICogZm9yIHRoZSByb290IGFkZHJlc3MgYFtdYCkgYW5kIGF0IHRoZSByb290IChgZ2xvYmFsUGF0aGApLiBgYWRkcmVzc2AgaXMgYVxuICogcGF0aCBwcmVmaXggdGhlIGNhbGxlciBjb21wdXRlZCDigJQgZm9yIHRoZSBlbmdpbmUsIGEgZnJhbWUncyBydW4gbmFtZXNwYWNlXG4gKiAoYHJ1bkFkZHJlc3MudHMgwrcgcnVuQWRkcmVzc2AsIEMyKSwgaGVsZCBieSBpdHMgcmVjb3JkIGZyYW1lIChgUmVjb3JkRnJhbWUgwrcgYWRkcmVzc2AsIEMzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJ1bkFuZEdsb2JhbFBhdGhzKGFkZHJlc3M6IHJlYWRvbmx5IHN0cmluZ1tdID0gW10sIHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW10gPSBbXSkge1xuICByZXR1cm4ge1xuICAgIHJ1blBhdGg6IGFkZHJlc3NPZihhZGRyZXNzKS5sZW5ndGggPiAwID8gcGF0aFVuZGVyKGFkZHJlc3MsIHBhdGgpIDogdW5kZWZpbmVkLFxuICAgIGdsb2JhbFBhdGg6IFsuLi5wYXRoXSxcbiAgfTtcbn1cblxuLyoqIEFuIGFkZHJlc3MgaXMgYW4gYXJyYXkuIEEgcnVuIGlkIHN0aWxsIHBhc3NlZCBpbiBpdHMgcGxhY2UgKEMyKSBpcyByZWZ1c2VkLCBuZXZlciBzcHJlYWQgaW50byBpdHMgY2hhcmFjdGVycy4gKi9cbmZ1bmN0aW9uIGFkZHJlc3NPZihhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYWRkcmVzcykpIHJldHVybiBhZGRyZXNzO1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgIGBmb290cHJpbnRqczogYW4gYWRkcmVzcyBpcyBhbiBhcnJheSBwYXRoIHByZWZpeCwgZ290ICR7YWRkcmVzcyA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBhZGRyZXNzfWAsXG4gICk7XG59XG5cbi8qKlxuICogYGFkZHJlc3NgIHRoZW4gYHBhdGhgLCBhcyBvbmUgbmV3IGFycmF5LiBBbiBpbmRleCBsb29wLCBiZWNhdXNlIHRoZSBkb3VibGVcbiAqIHNwcmVhZCBgWy4uLmFkZHJlc3MsIC4uLnBhdGhdYCBjb3N0cyB0d2ljZSBhcyBtdWNoIGFuZCBhIGZyYW1lIGJ1aWxkcyBvbmUgb25cbiAqIGV2ZXJ5IHJlYWQgaXQgc2VydmVzIGZyb20gbGl2ZSBzdGF0ZSAoYSBmb3JrIGNoaWxkIHJlYWRpbmcgYSByb290IGtleSkuXG4gKi9cbmZ1bmN0aW9uIHBhdGhVbmRlcihhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSwgcGF0aDogcmVhZG9ubHkgKHN0cmluZyB8IG51bWJlcilbXSk6IChzdHJpbmcgfCBudW1iZXIpW10ge1xuICBjb25zdCBvdXQgPSBuZXcgQXJyYXk8c3RyaW5nIHwgbnVtYmVyPihhZGRyZXNzLmxlbmd0aCArIHBhdGgubGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhZGRyZXNzLmxlbmd0aDsgaSsrKSBvdXRbaV0gPSBhZGRyZXNzW2ldO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIG91dFthZGRyZXNzLmxlbmd0aCArIGldID0gcGF0aFtpXTtcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBSZWZ1c2UgdGhlIFdIT0xFIHNlbGVjdG9yIGJlZm9yZSBjcmVhdGluZyBhIGNvbnRhaW5lciBvciBjb3B5aW5nIGEgZ2VuZXJhdGlvbi5cbiAqIFRoZSBhZGRyZXNzJ3MgYXJyYXkgY29udHJhY3QgaXMgY2hlY2tlZCBldmVuIHdoZW4gYW5vdGhlciBzZWxlY3RvciBpcyBkZW5pZWQuXG4gKiBQYXlsb2FkIGtleXMgYXJlIGRhdGEsIG5vdCBzZWxlY3RvcnMsIGFuZCBhcmUgZGVsaWJlcmF0ZWx5IG5vdCBpbnNwZWN0ZWQuXG4gKiBAaW50ZXJuYWwgU2hhcmVkIGJ5IHRoZSBuZXN0ZWQgd3JpdGVycyBhbmQgU2hhcmVkTWVtb3J5J3MgcHJlLWNvcHkgYm91bmRhcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RlbmllZFdyaXRlUGF0aChcbiAgYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10gPSBbXSxcbiAgcGF0aDogcmVhZG9ubHkgKHN0cmluZyB8IG51bWJlcilbXSA9IFtdLFxuICBmaWVsZDogc3RyaW5nIHwgbnVtYmVyLFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IHByZWZpeCA9IGFkZHJlc3NPZihhZGRyZXNzKTtcbiAgcmV0dXJuIHByZWZpeC5zb21lKGlzRGVuaWVkU2VnbWVudCkgfHwgcGF0aC5zb21lKGlzRGVuaWVkU2VnbWVudCkgfHwgaXNEZW5pZWRTZWdtZW50KGZpZWxkKTtcbn1cblxuLyoqIEtlZXAgZXhpc3Rpbmcgb3duLXByb3BlcnR5IGJlaGF2aW9yOyBhIG1pc3Npbmcgc2xvdCBtdXN0IG5vdCBjYWxsIGFuIGluaGVyaXRlZCBzZXR0ZXIuICovXG5mdW5jdGlvbiBzZXRPd25WYWx1ZShvYmplY3Q6IE5lc3RlZE9iamVjdCwga2V5OiBzdHJpbmcgfCBudW1iZXIsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKSB7XG4gICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHsgdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgY29udGFpbmVyIGF0IGBhZGRyZXNzYCArIGBwYXRoYCBpbnNpZGUgYG9iamAsIGVhY2ggbWlzc2luZyBvbmUgY3JlYXRlZFxuICogb24gdGhlIHdheTogdGhlIG9uZSBBVCB0aGUgYWRkcmVzcyBmcm9tIGBkZWZhdWx0VmFsdWVzYCB3aGVuIGdpdmVuLCBldmVyeVxuICogb3RoZXIgb25lIGVtcHR5LiBUaGUgb25lIHdhbGsgYm90aCBuZXN0ZWQgd3JpdGVycyBzaGFyZS5cbiAqL1xuZnVuY3Rpb24gY29udGFpbmVyQXQoXG4gIG9iajogTmVzdGVkT2JqZWN0LFxuICBhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSA9IFtdLFxuICBwYXRoOiByZWFkb25seSAoc3RyaW5nIHwgbnVtYmVyKVtdID0gW10sXG4gIGRlZmF1bHRWYWx1ZXM/OiB1bmtub3duLFxuKTogTmVzdGVkT2JqZWN0IHtcbiAgY29uc3Qgc2VnbWVudHMgPSBwYXRoVW5kZXIoYWRkcmVzc09mKGFkZHJlc3MpLCBwYXRoKTtcbiAgbGV0IGN1cnJlbnQgPSBvYmo7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBrZXkgPSBzZWdtZW50c1tpXTtcbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjdXJyZW50LCBrZXkpKSB7XG4gICAgICBzZXRPd25WYWx1ZShjdXJyZW50LCBrZXksIGkgPT09IGFkZHJlc3MubGVuZ3RoIC0gMSAmJiBkZWZhdWx0VmFsdWVzID8gZGVmYXVsdFZhbHVlcyA6IHt9KTtcbiAgICB9XG4gICAgY3VycmVudCA9IGN1cnJlbnRba2V5XTtcbiAgfVxuICByZXR1cm4gY3VycmVudDtcbn1cblxuLyoqXG4gKiBTZXRzIGEgdmFsdWUgYXQgYSBuZXN0ZWQgcGF0aCB1bmRlciBgYWRkcmVzc2AsIGNyZWF0aW5nIGludGVybWVkaWF0ZSBvYmplY3RzIGFzIG5lZWRlZC5cbiAqIEEgZGVuaWVkIGFkZHJlc3MvcGF0aC9maWVsZCBsZWF2ZXMgYG9iamAgdW5jaGFuZ2VkLCBpbmNsdWRpbmcgaXRzIHByb3RvdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldE5lc3RlZFZhbHVlPFQ+KFxuICBvYmo6IE5lc3RlZE9iamVjdCxcbiAgYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10sXG4gIHBhdGg6IHN0cmluZ1tdLFxuICBmaWVsZDogc3RyaW5nLFxuICB2YWx1ZTogVCxcbiAgZGVmYXVsdFZhbHVlcz86IHVua25vd24sXG4pOiBOZXN0ZWRPYmplY3Qge1xuICBpZiAoaXNEZW5pZWRXcml0ZVBhdGgoYWRkcmVzcywgcGF0aCwgZmllbGQpKSByZXR1cm4gb2JqO1xuICBzZXRPd25WYWx1ZShjb250YWluZXJBdChvYmosIGFkZHJlc3MsIHBhdGgsIGRlZmF1bHRWYWx1ZXMpLCBmaWVsZCwgdmFsdWUpO1xuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgYSB2YWx1ZSBpbiB0aGUgb2JqZWN0IGF0IGEgbmVzdGVkIHBhdGggdW5kZXIgYGFkZHJlc3NgLlxuICogQSBkZW5pZWQgYWRkcmVzcy9wYXRoL2ZpZWxkIGxlYXZlcyBgb2JqYCB1bmNoYW5nZWQsIGluY2x1ZGluZyBpdHMgcHJvdG90eXBlLlxuICogLSBBcnJheXM6IGNvbmNhdGVuYXRlXG4gKiAtIE9iamVjdHM6IHNoYWxsb3cgbWVyZ2UgYXQgZWFjaCBsZXZlbFxuICogLSBQcmltaXRpdmVzOiByZXBsYWNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVOZXN0ZWRWYWx1ZTxUPihcbiAgb2JqOiBhbnksXG4gIGFkZHJlc3M6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICBwYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdLFxuICBmaWVsZDogc3RyaW5nIHwgbnVtYmVyLFxuICB2YWx1ZTogVCxcbiAgZGVmYXVsdFZhbHVlcz86IHVua25vd24sXG4pOiBhbnkge1xuICBpZiAoaXNEZW5pZWRXcml0ZVBhdGgoYWRkcmVzcywgcGF0aCwgZmllbGQpKSByZXR1cm4gb2JqO1xuICB1cGRhdGVWYWx1ZShjb250YWluZXJBdChvYmosIGFkZHJlc3MsIHBhdGgsIGRlZmF1bHRWYWx1ZXMpLCBmaWVsZCwgdmFsdWUpO1xuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEluLXBsYWNlIHZhbHVlIHVwZGF0ZSB3aXRoIG1lcmdlIHNlbWFudGljcy5cbiAqIC0gQXJyYXlzIChub24tZW1wdHkpOiBjb25jYXRlbmF0ZSBvbnRvIGV4aXN0aW5nXG4gKiAtIEFycmF5cyAoZW1wdHkpOiAgICAgZGlyZWN0IHJlcGxhY2Ug4oCUIHdyaXRpbmcgYFtdYCBjbGVhcnMgdGhlIGZpZWxkXG4gKiAtIE9iamVjdHMgKG5vbi1lbXB0eSk6IHNoYWxsb3cgbWVyZ2UgKHNwcmVhZClcbiAqIC0gT2JqZWN0cyAoZW1wdHkpOiAgICBkaXJlY3QgcmVwbGFjZSDigJQgd3JpdGluZyBge31gIGNsZWFycyB0aGUgZmllbGRcbiAqIC0gUHJpbWl0aXZlczogZGlyZWN0IGFzc2lnbm1lbnRcbiAqXG4gKiBOb3RlIG9uIGVtcHR5IGFycmF5czogYm90aCBgdmFsdWUgJiYgQXJyYXkuaXNBcnJheSh2YWx1ZSlgIGFuZFxuICogYEFycmF5LmlzQXJyYXkodmFsdWUpYCBldmFsdWF0ZSB0aGUgc2FtZSBmb3IgYXJyYXlzIOKAlCBgW11gIGlzIHRydXRoeSBpblxuICogSmF2YVNjcmlwdCwgc28gdGhlIGAmJmAgZ3VhcmQgd2FzIG5ldmVyIHRoZSBpc3N1ZS4gVGhlIGFjdHVhbCBidWcgd2FzIHRoZVxuICogY29uY2F0IHBhdGg6IGBbLi4uY3VyLCAuLi5bXV1gIHNpbGVudGx5IHJldHVybmVkIGBjdXJgIHVuY2hhbmdlZCB3aGVuIGB2YWx1ZWBcbiAqIHdhcyBgW11gLCBtYWtpbmcgYHVwZGF0ZVZhbHVlKG9iaiwgJ3RhZ3MnLCBbXSlgIGEgbm8tb3AgaW5zdGVhZCBvZiBhIGNsZWFyLlxuICogVGhlIGZpeCBpcyB0aGUgZXhwbGljaXQgYHZhbHVlLmxlbmd0aCA9PT0gMGAgZWFybHktcmV0dXJuIGJyYW5jaC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZhbHVlKG9iamVjdDogYW55LCBrZXk6IHN0cmluZyB8IG51bWJlciwgdmFsdWU6IGFueSk6IHZvaWQge1xuICBpZiAoaXNEZW5pZWRTZWdtZW50KGtleSkpIHJldHVybjtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgc2V0T3duVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTsgLy8gY2xlYXI6IFtdIHJlcGxhY2VzIHdoYXRldmVyIHdhcyB0aGVyZVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjdXIgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpID8gb2JqZWN0W2tleV0gOiB1bmRlZmluZWQ7XG4gICAgICBzZXRPd25WYWx1ZShvYmplY3QsIGtleSwgY3VyID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IFsuLi5jdXIsIC4uLnZhbHVlXSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCkge1xuICAgIGNvbnN0IGN1ciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgPyBvYmplY3Rba2V5XSA6IHVuZGVmaW5lZDtcbiAgICBzZXRPd25WYWx1ZShvYmplY3QsIGtleSwgY3VyID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHsgLi4uY3VyLCAuLi52YWx1ZSB9KTtcbiAgfSBlbHNlIHtcbiAgICBzZXRPd25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpO1xuICB9XG59XG5cbi8qKlxuICogR2V0cyBhIHZhbHVlIGF0IGEgbmVzdGVkIHBhdGggd2l0aCBwcm90b3R5cGUtcG9sbHV0aW9uIHByb3RlY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXN0ZWRWYWx1ZShyb290OiBhbnksIHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW10sIGZpZWxkPzogc3RyaW5nIHwgbnVtYmVyKTogYW55IHtcbiAgY29uc3Qgbm9kZSA9IHBhdGggJiYgcGF0aC5sZW5ndGggPiAwID8gX2dldChyb290LCBwYXRoKSA6IHJvb3Q7XG4gIGlmIChmaWVsZCA9PT0gdW5kZWZpbmVkIHx8IG5vZGUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIG5vZGU7XG4gIGlmIChub2RlICE9PSBudWxsICYmIHR5cGVvZiBub2RlID09PSAnb2JqZWN0JyAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgZmllbGQpKSB7XG4gICAgcmV0dXJuIG5vZGVbZmllbGRdO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4iXX0=
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL21lbW9yeS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHOzs7QUFFSCxzREFBb0Q7QUFDcEQsNkNBQWtFO0FBSWxFLDZDQUEwQztBQUFqQyx3R0FBQSxTQUFTLE9BQUE7QUFDbEIsdUNBQTRDO0FBQW5DLDBHQUFBLGNBQWMsT0FBQTtBQUN2Qix1Q0FBZ0U7QUFBdkQsaUdBQUEsS0FBSyxPQUFBO0FBQUUseUdBQUEsYUFBYSxPQUFBO0FBQUUsd0dBQUEsWUFBWSxPQUFBO0FBQzNDLHVDQUFnSDtBQUF2RywyR0FBQSxlQUFlLE9BQUE7QUFBRSwrR0FBQSxtQkFBbUIsT0FBQTtBQUFFLG1HQUFBLE9BQU8sT0FBQTtBQUFFLDBHQUFBLGNBQWMsT0FBQTtBQUFFLCtHQUFBLG1CQUFtQixPQUFBO0FBSTNGOzs7OztHQUtHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQUMsVUFBNkIsRUFBRSxFQUFFLE9BQTRCLEVBQUU7SUFDbEcsT0FBTztRQUNMLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUM3RSxVQUFVLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztLQUN0QixDQUFDO0FBQ0osQ0FBQztBQUxELG9EQUtDO0FBRUQsb0hBQW9IO0FBQ3BILFNBQVMsU0FBUyxDQUFDLE9BQTBCO0lBQzNDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFBRSxPQUFPLE9BQU8sQ0FBQztJQUMzQyxNQUFNLElBQUksU0FBUyxDQUNqQix3REFBd0QsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLE9BQU8sRUFB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bHBlcnMgZm9yIHRoZSBoZWFwLCBhbmQgdGhlIG1lbW9yeSBsZWF2ZXMnIG9uZVxuICogcmUtZXhwb3J0IHN1cmZhY2UuXG4gKlxuICogVGhlIGhlbHBlcnMgaGVyZSAoYHNldE5lc3RlZFZhbHVlYCwgYHVwZGF0ZU5lc3RlZFZhbHVlYCwgYHVwZGF0ZVZhbHVlYCxcbiAqIGBnZXROZXN0ZWRWYWx1ZWApIHdhbGsgYSBuZXN0ZWQgb2JqZWN0IGJ5IHBhdGggd2l0aFxuICogcHJvdG90eXBlLXBvbGx1dGlvbiBwcm90ZWN0aW9uLiBFdmVyeXRoaW5nIGVsc2UgdGhpcyBmaWxlIHVzZWQgdG8gaG9sZCBoYXMgYW5cbiAqIG93bmVyIG9mIGl0cyBvd24gYW5kIGlzIHJlLWV4cG9ydGVkLCBzbyBubyBpbXBvcnRlciBtb3ZlZDogdGhlIHBhdGggY29kZWNcbiAqIChgcGF0aHMudHNgKSwgc3RydWN0dXJhbCBlcXVhbGl0eSAoYGVxdWFsaXR5LnRzYCkgYW5kIHRoZSB1bmlvbiBtZXJnZVxuICogKGBtZXJnZS50c2ApIGF0IEwwLCBhbmQgdGhlIHZlcmIgbGF3IChgdmVyYnMudHNgKSBhdCBMMSDigJQgYGFwcGx5U21hcnRNZXJnZWAsXG4gKiBgbmV4dEdlbmVyYXRpb25gLCBgYXBwbHlTbWFydE1lcmdlSW50b2AsIGBkcnlGb2xkYCwgYHN1cGVyc2VkZWRCeU5leHRTZXRgLlxuICogVGhlIGxvZydzIHNjcnViLCBgcmVkYWN0UGF0Y2hgLCBtb3ZlZCBvdXQgaW4gOS4zMy4wOyBpdCBpcyB0aGUgcmVjb3JkJ3Mgb3duLCBgc2NydWIudHNgIChDNCkuXG4gKiBUaGUgd3JpdGVycyB0YWtlIGFuIEFERFJFU1MsIGEgcGF0aCBwcmVmaXggdGhlaXIgY2FsbGVyIGNvbXB1dGVkLCBhbmQgbmV2ZXJcbiAqIG5hbWUgb25lIChDMjogdGhlIGVuZ2luZSBkZWNpZGVzIHdoZXJlIGEgc3RhZ2Ugd3JpdGVzLCBgcnVuQWRkcmVzcy50cyDCtyBydW5BZGRyZXNzYCkuXG4gKiBaZXJvIGV4dGVybmFsIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5pbXBvcnQgeyBzZXRPd25WYWx1ZSB9IGZyb20gJy4uL2NhcHR1cmUvb3duRGF0YS5qcyc7XG5pbXBvcnQgeyBpc0RlbmllZFNlZ21lbnQsIG5hdGl2ZUdldCBhcyBfZ2V0IH0gZnJvbSAnLi9wYXRoT3BzLmpzJztcbmltcG9ydCB7IERFTElNIH0gZnJvbSAnLi9wYXRocy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1lbW9yeVBhdGNoIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmV4cG9ydCB7IGRlZXBFcXVhbCB9IGZyb20gJy4vZXF1YWxpdHkuanMnO1xuZXhwb3J0IHsgZGVlcFNtYXJ0TWVyZ2UgfSBmcm9tICcuL21lcmdlLmpzJztcbmV4cG9ydCB7IERFTElNLCBub3JtYWxpc2VQYXRoLCBwYXRoU2VnbWVudHMgfSBmcm9tICcuL3BhdGhzLmpzJztcbmV4cG9ydCB7IGFwcGx5U21hcnRNZXJnZSwgYXBwbHlTbWFydE1lcmdlSW50bywgZHJ5Rm9sZCwgbmV4dEdlbmVyYXRpb24sIHN1cGVyc2VkZWRCeU5leHRTZXQgfSBmcm9tICcuL3ZlcmJzLmpzJztcblxudHlwZSBOZXN0ZWRPYmplY3QgPSB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuXG4vKipcbiAqIFRoZSB0d28gcGxhY2VzIGEgdmFsdWUgYXQgYHBhdGhgIGNhbiBzaXQ6IHVuZGVyIGBhZGRyZXNzYCAoYHJ1blBhdGhgLCBhYnNlbnRcbiAqIGZvciB0aGUgcm9vdCBhZGRyZXNzIGBbXWApIGFuZCBhdCB0aGUgcm9vdCAoYGdsb2JhbFBhdGhgKS4gYGFkZHJlc3NgIGlzIGFcbiAqIHBhdGggcHJlZml4IHRoZSBjYWxsZXIgY29tcHV0ZWQg4oCUIGZvciB0aGUgZW5naW5lLCBhIGZyYW1lJ3MgcnVuIG5hbWVzcGFjZVxuICogKGBydW5BZGRyZXNzLnRzIMK3IHJ1bkFkZHJlc3NgLCBDMiksIGhlbGQgYnkgaXRzIHJlY29yZCBmcmFtZSAoYFJlY29yZEZyYW1lIMK3IGFkZHJlc3NgLCBDMykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSdW5BbmRHbG9iYWxQYXRocyhhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSA9IFtdLCBwYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0gW10pIHtcbiAgcmV0dXJuIHtcbiAgICBydW5QYXRoOiBhZGRyZXNzT2YoYWRkcmVzcykubGVuZ3RoID4gMCA/IHBhdGhVbmRlcihhZGRyZXNzLCBwYXRoKSA6IHVuZGVmaW5lZCxcbiAgICBnbG9iYWxQYXRoOiBbLi4ucGF0aF0sXG4gIH07XG59XG5cbi8qKiBBbiBhZGRyZXNzIGlzIGFuIGFycmF5LiBBIHJ1biBpZCBzdGlsbCBwYXNzZWQgaW4gaXRzIHBsYWNlIChDMikgaXMgcmVmdXNlZCwgbmV2ZXIgc3ByZWFkIGludG8gaXRzIGNoYXJhY3RlcnMuICovXG5mdW5jdGlvbiBhZGRyZXNzT2YoYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10pOiByZWFkb25seSBzdHJpbmdbXSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFkZHJlc3MpKSByZXR1cm4gYWRkcmVzcztcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICBgZm9vdHByaW50anM6IGFuIGFkZHJlc3MgaXMgYW4gYXJyYXkgcGF0aCBwcmVmaXgsIGdvdCAke2FkZHJlc3MgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgYWRkcmVzc31gLFxuICApO1xufVxuXG4vKipcbiAqIGBhZGRyZXNzYCB0aGVuIGBwYXRoYCwgYXMgb25lIG5ldyBhcnJheS4gQW4gaW5kZXggbG9vcCwgYmVjYXVzZSB0aGUgZG91YmxlXG4gKiBzcHJlYWQgYFsuLi5hZGRyZXNzLCAuLi5wYXRoXWAgY29zdHMgdHdpY2UgYXMgbXVjaCBhbmQgYSBmcmFtZSBidWlsZHMgb25lIG9uXG4gKiBldmVyeSByZWFkIGl0IHNlcnZlcyBmcm9tIGxpdmUgc3RhdGUgKGEgZm9yayBjaGlsZCByZWFkaW5nIGEgcm9vdCBrZXkpLlxuICovXG5mdW5jdGlvbiBwYXRoVW5kZXIoYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10sIHBhdGg6IHJlYWRvbmx5IChzdHJpbmcgfCBudW1iZXIpW10pOiAoc3RyaW5nIHwgbnVtYmVyKVtdIHtcbiAgY29uc3Qgb3V0ID0gbmV3IEFycmF5PHN0cmluZyB8IG51bWJlcj4oYWRkcmVzcy5sZW5ndGggKyBwYXRoLmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYWRkcmVzcy5sZW5ndGg7IGkrKykgb3V0W2ldID0gYWRkcmVzc1tpXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSBvdXRbYWRkcmVzcy5sZW5ndGggKyBpXSA9IHBhdGhbaV07XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogUmVmdXNlIHRoZSBXSE9MRSBzZWxlY3RvciBiZWZvcmUgY3JlYXRpbmcgYSBjb250YWluZXIgb3IgY29weWluZyBhIGdlbmVyYXRpb24uXG4gKiBUaGUgYWRkcmVzcydzIGFycmF5IGNvbnRyYWN0IGlzIGNoZWNrZWQgZXZlbiB3aGVuIGFub3RoZXIgc2VsZWN0b3IgaXMgZGVuaWVkLlxuICogUGF5bG9hZCBrZXlzIGFyZSBkYXRhLCBub3Qgc2VsZWN0b3JzLCBhbmQgYXJlIGRlbGliZXJhdGVseSBub3QgaW5zcGVjdGVkLlxuICogQGludGVybmFsIFNoYXJlZCBieSB0aGUgbmVzdGVkIHdyaXRlcnMgYW5kIFNoYXJlZE1lbW9yeSdzIHByZS1jb3B5IGJvdW5kYXJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEZW5pZWRXcml0ZVBhdGgoXG4gIGFkZHJlc3M6IHJlYWRvbmx5IHN0cmluZ1tdID0gW10sXG4gIHBhdGg6IHJlYWRvbmx5IChzdHJpbmcgfCBudW1iZXIpW10gPSBbXSxcbiAgZmllbGQ6IHN0cmluZyB8IG51bWJlcixcbik6IGJvb2xlYW4ge1xuICBjb25zdCBwcmVmaXggPSBhZGRyZXNzT2YoYWRkcmVzcyk7XG4gIHJldHVybiBwcmVmaXguc29tZShpc0RlbmllZFNlZ21lbnQpIHx8IHBhdGguc29tZShpc0RlbmllZFNlZ21lbnQpIHx8IGlzRGVuaWVkU2VnbWVudChmaWVsZCk7XG59XG5cbi8qKlxuICogVGhlIGNvbnRhaW5lciBhdCBgYWRkcmVzc2AgKyBgcGF0aGAgaW5zaWRlIGBvYmpgLCBlYWNoIG1pc3Npbmcgb25lIGNyZWF0ZWRcbiAqIG9uIHRoZSB3YXk6IHRoZSBvbmUgQVQgdGhlIGFkZHJlc3MgZnJvbSBgZGVmYXVsdFZhbHVlc2Agd2hlbiBnaXZlbiwgZXZlcnlcbiAqIG90aGVyIG9uZSBlbXB0eS4gVGhlIG9uZSB3YWxrIGJvdGggbmVzdGVkIHdyaXRlcnMgc2hhcmUuXG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5lckF0KFxuICBvYmo6IE5lc3RlZE9iamVjdCxcbiAgYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10gPSBbXSxcbiAgcGF0aDogcmVhZG9ubHkgKHN0cmluZyB8IG51bWJlcilbXSA9IFtdLFxuICBkZWZhdWx0VmFsdWVzPzogdW5rbm93bixcbik6IE5lc3RlZE9iamVjdCB7XG4gIGNvbnN0IHNlZ21lbnRzID0gcGF0aFVuZGVyKGFkZHJlc3NPZihhZGRyZXNzKSwgcGF0aCk7XG4gIGxldCBjdXJyZW50ID0gb2JqO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qga2V5ID0gc2VnbWVudHNbaV07XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY3VycmVudCwga2V5KSkge1xuICAgICAgc2V0T3duVmFsdWUoY3VycmVudCwga2V5LCBpID09PSBhZGRyZXNzLmxlbmd0aCAtIDEgJiYgZGVmYXVsdFZhbHVlcyA/IGRlZmF1bHRWYWx1ZXMgOiB7fSk7XG4gICAgfVxuICAgIGN1cnJlbnQgPSBjdXJyZW50W2tleV07XG4gIH1cbiAgcmV0dXJuIGN1cnJlbnQ7XG59XG5cbi8qKlxuICogU2V0cyBhIHZhbHVlIGF0IGEgbmVzdGVkIHBhdGggdW5kZXIgYGFkZHJlc3NgLCBjcmVhdGluZyBpbnRlcm1lZGlhdGUgb2JqZWN0cyBhcyBuZWVkZWQuXG4gKiBBIGRlbmllZCBhZGRyZXNzL3BhdGgvZmllbGQgbGVhdmVzIGBvYmpgIHVuY2hhbmdlZCwgaW5jbHVkaW5nIGl0cyBwcm90b3R5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXROZXN0ZWRWYWx1ZTxUPihcbiAgb2JqOiBOZXN0ZWRPYmplY3QsXG4gIGFkZHJlc3M6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICBwYXRoOiBzdHJpbmdbXSxcbiAgZmllbGQ6IHN0cmluZyxcbiAgdmFsdWU6IFQsXG4gIGRlZmF1bHRWYWx1ZXM/OiB1bmtub3duLFxuKTogTmVzdGVkT2JqZWN0IHtcbiAgaWYgKGlzRGVuaWVkV3JpdGVQYXRoKGFkZHJlc3MsIHBhdGgsIGZpZWxkKSkgcmV0dXJuIG9iajtcbiAgc2V0T3duVmFsdWUoY29udGFpbmVyQXQob2JqLCBhZGRyZXNzLCBwYXRoLCBkZWZhdWx0VmFsdWVzKSwgZmllbGQsIHZhbHVlKTtcbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBVcGRhdGVzIGEgdmFsdWUgaW4gdGhlIG9iamVjdCBhdCBhIG5lc3RlZCBwYXRoIHVuZGVyIGBhZGRyZXNzYC5cbiAqIEEgZGVuaWVkIGFkZHJlc3MvcGF0aC9maWVsZCBsZWF2ZXMgYG9iamAgdW5jaGFuZ2VkLCBpbmNsdWRpbmcgaXRzIHByb3RvdHlwZS5cbiAqIC0gQXJyYXlzOiBjb25jYXRlbmF0ZVxuICogLSBPYmplY3RzOiBzaGFsbG93IG1lcmdlIGF0IGVhY2ggbGV2ZWxcbiAqIC0gUHJpbWl0aXZlczogcmVwbGFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlTmVzdGVkVmFsdWU8VD4oXG4gIG9iajogYW55LFxuICBhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgcGF0aDogKHN0cmluZyB8IG51bWJlcilbXSxcbiAgZmllbGQ6IHN0cmluZyB8IG51bWJlcixcbiAgdmFsdWU6IFQsXG4gIGRlZmF1bHRWYWx1ZXM/OiB1bmtub3duLFxuKTogYW55IHtcbiAgaWYgKGlzRGVuaWVkV3JpdGVQYXRoKGFkZHJlc3MsIHBhdGgsIGZpZWxkKSkgcmV0dXJuIG9iajtcbiAgdXBkYXRlVmFsdWUoY29udGFpbmVyQXQob2JqLCBhZGRyZXNzLCBwYXRoLCBkZWZhdWx0VmFsdWVzKSwgZmllbGQsIHZhbHVlKTtcbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBJbi1wbGFjZSB2YWx1ZSB1cGRhdGUgd2l0aCBtZXJnZSBzZW1hbnRpY3MuXG4gKiAtIEFycmF5cyAobm9uLWVtcHR5KTogY29uY2F0ZW5hdGUgb250byBleGlzdGluZ1xuICogLSBBcnJheXMgKGVtcHR5KTogICAgIGRpcmVjdCByZXBsYWNlIOKAlCB3cml0aW5nIGBbXWAgY2xlYXJzIHRoZSBmaWVsZFxuICogLSBPYmplY3RzIChub24tZW1wdHkpOiBzaGFsbG93IG1lcmdlIChzcHJlYWQpXG4gKiAtIE9iamVjdHMgKGVtcHR5KTogICAgZGlyZWN0IHJlcGxhY2Ug4oCUIHdyaXRpbmcgYHt9YCBjbGVhcnMgdGhlIGZpZWxkXG4gKiAtIFByaW1pdGl2ZXM6IGRpcmVjdCBhc3NpZ25tZW50XG4gKlxuICogTm90ZSBvbiBlbXB0eSBhcnJheXM6IGJvdGggYHZhbHVlICYmIEFycmF5LmlzQXJyYXkodmFsdWUpYCBhbmRcbiAqIGBBcnJheS5pc0FycmF5KHZhbHVlKWAgZXZhbHVhdGUgdGhlIHNhbWUgZm9yIGFycmF5cyDigJQgYFtdYCBpcyB0cnV0aHkgaW5cbiAqIEphdmFTY3JpcHQsIHNvIHRoZSBgJiZgIGd1YXJkIHdhcyBuZXZlciB0aGUgaXNzdWUuIFRoZSBhY3R1YWwgYnVnIHdhcyB0aGVcbiAqIGNvbmNhdCBwYXRoOiBgWy4uLmN1ciwgLi4uW11dYCBzaWxlbnRseSByZXR1cm5lZCBgY3VyYCB1bmNoYW5nZWQgd2hlbiBgdmFsdWVgXG4gKiB3YXMgYFtdYCwgbWFraW5nIGB1cGRhdGVWYWx1ZShvYmosICd0YWdzJywgW10pYCBhIG5vLW9wIGluc3RlYWQgb2YgYSBjbGVhci5cbiAqIFRoZSBmaXggaXMgdGhlIGV4cGxpY2l0IGB2YWx1ZS5sZW5ndGggPT09IDBgIGVhcmx5LXJldHVybiBicmFuY2guXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVWYWx1ZShvYmplY3Q6IGFueSwga2V5OiBzdHJpbmcgfCBudW1iZXIsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgaWYgKGlzRGVuaWVkU2VnbWVudChrZXkpKSByZXR1cm47XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHNldE93blZhbHVlKG9iamVjdCwga2V5LCB2YWx1ZSk7IC8vIGNsZWFyOiBbXSByZXBsYWNlcyB3aGF0ZXZlciB3YXMgdGhlcmVcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY3VyID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSA/IG9iamVjdFtrZXldIDogdW5kZWZpbmVkO1xuICAgICAgc2V0T3duVmFsdWUob2JqZWN0LCBrZXksIGN1ciA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBbLi4uY3VyLCAuLi52YWx1ZV0pO1xuICAgIH1cbiAgfSBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGgpIHtcbiAgICBjb25zdCBjdXIgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpID8gb2JqZWN0W2tleV0gOiB1bmRlZmluZWQ7XG4gICAgc2V0T3duVmFsdWUob2JqZWN0LCBrZXksIGN1ciA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7IC4uLmN1ciwgLi4udmFsdWUgfSk7XG4gIH0gZWxzZSB7XG4gICAgc2V0T3duVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKTtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgYSB2YWx1ZSBhdCBhIG5lc3RlZCBwYXRoIHdpdGggcHJvdG90eXBlLXBvbGx1dGlvbiBwcm90ZWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmVzdGVkVmFsdWUocm9vdDogYW55LCBwYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdLCBmaWVsZD86IHN0cmluZyB8IG51bWJlcik6IGFueSB7XG4gIGNvbnN0IG5vZGUgPSBwYXRoICYmIHBhdGgubGVuZ3RoID4gMCA/IF9nZXQocm9vdCwgcGF0aCkgOiByb290O1xuICBpZiAoZmllbGQgPT09IHVuZGVmaW5lZCB8fCBub2RlID09PSB1bmRlZmluZWQpIHJldHVybiBub2RlO1xuICBpZiAobm9kZSAhPT0gbnVsbCAmJiB0eXBlb2Ygbm9kZSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5vZGUsIGZpZWxkKSkge1xuICAgIHJldHVybiBub2RlW2ZpZWxkXTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
|
|
@@ -1,7 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The private L0 owner of own-slot writes. Selector validation belongs to
|
|
3
|
+
* pathOps: payload names (including `__proto__`) are ordinary data here.
|
|
4
|
+
* Neither operation flattens an existing own accessor or changes its flags.
|
|
5
|
+
*/
|
|
1
6
|
/**
|
|
2
7
|
* `target[name] = value`, preserving existing own-slot behavior while making
|
|
3
8
|
* a missing inherited name an OWN data property. Payload names such as
|
|
4
9
|
* `__proto__` are data, not setters or selector instructions. Shared by the
|
|
5
10
|
* record-serving and copy-on-write copies; this is not a public helper.
|
|
6
11
|
*/
|
|
7
|
-
export declare function putOwn(target: Record<string, unknown>, name: string, value: unknown): void;
|
|
12
|
+
export declare function putOwn(target: Record<string, unknown>, name: string | number, value: unknown): void;
|
|
13
|
+
/**
|
|
14
|
+
* Nested diagnostic writers require a missing slot to be CREATED, not merely
|
|
15
|
+
* assigned. Keep that contract separate from putOwn: an out-of-range typed
|
|
16
|
+
* array index is an assignment no-op, but cannot be defined as an own slot.
|
|
17
|
+
*/
|
|
18
|
+
export declare function setOwnValue(target: Record<string, unknown>, name: string | number, value: unknown): void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* merge.ts — the union merge the `merge` verb applies. A leaf (L0, imports
|
|
3
|
-
*
|
|
3
|
+
* only the own-slot writer): `deepSmartMerge`, the law every replay, fold and reader
|
|
4
4
|
* of a recorded `merge` row runs. Re-exported from `utils.ts`, so no importer
|
|
5
5
|
* moved.
|
|
6
6
|
*/
|
|
@@ -5,17 +5,16 @@
|
|
|
5
5
|
* segments (__proto__, constructor, prototype). Each operation's traversal
|
|
6
6
|
* contract is explicit below; merely using this module is not a sandbox.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* containers. It can follow an inherited object under an ordinary key.
|
|
8
|
+
* Selector operations read only own fields. Writers preflight the whole path
|
|
9
|
+
* before creating or copying any container, then place through putOwn.
|
|
11
10
|
* - nativeGet — DENIED check + hasOwnProperty at every step.
|
|
12
11
|
* - nativeHas — own-property existence only, including own denied names
|
|
13
12
|
* and own undefined values; it does not use the DENIED rule.
|
|
14
|
-
* - mergeContextWins —
|
|
15
|
-
*
|
|
13
|
+
* - mergeContextWins — own-enumerable source keys, DENIED check, own-only
|
|
14
|
+
* destination precedence. Inherited fields are never destination data.
|
|
16
15
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
16
|
+
* Diagnostic writers retain their distinct creation/merge laws in utils.ts,
|
|
17
|
+
* using the same isDeniedSegment predicate and shared own-slot writer.
|
|
19
18
|
*
|
|
20
19
|
* Paths may be dot-notation strings or pre-split (string|number)[] arrays.
|
|
21
20
|
*/
|
|
@@ -30,7 +29,11 @@ export declare function isDeniedSegment(segment: string | number): boolean;
|
|
|
30
29
|
* `defaultValue` instead of leaking Object.prototype / the Object constructor.
|
|
31
30
|
*/
|
|
32
31
|
export declare function nativeGet(obj: any, path: string | (string | number)[], defaultValue?: any): any;
|
|
33
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* Set an own path in a writer-owned container, creating missing intermediates.
|
|
34
|
+
* A denied selector is a no-op BEFORE any prefix is created. Inherited values
|
|
35
|
+
* and accessors do not participate; existing own accessors keep normal behavior.
|
|
36
|
+
*/
|
|
34
37
|
export declare function nativeSet(obj: any, path: string | (string | number)[], value: any): any;
|
|
35
38
|
/**
|
|
36
39
|
* Remove the own property at `path` in `obj` (the replay primitive for the
|
|
@@ -73,10 +76,10 @@ export declare function shallowCopy<T extends object>(container: T): T;
|
|
|
73
76
|
*
|
|
74
77
|
* `root` must already be owned. Walking down, every container the writer did
|
|
75
78
|
* not create (`owned` does not hold it) is replaced, in its parent, by its
|
|
76
|
-
* {@link shallowCopy}, which the writer then owns.
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
79
|
+
* {@link shallowCopy}, which the writer then owns. A denied segment anywhere
|
|
80
|
+
* refuses the entire walk before copying. Otherwise the walk stops at a
|
|
81
|
+
* missing / inherited / primitive intermediate (`nativeSet` makes a fresh
|
|
82
|
+
* own container from that point on). The leaf itself is never copied — the
|
|
80
83
|
* write replaces it.
|
|
81
84
|
*
|
|
82
85
|
* Cost: one shallow copy per container on the path that this writer has not
|
package/package.json
CHANGED